Skip to content

Releases: DFHack/dfhack

DFHack 0.47.05-r4

10 Mar 18:07
Compare
Choose a tag to compare

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 run blueprint gui with optional params
    • key sequences for constructed walls and down stairs are now correct
  • exportlegends: fix issue where birth year was outputted as birth seconds
  • quickfort:
    • 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 using buildingplan to plan the constructions
  • blueprint:
    • 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 to blueprint
    • 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
  • dig-now: no longer leaves behind a designated tile when a tile was designated beneath a tile designated for channeling
  • gui/blueprint:
    • support the new --splitby and --format options for blueprint
    • hide help text when the screen is too short to display it
  • orders: added list subcommand to show existing exported orders
  • quickfort-library-guide: added light aquifer tap and pump stack blueprints (with step-by-step usage guides) to the quickfort blueprint library
  • quickfort:
    • 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 and shift 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 use quickfort instead
  • fortplan: please use quickfort 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 name
  • unit.enemy: fix definition of enemy_status_slot and add combat_side_id

DFHack 0.47.05-r3

04 Sep 18:39
1295633
Compare
Choose a tag to compare

DFHack 0.47.05-r3

New Plugins

  • dig-now: instantly completes dig designations (including smoothing and carving tracks)

New Scripts

  • autonick: gives dwarves unique nicknames
  • build-now: instantly completes planned building constructions
  • do-job-now: makes a job involving current selection high priority
  • prioritize: automatically boosts the priority of current and/or future jobs of specified types, such as hauling food, tanning hides, or pulling levers
  • reveal-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 the alt modifier state is not stuck on for systems that don't send standard keyup events in response to alt-tab window manager events
  • Lua: memscan.field_offset(): fixed an issue causing devel/export-dt-ini to crash sometimes, especially on Windows
  • autofarm: autofarm will now count plant growths as well as plants toward its thresholds
  • autogems: no longer assigns gem cutting jobs to workshops with gem cutting prohibited in the workshop profile
  • devel/export-dt-ini: fixed incorrect vtable address on Windows
  • quickfort:
    • 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 changed
  • buildingplan: now displays which items are attached and which items are still missing for planned buildings
  • devel/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.) as lua and gui/gm-editor
  • dorf_tables: integrated devel/query to show the table definitions when requested with -list
  • geld: fixed -help option
  • gui/gm-editor: made search case-insensitive
  • orders:
    • 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
  • tailor: allow user to specify which materials to be used, and in what order
  • tiletypes-here, tiletypes-here-point: add --cursor and --quiet options to support non-interactive use cases
  • unretire-anyone: replaced the 'undead' descriptor with 'reanimated' to make it more mod-friendly
  • warn-starving: added an option to only check sane dwarves

API

  • The Items module moveTo* and remove 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 the iterable (a table or iterable userdata) with the iterator_fn (pairs if not otherwise specified) if iteration is possible. If iteration is not possible or would throw an error, for example if nil is passed as the iterable, the iteration is just silently skipped.

Structures

  • cursed_tomb: new struct type
  • job_item: identified several fields
  • ocean_wave_maker: new struct type
  • worldgen_parms: moved to new struct type

Documentation

  • dfhack-examples-guide: documentation for all of dreamfort's supporting files (useful for all forts, not just Dreamfort!)
  • quickfort-library-guide: updated dreamfort documentation and added screenshots

DFHack 0.47.05-r2

10 Jul 02:15
dde5899
Compare
Choose a tag to compare

DFHack 0.47.05-r2

New Scripts

  • clear-webs: removes all webs on the map and/or frees any webbed creatures
  • devel/block-borders: overlay that displays map block borders
  • devel/luacov: generate code test coverage reports for script development. Define the DFHACK_ENABLE_LUACOV=1 environment variable to start gathering coverage metrics.
  • fix/drop-webs: causes floating webs to fall to the ground
  • gui/blueprint: interactive frontend for the blueprint plugin (with mouse support!)
  • gui/mass-remove: mass removal/suspension tool for buildings and constructions
  • reveal-hidden-sites: exposes all undiscovered sites
  • set-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
  • color-schemes: fixed an error in the register subcommand when the DF path contains certain punctuation characters
  • command-prompt: fixed issues where overlays created by running certain commands (e.g. gui/liquids, gui/teleport) would not update the parent screen correctly
  • dwarfvet: fixed a crash that could occur with hospitals overlapping with other buildings in certain ways
  • embark-assistant: fixed faulty early exit in first search attempt when searching for waterfalls
  • gui/advfort: fixed an issue where starting a workshop job while not standing at the center of the workshop required advancing time manually
  • gui/unit-info-viewer: fixed size description displaying unrelated values instead of size
  • orders: fixed crash when importing orders with malformed IDs
  • quickfort:
    • 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 the dfhack-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 window
  • quickfortress.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 and name parameters optional. depth now defaults to 1 (current level only) and name 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.
  • devel/annc-monitor: added report enable|disable subcommand to filter combat reports
  • embark-assistant: slightly improved performance of surveying and improved code a little
  • gui/advfort: added workshop name to workshop UI
  • quickfort:
    • 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 handling
  • stonesense: sped up startup time
  • tweak hide-priority: changed so that priorities stay hidden (or visible) when exiting and re-entering the designations menu
  • unretire-anyone: the historical figure selection list now includes the SYN_NAME (necromancer, vampire, etc) of figures where applicable

API

  • Added dfhack.maps.getPlantAtTile(x, y, z) and dfhack.maps.getPlantAtTile(pos), and updated dfhack.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 just test
  • 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 boundaries
    • string:trim() removes whitespace characters from the beginning and end of the string
    • string:split(delimiter, plain) splits a string with the given delimiter and returns a table of substrings. if plain is specified and set to true, 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 exposes unhideFlood(pos) functionality to Lua
  • xlsxreader: added Lua class wrappers for the xlsxreader plugin API
  • argparse.processArgsGetopt() (previously utils.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 GNU getopt as a marker to treat all further parameters as non-options
    • now detects when required arguments to long-form options are missing
  • gui.dwarfmode: new function: enterSidebarMode(sidebar_mode, max_esc) which uses keypresses to get into the specified sidebar mode from whatever the current screen is
  • gui.Painter: fixed error when calling viewport() method

Structures

  • Identified remaining rhythm beat enum values
  • ui_advmode.interactions: identified some fields related to party members
  • ui_advmode_menu: identified several enum items
  • ui_advmode:
    • idenfitied several fields
    • renamed wait to rest_mode and changed to an enum with correct values
  • viewscreen_legendsst.cur_page: added missing Books enum item, which fixes some other values

Documentation

DFHack 0.47.05-r1

06 Mar 20:18
032cd64
Compare
Choose a tag to compare

DFHack 0.47.05-r1

Fixes

  • confirm: stopped exposing alternate names when convicting units
  • embark-assistant: fixed bug in soil depth determination for ocean tiles
  • orders: don't crash when importing orders with malformed JSON
  • prospector: improved pre embark rough estimates, particularly for small clusters
  • quickfort: raw numeric quickfort-dig-priorities (e.g. 3, which is a valid shorthand for d3) now works when used in .xlsx blueprints

Misc Improvements

  • autohauler: allowed the Alchemist labor to be enabled in manipulator and other labor screens so it can be used for its intended purpose of flagging that no hauling labors should be assigned to a dwarf. Before, the only way to set the flag was to use an external program like Dwarf Therapist.
  • embark-assistant: slightly improved performance of surveying
  • gui/no-dfhack-init: clarified how to dismiss dialog that displays when no dfhack.init file is found
  • quickfort:
    • Dreamfort blueprint set improvements: significant refinements across the entire blueprint set. Dreamfort is now much faster, much more efficient, and much easier to use. The checklist now includes a mini-walkthrough for quick reference. The spreadsheet now also includes embark profile suggestions
    • added aliases for configuring masterwork and artifact core quality for all stockpile categories that have them; made it possible to take from multiple stockpiles in the quantumstop alias
    • an active cursor is no longer required for running #notes blueprints (like the dreamfort walkthrough)
    • you can now be in any mode with an active cursor when running #query blueprints (before you could only be in a few "approved" modes, like look, query, or place)
    • refined #query blueprint sanity checks: cursor should still be on target tile at end of configuration, and it's ok for the screen ID to change if you are destroying (or canceling destruction of) a building
    • now reports how many work orders were added when generating manager orders from blueprints in the gui dialog
    • added --dry-run option to process blueprints but not change any game state
    • you can now specify the number of desired barrels, bins, and wheelbarrows for individual stockpiles when placing them
    • quickfort orders on a #place blueprint will now enqueue manager orders for barrels, bins, or wheelbarrows that are explicitly set in the blueprint.
    • you can now add alias definitions directly to your blueprint files instead of having to put them in a separate aliases.txt file. makes sharing blueprints with custom alias definitions much easier.
    • new commandline options for setting the initial state of the gui dialog. for example: quickfort gui -l dreamfort notes will start the dialog filtered for the dreamfort walkthrough blueprints

Structures

  • Dropped support for 0.47.03-0.47.04
  • Identified scattered enum values (some rhythm beats, a couple of corruption unit thoughts, and a few language name categories)
  • viewscreen_loadgamest: renamed cur_step enumeration to match style of viewscreen_adopt_regionst and viewscreen_savegamest
  • viewscreen_savegamest: identified cur_step enumeration

Documentation

  • digfort: added deprecation warnings - digfort has been replaced by quickfort
  • fortplan: added deprecation warnings - fortplan has been replaced by quickfort

DFHack 0.47.05-beta1

11 Feb 03:36
49b6e81
Compare
Choose a tag to compare
DFHack 0.47.05-beta1 Pre-release
Pre-release

DFHack 0.47.05-beta1

This is a beta release for DF 0.47.05. Not many things appear to have changed since 0.47.04, but let us know right away of any problems you encounter with 0.47.05 specifically.

Fixes

  • embark-assistant: fixed bug in soil depth determination for ocean tiles
  • orders: don't crash when importing orders with malformed JSON
  • quickfort: raw numeric quickfort-dig-priorities (e.g. 3, which is a valid shorthand for d3) now works when used in .xlsx blueprints

Misc Improvements

  • quickfort: new commandline options for setting the initial state of the gui dialog. for example: quickfort gui -l dreamfort notes will start the dialog filtered for the dreamfort walkthrough blueprints

Structures

  • Dropped support for 0.47.03-0.47.04

DFHack 0.47.04-r5

31 Jan 06:19
d2f3ec6
Compare
Choose a tag to compare

DFHack 0.47.04-r5

New Scripts

  • gui/quickfort: fast access to the quickfort interactive dialog
  • workorder-recheck: resets the selected work order to the Checking state

Fixes

  • embark-assistant:
    • fixed order of factors when calculating min temperature
    • improved performance of surveying
  • quickfort:
    • fixed eventual crashes when creating zones
    • fixed library aliases for tallow and iron, copper, and steel weapons
    • zones are now created in the active state by default
    • solve rare crash when changing UI modes
  • search: fixed crash when searching the k sidebar and navigating to another tile with certain keys, like < or >
  • seedwatch: fixed an issue where the plugin would disable itself on map load
  • stockflow: fixed j character being intercepted when naming stockpiles
  • stockpiles: no longer outputs hotkey help text beneath stockflow hotkey help text

Misc Improvements

  • Lua label widgets (used in all standard message boxes) are now scrollable with Up/Down/PgUp/PgDn keys
  • autofarm: now fallows farms if all plants have reached the desired count
  • buildingplan:
    • added ability to set global settings from the console, e.g. buildingplan set boulders false
    • added "enable all" option for buildingplan (so you don't have to enable all building types individually). This setting is not persisted (just like quickfort_mode is not persisted), but it can be set from onMapLoad.init
    • modified Planning Mode status in the UI to show whether the plugin is in quickfort mode, "enable all" mode, or whether just the building type is enabled.
  • quickfort:
    • Dreamfort blueprint set improvements: added a streamlined checklist for all required dreamfort commands and gave names to stockpiles, levers, bridges, and zones
    • added aliases for bronze weapons and armor
    • added alias for tradeable crafts
    • new blueprint mode: #ignore, useful for scratch space or personal notes
    • implement {Empty} keycode for use in quickfort aliases; useful for defining blank-by-default alias values
    • more flexible commandline parsing allowing for more natural parameter ordering (e.g. where you used to have to write quickfort list dreamfort -l you can now write quickfort list -l dreamfort)
    • print out blueprint names that a #meta blueprint is applying so it's easier to understand what meta blueprints are doing
    • whitespace is now allowed between a marker name and the opening parenthesis in blueprint modelines. for example, #dig start (5; 5) is now valid (you used to be required to write #dig start(5; 5))

Lua

  • dfhack.run_command(): changed to interface directly with the console when possible, which allows interactive commands and commands that detect the console encoding to work properly
  • processArgsGetopt() added to utils.lua, providing a callback interface for parameter parsing and getopt-like flexibility for parameter ordering and combination (see docs in library/lua/utils.lua and library/lua/3rdparty/alt_getopt.lua for details).

Structures

  • job: identified order_id field

Documentation

  • Added documentation for Lua's dfhack.run_command() and variants

DFHack 0.47.04-r4

24 Dec 19:30
eb6957a
Compare
Choose a tag to compare

DFHack 0.47.04-r4

New Scripts

  • fix/corrupt-equipment: fixes some military equipment-related corruption issues that can cause DF crashes

Fixes

  • Fixed an issue on some Linux systems where DFHack installed through a package manager would attempt to write files to a non-writable folder (notably when running exportlegends or gui/autogems)
  • adaptation: fixed handling of units with no cave adaptation suffered yet
  • assign-goals: fixed error preventing new goals from being created
  • assign-preferences: fixed handling of preferences for flour
  • buildingplan:
    • fixed an issue preventing artifacts from being matched when the maximum item quality is set to artifacts
    • stopped erroneously matching items to buildings while the game is paused
    • fixed a crash when pressing 0 while having a noble room selected
  • deathcause: fixed an error when inspecting certain corpses
  • dwarfmonitor: fixed a crash when opening the prefs screen if units have vague preferences
  • dwarfvet: fixed a crash that could occur when discharging patients
  • embark-assistant:
    • fixed an issue causing incursion resource matching (e.g. sand/clay) to skip some tiles if those resources were provided only through incursions
    • corrected river size determination by performing it at the MLT level rather than the world tile level
  • quickfort:
    • fixed handling of modifier keys (e.g. {Ctrl} or {Alt}) in query blueprints
    • fixed misconfiguration of nest boxes, hives, and slabs that were preventing them from being built from build blueprints
    • fixed valid placement detection for floor hatches, floor grates, and floor bars (they were erroneously being rejected from open spaces and staircase tops)
    • fixed query blueprint statistics being added to the wrong metric when both a query and a zone blueprint are run by the same meta blueprint
    • added missing blueprint labels in gui dialog list
    • fixed occupancy settings for extent-based structures so that stockpiles can be placed within other stockpiles (e.g. in a checkerboard or bullseye pattern)
  • search: fixed an issue where search options might not display if screens were destroyed and recreated programmatically (e.g. with quickfort)
  • unsuspend: now leaves buildingplan-managed buildings alone and doesn't unsuspend underwater tasks
  • workflow: fixed an error when creating constraints on "mill plants" jobs and some other plant-related jobs
  • zone: fixed an issue causing the enumnick subcommand to run when attempting to run assign, unassign, or slaughter

Misc Improvements

  • buildingplan:
    • added support for all buildings, furniture, and constructions (except for instruments)
    • added support for respecting building job_item filters when matching items, so you can set your own programmatic filters for buildings before submitting them to buildingplan
    • changed default filter setting for max quality from artifact to masterwork
    • changed min quality adjustment hotkeys from 'qw' to 'QW' to avoid conflict with existing hotkeys for setting roller speed - also changed max quality adjustment hotkeys from 'QW' to 'AS' to make room for the min quality hotkey changes
    • added a new global settings page accessible via the G hotkey when on any building build screen; Quickfort Mode toggle for legacy Python Quickfort has been moved to this page
    • added new global settings for whether generic building materials should match blocks, boulders, logs, and/or bars - defaults are everything but bars
  • devel/export-dt-ini: updated for Dwarf Therapist 41.2.0
  • embark-assistant: split the lair types displayed on the local map into mound, burrow, and lair
  • gui/advfort: added support for linking to hatches and pressure plates with mechanisms
  • modtools/add-syndrome: added support for specifying syndrome IDs instead of names
  • probe: added more output for designations and tile occupancy
  • quickfort:
    • The Dreamfort sample blueprints now have complete walkthroughs for each fort level and importable orders that automate basic fort stock management
    • added more blueprints to the blueprints library: several bedroom layouts, the Saracen Crypts, and the complete fortress example from Python Quickfort: TheQuickFortress
    • query blueprint aliases can now accept parameters for dynamic expansion - see dfhack-config/quickfort/aliases.txt for details
    • alias names can now include dashes and underscores (in addition to letters and numbers)
    • improved speed of first call to quickfort list significantly, especially for large blueprint libraries
    • added query_unsafe setting to disable query blueprint error checking - useful for query blueprints that send unusual key sequences
    • added support for bookcases, display cases, and offering places (altars)
    • added configuration support for zone pit/pond, gather, and hospital sub-menus in zone blueprints
    • removed buildings_use_blocks setting and replaced it with more flexible functionality in buildingplan
    • added support for creating uninitialized stockpiles with :kbd:c

API

  • buildingplan: added Lua interface API
  • Buildings::setSize(): changed to reuse existing extents when possible
  • dfhack.job.isSuitableMaterial(): added an item type parameter so the non_economic flag can be properly handled (it was being matched for all item types instead of just boulders)

Lua

  • utils.addressof(): fixed for raw userdata

Structures

  • building_extents_type: new enum, used for building_extents.extents
  • world_mountain_peak: new struct (was previously inline) - used in world_data.mountain_peaks

Documentation

DFHack 0.47.04-r3

10 Oct 23:13
b343d00
Compare
Choose a tag to compare

This release includes a new Quickfort implementation by @myk002 - feedback is welcome, and please let us know of any issues you encounter in the issue tracker.

DFHack 0.47.04-r3

New Plugins

  • xlsxreader: provides an API for Lua scripts to read Excel spreadsheets

New Scripts

  • quickfort: DFHack-native implementation of quickfort with many new features and integrations - see the quickfort user guide for details
  • timestream: controls the speed of the calendar and creatures
  • uniform-unstick: prompts units to reevaluate their uniform, by removing/dropping potentially conflicting worn items

Fixes

  • ban-cooking: fixed an error in several subcommands

  • buildingplan: fixed handling of buildings that require buckets

  • getplants: fixed a crash that could occur on some maps

  • search: fixed an issue causing item counts on the trade screen to display inconsistently when searching

  • stockpiles:

    • fixed an error when saving furniture stockpiles
    • fixed a crash when loading food stockpiles

Misc Improvements

  • createitem:

    • added an inspect subcommand to print the item and material tokens of existing items, which can be used to create additional matching items
    • added support for plant growths (fruit, berries, leaves, etc.)
  • embark-assistant: added support for searching for taller waterfalls (up to 50 z-levels tall)

  • search: added support for searching for names containing non-ASCII characters using their ASCII equivalents

  • stocks: added support for searching for items containing non-ASCII characters using their ASCII equivalents

  • unretire-anyone: made undead creature names appear in the historical figure list

  • zone:

    • added slaughter indication to uinfo output
    • added an enumnick subcommand to assign enumerated nicknames (e.g "Hen 1", "Hen 2"...)

API

  • Added DFHack::to_search_normalized() (Lua: dfhack.toSearchNormalized()) to convert non-ASCII alphabetic characters to their ASCII equivalents

Structures

  • history_event_masterpiece_createdst: fixed alignment, including subclasses, and identified skill_at_time
  • item_body_component: fixed some alignment issues and identified some fields (also applies to subclasses like item_corpsest)
  • stockpile_settings: removed furniture.sand_bags (no longer present)

Documentation

  • Fixed syntax highlighting of most code blocks to use the appropriate language (or no language) instead of Python

DFHack 0.47.04-r2

09 Aug 02:53
f2b0f01
Compare
Choose a tag to compare

DFHack 0.47.04-r2

New Scripts

  • animal-control: helps manage the butchery and gelding of animals
  • devel/kill-hf: kills a historical figure
  • geld: gelds or ungelds animals
  • list-agreements: lists all guildhall and temple agreements
  • list-waves: displays migration wave information for citizens/units
  • ungeld: ungelds animals (wrapper around geld)

New Tweaks

  • tweak do-job-now: adds a job priority toggle to the jobs list
  • tweak reaction-gloves: adds an option to make reactions produce gloves in sets with correct handedness

Fixes

  • Fixed a segfault when attempting to start a headless session with a graphical PRINT_MODE setting

  • Fixed an issue with the macOS launcher failing to un-quarantine some files

  • Fixed Units::isEggLayer, Units::isGrazer, Units::isMilkable, Units::isTrainableHunting, Units::isTrainableWar, and Units::isTamable ignoring the unit's caste

  • Linux: fixed dfhack.getDFPath() (Lua) and Process::getPath() (C++) to always return the DF root path, even if the working directory has changed

  • digfort:

    • fixed an issue causing blueprints touching the southern or eastern edges of the map to be rejected (northern and western edges were already allowed). This allows blueprints that span the entire embark area.
    • fixed y-line tracking when .csv files contain lines with only commas
  • embark-assistant: fixed a couple of incursion handling bugs.

  • embark-skills: fixed an issue with structures causing the points option to do nothing

  • exportlegends:

    • stopped including some tags with -1 values which don't provide useful information
    • fixed an issue where two different <reason> tags could be included in a <historical_event>
  • getplants: fixed issues causing plants to be collected even if they have no growths (or unripe growths)

  • gui/advfort: fixed "operate pump" job

  • gui/load-screen: fixed an issue causing longer timezones to be cut off

  • labormanager:

    • fixed an issue preventing custom furnaces from being built
    • fixed handling of new jobs in 0.47
  • modtools/moddable-gods:

    • made -depictedAs argument work
    • removed unused -domain and -description arguments
    • fixed an error when creating the historical figure
  • names:

    • fixed an issue causing renamed units to display their old name in legends mode and some other places
    • fixed an error preventing the script from working
  • pref-adjust: fixed some compatibility issues and a potential crash

  • RemoteFortressReader:

    • fixed an issue that could cause block coordinates to be incorrect
    • fixed a couple crashes that could result from decoding invalid enum items (site_realization_building_type and improvement_type)
  • rendermax: fixed a hang that could occur when enabling some renderers, notably on Linux

  • stonesense:

    • fixed some issues that could cause the splash screen to hang
    • fixed a crash when launching Stonesense

Misc Improvements

  • Linux/macOS: Added console keybindings for deleting words (Alt+Backspace and Alt+d in most terminals)

  • add-recipe:

    • added a command explanation or error message when entering an invalid command
    • added tool recipes (minecarts, wheelbarrows, stepladders, etc.)
  • armoks-blessing: added adjustments to values and needs

  • blueprint:

    • now automatically creates folder trees when organizing blueprints into subfolders (e.g. blueprint 30 30 1 rooms/dining dig will create the file blueprints/rooms/dining-dig.csv); previously it would fail if the blueprints/rooms/ directory didn't already exist
    • now writes blueprints to the blueprints/ subfolder instead of the df root folder
  • confirm: added a confirmation dialog for convicting dwarves of crimes

  • devel/query: added many new query options

  • digfort:

    • added a force option to truncate blueprints if the full blueprint would extend off the edge of the map
    • documented that removing ramps, cutting trees, and gathering plants are indeed supported
    • handled double quotes (") at the start of a string, allowing .csv files exported from spreadsheets to work without manual modification
  • dwarf-op:

    • added ability to protect dwarves based on symbols in their custom professions
    • added ability to select dwarves based on migration wave
  • exportlegends:

    • added ability to save all files to a subfolder, named after the region folder and date by default
    • changed some enum values from numbers to their string representations
    • changed some flags to be represented by self-closing tags instead of true/false strings (e.g. <is_volcano/>) - note that this may require changes to other XML-parsing utilities
  • gui/advfort: added support for specifying the entity used to determine available resources

  • gui/gm-editor: added support for automatically following ref-targets when pressing the i key

  • manipulator: added a new column option to display units' goals

  • modtools/moddable-gods: added support for neuter gender

  • pref-adjust:

    • added a new goth profile
    • added support for adjusting just the selected dwarf
  • remove-stress: added a -value argument to enable setting stress level directly

  • workorder: changed default frequency from "Daily" to "OneTime"

API

  • Added Filesystem::mkdir_recursive
  • Extended Filesystem::listdir_recursive to optionally make returned filenames relative to the start directory
  • Units: added goal-related functions: getGoalType(), getGoalName(), isGoalAchieved()

Internals

  • Added support for splitting scripts into multiple files in the scripts/internal folder without polluting the output of ls

Lua

  • Added a ref_target field to primitive field references, corresponding to the ref-target XML attribute
  • Made dfhack.units.getRaceNameById(), dfhack.units.getRaceBabyNameById(), and dfhack.units.getRaceChildNameById() available to Lua

Ruby

  • Updated item_find and building_find to use centralized logic that works on more screens

Structures

  • Added a new <df-other-vectors-type>, which allows world.*.other collections of vectors to use the correct subtypes for items
  • creature_raw: renamed gender to sex to match the field in unit, which is more frequently used
  • crime: identified witnesses, which contains the data held by the old field named reports
  • intrigue: new type (split out from historical_figure_relationships)
  • items_other_id: removed BAD, and by extension, world.items.other.BAD, which was overlapping with world.items.bad
  • job_type: added job types new to 0.47
  • plant_raw: material_defs now contains arrays rather than loose fields
  • pronoun_type: new enum (previously documented in field comments)
  • setup_character_info: fixed a couple alignment issues (needed by embark-skills)
  • ui_advmode_menu: identified some new enum items

Documentation

  • Added some new dev-facing pages, including dedicated pages about the remote API, memory research, and documentation
  • Expanded the installation guide
  • Made a couple theme adjustments

DFHack 0.47.04-r1

26 Apr 16:42
Compare
Choose a tag to compare

DFHack 0.47.04-r1

New Scripts

  • color-schemes: manages color schemes
  • devel/print-event: prints the description of an event by ID or index
  • devel/sc: checks size of structures
  • devel/visualize-structure: displays the raw memory of a structure
  • gui/color-schemes: an in-game interface for color-schemes
  • light-aquifers-only: changes heavy aquifers to light aquifers
  • on-new-fortress: runs DFHack commands only in a new fortress
  • once-per-save: runs DFHack commands unless already run in the current save
  • resurrect-adv: brings your adventurer back to life
  • reveal-hidden-units: exposes all sneaking units
  • workorder: allows queuing manager jobs; smart about shear and milk creature jobs

Fixes

  • Fixed a crash in find() for some types when no world is loaded

  • Fixed a crash when starting DFHack in headless mode with no terminal

  • Fixed translation of certain types of in-game names

  • autogems: fixed an issue with binned gems being ignored in linked stockpiles

  • catsplosion: fixed error when handling races with only one caste (e.g. harpies)

  • deep-embark:

    • prevented running in non-fortress modes
    • ensured that only the newest wagon is deconstructed
  • devel/visualize-structure: fixed padding detection for globals

  • exportlegends:

    • added UTF-8 encoding and XML escaping for more fields
    • added checking for unhandled structures to avoid generating invalid XML
    • fixed missing fields in history_event_assume_identityst export
  • full-heal:

    • when resurrected by specifying a corpse, units now appear at the location of the corpse rather than their location of death
    • resurrected units now have their tile occupancy set (and are placed in the prone position to facilitate this)
    • fixed issues with removing corpses
    • fixed resurrection for non-historical figures
  • spawnunit: fixed an error when forwarding some arguments but not a location to modtools/create-unit

  • stocks: fixed display of book titles

  • teleport: fixed setting new tile occupancy

  • tweak embark-profile-name: fixed handling of the native shift+space key

Misc Improvements

  • Added "bit" suffix to downloads (e.g. 64-bit)

  • Tests:

    • moved from DF folder to hack/scripts folder, and disabled installation by default
    • made test runner script more flexible
  • deep-embark:

    • improved support for using directly from the DFHack console
    • added a -clear option to cancel
  • devel/export-dt-ini: updated some field names for DT for 0.47

  • devel/visualize-structure: added human-readable lengths to containers

  • dfhack-run: added color output support

  • embark-assistant:

    • updated embark aquifer info to show all aquifer kinds present
    • added neighbor display, including kobolds (SKULKING) and necro tower count
    • updated aquifer search criteria to handle the new variation
    • added search criteria for embark initial tree cover
    • added search criteria for necro tower count, neighbor civ count, and specific neighbors. Should handle additional entities, but not tested
  • exportlegends:

    • added evilness and force IDs to regions
    • added profession and weapon info to relevant entities
    • added support for many new history events in 0.47
    • added historical event relationships and supplementary data
    • made interaction export more robust and human-readable
    • removed empty <item_subtype> and <claims> tags
    • added identity information
    • added creature raw names and flags
  • full-heal:

    • made resurrection produce a historical event viewable in Legends mode
    • made error messages more explanatory
  • getplants: added switches for designations for farming seeds and for max number designated per plant

  • gui/prerelease-warning: updated links and information about nightly builds

  • install-info: added DFHack build ID to report

  • manipulator: added intrigue to displayed skills

  • modtools/create-item: added -matchingGloves and -matchingShoes arguments

  • modtools/create-unit:

    • added -duration argument to make the unit vanish after some time
    • added -locationRange argument to allow spawning in a random position within a defined area
    • added -locationType argument to specify the type of location to spawn in
    • added -equip option to equip created units
    • added -skills option to give skills to units
    • added -profession and -customProfession options to adjust unit professions
  • modtools/syndrome-trigger: enabled simultaneous use of -synclass and -syndrome

  • repeat: added -list option

  • search: added support for the fortress mode justice screen

  • dfhack.init-example: enabled autodump

API

  • Added Items::getBookTitle to get titles of books. Catches titles buried in improvements, unlike getDescription.

Internals

  • Added separate changelogs in the scripts and df-structures repos
  • Improved support for tagged unions, allowing tools to access union fields more safely
  • Moved reversing scripts to df_misc repo

Lua

  • pairs() now returns available class methods for DF types

Structures

  • Added an XML schema for validating df-structures syntax

  • Added globals: cur_rain, cur_rain_counter, cur_snow, cur_snow_counter, weathertimer, jobvalue, jobvalue_setter, interactitem, interactinvslot, handleannounce, preserveannounce, updatelightstate

  • Added divination_set_next_id and image_set_next_id globals

  • Dropped support for 0.44.12-0.47.02

  • abstract_building_type: added types (and subclasses) new to 0.47

  • activity_entry_type: new enum type

  • adventure_optionst: identified many vmethods

  • agreement_details_data_plot_sabotage: new struct type, along with related agreement_details_type.PlotSabotage

  • agreement_details_type: added enum

  • agreement_details:

    • identified most fields of most sub-structs
    • added struct type (and many associated data types)
  • agreement_party: added struct type

  • announcement_type: added types new to 0.47

  • architectural_element: new enum

  • artifact_claim_type: added enum

  • artifact_claim:

    • identified several fields
    • added struct type
  • artifact_record: identified several fields

  • battlefield: new struct type

  • breath_attack_type: added SHARP_ROCK

  • breed: new struct type

  • building_offering_placest: new class

  • building_type: added OfferingPlace

  • caste_raw_flags:

    • renamed and identified many flags to match information from Toady
    • renamed many items to match DF names
  • creature_handler: identified vmethods

  • creature_interaction_effect: added subclasses new to 0.47

  • creature_raw_flags:

    • renamed and identified many flags to match information from Toady
    • renamed many items to match DF names
    • identified several more items
  • crime_type: new enum type

  • crime: removed fields of reports that are no longer present

  • dfhack_room_quality_level: added enum attributes for names of rooms of each quality

  • d_init: added settings new to 0.47

  • entity_name_type: added MERCHANT_COMPANY, CRAFT_GUILD

  • entity_position_responsibility: added values new to 0.47

  • entity_site_link_type: new enum type

  • export_map_type: new enum type

  • fortress_type: added enum

  • general_ref_type: added UNIT_INTERROGATEE

  • ghost_type: added None value

  • goal_type: added goals types new to 0.47

  • histfig_site_link: added subclasses new to 0.47

  • historical_entity.flags: identified several flags

  • historical_entity.relations: renamed from unknown1b and identified several fields

  • historical_figure.vague_relationships: identified

  • historical_figure_info.known_info: renamed from secret, identified some fields

  • historical_figure: renamed unit_id2 to nemesis_id

  • history_event_circumstance_info: new struct type (and changed several history_event subclasses to use this)

  • history_event_collection: added subtypes new to 0.47

  • history_event_context:

    • identified fields
    • added lots of new fields
  • history_event_reason_info: new struct type (and changed several history_event subclasses to use this)

  • history_event_reason:

    • added items new to 0.47
    • added captions for all items
  • history_event_type: added types for events new to 0.47, as well as corresponding history_event subclasses (too many to list here)

  • honors_type:

    • identified several fields
    • added struct type
  • identity_type: new enum

  • identity: renamed civ to entity_id, identified type

  • image_set: new struct type

  • interaction_effect_create_itemst: new struct type

  • interaction_effect_summon_unitst: new struct type

  • interaction_effect: added subtypes new to 0.47

  • interaction_source_experimentst: added class type

  • interaction_source_usage_hint: added values new to 0.47

  • interface_key: added items for keys new to 0.47

  • interrogation_report: new struct type

  • itemdef_flags: new enum, with GENERATED flag

  • item: identified several vmethods

  • job_skill: added INTRIGUE, RIDING

  • justification: new enum

  • lair_type: added enum

  • layer_type: new enum type

  • lever_target_type: identified LeverMechanism and TargetMechanism values

  • monument_type: added enum

  • next_global_id: added enum

  • plant.damage_flags: added is_dead

  • plot_role_type: new enum type

  • plot_strategy_type: new enum type

  • poetic_form_action: added Beseech

  • region_weather: new struct type

  • relationship_event_supplement: new struct type

  • relationship_event: new struct type

  • setup_character_info: expanded ...

Read more