Development changelog¶
This file contains changes grouped by the release (stable or development) in which they first appeared. See Building the changelogs for more information.
See Changelog for a list of changes grouped by stable releases.
Contents
DFHack future¶
Fixes¶
dig-now: clear item occupancy flags for channeled tiles that had items on them
gui/create-item: allow blocks to be made out of wood when using the restrictive filters
Misc Improvements¶
autonick: additional nicknames based on burrowing animals, colours, gems and minerals added
gui/autodump: add option to clear the
trader
flag from teleported items, allowing you to reclaim items dropped by merchants- gui/control-panel:
add some popular startup configuration commands for autobutcher and autofarm
add option for running fix/blood-del on new forts (enabled by default)
prioritize: add wild animal management tasks and lever pulling to the default list of prioritized job types
quickfort: now handles zones, locations, stockpile configuration, hauling routes, and more
stockpiles: added
barrels
,organic
,artifacts
, andmasterworks
stockpile presets- suspendmanager:
now suspends construction jobs on top of floor designations, protecting the designations from being erased
suspend blocking jobs when building high walls or filling corridors
DFHack 50.08-r3¶
Fixes¶
Fix crash for some players when they launch DF outside of the Steam client
DFHack 50.08-r2¶
New Plugins¶
add-spatter: (reinstated) allow mods to add poisons and magical effects to weapons
changeitem: (reinstated) change item material, quality, and subtype
createitem: (reinstated) create arbitrary items from the command line
deramp: (reinstated) removes all ramps designated for removal from the map
flows: (reinstated) counts map blocks with flowing liquids
lair: (reinstated) mark the map as a monster lair (this avoids item scatter when the fortress is abandoned)
luasocket: (reinstated) provides a Lua API for accessing network sockets
work-now: (reinstated, renamed from
workNow
) prevent dwarves from wandering aimlessly with “No job” after completing a task
New Scripts¶
assign-minecarts: (reinstated) quickly assign minecarts to hauling routes
diplomacy: view or alter diplomatic relationships
exportlegends: (reinstated) export extended legends information for external browsing
fix/stuck-instruments: fix instruments that are attached to invalid jobs, making them unusable. turn on automatic fixing in gui/control-panel in the
Maintenance
tab.gui/autodump: point and click item teleportation and destruction interface (available only if
armok
tools are shown)gui/mod-manager: automatically restore your list of active mods when generating new worlds
gui/sandbox: creation interface for units, trees, and items (available only if
armok
tools are shown)light-aquifers-only: (reinstated) convert heavy aquifers to light
modtools/create-item: (reinstated) commandline and API interface for creating items
necronomicon: search fort for items containing the secrets of life and death
Fixes¶
DFHack screen backgrounds now use appropriate tiles in DF Classic
RemoteServer: fix crash on malformed json in
dfhack-config/remote-server.json
autolabor: work detail override warning now only appears on the work details screen
deathcause: fix incorrect weapon sometimes being reported
gui/create-item: allow armor to be made out of leather when using the restrictive filters
gui/design: Fix building and stairs designation
- quickfort:
properly allow dwarves to smooth, engrave, and carve beneath walkable tiles of buildings
fixed detection of tiles where machines are allowed (e.g. water wheels can be built on stairs if there is a machine support nearby)
fixed rotation of blueprints with carved track tiles
RemoteFortressReader: ensured names are transmitted in UTF-8 instead of CP437
Misc Improvements¶
Core: new commandline flag/environment var: pass
--disable-dfhack
on the Dwarf Fortress commandline or specifyDFHACK_DISABLE=1
in the environment to disable DFHack for the current session.Dreamfort: improve traffic patterns throughout the fortress
Settings: recover gracefully when settings files become corrupted (e.g. by DF CTD)
- Window behavior:
non-resizable windows now allow dragging by their frame edges by default
if you have multiple DFHack tool windows open, scrolling the mouse wheel while over an unfocused window will focus it and raise it to the top
autodump: no longer checks for a keyboard cursor before executing, so
autodump destroy
(which doesn’t require a cursor) can still functiongui/autodump: fort-mode keybinding: Ctrl-H (when
armok
tools are enabled in gui/control-panel)gui/blueprint: recording of stockpile layouts and categories is now supported. note that detailed stockpile configurations will not be saved (yet)
gui/control-panel: new preference for whether filters in lists search for substrings in the middle of words (e.g. if set to true, then “ee” will match “steel”)
gui/create-item: ask for number of items to spawn by default
gui/design: Improved performance for drawing shapes
- gui/gm-editor:
when passing the
--freeze
option, further ensure that the game is frozen by halting all rendering (other than for DFHack tool windows)Alt-A now enables auto-update mode, where you can watch values change live when the game is unpaused
- gui/quickfort:
blueprints that designate items for dumping/forbidding/etc. no longer show an error highlight for tiles that have no items on them
place (stockpile layout) mode is now supported. note that detailed stockpile configurations were part of query mode and are not yet supported
you can now generate manager orders for items required to complete bluerpints
light-aquifers-only: now available as a fort Autostart option in gui/control-panel. note that it will only appear if “armok” tools are configured to be shown on the Preferences tab.
orders: update orders in library for prepared meals, bins, archer uniforms, and weapons
overlay: add links to the quickstart guide and the control panel on the DF title screen
stockpiles: allow filtering creatures by tameability
Removed¶
orders:
library/military_include_artifact_materials
library file removed since recent research indicates that platinum blunt weapons and silver crossbows are not more effective than standard steel. the alternate military orders file was also causing unneeded confusion.
Internals¶
dfhack.internal
: added memory analysis functions:msizeAddress
,getHeapState
,heapTakeSnapshot
,isAddressInHeap
,isAddressActiveInHeap
,isAddressUsedAfterFreeInHeap
,getAddressSizeInHeap
, andgetRootAddressOfHeapObject
Lua¶
ensure_keys
: walks a series of keys, creating new tables for any missing valuesgui
: changed frame naming scheme toFRAME_X
rather thanX_FRAME
, and added aliases for backwards compatibility. (for exampleBOLD_FRAME
is now calledFRAME_BOLD
)overlay.reload()
: has been renamed tooverlay.rescan()
so as not to conflict with the globalreload()
function. If you are developing an overlay, please take note of the new function name for reloading your overlay during development.
Structures¶
abstract_building_contents
: identify fields and flags related to location item countsarena_tree
: identify fields related to tree creationarena_unit
: identify fields related to unit creationmod_headerst
: renamenon_vanilla
flag tovanilla
to reflect its actual usageprofession
: renamed captionsCheese Maker
toCheesemaker
,Bee Keeper
toBeekeeper
, andBone Setter
toBone Doctor
DFHack 50.08-r1¶
Fixes¶
autoclothing: eliminate game lag when there are many inventory items in the fort
- buildingplan:
fixed size limit calculations for rollers
fixed items not being checked for accessibility in the filter and item selection dialogs
deteriorate: ensure remains of enemy dwarves are properly deteriorated
dig-now: properly detect and complete smoothing designations that have been converted into active jobs
suspendmanager: Fix over-aggressive suspension of jobs that could still possibly be done (e.g. jobs that are partially submerged in water)
Misc Improvements¶
- buildingplan:
planner panel is minimized by default and now remembers minimized state
can now filter by gems (for gem windows) and yarn (for ropes in wells)
combine: Now supports ammo, parts, powders, and seeds, and combines into containers
deteriorate: add option to exclude useable parts from deterioration
- gui/control-panel:
add preference option for hiding the terminal console on startup
add preference option for hiding “armok” tools in command lists
- gui/gm-editor:
press
g
to move the map to the currently selected item/unit/buildingpress
Ctrl-D
to toggle read-only mode to protect from accidental changes; this state persists across sessionsnew
--freeze
option for ensuring the game doesn’t change while you’re inspecting it
gui/launcher: DFHack version now shown in the default help text
gui/prerelease-warning: widgets are now clickable
overlay: add the DFHack version string to the DF title screen
Dwarf Therapist
: add a warning to the Labors screen when Dwarf Therapist is active so players know that changes they make to that screen will have no effect. If you’re starting a new embark and nobody seems to be doing anything, check your Labors tab for this warning to see if Dwarf Therapist thinks it is in control (even if it’s not running).toggle-kbd-cursor
: add hotkey for toggling the keyboard cursor (Alt-K)version
: add alias to display the DFHack help (including the version number) so something happens when players try to run “version”
Removed¶
title-version: replaced by an overlay widget
Lua¶
gui.ZScreenModal
: ZScreen subclass for modal dialogswidgets.CycleHotkeyLabel
: exposed “key_sep” and “option_gap” attributes for improved stylistic control.widgets.RangeSlider
: new mouse-controlled two-headed slider widget
Structures¶
convert
mod_manager
fields to pointers
DFHack 50.07-r1¶
New Plugins¶
faststart: speeds up the “Loading…” screen so the Main Menu appears faster
Fixes¶
blueprint: interpret saplings, shrubs, and twigs as floors instead of walls
caravan: fix trade good list sometimes disappearing when you collapse a bin
combine: fix error processing stockpiles with boundaries that extend outside of the map
gui/control-panel: the config UI for automelt is no longer offered when not in fortress mode
gui/gm-editor: no longer nudges last open window when opening a new one
hotkeys: hotkey hints on menu popup will no longer get their last character cut off by the scrollbar
prospector: display both “raw” Z levels and “cooked” elevations
- stockpiles:
fix crash when importing settings for gems from other worlds
allow numbers in saved stockpile filenames
warn-starving: no longer warns for dead units
launchdf
: launch Dwarf Fortress via the Steam client so Steam Workshop is functional
Misc Improvements¶
Core: hide DFHack terminal console by default when running on Steam Deck
- Mods:
scripts in mods that are only in the steam workshop directory are now accessible. this means that a script-only mod that you never mark as “active” when generating a world will still receive automatic updates and be usable from in-game
scripts from only the most recent version of an installed mod are added to the script path
give active mods a chance to reattach their load hooks when a world is reloaded
- buildingplan:
items in the item selection dialog should now use the same item quality symbols as the base game
hide planner overlay while the DF tutorial is active so that it can detect when you have placed the carpenter’s workshop and bed and allow you to finish the tutorial
can now filter by cloth and silk materials (for ropes)
rearranged elements of
planneroverlay
interfacerearranged elements of
itemselection
interface
- gui/control-panel:
bugfix services are now enabled by default
add faststart to the system services
- gui/gm-editor:
can now jump to material info objects from a mat_type reference with a mat_index using
i
the key column now auto-fits to the widest key
prioritize: revise and simplify the default list of prioritized jobs – be sure to tell us if your forts are running noticeably better (or worse!)
Lua¶
added two new window borders:
gui.BOLD_FRAME
for accented elements andgui.INTERIOR_MEDIUM_FRAME
for a signature-less frame that’s thicker than the existinggui.INTERIOR_FRAME
Structures¶
correct bit size of tree body data
identified fields in
deep_vein_hollow
,glowing_barrier
, andcursed_tomb
map eventsidentified
divine_treasure
andencased_horror
map events
Documentation¶
Installing DFHack: updated to include Steam installation instructions
DFHack 50.07-beta2¶
New Plugins¶
getplants: reinstated: designate trees for chopping and shrubs for gathering according to type
prospector: reinstated: get stone, ore, gem, and other tile property counts in fort mode.
New Scripts¶
fix/general-strike: fix known causes of the general strike bug (contributed by Putnam)
gui/civ-alert: configure and trigger civilian alerts
gui/seedwatch: GUI config and status panel interface for seedwatch
Fixes¶
- buildingplan:
filters are now properly applied to planned stairs
existing carved up/down stairs are now taken into account when determining which stair shape to construct
upright spike traps are now placed extended rather than retracted
you can no longer designate constructions on tiles with magma or deep water, mirroring the vanilla restrictions
fixed material filters getting lost for planning buildings on save/reload
respect building size limits (e.g. roads and bridges cannot be more than 31 tiles in any dimension)
caravan: item list length now correct when expanding and collapsing containers
prioritize: fixed all watched job type names showing as
nil
after a game load- suspendmanager:
does not suspend non-blocking jobs such as floor bars or bridges anymore
fix occasional bad identification of buildingplan jobs
- tailor:
properly discriminate between dyed and undyed cloth
no longer default to using adamantine cloth for producing clothes
take queued orders into account when calculating available materials
skip units who can’t wear clothes
identify more available items as available, solving issues with over-production
warn-starving: no longer warns for enemy and neutral units
Misc Improvements¶
Mods: scripts in mods are now automatically added to the DFHack script path. DFHack recognizes two directories in a mod’s folder:
scripts_modinstalled/
andscripts_modactive/
.scripts_modinstalled/
folders will always be added the script path, regardless of whether the mod is active in a world.scripts_modactive/
folders will only be added to the script path when the mod is active in the current loaded world.automelt: now allows metal chests to be melted (workaround for DF bug 2493 is no longer needed)
- buildingplan:
filters and global settings are now ignored when manually choosing items for a building, allowing you to make custom choices independently of the filters that would otherwise be used
if suspendmanager is running, then planned buildings will be left suspended when their items are all attached. suspendmanager will unsuspsend them for construction when it is safe to do so.
add option for autoselecting the last manually chosen item (like automaterial used to do)
- combine:
you can select a target stockpile in the UI instead of having to use the keyboard cursor
added
--quiet
option for no output when there are no changes
confirm: adds confirmation for removing burrows via the repaint menu
enable: can now interpret aliases defined with the alias command
exterminate: add support for
vaporize
kill method for when you don’t want to leave a corpse- gui/control-panel:
Now detects overlays from scripts named with capital letters
added
combine all
maintenance option for automatic combining of partial stacks in stockpilesadded
general-strike
maintenance option for automatic fixing of (at least one cause of) the general strike bug
- gui/cp437-table:
now has larger key buttons and clickable backspace/submit/cancel buttons, making it fully usable on the Steam Deck and other systems that don’t have an accessible keyboard
dialog is now fully controllable with the mouse, including highlighting which key you are hovering over and adding a clickable backspace button
gui/design: Now supports placing constructions using ‘Building’ mode. Inner and Outer tile constructions are configurable. Uses buildingplan filters set up with the regular buildingplan interface.
- orders:
add minimize button to overlay panel so you can get it out of the way to read long statue descriptions when choosing a subject in the details screen
add option to delete exported files from the import dialog
- stockpiles:
support applying stockpile configurations with fully enabled categories to stockpiles in worlds other than the one where the configuration was exported from
support partial application of a saved config based on dynamic filtering (e.g. disable all tallow in a food stockpile, even tallow from world-specific generated creatures)
additive and subtractive modes when applying a second stockpile configuration on top of a first
write player-exported stockpile configurations to the
dfhack-config/stockpiles
folder. If you have any stockpile configs in other directories, please move them to that folder.now includes a library of useful stockpile configs (see docs for details)
- stripcaged:
added
--skip-forbidden
option for greater control over which items are marked for dumpingitems that are marked for dumping are now automatically unforbidden (unless
--skip-forbidden
is set)
Removed¶
autounsuspend: replaced by suspendmanager
gui/dig: renamed to gui/design
Lua¶
widgets.CycleHotkeyLabel
:options that are bare integers will no longer be interpreted as the pen color in addition to being the label and value
option labels and pens can now be functions that return a label or pen
widgets.Label
:tokens can now specify a
htile
property to indicate the tile that should be shown when the Label is hovered over with the mouseclick handlers no longer get the label itself as the first param to the click handler
Structures¶
realigned
furniture_type
enum (added BAG)realigned
stockpile_settings
for new “corpses” vector
Documentation¶
the
untested
tag has been renamed tounavailable
to better reflect the status of the remaining unavaialable tools. most of the simply “untested” tools have now been tested and marked as working. the remaining tools are known to need development work before they are available again.DFHack modding guide: guide updated to include information for 3rd party script developers
DFHack 50.07-beta1¶
New Scripts¶
gui/suspendmanager: graphical configuration interface for suspendmanager
suspendmanager: automatic job suspension management (replaces autounsuspend)
suspend: suspends building construction jobs
Fixes¶
- buildingplan:
items are now attached correctly to screw pumps and other multi-item buildings
buildings with different material filters will no longer get “stuck” if one of the filters currently matches no items
gui/launcher: tab characters in command output now appear as a space instead of a code page 437 “blob”
quicksave: now reliably triggers an autosave, even if one has been performed recently
showmood properly count required number of bars and cloth when they aren’t the main item for the strange mood
Misc Improvements¶
- Quickfort blueprint library:
library blueprints have moved from
blueprints
tohack/data/blueprints
player-created blueprints should now go in the
dfhack-config/blueprints
folder. please move your existing blueprints fromblueprints
todfhack-config/blueprints
. you don’t need to move the library blueprints – those can be safely deleted from the oldblueprints
directory.
blueprint: now writes blueprints to the
dfhack-config/blueprints
directory- buildingplan:
can now filter by clay materials
remember choice per building type for whether the player wants to choose specific items
you can now attach multiple weapons to spike traps
can now filter by whether a slab is engraved
add “minimize” button to temporarily get the planner overlay out of the way if you would rather use the vanilla UI for placing the current building
add
buildingplan reset
command for resetting all filters to defaultsrename “Build” button to “Confirm” on the item selection dialog and change the hotkey from “B” to “C”
gui/gm-editor: can now open the selected stockpile if run without parameters
quickfort: now reads player-created blueprints from
dfhack-config/blueprints/
instead of the oldblueprints/
directory. Be sure to move over your personal blueprints to the new directory!showmood: clarify how many bars and/or cloth items are actually needed for the mood
Removed¶
buildingplan: “heat safety” setting is temporarily removed while we investigate incorrect item matching
Structures¶
identified two fields related to saves/autosaves to facilitate quicksave implementation
DFHack 50.07-alpha3¶
Fixes¶
dig-now: fixed multi-layer channel designations only channeling every second layer
gui/create-item: fix generic corpsepiece spawning
dfhack.job.isSuitableMaterial
: now properly detects lack of fire and magma safety for vulnerable materials with high melting pointswidgets.HotkeyLabel
: don’t trigger on click if the widget is disabled
Misc Improvements¶
buildingplan: entirely new UI for building placement, item selection, and materials filtering!
dig-now: added handling of dig designations that have been converted into active jobs
gui/create-item: added ability to spawn ‘whole’ corpsepieces (every layer of a part)
- gui/dig:
Allow placing an extra point (curve) while still placing the second main point
Allow placing n-point shapes, shape rotation/mirroring
Allow second bezier point, mirror-mode for freeform shapes, symmetry mode
Removed¶
automaterial: all functionality has been merged into buildingplan
gui.THIN_FRAME
: replaced bygui.INTERIOR_FRAME
API¶
Gui focus strings will no longer get the “dfhack/” prefix if the string “dfhack/” already exists in the focus string
Maps::GetBiomeTypeRef
renamed toMaps::getBiomeTypeRef
for consistencyMaps::GetBiomeType
renamed toMaps::getBiomeType
for consistencyMilitary
:New module for military functionality
new
makeSquad
to create a squadchanged
getSquadName
to take a squad identifiernew
updateRoomAssignments
for assigning a squad to a barracks and archery range
Lua¶
dfhack.job.attachJobItem()
: allows you to attach specific items to a jobdfhack.screen.paintTile()
: you can now explicitly clear the interface cursor from a map tile by passing0
as the tile valuegui.INTERIOR_FRAME
: a panel frame style for use in highlighting off interior areas of a UImaps.getBiomeType
: exposed preexisting function to Luawidgets.CycleHotkeyLabel
: addlabel_below
attribute for compact 2-line outputwidgets.FilteredList
: search key matching is now case insensitive by defaultwidgets.Label
: tokentile
properties can now be functions that return a value
Structures¶
history_eventst
: Removedhistory_event_masterpiece_created_arch_designst
and related enum valueplot_infost
.``unk_8``: renamed totheft_intrigues
. Fieldsunk_1
thruunk_8
renamed totarget_item
,mastermind_hf
,mastermind_plot_id
,corruptor_hf
,corruptor
,corruptee_hf
,corruptee
, andtheft_agreement
.unk_1
renamed toitem_known_pos
.specific_ref_type
: RemovedBUILDING_PARTY
,PETINFO_PET
, andPETINFO_OWNER
enum values to fix alignment.
DFHack 50.07-alpha2¶
New Scripts¶
combine: combines stacks of food and plant items.
Fixes¶
autobutcher: implemented work-around for Dwarf Fortress not setting nicknames properly, so that nicknames created in the in-game interface are detected & protect animals from being butchered properly. Note that nicknames for unnamed units are not currently saved by dwarf fortress - use
enable fix/protect-nicks
to fix any nicknames created/removed within dwarf fortress so they can be saved/reloaded when you reload the game.autochop: generate default names for burrows with no assigned names
autodump: changed behaviour to only change
dump
andforbid
flags if an item is successfully dumped.channel-safely: fix an out of bounds error regarding the REPORT event listener receiving (presumably) stale id’s
confirm: fix fps drop when enabled
devel/query: can now properly index vectors in the –table argument
forbid: fix detection of unreachable items for items in containers
gui/blueprint: correctly use setting presets passed on the commandline
gui/quickfort: correctly use settings presets passed on the commandline
makeown: fixes errors caused by using makeown on an invader
nestboxes: fixed bug causing nestboxes themselves to be forbidden, which prevented citizens from using them to lay eggs. Now only eggs are forbidden.
seedwatch: fix saving and loading of seed stock targets
tailor: block making clothing sized for toads; make replacement clothing orders use the size of the wearer, not the size of the garment
troubleshoot-item: fix printing of job details for chosen item
unforbid: fix detection of unreachable items for items in containers
Buildings::StockpileIterator
: fix check for stockpile items on block boundary.
Misc Improvements¶
DFHack tool windows that capture mouse clicks (and therefore prevent you from clicking on the “pause” button) now unconditionally pause the game when they open (but you can still unpause with the keyboard if you want to). Examples of this behavior: gui/quickfort, gui/blueprint, gui/liquids
Stopped mouse clicks from affecting the map when a click on a DFHack screen dismisses the window
autobutcher: logs activity to the console terminal instead of making disruptive in-game announcements
caravan: add trade screen overlay that assists with seleting groups of items and collapsing groups in the UI
confirm: configuration data is now persisted globally.
devel/query: will now search for jobs at the map coordinate highlighted, if no explicit job is highlighted and there is a map tile highlighted
devel/visualize-structure: now automatically inspects the contents of most pointer fields, rather than inspecting the pointers themselves
gui/gm-editor: will now inspect a selected building itself if the building has no current jobs
showmood: now shows the number of items needed for cloth and bars in addition to the technically correct but always confusing “total dimension” (150 per bar or 10,000 per cloth)
tailor: add support for adamantine cloth (off by default); improve logging
- troubleshoot-item:
output as bullet point list with indenting, with item description and ID at top
reports on items that are hidden, artifacts, in containers, and held by a unit
reports on the contents of containers with counts for each contained item type
Removed¶
combine-drinks: replaced by combine
combine-plants: replaced by combine
API¶
Units module: added new predicates for
isGeldable()
,isMarkedForGelding()
, andisPet()
Gui::any_civzone_hotkey
,Gui::getAnyCivZone
,Gui::getSelectedCivZone
: new functions to operate on the new zone system
Lua¶
dfhack.gui.getSelectedCivZone
: returns the Zone that the user has selected currentlywidgets.FilteredList
: Addededit_on_change
optional parameter to allow a custom callback on filter edit change.widgets.TabBar
: new library widget (migrated from control-panel.lua)
Structures¶
corrected alignment in
world.status
identify item vmethod 213 (applies a thread improvements to appropriate items based on an RNG)
identify two anons in
difficultyst
identify various data types related to job completion/cancellation
split
gamest
intogamest
andgamest_extra
to accommodate steam-specific data ingamest.mod_manager
activity_info
:unit_actor
,unit_noble
, andplace
converted from pointers to integer references.dipscript_popup
:meeting_holder
converted from unit pointer into two unit refsmeeting_holder_actor
andmeeting_holder_noble
.plotinfost
.``equipment``: Converteditems_unmanifested
,items_unassigned
, anditems_assigned
vectors from pointers to item refs
DFHack 50.07-alpha1¶
New Scripts¶
gui/design: digging and construction designation tool with shapes and patterns
makeown: makes the selected unit a citizen of your fortress
Fixes¶
Fix persisted data not being written on manual save
Fix right click sometimes closing both a DFHack window and a vanilla panel
Fixed issue with scrollable lists having some data off-screen if they were scrolled before being made visible
autochop: fixed bug related to lua stack smashing behavior in returned stockpile configs
automelt: fixed bug related to lua stack smashing behavior in returned stockpile configs
channel-safely: fixed bug resulting in marker mode never being set for any designation
fix/protect-nicks: now works by setting the historical figure nickname
gui/dig: Fix for ‘continuing’ auto-stair designation. Avoid nil index issue for tile_type
gui/liquids: fixed issues with unit pathing after adding/removing liquids
gui/unit-syndromes: allow the window widgets to be interacted with
- nestboxes:
now cancels any in-progress hauling jobs when it protects a fertile egg
now scans for eggs more frequently and cancels any in-progress hauling jobs when it protects a fertile egg
Units::isFortControlled
: Account for agitated wildlife
Misc Improvements¶
replaced DFHack logo used for the hover hotspot with a crisper image
- autobutcher:
changed defaults from 5 females / 1 male to 4 females / 2 males so a single unfortunate accident doesn’t leave players without a mating pair
now immediately loads races available at game start into the watchlist
- autodump:
reinstate
autodump-destroy-item
, hotkey: Ctrl-Knew hotkey for
autodump-destroy-here
: Ctrl-H
automelt: is now more resistent to vanilla savegame corruption
dig: new hotkeys for vein designation on z-level (Ctrl-V) and vein designation across z-levels (Ctrl-Shift-V)
gui/dig : Added ‘Line’ shape that also can draw curves, added draggable center handle
- gui/gm-editor:
now supports multiple independent data inspection windows
now prints out contents of coordinate vars instead of just the type
hotkeys: DFHack logo is now hidden on screens where it covers important information when in the default position (e.g. when choosing an embark site)
misery: now persists state with the fort
orders: recipe for silver crossbows removed from
library/military
as it is not a vanilla recipe, but is available inlibrary/military_include_artifact_materials
rejuvenate: now takes an –age parameter to choose a desired age.
stonesense: added an
INVERT_MOUSE_Z
option to invert the mouse wheel direction
Lua¶
overlay: overlay widgets can now specify focus paths for the viewscreens they attach to so they only appear in specific contexts. see DFHack overlay dev guide for details.
widgets.CycleHotkeyLabel
: Addedkey_back
optional parameter to cycle backwards.widgets.FilteredList
: Addedcase_sensitive
optional paramter to determine if filtering is case sensitive.widgets.HotkeyLabel
:Added
setLabel
method to allow easily updating the label text without mangling the keyboard shortcut.Added
setOnActivate
method to allow easily updating theon_activate
callback.
Structures¶
added missing tiletypes and corrected a few old ones based on a list supplied by Toady
DFHack 50.05-alpha3.1¶
Fixes¶
gui/launcher: no longer resets to the Help tab on every keystroke
seedwatch: fix parameter parsing when setting targets
DFHack 50.05-alpha3¶
New Plugins¶
autoslab: automatically create work orders to engrave slabs for ghostly dwarves
New Scripts¶
autofish: auto-manage fishing labors to control your stock of fish
fix/civil-war: removes negative relations with own government
fix/protect-nicks: restore nicknames when DF loses them
forbid: forbid and list forbidden items on the map
gui/autofish: GUI config and status panel interface for autofish
gui/automelt: GUI config and status panel interface for automelt
gui/control-panel: quick access to DFHack configuration
gui/unit-syndromes: browser for syndrome information
Fixes¶
allow launcher tools to launch themselves without hanging the game
DF screens can no longer get “stuck” on transitions when DFHack tool windows are visible. Instead, those DF screens are force-paused while DFHack windows are visible so the player can close them first and not corrupt the screen sequence. The “PAUSE FORCED” indicator will appear on these DFHack windows to indicate what is happening.
fix issues with clicks “passing through” some DFHack window elements to the screen below
autochop: fixed a crash when processing trees with corrupt data structures (e.g. when a trunk tile fails to fall when the rest of the tree is chopped down)
autoclothing: fixed a crash that can happen when units are holding invalid items.
build-now: now correctly avoids adjusting non-empty tiles above constructions that it builds
catsplosion: now only affects live, active units
getplants: trees are now designated correctly
- orders:
fix orders in library/basic that create bags
library/military now sticks to vanilla rules and does not add orders for normally-mood-only platinum weapons. A new library orders file
library/military_include_artifact_materials
is now offered as an alternatelibrary/military
set of orders that still includes the platinum weapons.
quickfort: allow floor bars, floor grates, and hatches to be placed over all stair types like vanilla allows
Misc Improvements¶
DFHack windows can now be “defocused” by clicking somewhere not over the tool window. This has the same effect as pinning previously did, but without the extra clicking.
New borders for DFHack tool windows – tell us what you think!
Windows now display “PAUSE FORCED” on the lower border if the tool is forcing the game to pause
autoclothing: merged the two separate reports into the same command.
automelt: stockpile configuration can now be set from the commandline
- ban-cooking:
ban announcements are now hidden by default; use new option
--verbose
to show them.report number of items banned.
build-now: now handles dirt roads and initializes farm plots properly
channel-safely: new monitoring for cave-in prevention
devel/click-monitor: report on middle mouse button actions
getplants: ID values will now be accepted regardless of case
gui/autochop: hide uninteresting burrows by default
gui/blueprint: allow map movement with the keyboard while the UI is open
- gui/control-panel:
you can now configure whether DFHack tool windows should pause the game by default
new global hotkey for quick access: Ctrl-Shift-E
- gui/create-item:
support spawning corpse pieces (e.g. shells) under “body part”
added search and filter capabilities to the selection lists
added whole corpse spawning alongside corpsepieces. (under “corpse”)
- gui/launcher:
sped up initialization time for faster window appearance
make command output scrollback separate from the help text so players can continue to see the output of the previous command as they type the next one
allow double spacebar to pause/unpause the game, even while typing a command
clarify what is being shown in the autocomplete list (all commands, autocompletion of partially typed command, or commands related to typed command)
support running commands directly from the autocomplete list via double-clicking
gui/liquids: interface overhaul, also now allows spawning river sources, setting/adding/removing liquid levels, and cleaning water from being salty or stagnant
gui/overlay: now focuses on repositioning overlay widgets; enabling, disabling, and getting help for overlay widgets has moved to the new gui/control-panel
- gui/quickcmd:
now has its own global keybinding for your convenience: Ctrl-Shift-A
now acts like a regular window instead of a modal dialog
gui/quickfort: don’t close the window when applying a blueprint so players can apply the same blueprint multiple times more easily
hotkeys: clicking on the DFHack logo no longer closes the popup menu
locate-ore: now only searches revealed tiles by default
modtools/spawn-liquid: sets tile temperature to stable levels when spawning water or magma
nestboxes: now saves enabled state in your savegame
orders: orders plugin functionality is now accessible via an overlay widget when the manager orders screen is open
- prioritize:
pushing minecarts is now included in the default priortization list
now automatically starts boosting the default list of job types when enabled
quickfort: planned buildings are now properly attached to any pertinent overlapping zones
seedwatch: now persists enabled state in the savegame, automatically loads useful defaults, and respects reachability when counting available seeds
unforbid: avoids unforbidding unreachable and underwater items by default
Removed¶
autohauler: no plans to port to v50, as it just doesn’t make sense with the new work detail system
show-unit-syndromes: replaced by gui/unit-syndromes; html export is no longer supported
API¶
overlay: overlay widgets can now specify a default enabled state if they are not already set in the player’s overlay config file
Buildings::containsTile()
: no longer takes aroom
parameter since that’s not how rooms work anymore. If the building has extents, the extents will be checked. otherwise, the result just depends on whether the tile is within the building’s bounding box.Lua::Push
: now supportsstd::unordered_map
Screen::Pen
: now acceptstop_of_text
andbottom_of_text
properties to support offset text in graphics modeUnits::getCitizens()
: gets a list of citizens, which otherwise you’d have to iterate over all units the world to discover
Lua¶
- helpdb:
new function:
helpdb.refresh()
to force a refresh of the database. Call if you are a developer adding new scripts, loading new plugins, or changing help text during playchanged from auto-refreshing every 60 seconds to only refreshing on explicit call to
helpdb.refresh()
. docs very rarely change during a play session, and the automatic database refreshes were slowing down the startup of gui/launcher and anything else that displays help text.
tiletypes: now has a Lua API!
tiletypes_setTile
dfhack.units.getCitizens()
: gets a list of citizensgui.ZScreen
: new attribute:defocusable
for controlling whether a window loses keyboard focus when the map is clickedwidgets.Label
:label.scroll()
now understandshome
andend
keywords for scrolling to the top or bottomtoken
tile
properties can now be either pens or numeric texture ids
widgets.List
: new callbacks for double click and shift double click
Structures¶
add “hospital” language name category
corrected misalignment in
unitst
(affectingoccupation
andadjective
)identified fields for squads and other military structures
identified some anons in
unitst
related to textures (thanks, putnam)identify a table of daily events scheduled to take place inthe current year
realigned and fleshed out
entity_site_link
(again, thanks, putnam)remove some no-longer-valid reputation types
building_design
: corrected misalignmentscreature_raw_graphics
: corrected misalignmentsitem.setSharpness()
: more info about paramsoccupation_type
: add enum values for new occupations related to hospitals
Documentation¶
Quickstart guide has been updated with info on new window behavior and how to use the control panel
Compilation: instructions added for cross-compiling DFHack for Windows from a Linux Docker builder
DFHack 50.05-alpha2¶
Fixes¶
autofarm: don’t duplicate status line entries for crops with no current supply
build-now: don’t error on constructions that do not have an item attached
gui/gm-editor: fix errors displayed while viewing help screen
orders: allow the orders library to be listed and imported properly (if you previously copied the orders library into your
dfhack-config/orders
directory to work around this bug, you can remove those files now)tailor: now respects the setting of the “used dyed clothing” standing order toggle
Removed¶
create-items: replaced by gui/create-item
--multi
Structures¶
corrected misalignment in
historical_entity
identified two old and one new language name groups
partially identified squad-related structures in
plotinfo
and corrected position ofciv_alert_idx
(does not affect alignment)
DFHack 50.05-alpha1¶
New Scripts¶
allneeds: list all unmet needs sorted by how many dwarves suffer from them.
devel/tile-browser: page through available textures and see their texture ids
gui/autochop: configuration frontend and status monitor for the autochop plugin
Fixes¶
make-legendary: “MilitaryUnarmed” option now functional
widgets.WrappedLabel
: no longer resets scroll position when window is moved or resized
Misc Improvements¶
Scrollable widgets now react to mouse wheel events when the mouse is over the widget
the
dfhack-config/scripts/
folder is now searched for scripts by defaultautounsuspend: now saves its state with your fort
devel/inspect-screen: updated for new rendering semantics and can now also inspect map textures
emigration: now saves its state with your fort
exterminate: added drown method. magma and drown methods will now clean up liquids automatically.
gui/cp437-table: converted to a movable, mouse-enabled window
gui/gm-editor: converted to a movable, resizable, mouse-enabled window
gui/gm-unit: converted to a movable, resizable, mouse-enabled window
- gui/launcher:
now supports a smaller, minimal mode. click the toggle in the launcher UI or start in minimal mode via the
Ctrl-Shift-P
keybindingcan now be dragged from anywhere on the window body
now remembers its size and position between invocations
- gui/quickcmd:
converted to a movable, resizable, mouse-enabled window
commands are now stored globally so you don’t have to recreate commands for every fort
hotkeys: overlay hotspot widget now shows the DFHack logo in graphics mode and “DFHack” in text mode
prioritize: now saves its state with your fort
Script paths: removed “raw” directories from default script paths. now the default locations to search for scripts are
dfhack-config/scripts
,save/*/scripts
, andhack/scripts
- unsuspend:
overlay now displays different letters for different suspend states so they can be differentiated in graphics mode (P=planning, x=suspended, X=repeatedly suspended)
overlay now shows a marker all the time when in graphics mode. ascii mode still only shows when paused so that you can see what’s underneath.
init.d
: directories have moved from theraw
subfolder (which no longer exists) to the root of the main DF folder or a savegame folder
Removed¶
Ruby is no longer a supported DFHack scripting language
fix-job-postings
from the workflow plugin is now obsolete since affected savegames can no longer be loaded
API¶
Gui::getDFViewscreen
: returns the topmost underlying DF viewscreenGui::getDwarfmodeDims
: now only returns map viewport dimensions; menu dimensions are obsoleteScreen::Pen
: now acceptskeep_lower
andwrite_to_lower
properties to support foreground and background textures in graphics mode
Lua¶
Removed
os.execute()
andio.popen()
built-in functionsoverlay:
OverlayWidget
now inherits fromPanel
instead ofWidget
to get all the frame and mouse integration goodiesdfhack.gui.getDFViewscreen()
: returns the topmost underlying DF viewscreengui.CLEAR_PEN
: now clears the background and foreground and writes to the background (before it would always write to the foreground)gui.KEEP_LOWER_PEN
: a general use pen that writes associated tiles to the foreground while keeping the existing backgroundgui.View
:visible
andactive
can now be functions that return a booleannew function
view:getMouseFramePos()
for detecting whether the mouse is within (or over) the exterior frame of a view
gui.ZScreen
: Screen subclass that implements window raising, multi-viewscreen input handling, and viewscreen event pass-through so the underlying map can be interacted with and dragged around while DFHack screens are visiblewidgets.CycleHotkeyLabel
:now supports rendering option labels in the color of your choice
new functions
setOption()
andgetOptionPen()
widgets.Label
: tiles can now have an associated widthwidgets.Panel
: new attributes to control window dragging and resizing with mouse or keyboardwidgets.ToggleHotkeyLabel
: now renders theOn
option in green textwidgets.Window
: Panel subclass with attributes preset for top-level windows
Structures¶
- Renamed globals to match DF:
ui
: renamed toplotinfo
ui_advmode
: renamed toadventure
ui_build_selector
: renamed tobuildreq
ui_sidebar_menus
: renamed togame
building_civzonest
: identify two variables,dir_x
anddir_y
, that handle archery range direction.
Documentation¶
added DFHack architecture diagrams to the dev intro
added DFHack Quickstart guide
devel/hello-world: updated to be a better example from which to start new gui scripts
DFHack overlay dev guide: added troubleshooting tips and common development workflows
DFHack 0.47.05-r8¶
New Plugins¶
channel-safely: auto-manage channel designations to keep dwarves safe
overlay: plugin is transformed from a single line of text that runs gui/launcher on click to a fully-featured overlay injection framework. It now houses a popup menu for keybindings relevant to the current DF screen, all the widgets previously provided by dwarfmonitor (e.g. the current date and number of happy/unhappy dwarves), the overlay that highlights suspended buildings when you pause, and others. See DFHack overlay dev guide for details.
New Scripts¶
gui/overlay: configuration interface for the DFHack overlays and overlay widgets. includes a click-and-drag interface for repositioning widgets!
Fixes¶
Core: ensure
foo.init
always runs beforefoo.*.init
(e.g.dfhack.init
should always run beforedfhack.something.init
)autofarm: flush output so status text is visible immediately after running the command
autolabor, autohauler: properly handle jobs 241, 242, and 243
- automaterial:
fix the cursor jumping up a z level when clicking quickly after box select
fix rendering errors with box boundary markers
buildingplan: fix crash when canceling out of placement mode for a building with planning mode enabled and subsequently attempting to place a building that does not have planning mode enabled and that has no pertinent materials available
dwarf-op: fixed error when matching dwarves by name
gui/create-item: prevent materials list filter from intercepting sublist hotkeys
gui/gm-unit: fixed behavior of
+
and-
to adjust skill values instead of populating the search fieldhotkeys: correctly detect hotkeys bound to number keys, F11, and F12
labormanager: associate quern construction with the correct labor
mousequery: fix the cursor jumping up z levels sometimes when using TWBT
tiletypes: no longer resets dig priority to the default when updating other properties of a tile
- warn-stealers:
register callback with correct event name so that units entering the map are detected
announce thieving creatures that spawn already revealed
cache unit IDs instead of unit objects to avoid referencing stale pointers
workorder: fix interpretation of json-specified orders that set the
item_type
fieldEventManager
:fix a segmentation fault with the
REPORT
eventfix the
JOB_STARTED
event only sending events to the first handler listed instead of all registered handlers
Misc Improvements¶
- UX:
List widgets now have mouse-interactive scrollbars
You can now hold down the mouse button on a scrollbar to make it scroll multiple times.
You can now drag the scrollbar up and down to scroll to a specific spot
autolabor, autohauler: refactored to use DFHack’s messaging system for info/debug/trace messages
- blueprint:
new
--smooth
option for recording all smoothed floors and walls instead of just the ones that require smoothing for later carvingrecord built constructions in blueprints
record stockpile/building/zone names in blueprints
record room sizes in blueprints
generate meta blueprints to reduce the number of blueprints you have to apply
support splitting the output file into phases grouped by when they can be applied
when splitting output files, number them so they sort into the order you should apply them in
dig: new
-z
option for digtype to restrict designations to the current z-level and downdwarfmonitor: widgets have been ported to the overlay framework and can be enabled and configured via the gui/overlay UI
gui/blueprint: support new blueprint phases and options
gui/cp437-table: new global keybinding for the clickable on-screen keyboard for players with keyboard layouts that prevent them from using certain keys: Ctrl-Shift-K
gui/create-item: restrict materials to those normally allowed by the game by default, introduce new
--unrestricted
option for full freedom in choosing materialsgui/launcher: show help for commands that start with ‘:’ (like
:lua
)gui/quantum: add option to allow corpses and refuse in your quantum stockpile
- hotkeys:
hotkey screen has been transformed into an interactive overlay widget that you can bring up by moving the mouse cursor over the hotspot (in the upper left corner of the screen by default). Enable/disable/reposition the hotspot in the gui/overlay UI. Even if the hotspot is disabled, the menu can be brought up at any time with the Ctrl-Shift-C hotkey.
now supports printing active hotkeys to the console with
hotkeys list
- ls:
indent tag listings and wrap them in the rightmost column for better readability
new
--exclude
option for hiding matched scripts from the output. this can be especially useful for modders who don’t want their mod scripts to be included inls
output.
modtools/create-unit: better unit naming, more argument checks, assign nemesis save data for units without civilization so they can be properly saved when offloaded
orders: replace shell craft orders in the standard orders list you get with
orders import library/basic
with orders for shell leggings. They have a slightly higher trade price. Also, “shleggings” is just hilarious.Quickfort blueprint library: improved layout of marksdwarf barracks in the example Dreamfort blueprints
- spectate:
new
auto-unpause
option for auto-dismissal of announcement pause events (e.g. sieges).new
auto-disengage
option for auto-disengagement of plugin through player interaction whilst unpaused.new
tick-threshold
option for specifying the maximum time to follow the same dwarfnew
animals
option for sometimes following animalsnew
hostiles
option for sometimes following hostilesnew
visiting
option for sometimes following visiting merchants, diplomats or plain visitorsadded persistent configuration of the plugin settings
unsuspend: new overlay for displaying status of suspended buildings (functionality migrated from removed resume plugin)
Removed¶
gui/create-item: removed
--restricted
option. it is now the default behaviorresume: functionality (including suspended building overlay) has moved to unsuspend
API¶
Constructions module: added
insert()
to insert constructions into the game’s sorted list.MiscUtils: added the following string transformation functions (refactored from
uicommon.h
):int_to_string
,ltrim
,rtrim
, andtrim
; addedstring_to_int
- Units module:
added new predicates for:
isUnitInBox()
isAnimal()
isVisiting()
any visiting unit (diplomat, merchant, visitor)isVisitor()
ie. not merchants or diplomatsisInvader()
isDemon()
returns true for unique/regular demonsisTitan()
isMegabeast()
isGreatDanger()
returns true if unit is a demon, titan, or megabeastisSemiMegabeast()
isNightCreature()
isDanger()
returns true if is a ‘GreatDanger’, semi-megabeast, night creature, undead, or invadermodified predicates:
isUndead()
now optionally ignores vampires instead of always ignoring vampiresisCitizen()
now optionally ignores insane citizens instead of always ignoring insane citizensnew action timer API for speeding up of slowing down units
Gui::anywhere_hotkey
: for plugin commands bound to keybindings that can be invoked on any screenGui::autoDFAnnouncement
,Gui::pauseRecenter
: added functionality reverse-engineered from announcement codeGui::revealInDwarfmodeMap
: Now enforce valid view bounds when pos invalid, add variant accepting x, y, zLua::Push()
: now handles maps with otherwise supported keys and valuesLua::PushInterfaceKeys()
: transforms viewscreenfeed()
keys into something that can be interpreted by lua-based widgets
Internals¶
Constructions module:
findAtTile
now uses a binary search intead of a linear searchMSVC warning level upped to /W3, and /WX added to make warnings cause compilations to fail.
Lua¶
Lua mouse events now conform to documented behavior in DFHack Lua API Reference –
_MOUSE_L_DOWN
will be sent exactly once per mouse click and_MOUSE_L
will be sent repeatedly as long as the button is held down. Similarly for right mouse button events.dfhack.constructions.findAtTile()
: exposed preexisting function to Lua.dfhack.constructions.insert()
: exposed new function to Lua.gui.Screen.show()
: now returnsself
as a conveniencegui.View.getMousePos()
now takes an optionalViewRect
parameter in case the caller wants to get the mouse pos relative to a rect that is not the frame_body (such as the frame_rect that includes the frame itself)widgets.EditField
: now allows other widgets to process characters that theon_char
callback rejects.widgets.FilteredList
: now provides a useful default search key for list items made up of text tokens instead of plain textwidgets.HotkeyLabel
: now ignores mouse clicks whenon_activate
is not definedwidgets.List
:new
getIdxUnderMouse()
function for detecting the list index under the active mouse cursor. this allows for “selection follows mouse” behaviorshift-clicking now triggers the
submit2
attribute function if it is defined
widgets.Panel
: newframe_style
andframe_title
attributes for drawing frames around groups of widgetswidgets.ResizingPanel
: now accounts for frame inset when calculating frame sizewidgets.Scrollbar
: new scrollbar widget that can be paired with an associated scrollable widget. Integrated withwidgets.Label
andwidgets.List
.
Structures¶
general_refst
: type virtual union member forITEM_GENERAL
historical_figure_info.T_reputation.unk_2c
: identifyyear
+year_ticks
itemst
: identify two vmethods related to adding thread improvements to items made of cloth, and label several previously unknown return typesproj_magicst
: correct structure fields (to match 40d)unit_action_type_group
: added enum and taggedunit_action_type
entries with its groups for DFHack’s new action timer API.world
: identify type of a vector (still not known what it’s for, but it’s definitely an item vector)
Documentation¶
DFHack overlay dev guide: documentation and guide for injecting functionality into DF viewscreens from Lua scripts and creating interactive overlay widgets
dfhack.gui.revealInDwarfmodeMap
: documentcenter
bool for Lua API
DFHack 0.47.05-r7¶
New Plugins¶
autobutcher: split off from zone into its own plugin. Note that to enable, the command has changed from
autobutcher start
toenable autobutcher
.autonestbox: split off from zone into its own plugin. Note that to enable, the command has changed from
autonestbox start
toenable autonestbox
.overlay: display a “DFHack” button in the lower left corner that you can click to start the new GUI command launcher. The dwarfmonitor weather display had to be moved to make room for the button. If you are seeing the weather indicator rendered over the overlay button, please remove the
dfhack-config/dwarfmonitor.json
file to fix the weather indicator display offset.
New Scripts¶
gui/kitchen-info: adds more info to the Kitchen screen
gui/launcher: in-game command launcher with autocomplete, history, and context-sensitive help
gui/workorder-details: adjusts work orders’ input item, material, traits
max-wave: dynamically limit the next immigration wave, can be set to repeat
pop-control: persistent per fortress population cap, hermit, and max-wave management
warn-stealers: warn when creatures that may steal your food, drinks, or items become visible
New Internal Commands¶
Fixes¶
autochop: designate largest trees for chopping first, instead of the smallest
devel/query: fixed error when –tile is specified
dig-now: Fix direction of smoothed walls when adjacent to a door or floodgate
dwarf-op: fixed error when applying the Miner job to dwarves
emigration: fix emigrant logic so unhappy dwarves leave as designed
gui/gm-unit: allow
+
and-
to adjust skill values as intended instead of letting the filter intercept the charactersgui/unit-info-viewer: fix logic for displaying undead creature names
gui/workflow: restore functionality to the add/remove/order hotkeys on the workflow status screen
modtools/moddable-gods: fixed an error when assigning spheres
quickfort: Dreamfort blueprint set: declare the hospital zone before building the coffer; otherwise DF fails to stock the hospital with materials
view-item-info: fixed a couple errors when viewing items without materials
dfhack.buildings.findCivzonesAt
: no longer return duplicate civzones after loading a save with existing civzonesdfhack.run_script
: ensure the arguments passed to scripts are always strings. This allows other scripts to callrun_script
with numeric args and it won’t break parameter parsing.job.removeJob()
: ensure jobs are removed from the world list when they are canceled
Misc Improvements¶
History files:
dfhack.history
,tiletypes.history
,lua.history
, andliquids.history
have moved to thedfhack-config
directory. If you’d like to keep the contents of your current history files, please move them todfhack-config
.Init scripts:
dfhack.init
and other init scripts have moved todfhack-config/init/
. If you have customized yourdfhack.init
file and want to keep your changes, please move the part that you have customized to the new location atdfhack-config/init/dfhack.init
. If you do not have changes that you want to keep, do not copy anything, and the new defaults will be used automatically.- UX:
You can now move the cursor around in DFHack text fields in
gui/
scripts (e.g. gui/blueprint, gui/quickfort, or gui/gm-editor). You can move the cursor by clicking where you want it to go with the mouse or using the Left/Right arrow keys. Ctrl+Left/Right will move one word at a time, and Alt+Left/Right will move to the beginning/end of the text.You can now click on the hotkey hint text in many
gui/
script windows to activate the hotkey, like a button. Not all scripts have been updated to use the clickable widget yet, but you can try it in gui/blueprint or gui/quickfort.Label widget scroll icons are replaced with scrollbars that represent the percentage of text on the screen and move with the position of the visible text, just like web browser scrollbars.
- devel/query:
inform the user when a query has been truncated due to
--maxlength
being hit.increased default maxlength value from 257 to 2048
do-job-now: new global keybinding for boosting the priority of the jobs associated with the selected building/work order/unit/item etc.: Alt-N
dwarf-op: replaces [ a b c ] option lists with a,b,c option lists
gui/gm-unit: don’t clear the list filter when you adjust a skill value
- gui/quickfort:
better formatting for the generated manager orders report
you can now click on the map to move the blueprint anchor point to that tile instead of having to use the cursor movement keys
display an error message when the blueprints directory cannot be found
gui/workorder-details: new keybinding on the workorder details screen:
D
keybinding: support backquote (`) as a hotkey (and assign the hotkey to the new gui/launcher interface)
ls: can now filter tools by substring or tag. note that dev scripts are hidden by default. pass the
--dev
option to show them.- manipulator:
add a library of useful default professions
move professions configuration from
professions/
todfhack-config/professions/
to keep it together with other dfhack configuration. If you have saved professions that you would like to keep, please manually move them to the new folder.
orders: added useful library of manager orders. see them with
orders list
and import them with, for example,orders import library/basic
prioritize: new
defaults
keyword to prioritize the list of jobs that the community agrees should generally be prioritized. Runprioritize -a defaults
to try it out in your fort!prospector: add new
--show
option to give the player control over which report sections are shown. e.g.prospect all --show ores
will just show information on ores.- quickfort:
Dreamfort blueprint set improvements: set traffic designations to encourage dwarves to eat cooked food instead of raw ingredients
library blueprints are now included by default in
quickfort list
output. Use the new--useronly
(or just-u
) option to filter out library bluerpints.better error message when the blueprints directory cannot be found
seedwatch:
seedwatch all
now adds all plants with seeds to the watchlist, not just the “basic” crops.materials.ItemTraitsDialog
: added a defaulton_select
-handler which toggles the traits.
Removed¶
fix/build-location: The corresponding DF bug (5991) was fixed in DF 0.40.05
fix/diplomats: DF bug 3295 fixed in 0.40.05
fix/fat-dwarves: DF bug 5971 fixed in 0.40.05
fix/feeding-timers: DF bug 2606 is fixed in 0.40.12
fix/merchants: DF bug that prevents humans from making trade agreements has been fixed
gui/assign-rack: No longer useful in current DF versions
gui/hack-wish: Replaced by gui/create-item
gui/no-dfhack-init: No longer useful since players don’t have to create their own
dfhack.init
files anymore
API¶
Removed “egg” (“eggy”) hook support (Linux only). The only remaining method of hooking into DF is by interposing SDL calls, which has been the method used by all binary releases of DFHack.
Removed
Engravings
module (C++-only). Accessworld.engravings
directly instead.Removed
Notes
module (C++-only). Accessui.waypoints.points
directly instead.Removed
Windows
module (C++-only) - unused.Constructions
module (C++-only): removedt_construction
,isValid()
,getCount()
,getConstruction()
, andcopyConstruction()
. Accessworld.constructions
directly instead.Gui::getSelectedItem()
,Gui::getAnyItem()
: added support for the artifacts screenUnits::teleport()
: now setsunit.idle_area
to discourage units from walking back to their original location (or teleporting back, if using fastdwarf)
Lua¶
Added
dfhack.screen.hideGuard()
: exposes the C++Screen::Hide
to LuaHistory: added
dfhack.getCommandHistory(history_id, history_filename)
anddfhack.addCommandToHistory(history_id, history_filename, command)
so gui scripts can access a commandline history without requiring a terminal.helpdb
: database and query interface for DFHack tool help texttile-material
: fix the order of declarations. TheGetTileMat
function now returns the material as intended (always returned nil before). Also changed the license info, with permission of the original author.utils.df_expr_to_ref()
: fixed some errors that could occur when navigating tableswidgets.CycleHotkeyLabel
: clicking on the widget will now cycle the options and triggeron_change()
. This also applies to theToggleHotkeyLabel
subclass.widgets.EditField
:new
onsubmit2
callback attribute is called when the user hits Shift-Enter.new function:
setCursor(position)
sets the input cursor.new attribute:
ignore_keys
lets you ignore specified characters if you want to use them as hotkeys
widgets.FilteredList
: new attribute:edit_ignore_keys
gets passed to the filter EditField asignore_keys
widgets.HotkeyLabel
: clicking on the widget will now callon_activate()
.widgets.Label
:scroll
function now interprets the keywords+page
,-page
,+halfpage
, and-halfpage
in addition to simple positive and negative numbers.
Structures¶
Eliminate all “anon_X” names from structure fields
army
: changesquads
vector type toworld_site_inhabitant
, identifymin_smell_trigger``+``max_odor_level``+``max_low_light_vision``+``sense_creature_classes
cave_column_rectangle
: identify coordinatescave_column
: identify Z coordinatesembark_profile
: identify reclaim fields, add missing pet_count vectorentity_population
: identifylayer_id
feature
: identify “shiftCoords” vmethod,irritation_level
andirritation_attacks
fieldsflow_guide
: identify “shiftCoords” vmethodgeneral_refst
: name parameters ongetLocation
andsetLocation
vmethodsgeneral_ref_locationst
: name member fieldshistorical_entity
: confirmhostility_level
andsiege_tier
item
: identify methodnotifyCreatedMasterwork
that is called when a masterwork is created.language_name_type
: identifyElfTree
andSymbolArtifice
thruSymbolFood
misc_trait_type
: update auto-decrement markers, remove obsolete referencestimed_event
: identifylayer_id
ui_advmode
: identify several fields as containing coordinatesui_build_selector
: identifycur_walk_tag
andmin_weight_races``+``max_weight_races
ui
: identify actual contents ofunk5b88
field, identify infiltrator referencesunitst
: identifyhisteventcol_id
field inside status2viewscreen_barterst
: name member fieldsviewscreen_tradegoodsst
: rename trade_replyOffendedAnimal``+``OffendedAnimalAlt
toOffendedBoth``+``OffendedAnimal
world_site_inhabitant
: renameoutcast_id
andfounder_outcast_entity_id
, identifyinteraction_id
andinteraction_effect_idx
Documentation¶
Added DFHack modding guide
Group DFHack tools by tag so similar tools are grouped and easy to find
Update all DFHack tool documentation (300+ pages) with standard syntax formatting, usage examples, and overall clarified text.
DFHack 0.47.05-r6¶
New Scripts¶
assign-minecarts: automatically assign minecarts to hauling routes that don’t have one
deteriorate: combines, replaces, and extends previous deteriorateclothes, deterioratecorpses, and deterioratefood scripts.
gui/petitions: shows petitions. now you can see which guildhall/temple you agreed to build!
gui/quantum: point-and-click tool for creating quantum stockpiles
gui/quickfort: shows blueprint previews on the live map so you can apply them interactively
modtools/fire-rate: allows modders to adjust the rate of fire for ranged attacks
Fixes¶
build-now: walls built above other walls can now be deconstructed like regularly-built walls
- eventful:
fix
eventful.registerReaction
to correctly passcall_native
argument thus allowing canceling vanilla item creation. Updated related documentation.renamed NEW_UNIT_ACTIVE event to UNIT_NEW_ACTIVE to match the
EventManager
event namefixed UNIT_NEW_ACTIVE event firing too often
gui/dfstatus: no longer count items owned by traders
gui/unit-info-viewer: fix calculation/labeling of unit size
job.removeJob()
: fixes regression in DFHack 0.47.05-r5 where items/buildings associated with the job were not getting disassociated when the job is removed. Now build-now can build buildings and gui/mass-remove can cancel building deconstruction againwidgets.CycleHotkeyLabel
: allow initial option values to be specified as an index instead of an option value
Misc Improvements¶
build-now: buildings that were just designated with buildingplan are now built immediately (as long as there are items available to build the buildings with) instead of being skipped until buildingplan gets around to doing its regular scan
caravan: new
unload
command, fixes endless unloading at the depot by reconnecting merchant pack animals that were disconnected from their owners- confirm:
added a confirmation dialog for removing manager orders
allow players to pause the confirmation dialog until they exit the current screen
deteriorate: new
now
command immediately deteriorates items of the specified types- New Fort Autostart Commands:
refine food preparation orders so meal types are chosen intelligently according to the amount of meals that exist and the number of aviailable items to cook with
reduce required stock of dye for “Dye cloth” orders
fix material conditions for making jugs and pots
make wooden jugs by default to differentiate them from other stone tools. this allows players to more easily select jugs out with a properly-configured stockpile (i.e. the new
woodentools
alias)
list-agreements: now displays translated guild names, worshipped deities, petition age, and race-appropriate professions (e.g. “Craftsdwarf” instead of “Craftsman”)
- Quickfort blueprint creation guide:
new aliases:
forbidsearch
,permitsearch
, andtogglesearch
use the search plugin to alter the settings for a filtered list of item types when configuring stockpilesnew aliases:
stonetools
andwoodentools
. thejugs
alias is deprecated. please usestonetools
instead, which is the same as the oldjugs
alias.new aliases:
usablehair
,permitusablehair
, andforbidusablehair
alter settings for the types of hair/wool that can be made into cloth: sheep, llama, alpaca, and troll. Thecraftrefuse
aliases have been altered to use this alias as well.new aliases:
forbidthread
,permitthread
,forbidadamantinethread
,permitadamantinethread
,forbidcloth
,permitcloth
,forbidadamantinecloth
, andpermitadamantinecloth
give you more control how adamantine-derived items are stored
- quickfort:
Dreamfort blueprint set improvements: automatically create tavern, library, and temple locations (restricted to residents only by default), automatically associate the rented rooms with the tavern
Dreamfort blueprint set improvements: new design for the services level, including were-bitten hospital recovery rooms and an appropriately-themed interrogation room next to the jail! Also fits better in a 1x1 embark for minimalist players.
workorder: a manager is no longer required for orders to be created (matching bevavior in the game itself)
Removed¶
deteriorateclothes: please use
deteriorate --types=clothes
insteaddeterioratecorpses: please use
deteriorate --types=corpses
insteaddeterioratefood: please use
deteriorate --types=food
insteaddevel/unforbidall: please use unforbid instead. You can silence the output with
unforbid all --quiet
API¶
word_wrap
: argumentbool collapse_whitespace
converted to enumword_wrap_whitespace_mode mode
, with valid modesWSMODE_KEEP_ALL
,WSMODE_COLLAPSE_ALL
, andWSMODE_TRIM_LEADING
.
Lua¶
gui.View
: allView
subclasses (including allWidgets
) can now acquire keyboard focus with the newView:setFocus()
function. See docs for details.materials.ItemTraitsDialog
: new dialog to edit item traits (where “item” is part of a job or work order or similar). The list of traits is the same as in vanilla work order conditions “t
change traits”.widgets.EditField
:the
key_sep
string is now configurablecan now display an optional string label in addition to the activation key
views that have an
EditField
subview no longer need to manually manage theEditField
activation state and input routing. This is now handled automatically by the newgui.View
keyboard focus subsystem.
widgets.HotkeyLabel
: thekey_sep
string is now configurable
Structures¶
art_image_elementst
: identify vmethodmarkDiscovered
and second parameter forgetName2
art_image_propertyst
: identify parameters forgetName
building_handler
: fix vmethodget_machine_hookup_list
parametersvermin
: identifycategory
field as new enumworld.unk_26a9a8
: rename toallow_announcements
DFHack 0.47.05-r5¶
New Plugins¶
spectate: “spectator mode” – automatically follows dwarves doing things in your fort
New Scripts¶
devel/eventful-client: useful for testing eventful events
New Tweaks¶
tweak:
partial-items
displays percentage remaining for partially-consumed items such as hospital cloth
Fixes¶
autofarm: removed restriction on only planting “discovered” plants
cxxrandom: fixed exception when calling
bool_distribution
- devel/query:
fixed a problem printing parents when the starting path had lua pattern special characters in it
fixed a crash when trying to iterate over linked lists
gui/advfort: encrust and stud jobs no longer consume reagents without actually improving the target item
luasocket: return correct status code when closing socket connections so clients can know when to retry
quickfort: contructions and bridges are now properly placed over natural ramps
setfps: keep internal ratio of processing FPS to graphics FPS in sync when updating FPS
Misc Improvements¶
- autochop:
only designate the amount of trees required to reach
max_logs
preferably designate larger trees over smaller ones
- autonick:
now displays help instead of modifying dwarf nicknames when run without parameters. use
autonick all
to rename all dwarves.added
--quiet
and--help
options
- blueprint:
track
phase renamed tocarve
carved fortifications and (optionally) engravings are now captured in generated blueprints
cursecheck: new option,
--ids
prints creature and race IDs of the cursed creature- debug:
DFHack log messages now have configurable headers (e.g. timestamp, origin plugin name, etc.) via the
debugfilter
command of the debug pluginscript execution log messages (e.g. “Loading script: dfhack_extras.init” can now be controlled with the
debugfilter
command. To hide the messages, add this line to yourdfhack.init
file:debugfilter set Warning core script
- New Fort Autostart Commands:
add mugs to
basic
manager ordersonMapLoad_dreamfort.init
remove “cheaty” commands and new tweaks that are now in the defaultdfhack.init-example
file
dig-now: handle fortification carving
- Events from EventManager:
add new event type
JOB_STARTED
, triggered when a job first gains a workeradd new event type
UNIT_NEW_ACTIVE
, triggered when a new unit appears on the active list
gui/blueprint: support new blueprint options and phases
gui/create-item: Added “(chain)” annotation text for armours with the [CHAIN_METAL_TEXT] flag set
manipulator: tweak colors to make the cursor easier to locate
- quickfort:
support transformations for blueprints that use expansion syntax
adjust direction affinity when transforming buildings (e.g. bridges that open to the north now open to the south when rotated 180 degrees)
automatically adjust cursor movements on the map screen in
#query
and#config
modes when the blueprint is transformed. e.g.{Up}
will be played back as{Right}
when the blueprint is rotated clockwise and the direction key would move the map cursornew blueprint mode:
#config
; for playing back key sequences that don’t involve the map cursor (like configuring hotkeys, changing standing orders, or modifying military uniforms)API function
apply_blueprint
can now takedata
parameters that are simple strings instead of coordinate maps. This allows easier application of blueprints that are just one cell.
stocks: allow search terms to match the full item label, even when the label is truncated for length
tweak:
stable-cursor
now keeps the cursor stable even when the viewport moves a small amountdfhack.init-example
: recently-added tweaks added to exampledfhack.init
file
API¶
add functions reverse-engineered from ambushing unit code:
Units::isHidden()
,Units::isFortControlled()
,Units::getOuterContainerRef()
,Items::getOuterContainerRef()
Job::removeJob()
: use the job cancel vmethod graciously provided by The Toady One in place of a synthetic method derived from reverse engineering
Lua¶
custom-raw-tokens: library for accessing tokens added to raws by mods
dfhack.units
: Lua wrappers for functions reverse-engineered from ambushing unit code:isHidden(unit)
,isFortControlled(unit)
,getOuterContainerRef(unit)
,getOuterContainerRef(item)
dialogs
:show*
functions now return a reference to the created dialogdwarfmode.enterSidebarMode()
: passingdf.ui_sidebar_mode.DesignateMine
now always results in you enteringDesignateMine
mode and notDesignateChopTrees
, even when you looking at the surface (where the default designation mode isDesignateChopTrees
)dwarfmode.MenuOverlay
:if
sidebar_mode
attribute is set, automatically manage entering a specific sidebar mode on show and restoring the previous sidebar mode on dismissnew class function
renderMapOverlay
to assist with painting tiles over the visible map
ensure_key
: new global function for retrieving or dynamically creating Lua table mappingssafe_index
: now properly handles lua sparse tables that are indexed by numbersstring
: new functionescape_pattern()
escapes regex special characters within a stringwidgets
:unset values in
frame_inset
table default to0
FilteredList
class now allows all punctuation to be typed into the filter and can match search keys that start with punctuationminimum height of
ListBox
dialog is now calculated correctly when there are no items in the list (e.g. when a filter doesn’t match anything)if
autoarrange_subviews
is set,Panel
s will now automatically lay out widgets vertically according to their current height. This allows you to have widgets dynamically change height or become visible/hidden and you don’t have to worry about recalculating frame layoutsnew class
ResizingPanel
(subclass ofPanel
) automatically recalculates its own frame height based on the size, position, and visibility of its subviewsnew class
HotkeyLabel
(subclass ofLabel
) that displays and reacts to hotkeysnew class
CycleHotkeyLabel
(subclass ofLabel
) allows users to cycle through a list of options by pressing a hotkeynew class
ToggleHotkeyLabel
(subclass ofCycleHotkeyLabel
) toggles betweenOn
andOff
statesnew class
WrappedLabel
(subclass ofLabel
) provides autowrapping of textnew class
TooltipLabel
(subclass ofWrappedLabel
) provides tooltip-like behavior
Structures¶
adventure_optionst
: add missinggetUnitContainer
vmethodhistorical_figure.T_skills
: addaccount_balance
fieldjob
: addimprovement
field (union withhist_figure_id
andrace
)report_init.flags
: renamesparring
flag tohostile_combat
viewscreen_loadgamest
: add missingLoadingImageSets
andLoadingDivinationSets
enum values tocur_step
field
Documentation¶
add more examples to the plugin example skeleton files so they are more informative for a newbie
update download link and installation instructions for Visual C++ 2015 build tools on Windows
update information regarding obtaining a compatible Windows build environment
confirm: correct the command name in the plugin help text
cxxrandom: added usage examples
String class extensions: document DFHack string extensions (
startswith()
,endswith()
,split()
,trim()
,wrap()
, andescape_pattern()
)Quickfort blueprint creation guide: added screenshots to the Dreamfort case study and overall clarified text
Client libraries: add new Rust client library
Lua API.rst
: addedisHidden(unit)
,isFortControlled(unit)
,getOuterContainerRef(unit)
,getOuterContainerRef(item)
DFHack 0.47.05-r4¶
Fixes¶
- blueprint:
fixed passing incorrect parameters to gui/blueprint when you run
blueprint gui
with optional paramskey sequences for constructed walls and down stairs are now correct
exportlegends: fix issue where birth year was outputted as birth seconds
- quickfort:
produce a useful error message instead of a code error when a bad query blueprint key sequence leaves the game in a mode that does not have an active cursor
restore functionality to the
--verbose
commandline flagdon’t designate tiles for digging if they are within the bounds of a planned or constructed building
allow grates, bars, and hatches to be built on flat floor (like DF itself allows)
allow tracks to be built on hard, natural rock ramps
allow dig priority to be properly set for track designations
fix incorrect directions for tracks that extend south or east from a track segment pair specified with expansion syntax (e.g. T(4x4))
fix parsing of multi-part extended zone configs (e.g. when you set custom supply limits for hospital zones AND set custom flags for a pond)
fix error when attempting to set a custom limit for plaster powder in a hospital zone
tailor: fixed some inconsistencies (and possible crashes) when parsing certain subcommands, e.g.
tailor help
tiletypes, tiletypes: fix crash when running from an unsuspended core context
Misc Improvements¶
Core: DFHack now prints the name of the init script it is running to the console and stderr
automaterial: ensure construction tiles are laid down in order when using buildingplan to plan the constructions
- blueprint:
all blueprint phases are now written to a single file, using quickfort multi-blueprint file syntax. to get the old behavior of each phase in its own file, pass the
--splitby=phase
parameter toblueprint
you can now specify the position where the cursor should be when the blueprint is played back with quickfort by passing the
--playback-start
parametergenerated blueprints now have labels so quickfort can address them by name
all building types are now supported
multi-type stockpiles are now supported
non-rectangular stockpiles and buildings are now supported
blueprints are no longer generated for phases that have nothing to do (unless those phases are explicitly enabled on the commandline or gui)
new “track” phase that discovers and records carved tracks
new “zone” phase that discovers and records activity zones, including custom configuration for ponds, gathering, and hospitals
dig-now: no longer leaves behind a designated tile when a tile was designated beneath a tile designated for channeling
- gui/blueprint:
support the new
--splitby
and--format
options for blueprinthide help text when the screen is too short to display it
orders: added
list
subcommand to show existing exported ordersQuickfort blueprint library: added light aquifer tap and pump stack blueprints (with step-by-step usage guides) to the quickfort blueprint library
- quickfort:
Dreamfort blueprint set improvements: added iron and flux stock level indicators on the industry level and a prisoner processing quantum stockpile in the surface barracks. also added help text for how to manage sieges and how to manage prisoners after a siege.
add
quickfort.apply_blueprint()
API function that can be called directly by other scriptsby default, don’t designate tiles for digging that have masterwork engravings on them. quality level to preserve is configurable with the new
--preserve-engravings
paramimplement single-tile track aliases so engraved tracks can be specified tile-by-tile just like constructed tracks
allow blueprints to jump up or down multiple z-levels with a single command (e.g.
#>5
goes down 5 levels)blueprints can now be repeated up and down a specified number of z-levels via
repeat
markers in meta blueprints or the--repeat
commandline optionblueprints can now be rotated, flipped, and shifted via
transform
andshift
markers in meta blueprints or the corresponding commandline options
quickfort, New Fort Autostart Commands: Dreamfort blueprint set improvements based on playtesting and feedback. includes updated profession definitions.
Removed¶
API¶
Buildings::findCivzonesAt()
: lookups now complete in constant time instead of linearly scanning through all civzones in the game
Lua¶
argparse.processArgsGetopt()
: you can now have long form parameters that are not an alias for a short form parameter. For example, you can now have a parameter like--longparam
without needing to have an equivalent one-letter-l
param.dwarfmode.enterSidebarMode()
:df.ui_sidebar_mode.DesignateMine
is now a suported target sidebar mode
Structures¶
historical_figure_info.spheres
: give spheres vector a usable nameunit.enemy
: fix definition ofenemy_status_slot
and addcombat_side_id
DFHack 0.47.05-r3¶
New Plugins¶
dig-now: instantly completes dig designations (including smoothing and carving tracks)
New Scripts¶
autonick: gives dwarves unique nicknames
build-now: instantly completes planned building constructions
do-job-now: makes a job involving current selection high priority
prioritize: automatically boosts the priority of current and/or future jobs of specified types, such as hauling food, tanning hides, or pulling levers
reveal-adv-map: exposes/hides all world map tiles in adventure mode
Fixes¶
Core:
alt
keydown state is now cleared when DF loses and regains focus, ensuring thealt
modifier state is not stuck on for systems that don’t send standard keyup events in response toalt-tab
window manager eventsLua:
memscan.field_offset()
: fixed an issue causing devel/export-dt-ini to crash sometimes, especially on Windowsautofarm: autofarm will now count plant growths as well as plants toward its thresholds
autogems: no longer assigns gem cutting jobs to workshops with gem cutting prohibited in the workshop profile
devel/export-dt-ini: fixed incorrect vtable address on Windows
- quickfort:
allow machines (e.g. screw pumps) to be built on ramps just like DF allows
fix error message when the requested label is not found in the blueprint file
Misc Improvements¶
assign-beliefs, assign-facets: now update needs of units that were changed
buildingplan: now displays which items are attached and which items are still missing for planned buildings
- devel/query:
updated script to v3.2 (i.e. major rewrite for maintainability/readability)
merged options
-query
and-querykeys
into-search
merged options
-depth
and-keydepth
into-maxdepth
replaced option
-safer
with-excludetypes
and-excludekinds
improved how tile data is dealt with identification, iteration, and searching
added option
-findvalue
added option
-showpaths
to print full data paths instead of nested fieldsadded option
-nopointers
to disable printing values with memory addressesadded option
-alignto
to set the value column’s alignmentadded options
-oneline
and alias-1
to avoid using two lines for fields with metadataadded support for matching multiple patterns
added support for selecting the highlighted job, plant, building, and map block data
added support for selecting a Lua script (e.g. Data tables)
added support for selecting a Json file (e.g. dwarf_profiles.json)
removed options
-listall
,-listfields
, and-listkeys
- these are now simply default behaviour-table
now accepts the same abbreviations (global names,unit
,screen
, etc.) as lua and gui/gm-editor
Data tables: integrated devel/query to show the table definitions when requested with
-list
geld: fixed
-help
optiongui/gm-editor: made search case-insensitive
- orders:
support importing and exporting reaction-specific item conditions, like “lye-containing” for soap production orders
new
sort
command. sorts orders according to their repeat frequency. this prevents daily orders from blocking other orders for simlar items from ever getting completed.
- quickfort:
Dreamfort blueprint set improvements: extensive revision based on playtesting and feedback. includes updated
onMapLoad_dreamfort.init
settings file, enhanced automation orders, and premade profession definitions. see full changelog at https://github.com/DFHack/dfhack/pull/1921 and https://github.com/DFHack/dfhack/pull/1925accept multiple commands, list numbers, and/or blueprint lables on a single commandline
tailor: allow user to specify which materials to be used, and in what order
tiletypes, tiletypes: add
--cursor
and--quiet
options to support non-interactive use casesunretire-anyone: replaced the ‘undead’ descriptor with ‘reanimated’ to make it more mod-friendly
warn-starving: added an option to only check sane dwarves
API¶
The
Items
modulemoveTo*
andremove
functions now handle projectiles
Internals¶
Install tests in the scripts repo into hack/scripts/test/scripts when the CMake variable BUILD_TESTS is defined
Lua¶
new global function:
safe_pairs(iterable[, iterator_fn])
will iterate over theiterable
(a table or iterable userdata) with theiterator_fn
(pairs
if not otherwise specified) if iteration is possible. If iteration is not possible or would throw an error, for example ifnil
is passed as theiterable
, the iteration is just silently skipped.
Structures¶
cursed_tomb
: new struct typejob_item
: identified several fieldsocean_wave_maker
: new struct typeworldgen_parms
: moved to new struct type
Documentation¶
New Fort Autostart Commands: documentation for all of Dreamfort’s supporting files (useful for all forts, not just Dreamfort!)
Quickfort blueprint library: updated dreamfort documentation and added screenshots
DFHack 0.47.05-r2¶
New Scripts¶
clear-webs: removes all webs on the map and/or frees any webbed creatures
devel/block-borders: overlay that displays map block borders
devel/luacov: generate code test coverage reports for script development. Define the
DFHACK_ENABLE_LUACOV=1
environment variable to start gathering coverage metrics.fix/drop-webs: causes floating webs to fall to the ground
gui/blueprint: interactive frontend for the blueprint plugin (with mouse support!)
gui/mass-remove: mass removal/suspension tool for buildings and constructions
reveal-hidden-sites: exposes all undiscovered sites
set-timeskip-duration: changes the duration of the “Updating World” process preceding the start of a new game, enabling you to jump in earlier or later than usual
Fixes¶
Fixed an issue preventing some external scripts from creating zones and other abstract buildings (see note about room definitions under “Internals”)
Fixed an issue where scrollable text in Lua-based screens could prevent other widgets from scrolling
- bodyswap:
stopped prior party members from tagging along after bodyswapping and reloading the map
made companions of bodyswapping targets get added to the adventurer party - they can now be viewed using the in-game party system
- buildingplan:
fixed an issue where planned constructions designated with DF’s sizing keys (
umkh
) would sometimes be larger than requestedfixed an issue preventing other plugins like automaterial from planning constructions if the “enable all” buildingplan setting was turned on
made navigation keys work properly in the materials selection screen when alternate keybindings are used
color-schemes: fixed an error in the
register
subcommand when the DF path contains certain punctuation characterscommand-prompt: fixed issues where overlays created by running certain commands (e.g. gui/liquids, gui/teleport) would not update the parent screen correctly
dwarfvet: fixed a crash that could occur with hospitals overlapping with other buildings in certain ways
embark-assistant: fixed faulty early exit in first search attempt when searching for waterfalls
gui/advfort: fixed an issue where starting a workshop job while not standing at the center of the workshop required advancing time manually
gui/unit-info-viewer: fixed size description displaying unrelated values instead of size
orders: fixed crash when importing orders with malformed IDs
- quickfort:
comments in blueprint cells no longer prevent the rest of the row from being read. A cell with a single ‘#’ marker in it, though, will still stop the parser from reading further in the row.
fixed an off-by-one line number accounting in blueprints with implicit
#dig
modelineschanged to properly detect and report an error on sub-alias params with no values instead of just failing to apply the alias later (if you really want an empty value, use
{Empty}
instead)improved handling of non-rectangular and non-solid extent-based structures (like fancy-shaped stockpiles and farm plots)
fixed conversion of numbers to DF keycodes in
#query
blueprintsfixed various errors with cropping across the map edge
properly reset config to default values in
quickfort reset
even if if thedfhack-config/quickfort/quickfort.txt
config file doesn’t mention all config vars. Also now works even if the config file doesn’t exist.
stonesense: fixed a crash that could occur when ctrl+scrolling or closing the Stonesense window
quickfortress.csv
blueprint: fixed refuse stockpile config and prevented stockpiles from covering stairways
Misc Improvements¶
Added adjectives to item selection dialogs, used in tools like gui/create-item - this makes it possible to differentiate between different types of high/low boots, shields, etc. (some of which are procedurally generated)
- blueprint:
made
depth
andname
parameters optional.depth
now defaults to1
(current level only) andname
defaults to “blueprint”depth
can now be negative, which will result in the blueprints being written from the highest z-level to the lowest. Before, blueprints were always written from the lowest z-level to the highest.added the
--cursor
option to set the starting coordinate for the generated blueprints. A game cursor is no longer necessary if this option is used.
devel/annc-monitor: added
report enable|disable
subcommand to filter combat reportsembark-assistant: slightly improved performance of surveying and improved code a little
gui/advfort: added workshop name to workshop UI
- quickfort:
the Dreamfort blueprint set can now be comfortably built in a 1x1 embark
added the
--cursor
option for running a blueprint at specific coordinates instead of starting at the game cursor positionadded more helpful error messages for invalid modeline markers
added support for extra space characters in blueprints
added a warning when an invalid alias is encountered instead of silently ignoring it
made more quiet when the
--quiet
parameter is specified
setfps: improved error handling
stonesense: sped up startup time
tweak hide-priority: changed so that priorities stay hidden (or visible) when exiting and re-entering the designations menu
unretire-anyone: the historical figure selection list now includes the
SYN_NAME
(necromancer, vampire, etc) of figures where applicable
API¶
Added
dfhack.maps.getPlantAtTile(x, y, z)
anddfhack.maps.getPlantAtTile(pos)
, and updateddfhack.gui.getSelectedPlant()
to use itAdded
dfhack.units.teleport(unit, pos)
Internals¶
Room definitions and extents are now created for abstract buildings so callers don’t have to initialize the room structure themselves
The DFHack test harness is now much easier to use for iterative development. Configuration can now be specified on the commandline, there are more test filter options, and the test harness can now easily rerun tests that have been run before.
The
test/main
command to invoke the test harness has been renamed to justtest
Unit tests can now use
delay_until(predicate_fn, timeout_frames)
to delay until a condition is metUnit tests must now match any output expected to be printed via
dfhack.printerr()
Unit tests now support fortress mode (allowing tests that require a fortress map to be loaded) - note that these tests are skipped by continuous integration for now, pending a suitable test fortress
Lua¶
new library:
argparse
is a collection of commandline argument processing functions- new string utility functions:
string:wrap(width)
wraps a string at space-separated word boundariesstring:trim()
removes whitespace characters from the beginning and end of the stringstring:split(delimiter, plain)
splits a string with the given delimiter and returns a table of substrings. ifplain
is specified and set totrue
,delimiter
is interpreted as a literal string instead of as a pattern (the default)
new utility function:
utils.normalizePath()
: normalizes directory slashes across platoforms to/
and coaleses adjacent directory separatorsreveal: now exposes
unhideFlood(pos)
functionality to Luaxlsxreader: added Lua class wrappers for the xlsxreader plugin API
argparse.processArgsGetopt()
(previouslyutils.processArgsGetopt()
):now returns negative numbers (e.g.
-10
) in the list of positional parameters instead of treating it as an option string equivalent to-1 -0
now properly handles
--
like GNUgetopt
as a marker to treat all further parameters as non-optionsnow detects when required arguments to long-form options are missing
gui.dwarfmode
: new function:enterSidebarMode(sidebar_mode, max_esc)
which uses keypresses to get into the specified sidebar mode from whatever the current screen isgui.Painter
: fixed error when callingviewport()
method
Structures¶
Identified remaining rhythm beat enum values
ui_advmode.interactions
: identified some fields related to party membersui_advmode_menu
: identified several enum itemsui_advmode
:identified several fields
renamed
wait
torest_mode
and changed to an enum with correct values
viewscreen_legendsst.cur_page
: added missingBooks
enum item, which fixes some other values
Documentation¶
Added more client library implementations to the remote interface docs
DFHack 0.47.05-r1¶
Fixes¶
confirm: stopped exposing alternate names when convicting units
prospector: improved pre embark rough estimates, particularly for small clusters
Misc Improvements¶
autohauler: allowed the
Alchemist
labor to be enabled in manipulator and other labor screens so it can be used for its intended purpose of flagging that no hauling labors should be assigned to a dwarf. Before, the only way to set the flag was to use an external program like Dwarf Therapist.embark-assistant: slightly improved performance of surveying
gui/no-dfhack-init: clarified how to dismiss dialog that displays when no
dfhack.init
file is found- quickfort:
Dreamfort blueprint set improvements: significant refinements across the entire blueprint set. Dreamfort is now much faster, much more efficient, and much easier to use. The checklist now includes a mini-walkthrough for quick reference. The spreadsheet now also includes embark profile suggestions
added aliases for configuring masterwork and artifact core quality for all stockpile categories that have them; made it possible to take from multiple stockpiles in the
quantumstop
aliasan active cursor is no longer required for running #notes blueprints (like the dreamfort walkthrough)
you can now be in any mode with an active cursor when running
#query
blueprints (before you could only be in a few “approved” modes, like look, query, or place)refined
#query
blueprint sanity checks: cursor should still be on target tile at end of configuration, and it’s ok for the screen ID to change if you are destroying (or canceling destruction of) a buildingnow reports how many work orders were added when generating manager orders from blueprints in the gui dialog
added
--dry-run
option to process blueprints but not change any game stateyou can now specify the number of desired barrels, bins, and wheelbarrows for individual stockpiles when placing them
quickfort orders
on a#place
blueprint will now enqueue manager orders for barrels, bins, or wheelbarrows that are explicitly set in the blueprint.you can now add alias definitions directly to your blueprint files instead of having to put them in a separate aliases.txt file. makes sharing blueprints with custom alias definitions much easier.
Structures¶
Identified scattered enum values (some rhythm beats, a couple of corruption unit thoughts, and a few language name categories)
viewscreen_loadgamest
: renamedcur_step
enumeration to match style ofviewscreen_adopt_regionst
andviewscreen_savegamest
viewscreen_savegamest
: identifiedcur_step
enumeration
Documentation¶
DFHack 0.47.05-beta1¶
Fixes¶
embark-assistant: fixed bug in soil depth determination for ocean tiles
orders: don’t crash when importing orders with malformed JSON
quickfort: raw numeric Dig priorities (e.g.
3
, which is a valid shorthand ford3
) now works when used in .xlsx blueprints
Misc Improvements¶
quickfort: new commandline options for setting the initial state of the gui dialog. for example:
quickfort gui -l dreamfort notes
will start the dialog filtered for the dreamfort walkthrough blueprints
Structures¶
Dropped support for 0.47.03-0.47.04
DFHack 0.47.04-r5¶
New Scripts¶
gui/quickfort: fast access to the quickfort interactive dialog
workorder-recheck: resets the selected work order to the
Checking
state
Fixes¶
- embark-assistant:
fixed order of factors when calculating min temperature
improved performance of surveying
- quickfort:
fixed eventual crashes when creating zones
fixed library aliases for tallow and iron, copper, and steel weapons
zones are now created in the active state by default
solve rare crash when changing UI modes
search: fixed crash when searching the
k
sidebar and navigating to another tile with certain keys, like<
or>
seedwatch: fixed an issue where the plugin would disable itself on map load
stockflow: fixed
j
character being intercepted when naming stockpilesstockpiles: no longer outputs hotkey help text beneath stockflow hotkey help text
Misc Improvements¶
Lua label widgets (used in all standard message boxes) are now scrollable with Up/Down/PgUp/PgDn keys
autofarm: now fallows farms if all plants have reached the desired count
- buildingplan:
added ability to set global settings from the console, e.g.
buildingplan set boulders false
added “enable all” option for buildingplan (so you don’t have to enable all building types individually). This setting is not persisted (just like quickfort_mode is not persisted), but it can be set from onMapLoad.init
modified
Planning Mode
status in the UI to show whether the plugin is in quickfort mode, “enable all” mode, or whether just the building type is enabled.
- quickfort:
Dreamfort blueprint set improvements: added a streamlined checklist for all required dreamfort commands and gave names to stockpiles, levers, bridges, and zones
added aliases for bronze weapons and armor
added alias for tradeable crafts
new blueprint mode:
#ignore
, useful for scratch space or personal notesimplement
{Empty}
keycode for use in quickfort aliases; useful for defining blank-by-default alias valuesmore flexible commandline parsing allowing for more natural parameter ordering (e.g. where you used to have to write
quickfort list dreamfort -l
you can now writequickfort list -l dreamfort
)print out blueprint names that a
#meta
blueprint is applying so it’s easier to understand what meta blueprints are doingwhitespace is now allowed between a marker name and the opening parenthesis in blueprint modelines. for example,
#dig start (5; 5)
is now valid (you used to be required to write#dig start(5; 5)
)
Lua¶
dfhack.run_command()
: changed to interface directly with the console when possible, which allows interactive commands and commands that detect the console encoding to work properlyprocessArgsGetopt()
added to utils.lua, providing a callback interface for parameter parsing and getopt-like flexibility for parameter ordering and combination (see docs inlibrary/lua/utils.lua
andlibrary/lua/3rdparty/alt_getopt.lua
for details).
Structures¶
job
: identifiedorder_id
field
Documentation¶
Added documentation for Lua’s
dfhack.run_command()
and variants
DFHack 0.47.04-r4¶
New Scripts¶
fix/corrupt-equipment: fixes some military equipment-related corruption issues that can cause DF crashes
Fixes¶
Fixed an issue on some Linux systems where DFHack installed through a package manager would attempt to write files to a non-writable folder (notably when running exportlegends or gui/autogems)
adaptation: fixed handling of units with no cave adaptation suffered yet
assign-goals: fixed error preventing new goals from being created
assign-preferences: fixed handling of preferences for flour
- buildingplan:
fixed an issue preventing artifacts from being matched when the maximum item quality is set to
artifacts
stopped erroneously matching items to buildings while the game is paused
fixed a crash when pressing 0 while having a noble room selected
deathcause: fixed an error when inspecting certain corpses
dwarfmonitor: fixed a crash when opening the
prefs
screen if units have vague preferencesdwarfvet: fixed a crash that could occur when discharging patients
- embark-assistant:
fixed an issue causing incursion resource matching (e.g. sand/clay) to skip some tiles if those resources were provided only through incursions
corrected river size determination by performing it at the MLT level rather than the world tile level
- quickfort:
fixed handling of modifier keys (e.g.
{Ctrl}
or{Alt}
) in query blueprintsfixed misconfiguration of nest boxes, hives, and slabs that were preventing them from being built from build blueprints
fixed valid placement detection for floor hatches, floor grates, and floor bars (they were erroneously being rejected from open spaces and staircase tops)
fixed query blueprint statistics being added to the wrong metric when both a query and a zone blueprint are run by the same meta blueprint
added missing blueprint labels in gui dialog list
fixed occupancy settings for extent-based structures so that stockpiles can be placed within other stockpiles (e.g. in a checkerboard or bullseye pattern)
search: fixed an issue where search options might not display if screens were destroyed and recreated programmatically (e.g. with quickfort)
unsuspend: now leaves buildingplan-managed buildings alone and doesn’t unsuspend underwater tasks
workflow: fixed an error when creating constraints on “mill plants” jobs and some other plant-related jobs
zone: fixed an issue causing the
enumnick
subcommand to run when attempting to runassign
,unassign
, orslaughter
Misc Improvements¶
- buildingplan:
added support for all buildings, furniture, and constructions (except for instruments)
added support for respecting building job_item filters when matching items, so you can set your own programmatic filters for buildings before submitting them to buildingplan
changed default filter setting for max quality from
artifact
tomasterwork
changed min quality adjustment hotkeys from ‘qw’ to ‘QW’ to avoid conflict with existing hotkeys for setting roller speed - also changed max quality adjustment hotkeys from ‘QW’ to ‘AS’ to make room for the min quality hotkey changes
added a new global settings page accessible via the
G
hotkey when on any building build screen;Quickfort Mode
toggle for legacy Python Quickfort has been moved to this pageadded new global settings for whether generic building materials should match blocks, boulders, logs, and/or bars - defaults are everything but bars
devel/export-dt-ini: updated for Dwarf Therapist 41.2.0
embark-assistant: split the lair types displayed on the local map into mound, burrow, and lair
gui/advfort: added support for linking to hatches and pressure plates with mechanisms
modtools/add-syndrome: added support for specifying syndrome IDs instead of names
probe: added more output for designations and tile occupancy
- quickfort:
The Dreamfort sample blueprints now have complete walkthroughs for each fort level and importable orders that automate basic fort stock management
added more blueprints to the blueprints library: several bedroom layouts, the Saracen Crypts, and the complete fortress example from Python Quickfort: TheQuickFortress
query blueprint aliases can now accept parameters for dynamic expansion - see dfhack-config/quickfort/aliases.txt for details
alias names can now include dashes and underscores (in addition to letters and numbers)
improved speed of first call to
quickfort list
significantly, especially for large blueprint librariesadded
query_unsafe
setting to disable query blueprint error checking - useful for query blueprints that send unusual key sequencesadded support for bookcases, display cases, and offering places (altars)
added configuration support for zone pit/pond, gather, and hospital sub-menus in zone blueprints
removed
buildings_use_blocks
setting and replaced it with more flexible functionality in buildingplanadded support for creating uninitialized stockpiles with c
API¶
buildingplan: added Lua interface API
Buildings::setSize()
: changed to reuse existing extents when possibledfhack.job.isSuitableMaterial()
: added an item type parameter so thenon_economic
flag can be properly handled (it was being matched for all item types instead of just boulders)
Lua¶
utils.addressof()
: fixed for raw userdata
Structures¶
building_extents_type
: new enum, used forbuilding_extents.extents
world_mountain_peak
: new struct (was previously inline) - used inworld_data.mountain_peaks
Documentation¶
Quickfort blueprint creation guide: alias syntax and alias standard library documentation for quickfort blueprints
Quickfort blueprint library: overview of the quickfort blueprint library
DFHack 0.47.04-r3¶
New Plugins¶
xlsxreader: provides an API for Lua scripts to read Excel spreadsheets
New Scripts¶
quickfort: DFHack-native implementation of quickfort with many new features and integrations - see the Quickfort blueprint creation guide for details
timestream: controls the speed of the calendar and creatures
uniform-unstick: prompts units to reevaluate their uniform, by removing/dropping potentially conflicting worn items
Fixes¶
ban-cooking: fixed an error in several subcommands
buildingplan: fixed handling of buildings that require buckets
getplants: fixed a crash that could occur on some maps
search: fixed an issue causing item counts on the trade screen to display inconsistently when searching
- stockpiles:
fixed a crash when loading food stockpiles
fixed an error when saving furniture stockpiles
Misc Improvements¶
- createitem:
added support for plant growths (fruit, berries, leaves, etc.)
added an
inspect
subcommand to print the item and material tokens of existing items, which can be used to create additional matching items
embark-assistant: added support for searching for taller waterfalls (up to 50 z-levels tall)
search: added support for searching for names containing non-ASCII characters using their ASCII equivalents
stocks: added support for searching for items containing non-ASCII characters using their ASCII equivalents
unretire-anyone: made undead creature names appear in the historical figure list
- zone:
added an
enumnick
subcommand to assign enumerated nicknames (e.g “Hen 1”, “Hen 2”…)added slaughter indication to
uinfo
output
API¶
Added
DFHack::to_search_normalized()
(Lua:dfhack.toSearchNormalized()
) to convert non-ASCII alphabetic characters to their ASCII equivalents
Structures¶
history_event_masterpiece_createdst
: fixed alignment, including subclasses, and identifiedskill_at_time
item_body_component
: fixed some alignment issues and identified some fields (also applies to subclasses likeitem_corpsest
)stockpile_settings
: removedfurniture.sand_bags
(no longer present)
Documentation¶
Fixed syntax highlighting of most code blocks to use the appropriate language (or no language) instead of Python
DFHack 0.47.04-r2¶
New Scripts¶
animal-control: helps manage the butchery and gelding of animals
devel/kill-hf: kills a historical figure
geld: gelds or ungelds animals
list-agreements: lists all guildhall and temple agreements
list-waves: displays migration wave information for citizens/units
New Tweaks¶
Fixes¶
Fixed a segfault when attempting to start a headless session with a graphical PRINT_MODE setting
Fixed an issue with the macOS launcher failing to un-quarantine some files
Fixed
Units::isEggLayer
,Units::isGrazer
,Units::isMilkable
,Units::isTrainableHunting
,Units::isTrainableWar
, andUnits::isTamable
ignoring the unit’s casteLinux: fixed
dfhack.getDFPath()
(Lua) andProcess::getPath()
(C++) to always return the DF root path, even if the working directory has changed- digfort:
fixed y-line tracking when .csv files contain lines with only commas
fixed an issue causing blueprints touching the southern or eastern edges of the map to be rejected (northern and western edges were already allowed). This allows blueprints that span the entire embark area.
embark-assistant: fixed a couple of incursion handling bugs.
embark-skills: fixed an issue with structures causing the
points
option to do nothing- exportlegends:
fixed an issue where two different
<reason>
tags could be included in a<historical_event>
stopped including some tags with
-1
values which don’t provide useful information
getplants: fixed issues causing plants to be collected even if they have no growths (or unripe growths)
gui/advfort: fixed “operate pump” job
gui/load-screen: fixed an issue causing longer timezones to be cut off
- labormanager:
fixed handling of new jobs in 0.47
fixed an issue preventing custom furnaces from being built
- modtools/moddable-gods:
fixed an error when creating the historical figure
removed unused
-domain
and-description
argumentsmade
-depictedAs
argument work
- names:
fixed an error preventing the script from working
fixed an issue causing renamed units to display their old name in legends mode and some other places
pref-adjust: fixed some compatibility issues and a potential crash
- RemoteFortressReader:
fixed a couple crashes that could result from decoding invalid enum items (
site_realization_building_type
andimprovement_type
)fixed an issue that could cause block coordinates to be incorrect
rendermax: fixed a hang that could occur when enabling some renderers, notably on Linux
- stonesense:
fixed a crash when launching Stonesense
fixed some issues that could cause the splash screen to hang
Misc Improvements¶
Linux/macOS: Added console keybindings for deleting words (Alt+Backspace and Alt+d in most terminals)
- add-recipe:
added tool recipes (minecarts, wheelbarrows, stepladders, etc.)
added a command explanation or error message when entering an invalid command
armoks-blessing: added adjustments to values and needs
- blueprint:
now writes blueprints to the
blueprints/
subfolder instead of the df root foldernow automatically creates folder trees when organizing blueprints into subfolders (e.g.
blueprint 30 30 1 rooms/dining dig
will create the fileblueprints/rooms/dining-dig.csv
); previously it would fail if theblueprints/rooms/
directory didn’t already exist
confirm: added a confirmation dialog for convicting dwarves of crimes
devel/query: added many new query options
- digfort:
handled double quotes (”) at the start of a string, allowing .csv files exported from spreadsheets to work without manual modification
documented that removing ramps, cutting trees, and gathering plants are indeed supported
added a
force
option to truncate blueprints if the full blueprint would extend off the edge of the map
- dwarf-op:
added ability to select dwarves based on migration wave
added ability to protect dwarves based on symbols in their custom professions
- exportlegends:
changed some flags to be represented by self-closing tags instead of true/false strings (e.g.
<is_volcano/>
) - note that this may require changes to other XML-parsing utilitieschanged some enum values from numbers to their string representations
added ability to save all files to a subfolder, named after the region folder and date by default
gui/advfort: added support for specifying the entity used to determine available resources
gui/gm-editor: added support for automatically following ref-targets when pressing the
i
keymanipulator: added a new column option to display units’ goals
modtools/moddable-gods: added support for
neuter
gender- pref-adjust:
added support for adjusting just the selected dwarf
added a new
goth
profile
remove-stress: added a
-value
argument to enable setting stress level directlyworkorder: changed default frequency from “Daily” to “OneTime”
API¶
Added
Filesystem::mkdir_recursive
Extended
Filesystem::listdir_recursive
to optionally make returned filenames relative to the start directoryUnits
: added goal-related functions:getGoalType()
,getGoalName()
,isGoalAchieved()
Internals¶
Added support for splitting scripts into multiple files in the
scripts/internal
folder without polluting the output of ls
Lua¶
Added a
ref_target
field to primitive field references, corresponding to theref-target
XML attributeMade
dfhack.units.getRaceNameById()
,dfhack.units.getRaceBabyNameById()
, anddfhack.units.getRaceChildNameById()
available to Lua
Ruby¶
Updated
item_find
andbuilding_find
to use centralized logic that works on more screens
Structures¶
Added a new
<df-other-vectors-type>
, which allowsworld.*.other
collections of vectors to use the correct subtypes for itemscreature_raw
: renamedgender
tosex
to match the field inunit
, which is more frequently usedcrime
: identifiedwitnesses
, which contains the data held by the old field namedreports
intrigue
: new type (split out fromhistorical_figure_relationships
)items_other_id
: removedBAD
, and by extension,world.items.other.BAD
, which was overlapping withworld.items.bad
job_type
: added job types new to 0.47plant_raw
: material_defs now contains arrays rather than loose fieldspronoun_type
: new enum (previously documented in field comments)setup_character_info
: fixed a couple alignment issues (needed by embark-skills)ui_advmode_menu
: identified some new enum items
Documentation¶
Added some new dev-facing pages, including dedicated pages about the remote API, memory research, and documentation
Expanded the installation guide
Made a couple theme adjustments
DFHack 0.47.04-r1¶
Fixes¶
Fixed a crash in
find()
for some types when no world is loadedFixed translation of certain types of in-game names
autogems: fixed an issue with binned gems being ignored in linked stockpiles
catsplosion: fixed error when handling races with only one caste (e.g. harpies)
exportlegends: fixed error when exporting maps
spawnunit: fixed an error when forwarding some arguments but not a location to modtools/create-unit
stocks: fixed display of book titles
tweak embark-profile-name: fixed handling of the native shift+space key
Misc Improvements¶
- exportlegends:
made interaction export more robust and human-readable
removed empty
<item_subtype>
and<claims>
tags
getplants: added switches for designations for farming seeds and for max number designated per plant
manipulator: added intrigue to displayed skills
- modtools/create-unit:
added
-equip
option to equip created unitsadded
-skills
option to give skills to unitsadded
-profession
and-customProfession
options to adjust unit professions
search: added support for the fortress mode justice screen
dfhack.init-example
: enabled autodump
API¶
Added
Items::getBookTitle
to get titles of books. Catches titles buried in improvements, unlike getDescription.
Lua¶
pairs()
now returns available class methods for DF types
Structures¶
Added globals:
cur_rain
,cur_rain_counter
,cur_snow
,cur_snow_counter
,weathertimer
,jobvalue
,jobvalue_setter
,interactitem
,interactinvslot
,handleannounce
,preserveannounce
,updatelightstate
agreement_details_data_plot_sabotage
: new struct type, along with relatedagreement_details_type.PlotSabotage
architectural_element
: new enumbattlefield
: new struct typebreed
: new struct typecreature_handler
: identified vmethodscrime
: removed fields ofreports
that are no longer presentdance_form
: identified most fieldshistory_event_context
: identified fieldsidentity_type
: new enumidentity
: renamedciv
toentity_id
, identifiedtype
image_set
: new struct typeinterrogation_report
: new struct typeitemdef_flags
: new enum, withGENERATED
flagjustification
: new enumlever_target_type
: identifiedLeverMechanism
andTargetMechanism
valuesmusical_form
: identified fields, including some renames. Also identified fields inscale
andrhythm
region_weather
: new struct typesquad_order_cause_trouble_for_entityst
: identified fieldsunit_thought_type
: added several new thought typesviewscreen_workquota_detailsst
: identified fields
DFHack 0.47.04-beta1¶
New Scripts¶
color-schemes: manages color schemes
devel/print-event: prints the description of an event by ID or index
gui/color-schemes: an in-game interface for color-schemes
light-aquifers-only: changes heavy aquifers to light aquifers
on-new-fortress: runs DFHack commands only in a new fortress
once-per-save: runs DFHack commands unless already run in the current save
resurrect-adv: brings your adventurer back to life
reveal-hidden-units: exposes all sneaking units
workorder: allows queuing manager jobs; smart about shear and milk creature jobs
Fixes¶
Fixed a crash when starting DFHack in headless mode with no terminal
devel/visualize-structure: fixed padding detection for globals
- exportlegends:
added UTF-8 encoding and XML escaping for more fields
added checking for unhandled structures to avoid generating invalid XML
fixed missing fields in
history_event_assume_identityst
export
- full-heal:
when resurrected by specifying a corpse, units now appear at the location of the corpse rather than their location of death
resurrected units now have their tile occupancy set (and are placed in the prone position to facilitate this)
Misc Improvements¶
Added “bit” suffix to downloads (e.g. 64-bit)
- Tests:
moved from DF folder to hack/scripts folder, and disabled installation by default
made test runner script more flexible
devel/export-dt-ini: updated some field names for DT for 0.47
devel/visualize-structure: added human-readable lengths to containers
dfhack-run: added color output support
- embark-assistant:
updated embark aquifer info to show all aquifer kinds present
added neighbor display, including kobolds (SKULKING) and necro tower count
updated aquifer search criteria to handle the new variation
added search criteria for embark initial tree cover
added search criteria for necro tower count, neighbor civ count, and specific neighbors. Should handle additional entities, but not tested
- exportlegends:
added evilness and force IDs to regions
added profession and weapon info to relevant entities
added support for many new history events in 0.47
added historical event relationships and supplementary data
- full-heal:
made resurrection produce a historical event viewable in Legends mode
made error messages more explanatory
install-info: added DFHack build ID to report
modtools/create-item: added
-matchingGloves
and-matchingShoes
arguments- modtools/create-unit:
added
-duration
argument to make the unit vanish after some timeadded
-locationRange
argument to allow spawning in a random position within a defined areaadded
-locationType
argument to specify the type of location to spawn in
unretire-anyone: added
-dead
argument to revive and enable selection of a dead historical figure to use as an adventurer in adv mode
Internals¶
Added separate changelogs in the scripts and df-structures repos
Improved support for tagged unions, allowing tools to access union fields more safely
Moved
reversing
scripts to df_misc repo
Structures¶
Added an XML schema for validating df-structures syntax
Added
divination_set_next_id
andimage_set_next_id
globalsactivity_entry_type
: new enum typeadventure_optionst
: identified many vmethodsagreement_details
: identified most fields of most sub-structsartifact_claim
: identified several fieldsartifact_record
: identified several fieldscaste_raw_flags
: renamed and identified many flags to match information from Toadycreature_raw_flags
: renamed and identified many flags to match information from Toadycrime_type
: new enum typedfhack_room_quality_level
: added enum attributes for names of rooms of each qualityentity_site_link_type
: new enum typeexport_map_type
: new enum typehistorical_entity.flags
: identified several flagshistorical_entity.relations
: renamed fromunknown1b
and identified several fieldshistorical_figure.vague_relationships
: identifiedhistorical_figure_info.known_info
: renamed fromsecret
, identified some fieldshistorical_figure
: renamedunit_id2
tonemesis_id
history_event_circumstance_info
: new struct type (and changed severalhistory_event
subclasses to use this)history_event_reason_info
: new struct type (and changed severalhistory_event
subclasses to use this)honors_type
: identified several fieldsinteraction_effect_create_itemst
: new struct typeinteraction_effect_summon_unitst
: new struct typeitem
: identified several vmethodslayer_type
: new enum typeplant.damage_flags
: addedis_dead
plot_role_type
: new enum typeplot_strategy_type
: new enum typerelationship_event_supplement
: new struct typerelationship_event
: new struct typespecific_ref
: moved union data todata
fieldui_look_list
: moved union fields todata
and renamed to matchtype
enumui_sidebar_menus.location
: added new profession-related fields, renamed and fixed types of deity-related fieldsui_sidebar_mode
: addedZonesLocationInfo
unit_action
: rearranged as tagged union with new sub-types; existing code should be compatiblevague_relationship_type
: new enum typevermin_flags
: identifiedis_roaming_colony
viewscreen_justicest
: identified interrogation-related fieldsworld_data.field_battles
: identified and named several fields
DFHack 0.47.03-beta1¶
New Scripts¶
devel/sc: checks size of structures
devel/visualize-structure: displays the raw memory of a structure
Fixes¶
adv-max-skills: fixed for 0.47
- deep-embark:
prevented running in non-fortress modes
ensured that only the newest wagon is deconstructed
- full-heal:
fixed issues with removing corpses
fixed resurrection for non-historical figures
modtools/create-unit: added handling for arena tame setting
teleport: fixed setting new tile occupancy
Misc Improvements¶
- deep-embark:
improved support for using directly from the DFHack console
added a
-clear
option to cancel
- exportlegends:
added identity information
added creature raw names and flags
gui/prerelease-warning: updated links and information about nightly builds
modtools/syndrome-trigger: enabled simultaneous use of
-synclass
and-syndrome
repeat: added
-list
option
Structures¶
Dropped support for 0.44.12-0.47.02
abstract_building_type
: added types (and subclasses) new to 0.47agreement_details_type
: added enumagreement_details
: added struct type (and many associated data types)agreement_party
: added struct typeannouncement_type
: added types new to 0.47artifact_claim_type
: added enumartifact_claim
: added struct typebreath_attack_type
: addedSHARP_ROCK
building_offering_placest
: new classbuilding_type
: addedOfferingPlace
caste_raw_flags
: renamed many items to match DF namescreature_interaction_effect
: added subclasses new to 0.47creature_raw_flags
:identified several more items
renamed many items to match DF names
d_init
: added settings new to 0.47entity_name_type
: addedMERCHANT_COMPANY
,CRAFT_GUILD
entity_position_responsibility
: added values new to 0.47fortress_type
: added enumgeneral_ref_type
: addedUNIT_INTERROGATEE
ghost_type
: addedNone
valuegoal_type
: added goals types new to 0.47histfig_site_link
: added subclasses new to 0.47history_event_collection
: added subtypes new to 0.47history_event_context
: added lots of new fieldshistory_event_reason
:added captions for all items
added items new to 0.47
history_event_type
: added types for events new to 0.47, as well as correspondinghistory_event
subclasses (too many to list here)honors_type
: added struct typeinteraction_effect
: added subtypes new to 0.47interaction_source_experimentst
: added class typeinteraction_source_usage_hint
: added values new to 0.47interface_key
: added items for keys new to 0.47job_skill
: addedINTRIGUE
,RIDING
lair_type
: added enummonument_type
: added enumnext_global_id
: added enumpoetic_form_action
: addedBeseech
setup_character_info
: expanded significantly in 0.47text_system
: added layout for structtile_occupancy
: addedvaried_heavy_aquifer
tool_uses
: added items:PLACE_OFFERING
,DIVINATION
,GAMES_OF_CHANCE
viewscreen_counterintelligencest
: new class (only layout identified so far)
DFHack 0.44.12-r3¶
New Plugins¶
autoclothing: automatically manage clothing work orders
autofarm: replaces the previous Ruby script of the same name, with some fixes
map-render: allows programmatically rendering sections of the map that are off-screen
tailor: automatically manages keeping your dorfs clothed
New Scripts¶
assign-attributes: changes the attributes of a unit
assign-beliefs: changes the beliefs of a unit
assign-facets: changes the facets (traits) of a unit
assign-goals: changes the goals of a unit
assign-preferences: changes the preferences of a unit
assign-profile: sets a dwarf’s characteristics according to a predefined profile
assign-skills: changes the skills of a unit
combat-harden: sets a unit’s combat-hardened value to a given percent
deep-embark: allows embarking underground
devel/find-twbt: finds a TWBT-related offset needed by the new map-render plugin
dwarf-op: optimizes dwarves for fort-mode work; makes managing labors easier
forget-dead-body: removes emotions associated with seeing a dead body
gui/create-tree: creates a tree at the selected tile
linger: takes over your killer in adventure mode
modtools/create-tree: creates a tree
modtools/pref-edit: add, remove, or edit the preferences of a unit
modtools/set-belief: changes the beliefs (values) of units
modtools/set-need: sets and edits unit needs
modtools/set-personality: changes the personality of units
modtools/spawn-liquid: spawns water or lava at the specified coordinates
set-orientation: edits a unit’s orientation
unretire-anyone: turns any historical figure into a playable adventurer
Fixes¶
Fixed a crash in the macOS/Linux console when the prompt was wider than the screen width
Fixed inconsistent results from
Units::isGay
for asexual unitsFixed some cases where Lua filtered lists would not properly intercept keys, potentially triggering other actions on the same screen
- autofarm:
fixed biome detection to properly determine crop assignments on surface farms
reimplemented as a C++ plugin to make proper biome detection possible
bodyswap: fixed companion list not being updated often enough
cxxrandom: removed some extraneous debug information
digfort: now accounts for z-level changes when calculating maximum y dimension
- embark-assistant:
fixed bug causing crash on worlds without generated metals (as well as pruning vectors as originally intended).
fixed bug causing mineral matching to fail to cut off at the magma sea, reporting presence of things that aren’t (like DF does currently).
fixed bug causing half of the river tiles not to be recognized.
added logic to detect some river tiles DF doesn’t generate data for (but are definitely present).
eventful: fixed invalid building ID in some building events
exportlegends: now escapes special characters in names properly
getplants: fixed designation of plants out of season (note that picked plants are still designated incorrectly)
gui/autogems: fixed error when no world is loaded
- gui/companion-order:
fixed error when resetting group leaders
leave
now properly removes companion links
gui/create-item: fixed module support - can now be used from other scripts
- gui/stamper:
stopped “invert” from resetting the designation type
switched to using DF’s designation keybindings instead of custom bindings
fixed some typos and text overlapping
- modtools/create-unit:
fixed an error associating historical entities with units
stopped recalculating health to avoid newly-created citizens triggering a “recover wounded” job
fixed units created in arena mode having blank names
fixed units created in arena mode having the wrong race and/or interaction effects applied after creating units manually in-game
stopped units from spawning with extra items or skills previously selected in the arena
stopped setting some unneeded flags that could result in glowing creature tiles
set units created in adventure mode to have no family, instead of being related to the first creature in the world
- modtools/reaction-product-trigger:
fixed an error dealing with reactions in adventure mode
blocked
\\BUILDING_ID
for adventure mode reactionsfixed
-clear
to work without passing other unneeded arguments
- modtools/reaction-trigger:
fixed a bug when determining whether a command was run
fixed handling of
-resetPolicy
mousequery: fixed calculation of map dimensions, which was sometimes preventing scrolling the map with the mouse when TWBT was enabled
RemoteFortressReader: fixed a crash when a unit’s path has a length of 0
stonesense: fixed crash due to wagons and other soul-less creatures
tame: now sets the civ ID of tamed animals (fixes compatibility with autobutcher)
title-folder: silenced error when
PRINT_MODE
is set toTEXT
Misc Improvements¶
Added a note to dfhack-run when called with no arguments (which is usually unintentional)
On macOS, the launcher now attempts to un-quarantine the rest of DFHack
bodyswap: added arena mode support
combine-drinks: added more default output, similar to combine-plants
createitem: added a list of valid castes to the “invalid caste” error message, for convenience
devel/export-dt-ini: added more size information needed by newer Dwarf Therapist versions
dwarfmonitor: enabled widgets to access other scripts and plugins by switching to the core Lua context
- embark-assistant:
added an in-game option to activate on the embark screen
changed waterfall detection to look for level drop rather than just presence
changed matching to take incursions, i.e. parts of other biomes, into consideration when evaluating tiles. This allows for e.g. finding multiple biomes on single tile embarks.
changed overlay display to show when incursion surveying is incomplete
changed overlay display to show evil weather
added optional parameter “fileresult” for crude external harness automated match support
improved focus movement logic to go to only required world tiles, increasing speed of subsequent searches considerably
exportlegends: added rivers to custom XML export
exterminate: added support for a special
enemy
caste- gui/gm-unit:
added support for editing:
added attribute editor
added orientation editor
added editor for bodies and body parts
added color editor
added belief editor
added personality editor
modtools/create-item: documented already-existing
-quality
option- modtools/create-unit:
added the ability to specify
\\LOCAL
for the fort group entitynow enables the default labours for adult units with CAN_LEARN.
now sets historical figure orientation.
improved speed of creating multiple units at once
made the script usable as a module (from other scripts)
- modtools/reaction-trigger:
added
-ignoreWorker
: ignores the worker when selecting the targetschanged the default behavior to skip inactive/dead units; added
-dontSkipInactive
to include creatures that are inactiveadded
-range
: controls how far elligible targets can be from the workshopsyndromes now are applied before commands are run, not after
if both a command and a syndrome are given, the command only runs if the syndrome could be applied
mousequery: made it more clear when features are enabled
- RemoteFortressReader:
added a basic framework for controlling and reading the menus in DF (currently only supports the building menu)
added support for reading item raws
added a check for whether or not the game is currently saving or loading, for utilities to check if it’s safe to read from DF
added unit facing direction estimate and position within tiles
added unit age
added unit wounds
added tree information
added check for units’ current jobs when calculating the direction they are facing
API¶
Added new
plugin_load_data
andplugin_save_data
events for plugins to load/save persistent dataAdded
Maps::GetBiomeType
andMaps::GetBiomeTypeByRef
to infer biome types properlyAdded
Units::getPhysicalDescription
(note that this depends on theunit_get_physical_description
offset, which is not yet available for all DF builds)
Internals¶
Added new Persistence module
Cut down on internal DFHack dependencies to improve build times
Improved concurrency in event and server handlers
Persistent data is now stored in JSON files instead of historical figures - existing data will be migrated when saving
stonesense: fixed some OpenGL build issues on Linux
Lua¶
Exposed
gui.dwarfmode.get_movement_delta
andgui.dwarfmode.get_hotkey_target
dfhack.run_command
now returns the command’s return code
Ruby¶
Made
unit_ishostile
consistently return a boolean
Structures¶
Added
unit_get_physical_description
function offset on some platforms- Added/identified types:
assume_identity_mode
musical_form_purpose
musical_form_style
musical_form_pitch_style
musical_form_feature
musical_form_vocals
musical_form_melodies
musical_form_interval
unit_emotion_memory
need_type
: fixedPrayOrMeditate
typopersonality_facet_type
,value_type
: addedNONE
valuestwbt_render_map
: added for 64-bit 0.44.12 (for map-render)
DFHack 0.44.12-r2¶
New Plugins¶
New Scripts¶
devel/query: searches for field names in DF objects
extinguish: puts out fires
tame: sets tamed/trained status of animals
Fixes¶
building-hacks: fixed error when dealing with custom animation tables
devel/test-perlin: fixed Lua error (
math.pow()
)embark-assistant: fixed crash when entering finder with a 16x16 embark selected, and added 16 to dimension choices
embark-skills: fixed missing
skill_points_remaining
field- full-heal:
stopped wagon resurrection
fixed a minor issue with post-resurrection hostility
- gui/companion-order:
fixed issues with printing coordinates
fixed issues with move command
fixed cheat commands (and removed “Power up”, which was broken)
gui/gm-editor: fixed reinterpret cast (
r
)gui/pathable: fixed error when sidebar is hidden with
Tab
- labormanager:
stopped assigning labors to ineligible dwarves, pets, etc.
stopped assigning invalid labors
added support for crafting jobs that use pearl
fixed issues causing cleaning jobs to not be assigned
added support for disabling management of specific labors
prospector: (also affected embark-tools) - fixed a crash when prospecting an unusable site (ocean, mountains, etc.) with a large default embark size in d_init.txt (e.g. 16x16)
siege-engine: fixed a few Lua errors (
math.pow()
,unit.relationship_ids
)tweak: fixed
hotkey-clear
Misc Improvements¶
armoks-blessing: improved documentation to list all available arguments
- devel/export-dt-ini:
added viewscreen offsets for DT 40.1.2
added item base flags offset
added needs offsets
- embark-assistant:
added match indicator display on the right (“World”) map
changed ‘c’ancel to abort find if it’s under way and clear results if not, allowing use of partial surveys.
added Coal as a search criterion, as well as a coal indication as current embark selection info.
- full-heal:
added
-all
,-all_civ
and-all_citizens
argumentsadded module support
now removes historical figure death dates and ghost data
growcrops: added
all
argument to grow all cropsgui/load-screen: improved documentation
labormanager: now takes nature value into account when assigning jobs
open-legends: added warning about risk of save corruption and improved related documentation
points: added support when in
viewscreen_setupdwarfgamest
and improved error messagessiren: removed break handling (relevant
misc_trait_type
was no longer used - see “Structures” section)
API¶
- New debug features related to debug plugin:
Classes (C++ only):
Signal<Signature, type_tag>
,DebugCategory
,DebugManager
Macros:
TRACE
,DEBUG
,INFO
,WARN
,ERR
,DBG_DECLARE
,DBG_EXTERN
Internals¶
Added a usable unit test framework for basic tests, and a few basic tests
Added
CMakeSettings.json
with intellisense supportChanged
plugins/CMakeLists.custom.txt
to be ignored by git and created (if needed) at build time insteadCore: various thread safety and memory management improvements
Fixed CMake build dependencies for generated header files
Fixed custom
CMAKE_CXX_FLAGS
not being passed to pluginsLinux/macOS: changed recommended build backend from Make to Ninja (Make builds will be significantly slower now)
Lua¶
utils
: newOrderedTable
class
Structures¶
Win32: added missing vtables for
viewscreen_storesst
andsquad_order_rescue_hfst
activity_event_performancest
: renamed poem as written_content_idbody_part_status
: identifiedgelded
dance_form
: named musical_form_id and musical_written_content_idincident_sub6_performance.participants
: named performance_event and role_indexincident_sub6_performance
:made performance_event an enum
named poetic_form_id, musical_form_id, and dance_form_id
misc_trait_type
: removedLikesOutdoors
,Hardened
,TimeSinceBreak
,OnBreak
(all unused by DF)musical_form_instruments
: named minimum_required and maximum_permittedmusical_form
: named voices fieldplant_tree_info
: identifiedextent_east
, etc.plant_tree_tile
: gave connection bits more meaningful names (e.g.connection_east
instead ofthick_branches_1
)poetic_form
: identified many fields and related enum/bitfield typessetup_character_info
: identifiedskill_points_remaining
(for embark-skills)ui.main
: identifiedfortress_site
ui.squads
: identifiedkill_rect_targets_scroll
ui
: fixed alignment ofmain
andsquads
(fixes tweak hotkey-clear and DF-AI)unit_action.attack
:identified
attack_skill
added
lightly_tap
andspar_report
flags
unit_flags3
: identifiedmarked_for_gelding
unit_personality
: identifiedstress_drain
,stress_boost
,likes_outdoors
,combat_hardened
unit_storage_status
: newly identified type, stores noble holdings information (used inviewscreen_layer_noblelistst
)unit_thought_type
: added new expulsion thoughts from 0.44.12viewscreen_layer_arena_creaturest
: identified item- and name-related fieldsviewscreen_layer_militaryst
: identifiedequip.assigned.assigned_items
viewscreen_layer_noblelistst
: identifiedstorage_status
(seeunit_storage_status
type)viewscreen_new_regionst
:identified
rejection_msg
,raw_folder
,load_world_params
changed many
int8_t
fields tobool
viewscreen_setupadventurest
: identified some nemesis and personality fields, andpage.ChooseHistfig
world_data
: addedmountain_peak_flags
type, includingis_volcano
world_history
: identified names and/or types of some fieldsworld_site
: identified names and/or types of some fieldswritten_content
: named poetic_form
DFHack 0.44.12-r1¶
Fixes¶
Console: fixed crash when entering long commands on Linux/macOS
Fixed special characters in command-prompt and other non-console in-game outputs on Linux/macOS (in tools using
df2console
)Removed jsoncpp’s
include
andlib
folders from DFHack builds/packagesdie: fixed Windows crash in exit handling
dwarfmonitor, manipulator: fixed stress cutoffs
modtools/force: fixed a bug where the help text would always be displayed and nothing useful would happen
ruby: fixed calling conventions for vmethods that return strings (currently
enabler.GetKeyDisplay()
)startdwarf: fixed on 64-bit Linux
Misc Improvements¶
Reduced time for designation jobs from tools like dig to be assigned workers
- embark-assistant:
Switched to standard scrolling keys, improved spacing slightly
Introduced scrolling of Finder search criteria, removing requirement for 46 lines to work properly (Help/Info still formatted for 46 lines).
Added Freezing search criterion, allowing searches for NA/Frozen/At_Least_Partial/Partial/At_Most_Partial/Never Freezing embarks.
- rejuvenate:
Added
-all
argument to apply to all citizensAdded
-force
to include units under 20 years oldClarified documentation
API¶
- Added to
Units
module: getStressCategory(unit)
getStressCategoryRaw(level)
stress_cutoffs
(Lua:getStressCutoffs()
)
- Added to
Internals¶
Added documentation for all RPC functions and a build-time check
Added support for build IDs to development builds
Changed default build architecture to 64-bit
Use
dlsym(3)
to find vtables from libgraphics.so
Structures¶
Added
start_dwarf_count
on 64-bit Linux again and fixed scanning scriptarmy_controller
: added new vector from 0.44.11belief_system
: new type, few fields identifiedmental_picture
: new type, some fields identifiedmission_report
:new type (renamed, was
mission
before)identified some fields
mission
: new type (used inviewscreen_civlistst
)spoils_report
: new type, most fields identifiedviewscreen_civlistst
:split
unk_20
into 3 pointersidentified new pages
identified new messenger-related fields
viewscreen_image_creatorst
:fixed layout
identified many fields
viewscreen_reportlistst
: added new mission and spoils report-related fields (fixed layout)world.languages
: identified (minimal information; whole languages stored elsewhere)world.status
:mission_reports
: renamed, wasmissions
spoils_reports
: identified
world.unk_131ec0
,world.unk_131ef0
: researched layoutworld.worldgen_status
: identified many fieldsworld
:belief_systems
: identified
DFHack 0.44.12-alpha1¶
Fixes¶
macOS: fixed
renderer
vtable address on x64 (fixes rendermax)stonesense: fixed
PLANT:DESERT_LIME:LEAF
typo
API¶
Added C++-style linked list interface for DF linked lists
Structures¶
Dropped 0.44.11 support
ui.squads
: Added fields new in 0.44.12
DFHack 0.44.11-beta2.1¶
Internals¶
stonesense: fixed build
DFHack 0.44.11-beta2¶
Fixes¶
Windows: Fixed console failing to initialize
command-prompt: added support for commands that require a specific screen to be visible, e.g. cleaners
gui/workflow: fixed advanced constraint menu for crafts
API¶
Added
Screen::Hide
to temporarily hide screens, like command-prompt
DFHack 0.44.11-beta1¶
Fixes¶
Fixed displayed names (from
Units::getVisibleName
) for units with identitiesFixed potential memory leak in
Screen::show()
fix/dead-units: fixed script trying to use missing isDiplomat function
Misc Improvements¶
Linux: added automatic support for GCC sanitizers in
dfhack
scriptMade the
DFHACK_PORT
environment variable take priority overremote-server.json
dfhack-run: added support for port specified in
remote-server.json
, to match DFHack’s behaviordigfort: added better map bounds checking
- remove-stress:
added support for
-all
as an alternative to the existingall
argument for consistencysped up significantly
improved output/error messages
now removes tantrums, depression, and obliviousness
ruby: sped up handling of onupdate events
API¶
Exposed
Screen::zoom()
to C++ (was Lua-only)New functions:
Units::isDiplomat(unit)
Internals¶
jsoncpp: updated to version 1.8.4 and switched to using a git submodule
Lua¶
Added
printall_recurse
to print tables and DF references recursively. It can be also used with^
from the lua interpreter.gui.widgets
:List:setChoices
cloneschoices
for internal table changes
Structures¶
history_event_entity_expels_hfst
: added (new in 0.44.11)history_event_site_surrenderedst
: added (new in 0.44.11)history_event_type
: addedSITE_SURRENDERED
,ENTITY_EXPELS_HF
(new in 0.44.11)syndrome
: identified a few fieldsviewscreen_civlistst
: fixed layout and identified many fields
DFHack 0.44.11-alpha1¶
Structures¶
Added support for automatically sizing arrays indexed with an enum
Dropped 0.44.10 support
Removed stale generated CSV files and DT layouts from pre-0.43.05
announcement_type
: new in 0.44.11:NEW_HOLDING
,NEW_MARKET_LINK
breath_attack_type
: addedOTHER
historical_figure_info.relationships.list
: addedunk_3a
-unk_3c
fields at endinterface_key
: added bindings new in 0.44.11occupation_type
: new in 0.44.11:MESSENGER
profession
: new in 0.44.11:MESSENGER
ui_sidebar_menus
:unit.in_squad
: renamed tounit.squad_list_opened
, fixed locationunit
: addedexpel_error
and other unknown fields new in 0.44.11hospital
: added, new in 0.44.11num_speech_tokens
,unk_17d8
: moved out ofcommand_line
to fix layout on x64
viewscreen_civlistst
: added a few new fields (incomplete)viewscreen_locationsst
: identifiededit_input
DFHack 0.44.10-r2¶
New Plugins¶
cxxrandom: exposes some features of the C++11 random number library to Lua
New Scripts¶
add-recipe: adds unknown crafting recipes to the player’s civ
gui/stamper: allows manipulation of designations by transforms such as translations, reflections, rotations, and inversion
Fixes¶
Fixed many tools incorrectly using the
dead
unit flag (they should generally checkflags2.killed
instead)Fixed many tools passing incorrect arguments to printf-style functions, including a few possible crashes (changelayer, follow, forceequip, generated-creature-renamer)
Fixed several bugs in Lua scripts found by static analysis (df-luacheck)
Fixed
-g
flag (GDB) in Linuxdfhack
script (particularly on x64)autochop, autodump, autogems, automelt, autotrade, buildingplan, dwarfmonitor, fix-unit-occupancy, fortplan, stockflow: fix issues with periodic tasks not working for some time after save/load cycles
- autogems:
stop running repeatedly when paused
fixed crash when furnaces are linked to same stockpiles as jeweler’s workshops
autogems, fix-unit-occupancy: stopped running when a fort isn’t loaded (e.g. while embarking)
autounsuspend: now skips planned buildings
ban-cooking: fixed errors introduced by kitchen structure changes in 0.44.10-r1
buildingplan, fortplan: stopped running before a world has fully loaded
deramp: fixed deramp to find designations that already have jobs posted
dig: fixed “Inappropriate dig square” announcements if digging job has been posted
fixnaked: fixed errors due to emotion changes in 0.44
remove-stress: fixed an error when running on soul-less units (e.g. with
-all
)reveal: stopped revealing tiles adjacent to tiles above open space inappropriately
stockpiles:
loadstock
now sets usable and unusable weapon and armor settingsstocks: stopped listing carried items under stockpiles where they were picked up from
Misc Improvements¶
Added script name to messages produced by
qerror()
in Lua scriptsFixed an issue in around 30 scripts that could prevent edits to the files (adding valid arguments) from taking effect
Linux: Added several new options to
dfhack
script:--remotegdb
,--gdbserver
,--strace
bodyswap: improved error handling
buildingplan: added max quality setting
caravan: documented (new in 0.44.10-alpha1)
deathcause: added “slaughtered” to descriptions
- embark-assistant:
changed region interaction matching to search for evil rain, syndrome rain, and reanimation rather than interaction presence (misleadingly called evil weather), reanimation, and thralling
gave syndrome rain and reanimation wider ranges of criterion values
fix/dead-units: added a delay of around 1 month before removing units
fix/retrieve-units: now re-adds units to active list to counteract fix/dead-units
- modtools/create-unit:
added quantity argument
now selects a caste at random if none is specified
- mousequery:
migrated several features from TWBT’s fork
added ability to drag with left/right buttons
added depth display for TWBT (when multilevel is enabled)
made shift+click jump to lower levels visible with TWBT
title-version: added version to options screen too
item-descriptions
: fixed several grammatical errors
API¶
- New functions (also exposed to Lua):
Units::isKilled()
Units::isActive()
Units::isGhost()
Removed Vermin module (unused and obsolete)
Internals¶
Added build option to generate symbols for large generated files containing df-structures metadata
Added fallback for YouCompleteMe database lookup failures (e.g. for newly-created files)
Improved efficiency and error handling in
stl_vsprintf
and related functionsjsoncpp: fixed constructor with
long
on Linux
Lua¶
Added
profiler
module to measure lua performanceEnabled shift+cursor movement in WorkshopOverlay-derived screens
Structures¶
incident_sub6_performance
: identified some fieldsitem_body_component
: fixed location ofcorpse_flags
job_handler
: fixed static array layoutjob_type
: addedis_designation
attributeunit_flags1
: renameddead
toinactive
to better reflect its useunit_personality
: fixed location ofcurrent_focus
andundistracted_focus
unit_thought_type
: addedSawDeadBody
(new in 0.44.10)
DFHack 0.44.10-r1¶
New Scripts¶
bodyswap: shifts player control over to another unit in adventure mode
New Tweaks¶
Fixes¶
Lua: registered
dfhack.constructions.designateRemove()
correctlyprospector: fixed crash due to invalid vein materials
tweak max-wheelbarrow: fixed conflict with building renaming
view-item-info: stopped appending extra newlines permanently to descriptions
Misc Improvements¶
Added logo to documentation
Documented several missing
dfhack.gui
Lua functionsadv-rumors: bound to Ctrl-A
command-prompt: added support for
Gui::getSelectedPlant()
gui/advfort: bound to Ctrl-T
gui/room-list: added support for
Gui::getSelectedBuilding()
gui/unit-info-viewer: bound to Alt-I
modtools/create-unit: made functions available to other scripts
- search:
added support for stone restrictions screen (under
z
: Status)added support for kitchen preferences (also under
z
)
API¶
- New functions (all available to Lua as well):
Buildings::getRoomDescription()
Items::checkMandates()
Items::canTrade()
Items::canTradeWithContents()
Items::isRouteVehicle()
Items::isSquadEquipment()
Kitchen::addExclusion()
Kitchen::findExclusion()
Kitchen::removeExclusion()
syndrome-util: added
eraseSyndromeData()
Internals¶
Fixed compiler warnings on all supported build configurations
Windows build scripts now work with non-C system drives
Structures¶
dfhack_room_quality_level
: new enumglowing_barrier
: identifiedtriggered
, added commentsitem_flags2
: renamedhas_written_content
tounk_book
kitchen_exc_type
: new enum (forui.kitchen
)mandate.mode
: now an enumunit_personality.emotions.flags.memory
: identifiedviewscreen_kitchenprefst.forbidden
,possible
: now a bitfield,kitchen_pref_flag
world_data.feature_map
: added extensive documentation (in XML)
DFHack 0.44.10-beta1¶
New Scripts¶
devel/find-primitive: finds a primitive variable in memory
Fixes¶
Units::getAnyUnit(): fixed a couple problematic conditions and potential segfaults if global addresses are missing
autodump, automelt, autotrade, stocks, stockpiles: fixed conflict with building renaming
exterminate: fixed documentation of
this
option- full-heal:
units no longer have a tendency to melt after being healed
healed units are no longer treated as patients by hospital staff
healed units no longer attempt to clean themselves unsuccessfully
wounded fliers now regain the ability to fly upon being healing
now heals suffocation, numbness, infection, spilled guts and gelding
- modtools/create-unit:
creatures of the appropriate age are now spawned as babies or children where applicable
fix: civ_id is now properly assigned to historical_figure, resolving several hostility issues (spawned pets are no longer attacked by fortress military!)
fix: unnamed creatures are no longer spawned with a string of numbers as a first name
stockpiles: stopped sidebar option from overlapping with autodump
tweak block-labors: fixed two causes of crashes related in the v-p-l menu
Misc Improvements¶
blueprint: added a basic Lua API
devel/export-dt-ini: added tool offsets for DT 40
devel/save-version: added current DF version to output
install-info: added information on tweaks
Internals¶
Added function names to DFHack’s NullPointer and InvalidArgument exceptions
Added
Gui::inRenameBuilding()
Linux: required plugins to have symbols resolved at link time, for consistency with other platforms
DFHack 0.44.10-alpha1¶
New Scripts¶
caravan: adjusts properties of caravans
gui/autogems: a configuration UI for the autogems plugin
Fixes¶
Fixed uninitialized pointer being returned from
Gui::getAnyUnit()
in rare casesautohauler, autolabor, labormanager: fixed fencepost error and potential crash
dwarfvet: fixed infinite loop if an animal is not accepted at a hospital
liquids: fixed “range” command to default to 1 for dimensions consistently
search: fixed 4/6 keys in unit screen search
view-item-info: fixed an error with some armor
Misc Improvements¶
autogems: can now blacklist arbitrary gem types (see gui/autogems)
exterminate: added more words for current unit, removed warning
fpause: now pauses worldgen as well
Internals¶
Added some build scripts for Sublime Text
Changed submodule URLs to relative URLs so that they can be cloned consistently over different protocols (e.g. SSH)
DFHack 0.44.09-r1¶
Fixes¶
modtools/item-trigger: fixed token format in help text
Misc Improvements¶
Reorganized changelogs and improved changelog editing process
modtools/item-trigger: added support for multiple type/material/contaminant conditions
Internals¶
OS X: Can now build with GCC 7 (or older)
Structures¶
army
: added vector new in 0.44.07building_type
: added human-readablename
attributefurnace_type
: added human-readablename
attributerenderer
: fixed vtable addresses on 64-bit OS Xsite_reputation_report
: namedreports
vectorworkshop_type
: added human-readablename
attribute
DFHack 0.44.09-alpha1¶
Fixes¶
dig: stopped designating non-vein tiles (open space, trees, etc.)
labormanager: fixed crash due to dig jobs targeting some unrevealed map blocks
DFHack 0.44.08-alpha1¶
Fixes¶
fix/dead-units: fixed a bug that could remove some arriving (not dead) units
DFHack 0.44.07-beta1¶
Misc Improvements¶
modtools/item-trigger: added the ability to specify inventory mode(s) to trigger on
Structures¶
Added symbols for Toady’s 0.44.07 Linux test build to fix Bug 10615
world_site
: fixed alignment
DFHack 0.44.07-alpha1¶
Fixes¶
Fixed some CMake warnings (CMP0022)
Support for building on Ubuntu 18.04
embark-assistant: fixed detection of reanimating biomes
Misc Improvements¶
- embark-assistant:
Added search for adamantine
Now supports saving/loading profiles
fillneeds: added
-all
option to apply to all unitsRemoteFortressReader: added flows, instruments, tool names, campfires, ocean waves, spiderwebs
Structures¶
Several new names in instrument raw structures
identity
: identifiedprofession
,civ
manager_order_template
: fixed last field typeviewscreen_createquotast
: fixed layoutworld.language
: movedcolors
,shapes
,patterns
toworld.descriptors
world.reactions
,world.reaction_categories
: moved to new compound,world.reactions
. Requires renaming:world.reactions
toworld.reactions.reactions
world.reaction_categories
toworld.reactions.reaction_categories
DFHack 0.44.05-r2¶
New Plugins¶
embark-assistant: adds more information and features to embark screen
New Scripts¶
adv-fix-sleepers: fixes units in adventure mode who refuse to wake up (Bug 6798)
hermit: blocks caravans, migrants, diplomats (for hermit challenge)
New Features¶
With
PRINT_MODE:TEXT
, setting theDFHACK_HEADLESS
environment variable will hide DF’s display and allow the console to be used normally. (Note that this is intended for testing and is not very useful for actual gameplay.)
Fixes¶
devel/export-dt-ini: fix language_name offsets for DT 39.2+
devel/inject-raws: fixed gloves and shoes (old typo causing errors)
RemoteFortressReader: fixed an issue with not all engravings being included
view-item-info: fixed an error with some shields
Misc Improvements¶
adv-rumors: added more keywords, including names
autochop: can now exclude trees that produce fruit, food, or cookable items
RemoteFortressReader: added plant type support
DFHack 0.44.05-r1¶
New Scripts¶
break-dance: Breaks up a stuck dance activity
fillneeds: Use with a unit selected to make them focused and unstressed
firestarter: Lights things on fire: items, locations, entire inventories even!
flashstep: Teleports adventurer to cursor
ghostly: Turns an adventurer into a ghost or back
questport: Sends your adventurer to the location of your quest log cursor
view-unit-reports: opens the reports screen with combat reports for the selected unit
Fixes¶
devel/inject-raws: now recognizes spaces in reaction names
dig: added support for designation priorities - fixes issues with designations from
digv
and related commands having extremely high priority- dwarfmonitor:
fixed display of creatures and poetic/music/dance forms on
prefs
screenadded “view unit” option
now exposes the selected unit to other tools
names: fixed many errors
quicksave: fixed an issue where the “Saving…” indicator often wouldn’t appear
Misc Improvements¶
binpatch: now reports errors for empty patch files
force: now provides useful help
- full-heal:
can now select corpses to resurrect
now resets body part temperatures upon resurrection to prevent creatures from freezing/melting again
now resets units’ vanish countdown to reverse effects of exterminate
- gui/gm-unit:
added a profession editor
misc. layout improvements
launch: can now ride creatures
names: can now edit names of units
- RemoteFortressReader:
support for moving adventurers
support for vehicles, gem shapes, item volume, art images, item improvements
Removed¶
Internals¶
Gui::getAnyUnit()
supports many more screens/menus
Structures¶
New globals:
soul_next_id
DFHack 0.44.05-alpha1¶
Misc Improvements¶
gui/liquids: added more keybindings: 0-7 to change liquid level, P/B to cycle backwards
Structures¶
incident
: re-aligned again to match disassembly
DFHack 0.44.04-alpha1¶
Fixes¶
devel/inject-raws: now recognizes spaces in reaction names
exportlegends: fixed an error that could occur when exporting empty lists
Structures¶
artifact_record
: fixed layout (changed in 0.44.04)incident
: fixed layout (changed in 0.44.01) - note that many fields have moved
DFHack 0.44.03-beta1¶
Fixes¶
autolabor, autohauler, labormanager: added support for “put item on display” jobs and building/destroying display furniture
gui/gm-editor: fixed an error when editing primitives in Lua tables
Misc Improvements¶
devel/dump-offsets: now ignores
index
globalsgui/pathable: added tile types to sidebar
- modtools/skill-change:
now updates skill levels appropriately
only prints output if
-loud
is passed
Structures¶
Added
job_type.PutItemOnDisplay
Added
twbt_render_map
code offset on x64Fixed an issue preventing
enabler
from being allocated by DFHackFound
renderer
vtable on osx64- New globals:
version
min_load_version
movie_version
basic_seed
title
title_spaced
ui_building_resize_radius
adventure_movement_optionst
,adventure_movement_hold_tilest
,adventure_movement_climbst
: named coordinate fieldsmission
: added typeunit
: added 3 new vmethods:getCreatureTile
,getCorpseTile
,getGlowTile
viewscreen_assign_display_itemst
: fixed layout on x64 and identified many fieldsviewscreen_reportlistst
: fixed layout, addedmission_id
vectorworld.status
: namedmissions
vector
DFHack 0.44.03-alpha1¶
Lua¶
Improved
json
I/O error messagesStopped a crash when trying to create instances of classes whose vtable addresses are not available
DFHack 0.44.02-beta1¶
New Scripts¶
devel/check-other-ids: Checks the validity of “other” vectors in the
world
globalgui/cp437-table: An in-game CP437 table
Fixes¶
Fixed issues with the console output color affecting the prompt on Windows
createitem: stopped items from teleporting away in some forts
gui/gm-unit: can now edit mining skill
gui/quickcmd: stopped error from adding too many commands
modtools/create-unit: fixed error when domesticating units
Misc Improvements¶
The console now provides suggestions for built-in commands
devel/export-dt-ini: avoid hardcoding flags
- exportlegends:
reordered some tags to match DF’s order
added progress indicators for exporting long lists
gui/gm-editor: added enum names to enum edit dialogs
gui/gm-unit: made skill search case-insensitive
gui/rename: added “clear” and “special characters” options
- RemoteFortressReader:
includes item stack sizes
some performance improvements
Removed¶
warn-stuck-trees: Bug 9252 fixed in DF 0.44.01
Lua¶
Exposed
get_vector()
(from C++) for all types that supportfind()
, e.g.df.unit.get_vector() == df.global.world.units.all
Structures¶
Added
buildings_other_id.DISPLAY_CASE
Fixed
unit
alignmentFixed
viewscreen_titlest.start_savegames
alignmentIdentified
historical_entity.unknown1b.deities
(deity IDs)Located
start_dwarf_count
offset for all builds except 64-bit Linux; startdwarf should work now
DFHack 0.44.02-alpha1¶
New Scripts¶
devel/dump-offsets: prints an XML version of the global table included in in DF
Fixes¶
Fixed a crash that could occur if a symbol table in symbols.xml had no content
Lua¶
Added a new
dfhack.console
APIAPI can now wrap functions with 12 or 13 parameters
Structures¶
The former
announcements
global is now a field ind_init
The
ui_menu_width
global is now a 2-byte array; the second item is the formerui_area_map_width
global, which is now removedworld
fields formerly beginning withjob_
are now fields ofworld.jobs
, e.g.world.job_list
is nowworld.jobs.list