/
changelog
13968 lines (13805 loc) · 704 KB
/
changelog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Version 1.13.7+dev:
* Editor:
* Fixed a crash when placing units.
* Restored the ability to preview different ToDs.
* 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.
* 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 writeable, 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.
* 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.
* 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.
* 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
* Miscellaneous and bug fixes:
* Fixed base animation showing on walking corpse & soulless bats (bug #25673)
Version 1.13.7:
* 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.
* 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.
Version 1.13.6:
* 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)
Version 1.13.5:
* 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=<integer>
* 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.
Version 1.13.4:
* 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).
Version 1.13.3:
* 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 (Mdy^Xm),
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)
Version 1.13.2:
* 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)