This alpha release is compatible with all distributions of DF: Steam, Itch, and Classic.
Installation instructions here: https://docs.dfhack.org/en/latest/docs/Installing.html#installing
Quickstart guide here: https://docs.dfhack.org/en/latest/docs/Quickstart.html#quickstart
Progress on updating existing DFHack tools is tracked here, and comments from players are welcome if an "untested" tool works for you. If you are waiting for a particular DFHack tool to get updated, please cast your vote for the tools that you'd like us to work on next: https://strawpoll.com/polls/61gDmBRx5Zw
Announcements
PSAs
PSAs
Standard alpha release warnings:
- DFHack tools probably won't corrupt your savegame, but it would be really smart to keep backups of the forts that you care about. DFHack may not have fully adapted to the changes in the new version of Dwarf Fortress, and, especially at this early stage of release and ongoing rapid development, there WILL be bugs. Please always inform us quickly about crash bugs. We prioritize getting those fixed first.
- Many tools have not been tested thoroughly with Steam DF. The tools that are untested will show a warning if you try to run them and exit immediately. You can run the command again to override the warning.
- The in-game interface for running DFHack commands (
gui/launcher
) will not show untested tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while ingui/launcher
and they will autocomplete as normal. Some tools do not compile yet and are not available at all, even when in dev mode.
For those of you using sdl12compat, note that you will need to replace the "SDLreal.dll" file that DFHack installs with the SDL.dll (renamed to "SDLreal.dll") from sdl12compat. While we do not specifically recommend using sdl12compat, we have generally heard positive feedback about it.
Steam deck users: To avoid blocking the screen with the DFHack terminal window, please edit the dfhack-config/init/dfhack.init
file and add a line with the word hide
. This will hide the DFHack terminal and get it out of the way. You can show it again if you need it by running the command show
from gui/launcher
.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor in the DF settings, and you can show it by entering mining mode or selecting the dump/forbid tool. We're working on making DFHack tools more mouse-aware and accessible.
Highlights
gui/mass-remove, trade screen, gui/dig, updated tools
Clear things away with gui/mass-remove:
Lay down designs with gui/dig:
- The trade screen now has a helper overlay that lets you select all/none for trade in a container, collapse containers, and collapse all categories
gui/mass-remove
allows you to select blocks of buildings and constructions and remove/suspend them all with a single click. Designated buildings that have not yet been built will just disappear. Built buildings/constructions will have a disassembly job created for them, just as if you had clicked the button on the building info sheet.gui/dig
continues to impress with new abilities to create multi-point curves. Spirals, anyone?combine
allows you to combine food/drink of the same type that are sitting in different partially-filled containers in the same stockpile, helping you free up much-needed stockpile space- Literal "highlight" here: clickable DFHack widgets now show a visible highlight when you mouse over them.
Newly tested/updated tools
These are the existing tools that have been reported as working on the tracking spreadsheet. Thank you for all the people who have left comments there detailing which tools work and which ones don't! Your testing allowed us to make these tools available much faster than we otherwise would have.
caravan
: Adjust properties of caravans on the map.clear-smoke
: Remove all FPS-draining smoke from the map.colonies
: Manipulate vermin colonies and hives.deep-embark
: Embark deep underground.devel/annc-monitor
: Track announcements and reports and echo them to the console.fix-retrieve-units
: Allow units stuck offscreen to enter the map.fix/stuck-merchants
: Dismiss merchants that are stuck off the edge of the map.force
: Trigger in-game events.gui/mass-remove
: Mass select buildings and constructions to suspend or remove.reveal-hidden-sites
: Reveal all sites in the world.set-timeskip-duration
: Modify the duration of the pre-game world update.strangemood
: Trigger a strange mood.superdwarf
: Make a dwarf supernaturally speedy.troubleshoot-item
: Inspect properties of the selected item.
Generated release notes
New tools, fixes, and improvements
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 - useenable 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 namesautodump
: changed behaviour to only changedump
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'sconfirm
: fix fps drop when enableddevel/query
: can now properly index vectors in the --table argumentforbid
: fix detection of unreachable items for items in containersgui/blueprint
: correctly use setting presets passed on the commandlinegui/quickfort
: correctly use settings presets passed on the commandlinemakeown
: fixes errors caused by using makeown on an invadernestboxes
: 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 targetstailor
: block making clothing sized for toads; make replacement clothing orders use the size of the wearer, not the size of the garmenttroubleshoot-item
: fix printing of job details for chosen itemunforbid
: fix detection of unreachable items for items in containersBuildings::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 announcementscaravan
: add trade screen overlay that assists with seleting groups of items and collapsing groups in the UIconfirm
: 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 highlighteddevel/visualize-structure
: now automatically inspects the contents of most pointer fields, rather than inspecting the pointers themselvesgui/gm-editor
will now inspect a selected building itself if the building has no current jobsshowmood
: 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 loggingtroubleshoot-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 bycombine
combine-plants
: replaced bycombine
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 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