Releases: DFHack/dfhack
DFHack 50.05-alpha3.1
Thing are moving along well, and the numerous contributions from the community have helped DFHack make a lot of progress! This release still only works with the Steam version. Compatibility with The Itch and Classic versions is scheduled to come with DF 50.06.
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
If you don't know what DFHack is, see our first alpha post here for a lot of background information.
Are you waiting for a particular DFHack tool to get updated? Vote for the tools that you'd like us to work on next: https://strawpoll.com/polls/61gDmBRx5Zw
Announcements
PSAs
PSAs
Remember that this is an alpha release. This means that:
- 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, there WILL be bugs.
- Most 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.
Note that DF's "manual" and "timeline" saves are buggy at the moment, and you should instead copy the entire save
directory to somewhere else on your hard drive to keep it safe.
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: The new recommended way to remove the DFHack terminal console is to 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
.
Finally, many people are confused when DFHack tools tell them that a cursor is required. This refers 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 naturally accessible.
Highlights
gui/liquids, gui/control-panel, new tools
Create a splash with gui/liquids
:
Configure tools with gui/control-panel
:
What's new and notable?
- More memory alignment issues have been corrected. This will address issues with examining units with tools like
gui/gm-editor
. Please always inform us quickly about crash bugs. We prioritize getting those fixed first. - DFHack now has an in-game configuration interface:
gui/control-panel
! You can toggle enabled tools with a click, and even select which tools you want running automatically when you start a new fort! Bring it up from the DFHack logo hotspot menu or the tilde (Shift-backtick for most keyboard layouts) hotkey. - We've started making some productivity tools more accessible with overlays. The first of these is the
orders
overlay. When you bring up the manager orders panel, you'll now see a DFHack-drawn section where you can import, export, sort, and clear manager orders with a click of the mouse (or the strike of a hotkey). If you feel like any DFHack-drawn overlay is getting in the way, you can turn it off ingui/control-panel
. - DFHack windows are now easier to "pin". Before, if you wanted a tool to ignore right mouse clicks and keyboard input, you'd have to click on the pin icon in the upper right corner. Now, just click anywhere on the map that is not a DFHack tool window. The window will lose the highlight from its title bar and will ignore mouse and keyboard input until you click on it again.
- You also might notice that DFHack has a new look. Tell us what you think of the new window styling in the comments!
Brand new tools!
In addition to gui/control-panel
, our beloved community members have stepped up to provide you with some fantastic new tools to play with:
autoslab
can monitor your fort for ghosts and automatically enqueue orders to engrave slabs for them.autofish
andgui/autofish
will manage fishing labors to help you control your stock of fishgui/automelt
is a fantastic new GUI config and status panel interface forautomelt
fix/civil-war
makes games playable again for those unlucky enough to have accidentally started a war with your own government (which is supposed to be impossible)fix/protect-nicks
restore nicknames when DF loses them (this can happen, for example, when a dwarf slays a megabeast)forbid
can list forbidden items on the map and selectively mark classes of items as forbiddengui/liquids
allows you to draw liquids onto the map with the mouse. Create swimming pools or test prospective drowning traps with easegui/unit-syndromes
is an interactive browser for syndrome information
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.
autolabor
has basic functionality, but is still marked as "untested" since we don't know yet how well it interacts with the Steam version labors. You're welcome to try it out, but keep an eye on your dwarves (and please tell us how it goes!)animal-control
: Quickly view, butcher, or geld groups of animals.armoks-blessing
: Bless units with superior stats and traits.assign-facets
: Adjust a unit's facets and traits.assign-goals
: Adjust a unit's goals and dreams.assign-preferences
: Adjust a unit's preferences.assign-skills
: Adjust a unit's skills.automelt
: Automatically designate items brought to a stockpile to be melted.brainwash
: Set the personality of a dwarf to an ideal.catsplosion
: Cause pregnancies (not just in cats).channel-safely
: Manage channel designations to keep dwarves safe.dig
: Provides commands for designating tiles for digging.elevate-mental
: Set mental attributes of a dwarf to an ideal.elevate-physical
: Set physical attributes of a dwarf to an ideal.emigration
: Allow dwarves to emigrate from the fortress when stressed.empty-bin
: Empty the contents of containers onto the floor.extinguish
: Put out fires.feature
: Control discovery flags for map features.fillneeds
: Temporarily satisfy the needs of a unit.fix/loyaltycascade
: Halts loyalty cascades where dwarves are fighting dwarves.hermit
: Go it alone in your fortress and attempt the hermit challenge.make-monarch
: Crown the selected unit as a monarch.reveal-hidden-units
: Reveal sneaking units.
Generated release notes
New tools, fixes, and improvements
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 fishfix/civil-war
: removes negative relations with own governmentfix/protect-nicks
: restore nicknames when DF loses themforbid
: forbid and list forbidden items on the mapgui/autofish
: GUI config and status panel interface for autofishgui/automelt
: GUI config and status panel interface for automeltgui/control-panel
: quick access to DFHack configurationgui/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 buildscatsplosion
: now only affects live, active units- `get...
DFHack 50.05-alpha2
A quick release to solve some initial issues. This release still only works with the Steam version. Compatibility with The Itch and Classic versions is scheduled to come with DF 50.06.
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
If you missed the first alpha release, see the post here for a lot of background information
Please vote for the tools that you'd like us to work on next here!
Announcements
PSAs
PSAs
Here is another reminder that this is an alpha release. This means that:
- 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, there WILL be bugs.
- Most 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.
Note that DF's "manual" and "timeline" saves are buggy at the moment, and you should instead copy the entire save
directory to somewhere else on your hard drive.
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: you might want to set DFHACK_DISABLE_CONSOLE=1
in your environment so DFHack doesn't create a terminal console. This will allow Dwarf Fortress to start in the foreground and you won't have to switch windows every time.
Finally, many people are confused when DFHack tools tell them that a cursor is required. This refers 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 naturally accessible.
Highlights
gui/blueprint, gui/quickfort, updated tools!
Copy and paste your designs and layouts with gui/blueprint and gui/quickfort!
- A few memory alignment issues have been corrected. This will address crashes a few of you have been seeing. Please always inform us quickly about crash bugs. We prioritize getting those fixed first.
- The orders library is now accessible for the
orders import
command. Please retry the steps in the Quickstart guide for a (now correctly-functioning) walkthrough - The layout of gui/quickfort has been fixed so it's easy to see how to rotate and transform the blueprints again.
- This release comes with a very limited version of buildingplan. It is not configurable, it has no UI and no materials selection, but it does allow buildings placed with
quickfort
to get built when materials are available instead of just letting them get canceled immediately. - A note about
blueprint
andquickfort
-- Only dig and build blueprint phases have been updated for the current release of DF. Stockpiles, zones, and building/game configuration need work and their blueprint modes are currently disabled. This means that those attempting to build the full-fort templates (TheQuickFortress and Dreamfort) from blueprints will be sorely disappointed. All other blueprints in the blueprint library (https://docs.dfhack.org/en/latest/docs/guides/quickfort-library-guide.html) only have dig and build blueprints, and should work just fine. exportlegends
has received a bit of work, but you will not be able to use it for Legends Viewer any time soon. Legends export is a combination of vanilla DF functionality and DFHack-augmented files. The basic DF functionality is just not in the current release. Once DF's own legends export functionality has been restored, DFHack'sexportlegends
tool will be ready for it.
Newly tested/updated tools
- You asked for it, you got it. autodump is now ready for service.
- tailor can monitor your clothing supply and schedule appropriate workorders to replace current clothing that's becoming worn. It will use whatever raw materials (cloth/yarn/silk) you have available, but it's still up to you to have them in stock
- autoclothing complements
tailor
, allowing you to specify which types of clothing you'd like your citizens wearing.tailor
andautoclothing
are aware of existing manager orders, so they can both be run at once. - exterminate is here. use it wisely.
- full-heal, also see gui/gm-unit for selective wound healing
- gui/create-item
- gui/masspit for easily dumping many caged creatures into a pit.
- position for discovering the coordinates of the keyboard cursor. Some tools can take coordinates directly, and this is how you can find out what to pass.
- starvingdead will keep undead bodies (and body parts) from accumulating and eating all your FPS
- teleport will move you
Generated release notes
New tools, fixes, and improvements
Fixes
autofarm
: don't duplicate status line entries for crops with no current supplybuild-now
: don't error on constructions that do not have an item attachedgui/gm-editor
: fix errors displayed while viewing help screenorders
: allow the orders library to be listed and imported properly (if you previously copied the orders library into yourdfhack-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 bygui/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
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
This release requires the Steam version of DF (see below)
Announcements
PSAs
PSAs
Hi all! We know there has been a lot of excitement around this release of DFHack, so we want to start by setting some expectations. This is an alpha release. This means that:
- 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, there WILL be bugs.
- Most 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.
Note that DF's "manual" and "timeline" saves are buggy at the moment, and you should instead copy the entire save
directory to somewhere else on your hard drive. Alternately, you can copy the entire DF directory somewhere else, install DFHack in that directory, and keep it completely separate from your Steam installation.
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.
Also note that this release only supports the Steam version of DF due to some technical limitations. You don't have to run it through Steam, but it does require DF to be downloaded from Steam. We're hoping that a future version of DF will resolve these technical limitations, and we plan to support all builds (including Itch and Classic) by the time we reach a stable release of DFHack.
What's new?
What's new?
Manage your stock of logs with gui/autochop:
DFHack has significantly advanced from the days of DF 0.47.05. There is a much greater focus on allowing you to do everything from inside the game, not requiring you to open the external terminal window to run commands or go to the web to look up syntax documentation. More and more tools have graphical configuration screens, and most of those screens have full mouse integration (though keyboard-only setups are still fully supported where DF itself allows).
As soon as you start up DF with DFHack installed, the first thing you're likely to notice is the DFHack logo in the upper left of the screen. If you move your mouse over the logo, a panel will pop up showing you a list of DFHack tools that are relevant to the current screen. If you're wondering "what can I do with DFHack right now", open this panel and find out. DFHack's "context detection" code has not been fully updated for the new version of DF, so the list of tools in the popup menu is very short right now. However, this list will expand greatly over the next few releases of DFHack.
The first thing you should do is hover over the DFHack logo and select the quickstart guide (hotkey: ?). This will go into more depth about how to use DFHack than the quick notes I'm adding here.
The main interface for running DFHack tools in-game is gui/launcher
. It will always be first in the DFHack logo popup list for easy access. It has integrated help for all tools, showing you the usage syntax, real-world examples, and other useful information. It also allows you to autocomplete partially-typed commands and pull commandlines you have run before out of your history to run again.
DFHack windows have also progressed significantly. They are now draggable, resizable, and pinnable. For example, you can bring up gui/autochop
, configure your desired log stock levels, minimize the window, pin it, and drag it off to the side of the screen to leave it up as a live status report for your logging industry. The quickstart guide walks you through exactly how to do this.
There are also many changes in the DFHack tools themselves -- too many to mention. We can just suggest that you go exploring!
So which tools are available?
available tools
You can get live updates and see which tools have been tested here: https://docs.google.com/spreadsheets/d/1hiDlo8M_bB_1jE-5HRs2RrrA_VZ4cRu9VXaTctX_nwk/edit#gid=1774645373
Is your favorite tool not tested yet? Vote for it here: https://strawpoll.com/polls/poy9R95NwnJ
Here's are some of the more popular tools that are available now (even with the small percentage of tools that are tested, it's still a long list):
autobutcher
and the gui/autobutcher
config frontend - automatically butcher excess livestock
autochop
(and the gui/autochop
config frontend) - automatically designate trees for chopping
autofarm
- automatically select crops for planting
ban-cooking
- keep your chefs from cooking ingredients that are useful for other things
blueprint
(and the gui/blueprint
point and click interface) - record the design of your fortress
clean
- remove contaminants
cleanowned
- force dwarves to drop tattered clothing and go get new clothing
cursecheck
- check for cursed creatures
deathcause
- find out the cause of death by selecting a corpse or body part
dig-now
- fulfill dig designations instantly
drain-aquifer
- dry out all aquifers on the map
fastdwarf
- make your dwarves super speedy
fix/stable-temp
- speed up the game by allowing temperature calculations to quickly find equilibrium
gui/gm-editor
- general game memory editor
gui/gm-unit
- general unit property editor
gui/launcher
- in-game DFHack command launcher with integrated help and autocomplete
gui/pathable
- show which tiles are reachable from the selected position
gui/quickcmd
- customizable list of favorite DFHack commands
lever
- interact with levers (including pulling them with the "hand of Armok")
list-agreements
- show which temples and guildhalls you have agreed to build
locate-ore
- find ores of specific types on the map
migrants-now
- attempt to spawn a migrant wave asap
nestboxes
- protect fertile eggs in nestboxes from being gathered and eaten
orders
- import, export, and sort manager orders
overlay
(and the gui/overlay
config frontend) - configure DFHack informational and widget overlays
prioritize
- get your dwarves to actually do important jobs (like food hauling)
quickfort
(and the gui/quickfort
point and click interface) - apply blueprints to your map
quicksave
- force the game to save now
quickstart-guide
(check this out!) - get new DFHack players oriented
regrass
- regrow all grass on the map
remove-stress
- calm unhappy dwarves
reveal
- reveal map tiles (note that you have to switch into ASCII mode to see underground tiles)
seedwatch
- protect your seeds from being cooked when you need them for planting
showmood
- explain what a dwarf is looking for for their strange mood project
source
- create liquid sources and sinks
stonesense
- show the map in 3d
tame
- tame wild animals
tiletypes
- redraw the map with tiles of your choice
unforbid
- remove the "forbidden" flag from items
unsuspend
- resume suspended building jobs, also visually marks suspended buildings on the map
warn-starving
- warns you when your animals and dwarves are starving or dehydrated
weather
- control the weather
workorder
- generate manager orders
Hopefully that will be enough to get you started : p
Generated release notes
New tools, fixes, and improvements
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 idsgui/autochop
: configuration frontend for theautochop
plugin. you can pin the window and leave it up on the screen somewhere for live monitoring of your logging industry.
Fixes
make-legendary
: "MilitaryUnarmed" option now functionalwidgets.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 default autounsuspend
: now saves its state with your fortdevel/inspect-screen
: updated for new rendering semantics and can now also inspect map texturesemigration
: now saves its state with your fortgui/cp437-table
: converted to a movable, mouse-enabled windowgui/gm-editor
: converted to a movable, resizable, mouse-enabled windowgui/gm-unit
: converted to a movable, resizable, mouse-enabled windowgui/launcher
:- now supports a smaller, minimal mode. click the toggle in the launcher UI or start in minimal mode via the
Ctrl-Shift-P
keybinding - can now be dragged from anywhere on the window body
- now remembers its size and position between invocations
- now supports a smaller, minimal mode. click the toggle in the launcher UI or start in minimal mode via the
gui/quickcmd
:- converted to a movable, resizable, mouse-enabled window
...
- converted to a movable, resizable, mouse-enabled window
DFHack 0.47.05-r8
This is the second usability-focused release of DFHack. In the previous release, we made initial progress with the in-game command launcher with autocomplete and integrated command help. This release builds on that start with improved mouse controls (like draggable scrollbars) and a brand new framework for on-screen informational overlays and interactive widgets that respond to what's currently happening in the game.
The cool thing is that this overlay framework is ready for use by mods, including Steam Workshop mods! All modders have to do is declare an OverlayWidget in their script code and the overlay framework will discover it and attach it to the correct Dwarf Fortress screens. Players can enable, disable, or reposition overlay widgets with the new click-and-drag gui/overlay configuration interface. You can start playing with this interface with the overlay widgets that we've already ported to the new framework, such as the date, happiness meter, and weather indicator from dwarfmonitor.
Q: Wait! Go back! So DFHack is ready for the steam release now??
A: No, sorry, not yet. We have a lot of work to do to adapt DFHack to the new Dwarf Fortress release. It might take us a few months, but you will have your favorite tools back. And we hope to have even more usability improvements ready for you then too!
Q: So, like, why are you releasing now? Don't you know that the Steam release is in a few days?
A: Yeah, we know. This release is more for those who aren't upgrading right away, like players who aren't on Steam, adventure mode players, and, of course, players who want to wait for DFHack to become available for the new version before they switch to it : )
How to upgrade
- Remove the existing
hack/
directory in your Dwarf Fortress game folder - Extract the DFHack release archive into your Dwarf Fortress directory. If it asks you, let it overwrite files.
- If you use TWBT, you can get an updated version for this release here: https://github.com/thurin/df-twbt/releases/tag/0.47.05-r8
Full upgrade instructions are available online here
Highlights
DFHack logo hotspot, gui/overlay, spectate, channel-safely
The Hotkeys Hotspot
The major new feature is the Hotkeys Hotspot. You may not know this, but DFHack has many default keybindings that are bound to specific Dwarf Fortress screens (like the manager orders screen or the main map) that run useful DFHack commands. For example, when you're on the manager orders screen and have a manager order selected, you can hit Alt-Q
to change the number of items that the workorder will produce.
The Hotkeys Hotspot uses the new overlay framework to provide a mouse rollover menu that makes these bound commands available to you in a clickable list. You can also right-click on them to open them in the in-game launcher to modify the command and/or see the associated command help. You can add more commands to this list (or take some away) via the DFHack keybinding command, too.
You can show the rollover menu by moving your mouse near the upper left corner of the screen, a little down from the top. On the main map, this spot is marked by an exclamation point (!
), but the spot is "hot" on every screen, even if the exclamation point is covered up by something. You can reposition the hotspot with gui/overlay
if you want it in a more convenient place. You can also bring it up with the keyboard instead of the mouse by hitting the Ctrl-Shift-C
hotkey.
gui/overlay
gui/overlay is the beginning of a new trend for DFHack: in-game configuration that remembers your choices from game to game without any editing of init files. Also, notice the fancy new mouse controls like mouse hover reactions and click-and-drag widgets. Expect to see more of this from DFHack in the future!
spectate
The spectate plugin has seen a good bit of improvement in this release. Once your fort is in a good, steady state, try firing this tool up to automatically follow dwarves around, switching among them periodically, so you can sit back and watch your dwarves be dwarfy!
channel-safely
The new channel-safely tool protects your dwarves from digging themselves to death while channeling out large projects. Digging a large drowning trap or a magma piston? Give this tool a try!
Generated release notes
New tools, fixes, and improvements
New Plugins
overlay
: plugin is transformed from a single line of text that runsgui/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 bydwarfmonitor
(e.g. the current date and number of happy/unhappy dwarves), the overlay that highlights suspended buildings when you pause, and others. Seeoverlay-dev-guide
for details.channel-safely
: auto-manage channel designations to keep dwarves safe
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 commandautolabor
,autohauler
: properly handle jobs 241, 242, and 243automaterial
:- 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 availabledwarf-op
: fixed error when matching dwarves by namegui/create-item
: prevent materials list filter from intercepting sublist hotkeysgui/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 F12labormanager
: associate quern construction with the correct labormousequery
: fix the cursor jumping up z levels sometimes when using TWBTtiletypes
: no longer resets dig priority to the default when updating other properties of a tilewarn-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 theitem_type
fieldEventManager
:- fix a segmentation fault with the
REPORT
event - fix the
JOB_STARTED
event only sending events to the first handler listed instead of all registered handlers
- fix a segmentation fault with the
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 messagesblueprint
:- new
--smooth
option for recording all smoothed floors and walls instead of just the ones that require smoothing for later carving - record 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
- new
digtype
: 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 thegui/overlay
UIgui/blueprint
: support new blueprint phases and optionsgui/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-Kgui/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 stockpilehotkeys
:- 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). Enabl...
- hotkey screen has been transformed into an interactive
DFHack 0.47.05-r7
This is the first usability-focused DFHack release. The major new feature is the in-game command launcher with integrated help, autocomplete, command history (including history search), related tools display, and mouse integration.
You can access the new command launcher by clicking on the "[ DFHack Launcher ]" button in the lower left corner of the screen or by tapping the backquote (`) key. If the backquote key isn't convenient or isn't available for your keyboard layout, there is an alternate hotkey of Ctrl-Shift-D.
You can type part of a command to see autocomplete options. Hit Tab or click on an option to autocomplete. To pull a full commandline from your history, hit Alt-S or click on the "history search" button instead. When you type a command, its help text will be displayed in the large panel at the bottom. Hit Enter or click on the 'run" button to run. That's it! More info on the launcher here (which you can also see in-game when you type "gui/launcher" in the command box : )
From the screenshots, you may notice that text areas now have scrollbars. Click on the arrows at the end to scroll by one line, or on the empty area above or below the green part of the bar to scroll by half pages. You can also click on the command text that you are writing to reposition the cursor for editing.
Many thanks to the community members and beta testers who provided feedback on the launcher! Many of the best usability features were suggested by them! In particular, u/ZergTDG, u/Skitlee5, u/Thebuda, and u/tmPreston. You're awesome! Also D.B. Cooper, Quietust, and everyone else on the DFHack discord who gave feedback throughout development.
DFHack help itself has also been overhauled. More than 300 pages of help text has been reformatted and rewritten to make them more informative, easier to read, and easier to understand. Moreover, all DFHack tools are now tagged so that you can find them easier. Try running the new tags command to explore the categories! These tags also control what is in the list of related tools that appears in the right panel of the launcher when you are running a command.
New stuff
Apart from the aforementioned gui/launcher
and tags
, there's a bunch of great new stuff in this release:
- u/wolfboyft wrote the DFHack modding guide, which will get you up to speed if you'd like to explore how to use DFHack to extend your raws modding.
- run
enable gui/kitchen-info
to add more info to the Kitchen screen, including what each ingredient is good for besides cooking. - Hit "D" on the workorder details screen (where you can, say, set which kind of stone to use for a particular workorder) to get more control over the materials used to fulfill workorder jobs.
- We finally have a good way to dynamically limit the size of the next migration wave with
max-wave
and limit growth over time withpop-control
(or even enforce a hermit challenge!). - Get notified when creatures that may steal your food, drinks, or items become visible (e.g. keas) with
warn-stealers
. - DFHack now comes with a super useful library of manager orders! See them with
orders list
and import them into your game withorders import
. Tryorders import library/basic
to get a great set of orders for basic fort necessities! More info here. - DFHack's implementation of DwarfTherapist (
manipulator
-- accessible from the u-l screen) now comes with a library of pre-made professions that you can apply to your dwarves. More info here.
We are also working mouse controls into more of the DFHack tools. For example, you can now move the blueprint preview around by clicking on the map when using gui/quickfort
. You can interact with the map with the mouse in similar ways when using gui/quantum
and gui/blueprint
. Expect more mouse capabilities for DFHack tools in the future!
How to upgrade
A few files have moved around in this release, so if you're upgrading an existing installation, please read this section.
- When upgrading to this release, please remove the
dfhack-config/dwarfmonitor.json
file. It will get regenerated the next time you run DF. If you don't regenerate this file, the weather indicator (e.g. "Rain") will overlap with the new DFHack button in the lower left corner. If you have custom modifications to this file that you'd like to keep, please merge them back in once the file has been regenerated. - DFHack init scripts (
dfhack.init
,onLoad.init
,onMapLoad.init
, etc.) have moved intodfhack-config/init/
. If you have not made any custom modifications to these files, you don't need to do anything. Default configuration will be generated and used. If you have custom changes, please run DF once to generate the default config files and then move just your custom changes into the corresponding init files. See the docs for details. - The history files for the various interactive DFHack commandline tools have moved into
dfhack-config/
. If you want to keep your command histories, please move your existing*.history
files intodfhack-config/
. Note that the newgui/launcher
interface will make the commands in your olddfhack.history
file available for searching even if you never get around to moving that file to the new directory.
And, just like every DFHack release, please remove the hack/
directory in your DF game folder before extracting the new version of DFHack into your DF folder. There were several scripts and other files that were removed in this release. If you don't remove the hack/
directory before upgrading, the old, unusable scripts will clutter the autocomplete list in the command launcher.
DFHack 0.47.05-r7
New Plugins
autobutcher
: split off fromzone
into its own plugin. Note that to enable, the command has changed fromautobutcher start
toenable autobutcher
.autonestbox
: split off fromzone
into its own plugin. Note that to enable, the command has changed fromautonestbox start
toenable autonestbox
.overlay
: display a "DFHack" button in the lower left corner that you can click to start the new GUI command launcher. Thedwarfmonitor
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 thedfhack-config/dwarfmonitor.json
file to fix the weather indicator display offset.
New Scripts
gui/kitchen-info
: adds more info to the Kitchen screengui/launcher
: in-game command launcher with autocomplete, history, and context-sensitive helpgui/workorder-details
: adjusts work orders' input item, material, traitsmax-wave
: dynamically limit the next immigration wave, can be set to repeatpop-control
: persistent per fortress population cap,hermit
, andmax-wave
managementwarn-stealers
: warn when creatures that may steal your food, drinks, or items become visible
New Internal Commands
tags
: new built-in command to list the tool category tags and their definitions. tags associated with each tool are visible in the tool help and in the output ofls
.
Fixes
autochop
: designate largest trees for chopping first, instead of the smallestdevel/query
: fixed error when --tile is specifieddig-now
: Fix direction of smoothed walls when adjacent to a door or floodgatedwarf-op
: fixed error when applying the Miner job to dwarvesemigration
: fix emigrant logic so unhappy dwarves leave as designedgui/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 namesgui/workflow
: restore functionality to the add/remove/order hotkeys on the workflow status screenquickfort
:Dreamfort <quickfort-blueprint-guide>
blueprint set: declare the hospital zone before building the coffer; otherwise DF fails to stock the hospital with materialsview-item-info
: fixed a couple errors when viewing items without materialsdfhack.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. I...
DFHack 0.47.05-r6
DFHack 0.47.05-r6
We have some great new visual tools in this release! gui/petitions gives you a scrollable list of your pending (or previous) petitions. Now you no longer have to remember what deity you just agreed to build a temple for : )
gui/quickfort is a brand new UI for Quickfort. You can preview how your blueprint will be applied in the live game map, position it interactively, and see whether the blueprint will be successfully applied before you apply it.
and gui/quantum is a point and click interface for setting up quantum stockpiles. It will even manage the minecarts for you!
New Scripts
assign-minecarts
: automatically assign minecarts to hauling routes that don't have onedeteriorate
: combines, replaces, and extends previousdeteriorateclothes
,deterioratecorpses
, anddeterioratefood
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 stockpilesgui/quickfort
: shows blueprint previews on the live map so you can apply them interactivelymodtools/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 wallseventful
:- 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 name - fixed UNIT_NEW_ACTIVE event firing too often
- fix
gui/dfstatus
: no longer count items owned by tradersgui/unit-info-viewer
: fix calculation/labeling of unit sizejob.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. Nowbuild-now
can build buildings andgui/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 withbuildingplan
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 scancaravan
: newunload
command, fixes endless unloading at the depot by reconnecting merchant pack animals that were disconnected from their ownersconfirm
:- added a confirmation dialog for removing manager orders
- allow players to pause the confirmation dialog until they exit the current screen
deteriorate
: newnow
command immediately deteriorates items of the specified typesdfhack-examples-guide
:- 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-alias-guide
:- new aliases:
forbidsearch
,permitsearch
, andtogglesearch
use thesearch-plugin
plugin to alter the settings for a filtered list of item types when configuring stockpiles - new 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
- new aliases:
quickfort
:Dreamfort <quickfort-blueprint-guide>
blueprint set improvements: automatically create tavern, library, and temple locations (restricted to residents only by default), automatically associate the rented rooms with the tavernDreamfort <quickfort-blueprint-guide>
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 usedeteriorate --types=clothes
insteaddeterioratecorpses
: please usedeteriorate --types=corpses
insteaddeterioratefood
: please usedeteriorate --types=food
insteaddevel/unforbidall
: please useunforbid
instead. You can silence the output withunforbid 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 configurable - can 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.
- the
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
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" plantscxxrandom
: fixed exception when callingbool_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 itemluasocket
: return correct status code when closing socket connections so clients can know when to retryquickfort
: contructions and bridges are now properly placed over natural rampssetfps
: 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
- only designate the amount of trees required to reach
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
- now displays help instead of modifying dwarf nicknames when run without parameters. use
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 creaturedebug
:- DFHack log messages now have configurable headers (e.g. timestamp, origin plugin name, etc.) via the
debugfilter
command of thedebug
plugin - script 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
- DFHack log messages now have configurable headers (e.g. timestamp, origin plugin name, etc.) via the
dfhack-examples-guide
:- add mugs to
basic
manager orders onMapLoad_dreamfort.init
remove "cheaty" commands and new tweaks that are now in the defaultdfhack.init-example
file
- add mugs to
dig-now
: handle fortification carvingEventManager
:- add new event type
JOB_STARTED
, triggered when a job first gains a worker - add new event type
UNIT_NEW_ACTIVE
, triggered when a new unit appears on the active list
- add new event type
gui/blueprint
: support newblueprint
options and phasesgui/create-item
: Added "(chain)" annotation text for armours with the [CHAIN_METAL_TEXT] flag setmanipulator
: tweak colors to make the cursor easier to locatequickfort
:- 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 cursor - new 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 lengthtweak
: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()
Lua
custom-raw-tokens
: library for accessing tokens added to raws by modsdfhack.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 dismiss - new class function
renderMapOverlay
to assist with painting tiles over the visible map
- if
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 punctuation- minimum 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 layouts - new class
ResizingPanel
(subclass ofPanel
) automatically recalculates its own frame height based on the size, position, and visibility of its subviews - new class
HotkeyLabel
(subclass ofLabel
) that displays and reacts to hotkeys - new class
CycleHotkeyLabel
(subclass ofLabel
) allows users to cycle through a list of options by pressing a hotkey - new class
ToggleHotkeyLabel
(subclass ofCycleHotkeyLabel
) toggles betweenOn
andOff
states - new class
WrappedLabel
(subclass ofLabel
) provides autowrapping of text - new class
TooltipLabel
(subclass ofWrappedLabel
) provides tooltip-like behavior
- unset values in
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 textcxxrandom
: added usage exampleslua-string
: document DFHack string extensions (startswith()
,endswith()
,split()
,trim()
,wrap()
, andescape_pattern()
)quickfort-blueprint-guide
: added screenshots to the Dreamfort case study and overall clarified textremote-client-libs
: add new Rust client libraryLua API.rst
: addedisHidden(unit)
,isFortControlled(unit)
,getOuterContainerRef(unit)
,getOuterContainerRef(item)
DFHack 0.47.05-r4
This release features extensive improvements to the blueprint
plugin and related gui/blueprint
frontend, along with continued improvements to quickfort
and the large-scale full-fort dreamfort
blueprint set.
DFHack 0.47.05-r4
Fixes
blueprint
:- fixed passing incorrect parameters to
gui/blueprint
when you runblueprint gui
with optional params - key sequences for constructed walls and down stairs are now correct
- fixed passing incorrect parameters to
exportlegends
: fix issue where birth year was outputted as birth secondsquickfort
:- 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 flag - don'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-here
,tiletypes-here-point
: 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 usingbuildingplan
to plan the constructionsblueprint
:- 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
parameter - generated 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
- all blueprint phases are now written to a single file, using
dig-now
: no longer leaves behind a designated tile when a tile was designated beneath a tile designated for channelinggui/blueprint
:- support the new
--splitby
and--format
options forblueprint
- hide help text when the screen is too short to display it
- support the new
orders
: addedlist
subcommand to show existing exported ordersquickfort-library-guide
: added light aquifer tap and pump stack blueprints (with step-by-step usage guides) to the quickfort blueprint libraryquickfort
:- 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 scripts - by default, don't designate tiles for digging that have masterwork engravings on them. quality level to preserve is configurable with the new
--preserve-engravings
param - implement 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 option - blueprints can now be rotated, flipped, and shifted via
transform
andshift
markers in meta blueprints or the corresponding commandline options
quickfort
,dfhack-examples-guide
: Dreamfort blueprint set improvements based on playtesting and feedback. includes updated profession definitions.
Removed
digfort
: please usequickfort
insteadfortplan
: please usequickfort
instead
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
DFHack 0.47.05-r3
New Plugins
dig-now
: instantly completes dig designations (including smoothing and carving tracks)
New Scripts
autonick
: gives dwarves unique nicknamesbuild-now
: instantly completes planned building constructionsdo-job-now
: makes a job involving current selection high priorityprioritize
: automatically boosts the priority of current and/or future jobs of specified types, such as hauling food, tanning hides, or pulling leversreveal-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 events - Lua:
memscan.field_offset()
: fixed an issue causingdevel/export-dt-ini
to crash sometimes, especially on Windows autofarm
: autofarm will now count plant growths as well as plants toward its thresholdsautogems
: no longer assigns gem cutting jobs to workshops with gem cutting prohibited in the workshop profiledevel/export-dt-ini
: fixed incorrect vtable address on Windowsquickfort
:- 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 changedbuildingplan
: now displays which items are attached and which items are still missing for planned buildingsdevel/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 fields - added option
-nopointers
to disable printing values with memory addresses - added option
-alignto
to set the value column's alignment - added options
-oneline
and alias-1
to avoid using two lines for fields with metadata - added 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.
dorf_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.) aslua
andgui/gm-editor
dorf_tables
: integrateddevel/query
to show the table definitions when requested with-list
geld
: fixed-help
optiongui/gm-editor
: made search case-insensitiveorders
:- 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 #1921 and #1925 - accept multiple commands, list numbers, and/or blueprint lables on a single commandline
- Dreamfort blueprint set improvements: extensive revision based on playtesting and feedback. includes updated
tailor
: allow user to specify which materials to be used, and in what ordertiletypes-here
,tiletypes-here-point
: add--cursor
and--quiet
options to support non-interactive use casesunretire-anyone
: replaced the 'undead' descriptor with 'reanimated' to make it more mod-friendlywarn-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
dfhack-examples-guide
: documentation for all ofdreamfort
's supporting files (useful for all forts, not just Dreamfort!)quickfort-library-guide
: updated dreamfort documentation and added screenshots
DFHack 0.47.05-r2
DFHack 0.47.05-r2
New Scripts
clear-webs
: removes all webs on the map and/or frees any webbed creaturesdevel/block-borders
: overlay that displays map block bordersdevel/luacov
: generate code test coverage reports for script development. Define theDFHACK_ENABLE_LUACOV=1
environment variable to start gathering coverage metrics.fix/drop-webs
: causes floating webs to fall to the groundgui/blueprint
: interactive frontend for theblueprint
plugin (with mouse support!)gui/mass-remove
: mass removal/suspension tool for buildings and constructionsreveal-hidden-sites
: exposes all undiscovered sitesset-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 requested - fixed 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
- fixed an issue where planned constructions designated with DF's sizing keys (
color-schemes
: fixed an error in theregister
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 correctlydwarfvet
: fixed a crash that could occur with hospitals overlapping with other buildings in certain waysembark-assistant
: fixed faulty early exit in first search attempt when searching for waterfallsgui/advfort
: fixed an issue where starting a workshop job while not standing at the center of the workshop required advancing time manuallygui/unit-info-viewer
: fixed size description displaying unrelated values instead of sizeorders
: fixed crash when importing orders with malformed IDsquickfort
:- 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
modelines - changed 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
blueprints - fixed 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 windowquickfortress.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.
- made
devel/annc-monitor
: addedreport enable|disable
subcommand to filter combat reportsembark-assistant
: slightly improved performance of surveying and improved code a littlegui/advfort
: added workshop name to workshop UIquickfort
:- 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 position - added 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 handlingstonesense
: sped up startup timetweak
hide-priority: changed so that priorities stay hidden (or visible) when exiting and re-entering the designations menuunretire-anyone
: the historical figure selection list now includes theSYN_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 it - Added
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 met - Unit 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 separators reveal
: now exposesunhideFlood(pos)
functionality to Luaxlsxreader
: added Lua class wrappers for the xlsxreader plugin APIargparse.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-options - now detects when required arguments to long-form options are missing
- now returns negative numbers (e.g.
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
:- idenfitied 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