-
Notifications
You must be signed in to change notification settings - Fork 480
/
Copy pathchangelog.txt
1379 lines (1109 loc) · 93.4 KB
/
changelog.txt
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
===[[[
The text below is included in docs/dev/Documentation.rst - see that file for more details on the changelog setup.
This is kept in this file as a quick syntax reference.
===help
changelog.txt uses 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 (this must be listed in ``gen_changelog.py``)
- ``-`` indicates the start of a changelog entry. **Note:** an entry currently must be only one line.
- ``:`` (colon 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.
- ``:\`` (colon, backslash, 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 phrase set up to be replaced (see gen_changelog.py) stops that occurrence from being replaced.
Template for new versions:
## New Tools
## New Features
## Fixes
## Misc Improvements
## Documentation
## API
## Lua
## Removed
===end
]]]
================================================================================
======== 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
## Misc Improvements
## Documentation
## API
## Lua
## Removed
# 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
# 50.12-r2
## New Features
- `stocks`: add button/hotkey for removing empty categories from the stocks list
- `sort`: updated and reinstated military status/squad membership/burrow membership filter for work animal assignment screen
- `logistics`: ``autoretrain`` will automatically assign trainers to your partially-trained (but not yet domesticated) livestock. this prevents children of partially-trained parents from reverting to wild if you don't notice they were born
- `orders`: add overlay for configuring labor and skill level restrictions for workshops
## Fixes
- `autochop`: fix underestimation of log yield for cavern mushrooms
- `gui/notify`: prevent notification overlay from showing up in arena mode
- `logistics`: don't melt/trade/dump empty containers that happen to be sitting on the stockpile unless the stockpile accepts those item types
- `gui/launcher`: fix detection on Shift-Enter for running commands and autoclosing the launcher
- `logistics`: don't send autotrade items to forbidden depots
- `autoclothing`: don't produce clothes for dead units
- `caravan`: fix trade price calculations when the same item was requested for both import and export
## Misc Improvements
- `autobutcher`: prefer butchering partially trained animals and save fully domesticated animals to assist in wildlife domestication programs
- `autodump`: can now teleport items loosely stored in buildings (clutter)
- When launched from the Steam client on Linux, both Dwarf Fortress and DFHack will be shown as "Running". This ensures that DF has proper accounting for Linux player usage.
- `suspendmanager`: improve performance when there are many active jobs
- `clean`: protect farm plots when cleaning mud
- `tweak`: add ``quiet`` option for silent enablement and disablement of tweaks
- `gui/teleport`: add global Ctrl-Shift-T keybinding (only available when DFHack mortal mode is disabled)
- Dreamfort: the four Craftsdwarf's workshops on the industry level are now specialized for Stonecrafting, Woodcrafting, Bone Carving, and miscellaneous tasks, respectively
- `dwarfvet`: automatically unassign animals from pastures when they need treatment so they can make their way to the hospital. reassign them to their original pasture when treatment is complete.
- `dwarfvet`: ignore animals assigned to cages or restraints
- Many tools that previously only worked for citizens or only for dwarves now work for all citizens and residents, e.g. `fastdwarf`, `rejuvenate`, etc.
- `buildingplan`: remember player preference for whether unavailable materials should be hidden in the filter selection dialog
- `buildingplan`: sort by available quantity by default int he filter selection dialog
- Dreamfort: update embark profile recommendations and example embark profile
## Documentation
- `overlay-dev-guide`: updated examples and troubleshooting steps
- `introduction`: refresh getting started content
- `quickstart`: refresh quickstart guide
## API
- ``Units::isForgottenBeast``: property check for forgotten beasts
- ``Units::isGreatDanger``: now includes forgotten beasts
- ``Units::isResident``: property check for residents (as opposed to citizens)
- ``Units::getCitizens``: now includes residents by default
## Lua
- ``widgets.Label``: ``*pen`` attributes can now either be a pen or a function that dynamically returns a pen
- `helpdb`: ``search_entries`` now returns a match if *all* filters in the ``include`` list are matched. previous behavior was to match if *any* ``include`` filter matched.
- ``matinfo.decode``: now directly handles plant objects
- ``dfhack.units.isForgottenBeast``: make new units method available to Lua
- ``dfhack.units.getCitizens``: now includes residents by default
# 50.12-r1.1
## Fixes
- `sort`: fix crash when assigning work animals to units
## Removed
- offline HTML rendered docs are no longer distributed with DFHack since they are randomly triggering Windows Defender antivirus heuristics. If you want to download DFHack docs for offline browsing, you can still get them from the Downloads link at https://dfhack.org/docs
# 50.12-r1
## Misc Improvements
- `sort`: squad assignment overlay rewritten for compatibility with new vanilla data structures and screen layouts
## Fixes
- `gui/design`: no longer comes up when Ctrl-D is pressed but other DFHack windows have focus
## API
- ``Gui::getWidget``: retrieve a vanilla DF widget by name or index
## Lua
- ``dfhack.gui.getWidget``: retrieve a vanilla DF widget by hierarchy path, with each step specified by a widget name or index
- ``dfhack.gui.getWidgetChildren``: retrieve a list of child widgets for a given widget container
## Removed
- `burrow`: removed overlay 3D box select since it is now provided by the vanilla UI
- `sort`: removed Search widgets for screens that now have vanilla search
# 50.11-r7
## New Tools
- `tweak`: (reinstated) a collection of small bugfixes and gameplay tweaks
- `pet-uncapper`: (reinstated, renamed from ``petcapRemover``) allow pets to breed beyond the default population cap of 50
## New Features
- `cleanowned`: Add a "nodump" option to allow for confiscating items without dumping
- `tweak`: Add "flask-contents", makes flasks/vials/waterskins be named according to their contents
## Fixes
- `dig`: overlay that shows damp designations in ASCII mode now properly highlights tiles that are damp because of an aquifer in the layer above
- `dig-now`: fix digging stairs in the surface sometimes creating underworld gates.
- ``Units::getVisibleName``: don't reveal the true identities of units that are impersonating other historical figures
- ``Gui::revealInDwarfmodeMap``: properly center the zoom even when the target tile is near the edge of the map
- `warn-stranded`: don't complain about units that aren't on the map (e.g. soldiers out on raids)
- `autoclothing`: Fix enabled behavior
- ``Gui::makeAnnouncement``, ``Gui::autoDFAnnouncement``: don't display popup for all announcement types
- ``gui.View:getMouseFramePos``: function now detects the correct coordinates even when the widget is nested within other frames
- `strangemood`: correctly recognize Stonecutter and Stone Carver as moodable skills, move the Mason's boosted mood chance to the Stone Carver, and select Fell/Macabre based on long-term stress
## Misc Improvements
- `autonestbox`: assign egg layers to the nestbox they have chosen if they have already chosen a nestbox
- `regrass`: also regrow depleted cavern moss
- `probe`: act on the selected building/unit instead of requiring placement of the keyboard cursor for ``bprobe`` and ``cprobe``
- `buildingplan`: use closest matching item rather than newest matching item
- `zone`: animal assignment dialog now shows distance to pasture/cage and allows sorting by distance
- `zone`: animal assignment dialog shows number of creatures assigned to this pasture/cage/etc.
## API
- Gui module Announcement functions now use DF's new announcement alert system
- ``Gui::addCombatReport``, ``Gui::addCombatReportAuto``: add versions that take ``report *`` instead of report vector index
- ``Gui::MTB_clean``, ``Gui::MTB_parse``, ``Gui::MTB_set_width``: new functions for manipulating ``markup_text_boxst``
- ``toupper_cp437(char)``, ``tolower_cp437(char)``: new ``MiscUtils`` functions, return a char with case changed, respecting CP437
- ``toUpper``, ``toLower``: ``MiscUtils`` functions renamed to ``toUpper_cp437`` and ``toLower_cp437``, CP437 compliant
- Gui focus strings will now include ``dwarfmode/Default`` if the only other panel open is the Squads panel
- ``Gui::revealInDwarfmodeMap``: unfollow any currently followed units/items so the viewport doesn't just jump back to where it was
## Lua
- Overlay framework now respects ``active`` and ``visible`` widget attributes
- ``dfhack.gui`` announcement functions use default arguments when omitted
- ``dfhack.units.getCitizens`` now only returns units that are on the map
- ``dfhack.upperCp437(string)``, ``dfhack.lowerCp437(string)``: new functions, return string with all chars changed, respecting CP437 code page
# 50.11-r6
## New Features
- `zone`: Add overlay for toggling butchering/gelding/adoption/taming options in animal "Overview" tabs
## Fixes
- `dig-now`: remove diagonal ramps rendered unusable by digging
- `dig-now`: fix error propagating "light" and "outside" properties to newly exposed tiles when piercing the surface
- `sort`: fix potential crash when switching between certain info tabs
- `suspendmanager`: overlays for suspended building info panels no longer disappear when another window has focus
## Misc Improvements
- `reveal`: automatically reset saved map state when a new save is loaded
- `autonestbox`: don't automatically assign partially trained egg-layers to nestboxes if they don't have an ongoing trainer assigned since they might revert to wild
- `buildingplan`: replace ``[edit filters]`` button in planner overlay with abbreviated filter information
## API
- ``Units::assignTrainer``: assign a trainer to a trainable animal
- ``Units::unassignTrainer``: unassign a trainer from an animal
- ``Gui::getAnyWorkshopJob``: get the first job associated with the selected workshop
- ``Gui::getAnyJob``: get the job associated with the selected game element (item, unit, workshop, etc.)
## Lua
- ``dfhack.units.isTamable``: return false for invaders to match vanilla logic
- ``dfhack.units.assignTrainer``: expose API to Lua
- ``dfhack.units.unassignTrainer``: expose API to Lua
- ``dfhack.gui.getAnyWorkshopJob``: expose API to Lua
- ``dfhack.gui.getAnyJob``: expose API to Lua
## Removed
- ``nopause``: functionality has moved to `spectate`
# 50.11-r5
## New Tools
- `gui/embark-anywhere`: new keybinding (active when choosing an embark site): Ctrl-A
## New Features
- `sort`: search and sort for the "choose unit to elevate to the barony" screen. units are sorted by the number of item preferences they have and the units are annotated with the items that they have preferences for
- `zone`: add button to location details page for retiring unused locations
- `gui/mass-remove`: new global keybinding: Ctrl-M while on the fort map
## Fixes
- `reveal`: now avoids revealing blocks that contain divine treasures, encased horrors, and deep vein hollows (so the surprise triggers are not triggered prematurely)
- `sort`: fix mouse clicks falling through the squad assignment overlay panel when clicking on the panel but not on a clickable widget
- `sort`: fix potential crash when removing jobs directly from the Tasks info screen
- `misery`: fix error when changing the misery factor
- When passing map movement keys through to the map from DFHack tool windows, also pass fast z movements (shift-scroll by default)
- `getplants`: fix crash when processing mod-added plants with invalid materials
- Dreamfort: fix holes in the "Inside+" burrow on the farming level (burrow autoexpand is interrupted by the pre-dug miasma vents to the surface)
- ``Maps::getBiomeType``, ``Maps::getBiomeTypeWithRef``: fix identification of tropical oceans
- DFHack tabs (e.g. in `gui/control-panel`) are now rendered correctly when there are certain vanilla screen elements behind them
- `buildingplan`: when you save a game and load it again, newly planned buildings are now correctly placed in line after existing planned buildings of the same type
- `buildingplan`: treat items in wheelbarrows as unavailable, just as vanilla DF does. Make sure the `fix/empty-wheelbarrows` fix is enabled so those items aren't permanently unavailable!
- `buildingplan`: show correct number of materials required when laying down areas of constructions and some of those constructions are on invalid tiles
- `stonesense`: fix crash in cleanup code after mega screenshot (Ctrl-F5) completes; however, the mega screenshot will still make stonesense unresponsive. close and open the stonesense window to continue using it.
- `gui/design`: fix incorrect highlight when box selecting area in ASCII mode
- `fastdwarf`: prevent units from teleporting to inaccessible areas when in teledwarf mode
- `fastdwarf`: allow units to meander and satisfy needs when they have no current job and teledwarf mode is enabled
## Misc Improvements
- `autochop`: better error output when target burrows are not specified on the commandline
- `autoclothing` : now does not consider worn (x) clothing as usable/available; reduces overproduction when using `tailor` at same time
- `buildingplan`: add option for preventing constructions from being planned on top of existing constructions (e.g. don't build floors on top of floors)
- `burrow`: flood fill now requires an explicit toggle before it is enabled to help prevent accidental flood fills
- wherever units are listed in DFHack tools, properties like "agitated" or (-trained-) are now shown
- `work-now`: now saves its enabled status with the fort
- `fastdwarf`: now saves its state with the fort
- `zone`: add include/only/exclude filter for juveniles to the pasture/pit/cage/restraint assignment screen
- The "PAUSE FORCED" badge will blink briefly to draw attention if the player attempts to unpause when a DFHack tool window requires the game to be paused
- `sort`: add "Toggle all filters" hotkey button to the squad assignment panel
- `sort`: rename "Weak mental fortitude" filter to "Dislikes combat", which should be more understandable
- Dreamfort: put more chairs adjacent to each other to make the tavern more "social"
- `zone`: show geld status and custom profession (if set, it's the lower editable line in creature description) in pasture/pit/cage/restraint assignment screen
- `orders`: reduce prepared meal target and raise booze target in ``basic`` importable orders in the orders library
## Documentation
- `installing`: Add installation instructions for wineskin on Mac
- UTF-8 text in tool docs is now properly displayed in-game in `gui/launcher` (assuming that it can be converted to cp-437)
- `modding-guide`: Add examples for script-only and blueprint-only mods that you can upload to DF's Steam Workshop
- DFHack developer's guide updated, with refreshed `architectural-diagrams`
## API
- ``random_index``, ``vector_get_random``: new ``MiscUtils`` functions, for getting a random entry in a vector
- ``capitalize_string_words``: new ``MiscUtils`` function, returns string with all words capitalized
- ``grab_token_string_pos``: new ``MiscUtils`` function, used for parsing tokens
- ``Items``: add item melting logic ``canMelt(item)``, ``markForMelting(item)``, and ``cancelMelting(item)``
- ``World``: ``GetCurrentSiteId()`` returns the loaded fort site ID (or -1 if no site is loaded)
- ``World``: ``IsSiteLoaded()`` check to detect if a site (e.g. a player fort) is active (as opposed to the world or a map)
- ``World``: ``AddPersistentData`` and related functions replaced with ``AddPersistentSiteData`` and ``AddPersistentWorldData`` equivalents
- New plugin API for saving and loading persistent data. See plugins/examples/skeleton.cpp and plugins/examples/persistent_per_save_example.cpp for details
- Plugin ABI (binary interface) version bump! Any external plugins must be recompiled against this version of DFHack source code in order to load.
- ``Persistence``: persistent keys are now namespaced by an entity_id (e.g. a player fort site ID)
- ``Persistence``: data is now stored one file per entity ID (plus one for the global world) in the DF savegame directory
- ``Units.isDanger``: now returns true for agitated wildlife
- ``Constructions::designateRemove``: no longer designates the non-removable "pseudo" constructions that represent the top of walls
## Lua
- ``dfhack.capitalizeStringWords``: new function, returns string with all words capitalized
- ``widgets.Divider``: linear divider to split an existing frame; configurable T-junction edges and frame style matching
- ``dfhack.persistent``: new, table-driven API for easier world- and site-associated persistent storage. See the Lua API docs for details.
- ``dfhack.isSiteLoaded``: returns whether a site (e.g. a player fort) is loaded
- ``dfhack.items``: access to ``canMelt(item)``, ``markForMelting(item)``, and ``cancelMelting(item)`` from ``Items`` module
- ``dfhack.world.getCurrentSite``: returns the ``df.world_site`` instance of the currently loaded fort
## Removed
- ``persist-table``: replaced by new ``dfhack.persistent`` API
- `channel-safely`: (temporarily) removed due to stability issues with the underlying DF API
# 50.11-r4
## Fixes
- `buildingplan`: fix choosing the wrong mechanism (or something that isn't a mechanism) when linking a lever and manually choosing a mechanism, but then canceling the selection
- RemoteServer: don't shut down the socket prematurely, allowing continuing connections from, for example, dfhack-run
- `sort`: fix potential crash when exiting and re-entering a creatures subtab with a search active
- `sort`: prevent keyboard keys from affecting the UI when search is active and multiple keys are hit at once
- `tailor`: fix corner case where existing stock was being ignored, leading to over-ordering
## Misc Improvements
- `buildingplan`: save magma safe mechanisms for when magma safety is requested when linking levers and pressure plates to targets
- `buildingplan`: when choosing mechanisms for linking levers/pressure plates, filter out unreachable mechanisms
- `sort`: when searching on the Tasks tab, also search the names of the things the task is associated with, such as the name of the stockpile that an item will be stored in
# 50.11-r3
## New Tools
- `burrow`: (reinstated) automatically expand burrows as you dig
## New Features
- `prospect`: can now give you an estimate of resources from the embark screen. hover the mouse over a potential embark area and run `prospect`.
- `burrow`: integrated 3d box fill and 2d/3d flood fill extensions for burrow painting mode
- `buildingplan`: allow specific mechanisms to be selected when linking levers or pressure plates
- `sort`: military and burrow membership filters for the burrow assignment screen
## Fixes
- `stockpiles`: hide configure and help buttons when the overlay panel is minimized
- `caravan`: price of vermin swarms correctly adjusted down. a stack of 10000 bees is worth 10, not 10000
- `sort`: when filtering out already-established temples in the location assignment screen, also filter out the "No specific deity" option if a non-denominational temple has already been established
- RemoteServer: continue to accept connections as long as the listening socket is valid instead of closing the socket after the first disconnect
- `buildingplan`: overlay and filter editor gui now uses ctrl-d to delete the filter to avoid conflict with increasing the filter's minimum quality (shift-x)
- `tailor`: fix crash on Linux where scanned unit is wearing damaged non-clothing (e.g. a crown)
## Misc Improvements
- `buildingplan`: display how many items are available on the planner panel
- `buildingplan`: make it easier to build single-tile staircases of any shape (up, down, or up/down)
- `sort`: allow searching by profession on the squad assignment page
- `sort`: add search for places screens
- `sort`: add search for work animal assignment screen; allow filtering by military/squad/civilian/burrow
- `sort`: on the squad assignment screen, make effectiveness and potential ratings use the same scale so effectiveness is always less than or equal to potential for a given unit. this way you can also tell when units are approaching their maximum potential
- `sort`: new overlay on the animal assignment screen that shows how many work animals each visible unit already has assigned to them
- `dreamfort`: Inside+ and Clearcutting burrows now automatically created and managed
## Documentation
- Document the Lua API for the ``dfhack.world`` module
## API
- ``Gui::revealInDwarfmodeMap``: gained ``highlight`` parameter to control setting the tile highlight on the zoom target
- ``Maps::getWalkableGroup``: get the walkability group of a tile
- ``Units::getReadableName``: now returns the *untranslated* name
- ``Burrows::setAssignedUnit``: now properly handles inactive burrows
- ``Gui::getMousePos``: now takes an optional ``allow_out_of_bounds`` parameter so coordinates can be returned for mouse positions outside of the game map (i.e. in the blank space around the map)
- ``Buildings::completebuild``: used to link a newly created building into the world
## Lua
- ``dfhack.gui.revealInDwarfmodeMap``: gained ``highlight`` parameter to control setting the tile highlight on the zoom target
- ``dfhack.maps.getWalkableGroup``: get the walkability group of a tile
- ``dfhack.gui.getMousePos``: support new optional ``allow_out_of_bounds`` parameter
- ``gui.FRAME_THIN``: a panel frame suitable for floating tooltips
- ``dfhack.buildings.completebuild``: expose new module API
# 50.11-r2
## New Tools
- `spectate`: (reinstated) automatically follow dwarves, cycling among interesting ones
- `preserve-tombs`: keep tombs assigned to units when they die
## New Features
- `logistics`: ``automelt`` now optionally supports melting masterworks; click on gear icon on `stockpiles` overlay frame
- `sort`: new search widgets for Info panel tabs, including all "Creatures" subtabs, all "Objects" subtabs, "Tasks", candidate assignment on the "Noble" subtab, and the "Work details" subtab under "Labor"
- `sort`: new search and filter widgets for the "Interrogate" and "Convict" screens under "Justice"
- `sort`: new search widgets for location selection screen (when you're choosing what kind of guildhall or temple to dedicate)
- `sort`: new search widgets for burrow assignment screen and other unit assignment dialogs
- `sort`: new search widgets for artifacts on the world/raid screen
- `sort`: new search widgets for slab engraving menu; can filter for only units that need a slab to prevent rising as a ghost
- `stocks`: hotkey for collapsing all categories on stocks screen
## Fixes
- `buildingplan`: remove bars of ash, coal, and soap as valid building materials to match v50 rules
- `buildingplan`: fix incorrect required items being displayed sometimes when switching the planner overlay on and off
- `zone`: races without specific child or baby names will now get generic child/baby names instead of an empty string
- `zone`: don't show animal assignment link for cages and restraints linked to dungeon zones (which aren't normally assignable)
- `sort`: don't count mercenaries as appointed officials in the squad assignment screen
- `dwarfvet`: fix invalid job id assigned to ``Rest`` job, which could cause crashes on reload
## Misc Improvements
- `overlay`: allow ``overlay_onupdate_max_freq_seconds`` to be dynamically set to 0 for a burst of high-frequency updates
- Help icons added to several complex overlays. clicking the icon runs `gui/launcher` with the help text in the help area
- `orders`: ``recheck`` command now only resets orders that have conditions that can be rechecked
- `sort`: added help button for squad assignment search/filter/sort
- `zone`: animals trained for war or hunting are now labeled as such in animal assignment screens
- `buildingplan`: support filtering cages by whether they are occupied
- `buildingplan`: show how many items you need to make when planning buildings
- `tailor`: now adds to existing orders if possible instead of creating new ones
## Documentation
- unavailable tools are no longer listed in the tag indices in the online docs
## API
- added ``Items::getCapacity``, returns the capacity of an item as a container (reverse-engineered), needed for `combine`
## Lua
- added ``GRAY`` color aliases for ``GREY`` colors
- added ``dfhack.items.getCapacity`` to expose the new module API
- ``utils.search_text``: text search routine (generalized from internal ``widgets.FilteredList`` logic)
## Removed
- ``FILTER_FULL_TEXT``: moved from ``gui.widgets`` to ``utils``; if your full text search preference is lost, please reset it in `gui/control-panel`
# 50.11-r1
## New Tools
- `tubefill`: (reinstated) replenishes mined-out adamantine
## Fixes
- `autolabor`: ensure vanilla work details are reinstated when the fort or the plugin is unloaded
- ``dfhack.TranslateName()``: fixed crash on certain invalid names, which affected `warn-starving`
- EventManager: Unit death event no longer misfires on units leaving the map
## Misc Improvements
- `digtype`: designate only visible tiles by default, and use "auto" dig mode for following veins
- `digtype`: added options for designating only current z-level, this z-level and above, and this z-level and below
- `hotkeys`: make the DFHack logo brighten on hover in ascii mode to indicate that it is clickable
- `hotkeys`: use vertical bars instead of "!" symbols for the DFHack logo in ascii mode to make it easier to read
- EventManager: guard against potential iterator invalidation if one of the event listeners were to modify the global data structure being iterated over
- EventManager: for ``onBuildingCreatedDestroyed`` events, changed firing order of events so destroyed events come before created events
## Lua
- mouse key events are now aligned with internal DF semantics: ``_MOUSE_L`` indicates that the left mouse button has just been pressed and ``_MOUSE_L_DOWN`` indicates that the left mouse button is being held down. similarly for ``_MOUSE_R`` and ``_MOUSE_M``. 3rd party scripts may have to adjust.
# 50.10-r1
## Fixes
- Linux launcher: allow Steam Overlay and game streaming to function
- `autobutcher`: don't ignore semi-wild units when marking units for slaughter
## Misc Improvements
- 'sort': Improve combat skill scale thresholds
# 50.09-r4
## New Features
- `dig`: new overlay for ASCII mode that visualizes designations for smoothing, engraving, carving tracks, and carving fortifications
## Fixes
- `buildingplan`: make the construction dimensions readout visible again
- `seedwatch`: fix a crash when reading data saved by very very old versions of the plugin
- `gui/mod-manager`: don't continue to display overlay after the raws loading progress bar appears
## Misc Improvements
- `sort`: add sort option for training need on squad assignment screen
- `sort`: filter mothers with infants, units with weak mental fortitude, and critically injured units on the squad assignment screen
- `sort`: display a rating relative to the current sort order next to the visible units on the squad assignment screen
## Documentation
- add instructions for downloading development builds to the ``Installing`` page
## API
- `overlay`: overlay widgets can now declare a ``version`` attribute. changing the version of a widget will reset its settings to defaults. this is useful when changing the overlay layout and old saved positions will no longer be valid.
## Lua
- ``argparse.boolean``: convert arguments to lua boolean values.
# 50.09-r3
## New Features
- `sort`: search, sort, and filter for squad assignment screen
- `zone`: advanced unit assignment screens for cages, restraints, and pits/ponds
- `buildingplan`: one-click magma/fire safety filter for planned buildings
## Fixes
- Core: reload scripts in mods when a world is unloaded and immediately loaded again
- Core: fix text getting added to DFHack text entry widgets when Alt- or Ctrl- keys are hit
- `buildingplan`: ensure selected barrels and buckets are empty (or at least free of lye and milk) as per the requirements of the building
- `orders`: prevent import/export overlay from appearing on the create workorder screen
- `caravan`: corrected prices for cages that have units inside of them
- `tailor`: remove crash caused by clothing items with an invalid ``maker_race``
- ``dialogs.MessageBox``: fix spacing around scrollable text
- `seedwatch`: ignore unplantable tree seeds
- `autobutcher`: fix ``ticks`` commandline option incorrectly rejecting positive integers as valid values
## Misc Improvements
- Surround DFHack-specific UI elements with square brackets instead of red-yellow blocks for better readability
- `autobutcher`: don't mark animals for butchering if they are already marked for some kind of training (war, hunt)
- `hotkeys`: don't display DFHack logo in legends mode since it covers up important interface elements. the Ctrl-Shift-C hotkey to bring up the menu and the mouseover hotspot still function, though.
- `sort`: animals are now sortable by race on the assignment screens
- `createitem`: support creating items inside of bags
## API
- ``Items::getValue()``: remove ``caravan_buying`` parameter since the identity of the selling party doesn't actually affect the item value
- `RemoteFortressReader`: add a ``force_reload`` option to the GetBlockList RPC API to return blocks regardless of whether they have changed since the last request
- ``Units``: new animal property check functions ``isMarkedForTraining(unit)``, ``isMarkedForTaming(unit)``, ``isMarkedForWarTraining(unit)``, and ``isMarkedForHuntTraining(unit)``
- ``Gui``: ``getAnyStockpile`` and ``getAnyCivzone`` (along with their ``getSelected`` variants) now work through layers of ZScreens. This means that they will still return valid results even if a DFHack tool window is in the foreground.
## Lua
- ``new()``: improved error handling so that certain errors that were previously uncatchable (creating objects with members with unknown vtables) are now catchable with ``pcall()``
- ``dfhack.items.getValue()``: remove ``caravan_buying`` param as per C++ API change
- ``widgets.BannerPanel``: panel with distinctive border for marking DFHack UI elements on otherwise vanilla screens
- ``widgets.Panel``: new functions to override instead of setting corresponding properties (useful when subclassing instead of just setting attributes): ``onDragBegin``, ``onDragEnd``, ``onResizeBegin``, ``onResizeEnd``
- ``dfhack.screen.readTile()``: now populates extended tile property fields (like ``top_of_text``) in the returned ``Pen`` object
- ``dfhack.units``: new animal property check functions ``isMarkedForTraining(unit)``, ``isMarkedForTaming(unit)``, ``isMarkedForWarTraining(unit)``, and ``isMarkedForHuntTraining(unit)``
- ``dfhack.gui``: new ``getAnyCivZone`` and ``getAnyStockpile`` functions; also behavior of ``getSelectedCivZone`` and ``getSelectedStockpile`` functions has changes as per the related API notes
# 50.09-r2
## New Plugins
- `3dveins`: reinstated for v50, this plugin replaces vanilla DF's blobby vein generation with veins that flow smoothly and naturally between z-levels
- `zone`: new searchable, sortable, filterable screen for assigning units to pastures
- `dwarfvet`: reinstated and updated for v50's new hospital mechanics; allow your animals to have their wounds treated at hospitals
- `dig`: new ``dig.asciiwarmdamp`` overlay that highlights warm and damp tiles when in ASCII mode. there is no effect in graphics mode since the tiles are already highlighted there
## Fixes
- Fix extra keys appearing in DFHack text boxes when shift (or any other modifier) is released before the other key you were pressing
- `logistics`: don't autotrain domestic animals brought by invaders (they'll get attacked by friendly creatures as soon as you let them out of their cage)
- `logistics`: don't bring trade goods to depot if the only caravans present are tribute caravans
- `gui/create-item`: when choosing a citizen to create the chosen items, avoid choosing a dead citizen
- `logistics`: fix potential crash when removing stockpiles or turning off stockpile features
## Misc Improvements
- `stockpiles`: include exotic pets in the "tameable" filter
- `logistics`: bring an autotraded bin to the depot if any item inside is tradeable instead of marking all items within the bin as untradeable if any individual item is untradeable
- `autonick`: add more variety to nicknames based on famous literary dwarves
- ``widgets.EditField``: DFHack edit fields now support cut/copy/paste with the system clipboard with Ctrl-X/Ctrl-C/Ctrl-V
- Suppress DF keyboard events when a DFHack keybinding is matched. This prevents, for example, a backtick from appearing in a textbox as text when you launch `gui/launcher` from the backtick keybinding.
- Dreamfort: give noble suites double-thick walls and add apartment doors
## Documentation
- `misery`: rewrite the documentation to clarify the actual effects of the plugin
## API
- ``Units::getUnitByNobleRole``, ``Units::getUnitsByNobleRole``: unit lookup API by role
- ``Items::markForTrade()``, ``Items::isRequestedTradeGood()``, ``Items::getValue``: see Lua notes below
## Internals
- Price calculations fixed for many item types
## Lua
- ``dfhack.units.getUnitByNobleRole``, ``dfhack.units.getUnitsByNobleRole``: unit lookup API by role
- ``dfhack.items.markForTrade``: mark items for trade
- ``dfhack.items.isRequestedTradeGood``: discover whether an item is named in a trade agreement with an active caravan
- ``dfhack.items.getValue``: gained optional ``caravan`` and ``caravan_buying`` parameters for prices that take trader races and agreements into account
- ``widgets.TextButton``: wraps a ``HotkeyLabel`` and decorates it to look more like a button
# 50.09-r1
## Internals
- Core: update SDL interface from SDL1 to SDL2
# 50.08-r4
## New Plugins
- `logistics`: automatically mark and route items or animals that come to monitored stockpiles. options are toggleable on an overlay that comes up when you have a stockpile selected.
## Fixes
- `buildingplan`: don't include artifacts when max quality is masterful
- `dig-now`: clear item occupancy flags for channeled tiles that had items on them
- `RemoteFortressReader`: fix a crash with engravings with undefined images
## Misc Improvements
- `autonick`: additional nicknames based on burrowing animals, colours, gems, and minerals
- `stockpiles`: added ``barrels``, ``organic``, ``artifacts``, and ``masterworks`` stockpile presets
- `orders`: only display import/export/sort/clear panel on main orders screen
- `orders`: refine order conditions for library orders to reduce cancellation spam
- Blueprint library: dreamfort: full rewrite and update for DF v50
- Blueprint library: pump_stack: updated walkthrough and separated dig and channel steps so boulders can be cleared
- Blueprint library: aquifer_tap: updated walkthrough
- `dig-now`: can now handle digging obsidian that has been formed from magma and water
## Documentation
- `blueprint-library-guide`: update Dreamfort screenshots and links, add ``aquifer_tap`` screenshot
# 50.08-r3
## Fixes
- Fix crash for some players when they launch DF outside of the Steam client
# 50.08-r2