forked from wesnoth/wesnoth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangelog
13449 lines (13289 loc) · 673 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.4+dev:
* Campaigns:
* 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.
* 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:
* 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.
* Fix bug #24762: Editor actions are out of sync after resizing.
* WML engine:
* Add color= attribute to [message].
* 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.)
* AiWML:
* 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
* 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_unit). 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 gramamr generator are supported
* 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)
* 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
* tolist() will now invert the effect of tomap()
* debug_print() now shows in console 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
* 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
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.
* Graphics:
* New generic portraits for the Walking Corpse and Soulless
* Language and i18n:
* Updated translations: Galician, Scottish Gaelic, Russian
* Lua API:
* New function wesnoth.get_viewing_side
* New function wesnoth.remove_dialog_item
* Multiplayer:
* A New Land:
* Removed the ability to select individual factions when using map
settings as this breaks player recruit lists (bug #23593).
* Era names no longer support formatting markup in the game setup screen.
* Removed the Silver Mage from the available leaders for the Rebels faction
in Age of Heroes.
* Fixed "Accept whispers from friends only" not working with the default
lobby UI, and added a warning every 5 minutes for individual rejected
senders.
* Allow custom colors in MP connect dialog (bug #23629).
* It is now possible to change a side's controller by WML (for example with
[modify_side]) in a MP game.
* Changing teams by WML in a MP game causes less bugs (bug #23028).
* MP campaigns now behave more like single-player campaigns.
* Various fixes in the MP game setup screens (bugs #23641, #23509, #23496,
#23462).
* Units:
* Fixed the Shuja not having the default AMLA.
* User interface:
* Fixed minimap buttons appearing without contents or in the wrong state
during WML start events until they are interacted with or control is given
to the player for the first time or some other unspecified thing happens.
* Force uniform font rendering settings across X11 and Apple OS X, avoiding
color glitches resulting from incorrect applications of subpixel hinting
(bug #20337).
* Hide mod options from the user command prompt dialog in the MP lobby when
not authenticated as a mod.
* Fixed unit bars, ellipses, and orbs disappearing for individual units in
replay mode when using Skip Animations/Quick Replays if they moved without
attacking or otherwise switching to a new animation.
* Chat Log dialog now starts on the last log page when there are multiple
pages.
* Fixed Wesnoth's fonts remaining in use by Windows after abnormal exits, as
well as being available to other applications.
* Started showing on which difficulty levels a campaign was completed.
* Modifications for single-player campaigns are now selectable directly in
the single-player Campaigns menu.
* The game now automatically detects whether to show the game setup screen
in single-player mode.
* WML engine:
* Added support for [object] duration=turn end
* New or updated image path functions:
* ~BW(): converts an image to black and white
* ~NEG() now supports 0,1 or 3 arguments, allowing solarization effects
* ~SWAP(): swaps the RGBA channels of the image
* ~CROP(): now supports negative x and y values.
* Added support for SLF in [label] when used inside an event
* Added synced=yes/no (default yes) to [set_menu_item]
* [options] is now recognized inside [campaign]
* type=sp/mp/hybrid now must be specified for [modification]s
* Miscellaneous and bug fixes:
* Removed abandoned libana network API implementation.
* Fixed bug #23201, toggle icons display error in replay.
* Added --wconsole switch to allocate a console on startup (Windows-only).
* Added cwesnoth.cmd wrapper script to start Wesnoth with a console
displaying stdout+stderr (Windows-only).
* Updated mainline campaigns and multiplayer scenarios to use [filter] status=
instead of [filter] [filter_wml] [status]
* Fixed a segfault in [move_units_fake]
* Fixed unbound memory read in the MP map selection screen that could lead
to a segmentation fault or other abnormal behavior (bug #23606).
* Made silence.ogg larger to work around a crash involving the multiplayer
lobby with music and sound enabled (bug #23633, bug #23599) with libvorbis
builds affected by Debian bug #782831.
* Moved [role] tag to Lua (fix for bug #23630)
* Removed broken Python port of wmlxgettext from data/tools/.
* Default to non-strict compilation with CMake.
* It is no longer possible to undo moves before the last (manual) shroud
update.
* Debug commands are now synced.
* Fixed GUI2 toggle panels in some way that the author of this changelog
entry chose not to specify.
* Removed some config reloads, especially when leaving games or entering
the single-player Campaigns menu.
* It is now possible to use WML to disable/enable quick 4 MP leaders in the
Default era and the time over advantage dialog by setting a WML variable.
Version 1.13.0:
* Security fixes:
* Fixed arbitrary file read from WML/Lua API (CVE-2015-0844, bug #23440).
* Add-ons client:
* The Update All button is now displayed on all Add-on Manager views instead
of just the Upgradable filter view, and enabled only when there is at
least one add-on that may be upgraded.
* Add-ons server:
* Add-on metadata pattern blacklisting implemented.
* Major internal refactoring done.
* AI:
* New Micro AI: Fast AI
* Big Animals Micro AI: bug fix for units not attacking when [avoid_unit] is
not set
* Bottleneck Micro AI: bug fix for case when allied units are present
* Coward Micro AI: new optional key attack_if_trapped=
* Forest Animals Micro AI: bug fix for wander terrain lying on border hexes
* Herding Micro AI: bug fix for dogs sometimes having moves left at end
* Lurkers Micro AI: fix bug in wander terrain selection
* Lurkers Micro AI: bug fix for attack error when lurker runs into ambush
* Lurkers MAI: bug fix for attempting to attack petrified units
* Messenger Escort Micro AI: new optional parameters [filter],
[filter_second] and invert_order=
* Stationed Guardian Micro AI: make guard_x/y= optional keys
* Stationed Guardian Micro AI: bug fix for unreachable stations
* Messenger Escort Micro AI: bug fix for escort units blocking messenger's
progress
* Several Micro AIs: fix a variety of rarely occurring but serious bugs, such
as invalid savegames or disabling the AI from working for the rest of the
turn or after changing the Micro AI settings.
* Bug fix for requiring unnecessary keys for removal of several Micro AIs
* Fixed a bug that made it impossible to change or delete Micro AIs after a
game had been reloaded (bug #21750). This was a general bug in the RCA AI
mechanism and applied to other CAs as well, but it was most visible in the
Micro AIs.
* Some internal reorganization of Micro AI code to facilitate customizing
them for UMC and adding functionality from other versions of Wesnoth. Some
code cleanup for consistency, readability and speed, as well as fixing of
some minor and subtle bugs.
* Fix bug in Random Recruit Micro AI: the AI can now handle custom castle
terrain independent of its terrain code
* Fix bug in Return Guardian and Goto Micro AIs when there is no path to
the goal hex
* Several fixes of translatable strings in Micro AIs
* Micro AIs: only display on-screen error messages when in debug mode
* Add conditional inclusion of AI macros to AI cfgs in data/ai
* Campaigns:
* Changed all occurrences of {FLAG_VARIANT ragged} to {FLAG_VARIANT6 ragged}
* Singleplayer campaign creation now utilizes the create, configure,
and connect engines from the multiplayer codepath.
* Eras, mods, and options are now available for sp campaigns.
* Fix sighted events firing too early in several scenarios. Fixes bug #22466
* Use the new bigmaps for A Tale of Two Brothers, Delfadors Memoirs, The
Hammer of Thursagan, Northern Rebirth and the epilogue of Legend of
Wesmere.
* Remaining cases of old-style note and carryover information in [objectives]
have been converted to a newer style.
* A Tale of Two Brothers:
* Updated music playlists.
* Descent into Darkness:
* Fixed various issues with player and enemy gold and income in
'Descent into Darkness'.
* Fixed Darken Volk's ellipse in scenarios 'A Small Favor part 3' and
'Alone at Last'.
* Fixed Darken Volk being completely passive in 'Alone at Last'.
* 'Return to Parthyn' now has variable content depending on whether
necromancy was used in 'Saving Parthyn'.
* Eastern Invasion:
* In 'Captured', stolen gold won't be mentioned if the player had no
carryover gold.
* Updated maps for scenario 14, 16 and 17b.
* New animation for Ravanal's shadow wave.
* Added the Skeleton Rider line.
* New map for 'Mal-Ravanal's Capital', as well as updated
maps for scenario 2 and 4b.
* Tweaked and rebalanced all scenarios up to 'Two Paths'.
* Heir to the Throne:
* Tweaked and expanded music playlists for all scenarios.
* Fixed missing message in 'The Siege of Elensefar'.
* Hide unit variations that should not be listed in the help browser.
* Liberty:
* Fixed possibility of no viable routes around guards in 'Hide and Seek'.
* Tweaked resistances for the Skeleton Rider line.
* Northern Rebirth:
* Fixed Sister Thera and Father Morvin respawning into the recall list if
the other is on the north or west map edges.
* Sister Thera and Father Morvin will no longer speak dialog on their death
after 'The Pursuit'.
* The maps for 'Infested Caves', 'Clearing the Mines', and 'The Pursuit'
have been completely redone.
* All scenarios up to 'Old Friend' have been significantly tweaked and
rebalanced.
* Sceptre of Fire:
* Balancing changes for 'The Dragon'.
* Son of the Black Eye:
* S2: adjusted starting villages; scenario now ends if Kapou'e is already
on the signpost when the messenger comes back
* S3: make objectives consistent between before and after trolls appear
* S6: remove AI controller. It doesn't work with sides without a leader
* S6: reduce randomness of unit types unloading from galleons
* Minor balance tweaks to scenarios 7, 8, 12, 14, 15, 17 and 18.
* Made allied leaders less likely to get themselves killed.
* Minor changes to objectives and messages in scenarios 7, 8 and 14
* The Hammer of Thursagan:
* Fixed missing objective in 'The Court of Karrag'.
* Rebalanced scenarios 'Invaders', Mages and Drakes' and 'Fear'.
* Set Masked Dwarvish Lord range attack same as for Dwarvish Lord
* Fixed some messages not being shown in custom events in 'The Underlevels'
* 'The Court of Karrag' and 'Epilogue' feature a new map.
* The Rise of Wesnoth:
* Hide unit variations that should not be listed in the help browser.
* Tutorial:
* Rewritten with an eye to being less constricting and more informative.
* Under the Burning Suns
* Fixed recruited Desert Archers being always male.
* Fixed malformed rand range errors during AI turns on medium difficulty
in 'A Stirring in the Night'.
* Fixed bug #22800: Cloaked Figure appears in strange location.
* Fixed bug #22799: No allies killed by enemy reinforcements.
* Fixed bug #22790: Various problems with dehydration.
* Hide unit variations that should not be listed in the help browser.
* C++ Engine:
* Purge "human_ai" controller type. This is a fixup of bugfix #18829 below.
* Editor:
* Added an entry for the terrain description help to the context menu.
* Default hotkey bindings for brushes (1-5)
* Disabled the swap palette button when the unit palette is active.
* Disabled the tod schedule and playlist menus in pure map mode.
* Support for displaying the saved status of the selected area.
* Fixed error messages about missing UI elements.
* Fixed falcon race missing an icon due to having incorrectly-named image
files.
* Graphics:
* New Ancient Lich baseframe and animations
* New standing animation (NE and SE) for the Revenant
* New standing animation for the Dwarvish Stalwart
* Smooth unit movement over terrains with elevation such as keeps and
bridges (bug #20635).
* Fixed bug #22045: Only blit neutral surfaces.
* [item] images are now subject to local ToD lighting effects instead of
just the current map-wide ToD lighting (bug #22215).
* Disabled "alpha thresholding" in the bilinear interpolation algorithm
used for all sprites and images. (This was introduced as a workaround
for an old bug.)
* Add a new bilinear interpolation implementation, which properly performs
alpha weighting when averaging colors, and rename old one as the legacy
version.
* Align unit overlays to the sprite rather than the occupied hex.
* Added Brazier and Lit Brazier embellishment terrains
* New beach waves terrain animation.
* New images for the dummy, barrel, and green cloak items
* Updated Snowy Orcish Castle and Keep terrain images
* Help browser:
* Several sections have been rewritten or had their layout improved
* Added trait list with links to the help page for unit types
* Added Defense Cap column to the Terrain Modifiers table in unit help pages
for units with a defense cap on at least one terrain type, which also now
include a note to this effect in their special notes.
* Fixed a bug which caused the terrain section topic not to properly generate
a list of its contents.
* Add a new help section to the terrains topic which explains about mixed
terrain types.
* When using the terrain description feature with a mixed terrain type, the
game will autogenerate a formatted explanation of its best / worst movement
/ defense properties.
* Added automatic help entries for all eras, fulfilling Feature Request
#22107
* Fixed in-game help descriptions of default factions, using content from
wiki
* Added automatically generated lists of races and alignments to the
descriptions of factions
* Autogenerated Time of Day Schedule section
* Unit types that do not include any visible (hide_help=no) variations no
longer generate topic sections.
* Language and i18n:
* Updated translations: Chinese (Simplified), Chinese (Traditional), Czech,
French, Galician, German, Greek, Hungarian, Italian, Lithuanian, Polish,
Portuguese, Russian, Scottish Gaelic, Slovak, Spanish, Vietnamese
* Fixed cmake pot-update target on Debian and other systems that do not use
bash as the default /bin/sh.
* Lua API:
* Upgraded Lua to version 5.2.3.
* Fix bug #21761: wesnoth.synchronize_choice will now give a warning when
the table returned by the user-specified function is not completely valid,