Merge branch 'develop' of https://github.com/DFHack/dfhack into embark-assistant
commit
4a2704665d
@ -1,4 +1,5 @@
|
|||||||
This folder contains blueprints used by the `quickfort` script. For more information, see:
|
This folder contains blueprints that can be applied by the `quickfort` script. For more information, see:
|
||||||
|
|
||||||
* [Quickfort command reference](https://docs.dfhack.org/en/stable/docs/_auto/base.html#quickfort)
|
* [Quickfort command reference](https://docs.dfhack.org/en/stable/docs/_auto/base.html#quickfort)
|
||||||
* [Quickfort user guide](https://docs.dfhack.org/en/stable/docs/guides/quickfort-user-guide.html)
|
* [Quickfort blueprint guide](https://docs.dfhack.org/en/stable/docs/guides/quickfort-user-guide.html)
|
||||||
|
* [Quickfort library guide](https://docs.dfhack.org/en/stable/docs/guides/quickfort-library-guide.html)
|
||||||
|
@ -1,106 +1,17 @@
|
|||||||
# Aliases for quickfort #query mode blueprints
|
# Custom aliases for quickfort query mode blueprints
|
||||||
#
|
#
|
||||||
# This file defines custom keycode shortcuts for #query mode blueprints.
|
# This file defines custom key sequence shortcuts for query mode blueprints.
|
||||||
# Definitions in this file take precedence over any definitions in the baseline
|
# Definitions in this file take precedence over any definitions in the
|
||||||
# aliases configuration file at hack/data/quickfort/aliases-common.txt. See that
|
# baseline aliases configuration file in
|
||||||
# file for the many useful aliases that are already defined.
|
# hack/data/quickfort/aliases-common.txt
|
||||||
#
|
#
|
||||||
# If possible, build on the baseline aliases when defining your own aliases. If
|
# Please see
|
||||||
# the DF UI screens change, updated baseline aliases may allow your aliases to
|
# https://docs.dfhack.org/en/latest/docs/guides/quickfort-alias-guide.html
|
||||||
# automatically adapt to the new UI. For example, if you create an alias to
|
# or
|
||||||
# modify particular furniture stockpile settings, start your alias with
|
# hack/docs/docs/guides/quickfort-alias-guide.html
|
||||||
# "{furnitureprefix}" instead of manually writing "s{Down 2}". Then, if the
|
# in your DF installation directory for alias syntax documentation and an
|
||||||
# location of the furniture setting changes, your alias will automatically
|
# overview of the DFHack alias standard library.
|
||||||
# inherit the updated position when DFHack is updated.
|
|
||||||
#
|
#
|
||||||
# Aliases simplify repetitive tasks, such as configuring workshop profiles or
|
|
||||||
# adjusting a food stockpile to accept only seeds. Making new aliases is just a
|
|
||||||
# matter of mimicking the keys used to navigate through the menus and select
|
|
||||||
# options. Use the aliases in your blueprint spreadsheets by writing an alias by
|
|
||||||
# itself in a cell, like "nocontainers", or reference an alias in a larger
|
|
||||||
# sequence by enclosing it in curly brackets, like "{nocontainers}{linksonly}"
|
|
||||||
#
|
#
|
||||||
# For example, say you have the following build and place blueprints:
|
# Add your custom aliases here. Example:
|
||||||
#
|
# food_stash: {foodprefix}b{Right}{Down 11}p^{permitplants}
|
||||||
# #build masonry workshop
|
|
||||||
# ~, ~,~,`,`,`
|
|
||||||
# ~,wm,~,`,`,`
|
|
||||||
# ~, ~,~,`,`,`
|
|
||||||
#
|
|
||||||
# #place stockpile for mason
|
|
||||||
# ~,~,~,s,s,s
|
|
||||||
# ~,~,~,s,s,s
|
|
||||||
# ~,~,~,s,s,s
|
|
||||||
#
|
|
||||||
# and you want to configure the stockpile to hold only non-economic ("other")
|
|
||||||
# stone and to give to the adjacent mason workshop. You could write the
|
|
||||||
# keystrokes directly:
|
|
||||||
#
|
|
||||||
# #query start(4;1;upper left corner of stockpile) configure mason
|
|
||||||
# ~,~,~,s{Down 5}deb{Right}{Down 2}p^,`,`
|
|
||||||
# ~,~,~,g{Left 2}&, `,`
|
|
||||||
# ~,~,~,`, `,`
|
|
||||||
#
|
|
||||||
# or you could use alias names:
|
|
||||||
#
|
|
||||||
# #query start(4;1;upper left corner of stockpile) configure mason
|
|
||||||
# ~,~,~,otherstone,`,`
|
|
||||||
# ~,~,~,give2left, `,`
|
|
||||||
# ~,~,~,`, `,`
|
|
||||||
#
|
|
||||||
# you can combine the two aliases above into a single cell as well, if desired:
|
|
||||||
#
|
|
||||||
# #query start(4;1;upper left corner of stockpile) configure mason
|
|
||||||
# ~,~,~,{otherstone}{give2left},`,`
|
|
||||||
# ~,~,~,`, `,`
|
|
||||||
# ~,~,~,`, `,`
|
|
||||||
#
|
|
||||||
# The syntax for defining aliases is:
|
|
||||||
# aliasname: keystrokes
|
|
||||||
#
|
|
||||||
# Where aliasname is at least two letters or digits long (including dashes and
|
|
||||||
# underscores) and keystrokes are whatever you would type into the DF UI. A
|
|
||||||
# keystroke can also be a named keycode from the DF interface definition file
|
|
||||||
# (data/init/interface.txt), enclosed in curly brackets like an alias, like:
|
|
||||||
# "{Right}" or "{Enter}". In # order to avoid naming conflicts between aliases
|
|
||||||
# and keycodes, the convention is to start aliases with a lowercase letter.
|
|
||||||
#
|
|
||||||
# Anything enclosed within curly brackets can also have a number after it,
|
|
||||||
# indicating how many times that alias or keycode should be repeated. For
|
|
||||||
# example: "{togglesequence 9}" or "{Down 5}".
|
|
||||||
#
|
|
||||||
# Finally, you can specify sub-aliases that will only be defined while the
|
|
||||||
# current alias is being resolved by adding them after the alias name (but
|
|
||||||
# before the repetition number, if it is specified), for example:
|
|
||||||
# {quantumstopfromeast name="Trash Dump"}
|
|
||||||
# The value of the sub-alias 'name' is used by quantumstopfromeast (or one of
|
|
||||||
# the aliases it calls) to give a useful name to your quantum dump hauling
|
|
||||||
# route. You can also use this format to temporarily override the value of an
|
|
||||||
# existing regularly-defined alias.
|
|
||||||
#
|
|
||||||
# Sub-aliases must be in one of the following formats:
|
|
||||||
# subaliasname=valwithnospaces
|
|
||||||
# subaliasname="val with spaces"
|
|
||||||
# subaliasname={someotheralias repetitions}
|
|
||||||
#
|
|
||||||
# Ctrl, Alt, and Shift modifiers can be specified for the next keycode by adding
|
|
||||||
# them into the key sequence. For example, Alt-h is written as "{Alt}h".
|
|
||||||
#
|
|
||||||
# Some frequently-used keystrokes are assigned shorthand characters. Think of
|
|
||||||
# them as single-character aliases that don't need to be surrounded in curly
|
|
||||||
# brackets:
|
|
||||||
# & expands to {Enter}
|
|
||||||
# @ expands to {Shift}{Enter}
|
|
||||||
# ~ expands to {Alt}
|
|
||||||
# ! expands to {Ctrl}
|
|
||||||
# ^ expands to {ESC}
|
|
||||||
#
|
|
||||||
# There is also a non-standard alias built into the code for the common
|
|
||||||
# shorthand for "make room":
|
|
||||||
# r+ expands to r+&
|
|
||||||
#
|
|
||||||
# If you need literal verisons of the shorthand characters, surround them in
|
|
||||||
# curly brackets, for example: "{!}"
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Add your custom aliases here:
|
|
||||||
|
@ -0,0 +1,801 @@
|
|||||||
|
.. _quickfort-alias-guide:
|
||||||
|
|
||||||
|
Quickfort Alias Guide
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Aliases allow you to use simple words to represent complicated key sequences
|
||||||
|
when configuring buildings and stockpiles in quickfort ``#query`` blueprints.
|
||||||
|
|
||||||
|
For example, say you have the following ``#build`` and ``#place`` blueprints::
|
||||||
|
|
||||||
|
#build masonry workshop
|
||||||
|
~, ~,~,`,`,`
|
||||||
|
~,wm,~,`,`,`
|
||||||
|
~, ~,~,`,`,`
|
||||||
|
|
||||||
|
#place stockpile for mason
|
||||||
|
~,~,~,s,s,s
|
||||||
|
~,~,~,s,s,s
|
||||||
|
~,~,~,s,s,s
|
||||||
|
|
||||||
|
and you want to configure the stockpile to hold only non-economic ("other")
|
||||||
|
stone and to give to the adjacent mason workshop. You could write the
|
||||||
|
key sequences directly::
|
||||||
|
|
||||||
|
#query configure stockpile with expanded key sequences
|
||||||
|
~,~,~,s{Down 5}deb{Right}{Down 2}p^,`,`
|
||||||
|
~,~,~,g{Left 2}&, `,`
|
||||||
|
~,~,~,`, `,`
|
||||||
|
|
||||||
|
or you could use aliases::
|
||||||
|
|
||||||
|
#query configure stockpile with aliases
|
||||||
|
~,~,~,otherstone,`,`
|
||||||
|
~,~,~,give2left, `,`
|
||||||
|
~,~,~,`, `,`
|
||||||
|
|
||||||
|
If the stockpile had only a single tile, you could also replay both aliases in
|
||||||
|
a single cell::
|
||||||
|
|
||||||
|
#query configure mason with multiple aliases in one cell
|
||||||
|
~,~,~,{otherstone}{give2left},`,`
|
||||||
|
~,~,~,`, `,`
|
||||||
|
~,~,~,`, `,`
|
||||||
|
|
||||||
|
With aliases, blueprints are much easier to read and understand. They also
|
||||||
|
save you from having to copy the same long key sequences everywhere.
|
||||||
|
|
||||||
|
Alias definition files
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
DFHack comes with a library of aliases for you to use that are always
|
||||||
|
available when you run a ``#query`` blueprint. Many blueprints can be built
|
||||||
|
with just those aliases. This "standard alias library" is stored in
|
||||||
|
:source:`data/quickfort/aliases-common.txt` (installed under the ``hack`` folder
|
||||||
|
in your DFHack installation). The aliases in that file are described at the
|
||||||
|
`bottom of this document <quickfort-alias-library>`.
|
||||||
|
|
||||||
|
Please do not edit the aliases in the standard library directly. The file will
|
||||||
|
get overwritten when DFHack is updated and you'll lose your changes. Instead,
|
||||||
|
add your custom aliases to :source:`dfhack-config/quickfort/aliases.txt`.
|
||||||
|
Definitions in this file take precedence over any definitions in the standard
|
||||||
|
library.
|
||||||
|
|
||||||
|
Alias syntax and usage
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The syntax for defining aliases is::
|
||||||
|
|
||||||
|
aliasname: expansion
|
||||||
|
|
||||||
|
Where ``aliasname`` is at least two letters or digits long (dashes and
|
||||||
|
underscores are also allowed) and ``expansion`` is whatever you would type
|
||||||
|
into the DF UI.
|
||||||
|
|
||||||
|
You use an alias by typing its name into a ``#query`` blueprint cell where you
|
||||||
|
want it to be applied. You can use an alias by itself or as part of a larger
|
||||||
|
sequence, potentially with other aliases. If the alias is the only text in the
|
||||||
|
cell, the alias name is matched and its expansion is used. If the alias has
|
||||||
|
other keys before or after it, the alias name must be surrounded in curly
|
||||||
|
brackets (:kbd:`{` and :kbd:`}`). An alias can be surrounded in curly brackets
|
||||||
|
even if it is the only text in the cell, it just isn't necesary. For example,
|
||||||
|
the following blueprint uses the ``aliasname`` alias by itself in the first
|
||||||
|
two rows and uses it as part of a longer sequence in the third row::
|
||||||
|
|
||||||
|
#query apply alias 'aliasname' in three different ways
|
||||||
|
aliasname
|
||||||
|
{aliasname}
|
||||||
|
literaltext{aliasname}literaltext
|
||||||
|
|
||||||
|
For a more concrete example of an alias definition, a simple alias that
|
||||||
|
configures a stockpile to have no bins (:kbd:`C`) and no barrels (:kbd:`E`)
|
||||||
|
assigned to it would look like this::
|
||||||
|
|
||||||
|
nocontainers: CE
|
||||||
|
|
||||||
|
The alias definition can also contain references to other aliases by including
|
||||||
|
the alias names in curly brackets. For example, ``nocontainers`` could be
|
||||||
|
equivalently defined like this::
|
||||||
|
|
||||||
|
nobins: C
|
||||||
|
nobarrels: E
|
||||||
|
nocontainers: {nobins}{nobarrels}
|
||||||
|
|
||||||
|
Aliases used in alias definitions *must* be surrounded by curly brackets, even
|
||||||
|
if they are the only text in the definition::
|
||||||
|
|
||||||
|
alias1: text1
|
||||||
|
alias2: alias1
|
||||||
|
alias3: {alias1}
|
||||||
|
|
||||||
|
Here, ``alias1`` and ``alias3`` expand to ``text1``, but ``alias2`` expands to
|
||||||
|
the literal text ``alias1``.
|
||||||
|
|
||||||
|
Keycodes
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
Non-printable characters, like the arrow keys, are represented by their
|
||||||
|
keycode name and are also surrounded by curly brackets, like ``{Right}`` or
|
||||||
|
``{Enter}``. Keycodes are used exactly like aliases -- they just have special
|
||||||
|
expansions that you wouldn't be able to write yourself. In order to avoid
|
||||||
|
naming conflicts between aliases and keycodes, the convention is to start
|
||||||
|
aliases with a lowercase letter.
|
||||||
|
|
||||||
|
Any keycode name from the DF interface definition file
|
||||||
|
(data/init/interface.txt) is valid, but only a few keycodes are actually
|
||||||
|
useful for blueprints::
|
||||||
|
|
||||||
|
Up
|
||||||
|
Down
|
||||||
|
Left
|
||||||
|
Right
|
||||||
|
Enter
|
||||||
|
ESC
|
||||||
|
Backspace
|
||||||
|
Space
|
||||||
|
Tab
|
||||||
|
|
||||||
|
Repetitions
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
Anything enclosed within curly brackets can also have a number, indicating how
|
||||||
|
many times that alias or keycode should be repeated. For example:
|
||||||
|
``{togglesequence 9}`` or ``{Down 5}`` will repeat the ``togglesequence``
|
||||||
|
alias nine times and the ``Down`` keycode five times, respectively.
|
||||||
|
|
||||||
|
Modifier keys
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Ctrl, Alt, and Shift modifiers can be specified for the next key by adding
|
||||||
|
them into the key sequence. For example, Alt-h is written as ``{Alt}h``.
|
||||||
|
|
||||||
|
Shorthand characters
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Some frequently-used keycodes are assigned shorthand characters. Think of them
|
||||||
|
as single-character aliases that don't need to be surrounded in curly
|
||||||
|
brackets::
|
||||||
|
|
||||||
|
& expands to {Enter}
|
||||||
|
@ expands to {Shift}{Enter}
|
||||||
|
~ expands to {Alt}
|
||||||
|
! expands to {Ctrl}
|
||||||
|
^ expands to {ESC}
|
||||||
|
|
||||||
|
If you need literal versions of the shorthand characters, surround them in
|
||||||
|
curly brackets, for example: use ``{!}`` for a literal exclamation point.
|
||||||
|
|
||||||
|
Built-in aliases
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Most aliases that come with DFHack are in ``aliases-common.txt``, but there is
|
||||||
|
one alias built into the code for the common shorthand for "make room"::
|
||||||
|
|
||||||
|
r+ expands to r+{Enter}
|
||||||
|
|
||||||
|
This needs special code support since ``+`` can't normally be used in alias
|
||||||
|
names. You can use it just like any other alias, either by itself in a cell
|
||||||
|
(``r+``) or surrounded in curly brackets (``{r+}``).
|
||||||
|
|
||||||
|
Sub-aliases
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
You can specify sub-aliases that will only be defined while the current alias
|
||||||
|
is being resolved. This is useful for "injecting" custom behavior into the
|
||||||
|
middle of a larger alias. As a simple example, the ``givename`` alias is defined
|
||||||
|
like this::
|
||||||
|
|
||||||
|
givename: !n{name}&
|
||||||
|
|
||||||
|
Note the use of the ``name`` alias inside of the ``givename`` expansion. In your
|
||||||
|
``#query`` blueprint, you could write something like this, say, while over your
|
||||||
|
main drawbridge::
|
||||||
|
|
||||||
|
{givename name="Front Gate"}
|
||||||
|
|
||||||
|
The value that you give the sub-alias ``name`` will be used when the
|
||||||
|
``givename`` alias is expanded. Without sub-aliases, we'd have to define ``givename`` like this::
|
||||||
|
|
||||||
|
givenameprefix: !n
|
||||||
|
givenamesuffix: &
|
||||||
|
|
||||||
|
and use it like this::
|
||||||
|
|
||||||
|
{givenameprefix}Front Gate{givenamesuffix}
|
||||||
|
|
||||||
|
which is more difficult to write and more difficult to understand.
|
||||||
|
|
||||||
|
A handy technique is to define an alias with some sort of default
|
||||||
|
behavior and then use sub-aliases to override that behavior as necessary. For
|
||||||
|
example, here is a simplified version of the standard ``quantum`` alias that
|
||||||
|
sets up quantum stockpiles::
|
||||||
|
|
||||||
|
quantum_enable: {enableanimals}{enablefood}{enablefurniture}...
|
||||||
|
quantum: {linksonly}{nocontainers}{quantum_enable}
|
||||||
|
|
||||||
|
You can use the default behavior of ``quantum_enable`` by just using the
|
||||||
|
``quantum`` alias by itself. But you can override ``quantum_enable`` to just
|
||||||
|
enable furniture for some specific stockpile like this::
|
||||||
|
|
||||||
|
{quantum quantum_enable={enablefurniture}}
|
||||||
|
|
||||||
|
If an alias uses a sub-alias in its expansion, but the sub-alias is not defined when the alias is used, quickfort will halt the ``#query`` blueprint with an error. If you want your aliases to work regardless of whether sub-aliases are defined, then you must define them with default values like ``quantum_enable`` above.
|
||||||
|
|
||||||
|
Sub-aliases must be in one of the following formats::
|
||||||
|
|
||||||
|
subaliasname=keyswithnospaces
|
||||||
|
subaliasname="keys with spaces or {aliases}"
|
||||||
|
subaliasname={singlealias}
|
||||||
|
|
||||||
|
If you specify both a sub-alias and a number of repetitions, the number for
|
||||||
|
repetitions goes last, right before the :kbd:`}`::
|
||||||
|
|
||||||
|
{alias subaliasname=value repetitions}
|
||||||
|
|
||||||
|
Beyond query mode
|
||||||
|
-----------------
|
||||||
|
``#query`` blueprints normally do things in DF :kbd:`q`\uery mode, but nobody
|
||||||
|
said that we have to *stay* in query mode. ``#query`` blueprints send
|
||||||
|
arbitrary key sequences to Dwarf Fortress. Anything you can do by typing keys
|
||||||
|
into DF, you can do in a ``#query`` blueprint. It is absolutely fine to
|
||||||
|
temporarily exit out of query mode, go into, say, hauling or zone or hotkey
|
||||||
|
mode, and do whatever needs to be done.
|
||||||
|
|
||||||
|
You just have to make certain to exit out of that alternate mode and get back
|
||||||
|
into :kbd:`q`\uery mode at the end of the key sequence. That way quickfort can
|
||||||
|
continue on configuring the next tile -- a tile configuration that assumes the
|
||||||
|
game is still in query mode.
|
||||||
|
|
||||||
|
For example, here is the standard library alias for giving a name to a zone::
|
||||||
|
|
||||||
|
namezone: ^i{givename}^q
|
||||||
|
|
||||||
|
The first :kbd:`\^` exits out of query mode. Then :kbd:`i` enters zones mode.
|
||||||
|
We then reuse the standard alias for giving something a name. Finally, we exit
|
||||||
|
out of zones mode with another :kbd:`\^` and return to :kbd:`q`\uery mode.
|
||||||
|
|
||||||
|
.. _quickfort-alias-library:
|
||||||
|
|
||||||
|
The DFHack standard alias library
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
DFHack comes with many useful aliases for you to use in your blueprints. Many
|
||||||
|
blueprints can be built with just these aliases alone, with no custom aliases
|
||||||
|
required.
|
||||||
|
|
||||||
|
This section goes through all aliases provided by the DFHack standard alias
|
||||||
|
library, discussing their intended usage and detailing sub-aliases that you
|
||||||
|
can define to customize their behavior.
|
||||||
|
|
||||||
|
If you do define your own custom aliases in
|
||||||
|
``dfhack-config/quickfort/aliases.txt``, try to build on the library aliases.
|
||||||
|
For example, if you create an alias to modify particular furniture stockpile
|
||||||
|
settings, start your alias with ``{furnitureprefix}`` instead of
|
||||||
|
``s{Down 2}``. Using library prefixes will allow sub-aliases to work with your
|
||||||
|
aliases just like they do with library aliases. In this case, using
|
||||||
|
``{furnitureprefix}`` will allow your stockpile customization alias to work
|
||||||
|
with both stockpiles and hauling routes.
|
||||||
|
|
||||||
|
Naming aliases
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
These aliases give descriptive names to workshops, levers, stockpiles, zones,
|
||||||
|
etc. Dwarf Fortress building, stockpile, and zone names have a maximum length
|
||||||
|
of 20 characters.
|
||||||
|
|
||||||
|
======== ===========
|
||||||
|
Alias Sub-aliases
|
||||||
|
======== ===========
|
||||||
|
givename name
|
||||||
|
namezone name
|
||||||
|
======== ===========
|
||||||
|
|
||||||
|
``givename`` works anywhere you can hit Ctrl-n to customize a name, like when
|
||||||
|
the cursor is over buildings and stockpiles. Example::
|
||||||
|
|
||||||
|
#place
|
||||||
|
f(10x2)
|
||||||
|
|
||||||
|
#query
|
||||||
|
{booze}{givename name=booze}
|
||||||
|
|
||||||
|
``namezone`` is intended to be used when over an activity zone. It includes
|
||||||
|
commands to get into zones mode, set the zone name, and get back to query
|
||||||
|
mode. Example::
|
||||||
|
|
||||||
|
#zone
|
||||||
|
n(2x2)
|
||||||
|
|
||||||
|
#query
|
||||||
|
{namezone name="guard dog pen"}
|
||||||
|
|
||||||
|
Quantum stockpile aliases
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
These aliases make it easy to create :wiki:`minecart stop-based quantum stockpiles <Quantum_stockpile#The_Minecart_Stop>`.
|
||||||
|
|
||||||
|
+----------------------+------------------+
|
||||||
|
| Alias | Sub-aliases |
|
||||||
|
+======================+==================+
|
||||||
|
| quantum | | name |
|
||||||
|
| | | quantum_enable |
|
||||||
|
+----------------------+------------------+
|
||||||
|
| quantumstopfromnorth | | name |
|
||||||
|
+----------------------+ | stop_name |
|
||||||
|
| quantumstopfromsouth | | route_enable |
|
||||||
|
+----------------------+ |
|
||||||
|
| quantumstopfromeast | |
|
||||||
|
+----------------------+ |
|
||||||
|
| quantumstopfromwest | |
|
||||||
|
+----------------------+------------------+
|
||||||
|
| quantumstop | | name |
|
||||||
|
| | | stop_name |
|
||||||
|
| | | route_enable |
|
||||||
|
| | | move |
|
||||||
|
| | | move_back |
|
||||||
|
+----------------------+------------------+
|
||||||
|
|
||||||
|
The idea is to use a minecart on a track stop to dump an infinite number of
|
||||||
|
items into a receiving "quantum" stockpile, which significantly simplifies
|
||||||
|
stockpile management. These aliases configure the quantum stockpile and
|
||||||
|
hauling route that make it all work. Here is a complete example for quantum
|
||||||
|
stockpiling weapons, armor, and ammunition. It has a 3x1 feeder stockpile on
|
||||||
|
the bottom (South), the trackstop in the center, and the quantum stockpile on
|
||||||
|
the top (North). Note that the feeder stockpile is the only stockpile that
|
||||||
|
needs to be configured to control which types of items end up in the quantum
|
||||||
|
stockpile. By default, the hauling route and quantum stockpile itself simply
|
||||||
|
accept whatever is put into them.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
#place
|
||||||
|
,c
|
||||||
|
,
|
||||||
|
pdz(3x1)
|
||||||
|
|
||||||
|
#build
|
||||||
|
,
|
||||||
|
,trackstopN
|
||||||
|
|
||||||
|
#query message(remember to assign a minecart to the new route)
|
||||||
|
,quantum
|
||||||
|
,quantumstopfromsouth
|
||||||
|
nocontainers
|
||||||
|
|
||||||
|
The ``quantum`` alias configures a 1x1 stockpile to be a quantum stockpile. It
|
||||||
|
bans all containers and prevents the stockpile from being manually filled. By
|
||||||
|
default, it also enables storage of all item categories (except corpses and
|
||||||
|
refuse), so it doesn't really matter what letter you use to place the
|
||||||
|
stockpile. :wiki:`Refuse` is excluded by default since otherwise clothes and
|
||||||
|
armor in the quantum stockpile would rot away. If you want corpses or bones in
|
||||||
|
your quantum stockpile, use :kbd:`y` and/or :kbd:`r` to place the stockpile
|
||||||
|
and the ``quantum`` alias will just enable the remaining types. If you *do*
|
||||||
|
enable refuse in your quantum stockpile, be sure you avoid putting useful
|
||||||
|
clothes or armor in there!
|
||||||
|
|
||||||
|
The ``quantumstopfromsouth`` alias is run over the track stop and configures
|
||||||
|
the hauling route, again, allowing all item categories into the minecart by
|
||||||
|
default so any item that can go into the feeder stockpile can then be placed
|
||||||
|
in the minecart. It also links the hauling route with the feeder stockpile to
|
||||||
|
the South.The track stop does not need to be fully constructed before the
|
||||||
|
``#query`` blueprint is run, but the feeder stockpile needs to exist so we can
|
||||||
|
link to it. This means that the three blueprints above can be run one right
|
||||||
|
after another, without any dwarven labor in between them, and the quantum
|
||||||
|
stockpile will work properly.
|
||||||
|
|
||||||
|
Finally, the ``nocontainers`` alias simply configures the feeder stockpile to
|
||||||
|
not have any containers (which would just get in the way here). If we wanted
|
||||||
|
to be more specific about what item types we want in the quantum stockpile, we
|
||||||
|
could configure the feeder stockpile further, for example with standard
|
||||||
|
`stockpile adjustment aliases <quickfort-stockpile-aliases>`.
|
||||||
|
|
||||||
|
After the blueprints are run, the last step is to manually assign a minecart
|
||||||
|
to the newly-defined hauling route.
|
||||||
|
|
||||||
|
You can define sub-aliases to customize how these aliases work, for example to
|
||||||
|
have fine-grained control over what item types are enabled for the route and
|
||||||
|
quantum stockpile. We'll go over those options below, but first, here is an
|
||||||
|
example for how to just give names to everything::
|
||||||
|
|
||||||
|
#query message(remember to assign a minecart to the new route)
|
||||||
|
,{quantum name="armory quantum"}
|
||||||
|
,{quantumstopfromsouth name="Armory quantum" stop_name="Armory quantum stop"}{givename name="armory dumper"}
|
||||||
|
{givename name="armory feeder"}
|
||||||
|
|
||||||
|
All ``name`` sub-aliases are completely optional, of course. Keep in mind that
|
||||||
|
hauling route names have a maximum length of 22 characters, hauling route stop
|
||||||
|
names have a maximum length of 21 characters, and all other names have a
|
||||||
|
maximum length of 20 characters.
|
||||||
|
|
||||||
|
If you want to be absolutely certain that nothing ends up in your quantum
|
||||||
|
stockpile other than what you've configured in the feeder stockpile, you can
|
||||||
|
set the ``quantum_enable`` sub-alias for the ``quantum`` alias. This can
|
||||||
|
prevent, for example, somebody's knocked-out tooth from being considered part
|
||||||
|
of your furniture quantum stockpile when it happened to land on it during a
|
||||||
|
fistfight::
|
||||||
|
|
||||||
|
#query
|
||||||
|
{quantum name="furniture quantum" quantum_enable={enablefurniture}}
|
||||||
|
|
||||||
|
You can have similar control over the hauling route if you need to be more
|
||||||
|
selective about what item types are allowed into the minecart. If you have
|
||||||
|
multiple specialized quantum stockpiles that use a common feeder pile, for
|
||||||
|
example, you can set the ``route_enable`` sub-alias::
|
||||||
|
|
||||||
|
#query
|
||||||
|
{quantumstopfromsouth name="Steel bar quantum" route_enable="{enablebars}{steelbars}"}
|
||||||
|
|
||||||
|
Any of the `stockpile configuration aliases <quickfort-stockpile-aliases>` can
|
||||||
|
be used for either the ``quantum_enable`` or ``route_enable`` sub-aliases.
|
||||||
|
Experienced Dwarf Fortress players may be wondering how the same aliases can
|
||||||
|
work in both contexts since the keys for entering the configuration screen
|
||||||
|
differ. Fear not! There is some sub-alias magic at work here. If you define
|
||||||
|
your own stockpile configuraiton aliases, you can use the magic yourself by
|
||||||
|
building your aliases on the ``*prefix`` aliases described later in this
|
||||||
|
guide.
|
||||||
|
|
||||||
|
Finally, the ``quantumstop`` alias is a more general version of the
|
||||||
|
``quantumstopfrom*`` aliases. The ``quantumstopfrom*`` aliases assume that the
|
||||||
|
feeder stockpile is orthogonally adjacent to your track stop (which is how
|
||||||
|
most people set them up). If your feeder stockpile is somewhere further away,
|
||||||
|
you can use the ``quantumstop`` alias directly. In addition to the
|
||||||
|
``quantumstopfrom*`` sub-aliases, you can also define the ``move`` and
|
||||||
|
``move_back`` sub-aliases, which let you specify the cursor keys required to
|
||||||
|
move from the track stop to the feeder stockpile and back again, respectively::
|
||||||
|
|
||||||
|
#query
|
||||||
|
{quantumstop move="{Right 2}{Up}" move_back="{Down}{Left 2}"}
|
||||||
|
|
||||||
|
Farm plots
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
Sets a farm plot to grow the first or last type of seed in the list of
|
||||||
|
available seeds for all four seasons. The last seed is usually Plump helmet
|
||||||
|
spawn, suitable for post-embark. But if you only have one seed type, that'll
|
||||||
|
be grown instead.
|
||||||
|
|
||||||
|
+------------------+
|
||||||
|
| Alias |
|
||||||
|
+==================+
|
||||||
|
| growlastcropall |
|
||||||
|
+------------------+
|
||||||
|
| growfirstcropall |
|
||||||
|
+------------------+
|
||||||
|
|
||||||
|
Instead of these aliases, though, it might be more useful to use the DFHack
|
||||||
|
`autofarm` plugin.
|
||||||
|
|
||||||
|
Stockpile configuration utility aliases
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
=============== ===========
|
||||||
|
Alias Sub-aliases
|
||||||
|
=============== ===========
|
||||||
|
linksonly
|
||||||
|
nocontainers
|
||||||
|
give2up
|
||||||
|
give2down
|
||||||
|
give2left
|
||||||
|
give2right
|
||||||
|
give10up
|
||||||
|
give10down
|
||||||
|
give10left
|
||||||
|
give10right
|
||||||
|
give move
|
||||||
|
togglesequence
|
||||||
|
togglesequence2
|
||||||
|
=============== ===========
|
||||||
|
|
||||||
|
``linksonly`` and ``nocontainers`` set the named basic properties on
|
||||||
|
stockpiles. ``nocontainers`` sets bins and barrels to 0, but does not affect
|
||||||
|
wheelbarrows since the hotkeys for changing the number of wheelbarrows depend
|
||||||
|
on whether you have the DFHack `stockpiles` plugin active. It is better to set
|
||||||
|
the number of wheelbarrows via the `quickfort` ``stockpiles_max_wheelbarrows``
|
||||||
|
setting. It is set to ``0`` by default.
|
||||||
|
|
||||||
|
The ``give*`` aliases set a stockpile to give to a workshop or another
|
||||||
|
stockpile located at the indicated number of tiles in the indicated direction
|
||||||
|
from the current tile. For example, here we use the ``give2down`` alias to
|
||||||
|
connect an ``otherstone`` stockpile with a mason workshop::
|
||||||
|
|
||||||
|
#place
|
||||||
|
s,s,s,s,s
|
||||||
|
s, , , ,s
|
||||||
|
s, , , ,s
|
||||||
|
s, , , ,s
|
||||||
|
s,s,s,s,s
|
||||||
|
|
||||||
|
#build
|
||||||
|
`,`,`,`,`
|
||||||
|
`, , , ,`
|
||||||
|
`, ,wm,,`
|
||||||
|
`, , , ,`
|
||||||
|
`,`,`,`,`
|
||||||
|
|
||||||
|
#query
|
||||||
|
, ,give2down
|
||||||
|
otherstone
|
||||||
|
|
||||||
|
and here is a generic stone stockpile that gives to a stockpile that only
|
||||||
|
takes flux::
|
||||||
|
|
||||||
|
#place
|
||||||
|
s(10x1)
|
||||||
|
s(10x10)
|
||||||
|
|
||||||
|
#query
|
||||||
|
flux
|
||||||
|
,
|
||||||
|
give2up
|
||||||
|
|
||||||
|
If you want to give to some other tile that is not already covered by the
|
||||||
|
``give2*`` or ``give10*`` aliases, you can use the generic ``give`` alias and
|
||||||
|
specify the movement keys yourself in the ``move`` sub-alias. Here is how to
|
||||||
|
give to a stockpile or workshop one z-level above, 9 tiles to the left, and 14
|
||||||
|
tiles down::
|
||||||
|
|
||||||
|
#query
|
||||||
|
{give move="<{Left 9}{Down 14}"}
|
||||||
|
|
||||||
|
``togglesequence`` and ``togglesequence2`` send ``{Down}{Enter}`` or
|
||||||
|
``{Down 2}{Enter}`` to toggle adjacent (or alternating) items in a list. This
|
||||||
|
is useful when toggling a bunch of related item types in the stockpile config.
|
||||||
|
For example, the ``dye`` and ``tallow`` aliases in the standard alias library
|
||||||
|
need to select specific items from long lists::
|
||||||
|
|
||||||
|
dye: {foodprefix}b{Right}{Down 11}{Right}{Down 28}{togglesequence 4}^
|
||||||
|
tallow: {foodprefix}b{Right}{Down 13}{Right}{Down}{togglesequence2 811}^
|
||||||
|
|
||||||
|
.. _quickfort-stockpile-aliases:
|
||||||
|
|
||||||
|
Stockpile adjustment aliases
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
For each stockpile item category, there are three standard aliases:
|
||||||
|
|
||||||
|
* ``*prefix`` aliases enter the stockpile configuration screen and position
|
||||||
|
the cursor at a particular item category in the left-most column, ready for
|
||||||
|
further keys that configure the elements within that category. All other
|
||||||
|
stockpile adjustment aliases are built on these prefixes. You can use them
|
||||||
|
yourself to create stockpile adjustment aliases that aren't already covered
|
||||||
|
by the standard library aliases. Using the library prefix instead of
|
||||||
|
creating your own also allows your stockpile configuration aliases to be
|
||||||
|
used for both stockpiles and hauling routes. For example, here is the
|
||||||
|
library definition for ``booze``::
|
||||||
|
|
||||||
|
booze: {foodprefix}b{Right}{Down 5}p{Down}p^
|
||||||
|
|
||||||
|
* ``enable*`` aliases enter the stockpile configuration screen, enable all
|
||||||
|
subtypes of the named category, and exit the stockpile configuration screen
|
||||||
|
* ``disable*`` aliases enter the stockpile configuration screen, disable all
|
||||||
|
subtypes of the named category, and exit the stockpile configuration screen
|
||||||
|
|
||||||
|
==================== ==================== =====================
|
||||||
|
Prefix Enable Disable
|
||||||
|
==================== ==================== =====================
|
||||||
|
animalsprefix enableanimals disableanimals
|
||||||
|
foodprefix enablefood disablefood
|
||||||
|
furnitureprefix enablefurniture disablefurniture
|
||||||
|
corpsesprefix enablecorpses disablecorpses
|
||||||
|
refuseprefix enablerefuse disablerefuse
|
||||||
|
stoneprefix enablestone disablestone
|
||||||
|
ammoprefix enableammo disableammo
|
||||||
|
coinsprefix enablecoins disablecoins
|
||||||
|
barsprefix enablebars disablebars
|
||||||
|
gemsprefix enablegems disablegems
|
||||||
|
finishedgoodsprefix enablefinishedgoods disablefinishedgoods
|
||||||
|
leatherprefix enableleather disableleather
|
||||||
|
clothprefix enablecloth disablecloth
|
||||||
|
woodprefix enablewood disablewood
|
||||||
|
weaponsprefix enableweapons disableweapons
|
||||||
|
armorprefix enablearmor disablearmor
|
||||||
|
sheetprefix enablesheet disablesheet
|
||||||
|
==================== ==================== =====================
|
||||||
|
|
||||||
|
Then, for each item category, there are aliases that manipulate interesting
|
||||||
|
subsets of that category:
|
||||||
|
|
||||||
|
* Exclusive aliases forbid everthing within a category and then enable only
|
||||||
|
the named item type (or named class of items)
|
||||||
|
* ``forbid*`` aliases forbid the named type and leave the rest of the
|
||||||
|
stockpile untouched.
|
||||||
|
* ``permit*`` aliases permit the named type and leave the rest of the
|
||||||
|
stockpile untouched.
|
||||||
|
|
||||||
|
Note that for specific item types (items in the third stockpile configuration
|
||||||
|
column), you can only toggle the item type on and off. Aliases can't know
|
||||||
|
whether sending the ``{Enter}`` key will enable or disable the type. The
|
||||||
|
``forbid*`` aliases that affect these item types assume the item type was
|
||||||
|
enabled and toggle it off. Likewise, the ``permit*`` aliases assume the item
|
||||||
|
type was disabled and toggle it on. If the item type is not in the expected
|
||||||
|
enabled/disabled state when the alias is run, the aliases will not behave
|
||||||
|
properly.
|
||||||
|
|
||||||
|
Animal stockpile adjustments
|
||||||
|
````````````````````````````
|
||||||
|
|
||||||
|
=========== =========== ============
|
||||||
|
Exclusive Forbid Permit
|
||||||
|
=========== =========== ============
|
||||||
|
cages forbidcages permitcages
|
||||||
|
traps forbidtraps permittraps
|
||||||
|
=========== =========== ============
|
||||||
|
|
||||||
|
Food stockpile adjustments
|
||||||
|
``````````````````````````
|
||||||
|
|
||||||
|
=============== ==================== ====================
|
||||||
|
Exclusive Forbid Permit
|
||||||
|
=============== ==================== ====================
|
||||||
|
preparedfood forbidpreparedfood permitpreparedfood
|
||||||
|
unpreparedfish forbidunpreparedfish permitunpreparedfish
|
||||||
|
plants forbidplants permitplants
|
||||||
|
booze forbidbooze permitbooze
|
||||||
|
seeds forbidseeds permitseeds
|
||||||
|
dye forbiddye permitdye
|
||||||
|
tallow forbidtallow permittallow
|
||||||
|
miscliquid forbidmiscliquid permitmiscliquid
|
||||||
|
=============== ==================== ====================
|
||||||
|
|
||||||
|
Furniture stockpile adjustments
|
||||||
|
```````````````````````````````
|
||||||
|
|
||||||
|
+-----------+
|
||||||
|
| Exclusive |
|
||||||
|
+===========+
|
||||||
|
| pots |
|
||||||
|
+-----------+
|
||||||
|
| bags |
|
||||||
|
+-----------+
|
||||||
|
| buckets |
|
||||||
|
+-----------+
|
||||||
|
| sand |
|
||||||
|
+-----------+
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
* Because of the limitations of Dwarf Fortress, ``bags`` cannot distinguish
|
||||||
|
between empty and filled bags
|
||||||
|
|
||||||
|
Refuse stockpile adjustments
|
||||||
|
````````````````````````````
|
||||||
|
|
||||||
|
=========== ================== ==================
|
||||||
|
Exclusive Forbid Permit
|
||||||
|
=========== ================== ==================
|
||||||
|
bodyparts forbidbodyparts permitbodyparts
|
||||||
|
rawhides forbidrawhides permitrawhides
|
||||||
|
tannedhides forbidtannedhides permittannedhides
|
||||||
|
skulls forbidskulls permitskulls
|
||||||
|
bones forbidbones permitbones
|
||||||
|
shells forbidshells permitshells
|
||||||
|
teeth forbidteeth permitteeth
|
||||||
|
horns forbidhorns permithorns
|
||||||
|
hair forbidhair permithair
|
||||||
|
craftrefuse forbidcraftrefuse permitcraftrefuse
|
||||||
|
=========== ================== ==================
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
* ``bodyparts`` includes remains/corpses and rotten rawhdes.
|
||||||
|
* ``craftrefuse`` includes everything a craftsdwarf can use: skulls, bones,
|
||||||
|
shells, teeth, horns, and hair.
|
||||||
|
|
||||||
|
Stone stockpile adjustments
|
||||||
|
```````````````````````````
|
||||||
|
|
||||||
|
============= ==================== ====================
|
||||||
|
Exclusive Forbid Permit
|
||||||
|
============= ==================== ====================
|
||||||
|
metal forbidmetal permitmetal
|
||||||
|
iron forbidiron permitiron
|
||||||
|
economic forbideconomic permiteconomic
|
||||||
|
flux forbidflux permitflux
|
||||||
|
plaster forbidplaster permitplaster
|
||||||
|
coalproducing forbidcoalproducing permitcoalproducing
|
||||||
|
otherstone forbidotherstone permitotherstone
|
||||||
|
bauxite forbidbauxite permitbauxite
|
||||||
|
clay forbidclay permitclay
|
||||||
|
============= ==================== ====================
|
||||||
|
|
||||||
|
Ammo stockpile adjustments
|
||||||
|
``````````````````````````
|
||||||
|
|
||||||
|
=============== ====================
|
||||||
|
Exclusive Forbid
|
||||||
|
=============== ====================
|
||||||
|
bolts
|
||||||
|
\ forbidmetalbolts
|
||||||
|
\ forbidwoodenbolts
|
||||||
|
\ forbidbonebolts
|
||||||
|
=============== ====================
|
||||||
|
|
||||||
|
Bar stockpile adjustments
|
||||||
|
`````````````````````````
|
||||||
|
|
||||||
|
=========== ==================
|
||||||
|
Exclusive Forbid
|
||||||
|
=========== ==================
|
||||||
|
bars forbidbars
|
||||||
|
metalbars forbidmetalbars
|
||||||
|
ironbars forbidironbars
|
||||||
|
steelbars forbidsteelbars
|
||||||
|
pigironbars forbidpigironbars
|
||||||
|
otherbars forbidotherbars
|
||||||
|
coal forbidcoal
|
||||||
|
potash forbidpotash
|
||||||
|
ash forbidash
|
||||||
|
pearlash forbidpearlash
|
||||||
|
soap forbidsoap
|
||||||
|
blocks forbidblocks
|
||||||
|
=========== ==================
|
||||||
|
|
||||||
|
Gem stockpile adjustments
|
||||||
|
`````````````````````````
|
||||||
|
|
||||||
|
=========== ================
|
||||||
|
Exclusive Forbid
|
||||||
|
=========== ================
|
||||||
|
roughgems forbidroughgems
|
||||||
|
roughglass forbidroughglass
|
||||||
|
cutgems forbidcutgems
|
||||||
|
cutglass forbidcutglass
|
||||||
|
cutstone forbidcutstone
|
||||||
|
=========== ================
|
||||||
|
|
||||||
|
Finished goods stockpile adjustments
|
||||||
|
````````````````````````````````````
|
||||||
|
|
||||||
|
+-----------+
|
||||||
|
| Exclusive |
|
||||||
|
+===========+
|
||||||
|
| jugs |
|
||||||
|
+-----------+
|
||||||
|
|
||||||
|
Cloth stockpile adjustments
|
||||||
|
```````````````````````````
|
||||||
|
|
||||||
|
+------------------+
|
||||||
|
| Exclusive |
|
||||||
|
+==================+
|
||||||
|
| thread |
|
||||||
|
+------------------+
|
||||||
|
| adamantinethread |
|
||||||
|
+------------------+
|
||||||
|
| cloth |
|
||||||
|
+------------------+
|
||||||
|
| adamantinecloth |
|
||||||
|
+------------------+
|
||||||
|
|
||||||
|
Weapon stockpile adjustments
|
||||||
|
````````````````````````````
|
||||||
|
|
||||||
|
================= ======================== ====================
|
||||||
|
Exclusive Forbid Permit
|
||||||
|
================= ======================== ====================
|
||||||
|
\ forbidweapons permitweapons
|
||||||
|
\ forbidtrapcomponents permittrapcomponents
|
||||||
|
metalweapons forbidmetalweapons permitmetalweapons
|
||||||
|
\ forbidstoneweapons permitstoneweapons
|
||||||
|
\ forbidotherweapons permitotherweapons
|
||||||
|
ironweapons forbidironweapons permitironweapons
|
||||||
|
copperweapons forbidcopperweapons permitcopperweapons
|
||||||
|
steelweapons forbidsteelweapons permitsteelweapons
|
||||||
|
masterworkweapons forbidmasterworkweapons permitmasterworkweapons
|
||||||
|
artifactweapons forbidartifactweapons permitartifactweapons
|
||||||
|
================= ======================== ====================
|
||||||
|
|
||||||
|
Armor stockpile adjustments
|
||||||
|
```````````````````````````
|
||||||
|
|
||||||
|
=============== ====================== ====================
|
||||||
|
Exclusive Forbid Permit
|
||||||
|
=============== ====================== ====================
|
||||||
|
metalarmor forbidmetalarmor permitmetalarmor
|
||||||
|
otherarmor forbidotherarmor permitotherarmor
|
||||||
|
ironarmor forbidironarmor permitironarmor
|
||||||
|
copperarmor forbidcopperarmor permitcopperarmor
|
||||||
|
steelarmor forbidsteelarmor permitsteelarmor
|
||||||
|
masterworkarmor forbidmasterworkarmor permitmasterworkarmor
|
||||||
|
artifactarmor forbidartifactarmor permitartifactarmor
|
||||||
|
=============== ====================== ====================
|
@ -0,0 +1,106 @@
|
|||||||
|
.. _quickfort-library-guide:
|
||||||
|
|
||||||
|
Quickfort Library Guide
|
||||||
|
=======================
|
||||||
|
|
||||||
|
This guide contains a high-level overview of the blueprints available in the
|
||||||
|
:source:`quickfort blueprint library <data/blueprints/library>`. You can list
|
||||||
|
library blueprints by running ``quickfort list --library`` or by hitting
|
||||||
|
:kbd:`Alt`:kbd:`l` in the ``quickfort gui`` interactive dialog.
|
||||||
|
|
||||||
|
Each file is hyperlinked to its online version so you can see exactly what the
|
||||||
|
blueprints do.
|
||||||
|
|
||||||
|
Whole fort blueprint sets
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
These files contain the plans for entire fortresses. Each file has one or more
|
||||||
|
help sections that walk you through how to build the fort, step by step.
|
||||||
|
|
||||||
|
- :source:`library/dreamfort.csv <data/blueprints/library/dreamfort.csv>`
|
||||||
|
- :source:`library/quickfortress.csv <data/blueprints/library/quickfortress.csv>`
|
||||||
|
|
||||||
|
Dreamfort
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
Dreamfort is a fully functional, self-sustaining fortress with defenses,
|
||||||
|
farming, a complete set of workshops, self-managing quantum stockpiles, a grand
|
||||||
|
dining hall, hospital, jail, fresh water well system, guildhalls, and bedrooms
|
||||||
|
for hundreds of dwarves. It also comes with manager work orders to automate
|
||||||
|
basic fort needs, such as food and booze production. It can function by itself
|
||||||
|
or as the core of a larger, more ambitious fortress. Read the high-level
|
||||||
|
walkthrough by running ``quickfort run library/dreamfort.csv`` and list the
|
||||||
|
walkthroughs for the individual levels by running ``quickfort list dreamfort -l
|
||||||
|
-m notes`` or by opening the ``quickfort gui`` dialog, enabling the library
|
||||||
|
with :kbd:`Alt`:kbd:`l`, and setting the filter to ``dreamfort notes``.
|
||||||
|
|
||||||
|
Dreamfort blueprints are also available for easy viewing and copying `online
|
||||||
|
<https://drive.google.com/drive/folders/1iS90EEVqUkxTeZiiukVj1pLloZqabKuP>`__.
|
||||||
|
|
||||||
|
The Quick Fortresses
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The Quick Fortress is an updated version of the example fortress that came with
|
||||||
|
`Python Quickfort 2.0 <https://github.com/joelpt/quickfort>`__ (the program
|
||||||
|
DFHack quickfort was inspired by). While it is not a complete fortress by
|
||||||
|
itself, it is much simpler than Dreamfort and is good for a first introduction
|
||||||
|
to `quickfort` blueprints. Read its walkthrough with ``quickfort run
|
||||||
|
library/quickfortress.csv``.
|
||||||
|
|
||||||
|
Layout helpers
|
||||||
|
--------------
|
||||||
|
|
||||||
|
These files simply draw diagonal marker-mode lines starting from the cursor.
|
||||||
|
They are especially useful for finding the center of the map when you are
|
||||||
|
planning your fortress. Once you are done using them for alignment, use
|
||||||
|
``quickfort undo`` at the same cursor position to make them disappear. Since
|
||||||
|
these ``#dig`` blueprints can only mark undug wall tiles for mining, they are
|
||||||
|
best used underground. They won't do much on the surface, where there aren't
|
||||||
|
many walls.
|
||||||
|
|
||||||
|
- :source:`library/layout-helpers/mark_up_left.csv <data/blueprints/library/layout-helpers/mark_up_left.csv>`
|
||||||
|
- :source:`library/layout-helpers/mark_up_right.csv <data/blueprints/library/layout-helpers/mark_up_right.csv>`
|
||||||
|
- :source:`library/layout-helpers/mark_down_right.csv <data/blueprints/library/layout-helpers/mark_down_right.csv>`
|
||||||
|
- :source:`library/layout-helpers/mark_down_left.csv <data/blueprints/library/layout-helpers/mark_down_left.csv>`
|
||||||
|
|
||||||
|
Bedrooms
|
||||||
|
--------
|
||||||
|
|
||||||
|
These are popular bedroom layouts from the :wiki:`Bedroom design` page on the
|
||||||
|
wiki. Each file has ``#dig``, ``#build``, and ``#query`` blueprints to dig the
|
||||||
|
rooms, build the furniture, and configure the beds as bedrooms, respectively.
|
||||||
|
|
||||||
|
- :source:`library/bedrooms/48-4-Raynard_Whirlpool_Housing.csv <data/blueprints/library/bedrooms/48-4-Raynard_Whirlpool_Housing.csv>`
|
||||||
|
- :source:`library/bedrooms/95-9-Hactar1_3_Branch_Tree.csv <data/blueprints/library/bedrooms/95-9-Hactar1_3_Branch_Tree.csv>`
|
||||||
|
- :source:`library/bedrooms/28-3-Modified_Windmill_Villas.csv <data/blueprints/library/bedrooms/28-3-Modified_Windmill_Villas.csv>`
|
||||||
|
|
||||||
|
Tombs
|
||||||
|
-----
|
||||||
|
|
||||||
|
These blueprints have burial plot layouts for fortress that expect a lot of
|
||||||
|
casualties.
|
||||||
|
|
||||||
|
- :source:`library/tombs/Mini_Saracen.csv <data/blueprints/library/tombs/Mini_Saracen.csv>`
|
||||||
|
- :source:`library/tombs/The_Saracen_Crypts.csv <data/blueprints/library/tombs/The_Saracen_Crypts.csv>`
|
||||||
|
|
||||||
|
Exploratory mining
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Several mining patterns to choose from when searching for gems or ores. The
|
||||||
|
patterns can be repeated up or down z-levels for exploring through the depths.
|
||||||
|
|
||||||
|
- :source:`library/exploratory-mining/tunnels.csv <data/blueprints/library/exploratory-mining/tunnels.csv>`
|
||||||
|
- :source:`library/exploratory-mining/vertical-mineshafts.csv <data/blueprints/library/exploratory-mining/vertical-mineshafts.csv>`
|
||||||
|
- :source:`library/exploratory-mining/connected-mineshafts.csv <data/blueprints/library/exploratory-mining/connected-mineshafts.csv>`
|
||||||
|
|
||||||
|
Miscellaneous
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Extra blueprints that are useful in specific situations.
|
||||||
|
|
||||||
|
- :source:`library/embark.csv <data/blueprints/library/embark.csv>`
|
||||||
|
|
||||||
|
The embark blueprints are useful directly after embark. It contains a ``#build``
|
||||||
|
blueprint that builds important starting workshops (mason, carpenter, mechanic,
|
||||||
|
and craftsdwarf) and a ``#place`` blueprint that lays down a pattern of useful
|
||||||
|
starting stockpiles.
|
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
|||||||
Subproject commit dd8b9335007941c3aea27474b0a08ba31f6bc97f
|
Subproject commit e4ab999d1ddb79cadd62f11c5d2781387e8ae697
|
@ -1 +1 @@
|
|||||||
Subproject commit 5aaa1ce815b2192c6b6a22523a996ed556c04fbd
|
Subproject commit a7e5655fb828598be7ea3947604aba499bf84f28
|
@ -0,0 +1,7 @@
|
|||||||
|
local workflow = require('plugins.workflow')
|
||||||
|
|
||||||
|
function test.job_outputs()
|
||||||
|
for job_type in pairs(workflow.test_data.job_outputs) do
|
||||||
|
expect.ne(df.job_type[job_type], nil, "Found unrecognized job type: " .. tostring(job_type))
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,3 @@
|
|||||||
|
function test.internal_in_test()
|
||||||
|
expect.true_(dfhack.internal.IN_TEST)
|
||||||
|
end
|
Loading…
Reference in New Issue