Merge branch 'develop' into docs

develop
myk002 2022-08-31 23:00:39 -07:00
commit b1a8662c4a
No known key found for this signature in database
GPG Key ID: 8A39CA0FA0C16E78
7 changed files with 227 additions and 76 deletions

@ -33,7 +33,7 @@ Put that file in your dfhack-config/init/ directory -- the same directory that h
""
"Also check out https://docs.dfhack.org/en/stable/docs/Plugins.html#professions for more information on the default labor professions that are distributed with DFHack, including suggestions on how many dwarves of each profession you are likely to need at each stage of fort maturity."
""
"Once you have your starting surface workshops up and running, you might want to configure buildingplan (in its global settings, accessible from any building placement screen, e.g.: b-a-G) to only use blocks for constructions so it won't use your precious wood, boulders, and bars to build floors and walls. If you bring at least 7 blocks with you on embark, you can even set this in your onMapLoad.init file like this:"
"Once you have your starting surface workshops up and running, you might want to configure buildingplan (in its global settings, accessible from any building placement screen, e.g.: b-a-G) to only use blocks for constructions so it won't use your precious wood, boulders, and bars to build floors and walls. If you bring at least 7 blocks with you on embark, you can even set this in your dfhack-config/init/onMapLoad.init file like this:"
on-new-fortress buildingplan set boulders false; buildingplan set logs false
""
"Directly after embark, run ""quickfort run library/dreamfort.csv -n /setup"" with your cursor on your wagon to set settings, and get started building your fort with ""quickfort run library/dreamfort.csv -n /surface1"" on the surface (see /surface_help for how to select a good spot). Read the walkthroughs for each level to understand what's going on and follow the checklist to keep track of where you are in the building process. Good luck, and have fun building an awesome Dreamfort-based fort!"
@ -50,6 +50,7 @@ interactively."
""
-- Preparation (before you embark!) --
Copy hack/examples/init/onMapLoad_dreamfort.init to your dfhack-config/init directory inside your DF installation
Optionally copy the premade Dreamfort embark profile from the online spreadsheets to the data/init/embark_profiles.txt file
""
-- Set settings and preload initial orders --
quickfort run library/dreamfort.csv -n /setup,# Run before making any manual adjustments to settings! Run the /setup_help blueprint for details on what this blueprint does.
@ -360,6 +361,7 @@ Once the marked trees are cleared and at least the beehives and weapon rack have
place/surface_place
build/surface_build
query/surface_query
traffic/surface_traffic
clear_large/surface_clear_large
""
"#meta label(surface6) start(central stairs) message(Remember to enqueue manager orders for this blueprint.
@ -979,6 +981,40 @@ You might also want to set the ""trade goods quantum"" stockpile to Auto Trade i
#dig label(surface_traffic) start(19; 19) hidden() set traffic designations
,,,`,,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,,,,,,,,,,,,,,,,,`,,`
,,,`,,`,`,`,`,`,`,`,`,`,`,`,`,,`,,`,`,`,`,`,`,`,`,`,`,`,`,,`
,,,`,,`,,`,,,,,,,,`,,,,,,`,,,,,,,,,,`,,`
,,,`,,`,,`,,,,,,,,,,`,`,`,,,,,,,,,,,,`,,`
,,,`,,`,,,,,,,,,,`,,`,`,`,,`,,,,,,,,,,`,,`
,,,`,,`,,`,,,,,,,,,,`,`,`,,,,,,,,,,,,`,,`
,,,`,,`,,`,,,,,,,,`,,,,,,`,,,,,,,,,,`,,`
,,,`,,`,`,`,`,`,`,`,,`,`,`,`,,`,,`,`,`,`,or,`,`,`,`,`,`,`,,`
,,,`,,`,,,,,,,,,`,,ol,ol,ol,ol,ol,,`,or,,,,,,,,`,,`
,,,`,,`,,,,,,,,,ol,ol,ol,ol,ol,ol,ol,ol,ol,or,,,,,,,,`,,`
,,,`,,`,,,,,,,,,ol,ol,,,,,,ol,ol,or,,,,,,,,`,,`
,,,`,,`,,,,,,,,,ol,ol,,,,,,ol,ol,or,,,,,,,,`,,`
,,,`,,`,,,,,,,,,`,,,,,,,,`,or,,,,,,,,`,,`
,,,`,,`,`,`,`,`,`,`,`,`,`,,,,,,,,`,`,`,`,`,`,`,`,`,`,,`
,,,`,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,`
,,,`,`,`,`,`,`,`,`,`,`,`,`,ol,ol,ol,ol,ol,ol,ol,`,`,`,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,ol,ol,ol,ol,ol,ol,ol
,,,,,,,,,,,,,,,ol,ol,ol,ol,ol,ol,ol
#dig label(surface_clear_large) start(19; 19) hidden() clear wider area of trees
t1(37x33)
@ -1529,6 +1565,7 @@ Farming Walkthrough:
Once furniture has been placed, continue with /farming3.) workshops, stockpiles, and important furniture"
build/farming_build
place/farming_place
traffic/farming_traffic
query_stockpiles/farming_query_stockpiles
link_stockpiles/farming_link
""
@ -1601,6 +1638,37 @@ build3/farming_build3
,,,,,,,,,,,,,,,ry
#dig label(farming_traffic) start(16; 18) hidden() keep hungry dwarves away from the crops and food stores so they prefer the prepared meals
,,,,,,,,,ol,ol,ol,,or,or,or,or,or,,ol,ol,ol,ol
,,,,,,,,,ol,ol,ol,,or,or,or,or,or,,ol,ol,ol,ol
,,,,,,,,,ol,ol,ol,,or,or,or,or,or,,ol,ol,ol,ol
,,,,,,,,,,,ol,,or,or,or,or,or,,ol,ol,ol,ol
,,,,,,,ol,ol,ol,,ol,,or,or,or,or,or,,ol,ol,ol,ol
,,,,,,,ol,ol,ol,ol,ol,,or,or,or,or,or,,ol,ol,ol,ol
,,,,,,,ol,ol,ol,,ol,,or,or,or,or,or,,ol
,,,,,,,,,,,ol,,or,or,or,or,or,,ol,,ol,ol,ol
,,,,,,ol,ol,ol,ol,,ol,,or,or,or,or,or,,ol,ol,ol,ol,ol
,,,,,,ol,ol,ol,ol,,ol,,or,or,or,or,or,,ol,,ol,ol,ol
,,,ol,ol,,ol,ol,ol,ol,,ol,,or,or,or,or,or,,ol
,,ol,ol,ol,,ol,ol,ol,ol,,ol,,or,or,or,or,or,,ol,,ol,ol,ol,,ol,ol,ol
,,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,,or,,or,,,ol,ol,ol,ol,ol,ol,ol,ol,ol
,,,ol,ol,,ol,ol,ol,ol,,ol,ol,ol,ol,ol,ol,ol,ol,ol,,ol,ol,ol,,ol,ol,ol
,,,,or,,,or,,,,,,ol,`,`,`,ol,,,,,or,,,,or
,,or,or,or,or,or,or,or,or,or,or,,ol,`,~,`,ol,,or,or,or,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,or,or,or,or,ol,`,`,`,ol,or,or,or,or,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,or,or,or,,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,or,or,,,,ol,,ol,,,,or,or,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,or,,,ol,ol,ol,ol,ol,ol,ol,,,or,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,or,,ol,ol,,,ol,,,ol,ol,,or,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,,,ol,ol,,ol,ol,ol,,ol,ol,,,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,,ol,ol,ol,,ol,ol,ol,,ol,ol,ol,,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,,ol,ol,ol,,ol,ol,ol,,ol,ol,ol,,or,or,or,or,or,or,or
,,or,or,or,or,or,or,or,,ol,ol,ol,,,ol,,,ol,ol,ol,,or,or,or,or,or,or,or
,,,,,,,,,,,,,,,ol
"#query label(farming_query_stockpiles) start(16; 18) hidden() message(remember to:
- assign a minecart to the refuse quantum stockpile (run ""assign-minecarts all"")
- if the industry level is already built, configure the jugs, pots, and bags stockpiles to take from the ""Goods"" quantum stockpile on the industry level) config stockpiles"
@ -1669,7 +1737,7 @@ build3/farming_build3
,,,,,,,,,`,`,`,,`,`,`,`,`,,`,`,`,`
,,,,,,,,,r&,`,`,,`,`,`,`,`,,`,`,`,`
,,,,,,,,,r&a+&,,,,`,`,`,`,`,,`,`,`,`
,,,,,,,,,`,`,`,,`,`,`,`,`,,`,`,r+&h
,,,,,,,,,,,`,,`,`,`,`,`,,`,`,`,`
,,,,,,,`,`,`,,`,,`,`,`,`,`,,`,`,`,`
@ -2138,9 +2206,9 @@ Services Walkthrough:
"#meta label(services2) start(central stairs) message(Remember to enqueue manager orders for this blueprint.
Once furniture has been placed, continue with /services3.) dining hall anchors, stockpiles, hospital, garbage dump"
zones/services_zones
build/services_build
place/services_place
zones/services_zones
name_zones/services_name_zones
query_stockpiles/services_query_stockpiles
""
@ -2153,6 +2221,64 @@ build2/services_build2
build3/services_build3
place_jail/services_place_jail
query_jail/services_query_jail
"#zone label(services_zones) start(18; 18) hidden() message(If you'd like to fill your wells via bucket brigade, activate the inactive pond zones one level down from where the wells will be built.) garbage dump, hospital, and pond zones"
,`,`,`,,`,`,`,,`,`,`,,`,`,`,,`,,`,`,`
,`,`,`,,`,`,`,,`,`,`,,`,`,`,`,`,`,`,`,`
,`,`,`,,`,`,`,,`,`,`,,`,`,`,,`,,`,`,`
,,`,,,,`,,,,`,,,,,,,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,,`,,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,,`,,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,,,,,`,,,,,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,,,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,,`,,`,,,,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,`,`,`,`,`,,,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,`,,`,`,`,`,`,,`,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,`,`,`,`,`,,,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,,,d,,,,,ht,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,,,,,,,,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,,,,`,`,,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
#>
,,,,,,,,,,,,,`,apPf,`,,`,,`,apPf,`
,,,,,,,,,,,,,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,`,apPf,`,,`,,`,apPf,`
,,,,,,,,,,,,,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,,,`,,,,,,,,,`
,,,,,,,,,,,,,,,,,`,,,,,,,,,`
,,,,,,,,,,,,,,,`,`,`,`,`,,,,,,,`
,,,,,,,,,,,,,,,`,`,`,`,`,,,,,,`,`,`
,,,,,,,,,,,,,,,`,`,`,`,`,,,,,,`,apPf,`
,,,,,,,,,,,,,,,`,`,`,`,`
,,,,,,,,,,,,,,,`,`,`,`,`
#build label(services_build) start(18; 18) hidden() build basic hospital and dining room anchor
,b,b,b,,b,b,b,,b,b,b,,`,`,`,,`,,`,`,`
@ -2225,64 +2351,6 @@ query_jail/services_query_jail
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
"#zone label(services_zones) start(18; 18) hidden() message(If you'd like to fill your wells via bucket brigade, activate the inactive pond zones one level down from where the wells will be built.) hospital, garbage dump, and pond zones"
,`,`,`,,`,`,`,,`,`,`,,`,`,`,,`,,`,`,`
,`,`,`,,`,`,`,,`,`,`,,`,`,`,`,`,`,`,`,`
,`,`,`,,`,`,`,,`,`,`,,`,`,`,,`,,`,`,`
,,`,,,,`,,,,`,,,,,,,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,,`,,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,,`,,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,,,,,`,,,,,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,,,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`,,`,`,`,`,`,`,`,`,`,,ht,,ht,,ht,,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,,`,,`,,,,,ht,,ht,,ht,,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,`,`,`,`,`,,,,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,`,,`,`,`,`,`,,`,,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,`,`,`,`,`,,,,ht,ht,ht,ht,ht,ht,ht,ht,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,,,d,,,,,,ht,,ht,,ht,,ht
,`,`,`,`,`,`,`,`,`,`,`,,,,,,,,,,,,ht,,ht,,ht,,ht
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,`,`,`,`,`,`,`,`,`,`,`
,,,,`,`,,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
,`,`,`,`,`,,`,`,`,`,`
#>
,,,,,,,,,,,,,`,apPf,`,,`,,`,apPf,`
,,,,,,,,,,,,,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,`,apPf,`,,`,,`,apPf,`
,,,,,,,,,,,,,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`
,,,,,,,,,,,,,,,,,`,`,`,`,`,`,`,`,`,`
,,,,,,,,,,,,,,,,,`,,,,,,,,,`
,,,,,,,,,,,,,,,,,`,,,,,,,,,`
,,,,,,,,,,,,,,,`,`,`,`,`,,,,,,,`
,,,,,,,,,,,,,,,`,`,`,`,`,,,,,,`,`,`
,,,,,,,,,,,,,,,`,`,`,`,`,,,,,,`,apPf,`
,,,,,,,,,,,,,,,`,`,`,`,`
,,,,,,,,,,,,,,,`,`,`,`,`
#query label(services_name_zones) start(18; 18) hidden()
,`,`,`,,`,`,`,,`,`,`,,`,`,`,,`,,`,`,`
@ -2507,6 +2575,42 @@ query_jail/services_query_jail
,,,,,,,,,,,,,,,`,`,`,`,`
,,,,,,,,,,,,,,,`,`,`,`,`
#dig label(services_traffic) start(18; 18) hidden() promote the tavern as the place to eat
,ol,ol,ol,,ol,ol,ol,,ol,ol,ol,,or,or,or,,or,,or,or,or
,ol,ol,ol,,ol,ol,ol,,ol,ol,ol,,or,or,or,or,or,or,or,or,or
,ol,ol,ol,,ol,ol,ol,,ol,ol,ol,,or,or,or,,or,,or,or,or
,,ol,,,,ol,,,,ol,,,,,,,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,,or,,or,or,or,,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or,,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,,or,,or,or,or,,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,,,,,or,,,,,,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or,,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or,,,,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,or,or,or,or,or,or,or,or,or,,or,,or,,or,,or
,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,ol,,,,,or,,or,,,,,or,,or,,or,,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,,,,oh,oh,oh,oh,oh,,,,or,or,or,or,or,or,or,or,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,`,`,`,oh,oh,oh,oh,oh,oh,oh,oh,oh,or,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,,`,,oh,`,`,`,oh,,`,,oh,oh,oh,`,oh,or,or,or,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,`,`,`,oh,oh,oh,oh,oh,oh,oh,oh,oh,or,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,,,,oh,oh,oh,oh,oh,,,,or,or,or,or,or,or,or,or,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,,,,,,`,,,,,,or,,or,,or,,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,,,,,,,,,,,,or,,or,,or,,or
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh,oh
,,,,oh,oh,,oh,oh
,oh,oh,oh,oh,oh,,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,,oh,oh,oh,oh,oh
,oh,oh,oh,oh,oh,,oh,oh,oh,oh,oh
"#build label(services_build3) start(18; 18) hidden() jail, statues"
,~,~,~,,~,~,~,,~,~,~,,t,l,b,,`,,t,l,b

Can't render this file because it has a wrong number of fields in line 56.

@ -3348,24 +3348,27 @@ A module for reading custom tokens added to the raws by mods.
The same as ``getToken(plantGrowthItem, token)`` but with a specified plant and growth, using growth name
(e.g. "LEAVES") instead of number.
It is recommended to prefix custom raw tokens with the name of your mod to avoid duplicate behaviour where
two mods make callbacks that work on the same tag.
Examples:
* Using an eventful onReactionComplete hook, something for disturbing dwarven science::
if customRawTokens.getToken(reaction, "DFHACK_CAUSES_INSANITY") then
if customRawTokens.getToken(reaction, "EXAMPLE_MOD_CAUSES_INSANITY") then
-- make unit who performed reaction go insane
* Using an eventful onProjItemCheckMovement hook, a fast or slow-firing crossbow::
-- check projectile distance flown is zero, get firer, etc...
local multiplier = tonumber(customRawTokens.getToken(bow, "DFHACK_FIRE_RATE_MULTIPLIER")) or 1
local multiplier = tonumber(customRawTokens.getToken(bow, "EXAMPLE_MOD_FIRE_RATE_MULTIPLIER")) or 1
firer.counters.think_counter = firer.counters.think_counter * multiplier
* Something for a script that prints help text about different types of units::
local unit = dfhack.gui.getSelectedUnit()
if not unit then return end
local helpText = customRawTokens.getToken(unit, "DFHACK_HELP_TEXT")
local helpText = customRawTokens.getToken(unit, "EXAMPLE_MOD_HELP_TEXT")
if helpText then print(helpText) end
* Healing armour::
@ -3374,7 +3377,7 @@ Examples:
local healAmount = 0
for _, entry in ipairs(unit.inventory) do
if entry.mode == 2 then -- Worn
healAmount = healAmount + tonumber((customRawTokens.getToken(entry.item, "DFHACK_HEAL_AMOUNT")) or 0)
healAmount = healAmount + tonumber((customRawTokens.getToken(entry.item, "EXAMPLE_MOD_HEAL_AMOUNT")) or 0)
end
end
unit.body.blood_count = math.min(unit.body.blood_max, unit.body.blood_count + healAmount)
@ -3983,6 +3986,9 @@ Attributes:
widgets while it has focus. You can set this to ``true``, for example,
if you don't want a ``List`` widget to react to arrow keys while the
user is editing.
:ignore_keys: If specified, must be a list of key names that the edit field
should ignore. This is useful if you have plain string characters
that you want to use as hotkeys (like ``+``).
An ``EditField`` will only read and process text input if it has keyboard focus.
It will automatically acquire keyboard focus when it is added as a subview to
@ -4308,6 +4314,7 @@ supports:
:edit_pen: If specified, used instead of ``cursor_pen`` for the edit field.
:edit_below: If true, the edit field is placed below the list instead of above.
:edit_key: If specified, the edit field is disabled until this key is pressed.
:edit_ignore_keys: If specified, must be a list of key names that the filter edit field should ignore.
:not_found_label: Specifies the text of the label shown when no items match the filter.
The list choices may include the following attributes:

@ -10,14 +10,6 @@ work (e.g. links from the `changelog`).
:local:
:depth: 1
.. _devel/unforbidall:
devel/unforbidall
=================
Replaced by the `unforbid` script. Run ``unforbid all --quiet`` to match the
behavior of the original ``devel/unforbidall`` script.
.. _deteriorateclothes:
deteriorateclothes
@ -39,6 +31,13 @@ deterioratefood
Replaced by the new combined `deteriorate` script. Run
``deteriorate --types=food``.
.. _devel/unforbidall:
devel/unforbidall
=================
Replaced by the `unforbid` script. Run ``unforbid all --quiet`` to match the
behavior of the original ``devel/unforbidall`` script.
.. _digfort:
digfort
@ -57,6 +56,12 @@ Allowed the military to store equipment in barracks containers. Removed because
it required a binary patch to DF in order to function, and no such patch has
existed since DF 0.34.11.
.. _fix/build-location:
fix/build-location
==================
The corresponding DF :bug:`5991` was fixed in DF 0.40.05.
.. _fortplan:
fortplan
@ -67,6 +72,12 @@ script instead. You can use your existing .csv files. Just move them to the
``blueprints`` folder in your DF installation, and instead of
``fortplan file.csv`` run ``quickfort run file.csv``.
.. _gui/hack-wish:
gui/hack-wish
=============
Replaced by `gui/create-item`.
.. _gui/no-dfhack-init:
gui/no-dfhack-init
@ -79,4 +90,4 @@ longer necessary.
warn-stuck-trees
================
The corresponding DF bug, :bug:`9252` was fixed in DF 0.44.01.
The corresponding DF :bug:`9252` was fixed in DF 0.44.01.

@ -55,6 +55,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
- `seedwatch`: ``seedwatch all`` now adds all plants with seeds to the watchlist, not just the "basic" crops.
- UX: You can now move the cursor around in DFHack text fields in ``gui/`` scripts (e.g. `gui/blueprint`, `gui/quickfort`, or `gui/gm-editor`). You can move the cursor by clicking where you want it to go with the mouse or using the Left/Right arrow keys. Ctrl+Left/Right will move one word at a time, and Alt+Left/Right will move to the beginning/end of the text.
- UX: You can now click on the hotkey hint text in many ``gui/`` script windows to activate the hotkey, like a button. Not all scripts have been updated to use the clickable widget yet, but you can try it in `gui/blueprint` or `gui/quickfort`.
- `quickfort`: `Dreamfort <quickfort-blueprint-guide>` blueprint set improvements: set traffic designations to encourage dwarves to eat in the grand hall instead of the manager's office and to eat cooked food instead of raw ingredients
## Documentation
@ -72,6 +73,8 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
- ``tile-material``: fix the order of declarations. The ``GetTileMat`` function now returns the material as intended (always returned nil before). Also changed the license info, with permission of the original author.
- ``widgets.EditField``: new ``onsubmit2`` callback attribute is called when the user hits Shift-Enter.
- ``widgets.EditField``: new function: ``setCursor(position)`` sets the input cursor.
- ``widgets.EditField``: new attribute: ``ignore_keys`` lets you ignore specified characters if you want to use them as hotkeys
- ``widgets.FilteredList``: new attribute: ``edit_ignore_keys`` gets passed to the filter EditField as ``ignore_keys``
- ``widgets.Label``: ``scroll`` function now interprets the keywords ``+page``, ``-page``, ``+halfpage``, and ``-halfpage`` in addition to simple positive and negative numbers.
- ``widgets.HotkeyLabel``: clicking on the widget will now call ``on_activate()``.
- ``widgets.CycleHotkeyLabel``: clicking on the widget will now cycle the options and trigger ``on_change()``. This also applies to the ``ToggleHotkeyLabel`` subclass.

@ -188,6 +188,7 @@ EditField.ATTRS{
key = DEFAULT_NIL,
key_sep = DEFAULT_NIL,
modal = false,
ignore_keys = DEFAULT_NIL,
}
function EditField:preinit(init_table)
@ -270,6 +271,12 @@ function EditField:onInput(keys)
return self:inputToSubviews(keys)
end
if self.ignore_keys then
for _,ignore_key in ipairs(self.ignore_keys) do
if keys[ignore_key] then return false end
end
end
if self.key and keys.LEAVESCREEN then
local old = self.text
self:setText(self.saved_text)
@ -1099,6 +1106,7 @@ FilteredList = defclass(FilteredList, Widget)
FilteredList.ATTRS {
edit_below = false,
edit_key = DEFAULT_NIL,
edit_ignore_keys = DEFAULT_NIL,
}
function FilteredList:init(info)
@ -1108,6 +1116,7 @@ function FilteredList:init(info)
on_change = self:callback('onFilterChange'),
on_char = self:callback('onFilterChar'),
key = self.edit_key,
ignore_keys = self.edit_ignore_keys,
}
self.list = List{
frame = { t = 2 },
@ -1204,7 +1213,9 @@ function FilteredList:setFilter(filter, pos)
local cidx = nil
filter = filter or ''
self.edit:setText(filter)
if filter ~= self.edit.text then
self.edit:setText(filter)
end
if filter ~= '' then
local tokens = filter:split()

@ -1 +1 @@
Subproject commit f6c8778817b760a0d53c6fc8a176679df7a6e660
Subproject commit 7bae77756f974aad765251096516a89d9d035977

@ -54,3 +54,18 @@ function test.editfield_click()
expect.eq(3, e.cursor)
end)
end
function test.editfield_ignore_keys()
local e = widgets.EditField{ignore_keys={'CUSTOM_B', 'CUSTOM_C'}}
e:setFocus(true)
e:onInput{_STRING=string.byte('a'), CUSTOM_A=true}
expect.eq('a', e.text, '"a" should be accepted')
e:onInput{_STRING=string.byte('b'), CUSTOM_B=true}
expect.eq('a', e.text, '"b" should be rejected')
e:onInput{_STRING=string.byte('c'), CUSTOM_C=true}
expect.eq('a', e.text, '"c" should be rejected')
e:onInput{_STRING=string.byte('d'), CUSTOM_D=true}
expect.eq('ad', e.text, '"d" should be accepted')
end