update dreamfort case study and general formatting

develop
Myk Taylor 2023-06-14 11:28:41 -07:00
parent 3b5af82a0e
commit f894634eef
No known key found for this signature in database
GPG Key ID: 8A39CA0FA0C16E78
2 changed files with 580 additions and 520 deletions

@ -137,7 +137,7 @@ Crypt
`````
.. image:: https://drive.google.com/uc?export=download&id=16iT_ho7BIRPD_eofuxdlVQ4FunR1Li23
:alt: Annotated screenshot of the dreamfort noble suites
:alt: Annotated screenshot of the dreamfort crypt
:target: https://drive.google.com/file/d/16iT_ho7BIRPD_eofuxdlVQ4FunR1Li23
:align: center

@ -708,6 +708,57 @@ tiles::
#place
f10(3x3)
Stockpile configuration
~~~~~~~~~~~~~~~~~~~~~~~
Quickfort uses the `stockpiles` plugin and `stockpiles-library` to configure
stockpile settings, and provides a syntax that is easy to write in a blueprint
yet still allows you to access the full power of the `stockpiles` command.
The syntax is::
: <op> <preset_name> [/<filter>] [<op> <preset_name> [/<filter>]...]
``<op>`` is one of ``=``, ``-``, or ``+``, representing the three `stockpiles`
import modes: ``set``, ``disable``, or ``enable``, respectively. Note that if
you are using an ``=`` op, then it should go first in the list. Any ``=``
configuration segment will override anything that comes before it.
For example, a blueprint like::
#place
f:=booze(5x4)
would be equivalent to creating a 5x4 food stockpile in the UI, then selecting it and running this command::
stockpiles import --mode=set booze
you can also add a slash (``/``) and a comma-separated list of filter strings
to customize the settings further::
#place
p{name="Metal weapons"}:-cat_weapons/other/(7x3)
Note that the "op" in this case lets us disable the matched preset, which in
this case is the "Other materials" types in the Weapons category. This
configuration is equivalent to the `stockpiles` command::
stockpiles import --mode=disable cat_weapons --filter=other/
And we can chain multiple `stockpiles` commands together by adding another "op"
character and another preset::
#place
p{name="Steel weapons"}:-cat_weapons/mats/,other/+steelweapons(7x3)
which corresponds to running these two commands::
stockpiles import --mode=disable cat_weapons --filter=mats/,other/
stockpiles import --mode=enable steelweapons
With the combination of the library presets and custom filter strings, you can
configure any stockpile any way you like!
#build mode
-----------
@ -824,7 +875,7 @@ elements before we discuss them in more detail::
#build label(noblebedroom) No explicit 'start()' so cursor is in upper left
#meta label(digwholefort) start(center of stairs on surface)
#dig label(dig_dining) hidden() called by the digwholefort meta blueprint
#zone label(pastures) message(remember to assign animals to the new pastures)
#zone label(pastures) message(remember to assign animals to the pastures)
.. _quickfort-label:
@ -1376,9 +1427,9 @@ Dreamfort blueprint set. Then we'll walk through the spreadsheets for each of
the fort levels in turn, calling out feature usage examples and explaining the
parts that might not be obvious just from looking at them.
If you haven't built Dreamfort before, maybe try an embark in a flat area and
take it for a spin! It will help put the following sections in context. There is
also a pre-built Dreamfort available for download on
If you haven't built Dreamfort before, maybe try an embark in a relatively flat
area and take it for a spin! It will help put the following sections in
context. There is also a pre-built Dreamfort available for download on
:dffd:`dffd <15434>` if you just want an interactive reference.
Dreamfort organization and packaging
@ -1388,9 +1439,9 @@ The Dreamfort blueprints are distributed with DFHack as
:source:`one large .csv file <data/blueprints/dreamfort.csv>`, but
editing in that format would be frustrating. Instead, the blueprints are
edited `online as Google drive spreadsheets
<https://drive.google.com/drive/folders/1iS90EEVqUkxTeZiiukVj1pLloZqabKuP>`__.
<https://drive.google.com/drive/folders/1dsmvnzbOKsyFS3DCj0F8ibSnMhVHEjdV>`__.
Either the .csv file or the .xlsx files can be read and applied by quickfort,
but it made more sense to distribute the blueprints as a .csv so users would
but it made more sense to distribute the blueprints as a .csv so players would
only have to remember one filename. Also, .csv files are text-based, which works
more naturally with the DFHack source control system. We use the
`xlsx2csv <https://github.com/dilshod/xlsx2csv>`__ utility to do the conversion
@ -1406,7 +1457,7 @@ walkthrough and other useful details. This is the first sheet in each
spreadsheet so it will be selected by default if the user doesn't specify a
label name. For example, just running ``quickfort run
library/dreamfort.csv`` will display Dreamfort's `introduction text
<https://docs.google.com/spreadsheets/d/13PVZ2h3Mm3x_G1OXQvwKd7oIR2lK4A1Ahf6Om1kFigw>`__.
<https://docs.google.com/spreadsheets/d/15TDBebP8rBNvsFbezb9xuKPmGWNzv7j4XZWq1AsfCio>`__.
Do not neglect writing the help text! Not only will it give others a chance to
use your blueprints appropriately, but the help you write will remind *you* what
@ -1415,11 +1466,11 @@ you were thinking when you wrote the blueprint in the first place.
The surface_ level: how to manage complexity
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _surface: https://docs.google.com/spreadsheets/d/1vlxOuDOTsjsZ5W45Ri1kJKgp3waFo8r505LfZVg5wkU
.. _surface: https://docs.google.com/spreadsheets/d/17HfnCJY4WDPlLdiLuUNc0gwyf6BiSdayndjvFYXzS7c
.. image:: https://drive.google.com/uc?export=download&id=1YL_vQJLB2YnUEFrAg9y3HEdFq3Wpw9WP
.. image:: https://drive.google.com/uc?export=download&id=1dlu3nmwQszav-ZaTx-ac28wrcaYBQc_t
:alt: Annotated screenshot of the dreamfort surface level
:target: https://drive.google.com/file/d/1YL_vQJLB2YnUEFrAg9y3HEdFq3Wpw9WP
:target: https://drive.google.com/file/d/1dlu3nmwQszav-ZaTx-ac28wrcaYBQc_t
:align: center
For smaller blueprints, packaging and usability are not really that important -
@ -1427,9 +1478,9 @@ just write it, run it, and you're done. However, as your blueprints become
larger and more detailed, there are some best practices that can help you deal
with the added complexity. Dreamfort's surface level is many steps long since
there are trees to be cleared, holes to be dug, flooring to be laid, and
bridges to be built, and each step requires the previous step to be completely
finished before it can begin. Therefore, a lot of thought went into minimizing
the toil associated with applying so many blueprints.
bridges to be linked to control levers, and each step requires the previous
step to be completely finished before it can begin. Therefore, a lot of thought
went into minimizing the toil associated with applying so many blueprints.
.. topic:: Tip
@ -1440,13 +1491,13 @@ The single most effective way to make your blueprint sets easier to use is to
group them with `meta blueprints <quickfort-meta>`. For the Dreamfort set of
blueprints, each logical "step" generally takes more than one blueprint. For
example, with ``#meta`` blueprints, setting up pastures with a ``#zone``
blueprint, placing starting stockpiles with a ``#place`` blueprint, building
starting workshops with a ``#build`` blueprint, and configuring the stockpiles
with a ``#query`` blueprint can all be done with a single command. Bundling
blueprints with ``#meta`` blueprints reduced the number of steps in Dreamfort
from 61 to 30, and it also made it much clearer to see which blueprints can be
applied at once without unpausing the game. Check out dreamfort_surface's "`meta
<https://docs.google.com/spreadsheets/d/1vlxOuDOTsjsZ5W45Ri1kJKgp3waFo8r505LfZVg5wkU/edit#gid=972927200>`__"
blueprint, placing starting stockpiles with a ``#place`` blueprint, and building
starting workshops with a ``#build`` blueprint can all be done with a single
command. Bundling blueprints with ``#meta`` blueprints reduced the number of
steps in Dreamfort from 100 to about 25, and it also made it much clearer to
see which blueprints can be applied at once without unpausing the game. Check
out dreamfort_surface's "`meta
<https://docs.google.com/spreadsheets/d/17HfnCJY4WDPlLdiLuUNc0gwyf6BiSdayndjvFYXzS7c/edit#gid=972927200>`__"
sheet to see how much meta blueprints can simplify your life.
You can define `as many blueprints as you want <quickfort-packaging>` on one
@ -1458,25 +1509,27 @@ having a bird's eye view of your entire plan in one sheet.
Keep the blueprint list uncluttered by using ``hidden()`` markers.
If a blueprint is bundled into a meta blueprint, it does not need to appear in
the ``quickfort list`` output since you won't be running it directly. Add a
`hidden() marker <quickfort-hidden>` to those blueprints to keep the list
output tidy. You can still access hidden blueprints with ``quickfort list
--hidden`` if you need to -- for example to reapply a partially completed
``#build`` blueprint -- but now they wont clutter up the normal blueprint list.
the `gui/quickfort` blueprint load dialog or ``quickfort list`` output since
you won't be running it directly. Add a `hidden() marker <quickfort-hidden>` to
those blueprints to keep the list output tidy. You can still access hidden
blueprints by toggling the "Hidden" setting in `gui/quickfort` or by passing the
``--hidden`` option to ``quickfort list`` if you need to, for example to
reapply a partially completed ``#build`` blueprint, but now they wont clutter
up the normal blueprint list.
.. topic:: Tip
Name your blueprints with a common prefix so you can find them easily.
This goes for both the file name and the `modeline label() <quickfort-label>`.
Searching and filtering is implemented for both the
``quickfort list`` command and the quickfort interactive dialog. If you give
related blueprints a common prefix, it makes it easy to set the filters to
display just the blueprints that you're interested in. If you have a lot of
blueprints, this can save you a lot of time. Dreamfort uses the level name as a
prefix for the labels, like "surface1", "surface2", "farming1", etc. So if Im
in the middle of applying the surface blueprints, Id set the filter to
``dreamfort surface`` to just display the relevant blueprints.
Searching and filtering is implemented for both `gui/quickfort` and the
``quickfort list`` command. If you give related blueprints a common prefix, it
makes it easy to set the filters to display just the blueprints that you're
interested in. If you have a lot of blueprints, this can save you a lot of
time. Dreamfort uses the level name as a prefix for the labels, like
"surface1", "surface2", "farming1", etc. So if Im in the middle of applying
the surface blueprints, Id set the filter to ``dreamfort surface`` to just
display the relevant blueprints.
.. topic:: Tip
@ -1496,7 +1549,7 @@ sheet, like in surface's meta sheet.
things to include in messages are:
* The name of the next blueprint to apply and when to run it
* Whether ``quickfort orders`` should be run for the current or an upcoming step
* Whether orders should be generated for the current or an upcoming step
* Any actions that you have to perform manually after running the blueprint,
like assigning minecarts to hauling routes or pasturing animals in
newly-created zones
@ -1505,136 +1558,96 @@ These things are just too easy to forget. Adding a ``message()`` can save you
from time-wasting mistakes. Note that ``message()`` markers can still appear on
the ``hidden()`` blueprints, and they'll still get shown when the blueprint is
run via a ``#meta`` blueprint. For an example of this, check out the `zones
sheet <https://docs.google.com/spreadsheets/d/1vlxOuDOTsjsZ5W45Ri1kJKgp3waFo8r505LfZVg5wkU/edit#gid=1226136256>`__
sheet <https://docs.google.com/spreadsheets/d/17HfnCJY4WDPlLdiLuUNc0gwyf6BiSdayndjvFYXzS7c/edit#gid=1226136256>`__
where the pastures are defined.
The farming_ level: fun with stockpiles
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _farming: https://docs.google.com/spreadsheets/d/1iuj807iGVk6vsfYY4j52v9_-wsszA1AnFqoxeoehByg
.. _farming: https://docs.google.com/spreadsheets/d/1RZ67upSpQx7hX-AkqiFXVJl8o5GGdDX1WDOJNz-wOiA
.. image:: https://drive.google.com/uc?export=download&id=1fBC3G5Y888l4tVe5REAyAd_zeojADVme
.. image:: https://drive.google.com/uc?export=download&id=1vDaedLcgoexUdKREUz75ZXQi0ZSdwWwj
:alt: Annotated screenshot of the dreamfort farming level
:target: https://drive.google.com/file/d/1fBC3G5Y888l4tVe5REAyAd_zeojADVme
:target: https://drive.google.com/file/d/1vDaedLcgoexUdKREUz75ZXQi0ZSdwWwj
:align: center
It is usually convenient to store closely associated blueprints in the same
spreadsheet. The farming level is very closely tied to the surface because the
miasma vents dug on the surface have to perfectly line up with where waste
products are placed on the farming level. However, surface is a separate z-level
miasma vents dug on the surface have to perfectly line up with where rottables
can accumulate on the farming level. However, surface is a separate z-level
and, more importantly, already has many many blueprints of its own. Farming is
therefore split into a separate file.
.. topic:: Tip
Automate stockpile chains when you can, and write ``message()`` reminders
when you can't.
The farming level starts doing interesting things with ``#query`` blueprints and
stockpiles. Note the `careful customization
<https://docs.google.com/spreadsheets/d/1iuj807iGVk6vsfYY4j52v9_-
wsszA1AnFqoxeoehByg/edit#gid=486506218>`__ of the food stockpiles and the
stockpile chains set up with the ``give*`` aliases. This is so when multiple
stockpiles can hold the same item, the largest can keep the smaller ones filled.
For example the ``give2up`` alias funnels seeds from the seeds feeder pile to
the container-enabled seed storage pile. If you have multiple stockpiles holding
the same type on different z-levels, though, this can be tricky to set up with a
blueprint. Here, the jugs and pots stockpiles must be manually linked to the
quantum stockpile on the industry level, since we can't know beforehand how many
z-levels away that is. Note how we call that out in the ``#query`` blueprint's
``message()``.
Automate stockpile chains with the ``take_from`` and ``give_to`` properties.
The farming level starts doing interesting things with stockpiles in its
``#place`` blueprints. Note the `careful customization
<https://docs.google.com/spreadsheets/d/1RZ67upSpQx7hX-AkqiFXVJl8o5GGdDX1WDOJNz-wOiA/edit#gid=1174337781>`__
of the food stockpiles and the stockpile chains set up with the ``take_from``
and ``give_to`` properties. For example, the "Seeds" stockpile is set to
``link_only=true`` and the "Seeds feeder" stockpile has ``containers=0`` and
``give_to=Seeds``. This minimizes container churn for the common task of seed
recovery. When finding the named stockpiles to link, quickfort will search the
other stockpiles created in the same blueprint first. If no stockpiles by that
name are found, then existing stockpiles/workshops are searched. This is how
many of the stockpiles on this level are configured to take from the starter
stockpiles on the surface.
.. topic:: Tip
Use aliases to set up hauling routes and quantum stockpiles.
Quantum stockpiles are super easy to define, if you want to use them.
Hauling routes are notoriously fiddly to set up, but they can be automated with
blueprints. Check out the Southern area of the ``#place`` and ``#query``
blueprints for how the quantum refuse dump is configured with simple aliases
from the alias library.
Hauling routes are notoriously fiddly to set up by hand, but they can be easily
automated with blueprints. Check out the Southern area of the ``#place`` and
``#build`` blueprints for how the quantum refuse dump is configured with simple
``take_from`` and ``route`` properties attached to the track stop.
The industry_ level: when not to use aliases
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The industry_ level: advanced linking
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _industry: https://docs.google.com/spreadsheets/d/1gvTJxxRxZ5V4vXkqwhL-qlr_lXCNt8176TK14m4kSOU
.. _industry: https://docs.google.com/spreadsheets/d/16nzXGrznQmtkrmQv7FeKsVYnv8SSA7eBl1M-97NmuQk
.. image:: https://drive.google.com/uc?export=download&id=1emMaHHCaUPcdRbkLQqvr-0ZCs2tdM5X7
.. image:: https://drive.google.com/uc?export=download&id=1c8YTHxTgJY5tUII-BOWdLhmDFAHwIOEs
:alt: Annotated screenshot of the dreamfort industry level
:target: https://drive.google.com/file/d/1emMaHHCaUPcdRbkLQqvr-0ZCs2tdM5X7
:target: https://drive.google.com/file/d/1c8YTHxTgJY5tUII-BOWdLhmDFAHwIOEs
:align: center
The industry level is densely packed and has more complicated examples of
stockpile configurations and quantum dumps. However, what I'd like to call out
first are the key sequences that are *not* in aliases.
The industry level is densely packed and has more intracate stockpile and
hauling route configuration.
.. topic:: Tip
Don't use aliases for ad-hoc cursor movements.
It may be tempting to put all query blueprint key sequences into aliases to make
them easier to edit, keep them all in one place, and make them reusable, but
some key sequences just aren't very valuable as aliases.
Name things.
`Check out <https://docs.google.com/spreadsheets/d/1gvTJxxRxZ5V4vXkqwhL-qlr_lXCNt8176TK14m4kSOU/edit#gid=787640554>`__
the Eastern (goods) and Northern (stone and gems) quantum stockpiles -- cells
I19 and R10. They give to the jeweler's workshop to prevent the jeweler from
using the gems held in reserve for strange moods. The keys are not aliased since
they're dependent on the relative positions of the tiles where they are
interpreted, which is easiest to see in the blueprint itself. Also, if you move
the workshop, it's easier to fix the stockpile link right there in the blueprint
instead of editing a separate alias definition.
There are also good examples in the ``#query`` blueprint for how to use the
``permit`` and ``forbid`` stockpile aliases.
In order to be a target for a stockpile or workshop link, the stockpile or
building must have a name. That's not the only reason you should give things
names, though. The game is just much easier to play when stockpiles and key
buildings have descriptive names. Which lever controls the bridge named "Right outer gate"? You can click on that bridge, click on "show linked buildings", zoom to the lever, and click on the lever. Or you can scan your mouse over the levers and click onYou can always edit names in-game, but
blueprints are a great way to automate this task.
.. topic:: Tip
Put all configuration that must be applied in a particular order in the
same spreadsheet cell.
Most of the baseline aliases distributed with DFHack fall into one of three
categories:
You can give to or take from multiple sources.
1. Make a stockpile accept only a particular item type in a category
2. Permit an item type, but do not otherwise change the stockpile configuration
3. Forbid an item type, but do not otherwise change the stockpile configuration
Some of the feeder stockpiles on this level are split up so that no one item
type can fill the whole pile. The track stops that drive the quantum stockpiles
have to take from all of them at once. When specifying multiple link targets
that have spaces in their names, remember to surround the whole list with
quotes. For example::
If you have a stockpile that covers multiple tiles, it might seem natural to put
one alias per spreadsheet cell. The aliases still all get applied to the
stockpile, and with only one alias per cell, you can just type the alias name
and avoid having to use the messier-looking ``{aliasname}`` syntax::
#place Declare a food stockpile
f(3x3)
#query Incorrectly configure a food stockpile to accept tallow and dye
tallow
permitdye
However, in quickfort there are no guarantees about which cell will be
processed first. In the example above, we obviously intend for the food
stockpile to have tallow exclusively permitted, then to add dye. It could happen
that the two aliases are applied in the opposite order, though, and we'd end up
with dye being permitted, then everything (including dye) being forbidden, and,
finally, tallow being enabled. To make sure you always get what you want, write
order-sensitive aliases on the same line::
#place Declare a food stockpile
f(3x3)
#query Properly configure a food stockpile to accept tallow and dye
{tallow}{permitdye}
You can see a more complex example of this with the ``meltables`` stockpiles in
the `lower left corner <https://docs.google.com/spreadsheets/d/1gvTJxxRxZ5V4vXkqwhL-qlr_lXCNt8176TK14m4kSOU/edit#gid=787640554>`__
of the industry level.
#build
trackstopW{name="Goods/wood dumper" take_from="Wood feeder,Goods feeder,Furniture feeder" route="Goods/wood quantum"}
The services_ level: handling multi-level dig blueprints
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _services: https://docs.google.com/spreadsheets/d/1IBy6_pGEe6WSBCLukDz_5I-4vi_mpHuJJyOp2j6SJlY
.. _services: https://docs.google.com/spreadsheets/d/1xu8vNKGlGDN9L3MVB4qp2Ytef9oAWvuET6RkuZXmCaE
.. image:: https://drive.google.com/uc?export=download&id=13vDIkTVOZGkM84tYf4O5nmRs4VZdE1gh
.. image:: https://drive.google.com/uc?export=download&id=1RQMy_zYQWM5GN7-zjn6LoLWmnrJjkxPM
:alt: Annotated screenshot of the dreamfort services level
:target: https://drive.google.com/file/d/13vDIkTVOZGkM84tYf4O5nmRs4VZdE1gh
:target: https://drive.google.com/file/d/1RQMy_zYQWM5GN7-zjn6LoLWmnrJjkxPM
:align: center
Services is a multi-level blueprint that includes a well cistern beneath the
@ -1646,27 +1659,31 @@ priorities <quickfort-dig-priorities>`.
Use dig priorities to control ramp creation.
We can `ensure <https://docs.google.com/spreadsheets/d/1IBy6_pGEe6WSBCLukDz_5I-4vi_mpHuJJyOp2j6SJlY/edit#gid=962076234>`__
We can `ensure <https://docs.google.com/spreadsheets/d/1xu8vNKGlGDN9L3MVB4qp2Ytef9oAWvuET6RkuZXmCaE/edit#gid=1706912296>`__
the bottom level is carved out before the layer above is channeled by assigning
the channel designations lower priorities (the ``h5``\s in the third layer --
scroll down).
the channel designations lower priorities (the ``h5``\s in the lower layers --
scroll down). This works here because there is only a single column of
higher-priority stairs for a dwarf to dig down to get below the lower-priority
channels. If the dig area has multiple tiles exposed, it is harder to control
dig order since a second dwarf may not have access to any higher-priority tiles
and may start digging the lower-priority designations prematurely.
An alternative is to have a follow-up blueprint that removes any undesired
ramps. We did this on the
`surface <https://docs.google.com/spreadsheets/d/1vlxOuDOTsjsZ5W45Ri1kJKgp3waFo8r505LfZVg5wkU/edit#gid=1790750180>`__
`surface <https://docs.google.com/spreadsheets/d/17HfnCJY4WDPlLdiLuUNc0gwyf6BiSdayndjvFYXzS7c/edit#gid=1790750180>`__
and
`farming <https://docs.google.com/spreadsheets/d/1iuj807iGVk6vsfYY4j52v9_-wsszA1AnFqoxeoehByg/edit#gid=436537058>`__
`farming <https://docs.google.com/spreadsheets/d/1RZ67upSpQx7hX-AkqiFXVJl8o5GGdDX1WDOJNz-wOiA/edit#gid=436537058>`__
levels with the miasma vents since it would be too complicated to synchronize
the digging between the two layers.
simultaneous digging of the two layers.
The guildhall_ level: avoiding smoothing issues
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _guildhall: https://docs.google.com/spreadsheets/d/1wwKcOpEW-v_kyEnFyXS0FTjvLwJsyWbCUmEGaXWxJyU
.. _guildhall: https://docs.google.com/spreadsheets/d/1DltZIHkw7zpNiQdSvXLcHdbwdttPwl35pVpBUYy90TA
.. image:: https://drive.google.com/uc?export=download&id=17jHiCKeZm6FSS-CI4V0r0GJZh09nzcO_
.. image:: https://drive.google.com/uc?export=download&id=1mt66QOkfBqFLtw6AJKU6GNYmhB72XSJG
:alt: Annotated screenshot of the dreamfort guildhall level
:target: https://drive.google.com/file/d/17jHiCKeZm6FSS-CI4V0r0GJZh09nzcO_
:target: https://drive.google.com/file/d/1mt66QOkfBqFLtw6AJKU6GNYmhB72XSJG
:align: center
The goal of this level is to provide rooms for ``locations`` like guildhalls,
@ -1685,24 +1702,65 @@ blocks a corner, or if a line of statues blocks a wall segment, it forces the
player to smooth before building the statues. Otherwise they have to bother with
temporarily removing statues to smooth the walls behind them.
The beds_ levels: multi level meta blueprints
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The suites_ level: balance of flexibility
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _beds: https://docs.google.com/spreadsheets/d/1QNHORq6YmYfuVVMP5yGAFCQluary_JbgZ-UXACqKs9g
.. _suites: https://docs.google.com/spreadsheets/d/1pZ5mnYzzYLSni-LA3rfHZ6dFX8n7rTW088iBwsCI7N4
.. image:: https://drive.google.com/uc?export=download&id=1IBqCf6fF3lw7sHiBE_15Euubysl5AAiS
.. image:: https://drive.google.com/uc?export=download&id=16XRb1w5zFoyVq2LBMx_aCwOyjFq7GULc
:alt: Annotated screenshot of the dreamfort noble suites
:target: https://drive.google.com/file/d/1IBqCf6fF3lw7sHiBE_15Euubysl5AAiS
:target: https://drive.google.com/file/d/16XRb1w5zFoyVq2LBMx_aCwOyjFq7GULc
:align: center
.. image:: https://drive.google.com/uc?export=download&id=1mDQQXG8BnXqasRGFC9R5N6xNALiswEyr
In designing this level, we needed to choose between two approaches:
1. Create rooms with specific, pre-determined purposes, laying out furniture
and zoning with appropriate types
#. Lay out each room the same so each can serve any purpose
Each has pros and cons. The first option reduces more toil by pre-creating the
zones. If we go this route, we can also auto-assign the rooms to the various
roles (if they exist when the blueprint is run). Each room can be customized
for its intended purpose: offices can look like offices, bedrooms could look
like bedrooms, and so on. However, if the needs of the fort don't correspond to
the pre-determined layouts, or if the needs of the fort *change* significantly,
then the blueprint can become more of a hinderance than a help.
As you can see from the screenshot, we went with option 2. The ability to
re-zone arbitrarily to meet changing noble needs was too great of a benefit to
ignore. The downside, of course, is that you have to zone and assign your own
rooms. However, as soon as you gain a barony or a duchy, you'd be doing that
anyway with option 1.
With option 2, if you need a "better" bedroom, you'd just expand the zone to
cover the neighboring "unit". Satisfying the monarch is also simple: plop down
a new suites level and assign each block of 4 rooms to one zone. four units for
the bedroom, four for the office, four for the dining hall, and four for the
tomb. Smooth and engrave and you're done. Of course, more asthetic-minded
players are always free to design custom areas too. These blueprints are
designed to be functional more than beautiful.
The beds_ and crypt_ levels: copy and paste and repeat
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. _beds: https://docs.google.com/spreadsheets/d/1pZ5mnYzzYLSni-LA3rfHZ6dFX8n7rTW088iBwsCI7N4
.. _crypt: https://docs.google.com/spreadsheets/d/1yTr48EFgXIoswhzL2RXpzUBvY8Sa-XKEacf6zXriZvM
.. image:: https://drive.google.com/uc?export=download&id=16-NXlodLIQjeZUMSmsWRafeytwU2dXQo
:alt: Annotated screenshot of the dreamfort apartments
:target: https://drive.google.com/file/d/1mDQQXG8BnXqasRGFC9R5N6xNALiswEyr
:target: https://drive.google.com/file/d/16-NXlodLIQjeZUMSmsWRafeytwU2dXQo
:align: center
.. image:: https://drive.google.com/uc?export=download&id=16iT_ho7BIRPD_eofuxdlVQ4FunR1Li23
:alt: Annotated screenshot of the dreamfort crypt
:target: https://drive.google.com/file/d/16iT_ho7BIRPD_eofuxdlVQ4FunR1Li23
:align: center
The suites and apartments blueprints are straightforward. The only fancy bit
is the meta blueprint that digs the stack of apartment levels, which brings us
to our final tip:
The apartments and crypt blueprints are straightforward, other than the sheer
number of zones. Copy-paste in Google Sheets was used heavily here. The only
fancy bit is the meta blueprint that digs the stack of apartment levels, which
brings us to our final tip:
.. topic:: Tip
@ -1713,15 +1771,15 @@ aquifer between the farming and industry levels, and we can't know beforehand
how many z-levels we need to skip. We can, however, automate the digging of
everything from the industry level down, including designating all apartment
levels at once. See the
`#meta <https://docs.google.com/spreadsheets/d/13PVZ2h3Mm3x_G1OXQvwKd7oIR2lK4A1Ahf6Om1kFigw/edit#gid=284974597>`__
`#meta <https://docs.google.com/spreadsheets/d/15TDBebP8rBNvsFbezb9xuKPmGWNzv7j4XZWq1AsfCio/edit#gid=284974597>`__
blueprint in the `Dreamfort help spreadsheet
<https://docs.google.com/spreadsheets/d/13PVZ2h3Mm3x_G1OXQvwKd7oIR2lK4A1Ahf6Om1kFigw/edit#gid=0>`__
<https://docs.google.com/spreadsheets/d/15TDBebP8rBNvsFbezb9xuKPmGWNzv7j4XZWq1AsfCio>`__
for how it uses a ``repeat()`` marker for the ``/apartments1`` blueprint to
apply it to five z-levels at once.
apply it to three z-levels at once.
That's it! I hope this guide was useful to you. Please leave feedback on the
forums if you have ideas on how this guide (or the dreamfort blueprints) can be
improved!
forums or on the DFHack Discord server if you have ideas on how this guide (or
the dreamfort blueprints themselves) can be improved!
Links
-----
@ -1952,9 +2010,11 @@ Property Description
In addition to the type-specific properties listed below, all building types
accept the ``name`` property.
Moreover, all workshops and furnaces accept ``take_from`` and ``give_to``
properties, which are comma-separated lists of names (the same as the
correponding stockpile properties above).
Moreover, all workshops and furnaces accept the ``max_general_orders``
property, which sets the maximum number of general workorders that the building
can accept, and the ``take_from`` and ``give_to`` properties, which are
comma-separated lists of names (the same as the correponding stockpile
properties above).
================= ============================= ==========
Symbol Type Properties