=== Scroll down for changes

===[[[
The text below is included in docs/Documentation.rst - see that file for more details on the changelog setup.
This is kept in this file as a quick syntax reference.

===help

changelog.txt uses a syntax similar to RST, with a few special sequences:

- ``===`` indicates the start of a comment
- ``#`` indicates the start of a release name (do not include "DFHack")
- ``##`` indicates the start of a section name (this must be listed in ``gen_changelog.py``)
- ``-`` indicates the start of a changelog entry. **Note:** an entry currently must be only one line.
- ``:`` (colon followed by space) separates the name of a feature from a description of a change to that feature.
    Changes made to the same feature are grouped if they end up in the same section.
- ``:\`` (colon, backslash, space) avoids the above behavior
- ``- @`` (the space is optional) indicates the start of an entry that should only be displayed in NEWS-dev.rst.
    Use this sparingly, e.g. for immediate fixes to one development build in another development build that
    are not of interest to users of stable builds only.
- Three ``[`` characters indicate the start of a block (possibly a comment) that
  spans multiple lines. Three ``]`` characters indicate the end of such a block.
- ``!`` immediately before a phrase set up to be replaced (see gen_changelog.py) stops that occurrence from being replaced.

===end
]]]

================================================================================
======== IMPORTANT: rename this, and add a new "future" section, BEFORE ========
======== making a new DFHack release, even if the only changes made     ========
======== were in submodules with their own changelogs!                  ========
================================================================================

# Future

## Fixes
- `blueprint`: fixed passing incorrect parameters to `gui/blueprint` when you run ``blueprint gui`` with optional params
- `tailor`: fixed some inconsistencies (and possible crashes) when parsing certain subcommands, e.g. ``tailor help``

## Misc Improvements
- `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``
- `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
- `blueprint`: generated blueprints now have labels so `quickfort` can address them by name
- `quickfort`, `dfhack-examples-guide`: Dreamfort blueprint set improvements based on playtesting and feedback. includes updated profession definitions.

## 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.

# 0.47.05-r3

## New Plugins
- `dig-now`: instantly completes dig designations (including smoothing and carving tracks)

## 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

## Misc Improvements
- `buildingplan`: now displays which items are attached and which items are still missing for planned buildings
- `orders`: support importing and exporting reaction-specific item conditions, like "lye-containing" for soap production orders
- `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.
- `tiletypes-here`, `tiletypes-here-point`: add ``--cursor`` and ``--quiet`` options to support non-interactive use cases
- `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 https://github.com/DFHack/dfhack/pull/1921 and https://github.com/DFHack/dfhack/pull/1925
- `tailor`: allow user to specify which materials to be used, and in what order

## API
- The ``Items`` module ``moveTo*`` and ``remove`` functions now handle projectiles

## 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.

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

# 0.47.05-r2

## Fixes
- Fixed an issue where scrollable text in Lua-based screens could prevent other widgets from scrolling
- Fixed an issue preventing some external scripts from creating zones and other abstract buildings (see note about room definitions under "Internals")
- `buildingplan`: fixed an issue where planned constructions designated with DF's sizing keys (``umkh``) would sometimes be larger than requested
- `buildingplan`: fixed an issue preventing other plugins like `automaterial` from planning constructions if the "enable all" buildingplan setting was turned on
- `buildingplan`: made navigation keys work properly in the materials selection screen when alternate keybindings are used
- `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
- `orders`: fixed crash when importing orders with malformed IDs
- ``quickfortress.csv`` blueprint: fixed refuse stockpile config and prevented stockpiles from covering stairways
- `stonesense`: fixed a crash that could occur when ctrl+scrolling or closing the Stonesense window
- `embark-assistant`: fixed faulty early exit in first search attempt when searching for waterfalls

## 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"
- `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.
- `blueprint`: 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.
- `quickfort`: the Dreamfort blueprint set can now be comfortably built in a 1x1 embark
- `stonesense`: sped up startup time
- `tweak` hide-priority: changed so that priorities stay hidden (or visible) when exiting and re-entering the designations menu
- `embark-assistant`: slightly improved performance of surveying and improved code a little

## Lua
- 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 library: ``argparse`` is a collection of commandline argument processing functions
- ``gui.Painter``: fixed error when calling ``viewport()`` method
- ``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
- `reveal`: now exposes ``unhideFlood(pos)`` functionality to Lua
- new utility function: ``utils.normalizePath()``: normalizes directory slashes across platoforms to ``/`` and coaleses adjacent directory separators
- ``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
- `xlsxreader`: added Lua class wrappers for the xlsxreader plugin API

## API
- Added ``dfhack.units.teleport(unit, pos)``
- Added ``dfhack.maps.getPlantAtTile(x, y, z)`` and ``dfhack.maps.getPlantAtTile(pos)``, and updated ``dfhack.gui.getSelectedPlant()`` to use it

## Documentation
- Added more client library implementations to the `remote interface docs <remote-client-libs>`

## Internals
- 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 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
- Unit tests can now use ``delay_until(predicate_fn, timeout_frames)`` to delay until a condition is met
- Room definitions and extents are now created for abstract buildings so callers don't have to initialize the room structure themselves

# 0.47.05-r1

## Fixes
- `confirm`: stopped exposing alternate names when convicting units
- `prospector`: improved pre embark rough estimates, particularly for small clusters

## 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
- `quickfort`: Dreamfort blueprint set improvements: `significant <http://www.bay12forums.com/smf/index.php?topic=176889.msg8239017#msg8239017>`_ refinements across the entire blueprint set. Dreamfort is now much faster, much more efficient, and much easier to use. The `checklist <https://docs.google.com/spreadsheets/d/13PVZ2h3Mm3x_G1OXQvwKd7oIR2lK4A1Ahf6Om1kFigw/edit#gid=1459509569>`__ now includes a mini-walkthrough for quick reference. The spreadsheet now also includes `embark profile suggestions <https://docs.google.com/spreadsheets/d/13PVZ2h3Mm3x_G1OXQvwKd7oIR2lK4A1Ahf6Om1kFigw/edit#gid=149144025>`__
- `quickfort`: 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

## Documentation
- `fortplan`: added deprecation warnings - fortplan has been replaced by `quickfort`

# 0.47.05-beta1

## Fixes
- `embark-assistant`: fixed bug in soil depth determination for ocean tiles
- `orders`: don't crash when importing orders with malformed JSON

# 0.47.04-r5

## Fixes
- `embark-assistant`: fixed order of factors when calculating min temperature
- `embark-assistant`: improved performance of surveying
- `quickfort`: fixed eventual crashes when creating zones
- `quickfort`: fixed library aliases for tallow and iron, copper, and steel weapons
- `seedwatch`: fixed an issue where the plugin would disable itself on map load
- `search`: fixed crash when searching the ``k`` sidebar and navigating to another tile with certain keys, like ``<`` or ``>``
- `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``
- `buildingplan`: 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
- `buildingplan`: 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
- `quickfort`: added aliases for bronze weapons and armor
- `quickfort`: added alias for tradeable crafts

## 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).

## Documentation
- Added documentation for Lua's ``dfhack.run_command()`` and variants

# 0.47.04-r4

## 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`)
- `buildingplan`: fixed an issue preventing artifacts from being matched when the maximum item quality is set to ``artifacts``
- `buildingplan`: stopped erroneously matching items to buildings while the game is paused
- `buildingplan`: fixed a crash when pressing 0 while having a noble room selected
- `dwarfvet`: fixed a crash that could occur when discharging patients
- `dwarfmonitor`: fixed a crash when opening the ``prefs`` screen if units have vague preferences
- `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
- `embark-assistant`: corrected river size determination by performing it at the MLT level rather than the world tile level
- `search`: fixed an issue where search options might not display if screens were destroyed and recreated programmatically (e.g. with `quickfort`)
- `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)
- `buildingplan`: 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
- `buildingplan`: changed default filter setting for max quality from ``artifact`` to ``masterwork``
- `buildingplan`: 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
- `buildingplan`: 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
- `buildingplan`: added new global settings for whether generic building materials should match blocks, boulders, logs, and/or bars - defaults are everything but bars
- `embark-assistant`: split the lair types displayed on the local map into mound, burrow, and lair
- `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
- `quickfort`: added more blueprints to the blueprints library: several bedroom layouts, the Saracen Crypts, and the complete fortress example from Python Quickfort: TheQuickFortress

## Documentation
- `quickfort-alias-guide`: alias syntax and alias standard library documentation for `quickfort` blueprints
- `quickfort-library-guide`: overview of the quickfort blueprint library

## API
- `buildingplan`: added Lua interface API
- ``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)
- ``Buildings::setSize()``: changed to reuse existing extents when possible

## Lua
- ``utils.addressof()``: fixed for raw userdata

# 0.47.04-r3

## New Plugins
- `xlsxreader`: provides an API for Lua scripts to read Excel spreadsheets

## Fixes
- `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 a crash when loading food stockpiles
- `stockpiles`: fixed an error when saving furniture stockpiles

## Misc Improvements
- `createitem`: added support for plant growths (fruit, berries, leaves, etc.)
- `createitem`: added an ``inspect`` subcommand to print the item and material tokens of existing items, which can be used to create additional matching items
- `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
- `zone`: added an ``enumnick`` subcommand to assign enumerated nicknames (e.g "Hen 1", "Hen 2"...)
- `zone`: added slaughter indication to ``uinfo`` output

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

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

# 0.47.04-r2

## 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
- Linux: fixed ``dfhack.getDFPath()`` (Lua) and ``Process::getPath()`` (C++) to always return the DF root path, even if the working directory has changed
- `getplants`: fixed issues causing plants to be collected even if they have no growths (or unripe growths)
- `labormanager`: fixed handling of new jobs in 0.47
- `labormanager`: fixed an issue preventing custom furnaces from being built
- `embark-assistant`: fixed a couple of incursion handling bugs.
- Fixed ``Units::isEggLayer``, ``Units::isGrazer``, ``Units::isMilkable``, ``Units::isTrainableHunting``, ``Units::isTrainableWar``, and ``Units::isTamable`` ignoring the unit's caste
- `RemoteFortressReader`: fixed a couple crashes that could result from decoding invalid enum items (``site_realization_building_type`` and ``improvement_type``)
- `RemoteFortressReader`: fixed an issue that could cause block coordinates to be incorrect
- `rendermax`: fixed a hang that could occur when enabling some renderers, notably on Linux
- `stonesense`: fixed a crash when launching Stonesense
- `stonesense`: fixed some issues that could cause the splash screen to hang

## Misc Improvements
- Linux/macOS: Added console keybindings for deleting words (Alt+Backspace and Alt+d in most terminals)
- `blueprint`: now writes blueprints to the ``blueprints/`` subfolder instead of the df root folder
- `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
- `confirm`: added a confirmation dialog for convicting dwarves of crimes
- `manipulator`: added a new column option to display units' goals

## 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

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

# 0.47.04-r1

## Fixes
- Fixed translation of certain types of in-game names
- Fixed a crash in ``find()`` for some types when no world is loaded
- `autogems`: fixed an issue with binned gems being ignored in linked stockpiles
- `stocks`: fixed display of book titles
- `tweak` embark-profile-name: fixed handling of the native shift+space key

## Misc Improvements
- ``dfhack.init-example``: enabled `autodump`
- `getplants`: added switches for designations for farming seeds and for max number designated per plant
- `manipulator`: added intrigue to displayed skills
- `search`: added support for the fortress mode justice screen

## API
- Added ``Items::getBookTitle`` to get titles of books. Catches titles buried in improvements, unlike getDescription.

## Lua
- ``pairs()`` now returns available class methods for DF types

# 0.47.04-beta1

## Fixes
- Fixed a crash when starting DFHack in headless mode with no terminal

## 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
- `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

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

# 0.47.03-beta1

## New Scripts
- `devel/sc`: checks size of structures
- `devel/visualize-structure`: displays the raw memory of a structure

## Fixes
- @ `adv-max-skills`: fixed for 0.47
- `deep-embark`:
    - prevented running in non-fortress modes
    - ensured that only the newest wagon is deconstructed
- `full-heal`:
    - fixed issues with removing corpses
    - fixed resurrection for non-historical figures
- @ `modtools/create-unit`: added handling for arena tame setting
- `teleport`: fixed setting new tile occupancy

## Misc Improvements
- `deep-embark`:
    - improved support for using directly from the DFHack console
    - added a ``-clear`` option to cancel
- `exportlegends`:
    - added identity information
    - added creature raw names and flags
- `gui/prerelease-warning`: updated links and information about nightly builds
- `modtools/syndrome-trigger`: enabled simultaneous use of ``-synclass`` and ``-syndrome``
- `repeat`: added ``-list`` option

## Structures
- Dropped support for 0.44.12-0.47.02
- ``abstract_building_type``: added types (and subclasses) new to 0.47
- ``agreement_details_type``: added enum
- ``agreement_details``: added struct type (and many associated data types)
- ``agreement_party``: added struct type
- ``announcement_type``: added types new to 0.47
- ``artifact_claim_type``: added enum
- ``artifact_claim``: added struct type
- ``breath_attack_type``: added ``SHARP_ROCK``
- ``building_offering_placest``: new class
- ``building_type``: added ``OfferingPlace``
- ``creature_interaction_effect``: added subclasses new to 0.47
- ``creature_raw_flags``: identified several more items
- ``creature_raw_flags``: renamed many items to match DF names
- ``caste_raw_flags``: renamed many items to match DF names
- ``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
- ``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
- ``history_event_collection``: added subtypes new to 0.47
- ``history_event_context``: added lots of new fields
- ``history_event_reason``: added captions for all items
- ``history_event_reason``: added items new to 0.47
- ``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``: added 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
- ``job_skill``: added ``INTRIGUE``, ``RIDING``
- ``lair_type``: added enum
- ``monument_type``: added enum
- ``next_global_id``: added enum
- ``poetic_form_action``: added ``Beseech``
- ``setup_character_info``: expanded significantly in 0.47
- ``text_system``: added layout for struct
- ``tile_occupancy``: added ``varied_heavy_aquifer``
- ``tool_uses``: added items: ``PLACE_OFFERING``, ``DIVINATION``, ``GAMES_OF_CHANCE``
- ``viewscreen_counterintelligencest``: new class (only layout identified so far)

# 0.44.12-r3

## New Plugins
- `autoclothing`: automatically manage clothing work orders
- `autofarm`: replaces the previous Ruby script of the same name, with some fixes
- `map-render`: allows programmatically rendering sections of the map that are off-screen
- `tailor`: automatically manages keeping your dorfs clothed

## New Scripts
- `assign-attributes`: changes the attributes of a unit
- `assign-beliefs`: changes the beliefs of a unit
- `assign-facets`: changes the facets (traits) of a unit
- `assign-goals`: changes the goals of a unit
- `assign-preferences`: changes the preferences of a unit
- `assign-profile`: sets a dwarf's characteristics according to a predefined profile
- `assign-skills`: changes the skills of a unit
- `combat-harden`: sets a unit's combat-hardened value to a given percent
- `deep-embark`: allows embarking underground
- `devel/find-twbt`: finds a TWBT-related offset needed by the new `map-render` plugin
- `dwarf-op`: optimizes dwarves for fort-mode work; makes managing labors easier
- `forget-dead-body`: removes emotions associated with seeing a dead body
- `gui/create-tree`: creates a tree at the selected tile
- `linger`: takes over your killer in adventure mode
- `modtools/create-tree`: creates a tree
- `modtools/pref-edit`: add, remove, or edit the preferences of a unit
- `modtools/set-belief`: changes the beliefs (values) of units
- `modtools/set-need`: sets and edits unit needs
- `modtools/set-personality`: changes the personality of units
- `modtools/spawn-liquid`: spawns water or lava at the specified coordinates
- `set-orientation`: edits a unit's orientation
- `unretire-anyone`: turns any historical figure into a playable adventurer

## Fixes
- Fixed a crash in the macOS/Linux console when the prompt was wider than the screen width
- Fixed some cases where Lua filtered lists would not properly intercept keys, potentially triggering other actions on the same screen
- Fixed inconsistent results from ``Units::isGay`` for asexual units
- `autofarm`:
    - fixed biome detection to properly determine crop assignments on surface farms
    - reimplemented as a C++ plugin to make proper biome detection possible
- `bodyswap`: fixed companion list not being updated often enough
- `cxxrandom`: removed some extraneous debug information
- `digfort`: now accounts for z-level changes when calculating maximum y dimension
- `embark-assistant`:
    - fixed bug causing crash on worlds without generated metals (as well as pruning vectors as originally intended).
    - fixed bug causing mineral matching to fail to cut off at the magma sea, reporting presence of things that aren't (like DF does currently).
    - fixed bug causing half of the river tiles not to be recognized.
    - added logic to detect some river tiles DF doesn't generate data for (but are definitely present).
- `eventful`: fixed invalid building ID in some building events
- `exportlegends`: now escapes special characters in names properly
- `getplants`: fixed designation of plants out of season (note that picked plants are still designated incorrectly)
- `gui/autogems`: fixed error when no world is loaded
- `gui/companion-order`:
    - fixed error when resetting group leaders
    - ``leave`` now properly removes companion links
- `gui/create-item`: fixed module support - can now be used from other scripts
- `gui/stamper`:
    - stopped "invert" from resetting the designation type
    - switched to using DF's designation keybindings instead of custom bindings
    - fixed some typos and text overlapping
- `modtools/create-unit`:
    - fixed an error associating historical entities with units
    - stopped recalculating health to avoid newly-created citizens triggering a "recover wounded" job
    - fixed units created in arena mode having blank names
    - fixed units created in arena mode having the wrong race and/or interaction effects applied after creating units manually in-game
    - stopped units from spawning with extra items or skills previously selected in the arena
    - stopped setting some unneeded flags that could result in glowing creature tiles
    - set units created in adventure mode to have no family, instead of being related to the first creature in the world
- `modtools/reaction-product-trigger`:
    - fixed an error dealing with reactions in adventure mode
    - blocked ``\\BUILDING_ID`` for adventure mode reactions
    - fixed ``-clear`` to work without passing other unneeded arguments
- `modtools/reaction-trigger`:
    - fixed a bug when determining whether a command was run
    - fixed handling of ``-resetPolicy``
- `mousequery`: fixed calculation of map dimensions, which was sometimes preventing scrolling the map with the mouse when TWBT was enabled
- `RemoteFortressReader`:
    - fixed a crash when a unit's path has a length of 0
- `stonesense`:
    - fixed crash due to wagons and other soul-less creatures
- `tame`: now sets the civ ID of tamed animals (fixes compatibility with `autobutcher`)
- `title-folder`: silenced error when ``PRINT_MODE`` is set to ``TEXT``

## Misc Improvements
- Added a note to `dfhack-run` when called with no arguments (which is usually unintentional)
- On macOS, the launcher now attempts to un-quarantine the rest of DFHack
- `bodyswap`: added arena mode support
- `createitem`: added a list of valid castes to the "invalid caste" error message, for convenience
- `combine-drinks`: added more default output, similar to `combine-plants`
- `devel/export-dt-ini`: added more size information needed by newer Dwarf Therapist versions
- `dwarfmonitor`: enabled widgets to access other scripts and plugins by switching to the core Lua context
- `embark-assistant`:
    - added an in-game option to activate on the embark screen
    - changed waterfall detection to look for level drop rather than just presence
    - changed matching to take incursions, i.e. parts of other biomes, into consideration when evaluating tiles. This allows for e.g. finding multiple biomes on single tile embarks.
    - changed overlay display to show when incursion surveying is incomplete
    - changed overlay display to show evil weather
    - added optional parameter "fileresult" for crude external harness automated match support
    - improved focus movement logic to go to only required world tiles, increasing speed of subsequent searches considerably
- `exportlegends`: added rivers to custom XML export
- `exterminate`: added support for a special ``enemy`` caste
- `gui/gm-unit`: added support for editing:
    - added attribute editor
    - added orientation editor
    - added editor for bodies and body parts
    - added color editor
    - added belief editor
    - added personality editor
- `modtools/create-item`:
    - documented already-existing ``-quality`` option
- `modtools/create-unit`:
    - added the ability to specify ``\\LOCAL`` for the fort group entity
    - now enables the default labours for adult units with CAN_LEARN.
    - now sets historical figure orientation.
    - improved speed of creating multiple units at once
    - made the script usable as a module (from other scripts)
- `modtools/reaction-trigger`:
    - added ``-ignoreWorker``: ignores the worker when selecting the targets
    - changed the default behavior to skip inactive/dead units; added ``-dontSkipInactive`` to include creatures that are inactive
    - added ``-range``: controls how far elligible targets can be from the workshop
    - syndromes now are applied before commands are run, not after
    - if both a command and a syndrome are given, the command only runs if the syndrome could be applied
- `mousequery`: made it more clear when features are enabled
- `RemoteFortressReader`:
    - added a basic framework for controlling and reading the menus in DF (currently only supports the building menu)
    - added support for reading item raws
    - added a check for whether or not the game is currently saving or loading, for utilities to check if it's safe to read from DF
    - added unit facing direction estimate and position within tiles
    - added unit age
    - added unit wounds
    - added tree information
    - added check for units' current jobs when calculating the direction they are facing

## API
- Added ``Maps::GetBiomeType`` and ``Maps::GetBiomeTypeByRef`` to infer biome types properly
- Added ``Units::getPhysicalDescription`` (note that this depends on the ``unit_get_physical_description`` offset, which is not yet available for all DF builds)
- Added new ``plugin_load_data`` and ``plugin_save_data`` events for plugins to load/save persistent data

## Internals
- Added new Persistence module
- Persistent data is now stored in JSON files instead of historical figures - existing data will be migrated when saving
- Cut down on internal DFHack dependencies to improve build times
- Improved concurrency in event and server handlers
- `stonesense`: fixed some OpenGL build issues on Linux

## Lua
- Exposed ``gui.dwarfmode.get_movement_delta`` and ``gui.dwarfmode.get_hotkey_target``
- ``dfhack.run_command`` now returns the command's return code

## Ruby
- Made ``unit_ishostile`` consistently return a boolean

## Structures
- Added ``unit_get_physical_description`` function offset on some platforms
- Added/identified types:
    - ``assume_identity_mode``
    - ``musical_form_purpose``
    - ``musical_form_style``
    - ``musical_form_pitch_style``
    - ``musical_form_feature``
    - ``musical_form_vocals``
    - ``musical_form_melodies``
    - ``musical_form_interval``
    - ``unit_emotion_memory``
- ``twbt_render_map``: added for 64-bit 0.44.12 (for `map-render`)
- ``personality_facet_type``, ``value_type``: added ``NONE`` values
- ``need_type``: fixed ``PrayOrMeditate`` typo

# 0.44.12-r2

## New Plugins
- `debug`: manages runtime debug print category filtering
- `nestboxes`: automatically scan for and forbid fertile eggs incubating in a nestbox

## New Scripts
- `devel/query`: searches for field names in DF objects
- `extinguish`: puts out fires
- `tame`: sets tamed/trained status of animals

## Fixes
- `building-hacks`: fixed error when dealing with custom animation tables
- `devel/test-perlin`: fixed Lua error (``math.pow()``)
- `embark-assistant`: fixed crash when entering finder with a 16x16 embark selected, and added 16 to dimension choices
- `embark-skills`: fixed missing ``skill_points_remaining`` field
- `full-heal`:
    - stopped wagon resurrection
    - fixed a minor issue with post-resurrection hostility
- `gui/companion-order`:
    - fixed issues with printing coordinates
    - fixed issues with move command
    - fixed cheat commands (and removed "Power up", which was broken)
- `gui/gm-editor`: fixed reinterpret cast (``r``)
- `gui/pathable`: fixed error when sidebar is hidden with ``Tab``
- `labormanager`:
    - stopped assigning labors to ineligible dwarves, pets, etc.
    - stopped assigning invalid labors
    - added support for crafting jobs that use pearl
    - fixed issues causing cleaning jobs to not be assigned
    - added support for disabling management of specific labors
- `prospector`: (also affected `embark-tools`) - fixed a crash when prospecting an unusable site (ocean, mountains, etc.) with a large default embark size in d_init.txt (e.g. 16x16)
- `siege-engine`: fixed a few Lua errors (``math.pow()``, ``unit.relationship_ids``)
- `tweak`: fixed ``hotkey-clear``

## Misc Improvements
- `armoks-blessing`: improved documentation to list all available arguments
- `devel/export-dt-ini`:
    - added viewscreen offsets for DT 40.1.2
    - added item base flags offset
    - added needs offsets
- `embark-assistant`:
    - added match indicator display on the right ("World") map
    - changed 'c'ancel to abort find if it's under way and clear results if not, allowing use of partial surveys.
    - added Coal as a search criterion, as well as a coal indication as current embark selection info.
- `full-heal`:
    - added ``-all``, ``-all_civ`` and ``-all_citizens`` arguments
    - added module support
    - now removes historical figure death dates and ghost data
- `growcrops`: added ``all`` argument to grow all crops
- `gui/load-screen`: improved documentation
- `labormanager`: now takes nature value into account when assigning jobs
- `open-legends`: added warning about risk of save corruption and improved related documentation
- `points`: added support when in ``viewscreen_setupdwarfgamest`` and improved error messages
- `siren`: removed break handling (relevant ``misc_trait_type`` was no longer used - see "Structures" section)

## Internals
- Linux/macOS: changed recommended build backend from Make to Ninja (Make builds will be significantly slower now)
- Added a usable unit test framework for basic tests, and a few basic tests
- Core: various thread safety and memory management improvements
- Fixed CMake build dependencies for generated header files
- Fixed custom ``CMAKE_CXX_FLAGS`` not being passed to plugins
- Changed ``plugins/CMakeLists.custom.txt`` to be ignored by git and created (if needed) at build time instead
- Added ``CMakeSettings.json`` with intellisense support

## Lua
- ``utils``: new ``OrderedTable`` class

## Structures
- Win32: added missing vtables for ``viewscreen_storesst`` and ``squad_order_rescue_hfst``
- ``activity_event_performancest``: renamed poem as written_content_id
- ``dance_form``: named musical_form_id and musical_written_content_id
- ``incident_sub6_performance.participants``: named performance_event and role_index
- ``incident_sub6_performance``: made performance_event an enum
- ``incident_sub6_performance``: named poetic_form_id, musical_form_id, and dance_form_id
- ``musical_form_instruments``: named minimum_required and maximum_permitted
- ``musical_form``: named voices field
- ``poetic_form``: identified many fields and related enum/bitfield types
- ``setup_character_info``: identified ``skill_points_remaining`` (for `embark-skills`)
- ``unit_thought_type``: added new expulsion thoughts from 0.44.12
- ``viewscreen_layer_militaryst``: identified ``equip.assigned.assigned_items``
- ``world_data``: added ``mountain_peak_flags`` type, including ``is_volcano``
- ``written_content``: named poetic_form
- ``unit_action.attack``: identified ``attack_skill``
- ``unit_action.attack``: added ``lightly_tap`` and ``spar_report`` flags
- ``misc_trait_type``: removed ``LikesOutdoors``, ``Hardened``, ``TimeSinceBreak``, ``OnBreak`` (all unused by DF)
- ``unit_personality``: identified ``stress_drain``, ``stress_boost``, ``likes_outdoors``, ``combat_hardened``
- ``plant_tree_tile``: gave connection bits more meaningful names (e.g. ``connection_east`` instead of ``thick_branches_1``)
- ``plant_tree_info``: identified ``extent_east``, etc.
- ``ui``: fixed alignment of ``main`` and ``squads`` (fixes `tweak` hotkey-clear and DF-AI)
- ``ui.main``: identified ``fortress_site``
- ``ui.squads``: identified ``kill_rect_targets_scroll``
- ``world_site``: identified names and/or types of some fields
- ``world_history``: identified names and/or types of some fields
- ``viewscreen_setupadventurest``: identified some nemesis and personality fields, and ``page.ChooseHistfig``
- ``unit_storage_status``: newly identified type, stores noble holdings information (used in ``viewscreen_layer_noblelistst``)
- ``viewscreen_layer_noblelistst``: identified ``storage_status`` (see ``unit_storage_status`` type)
- ``viewscreen_layer_arena_creaturest``: identified item- and name-related fields
- ``viewscreen_new_regionst``: identified ``rejection_msg``, ``raw_folder``, ``load_world_params``
- ``viewscreen_new_regionst``: changed many ``int8_t`` fields to ``bool``
- ``unit_flags3``: identified ``marked_for_gelding``
- ``body_part_status``: identified ``gelded``

## API
- New debug features related to `debug` plugin:
  - Classes (C++ only): ``Signal<Signature, type_tag>``, ``DebugCategory``, ``DebugManager``
  - Macros: ``TRACE``, ``DEBUG``, ``INFO``, ``WARN``, ``ERR``, ``DBG_DECLARE``, ``DBG_EXTERN``

================================================================================
# 0.44.12-r1

## Fixes
-@ Console: fixed crash when entering long commands on Linux/macOS
-@ Removed jsoncpp's ``include`` and ``lib`` folders from DFHack builds/packages
- Fixed special characters in `command-prompt` and other non-console in-game outputs on Linux/macOS (in tools using ``df2console``)
- `die`: fixed Windows crash in exit handling
- `dwarfmonitor`, `manipulator`: fixed stress cutoffs
- `modtools/force`: fixed a bug where the help text would always be displayed and nothing useful would happen
- `ruby`: fixed calling conventions for vmethods that return strings (currently ``enabler.GetKeyDisplay()``)
- `startdwarf`: fixed on 64-bit Linux

## Misc Improvements
- Reduced time for designation jobs from tools like `digv` to be assigned workers
- `embark-assistant`:
    - Switched to standard scrolling keys, improved spacing slightly
    - Introduced scrolling of Finder search criteria, removing requirement for 46 lines to work properly (Help/Info still formatted for 46 lines).
    - Added Freezing search criterion, allowing searches for NA/Frozen/At_Least_Partial/Partial/At_Most_Partial/Never Freezing embarks.
- `rejuvenate`:
    - Added ``-all`` argument to apply to all citizens
    - Added ``-force`` to include units under 20 years old
    - Clarified documentation

## API
- Added to ``Units`` module:
    - ``getStressCategory(unit)``
    - ``getStressCategoryRaw(level)``
    - ``stress_cutoffs`` (Lua: ``getStressCutoffs()``)

## Internals
- Changed default build architecture to 64-bit
- Added documentation for all RPC functions and a build-time check
- Added support for build IDs to development builds
- Use ``dlsym(3)`` to find vtables from libgraphics.so

## Structures
- Added ``start_dwarf_count`` on 64-bit Linux again and fixed scanning script
- ``army_controller``: added new vector from 0.44.11
-@ ``viewscreen_civlistst``: split ``unk_20`` into 3 pointers
- ``belief_system``: new type, few fields identified
- ``mental_picture``: new type, some fields identified
- ``mission``: new type (used in ``viewscreen_civlistst``)
- ``mission_report``:
    - new type (renamed, was ``mission`` before)
    - identified some fields
- ``spoils_report``: new type, most fields identified
- ``viewscreen_civlistst``:
    - identified new pages
    - identified new messenger-related fields
- ``viewscreen_image_creatorst``:
    - fixed layout
    - identified many fields
- ``viewscreen_reportlistst``:
    - added new mission and spoils report-related fields (fixed layout)
- ``world``:
    - ``belief_systems``: identified
- ``world.languages``: identified (minimal information; whole languages stored elsewhere)
- ``world.status``:
    - ``mission_reports``: renamed, was ``missions``
    - ``spoils_reports``: identified
- ``world.unk_131ec0``, ``world.unk_131ef0``: researched layout
- ``world.worldgen_status``: identified many fields

================================================================================
# 0.44.12-alpha1

## Fixes
-@ macOS: fixed ``renderer`` vtable address on x64 (fixes `rendermax`)
- `stonesense`: fixed ``PLANT:DESERT_LIME:LEAF`` typo

## API
- Added C++-style linked list interface for DF linked lists

## Structures
- Dropped 0.44.11 support
- ``ui.squads``: Added fields new in 0.44.12

================================================================================
# 0.44.11-beta2.1

## Internals
-@ `stonesense`: fixed build

================================================================================
# 0.44.11-beta2

## Fixes
-@ Windows: Fixed console failing to initialize
- `command-prompt`: added support for commands that require a specific screen to be visible, e.g. `spotclean`
- `gui/workflow`: fixed advanced constraint menu for crafts

## API
- Added ``Screen::Hide`` to temporarily hide screens, like `command-prompt`

================================================================================
# 0.44.11-beta1

## Fixes
- Fixed displayed names (from ``Units::getVisibleName``) for units with identities
- Fixed potential memory leak in ``Screen::show()``
- `fix/dead-units`: fixed script trying to use missing isDiplomat function

## Misc Improvements
- Console:
    - added support for multibyte characters on Linux/macOS
    - made the console exit properly when an interactive command is active (`liquids`, `mode`, `tiletypes`)
- Made the ``DFHACK_PORT`` environment variable take priority over ``remote-server.json``
- Linux: added automatic support for GCC sanitizers in ``dfhack`` script
- `digfort`: added better map bounds checking
- `dfhack-run`: added support for port specified in ``remote-server.json``, to match DFHack's behavior
- `remove-stress`:
    - added support for ``-all`` as an alternative to the existing ``all`` argument for consistency
    - sped up significantly
    - improved output/error messages
    - now removes tantrums, depression, and obliviousness
- `ruby`: sped up handling of onupdate events

## API
- New functions:
    - ``Units::isDiplomat(unit)``
- Exposed ``Screen::zoom()`` to C++ (was Lua-only)

## Lua
- Added ``printall_recurse`` to print tables and DF references recursively. It can be also used with ``^`` from the `lua` interpreter.
- ``gui.widgets``: ``List:setChoices`` clones ``choices`` for internal table changes

## Internals
- jsoncpp: updated to version 1.8.4 and switched to using a git submodule

## Structures
- ``history_event_entity_expels_hfst``: added (new in 0.44.11)
- ``history_event_site_surrenderedst``: added (new in 0.44.11)
- ``history_event_type``: added ``SITE_SURRENDERED``, ``ENTITY_EXPELS_HF`` (new in 0.44.11)
- ``syndrome``: identified a few fields
- ``viewscreen_civlistst``: fixed layout and identified many fields

================================================================================
# 0.44.11-alpha1

## Structures
- Dropped 0.44.10 support
- Added support for automatically sizing arrays indexed with an enum
- Removed stale generated CSV files and DT layouts from pre-0.43.05
- ``announcement_type``: new in 0.44.11: ``NEW_HOLDING``, ``NEW_MARKET_LINK``
- ``breath_attack_type``: added ``OTHER``
- ``historical_figure_info.relationships.list``: added ``unk_3a``-``unk_3c`` fields at end
- ``interface_key``: added bindings new in 0.44.11
- ``occupation_type``: new in 0.44.11: ``MESSENGER``
- ``profession``: new in 0.44.11: ``MESSENGER``
- ``ui_sidebar_menus``:
    - ``unit.in_squad``: renamed to ``unit.squad_list_opened``, fixed location
    - ``unit``: added ``expel_error`` and other unknown fields new in 0.44.11
    - ``hospital``: added, new in 0.44.11
    - ``num_speech_tokens``, ``unk_17d8``: moved out of ``command_line`` to fix layout on x64
-@ ``viewscreen_civlistst``: added a few new fields (incomplete)
- ``viewscreen_locationsst``: identified ``edit_input``

================================================================================
# 0.44.10-r2

## New Plugins
- `cxxrandom`: exposes some features of the C++11 random number library to Lua

## New Scripts
- `gui/stamper`: allows manipulation of designations by transforms such as translations, reflections, rotations, and inversion
- `add-recipe`: adds unknown crafting recipes to the player's civ

## Fixes
- Fixed many tools incorrectly using the ``dead`` unit flag (they should generally check ``flags2.killed`` instead)
- Fixed many tools passing incorrect arguments to printf-style functions, including a few possible crashes (`changelayer`, `follow`, `forceequip`, `generated-creature-renamer`)
- Fixed ``-g`` flag (GDB) in Linux ``dfhack`` script (particularly on x64)
- Fixed several bugs in Lua scripts found by static analysis (df-luacheck)
- `autochop`, `autodump`, `autogems`, `automelt`, `autotrade`, `buildingplan`, `dwarfmonitor`, `fix-unit-occupancy`, `fortplan`, `stockflow`: fix issues with periodic tasks not working for some time after save/load cycles
- `autogems`, `fix-unit-occupancy`: stopped running when a fort isn't loaded (e.g. while embarking)
- `buildingplan`, `fortplan`: stopped running before a world has fully loaded
- `autogems`:
    - stop running repeatedly when paused
    - fixed crash when furnaces are linked to same stockpiles as jeweler's workshops
- `ban-cooking`: fixed errors introduced by kitchen structure changes in 0.44.10-r1
- `remove-stress`: fixed an error when running on soul-less units (e.g. with ``-all``)
- `revflood`: stopped revealing tiles adjacent to tiles above open space inappropriately
- `dig`: fixed "Inappropriate dig square" announcements if digging job has been posted
- `stockpiles`: ``loadstock`` now sets usable and unusable weapon and armor settings
- `stocks`: stopped listing carried items under stockpiles where they were picked up from
- `deramp`: fixed deramp to find designations that already have jobs posted
- `fixnaked`: fixed errors due to emotion changes in 0.44
- `autounsuspend`: now skips planned buildings

## Misc Improvements
- Added script name to messages produced by ``qerror()`` in Lua scripts
- Fixed an issue in around 30 scripts that could prevent edits to the files (adding valid arguments) from taking effect
- Linux: Added several new options to ``dfhack`` script: ``--remotegdb``, ``--gdbserver``, ``--strace``
- `bodyswap`: improved error handling
- `buildingplan`: added max quality setting
- `caravan`: documented (new in 0.44.10-alpha1)
- `deathcause`: added "slaughtered" to descriptions
- `fix/retrieve-units`: now re-adds units to active list to counteract `fix/dead-units`
- `item-descriptions`: fixed several grammatical errors
- `modtools/create-unit`:
    - added quantity argument
    - now selects a caste at random if none is specified
- `mousequery`:
    - migrated several features from TWBT's fork
    - added ability to drag with left/right buttons
    - added depth display for TWBT (when multilevel is enabled)
    - made shift+click jump to lower levels visible with TWBT
- `title-version`: added version to options screen too
- `embark-assistant`:
    - changed region interaction matching to search for evil rain, syndrome rain, and reanimation rather than interaction presence (misleadingly called evil weather), reanimation, and thralling
    - gave syndrome rain and reanimation wider ranges of criterion values
- `fix/dead-units`: added a delay of around 1 month before removing units

## API
- New functions (also exposed to Lua):
    - ``Units::isKilled()``
    - ``Units::isActive()``
    - ``Units::isGhost()``
- Removed Vermin module (unused and obsolete)

## Lua
- Added ``profiler`` module to measure lua performance
- Enabled shift+cursor movement in WorkshopOverlay-derived screens

## Structures
- ``unit_flags1``: renamed ``dead`` to ``inactive`` to better reflect its use
- ``item_body_component``: fixed location of ``corpse_flags``
- ``job_type``: added ``is_designation`` attribute
- ``unit_thought_type``: added ``SawDeadBody`` (new in 0.44.10)
- ``unit_personality``: fixed location of ``current_focus`` and ``undistracted_focus``
- ``incident_sub6_performance``: identified some fields
- ``job_handler``: fixed static array layout

## Internals
- Added fallback for YouCompleteMe database lookup failures (e.g. for newly-created files)
- jsoncpp: fixed constructor with ``long`` on Linux
- Improved efficiency and error handling in ``stl_vsprintf`` and related functions
- Added build option to generate symbols for large generated files containing df-structures metadata

================================================================================
# 0.44.10-r1

## New Scripts
- `bodyswap`: shifts player control over to another unit in adventure mode

## New Tweaks
- `tweak` stone-status-all: adds an option to toggle the economic status of all stones
- `tweak` kitchen-prefs-all: adds an option to toggle cook/brew for all visible items in kitchen preferences

## Fixes
- Lua: registered ``dfhack.constructions.designateRemove()`` correctly
- `prospector`: fixed crash due to invalid vein materials
- `tweak` max-wheelbarrow: fixed conflict with building renaming
- `view-item-info`: stopped appending extra newlines permanently to descriptions

## Misc Improvements
- Added logo to documentation
- Documented several missing ``dfhack.gui`` Lua functions
- `adv-rumors`: bound to Ctrl-A
- `command-prompt`: added support for ``Gui::getSelectedPlant()``
- `gui/advfort`: bound to Ctrl-T
- `gui/room-list`: added support for ``Gui::getSelectedBuilding()``
- `gui/unit-info-viewer`: bound to Alt-I
- `modtools/create-unit`: made functions available to other scripts
- `search`:
    - added support for stone restrictions screen (under ``z``: Status)
    - added support for kitchen preferences (also under ``z``)

## Internals
- Fixed compiler warnings on all supported build configurations
- Windows build scripts now work with non-C system drives

## API
- New functions (all available to Lua as well):
    - ``Buildings::getRoomDescription()``
    - ``Items::checkMandates()``
    - ``Items::canTrade()``
    - ``Items::canTradeWithContents()``
    - ``Items::isRouteVehicle()``
    - ``Items::isSquadEquipment()``
    - ``Kitchen::addExclusion()``
    - ``Kitchen::findExclusion()``
    - ``Kitchen::removeExclusion()``
- syndrome-util: added ``eraseSyndromeData()``

## Structures
- ``dfhack_room_quality_level``: new enum
- ``glowing_barrier``: identified ``triggered``, added comments
- ``item_flags2``: renamed ``has_written_content`` to ``unk_book``
- ``kitchen_exc_type``: new enum (for ``ui.kitchen``)
- ``mandate.mode``: now an enum
- ``unit_personality.emotions.flags.memory``: identified
- ``viewscreen_kitchenprefst.forbidden``, ``possible``: now a bitfield, ``kitchen_pref_flag``
- ``world_data.feature_map``: added extensive documentation (in XML)

================================================================================
# 0.44.10-beta1

## New Scripts
- `devel/find-primitive`: finds a primitive variable in memory

## Fixes
- Units::getAnyUnit(): fixed a couple problematic conditions and potential segfaults if global addresses are missing
- `stockpiles`: stopped sidebar option from overlapping with `autodump`
-@ `autodump`, `automelt`, `autotrade`, `stocks`, `stockpiles`: fixed conflict with building renaming
- `tweak` block-labors: fixed two causes of crashes related in the v-p-l menu
- `full-heal`:
    - units no longer have a tendency to melt after being healed
    - healed units are no longer treated as patients by hospital staff
    - healed units no longer attempt to clean themselves unsuccessfully
    - wounded fliers now regain the ability to fly upon being healing
    - now heals suffocation, numbness, infection, spilled guts and gelding
- `modtools/create-unit`:
    - creatures of the appropriate age are now spawned as babies or children where applicable
    - fix: civ_id is now properly assigned to historical_figure, resolving several hostility issues (spawned pets are no longer attacked by fortress military!)
    - fix: unnamed creatures are no longer spawned with a string of numbers as a first name
- `exterminate`: fixed documentation of ``this`` option

## Misc Improvements
- `blueprint`: added a basic Lua API
- `devel/export-dt-ini`: added tool offsets for DT 40
- `devel/save-version`: added current DF version to output
- `install-info`: added information on tweaks

## Internals
- Added ``Gui::inRenameBuilding()``
- Added function names to DFHack's NullPointer and InvalidArgument exceptions
- Linux: required plugins to have symbols resolved at link time, for consistency with other platforms

================================================================================
# 0.44.10-alpha1

## New Scripts
- `caravan`: adjusts properties of caravans
- `gui/autogems`: a configuration UI for the `autogems` plugin

## Fixes
- Fixed uninitialized pointer being returned from ``Gui::getAnyUnit()`` in rare cases
- `autohauler`, `autolabor`, `labormanager`: fixed fencepost error and potential crash
- `dwarfvet`: fixed infinite loop if an animal is not accepted at a hospital
- `liquids`: fixed "range" command to default to 1 for dimensions consistently
- `search`: fixed 4/6 keys in unit screen search
- `view-item-info`: fixed an error with some armor

## Misc Improvements
- `autogems`: can now blacklist arbitrary gem types (see `gui/autogems`)
- `exterminate`: added more words for current unit, removed warning
- `fpause`: now pauses worldgen as well

## Internals
- Added some build scripts for Sublime Text
- Changed submodule URLs to relative URLs so that they can be cloned consistently over different protocols (e.g. SSH)

================================================================================
# 0.44.09-r1

## Internals
- OS X: Can now build with GCC 7 (or older)

## Fixes
- `modtools/item-trigger`: fixed token format in help text

## Misc Improvements
- Reorganized changelogs and improved changelog editing process
- `modtools/item-trigger`: added support for multiple type/material/contaminant conditions

## Structures
-@ ``renderer``: fixed vtable addresses on 64-bit OS X
- ``building_type``: added human-readable ``name`` attribute
- ``furnace_type``: added human-readable ``name`` attribute
- ``workshop_type``: added human-readable ``name`` attribute
- ``army``: added vector new in 0.44.07
- ``site_reputation_report``: named ``reports`` vector

================================================================================
# 0.44.09-alpha1

## Fixes
- `digtype`: stopped designating non-vein tiles (open space, trees, etc.)
- `labormanager`: fixed crash due to dig jobs targeting some unrevealed map blocks


================================================================================
# 0.44.08-alpha1

## Fixes
- `fix/dead-units`: fixed a bug that could remove some arriving (not dead) units


================================================================================
# 0.44.07-beta1

## Structures
-@ Added symbols for Toady's `0.44.07 Linux test build <http://www.bay12forums.com/smf/index.php?topic=169839.msg7720111#msg7720111>`_ to fix :bug:`10615`
-@ ``world_site``: fixed alignment

## Misc improvements
- `modtools/item-trigger`: added the ability to specify inventory mode(s) to trigger on


================================================================================
# 0.44.07-alpha1

## Fixes
- Support for building on Ubuntu 18.04
- Fixed some CMake warnings (CMP0022)
- `embark-assistant`: fixed detection of reanimating biomes

## Misc Improvements
- `embark-assistant`:

    - Added search for adamantine
    - Now supports saving/loading profiles

- `fillneeds`: added ``-all`` option to apply to all units
- `remotefortressreader`: added flows, instruments, tool names, campfires, ocean waves, spiderwebs

## Structures
- Several new names in instrument raw structures
- ``identity``: identified ``profession``, ``civ``
- ``manager_order_template``: fixed last field type
- ``viewscreen_createquotast``: fixed layout
- ``world.language``: moved ``colors``, ``shapes``, ``patterns`` to ``world.descriptors``
- ``world.reactions``, ``world.reaction_categories``:\ moved to new compound, ``world.reactions``. Requires renaming:

    - ``world.reactions`` to ``world.reactions.reactions``
    - ``world.reaction_categories`` to ``world.reactions.reaction_categories``


================================================================================
# 0.44.05-r2

## Fixes
- `devel/export-dt-ini`: fix language_name offsets for DT 39.2+
- `devel/inject-raws`: fixed gloves and shoes (old typo causing errors)
- `remotefortressreader`: fixed an issue with not all engravings being included
- `view-item-info`: fixed an error with some shields

## Misc Improvements
- `adv-rumors`: added more keywords, including names
- `autochop`: can now exclude trees that produce fruit, food, or cookable items
- `remotefortressreader`: added plant type support

## New Plugins
- `embark-assistant`: adds more information and features to embark screen

## New Scripts
- `adv-fix-sleepers`: fixes units in adventure mode who refuse to wake up (:bug:`6798`)
- `hermit`: blocks caravans, migrants, diplomats (for hermit challenge)

## New Features
- With ``PRINT_MODE:TEXT``, setting the ``DFHACK_HEADLESS`` environment variable will hide DF's display and allow the console to be used normally. (Note that this is intended for testing and is not very useful for actual gameplay.)


================================================================================
# 0.44.05-r1

## New Scripts
- `break-dance`: Breaks up a stuck dance activity
- `fillneeds`: Use with a unit selected to make them focused and unstressed
- `firestarter`: Lights things on fire: items, locations, entire inventories even!
- `flashstep`: Teleports adventurer to cursor
- `ghostly`: Turns an adventurer into a ghost or back
- `questport`: Sends your adventurer to the location of your quest log cursor
- `view-unit-reports`: opens the reports screen with combat reports for the selected unit

## Fixes
- `devel/inject-raws`: now recognizes spaces in reaction names
- `dig`: added support for designation priorities - fixes issues with designations from ``digv`` and related commands having extremely high priority
- `dwarfmonitor`:
    - fixed display of creatures and poetic/music/dance forms on ``prefs`` screen
    - added "view unit" option
    - now exposes the selected unit to other tools

- `names`: fixed many errors
- `quicksave`: fixed an issue where the "Saving..." indicator often wouldn't appear

## Misc Improvements
- `gui/gm-unit`:
    - added a profession editor
    - misc. layout improvements
- `remotefortressreader`:
    - support for moving adventurers
    - support for vehicles, gem shapes, item volume, art images, item improvements
- `binpatch`: now reports errors for empty patch files
- `force`: now provides useful help
- `full-heal`:
    - can now select corpses to resurrect
    - now resets body part temperatures upon resurrection to prevent creatures from freezing/melting again
    - now resets units' vanish countdown to reverse effects of `exterminate`
- `launch`: can now ride creatures
- `names`: can now edit names of units

## Removed
- `tweak`: ``kitchen-keys``: :bug:`614` fixed in DF 0.44.04

## Internals
- ``Gui::getAnyUnit()`` supports many more screens/menus

## Structures
- New globals: ``soul_next_id``

================================================================================
# 0.44.05-alpha1

## Misc Improvements
- `gui/liquids`: added more keybindings: 0-7 to change liquid level, P/B to cycle backwards

## Structures
-@ ``incident``: re-aligned again to match disassembly


================================================================================
# 0.44.04-alpha1

## Fixes
- `devel/inject-raws`: now recognizes spaces in reaction names
- `exportlegends`: fixed an error that could occur when exporting empty lists


## Structures
- ``artifact_record``: fixed layout (changed in 0.44.04)
- ``incident``: fixed layout (changed in 0.44.01) - note that many fields have moved


================================================================================
# 0.44.03-beta1

## Fixes
- `autolabor`, `autohauler`, `labormanager`: added support for "put item on display" jobs and building/destroying display furniture
- `gui/gm-editor`: fixed an error when editing primitives in Lua tables

## Misc Improvements
- @ `devel/dump-offsets`: now ignores ``index`` globals
- `gui/pathable`: added tile types to sidebar
- `modtools/skill-change`:
    - now updates skill levels appropriately
    - only prints output if ``-loud`` is passed

## Structures
- New globals:
    - ``version``
    - ``min_load_version``
    - ``movie_version``
    - ``basic_seed``
    - ``title``
    - ``title_spaced``
    - ``ui_building_resize_radius``
- Added ``twbt_render_map`` code offset on x64
- Fixed an issue preventing ``enabler`` from being allocated by DFHack
- Added ``job_type.PutItemOnDisplay``
- Found ``renderer`` vtable on osx64
- ``adventure_movement_optionst``, ``adventure_movement_hold_tilest``, ``adventure_movement_climbst``: named coordinate fields
- ``mission``: added type
- ``unit``: added 3 new vmethods: ``getCreatureTile``, ``getCorpseTile``, ``getGlowTile``
- ``viewscreen_assign_display_itemst``: fixed layout on x64 and identified many fields
- ``viewscreen_reportlistst``: fixed layout, added ``mission_id`` vector
- ``world.status``: named ``missions`` vector


================================================================================
# 0.44.03-alpha1

## Lua
- Improved ``json`` I/O error messages
- Stopped a crash when trying to create instances of classes whose vtable addresses are not available


================================================================================
# 0.44.02-beta1

## New Scripts
- `devel/check-other-ids`: Checks the validity of "other" vectors in the ``world`` global
- `gui/cp437-table`: An in-game CP437 table

## Fixes
- Fixed issues with the console output color affecting the prompt on Windows
- `createitem`: stopped items from teleporting away in some forts
- `gui/gm-unit`: can now edit mining skill
- `gui/quickcmd`: stopped error from adding too many commands
- `modtools/create-unit`: fixed error when domesticating units

## Misc Improvements
- The console now provides suggestions for built-in commands
- `devel/export-dt-ini`: avoid hardcoding flags
- `exportlegends`:
    - reordered some tags to match DF's order
    - added progress indicators for exporting long lists
- `gui/gm-editor`: added enum names to enum edit dialogs
- `gui/gm-unit`: made skill search case-insensitive
- `gui/rename`: added "clear" and "special characters" options
- `remotefortressreader`:
    - includes item stack sizes
    - some performance improvements

## Removed
- `warn-stuck-trees`: :bug:`9252` fixed in DF 0.44.01

## Lua
- Exposed ``get_vector()`` (from C++) for all types that support ``find()``, e.g. ``df.unit.get_vector() == df.global.world.units.all``

## Structures
- Located ``start_dwarf_count`` offset for all builds except 64-bit Linux; `startdwarf` should work now
- Added ``buildings_other_id.DISPLAY_CASE``
- Fixed ``viewscreen_titlest.start_savegames`` alignment
- Fixed ``unit`` alignment
- Identified ``historical_entity.unknown1b.deities`` (deity IDs)


================================================================================
# 0.44.02-alpha1

## New Scripts
- `devel/dump-offsets`: prints an XML version of the global table included in in DF

## Fixes
- Fixed a crash that could occur if a symbol table in symbols.xml had no content

## Lua
- Added a new ``dfhack.console`` API
- API can now wrap functions with 12 or 13 parameters

## Structures
- The ``ui_menu_width`` global is now a 2-byte array; the second item is the former ``ui_area_map_width`` global, which is now removed
- The former ``announcements`` global is now a field in ``d_init``
- ``world`` fields formerly beginning with ``job_`` are now fields of ``world.jobs``, e.g. ``world.job_list`` is now ``world.jobs.list``
