Skip to content

Releases: DFHack/dfhack

DFHack 0.47.05-r7

30 Sep 20:33
3f6e92e
Compare
Choose a tag to compare

This is the first usability-focused DFHack release. The major new feature is the in-game command launcher with integrated help, autocomplete, command history (including history search), related tools display, and mouse integration.

You can access the new command launcher by clicking on the "[ DFHack Launcher ]" button in the lower left corner of the screen or by tapping the backquote (`) key. If the backquote key isn't convenient or isn't available for your keyboard layout, there is an alternate hotkey of Ctrl-Shift-D.

You can type part of a command to see autocomplete options. Hit Tab or click on an option to autocomplete. To pull a full commandline from your history, hit Alt-S or click on the "history search" button instead. When you type a command, its help text will be displayed in the large panel at the bottom. Hit Enter or click on the 'run" button to run. That's it! More info on the launcher here (which you can also see in-game when you type "gui/launcher" in the command box : )

From the screenshots, you may notice that text areas now have scrollbars. Click on the arrows at the end to scroll by one line, or on the empty area above or below the green part of the bar to scroll by half pages. You can also click on the command text that you are writing to reposition the cursor for editing.

Many thanks to the community members and beta testers who provided feedback on the launcher! Many of the best usability features were suggested by them! In particular, u/ZergTDG, u/Skitlee5, u/Thebuda, and u/tmPreston. You're awesome! Also D.B. Cooper, Quietust, and everyone else on the DFHack discord who gave feedback throughout development.

DFHack help itself has also been overhauled. More than 300 pages of help text has been reformatted and rewritten to make them more informative, easier to read, and easier to understand. Moreover, all DFHack tools are now tagged so that you can find them easier. Try running the new tags command to explore the categories! These tags also control what is in the list of related tools that appears in the right panel of the launcher when you are running a command.

New stuff

Apart from the aforementioned gui/launcher and tags, there's a bunch of great new stuff in this release:

  • u/wolfboyft wrote the DFHack modding guide, which will get you up to speed if you'd like to explore how to use DFHack to extend your raws modding.
  • run enable gui/kitchen-info to add more info to the Kitchen screen, including what each ingredient is good for besides cooking.
  • Hit "D" on the workorder details screen (where you can, say, set which kind of stone to use for a particular workorder) to get more control over the materials used to fulfill workorder jobs.
  • We finally have a good way to dynamically limit the size of the next migration wave with max-wave and limit growth over time with pop-control (or even enforce a hermit challenge!).
  • Get notified when creatures that may steal your food, drinks, or items become visible (e.g. keas) with warn-stealers.
  • DFHack now comes with a super useful library of manager orders! See them with orders list and import them into your game with orders import. Try orders import library/basic to get a great set of orders for basic fort necessities! More info here.
  • DFHack's implementation of DwarfTherapist (manipulator -- accessible from the u-l screen) now comes with a library of pre-made professions that you can apply to your dwarves. More info here.

We are also working mouse controls into more of the DFHack tools. For example, you can now move the blueprint preview around by clicking on the map when using gui/quickfort. You can interact with the map with the mouse in similar ways when using gui/quantum and gui/blueprint. Expect more mouse capabilities for DFHack tools in the future!

How to upgrade

A few files have moved around in this release, so if you're upgrading an existing installation, please read this section.

  • When upgrading to this release, please remove the dfhack-config/dwarfmonitor.json file. It will get regenerated the next time you run DF. If you don't regenerate this file, the weather indicator (e.g. "Rain") will overlap with the new DFHack button in the lower left corner. If you have custom modifications to this file that you'd like to keep, please merge them back in once the file has been regenerated.
  • DFHack init scripts (dfhack.init, onLoad.init, onMapLoad.init, etc.) have moved into dfhack-config/init/. If you have not made any custom modifications to these files, you don't need to do anything. Default configuration will be generated and used. If you have custom changes, please run DF once to generate the default config files and then move just your custom changes into the corresponding init files. See the docs for details.
  • The history files for the various interactive DFHack commandline tools have moved into dfhack-config/. If you want to keep your command histories, please move your existing *.history files into dfhack-config/. Note that the new gui/launcher interface will make the commands in your old dfhack.history file available for searching even if you never get around to moving that file to the new directory.

And, just like every DFHack release, please remove the hack/ directory in your DF game folder before extracting the new version of DFHack into your DF folder. There were several scripts and other files that were removed in this release. If you don't remove the hack/ directory before upgrading, the old, unusable scripts will clutter the autocomplete list in the command launcher.

Screenshots:
image
image
image
image
image
image
image

DFHack 0.47.05-r7

New Plugins

  • autobutcher: split off from zone into its own plugin. Note that to enable, the command has changed from autobutcher start to enable autobutcher.
  • autonestbox: split off from zone into its own plugin. Note that to enable, the command has changed from autonestbox start to enable autonestbox.
  • overlay: display a "DFHack" button in the lower left corner that you can click to start the new GUI command launcher. The dwarfmonitor weather display had to be moved to make room for the button. If you are seeing the weather indicator rendered over the overlay button, please remove the dfhack-config/dwarfmonitor.json file to fix the weather indicator display offset.

New Scripts

  • gui/kitchen-info: adds more info to the Kitchen screen
  • gui/launcher: in-game command launcher with autocomplete, history, and context-sensitive help
  • gui/workorder-details: adjusts work orders' input item, material, traits
  • max-wave: dynamically limit the next immigration wave, can be set to repeat
  • pop-control: persistent per fortress population cap, hermit, and max-wave management
  • warn-stealers: warn when creatures that may steal your food, drinks, or items become visible

New Internal Commands

  • tags: new built-in command to list the tool category tags and their definitions. tags associated with each tool are visible in the tool help and in the output of ls.

Fixes

  • autochop: designate largest trees for chopping first, instead of the smallest
  • devel/query: fixed error when --tile is specified
  • dig-now: Fix direction of smoothed walls when adjacent to a door or floodgate
  • dwarf-op: fixed error when applying the Miner job to dwarves
  • emigration: fix emigrant logic so unhappy dwarves leave as designed
  • gui/gm-unit: allow + and - to adjust skill values as intended instead of letting the filter intercept the characters
  • gui/unit-info-viewer: fix logic for displaying undead creature names
  • gui/workflow: restore functionality to the add/remove/order hotkeys on the workflow status screen
  • quickfort: Dreamfort <quickfort-blueprint-guide> blueprint set: declare the hospital zone before building the coffer; otherwise DF fails to stock the hospital with materials
  • view-item-info: fixed a couple errors when viewing items without materials
  • dfhack.buildings.findCivzonesAt: no longer return duplicate civzones after loading a save with existing civzones
  • dfhack.run_script: ensure the arguments passed to scripts are always strings. This allows other scripts to call run_script with numeric args and it won't break parameter parsing.
  • job.removeJob(): ensure jobs are removed from the world list when they are canceled

Misc Improvements

  • History files: dfhack.history, tiletypes.history, lua.history, and liquids.history have moved to the dfhack-config directory. I...
Read more

DFHack 0.47.05-r6

18 Jun 04:07
88ae50b
Compare
Choose a tag to compare

DFHack 0.47.05-r6

We have some great new visual tools in this release! gui/petitions gives you a scrollable list of your pending (or previous) petitions. Now you no longer have to remember what deity you just agreed to build a temple for : )
image

gui/quickfort is a brand new UI for Quickfort. You can preview how your blueprint will be applied in the live game map, position it interactively, and see whether the blueprint will be successfully applied before you apply it.
image

and gui/quantum is a point and click interface for setting up quantum stockpiles. It will even manage the minecarts for you!
image

New Scripts

  • assign-minecarts: automatically assign minecarts to hauling routes that don't have one
  • deteriorate: combines, replaces, and extends previous deteriorateclothes, deterioratecorpses, and deterioratefood scripts.
  • gui/petitions: shows petitions. now you can see which guildhall/temple you agreed to build!
  • gui/quantum: point-and-click tool for creating quantum stockpiles
  • gui/quickfort: shows blueprint previews on the live map so you can apply them interactively
  • modtools/fire-rate: allows modders to adjust the rate of fire for ranged attacks

Fixes

  • build-now: walls built above other walls can now be deconstructed like regularly-built walls
  • eventful:
    • fix eventful.registerReaction to correctly pass call_native argument thus allowing canceling vanilla item creation. Updated related documentation.
    • renamed NEW_UNIT_ACTIVE event to UNIT_NEW_ACTIVE to match the EventManager event name
    • fixed UNIT_NEW_ACTIVE event firing too often
  • gui/dfstatus: no longer count items owned by traders
  • gui/unit-info-viewer: fix calculation/labeling of unit size
  • job.removeJob(): fixes regression in DFHack 0.47.05-r5 where items/buildings associated with the job were not getting disassociated when the job is removed. Now build-now can build buildings and gui/mass-remove can cancel building deconstruction again
  • widgets.CycleHotkeyLabel: allow initial option values to be specified as an index instead of an option value

Misc Improvements

  • build-now: buildings that were just designated with buildingplan are now built immediately (as long as there are items available to build the buildings with) instead of being skipped until buildingplan gets around to doing its regular scan
  • caravan: new unload command, fixes endless unloading at the depot by reconnecting merchant pack animals that were disconnected from their owners
  • confirm:
    • added a confirmation dialog for removing manager orders
    • allow players to pause the confirmation dialog until they exit the current screen
  • deteriorate: new now command immediately deteriorates items of the specified types
  • dfhack-examples-guide:
    • refine food preparation orders so meal types are chosen intelligently according to the amount of meals that exist and the number of aviailable items to cook with
    • reduce required stock of dye for "Dye cloth" orders
    • fix material conditions for making jugs and pots
    • make wooden jugs by default to differentiate them from other stone tools. this allows players to more easily select jugs out with a properly-configured stockpile (i.e. the new woodentools alias)
  • list-agreements: now displays translated guild names, worshipped deities, petition age, and race-appropriate professions (e.g. "Craftsdwarf" instead of "Craftsman")
  • quickfort-alias-guide:
    • new aliases: forbidsearch, permitsearch, and togglesearch use the search-plugin plugin to alter the settings for a filtered list of item types when configuring stockpiles
    • new aliases: stonetools and woodentools. the jugs alias is deprecated. please use stonetools instead, which is the same as the old jugs alias.
    • new aliases: usablehair, permitusablehair, and forbidusablehair alter settings for the types of hair/wool that can be made into cloth: sheep, llama, alpaca, and troll. The craftrefuse aliases have been altered to use this alias as well.
    • new aliases: forbidthread, permitthread, forbidadamantinethread, permitadamantinethread, forbidcloth, permitcloth, forbidadamantinecloth, and permitadamantinecloth give you more control how adamantine-derived items are stored
  • quickfort:
    • Dreamfort <quickfort-blueprint-guide> blueprint set improvements: automatically create tavern, library, and temple locations (restricted to residents only by default), automatically associate the rented rooms with the tavern
    • Dreamfort <quickfort-blueprint-guide> blueprint set improvements: new design for the services level, including were-bitten hospital recovery rooms and an appropriately-themed interrogation room next to the jail! Also fits better in a 1x1 embark for minimalist players.
  • workorder: a manager is no longer required for orders to be created (matching bevavior in the game itself)

Removed

  • deteriorateclothes: please use deteriorate --types=clothes instead
  • deterioratecorpses: please use deteriorate --types=corpses instead
  • deterioratefood: please use deteriorate --types=food instead
  • devel/unforbidall: please use unforbid instead. You can silence the output with unforbid all --quiet

API

  • word_wrap: argument bool collapse_whitespace converted to enum word_wrap_whitespace_mode mode, with valid modes WSMODE_KEEP_ALL, WSMODE_COLLAPSE_ALL, and WSMODE_TRIM_LEADING.

Lua

  • gui.View: all View subclasses (including all Widgets) can now acquire keyboard focus with the new View:setFocus() function. See docs for details.
  • materials.ItemTraitsDialog: new dialog to edit item traits (where "item" is part of a job or work order or similar). The list of traits is the same as in vanilla work order conditions "t change traits".
  • widgets.EditField:
    • the key_sep string is now configurable
    • can now display an optional string label in addition to the activation key
    • views that have an EditField subview no longer need to manually manage the EditField activation state and input routing. This is now handled automatically by the new gui.View keyboard focus subsystem.
  • widgets.HotkeyLabel: the key_sep string is now configurable

Structures

  • art_image_elementst: identify vmethod markDiscovered and second parameter for getName2
  • art_image_propertyst: identify parameters for getName
  • building_handler: fix vmethod get_machine_hookup_list parameters
  • vermin: identify category field as new enum
  • world.unk_26a9a8: rename to allow_announcements

DFHack 0.47.05-r5

05 May 04:25
585888c
Compare
Choose a tag to compare

DFHack 0.47.05-r5

New Plugins

  • spectate: "spectator mode" -- automatically follows dwarves doing things in your fort

New Scripts

  • devel/eventful-client: useful for testing eventful events

New Tweaks

  • tweak: partial-items displays percentage remaining for partially-consumed items such as hospital cloth

Fixes

  • autofarm: removed restriction on only planting "discovered" plants
  • cxxrandom: fixed exception when calling bool_distribution
  • devel/query:
    • fixed a problem printing parents when the starting path had lua pattern special characters in it
    • fixed a crash when trying to iterate over linked lists
  • gui/advfort: encrust and stud jobs no longer consume reagents without actually improving the target item
  • luasocket: return correct status code when closing socket connections so clients can know when to retry
  • quickfort: contructions and bridges are now properly placed over natural ramps
  • setfps: keep internal ratio of processing FPS to graphics FPS in sync when updating FPS

Misc Improvements

  • autochop:
    • only designate the amount of trees required to reach max_logs
    • preferably designate larger trees over smaller ones
  • autonick:
    • now displays help instead of modifying dwarf nicknames when run without parameters. use autonick all to rename all dwarves.
    • added --quiet and --help options
  • blueprint:
    • track phase renamed to carve
    • carved fortifications and (optionally) engravings are now captured in generated blueprints
  • cursecheck: new option, --ids prints creature and race IDs of the cursed creature
  • debug:
    • DFHack log messages now have configurable headers (e.g. timestamp, origin plugin name, etc.) via the debugfilter command of the debug plugin
    • script execution log messages (e.g. "Loading script: dfhack_extras.init" can now be controlled with the debugfilter command. To hide the messages, add this line to your dfhack.init file: debugfilter set Warning core script
  • dfhack-examples-guide:
    • add mugs to basic manager orders
    • onMapLoad_dreamfort.init remove "cheaty" commands and new tweaks that are now in the default dfhack.init-example file
  • dig-now: handle fortification carving
  • EventManager:
    • add new event type JOB_STARTED, triggered when a job first gains a worker
    • add new event type UNIT_NEW_ACTIVE, triggered when a new unit appears on the active list
  • gui/blueprint: support new blueprint options and phases
  • gui/create-item: Added "(chain)" annotation text for armours with the [CHAIN_METAL_TEXT] flag set
  • manipulator: tweak colors to make the cursor easier to locate
  • quickfort:
    • support transformations for blueprints that use expansion syntax
    • adjust direction affinity when transforming buildings (e.g. bridges that open to the north now open to the south when rotated 180 degrees)
    • automatically adjust cursor movements on the map screen in #query and #config modes when the blueprint is transformed. e.g. {Up} will be played back as {Right} when the blueprint is rotated clockwise and the direction key would move the map cursor
    • new blueprint mode: #config; for playing back key sequences that don't involve the map cursor (like configuring hotkeys, changing standing orders, or modifying military uniforms)
    • API function apply_blueprint can now take data parameters that are simple strings instead of coordinate maps. This allows easier application of blueprints that are just one cell.
  • stocks: allow search terms to match the full item label, even when the label is truncated for length
  • tweak: stable-cursor now keeps the cursor stable even when the viewport moves a small amount
  • dfhack.init-example: recently-added tweaks added to example dfhack.init file

API

  • add functions reverse-engineered from ambushing unit code: Units::isHidden(), Units::isFortControlled(), Units::getOuterContainerRef(), Items::getOuterContainerRef()

Lua

  • custom-raw-tokens: library for accessing tokens added to raws by mods
  • dfhack.units: Lua wrappers for functions reverse-engineered from ambushing unit code: isHidden(unit), isFortControlled(unit), getOuterContainerRef(unit), getOuterContainerRef(item)
  • dialogs: show* functions now return a reference to the created dialog
  • dwarfmode.enterSidebarMode(): passing df.ui_sidebar_mode.DesignateMine now always results in you entering DesignateMine mode and not DesignateChopTrees, even when you looking at the surface (where the default designation mode is DesignateChopTrees)
  • dwarfmode.MenuOverlay:
    • if sidebar_mode attribute is set, automatically manage entering a specific sidebar mode on show and restoring the previous sidebar mode on dismiss
    • new class function renderMapOverlay to assist with painting tiles over the visible map
  • ensure_key: new global function for retrieving or dynamically creating Lua table mappings
  • safe_index: now properly handles lua sparse tables that are indexed by numbers
  • string: new function escape_pattern() escapes regex special characters within a string
  • widgets:
    • unset values in frame_inset table default to 0
    • FilteredList class now allows all punctuation to be typed into the filter and can match search keys that start with punctuation
    • minimum height of ListBox dialog is now calculated correctly when there are no items in the list (e.g. when a filter doesn't match anything)
    • if autoarrange_subviews is set, Panel\s will now automatically lay out widgets vertically according to their current height. This allows you to have widgets dynamically change height or become visible/hidden and you don't have to worry about recalculating frame layouts
    • new class ResizingPanel (subclass of Panel) automatically recalculates its own frame height based on the size, position, and visibility of its subviews
    • new class HotkeyLabel (subclass of Label) that displays and reacts to hotkeys
    • new class CycleHotkeyLabel (subclass of Label) allows users to cycle through a list of options by pressing a hotkey
    • new class ToggleHotkeyLabel (subclass of CycleHotkeyLabel) toggles between On and Off states
    • new class WrappedLabel (subclass of Label) provides autowrapping of text
    • new class TooltipLabel (subclass of WrappedLabel) provides tooltip-like behavior

Structures

  • adventure_optionst: add missing getUnitContainer vmethod
  • historical_figure.T_skills: add account_balance field
  • job: add improvement field (union with hist_figure_id and race)
  • report_init.flags: rename sparring flag to hostile_combat
  • viewscreen_loadgamest: add missing LoadingImageSets and LoadingDivinationSets enum values to cur_step field

Documentation

  • add more examples to the plugin example skeleton files so they are more informative for a newbie
  • update download link and installation instructions for Visual C++ 2015 build tools on Windows
  • update information regarding obtaining a compatible Windows build environment
  • confirm: correct the command name in the plugin help text
  • cxxrandom: added usage examples
  • lua-string: document DFHack string extensions (startswith(), endswith(), split(), trim(), wrap(), and escape_pattern())
  • quickfort-blueprint-guide: added screenshots to the Dreamfort case study and overall clarified text
  • remote-client-libs: add new Rust client library
  • Lua API.rst: added isHidden(unit), isFortControlled(unit), getOuterContainerRef(unit), getOuterContainerRef(item)

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