The Battle for Wesnoth v1.15.3 Release Notes

  • ### AI

    • Merge Experimental AI candidate actions (CAs) into default AI
      • CAs merged: retreat injured, spread poison, place healers, move to any enemy
      • CAs not merged: grab villages and village hunt, as the respective default AI CAs are better as general purpose CAs. Also not merged was castle switch, which can cause undesired behavior in singleplayer scenarios, and recruit rushers, which is too different from default recruiting (would change balance too much) and because it can currently not deal with multiple leaders and all the recruitment aspects. An option to use this alternative recruiting will be provided in the future.
      • Previous default AI CA removed: retreat phase
      • The previous default CA is still available by using [ai]ai_algorithm=ai_default_rca_1_14 or by selecting "1.14 Default AI" in the multiplayer computer player selection menu
      • The Experimental AI is now only available in debug mode (in MP) as it is mostly identical to the new default AI
      • Many improvement were made to the new default CAs, to make them work correctly and consistently in general settings, such a taken AI aspects (aggression, attacks, [avoid], caution, ...) and unit guardian status into account, improved attack ratings and multi-leader functionality, and bug fixes
    • Bottleneck Defense Micro AI:
      • New optional parameter [filter]
      • Fix bug of units not participating if too far in front of the bottleneck
    • Healer Support Micro AI: take unit guardian status and passive_leader aspect into account
    • Forest Animals Micro AI: rabbit holes on the map border are now automatically excluded
    • New ai_helper functionality: path finding, next_hop and get_attackable_enemies taking avoid into account; next_hop with pre-calculated path and fanning out; new options to get_cheapest_recruit_cost
    • Add [filter_own] optional tag to all default and Experimental AI candidate actions
    • Allow comma-separated list of ids in addition to 'yes/no' for AI aspects leader_ignores_keep, passive_leader and passive_leader_shares_keep
    • Fix [leader_goal] for sides with multiple leaders
    • Change E_NOT_REACHED_DESTINATION from error to warning
    • The advancement aspect can now also use amlas. ### Campaigns
    • An Orcish Incursion:
      • Moved to addons server
    • Descent into Darkness:
      • Add new portrait for Dela Keshar
      • Remove dark adepts from recruit list
      • Add special units and AMLA paths
      • Revised dialogue
      • Increased map interactability
      • S3: reworked scenario
      • S5: adjust enemy recruits and gold
    • Legend of Wesmere:
      • S3: fix scenario-breaking bug introduced in 1.15.2
    • Liberty
      • Revise gameplay in all scenarios and redraw all maps
      • Merge S6 and S7 into a new scenario
    • Sceptre of Fire:
      • General prose/dialogue revision
      • New scenario (now the third)
      • Various map and scenario updates
      • Make use of rails terrain
      • Dwarves can purchase runes (temporary status boosts)
    • Secrets of the Ancients:
      • Prevent hero death from triggering new corpse recruitable dialog (issue #4503)
      • Fix last breath dialog for bats firing multiple times in the campaign
      • Fix bug of regular WC appearing in recruit list in S05 Blackwater
      • Fix special plague attack making rats when spiders are called for
      • Fix missing portraits for Shynal
    • Tutorial:
      • Redraw S2 and reduce difficulty
    • Wings of Victory has been removed. ### Editor ### Language and i18n
    • Updated translations: Ancient Greek, Chinese (Traditional), Czech, Dutch, Esperanto, Finnish, French, Italian, Korean, Portuguese, Portuguese (Brazil), Russian, Spanish, Turkish
    • Fix Rename Unit dialog having untranslated text (issue #4569).
    • Use /translations instead of /translations to find core translation catalogues on Windows. ### Terrains
    • Add Stone Walls variation Catacombs (Xot) including some overlays
    • New dwarf castle variations: Non-cave (Cf), ruined (Cfr) and snow (Cfa)
    • New elf castle variation: snow (Cva)
    • Fixes and touchups to mushroom terrains Tb and Tf ### Units
    • Add a ranged attack and the cures ability to Elvish Lady
    • Add mushroom defense cap to mounted and some flying units
    • Decreased hitpoints of Dwarvish Lord from 79 to 74
    • Decreased hitpoints of Dwarvish Steelclad from 59 to 55
    • Increased hitpoints of Dwarvish Thunderguard from 44 to 47
    • Increased hitpoints of Dwarvish Pathfinder from 42 to 45
    • Increased melee damage of Dwarvish Stalwart from 7-3 to 8-3
    • Increased melee damage of Dwarvish Sentinel from 9-3 to 10-3
    • Dunefolk: rebalancing and renaming of various units
    • Dunefolk: some graphics additions and updates
    • Orcs: revise some unit descriptions
    • Elves: revise all unit descriptions
    • Cost of Drake Warrior changed from 30 to 32
    • Cost of Drake Arbiter changed from 31 to 32
    • Cost of Drake Trasher changed from 31 to 32
    • Cost of Drake Flare changed from 35 to 33
    • Cost of Sky Drake changed from 30 to 28
    • Cost of Saurian Ambusher changed from 30 to 24
    • Cost of Saurian Oracle changed from 27 to 28
    • Cost of Saurian Soothsayer changed from 27 to 25
    • Cost of Dwarvish Steelclad changed from 32 to 36
    • Cost of Dwarvish Thunderguard changed from 30 to 27
    • Cost of Dwarvish Stalwart changed from 32 to 30
    • Cost of Dwarvish Berserker changed from 33 to 30
    • Cost of Outlaw changed from 28 to 26
    • Cost of Trapper changed from 27 to 21
    • Cost of Gryphon Master changed from 37 to 38
    • Cost of Swordsman changed from 25 to 29
    • Cost of Knight changed from 40 to 38
    • Cost of Lancer changed from 40 to 44
    • Cost of Dragoon changed from 34 to 27
    • Cost of Duelist changed from 32 to 29
    • Cost of Lieutenant changed from 35 to 34
    • Cost of Merman Warrior changed from 28 to 26
    • Cost of Ogre changed from 33 to 30
    • Cost of Goblin Knight changed from 32 to 28
    • Cost of Goblin Pillager changed from 32 to 28
    • Cost of Troll changed from 29 to 27
    • Cost of Troll Rocklobber changed from 29 to 25
    • Cost of Naga Warrior changed from 27 to 24
    • Cost of Orcish Crossbowman changed from 26 to 21
    • Cost of Orcish Slayer changed from 33 to 26
    • Cost of Elvish Hero changed from 30 to 26
    • Cost of Elvish Captain changed from 32 to 28
    • Cost of Elvish Marksman changed from 37 to 31
    • Cost of Elvish Ranger changed from 38 to 31
    • Cost of Elvish Rider changed from 31 to 32
    • Cost of Elvish Druid changed from 34 to 27
    • Cost of Elvish Sorceress changed from 34 to 32
    • Cost of Elder Wose changed from 31 to 27
    • Cost of Revenant changed from 28 to 31
    • Cost of Deathblade changed from 28 to 34
    • Cost of Dark Sorcerer changed from 32 to 33
    • Cost of Blood Bat changed from 21 to 22
    • Cost of Red Mage changed from 40 to 38
    • Cost of White Mage changed from 40 to 38
    • MP of Merman Spearman changed from 6 to 7
    • HP of Merman Spearman changed from 40 to 43
    • MP of Merman Javelineer increased from 6 to 7
    • HP of Merman Javelineer changed from 55 to 58 ### User interface
    • Moved tutorial to campaigns menu
    • Moved language button to icon
    • "Core" type add-ons are now only accessible via hotkey.
    • Removed "Classic" in-game theme.
    • Textboxes now have a hover effect as well as an I-beam cursor.
    • Added the Private Replay checkbox to the Multiplayer Create Game screen. This separates whether observers are allowed from whether the replay will be publicly available.
    • Reworked styling of progress bars and the network transfer progress dialog.
    • Moved the MP server list from a separate dialog to the Connect to Server dialog proper and added functionality for managing player-defined servers (issue #4564).
    • The load-game dialog can now see the directories used by Wesnoth 1.14, 1.12, etc.
    • The search box in the Campaigns menu now takes campaign abbreviations and descriptions into account.
    • The recruit and recall dialogs have a tooltip over the level number to show what the unit can advance to (issue #4135) ### Lua API
    • unit:transform() now takes an optional variation parameter
    • Support side.variables for access to side variables, similar to unit.variables
    • New read-write keys in unit userdata: ellipse, halo, description, renamable
    • New functions for working with WML: wml.merge, wml.diff, wml.patch, wml.find_child, wml.attribute_count, wml.equal, wml.valid, wml.interpolate
    • wesnoth.wml_matches_filter renamed to wml.matches_filter (the old name still works)
    • Moved to units module: wesnoth.create_unit, wesnoth.get_unit, wesnoth.get_units, wesnoth.get_recall_units
    • The wesnoth.units module now acts like a metatable for unit userdata.
    • New wesnoth.units.find gets units on either the map or any side's recall list.
    • Moved to interface module: wesnoth.scroll, wesnoth.zoom, wesnoth.get_mouseover_tile
    • wesnoth.interface.get_displayed_unit aliased to wesnoth.unit.get_hovered
    • unit portrait and recall_filter are now writable
    • Moved to new sides module: wesnoth.get_sides, wesnoth.is_enemy, wesnoth.match_side, wesnoth.get_starting_location, wesnoth.set_side_id, all AI-related functions
    • Functions that previously only took a side index as the first parameter now also accept the side proxy userdata.
    • The wesnoth.sides module acts like a metatable for the side userdata.
    • Added __tostring functions to a number of Wesnoth userdata types.
    • Unit movetype functions renamed (defense_on, movement_on, vision_on, jamming_on, resistance_against). The defense_on and resistance_against functions return the actual values, rather than the raw WML values.
    • New function wesnoth.units.chance_to_be_hit is equivalent to deprecated wesonth.units.defense but conveys the meaning better.
    • Unit movetype functions (excluding resistance) can take a location instead of a terrain code, for convenience
    • Side proxy now has starting_location member
    • Fix ai.aspects.grouping not returning the aspect's value
    • New stringx module exposes various split/join functions used by the engine, as well as trim
    • Wesnoth's format functions moved to stringx (format_conjunct_list, format_disjunct_list, vformat)
    • location_set module extended to support set operators (& | ~ -) as well as a few additional functions
    • new function wesnoth.create_side ### WFL engine
    • New functions resistance_on(), vision_cost(), jamming_cost() that work in gameplay contexts (eg filters)
    • Unit object now has resistance, defense, movement_cost, vision_cost, jamming_cost, flying
    • For FormulaAI, the game map object has an alternate access mode - map.gamemap[loc(x,y)] ### WML engine
    • Support upkeep in StandardUnitFilter
    • [effect]apply_to=variation now supports heal_full
    • Support [set/clear_variable] inside [modify_unit/side]
    • Support [variables] in [modify_side], as in [modify_unit]
    • [filter_weapon] implemented in abilities used as weapons specials to be the same as true weapons specials (implement filter_weapon in [filter_student] instead of [filter_self])
    • All special weapons can be used in [abilities] now (this was not the case yet for [heal_on_hit], [plague] and [swarm])
    • [time_area] can now be used without specifying a custom time schedule, this can in particular be used in the scenario editor if one just wants to mark an area to use in as [event] ### Packaging
    • The Wesnoth client now looks for the data/dist file when logging into the multiplayer server. This file should contain one of the following values based on where the package is for: Default, Steam, SourceForge, Flatpak, macOS App Store, Linux repository, iOS, Android, BSD repository ### Miscellaneous and bug fixes
    • New build-dependency: Python3 is required to run the WML unit tests (on non-Windows)
    • 80% of WML unit tests now run in a batch using a single instance of Wesnoth (non-Windows only)
    • Fix --userdata-dir deprecation warning being printed when starting wesnoth without arguments when -DPREFERENCES_DIR="..." was defined at compile time.
    • Make wmllint recognize [load_resource] (issue #4538).
    • Removed map scaling algorithm customization. Nearest-neighbor scaling will now always be used.
    • Make wmllint ignore race= keys if they are part of filters inside [unit_type] (issue #4105)
    • Removed a few asserts from wmllint and postponed a few unit sanity checks to the closing of a [unit_type] tag (issue #4102)
    • Added tool tmx_trackplacer, a file converter for editing map tracks with Tiled (PR #4464)
    • Added tool trackviewer, which has the animation-preview functions of trackplacer (PR #4574)
    • Removed the python2 trackplacer tool (issue #4365)
    • Made wmlscope recognize and analyze optional macro arguments
    • Made map_file=Example.map support looking in the [binary_path]'s "maps/" directory (issue #4633)
    • Make wesnoth_addon_manager not generate packet.dump files any more (issue #4651)
    • Improved handling of defense cap and {NOTE_DEFENSE_CAP} in wmllint (issue #4379)
    • Removed the leftover Khalifate multiplayer faction files. (PR #4714)