github DFHack/dfhack 50.09-r3rc1
DFHack 50.09-r3rc1

latest releases: 50.14-r1.1, 50.14-r1, 50.13-r5...
pre-release15 months ago

Q: How do I download DFHack?

A: Either add to your Steam library from our Steam page or scroll to the latest release on our GitHub releases page, expand the "Assets" list, and download the file for your platform (e.g. dfhack-XX.XX-rX-Windows-64bit.zip.


This release is compatible with all distributions of Dwarf Fortress: Steam, Itch, and Classic.

Please report any issues (or feature requests) on the DFHack GitHub issue tracker. When reporting issues, please upload a zip file of your savegame and a zip file of your mods directory to the cloud and add links to the GitHub issue. Make sure your files are downloadable by "everyone with the link". We need your savegame to reproduce the problem and test the fix, and we need your active mods so we can load your savegame. Issues with savegames and mods attached get fixed first!

Announcements

Linux support!, PSAs

Linux support!

Both DF and DFHack now run natively on Linux. If you're on Linux, we encourage you to try it! The interface is noticeably snappier, FPS is up, and load times are reduced. If you're subscribed to DF and DFHack on Steam, here's how to switch over:

  • In the Steam client, open the properties for Dwarf Fortress
  • In the "Betas" section, switch to the "beta" branch
  • Let that finish updating
  • Select the "Compatibility" section and deselect "Force the use of a specific Steam Play compatibility tool"
  • DF should update again with the Linux native version

You can tell if you did it right (and sometimes Steam gets stuck somewhere along the way and you have to fiddle with it) if you no longer have Dwarf Fortress.exe in your DF directory and instead have dwarfort, which is the Linux binary. The plan is to "officially" release Linux support with DF 50.10, so once DF 50.10 comes out, you should be able to switch back to the default Steam branch and keep the native Linux support.

Then, do the same thing for DFHack. switching to the "beta" branch (if you're not there already) and turning off the compatibility layer.

Major caveat for this beta release

This particular beta release of Dwarf Fortress has address layout randomization enabled. This causes some trouble for DFHack since DFHack needs to know the memory addresses of several key data structures. For this release only, be sure to start DF by launching DFHack from the Steam client or by running the ./dfhack commandline startup script. That will normalize the address space and allow DF to run with DFHack. Otherwise, DF will crash on startup. Again, this is only for this release. Future releases will not need this workaround and should go back to allowing you to start DF from either the Dwarf Fortress or DFHack Steam client entries, or from either the ./dwarfort or ./dfhack commandline commands.

The DFHack terminal console works differently on Linux

You can run DF with DFHack by starting DFHack in the Steam client. However, if you want an external DFHack terminal console, you have to run from the commandline.

On Windows, you could use the show command to pop up an external DFHack terminal console. You could use this for running DFHack commands from outside the game window, and the external terminal is the only way to run commandline-interactive DFHack commands like tiletypes and the interactive mode of the lua interpreter.

Linux has a different method of providing a terminal console. You can't spawn it dynamically like you can on Windows. You have to start DF from the commandline, and the terminal from which you ran ./dwarfort becomes the terminal console. This should be a familiar process to many Linux users (most Linux commands work this way), but the change is jarring if you're not expecting it. We're also looking into providing a virtual console that doesn't depend on an existing system console so you can still get a console even if you run from Steam, but that work is far from being completed.

You can still launch DFHack from Steam if you want to. Many tools log information and errors to the console, though, so if you run into strange issues, it might be useful to try running from the commandline to see if there is diagnostic output there that can help you.

PSAs

As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.

Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".

The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" 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 in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.

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 by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.

Highlights

Squad assignment search and sort, animal assignment screens, exportlegends UI integration, hide UI elements

Search and sort for squad assignment screen

When you bring up the screen to assign units to squads, there are now widgets for searching and sorting. The default sort is by "best melee skill", but you can choose from a variety of relevant ascending or descending sorting orders.

You can also search. Searching matches either the unit name or a skill that the unit has. Sorting by "leadership" shows units that have any leadership-related abilities, like teaching and military tactics training, but if you just want to see dwarves with military tactics training, search for "tactics".

There have already been many good suggestions for additional sorting options, which we'll try to get into a future beta/release.

Animal assignment

The "Assign to pasture" screen released in the previous DFHack version has been expanded and generalized to support cages, restraints, and pits/ponds. Please tell us if you have any additional needs for animal assignment that those screens don't meet!

One-click UI integration for exportlegends

exportlegends now sports a new integration with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click!

Onscreen HUD getting in your way? Hide it!

hide-interface hides all the vanilla UI elements for clean screenshots or distraction-free fortress watching. Even with the interface hidden, you can still pause/unpause the game with spacebar and move around the map with the keyboard or mouse. Hide that cluster of urgent notifications bubbles for a while and just enjoy watching your citizens scurry around : )

Generated release notes

New tools, fixes, and improvements

New Tools

  • devel/scan-vtables: Scan and dump likely vtable addresses (for memory research)
  • hide-interface: hide the vanilla UI elements for clean screenshots or laid-back fortress observing

New Features

  • exportlegends: new overlay that integrates with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click!
  • sort: search and sort for squad assignment screen
  • zone: advanced unit assignment screens for cages, restraints, and pits/ponds

Fixes

  • Core:
    • reload scripts in mods when a world is unloaded and immediately loaded again
    • fix text getting added to DFHack text entry widgets when Alt- or Ctrl- keys are hit
  • caravan:
    • Correct price adjustment values in trade agreement details screen
    • Apply both import and export trade agreement price adjustments to items being both bought or sold to align with how vanilla DF calculates prices
  • orders: prevent import/export overlay from appearing on the create workorder screen
  • starvingdead: ensure sieges end properly when undead siegers starve
  • suspendmanager:
    • Fix the overlay enabling/disabling suspendmanager unexpectedly
    • Improve the detection on "T" and "+" shaped high walls

Misc Improvements

  • Surround DFHack-specific UI elements with square brackets instead of red-yellow blocks for better readability
  • devel/lsmem: added support for filtering by memory addresses and filenames
  • hotkeys: don't display DFHack logo in legends mode since it covers up important interface elements. the Ctrl-Shift-C hotkey to bring up the menu and the mouseover hotspot still function, though.
  • sort: animals are now sortable by race on the assignment screens
  • suspendmanager: display a different color for jobs suspended by suspendmanager

API

  • RemoteFortressReader: add a force_reload option to the GetBlockList RPC API to return blocks regardless of whether they have changed since the last request
  • Items::getValue(): remove caravan_buying parameter since the identity of the selling party doesn't actually affect the item value

Lua

  • dfhack.items.getValue(): remove caravan_buying param as per C++ API change
  • dfhack.screen.readTile(): now populates extended tile property fields (like top_of_text) in the returned Pen object
  • new(): improved error handling so that certain errors that were previously uncatchable (creating objects with members with unknown vtables) are now catchable with pcall()
  • widgets.BannerPanel: panel with distinctive border for marking DFHack UI elements on otherwise vanilla screens
  • widgets.Panel: new functions to override instead of setting corresponding properties (useful when subclassing instead of just setting attributes): onDragBegin, onDragEnd, onResizeBegin, onResizeEnd

Structures

  • Added global_table global and corresponding global_table_entry type
  • viewscreen_legendsst: realign structure
  • viewscreen_new_arenast: added (first appeared in 50.06, probably)

Don't miss a new dfhack release

NewReleases is sending notifications on new releases.