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 beplaced on them from another level
>< - escape hatches - you can leave the level by these but will usuallynot 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 throughH - 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 doesapportation.
ORIENT: (float |encompass | north | northwest | ... | southeast)Some kind of ORIENT: line is mandatory for vaults; skippingORIENT: makes your map a minivault. As a rule of thumb, ifyou're writing a small random map, skip the ORIENT: line andmake it a minivault. For special levels and (branch) entryvaults, 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 xxxxxxxxxxxxxxORIENT: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 vaultborders. For instance, if your map is ORIENT: north, you must have a6 deep border of rock wall (or any other kind of wall) along thenorthern, 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; skippingORIENT: makes your map a minivault. As a rule of thumb, ifyou're writing a small random map, skip the ORIENT: line andmake it a minivault. For special levels and (branch) entryvaults, 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 xxxxxxxxxxxxxxORIENT: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 vaultborders. For instance, if your map is ORIENT: north, you must have a6 deep border of rock wall (or any other kind of wall) along thenorthern, 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 offlexibility to the dungeon generator; float should generallybe preferred to other ORIENT: settings for new vaults.DEPTH: For random vaults, branch entry vaults, and minivaults, thisspecifies the range of levels where the vault may be placedin the dungeon. E.g.DEPTH: 7-20DEPTH: does not force a map to be placed in a particular place; itapplies only when the dungeon builder is looking for a random vaultor minivault, so you can control at what depths your vault getsplaced.A simple DEPTH: declaration that does not specify a branchapplies to all branches. A map declared with depth 7-20 couldbe used in the Lair, for instance. (Lair:1 will be treated asa depth of 12 if the Lair entrance is on D:11.)
DEPTH: does not force a map to be placed in a particular place; itapplies only when the dungeon builder is looking for a random vaultor minivault, so you can control at what depths your vault getsplaced.A simple DEPTH: declaration that does not specify a branchapplies to all branches. A map declared with depth 7-20 couldbe used in the Lair, for instance. (Lair:1 will be treated asa 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 OrcishMines.)
Maps that do not specify a DEPTH: attribute will inherit their depthconstraints from the closest preceding default-depth: line. If thereis no preceding default-depth directive in the .des file, the map willhave no DEPTH: constraint. Note that maps without a DEPTH: constraintcannot 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 amonga set, this type of line affects the likelihood of the given vaultbeing picked in a given game. The default CHANCE: is 10. Thelikelihood 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 depthconstraints from the closest preceding default-depth: line. If thereis no preceding default-depth directive in the .des file, the map willhave no DEPTH: constraint. Note that maps without a DEPTH: constraintcannot be selected as random vaults or minivaults.CHANCE: (number with 10 being default)For entry vaults and any other vaults randomly picked from amonga set, this type of line affects the likelihood of the given vaultbeing picked in a given game. The default CHANCE: is 10. Thelikelihood 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, whichwill force the map (or one of the maps with PLACE: D:3) to be pickedwhen 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_BARTags go an a TAGS: line and are space-separated. Valid tags are:* "allow_dup": Vaults are normally used only once per game. If youhave a vault that can be used more than once, useallow_dup to tell the dungeon builder that the vaultcan be reused.* "dummy": this tag indicates that the vault is a stub; if the dungeonbuilder picks a dummy vault, it pretends no vault wasselected. Dummies are used to reduce the probabilityof other vaults at the same depth / place.* "entry": this tag MUST be there for a vault to be pickable asan entry vault.* "generate_awake": Monsters placed (using MONS, KMONS) in thisvault 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 thatthe dungeon builder pick random exits from the minivault andconnect it to the rest of the level, similar to the exitbehaviour for floating vaults.* "no_monster_gen": Prevents random monster generation at the timeof the vault's creation. Highly advised for entry vaults witha 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 beingrandomly 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 thatbranch. Use "O" to place the stairs. If a branch has veryfew entries, a dummy entry is advisable to make sure theplayer doesn't get bored of the same few entries recycledad nauseam.* "mnoleg" or the name of some other pandemonium lord. This makesthe map eligible for said pan lord's lair.* "uniq_BAR": (uniq_ with any suffix) specifies that only one vaultwith 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 youhave a vault that can be used more than once, use allow_dup to tellthe dungeon builder that the vault can be reused.* "dummy": this tag indicates that the vault is a stub; if the dungeonbuilder picks a dummy vault, it pretends no vault was selected.Dummies are used to reduce the probability of other vaults at thesame depth / place.* "entry": this tag MUST be there for a vault to be pickable as anentry vault.* "generate_awake": Monsters placed (using MONS, KMONS) in this vaultwill 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 thatthe dungeon builder pick random exits from the minivault andconnect it to the rest of the level, similar to the exit behaviourfor floating vaults.* "no_monster_gen": Prevents random monster generation at the time ofthe vault's creation. Highly advised for entry vaults with aplayer-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 beingrandomly 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 thatbranch. Use "O" to place the stairs. If a branch has veryfew entries, a dummy entry is advisable to make sure theplayer doesn't get bored of the same few entries recycledad nauseam.* "mnoleg" or the name of some other pandemonium lord. This makesthe map eligible for said pan lord's lair.* "uniq_BAR": (uniq_ with any suffix) specifies that only one ofthe vaults with this tag can be used in a game.
FLAGS: no_rotate, no_hmirror, no_vmirrorFlags 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 myvault!"* "no_hmirror": Like no_rotate, but for horizontal mirroring.* "no_vmirror": Like no_rotate, but for vertical mirroring.
FLAGS: no_rotate, no_hmirror, no_vmirrorFlags 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 myvault!"* "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 gamebehavior (FLAGS just controls how the vault is placed); shouldonly be used for vaults with ORIENT encompass or with PLACE.This causes a level's flags to be set when the level is firstcreated. These flags can later be altered using Lua markers;see the slime pit vault in lair.des, and the vaults in hell.desand elf.des for examples.
LFLAGS: Persistent, changeable per-level flags which affect gamebehavior (FLAGS just controls how the vault is placed); shouldonly be used for vaults with ORIENT encompass or with PLACE.This causes a level's flags to be set when the level is firstcreated. These flags can later be altered using Lua markers;see the slime pit vault in lair.des, and the vaults in hell.desand elf.des for examples.
Valid flags are: no_tele_control, which prevents the playerfrom using teleport control; not_mappable, which preventsthe player from remembering where they've been (like inthe Abyss), and no_magic_map, which prevents magic mappingfrom working.
Valid flags are: no_tele_control, which prevents the playerfrom using teleport control; not_mappable, which preventsthe player from remembering where they've been (like inthe Abyss), and no_magic_map, which prevents magic mappingfrom working.
BFLAGS: Persistent, changeable per-*branch* flags which affect gamebehavior; should only be used for vaults which go on the fistlevel of a particular branch. These flags can later be alteredusing Lua markers; see the Tomb vaults in vaults.lua for anexample.
BFLAGS: Persistent, changeable per-*branch* flags which affect gamebehavior; should only be used for vaults which go on the fistlevel of a particular branch. These flags can later be alteredusing Lua markers; see the Tomb vaults in vaults.lua for anexample.
Valid flags are: no_tele_control, which prevents the playerfrom using teleport control; not_mappable, which preventsthe player from remembering where they've been (like inthe Abyss), and no_magic_map, which prevents magic mappingfrom working.
Valid flags are: no_tele_control, which prevents the playerfrom using teleport control; not_mappable, which preventsthe player from remembering where they've been (like inthe Abyss), and no_magic_map, which prevents magic mappingfrom working.
ITEM: (list of items, separated by comma)These are used to help place specified items at specific placeswithin a vault. They create an array with up to 8 positions. What'sin the first position in the array will be used when the dungeonbuilder sees a "d" in the vault definition, the second will be usedfor "e"s, etc. Positions are comma-separated; several ITEM: linesare possible as well. The following defines letters 'd' - 'g':ITEM: stone, ring mail, meat ration, ring of hungerPositions can contain multiple possibilities, one of which thebuilder will choose randomly. Separate such multiple possibilitiesusing a slash. Note that "nothing" (without the quotes) is a validpossibility. The random choice is done for each individual occurenceof the letter. You can also give possibilities a "weight," whichaffects their chance of being picked. The default weight is 10. Youcan abbreviate "weight:30" by "w:30". The chance to pick apossibility is[possibility's weight: / sum of all weight:s in that array position]For example, the following line makes letter 'd' into a bread rationwith 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 placeswithin a vault. They create an array with up to 8 positions. What'sin the first position in the array will be used when the dungeonbuilder sees a "d" in the vault definition, the second will be usedfor "e"s, etc. Positions are comma-separated; several ITEM: linesare possible as well. The following defines letters 'd' - 'g':ITEM: stone, ring mail, meat ration, ring of hungerPositions can contain multiple possibilities, one of which thebuilder will choose randomly. Separate such multiple possibilitiesusing a slash. Note that "nothing" (without the quotes) is a validpossibility. The random choice is done for each individual occurenceof the letter. You can also give possibilities a "weight," whichaffects their chance of being picked. The default weight is 10. Youcan abbreviate "weight:30" by "w:30". The chance to pick apossibility is[possibility's weight: / sum of all weight:s in that array position]For example, the following line makes letter 'd' into a bread rationwith 50% chance, or apple or orange with 25% chance each:ITEM: bread ration / w:5 apple / w:5 orangeModifiers:* "q:N" sets the item quantity to N (if N > 0). Does nothingif 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. Youalso can't lay down corpses, skeletons, or chunks.MONS: (list of monsters)These are used to help place specific monsters at specific placesin a vault. They create an array with up to 7 positions. What's inthe first position in the array will be used when the dungeonbuilder 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 yourMONS: line has no third position, the 3 will be filled withRANDOM_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 beetleMonsters can also be given colours that override their defaultcolour. Use this *very* sparingly:MONS: col:darkgrey fungus
Modifiers:* "q:N" sets the item quantity to N (if N > 0). Does nothingif 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. Youalso can't lay down corpses, skeletons, or chunks.MONS: (list of monsters)These are used to help place specific monsters at specific placesin a vault. They create an array with up to 7 positions. What's inthe first position in the array will be used when the dungeonbuilder 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 yourMONS: line has no third position, the 3 will be filled withRANDOM_MONSTER.You can use weights as for ITEM: lines.
COLOUR: . = green / blue:5 / red / noneCOLOUR: allows you to attach explicit colours to any feature.Explicit colours will override the default colour for thatfeature. The example shown above colours all . (floor) in themap green, blue, red, or unchanged (use the default colour).You can use : to specify that all glyphs get the same colour:COLOUR: x : red / bluewill colour all rock walls in the map red, or all rockwalls 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 featureswhere it won't cause confusion (i.e.: never re-colour featureslike lava!)
Monsters can also be given colours that override their defaultcolour. Use this *very* sparingly:MONS: col:darkgrey fungusNote 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 aretwo ways:
COLOUR: . = green / blue:5 / red / noneCOLOUR: allows you to attach explicit colours to any feature.Explicit colours will override the default colour for thatfeature. The example shown above colours all . (floor) in themap 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 asswapping 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 / bluewill colour all rock walls in the map red, or all rockwalls 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 featureswhere it won't cause confusion (i.e.: never re-colour featureslike lava!)
Several SHUFFLE: lines can be used, and mixed with SUBST:, and theshuffles and substitutions will be applied in order. You can alsoput multiple SHUFFLEs on one line, comma-separated. Shuffles cannotuse , or /. All spaces are stripped before shuffling.
SHUFFLE: def, 12/3?This allows you to randomly permute glyphs on the map. There aretwo ways:
SUBST: ?=xc, !:bv, 1=2 1:100The SUBST: directive allows you to specify a placeholder symbolthat 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 asswapping all "3" with "w" (or any other of the 24 possibilities).
SUBST: ? = TUVreplaces occurrences of ? with one of TUV. Since whitespaces areirrelevant, this is the same asSUBST: ? = 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 Vmakes T twice as likely to be used as U or V (the default weightis 10). Note that there has to be at least one space before andafter T:20 and that whitespace in T:20 is not permitted.
Several SHUFFLE: lines can be used, and mixed with SUBST:, and theshuffles and substitutions will be applied in order. You can alsoput multiple SHUFFLEs on one line, comma-separated. Shuffles cannotuse , or /. All spaces are stripped before shuffling.SUBST: ?=xc, !:bv, 1=2 1:100The SUBST: directive allows you to specify a placeholder symbolthat is replaced with a random glyph from a set. For instance:
SUBST: ? : TUVreplaces occurrences of ? with one of TUV, and guarantees that alloccurrences of ? will get the same replacement symbol.
SUBST: ? = TUVreplaces occurrences of ? with one of TUV. Since whitespaces areirrelevant, this is the same asSUBST: ? = T U V
The placeholder and replacement symbols can be any non-space,printable character, including : and =, apart from commas. Forexample, the following is valid:SUBST: = = +=:123def"
SUBST: ? = T:20 U Vmakes T twice as likely to be used as U or V (the default weightis 10). Note that there has to be at least one space before andafter 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: ? : TUVreplaces occurrences of ? with one of TUV, and guarantees that alloccurrences of ? will get the same replacement symbol.
Multiple SUBST: lines can be used, and mixed with SHUFFLE:, andwill be applied in order. Multiple substitutions can be performedon one line, using commas.
SUBST: lines can safely replace symbols with themselves, as in:SUBST: w = wW
NSUBST is similar to SUBST, replacing placeholders withreplacement values. Unlike SUBST, however, it allows you toreplace different instances of the same placeholder withcompletely different substitutions. For instance:
NSUBST is similar to SUBST, replacing placeholders withreplacement values. Unlike SUBST, however, it allows you toreplace different instances of the same placeholder withcompletely 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 applyit to, followed by : or = (: to use one substitution for alloccurrences, = to randomly pick for each occurrence). If youomit the initial N: or N=, then 1= is assumed, except for thelast spec where *= is assumed.
? = wW / l / A / 1234
KFEAT: Z = C / needle trap / antique armour shop / altar_zinThe KFEAT: directive allows you to specify a placeholder symbolthat is replaced with another symbol, named feature, trap, orshop. For example, the line above will replace occurrences of Zwith C (random altar), a needle trap, an antique armour shop, oran altar of Zin. Different instances of Z may receive differentreplacements. To force a single replacement for all Z, use:
Each specifier is preceded by the number of symbols to applyit to, followed by : or = (: to use one substitution for alloccurrences, = to randomly pick for each occurrence). If youomit the initial N: or N=, then 1= is assumed, except for thelast spec where *= is assumed.
KFEAT: Z : C / needle trap / antique armour shop
KFEAT: Z = C / needle trap / antique armour shop / altar_zinThe KFEAT: directive allows you to specify a placeholder symbolthat is replaced with another symbol, named feature, trap, orshop. For example, the line above will replace occurrences of Zwith C (random altar), a needle trap, an antique armour shop, oran altar of Zin. Different instances of Z may receive differentreplacements. To force a single replacement for all Z, use:
You'll notice that 'Z' is the symbol of the Orb of Zot. Kxxxdirectives allow you to assign arbitrary definitions to any symbol.
KFEAT features are specified as a feature name (see section Ifor a full list of feature names). As another example, you canplace 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 Kxxxxoperations for the placeholder are performed. Also, all Kxxxlines 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 Kxxxxoperations for the placeholder are performed. Also, all Kxxxlines accept weights as for MONS or ITEM.
KMONS: allows you to specify a placeholder symbol that indicatesthe 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-floorsquare (used in association with a KFEAT:). For example,KFEAT: Z = WKMONS: Z = ratplaces 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 theprimary monster you want to place is unavailable (because itis a unique that was already generated). For instance, if you wantto 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, humanOr if you want to pick randomly:KMONS: n = Terence / Michael / Erica, human
KMONS: allows you to specify a placeholder symbol that indicatesthe 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-floorsquare (used in association with a KFEAT:). For example,KFEAT: Z = WKMONS: Z = ratplaces 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 theprimary monster you want to place is unavailable (because itis a unique that was already generated). For instance, if you wantto 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, humanOr if you want to pick randomly:KMONS: n = Terence / Michael / Erica, human
KMASK allows you set or unset various masks for particularsymbols, rather than for the entire vault like if you did itwith TAGS. Valid masks are
KMASK: Z = no_monster_gen
* "no_item_gen": Prevents random item on that symbol. Itemsexplicitly placed on that symbol aren't affected.* "no_monster_gen": Prevents random monster generation on thatsymbol. MUST-HAVE for those with water/lava symbols inentry vaults.* "no_pool_fixup": prevents a water square next to land from beingrandomly converted from deep water (the default) to shallow.* "no_secret_doors": prevents a door from randomly being turnedinto a secret door.
* "no_item_gen": Prevents random item on that symbol. Itemsexplicitly placed on that symbol aren't affected.* "no_monster_gen": Prevents random monster generation on thatsymbol. MUST-HAVE for those with water/lava symbols inentry vaults.* "no_pool_fixup": prevents a water square next to land from beingrandomly converted from deep water (the default) to shallow.* "no_secret_doors": prevents a door from randomly being turnedinto a secret door.
KMASK: W = no_monster_gen
For example
will prevent monsters from randomly being generated on shallowwater squares. Note that if shuffling and substitutions causeW 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, butthat's still a higher degree of control than you get with TAGS.
will prevent monsters from randomly being generated on shallowwater squares. Note that if shuffling and substitutions causeW 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, butthat's still a higher degree of control than you get with TAGS.
TAGS: no_monster_genKMASK: W = !no_monster_gen
TAGS: no_monster_genKMASK: W = !no_monster_gen
KITEM: ? = potion of healing / potion of restore abilitiesKITEM: places the specified item at all occurrences of theplaceholder. It can be combined with KFEAT: and KMONS: lines forthe same placeholder.
KITEM: ? = potion of healing / potion of restore abilitiesKITEM: places the specified item at all occurrences of theplaceholder. It can be combined with KFEAT: and KMONS: lines forthe same placeholder.
You can use q: to specify quantities:KITEM: ? = q:100 gold
You can use "gold" or "$" to place gold:KITEM: ? = nothing / goldKITEM: ? = 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 somesort (which depends on the marker and what feature it is on).
A marker ties a square on the map to a game-trigger of somesort (which depends on the marker and what feature it is on).The portals to the Hells in the Vestibule of Hell are eachannotated 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 theportal 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 thefeature to deep water at the end of it.
Feature names used in markers must be names matching thenames in the source code. There's a full list of featurenames in section I (Feature names) at the end of thisdocument.
Feature names used in markers must be names matching thenames in the source code. There's a full list of featurenames in section I (Feature names) at the end of thisdocument.
instance, if your map is ORIENT: north, you must have a 6 deep border ofrock wall (or any other kind of wall) along the northern, eastern, andwestern 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 ofrock wall (or any other kind of wall) along the northern, eastern, andwestern edges of the map. If you're doing a fullscreen map (encompass),
<). The <> stairs can be put anywhere and in any quantities but do nothave to be there. Any of the other stairs which are not present in thevault will be randomly placed outside it. Also generally try to avoid
<). The <> stairs can be put anywhere and in any quantities but do nothave to be there. Any of the other stairs which are not present in thevault will be randomly placed outside it. Also generally try to avoid
'fortress' or 'forest' may be enough. For later (or larger) maps, tryto think of distinguishing features your map may have. Being cool can
'fortress' or 'forest' may be enough. For later (or larger) maps, tryto 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 whichuniquely determines the vault is enough. You can playtest portal vaultsusing the &P wizard command. Branch ends can be conveniently tested withthe &~ 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 toohard, it might get degraded to tricky.des (or just removed). Keep inmind that your vault will be played very very often, so even smallchances of something stupid happening (like creation of a really nastymonster) 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 playedvery 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 normalvaults are placed before generating the rest of the level. There's no
levels. They're placed *after* normal map generation, whereas normalvaults are placed before generating the rest of the level. There's no