forked from wesnoth/wesnoth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangelog
13720 lines (13559 loc) · 689 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.5+dev:
* 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.
* 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).
* Language and i18n:
* Updated translations: Finnish, Russian
* Music and sound effects:
* Added a preference to pause the music when the game loses focus.
* Now the music fades out between scenarios.
* 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.
* New sprite for Tentacle of the Deep.
* Tweaked colors for all time schedules.
* 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.
* Textboxes now have a blinking cursor when focused.
* 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 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.
* 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
* 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.
* 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.
* 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)
* 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=<value>
* 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=<number>
* 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 <current working dir>\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
<user data dir>\logs during initialization and first created in the user's
temporary files directory defined by Windows. Log files are named like
"wesnoth-<TIMESTAMP>-<PID>.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
Version 1.13.1:
* 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.