From 476483adb3f9fbddb0427a839e8c4c5880f09687 Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 13:43:32 -0400 Subject: [PATCH 01/10] Add a script to automatically generate both changelogs from a single file This avoids the need to manually copy entries between NEWS.rst and NEWS-dev.rst, and also helps fix some inconsistencies automatically. Pre-0.44.07 changelogs have not been converted yet. --- NEWS.rst | 1030 ----------------------------------------- conf.py | 4 + docs/NEWS-dev.rst | 398 +--------------- docs/NEWS.rst | 14 + docs/changelog.txt | 46 ++ docs/gen_changelog.py | 177 +++++++ index.rst | 2 +- 7 files changed, 245 insertions(+), 1426 deletions(-) delete mode 100644 NEWS.rst create mode 100644 docs/NEWS.rst create mode 100644 docs/changelog.txt create mode 100644 docs/gen_changelog.py diff --git a/NEWS.rst b/NEWS.rst deleted file mode 100644 index 7bdcc7496..000000000 --- a/NEWS.rst +++ /dev/null @@ -1,1030 +0,0 @@ -.. comment - This is the changelog file for DFHack. If you add or change anything, note - it here under the heading "DFHack Future", in the appropriate section. - Items within each section are listed in alphabetical order to minimise merge - conflicts. Try to match the style and level of detail of the other entries. - - This file should not contain details specific to prereleases, but it should - contain changes from previous stable releases. For example, if a bug was - introduced in one alpha version and fixed in another, do not include it - here. - - Sections for each release are added as required, and consist solely of the - following in order as subheadings:: - - New [Internal Commands | Plugins | Scripts | Tweaks | Features] - Fixes - Misc Improvements - Removed - Internals - Structures - Lua - Ruby - - When referring to a script, plugin, or command, use backticks (```) to - create a link to the relevant documentation - and check that the docs are - still up to date! - - When adding a new release, change "DFHack future" to the appropriate title - before releasing, and then add a new "DFHack future" section after releasing. - -.. _changelog: - -######### -Changelog -######### - -.. contents:: - :depth: 2 - -DFHack future -============= - -Fixes ------ -- Support for building on Ubuntu 18.04 -- Fixed some CMake warnings -- `digtype`: stopped designating non-vein tiles (open space, trees, etc.) -- `embark-assistant`: fixed detection of reanimating biomes -- `fix/dead-units`: fixed a bug that could remove some arriving (not dead) units -- `labormanager`: fixed crash due to dig jobs targeting some unrevealed map blocks - -Misc Improvements ------------------ -- `embark-assistant`: - - - Added search for adamantine - - Now supports saving/loading profiles - -- `fillneeds`: added ``-all`` option to apply to all units -- `modtools/item-trigger`: added the ability to specify inventory mode(s) to trigger on -- `remotefortressreader`: added flows, instruments, tool names, campfires, ocean waves, spiderwebs - -Structures ----------- -- ``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`` - -DFHack 0.44.05-r2 -================= - -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.) - -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 - -DFHack 0.44.05-r1 -================= - -New Scripts ------------ -- `break-dance`: Breaks up a stuck dance activity -- `cannibalism`: Allows consumption of sapient corpses -- `devel/check-other-ids`: Checks the validity of "other" vectors in the - ``world`` global -- `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 -- `gui/cp437-table`: An in-game CP437 table -- `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 ------ -- Fixed issues with the console output color affecting the prompt on Windows -- `createitem`: stopped items from teleporting away in some forts -- `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 - -- `gui/gm-unit`: can now edit mining skill -- `gui/quickcmd`: stopped error from adding too many commands -- `names`: fixed many errors -- `quicksave`: fixed an issue where the "Saving..." indicator often wouldn't appear - -Misc Improvements ------------------ -- The console now provides suggestions for built-in commands -- `binpatch`: now reports errors for empty patch files -- `devel/export-dt-ini`: avoid hardcoding flags -- `exportlegends`: - - - reordered some tags to match DF's order - - added progress indicators for exporting long lists - -- `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` - -- `gui/gm-editor`: added enum names to enum edit dialogs -- `gui/gm-unit`: - - - made skill search case-insensitive - - added a profession editor - - misc. layout improvements - -- `gui/liquids`: added more keybindings: 0-7 to change liquid level, P/B to cycle backwards -- `gui/pathable`: added tile types to sidebar -- `gui/rename`: added "clear" and "special characters" options -- `launch`: can now ride creatures -- `modtools/skill-change`: - - - now updates skill levels appropriately - - only prints output if ``-loud`` is passed - -- `names`: can now edit names of units -- `remotefortressreader`: - - - support for moving adventurers - - suport for item stack sizes, vehicles, gem shapes, item volume, art images, item improvements - - some performance improvements - -Removed -------- -- `warn-stuck-trees`: :bug:`9252` fixed in DF 0.44.01 -- `tweak`: ``kitchen-keys``: :bug:`614` fixed in DF 0.44.04 - -Internals ---------- -- ``Gui::getAnyUnit()`` supports many more screens/menus -- New globals available: - - - ``version`` - - ``min_load_version`` - - ``movie_version`` - - ``basic_seed`` - - ``title`` - - ``title_spaced`` - - ``ui_building_resize_radius`` - - ``soul_next_id`` - -Lua ---- -- Added a new ``dfhack.console`` API -- Exposed ``get_vector()`` (from C++) for all types that support ``find()``, - e.g. ``df.unit.get_vector() == df.global.world.units.all`` -- Improved ``json`` I/O error messages -- Stopped a crash when trying to create instances of classes whose vtable - addresses are not available - - -DFHack 0.43.05-r3 -================= - -Internals ---------- -- Fixed an uncommon crash that could occur when printing text to the console -- Added lots of previously-missing DF classes -- More names for fields: https://github.com/DFHack/df-structures/compare/0.43.05-r2...0.43.05 - -Fixes ------ -- Linux: fixed argument to ``setarch`` in the ``dfhack`` launcher script -- Ruby: fixed an error that occurred when the DF path contained an apostrophe -- `diggingInvaders` now compiles again and is included -- `labormanager`: - - - stopped waiting for on-duty military dwarves with minor injuries to obtain care - - stopped waiting for meetings when participant(s) are dead - - fixed a crash for dwarves with no cultural identity - -- `luasocket`: fixed ``receive()`` with a byte count -- `orders`: fixed an error when importing orders with material categories -- `siren`: fixed an error -- `stockpiles`: fixed serialization of barrel and bin counts -- `view-item-info`: fixed a ``CHEESE_MAT``-related error - -Misc Improvements ------------------ -- `devel/export-dt-ini`: added more offsets for new DT versions -- `digfort`: added support for changing z-levels -- `exportlegends`: suppressed ABSTRACT_BUILDING warning -- `gui/dfstatus`: excluded logs in constructions -- `labormanager`: - - - stopped assigning woodcutting jobs to elves - - "recover wounded" jobs now weighted based on altruism - -- `remotefortressreader`: added support for buildings, grass, riders, and - hair/beard styles - - -DFHack 0.43.05-r2 -================= - -Internals ---------- -- Rebuilding DFHack can be faster if nothing Git-related has changed -- Plugins can now hook Screen::readTile() -- Improved Lua compatibility with plugins that hook into GUI functions (like TWBT) -- Expanded focus strings for jobmanagement and workquota_condition viewscreens -- ``Gui::getAnyUnit()``: added support for viewscreen_unitst, - viewscreen_textviewerst, viewscreen_layer_unit_relationshipst -- Fixed (limited) keybinding support in PRINT_MODE:TEXT on macOS -- Added a new standardized ``Gui::refreshSidebar()`` function to fix behavior of - some plugins on the lowest z-level -- New ``Buildings`` module functions: ``markedForRemoval()``, ``getCageOccupants()`` -- Limited recursive command invocations to 20 to prevent crashes -- Added an ``onLoad.init-example`` file - -Lua ---- -- Improved C++ exception handling for some native functions that aren't direct - wrappers around C++ functions (in this case, error messages could be nil and - cause the Lua interpreter to quit) -- Added support for a ``key_pen`` option in Label widgets -- Fixed ``to_first`` argument to ``dfhack.screen.dismiss()`` -- Added optional ``map`` parameters to some screen functions -- Exposed some more functions to Lua: - - - ``dfhack.gui.refreshSidebar()`` - - ``dfhack.gui.getAnyUnit()`` - - ``dfhack.gui.getAnyBuilding()`` - - ``dfhack.gui.getAnyItem()`` - - ``dfhack.gui.getAnyPlant()`` - - ``dfhack.gui.getDepthAt()`` - - ``dfhack.units.getUnitsInBox()`` - - ``dfhack.units.isVisible()`` - - ``dfhack.maps.isTileVisible()`` - - ``dfhack.buildings.markedForRemoval()`` - - ``dfhack.buildings.getCageOccupants()`` - - ``dfhack.internal.md5()`` - - ``dfhack.internal.md5File()`` - - ``dfhack.internal.threadid()`` - -- New function: ``widgets.Pages:getSelectedPage()`` -- Added a ``key`` option to EditField and FilteredList widgets -- Fixed an issue preventing ``repeatUtil.cancel()`` from working when called - from the callback - -Ruby ----- -- Fixed a crash when creating new instances of DF virtual classes (e.g. fixes a - `lever` crash) -- Ruby scripts can now be loaded from any script paths specified (from script- - paths.txt or registered through the Lua API) -- ``unit_find()`` now uses ``Gui::getSelectedUnit()`` and works in more places - (e.g. `exterminate` now works from more screens, like `command-prompt`) - -New Internal Commands ---------------------- -- `alias`: allows configuring aliases for other commands - -New Plugins ------------ -- `orders`: Manipulate manager orders -- `pathable`: Back-end for `gui/pathable` - -New Scripts ------------ -- `clear-smoke`: Removes all smoke from the map -- `empty-bin`: Empty a bin onto the floor -- `fix/retrieve-units`: Spawns stuck invaders/guests -- `fix/stuck-merchants`: Dismisses stuck merchants that haven't entered the map yet -- `gui/pathable`: View whether tiles on the map can be pathed to -- `gui/teleport`: A front-end for the `teleport` script -- `warn-stuck-trees`: Detects citizens stuck in trees - -New Tweaks ----------- -- `tweak` burrow-name-cancel: Implements the "back" option when renaming a - burrow, which currently does nothing (:bug:`1518`) -- `tweak` cage-butcher: Adds an option to butcher units when viewing cages with "q" - -Fixes ------ -- Enforced use of ``stdout.log`` and ``stderr.log`` (instead of their ``.txt`` - counterparts) on Windows -- Fixed ``getItemBaseValue()`` for cheese, sheets and instruments -- Fixed alignment in: - - - ``viewscreen_choose_start_sitest`` - - ``viewscreen_export_graphical_mapst`` - - ``viewscreen_setupadventurest`` - - ``viewscreen_setupdwarfgamest`` - -- `adv-max-skills`: fixed error due to viewscreen changes -- `autolabor`: fixed a crash when assigning haulers while traders are active -- `buildingplan`: fixed an issue that prevented certain numbers from being used - in building names -- `confirm`: - - - dialogs are now closed permanently when disabled from the settings UI - - fixed an issue that could have prevented closing dialogs opened by pressing "s" - -- `embark-tools`: stopped the sand indicator from overlapping dialogs -- `exportlegends`: fixed some crashes and site map issues -- `devel/find-offsets`: fixed ``current_weather`` scan -- `gui/extended-status`: fixed an error when no beds are available -- `gui/family-affairs`: fixed issues with assigning lovers -- `gui/gm-editor`: - - - made keybinding display order consistent - - stopped keys from performing actions in help screen - -- `gui/manager-quantity`: - - - now allows orders with a limit of 0 - - fixed screen detection - -- `gui/mechanisms`, `gui/room-list`: fixed an issue when recentering the map when exiting -- `lever`: prevented pulling non-lever buildings, which can cause crashes -- `markdown`: fixed file encoding -- `modtools/create-unit`: - - - fixed when popup announcements are present - - added checks to ensure that the current game mode is restored - -- `resume`: stopped drawing on the map border -- `show-unit-syndromes`: fixed an error when handling some syndromes -- `strangemood`: fixed some issues with material searches -- `view-item-info`: fixed a color-related error for some materials - -Misc Improvements ------------------ -- Docs: prevented automatic hyphenation in some browsers, which was producing - excessive hyphenation sometimes -- `command-prompt`: invoking ``command-prompt`` a second time now hides the prompt -- `gui/extended-status`: added an option to assign/replace the manager -- `gui/load-screen`: - - - adjusted dialog width for long folder names - - added modification times and DF versions to dialog - -- `gui/mechanisms`, `gui/room-list`, `gui/siege-engine`: add and list "exit to map" options -- `lever`: added support for pulling levers at high priority -- `markdown`: now recognizes ``-n`` in addition to ``/n`` -- `remotefortressreader`: more data exported, used by Armok Vision v0.17.0 -- `resume`, `siege-engine`: improved compatibility with GUI-hooking plugins (like TWBT) -- `sc-script`: improved help text -- `teleport`: can now be used as a module -- `tweak` embark-profile-name: now enabled in ``dfhack.init-example`` -- `tweak` hotkey-clear: fixed display on larger screens - - -DFHack 0.43.05-r1 -================= - -Internals ---------- -- 64-bit support on all platforms -- Several structure fixes to match 64-bit DF's memory layout -- Added ``DFHack::Job::removeJob()`` function -- New module: ``Designations`` - handles designation creation (currently for plants only) -- Added ``Gui::getSelectedPlant()`` -- Added ``Units::getMainSocialActivity()``, ``Units::getMainSocialEvent()`` -- Visual Studio 2015 now required to build on Windows instead of 2010 -- GCC 4.8 or newer required to build on Linux and OS X (and now supported on OS X) -- Updated TinyXML from 2.5.3 to 2.6.2 -- Added the ability to download files manually before building - -Lua ---- -- Lua has been updated to 5.3 - see http://www.lua.org/manual/5.3/readme.html for details - - - Floats are no longer implicitly converted to integers in DFHack API calls - -- ``df.new()`` supports more types: ``char``, ``intptr_t``, ``uintptr_t``, ``long``, ``unsigned long`` -- String representations of vectors and a few other containers now include their lengths -- Added a ``tile-material`` module -- Added a ``Painter:key_string()`` method -- Made ``dfhack.gui.revealInDwarfmodeMap()`` available - -Ruby ----- -- Added support for loading ruby 2.x libraries - -New Plugins ------------ -- `dwarfvet` enables animal caretaking -- `generated-creature-renamer`: Renames generated creature IDs for use with graphics packs -- `labormanager` (formerly autolabor2): a more advanced alternative to `autolabor` -- `misery`: re-added and updated for the 0.4x series -- `title-folder`: shows DF folder name in window title bar when enabled - -New Scripts ------------ -- `adv-rumors`: improves the "Bring up specific incident or rumor" menu in adventure mode -- `fix/tile-occupancy`: Clears bad occupancy flags on the selected tile. -- `install-info`: Logs basic troubleshooting information about the current DFHack installation -- `load-save`: loads a save non-interactively -- `modtools/change-build-menu`: Edit the build mode sidebar menus -- `modtools/if-entity`: Run a command if the current entity matches a given ID -- `season-palette`: Swap color palettes with the changes of the seasons -- `unforbid`: Unforbids all items - -New Tweaks ----------- -- `tweak condition-material `: fixes a crash in the work order condition material list -- `tweak hotkey-clear `: adds an option to clear bindings from DF hotkeys - -Fixes ------ -- The DF path on OS X can now contain spaces and ``:`` characters -- Buildings::setOwner() changes now persist properly when saved -- ``ls`` now lists scripts in folders other than ``hack/scripts``, when applicable -- Fixed ``plug`` output alignment for plugins with long names -- `add-thought`: fixed support for emotion names -- `autochop`: - - - fixed several issues with job creation and removal - - stopped designating the center tile (unreachable) for large trees - - stopped options from moving when enabling and disabling burrows - - fixed display of unnamed burrows - -- `devel/find-offsets`: fixed a crash when vtables used by globals aren't available -- `getplants`: - - - fixed several issues with job creation and removal - - stopped designating the center tile (unreachable) for large trees - -- `gui/workflow`: added extra keybinding to work with `gui/extended-status` -- `manipulator`: - - - Fixed crash when selecting a profession from an empty list - - Custom professions are now sorted alphabetically more reliably - -- `modtools/create-item`: - - - made gloves usable by specifying handedness - - now creates pairs of boots and gloves - -- `modtools/create-unit`: - - - stopped permanently overwriting the creature creation menu in arena mode - - now uses non-English names - - added ``-setUnitToFort`` option to make a unit a civ/group member more easily - - fixed some issues where units would appear in unrevealed areas of the map - -- `modtools/item-trigger`: fixed errors with plant growths -- `remotefortressreader`: fixed a crash when serializing the local map -- `ruby`: fixed a crash when unloading the plugin on Windows -- `stonesense`: disabled overlay in STANDARD-based print modes to prevent crashes -- `title-version`: now hidden when loading an arena - -Misc Improvements ------------------ -- Documented all default keybindings (from :file:`dfhack.init-example`) in the - docs for the relevant commands; updates enforced by build system. -- `autounsuspend`: reduced update frequency to address potential performance issues -- `gui/extended-status`: added a feature to queue beds -- `lua` and `gui/gm-editor` now support the same aliases (``scr``, ``unit``, etc.) -- `manipulator`: added social activities to job column -- `remotefortressreader`: Added support for - - - world map snow coverage - - spatters - - wall info - - site towers, world buildings - - surface material - - building items - - DF version info - -- `title-version`: Added a prerelease indicator -- `workflow`: Re-added ``Alt-W`` keybindings - -DFHack 0.43.03-r1 -================= - -Lua ---- -- Label widgets can now easily register handlers for mouse clicks - -New Features ------------- -- `add-thought`: allow syndrome name as ``-thought`` argument -- `gui/gm-editor` - - - Added ability to insert default types into containers. For primitive types leave the type entry empty, and for references use ``*``. - - Added ``shift-esc`` binding to fully exit from editor - - Added ``gui/gm-editor toggle`` command to toggle editor visibility (saving position) - -- `modtools/create-unit`: - - - Added an option to attach units to an existing wild animal population - - Added an option to attach units to a map feature - -Fixes ------ -- `autofarm`: Can now handle crops that grow for more than a season -- `combine-plants`: Fixed recursion into sub-containers -- `createitem`: Now moves multiple created items to cursor correctly -- `exportlegends`: Improved handling of unknown enum items (fixes many errors) -- `gui/create-item`: Fixed quality when creating multiple items -- `gui/mod-manager`: Fixed error when mods folder doesn't exist -- `modtools/item-trigger`: Fixed handling of items with subtypes -- `reveal`: ``revflood`` now handles constructed stairs with floors in generated fortresses -- `stockflow`: - - - Can order metal mechanisms - - Fixed material category of thread-spinning jobs - -Misc Improvements ------------------ -- The built-in ``ls`` command now wraps the descriptions of commands -- `catsplosion`: now a lua script instead of a plugin -- `fix/diplomats`: replaces ``fixdiplomats`` -- `fix/merchants`: replaces ``fixmerchants`` -- `prefchange`: added a ``help`` option -- `probe`: now displays raw tiletype names -- Unified script documentation and in-terminal help options - -Removed -------- -- `tweak` manager-quantity: no longer needed - -DFHack 0.42.06-r1 -================= - -Internals ---------- -- Commands to run on startup can be specified on the command line with ``+`` - - Example:: - - ./dfhack +devel/print-args example - "Dwarf Fortress.exe" +devel/print-args example - -- Prevented plugins with active viewscreens from being unloaded and causing a crash -- Additional script search paths can be specified in dfhack-config/script-paths.txt - -Lua ---- -- `building-hacks` now supports ``auto_gears`` flags. It automatically finds and animates gears in building definition -- Changed how `eventful` triggers reaction complete. Now it has ``onReactionComplete`` and ``onReactionCompleting``. Second one can be canceled - -New Plugins ------------ -- `autogems`: Creates a new Workshop Order setting, automatically cutting rough gems - -New Scripts ------------ -- `devel/save-version`: Displays DF version information about the current save -- `modtools/extra-gamelog`: replaces ``log-region``, ``soundsense-season``, and ``soundsense`` - -New Features ------------- -- `buildingplan`: Support for floodgates, grates, and bars -- `colonies`: new ``place`` subcommand and supports any vermin (default honey bees) -- `confirm`: Added a confirmation for retiring locations -- `exportlegends`: Exports more information (poetic/musical/dance forms, written/artifact content, landmasses, extra histfig information, and more) -- `search-plugin`: Support for new screens: - - - location occupation assignment - - civilization animal training knowledge - - animal trainer assignment - -- `tweak`: - - - ``tweak block-labors``: Prevents labors that can't be used from being toggled - - ``tweak hide-priority``: Adds an option to hide designation priority indicators - - ``tweak title-start-rename``: Adds a safe rename option to the title screen "Start Playing" menu - -- `zone`: - - - Added ``unassign`` subcommand - - Added ``only`` option to ``assign`` subcommand - -Fixes ------ -- Fixed a crash bug caused by the historical figures DFHack uses to store persistent data. -- More plugins should recognize non-dwarf citizens -- Fixed a possible crash from cloning jobs -- moveToBuilding() now sets flags for items that aren't a structural part of the building properly -- `autotrade`, `stocks`: Made trading work when multiple caravans are present but only some can trade -- `confirm` note-delete: No longer interferes with name entry -- `exportlegends`: Handles entities without specific races, and a few other fixes for things new to v0.42 -- `fastdwarf`: Fixed a bug involving teleporting mothers but not the babies they're holding. -- `gaydar`: Fixed text display on OS X/Linux and failure with soul-less creatures -- `manipulator`: - - - allowed editing of non-dwarf citizens - - stopped ghosts and visitors from being editable - - fixed applying last custom profession - -- `modtools/create-unit`: Stopped making units without civs historical figures -- `modtools/force`: - - - Removed siege option - - Prevented a crash resulting from a bad civilization option - -- `showmood`: Fixed name display on OS X/Linux -- `view-item-info`: Fixed density units - -Misc Improvements ------------------ -- `autochop`: Can now edit log minimum/maximum directly and remove limit entirely -- `autolabor`, `autohauler`, `manipulator`: Added support for new jobs/labors/skills -- `colonies`: now implemented by a script -- `createitem`: Can now create items anywhere without specifying a unit, as long as a unit exists on the map -- `devel/export-dt-ini`: Updated for 0.42.06 -- `devel/find-offsets`: Automated several more scans -- `gui/gm-editor`: Now supports finding some items with a numeric ID (with ``i``) -- `lua`: Now supports some built-in variables like `gui/gm-editor`, e.g. ``unit``, ``screen`` -- `remotefortressreader`: Can now trigger keyboard events -- `stockflow`: Now offers better control over individual craft jobs -- `weather`: now implemented by a script -- `zone`: colored output - -Removed -------- -- DFusion: legacy script system, obsolete or replaced by better alternatives - - -DFHack 0.40.24-r5 -================= - -New Features ------------- -- `confirm`: - - - Added a ``uniform-delete`` option for military uniform deletion - - Added a basic in-game configuration UI - -Fixes ------ -- Fixed a rare crash that could result from running `keybinding` in onLoadWorld.init -- Script help that doesn't start with a space is now recognized correctly -- `confirm`: Fixed issues with haul-delete, route-delete, and squad-disband confirmations intercepting keys too aggressively -- `emigration` should work now -- `fix-unit-occupancy`: Significantly optimized - up to 2,000 times faster in large fortresses -- `gui/create-item`: Allow exiting quantity prompt -- `gui/family-affairs`: Fixed an issue where lack of relationships wasn't recognized and other issues -- `modtools/create-unit`: Fixed a possible issue in reclaim fortress mode -- `search-plugin`: Fixed a crash on the military screen -- `tweak` max-wheelbarrow: Fixed a minor display issue with large numbers -- `workflow`: Fixed a crash related to job postings (and added a fix for existing, broken jobs) - -Misc Improvements ------------------ -- Unrecognized command feedback now includes more information about plugins -- `fix/dry-buckets`: replaces the ``drybuckets`` plugin -- `feature`: now implemented by a script - -DFHack 0.40.24-r4 -================= - -Internals ---------- -- A method for caching screen output is now available to Lua (and C++) -- Developer plugins can be ignored on startup by setting the ``DFHACK_NO_DEV_PLUGINS`` environment variable -- The console on Linux and OS X now recognizes keyboard input between prompts -- JSON libraries available (C++ and Lua) -- More DFHack build information used in plugin version checks and available to plugins and lua scripts -- Fixed a rare overflow issue that could cause crashes on Linux and OS X -- Stopped DF window from receiving input when unfocused on OS X -- Fixed issues with keybindings involving :kbd:`Ctrl`:kbd:`A` and :kbd:`Ctrl`:kbd:`Z`, - as well as :kbd:`Alt`:kbd:`E`/:kbd:`U`/:kbd:`N` on OS X -- Multiple contexts can now be specified when adding keybindings -- Keybindings can now use :kbd:`F10`-:kbd:`F12` and :kbd:`0`-:kbd:`9` -- Plugin system is no longer restricted to plugins that exist on startup -- :file:`dfhack.init` file locations significantly generalized - -Lua ---- -- Scripts can be enabled with the built-in `enable`/`disable ` commands -- A new function, ``reqscript()``, is available as a safer alternative to ``script_environment()`` -- Lua viewscreens can choose not to intercept the OPTIONS keybinding - -New internal commands ---------------------- -- `kill-lua`: Interrupt running Lua scripts -- `type`: Show where a command is implemented - -New plugins ------------ -- `confirm`: Adds confirmation dialogs for several potentially dangerous actions -- `fix-unit-occupancy`: Fixes issues with unit occupancy, such as faulty "unit blocking tile" messages (:bug:`3499`) -- `title-version` (formerly ``vshook``): Display DFHack version on title screen - -New scripts ------------ -- `armoks-blessing`: Adjust all attributes, personality, age and skills of all dwarves in play -- `brainwash`: brainwash a dwarf (modifying their personality) -- `burial`: sets all unowned coffins to allow burial ("-pets" to allow pets too) -- `deteriorateclothes`: make worn clothes on the ground wear far faster to boost FPS -- `deterioratecorpses`: make body parts wear away far faster to boost FPS -- `deterioratefood`: make food vanish after a few months if not used -- `elevate-mental`: elevate all the mental attributes of a unit -- `elevate-physical`: elevate all the physical attributes of a unit -- `emigration`: stressed dwarves may leave your fortress if they see a chance -- `fix-ster`: changes fertility/sterility of animals or dwarves -- `gui/family-affairs`: investigate and alter romantic relationships -- `make-legendary`: modify skill(s) of a single unit -- `modtools/create-unit`: create new units from nothing -- `modtools/equip-item`: a script to equip items on units -- `points`: set number of points available at embark screen -- `pref-adjust`: Adjust all preferences of all dwarves in play -- `rejuvenate`: make any "old" dwarf 20 years old -- `starvingdead`: make undead weaken after one month on the map, and crumble after six -- `view-item-info`: adds information and customisable descriptions to item viewscreens -- `warn-starving`: check for starving, thirsty, or very drowsy units and pause with warning if any are found - -New tweaks ----------- -- embark-profile-name: Allows the use of lowercase letters when saving embark profiles -- kitchen-keys: Fixes DF kitchen meal keybindings -- kitchen-prefs-color: Changes color of enabled items to green in kitchen preferences -- kitchen-prefs-empty: Fixes a layout issue with empty kitchen tabs - -Fixes ------ -- Plugins with vmethod hooks can now be reloaded on OS X -- Lua's ``os.system()`` now works on OS X -- Fixed default arguments in Lua gametype detection functions -- Circular lua dependencies (reqscript/script_environment) fixed -- Prevented crash in ``Items::createItem()`` -- `buildingplan`: Now supports hatch covers -- `gui/create-item`: fixed assigning quality to items, made :kbd:`Esc` work properly -- `gui/gm-editor`: handles lua tables properly -- `help`: now recognizes built-in commands, like ``help`` -- `manipulator`: fixed crash when selecting custom professions when none are found -- `remotefortressreader`: fixed crash when attempting to send map info when no map was loaded -- `search-plugin`: fixed crash in unit list after cancelling a job; fixed crash when disabling stockpile category after searching in a subcategory -- `stockpiles`: now checks/sanitizes filenames when saving -- `stocks`: fixed a crash when right-clicking -- `steam-engine`: fixed a crash on arena load; number keys (e.g. 2/8) take priority over cursor keys when applicable -- tweak fps-min fixed -- tweak farm-plot-select: Stopped controls from appearing when plots weren't fully built -- `workflow`: Fixed some issues with stuck jobs. Existing stuck jobs must be cancelled and re-added -- `zone`: Fixed a crash when using ``zone set`` (and a few other potential crashes) - -Misc Improvements ------------------ -- DFHack documentation: - - - massively reorganised, into files of more readable size - - added many missing entries - - indexes, internal links, offline search all documents - - includes documentation of linked projects (df-structures, third-party scripts) - - better HTML generation with Sphinx - - documentation for scripts now located in source files - -- `autolabor`: - - - Stopped modification of labors that shouldn't be modified for brokers/diplomats - - Prioritize skilled dwarves more efficiently - - Prevent dwarves from running away with tools from previous jobs - -- `automaterial`: Fixed several issues with constructions being allowed/disallowed incorrectly when using box-select -- `dwarfmonitor`: - - - widgets' positions, formats, etc. are now customizable - - weather display now separated from the date display - - New mouse cursor widget - -- `gui/dfstatus`: Can enable/disable individual categories and customize metal bar list -- `full-heal`: ``-r`` option removes corpses -- `gui/gm-editor` - - - Pointers can now be displaced - - Added some useful aliases: "item" for the selected item, "screen" for the current screen, etc. - - Now avoids errors with unrecognized types - -- `gui/hack-wish`: renamed to `gui/create-item` -- `keybinding list ` accepts a context -- `lever`: - - - Lists lever names - - ``lever pull`` can be used to pull the currently-selected lever - -- ``memview``: Fixed display issue -- `modtools/create-item`: arguments are named more clearly, and you can specify the creator to be the unit with id ``df.global.unit_next_id-1`` (useful in conjunction with `modtools/create-unit`) -- ``nyan``: Can now be stopped with dfhack-run -- `plug`: lists all plugins; shows state and number of commands in plugins -- `prospect`: works from within command-prompt -- `quicksave`: Restricted to fortress mode -- `remotefortressreader`: Exposes more information -- `search-plugin`: - - - Supports noble suggestion screen (e.g. suggesting a baron) - - Supports fortress mode loo[k] menu - - Recognizes ? and ; keys - -- `stocks`: can now match beginning and end of item names -- `teleport`: Fixed cursor recognition -- `tidlers`, `twaterlvl`: now implemented by scripts instead of a plugin -- `tweak`: - - - debug output now logged to stderr.log instead of console - makes DFHack start faster - - farm-plot-select: Fixed issues with selecting undiscovered crops - -- `workflow`: Improved handling of plant reactions - -Removed -------- -- `embark-tools` nano: 1x1 embarks are now possible in vanilla 0.40.24 - -DFHack 0.40.24-r3 -================= - -Internals ---------- -- Ruby library now included on OS X - Ruby scripts should work on OS X 10.10 -- libstdc++ should work with older versions of OS X -- Added support for `onMapLoad.init / onMapUnload.init ` scripts -- game type detection functions are now available in the World module -- The ``DFHACK_LOG_MEM_RANGES`` environment variable can be used to log information to ``stderr.log`` on OS X -- Fixed adventure mode menu names -- Fixed command usage information for some commands - -Lua ---- -- Lua scripts will only be reloaded if necessary -- Added a ``df2console()`` wrapper, useful for printing DF (CP437-encoded) text to the console in a portable way -- Added a ``strerror()`` wrapper - -New Internal Commands ---------------------- -- `hide`, `show`: hide and show the console on Windows -- `sc-script`: Allows additional scripts to be run when certain events occur (similar to `onLoad.init` scripts) - -New Plugins ------------ -- `autohauler`: A hauling-only version of autolabor - -New Scripts ------------ -- `modtools/reaction-product-trigger`: triggers callbacks when products are produced (contrast with when reactions complete) - -New Tweaks ----------- -- `fps-min `: Fixes the in-game minimum FPS setting -- `shift-8-scroll `: Gives Shift+8 (or ``*``) priority when scrolling menus, instead of scrolling the map -- `tradereq-pet-gender `: Displays pet genders on the trade request screen - -Fixes ------ -- Fixed game type detection in `3dveins`, `gui/create-item`, `reveal`, `seedwatch` -- ``PRELOAD_LIB``: More extensible on Linux -- `add-spatter`, `eventful`: Fixed crash on world load -- `add-thought`: Now has a proper subthought arg. -- `building-hacks`: Made buildings produce/consume correct amount of power -- `fix-armory`: compiles and is available again (albeit with issues) -- `gui/gm-editor`: Added search option (accessible with "s") -- `hack-wish `: Made items stack properly. -- `modtools/skill-change`: Made level granularity work properly. -- `show-unit-syndromes`: should work -- `stockflow`: - - - Fixed error message in Arena mode - - no longer checks the DF version - - fixed ballistic arrow head orders - - convinces the bookkeeper to update records more often - -- `zone`: Stopped crash when scrolling cage owner list - -Misc Improvements ------------------ -- `autolabor`: A negative pool size can be specified to use the most unskilled dwarves -- `building-hacks`: - - - Added a way to allow building to work even if it consumes more power than is available. - - Added setPower/getPower functions. - -- `catsplosion`: Can now trigger pregnancies in (most) other creatures -- `exportlegends`: ``info`` and ``all`` options export ``legends_plus.xml`` with more data for legends utilities -- `manipulator`: - - - Added ability to edit nicknames/profession names - - added "Job" as a View Type, in addition to "Profession" and "Squad" - - added custom profession templates with masking - -- `remotefortressreader`: Exposes more information - - -DFHack 0.40.24-r2 -================= - -Internals ---------- -- Lua scripts can set environment variables of each other with ``dfhack.run_script_with_env`` -- Lua scripts can now call each others internal nonlocal functions with ``dfhack.script_environment(scriptName).functionName(arg1,arg2)`` -- `eventful`: Lua reactions no longer require LUA_HOOK as a prefix; you can register a callback for the completion of any reaction with a name -- Filesystem module now provides file access/modification times and can list directories (normally and recursively) -- Units Module: New functions:: - - isWar - isHunter - isAvailableForAdoption - isOwnCiv - isOwnRace - getRaceName - getRaceNamePlural - getRaceBabyName - getRaceChildName - isBaby - isChild - isAdult - isEggLayer - isGrazer - isMilkable - isTrainableWar - isTrainableHunting - isTamable - isMale - isFemale - isMerchant - isForest - isMarkedForSlaughter - -- Buildings Module: New Functions:: - - isActivityZone - isPenPasture - isPitPond - isActive - findPenPitAt - -Fixes ------ -- ``dfhack.run_script`` should correctly find save-specific scripts now. -- `add-thought`: updated to properly affect stress. -- `hfs-pit`: should work now -- `autobutcher`: takes gelding into account -- :file:`init.lua` existence checks should be more reliable (notably when using non-English locales) - -Misc Improvements ------------------ -Multiline commands are now possible inside dfhack.init scripts. See :file:`dfhack.init-example` for example usage. - - -DFHack 0.40.24-r1 -================= - -Internals ---------- -CMake shouldn't cache DFHACK_RELEASE anymore. People may need to manually update/delete their CMake cache files to get rid of it. - - -DFHack 0.40.24-r0 -================= - -Internals ---------- -- `EventManager`: fixed crash error with EQUIPMENT_CHANGE event. -- key modifier state exposed to Lua (ie :kbd:`Ctrl`, :kbd:`Alt`, :kbd:`Shift`) - -Fixes ------ -``dfhack.sh`` can now be run from other directories on OS X - -New Plugins ------------ -- `blueprint`: export part of your fortress to quickfort .csv files - -New Scripts ------------ -- `hotkey-notes`: print key, name, and jump position of hotkeys - -Removed -------- -- needs_porting/* - -Misc Improvements ------------------ -Added support for searching more lists - - -Older Changelogs -================ -Are kept in a seperate file: `HISTORY` - -.. that's ``docs/history.rst``, if you're reading the raw text. diff --git a/conf.py b/conf.py index ed62ad5c6..bd94e8315 100644 --- a/conf.py +++ b/conf.py @@ -21,6 +21,8 @@ import re import shlex # pylint:disable=unused-import import sys +sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'docs')) +from gen_changelog import generate_changelog # -- Support :dfhack-keybind:`command` ------------------------------------ # this is a custom directive that pulls info from dfhack.init-example @@ -179,6 +181,7 @@ def all_keybinds_documented(): # Actually call the docs generator and run test +generate_changelog() write_script_docs() all_keybinds_documented() @@ -264,6 +267,7 @@ exclude_patterns = [ 'docs/html*', 'depends/*', 'build*', + 'docs/_auto/news*', ] # The reST default role (used for this markup: `text`) to use for all diff --git a/docs/NEWS-dev.rst b/docs/NEWS-dev.rst index a2c8abd20..68c16d272 100644 --- a/docs/NEWS-dev.rst +++ b/docs/NEWS-dev.rst @@ -1,32 +1,6 @@ .. comment - This is the development changelog file for DFHack. If you add or change - anything, note it here under the heading "DFHack Future", in the appropriate - section. Items within each section are listed in alphabetical order to - minimise merge conflicts. Try to match the style and level of detail of the - other entries. - - This file contains changes that are relevant to users of prereleases. These - changes should include changes from just the previous release, whether that - release was stable or not. For instance, a feature added in 0.43.05-alpha1 - should go under "0.43.05-alpha1" here *and* "0.43.05-r1" (or "future") in - NEWS.rst. A fix in one prerelease for an issue in the previous prerelease - should just go here in the appropriate section, not in NEWS.rst. - - Sections for each release are added as required, and consist solely of the - following in order as subheadings:: - - Fixes - Structures - API Changes - Additions/Removals - Other Changes - - When referring to a script, plugin, or command, use backticks (```) to - create a link to the relevant documentation - and check that the docs are - still up to date! - - When adding a new release, change "DFHack future" to the appropriate title - before releasing, and then add a new "DFHack future" section after releasing. + This is the changelog for development releases. Entries are included from + changelog.txt. .. _dev-changelog: @@ -37,370 +11,4 @@ Development Changelog .. contents:: :depth: 2 -DFHack 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 - -DFHack 0.44.08-alpha1 -===================== - -Fixes ------ -- `fix/dead-units`: fixed a bug that could remove some arriving (not dead) units - -DFHack 0.44.07-beta1 -==================== - -Structures ----------- -- Added symbols for Toady's `0.44.07 Linux test build `_ to fix :bug:`10615` -- ``world_site``: fixed alignment - -Other Changes -------------- -- `modtools/item-trigger`: added the ability to specify inventory mode(s) to trigger on - -DFHack 0.44.07-alpha1 -===================== - -Fixes ------ -- `embark-assistant`: fixed detection of reanimating biomes - -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`` - -Other Changes -------------- -- `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 - - -DFHack 0.44.05-alpha1 -===================== - -Structures ----------- -- ``incident``: re-aligned again to match disassembly - -Other Changes -------------- -- `gui/liquids`: added more keybindings: 0-7 to change liquid level, P/B to cycle backwards - -DFHack 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 - -DFHack 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 - -Structures ----------- -- Added 7 new globals from DF: ``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 - -Other Changes -------------- -- `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 - -DFHack 0.44.03-alpha1 -===================== - -Other Changes -------------- -- Lua: Improved ``json`` I/O error messages -- Lua: Stopped a crash when trying to create instances of classes whose vtable - addresses are not available - -DFHack 0.44.02-beta1 -==================== - -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 - -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) - -API Changes ------------ -- Lua; Exposed ``get_vector()`` (from C++) for all types that support - ``find()``, e.g. ``df.unit.get_vector() == df.global.world.units.all`` - -Additions/Removals ------------------- -- Added `devel/check-other-ids`: Checks the validity of "other" vectors in the - ``world`` global -- Added `gui/cp437-table`: An in-game CP437 table -- Removed `warn-stuck-trees`: the corresponding DF bug was fixed in 0.44.01 - -Other Changes -------------- -- 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 and some performance improvements - - -DFHack 0.44.02-alpha1 -===================== - -Fixes ------ -- Fixed a crash that could occur if a symbol table in symbols.xml had no content -- The Lua 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`` - -API Changes ------------ -- Lua: Added a new ``dfhack.console`` API - -DFHack 0.43.05-beta2 -==================== - -Fixes ------ -- Fixed Buildings::updateBuildings(), along with building creation/deletion events -- Fixed ``plug`` output alignment for plugins with long names -- Fixed a crash that happened when a ``LUA_PATH`` environment variable was set -- `add-thought`: fixed number conversion -- `gui/workflow`: fixed range editing producing the wrong results for certain numbers -- `modtools/create-unit`: now uses non-English names -- `modtools/item-trigger`: fixed errors with plant growths -- `remotefortressreader`: fixed a crash when serializing the local map -- `stockflow`: fixed an issue with non-integer manager order limits -- `title-folder`: fixed compatibility issues with certain SDL libraries on macOS - -Structures ----------- -- Added some missing renderer VTable addresses on macOS -- ``entity.resources.organic``: identified ``parchment`` -- ``entity_sell_category``: added ``Parchment`` and ``CupsMugsGoblets`` -- ``ui_advmode_menu``: added ``Build`` -- ``ui_unit_view_mode``: added ``PrefOccupation`` -- ``unit_skill``: identified ``natural_skill_lvl`` (was ``unk_1c``) -- ``viewscreen_jobmanagementst``: identified ``max_workshops`` -- ``viewscreen_overallstatusst``: made ``visible_pages`` an enum -- ``viewscreen_pricest``: identified fields -- ``viewscreen_workquota_conditionst``: gave some fields ``unk`` names - -API Changes ------------ -- Allowed the Lua API to accept integer-like floats and strings when expecting an integer -- Lua: New ``Painter:key_string()`` method -- Lua: Added ``dfhack.getArchitecture()`` and ``dfhack.getArchitectureName()`` - -Additions/Removals: -------------------- -- Added `adv-rumors` script: improves the "Bring up specific incident or rumor" menu in adventure mode -- Added `install-info` script for basic troubleshooting -- Added `tweak condition-material `: fixes a crash in the work order condition material list -- Added `tweak hotkey-clear `: adds an option to clear bindings from DF hotkeys -- `autofarm`: reverted local biome detection (from 0.43.05-alpha3) - -Other Changes -------------- -- Added a DOWNLOAD_RUBY CMake option, to allow use of a system/external ruby library -- Added the ability to download files manually before building -- `gui/extended-status`: added a feature to queue beds -- `remotefortressreader`: added building items, DF version info -- `stonesense`: Added support for 64-bit macOS and Linux - -DFHack 0.43.05-beta1 -==================== - -Fixes ------ -- Fixed various crashes on 64-bit Windows related to DFHack screens, notably `manipulator` -- Fixed addresses of next_id globals on 64-bit Linux (fixes an `automaterial`/box-select crash) -- ``ls`` now lists scripts in folders other than ``hack/scripts``, when applicable -- `modtools/create-unit`: stopped permanently overwriting the creature creation - menu in arena mode -- `season-palette`: fixed an issue where only part of the screen was redrawn - after changing the color scheme -- `title-version`: now hidden when loading an arena - -Structures ----------- -- ``file_compressorst``: fixed field sizes on x64 -- ``historical_entity``: fixed alignment on x64 -- ``ui_sidebar_menus.command_line``: fixed field sizes on x64 -- ``viewscreen_choose_start_sitest``: added 3 missing fields, renamed ``in_embark_only_warning`` -- ``viewscreen_layer_arena_creaturest``: identified more fields -- ``world.math``: identified -- ``world.murky_pools``: identified - -Additions/Removals ------------------- -- `generated-creature-renamer`: Renames generated creature IDs for use with graphics packs - -Other Changes -------------- -- `title-version`: Added a prerelease indicator - -DFHack 0.43.05-alpha4 -===================== - -Fixes ------ -- Fixed an issue with uninitialized bitfields that was causing several issues - (disappearing buildings in `buildingplan`'s planning mode, strange behavior in - the extended `stocks` screen, and likely other problems). This issue was - introduced in 0.43.05-alpha3. -- `stockflow`: Fixed an "integer expected" error - -Structures ----------- -- Located several globals on 64-bit Linux: flows, timed_events, ui_advmode, - ui_building_assign_type, ui_building_assign_is_marked, - ui_building_assign_units, ui_building_assign_items, and ui_look_list. This - fixes `search-plugin`, `zone`, and `force`, among others. -- ``ui_sidebar_menus``: Fixed some x64 alignment issues - -Additions/Removals ------------------- -- Added `fix/tile-occupancy`: Clears bad occupancy flags on the selected tile. - Useful for fixing blocked tiles introduced by the above buildingplan issue. -- Added a Lua ``tile-material`` module - -Other Changes -------------- -- `labormanager`: Add support for shell crafts -- `manipulator`: Custom professions are now sorted alphabetically more reliably - -DFHack 0.43.05-alpha3 -===================== - -Fixes ------ -- `add-thought`: fixed support for emotion names -- `autofarm`: Made surface farms detect local biome -- `devel/export-dt-ini`: fixed squad_schedule_entry size -- `labormanager`: - - - Now accounts for unit attributes - - Made instrument-building jobs work (constructed instruments) - - Fixed deconstructing constructed instruments - - Fixed jobs in bowyer's shops - - Fixed trap component jobs - - Fixed multi-material construction jobs - - Fixed deconstruction of buildings containing items - - Fixed interference caused by "store item in vehicle" jobs - -- `manipulator`: Fixed crash when selecting a profession from an empty list -- `ruby`: - - - Fixed crash on Win64 due to truncated global addresses - - Fixed compilation on Win64 - - Use correct raw string length with encodings - -Structures ----------- -- Changed many ``comment`` XML attributes with version numbers to use new - ``since`` attribute instead -- ``activity_event_conflictst.sides``: named many fields -- ``building_def.build_key``: fixed size on 64-bit Linux and OS X -- ``historical_kills``: - - - ``unk_30`` -> ``killed_underground_region`` - - ``unk_40`` -> ``killed_region`` - -- ``historical_kills.killed_undead``: removed ``skeletal`` flag -- ``ui_advmode``: aligned enough so that it doesn't crash (64-bit OS X/Linux) -- ``ui_advmode.show_menu``: changed from bool to enum -- ``unit_personality.emotions.flags``: now a bitfield - -API Changes ------------ -- Added ``DFHack::Job::removeJob()`` function -- C++: Removed bitfield constructors that take an initial value. These kept - bitfields from being used in unions. Set ``bitfield.whole`` directly instead. -- Lua: ``bitfield.whole`` now returns an integer, not a decimal - -Additions/Removals ------------------- -- Removed source for treefarm plugin (wasn't built) -- Added `modtools/change-build-menu`: Edit the build mode sidebar menus -- Added `modtools/if-entity`: Run a command if the current entity matches a - given ID -- Added `season-palette`: Swap color palettes with the changes of the seasons - -Other changes -------------- -- Changed minimum GCC version to 4.8 on OS X and Linux (earlier versions - wouldn't have worked on Linux anyway) -- Updated TinyXML from 2.5.3 to 2.6.2 +.. include:: /docs/_auto/news-dev.rst diff --git a/docs/NEWS.rst b/docs/NEWS.rst new file mode 100644 index 000000000..60d180eaa --- /dev/null +++ b/docs/NEWS.rst @@ -0,0 +1,14 @@ +.. comment + This is the changelog for stable releases. Entries are included from + changelog.txt. + +.. _changelog: + +######### +Changelog +######### + +.. contents:: + :depth: 2 + +.. include:: /docs/_auto/news.rst diff --git a/docs/changelog.txt b/docs/changelog.txt new file mode 100644 index 000000000..80fb8e4e7 --- /dev/null +++ b/docs/changelog.txt @@ -0,0 +1,46 @@ +================================================================================ +# Future + + +================================================================================ +# 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 `_ 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 +- `embark-assistant`: fixed detection of reanimating biomes + +## 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`` diff --git a/docs/gen_changelog.py b/docs/gen_changelog.py new file mode 100644 index 000000000..2336e9962 --- /dev/null +++ b/docs/gen_changelog.py @@ -0,0 +1,177 @@ +import collections +import copy +import itertools +import os + +CHANGELOG_SECTIONS = [ + 'New Plugins', + 'New Scripts', + 'New Tweaks', + 'New Features', + 'New Internal Commands', + 'Fixes', + 'Misc Improvements', + 'Removed', + 'Internals', + 'Structures', + 'Lua', + 'Ruby', +] + +class ChangelogEntry(object): + def __init__(self, text, section, stable_version, dev_version): + text = text.lstrip('- ') + # normalize section to title case + self.section = ' '.join(word[0].upper() + word[1:].lower() + for word in section.strip().split()) + self.stable_version = stable_version + self.dev_version = dev_version + self.dev_only = text.startswith('@') + text = text.lstrip('@ ') + self.children = [] + + split_index = text.find(': ') + if split_index != -1: + self.feature, description = text[:split_index], text[split_index+1:] + if description.strip(): + self.children.insert(0, description.strip()) + else: + self.feature = text + self.feature = self.feature.replace(':\\', ':') + + self.sort_key = self.feature.upper() + + def __repr__(self): + return 'ChangelogEntry(%r, %r)' % (self.feature, self.children) + +def parse_changelog(): + cur_stable = None + cur_dev = None + cur_section = None + last_entry = None + entries = [] + + with open('docs/changelog.txt') as f: + for line_id, line in enumerate(f.readlines()): + line_id += 1 + if not line.strip() or line.startswith('==='): + continue + + if line.startswith('##'): + cur_section = line.lstrip('#').strip() + elif line.startswith('#'): + cur_dev = line.lstrip('#').strip().lower() + if ('alpha' not in cur_dev and 'beta' not in cur_dev and + 'rc' not in cur_dev): + cur_stable = cur_dev + elif line.startswith('-'): + if not cur_stable or not cur_dev or not cur_section: + raise ValueError( + 'changelog.txt:%i: Entry without section' % line_id) + last_entry = ChangelogEntry(line.strip(), cur_section, + cur_stable, cur_dev) + entries.append(last_entry) + # entries.setdefault(cur_stable, []).append(last_entry) + # entries.setdefault(cur_dev, []).append(last_entry) + elif line.lstrip().startswith('-'): + if not cur_stable or not cur_dev: + raise ValueError( + 'changelog.txt:%i: Sub-entry without section' % line_id) + if not last_entry: + raise ValueError( + 'changelog.txt:%i: Sub-entry without parent' % line_id) + last_entry.children.append(line.strip('- \n')) + else: + raise ValueError('Invalid line: ' + line) + + return entries + +def consolidate_changelog(all_entries): + for sections in all_entries.values(): + for section, entries in sections.items(): + # sort() is stable, so reverse entries so that older entries for the + # same feature are on top + entries.reverse() + entries.sort(key=lambda entry: entry.sort_key) + new_entries = [] + for feature, group in itertools.groupby(entries, + lambda e: e.feature): + old_entries = list(group) + children = list(itertools.chain(*[entry.children + for entry in old_entries])) + new_entry = copy.deepcopy(old_entries[0]) + new_entry.children = children + new_entries.append(new_entry) + entries[:] = new_entries + + + +def print_changelog(versions, all_entries, path): + # all_entries: version -> section -> entry + with open(path, 'w') as f: + write = lambda s: f.write(s + '\n') + for version in versions: + sections = all_entries[version] + if not sections: + continue + version = 'DFHack ' + version + write(version) + write('=' * len(version)) + write('') + for section in CHANGELOG_SECTIONS: + entries = sections[section] + if not entries: + continue + write(section) + write('-' * len(section)) + for entry in entries: + if len(entry.children) == 1: + write('- ' + entry.feature + ': ' + + entry.children[0].strip('- ')) + continue + elif entry.children: + write('- ' + entry.feature + ':') + write('') + for child in entry.children: + write(' - ' + child) + write('') + else: + write('- ' + entry.feature) + write('') + write('') + + +def generate_changelog(): + entries = parse_changelog() + + # scan for unrecognized sections + for entry in entries: + if entry.section not in CHANGELOG_SECTIONS: + raise RuntimeWarning('Unknown section: ' + entry.section) + + # ordered versions + versions = ['future'] + # map versions to stable versions + stable_version_map = {} + # version -> section -> entry + stable_entries = collections.defaultdict(lambda: + collections.defaultdict(list)) + dev_entries = collections.defaultdict(lambda: + collections.defaultdict(list)) + for entry in entries: + if entry.dev_version not in versions: + versions.append(entry.dev_version) + stable_version_map.setdefault(entry.dev_version, entry.stable_version) + if not entry.dev_only: + stable_entries[entry.stable_version][entry.section].append(entry) + dev_entries[entry.dev_version][entry.section].append(entry) + + consolidate_changelog(stable_entries) + + print_changelog(versions, stable_entries, 'docs/_auto/news.rst') + print_changelog(versions, dev_entries, 'docs/_auto/news-dev.rst') + +if __name__ == '__main__': + os.chdir(os.path.abspath(os.path.dirname(__file__))) + os.chdir('..') + generate_changelog() diff --git a/index.rst b/index.rst index 5cba99e2c..d4bd223c5 100644 --- a/index.rst +++ b/index.rst @@ -49,7 +49,7 @@ Other Contents /docs/Authors /LICENSE - /NEWS + /docs/NEWS /docs/Scripts-removed For Developers From 4158267edc18fa2fece56b3edc090c568d849b78 Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 14:14:03 -0400 Subject: [PATCH 02/10] Ensure that docs/_auto/ exists --- conf.py | 2 -- docs/_auto/.gitignore | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 docs/_auto/.gitignore diff --git a/conf.py b/conf.py index bd94e8315..8ab449b01 100644 --- a/conf.py +++ b/conf.py @@ -145,8 +145,6 @@ def write_script_docs(): magic strings. """ kinds = document_scripts() - if not os.path.isdir('docs/_auto'): - os.mkdir('docs/_auto') head = { 'base': 'Basic Scripts', 'devel': 'Development Scripts', diff --git a/docs/_auto/.gitignore b/docs/_auto/.gitignore new file mode 100644 index 000000000..30d85567b --- /dev/null +++ b/docs/_auto/.gitignore @@ -0,0 +1 @@ +*.rst From b3c3480c95c2fdc1995c6bd635854e8442dde98b Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 14:26:47 -0400 Subject: [PATCH 03/10] Fix doc build dependencies --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f65a46149..0ca927010 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -354,6 +354,8 @@ if (BUILD_DOCS) file(GLOB SPHINX_DEPS "${CMAKE_CURRENT_SOURCE_DIR}/docs/*.rst" + "${CMAKE_CURRENT_SOURCE_DIR}/docs/changelog.txt" + "${CMAKE_CURRENT_SOURCE_DIR}/docs/gen_changelog.py" "${CMAKE_CURRENT_SOURCE_DIR}/docs/images/*.png" "${CMAKE_CURRENT_SOURCE_DIR}/docs/styles/*" "${CMAKE_CURRENT_SOURCE_DIR}/conf.py" @@ -366,7 +368,6 @@ if (BUILD_DOCS) ) set(SPHINX_DEPS ${SPHINX_DEPS} ${SPHINX_SCRIPT_DEPS} "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.rst" - "${CMAKE_CURRENT_SOURCE_DIR}/NEWS.rst" "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" ) From d9d4b3deba976793a38ae900e59097aa8dea39cf Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 14:49:02 -0400 Subject: [PATCH 04/10] Fix NEWS installation --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ca927010..66418270a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -331,7 +331,7 @@ endif() # build the lib itself IF(BUILD_LIBRARY) add_subdirectory (library) - install(FILES LICENSE.rst NEWS.rst DESTINATION ${DFHACK_USERDOC_DESTINATION}) + install(FILES LICENSE.rst docs/NEWS.rst docs/NEWS-dev.rst DESTINATION ${DFHACK_USERDOC_DESTINATION}) endif() file(WRITE "${CMAKE_BINARY_DIR}/dfhack_setarch.txt" ${DFHACK_SETARCH}) From c993417489a0dec4f86cb8ca284c57ef0c2c468e Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 20:55:08 -0400 Subject: [PATCH 05/10] Migrate 0.43 and earlier changelogs to History.rst --- docs/History.rst | 994 +++++++++++++++++++++++++++++++++++++++++++++++ docs/NEWS.rst | 7 + 2 files changed, 1001 insertions(+) diff --git a/docs/History.rst b/docs/History.rst index e789d48c6..8386c4cab 100644 --- a/docs/History.rst +++ b/docs/History.rst @@ -12,11 +12,1005 @@ in ``NEWS.rst`` doesn't get too long. .. contents:: :depth: 2 +DFHack 0.43.05-r3 +================= + +Internals +--------- +- Fixed an uncommon crash that could occur when printing text to the console +- Added lots of previously-missing DF classes +- More names for fields: https://github.com/DFHack/df-structures/compare/0.43.05-r2...0.43.05 + +Fixes +----- +- Linux: fixed argument to ``setarch`` in the ``dfhack`` launcher script +- Ruby: fixed an error that occurred when the DF path contained an apostrophe +- `diggingInvaders` now compiles again and is included +- `labormanager`: + + - stopped waiting for on-duty military dwarves with minor injuries to obtain care + - stopped waiting for meetings when participant(s) are dead + - fixed a crash for dwarves with no cultural identity + +- `luasocket`: fixed ``receive()`` with a byte count +- `orders`: fixed an error when importing orders with material categories +- `siren`: fixed an error +- `stockpiles`: fixed serialization of barrel and bin counts +- `view-item-info`: fixed a ``CHEESE_MAT``-related error + +Misc Improvements +----------------- +- `devel/export-dt-ini`: added more offsets for new DT versions +- `digfort`: added support for changing z-levels +- `exportlegends`: suppressed ABSTRACT_BUILDING warning +- `gui/dfstatus`: excluded logs in constructions +- `labormanager`: + + - stopped assigning woodcutting jobs to elves + - "recover wounded" jobs now weighted based on altruism + +- `remotefortressreader`: added support for buildings, grass, riders, and + hair/beard styles + + +DFHack 0.43.05-r2 +================= + +Internals +--------- +- Rebuilding DFHack can be faster if nothing Git-related has changed +- Plugins can now hook Screen::readTile() +- Improved Lua compatibility with plugins that hook into GUI functions (like TWBT) +- Expanded focus strings for jobmanagement and workquota_condition viewscreens +- ``Gui::getAnyUnit()``: added support for viewscreen_unitst, + viewscreen_textviewerst, viewscreen_layer_unit_relationshipst +- Fixed (limited) keybinding support in PRINT_MODE:TEXT on macOS +- Added a new standardized ``Gui::refreshSidebar()`` function to fix behavior of + some plugins on the lowest z-level +- New ``Buildings`` module functions: ``markedForRemoval()``, ``getCageOccupants()`` +- Limited recursive command invocations to 20 to prevent crashes +- Added an ``onLoad.init-example`` file + +Lua +--- +- Improved C++ exception handling for some native functions that aren't direct + wrappers around C++ functions (in this case, error messages could be nil and + cause the Lua interpreter to quit) +- Added support for a ``key_pen`` option in Label widgets +- Fixed ``to_first`` argument to ``dfhack.screen.dismiss()`` +- Added optional ``map`` parameters to some screen functions +- Exposed some more functions to Lua: + + - ``dfhack.gui.refreshSidebar()`` + - ``dfhack.gui.getAnyUnit()`` + - ``dfhack.gui.getAnyBuilding()`` + - ``dfhack.gui.getAnyItem()`` + - ``dfhack.gui.getAnyPlant()`` + - ``dfhack.gui.getDepthAt()`` + - ``dfhack.units.getUnitsInBox()`` + - ``dfhack.units.isVisible()`` + - ``dfhack.maps.isTileVisible()`` + - ``dfhack.buildings.markedForRemoval()`` + - ``dfhack.buildings.getCageOccupants()`` + - ``dfhack.internal.md5()`` + - ``dfhack.internal.md5File()`` + - ``dfhack.internal.threadid()`` + +- New function: ``widgets.Pages:getSelectedPage()`` +- Added a ``key`` option to EditField and FilteredList widgets +- Fixed an issue preventing ``repeatUtil.cancel()`` from working when called + from the callback + +Ruby +---- +- Fixed a crash when creating new instances of DF virtual classes (e.g. fixes a + `lever` crash) +- Ruby scripts can now be loaded from any script paths specified (from script- + paths.txt or registered through the Lua API) +- ``unit_find()`` now uses ``Gui::getSelectedUnit()`` and works in more places + (e.g. `exterminate` now works from more screens, like `command-prompt`) + +New Internal Commands +--------------------- +- `alias`: allows configuring aliases for other commands + +New Plugins +----------- +- `orders`: Manipulate manager orders +- `pathable`: Back-end for `gui/pathable` + +New Scripts +----------- +- `clear-smoke`: Removes all smoke from the map +- `empty-bin`: Empty a bin onto the floor +- `fix/retrieve-units`: Spawns stuck invaders/guests +- `fix/stuck-merchants`: Dismisses stuck merchants that haven't entered the map yet +- `gui/pathable`: View whether tiles on the map can be pathed to +- `gui/teleport`: A front-end for the `teleport` script +- `warn-stuck-trees`: Detects citizens stuck in trees + +New Tweaks +---------- +- `tweak` burrow-name-cancel: Implements the "back" option when renaming a + burrow, which currently does nothing (:bug:`1518`) +- `tweak` cage-butcher: Adds an option to butcher units when viewing cages with "q" + +Fixes +----- +- Enforced use of ``stdout.log`` and ``stderr.log`` (instead of their ``.txt`` + counterparts) on Windows +- Fixed ``getItemBaseValue()`` for cheese, sheets and instruments +- Fixed alignment in: + + - ``viewscreen_choose_start_sitest`` + - ``viewscreen_export_graphical_mapst`` + - ``viewscreen_setupadventurest`` + - ``viewscreen_setupdwarfgamest`` + +- `adv-max-skills`: fixed error due to viewscreen changes +- `autolabor`: fixed a crash when assigning haulers while traders are active +- `buildingplan`: fixed an issue that prevented certain numbers from being used + in building names +- `confirm`: + + - dialogs are now closed permanently when disabled from the settings UI + - fixed an issue that could have prevented closing dialogs opened by pressing "s" + +- `embark-tools`: stopped the sand indicator from overlapping dialogs +- `exportlegends`: fixed some crashes and site map issues +- `devel/find-offsets`: fixed ``current_weather`` scan +- `gui/extended-status`: fixed an error when no beds are available +- `gui/family-affairs`: fixed issues with assigning lovers +- `gui/gm-editor`: + + - made keybinding display order consistent + - stopped keys from performing actions in help screen + +- `gui/manager-quantity`: + + - now allows orders with a limit of 0 + - fixed screen detection + +- `gui/mechanisms`, `gui/room-list`: fixed an issue when recentering the map when exiting +- `lever`: prevented pulling non-lever buildings, which can cause crashes +- `markdown`: fixed file encoding +- `modtools/create-unit`: + + - fixed when popup announcements are present + - added checks to ensure that the current game mode is restored + +- `resume`: stopped drawing on the map border +- `show-unit-syndromes`: fixed an error when handling some syndromes +- `strangemood`: fixed some issues with material searches +- `view-item-info`: fixed a color-related error for some materials + +Misc Improvements +----------------- +- Docs: prevented automatic hyphenation in some browsers, which was producing + excessive hyphenation sometimes +- `command-prompt`: invoking ``command-prompt`` a second time now hides the prompt +- `gui/extended-status`: added an option to assign/replace the manager +- `gui/load-screen`: + + - adjusted dialog width for long folder names + - added modification times and DF versions to dialog + +- `gui/mechanisms`, `gui/room-list`, `gui/siege-engine`: add and list "exit to map" options +- `lever`: added support for pulling levers at high priority +- `markdown`: now recognizes ``-n`` in addition to ``/n`` +- `remotefortressreader`: more data exported, used by Armok Vision v0.17.0 +- `resume`, `siege-engine`: improved compatibility with GUI-hooking plugins (like TWBT) +- `sc-script`: improved help text +- `teleport`: can now be used as a module +- `tweak` embark-profile-name: now enabled in ``dfhack.init-example`` +- `tweak` hotkey-clear: fixed display on larger screens + + +DFHack 0.43.05-r1 +================= + +Internals +--------- +- 64-bit support on all platforms +- Several structure fixes to match 64-bit DF's memory layout +- Added ``DFHack::Job::removeJob()`` function +- New module: ``Designations`` - handles designation creation (currently for plants only) +- Added ``Gui::getSelectedPlant()`` +- Added ``Units::getMainSocialActivity()``, ``Units::getMainSocialEvent()`` +- Visual Studio 2015 now required to build on Windows instead of 2010 +- GCC 4.8 or newer required to build on Linux and OS X (and now supported on OS X) +- Updated TinyXML from 2.5.3 to 2.6.2 +- Added the ability to download files manually before building + +Lua +--- +- Lua has been updated to 5.3 - see http://www.lua.org/manual/5.3/readme.html for details + + - Floats are no longer implicitly converted to integers in DFHack API calls + +- ``df.new()`` supports more types: ``char``, ``intptr_t``, ``uintptr_t``, ``long``, ``unsigned long`` +- String representations of vectors and a few other containers now include their lengths +- Added a ``tile-material`` module +- Added a ``Painter:key_string()`` method +- Made ``dfhack.gui.revealInDwarfmodeMap()`` available + +Ruby +---- +- Added support for loading ruby 2.x libraries + +New Plugins +----------- +- `dwarfvet` enables animal caretaking +- `generated-creature-renamer`: Renames generated creature IDs for use with graphics packs +- `labormanager` (formerly autolabor2): a more advanced alternative to `autolabor` +- `misery`: re-added and updated for the 0.4x series +- `title-folder`: shows DF folder name in window title bar when enabled + +New Scripts +----------- +- `adv-rumors`: improves the "Bring up specific incident or rumor" menu in adventure mode +- `fix/tile-occupancy`: Clears bad occupancy flags on the selected tile. +- `install-info`: Logs basic troubleshooting information about the current DFHack installation +- `load-save`: loads a save non-interactively +- `modtools/change-build-menu`: Edit the build mode sidebar menus +- `modtools/if-entity`: Run a command if the current entity matches a given ID +- `season-palette`: Swap color palettes with the changes of the seasons +- `unforbid`: Unforbids all items + +New Tweaks +---------- +- `tweak condition-material `: fixes a crash in the work order condition material list +- `tweak hotkey-clear `: adds an option to clear bindings from DF hotkeys + +Fixes +----- +- The DF path on OS X can now contain spaces and ``:`` characters +- Buildings::setOwner() changes now persist properly when saved +- ``ls`` now lists scripts in folders other than ``hack/scripts``, when applicable +- Fixed ``plug`` output alignment for plugins with long names +- `add-thought`: fixed support for emotion names +- `autochop`: + + - fixed several issues with job creation and removal + - stopped designating the center tile (unreachable) for large trees + - stopped options from moving when enabling and disabling burrows + - fixed display of unnamed burrows + +- `devel/find-offsets`: fixed a crash when vtables used by globals aren't available +- `getplants`: + + - fixed several issues with job creation and removal + - stopped designating the center tile (unreachable) for large trees + +- `gui/workflow`: added extra keybinding to work with `gui/extended-status` +- `manipulator`: + + - Fixed crash when selecting a profession from an empty list + - Custom professions are now sorted alphabetically more reliably + +- `modtools/create-item`: + + - made gloves usable by specifying handedness + - now creates pairs of boots and gloves + +- `modtools/create-unit`: + + - stopped permanently overwriting the creature creation menu in arena mode + - now uses non-English names + - added ``-setUnitToFort`` option to make a unit a civ/group member more easily + - fixed some issues where units would appear in unrevealed areas of the map + +- `modtools/item-trigger`: fixed errors with plant growths +- `remotefortressreader`: fixed a crash when serializing the local map +- `ruby`: fixed a crash when unloading the plugin on Windows +- `stonesense`: disabled overlay in STANDARD-based print modes to prevent crashes +- `title-version`: now hidden when loading an arena + +Misc Improvements +----------------- +- Documented all default keybindings (from :file:`dfhack.init-example`) in the + docs for the relevant commands; updates enforced by build system. +- `autounsuspend`: reduced update frequency to address potential performance issues +- `gui/extended-status`: added a feature to queue beds +- `lua` and `gui/gm-editor` now support the same aliases (``scr``, ``unit``, etc.) +- `manipulator`: added social activities to job column +- `remotefortressreader`: Added support for + + - world map snow coverage + - spatters + - wall info + - site towers, world buildings + - surface material + - building items + - DF version info + +- `title-version`: Added a prerelease indicator +- `workflow`: Re-added ``Alt-W`` keybindings + + +DFHack 0.43.05-beta2 +==================== + +Fixes +----- +- Fixed Buildings::updateBuildings(), along with building creation/deletion events +- Fixed ``plug`` output alignment for plugins with long names +- Fixed a crash that happened when a ``LUA_PATH`` environment variable was set +- `add-thought`: fixed number conversion +- `gui/workflow`: fixed range editing producing the wrong results for certain numbers +- `modtools/create-unit`: now uses non-English names +- `modtools/item-trigger`: fixed errors with plant growths +- `remotefortressreader`: fixed a crash when serializing the local map +- `stockflow`: fixed an issue with non-integer manager order limits +- `title-folder`: fixed compatibility issues with certain SDL libraries on macOS + +Structures +---------- +- Added some missing renderer VTable addresses on macOS +- ``entity.resources.organic``: identified ``parchment`` +- ``entity_sell_category``: added ``Parchment`` and ``CupsMugsGoblets`` +- ``ui_advmode_menu``: added ``Build`` +- ``ui_unit_view_mode``: added ``PrefOccupation`` +- ``unit_skill``: identified ``natural_skill_lvl`` (was ``unk_1c``) +- ``viewscreen_jobmanagementst``: identified ``max_workshops`` +- ``viewscreen_overallstatusst``: made ``visible_pages`` an enum +- ``viewscreen_pricest``: identified fields +- ``viewscreen_workquota_conditionst``: gave some fields ``unk`` names + +API Changes +----------- +- Allowed the Lua API to accept integer-like floats and strings when expecting an integer +- Lua: New ``Painter:key_string()`` method +- Lua: Added ``dfhack.getArchitecture()`` and ``dfhack.getArchitectureName()`` + +Additions/Removals: +------------------- +- Added `adv-rumors` script: improves the "Bring up specific incident or rumor" menu in adventure mode +- Added `install-info` script for basic troubleshooting +- Added `tweak condition-material `: fixes a crash in the work order condition material list +- Added `tweak hotkey-clear `: adds an option to clear bindings from DF hotkeys +- `autofarm`: reverted local biome detection (from 0.43.05-alpha3) + +Other Changes +------------- +- Added a DOWNLOAD_RUBY CMake option, to allow use of a system/external ruby library +- Added the ability to download files manually before building +- `gui/extended-status`: added a feature to queue beds +- `remotefortressreader`: added building items, DF version info +- `stonesense`: Added support for 64-bit macOS and Linux + +DFHack 0.43.05-beta1 +==================== + +Fixes +----- +- Fixed various crashes on 64-bit Windows related to DFHack screens, notably `manipulator` +- Fixed addresses of next_id globals on 64-bit Linux (fixes an `automaterial`/box-select crash) +- ``ls`` now lists scripts in folders other than ``hack/scripts``, when applicable +- `modtools/create-unit`: stopped permanently overwriting the creature creation + menu in arena mode +- `season-palette`: fixed an issue where only part of the screen was redrawn + after changing the color scheme +- `title-version`: now hidden when loading an arena + +Structures +---------- +- ``file_compressorst``: fixed field sizes on x64 +- ``historical_entity``: fixed alignment on x64 +- ``ui_sidebar_menus.command_line``: fixed field sizes on x64 +- ``viewscreen_choose_start_sitest``: added 3 missing fields, renamed ``in_embark_only_warning`` +- ``viewscreen_layer_arena_creaturest``: identified more fields +- ``world.math``: identified +- ``world.murky_pools``: identified + +Additions/Removals +------------------ +- `generated-creature-renamer`: Renames generated creature IDs for use with graphics packs + +Other Changes +------------- +- `title-version`: Added a prerelease indicator + +DFHack 0.43.05-alpha4 +===================== + +Fixes +----- +- Fixed an issue with uninitialized bitfields that was causing several issues + (disappearing buildings in `buildingplan`'s planning mode, strange behavior in + the extended `stocks` screen, and likely other problems). This issue was + introduced in 0.43.05-alpha3. +- `stockflow`: Fixed an "integer expected" error + +Structures +---------- +- Located several globals on 64-bit Linux: flows, timed_events, ui_advmode, + ui_building_assign_type, ui_building_assign_is_marked, + ui_building_assign_units, ui_building_assign_items, and ui_look_list. This + fixes `search-plugin`, `zone`, and `force`, among others. +- ``ui_sidebar_menus``: Fixed some x64 alignment issues + +Additions/Removals +------------------ +- Added `fix/tile-occupancy`: Clears bad occupancy flags on the selected tile. + Useful for fixing blocked tiles introduced by the above buildingplan issue. +- Added a Lua ``tile-material`` module + +Other Changes +------------- +- `labormanager`: Add support for shell crafts +- `manipulator`: Custom professions are now sorted alphabetically more reliably + +DFHack 0.43.05-alpha3 +===================== + +Fixes +----- +- `add-thought`: fixed support for emotion names +- `autofarm`: Made surface farms detect local biome +- `devel/export-dt-ini`: fixed squad_schedule_entry size +- `labormanager`: + + - Now accounts for unit attributes + - Made instrument-building jobs work (constructed instruments) + - Fixed deconstructing constructed instruments + - Fixed jobs in bowyer's shops + - Fixed trap component jobs + - Fixed multi-material construction jobs + - Fixed deconstruction of buildings containing items + - Fixed interference caused by "store item in vehicle" jobs + +- `manipulator`: Fixed crash when selecting a profession from an empty list +- `ruby`: + + - Fixed crash on Win64 due to truncated global addresses + - Fixed compilation on Win64 + - Use correct raw string length with encodings + +Structures +---------- +- Changed many ``comment`` XML attributes with version numbers to use new + ``since`` attribute instead +- ``activity_event_conflictst.sides``: named many fields +- ``building_def.build_key``: fixed size on 64-bit Linux and OS X +- ``historical_kills``: + + - ``unk_30`` -> ``killed_underground_region`` + - ``unk_40`` -> ``killed_region`` + +- ``historical_kills.killed_undead``: removed ``skeletal`` flag +- ``ui_advmode``: aligned enough so that it doesn't crash (64-bit OS X/Linux) +- ``ui_advmode.show_menu``: changed from bool to enum +- ``unit_personality.emotions.flags``: now a bitfield + +API Changes +----------- +- Added ``DFHack::Job::removeJob()`` function +- C++: Removed bitfield constructors that take an initial value. These kept + bitfields from being used in unions. Set ``bitfield.whole`` directly instead. +- Lua: ``bitfield.whole`` now returns an integer, not a decimal + +Additions/Removals +------------------ +- Removed source for treefarm plugin (wasn't built) +- Added `modtools/change-build-menu`: Edit the build mode sidebar menus +- Added `modtools/if-entity`: Run a command if the current entity matches a + given ID +- Added `season-palette`: Swap color palettes with the changes of the seasons + +Other changes +------------- +- Changed minimum GCC version to 4.8 on OS X and Linux (earlier versions + wouldn't have worked on Linux anyway) +- Updated TinyXML from 2.5.3 to 2.6.2 + +DFHack 0.43.03-r1 +================= + +Lua +--- +- Label widgets can now easily register handlers for mouse clicks + +New Features +------------ +- `add-thought`: allow syndrome name as ``-thought`` argument +- `gui/gm-editor` + + - Added ability to insert default types into containers. For primitive types leave the type entry empty, and for references use ``*``. + - Added ``shift-esc`` binding to fully exit from editor + - Added ``gui/gm-editor toggle`` command to toggle editor visibility (saving position) + +- `modtools/create-unit`: + + - Added an option to attach units to an existing wild animal population + - Added an option to attach units to a map feature + +Fixes +----- +- `autofarm`: Can now handle crops that grow for more than a season +- `combine-plants`: Fixed recursion into sub-containers +- `createitem`: Now moves multiple created items to cursor correctly +- `exportlegends`: Improved handling of unknown enum items (fixes many errors) +- `gui/create-item`: Fixed quality when creating multiple items +- `gui/mod-manager`: Fixed error when mods folder doesn't exist +- `modtools/item-trigger`: Fixed handling of items with subtypes +- `reveal`: ``revflood`` now handles constructed stairs with floors in generated fortresses +- `stockflow`: + + - Can order metal mechanisms + - Fixed material category of thread-spinning jobs + +Misc Improvements +----------------- +- The built-in ``ls`` command now wraps the descriptions of commands +- `catsplosion`: now a lua script instead of a plugin +- `fix/diplomats`: replaces ``fixdiplomats`` +- `fix/merchants`: replaces ``fixmerchants`` +- `prefchange`: added a ``help`` option +- `probe`: now displays raw tiletype names +- Unified script documentation and in-terminal help options + +Removed +------- +- `tweak` manager-quantity: no longer needed + +DFHack 0.42.06-r1 +================= + +Internals +--------- +- Commands to run on startup can be specified on the command line with ``+`` + + Example:: + + ./dfhack +devel/print-args example + "Dwarf Fortress.exe" +devel/print-args example + +- Prevented plugins with active viewscreens from being unloaded and causing a crash +- Additional script search paths can be specified in dfhack-config/script-paths.txt + +Lua +--- +- `building-hacks` now supports ``auto_gears`` flags. It automatically finds and animates gears in building definition +- Changed how `eventful` triggers reaction complete. Now it has ``onReactionComplete`` and ``onReactionCompleting``. Second one can be canceled + +New Plugins +----------- +- `autogems`: Creates a new Workshop Order setting, automatically cutting rough gems + +New Scripts +----------- +- `devel/save-version`: Displays DF version information about the current save +- `modtools/extra-gamelog`: replaces ``log-region``, ``soundsense-season``, and ``soundsense`` + +New Features +------------ +- `buildingplan`: Support for floodgates, grates, and bars +- `colonies`: new ``place`` subcommand and supports any vermin (default honey bees) +- `confirm`: Added a confirmation for retiring locations +- `exportlegends`: Exports more information (poetic/musical/dance forms, written/artifact content, landmasses, extra histfig information, and more) +- `search-plugin`: Support for new screens: + + - location occupation assignment + - civilization animal training knowledge + - animal trainer assignment + +- `tweak`: + + - ``tweak block-labors``: Prevents labors that can't be used from being toggled + - ``tweak hide-priority``: Adds an option to hide designation priority indicators + - ``tweak title-start-rename``: Adds a safe rename option to the title screen "Start Playing" menu + +- `zone`: + + - Added ``unassign`` subcommand + - Added ``only`` option to ``assign`` subcommand + +Fixes +----- +- Fixed a crash bug caused by the historical figures DFHack uses to store persistent data. +- More plugins should recognize non-dwarf citizens +- Fixed a possible crash from cloning jobs +- moveToBuilding() now sets flags for items that aren't a structural part of the building properly +- `autotrade`, `stocks`: Made trading work when multiple caravans are present but only some can trade +- `confirm` note-delete: No longer interferes with name entry +- `exportlegends`: Handles entities without specific races, and a few other fixes for things new to v0.42 +- `fastdwarf`: Fixed a bug involving teleporting mothers but not the babies they're holding. +- `gaydar`: Fixed text display on OS X/Linux and failure with soul-less creatures +- `manipulator`: + + - allowed editing of non-dwarf citizens + - stopped ghosts and visitors from being editable + - fixed applying last custom profession + +- `modtools/create-unit`: Stopped making units without civs historical figures +- `modtools/force`: + + - Removed siege option + - Prevented a crash resulting from a bad civilization option + +- `showmood`: Fixed name display on OS X/Linux +- `view-item-info`: Fixed density units + +Misc Improvements +----------------- +- `autochop`: Can now edit log minimum/maximum directly and remove limit entirely +- `autolabor`, `autohauler`, `manipulator`: Added support for new jobs/labors/skills +- `colonies`: now implemented by a script +- `createitem`: Can now create items anywhere without specifying a unit, as long as a unit exists on the map +- `devel/export-dt-ini`: Updated for 0.42.06 +- `devel/find-offsets`: Automated several more scans +- `gui/gm-editor`: Now supports finding some items with a numeric ID (with ``i``) +- `lua`: Now supports some built-in variables like `gui/gm-editor`, e.g. ``unit``, ``screen`` +- `remotefortressreader`: Can now trigger keyboard events +- `stockflow`: Now offers better control over individual craft jobs +- `weather`: now implemented by a script +- `zone`: colored output + +Removed +------- +- DFusion: legacy script system, obsolete or replaced by better alternatives + + +DFHack 0.40.24-r5 +================= + +New Features +------------ +- `confirm`: + + - Added a ``uniform-delete`` option for military uniform deletion + - Added a basic in-game configuration UI + +Fixes +----- +- Fixed a rare crash that could result from running `keybinding` in onLoadWorld.init +- Script help that doesn't start with a space is now recognized correctly +- `confirm`: Fixed issues with haul-delete, route-delete, and squad-disband confirmations intercepting keys too aggressively +- `emigration` should work now +- `fix-unit-occupancy`: Significantly optimized - up to 2,000 times faster in large fortresses +- `gui/create-item`: Allow exiting quantity prompt +- `gui/family-affairs`: Fixed an issue where lack of relationships wasn't recognized and other issues +- `modtools/create-unit`: Fixed a possible issue in reclaim fortress mode +- `search-plugin`: Fixed a crash on the military screen +- `tweak` max-wheelbarrow: Fixed a minor display issue with large numbers +- `workflow`: Fixed a crash related to job postings (and added a fix for existing, broken jobs) + +Misc Improvements +----------------- +- Unrecognized command feedback now includes more information about plugins +- `fix/dry-buckets`: replaces the ``drybuckets`` plugin +- `feature`: now implemented by a script + +DFHack 0.40.24-r4 +================= + +Internals +--------- +- A method for caching screen output is now available to Lua (and C++) +- Developer plugins can be ignored on startup by setting the ``DFHACK_NO_DEV_PLUGINS`` environment variable +- The console on Linux and OS X now recognizes keyboard input between prompts +- JSON libraries available (C++ and Lua) +- More DFHack build information used in plugin version checks and available to plugins and lua scripts +- Fixed a rare overflow issue that could cause crashes on Linux and OS X +- Stopped DF window from receiving input when unfocused on OS X +- Fixed issues with keybindings involving :kbd:`Ctrl`:kbd:`A` and :kbd:`Ctrl`:kbd:`Z`, + as well as :kbd:`Alt`:kbd:`E`/:kbd:`U`/:kbd:`N` on OS X +- Multiple contexts can now be specified when adding keybindings +- Keybindings can now use :kbd:`F10`-:kbd:`F12` and :kbd:`0`-:kbd:`9` +- Plugin system is no longer restricted to plugins that exist on startup +- :file:`dfhack.init` file locations significantly generalized + +Lua +--- +- Scripts can be enabled with the built-in `enable`/`disable ` commands +- A new function, ``reqscript()``, is available as a safer alternative to ``script_environment()`` +- Lua viewscreens can choose not to intercept the OPTIONS keybinding + +New internal commands +--------------------- +- `kill-lua`: Interrupt running Lua scripts +- `type`: Show where a command is implemented + +New plugins +----------- +- `confirm`: Adds confirmation dialogs for several potentially dangerous actions +- `fix-unit-occupancy`: Fixes issues with unit occupancy, such as faulty "unit blocking tile" messages (:bug:`3499`) +- `title-version` (formerly ``vshook``): Display DFHack version on title screen + +New scripts +----------- +- `armoks-blessing`: Adjust all attributes, personality, age and skills of all dwarves in play +- `brainwash`: brainwash a dwarf (modifying their personality) +- `burial`: sets all unowned coffins to allow burial ("-pets" to allow pets too) +- `deteriorateclothes`: make worn clothes on the ground wear far faster to boost FPS +- `deterioratecorpses`: make body parts wear away far faster to boost FPS +- `deterioratefood`: make food vanish after a few months if not used +- `elevate-mental`: elevate all the mental attributes of a unit +- `elevate-physical`: elevate all the physical attributes of a unit +- `emigration`: stressed dwarves may leave your fortress if they see a chance +- `fix-ster`: changes fertility/sterility of animals or dwarves +- `gui/family-affairs`: investigate and alter romantic relationships +- `make-legendary`: modify skill(s) of a single unit +- `modtools/create-unit`: create new units from nothing +- `modtools/equip-item`: a script to equip items on units +- `points`: set number of points available at embark screen +- `pref-adjust`: Adjust all preferences of all dwarves in play +- `rejuvenate`: make any "old" dwarf 20 years old +- `starvingdead`: make undead weaken after one month on the map, and crumble after six +- `view-item-info`: adds information and customisable descriptions to item viewscreens +- `warn-starving`: check for starving, thirsty, or very drowsy units and pause with warning if any are found + +New tweaks +---------- +- embark-profile-name: Allows the use of lowercase letters when saving embark profiles +- kitchen-keys: Fixes DF kitchen meal keybindings +- kitchen-prefs-color: Changes color of enabled items to green in kitchen preferences +- kitchen-prefs-empty: Fixes a layout issue with empty kitchen tabs + +Fixes +----- +- Plugins with vmethod hooks can now be reloaded on OS X +- Lua's ``os.system()`` now works on OS X +- Fixed default arguments in Lua gametype detection functions +- Circular lua dependencies (reqscript/script_environment) fixed +- Prevented crash in ``Items::createItem()`` +- `buildingplan`: Now supports hatch covers +- `gui/create-item`: fixed assigning quality to items, made :kbd:`Esc` work properly +- `gui/gm-editor`: handles lua tables properly +- `help`: now recognizes built-in commands, like ``help`` +- `manipulator`: fixed crash when selecting custom professions when none are found +- `remotefortressreader`: fixed crash when attempting to send map info when no map was loaded +- `search-plugin`: fixed crash in unit list after cancelling a job; fixed crash when disabling stockpile category after searching in a subcategory +- `stockpiles`: now checks/sanitizes filenames when saving +- `stocks`: fixed a crash when right-clicking +- `steam-engine`: fixed a crash on arena load; number keys (e.g. 2/8) take priority over cursor keys when applicable +- tweak fps-min fixed +- tweak farm-plot-select: Stopped controls from appearing when plots weren't fully built +- `workflow`: Fixed some issues with stuck jobs. Existing stuck jobs must be cancelled and re-added +- `zone`: Fixed a crash when using ``zone set`` (and a few other potential crashes) + +Misc Improvements +----------------- +- DFHack documentation: + + - massively reorganised, into files of more readable size + - added many missing entries + - indexes, internal links, offline search all documents + - includes documentation of linked projects (df-structures, third-party scripts) + - better HTML generation with Sphinx + - documentation for scripts now located in source files + +- `autolabor`: + + - Stopped modification of labors that shouldn't be modified for brokers/diplomats + - Prioritize skilled dwarves more efficiently + - Prevent dwarves from running away with tools from previous jobs + +- `automaterial`: Fixed several issues with constructions being allowed/disallowed incorrectly when using box-select +- `dwarfmonitor`: + + - widgets' positions, formats, etc. are now customizable + - weather display now separated from the date display + - New mouse cursor widget + +- `gui/dfstatus`: Can enable/disable individual categories and customize metal bar list +- `full-heal`: ``-r`` option removes corpses +- `gui/gm-editor` + + - Pointers can now be displaced + - Added some useful aliases: "item" for the selected item, "screen" for the current screen, etc. + - Now avoids errors with unrecognized types + +- `gui/hack-wish`: renamed to `gui/create-item` +- `keybinding list ` accepts a context +- `lever`: + + - Lists lever names + - ``lever pull`` can be used to pull the currently-selected lever + +- ``memview``: Fixed display issue +- `modtools/create-item`: arguments are named more clearly, and you can specify the creator to be the unit with id ``df.global.unit_next_id-1`` (useful in conjunction with `modtools/create-unit`) +- ``nyan``: Can now be stopped with dfhack-run +- `plug`: lists all plugins; shows state and number of commands in plugins +- `prospect`: works from within command-prompt +- `quicksave`: Restricted to fortress mode +- `remotefortressreader`: Exposes more information +- `search-plugin`: + + - Supports noble suggestion screen (e.g. suggesting a baron) + - Supports fortress mode loo[k] menu + - Recognizes ? and ; keys + +- `stocks`: can now match beginning and end of item names +- `teleport`: Fixed cursor recognition +- `tidlers`, `twaterlvl`: now implemented by scripts instead of a plugin +- `tweak`: + + - debug output now logged to stderr.log instead of console - makes DFHack start faster + - farm-plot-select: Fixed issues with selecting undiscovered crops + +- `workflow`: Improved handling of plant reactions + +Removed +------- +- `embark-tools` nano: 1x1 embarks are now possible in vanilla 0.40.24 + +DFHack 0.40.24-r3 +================= + +Internals +--------- +- Ruby library now included on OS X - Ruby scripts should work on OS X 10.10 +- libstdc++ should work with older versions of OS X +- Added support for `onMapLoad.init / onMapUnload.init ` scripts +- game type detection functions are now available in the World module +- The ``DFHACK_LOG_MEM_RANGES`` environment variable can be used to log information to ``stderr.log`` on OS X +- Fixed adventure mode menu names +- Fixed command usage information for some commands + +Lua +--- +- Lua scripts will only be reloaded if necessary +- Added a ``df2console()`` wrapper, useful for printing DF (CP437-encoded) text to the console in a portable way +- Added a ``strerror()`` wrapper + +New Internal Commands +--------------------- +- `hide`, `show`: hide and show the console on Windows +- `sc-script`: Allows additional scripts to be run when certain events occur (similar to `onLoad.init` scripts) + +New Plugins +----------- +- `autohauler`: A hauling-only version of autolabor + +New Scripts +----------- +- `modtools/reaction-product-trigger`: triggers callbacks when products are produced (contrast with when reactions complete) + +New Tweaks +---------- +- `fps-min `: Fixes the in-game minimum FPS setting +- `shift-8-scroll `: Gives Shift+8 (or ``*``) priority when scrolling menus, instead of scrolling the map +- `tradereq-pet-gender `: Displays pet genders on the trade request screen + +Fixes +----- +- Fixed game type detection in `3dveins`, `gui/create-item`, `reveal`, `seedwatch` +- ``PRELOAD_LIB``: More extensible on Linux +- `add-spatter`, `eventful`: Fixed crash on world load +- `add-thought`: Now has a proper subthought arg. +- `building-hacks`: Made buildings produce/consume correct amount of power +- `fix-armory`: compiles and is available again (albeit with issues) +- `gui/gm-editor`: Added search option (accessible with "s") +- `hack-wish `: Made items stack properly. +- `modtools/skill-change`: Made level granularity work properly. +- `show-unit-syndromes`: should work +- `stockflow`: + + - Fixed error message in Arena mode + - no longer checks the DF version + - fixed ballistic arrow head orders + - convinces the bookkeeper to update records more often + +- `zone`: Stopped crash when scrolling cage owner list + +Misc Improvements +----------------- +- `autolabor`: A negative pool size can be specified to use the most unskilled dwarves +- `building-hacks`: + + - Added a way to allow building to work even if it consumes more power than is available. + - Added setPower/getPower functions. + +- `catsplosion`: Can now trigger pregnancies in (most) other creatures +- `exportlegends`: ``info`` and ``all`` options export ``legends_plus.xml`` with more data for legends utilities +- `manipulator`: + + - Added ability to edit nicknames/profession names + - added "Job" as a View Type, in addition to "Profession" and "Squad" + - added custom profession templates with masking + +- `remotefortressreader`: Exposes more information + + +DFHack 0.40.24-r2 +================= + +Internals +--------- +- Lua scripts can set environment variables of each other with ``dfhack.run_script_with_env`` +- Lua scripts can now call each others internal nonlocal functions with ``dfhack.script_environment(scriptName).functionName(arg1,arg2)`` +- `eventful`: Lua reactions no longer require LUA_HOOK as a prefix; you can register a callback for the completion of any reaction with a name +- Filesystem module now provides file access/modification times and can list directories (normally and recursively) +- Units Module: New functions:: + + isWar + isHunter + isAvailableForAdoption + isOwnCiv + isOwnRace + getRaceName + getRaceNamePlural + getRaceBabyName + getRaceChildName + isBaby + isChild + isAdult + isEggLayer + isGrazer + isMilkable + isTrainableWar + isTrainableHunting + isTamable + isMale + isFemale + isMerchant + isForest + isMarkedForSlaughter + +- Buildings Module: New Functions:: + + isActivityZone + isPenPasture + isPitPond + isActive + findPenPitAt + +Fixes +----- +- ``dfhack.run_script`` should correctly find save-specific scripts now. +- `add-thought`: updated to properly affect stress. +- `hfs-pit`: should work now +- `autobutcher`: takes gelding into account +- :file:`init.lua` existence checks should be more reliable (notably when using non-English locales) + +Misc Improvements +----------------- +Multiline commands are now possible inside dfhack.init scripts. See :file:`dfhack.init-example` for example usage. + + +DFHack 0.40.24-r1 +================= + +Internals +--------- +CMake shouldn't cache DFHACK_RELEASE anymore. People may need to manually update/delete their CMake cache files to get rid of it. + + +DFHack 0.40.24-r0 +================= + +Internals +--------- +- `EventManager`: fixed crash error with EQUIPMENT_CHANGE event. +- key modifier state exposed to Lua (ie :kbd:`Ctrl`, :kbd:`Alt`, :kbd:`Shift`) + +Fixes +----- +``dfhack.sh`` can now be run from other directories on OS X + +New Plugins +----------- +- `blueprint`: export part of your fortress to quickfort .csv files + +New Scripts +----------- +- `hotkey-notes`: print key, name, and jump position of hotkeys + +Removed +------- +- needs_porting/* + +Misc Improvements +----------------- +- Added support for searching more lists DFHack 0.40.23-r1 ================= Internals +--------- - plugins will not be loaded if globals they specify as required are not located (should prevent some crashes) Fixes diff --git a/docs/NEWS.rst b/docs/NEWS.rst index 60d180eaa..506999280 100644 --- a/docs/NEWS.rst +++ b/docs/NEWS.rst @@ -12,3 +12,10 @@ Changelog :depth: 2 .. include:: /docs/_auto/news.rst + + +Older Changelogs +================ +Are kept in a seperate file: `HISTORY` + +.. that's ``docs/history.rst``, if you're reading the raw text. From f8f67b1e2366155d656f07b033b03bc0bdfee38e Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 21:36:18 -0400 Subject: [PATCH 06/10] gen_changelog: remove double colons, add --check flag --- docs/gen_changelog.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/gen_changelog.py b/docs/gen_changelog.py index 2336e9962..189591c1f 100644 --- a/docs/gen_changelog.py +++ b/docs/gen_changelog.py @@ -2,6 +2,7 @@ import collections import copy import itertools import os +import sys CHANGELOG_SECTIONS = [ 'New Plugins', @@ -37,7 +38,7 @@ class ChangelogEntry(object): self.children.insert(0, description.strip()) else: self.feature = text - self.feature = self.feature.replace(':\\', ':') + self.feature = self.feature.replace(':\\', ':').rstrip(':') self.sort_key = self.feature.upper() @@ -171,7 +172,20 @@ def generate_changelog(): print_changelog(versions, stable_entries, 'docs/_auto/news.rst') print_changelog(versions, dev_entries, 'docs/_auto/news-dev.rst') + return entries + if __name__ == '__main__': os.chdir(os.path.abspath(os.path.dirname(__file__))) os.chdir('..') - generate_changelog() + entries = generate_changelog() + if '--check' in sys.argv: + with open('docs/_auto/news.rst') as f: + content_stable = f.read() + with open('docs/_auto/news-dev.rst') as f: + content_dev = f.read() + for entry in entries: + for description in entry.children: + if not entry.dev_only and description not in content_stable: + print('stable missing: ' + description) + if description not in content_dev: + print('dev missing: ' + description) From ffb62d0e73151874cfc0ceb7adbd9464020f3391 Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 21:36:41 -0400 Subject: [PATCH 07/10] Add remaining 0.44 changelog entries --- docs/changelog.txt | 214 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 213 insertions(+), 1 deletion(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index 80fb8e4e7..b413237ed 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -1,5 +1,6 @@ ================================================================================ # Future +=== Leave this section blank ================================================================================ @@ -32,15 +33,226 @@ # 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``, ``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`` + From 26fb047aef147ed78c8e00351fd5b3406b8d370e Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 22:21:03 -0400 Subject: [PATCH 08/10] Adjust which changelog files get installed --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66418270a..8f3c5947e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -331,7 +331,7 @@ endif() # build the lib itself IF(BUILD_LIBRARY) add_subdirectory (library) - install(FILES LICENSE.rst docs/NEWS.rst docs/NEWS-dev.rst DESTINATION ${DFHACK_USERDOC_DESTINATION}) + install(FILES LICENSE.rst docs/changelog.txt DESTINATION ${DFHACK_USERDOC_DESTINATION}) endif() file(WRITE "${CMAKE_BINARY_DIR}/dfhack_setarch.txt" ${DFHACK_SETARCH}) @@ -395,6 +395,7 @@ if (BUILD_DOCS) install(DIRECTORY ${dfhack_SOURCE_DIR}/docs/html/ DESTINATION ${DFHACK_USERDOC_DESTINATION}/docs ) + install(FILES docs/_auto/news.rst docs/_auto/news-dev.rst DESTINATION ${DFHACK_USERDOC_DESTINATION}) install(FILES "README.html" DESTINATION "${DFHACK_DATA_DESTINATION}") endif() From 374243d697de92dadbe60da77a1519b79aa15836 Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 22:22:20 -0400 Subject: [PATCH 09/10] Document changelog process --- Contributing.rst | 3 ++- docs/Compile.rst | 14 ++++++++++++++ docs/NEWS-dev.rst | 5 +++++ docs/NEWS.rst | 5 +++++ docs/changelog.txt | 30 ++++++++++++++++++++++++++++++ docs/gen_changelog.py | 15 +++++++++++++-- 6 files changed, 69 insertions(+), 3 deletions(-) diff --git a/Contributing.rst b/Contributing.rst index 2c1e7bb45..59ff8285f 100644 --- a/Contributing.rst +++ b/Contributing.rst @@ -32,7 +32,8 @@ How to get new code into DFHack (i.e. not the master or develop branch of your fork). * If possible, compile on multiple platforms when changing anything that compiles * It must pass CI - run ``python travis/all.py`` to check this. -* Update ``NEWS.rst`` and ``docs/Authors.rst`` when applicable. +* Update ``changelog.txt`` and ``docs/Authors.rst`` when applicable. See + `build-changelog` for more information on the changelog format. * Create a GitHub pull request once finished * Submit ideas and bug reports as :issue:`issues on GitHub <>`. Posts in the forum thread can easily get missed or forgotten. diff --git a/docs/Compile.rst b/docs/Compile.rst index 74ffb4078..54d9c21c8 100644 --- a/docs/Compile.rst +++ b/docs/Compile.rst @@ -666,6 +666,20 @@ Then close that Admin ``cmd.exe``, re-open another Admin ``cmd.exe``, and run:: pip install sphinx +.. _build-changelog: + +Building the changelogs +----------------------- +If you have Python installed, but do not want to build all of the documentation, +you can build the changelogs with the ``docs/gen_changelog.py`` script. + +All changes should be listed in ``changelog.txt``. A description of this file's +format follows: + +.. include:: /docs/changelog.txt + :start-after: ===help + :end-before: ===end + Misc. Notes =========== diff --git a/docs/NEWS-dev.rst b/docs/NEWS-dev.rst index 68c16d272..7a9da7cb7 100644 --- a/docs/NEWS-dev.rst +++ b/docs/NEWS-dev.rst @@ -8,6 +8,11 @@ Development Changelog ##################### +This file contains changes grouped by the release (stable or development) in +which they first appeared. See `build-changelog` for more information. + +See `changelog` for a list of changes grouped by stable releases. + .. contents:: :depth: 2 diff --git a/docs/NEWS.rst b/docs/NEWS.rst index 506999280..22f9881b9 100644 --- a/docs/NEWS.rst +++ b/docs/NEWS.rst @@ -8,6 +8,11 @@ Changelog ######### +This file contains changes grouped by the stable release in which they first +appeared. See `build-changelog` for more information. + +See `dev-changelog` for a list of changes grouped by development releases. + .. contents:: :depth: 2 diff --git a/docs/changelog.txt b/docs/changelog.txt index b413237ed..d59930998 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -1,3 +1,33 @@ +===[[[ +===help + +Entries in docs/NEWS.rst and docs/NEWS-dev.rst are generated from +docs/changelog.txt. NEWS.rst groups entries by stable releases, and NEWS-dev.rst +groups them by all releases (stable and development). For example, an entry +listed under "0.44.05-alpha1" in changelog.txt will be listed under that in +NEWS-dev.rst as well, but under "0.44.05-r1" in NEWS.rst (assuming that is the +closest stable release after 0.44.05-alpha1). An entry listed under a stable +release in changelog.txt will be listed under that release in both NEWS.rst and +NEWS-dev.rst. + +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. + +===end +]]] + ================================================================================ # Future === Leave this section blank diff --git a/docs/gen_changelog.py b/docs/gen_changelog.py index 189591c1f..fcc6cb1f2 100644 --- a/docs/gen_changelog.py +++ b/docs/gen_changelog.py @@ -53,8 +53,21 @@ def parse_changelog(): entries = [] with open('docs/changelog.txt') as f: + multiline = '' for line_id, line in enumerate(f.readlines()): line_id += 1 + + if multiline: + multiline += line + elif '[[[' in line: + multiline = line + + if ']]]' in multiline: + line = multiline.replace(']]]', '') + multiline = '' + elif multiline: + continue + if not line.strip() or line.startswith('==='): continue @@ -72,8 +85,6 @@ def parse_changelog(): last_entry = ChangelogEntry(line.strip(), cur_section, cur_stable, cur_dev) entries.append(last_entry) - # entries.setdefault(cur_stable, []).append(last_entry) - # entries.setdefault(cur_dev, []).append(last_entry) elif line.lstrip().startswith('-'): if not cur_stable or not cur_dev: raise ValueError( From 02768cd019d263c1ea690b3d3d0760ca3f47d5db Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 2 Apr 2018 22:30:54 -0400 Subject: [PATCH 10/10] Update future section --- docs/changelog.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index d59930998..512f5f1cd 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -1,3 +1,5 @@ +=== Scroll down for changes + ===[[[ ===help @@ -28,9 +30,13 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: ===end ]]] +================================================================================ +======== IMPORTANT: rename this, and add a new "future" section, BEFORE ======== +======== making a new DFHack release! ======== ================================================================================ # Future -=== Leave this section blank +## Misc Improvements +- Reorganized changelogs and improved changelog editing process ================================================================================