Quickfort Blueprint Information

Quickfort is a DFHack script that helps you construct fortresses from
“blueprint” .csv and .xlsx information. Many functions exist to edit these information,
comparable to MS Excel and Google Sheets. Most structure and
building-oriented DF instructions are supported by using a number of information or
spreadsheets, every describing a special part of DF development: designation,
constructing, inserting stockpiles/zones, and setting configuration.

The unique thought got here from Valdemar’s auto-designation
macro. Joel Thornton reimplemented the core logic in Python and prolonged its
performance with Quickfort 2.0. This
DFHack-native implementation, referred to as “DFHack Quickfort” or simply “quickfort”,
builds upon Quickfort 2.0’s codecs and options. Any blueprint that labored in
Python Quickfort 2.0 ought to work with DFHack Quickfort. DFHack Quickfort
interacts with Dwarf Fortress reminiscence constructions straight, permitting for
instantaneous blueprint utility, error checking and restoration, and lots of different
superior options.

This information focuses on DFHack Quickfort’s capabilities and teaches gamers how
to know and create blueprint information. A few of the textual content was initially
written by Joel Thornton, reused right here together with his permission.

For these simply trying to apply present blueprints, take a look at the quickfort
command’s documentation
for syntax. There are various ready-to-use
blueprints out there within the blueprints/library subfolder in your DFHack
set up. Browse them in your laptop or
on-line, or run quickfort checklist -l on the
[DFHack]# immediate to checklist them, after which quickfort run to use them to
your fort!

Earlier than you turn out to be an skilled at writing blueprints, although, it’s best to know that
the best strategy to make a quickfort blueprint is to construct your plan “for real”
in Dwarf Fortress after which export your map utilizing the DFHack blueprint plugin.
You may apply these blueprints as-is in your subsequent fort, or you’ll be able to fine-tune
them with further options from this information.

See the Hyperlinks part for extra info and on-line assets.


  • Common
    • Manages blueprints to deal with all phases of DF development
    • Helps .csv and multi-worksheet .xlsx blueprint information
    • Close to-instant utility, even for very giant and complicated blueprints
    • Blueprints can span a number of z-levels
    • You may bundle all blueprints and aliases wanted for a whole fortress
      in a single file for straightforward sharing
    • “meta” blueprints that simplify the appliance of sequences of blueprints
    • Undo performance for dig, construct, place, and zone blueprints
    • Automated cropping of blueprints so that you don’t get errors if the blueprint
      extends off the map
    • Can generate supervisor orders for every part required by a construct blueprint
    • Features a library of ready-to-use blueprints
    • Verbose output mode for blueprint debugging
  • Dig mode
    • Helps all sorts of designations, together with dumping/forbidding objects and
      setting site visitors settings
    • Helps setting dig priorities
    • Helps making use of dig blueprints in marker mode
    • Handles carving arbitrarily advanced minecart tracks, together with tracks that
      cross different tracks
  • Construct mode
    • Absolutely built-in with DFHack buildingplan: you’ll be able to place buildings earlier than
      manufacturing constructing supplies and you should use the buildingplan UI for
      setting supplies preferences
    • Designate complete constructions in mid-air with out having to attend for every
      tile to turn out to be supported
    • Automated enlargement of constructing footprints to their minimal dimensions, so
      solely the middle tile of a multi-tile constructing must be recorded within the
    • Tile occupancy and validity checking so, for instance, buildings that
      can’t be positioned on a goal tile will probably be skipped as a substitute of messing up
      the blueprint. Blueprints which are solely partially utilized for any motive
      (e.g. you should dig out some extra tiles) could be safely reapplied to
      construct the remaining buildings.
    • Relaxed guidelines for farm plot and highway placement: you’ll be able to nonetheless place the
      constructing even when an invalid tile (e.g. stone tiles for farm plots) splits
      the designated space into two disconnected elements
    • Clever boundary detection for adjoining buildings of the identical sort
      (e.g. a 6×6 block of


      cells will probably be appropriately break up into 4 jeweler’s

  • Place and zone modes
    • Outline stockpiles and zones of form, not simply rectangles
    • Configurable numbers of bins, barrels and wheelbarrows assigned to created
    • Automated splitting of stockpiles and zones that exceed most dimension
    • Absolutely configurable zone settings, comparable to pit/pond and hospital provide
  • Question mode
    • Ship arbitrary keystroke sequences to the UI – something you are able to do
      by the UI is supported
    • Helps aliases to simplify frequent keystroke combos
    • Features a library of pre-made and examined aliases to simplify most typical
      duties, comparable to configuring stockpiles for necessary merchandise varieties or creating
      named hauling routes for quantum stockpiles.
    • Helps together with aliases in different aliases for straightforward administration of widespread
    • Helps repeating key sequences a specified variety of instances
    • Skips sending keys when the cursor is over a tile that doesn’t have a
      stockpile or constructing, so lacking buildings received’t desynchronize your
    • Instantaneous halting of question blueprint utility when keystroke errors are
      detected, comparable to when a mistake in a key sequence leaves us caught in a
      submenu, to make question blueprints simpler to debug

Enhancing blueprints

We advocate utilizing a spreadsheet editor comparable to Excel, Google
, or LibreOffice
to edit blueprint information, however any textual content editor will do.

The format of Quickfort-compatible blueprint information is simple. The primary
line (or upper-left cell) of the spreadsheet ought to appear to be this:


The key phrase dig tells Quickfort we’re going to be utilizing the Designations
menu in DF. The next “mode” key phrases are understood:

Blueprint mode

Designations menu (d)

Construct menu (b)

Place stockpiles menu (p)

Exercise zones menu (i)

Set constructing duties/prefs menu (q)

If no modeline seems within the first cell, Quickfort assumes that it’s
a #dig blueprint.

There are additionally different modes that don’t straight correspond to Dwarf Fortress
menus, however we’ll discuss these later.

When you like, it’s possible you’ll enter a remark after the mode key phrase. This remark will
seem within the output of quickfort checklist when run from the DFHack# immediate.
You should use this area for explanations, attribution, and so on.

#dig grand eating room

Under this line start getting into keys in every spreadsheet cell that characterize what
you need designated within the corresponding recreation map tile. For instance, we may
dig out a 4×4 room like so (areas are used as column separators right here for
readability, however an actual .csv file would have commas):


d d d d # d d d d # d d d d # d d d d #

# # # # #

Word the # symbols on the proper finish of every row and under the final row.
These are fully optionally available, however could be useful to make the row and column
positions clear.

As soon as the dwarves have that dug out, let’s construct a walled-in bed room inside our
dug-out space:


Cw Cw Cw Cw # Cw b h Cw # Cw Cw # Cw Cw Cw #

# # # # #

Word my generosity – along with the mattress (b) I’ve constructed a chest
(c) right here for the dwarf as properly. You should use the total collection of keys
wanted to construct one thing in every cell, e.g. Cw signifies we
ought to enter DF’s constructions submenu (C) and choose partitions (w).

I’d additionally like to position a booze stockpile within the 2 unoccupied tiles within the room.

#place Place a meals stockpile

` ` ` ` # ` ~ ~ ` # ` f f ` # ` ` ` #

# # # # #

This illustration could also be just a little onerous to know. The 2 f
characters are in row 3, columns 2 and three. All the opposite cells are empty. QF
considers each ` (backtick – the character beneath the tilde) and
~ (tilde) characters inside cells to be empty cells; this might help with
multilayer or fortress-wide blueprint layouts as “chalk lines”.

QF is sensible sufficient to acknowledge this as a 2×1 meals stockpile, and creates it as
such somewhat than as two 1×1 meals stockpiles. Quickfort treats any linked
area of equivalent designations as a single entity. The tiles could be linked
orthogonally or diagonally, simply so long as they’re touching.

Lastly, let’s flip the mattress right into a bed room and set the meals stockpile to carry
solely booze.


` ` ` ` # ` r& ` # ` booze # ` ` ` ` #

# # # # #

In row 2, column 2 we’ve r&. This sends the r key to DF when the
cursor is over the mattress, inflicting us to “make room” and Enter, represented
by particular & alias, to point that we’re completed setting the dimensions (the
default room measurement is okay right here).

In column 2, row 3 we’ve booze. That is one among many alias key phrases outlined
within the included aliases library.
This specific alias units a meals stockpile to simply accept solely booze. It sends the
keys wanted to navigate DF’s stockpile settings menu, after which it sends an
Escape character to exit again to the map. You will need to exit out of any
menus that you just enter whereas in question mode in order that the cursor can transfer to the subsequent
tile when it’s completed with the present tile.

If there weren’t an alias named booze then the literal characters
booze would have been despatched, so remember to
spell these aliases appropriately!

It can save you lots of effort and time by utilizing aliases as a substitute of including all
key seqences on to your blueprints. For extra particulars, take a look at the
Quickfort Alias Information. It’s also possible to see examples of
aliases getting used within the question blueprints within the
DFHack blueprint library. You may create
your individual aliases by including them to dfhack-config/quickfort/aliases.txt
in your DFHack folder or you’ll be able to add them
on to your blueprint information.

Space enlargement syntax

In Quickfort, the next blueprints are equal:

#dig a 3x3 space

d d d # d d d # d d d #

# # # #

#dig the identical space with d(3x3) laid out in row 1, col 1

d(3x3)# ` ` ` # ` ` ` #

# # # #

The second instance makes use of Quickfort’s “area expansion syntax”, which takes the


Word that space enlargement syntax can solely specify rectangular areas. If you need
to create extent-based constructions (e.g. farm plots or stockpiles) in numerous
shapes, use the primary format above. For instance:

#place L formed meals stockpile

f f ` ` # f f ` ` # f f f f # f f f f #

# # # # #

Space enlargement syntax additionally units boundaries, which could be helpful if you need
adjoining, however separate, stockpiles of the identical sort:

#place Two touching however separate meals stockpiles

f(4x2) # ~ ~ ~ ~ # f(4x2) # ~ ~ ~ ~ #

# # # # #

As talked about beforehand, ~ characters are ignored as remark characters
and can be utilized for visualizing the blueprint structure. This blueprint could be
equivalently written as:

#place Two touching however separate meals stockpiles

f(4x2) # ~ ~ ~ ~ # f f f f # f f f f #

# # # # #

because the space enlargement syntax of the higher stockpile prevents it from
combining with the decrease, freeform syntax stockpile.

Space enlargement syntax will also be used for buildings which have an adjustable
measurement, like bridges. The next blueprints are equal:

#construct a 4x2 bridge from row 1, col 1

ga(4x2) ` # ` ` ` ` #

# # # # #

#construct a 4x2 bridge from row 1, col 1

ga ga ga ga # ga ga ga ga #

# # # # #

Automated space enlargement

Buildings bigger than 1×1, like workshops, could be represented in any of three
methods. You may designate simply their middle tile with empty cells round it to
go away room for the footprint, like this:

#construct a mason workshop in row 2, col 2 that can occupy the 3x3 space

` ` ` # ` wm ` # ` ` ` #

# # # #

Or you’ll be able to fill out the whole footprint like this:

#construct a mason workshop

wm wm wm # wm wm wm # wm wm wm #

# # # #

This format could also be verbose for normal workshops, however it may be very useful for
laying out constructions like screw pump towers and waterwheels, whose “middle
level” could be non-obvious.

Lastly, you should use space enlargement syntax to characterize the workshop:

#construct a mason workshop

wm(3x3) # ` ` ` # ` ` ` #

# # # #

This model could be handy for laying out a number of buildings of the identical sort.
If you’re constructing a large-scale block manufacturing facility, for instance, this can create
20 mason workshops all in a row:

#construct line of 20 mason workshops


Quickfort will intelligently break giant areas of the identical designation into
appropriately-sized chunks.

Multilevel blueprints

Multilevel blueprints are accommodated by separating Z-levels of the blueprint
with #> (go down one z-level) or #< (go up one z-level) on the finish of
every flooring.

#dig Stairs main all the way down to a small room under

j ` ` # ` ` ` # ` ` ` #

#> # # #

u d d # d d d # d d d #

# # # #

The marker should seem within the first column of the row to be acknowledged, simply
like a modeline.

Dig priorities

DF designation priorities are supported for #dig blueprints. The total syntax
is [letter][number][expansion], the place if the letter is just not specified,
d is assumed, and if quantity is just not specified, 4 is assumed (the
default precedence). So every of those blueprints is equal:

#dig dig the inside of the room at excessive precedence

d d d d d # d d1 d1 d1 d # d d1 d1 d1 d # d d1 d1 d1 d # d d d d d #

# # # # # #

#dig dig the inside of the room at excessive precedence

d d d d d # d d1(3x3) d # d ` ` ` d # d ` ` ` d # d d d d d #

# # # # # #

#dig dig the inside of the room at excessive precedence

4 4 4 4 4 # 4 1 1 1 4 # 4 1 1 1 4 # 4 1 1 1 4 # 4 4 4 4 4 #

# # # # # #

Marker mode

Marker mode is beneficial for while you wish to plan out your digging, however you don’t
wish to dig every part simply but. In #dig mode, you’ll be able to add a m earlier than
another designation letter to point that the tile needs to be designated in
marker mode. For instance, to dig out the perimeter of a room, however go away the
middle of the room marked for digging later:


d d d d d # d md md md d # d md md md d # d md md md d # d d d d d #

# # # # # #

Then you should use “Toggle Standard/Marking” (dM) to transform the
middle tiles to common designations at your leisure.

To use a whole dig blueprint in marker mode, no matter what the
blueprint itself says, you’ll be able to set the worldwide quickfort setting
force_marker_mode to true earlier than you apply the blueprint.

Word that the in-game UI setting “Standard/Marker Only” (dm) does
not have any impact on quickfort.

Stockpiles and zones

It is rather widespread to have stockpiles that settle for a number of classes of things or
zones that allow multiple exercise. Though it’s completely legitimate to
declare a single-purpose stockpile or zone after which modify it with a #question
blueprint, quickfort additionally helps straight declaring all the kinds within the
#place and #zone blueprints. For instance, to declare a 20×10 stockpile
that accepts each corpses and refuse, you might write:

#place refuse heap


And equally, to declare a zone that could be a pasture, a fruit choosing space, and a
assembly space :

#zone major pasture and picnic space


The order of the person letters doesn’t matter. If you wish to configure the
stockpile from scratch in a #question blueprint, you’ll be able to place unconfigured
“custom” stockpiles with (c). It’s extra environment friendly, although, to position
stockpiles utilizing the keys that characterize the classes of things that you really want
to retailer, after which solely use a #question blueprint if you happen to want fine-grained

Stockpile bins, barrels, and wheelbarrows

Quickfort has world settings for default values for the variety of bins,
barrels, and wheelbarrows assigned to stockpiles, however these numbers could be set
for particular person stockpiles as properly.

To set the variety of bins, barrels, or wheelbarrows, simply add a quantity after the
letter that signifies what sort of stockpile it’s. For instance:

#place a stone stockpile with 5 wheelbarrows


#place a bar, ammo, weapon, and armor stockpile with 20 bins


If the desired quantity exceeds the variety of out there stockpile tiles, the
variety of out there tiles is used. For wheelbarrows, that restrict is decreased by 1
to make sure there’s a minimum of one non-wheelbarrow tile out there within the stockpile.
In any other case no stone would ever be dropped at the stockpile since all tiles would
be occupied by wheelbarrows!

Quickfort figures out which container sort is being set by trying on the letter
that comes simply earlier than the quantity. For instance zf10 means 10 barrels in a
stockpile that accepts each ammo and meals whereas z10f means 10 bins. If
the stockpile class doesn’t normally use any container sort, like refuse or
corpses, wheelbarrows are assumed:

#place a corpse stockpile with 3 wheelbarrows


Word that if you’re not utilizing enlargement syntax, every tile of the stockpile should
have the identical textual content. In any other case the stockpile boundaries is not going to be detected

#place a non-rectangular animal stockpile with 5 wheelbarrows

a5,a5,a5,a5 a5, , ,a5 a5, , ,a5 a5,a5,a5,a5

Operating quickfort orders on a #place blueprint with explicitly set
container/wheelbarrow counts will enqueue supervisor orders for the desired
variety of containers or wheelbarrows, even when that quantity exceeds the in-game
measurement of the stockpile. For instance, quickfort orders on the next
blueprint will enqueue 10 rock pots, regardless that the stockpile solely has 9



Zone detailed configuration

Detailed configuration for zones, such because the pit/pond toggle, will also be set
by mimicking the hotkeys used to set them. Word that collect flags default to
true, so specifying them in a blueprint will flip the toggles off. When you want
to set configuration from a number of zone subscreens, separate the important thing sections
with ^. Word the particular syntax for setting hospital provide ranges, which
haven’t any in-game hotkeys:

#zone a mix hospital and shrub (however not fruit) gathering zone

gGtf^hH{hospital buckets=5 splints=20}(10x10)

The legitimate hospital settings (and their most values) are:

thread (1500000) fabric (1000000) splints (100) crutches (100) powder (15000) buckets (100) cleaning soap (15000)

To toggle the lively flag for zones, add an a personality to the
string. For instance, to create a disabled pond zone (that you just later intend to
fastidiously fill with 3-depth water for a dwarven bathtub):

#zone disabled pond zone


Minecart tracks

There are two methods to supply minecart tracks, and they’re dealt with very
in a different way by the sport. You may carve them into onerous pure flooring or you’ll be able to
assemble them out of constructing supplies. Constructed tracks are conceptually
less complicated, so we’ll begin with them.

Constructed tracks

Quickfort helps the designation of observe stops and rollers in #construct
blueprints. You may construct a observe cease with CS and a few variety of
d and a characters for choosing dump route and friction. You
can construct a curler with Mr and a few variety of s and
q characters for route and velocity. Nevertheless, this will get complicated
in a short time and may be very tough to learn in a blueprint. Furthermore, constructed
observe segments don’t even have keys related to them in any respect!

To resolve this drawback, Quickfort gives the next key phrases to be used in
construct blueprints:

-- Observe segments -- trackN trackS trackE trackW trackNS trackNE trackNW trackSE trackSW trackEW trackNSE trackNSW trackNEW trackSEW trackNSEW -- Observe/ramp segments -- trackrampN trackrampS trackrampE trackrampW trackrampNS trackrampNE trackrampNW trackrampSE trackrampSW trackrampEW trackrampNSE trackrampNSW trackrampNEW trackrampSEW trackrampNSEW -- Horizontal and vertical curler segments -- rollerH rollerV rollerNS rollerSN rollerEW rollerWE Word: append as much as 4 'q' characters to curler key phrases to set curler velocity. E.g. a curler that propels from East to West on the slowest velocity can be specified with 'rollerEWqqqq'. -- Observe stops that (optionally) dump to the N/S/E/W -- trackstop trackstopN trackstopS trackstopE trackstopW Word: append as much as 4 'a' characters to trackstop key phrases to set friction quantity. E.g. a cease that applies the smallest quantity of friction could be specified with 'trackstopaaaa'.

For example, you’ll be able to create an E-W observe with stops at every finish that dump to
their exterior instructions with the next blueprint:

#construct Instance observe

trackstopW trackEW trackEW trackEW trackstopE

Word that the solely strategy to construct observe and observe/ramp segments is with the
key phrases. The UI methodology of utilizing + and – keys to pick out the observe
sort from an inventory doesn’t work since DFHack Quickfort doesn’t truly ship keys
to the UI to construct buildings. The textual content in your spreadsheet cells is mapped
straight onto DFHack API calls. Solely #question blueprints ship precise keycodes
to the UI.

Carved tracks

Within the recreation, you carve a minecart observe by specifying a starting and ending
tile and the sport “adds” the designation to the tiles in between. You can not
designate single tiles. For instance to carve two observe segments that cross every
different, you would possibly use the cursor to designate a line of three vertical tiles
like this:

` begin right here ` # ` ` ` # ` finish right here ` #

# # # #

Then to carve the cross, you’d do a horizonal section:

` ` ` # begin right here ` finish right here # ` ` ` #

# # # #

This can lead to a carved observe that will be equal to a constructed
observe of the shape:


` trackS ` # trackE trackNSEW trackW # ` trackN ` #

# # # #

To carve this identical observe with a #dig blueprint, you’d use space enlargement
syntax with a top or width of 1 to point the segments to designate:


` T(1x3) ` # T(3x1) ` ` # ` ` ` #

# # # #

“But wait!”, I can hear you say, “How do you designate a observe nook that opens
to the South and East? You may’t put each T(1xH) and T(Wx1) in the identical cell!”
That is true, however you’ll be able to specify each width and top, and for tracks, QF
interprets it as an upper-left nook extending to the precise W tiles and down H
tiles. For instance, to carve a observe in a closed ring, you’d write:


T(3x3) ` T(1x3) # ` ` ` # T(3x1) ` ` #

# # # #

Which might lead to a carved observe simliar to a constructed observe of the shape:


trackSE trackEW trackSW # trackNS ` trackNS # trackNE trackEW trackNW #

# # # #

Modeline markers

The modeline has some further optionally available elements that we haven’t talked
about but. You may:

  • give a blueprint a label by including a



  • set a cursor offset and/or begin trace by including a



  • cover a blueprint from being listed with a



  • register a message to be displayed after the blueprint is efficiently

The total modeline syntax, when all optionally available components are specified, is:

#mode label(mylabel) begin(X;Y;STARTCOMMENT) hidden() message(mymessage) remark

Word that each one components are optionally available aside from the preliminary #mode (although, as
talked about within the first part, if a modeline doesn’t seem in any respect within the first
cell of a spreadsheet, the blueprint is interpreted as a #dig blueprint with
no optionally available markers). Listed here are a couple of examples of modelines with optionally available
components earlier than we talk about them in additional element:

#dig begin(3; 3; Middle tile of a 5-tile sq.) Common blueprint remark

#construct label(noblebedroom) begin(10;15)

#question label(configstockpiles) No specific begin() means cursor is at higher left nook

#meta label(digwholefort) begin(middle of stairs on floor)

#dig label(digdining) hidden() managed by the digwholefort meta blueprint

#zone label(pastures) message(bear in mind to assign animals to the brand new pastures)

Blueprint labels

Labels are displayed within the quickfort checklist output and are used for
addressing particular blueprints when there are a number of blueprints in a single
file or spreadsheet sheet (see Packaging a set of blueprints under). If a
blueprint has no label, the label turns into the ordinal of the blueprint’s
place within the file or sheet. For instance, the label of the primary blueprint
will probably be “1” if it’s not in any other case set, the label of the second blueprint will
be “2” if it’s not in any other case set, and so on. Labels which are explicitly outlined should
begin with a letter to make sure the auto-generated labels don’t battle with
user-defined labels.

Begin positions

Begin positions specify a cursor offset for a specific blueprint, simplifying
the duty of blueprint alignment. That is very useful for blueprints which are
based mostly on a central staircase, however it helps at any time when a blueprint has an apparent
“center”. For instance:

#construct begin(2;2;middle of workshop) label(masonw) a mason workshop

wm wm wm # wm wm wm # wm wm wm #

# # # #

will construct the workshop centered on the cursor, not down and to the precise of
the cursor.

The 2 numbers specify the column and row (or X and Y offset) the place the cursor
is predicted to be while you apply the blueprint. Place 1;1 is the highest left
cell. The optionally available remark will present up within the quickfort checklist output and
ought to include details about the place to place the cursor. If the beginning
place is 1;1, you’ll be able to omit the numbers and simply add a remark describing
the place to place the cursor. That is additionally helpful for meta blueprints that don’t
truly care the place the cursor is, however that check with different blueprints which have
fully-specified begin() markers. For instance, a meta blueprint that refers
to the masonw blueprint above may appear to be this:

#meta begin(middle of workshop) a mason workshop


Hiding blueprints

A blueprint with a hidden() marker received’t seem in quickfort checklist output
except the --hidden flag is specified. The first motive for hiding a
blueprint (somewhat than, say, deleting it or shifting it out of the blueprints/
folder) is that if a blueprint is meant to be run as half of a bigger sequence
managed by a meta blueprint.


A blueprint with a message() marker will show a message after the
blueprint is utilized with quickfort run. That is helpful for reminding
gamers to take handbook steps that can’t be automated, like assigning minecarts
to a route, or itemizing the subsequent step in a collection of blueprints. For lengthy or
multi-part messages, you’ll be able to embed newlines:


#meta label(surface1) message(This might be a superb time to begin digging the business degree.

As soon as the realm is evident, proceed with /surface2.) clear the embark website and arrange pastures"

The quotes surrounding the cell textual content are solely obligatory if you’re writing a
.csv file by hand. Spreadsheet functions will encompass multi-line textual content with
quotes mechanically once they save/export the file.

Packaging a set of blueprints

A whole specification for a bit of your fortress might include 5 or extra
separate blueprints, one for every “phase” of development (dig, construct, place
stockpiles, designate zones, and question changes).

To handle all of the separate blueprints, it’s usually handy to maintain associated
blueprints in a single file. For .xlsx spreadsheets, you’ll be able to maintain every blueprint
in a separate sheet. On-line spreadsheet functions like Google
make it straightforward to work with a number of associated
blueprints, and, as a bonus, they maintain any formatting you’ve set, like column
sizes and coloring.

For each .csv information and .xlsx spreadsheets you can too add as many blueprints
as you need in a single file or sheet. Simply add a modeline within the first column
to point the beginning of a brand new blueprint. As an alternative of a number of .csv information, you
can concatenate them into one single file. That is particularly helpful while you
are sharing your blueprints with others. A single file is way simpler to handle
than a listing of information.

For instance, you’ll be able to retailer a number of blueprints collectively like this:

#dig label(bed1)

d d d d # d d d d # d d d d # d d d d #

# # # # #

#construct label(bed2)

b f h # # # n #

# # # # #

#place label(bed3)

# f(2x2) # # #

# # # # #

#question label(bed4)

# booze # # #

# # # # #

#question label(bed5)

r{+ 3}& # # # #

# # # # #

In fact, you might nonetheless select to maintain your blueprints in single-sheet .csv
information and simply give associated blueprints related names:

bed room.1.dig.csv bed room.2.construct.csv bed room.3.place.csv bed room.4.question.csv bed room.5.query2.csv

The naming and group is totally as much as you.

Different blueprint modes

There are a couple of further blueprint modes that turn out to be helpful when you’re
sharing your blueprints with others or managing advanced blueprint units. As an alternative
of mapping tile positions to keystroke sequences like the fundamental modes do, these
“blueprints” have specialised, higher-level makes use of:

Blueprint mode

Hyperlink sequences of blueprints collectively

Show lengthy messages, comparable to assist textual content or blueprint

Outline aliases which are seen solely within the present file

Cover a bit from quickfort, helpful for scratch area or
private notes

Meta blueprints

Meta blueprints are blueprints that script a collection of different blueprints. For
instance, many blueprint units observe this sample:

  1. Apply dig blueprint to designate dig areas
  2. Watch for miners to dig
  3. Apply construct buildprint to designate buildings
  4. Apply place buildprint to designate stockpiles
  5. Apply question blueprint to configure stockpiles
  6. Watch for buildings to get constructed
  7. Apply a special question blueprint to configure rooms

These three “apply”s within the center would possibly as properly get completed in a single command as a substitute
of three. A #meta blueprint can encode that sequence. A meta blueprint
refers to different blueprints in the identical file by their label (see the
Modeline markers part above) in the identical format utilized by the quickfort
command: <sheet title>/<label>, or simply /<label> for blueprints in .csv
information or blueprints in the identical spreadsheet sheet because the #meta blueprint
that references them.

A number of examples would possibly make this clearer. Say you may have a .csv file with the “bed”
blueprints within the earlier part:

#dig label(bed1)


#construct label(bed2)


#place label(bed3)


#question label(bed4)


#question label(bed5)


Word how I’ve given all of them labels so we are able to tackle them safely. If I hadn’t
given them labels, they might obtain default labels of “1”, “2”, “3”, and so on, however
these labels would change if I ever add extra blueprints on the prime. This isn’t
an issue if we’re simply working the blueprints individually from the
quickfort checklist command, however meta blueprints want a label title that isn’t
going to alter over time.

So let’s add a meta blueprint to this file that can mix the center three
blueprints into one:


#meta plan bedroom: combines build, place, and stockpile config blueprints"

/bed2 /bed3 /bed4

Now your sequence is shortened to:

  1. Apply dig blueprint to designate dig areas
  2. Watch for miners to dig
  3. Apply meta buildprint to construct buildings and designate/configure
  4. Watch for buildings to get constructed
  5. Apply the ultimate question blueprint to configure the room

You should use meta blueprints to put out your fortress at a bigger scale as properly.
The #< and #> notation is legitimate in meta blueprints, so you’ll be able to, for
instance, retailer the dig blueprints for all the degrees of your fortress in
totally different sheets in a spreadsheet, after which use a meta blueprint to designate
your complete fortress for digging directly. For instance, say you may have a
spreadsheet with the next structure:

Sheet title

one #dig blueprint, no label

one #dig blueprint, no label

4 #dig blueprints, with labels “main”, “basement”,
“waterway”, and “cistern”

one #dig blueprint, no label

one #dig blueprint, no label

one #dig blueprint, no label

We will add a sheet named “dig_all” with the next contents (we’re anticipating
a giant fort, so we’re planning for lots of bedrooms):

#meta dig the entire fortress (bear in mind to set force_marker_mode to true)



























Word that for blueprints with out an specific label, we nonetheless want to deal with
them by their auto-generated numerical label.

It’s price repeating that #meta blueprints can solely check with blueprints that
are outlined in the identical file. Which means all blueprints {that a} meta
blueprint must run should be in sheets throughout the identical .xlsx spreadsheet or
concatenated into the identical .csv file.

You may then cover the blueprints that you just now handle with the meta blueprint
from quickfort checklist by including a hidden() marker to their modelines. That
manner the output of quickfort checklist received’t be cluttered by blueprints that you just
don’t must run straight. When you ever do must entry the managed
blueprints individually, you’ll be able to nonetheless see them with
quickfort checklist --hidden.

Notes blueprints

Typically you simply wish to document some details about your blueprints, such
as when to use them, what preparations you should make, or what the
blueprints include. The message() modeline marker is
helpful for small, single-line messages, however a #notes blueprint is extra
handy for lengthy messages or messages that span many traces. The traces in a
#notes blueprint are output as in the event that they have been contained inside one giant
multi-line message() marker. For instance, the next two blueprints
lead to the identical output:


#meta label(assist) message(That is the assistance textual content for the blueprint set

contained on this file. Extra information right here...) blueprint set walkthough"

#notes label(assist) blueprint set walkthrough

That is the assistance textual content for the blueprint set contained on this file Extra information right here...

The quotes across the #meta modeline permit newlines in a single cell’s textual content.
Every line of the #notes “blueprint”, nevertheless, is in a separate cell,
permitting for a lot simpler viewing and modifying.

Aliases blueprints

You may outline your customized aliases in an #aliases blueprint. In distinction to
the aliases that you just outline in dfhack-config/quickfort/aliases.txt,
that are seen to all blueprints, aliases outlined in #aliases blueprints
are solely seen to blueprints outlined in the identical .csv or .xlsx file. When you
wish to share your blueprint with others, defining your aliases in an
#aliases blueprint will make the blueprint a lot simpler for others to make use of.

Though we’re calling them “blueprints”, #aliases blueprints should not precise
blueprints, they usually don’t present up while you run quickfort checklist. The aliases
are simply mechanically learn in while you run any #question blueprint that’s
outlined in the identical file.

Aliases could be in both of two codecs, and you may combine codecs freely inside
the identical #aliases part. The primary format is similar as what’s utilized in
the aliases.txt information:


aliasname: aliasdefinition

Aliases on this format should seem within the first column of a row.

The second format has the alias title within the first column and the alias
definition within the second column, with no colon separator:



There could be a number of #aliases sections outlined in a .csv file or .xlsx
spreadsheet. The aliases are merely mixed into one checklist. If an alias is
outlined a number of instances, the final definition wins.

See the Quickfort Alias Information for assist with the alias definition syntax.

Ignore blueprints

When you don’t need some information to be seen to quickfort in any respect, use an
#ignore blueprint. All traces till the subsequent modeline within the file or sheet
will probably be fully ignored. This may be helpful for private notes, scratch
area, or briefly “commented out” blueprints.

Buildingplan integration

Buildingplan is a DFHack plugin that retains constructing development jobs in a
suspended state till the supplies required for the job can be found. This
prevents a constructing designation from being canceled when a dwarf picks up the
job however can’t discover the supplies.

So long as the buildingplan plugin is enabled, quickfort will use it to handle
development. The buildingplan plugin has an “enabled” setting for every constructing sort, however these settings solely apply
to buildings created by the buildingplan consumer interface. As well as,
buildingplan has a “quickfort_mode” setting for compatibility with legacy Python
Quickfort. This setting has no impact on DFHack Quickfort, which is able to use
buildingplan to handle every part designated in a #construct blueprint
whatever the buildingplan UI settings.

Nevertheless, quickfort does use buildingplan’s filters
for every constructing sort. For instance, you should use the buildingplan UI to set the
sort of stone you need your partitions made out of. Or you’ll be able to specify that each one
buildingplan-managed tables should be of Masterful high quality. The present filter
settings are saved with deliberate buildings when the #construct blueprint is run.
This implies you’ll be able to set the filters the best way you need for one blueprint, run the
blueprint, after which freely change them once more for the subsequent blueprint, even when the
first set of buildings haven’t been constructed but.

Word that buildings are nonetheless constructed instantly if you have already got the
supplies. Nevertheless, with buildingplan you now have the liberty to use
#construct blueprints earlier than you manufacture the assets. The development
jobs will probably be fulfilled at any time when the supplies turn out to be out there.

Since it may be tough to determine precisely what supply supplies you want
for a #construct blueprint, quickfort provides the orders command. It
enqueues supervisor orders for every part that the buildings in a #construct
blueprint require. See the subsequent part for extra particulars on this.

Alternately, if you already know you solely want a couple of sorts of objects, the workflow
plugin could be configured to construct these objects repeatedly for so long as they
are wanted.

If the buildingplan plugin is just not enabled, run quickfort orders first and
be sure all supervisor orders are fulfilled earlier than making use of a #construct
blueprint. In any other case you’re going to get job cancellation spam when the buildings can’t
be constructed with out there supplies.

Producing supervisor orders

Quickfort can generate supervisor orders to ensure you have the correct objects in
inventory for a #construct blueprint.

Many objects could be manufactured from totally different supply supplies. Orders will
at all times select rock when it might, then wooden, then fabric, then iron. You may at all times
take away orders that don’t make sense to your fort and manually enqueue an analogous
order extra to your liking. For instance, if you need silk ropes as a substitute of material
ropes, make a brand new supervisor order for an applicable amount of silk ropes, and
then take away the generated fabric rope order.

Something that requires generic constructing supplies (workshops, constructions,
and so on.) will lead to an order for a rock block. One “Make rock blocks” job
produces 4 blocks per boulder, so the variety of jobs ordered would be the
variety of blocks you want divided by 4 (rounded up). You would possibly find yourself with a
few additional blocks, however not too many.

If you need your constructions to be in a constant colour, remember to select a
rock sort for your entire ‘Make rock blocks’ orders by deciding on the order and
hitting d. You would possibly wish to set the rock sort for different non-block orders
to one thing totally different if you happen to worry working out of the kind of rock that you really want
to make use of for blocks. You must also set the buildingplan materials filter for
development constructing varieties to that sort of rock as properly so different random blocks
you might need mendacity round aren’t used.

Further Supervisor Orders

In #construct blueprints, there are a couple of constructing varieties that can generate
additional supervisor orders for associated supplies:

  • Observe stops will generate an order for a minecart
  • Traction benches will generate orders for a desk, mechanism, and cord
  • Levers will generate an order for an additional two mechanisms for connecting the
    lever to a goal
  • Cage traps will generate an order for a cage

Stockpiles in #place blueprints that specify wheelbarrow or container
will generate orders for the suitable
variety of bins, pots, or wheelbarrows.

Ideas and tips

  • Throughout blueprint utility, particularly question blueprints, don’t click on the
    mouse on the DF window or sort any keys. They’ll change the state of the
    recreation whereas the blueprint is being utilized, leading to unusual errors.
  • After digging out an space, it’s possible you’ll want to clean and/or engrave the realm
    earlier than beginning the construct part, as dwarves could also be unable to entry partitions or
    flooring which are behind/beneath constructed objects.
  • If you’re designating multiple degree for digging at a time, you’ll be able to
    make your miners extra environment friendly by utilizing marker mode on all ranges however one.
    This prevents your miners from digging out a couple of tiles on one degree, then
    working down/up the steps to do a couple of tiles on an adjoining degree. With solely
    one degree “live” and all different ranges in marker mode, your miners can
    think about one degree at a time. You simply have to recollect to “unmark” a
    new degree when your miners are completed with their present one.
  • As of DF 0.34.x, it’s not potential to construct doorways (d) on the
    identical time that you just construct adjoining partitions (Cw). Doorways should now be
    constructed after adjoining partitions are constructed. This doesn’t have an effect on the extra
    widespread case the place partitions exist as a side-effect of getting dug-out a room in a



Caveats and limitations

  • When you use the


    alias in your


    -mode blueprints, bear in mind
    that there is no such thing as a strategy to differentiate jugs from different sorts of instruments within the
    recreation. Subsequently,


    stockpiles can even take nest containers and different
    instruments. The one workaround is to not produce other instruments mendacity round in your

  • Likewise for the


    alias. The sport doesn’t differentiate between
    empty and full baggage, so that you’ll get baggage of gypsum energy and sand in your baggage
    stockpile except you keep away from accumulating sand and are cautious to assign all of your
    gypsum to your hospital.

  • Weapon traps and upright spear/spike traps can at present solely be constructed with a
    single weapon.
  • Stress plates could be constructed, however they can’t be usefully configured but.
  • Constructing devices is just not but supported.
  • DFHack Quickfort is comparatively new, and there are sure to be bugs! Please
    report them on the DFHack subject tracker to allow them to be addressed.

Dreamfort case research: a sensible information to superior blueprint design

Whereas syntax definitions and toy examples will definitely get you began with
your blueprints, it is probably not clear how all of the quickfort options match collectively
or what the perfect practices are, particularly for giant and complicated blueprint units.
This part walks by the “Dreamfort” blueprints discovered within the DFHack
blueprint library, highlighting design decisions and showcasing sensible
methods that may allow you to create higher blueprints. Word that this isn’t a
information for find out how to design the perfect forts (there’s loads about that on the
). That is primarily an prolonged suggestions and tips
part targeted on find out how to make usable and helpful quickfort blueprints that can
prevent time and vitality.

The Dreamfort blueprints we’ll be discussing can be found within the library as
one giant .csv file
or on-line as
particular person spreadsheets. Both the .csv file or the exported spreadsheet .xlsx
information could be learn and utilized by quickfort, however for us people, the web
spreadsheets are a lot simpler to work with. Every spreadsheet has a “Notes” sheet
with some helpful particulars. Flip by a number of the spreadsheets and browse the
to get oriented. Additionally, if you happen to haven’t constructed Dreamfort earlier than, strive an embark in a
flat space and take it for a spin!

Nearly each quickfort function is used someplace in Dreamfort, so the blueprints
are helpful as sensible examples. You may copy the blueprints and use them as
beginning factors to your personal, or simply check with them while you create one thing

On this case research, we’ll begin by discussing the excessive degree group of the
Dreamfort blueprint set, utilizing the “surface” blueprints for example. Then
we’ll stroll by the blueprints for every of the remaining fort ranges in flip,
calling out function utilization examples and explaining the elements which may not be
apparent simply from them.

The floor degree: find out how to handle complexity

For smaller blueprints, packaging and value should not actually that necessary –
simply write it, run it, and also you’re completed. Nevertheless, as your blueprints turn out to be
bigger and extra detailed, there are some greatest practices that may allow you to deal
with the added complexity. Dreamfort’s floor degree is many steps lengthy since
there are bushes to be cleared, holes to be dug, flooring to be laid, and
furnishings to be constructed, and every step requires the earlier step to be fully
completed earlier than it might start. Subsequently, lots of thought went into minimizing
the toil related to making use of so many blueprints.


Use meta blueprints to script blueprint sequences and scale back the variety of
quickfort instructions it’s a must to run.

The only simplest strategy to make your blueprint units simpler to make use of is to
group them with meta blueprints. For the Dreamfort set of
blueprints, every logical “step” typically takes multiple blueprint. For
instance, with #meta blueprints, organising pastures with a #zone
blueprint, inserting beginning stockpiles with a #place blueprint, constructing
beginning workshops with a #construct blueprint, and configuring the stockpiles
with a #question blueprint can all be completed with a single command. Bundling
blueprints with #meta blueprints decreased the variety of steps in Dreamfort
from 61 to 23, and it additionally made it a lot clearer to see which blueprints could be
utilized directly with out unpausing the sport. Try dreamfort_surface’s “meta
sheet to see how a lot meta blueprints can simplify your life.

You may outline as many blueprints as you need on one
sheet, however multi-blueprint sheets are particularly helpful when writing meta
blueprints. It’s like having a hen’s eye view of your complete plan in a single sheet.


Maintain the blueprint checklist uncluttered by utilizing hidden() markers.

If a blueprint is bundled right into a meta blueprint, it doesn’t want to look in
the quickfort checklist output because you received’t be working it straight. Add a
hidden() marker to these blueprints to maintain the checklist
output tidy. You may nonetheless entry hidden blueprints with quickfort checklist
if you should – for instance to reapply {a partially} accomplished
#construct blueprint – however now they received’t muddle up the traditional blueprint checklist.


Identify your blueprints with a standard prefix so you’ll find them simply.

This goes for each the file title and the modeline label().
Looking and filtering is carried out for each the
quickfort checklist command and the quickfort interactive dialog. When you give
associated blueprints a standard prefix, it makes it straightforward to set the filters to
show simply the blueprints that you just’re all for. When you have lots of
blueprints, this will prevent lots of time. Dreamfort, after all, makes use of the
“dreamfort” prefix for the information and sequence names for the labels, like
“surface1”, “surface2”, “farming1”, and so on. So if I’m in the course of making use of the
floor blueprints, I’d set the filter to dreamfort floor to only show
the related blueprints.


Add descriptive feedback that remind you what the blueprint accommodates.

When you’ve been away from Dwarf Fortress for some time, it’s straightforward to neglect what
your blueprints truly do. Make use of modeline feedback so your descriptions are seen within the blueprint checklist.
When you use meta blueprints, all of your feedback could be conveniently edited on one
sheet, like in floor’s meta sheet.


Use message() markers to remind your self what to do subsequent.

Messages are displayed after a blueprint is utilized. Good
issues to incorporate in messages are:

  • The title of the subsequent blueprint to use and when to run it
  • Whether or not



    needs to be run for an upcoming step

  • Any actions that it’s a must to carry out manually after working the blueprint,
    like assigning minecarts to hauling routes or pasturing animals after creating

These items are simply too straightforward to neglect. Including a message() can prevent
from time-wasting errors. Word that message() markers can nonetheless seem on
the hidden() blueprints, they usually’ll nonetheless get proven when the blueprint is
run through a #meta blueprint. For an instance of this, take a look at the zones

the place the pastures are outlined.

The farming degree: enjoyable with stockpiles

It’s normally handy to retailer intently related blueprints in the identical
spreadsheet. The farming degree may be very intently tied to the floor as a result of the
miasma vents need to completely line up with the place they’re wanted. Nevertheless,
floor is a separate z-level and, extra importantly, already has many many
blueprints, so farming is break up right into a separate file.


Automate stockpile chains when you’ll be able to, and write message() reminders when
you’ll be able to’t.

The farming degree begins doing fascinating issues with #question blueprints and
stockpiles. Word the cautious customization of the meals stockpiles and the
stockpile chains arrange with the give* aliases. That is so when a number of
stockpiles can maintain the identical merchandise, the most important can maintain the smaller ones stuffed.
For instance the give2up alias funnels seeds from the seeds feeder pile to
the container-enabled seed storage pile. When you have a number of stockpiles holding
the identical sort on totally different z-levels, although, this may be difficult to arrange with a
blueprint. Right here, the jugs and pots stockpiles should be manually linked to the
quantum stockpile on the business degree, since we are able to’t know beforehand what number of
z-levels away that’s. Word how we name that out within the #question blueprint’s


Use aliases to arrange hauling routes and quantum stockpiles.

Hauling routes are notoriously fiddly to arrange, however they are often automated with
blueprints. Try the Southern space of the #place and #question
blueprints for a way the quantum refuse dump is configured with easy aliases
from the alias library.

The business degree: when to not use aliases

The business degree is densely packed and has extra difficult examples of
stockpile configurations and quantum dumps. Nevertheless, what I’d wish to name out
first are the important thing sequences that aren’t in aliases.


Don’t use aliases for ad-hoc cursor actions.

It might be tempting to place all question blueprint key sequences into aliases to make
them simpler to edit, maintain them multi function place, and make them reusable, however
some key sequences simply aren’t very worthwhile as aliases.

the Japanese (items) and Northern (stone and gems) quantum stockpiles – cells
I19 and R10. They offer to the jeweler’s workshop to forestall the jeweler from
utilizing the gems held in reserve for unusual moods. The keys should not aliased since
they’re depending on the relative positions of the tiles the place they’re
interpreted, which is best to see within the blueprint itself. Additionally, if you happen to transfer
the workshop, it’s simpler to repair the stockpile hyperlink proper there within the blueprint
as a substitute of modifying a separate alias definition.

There are additionally good examples within the #question blueprint for find out how to use the
allow and forbid stockpile aliases.


Put all configuration that should be utilized in a specific order within the
identical spreadsheet cell.

Many of the baseline aliases distributed with DFHack fall into one among three

  1. Make a stockpile settle for solely a specific merchandise sort in a class
  2. Allow an merchandise sort, however don’t in any other case change the stockpile configuration
  3. Forbid an merchandise sort, however don’t in any other case change the stockpile configuration

When you have a stockpile that covers a number of tiles, it may appear pure to place
one alias per spreadsheet cell. The aliases nonetheless all get utilized to the
stockpile, and with just one alias per cell, you’ll be able to simply sort the alias title
and keep away from having to make use of the messier-looking {aliasname} syntax:

#place Declare a meals stockpile


#question Incorrectly configure a meals stockpile to simply accept tallow and dye

tallow permitdye

Nevertheless, in quickfort there are not any ensures about which cell will probably be
processed first. Within the instance above, we clearly intend for the meals
stockpile to have tallow completely permitted, then so as to add dye. It may occur
that the 2 aliases are utilized within the reverse order, although, and we’d find yourself
with dye being permitted, then every part (together with dye) being forbidden, and,
lastly, tallow being enabled. To ensure you at all times get what you need, write
order-sensitive aliases on the identical line:

#place Declare a meals stockpile


#question Correctly configure a meals stockpile to simply accept tallow and dye


You may see a extra advanced instance of this with the meltables stockpiles in
the decrease proper nook
of the business degree.

The companies degree: dealing with multi-level dig blueprints

Companies is a multi-level blueprint that features a properly cistern beneath the
major degree. Undesirable ramps attributable to channeling are an annoyance, however we are able to
keep away from getting a ramp on the backside of the cistern with cautious use of dig


Use dig priorities to manage ramp creation.

We will guarantee
the underside degree is carved out earlier than the layer above is channelled by assigning
the channel designations decrease priorities (the h5s within the third layer –
scroll down).

An alternate is to have a follow-up blueprint that removes any undesired
ramps. We did this on the
ranges with the miasma vents since it will be too difficult to synchronize
the digging between the 2 layers.

The guildhall degree: avoiding smoothing points

The objective of this degree is to offer rooms for places like guildhalls,
libraries, and temples. The worth of those rooms is essential, so we’re
more likely to clean and engrave every part. To clean or engrave a wall tile, a
dwarf must be adjoining to it, and since some furnishings, like statues, block
dwarves from getting into a tile, the place you set them impacts what you’ll be able to entry.


Don’t put statues in corners except you wish to clean every part first.

Within the guildhall degree, the statues are positioned in order to not block any wall
corners. This offers the participant freedom for selecting when to clean. If a statue
blocks a nook, or if a line of statues blocks a wall section, it forces the
participant to clean earlier than constructing the statues. In any other case they need to mess with
briefly eradicating statues to clean the partitions behind them.

The beds ranges: multi degree meta blueprints

The suites and flats blueprints are simple. The one fancy bit
right here is the meta blueprint, which brings us to our last tip:


Use meta blueprints to put out a number of adjoining ranges.

We couldn’t use this method for the whole fortress since there’s usually an
aquifer between the farming and business ranges, and we are able to’t know beforehand
what number of z-levels we have to skip. Right here, although, we are able to a minimum of present the
helpful shortcut of designating all house ranges directly. See the
blueprint for the way it applies the flats on six z-levels utilizing #>
between house blueprint references.

That’s it! I hope this information was helpful to you. Please go away suggestions on the
boards if in case you have concepts on how this information (or the dreamfort blueprints) could be

See also  Build a Custom Photo Widget for Your Desktop with Node.js

Leave a Reply

Your email address will not be published.