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. 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
, orgui/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 ingui/blueprint
orgui/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.
- You can now move the cursor around in DFHack text fields in
devel/query
:- inform the user when a query has been truncated due to
--maxlength
being hit. - increased default maxlength value from 257 to 2048
- inform the user when a query has been truncated due to
do-job-now
: new global keybinding for boosting the priority of the jobs associated with the selected building/work order/unit/item etc.: Alt-Ndwarf-op
: replaces [ a b c ] option lists with a,b,c option listsgui/gm-unit
: don't clear the list filter when you adjust a skill valuegui/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 newgui/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 withorders list
and import them with, for example,orders import library/basic
prioritize
: newdefaults
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!prospect
: 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 <quickfort-blueprint-guide>
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.05fix/diplomats
: DF bug 3295 fixed in 0.40.05fix/fat-dwarves
: DF bug 5971 fixed in 0.40.05fix/feeding-timers
: DF bug 2606 is fixed in 0.40.12fix/merchants
: DF bug that prevents humans from making trade agreements has been fixedgui/assign-rack
: No longer useful in current DF versionsgui/hack-wish
: Replaced bygui/create-item
gui/no-dfhack-init
: No longer useful since players don't have to create their owndfhack.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 usingfastdwarf
)
Lua
- Added
dfhack.screen.hideGuard()
: exposes the C++Screen::Hide
to Lua - History: 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
- new
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
timed_event
: identifylayer_id
ui_advmode
: identify several fields as containing coordinatesui
: identify actual contents ofunk5b88
fieldunitst
: 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
modding-guide
- Group DFHack tools by
tag <tools>
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.