changes but also a few content differences, e.g. removing information on tricky.des and adding information on some new features (I think, it's hard to tell what was already in the older version with all this indenting going on).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2402 c06c8d41-db1a-0410-9941-cceddc491573
MXOCLQAUGWLOS7AOTYZ46JZDMRL4EVRK5YN4JJUQ76GLKBOBHEVAC
NX4WPCAQULORFW7SBQ4VBGX6RLE6YSU5LQW2VPITYW6T3MTR4YRQC
H4YY3KUQTAY7KRIXE5DI7B4C6GT4UGBM6R6EJLCQJFFKV7WG3MQAC
DHK4J2ZAMNKLRDX3V3LPBV2REQXY5BV6LX6TLX6ZWHWGPRXWHNZQC
27T43MPEOVJQNIIRB2XJ2GRXTJY5P7IL56MWFKYTS35TQVQN23OAC
ZFHVWIDJGBUGJP5XKKI26HOVFQCT5ALKYLFZANNDIJXRKIXAUMKQC
TLA5UN6LZPXGKERI27EFY4HKIIU3VU5Y7ZU54WXL6ANBUV2VOTMQC
APGCKU4AFOV7Z7XIEO5A27H4IFUGDU227I3Z7OIRROYSLOFFBJ5AC
R6XS2HO5QX2FJUGL5UQQRNETKCMYWTUFPHPPS5SYWK3OQA4UDUQQC
H3552BCIAVBLKAYKE4DHFLBLFW5RGRMYBMRRYHYEB5IPIJRUVU5QC
ILN2K6ASDZSMEHOPJ22IZLZJUO6DDGZTKAKXM3YXG6JZZHJNLX4AC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
K6ELQ4HEZYDROC7CJFLPJS64AAJQ4G6RVLL4GBRUG6FJMKSBDDIQC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC
ZANSES4OX4GVTHFIVORYRZFZOUIPV2CL2ABUVWFZB7TMKOPKQFSQC
2ZZD6EYMSPVCXZTICL4VGYGGQRRWDLZ24KBCDBVIYC54OZ4C6GGAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
AFE345BJ7IX2YYYX3I5I6RYLXNWJCFE4WMH6F5JMIR6X7WUP75CAC
WE3JT43OR4L6675GINGU4B3YDBMURJZHDDYY3VLHUJEBAKH2HYEAC
}{ - Stone stairs - You must be able to reach these from each other. The
{ upstair is also the stair on which the player will enter the
}{ - Stone stairs - You must be able to reach these from each other. The
{ upstair is also the stair on which the player will enter the
>< - extra rock stairs - you can leave the level by these but will rarely be
placed on them from another level
>< - escape hatches - you can leave the level by these but will usually
not land on stairs/hatches
F - Usually a Granite Statue, but may be Orange or Silver or Ice (1 in 100)
G - Granite statue (does nothing) - you can see through but not walk through
H - orange crystal statue (attacks mind)
S - Silver statue (summons demons). Avoid using (rare).
F - Usually a Granite Statue, but may be Orange or Silver or Ice (1 in 100)
G - Granite statue (does nothing) - you can see through but not walk through.
Also, sight-based effects like smiting work past granite statues, as does
apportation.
ORIENT: (float |encompass | north | northwest | ... | southeast)
Some kind of ORIENT: line is mandatory for vaults; skipping
ORIENT: makes your map a minivault. As a rule of thumb, if
you're writing a small random map, skip the ORIENT: line and
make it a minivault. For special levels and (branch) entry
vaults, you do need an ORIENT: line.
* "float": The dungeon builder puts your vault wherever it wants to.
* "some_direction": The vault lies along that side of the map:
xxxxxxxxxx xxxxxxxxxxxxx
xORIENT:Nx xORIENT:NW|..
x.VAULT..x x.VAULT...|..
x--------x x---------|..
xrest....x xrest........
x...of...x x.....of.....
x...levelx x.......level
...which brings us to padding. With any some_direction orientation,
you need 6 layers of x-padding along any level-edge that the vault
borders. For instance, if your map is ORIENT: north, you must have a
6 deep border of rock wall (or any other kind of wall) along the
northern, eastern, and western edges of the map.
* "encompass": the vault completely occupies the entire level.
Padding is needed on all 4 sides.
ORIENT: (float |encompass | north | northwest | ... | southeast)
Some kind of ORIENT: line is mandatory for vaults; skipping
ORIENT: makes your map a minivault. As a rule of thumb, if
you're writing a small random map, skip the ORIENT: line and
make it a minivault. For special levels and (branch) entry
vaults, you do need an ORIENT: line.
* "float": The dungeon builder puts your vault wherever it wants to.
* "some_direction": The vault lies along that side of the map:
xxxxxxxxxx xxxxxxxxxxxxx
xORIENT:Nx xORIENT:NW|..
x.VAULT..x x.VAULT...|..
x--------x x---------|..
xrest....x xrest........
x...of...x x.....of.....
x...levelx x.......level
...which brings us to padding. With any some_direction orientation,
you need 6 layers of x-padding along any level-edge that the vault
borders. For instance, if your map is ORIENT: north, you must have a
6 deep border of rock wall (or any other kind of wall) along the
northern, eastern, and western edges of the map.
* "encompass": the vault completely occupies the entire level.
Padding is needed on all 4 sides.
ORIENT: float vaults need no padding and give a lot of
flexibility to the dungeon generator; float should generally
be preferred to other ORIENT: settings for new vaults.
DEPTH: For random vaults, branch entry vaults, and minivaults, this
specifies the range of levels where the vault may be placed
in the dungeon. E.g.
DEPTH: 7-20
DEPTH: does not force a map to be placed in a particular place; it
applies only when the dungeon builder is looking for a random vault
or minivault, so you can control at what depths your vault gets
placed.
A simple DEPTH: declaration that does not specify a branch
applies to all branches. A map declared with depth 7-20 could
be used in the Lair, for instance. (Lair:1 will be treated as
a depth of 12 if the Lair entrance is on D:11.)
DEPTH: does not force a map to be placed in a particular place; it
applies only when the dungeon builder is looking for a random vault
or minivault, so you can control at what depths your vault gets
placed.
A simple DEPTH: declaration that does not specify a branch
applies to all branches. A map declared with depth 7-20 could
be used in the Lair, for instance. (Lair:1 will be treated as
a depth of 12 if the Lair entrance is on D:11.)
(Anywhere between levels 7-9 of the Lair, inclusive.)
(Anywhere in the dungeon between depths 7-20, but never in the Orcish
Mines.)
Maps that do not specify a DEPTH: attribute will inherit their depth
constraints from the closest preceding default-depth: line. If there
is no preceding default-depth directive in the .des file, the map will
have no DEPTH: constraint. Note that maps without a DEPTH: constraint
cannot be selected as random vaults or minivaults.
DEPTH: Lair:*
CHANCE: (number with 10 being default)
For entry vaults and any other vaults randomly picked from among
a set, this type of line affects the likelihood of the given vault
being picked in a given game. The default CHANCE: is 10. The
likelihood of a vault getting picked is:
[vault's CHANCE: / sum of all CHANCE:s of vaults of that type]
(Anywhere in the Lair. Can also be expressed as "DEPTH: Lair".)
PLACE: Used to specify certain special levels. Existing special levels are:
Temple, Hell, Dis:7, Geh:7, Coc:7, Tar:7, Hive:4, Vault:8, Snake:5,
Elf:7, Slime:6, Blade, Zot:5, Tomb:1, Tomb:2, Tomb:3, Swamp:5.
Maps that do not specify a DEPTH: attribute will inherit their depth
constraints from the closest preceding default-depth: line. If there
is no preceding default-depth directive in the .des file, the map will
have no DEPTH: constraint. Note that maps without a DEPTH: constraint
cannot be selected as random vaults or minivaults.
CHANCE: (number with 10 being default)
For entry vaults and any other vaults randomly picked from among
a set, this type of line affects the likelihood of the given vault
being picked in a given game. The default CHANCE: is 10. The
likelihood of a vault getting picked is:
[vault's CHANCE: / sum of all CHANCE:s of vaults of that type]
PLACE can also be used to specify arbitrary places, like D:3, which
will force the map (or one of the maps with PLACE: D:3) to be picked
when D:3 is generated.
PLACE: Used to specify certain special levels. Existing special levels are:
Temple, Hell, Dis:7, Geh:7, Coc:7, Tar:7, Hive:4, Vault:8, Snake:5,
Elf:7, Slime:6, Blade, Zot:5, Tomb:1, Tomb:2, Tomb:3, Swamp:5.
PLACE cannot be used to specify places in the Abyss, Pandemonium,
or Labyrinths.
PLACE can be used with random vaults and minivaults for testing them.
TAGS: allow_dup, generate_awake, mini_float, no_item_gen, no_monster_gen,
no_pool_fixup, orc_entry, uniq_BAR
Tags go an a TAGS: line and are space-separated. Valid tags are:
* "allow_dup": Vaults are normally used only once per game. If you
have a vault that can be used more than once, use
allow_dup to tell the dungeon builder that the vault
can be reused.
* "dummy": this tag indicates that the vault is a stub; if the dungeon
builder picks a dummy vault, it pretends no vault was
selected. Dummies are used to reduce the probability
of other vaults at the same depth / place.
* "entry": this tag MUST be there for a vault to be pickable as
an entry vault.
* "generate_awake": Monsters placed (using MONS, KMONS) in this
vault will be generated awake.
* "no_item_gen": Prevents random item generation in the vault.
Items explicitly placed by the vault are not affected.
* "mini_float": applicable only to minivaults, requests that
the dungeon builder pick random exits from the minivault and
connect it to the rest of the level, similar to the exit
behaviour for floating vaults.
* "no_monster_gen": Prevents random monster generation at the time
of the vault's creation. Highly advised for entry vaults with
a player-hostile geography, MUST-HAVE for those with water/lava.
Can be applied only to particular symbols with KMASK.
* "no_pool_fixup": prevents water squares next to land from being
randomly converted from deep water (the default) to shallow.
* "branch_entry" eg. "orc_entry", "lair_entry" etc.
If chosen, these maps will contain the stairs for that
branch. Use "O" to place the stairs. If a branch has very
few entries, a dummy entry is advisable to make sure the
player doesn't get bored of the same few entries recycled
ad nauseam.
* "mnoleg" or the name of some other pandemonium lord. This makes
the map eligible for said pan lord's lair.
* "uniq_BAR": (uniq_ with any suffix) specifies that only one vault
with this tag can be used in a game.
Tags go an a TAGS: line and are space-separated. Valid tags are:
* "allow_dup": Vaults are normally used only once per game. If you
have a vault that can be used more than once, use allow_dup to tell
the dungeon builder that the vault can be reused.
* "dummy": this tag indicates that the vault is a stub; if the dungeon
builder picks a dummy vault, it pretends no vault was selected.
Dummies are used to reduce the probability of other vaults at the
same depth / place.
* "entry": this tag MUST be there for a vault to be pickable as an
entry vault.
* "generate_awake": Monsters placed (using MONS, KMONS) in this vault
will be generated awake.
* "no_item_gen": Prevents random item generation in the vault.
Items explicitly placed by the vault are not affected.
* "mini_float": applicable only to minivaults, requests that
the dungeon builder pick random exits from the minivault and
connect it to the rest of the level, similar to the exit behaviour
for floating vaults.
* "no_monster_gen": Prevents random monster generation at the time of
the vault's creation. Highly advised for entry vaults with a
player-hostile geography, MUST-HAVE for those with water/lava.
Can be applied only to particular symbols with KMASK.
* "no_pool_fixup": prevents water squares next to land from being
randomly converted from deep water (the default) to shallow.
* "branch_entry" eg. "orc_entry", "lair_entry" etc.
If chosen, these maps will contain the stairs for that
branch. Use "O" to place the stairs. If a branch has very
few entries, a dummy entry is advisable to make sure the
player doesn't get bored of the same few entries recycled
ad nauseam.
* "mnoleg" or the name of some other pandemonium lord. This makes
the map eligible for said pan lord's lair.
* "uniq_BAR": (uniq_ with any suffix) specifies that only one of
the vaults with this tag can be used in a game.
FLAGS: no_rotate, no_hmirror, no_vmirror
Flags go on a FLAGS: line and are space-separated. Valid flags are:
* "no_rotate": Normally, the dungeon builder can, at its whim,
rotate your vault. This flag tells it, "hey, don't do that to my
vault!"
* "no_hmirror": Like no_rotate, but for horizontal mirroring.
* "no_vmirror": Like no_rotate, but for vertical mirroring.
FLAGS: no_rotate, no_hmirror, no_vmirror
Flags go on a FLAGS: line and are space-separated. Valid flags are:
* "no_rotate": Normally, the dungeon builder can, at its whim,
rotate your vault. This flag tells it, "hey, don't do that to my
vault!"
* "no_hmirror": Like no_rotate, but for horizontal mirroring.
* "no_vmirror": Like no_rotate, but for vertical mirroring.
LFLAGS: Persistent, changeable per-level flags which affect game
behavior (FLAGS just controls how the vault is placed); should
only be used for vaults with ORIENT encompass or with PLACE.
This causes a level's flags to be set when the level is first
created. These flags can later be altered using Lua markers;
see the slime pit vault in lair.des, and the vaults in hell.des
and elf.des for examples.
LFLAGS: Persistent, changeable per-level flags which affect game
behavior (FLAGS just controls how the vault is placed); should
only be used for vaults with ORIENT encompass or with PLACE.
This causes a level's flags to be set when the level is first
created. These flags can later be altered using Lua markers;
see the slime pit vault in lair.des, and the vaults in hell.des
and elf.des for examples.
Valid flags are: no_tele_control, which prevents the player
from using teleport control; not_mappable, which prevents
the player from remembering where they've been (like in
the Abyss), and no_magic_map, which prevents magic mapping
from working.
Valid flags are: no_tele_control, which prevents the player
from using teleport control; not_mappable, which prevents
the player from remembering where they've been (like in
the Abyss), and no_magic_map, which prevents magic mapping
from working.
BFLAGS: Persistent, changeable per-*branch* flags which affect game
behavior; should only be used for vaults which go on the fist
level of a particular branch. These flags can later be altered
using Lua markers; see the Tomb vaults in vaults.lua for an
example.
BFLAGS: Persistent, changeable per-*branch* flags which affect game
behavior; should only be used for vaults which go on the fist
level of a particular branch. These flags can later be altered
using Lua markers; see the Tomb vaults in vaults.lua for an
example.
Valid flags are: no_tele_control, which prevents the player
from using teleport control; not_mappable, which prevents
the player from remembering where they've been (like in
the Abyss), and no_magic_map, which prevents magic mapping
from working.
Valid flags are: no_tele_control, which prevents the player
from using teleport control; not_mappable, which prevents
the player from remembering where they've been (like in
the Abyss), and no_magic_map, which prevents magic mapping
from working.
ITEM: (list of items, separated by comma)
These are used to help place specified items at specific places
within a vault. They create an array with up to 8 positions. What's
in the first position in the array will be used when the dungeon
builder sees a "d" in the vault definition, the second will be used
for "e"s, etc. Positions are comma-separated; several ITEM: lines
are possible as well. The following defines letters 'd' - 'g':
ITEM: stone, ring mail, meat ration, ring of hunger
Positions can contain multiple possibilities, one of which the
builder will choose randomly. Separate such multiple possibilities
using a slash. Note that "nothing" (without the quotes) is a valid
possibility. The random choice is done for each individual occurence
of the letter. You can also give possibilities a "weight," which
affects their chance of being picked. The default weight is 10. You
can abbreviate "weight:30" by "w:30". The chance to pick a
possibility is
[possibility's weight: / sum of all weight:s in that array position]
For example, the following line makes letter 'd' into a bread ration
with 50% chance, or apple or orange with 25% chance each:
ITEM: bread ration / w:5 apple / w:5 orange
ITEM: (list of items, separated by comma)
These are used to help place specified items at specific places
within a vault. They create an array with up to 8 positions. What's
in the first position in the array will be used when the dungeon
builder sees a "d" in the vault definition, the second will be used
for "e"s, etc. Positions are comma-separated; several ITEM: lines
are possible as well. The following defines letters 'd' - 'g':
ITEM: stone, ring mail, meat ration, ring of hunger
Positions can contain multiple possibilities, one of which the
builder will choose randomly. Separate such multiple possibilities
using a slash. Note that "nothing" (without the quotes) is a valid
possibility. The random choice is done for each individual occurence
of the letter. You can also give possibilities a "weight," which
affects their chance of being picked. The default weight is 10. You
can abbreviate "weight:30" by "w:30". The chance to pick a
possibility is
[possibility's weight: / sum of all weight:s in that array position]
For example, the following line makes letter 'd' into a bread ration
with 50% chance, or apple or orange with 25% chance each:
ITEM: bread ration / w:5 apple / w:5 orange
Modifiers:
* "q:N" sets the item quantity to N (if N > 0). Does nothing
if the item is not stackable.
* "good_item" makes the builder try to make the item a good one.
* "any" by itself gives random choice; you can combine "any" with
"good_item."
* "any book", "any misc" etc. gives a random item of that class.
Valid item class names are: gold, weapon, missile, armour,
wand, food, scroll, jewelry, potion, book, staff, orb,
misc, carrion. All of these are usable in map definitions,
apart from "orb" and "carrion".
Limitations: You can't specify curse status nor item race,
nor can you give specific egos, nor can give fixedarts. You
also can't lay down corpses, skeletons, or chunks.
MONS: (list of monsters)
These are used to help place specific monsters at specific places
in a vault. They create an array with up to 7 positions. What's in
the first position in the array will be used when the dungeon
builder sees a "1" in the vault definition, the second for "2,"
etc. Note that if, for example, you place a 3 on the map, but your
MONS: line has no third position, the 3 will be filled with
RANDOM_MONSTER.
You can use weights as for ITEM: lines.
Individual monsters may be prefixed with the "generate_awake"
(without the quotes). Use this sparingly:
MONS: generate_awake giant beetle
Monsters can also be given colours that override their default
colour. Use this *very* sparingly:
MONS: col:darkgrey fungus
Modifiers:
* "q:N" sets the item quantity to N (if N > 0). Does nothing
if the item is not stackable.
* "good_item" makes the builder try to make the item a good one.
* "any" by itself gives random choice; you can combine "any" with
"good_item."
* "any book", "any misc" etc. gives a random item of that class.
Valid item class names are: gold, weapon, missile, armour,
wand, food, scroll, jewelry, potion, book, staff, orb,
misc, carrion. All of these are usable in map definitions,
apart from "orb" and "carrion".
Note that 8, 9, 0 also place monsters (see the table).
Limitations: You can't specify curse status nor item race,
nor can you give specific egos, nor can give fixedarts. You
also can't lay down corpses, skeletons, or chunks.
MONS: (list of monsters)
These are used to help place specific monsters at specific places
in a vault. They create an array with up to 7 positions. What's in
the first position in the array will be used when the dungeon
builder sees a "1" in the vault definition, the second for "2,"
etc. Note that if, for example, you place a 3 on the map, but your
MONS: line has no third position, the 3 will be filled with
RANDOM_MONSTER.
You can use weights as for ITEM: lines.
COLOUR: . = green / blue:5 / red / none
COLOUR: allows you to attach explicit colours to any feature.
Explicit colours will override the default colour for that
feature. The example shown above colours all . (floor) in the
map green, blue, red, or unchanged (use the default colour).
You can use : to specify that all glyphs get the same colour:
COLOUR: x : red / blue
will colour all rock walls in the map red, or all rock
walls blue.
Individual monsters may be prefixed with the "generate_awake"
(without the quotes). Use this sparingly:
MONS: generate_awake giant beetle
COLOUR: should be used very sparingly, and only for features
where it won't cause confusion (i.e.: never re-colour features
like lava!)
Monsters can also be given colours that override their default
colour. Use this *very* sparingly:
MONS: col:darkgrey fungus
Note that 8, 9, 0 also place monsters (see the table).
SHUFFLE: def, 12/3?
This allows you to randomly permute glyphs on the map. There are
two ways:
COLOUR: . = green / blue:5 / red / none
COLOUR: allows you to attach explicit colours to any feature.
Explicit colours will override the default colour for that
feature. The example shown above colours all . (floor) in the
map green, blue, red, or unchanged (use the default colour).
SHUFFLE: 123w (i.e. list of glyphs, NOT slash-separated)
could, for example, swap all occurences of "1" with "2", as well as
swapping all "3" with "w" (or any other of the 24 possibilities).
You can use : to specify that all glyphs get the same colour:
COLOUR: x : red / blue
will colour all rock walls in the map red, or all rock
walls blue.
SHUFFLE: 12/3w (i.e. list of slash-separated blocks of same size)
will either do nothing or swap all "1" with "3" and then also swap
"2" with "w" everywhere.
COLOUR: should be used very sparingly, and only for features
where it won't cause confusion (i.e.: never re-colour features
like lava!)
Several SHUFFLE: lines can be used, and mixed with SUBST:, and the
shuffles and substitutions will be applied in order. You can also
put multiple SHUFFLEs on one line, comma-separated. Shuffles cannot
use , or /. All spaces are stripped before shuffling.
SHUFFLE: def, 12/3?
This allows you to randomly permute glyphs on the map. There are
two ways:
SUBST: ?=xc, !:bv, 1=2 1:100
The SUBST: directive allows you to specify a placeholder symbol
that is replaced with a random glyph from a set. For instance:
SHUFFLE: 123w (i.e. list of glyphs, NOT slash-separated)
could, for example, swap all occurences of "1" with "2", as well as
swapping all "3" with "w" (or any other of the 24 possibilities).
SUBST: ? = TUV
replaces occurrences of ? with one of TUV. Since whitespaces are
irrelevant, this is the same as
SUBST: ? = T U V
SHUFFLE: 12/3w (i.e. list of slash-separated blocks of same size)
will either do nothing or swap all "1" with "3" and then also swap
"2" with "w" everywhere.
SUBST: ? = T:20 U V
makes T twice as likely to be used as U or V (the default weight
is 10). Note that there has to be at least one space before and
after T:20 and that whitespace in T:20 is not permitted.
Several SHUFFLE: lines can be used, and mixed with SUBST:, and the
shuffles and substitutions will be applied in order. You can also
put multiple SHUFFLEs on one line, comma-separated. Shuffles cannot
use , or /. All spaces are stripped before shuffling.
SUBST: ?=xc, !:bv, 1=2 1:100
The SUBST: directive allows you to specify a placeholder symbol
that is replaced with a random glyph from a set. For instance:
SUBST: ? : TUV
replaces occurrences of ? with one of TUV, and guarantees that all
occurrences of ? will get the same replacement symbol.
SUBST: ? = TUV
replaces occurrences of ? with one of TUV. Since whitespaces are
irrelevant, this is the same as
SUBST: ? = T U V
The placeholder and replacement symbols can be any non-space,
printable character, including : and =, apart from commas. For
example, the following is valid:
SUBST: = = +=:123def"
SUBST: ? = T:20 U V
makes T twice as likely to be used as U or V (the default weight
is 10). Note that there has to be at least one space before and
after T:20 and that whitespace in T:20 is not permitted.
SUBST: lines can safely replace symbols with themselves, as in:
SUBST: w = wW
SUBST: ? : TUV
replaces occurrences of ? with one of TUV, and guarantees that all
occurrences of ? will get the same replacement symbol.
Multiple SUBST: lines can be used, and mixed with SHUFFLE:, and
will be applied in order. Multiple substitutions can be performed
on one line, using commas.
SUBST: lines can safely replace symbols with themselves, as in:
SUBST: w = wW
NSUBST is similar to SUBST, replacing placeholders with
replacement values. Unlike SUBST, however, it allows you to
replace different instances of the same placeholder with
completely different substitutions. For instance:
NSUBST is similar to SUBST, replacing placeholders with
replacement values. Unlike SUBST, however, it allows you to
replace different instances of the same placeholder with
completely different substitutions. For instance:
You can use complex SUBST specifications:
You use any number of NSUBST specifiers:
Each specifier is preceded by the number of symbols to apply
it to, followed by : or = (: to use one substitution for all
occurrences, = to randomly pick for each occurrence). If you
omit the initial N: or N=, then 1= is assumed, except for the
last spec where *= is assumed.
? = wW / l / A / 1234
KFEAT: Z = C / needle trap / antique armour shop / altar_zin
The KFEAT: directive allows you to specify a placeholder symbol
that is replaced with another symbol, named feature, trap, or
shop. For example, the line above will replace occurrences of Z
with C (random altar), a needle trap, an antique armour shop, or
an altar of Zin. Different instances of Z may receive different
replacements. To force a single replacement for all Z, use:
Each specifier is preceded by the number of symbols to apply
it to, followed by : or = (: to use one substitution for all
occurrences, = to randomly pick for each occurrence). If you
omit the initial N: or N=, then 1= is assumed, except for the
last spec where *= is assumed.
KFEAT: Z : C / needle trap / antique armour shop
KFEAT: Z = C / needle trap / antique armour shop / altar_zin
The KFEAT: directive allows you to specify a placeholder symbol
that is replaced with another symbol, named feature, trap, or
shop. For example, the line above will replace occurrences of Z
with C (random altar), a needle trap, an antique armour shop, or
an altar of Zin. Different instances of Z may receive different
replacements. To force a single replacement for all Z, use:
You'll notice that 'Z' is the symbol of the Orb of Zot. Kxxx
directives allow you to assign arbitrary definitions to any symbol.
KFEAT features are specified as a feature name (see section I
for a full list of feature names). As another example, you can
place a portal to the Abyss as:
If you want no feature as an option in a KFEAT line, use '.' or
'floor'. If you do not want to specify the type of shop, use
'any shop' or 'random shop'.
KFEAT: A = enter_abyss
The placeholder used by KFEAT can be shared by KITEM and KMONS;
see below. If the placeholder is shared, all defined Kxxxx
operations for the placeholder are performed. Also, all Kxxx
lines accept weights as for MONS or ITEM.
The placeholder used by KFEAT can be shared by KITEM and KMONS;
see below. If the placeholder is shared, all defined Kxxxx
operations for the placeholder are performed. Also, all Kxxx
lines accept weights as for MONS or ITEM.
KMONS: allows you to specify a placeholder symbol that indicates
the position of a monster (or monsters).
Using KMONS: allows you to exceed the 7 slot limit for monsters.
It is also useful if you want to place a monster on a non-floor
square (used in association with a KFEAT:). For example,
KFEAT: Z = W
KMONS: Z = rat
places a rat on a shallow water square for all occurrences of Z.
KMONS: ? = orc priest / w:3 deep elf priest
KMONS: also allows you to specify alternative monsters if the
primary monster you want to place is unavailable (because it
is a unique that was already generated). For instance, if you want
to generate one of Terence, Michael or Erica or a generic human
(whoever is available, in that order, you can use):
KMONS: n = Terence, Michael, Erica, human
Or if you want to pick randomly:
KMONS: n = Terence / Michael / Erica, human
KMONS: allows you to specify a placeholder symbol that indicates
the position of a monster (or monsters).
Using KMONS: allows you to exceed the 7 slot limit for monsters.
It is also useful if you want to place a monster on a non-floor
square (used in association with a KFEAT:). For example,
KFEAT: Z = W
KMONS: Z = rat
places a rat on a shallow water square for all occurrences of Z.
KMASK: Z = no_monster_gen
KMONS: also allows you to specify alternative monsters if the
primary monster you want to place is unavailable (because it
is a unique that was already generated). For instance, if you want
to generate one of Terence, Michael or Erica or a generic human
(whoever is available, in that order, you can use):
KMONS: n = Terence, Michael, Erica, human
Or if you want to pick randomly:
KMONS: n = Terence / Michael / Erica, human
KMASK allows you set or unset various masks for particular
symbols, rather than for the entire vault like if you did it
with TAGS. Valid masks are
KMASK: Z = no_monster_gen
* "no_item_gen": Prevents random item on that symbol. Items
explicitly placed on that symbol aren't affected.
* "no_monster_gen": Prevents random monster generation on that
symbol. MUST-HAVE for those with water/lava symbols in
entry vaults.
* "no_pool_fixup": prevents a water square next to land from being
randomly converted from deep water (the default) to shallow.
* "no_secret_doors": prevents a door from randomly being turned
into a secret door.
* "no_item_gen": Prevents random item on that symbol. Items
explicitly placed on that symbol aren't affected.
* "no_monster_gen": Prevents random monster generation on that
symbol. MUST-HAVE for those with water/lava symbols in
entry vaults.
* "no_pool_fixup": prevents a water square next to land from being
randomly converted from deep water (the default) to shallow.
* "no_secret_doors": prevents a door from randomly being turned
into a secret door.
KMASK: W = no_monster_gen
For example
will prevent monsters from randomly being generated on shallow
water squares. Note that if shuffling and substitutions cause
W to end up as water 10% of the time and floor 90% of the time,
then those floor squares will still have no_monster_gen set, but
that's still a higher degree of control than you get with TAGS.
will prevent monsters from randomly being generated on shallow
water squares. Note that if shuffling and substitutions cause
W to end up as water 10% of the time and floor 90% of the time,
then those floor squares will still have no_monster_gen set, but
that's still a higher degree of control than you get with TAGS.
TAGS: no_monster_gen
KMASK: W = !no_monster_gen
TAGS: no_monster_gen
KMASK: W = !no_monster_gen
KITEM: ? = potion of healing / potion of restore abilities
KITEM: places the specified item at all occurrences of the
placeholder. It can be combined with KFEAT: and KMONS: lines for
the same placeholder.
KITEM: ? = potion of healing / potion of restore abilities
KITEM: places the specified item at all occurrences of the
placeholder. It can be combined with KFEAT: and KMONS: lines for
the same placeholder.
You can use q: to specify quantities:
KITEM: ? = q:100 gold
You can use "gold" or "$" to place gold:
KITEM: ? = nothing / gold
KITEM: ? = nothing / $
KITEM: allows you to place multiple items on the same square:
KITEM: ? = bread ration, potion of water, potion of porridge
KITEM: allows you to place multiple items on the same square:
KITEM: ? = bread ration, potion of water, potion of porridge
A marker ties a square on the map to a game-trigger of some
sort (which depends on the marker and what feature it is on).
A marker ties a square on the map to a game-trigger of some
sort (which depends on the marker and what feature it is on).
The portals to the Hells in the Vestibule of Hell are each
annotated with feature markers like this:
MARKER: D=feat:enter_dis, G=feat:enter_gehenna
When the horn is sounded, the stone arch at D becomes the
portal to Dis, the arch at G becomes the portal to Gehenna,
etc. This behaviour applies only to the Vestibule of Hell.
Timer feature markers set a timer on a particular square;
when time runs out, the feature at that square is changed
(usually to floor). For instance:
This sets a timer for exactly 500 turns, and changes the
feature to deep water at the end of it.
Feature names used in markers must be names matching the
names in the source code. There's a full list of feature
names in section I (Feature names) at the end of this
document.
Feature names used in markers must be names matching the
names in the source code. There's a full list of feature
names in section I (Feature names) at the end of this
document.
instance, if your map is ORIENT: north, you must have a 6 deep border of
rock wall (or any other kind of wall) along the northern, eastern, and
western edges of the map. If you're doing a fullscreen map (encompass),
instance, if your map is ORIENT: north, you must have a 6 deep border of
rock wall (or any other kind of wall) along the northern, eastern, and
western edges of the map. If you're doing a fullscreen map (encompass),
<). The <> stairs can be put anywhere and in any quantities but do not
have to be there. Any of the other stairs which are not present in the
vault will be randomly placed outside it. Also generally try to avoid
<). The <> stairs can be put anywhere and in any quantities but do not
have to be there. Any of the other stairs which are not present in the
vault will be randomly placed outside it. Also generally try to avoid
'fortress' or 'forest' may be enough. For later (or larger) maps, try
to think of distinguishing features your map may have. Being cool can
'fortress' or 'forest' may be enough. For later (or larger) maps, try
to think of distinguishing features your map may have. Being cool can
If the .des file syntax is incorrect, Crawl will tell you on which line of
Larger vaults can be conjured up in wizard mode using the &L command.
You don't need to specify the full name of the vault, a substring which
uniquely determines the vault is enough. You can playtest portal vaults
using the &P wizard command. Branch ends can be conveniently tested with
the &~ command.
If the .des file syntax is incorrect, Crawl will tell you on which line of
Be especially fair when creating entry vaults. If your entry is too
hard, it might get degraded to tricky.des (or just removed). Keep in
mind that your vault will be played very very often, so even small
chances of something stupid happening (like creation of a really nasty
monster) will kick in often enough.
Be especially fair when creating entry vaults. If your entry is too hard,
it might get just trashed. Keep in mind that your vault will be played
very very often, so even small chances of something stupid happening
(like creation of a really nasty monster) will kick in often enough.
levels. They're placed *after* normal map generation, whereas normal
vaults are placed before generating the rest of the level. There's no
levels. They're placed *after* normal map generation, whereas normal
vaults are placed before generating the rest of the level. There's no