forked from DFHack/dfhack
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathchangelog.txt
More file actions
1892 lines (1426 loc) · 107 KB
/
changelog.txt
File metadata and controls
1892 lines (1426 loc) · 107 KB
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
=== Scroll down for changes
===[[[
For information on how to edit/build the changelogs, see `docs/html/docs/dev/Documentation.html` or `docs/dev/Documentation.rst`.
The text between the `syntax-reference` markers is included in `docs/dev/Documentation.rst`, so it must be valid RST.
It is kept in this file as a quick syntax reference.
===syntax-reference-start
The changelogs use a syntax similar to RST, with a few special sequences:
- ``===`` indicates the start of a comment
- ``#`` indicates the start of a release name (do not include "DFHack")
- ``##`` indicates the start of a section name (which must be listed in ``docs/sphinx_extensions/dfhack/changelog.py``)
- ``-`` indicates the start of a changelog entry. **Note:** an entry currently must be only one line.
- ``:`` (followed by space) separates the name of a feature from a description of a change to that feature.
- Changes made to the same feature are grouped if they end up in the same section.
- ``:\`` (followed by space) avoids the above behavior
- ``- @`` (the space is optional) indicates the start of an entry that should only be displayed in ``NEWS-dev.rst``.
- Use this sparingly, e.g. for immediate fixes to one development build in another development build that
are not of interest to users of stable builds only.
- Three ``[`` characters indicate the start of a block (possibly a comment) that
spans multiple lines. Three ``]`` characters indicate the end of such a block.
- ``!`` immediately before a configured replacement (see ``docs/sphinx_extensions/dfhack/changelog.py``) stops that occurrence from being replaced.
===syntax-reference-end
Template for new versions:
## New Tools
## New Features
## Fixes
## Misc Improvements
## Documentation
## API
## Lua
## Removed
]]]
================================================================================
======== IMPORTANT: rename this, and add a new "Future" section, BEFORE ========
======== making a new DFHack release, even if the only changes made ========
======== were in submodules with their own changelogs! ========
================================================================================
# Future
## New Tools
## New Features
## Fixes
- `sort`: Using the squad unit selector will no longer cause Dwarf Fortress to crash on exit
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 53.05-r1
## New Tools
## New Features
- compatibility with 53.05
## Fixes
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 53.04-r1.1
## New Tools
## New Features
## Fixes
- fixed misalignment in ``widgets::unit_list``
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 53.04-r1
## New Tools
## New Features
## Fixes
- `buildingplan`: Bolt throwers will no longer be constructed using populated bins.
- `RemoteFortressReader`: updated siege engine facing enums for new diagonal directions
- `suspendmanager`: treat reinforced walls as a blocking construction and buildable platform
## Misc Improvements
- `autolabor`: support for new dying and siege-related labors
- `blueprint`: support for reinforced walls and bolt throwers
## Documentation
## API
## Lua
## Removed
# 53.03-r1
## New Tools
## New Features
## Fixes
## Misc Improvements
- Release builds for Linux are now compiled with gcc 11
## Documentation
## API
## Lua
## Removed
# 53.02-r2
## New Tools
## New Features
## Fixes
- `buildingplan`: Building costs for reinforced walls are now correct.
- `cleanconst`: do not attempt to clean Reinforced constructions
## Misc Improvements
- `buildingplan`: Added support for bolt throwers and siege engine rotation.
## Documentation
## API
## Lua
## Removed
# 53.02-r1
## New Tools
## New Features
## Fixes
## Misc Improvements
- Core: added ``gps`` (``graphicst``) to the set of globals whose sizes must agree for DFHack to pass initialization checks
## Documentation
## API
## Lua
## Removed
# 53.01-r1
## New Tools
## New Features
## Fixes
## Misc Improvements
- `stockpiles`: add support for managing the dyed, undyed, and color filter settings.
## Documentation
## API
## Lua
## Removed
# 52.05-r2
## New Tools
## New Features
## Fixes
- `script-manager`: the ``scripts_modactive`` and ``scripts_modinstalled`` folders of a script-enabled mod will be properly added to the script path search list
## Misc Improvements
## Documentation
- added a clarification link to DF's Lua API documentation to the DFHack Lua API documentation, as a way to reduce end-user confusion
## API
## Lua
## Removed
# 52.05-r1
## New Tools
## New Features
## Fixes
- improved file system handling: gracefully handle errors from operations, preventing crashes.
- `zone`: animal assignment dialog now tolerates corrupt animal-to-pasture links.
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 52.04-r1
## New Tools
## New Features
- Compatibility with DF 52.04
## Fixes
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 52.03-r2
## New Tools
## New Features
- `nestboxes`: allow limiting egg protection to nestboxes inside a designated burrow
- `tailor`: tailor now provides optional dye automation
## Fixes
- ``Units::getReadableName`` will no longer append a comma to the names of histfigs with no profession
- `stockpiles`: fixed off-by-one error in exporting furniture stockpiles
## Misc Improvements
## Documentation
## API
- ``Job``: new functions ``createLinked`` and ``assignToWorkshop``
- ``Units``: new functions ``getFocusPenalty``, ``unbailableSocialActivity``, ``isJobAvailable``
## Lua
- New functions: ``dfhack.jobs.createLinked``, ``dfhack.jobs.assignToWorkshop``, ``dfhack.units.getFocusPenalty``, ``dfhack.units.unbailableSocialActivity``, and ``dfhack.units.isJobAvailable``
## Removed
# 52.03-r1.1
## New Tools
## New Features
## Fixes
- job descriptions of mix dye job will display proper dye names
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 52.03-r1
## New Tools
## New Features
## Fixes
- `preserve-rooms` will no longer hang on startup in the presence of a cycle in the replacement relationship of noble positions
## Misc Improvements
## Documentation
## API
- Adjusted the logic inside ``Military::removeFromSquad`` to more closely match the game's own behavior
## Lua
## Removed
# 52.02-r2
## New Tools
## New Features
## Fixes
- Several fixes related to changes in file system handling in DF 52.01
- `dig-now`: don't allow UNDIGGABLE stones to be excavated
## Misc Improvements
- `autoclothing`: added a ``clear`` option to unset previously set orders
## Documentation
## API
- Added GUI focus strings for new_arena: ``/Loading`` and ``/Mods``
- ``Filesystem::getBaseDir`` and ``Filesystem::getInstallDir`` added (and made available in Lua)
- Expanded the partial implementations of ``Military::addToSquad`` and ``Military::removeFromSquad``
## Lua
- Inserting values into STL containers containing nonprimitive types is now supported
## Removed
# 52.02-r1
## New Tools
## New Features
## Fixes
- Honor the "portable mode" preference setting for locating save folders. Fixes DFHack cosaves not working in most cases.
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 52.01-r1
## New Tools
## New Features
- `tweak`: ``animaltrap-reuse``: make it so built animal traps automatically unload the vermin they catch into stockpiled animal traps, so that they can be automatically re-baited and reused
## Fixes
## Misc Improvements
## Documentation
## API
## Lua
- ``widgets.Slider``: new mouse-controlled single-headed slider widget
## Removed
# 51.13-r1
## New Features
- Compatibility with DF 51.13
# 51.12-r1.1
## New Features
- Compatibility with Itch release of DF 51.12
# 51.12-r1
## Fixes
- `getplants`: will no longer crash when faced with plants with growths that do not drop seeds when processed
- `getplants`: use updated formula for calculating whether plant growths are ripe
- `getplants`: fix logic for determining whether plant growths have been picked
- `gui/teleport`: adapt to new behavior in DF 51.11 to avoid a crash when teleporting items into mid-air
- `script-manager`: fix lua scripts in mods not being reloaded properly upon entering a saved world on Windows
- `preserve-rooms`: don't warn when a room is assigned to a non-existent unit. this is now common behavior for DF when it keeps a room for an unloaded unit
- fixed an overly restrictive type constraint that resulted in some object types being glossed as a boolean when passed as an argument from C++ to Lua
- `plants`: will no longer generate a traceback when a filter is used
- `createitem`: multiple items should be properly created in stacks again
## Misc Improvements
- All places where units are listed in DFHack tools now show the translated English name in addition to the native name. In particular, this makes units searchable by English name in `gui/sitemap`.
- `dig`: ASCII overlay now displays priority of digging designations
- `spectate`: added prefer nicknamed units
- `blueprint`: support for recording zones
- `blueprint`: support for recording stockpile properties like names and stockpile links; does not yet support recording detailed contents configuration
- `strangemood`: support added for specifying unit id instead of selected unit or random one.
## API
- ``Random`` module: added ``SplitmixRNG`` class, implements the Splitmix64 RNG used by Dwarf Fortress for "simple" randomness
- ``Items::getDescription``: fixed display of quality levels, now displays ALL item designations (in correct order) and obeys vanilla SHOW_IMP_QUALITY setting
- ``cuboid::forCoord``, ``Maps::forCoord``: take additional parameter to control whether iteration goes in column major or row major order
## Lua
- ``script-manager``: new ``get_active_mods()`` function for getting information on active mods
- ``script-manager``: new ``get_mod_info_metadata()`` function for getting information out of mod ``info.txt`` files
## Removed
- removed historically unused ``Core::RegisterData``/``Core::GetData`` API and associated internal data structures
# 51.11-r1.2
## Fixes
- `preserve-tombs`: will no longer crash when a tomb is assigned to a unit that does not exist
# 51.11-r1.1
## Fixes
- `preserve-rooms`: will no longer crash when a civzone is assigned to a unit that does not exist
- `gui/design`: fix misaligned shape icons
# 51.11-r1
## Fixes
- `spectate`: don't show a hover tooltip for hidden units (e.g. invisible snatchers)
- `stockpiles`: fix one-off error in item type when importing furniture stockpile settings
- `dig-now`: fix cases where boulders/rough gems of incorrect material were being generated when digging through walls
- `dig-now`: properly generate ice boulders when digging through ice walls
- `gui/teleport`: now properly handles teleporting units that are currently falling or being flung
- `unload`: fix recent regression where `unload` would immediately `reload` the target
- ``Buildings`` module: do not crash if a ``map_block`` unexpectedly contains an item that is not on the master item vector
- `suspendmanager`: fix walls being treated as potential suitable access if another wall is built underneath
- text widgets no longer lose their cursor when the Ctrl-a (select all) hotkey is pressed when there is no text to select
## Misc Improvements
- `spectate`: show dwarves' activities (like prayer)
## API
- ``Military`` module: added ``addToSquad`` function
- ``Units`` module: added ``get_cached_unit_by_global_id`` to emulate how DF handles unit vector index caching (used in civzones and in general references)
- ``Buildings`` module: add ``getOwner`` (using the ``Units::get_cached_unit_by_global_id`` mechanic) to reflect changes in 51.11
- ``Units::teleport``: projectile information is now cleared for teleported units
- ``Buildings::setOwner``: updated for changes in 51.11
## Lua
- ``dfhack.military.addToSquad``: expose Military API function
- ``dfhack.buildings.getOwner``: make new Buildings API available to Lua
# 51.10-r1
## Misc Improvements
- Compatibility with DF 51.10
# 51.09-r1
## New Features
- `gui/journal`: Ctrl-j hotkey to launch `gui/journal` now works in adventure mode!
## Fixes
- Fix processing error in the overlay that displays unit preferences in the baron selection list
## API
- ``Filesystem`` module: rewritten to use C++ standard library components, for better portability
# 51.08-r1
## Misc Improvements
- Compatibility update for DF 51.08
# 51.07-r1
## New Features
- `spectate`: can now specify number of seconds (in real time) before switching to follow a new unit
- `spectate`: new "cinematic-action" mode that dynamically speeds up perspective switches based on intensity of conflict
- `spectate`: new global keybinding for toggling spectate mode: Ctrl-Shift-S
- `spectate`: new overlay panel that allows you to cycle through following next/previous units (regardless of whether spectate mode is enabled)
- `gui/sitemap`: is now the official "go to" tool. new global hotkey for fort and adventure mode: Ctrl-G
## Fixes
- Windows console: fix possible hang if the console returns a too-small window width (for any reason)
- `createitem`: produced items will now end up at the look cursor position (if it is active)
- `spectate`: don't allow temporarily modified announcement settings to be written to disk when "auto-unpause" mode is enabled
- `changevein`: fix a crash that could occur when attempting to change a vein into itself
- `overlay`: reset draw context between rendering widgets so context changes can't propagate from widget to widget
- `suspendmanager`: in ASCII mode, building planning mode overlay now only displays when viewing the default map, reducing issues with showing through the UI
## Misc Improvements
- `spectate`: player-set configuration is now stored globally instead of per-fort
- `autobutcher`: treat animals on restraints as unavailable for slaughter
- `stockpiles`: add property filters for brewable, millable, and processable (e.g. at a Farmer's workshop) organic materials
- `quickfort`: redesigned ``library/aquifer_tap.cav`` to improve the water fill rate
## Documentation
- `stonesense-art-guide`: guide for making sprite art for Stonesense
## API
- ``Military::removeFromSquad``: removes unit from any squad assignments
- ``Buildings::checkFreeTiles``: now takes a building instead of a pointer to the building extents
- ``Units::isUnitInBox``, ``Units::getUnitsInBox``: don't include inactive units
- ``Items::getItemBaseValue``: adjust to the reduced value of prepared meals (changed in DF 51.06)
- ``Items::getValue``: magical powers now correctly contribute to item value
## Lua
- ``dfhack.units.setAutomaticProfessions``: sets unit labors according to current work detail settings
- ``dfhack.military.removeFromSquad``: Lua API for ``Military::removeFromSquad``
- ``gui.dwarfmode``: adventure mode cursor now supported in ``getCursorPos``, ``setCursorPos``, and ``clearCursorPos`` funcitons
- ``dfhack.buildings.checkFreeTiles``: now takes a building pointer instead of an extents parameter
- ``overlay.isOverlayEnabled``: new API for querying whether a given overlay is enabled
- ``overlay``: widgets can now declare ``overlay_onenable`` and ``overlay_ondisable`` functions to hook enable/disable
## Removed
- `orders`: MakeCheese job removed from library/basic orders set. Please use `autocheese` instead!
# 51.06-r1
## Misc Improvements
- Compatibility with DF 51.06
# 51.05-r1
## Misc Improvements
- Compatibility with DF 51.05
# 51.04-r1.1
## Fixes
- `gui/launcher`: ensure commandline is fully visible when searching through history and switching from a very long command to a short command
- `gui/launcher`: flatten text when pasting multi-line text from the clipboard
- Ctrl-a hotkeys have been changed to something else (Ctrl-n) for tools that also have an editable text field, where Ctrl-a is interpreted as select all text
## API
- ``Core::getUnpausedMs``: new API for getting unpaused ms since load in a fort-mode game
# 51.04-r1
## Misc Improvements
- Compatibility with Steam release of DF 51.04
# 51.03-r1.1
## Misc Improvements
- Compatibility with Itch release of DF 51.03
# 51.03-r1
## Fixes
- `gui/gm-editor`: fix Enter key not being recognized for opening the selected object
# 51.02-r1
## Misc Improvements
- DFHack edit field widgets, such as the commandline editor in `gui/launcher`, now support text selection and other advanced text editing features from `gui/journal`
# 50.15-r2
## New Features
- `stockpiles`: add simple import/export dialogs to stockpile overlay panel
- `orders`: add transparent overlays to the manager orders screen that allow right clicks to cancel edit of quantities or condition details instead of exiting to the main screen
## Fixes
- `preserve-rooms`: don't erroneously release reservations for units that have returned from their missions but have not yet entered the fort map
- `preserve-rooms`: handle case where unit records are culled by DF immediately after a unit leaves the map
- `preserve-tombs`: properly re-enable after loading a game that had the tool enabled
- `zone`: assign animal to cage/restraint dialog now allows you to unassign a pet from the cage or restraint if the pet is already somehow assigned (e.g. war dog was in cage and was subsequently assigned to a dwarf)
- `stockpiles`: don't set ``use_links_only`` flag to a random value when the flag is not set to anything in the settings that are being imported
- `strangemood`: ensure generated names for artifacts match what the game itself would generate
## Misc Improvements
- `strangemood`: add ability to choose Stone Cutting and Stone Carving as the mood skill
- `suspendmanager`: add more specific messages for submerged job sites and those managed by `buildingplan`
- `dig-now`: handle digging in pool and river tiles
## Documentation
- Added example code for creating plugin RPC endpoints that can be used to extend the DFHack API
## API
- ``Units::isUnitInBox``, ``Units::getUnitsInBox``: add versions accepting pos arguments
- ``Units::getVisibleName``: when acting on a unit without an impersonated identity, returns the unit's name structure instead of the associated histfig's name structure
- ``Translation::generateName``: generates in-game names, mirroring DF's internal logic
- ``Persistence::getUnsavedSeconds``: returns the number of seconds since last save or load
## Lua
- ``dfhack.units.isUnitInBox``, ``dfhack.units.getUnitsInBox``: add versions accepting pos arguments
- ``widgets.FilteredList``: search keys for list items can now be functions that return a string
- ``dfhack.translation.generateName``: Lua API for ``Translation::generateName``
- ``dfhack.persistent.getUnsavedSeconds``: Lua API for ``Persistence::getUnsavedSeconds``
## Removed
- ``dfhack.TranslateName`` has been renamed to ``dfhack.translation.translateName``
## Internals
- Plugin command callbacks are now called with the core suspended by default so DF memory is always safe to access without extra steps
- Errors when unloading a plugin's DLL are now checked and reported
# 50.15-r1.2
## Misc Improvements
- Updated support for Itch
# 50.15-r1.1
## Misc Improvements
- Updated support for Classic (Itch not available for analysis yet)
# 50.15-r1
## Fixes
- `gui/prerelease-warning`: don't pop up during worldgen, only after a fort has been loaded
# 50.14-r2
## New Tools
- `infinite-sky`: (reinstated, renamed from ``infiniteSky``) automatically create new z-levels of sky to build in
- `forceequip`: (reinstated) forcibly move items into a unit's inventory
## New Features
- `tweak`: ``realistic-melting``: change melting return for inorganic armor parts, shields, weapons, trap components and tools to stop smelters from creating metal, bring melt return for adamantine in line with other metals to ~95% of forging cost. wear reduces melt return by 10% per level
## Fixes
- Fix mouse clicks bleeding through resizable DFHack windows when clicking in the space between the frame and the window content
- `autobutcher`: don't run a scanning and marking cycle on the first tick of a fortress to allow for all custom configuration to be set first
- `nestboxes`: don't consider eggs to be infertile just because the mother has left the nest; eggs can still hatch in this situation
- `timestream`: adjust the incubation counter on fertile eggs so they hatch at the expected time
- `timestream`: adjust the timeout on traps so they can be re-triggered at normal rates
- `logistics`: don't ignore rotten items when applying stockpile logistics operations (e.g. autodump, autoclaim, etc.)
## Misc Improvements
- DFHack now verifies that critical DF data structures have known sizes and refuses to start if there is a mismatch
- DFHack text edit fields now delete the character at the cursor when you hit the Delete key
- DFHack text edit fields now move the cursor by one word left or right with Ctrl-Left and Ctrl-Right
- DFHack text edit fields now move the cursor to the beginning or end of the line with Home and End
- Quickfort blueprint library: ``aquifer_tap`` blueprint walkthough rewritten for clarity
- Quickfort blueprint library: ``aquifer_tap`` blueprint now designated at priority 3 and marks the stairway tile below the tap in "blueprint" mode to prevent drips while the drainage pipe is being prepared
- `preserve-rooms`: automatically release room reservations for captured squad members. we were kidding ourselves with our optimistic kept reservations. they're unlikely to come back : ((
- `buildingplan`: add value info to item selection dialog (effectively ungrouping items with different values) and add sorting by value
- `timestream`: improve FPS by a further 10%
- `fix/occupancy`: additionally handle the case where tile building occupancy needs to be set instead of cleared
- `orders`: ``orders sort`` now moves orders that are tied to a specific workshop to the top of the list in the global manager orders screen
- `gui/pathable`: make wagon path to depot representation more robust
## Documentation
- Dreamfort: add link to Dreamfort tutorial youtube series: https://www.youtube.com/playlist?list=PLzXx9JcB9oXxmrtkO1y8ZXzBCFEZrKxve
- The error message that comes up if there is a version mismatch between DF and DFHack now informs you which DF versions are supported by the installed version of DFHack
## API
- ``DFHack::Units``: new function ``setPathGoal``
- ``Units::setAutomaticProfessions``: bay12-provided entry point to assign labors based on work details
## Lua
- ``dfhack.units``: new function ``setPathGoal``
- ``widgets.TabBar``: updated to allow for horizontal scrolling of tabs when there are too many to fit in the available space
## Removed
- UI focus strings for squad panel flows combined into a single tree: ``dwarfmode/SquadEquipment`` -> ``dwarfmode/Squads/Equipment``, ``dwarfmode/SquadSchedule`` -> ``dwarfmode/Squads/Schedule``
- `faststart`: removed since the vanilla startup sequence is now sufficiently fast
# 50.14-r1
## Fixes
- `preserve-rooms`: don't reserve a room for citizens that you expel from the fort
- `autobutcher`: fix regression in ordering of butcherable animals
# 50.13-r5
## New Tools
- `preserve-rooms`: manage room assignments for off-map units and noble roles. reserves rooms owned by traveling units and reinstates their ownership when they return to the site. also allows you to assign rooms to noble/administrator roles, and the rooms will be automatically assigned whenever the holder of the role changes
## Fixes
- prevent hang when buildings in zones are destroyed in the case where the buildings were not added to the zone in the same order that they were created (uncommon)
- `buildingplan`: improved performance in forts with large numbers of items
- System clipboard: when pasting single lines from the system clipboard, replace newlines with spaces so they don't show up as strange CP437 glyphs in-game
- `exterminate`: don't kill friendly undead (unless ``--include-friendly`` is passed) when specifying ``undead`` as the target
- `gui/settings-manager`: work details overlay no longer disappears when you click on a unit in the unit list
- `buildingplan`: fixed processing errors when using quick material filter slot '0'
- DFHack screens that allow keyboard cursor and camera movement while focused now also allow diagonal and Z-change keyboard cursor keys
- `strangemood`: manually-triggered Macabre moods will now correctly request up to 3 bones/remains for the primary component instead of only 1
- `regrass`: no longer add all compatible grass types when using ``--force`` without ``--new``
- `regrass`: ``--mud`` now converts muddy slade to grass, consistent with normal DF behavior
- `gui/pathable`: fix hang when showing trade depot wagon access and a trade depot is submerged under water or magma
- `gui/pathable`: fix representation of wagon paths over stairs and through doors
- DFHack state for a site is now properly saved when retiring a fort
- `gui/teleport`: fix issue when teleporting units that are not prone, resulting in later issues with phantom "cannot build here: unit blocking tile" messages
## Misc Improvements
- `sort`: can now search for stockpiles on the Places>Stockpile tab by name, number, or enabled item categories
- `gui/family-affairs`: you can start this tool by the name ``gui/pregnancy`` to start directly on the "Pregnancies" tab
- `buildingplan`: only consider building materials that can be accessed by at least one citizen/resident
- Dreamfort: integrate with `preserve-rooms` to assign relevant rooms to nobles/adimistrators
- Dreamfort: smooth tiles under statues and other large furniture that you can't easily smooth later
## Documentation
- add documentation for ``dfhack.items.findType(string)`` and ``dfhack.items.findSubtype(string)``
- `modding-guide`: added examples for reading and writing various types of persistent storage
- `modding-guide`: updated all code snippets for greater clarity
## API
- ``Units``: new ``isWildlife`` and ``isAgitated`` property checks
- ``Items::createItem``: removed ``growth_print`` parameter; now determined automatically
- ``DFHack::cuboid``: ``cuboid::clampMap`` now returns the cuboid itself (instead of boolean) to allow method chaining; call ``cuboid::isValid`` to determine success
## Lua
- ``dfhack.units``: ``isWildlife`` and ``isAgitated`` property checks
- ``dfhack.units.isDanger``: no longer unconditionally returns true for intelligent undead
- Overlay widgets can now assume their ``active`` and ``visible`` functions will only execute in a context that matches their ``viewscreens`` associations
- ``gui.simulateInput``: do not generate spurious keycode from ``_STRING`` key inputs
- ``dfhack.items.createItem``: removed ``growth_print`` parameter to match C++ API
## Removed
- ``quickfortress.csv``: remove old sample blueprints for "The Quick Fortress", which were unmaintained and non-functional in DF v50+. Online blueprints are available at https://docs.google.com/spreadsheets/d/1WuLYZBM6S2nt-XsPS30kpDnngpOQCuIdlw4zjrcITdY if anyone is interested in giving these blueprints some love
# 50.13-r4
## New Features
- `gui/journal`: new hotkey, accessible from anywhere in fort mode: Ctrl-j
## Fixes
- `changelayer`: fix incorrect lookup of geological region in multi-region embarks
- Copy/Paste: Fix handling of multi-line text when interacting with the system clipboard on Windows
- `zone`: fix alignment of animal actions overlay panel (the one where you can click to geld/train/etc.) when the animal has a custom portrait (like named dragons)
- `autodump`: cancel any jobs that point to dumped items
- `add-spatter`: fix a crash related to unloading a savegame with add-spatter reactions, then loading a second savegame with add-spatter reactions
- `plant`: properly detect trees in a specified cuboid that only have branches/leaves in the cuboid area
## Misc Improvements
- performance improvements for DFHack tools and infrastructure
- `gui/pathable`: give edge tiles where wagons can enter the map a special highlight to make them more identifiable. this is especially useful when the game decides that only a portion of the map edge is usable by wagons.
- `autodump`: allow dumping items into mid-air, converting them into projectiles like `gui/autodump` does
## Documentation
- improved docs for ``dfhack.units`` module functions
## API
- ``Units``: add overloads that take historical figures for ``getReadableName``, ``getVisibleName``, and ``getProfessionName``
- ``Units::isUnitInBox``, ``getUnitsInBox``: add versions that take a cuboid range, add filter fn parameter for ``getUnitsInBox``
- ``Units::getProfession``: account for units with fake identities
- ``Units::getCasteRaw``: get a caste_raw from a unit or race and caste
- ``cuboid``: construct from ``df::map_block*``, ``forBlock`` iterator to access map blocks in cuboid
- ``cuboid``: ``clamp(cuboid other)``, ``clampNew(cuboid other)`` for cuboid intersection. ``clampNew`` returns new cuboid instead of modifying.
- ``Items``: no longer need to pass MapCache parameter to ``moveToGround``, ``moveToContainer``, ``moveToBuilding``, ``moveToInventory``, ``makeProjectile``, or ``remove``
- ``Units::isVisible``: account for units in cages
- ``Units::getReadableName``: correct display of ghost+curse names w/r/t each other and unit prof, use ``curse.name`` instead of iterating syndrome name effects
- ``setAreaAquifer``, ``removeAreaAquifer``: add overloads that take cuboid range specifiers
- ``Units::isNaked``: now only checks equipped items (including rings, for now). Setting bool ``no_items`` to true checks empty inventory like before.
- ``Units::isUndead``: bool ``include_vamps`` renamed to ``hiding_curse``. Fn now checks that instead of bloodsucker syndrome.
- ``Units::isDanger``: added bool ``hiding_curse``, passed to ``isUndead`` to avoid spoilers
- ``Units::getRaceChildName``, ``getRaceChildNameById``, ``getRaceBabyName``, ``getRaceBabyNameById``: bool ``plural`` to get plural form
- ``Units::getProfessionName``: bool ``land_title`` to append "of Sitename" where applicable, use Prisoner/Slave and noble spouse titles (controlled by ``ignore_noble``)
## Lua
- ``gui.ZScreen``: new ``defocused`` property for starting screens without keyboard focus
- ``dfhack.units``: allow historical figures to be passed instead of units for ``getReadableName``, ``getVisibleName``, and ``getProfessionName``
- ``dfhack.items.moveToInventory``: make ``use_mode`` and ``body_part`` args optional
- ``dfhack.units``: add ``getRaceReadableName``, ``getRaceReadableNameById``, ``getRaceNamePluralById``
## Removed
- The ``PRELOAD_LIB`` environment variable has been renamed to ``DF_PRELOAD`` to match the naming scheme of other environment variables used by the ``dfhack`` startup script. If you are preloading libraries (e.g. for performance testing) please define ``DF_PRELOAD`` instead of ``PRELOAD_LIB`` or ``LD_PRELOAD``
- ``cuboid::clamp(bool block)``: renamed to ``cuboid::clampMap(bool block)``, name taken by ``cuboid::clamp(cuboid other)``
- ``Units::MAX_COLORS``, ``Units::findIndexById``, ``Units::getNumUnits``, ``Units::getUnit``: replaced by ``DFHack::COLOR_MAX`` and the generated type-specific ``get_vector`` functions
- ``Units::getPhysicalDescription``: function requires DF call point that is no longer available. alternative is to navigate the unit info sheet and extract the description from the UI (see `markdown`)
# 50.13-r3
## New Tools
- `plant`: (reinstated) tool for creating/growing/removing plants
## New Features
- `tweak`: ``named-codices``: display book titles instead of a material description in the stocks/trade screens
- `logistics`: automatically forbid or claim items brought to a stockpile
- `plant`: can now ``remove`` shrubs and saplings; ``list`` all valid shrub/sapling raw IDs; ``grow`` can make mature trees older; many new command options
- Locale-sensitive number formatting: select your preferred format in `gui/control-panel`. prices and other large numbers in DFHack UIs can be displayed with commas (English formatting), the number formatting used by your system locale, in SI units (e.g. ``12.3k``), or even in scientific notation
## Fixes
- ``Gui::makeAnnouncement``, ``Gui::autoDFAnnouncement``: fix case where a new announcement is created instead of adding to the count of an existing announcement if the existing announcement was the first one in the reports vector
- `regrass`: don't remove mud on regrass, consistent with vanilla behavior
- `seedwatch`: display a limit of ``-`` instead of ``0`` for a seed that is present in inventory but not being watched
- `tiletypes`: make aquifers functional when adding the ``aquifer`` property and there are no existing aquifer tiles in the same map block
- `seedwatch`: do not include unplantable tree seeds in status report
- ``Buildings::containsTile``: fix result for buildings that are solid and have no extent structures
- Mortal mode: prevent keybindings that run armok tools from being recognized when in mortal mode
- `dig`: don't leave phantom dig designations behind when autodigging warm/damp designated tiles
- `buildingplan`: properly identify appropriate construction items for modded buildings built from thread
- `overlay`: overlay positions are now adjusted according to the configured max interface width percentage in the DF settings
- `zone`: animal assignment overlay button moved to not conflict with vanilla aquarium/terrarium button on glass cages
- `zone`: allow friendly creatures to be released from cages by assigning them to a pasture zone and then unassigning them
- `autobutcher`: fix inverted ranking of which animals to butcher first
## Misc Improvements
- `blueprint`: capture track carving designations in addition to already-carved tracks
- `changevein`: follow veins into adjacent map blocks so you can run the command once instead of once per map block that the vein crosses
- `regrass`: now accepts numerical IDs for grass raws; ``regrass --list`` replaces ``regrass --plant ""``
- `tiletypes`: performance improvements when affecting tiles over a large area
- `tiletypes`: support for creating heavy aquifers
- `tiletypes`: new ``autocorrect`` property for autocorrecting adjacent tiles when making changes (e.g. adding ramp tops when you add a ramp)
- Dreamfort: add a full complement of beds and chests to both barracks
- Dreamfort: redesign guildhall/temple/library level for better accessibility
- Dreamfort: walkthrough documentation refresh
- Dreamfort: add milking/shearing station in surface grazing pasture
- Dreamfort: integrate building prioritization into the blueprints and remove `prioritize` checklist steps
- Dreamfort: add plumbing template for filling cisterns with running water
- `buildingplan`: add option to ignore items from a specified burrow
- `autobutcher`: do not butcher pregnant (or brooding) females
- `quickfort`: support buildable instruments
- `orders`: you can now delete your exported orders from the import dialog
- `nestboxes`: increase the scanning frequency for fertile eggs to reduce the chance that they get snarfed by eager dwarves
- `autonestbox`: wait until juveniles become adults before they are assigned to nestboxes
- `suspendmanager`: add option to ``unsuspend`` that unsuspends all jobs, regardless of potential issues (like blocking other construction jobs)
- `gui/create-item`: allow right click to cancel out of material dialog submenus
## Documentation
- `installing`: add instructions for how to use Steam DFHack with non-Steam DF (e.g. to benefit from DFHack auto-updates and cloud backups)
- `modding-guide`: add a section on persistent storage, both for global settings and world-specific settings
- Developer's primer for DFHack's type identity system
## API
- Focus strings have moved for stockpile states: ``dwarfmode/CustomStockpile`` is now ``dwarfmode/Stockpile/Some/Customize`` and similar for ``dwarfmode/StockpileTools`` and ``dwarfmode/StockpileLink``
- ``Buildings::getName``: get a building's name
- ``Maps::isTileAquifer``, ``Maps::isTileHeavyAquifer``, ``Maps::setTileAquifer``, ``Maps::removeTileAquifer``, ``Maps::setAreaAquifer``, ``Maps::removeAreaAquifer``: new aquifer detection and modification API
- ``Units::create``, ``Units::makeown``: new APIs to use bay12-provided entry points for low-level operations
- ``format_number``: format numbers according to the configured player formatting preference
- ``Items::remove``: now cancels related jobs and marks the item as hidden and forbidden until it can be garbage collected
- ``Job::addGeneralRef``: new easy API for creating general references and adding them to a Job
- ``Job::addWorker``: new API function for assigning a job to unit
## Lua
- ``dfhack.gui.getSelectedJob``: can now return the job with a destination under the keyboard cursor (e.g. digging/carving/engraving jobs)
- ``widgets.makeButtonLabelText``: create text and graphical buttons from character/color/tile maps and/or dynamically loaded tilesets
- ``widgets.DimensionsTooltip``: reusable selected dimensions tooltip that follows the mouse cursor around
- ``widgets.ButtonGroup``: subclass of CycleHotkeyLabel that additionally displays clickable graphical buttons
- ``widgets.CycleHotkeyLabel``: when the widget has both forward and backward hotkeys defined, support moving backwards by clicking on the appropriate hotkey hint
- ``safe_index``: will now return nil when attempting to index into a non-indexable object
- ``script-manager``: add ``getModSourcePath`` and ``getModStatePath`` so modders can get the directory path to their own files
- ``widgets.FilteredList``: don't restrict the player from inputting multiple successive space characters
- ``dfhack.maps.isTileAquifer``, ``dfhack.maps.isTileHeavyAquifer``, ``dfhack.maps.setTileAquifer``, ``dfhack.maps.removeTileAquifer``: access to new aquifer API
- ``plugins.tiletypes.tiletypes_setTile``: can now accept a table for access to previously unavailable options
- ``dialogs.showYesNoPrompt``: extend options so the standard dialog can be used for `gui/confirm`-style confirmation prompts
- ``dfhack.units.create``, ``dfhack.units.makeown``: Lua access to new module API
- ``dfhack.formatInt``, ``dfhack.formatFloat``: formats numbers according to the player preferences for number formatting set in `gui/control-panel`
- ``gui.get_interface_rect``, ``gui.get_interface_frame``: convenience functions for working with scaled interfaces
- ``overlay``: new attributes: ``fullscreen`` and ``full_interface`` for overlays that need access to the entire screen or the scaled interface area, respectively
- ``string:wrap``: now preserves inter-word spacing and can return the wrapped lines as a table of strings instead of a single multi-line string
- ``dfhack.internal.getClipboardTextCp437Multiline``: for retrieving multiline text from the system clipboard
## Removed
- `plants`: renamed to `plant`
- ``gui.FramedScreen``: this class is now deprecated; please use ``gui.ZScreen`` and ``widgets.Window`` instead
- ``dfhack.HIDE_CONSOLE_ON_STARTUP`` and ``dfhack.HIDE_ARMOK_TOOLS`` are no longer directly accessible. Please use `control-panel` or `gui/control-panel` to interact with those settings.
# 50.13-r2.1
## Fixes
- `suspendmanager`: stop suspending single tile stair constructions
# 50.13-r2
## New Tools
- Updated for adventure mode: `reveal`
## New Features
- `buildingplan`: quick material filter favorites on main planner panel
- DFHack and the Dwarf Fortress translation project can now both be run at the same time
## Fixes
- `zone`: fix display of distance from cage/pit for small pets in assignment dialog
- `blueprint`: correctly define stockpile boundaries in recorded stockpile ("place") blueprints when there are adjacent non-rectangular stockpiles of identical types
- `dig`: refresh count of tiles that will be modified by "mark all designated tiles on this z-level for warm/damp dig" when the z-level changes
- `dig`: don't affect already-revealed tiles when marking z-level for warm/damp dig
- `zone`: refresh values in distance column when switching selected pastures when the assign animals dialog is open
- `logistics`: include semi-wild pets when autoretrain is enabled
- `suspendmanager`: fully suspend unbuildable dead ends (e.g. building second level of a wall when the wall top is only accessible via ramp, causing the planned wall to be pathable but not buildable)
- `prospect`: don't use scientific notation for representing large numbers
## Misc Improvements
- `caravan`: display who is in the cages you are selecting for trade and whether they are hostile
- `regrass`: can now add grass to stairs, ramps, ashes, buildings, muddy stone, shrubs, and trees
- `regrass`: can now restrict area of effect to specified tile, block, cuboid, or z-levels
- `regrass`: can now add grass in map blocks where there hasn't been any
- `regrass`: can now choose specific grass type
- `dig`: warm/damp/aquifer status will now be shown in mining mode for tiles that your dwarves can see from the level below
- `dig`: warm/damp/aquifer status will now be shown when in smoothing/engraving modes
- `stockpiles`: support import and export "desired items" configuration for route stops
- New commandline options for controlling the Cloud Save coprocess when launching from Steam. See the `dfhack-core` documentation for details.
- `markdown`: new keybinding for triggering text export: Ctrl-t (when unit or item is selected)
- `flashstep`: new keybinding for teleporting adventurer to the mouse cursor: Ctrl-t (when adventure map is in the default state and mortal mode is disabled in DFHack preferences)
- Dreamfort: move wells on services level so brawling drunken tavern patrons are less likely to fall in
- `unretire-anyone`: new keybinding for adding a historical figure to the adventurer selection list in the adventure mode setup screen: Ctrl-a
## Documentation
- Quickfort Blueprint Library: add demo videos for pump stack and light aquifer tap blueprints
- Update docs for dependency requirements and compilation procedures
## API
- ``dfhack.items.getReadableDescription()``: easy API for getting a human-readable item description with useful annotations and information (like tattered markers or who is in a cage)
- ``Items::createItem``: now returns a list of item pointers rather than a single ID, moved creator parameter to beginning, added growth_print and no_floor parameters at end
- ``World::getAdventurer``: returns current adventurer unit
- ``World::ReadPauseState``: now returns true when the game is effectively paused due to a large panel obscuring the map. this aligns the return value with the visual state of the pause button when in fort mode.
## Lua
- ``dfhack.internal.setClipboardTextCp437Multiline``: for copying multiline text to the system clipboard
- ``dfhack.world.getAdventurer``: returns current adventurer unit
- ``dfhack.items.createItem``: return value and parameters have changed as per C++ API
# 50.13-r1.1
## Documentation
- Update docs on release procedures and symbol generation
# 50.13-r1
## Fixes
- Fixed misidentification of visitors from your own civ as residents; affects all tools that iterate through citizens/residents
- `cursecheck`: act on selected unit only if a unit is selected
- Fixed incorrect DFHack background window texture when DF is started in ascii mode and subsequently switched to graphics mode
## Misc Improvements
- `suspendmanager`: Account for walls planned on the z-layer below when determining accessibility to a job
## Documentation
- `autoclothing`: add section comparing ``autoclothing`` and `tailor` to guide players choosing which to enable
# 50.12-r3
## New Tools
- `aquifer`: commandline tool for creating, draining, and modifying aquifers
## New Features
- `buildingplan`: add overlays for unlinking and freeing mechanisms from buildings
- `dig`: designate tiles for damp or warm dig, which allows you to dig through damp or warm tiles without designations being canceled
- `dig`: damp and warm tile icons now remain visible when included in the designation selection box (graphics mode)
- `dig`: aquifer tiles are now visually distinct from "just damp" tiles (graphics and ascii modes)
- `dig`: light aquifer tiles are now visually distinct from heavy aquifer tiles (graphics and ascii modes)
- `dig`: autodig designations that are marked for damp/warm dig propagate the damp/warm tag when expanding to newly exposed tiles
- `blueprint`: designations and active dig jobs are now captured in generated blueprints
- `blueprint`: warm/damp dig markers are captured in generated blueprints
## Fixes
- fix behavior of Linux Steam launcher on systems that don't support the inotify API
- fix rendering of resize "notch" in lower right corner of resizable windows in ascii mode
- `quickfort`: stockpiles can now be placed even if there is water covering the tile, as per vanilla behavior
- `suspendmanager`: prevent cancellation spam when an item is preventing a building from being completed
- `stonesense`: fix a crash with buildings made of unusual materials (such as campsite tents made out of organic "walls")
## Misc Improvements
- `tailor`: allow turning off automatic confiscation of tattered clothing
- aquifer_tap blueprint: now designates in damp dig mode for uninterrupted digging in a light aquifer
- pump_stack blueprint: now designates in warm and damp dig mode for uninterrupted digging through warm and damp tiles
- `keybinding`: you can now assign keybindings to mouse buttons (if your mouse has more than the three buttons already used by DF)
## Documentation
- Lua API: documented existing ``enum:next_item(index)`` function
## API
- ``Units::citizensRange``: c++-20 std::range filter for citizen units
- ``Units::forCitizens``: iterator callback function for citizen units
- ``Units::paintTile``, ``Units::readTile``: now takes an optional field specification for reading and writing to specific map compositing layers
- ``Buildings::checkFreeTiles``: now takes a ``allow_flow`` parameter to control whether water- or magma-filled tiles are valid
## Lua
- ``dfhack.gui.matchFocusString``: focus string matching is now case sensitive (for performance reasons)
# 50.12-r2.1
## Fixes
- `orders`: don't intercept keyboard input for setting skill or labor restrictions on workshop workers tab when the player is setting the building nickname