All Versions
224
Latest Version
Avg Release Cycle
-
Latest Release
-

Changelog History
Page 7

  • v1.13.8 Changes

    ### Campaigns

    • Son of the Black-Eye:
      • Balancing changes for 'Silent Forest'.
    • Under the Burning Suns:
      • New sprites for Quenoth Youth (Kaleh and Nym) and Human Commander.
      • Applied a color shift to the human units in S8 and S9 to give them a more unique look. ### Editor
    • Fixed a crash when placing units.
    • Restored the ability to preview different ToDs. Note this still does not work when invoked form the Custom ToD window.
    • Fixed editor sides not having the correct side number.
    • Redesigned Windows, Areas, and Sides menus.
    • The Windows menu will now display maps starting from 1 rather than 0. This is likewise reflected in the default map filename.
    • Scenario names are now displayed in more places if available. ### Formula Engine
    • Fixed garbage data showing up in stack traces in the event of an error.
    • Object types can now be used in contexts where previously only a list or map was accepted - for example in the filter() function. They will be treated as a map in such cases. ### Graphics
    • Fixed items not receiving ToD lighting.
    • Portraits for many Walking Corpse and Soulless race variants.
    • New animations: Dwarvish Fighter idle. ### Language and i18n
    • Updated translations: British English, Chinese (Simplified), Lithuanian, Slovak, Spanish ### Lua Engine
    • Add wesnoth.log_replay which exposes a little-used functionality of injecting arbitrary logging data into a saved game.
    • Small change to animator API - facing parameter replaced with target and required to be a space adjacent to the unit.
    • New modifiable theme attribute in wesnoth.game_config
    • New wesnoth.zoom() function allows changing the zoom level
    • The wesnoth.scroll function scrolls the screen by an offset, similar to [scroll]. For example, wesnoth.scroll(5, -2)
    • New is_local attribute in side proxy table allows you to detect whether or not the side is controlled by a network player. Note that use of this has the potential for OOS errors.
    • New wesnoth.music_list table which allows controlling the music playlist:
      • wesnoth.music_list[1] etc returns mutable information about a specific track on the playlist
      • #wesnoth.music_list counts the number of tracks on the playlist
      • wesnoth.music_list.current returns mutable information about the currently-playing track
      • wesnoth.music_list.current_i returns the index of the current track on the list. It is writable, allowing you to switch to any track on the list. This respects fade values.
      • wesnoth.music_list.all returns a copy of the playlist that can be stored in a variable.
      • wesnoth.music_list.play plays a specific track (as [music]play_once=yes)
      • wesnoth.music_list.add appends a track to the playlist (as [music]append=yes)
      • wesnoth.music_list.clear clears the current playlist
      • wesnoth.music_list.next fades out the current track and moves to a new track on the playlist
      • wesnoth.music_list.force_refresh forces any pending playlist changes to be immediately applied
      • wesnoth.music_list.volume attribute gets/sets the current music volume, as [volume]music=
      • Each track has modifiable shuffle, once, ms_before, ms_after attributes and read-only append, immediate, name, title attributes. They are also comparable with == or ~=
    • wesnoth.set_music is now deprecated, in favour of the above new API
    • New wesnoth.sound_volume function gets/sets the current sound volume, as [volume]sound=
    • New wesnoth.show_story function launches the storyscreen viewer
    • wesnoth.dofile now forwards any excess arguments to the file in the "..." argument
    • wesnoth.require can now load all modules in a directory and accepts some shortened paths, for example omitting the ".lua" file extension and searching in the current directory.
    • When you require a package that has no return value, you now get a table that errors on any access to it, rather than nil.
    • New wesnoth.create_weapon function to make a weapon that's not attached to a unit (which could be useful for animations)
    • New wesnoth.show_message function shows a simple alert dialog, possibly with a choice
    • New wesnoth.alert and wesnoth.confirm functions - simple shortcuts for the above.
    • Functions for working with hex locations have been added under wesnoth.map In particular, helper.distance_between is deprecated in favour of wesnoth.map.distance_between
    • The following existing functions now also work in plugins and map generators: wesnoth.log, wesnoth.get_time_stamp, wesnoth.get_image_size
    • Several error messages now point more accurately to the actual location of the error.
    • wesnoth.simulate_combat output has additional keys:
      • untouched (in first two return values) indicates whether the unit took any damage
      • number (in second two return values) contains the Lua index of the attack, as opposed to attack_num which contains the WML index.
      • weapon (in second two return values) contains the actual weapon userdata
    • New methods in location_set: of_triples, to_triples, random
    • New animations key in Lua unit proxy returns a list of defined flags for animation
    • New functional.lua file implements a number of higher-order functions from WFL
    • The length operator now works on translatable strings, returning the length of the translation.
    • wesnoth.set_side_variable and unit.variables can now clear variables
    • helper.get_variable_array and helper.set_variable_array now work on units and sides (pass a unit, side, or side number as an extra parameter) Note: helper.get_variable_proxy_array does not work on units and sides
    • helper.rand now has a second parameter that defaults to wesnoth.random
    • Add wesnoth.game_config.victory_music and wesnoth.game_config.defeat_music setters
    • Add wesnoth.game_config.scenario_id getter
    • wesnoth.set_next_scenario() was replaced with wesnoth.game_config.next_scenario setter/getter
    • wesnoth.set_dialog_value can now (un-) fold GUI2 tree view nodes ### Multiplayer
    • Fixed statistics being lost when reloading an MP game. ### Performance
    • Greatly speeded up switching between add-ons in the add-on manager (bug #25523) ### User Interface
    • Updated Attack Predictions dialog to GUI2.
    • Updated Story screen to GUI2.
    • Double-clicking an add-on now installs, updates, uninstalls or publishes it depending on the situation.
    • Fixed file path being truncated on the wrong side in the File Browser.
    • Improved Hotkey category sorting interface in Preferences.
    • Improved Addon Manager and MP Staging interfaces at low resolutions.
    • Fixed bug that allows you to use the minimap to bypass view locking
    • You can now change the theme (in preferences) while a game is in progress.
    • Fixed units moving after in game help exit. (#24644)
    • Fixed a bug that caused rapid announce messages to overlap each other. (bug #21634)
    • Fix buttons disappearing while menus are open.
    • Fix map labels disappearing when a dialog is open.
    • Improve tooltip placement.
    • Move recruit/recall to top of context menu
    • Add a hotkey to launch test scenarios from the titlescreen
    • Added a Cutscene and Minimal Cutscene theme for UMC authors to use.
    • Improve layout of MP Create at low resolutions.
    • Game Load screen now lists the gold and total number of units for each side.
    • Textboxes now have a blinking cursor when focused.
    • multi pages can now contain different types of pages ### WML Engine
    • Add base_income key to [store_side]
    • Fix issues with alpha animations on hidden units (#14503)
    • Extensions to GUI2 Canvas ([drawing] tag in dialogs):
      • New [round_rectangle] shape - a rectangle plus corner_radius
      • [circle] shape can now be drawn filled; color key is now border_color
      • [image] has new resize_mode=tile_center
      • Canvas colors can now be expressed as formulas. The formula must return the color as a list of its components, eg "([r, g, b, a])"
    • Empty tags are no longer written to the configs of [unit]s and [side]s.
    • New [change_theme] tag to change the theme mid-scenario
    • New [zoom] tag allows changing the zoom level from an event
    • [kill]animate=yes now plays victory animations if applicable
    • [kill] now supports [primary_attack] and [secondary_attack] for the animation
    • Fix [volume] not accepting 100% as the new volume.
    • New concat_to_* keys in unit_type inheritance allow amending keys
    • Accept [story] as ActionWML in events
    • Added a ~NO_TOD_SHIFT() ImagePathFunction which can be used on terrain and item images to prevent them from being affected by ToD lighting.
    • [unit]placement=name is now [unit]location_id=name and also honours the new overwrite and passable keys, deprecating placement=map_overwrite etc.
    • New zoom_levels key in [game_config] defines the allowed zoom levels.
    • The default color list is now defined via a default key in [color_range], rather than the default_color_list key in [game_config][colors].
    • Standard Unit Filter has new ability_type_active and trait keys
    • Standard Weapon Filter has new special_active key
    • [animate_unit] now raises an error if the flag key is missing
    • Fix [set_variable][join] not working with translatable strings
    • [sound_source] now starts playing the sound immediately
    • New voice key in [message] and [story][part]
    • [objectives] now supports delayed_variable_substitution=yes and also delayed substitution with $|variable syntax.
    • Items in [options] now support container variables again. ### Miscellaneous and bug fixes
    • Fixed base animation showing on walking corpse & soulless bats (bug #25673)
  • v1.13.7 Changes

    ### AI

    • Fix a performance regression in complex combat situations such as the "Oath of Allegiance" UMC campaign.
    • Fix some Micro AIs and AI helper functions not working correctly for AI sides under shroud
    • New function ai_helper.find_path_with_shroud() ### Campaigns
    • Eastern Invasion:
      • In 'Weldyn Besieged', redesigned the way in which revealing the identities of the liches works.
        • Descent Into Darkness:
      • Fixed certain units not having the 'guardian' special in 'Descent into Darkness'.
    • Heir to the Throne:
      • Fixed bug allowing the wrong person to receive the Sceptre of Fire.
      • Fixed inconsistencies in Li'sar's sprites and animations when she has the scepter.
      • New death animation for Asheviere.
    • Secrets of the Ancients:
      • New campaign added to mainline (Intermediate level, 21 scenarios).
    • The Hammer of Thursagan:
      • New sprites for Dwarvish Witness line.
    • Under the Burning Suns:
      • Fixed difficulty levels with the original units not working.
      • New sprites and animations for Spider Lich.
      • Various balancing changes, bug fixes and improvements to the new units.
        • Major changes:
          • Kaleh and Nym movement points increased from 5 to 6.
          • Moon Singer branch removed.
          • Added winged lvl4 advancement for Quenoth Druid.
          • Support ability now only lowers adjacent upkeep costs by 1. ### Graphics
    • New or improved sprites: Royal Warrior, Walking Corpse line wolf variation.
    • Improved terrain graphics: lava, volcano, lightbeam.
    • Improved the fake map border terrain so that it now connects with the real map borders and can better be used to change the apparent shape of the map.
    • Smoother fade transitions between differently colored time areas.
    • Adjacent castles of different types now have fewer glitches between them.
    • Fixed glitches between various mountain tiles (introduced in 1.13.3).
    • Fixed units getting submerged on some bridge types when placed over water.
    • Updated Mermaid Initiate portrait. ### Language and i18n
    • Updated translations: British English, Czech, German, Portuguese (Brazil), Scottish Gaelic ### Lua API
    • New wesnoth.set_side_id function can change flag, color, or both; it automatically updates cached flag info for you (but you may still need to redraw to see it).
    • The wesnoth.place_shroud and wesnoth.clear_shroud functions can alter shroud data for a single side. They accept a list of locations, a shroud data string, or the special value "all".
    • New wesnoth.is_fogged and wesnoth.is_shrouded calls test the visibility level of a hex for a particular side.
    • New wesnoth.create_animator call produces an object that can be used to run animations for a group of units
    • New Lua API functions for altering AI:
      • wesnoth.switch_ai replaces the entire AI with a definition from a file
      • wesnoth.append_ai appends AI parameters to the configuration; supports goals, stages, and simple aspects. (Aspect tags are not fully parsed; only the id and facet subtags are used.)
      • wesnoth.add_ai_component, delete_ai_component, change_ai_component These do the work of the [modify_ai] tag for a single side.
    • Side proxy changes:
      • flag and flag_icon are never an empty string
      • New mutable keys: suppress_end_turn_confirmation, share_vision
      • New read-only keys: share_maps, share_view num_units, num_villages, total_upkeep, expenses, net_income
      • Existing keys made mutable: shroud, fog, flag, flag_icon
    • wesnoth.scroll_to_tile now accepts a third boolean argument - if true, the scroll is skipped when the tile is already visible onscreen.
    • The config accessors in the helper module now give a sensible error message if something other than a config is passed as the first argument.
    • wesnoth.deselect_hex no longer deselects units; it only unhighlights the hex.
    • wesnoth.select_unit with no argument (or nil argument) now deselects any unit.
    • Fix lua side:matches always iterating over all units on the map. ### Multiplayer
    • New maps: 2p Clearing Gushes, 2p Hellhole, 2p Ruined Passage, 2p Ruphus Isle, 2p Swamp of Dread, 2p The Walls of Pyrennis, 2p Tombs of Kesorak, 4p Bath of Glory, 4p Geothermal.
    • Updated maps: Fallenstar Lake. ### Units
    • Several changes to names of attacks:
      • Shock Trooper, Iron Mauler, Mage of Light: maces and morning stars changed to flails.
      • Arif, Ghazi, Khalid, Shuja: long sword changed to sword.
      • Mighwar, Monawish: long sword changed to longsword.
    • Updated unit descriptions: Orcish Grunt line, Merman Fighter line, Sergeant, Lieutenant, General, Peasant, Royal Warrior, Ancient Lich, Dwarvish Steelclad.
    • Changed (mainly reduced) recruit costs of many high-level units:
      • Dwarvish Lord, Direwolf Rider, Troll Warior, Banebow, Draug.
      • Elvish Avenger, Champion, Hero, High Lord, Marksman, Marshall, Ranger, Sharpshooter.
      • Mage of Light, Fugitive, Huntsman, Ranger.
      • Batal, Hadaf, Mighwar, Mufariq, Rasikh, Shuja, Tineen. ### User Interface
    • List boxes now keep the selected item visible when you change the sorting option.
    • The Addon Manager has a brand new interface.
    • Modification selection is now always available when selecting a SP campaign.
    • Scrolling the Editor palette no longer also scrolls the map.
    • Removed the old GUI1 MP screens.
    • Ensured dialogs with unit preview panes start with some extra space.
    • Fixed an issue where certain long labels would cause scrollbars to appear.
    • Greatly reduced the number of zoom levels available.
    • Experimental change: removed scrollbar up/down buttons.
    • Converted Hotkey Bind popup to GUI2.
    • Fixed TC color in Faction Select sometimes not matching the side's selection.
    • Ensured sides are always ordered by index in MP Staging. ### Wesnoth Formula Engine
    • New str_upper and str_lower functions for case transformations ### WML Engine
    • Update [store_side] to store everything in corresponding wesnoth.sides[*].__cfg and additional keys: num_units, num_villages, total_upkeep, expenses, net_income
    • Removed LOW_MEM option when building.
    • Add color= attribute to [floating_text]
    • Add ~CHAN() IPF that allows altering images according to formulas It takes up to 4 WFL formulas, one for each channel (red, green, blue, alpha); each works the same as the ~ADJUST_ALPHA() formula.
    • New ability_type key in standard unit filters matches if the unit has any ability of the specified type (tag name).
    • Terrain flags "_border" and "_board" are now automatically set for every tile, indicating whether it is on the map border or not.
    • SUF type_tree renamed to type_adv_tree for consistency with [hide_help]
    • [message]s no longer trigger a scroll if the unit is onscreen.
    • Removed the ~DARKEN() and ~BRIGHTEN() IPFs.
    • {SOUND_POISON} and {SOUND_SLOW} have been deprecated and replaced with empty macros.
    • [tunnel] now accepts delayed_variable_substitution=yes/no.
    • [on_redo] is now deprecated and does nothing if used ### Miscellaneous and bug fixes
    • Fixed severe lag/freeze on slow PCs (bug #25356)
    • Updated wmlscope to handle the square braces syntax in file paths
    • Fixed an issue preventing quick replay when joining multiplayer matches
    • Resolved crash on Help when font scaling set to 115% or greater (bug #25292)
    • Resolved crash when viewing Help in CJK languages (bug #253334)
    • Fixed [campaign][option] tags not being properly considered.
    • Fixed an issue where team names could get corrupted in SP.
    • Zoom levels no longer get reset between loading games.
    • Do not load the Markov name generator if a CFG generator could be loaded.
    • Exit "quick replay" mode in MP games once the game is caught up.
  • v1.13.6 Changes

    ### AI

    • Added new high_xp_attack candidate action to default AI. This CA performs attacks on enemy units so close to leveling that the default AI's combat CA would not attack them.
    • New Micro AI: Assassin Squad AI
    • Fix bug #23720, AI units with max_moves=0 do not attack.
    • Fix bug #22179: [disable] weapon special is ignored by AI. A second instance of the AI also ignoring this special under different circumstances has also been fixed.
    • Fix bug of Experimental AI recruiting sometimes failing under shroud
    • Fix some mainline campaigns custom AIs not working due to syntax changes after the AI refactoring for Wesnoth 1.13.5 (e.g. bug #25123)
    • Significantly improve move times for AI sides with many guardians
    • Micro AIs, other Lua AIs and ai_helper.lua utility functions:
      • Correctly and consistently deal with invisible units
      • New ai_helper functions get_attackable_enemies, get_visible_units, is_attackable_enemy, is_incomplete_move, is_incomplete_or_empty_move, is_visible_unit and robust_move_and_attack
      • Renamed function ai_helper.to_triple to LS_to_triples for consistency with other functions
      • Some internal changes to fix rarely occurring bugs and to improve robustness and speed ### Campaigns
    • Eastern Invasion:
      • Fixed broken village encounters.
      • Tweaked the balance of Scenario 2.
    • Heir to the Throne:
      • Reworked the map and added new AI behavior in 'The Princess of Wesnoth'.
    • Delfador's Memoirs:
      • S9: Resolved inability to end level even when Delfador has the Staff (bug #24951)
      • S17: Resolved Wesnoth units returning to recall list not being healed properly (bug #24952)
      • S19: Resolved undead veterans victory condition not working properly.
    • Under the Burning Suns:
      • Redesign of all desert elf units (currently optional, selectable through the difficulty menu). ### Graphics
    • Improved or new terrain graphics:
      • New wooden floor variation and transitions.
      • New aquatic encampment.
      • New aquatic castles.
      • Reworked stone walls so they take up less space and improved transitions.
      • Added Wooden and Rusty Gates.
    • Improved connections between castle and wall terrains, allowing castles and keeps to be placed adjacent to walls without glitches in most cases.
    • New sprite for Tentacle of the Deep.
    • Tweaked colors for all time schedules. ### Language and i18n
    • Updated translations: Finnish, Polish, Russian ### Lua API
    • Upgrade to Lua 5.3.3+ Consult http://www.lua.org/ for a full change list and updated documenation.
      • bit32 functions removed
      • utf8 support added
    • Added new function wesnoth.fire_event_by_id to fire an event with a given ID.
    • Added new function wesnoth.remove_modifications, which removes applied modifications of the chosen type from a unit. The most efficient use is to remove all modifications with a specific duration value. Also callable as u:remove_modifications.
    • The built-in conditionals have_unit, have_location, and variable are now present in the wesnoth.wml_conditionals table. This means they can be directly called, extended with new features, or even overridden with custom implementations.
    • New recall_filter field in unit proxy returns the [filter_recall] config
    • New variations field in unit_type proxy returns a list of unit variations Each member is a full unit_type describing that variation. The table is iterable with pairs().
    • Lua side, unit_type, and unit attack proxies can now be compared with == with identity semantics. (Previously, each time such a proxy was obtained, it would produce a new object that did not compare equal to any others.)
    • Lua unit_type lists (wesnoth.unit_types and unit_type.variations) are now countable with the Lua length operator.
    • Lua dialog functions now support the stacked widget and the unit preview pane
    • New wesnoth.show_menu function shows a dropdown menu at the mouse location
    • Lua attack proxy has new read_only field which is true for unit_type attacks If true, attempts to change the attack will result in an error.
    • The name field in Lua attack proxy is now writable
    • The attacks field in the Lua unit proxy is now writable Specifically, attacks may be replaced, appended (by assigning a new ID or the next valid index), or removed (by setting a field to nil).
    • wesnoth.show_message_dialog supports second_portrait and second_mirror keys in its first argument, which produces a dialog with two portraits.
    • The callable userdata returned by wesnoth.textdomain can now be called with an additional two parameters (a plural string and a count) in order to support gettext plurals.
    • New matches function in team and unit attack metatables, which test if the side or weapon matches a filter.
    • helper.lua metatables are now protected from external access; getmetatable() will return a descriptive string instead of the metatable.
    • ai.aspects.attacks no longer returns a full attacks analysis. Instead it returns a table with "own" and "enemy" keys containing the valid units for attackers and targets. The function ai.get_attacks() still returns the full attack analysis.
    • Aspect fetcher functions (eg ai.get_aggression()) are now deprecated in favour of the ai.aspects table.
    • The location_set iter and stable_iter functions can now be called with no argument. In this case, they return an iterator suitable for use in a for loop.
    • New wesnoth.wml_matches_filter function takes a WML table and a WML filter and tests if the table matches the filter. The filter syntax is as with [filter_wml]. ### Music and sound effects
    • Added a preference to pause the music when the game loses focus.
    • Now the music fades out between scenarios. ### Networking
    • Ported campaignd to use boost.asio instead of SDL_net.
    • Removed unit tests for old networking stack. This was the last part that depended on SDL_net ### Performance
    • When a heuristic determines that it's probably faster, the game predicts battle outcome by simulating a few thousand fights instead of calculating exact probabilities. This method is inexact, but in very complex battles (extremely high HP, drain, slow, berserk, etc.) it's significantly faster than the default damage calculation method. ### Units
    • Changed the sound for the melee attack of the Loyalist Bowman, Orcish Crossbowman and Orcish Slurbow. ### User Interface
    • Trait descriptions in the help are now generated. (This makes user-defined traits show up in the help as well.)
    • Fix game map sometimes showing and buttons sometimes not rendered properly in story screen (bug #24553)
    • Improved font rendering on Windows.
    • Redesigned gamestate inspector window.
    • Recall dialog no longer shows units that no leader on the map can recall (due to the [filter_recall] not matching)
    • Weapon specials only gained through AMLAs now get a help topic
    • The "Cores" button on the title screen is now hidden if no cores other than the default are installed
    • Redesigned game dropdown/context menu appearance
    • New categories bar in hotkey preferences allows you to filter hotkeys
    • Fix issue with the title screen not redrawing when the window size or fullscreen setting changes with a dialog open over it.
    • Restored descriptions for choices in combobox-based Advanced Preferences entries (lost in 1.13.3).
    • When using the --wconsole option, the game now prints a prompt in the event of a fatal error to avoid closing the console before the error can be seen.
    • Restored GUI2 textbox selection highlight lost in version 1.13.3.
    • Added a "Draw Number of Bitmaps" option to the map editor, for terrain graphics diagnostics.
    • Ported file chooser dialog to GUI2, and redesigned it to include a bookmarks bar with predefined and user-defined shortcuts.
    • Tweaked the border/groove color scheme on textboxes and sliders to better reflect their state and mimic window and button borders.
    • The following dialogs have been converted to GUI2: Unit Recall, Unit List, Game Stats, MP Create, MP Game Lobby, Faction Select, Unit Advance.
    • Improved UI responsiveness.
    • Tab completion in the Lua console is improved. It can now handle paths containing square brackets (though it won't complete them) and will not offer keys that are not valid identifiers. ### WML Engine
    • Added ignore_special_locations=yes|no, default no, to [terrain_mask] to ignore the special locations given in the mask, leaving all those on the underlying map unchanged.
    • [terrain_mask] starting locations and special locations are relative to the mask. Existing names replace any in the underlying map regardless of their location. Each name as a unique location; but a location may have any number of names. While a map/mask can give only one name per location; stacking masks allows multiple names. Names cannot be removed.
    • Added {HAS_NO_TURN_LIMIT} macro for objectives
    • New attributes for [message] with [option]
      • Added variable= to [message]: if specified, gives variable name to receive the [option] index (1..n) selected only used if any [option] appear
      • Added value= to [option]: if specified, gives value to store in variable instead of index number, only used if variable= appears in [message]
      • New second_unit, second_image, second_mirror attributes for showing two portraits on a single message.
    • New attributes for [role]:
      • search_recall_list=yes|no|only(default yes) controls where to look
      • reassign=yes|no(default yes) if no, check for a unit and do not assign to another
      • [auto_recall] sub-tag, if assigned to recall list, gives [recall] attributes (no SUF)
      • [else] sub-tag, WML to execute if no unit found for the role
    • New help_text= key for [trait] to set the description displayed in the help.
    • Added tag id= [fire_event], which allows raising events by id
    • [modify_unit] now understands [effect] tags, which it applies directly. This replaces the use of [object] with no_write=yes (which will be removed in the next release).
    • Add [object]take_only_once=yes|no (default yes) - if set to no, automatic tracking is disabled for this object (allowing it to be taken multiple times even if it has an id).
    • New [remove_object] tag which removes applied [object]s from matched units; it can filter on the entire [object] WML. The most efficient use is to remove all objects with a specific duration value.
    • Renamed [foreach] variable= to array=
    • Renamed [foreach] item_var= to variable=
    • Fixed several bugs in the name generation of the map generator
    • Fixed issues with using [endlevel] in victory/defeat events
    • The {MAGENTA_IS_THE_TEAM_COLOR} macro is no longer needed in [unit_type] It is now the default behaviour unless overridden with the flag_rgb key.
    • New key type_tree in unit filters - similar to type, but also matches any possible advancements of the specified unit types.
    • [options][combo] in [scenario], [modifications], etc has been renamed to [choice] (which is more accurate). The old name still works for now.
    • ~ADJUST_ALPHA() image path function now takes a WFL formula. It can access the following variables: x, y, width, height, red, green, blue, alpha. It no longer accepts a percentage (use ~O() for that).
    • Fixed [rule] in [terrain_mask] ignoring use_old=yes
    • Fixed filter returning invalid locations if invalid locations were given in a variable that was used with find_in=
    • Moves cave map generator to lua. scenario_generation=cave is now deprecated and will be removed soon. The Lua version has feature parity with the old one, but the syntax is a little different. It supports both map_generation and scenario_generation.
    • Tunnel functionality was expanded and the default behavior was altered in order to make moves through tunnels consistent with all other moves:
      • Vison through tunnels is now possible and enabled by default. It can be turned off by setting allow_vision=no in the [tunnel] tag.
      • Own and allied units on tunnel exits do not block the tunnel any more. The blocking behavior can be reenabled by setting pass_allied_units=no in the [tunnel] tag.
    • Added text_alignment= key to [story][part] to specify horizonal alignment of text.
    • [set_variable] now supports abs= (absolute value), power= (raise to power) and root= (extracts root, 'square' is the only value currently supported) keys
    • Individual [terrain_graphics] rotations can now be skipped entirely by using "skip" in the rotations= list.
    • WML macros can now include optional arguments with default values that the caller can override. ### Miscellaneous and bug fixes
    • A new way to make units invulnerable for debugging: select the unit and type ";unit invulnerable=yes". This method operates by decreasing the opponent's hit chance to zero: as a result, it doesn't slow down damage prediction unlike the "increase HP to ridiculous levels" method.
    • The ;choose_level command now works in the tutorial and in [test] scenarios
    • Fixed a stray ; character appearing pre-entered in the command console.
    • Fixed bug in wesnothd that was causing server crashes if game with multiple network and local players was ran.
    • Added a tab to run the wmlxgettext tool to GUI.pyw
    • Fixed problem with Spectre's hitpoint bar positioning.
    • Fixed crash when unit with planned actions is killed before those actions are completed (bug #20071)
    • Show correct number of attacks in case of swarm weapon special (bug #24978)
    • Fixed bug that icons of buttons under the minimap disappeared when the player opened and closed a menu.
    • Correct unit recall count in statistics when undoing a unit recall (bug #25060)
    • Add tip to recall units instead of recruiting them if costs exceed 20 gold (recruitment costs)
    • Resolve sides in map editor not having a proper side number and subsequently causing a crash upon editing (bug #25093)
    • Avoid rare cases of mini-map producing a divide-by-zero error (bug #25155)
    • [filter_vision]: fix bug of filter not matching own/allied hidden units
    • Prevent crash on quitting scenario with planned recruits present (bugs #24022/25193)
  • v1.13.5 Changes

    ### Campaigns

    • An Orcish Incursion:
      • Linaera can recruit Mage, and cannot recruit Elves
    • Heir to the Throne:
      • Add journey tracks for 19c/20b path.
      • New sprites for Li'sar.
      • S10: Clarify objectives and change egg image on capture.
      • S19c: Removed the undead and the swamps.
    • Tutorial
      • Improve translatability for languages with gender-dependent pronouns
      • S1: Fix unit being deselected after the select message
      • S2: Highlight (outline) talked-about locations
    • Legend of Wesmere
      • S3: fix bug which silently disabled Urudin retreat AI ### Graphics
    • Updated generic portrait of Mermaid Initiate.
    • Added generic portrait for Giant Spider. ### Language and i18n
    • Updated translations: British English, Galician, German, Italian, Japanese, Polish, Portuguese, RACV, Russian, Scottish Gaelic, Spanish ### Networking
    • Reworked the multiplayer server to use asio functions for networking operations instead of SDL_net, thus it no longer depends on SDL_net and SDL.
    • The client now uses boost::asio for communication with wesnothd too. ### Removed support for SDL 1.2. SDL 2 is now the only supported version. ### Terrains
    • Changed terrain code of Desert Mountains from Mdy to Mdd. ### Editor
    • Allow to set special locations in the editor which can then be read by wml. ### User Interface
    • Fix flickering caused by tooltips, closing windows and tabbing into the game (bug #24532)
    • Various design improvements to GUI2 widgets
    • New simpler GUI2 loading screen
    • New colored cursor graphics
    • Fixed Mage of Light halo appearing in the top-left corner of the screen while the mage is moving (bug #23712).
    • Fixed Observers icon appearing behind other top bar items in MP games on horizontal UI resolutions < 1024 (bug #24455).
    • Fixed ToD schedule progress indicator appearing behind other top bar items on vertical UI resolutions < 600.
    • Improved the dialog for choosing what to do when a player leaves in multiplayer.
    • The side overview now also shows allied human sides in sp even if they aren't discovered yet
    • Added an option to disable the loadingscreen animation since it caused bugs in some configurations.
    • Added a gui method to activate loggers (Preferences -> Advanced -> Logging) loggers activated in the gui print just like loggers activated in the command line (i.e. messages appear in the console)
    • The Lua console screen now has a clear button
    • Fix bug #24762: Editor actions are out of sync after resizing.
    • Increased the font size for text in buttons.
    • Changed unit help topics to use smaller images on smaller monitors. ### WML engine
    • Add color= attribute to [message].
    • Add [else], search_recall_list=, auto_recall= to [role]
    • Fix some issues with [foreach]
    • Fix some issues with backstab-like weapon specials
    • Support [effect]times=
    • Add highlight=yes|no to [scroll_to], [scroll_to_unit], [message] Defaults to no in the first two cases, yes in the third If yes, the target hex is outlined.
    • New ~SCALE_INTO(w,h) IPF which preserves aspect ratio, using bilinear interpolation scaling.
    • New ~SCALE_INTO_SHARP(w,h) IPF which preserves aspect ratio, using nearest neighbor scaling.
    • Support delayed_variable_substitution= in [on_undo], [on_redo] Note that this means $unit.x and $unit.y may not reflect the unit's true location, so using [unstore_unit] on $unit may have unexpected effects. This applies to $second_unit too. The $x1, $y1, $x2, $y2 variables work fine though, so in most cases they can be used instead. Anything else in $unit or $second_unit is also fine.
    • formula= in SUF can now reference $other_unit via the formula variable "other"
    • formula= now supported in location, side, and weapon filters
    • Weapon filters now support number, parry, accuracy, and movement_used
    • New [has_attack] in standard unit filters; supercedes has_weapon= and uses full weapon filter.
    • lua_function=var.member now works in SUF; however, 'var' still needs to be a global variable.
    • Added new keys name_generator, male_name_generator and female_name_generator for the [race] tag to declare a context-free grammar to describe how names are derived
    • Modification tags in [modify_unit] now support delayed_variable_substitution (This means [advancement], [object], and [trait] tags.)
    • All looping tags now give an error if they contain no [do] tag. (They may contain multiple [do] tags, however.)
    • Add [message]image_pos=left|right, which mostly supercedes ~RIGHT()
    • For [core] authors: New keys for game logo (game_logo, game_logo_background)
    • AiWML:
      • Filters within [micro_ai] can now use $this_unit, which was previously impossible due to the config being prematurely parsed.
      • Simplified aspect syntax which works for all aspects, present and future:
        • All aspects with simple values can be specified as key=value
        • Except attacks, all aspects with complex values have a simple tag form containing only the aspect value (e.g. [avoid])
        • All aspects, simple and complex, can be specified using a tag named by the aspect, whose contents is the same as a corresponding [facet]
        • The full [aspect] and [facet] syntax also still works
      • [ai] configs no longer recognize the version= key
      • ai_algorithm key now selects a preset AI; possible values include "ai_default_rca", "experimental_ai", and "idle_ai", but custom AIs defined by eras or modifications with an [ai] tag can also be used
      • [leader_goal] now automatically sets facet ID for auto_remove (Only if using simplified syntax; in full syntax, the ID must still be specified in two places.)
      • The AI config in the gamestate inspector is now split into multiple sections according to the type of component.
      • The following deprecated components have been removed:
        • recruitment stage (name=ai_default::recruitment)
        • old recruitment candidate action (name=ai_default_rca::aspect_recruitment_phase)
        • old simple move-to-targets candidate action (name=ai_default_rca::simple_move_and_targeting_phase)
        • number_of_possible_recruits_to_force_recruit aspect
        • recruitment_ignore_bad_combat aspect
        • recruitment_ignore_bad_movement aspect
        • The recruitment aspect has been removed from the engine; however, "recruitment" is now accepted as a synonym for "recruitment_instructions". Old code should work without changes.
        • [goal]name=protect_my_unit
      • The following experimental components have been removed: (Most of these were broken or non-functional)
        • Experimental recruitment candidate action This worked, but was worse than the default recruitment.
        • Global fallback candidate action
        • Akihara recruitment candidate action
        • Fallback stage (functional but useless)
        • Strategy Formulation with RCA stage This worked, but was slow and unmaintained. If a maintainer steps up, it may be restored later.
        • Several of the development AIs available in debug mode in the multiplayer setup menu
      • The "Strong AI" has been renamed to "Default AI (RCA) with Alternate Recruiting" and is now only available in debug mode.
      • Lua components (goals, aspects, stages, and candidate actions) now support an [args] subtag, which passes any sort of WML data to the Lua code - this works similarly to [args] in a [lua] tag, though not quite identically.
      • Aspect syntax with [aspect] tag has been fully generalized so that [aspect], [facet], and [default] are all exactly the same in terms of what contents they expect. (Except that [facet] additionally takes turns= and time_of_day=.) The most useful consequences of this:
        • You can nest a [facet] inside another [facet] if the outer one has name=composite_aspect
        • You can define a [facet] with the Lua engine
      • invalidate_on_tod_change= has been implemented for aspects. It applies when the bonus resulting from time of day modifiers (excluding any illumination abilities) changes at any location on the map. Thus, it occurs on average less often than invalidate_on_turn_start and may be best combined with an explicit invalidate_on_turn_start=no.
      • Minor shorthands have been introduced in the recruitment_instructions aspect:
        • [pattern] tag is like [recruit] with pattern=yes
        • [total] tag is like [recruit] with total=yes
        • If no [recruit] tag is present, a default is added with importance=0. This means recruitment will happen even with only [limit] tags.
      • Extensions to [modify_ai]:
        • [modify_ai]action=change works on aspects, using path=aspect[id]. Useful if you need to change all the facets at once, but note that it also wipes the [default] facet.
        • The [default] facet can be referenced as facet[default_facet]. This should rarely be needed, but is there in case it is. It also makes them easily identifiable in the inspector.
        • Automatically copy over the id= with action=change, if the new component did not specify one.
        • It can add, remove, and change jobs and limits in the recruitment_instructions aspect. The path to use for this is aspect[recruitment_instructions].facet[facet_id].recruit[recruit_id]. (For a limit, replace "recruit" with "limit".) The [recruit] and [limit] tags now support id keys for this.
    • Added side_name= attribute in [side], it's now no longer possible to specify the current_player attribute in the [side] wml.
    • unit filters, specially in wesnoth.get_units now have a limit= attribute to limit the number or matched units.
    • Added new attribute "registered_users_only" to MultiplayerServerWML which indicates that only registered users should be allowed to join the game
    • wesnoth now does a stricter check for unit type ids.
    • In multiplayer, victory events now fire at the end of the scenario if at least one human player has won, this fixes OOS in mp campaigns. ### Lua API
    • wesnoth.match_unit can now take a location (rather than a unit) as the optional third parameter. This will cause the filter to consider the unit to be on that location instead of its actual location. This even works for units on a recall list.
    • wesnoth.highlight_hex is no longer deprecated, but its effect is slightly different from the old one. It outlines a hex, nothing more.
    • wesnoth.select_hex is now deprecated in favour of the new wesnoth.select_unit (or u:select). The effect is almost the same (with the exception that it does not outline the hex if true is passed as the second argument), but this name change was done to emphasize that it acts on a unit, more than a location.
    • New wesnoth.set_time_of_day function which sets the current time of day, taken either as the time ID (eg "second_watch") or the index of the time in the overall schedule (eg, 1 would be dawn in the default schedule). Optional second argument takes a time area ID, to set local instead of global time.
    • New wesnoth.add_fog and wesnoth.remove_fog functions allow changing fog on the map. The [lift_fog] and [clear_fog] tags now use this.
    • New wesnoth.add_sound_source, wesnoth.remove_sound_source, and wesnoth.get_sound_source functions to allow manipulation of sound sources. The [sound_source] and [remove_sound_source] now use these.
    • New wesnoth.log function for printing log messages. The [wml_message] and [deprecated_message] tags now use this.
    • New wesnoth.name_generator function builds a name generator and returns it as a callable userdata. Both the original Markov chain generator and the new context free grammar generator are supported
    • New wesnoth.get_end_level_data() function which can be called in a victory, defeat, or scenario_end event to access (or change) how the scenario ends.
    • Fix wesnoth.erase_unit failing if the unit was on a recall list.
    • WML tables defined in Lua now accept string keys with array values (where "array" is a table whose keys are all integers). This joins the elements of the array with commas and produces a single string value. eg {x = {1,2,3}} is equivalent to {x = "1,2,3"}.
    • wesnoth.effects table can now be used to alter the behaviour of built-in effects - for example, to add a new feature to [effect]apply_to=attack. It also now supports effect descriptions, for use by the [trait] tag.
    • Additional fields in unit proxy:
      • usage, cost - self-explanatory
      • traits - list of the IDs of all traits
      • abilities - list of the IDs of all abilities
    • Additional fields in table returned by wesnoth.get_terrain_info:
      • icon, editor_image, light
    • Additional fields in unit type proxy:
      • race, id, alignment
      • attacks, which returns the same thing as unit.attacks
      • abilities, same as unit.abilities
    • Additional field in side proxy:
      • faction (read-only), faction_name (read-only)
    • LuaAI:
      • The table returned by check_*() now has a "result" field which gives a description of the action's result; similar to "status" but more descriptive.
      • Target tables now use a descriptive name for "type", instead of an integer. This applies to the elements of the table returned by ai.get_targets() and also to the elements of tables returned by Lua goals. (However, Lua goals that used integers will continue to work for now.)
      • There are some compatibility-breaking changes to Lua candidate actions - see the release notes or the wiki for full details.
      • Lua AI code can now access the AI routines through the global ai object. This object is only accessible to AI code; it does not exist in the general Lua global scope.
      • When executing Lua goals, aspects, or candidate action evaluations, the ai is in "read-only" mode - the read_only key is set to true, and functions that change the gamestate, such as ai.attack(), are missing from the table. (ai.check_*() functions are still present.)
      • The ai.aspects table provides access to every aspect known by the engine, including several that previously did not have corresponding ai.get_*() functions. You access them as ai.aspects.avoid, for example. The table is read-only and raises an error if you attempt to write to it.
      • The way to create Lua candidate actions has changed a little. Old code will require minor changes.
      • New wesnoth.micro_ais table contains the loaders for all Micro AIs. New loaders can easily be installed by add-ons. See any built-in micro AI (in ai/micro_ais/mai-defs/) for an example of how to do this.
      • The attacks aspect can now be defined as a Lua aspect. The code should return a table with keys "own" and "enemy", each of which may be either a unit filter table or a function which takes a unit as a parameter and returns true or false.
    • Added wesnoth.game_events.on_mouse_move/on_mouse_actions callbacks (fr #22635)
    • Added wesnoth.special_locations
    • [lua] tags now also support the [args] subtag outside events.
    • added lua_function= attribute in location filters
    • Added on_event.lua which is an eaiser to use wrapper for wesnoth.game_events.on_event ### Multiplayer
    • Hornshark Island: simplified multiplayer faction determination
    • Added "Registered users only" checkbox to multiplayer configuration dialog which when checked, only allows registered users to join the game ### Wesnoth formula engine
    • Formulas in unit filters can now access nearly all unit attributes The following attributes were renamed (old names still work, for now): leader -> canrecruit total_movement -> max_moves movement_left -> moves states -> status
    • Nearly all unit type, side, weapon, and terrain attributes available to Lua code are now also exposed to WFL. The exceptions are mainly translatable strings.
    • Unit and side WML variables are now accessible under "wml_vars". Since WML variables don't easily translate to formula variables, the special attributes __all_children, __children, and __attributes provide specialized views of the variables config as a list, string-list map, and string-value map, respectively.
    • The 'special' attribute of weapons was renamed to 'specials', and it now contains the special IDs rather than their translateable names.
    • New syntax features:
      • String interpolation syntax. Within a formula string (enclosed in 'single quotes'), the syntax [some_formula] interpolates the result of the inner formula into the string. (The simplest use case is interpolating the values of variables.)
      • String can now escape special characters: ['] single quote, [(] open square bracket, [)] close square bracket
      • New 'in' operator which tests if a list contains an item or if a map contains a key.
      • New concatenation operator a..b which works on strings and lists
      • New range operator a~b which produces a list of consecutive integers This can also be used for "list slicing" - eg my_list[3~5] returns a new list containing elements 3 through 5 of my_list.
      • Lists can be used as an index for a list. This is "selection indexing" and returns a new list with only the elements specified by the indexing list.
      • Function definitions (using the def keyword) are now supported in all formula contexts, which means that they can be used outside FormulaAI. However, non-FormulaAI functions are currently local to the formula that declares them.
      • Maps containing string keys that are valid identifiers can now be indexed with the dot operator instead of the indexing operator.
      • Strings can now be indexed via 'string'.char[n]. Also supported are 'string'.word[n] and 'string'.item[n] (the latter splits on commas)
    • Changes to core functions:
      • head() takes an optional argument - if present, a sublist is returned.
      • abs(), max(), min() now work on decimal numbers
      • reduce() function can specify an optional initial accumulator This will be returned for an empty list instead of null.
      • substring() function can now accept a negative size parameter This counts backwards from the specified offset A size of -1 is the same as 1.
      • if() can take two arguments; returns null if the condition is false
      • tomap() will now invert the effect of tolist()
      • debug_print() now shows in chat area if debug mode is on
    • New core functions:
      • Trig functions tan, acos, asin, atan have been added. (Sin and cos existed since at least 1.9 but were undocumented until very recently.)
      • Other common math functions - root(), sqrt(), cbrt(), log(), exp()
      • hypot(x,y) function calculates sqrt(x*x+y*y) with minimal error
      • pi() returning the circle ratio
      • tail() - opposite of head()
      • reverse() function for strings and lists
      • zip() function - converts [[1,2,3],[4,5,6]] to [[1,4],[2,5],[3,6]]
      • take_while() function returns items from a list until the first one that fails a condition
      • find_string() locates a substring within a string
      • replace() replaces a sequence within a string
      • type() function checks the type of a formula result
      • distance_between() - this was promoted from FormulaAI to core
      • pair() function that produces a key-value pair suitable for passing to tomap() - this also means key-value pairs are now serializable (relevant in FormulaAI)
      • sgn(), trunc() and frac() functions for decimal numbers
    • Map generator engine:
      • makes now use of the new context free grammar name generator
      • ported name generation from english.cfg to [naming]
    • Bugfixes:
      • Dice operator is now synced (where possible)
      • Modulus (%) operator now works on decimal numbers
      • Exponentiation () operator is now right-associative
      • Fix several math operations returning a very large negative number when the operation was invalid (for example, (-2) ^ 0.5). Now they return null instead.
    • Formula debugger (accessed with the debug() function):
      • Now works again, but is skipped unless in debug mode
      • No longer explodes on formulas using less-than
      • Some better information and formatting in the execution trace
      • You can now step through "where" variable assignments
    • FormulaAI no longer starts recruiting if a formula evaluates to the string 'recruit'.
    • Deprecated:
      • The fai/faiend keywords are deprecated as part of a move to clearly define the difference between "Wesnoth Formula Language", the language, and "FormulaAI", the AI engine that uses the language. For now they still work, but any future code should use wfl/wflend instead. Use of the .fai file extension is still fine for FormulaAI code; for other formula code in a separate file, .wfl is recommended instead. ### Miscellaneous and bug fixes
    • Resolve translated logo images not being used (bug #24357)
    • Ported the "hexometer" tool from Bash to Python 3
    • Recognize hotkey release events
    • Allow changing keybindings for scrolling the map.
    • Fix the move-to-targets candidate action of the default AI ignoring tunnels
    • Fix two rare bugs in the goto candidate action that resulted in goto moves by other units being skipped after a unit could not get to its goal.
    • Replace wmlxgettext tool with new python3 implementation by Nobun: https://github.com/AncientLich/wmlxgettext-unoff/
    • Debug commands that create units now do so for the currently controlled side instead of always side 1.
    • Fixed bug #24696 (Nightstalk ability not working)
    • Ported the following scripts to Python 3: TeamColorizer, about_cfg_to_wiki, campaign2wiki, terrain2wiki
    • Wesnoth now ignores unknown arguments that XCode may pass when testing.
  • v1.13.4 Changes

    ### Language and i18n

    • Updated translations: British English, Russian ### Graphics
    • Improved or new terrain graphics: Mine Walls (replaces Hewn Cave Walls). ### User interface
    • Fix vertical alignment of individual attacks listed in the Attack Unit dialog.
    • Removed extra padding below unit stats in the Attack Unit dialog. ### Miscellaneous and bug fixes
    • Fix non-deterministic crashes in the Attack Unit dialog resulting from invalid memory references (regression introduced in 1.13.3).
    • Fix uninitialized variable in event handling code (bug #24498).
  • v1.13.3 Changes

    ### Greatly improved SDL 2 support. SDL 2 is now used by default build when building. This fixes the following bugs, among others:

    • Bug #18112: Color cursors cause slow mouse movement at menus
    • Bug #19666: When I resize windows during dialog I lose the menu buttons
    • Bug #20332: Cursor not mapping correctly on Retina display when in Windowed mode
    • Bug #23820: SDL 2 alpha blending issues
    • Bug #23821: Text input is broken in GUI1 under SDL 2
    • Bug #23908: SDL 2 SDL_BlitSurface causes crashes
    • Bug #23918: UI graphics garbled on OS X 10.11 El Capitan
    • Bug #23934: Resize actions are laggy
    • Bug #24138: SDL 2 crash on resize after starting a game and returning to the title screen
    • Bug #24209: Screen becomes black upon minimise and restore
    • bug #24212: SDL 2 build handled input incorrectly once window focus is lost when menus are open
    • Bug #24213: SDL 2 build leaves menu items stuck if window dimensions change while open
    • Bug #24214: SDL 2 build handles fullscreen toggle badly
    • Bug #24260: Menu and Action buttons disappear on resize
    • Bug #24261: Area under Objectives not redrawn on resize
    • Bug #24294: Doubled-up GUI1 dialogs don't redraw the secondary in SDL2
    • Bug #24477: Segfault when launching Credits ### Campaigns
    • Liberty:
      • Added some animations for the Rogue Mage line.
      • Fixed Relana appearing as male.
    • Sceptre of Fire:
      • Added some animations for Dwarvish Miner.
      • Improved sprite for Dwarvish Caravan.
    • Son of the Black-Eye:
      • Added some animations for the Orcish Shamans.
    • Under the Burning Suns:
      • Updated sprites for Naga Hunter, Naga Guardian line, Crab Man.
      • Crab Man changed to Monster Crab. ### Graphics
    • Improved or new terrain graphics: Stones with Sand Drifts, Igloo Village, Adobe Village.
    • Added option for toggling off water animations to Preferences -> Display. ### Language and i18n
    • New translation: Asturian
    • Updated translations: British English, Galician, Russian, Swedish ### Sound effects
    • Fixed various subtle timing problems with attack sounds. ### Terrains
    • New terrain: Desert Mountains (Mdy), Impassable Desert Mountains (MdyXm), Ruined Adobe Village (Vdr). ### User Interface
    • GUI1 comboboxes now use the thinner menu frame style.
    • Implemented a new GUI2 Attack dialog
    • Added gui2 comboboxes.
    • Removed prompt when purging the WML cache from Preferences.
    • Implemented a new GUI2 Preferences dialog
    • Implemented a new font scaling option on the Display panel.
    • Selecting an entry in the friend/ignore list panel now copies it to the input field; this makes it easier to edit friend/ignore notes. ### WML engine
    • Added new event "unit placed", which triggers when (and regardless of how) a unit appears on the map.
    • Added support for color= in [unstore_unit] and [print]
    • removed network and network_ai controlles, whether a side is networked is now stored in the is_local attribute.
    • Eventnames (received in wesnoth.game_events.on_event) now have all their spaces replaced with underscores.
    • lua can now read/write the 'persistent' attribute of sides.
    • lua can now read/write the 'alignment' attribute of units.
    • Added {CURRENT_FILE} and {CURRENT_DIRECTORY} macros.
    • add support for relative dirs in wesnoth.dofile/require
    • Added name= and write_name= attributes in [item]
    • Added description_alignment= key to [campaign]
    • Fixed [put_to_recall_list] not working correctly (bug #24390)
    • Wesnoth now does a stricter check in variablenames and doesn't allow empty indexes like "a[].b" anymore. ### Lua API
    • Added wesnoth.read_file
    • wesnoth.dofile/require now allow .. in relative paths.
    • unit.level and unit.upkeep can now be changed via lua unit proxies.
    • wesnoth.find_path is now available in lua map generators and allows border=yes/no parameter. ### Miscellaneous and bug fixes
    • Fix the new log code on Windows to actually use Unicode-aware functions in a couple of places so Wesnoth does not quit on startup when trying to relocate the log file to a path with Unicode characters (bug #22897, definitely fixed this time).
    • Decreased high memory consumption caused by the animated water.
    • Fix bug #23108: exclude aborted attacks from statistics
    • imgcheck now runs on Python 3
    • Fix bug #15259: Secondary click uses control-click instead of command-click in OS X
    • New hi-res icon using new logo for OS X
    • Removed the "wmlmove" Python tool
    • Fixed [event] in [unit_type].
    • Fixed oos caused by mp replay turn feature.
    • Fixed oos bugs caused by plattform dependent rounding from double to int in lua.
    • Fixed custom (lua-defined) scenario tags beeing removed from [replay_start]
    • Fixed savefile bloat caused by unit variations (walking corpses)
    • Fixed preferences file bloat caused by null-command hot-keys (bug #21969)
    • Fixed clearing of default hot-keys not working (bugs #21983/#22218/#23981)
    • Fix [for] not correctly handling the case when the array length changes during iteration
    • Fix variables in [message][command] (bug #24288)
  • v1.13.2 Changes

    ### Add-ons client

    • Warn user if attempting to upload an addon with a version lesser than or equal to a published version. ### Campaigns
    • Delfador's Memoirs:
      • Added defeat condition for death of the last undead veteran in 'Showdown in the Northern Swamp' (bug #23668)
    • Eastern Invasion:
      • Fixed scenario events not working right on easy difficulty in 'Captured'.
    • The South Guard:
      • Deoran is now the grandson of the Haldiel in HttT instead.
    • Tutorial:
      • Fixed transition to second scenario.
    • Under the Burning Suns:
      • Gave Garak a new ability called Teaching (at the start of every turn, his experience points are transferred to adjacent units on the same side) ### Editor
    • Add Recent Files menu with a list of recently saved or loaded maps or scenarios, up to a custom limit (by default 10) that can be set in Advanced Preferences.
    • Fixed Player Start labels not being updated with repeat map generations (bug #20036) ### Graphics
    • New animated water.
    • New standing animation for the Dwarvish Runesmith
    • New generic portraits for the Troll and Troll Whelp
    • New game logo ### Language and i18n
    • Updated translations: British English, French, Galician, Hungarian, Italian, Japanese, Latvian, Polish, RACV, Scottish Gaelic, Slovak, Spanish
    • Fixed crashes during start-up on Windows resulting from add-ons containing erroneous textdomain declarations (bug #23839).
    • Spelling and grammar review across all official campaigns. ### Lua API
    • It is now possible to implement custom [effect]s with wesnoth.effects
    • Changed interface for the wesnoth.synchronize_choice function
    • Added support for unit.level field (read only)
    • Added support for unit.advancements field (bug #23677)
    • Added support for unit.parry and unit.accuracy fields
    • Added support for current.event_context.unit_x/y fields (bug #23507)
    • Added wesnoth.set_dialog_focus function
    • Added wesnoth.set_dialog_visible function
    • Added wesnoth.show_message_dialog function
    • Added wesnoth.show_popup_dialog function
    • Added wesnoth.deselect_hex function
    • Added wesnoth.is_skipping_messages and wesnoth.skip_messages functions
    • New parameter write_to_mods in wesnoth.add_modification
    • Added wesnoth.random function
    • helper.shuffle is now synced
    • Remove wesnoth.get_unit(underlying_id)
    • Add wesnoth.get_unit(string_id)
    • Change wesnoth.message so that it can display translatable strings
    • Change wesnoth.put_unit so that the unit is passed as the first parameter
    • Add wesnoth.erase_unit, which replaces wesnoth.put_unit when called without a unit
    • Add wesnoth.unit_vision_cost
    • Add wesnoth.unit_jamming_cost
    • Add methods to proxy unit metatable: matches, to_map, to_recall, clone, extract, advance, add_modification, resistance, defense, movement, vision, jamming, ability, transform All are equivalent to a similar wesnoth.* function, but are called as unit:fcn_name(arguments) instead of as wesnoth.fcn_name(unit, arguments)
    • Add wesnoth.races[race_id].traits
    • Add wesnoth.unit_types[unit_type_id].traits
    • Add optional third argument to wesnoth.match_unit, which is used for the $other_unit variable in the filter.
    • pairs() and ipairs() now work on vconfig userdata objects
    • Add helper.get_nth_child
    • Add helper.child_count
    • Add helper.child_array
    • wesnoth.remove_time_area no longer takes a comma-separated list of time area ids.
    • wesnoth.add_time_area no longer warns about commas in time area ids
    • unit.variables can now access sub variables.
    • Added wesnoth.get/set_side_variable to store variables in a [side]-
    • Added read/write fields carryover_bonus/carryover_add/carryover_percentage in lua sides. ### Music and sound effects
    • Updated music track "Frantic", new one by Stephen Rozanc.
    • New sounds: dwarf hit and die, ink, mud fist and glob. ### Terrains
    • Removed unit elevation from N-S hanging bridges
    • Added unit elevation to NW-SE and SW-NE stone chasm bridges
    • Added unit elevation to NW-SE and SW-NE plank bridges
    • Hanging, stone chasm, and plank bridges are now displayed in-game simply as "Bridge", retaining their descriptive names in the editor as per convention.
    • Fixed spurious "could not open image 'terrain/.png'" error messages caused by terrains without a minimap image (symbol_image) such as those from the Special category in the editor (Impassable Overlay, etc.). ### User interface
    • It is now possible to switch from replay directly into normal play (bug #23833).
    • The game now shows a notification on remote clients if a sides takes very long to do a local choice (bug #23297).
    • It is now possible to replay a turn in mp games by loading autosaves.
    • The game now asks for confirmation when attempting to quit during the game.
    • Add "unit status=..." command to debug console to add/remove unit statuses
    • GUI2:
      • stacked_widget can optionally display a single layer at a time. This may be used to implement dialogs with multiple pages or tabs.
      • Widgets which are children of invisible or hidden parents can no longer be interacted with even if the children themselves are still internally visible.
      • Added support for tristate buttons/toggle panels or more generally n-state buttons/toggle panels
    • Added a version dialog button to the title screen, replacing the Paths option previously found in Preferences -> General. ### WML engine
    • controller= in side filters can now be used in mp games for unsynced code
    • Added [effect] apply_to=max_expereince set=
    • Added enable_if= to mod and era events
    • Added $varname?default_value| in variable substitution
    • Fixed side_for= parameter in [message]s with input
    • New actionwml tag [on_undo] contains actionswml that is executed when the current action is undone
    • New actionwml tag [unsynced] executes its contents in an unsynced context where for example [set_variable]rand= will return unsynced results
    • [campaign] now supports [event] subtags which are added to every scenario of the campaign similar to [modification] [event]s
    • Added support for mod_x,mod_y= in [terrain_graphics].
    • Added support for has_flag= in terrain graphics [variant].
    • Added category= to [label] - allows grouping labels so that players can show/hide them
    • Add female_text= to [animate_unit] and [unstore_unit] for easier translating
    • Add female_message= to [message] for easier translating of lines spoken by generic units
    • AMLAs in [modifications] now use [advancement] tags instead of [advance] tags. This means you can add an AMLA to a placed unit by simply using its definition macro, for example {AMLA_DEFAULT}.
    • [get/set_global_variable]'s side= attribute now defaults to "global" (bug #23686)
    • [team] share_view=yes/no, share_maps=yes/no was replaced with share_vision=all/shroud/none
    • Add exclude_amla= key in [advancement] which disables the advancment if the unit has already taken certain other advancements.
    • The WML preprocessor now writes warnings to stderr for macros redefined without #undef, to help detect unintentional name clashes.
    • Fix macro definition line numbers being offset by 1 in WML preprocessor messages involving macros.
    • Added WML menu item and event handler views to the Gamestate Inspector dialog.
    • The Gamestate Inspector now displays empty WML variables too (including containers/arrays).
    • Added new possibilities for [effect]:
      • apply_to=alignment - change a unit's alignment
      • apply_to=max_attacks - change a unit's attacks per turn
      • apply_to=recall_cost - change a unit's recall cost
      • apply_to=vision, apply_to=jamming - change a unit's vision/jamming points
      • apply_to=new_advancement - add new advancement possibilities (either units or AMLAs)
      • apply_to=remove_advancement - remove advancement possibilities (either units or AMLAs)
      • apply_to=attack - add set_ versions of all existing increase_ keys
      • apply_to=attack - add increase_movement_used and set_movement_used to change the number of movement points the attack consumes
    • Ability to patch movetypes to account for custom terrains or damage types
    • Removed y offset by -1 from [message]'s scroll-to-unit logic.
    • Add [found_item] ConditionalWML to check if an [object]id= ActionWML has been taken
    • New auto-stored WML variable $other_unit usable in the following contexts:
      • [filter_adjacent] - $other_unit refers to the $this_unit of the enclosing filter (In weapon specials and unit abilities, the unit owning the ability.)
      • [filter_self/opponent/attacker/defender] (weapon specials) $other_unit refers to the other unit in the attack (eg in [filter_self], it's the opponent)
      • [affect_adjacent][filter] (unit abilities) $other_unit refers to the unit owning the ability
    • New rotate operators for directions: dir:cw and dir:ccw (This is useful mostly in conjunction with variable substitution.) These operators are applied after the existing '-' operator that takes the opposite direction.
    • Adjacency filters in abilities and weapon specials now support count= and is_enemy=
    • New implementations of backstab and leadership specials using $other_unit. In particular, leadership is now a single macro and it is not supported to give a unit a leadership ability of a different level (eg level 4 leadership on level 2 unit). The backstab= key is deprecated.
    • Add new looping tags: [for], [foreach], [repeat]
    • Add new flow control tags: [break], [continue], [return]
    • Added a new [difficulty] tag for defining a campaign's difficulty level
    • Add new syntax for [option], similar to the new difficulty syntax
    • Add [test_condition] ActionWML that tells why a conditional failed (for debugging)
    • Add [remove_time_area] WML tag which takes a comma-separated list of time area ids.
    • [time_area] no longer warns about commas in ids when not using remove=yes.
    • Add [random_placement] ActionWML
    • In [set_variables] you can now mix [value] and [literal], and even [split]
    • Add [resource] tag which contains [event] and [lua] tags smimilar to [modification] but hidden from the user.
    • Removed name= attribute in [side].
    • Add support for [endlevel] bonus= ### Editor
    • Added Category field and color sliders to the Edit Label panel. ### Miscellaneous and bug fixes
    • Fix $this_unit auto-stored variable not working correctly in most SUFs
    • Made Documents\My Games\WesnothX.Y the default user config+data dir on Windows to replace the broken \userdata default that has never been acceptable practice. Portable installs are now required to explicitly use . or .. (e.g. --config-dir .\userdata) to force the user config+data dir path to be relative to the current working dir (see also bug #23753).
    • Wesnoth now uses combined stdout+stderr log files on Windows, moved to \logs during initialization and first created in the user's temporary files directory defined by Windows. Log files are named like "wesnoth--.log" and up to 8 log files are kept along with the latest session's log file. This avoids issues caused by SDL 1.2's built-in redirection code not being Unicode-aware (fixes bug #22897).
    • Removed legacy filesystem API implementation.
    • Fixed Generate Map dialog bug that caused last choice of map generator to not be actually selected (bug #23711).
    • Fixed unbound memory read in internal time formatting code with specially-crafted input.
    • Child wesnothd processes spawned by the Host Network Game option on Windows now display console output directly instead of using stdout.txt and stderr.txt.
    • Remember last selected modifications separately for single and multiplayer.
    • Fixed SDL2 compilation issues.
    • Fixed RECRUIT_UNIT_VARIATIONS core WML macro leaking an internal temporary variable ($recruited_unit_random_variation).
    • Fixed unit [resistance] and [jamming_costs] not being considered for sync check.
    • Fixed problems with slow/poison/petrify sounds (bug #23024) and made the sounds play automatically when the status is inflicted in combat, instead of being played by attack animations.
    • Fixed OOS on random maps, where clients placed sides in different castles.
    • Fixed some (not all) OOS caused by modifying a sides controller by wml.
    • Fixed wml menu items becoming unsynced in later scenarios.
    • The game now automatically detects whether to show the game connect screen between scenarios.
    • Fixed possibility of corrupting saved games in certain instances, eg if an add-on tries to set an invalid variable
    • Fixed bug 23060: unit stat tooltips do not show.
    • wmllint, wmlscope, wmlindent and wmllint-1.4 now run on Python 3
    • Text boxes tab completion now lists friends and whisperer nicks for easier answer (bug #9742)
    • Avoid crash when planning moves on planned recruits (bug #18637)
    • Fixed cases of wrong unit type used in planning moves (bug #20299)
    • Fixed hang when attempting to make a screenshot from a non-existent map via command-line (bug #20900)
    • Fixed Cancel Orders not working when loading MP game (bug #22133)
    • Fixed broken Oasis terrain help entry (bug #23023)
    • Fixed load game hot-key not working in the main menu (bug #23215)
    • Added user's leave notification for ingame players
  • v1.13.1 Changes

    ### Security fixes

    • Disallowed inclusion of .pbl files from WML, independent of extension case (CVE-2015-5069, CVE-2015-5070, bug #23504). ### AI
    • Fast Micro AI: exclude hidden enemies from attack evaluation by default; add optional key attack_hidden_enemies to override this
    • Lua AI helper functions: fix bug crashing the AI when number= is not set in a unit attack definition
    • Micro AIs: add a warning and avoid crash when a non-existing side is used in the [micro_ai] tag ### Campaigns
    • Dead Water:
      • The Stun effect now expires at the stunned unit's side turn end
    • Under the Burning Suns:
      • The Stun effect now expires at the stunned unit's side turn end ### Editor
    • Redesigned Generate Map dialog to use a real listbox and remember the last choice during the same editor session.
    • Fixed stack corruption bug in the Side Setup dialog. ### Graphics
    • New generic portraits for the Walking Corpse and Soulless ### Language and i18n
    • Updated translations: Galician, Scottish Gaelic, Russian ### Lua API
    • New function wesnoth.get_viewing_side
    • New function wesnoth.remove_dialog_item ### Multiplayer
    • A New Land:
      • Removed the ability to select individual factions when using map settings as this breaks player recruit lists (bug #23593).
    • Era names no longer support formatting markup in the game setup screen.
    • Removed the Silver Mage from the available leaders for the Rebels faction in Age of Heroes.
    • Fixed "Accept whispers from friends only" not working with the default lobby UI, and added a warning every 5 minutes for individual rejected senders.
    • Allow custom colors in MP connect dialog (bug #23629).
    • It is now possible to change a side's controller by WML (for example with [modify_side]) in a MP game.
    • Changing teams by WML in a MP game causes less bugs (bug #23028).
    • MP campaigns now behave more like single-player campaigns.
    • Various fixes in the MP game setup screens (bugs #23641, #23509, #23496, #23462). ### Units
    • Fixed the Shuja not having the default AMLA. ### User interface
    • Fixed minimap buttons appearing without contents or in the wrong state during WML start events until they are interacted with or control is given to the player for the first time or some other unspecified thing happens.
    • Force uniform font rendering settings across X11 and Apple OS X, avoiding color glitches resulting from incorrect applications of subpixel hinting (bug #20337).
    • Hide mod options from the user command prompt dialog in the MP lobby when not authenticated as a mod.
    • Fixed unit bars, ellipses, and orbs disappearing for individual units in replay mode when using Skip Animations/Quick Replays if they moved without attacking or otherwise switching to a new animation.
    • Chat Log dialog now starts on the last log page when there are multiple pages.
    • Fixed Wesnoth's fonts remaining in use by Windows after abnormal exits, as well as being available to other applications.
    • Started showing on which difficulty levels a campaign was completed.
    • Modifications for single-player campaigns are now selectable directly in the single-player Campaigns menu.
    • The game now automatically detects whether to show the game setup screen in single-player mode. ### WML engine
    • Added support for [object] duration=turn end
    • New or updated image path functions:
      • ~BW(): converts an image to black and white
      • ~NEG() now supports 0,1 or 3 arguments, allowing solarization effects
      • ~SWAP(): swaps the RGBA channels of the image
      • ~CROP(): now supports negative x and y values.
    • Added support for SLF in [label] when used inside an event
    • Added synced=yes/no (default yes) to [set_menu_item]
    • [options] is now recognized inside [campaign]
    • type=sp/mp/hybrid now must be specified for [modification]s ### Miscellaneous and bug fixes
    • Removed abandoned libana network API implementation.
    • Fixed bug #23201, toggle icons display error in replay.
    • Added --wconsole switch to allocate a console on startup (Windows-only).
    • Added cwesnoth.cmd wrapper script to start Wesnoth with a console displaying stdout+stderr (Windows-only).
    • Updated mainline campaigns and multiplayer scenarios to use [filter] status= instead of [filter] [filter_wml] [status]
    • Fixed a segfault in [move_units_fake]
    • Fixed unbound memory read in the MP map selection screen that could lead to a segmentation fault or other abnormal behavior (bug #23606).
    • Made silence.ogg larger to work around a crash involving the multiplayer lobby with music and sound enabled (bug #23633, bug #23599) with libvorbis builds affected by Debian bug #782831.
    • Moved [role] tag to Lua (fix for bug #23630)
    • Removed broken Python port of wmlxgettext from data/tools/.
    • Default to non-strict compilation with CMake.
    • It is no longer possible to undo moves before the last (manual) shroud update.
    • Debug commands are now synced.
    • Fixed GUI2 toggle panels in some way that the author of this changelog entry chose not to specify.
    • Removed some config reloads, especially when leaving games or entering the single-player Campaigns menu.
    • It is now possible to use WML to disable/enable quick 4 MP leaders in the Default era and the time over advantage dialog by setting a WML variable.
  • v1.13.0 Changes

    ### Security fixes

    • Fixed arbitrary file read from WML/Lua API (CVE-2015-0844, bug #23440). ### Add-ons client
    • The Update All button is now displayed on all Add-on Manager views instead of just the Upgradable filter view, and enabled only when there is at least one add-on that may be upgraded. ### Add-ons server
    • Add-on metadata pattern blacklisting implemented.
    • Major internal refactoring done. ### AI
    • New Micro AI: Fast AI
    • Big Animals Micro AI: bug fix for units not attacking when [avoid_unit] is not set
    • Bottleneck Micro AI: bug fix for case when allied units are present
    • Coward Micro AI: new optional key attack_if_trapped=
    • Forest Animals Micro AI: bug fix for wander terrain lying on border hexes
    • Herding Micro AI: bug fix for dogs sometimes having moves left at end
    • Lurkers Micro AI: fix bug in wander terrain selection
    • Lurkers Micro AI: bug fix for attack error when lurker runs into ambush
    • Lurkers MAI: bug fix for attempting to attack petrified units
    • Messenger Escort Micro AI: new optional parameters [filter], [filter_second] and invert_order=
    • Stationed Guardian Micro AI: make guard_x/y= optional keys
    • Stationed Guardian Micro AI: bug fix for unreachable stations
    • Messenger Escort Micro AI: bug fix for escort units blocking messenger's progress
    • Several Micro AIs: fix a variety of rarely occurring but serious bugs, such as invalid savegames or disabling the AI from working for the rest of the turn or after changing the Micro AI settings.
    • Bug fix for requiring unnecessary keys for removal of several Micro AIs
    • Fixed a bug that made it impossible to change or delete Micro AIs after a game had been reloaded (bug #21750). This was a general bug in the RCA AI mechanism and applied to other CAs as well, but it was most visible in the Micro AIs.
    • Some internal reorganization of Micro AI code to facilitate customizing them for UMC and adding functionality from other versions of Wesnoth. Some code cleanup for consistency, readability and speed, as well as fixing of some minor and subtle bugs.
    • Fix bug in Random Recruit Micro AI: the AI can now handle custom castle terrain independent of its terrain code
    • Fix bug in Return Guardian and Goto Micro AIs when there is no path to the goal hex
    • Several fixes of translatable strings in Micro AIs
    • Micro AIs: only display on-screen error messages when in debug mode
    • Add conditional inclusion of AI macros to AI cfgs in data/ai ### Campaigns
    • Changed all occurrences of {FLAG_VARIANT ragged} to {FLAG_VARIANT6 ragged}
    • Singleplayer campaign creation now utilizes the create, configure, and connect engines from the multiplayer codepath.
    • Eras, mods, and options are now available for sp campaigns.
    • Fix sighted events firing too early in several scenarios. Fixes bug #22466
    • Use the new bigmaps for A Tale of Two Brothers, Delfadors Memoirs, The Hammer of Thursagan, Northern Rebirth and the epilogue of Legend of Wesmere.
    • Remaining cases of old-style note and carryover information in [objectives] have been converted to a newer style.
    • A Tale of Two Brothers:
      • Updated music playlists.
    • Descent into Darkness:
      • Fixed various issues with player and enemy gold and income in 'Descent into Darkness'.
      • Fixed Darken Volk's ellipse in scenarios 'A Small Favor part 3' and 'Alone at Last'.
      • Fixed Darken Volk being completely passive in 'Alone at Last'.
      • 'Return to Parthyn' now has variable content depending on whether necromancy was used in 'Saving Parthyn'.
    • Eastern Invasion:
      • In 'Captured', stolen gold won't be mentioned if the player had no carryover gold.
      • Updated maps for scenario 14, 16 and 17b.
      • New animation for Ravanal's shadow wave.
      • Added the Skeleton Rider line.
      • New map for 'Mal-Ravanal's Capital', as well as updated maps for scenario 2 and 4b.
      • Tweaked and rebalanced all scenarios up to 'Two Paths'.
    • Heir to the Throne:
      • Tweaked and expanded music playlists for all scenarios.
      • Fixed missing message in 'The Siege of Elensefar'.
      • Hide unit variations that should not be listed in the help browser.
    • Liberty:
      • Fixed possibility of no viable routes around guards in 'Hide and Seek'.
      • Tweaked resistances for the Skeleton Rider line.
    • Northern Rebirth:
      • Fixed Sister Thera and Father Morvin respawning into the recall list if the other is on the north or west map edges.
      • Sister Thera and Father Morvin will no longer speak dialog on their death after 'The Pursuit'.
      • The maps for 'Infested Caves', 'Clearing the Mines', and 'The Pursuit' have been completely redone.
      • All scenarios up to 'Old Friend' have been significantly tweaked and rebalanced.
    • Sceptre of Fire:
      • Balancing changes for 'The Dragon'.
    • Son of the Black Eye:
      • S2: adjusted starting villages; scenario now ends if Kapou'e is already on the signpost when the messenger comes back
      • S3: make objectives consistent between before and after trolls appear
      • S6: remove AI controller. It doesn't work with sides without a leader
      • S6: reduce randomness of unit types unloading from galleons
      • Minor balance tweaks to scenarios 7, 8, 12, 14, 15, 17 and 18.
      • Made allied leaders less likely to get themselves killed.
      • Minor changes to objectives and messages in scenarios 7, 8 and 14
    • The Hammer of Thursagan:
      • Fixed missing objective in 'The Court of Karrag'.
      • Rebalanced scenarios 'Invaders', Mages and Drakes' and 'Fear'.
      • Set Masked Dwarvish Lord range attack same as for Dwarvish Lord
      • Fixed some messages not being shown in custom events in 'The Underlevels'
      • 'The Court of Karrag' and 'Epilogue' feature a new map.
    • The Rise of Wesnoth:
      • Hide unit variations that should not be listed in the help browser.
    • Tutorial:
      • Rewritten with an eye to being less constricting and more informative.
    • Under the Burning Suns
      • Fixed recruited Desert Archers being always male.
      • Fixed malformed rand range errors during AI turns on medium difficulty in 'A Stirring in the Night'.
      • Fixed bug #22800: Cloaked Figure appears in strange location.
      • Fixed bug #22799: No allies killed by enemy reinforcements.
      • Fixed bug #22790: Various problems with dehydration.
      • Hide unit variations that should not be listed in the help browser. ### C++ Engine
    • Purge "human_ai" controller type. This is a fixup of bugfix #18829 below. ### Editor
    • Added an entry for the terrain description help to the context menu.
    • Default hotkey bindings for brushes (1-5)
    • Disabled the swap palette button when the unit palette is active.
    • Disabled the tod schedule and playlist menus in pure map mode.
    • Support for displaying the saved status of the selected area.
    • Fixed error messages about missing UI elements.
    • Fixed falcon race missing an icon due to having incorrectly-named image files. ### Graphics
    • New Ancient Lich baseframe and animations
    • New standing animation (NE and SE) for the Revenant
    • New standing animation for the Dwarvish Stalwart
    • Smooth unit movement over terrains with elevation such as keeps and bridges (bug #20635).
    • Fixed bug #22045: Only blit neutral surfaces.
    • [item] images are now subject to local ToD lighting effects instead of just the current map-wide ToD lighting (bug #22215).
    • Disabled "alpha thresholding" in the bilinear interpolation algorithm used for all sprites and images. (This was introduced as a workaround for an old bug.)
    • Add a new bilinear interpolation implementation, which properly performs alpha weighting when averaging colors, and rename old one as the legacy version.
    • Align unit overlays to the sprite rather than the occupied hex.
    • Added Brazier and Lit Brazier embellishment terrains
    • New beach waves terrain animation.
    • New images for the dummy, barrel, and green cloak items
    • Updated Snowy Orcish Castle and Keep terrain images ### Help browser
    • Several sections have been rewritten or had their layout improved
    • Added trait list with links to the help page for unit types
    • Added Defense Cap column to the Terrain Modifiers table in unit help pages for units with a defense cap on at least one terrain type, which also now include a note to this effect in their special notes.
    • Fixed a bug which caused the terrain section topic not to properly generate a list of its contents.
    • Add a new help section to the terrains topic which explains about mixed terrain types.
    • When using the terrain description feature with a mixed terrain type, the game will autogenerate a formatted explanation of its best / worst movement / defense properties.
    • Added automatic help entries for all eras, fulfilling Feature Request #22107
    • Fixed in-game help descriptions of default factions, using content from wiki
    • Added automatically generated lists of races and alignments to the descriptions of factions
    • Autogenerated Time of Day Schedule section
    • Unit types that do not include any visible (hide_help=no) variations no longer generate topic sections. ### Language and i18n
    • Updated translations: Chinese (Simplified), Chinese (Traditional), Czech, French, Galician, German, Greek, Hungarian, Italian, Lithuanian, Polish, Portuguese, Russian, Scottish Gaelic, Slovak, Spanish, Vietnamese
    • Fixed cmake pot-update target on Debian and other systems that do not use bash as the default /bin/sh. ### Lua API
    • Upgraded Lua to version 5.2.3.
    • Fix bug #21761: wesnoth.synchronize_choice will now give a warning when the table returned by the user-specified function is not completely valid, when wesnoth is running in debug mode (--debug command line flag).
    • Added new function wesnoth.get_all_vars().
    • Add (tentative, preliminary) support for lua scripting of wesnoth application functions
    • Enable ilua "strict mode" by default. This safety feature helps to catch errors caused by mistyped variable names, and improves the behavior of the lua interpreter console. See 1.13.0 RELEASE NOTES for more details.
    • Add multiplayer client scripting (join lobby, chat, host games, save games, reload games) and mp unit tests based on this
    • Add functions in wesnoth.map_location to perform map location arithmetic using the same functions the C++ engine does
    • Enabled support for the bit32 library (bitwise operations)
    • Added support for treeview wigets in lua gui2 dialogs.
    • Added support to define wml conditional tags in lua. See the wesnoth.wml_condtionals table as described on the wiki. ### Multiplayer
    • Fixed the Set Password option during game creation not having an effect due to a misplaced WML attribute in the client's command for the server (bug #23015).
    • Fixed missing scenario title in lobby for reloaded MP campaigns.
    • Added "no mirror" and "no ally mirror" options to the MP configure screen.
    • Multiplayer content [era], [modifications] now carry version info of their associated add-on, and may have "addon_min_version" fields set which specify backwards compatibility with earlier versions.
    • Missing content for games hosted in the mp server may now be retrieved automatically by clicking on these games in the mp lobby.
    • Ported the password prompt displayed when joining a password-protected MP game to GUI2 (bug #23455). ### Music
    • Change main menu track to Journey's End. ### Replays
    • Added a button that allows playing a single move in replay mode. ### Units
    • Increased the experience requirement for the Rami from 32 to 39
    • Increased the experience requirement for the Saree from 56 to 64
    • Changed sound timings for Khalifate melee attacks
    • New chill tempest animation for Lich/Ancient Lich
    • Add 'elemental' trait to Mudcrawler line
    • Fix sound timings for drake fire animation macros
    • Assigned capitalized translatable names to Walking Corpse and Soulless variations (bug #22902).
    • Hid alternate Great Wolf variation from help as it is identical to the default variation stats-wise. ### User interface
    • Added a context menu option for command mode.
    • Added a Classic theme which restores the 1.10 UI.
    • Made orb and minimap colors configurable in Preferences.
    • Remove 'allow_new_game=no' entries from random map new game list
    • Fixed bug #22095: An assertion failure in the gamestate inspector.
    • Changed: A listbox can now update its size when rows are added.
    • Changed: Avoid listboxes to handle mouse clicks twice.
    • Fixed bug #22144 + #22046: An assertion failure with empty labels in a listbox.
    • The :inspect dialog now uses the same function as saved games to generate WML in text form instead of a simplified version.
    • Added a button to copy the currently displayed content from the :inspect dialog to clipboard.
    • WML array elements are now displayed with subscripts in the :inspect dialog.
    • Added a button to copy the in-game Chat Log dialog contents to clipboard.
    • Fixed the WML load error dialog not displaying an add-on name instead of falling back to its directory name if the add-on contains an outdated _info.cfg file lacking an [info]title= value.
    • Fixed most of the minimap buttons and the End Turn button appearing without contents or in the wrong state during WML start events until they are interacted with or control is given to the player for the first time.
    • Added a new subdialog in Preferences to clean or purge the WML cache.
    • Fixed AI engine names in the MP game setup screen being translated to the language selected when Wesnoth was started rather than the current language (bug #22092).
    • Added a new "Advanced Settings" button and dialog to campaign select.
    • Added new wml attributes to listbox: has_minimum and has_maximum.
    • Added a "Disable automatic moves" preference to disable automatic movements at the beginning of a turn.
    • Fixed lower button row padding for GUI1 dialogs including Statistics and the Add-ons Manager (bugs #22379, #22791).
    • Fixed mouse tracking issue with workaround by changing the default window resolution for OS X to 800 x 600 (bug #20332).
    • Removed the "Replay viewer" text label from the replay controller theme, because it caused problems for translators and was unnecessary
    • Fixed bug #22337: Bug in inspect long arrays
    • Added a new "Alerts" configuration screen under Preferences > Multiplayer, refactored all of the mp alerts / desktop notifications for customizability
    • Removed "desktop_notifications" and "lobby_sounds" advanced preferences, as they are subsumed by the Preferences > Multiplayer > Alerts screen now.
    • Added support for hyperlink rendering and clicking in gui2 labels.
    • Added lua interpreter console, accessible via a hotkey
    • Add lua console button to gamestate inspector
    • Add command history and history expansion to lua console, based on optional support from GNU readline history library.
    • Add support to evaluate expressions automatically in lua console, based on a lua lib "ilua", and "experimental compilation" technique.
    • Fixed game falling back to desktop if a user declines to load a previous version save from within a game
    • Fix bug #22984: Sliders (GUI1) focusing improperly in non-game contexts, and not responding to left-right key press
    • Wesnoth now ships with Bold and Oblique forms of its default font, Deja Vu Sans, and these are used in many menus and in the in-game help for styling text where previously we used SDL_TTF. Fixes bug #22376. ### WML engine
    • New image path functions:
      • ~XBRZ(): Takes one argument, the scaling factor (1-5). Uses the xBRZ scaling algorithm added in this release.
      • ~SCALE_SHARP(): Anologous to ~SCALE() but using the nearest neighbor scaling algorithm instead.
      • ~PLOT_ALPHA(): No arguments, plots the alpha channel in greyscale. Mainly useful for diagnostics of other function combinations, or debugging the engine itself.
      • ~WIPE_ALPHA(): Again mainly useful for diagnostics.
      • ~ADJUST_ALPHA(): Takes either a % or an 8-bit integer, and "multiplies" the alpha channel by this value.
      • ~SEPIA(): Gives the image a sepia tint.
      • ~NEG(): Gives the image a photographic negative effect.
    • Added customizable recall costs for unit types and individual units, using the new recall_cost attribute in [unit_type] and [unit] (bug #13074).
    • Added support for [elseif] tags inside [if]
    • Schema validator and preprocessor #warning messages now conform better to the new WML parser/preprocessor diagnostics format introduced in version 1.11.10.
    • Added define= functionality to scenarios, eras, and modifications.
    • [unit] uses passed [advancement]s instead of unittypes advancements if [advancement] were given in [unit].
    • allow [lua] tags inside [modification] and [era] (which have the same effect as [lua] tags inside [scenario]).
    • enable side_for= in key [message] with [option]s.
    • added [effect] apply_to=fearless/healthy which is now used by healthy/fearless traits instead of hardcoding the id of those traits in c++.
    • added support for a shuffle key in the [music] music to allow selecting between random and non-random music play (bug #19653)
    • Fixed a bug that prevented [animate_unit] from displaying death or victory animations for those units that filter them based on weapon (eg. Wose)
    • New WML tags: [put_to_recall_list] and [sync_variable].
    • Fixed nested macros emitting incorrect bindings to the default 'wesnoth' textdomain at the end of a substitution instead of the parent textdomain, this breaking localization of subsequent strings (bug #22962).
    • Sounds for slow and poison are automatically played when slowing/poisoning a unit, and should no longer be played by the attack animations.
    • force_lock_settings defaults to yes in [scenario].
    • Moved all preprocessor diagnostics from the 'config' log domain to 'preprocessor'.
    • Dropped support for [filter_side] in [gold] and [modify_ai], [theme] name= in place of id, and [object] duration=level.
    • Allowed direct modification of unit.ellipse variable even if ellipse= is set in [unit_type] or by an [effect]
    • Add accelerate=yes/no key in [delay]
    • Add support for status= key in SUFs
    • Add "disallow_shuffle" key in [side], which causes the "shuffle sides" feature always to skip this side, even if it is human playable.
    • Add "require_scenario" key in [scenario], [multiplayer], which causes a multiplayer game to require that all participants have the add-on installed. ### Miscellaneous and bug fixes
    • replace 'fight_on_without_leader'=yes/no with defeat_condition=no_leader/ no_units/always/never which allows the wml developer to decide when a side is considered defeated
    • Fix Fisher-Yates implementation of Lua helper.shuffle (bug #21706)
    • Fixed issues with the ~BG() image path function not always working with cached images.
    • Idle controlled sides now serialize as human controlled.
    • Fixed bug #20876: A segfault in cut_surface.
    • Dropped support for AmigaOS, BeOS, and OS/2.
    • Increased the sound mixer channel allocation from 16 to 32, thereby raising the limit for simultaneous sound effects from 5 to 20, and simultaneous UI sounds from 1 to 2.
    • Fix bug #21758: "Ready not blocked while player pick faction."
    • Fix bug #18829: "ai sides show up as "controller=network" on remote clients". This issue is the source of some difficulties with mp campaigns which occur when the campaign is reloaded from a non-host side, or after a player rejoins from observer status. Hopefully, reloading campaigns is easier after this.
    • Fix bug #21797: "Mandatory WML child missing" when leaving a reloaded game.
    • Fix bug #21808: Cannot join a reloaded game as an observer.
    • Fixed halos glitching through locations that become shrouded after the halo is rendered for the first time.
    • OS X user data directory is now ~/Library/Application Support/Wesnoth_1.13. For compiling Wesnoth using Xcode, a new version of wesnoth_compile_mac_1.13.zip is also required.
    • Fix bug #21257: Lagging animations with skip AI animations and fog/shroud.
    • Improved unicode handling on windows for characters outside the Basic Multilingual Plane.
    • Fix bug #3856: The turn dialog used in hotseat MP play now applies a blindfold for the duration of the dialog.
    • Petrified units are no longer displayed in the "Damage versus" tooltip.
    • Fix bug #21759: "timer refreshed too often when time runs out"
    • Use one combo box instead of check boxes for replay options "skip replay" and "enter blindfold". This fixes the mp lobby in width <= 800 resolutions. Fixes bug #21888.
    • MP server now commits controller changes to the replay rather than updating as we go along. Among other things these means that players that join an scenario with ai sides which has already started won't have corrupted controller types which would prevent them from successfully saving and reloading in the future. We have also moved all "controller tweaks" associated to the start of MP games to server-side rather than having a mix of client and server code.
    • Fixup user-displayed strings associated to replay options, idle state
    • OS X: mark Wesnoth as not high-resolution capable. This greatly improves performance on retina devices.
    • Upgrade Xcode project to enable both i386 and x86_64 builds
    • Fixed problems with idle controller type in networked mp.
    • Fix bug 21459 by making dropped sides default to idle.
    • Fix bug 21882 by introducing "fight_on_without_leader" boolean attribute of [side] tags and refactoring check_victory to use this.
    • Changed: Don't use the random generator for units with no names.
    • Fix bug #21910: code for game is ready bell is corrected, simplified, and moved to mp_connect::process_network_data.
    • Deliver desktop notifications in tandem with "game is ready" bell and also the "game has begun" bell.
    • Fix bug in which blindfold could cause OOS.
    • Fix bug #21914: allow drake walking corpse variation to move on unwalkable
    • Fix unnecessary "Mandatory WML Child not found" error when replay file doesn't have a [carryover_sides_start] tag
    • Server now generates PR 121 compliant replay files.
    • Fix bug #21025: replay controller doesn't execute play_next_side properly
    • Fix bug #21916: ready blocked at inappropriate times
    • Fix bug #21931: controllers bugged in (basic campaign) when networked
    • Fix bug #21883: make sure movement animations don't cycle with fog on
    • Fix bug #21316: make subframes within standing animations cycle by default
    • Fix bug #21967: fix crash when unit modification to traits has empty id
    • Fix bug #19258, 21962: WML variables spuriously copied to replay_start
    • Fix implementation bug in random number generator: rand_pool_ is now an unsigned long rather than an unsigned int.
    • Fix bug #21491: fix drag+drop for unit movements
    • Fix bug #21448: make premoved units selection like in Wesnoth 1.10
    • Fix bug #21372: fix unit move continuation if enemy discovered
    • Added a Python/Tkinter based GUI to allow running wmllint, wmlscope and wmlindent in an easier way
    • Some commandline output which was helpful for noninteractive ai testing is redirected from std::cout to a logdomain "aitesting".
    • Added WML unit test capabilities, accessible from commandline using -u switch. These are useful for unit testing the WML / lua api.
    • Support for total conversions, so called "cores".
    • Fix bug #22030: correct index of weapon special disable in attack GUI
    • Fix bug #21964: assertion failure when using "controller" attribute with a number.
    • Add [do_command], which takes the body of a [command] tag from ReplayWML, (some possibilities not allowed), and executes the corresponding action. It is replay safe and triggers WML events as appropriate.
    • Reallow selection of another unit on same side without deselect first
    • Add "strict mode". Using --log-strict=[severity] causes wesnoth to throw a game_error exception when anything is written to a log as severe as that. For example --log-strict=warning causes both warnings and errors to generate runtime exceptions. This is intended for unit tests.
    • Fix bug #21867: team flag colors not refreshed after making use of [modify_side] color= unless a new flag set is also provided.
    • Fix a bug where in movement records, "skip_sighted" was sometimes spelled as "skip_sighed".
    • Fix bug #22020: make base units with variations help entry clickable from the 'Unit Description' menu entry or from side pane.
    • Fix bug #21977: ready blocked on scenario transition, when allow_new_game=yes
    • Add "MAKE_ENUM" macro to simplify parsing of WML options.
    • "MAKE_ENUM" macro signals WML parsing errors when the game is run in debug mode, and an illegal value for an attribute is encountered.
    • Fix bug #21397 Reloading may cause a side's turn is not initialized. This bug affected only networked mp, at least since version 1.8.
    • [modify_side] may now alter the value of [side] defeat_condition.
    • Fix bug #22116: unlock movement when attacking enemy+discovering in fog
    • In mp the other players now also proceed to the next scenario if one human player wins.
    • Fix bug #21397: "Saving and loading may cause a side's turn is not initialized".
    • Fix bug which caused no units to be displayed when reloading an end of scenario save, by stripping them from the save file. However, this does not fix bug #15545, which was the reason that this behavior was introduced.
    • Fix bug #22123 "Replays don't reset map when reset button is pressed, causing OOS"
    • Wesnoth reports an error if it evaluates [if] and finds no [then], [else], [elseif] children, as a chat message from lua.
    • Fix bug #22134: Campaign prefix not used in mp campaign saves
    • Made the error messages sent to stderr when the core data dir is incorrectly set more helpful.
    • Fix bug #20126: Recursive preprocessor includes cause infinite loop
    • Added 'faction_lock' and 'leader_lock' to SideWML to be used in MP Connect screen. Fixes bug #21978.
    • Fix bug #22231: partial moves now able to be continued in whiteboard
    • Added wmi_pager object to control how wml menu items are displayed in context menus, and allow to display more than seven.
    • Fix an inefficient implementation of unit::invisible, in an effort to address slow performance problems: http://forums.wesnoth.org/viewtopic.php?f=4&t=12139&start=180#p569931 (Also see gfgtdf's commits trying to optimize the minimap loop)
    • Made it so /../ (non-Windows) or /../ (Windows) are also considered possible data directories if they contain a data/_main.cfg file, intended to help with cmake builds.
    • Fix bug #21723: team-specific items displayed to wrong players / at wrong times
    • When parsing command line args, if we fail to parse, give an error message rather than crashing with no explanation.
    • Fix bug #22305: assertion failure in unit_display.cpp
    • Fix bug #22086: wrong or missing minimap previews displayed b/c of problems with saveindex
    • Fixed the SCATTER_UNITS macro so that it may no longer attempt to place units at the map borders.
    • Fixed bugs in [filter_vision] reported here: http://forums.wesnoth.org/viewtopic.php?f=21&t=40702 [filter_vision] is now a check for any side matching the filter to have appropriate vision.
    • Add [has_ally], [has_enemy] to work around issues reported here: http://forums.wesnoth.org/viewtopic.php?f=21&t=40702 In a side_filter, [has_ally] and [has_enemy] are corrected / simplified versions of [allied_with] / [enemy_of], this is an extension of the bugfixes for [filter_vision].
    • Fix [side] share_view/maps always beeing false for non-first levels in mp campaigns
    • Fixes start-of-scenario multiplaer saves (#22068)
    • Fix bug wherein "lobby sounds" advanced preference didn't do anything for the normal (GUI 1) lobby.
    • Fix bug wherein dbus notifications did not have a wesnoth icon
    • Fix bug wherein chat history synopses weren't working right in the dbus notifications
    • Default to classic minimap unit/village color coding (colored by side).
    • Default to classic minimap terrain representation (satellite view).
    • Display the tooltip for actions browsed in the hotkey preferences dialog.
    • Enabled action icons in the hotkey preferences dialog.
    • Fix bug #21717: "F5->reload wml tree" doesn't work in editor.
    • Fix bug #21298: Minimap shows invisible overlays
    • Remove carryover WML (this may make a reappearance in 1.13.0 but it is considered premature now, please see github PR discussion for more info)
    • Fix bug #22465: Minimap not redrawn after turn dialog.
    • Fix bug #22306: move_unit moves a unit even when it shouldn't
    • Fix minor bug where toggling accelerated speed caused two lines of print messages to display on top of one another. Reported here: http://forums.wesnoth.org/viewtopic.php?f=5&t=40745
    • Fix bug #22611: loading a theme with nonexistent button images would cause the program to close.
    • Fix bug #22487: advanced preferences descriptions not showing up
    • Fix bug #22646: Tooltips broken in replay viewer
    • Fix bug #22643: Cannot compile with boost 1.56
    • Fix issue where the chatlog for a replayed game could not be opened in single player. The chatlog can now always be opened.
    • Fix bug #22745: choose_track function crashes the game in certain cases
    • Fix bug #22650: nontranslatable strings displayed in tooltips for terrain icons
    • Fixed Gameplay -> Time of Day help topic displaying the Dawn ToD picture where the Second Watch picture should be used instead (bug #22537).
    • Fixed mishandling of nested subnamespaces by the [clear_global_variable] WML action causing an assertion failure (bug #21093).
    • Fix bug #22443: Scenario Settings table has inaccurate Start Gold info in certain cases
    • Fix Grand Knight image being distorted in the sidebar
    • Fix bug #22251: Map labels not appearing in mp
    • Fix bug: lobby sounds not all playing. This was fixed by adding a second dedicated channel for UI sounds, and moving the "Ready to start" sound to the turn bell channel.
    • Bug fix: another instance of "overlapping messages", this time with the planning mode activation hotkey
    • Fix bug #21400: Use unit 'image' with higher priority than 'image_icon' for animation frames with no specified image.
    • New filesystem implementation based on boost filesystem
    • Added "--noaddons" command-line argument, prevents any add-ons from being loaded.
    • Added "--render-image" command-line argument, similar to --screenshot, but instead of a map, it takes a wesnoth imagepath and generates at bitmap with the filters applied.
    • New gettext implementation based on boost locale. This raises min boost requirement to 1.48, and adds a new dep (locale, filesystem was also added above)
    • New image scaling routine imported from the xBRZ project (HqMAME on sourceforge)
    • Now may save screenshots and other images as pngs, using SDL_SavePNG lib (from github)
    • New RNG implementation using boost::mt19937, and boost::random_device for seeds. The boost random library is now a build requirement.
    • Add "lua" random map generation
    • Multiplayer server can now handle scenarios with more than 9 sides
    • [modify_side] controller= now works in networked mp. If a null-controlled side becomes alive by [modify_side] controller=ai/human then the currently active client will be assiged controll
    • Fixed a stingstream syntax error that caused the build to fail in Visual Studio 13
    • Fixed hotkeys for changing tips in titlescreen (bug #18926).
    • Fixed problems building wesnothd using cmake if not building the game
    • Added several new options to GUI.pyw
    • Fixed a bug in which sides without a leader, but not defeated due to defeat_condition set to no_units_left or never couldn't capture villages
    • Fixed several Mac OS specific bugs in GUI.pyw
    • Fixed bug 22987 for filtering on era and mods in the Multiplayer lobby.
    • Fixed bug 23117 Invert breaks lobby filtering if Apply Filter is off.
    • Fixed bug 23426 Show terrain description hotkey works also for shrouded hexes.
    • Fix bug #23243: Segfault while clicking during [delay] in prestart.
    • Remove support for legacy style unit abilities descriptions.
    • Fixed bug #23445: set default build type in cmake to "Release" to ensure that the game is not unoptimized
    • Increased minimum version of FriBiDi to 0.10.9 in cmake to match scons
    • Changed how FriBiDi is found in cmake to using pkgconfig
    • Made the file chooser dialog (used for e.g. loading maps in the editor) use uniform path delimiters on Windows, fixing issues with browsing to parent directories (bug #23224).
  • v1.11.11 Changes

    ### Add-ons server

    • Filenames with whitespace in them are no longer allowed. ### AI
    • Non-default multiplayer and Micro AIs:
      • Fixed bugs which could lead to the AIs being disabled for the rest of the turn if WML events removed or changed units during the AI turn
      • Improved error reporting of invalid AI actions ### Campaigns
    • Eastern Invasion:
      • Updated maps for scenarios 12, 14, 16 and 17a.
      • Fixed a bug in 'Captured' which can cause the beginning to make no sense.
    • Under the Burning Suns:
      • Fixed broken Divine Incarnation unit type in The Final Confrontation. ### Language and i18n
    • Updated translations: German, Italian, Slovak ### WML engine
    • Bug #21643: Removing fog from a single hex no longer makes the hex ugly.
    • WML files whose names contain whitespace trigger preprocessor errors.
    • Bug #21722: Event handlers with multiple names never fired. ### User interface
    • Corrected most of the issues left with the new default theme.
      • Reintroduced the alignment, race and side being shown in the sidebar.
      • Adjusted the theme to the size and shape of the new minimap frame images.
      • Certain changes to the used text colors, sizes and alignment.
    • Non-team labels no longer remove team labels that were present in the same hex.
    • New colors for the Light Red and Dark Red minimap markers.
    • Bug #21724: 'none' is now a special case for [unit_type] ellipse ### Miscellaneous and bug fixes
    • Units can no longer be moved in linger mode (bug #21450).
    • Changed: Updated valgrind suppression file.
    • Fixed color issues with font_rgb in unit status labels in themes.
    • Labels are now removed when shroud/fog is removed, rather than waiting for a new turn (bug #21434).
    • Percent signs show when describing traits that increase damage or attacks by a percentage (bug #21577).
    • Linux dbus notifications: Only last 5 messages are remembered, and they are displayed with the most recent ones first.
    • Fixed bug #21736: MP create screen always defaulting to top entry.