Skip to content

DFHack 50.07-r1

Compare
Choose a tag to compare
@myk002 myk002 released this 13 Apr 21:31
· 3001 commits to develop since this release
f7e3973

Q: How do I download DFHack?

A: Either add to your Steam library from our Steam page or scroll down to the bottom of this post, expand the "Assets" list, and download the dfhack-50.07-r1-Windows-64bit.zip file.


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!

What the heck is DFHack?

Project goals, team members, community contributions

This is DFHack's first stable release for Dwarf Fortress in the v50 era, so many of you will be reading the release notes for the first time. A little background is in order.

DFHack is an add-on for Dwarf Fortress that enables mods and tools to significantly extend the game. The default DFHack distribution contains a wide variety of these tools, including bugfixes, interface improvements, automation agents, design blueprints, modding building blocks, and more. Third-party tools (e.g. mods downloaded from Steam Workshop or the forums) can also seamlessly integrate with the DFHack framework and extend the game far beyond what can be done by just modding the raws.

DFHack’s mission is to provide tools and interfaces for players and modders to:

  • expand the bounds of what is possible in Dwarf Fortress
  • reduce the impact of game bugs
  • give the player more agency and control over the game
  • provide alternatives to toilsome or frustrating aspects of gameplay
  • make the game more fun

The DFHack team members (and our primary roles and pronouns) are:

  • Lethosor (team lead, he/him)
  • myk002 (developer, community lead, he/him)
  • ab9rf (reverse engineer, she/her)
  • Quietust (reverse engineer, he/him)
  • BenLubar (operations engineer, any/all)

DFHack also includes contributions from hundreds upon hundreds of community members! The best ways to interact with us are on the DFHack Discord or by filing issues on GitHub. Community contributions to DFHack are very welcome, both for the documentation and for the code. Come talk with us! We are happy to help get you oriented with the development process.

Announcements

DFHack is now available on Steam!, PSAs

DFHack is now available on Steam!

For those who play Dwarf Fortress on Steam, you can now install DFHack through Steam as well! This has the added benefit of letting Steam auto-update DFHack for you. Instead of installing DFHack manually, head over to our Steam page and add DFHack to your library. If you have multiple drives or Steam Library folders, you will need to ensure DFHack is installed to the same location Dwarf Fortress is.

If you'd like to get new DFHack bugfixes and features first and are willing to file GitHub issues for any problems you encounter, please consider subscribing to the beta release channel. We will be depending on beta subscriber feedback to help shape new feature development. Also, by testing the pre-release builds of DFHack, you are helping us make high-quality stable releases. To subscribe to the beta channel, right click on the DFHack app in your steam client, go to Properties, select Betas, and change the dropdown from "None" to "beta - Beta release channel". Thank you! We really appreciate your help with this!

Bringing DFHack to Steam as an official mod was a massive undertaking. We'd like to thank everyone who helped make this happen:

  • Graphic Design: TaxiService, RafaelKB, Rumrusher
  • Steam installation, Steam Deck, and stability testing: AndrielChaoti, Finn!, Robob27, Thalzen, esotericist, TaxiService, Ozzatron, sdegrace, 20k, plule, RafaelKB, Putnam, drhead, Scootieloo, coskerstrike, and 200+ community members on Reddit and elsewhere

Special thanks go out to Kitfox for fielding Steam's questions about DFHack during the build review process, approving us as a community-written DF mod, and working with us every step of the way. You're awesome!

And, of course, a big thank you to Zach and Tarn, without whom we all wouldn't be here, and Putnam, who has had such a large impact on DF already in the short time she's been working with Bay 12.

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 in the DF settings, and you can show it by entering mining mode or selecting the dump/forbid tool. We're working on making DFHack tools more mouse-aware and accessible.

Highlights

Usability improvements, buildingplan, gui/civ-alert, gui/design, mod support

There have been significant advancements since our last stable release (for 0.47.05) last year. Here's a selection of highlights from the top of the top:

Usability improvements

Read the Quickstart guide to get oriented:
quickstart

Browse and run DFHack tools from the launcher:
launcher

Enable the general strike bug fix in gui/control-panel:
general-strike

There's a lot to talk about here! DFHack now has a fully-functional windowing system, where DFHack tool windows can be dragged, resized, and focused/unfocused for keyboard input. There are also new in-game UIs for discovering and managing DFHack tools and features. gui/launcher gives you access to all DFHack tools, with autocomplete and in-game help text (with examples for each command!). gui/control-panel is your one shop shop for toggling DFHack features and setting preferences. The DFHack logo in the upper left corner of the screen gives you quick access to tools associated with the current game context.

Hover the mouse over the DFHack logo and select the Quickstart Guide for a quick walkthrough about how to use DFHack in DF. You can also read the guide online.

Buildingplan

Easily plan out buildings before you have materials with buildingplan:
buildingplan_screw_pump

DFHack's buildingplan plugin allows you to place furniture, constructions, and other buildings, regardless of whether the required materials are available. This allows you to focus purely on design elements when you are laying out your fort, and defer item production concerns to a more convenient time. It monitors your stocks of available building materials and attaches new items to the buildings so they can be built. You can set filters on your building materials to be sure that when items are attached, they meet your specific needs. For example, you can plan out walls that are guaranteed to be a consistent color and screw pumps that are guaranteed to be magma safe.

gui/civ-alert

Keep your civilians safe during sieges:
civ-alert

In vanilla DF, assigning a unit to a burrow is treated more like a suggestion than a command. This can be frustrating when you're assigning units to burrows in order to get them out of danger. In contrast, triggering a civilian alert with gui/civ-alert will cause all your non-military citizens to immediately rush to a burrow ASAP and stay there. This gives you a way to keep your civilians safe when there is danger about.

You'll notice an extra panel on the Squads menu (the one that shows up on the right side of the screen when you hit q) that prompts you to configure a burrow to use for the civ alert. Get it set up, and when danger comes a-knockin', hit that Big Red Button!

gui/design

Lay down designs with gui/design:
design

The vanilla designation interface does fine when you want to draw in solid rectangles, but gui/design allows you to take your fortress layouts to the next level. Draw patterns and shapes with thick or thin lines! Take a carefully drawn design and stamp it multiple times! Flip and rotate your designations around! Move your designations to a better spot on the map! Oh, and it can do rectangles too.

Mod and 3rd party script support

Scripts within mods now work automatically. No more manual copying of scripts after "installation". This allows everything from single scripts to total conversion mods that add new scripted gameplay elements to work seamlessly, straight from the DF Steam Workshop. See the DFHack modding guide for details. You can also subscribe to the example Workshop mod to see a real example of how to distribute scripts from the Steam Workshop (though the format is applicable to mods distributed via non-Steam means as well).

Generated release notes

New tools, fixes, and improvements

New Plugins

  • autoslab: automatically create work orders to engrave slabs for ghostly dwarves
  • faststart: speeds up the "Loading..." screen so the Main Menu appears faster
  • getplants: designate trees for chopping and shrubs for gathering according to type
  • prospector: get stone, ore, gem, and other tile property counts in fort mode.

New Scripts

  • allneeds: list all unmet needs sorted by how many dwarves suffer from them.
  • autofish: auto-manage fishing labors to control your stock of fish
  • combine: combines stacks of food and plant items.
  • devel/tile-browser: page through available textures and see their texture ids
  • fix/civil-war: removes negative relations with own government
  • fix/general-strike: fix known causes of the general strike bug (contributed by Putnam)
  • fix/protect-nicks: restore nicknames when DF loses them
  • forbid: forbid and list forbidden items on the map
  • gui/autochop: configuration frontend and status monitor for the autochop plugin
  • gui/autofish: GUI config and status panel interface for autofish
  • gui/automelt: GUI config and status panel interface for automelt
  • gui/civ-alert: configure and trigger civilian alerts
  • gui/control-panel: quick access to DFHack configuration
  • gui/design: digging and construction designation tool with shapes and patterns
  • gui/seedwatch: GUI config and status panel interface for seedwatch
  • gui/suspendmanager: graphical configuration interface for suspendmanager
  • gui/unit-syndromes: browser for syndrome information
  • makeown: makes the selected unit a citizen of your fortress
  • suspendmanager: automatic job suspension management (replaces autounsuspend)
  • suspend: suspends building construction jobs

Fixes

  • 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.
  • autodump: changed behaviour to only change dump and forbid flags if an item is successfully dumped.
  • blueprint: interpret saplings, shrubs, and twigs as floors instead of walls
  • build-now:
    • now correctly avoids adjusting non-empty tiles above constructions that it builds
    • don't error on constructions that do not have an item attached
  • buildingplan:
    • upright spike traps are now placed extended rather than retracted
    • you can no longer designate constructions on tiles with magma or deep water, mirroring the vanilla restrictions
  • catsplosion: now only affects live, active units
  • combine: fix error processing stockpiles with boundaries that extend outside of the map
  • devel/query: can now properly index vectors in the --table argument
  • dig-now: fixed multi-layer channel designations only channeling every second layer
  • getplants: trees are now designated correctly
  • gui/launcher: tab characters in command output now appear as a space instead of a code page 437 "blob"
  • make-legendary: "MilitaryUnarmed" option now functional
  • orders: library/military now sticks to vanilla rules and does not add orders for normally-mood-only platinum weapons. A new library orders file library/military_include_artifact_materials is now offered as an alternate library/military set of orders that still includes the platinum weapons.
  • quickfort: allow floor bars, floor grates, and hatches to be placed over all stair types like vanilla allows
  • showmood properly count required number of bars and cloth when they aren't the main item for the strange mood
  • stockpiles: fix crash when importing settings for gems from other worlds
  • tailor:
    • properly discriminate between dyed and undyed cloth
    • take queued orders into account when calculating available materials
    • skip units who can't wear clothes
    • identify more available items as available, solving issues with over-production
    • block making clothing sized for toads; make replacement clothing orders use the size of the wearer, not the size of the garment
    • now respects the setting of the "used dyed clothing" standing order toggle
  • warn-starving:
    • no longer warns for dead units
    • no longer warns for enemy and neutral units
  • Buildings::StockpileIterator: fix check for stockpile items on block boundary.
  • dfhack.job.isSuitableMaterial: now properly detects lack of fire and magma safety for vulnerable materials with high melting points
  • Units::isFortControlled: Account for agitated wildlife
  • widgets.WrappedLabel: no longer resets scroll position when window is moved or resized

Misc Improvements

  • Core: hide DFHack terminal console by default when running on Steam Deck
  • DFHack tool windows that capture mouse clicks (and therefore prevent you from clicking on the "pause" button) now unconditionally pause the game when they open (but you can still unpause with the keyboard if you want to). Examples of this behavior: gui/quickfort, gui/blueprint, gui/liquids
  • Mods: scripts in mods are now automatically added to the DFHack script path. DFHack recognizes two directories in a mod's folder: scripts_modinstalled/ and scripts_modactive/. scripts_modinstalled/ folders will always be added the script path, regardless of whether the mod is active in a world. scripts_modactive/ folders will only be added to the script path when the mod is active in the current loaded world.
  • 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
  • autobutcher:
    • logs activity to the console terminal instead of making disruptive in-game announcements
    • changed defaults from 5 females / 1 male to 4 females / 2 males so a single unfortunate accident doesn't leave players without a mating pair
    • now immediately loads races available at game start into the watchlist
  • autodump: new hotkey for autodump-destroy-here: Ctrl-H
  • automelt:
    • now allows metal chests to be melted (workaround for DF bug 2493 is no longer needed)
    • stockpile configuration can now be set from the commandline
  • autounsuspend: now saves its state with your fort
  • ban-cooking:
    • ban announcements are now hidden by default; use new option --verbose to show them.
    • report number of items banned.
  • blueprint-library-guide:
    • library blueprints have moved from blueprints to hack/data/blueprints
    • player-created blueprints should now go in the dfhack-config/blueprints folder. please move your existing blueprints from blueprints to dfhack-config/blueprints. you don't need to move the library blueprints -- those can be safely deleted from the old blueprints directory.
  • blueprint: now writes blueprints to the dfhack-config/blueprints directory
  • build-now: now handles dirt roads and initializes farm plots properly
  • buildingplan:
    • can now filter by cloth and silk materials (for ropes)
    • filters and global settings are now ignored when manually choosing items for a building, allowing you to make custom choices independently of the filters that would otherwise be used
    • if suspendmanager is running, then planned buildings will be left suspended when their items are all attached. suspendmanager will unsuspsend them for construction when it is safe to do so.
    • add option for autoselecting the last manually chosen item (like automaterial used to do)
    • entirely new UI for building placement, item selection, and materials filtering!
  • caravan: add trade screen overlay that assists with seleting groups of items and collapsing groups in the UI
  • channel-safely: new monitoring for cave-in prevention
  • combine:
    • you can select a target stockpile in the UI instead of having to use the keyboard cursor
    • added --quiet option for no output when there are no changes
  • confirm:
    • adds confirmation for removing burrows via the repaint menu
    • configuration data is now persisted globally.
  • devel/click-monitor: report on middle mouse button actions
  • devel/inspect-screen: updated for new rendering semantics and can now also inspect map textures
  • devel/query: will now search for jobs at the map coordinate highlighted, if no explicit job is highlighted and there is a map tile highlighted
  • devel/visualize-structure: now automatically inspects the contents of most pointer fields, rather than inspecting the pointers themselves
  • dig-now: added handling of dig designations that have been converted into active jobs
  • emigration: now saves its state with your fort
  • enable: can now interpret aliases defined with the alias command
  • exterminate:
    • add support for vaporize kill method for when you don't want to leave a corpse
    • added drown method. magma and drown methods will now clean up liquids automatically.
  • getplants: ID values will now be accepted regardless of case
  • gui/control-panel:
    • bugfix services are now enabled by default
    • new global hotkey for quick access: Ctrl-Shift-E
    • Now detects overlays from scripts named with capital letters
  • gui/cp437-table:
    • now has larger key buttons and clickable backspace/submit/cancel buttons, making it fully usable on the Steam Deck and other systems that don't have an accessible keyboard
    • dialog is now fully controllable with the mouse, including highlighting which key you are hovering over and adding a clickable backspace button
    • converted to a movable, mouse-enabled window
  • gui/create-item:
    • added ability to spawn 'whole' corpsepieces (every layer of a part)
    • support spawning corpse pieces (e.g. shells) under "body part"
    • added search and filter capabilities to the selection lists
    • added whole corpse spawning alongside corpsepieces. (under "corpse")
  • gui/gm-editor:
    • can now jump to material info objects from a mat_type reference with a mat_index using i
    • they key column now auto-fits to the widest key
    • can now open the selected stockpile if run without parameters
    • will now inspect a selected building itself if the building has no current jobs
    • now supports multiple independent data inspection windows
    • now prints out contents of coordinate vars instead of just the type
    • converted to a movable, resizable, mouse-enabled window
  • gui/gm-unit: converted to a movable, resizable, mouse-enabled window
  • gui/launcher:
    • sped up initialization time for faster window appearance
    • make command output scrollback separate from the help text so players can continue to see the output of the previous command as they type the next one
    • allow double spacebar to pause/unpause the game, even while typing a command
    • clarify what is being shown in the autocomplete list (all commands, autocompletion of partially typed command, or commands related to typed command)
    • support running commands directly from the autocomplete list via double-clicking
    • 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
  • gui/liquids: interface overhaul, also now allows spawning river sources, setting/adding/removing liquid levels, and cleaning water from being salty or stagnant
  • gui/overlay: now focuses on repositioning overlay widgets; enabling, disabling, and getting help for overlay widgets has moved to the new gui/control-panel
  • gui/quickcmd:
    • now has its own global keybinding for your convenience: Ctrl-Shift-A
    • converted to a movable, resizable, mouse-enabled window
    • commands are now stored globally so you don't have to recreate commands for every fort
  • gui/quickfort: don't close the window when applying a blueprint so players can apply the same blueprint multiple times more easily
  • hotkeys: overlay hotspot widget now shows the DFHack logo in graphics mode and "DFHack" in text mode
  • locate-ore: now only searches revealed tiles by default
  • misery: now persists state with the fort
  • modtools/spawn-liquid: sets tile temperature to stable levels when spawning water or magma
  • nestboxes: now saves enabled state in your savegame
  • orders:
    • add minimize button to overlay panel so you can get it out of the way to read long statue descriptions when choosing a subject in the details screen
    • add option to delete exported files from the import dialog
    • orders plugin functionality is now accessible via an overlay widget when the manager orders screen is open
  • prioritize:
    • revise and simplify the default list of prioritized jobs -- be sure to tell us if your forts are running noticeably better (or worse!)
    • now automatically starts boosting the default list of job types when enabled
    • now saves its state with your fort
  • quickfort: now reads player-created blueprints from dfhack-config/blueprints/ instead of the old blueprints/ directory. Be sure to move over your personal blueprints to the new directory!
  • rejuvenate: now takes an --age parameter to choose a desired age.
  • script-paths: removed "raw" directories from default script paths. now the default locations to search for scripts are dfhack-config/scripts, save/*/scripts, and hack/scripts
  • seedwatch: now persists enabled state in the savegame, automatically loads useful defaults, and respects reachability when counting available seeds
  • showmood: now shows the number of items needed for cloth and bars in addition to the technically correct but always confusing "total dimension" (150 per bar or 10,000 per cloth)
  • stockpiles:
    • support applying stockpile configurations with fully enabled categories to stockpiles in worlds other than the one where the configuration was exported from
    • support partial application of a saved config based on dynamic filtering (e.g. disable all tallow in a food stockpile, even tallow from world-specific generated creatures)
    • additive and subtractive modes when applying a second stockpile configuration on top of a first
    • write player-exported stockpile configurations to the dfhack-config/stockpiles folder. If you have any stockpile configs in other directories, please move them to that folder.
    • now includes a library of useful stockpile configs (see docs for details)
  • stonesense: added an INVERT_MOUSE_Z option to invert the mouse wheel direction
  • stripcaged:
    • added --skip-forbidden option for greater control over which items are marked for dumping
    • items that are marked for dumping are now automatically unforbidden (unless --skip-forbidden is set)
  • tailor: add support for adamantine cloth (off by default); improve logging
  • troubleshoot-item:
    • output as bullet point list with indenting, with item description and ID at top
    • reports on items that are hidden, artifacts, in containers, and held by a unit
    • reports on the contents of containers with counts for each contained item type
  • unforbid: avoids unforbidding unreachable and underwater items by default
  • unsuspend:
    • overlay now displays different letters for different suspend states so they can be differentiated in graphics mode (P=planning, x=suspended, X=repeatedly suspended)
    • overlay now shows a marker all the time when in graphics mode. ascii mode still only shows when paused so that you can see what's underneath.
  • init.d: directories have moved from the raw subfolder (which no longer exists) to the root of the main DF folder or a savegame folder

Removed

  • Ruby is no longer a supported DFHack scripting language
  • autohauler: no plans to port to v50, as it just doesn't make sense with the new work detail system
  • automaterial: all functionality has been merged into buildingplan
  • autounsuspend: replaced by suspendmanager
  • combine-drinks: replaced by combine
  • combine-plants: replaced by combine
  • create-items: replaced by gui/create-item --multi
  • show-unit-syndromes: replaced by gui/unit-syndromes; html export is no longer supported
  • fix-job-postings from the workflow plugin is now obsolete since affected savegames can no longer be loaded

API

  • Gui focus strings will no longer get the "dfhack/" prefix if the string "dfhack/" already exists in the focus string
  • Units module: added new predicates for isGeldable(), isMarkedForGelding(), and isPet()
  • overlay: overlay widgets can now specify a default enabled state if they are not already set in the player's overlay config file
  • Buildings::containsTile(): no longer takes a room parameter since that's not how rooms work anymore. If the building has extents, the extents will be checked. otherwise, the result just depends on whether the tile is within the building's bounding box.
  • Gui::any_civzone_hotkey, Gui::getAnyCivZone, Gui::getSelectedCivZone: new functions to operate on the new zone system
  • Gui::getDFViewscreen: returns the topmost underlying DF viewscreen
  • Gui::getDwarfmodeDims: now only returns map viewport dimensions; menu dimensions are obsolete
  • Lua::Push: now supports std::unordered_map
  • Maps::GetBiomeTypeRef renamed to Maps::getBiomeTypeRef for consistency
  • Maps::GetBiomeType renamed to Maps::getBiomeType for consistency
  • Military:
    • New module for military functionality
    • new makeSquad to create a squad
    • changed getSquadName to take a squad identifier
    • new updateRoomAssignments for assigning a squad to a barracks and archery range
  • Screen::Pen:
    • now accepts top_of_text and bottom_of_text properties to support offset text in graphics mode
    • now accepts keep_lower and write_to_lower properties to support foreground and background textures in graphics mode
  • Units::getCitizens(): gets a list of citizens, which otherwise you'd have to iterate over all units the world to discover

Lua

  • added two new window borders: gui.BOLD_FRAME for accented elements and gui.INTERIOR_MEDIUM_FRAME for a signature-less frame that's thicker than the existing gui.INTERIOR_FRAME
  • Removed os.execute() and io.popen() built-in functions
  • helpdb:
    • new function: helpdb.refresh() to force a refresh of the database. Call if you are a developer adding new scripts, loading new plugins, or changing help text during play
    • changed from auto-refreshing every 60 seconds to only refreshing on explicit call to helpdb.refresh(). docs very rarely change during a play session, and the automatic database refreshes were slowing down the startup of gui/launcher and anything else that displays help text.
  • overlay:
    • overlay widgets can now specify focus paths for the viewscreens they attach to so they only appear in specific contexts. see overlay-dev-guide for details.
    • OverlayWidget now inherits from Panel instead of Widget to get all the frame and mouse integration goodies
  • tiletypes: now has a Lua API! tiletypes_setTile
  • dfhack.gui.getDFViewscreen(): returns the topmost underlying DF viewscreen
  • dfhack.gui.getSelectedCivZone: returns the Zone that the user has selected currently
  • dfhack.job.attachJobItem(): allows you to attach specific items to a job
  • dfhack.screen.paintTile(): you can now explicitly clear the interface cursor from a map tile by passing 0 as the tile value
  • dfhack.units.getCitizens(): gets a list of citizens
  • gui.CLEAR_PEN: now clears the background and foreground and writes to the background (before it would always write to the foreground)
  • gui.KEEP_LOWER_PEN: a general use pen that writes associated tiles to the foreground while keeping the existing background
  • gui.View:
    • visible and active can now be functions that return a boolean
    • new function view:getMouseFramePos() for detecting whether the mouse is within (or over) the exterior frame of a view
  • gui.ZScreen: Screen subclass that implements window raising, multi-viewscreen input handling, and viewscreen event pass-through so the underlying map can be interacted with and dragged around while DFHack screens are visible
  • maps.getBiomeType: exposed preexisting function to Lua
  • widgets.CycleHotkeyLabel:
    • options that are bare integers will no longer be interpreted as the pen color in addition to being the label and value
    • option labels and pens can now be functions that return a label or pen
    • add label_below attribute for compact 2-line output
    • Added key_back optional parameter to cycle backwards.
    • now supports rendering option labels in the color of your choice
    • new functions setOption() and getOptionPen()
  • widgets.FilteredList:
    • Added edit_on_change optional parameter to allow a custom callback on filter edit change.
    • Added case_sensitive optional paramter to determine if filtering is case sensitive.
  • widgets.HotkeyLabel:
    • Added setLabel method to allow easily updating the label text without mangling the keyboard shortcut.
    • Added setOnActivate method to allow easily updating the on_activate callback.
  • widgets.Label:
    • tokens can now specify a htile property to indicate the tile that should be shown when the Label is hovered over with the mouse
    • click handlers no longer get the label itself as the first param to the click handler
    • token tile properties can now be functions that return a value
    • label.scroll() now understands home and end keywords for scrolling to the top or bottom
    • token tile properties can now be either pens or numeric texture ids
    • tiles can now have an associated width
  • widgets.List: new callbacks for double click and shift double click
  • widgets.Panel: new attributes to control window dragging and resizing with mouse or keyboard
  • widgets.TabBar: new library widget (migrated from control-panel.lua)
  • widgets.ToggleHotkeyLabel: now renders the On option in green text
  • widgets.Window: Panel subclass with attributes preset for top-level windows

Structures

  • add "hospital" language name category
  • added missing tiletypes and corrected a few old ones based on a list supplied by Toady
  • correct bit size of tree body data
  • corrected alignment in world.status
  • corrected misalignment in historical_entity
  • corrected misalignment in unitst (affecting occupation and adjective)
  • identified fields for squads and other military structures
  • identified fields in deep_vein_hollow, glowing_barrier, and cursed_tomb map events
  • identified some anons in unitst related to textures (thanks, putnam)
  • identified two fields related to saves/autosaves to facilitate quicksave implementation
  • identified two old and one new language name groups
  • identified divine_treasure and encased_horror map events
  • identify a table of daily events scheduled to take place inthe current year
  • identify item vmethod 213 (applies a thread improvements to appropriate items based on an RNG)
  • identify two anons in difficultyst
  • identify various data types related to job completion/cancellation
  • partially identified squad-related structures in plotinfo and corrected position of civ_alert_idx (does not affect alignment)
  • realigned and fleshed out entity_site_link (again, thanks, putnam)
  • realigned furniture_type enum (added BAG)
  • realigned stockpile_settings for new "corpses" vector
  • remove some no-longer-valid reputation types
  • Renamed globals to match DF:
    • ui: renamed to plotinfo
    • ui_advmode: renamed to adventure
    • ui_build_selector: renamed to buildreq
    • ui_sidebar_menus: renamed to game
  • split gamest into gamest and gamest_extra to accommodate steam-specific data in gamest.mod_manager
  • activity_info: unit_actor, unit_noble, and place converted from pointers to integer references.
  • building_civzonest: identify two variables, dir_x and dir_y, that handle archery range direction.
  • building_design: corrected misalignments
  • creature_raw_graphics: corrected misalignments
  • dipscript_popup: meeting_holder converted from unit pointer into two unit refs meeting_holder_actor and meeting_holder_noble.
  • history_eventst: Removed history_event_masterpiece_created_arch_designst and related enum value
  • item.setSharpness(): more info about params
  • occupation_type: add enum values for new occupations related to hospitals
  • plotinfost.equipment: Converted items_unmanifested, items_unassigned, and items_assigned vectors from pointers to item refs
  • plot_infost.unk_8: renamed to theft_intrigues. Fields unk_1 thru unk_8 renamed to target_item, mastermind_hf, mastermind_plot_id, corruptor_hf, corruptor, corruptee_hf, corruptee, and theft_agreement. unk_1 renamed to item_known_pos.
  • specific_ref_type: Removed BUILDING_PARTY, PETINFO_PET, and PETINFO_OWNER enum values to fix alignment.

Documentation

  • added DFHack architecture diagrams to the dev intro
  • added DFHack Quickstart guide
  • the untested tag has been renamed to unavailable to better reflect the status of the remaining unavaialable tools. most of the simply "untested" tools have now been tested and marked as working. the remaining tools are known to need development work before they are available again.
  • compile: instructions added for cross-compiling DFHack for Windows from a Linux Docker builder
  • devel/hello-world: updated to be a better example from which to start new gui scripts
  • installing: updated to include Steam installation instructions
  • modding-guide: guide updated to include information for 3rd party script developers
  • overlay-dev-guide: added troubleshooting tips and common development workflows