git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7482 c06c8d41-db1a-0410-9941-cceddc491573
A4WHP5XZMXDCFMGRPS43OVHXHMU5KJBZKF4IRIO6F3KTXNHKAERQC RLARLENIGHKWCS2X7NOUYUWYYZ5H2TJLTIH42YQURZLQFQTPBBVAC SZNLKCVMIAINMBDKN42WBLXKCLND2PEUP2BH6HKEVPT4UCZDWEIAC AS6GUSYH6BX44TN2YOIIAXWRRBN7TDIPFAAOQQVK4XJPIWOB7KCQC 2R5AN5RRLSH6FDV3T3LRVZCF4PXWQCJ3ETF5QUBYJN6NJSCJ5T4AC 2XEKXT3DR4WW5BRFGXUB4YPFPHPJ4TT2YAY2VHDQTR5UH5QEX7VQC JYNLSDNQDNOBCHDPQLJP6TNOJQ2IB4V7JHBYLL6UAUCTZ7DUZAWQC ZTDYCQQQQSLWGFJOUB3HKGHMJLNY6UHF4OOC2XVVHXSZTTZK5A5AC ZSJNOIHKHII5WVN4NWHZN4N6Q5M5H6JMCSPIR7N3QNHWX2C6LSAQC H3552BCIAVBLKAYKE4DHFLBLFW5RGRMYBMRRYHYEB5IPIJRUVU5QC IE3INS4WUXZOBVXB5VWRBYPVPXADD2U2W5H3TBTOYNWJ3EGRSGQQC ZI6K4LOBYQJKSMHZ766HTJS66AL2KB6IYSBUYPETTKPOKW4ZNK7AC D7UI5P567SVRKHJSUFKHMKN7OUSFKFH23OP75NCEK3WXVHF75WFAC SHQUW7EH2E2SGQ5ONR63MAKN2VGLKQDQ3HIC2Q6D4DFGPGIJXXJQC R6XS2HO5QX2FJUGL5UQQRNETKCMYWTUFPHPPS5SYWK3OQA4UDUQQC MXOCLQAUGWLOS7AOTYZ46JZDMRL4EVRK5YN4JJUQ76GLKBOBHEVAC K6ELQ4HEZYDROC7CJFLPJS64AAJQ4G6RVLL4GBRUG6FJMKSBDDIQC ILN2K6ASDZSMEHOPJ22IZLZJUO6DDGZTKAKXM3YXG6JZZHJNLX4AC WE3JT43OR4L6675GINGU4B3YDBMURJZHDDYY3VLHUJEBAKH2HYEAC 6ZCKL3LCJ2QYYRI6CVK7CU4VXZMIZ6RIOTFUDEM2QTM4EHKVUKMAC ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC TLA5UN6LZPXGKERI27EFY4HKIIU3VU5Y7ZU54WXL6ANBUV2VOTMQC APGCKU4AFOV7Z7XIEO5A27H4IFUGDU227I3Z7OIRROYSLOFFBJ5AC AFE345BJ7IX2YYYX3I5I6RYLXNWJCFE4WMH6F5JMIR6X7WUP75CAC BTZ3QR6G7FV4DJCEG2CTDFH6YSUM4Y7NXM7NTAKBRLBOUIPKZM4QC A map designed for D:1, which (usually) contains the primary upstair { and isalways tagged "entry". A player starting a new game will usually land in anentry vault.
Branch entry vault, or branch portal vault:A map containing the entry to a branch - either a branch stair (such asthe stair to the Orcish Mines), or a branch portal (a portal to Hell, say).Always tagged "<branchname>_entry".
* Branch entry vault, or branch portal vault:A map containing the entry to a branch - either a branch stair (such as thestair to the Orcish Mines), or a branch portal (a portal to Hell, say). Alwaystagged "<branchname>_entry".* Special level:A map for a location of significance in the game, such as the Ecumenical
Special level:A map for a location of significance in the game, such as the Ecumenical
* Random vaults:Random vaults may be randomly generated at any level in the dungeon. Randomvault maps are selected by the dungeon builder based on their DEPTH:
Random vaults:Random vaults may be randomly generated at any level in the dungeon.Random vault maps are selected by the dungeon builder based on their DEPTH:
* Random minivaults:Random minivaults are small maps that are placed onto a level that thedungeon builder has already constructed fully otherwise (the level may
Random minivaults:Random minivaults are small maps that are placed onto a level that thedungeon builder has already constructed fully otherwise (the level may
NAME: a_useless_temple_entry_02# header section below:ORIENT: floatCHANCE: 5TAGS: temple_entryFLAGS: no_rotateSHUFFLE: deSUBST: 1=12.MONS: butterfly, plantITEM: stone, w:10 any book / w:90 nothing# actual map below:MAPxx1@2xxx1wWw2xewwOwwdx2www1xxx1.1xxENDMAP
NAME: useless_temple_entry# header section below:ORIENT: float # "ORIENT: float" tells the level builder that# this entry can be anywhere on the level.TAGS: temple_entry # "TAGS: temple_entry" turns the 'O' on theMONS: butterfly, plant # map into stairs to the Temple.ITEM: stone# actual map below: # The symbols on the map:MAP # x - rock wallxx.d.xx # . - floorx..1..x # @ - entry point (@d2O2d. # O - stairs to the Templex..1..x # 1 - first monster from list (here butterfly)xx.d.xx # 2 - second monster from list (here plant)ENDMAP # d - first item from the list (here stones)
briefly after the example map and in detail in the following sections."ORIENT: float" tells the level builder that this entry can be anywhere on thelevel; other ORIENT: values can force a map to one edge of thelevel."CHANCE: 5" makes the map appear less often (default is 10)."TAGS: temple_entry" turns the 'O' on the map into stairs to the Temple."FLAGS: no_rotate" forbids rotation (but mirroring is still allowed)."SHUFFLE: de" may replace all 'd' with 'e' in the map."SUBST: 1=12." may replace each '1' with either '1' or '2' or '.'."MONS: butterfly, plant" turns all '1' into butterflies, and '2' into plants."ITEM: stone" turns all 'd' into stones."ITEM: w:10 any book / w:90 nothing" turns all 'e' into a book(with 10% chance) or creates no object (with 90% chance).
in detail in the following sections.
The symbols on the map:x - rock wallw - water (could be deep or shallow)W - shallow water. - plain floor@ - entry point (this square will be connected to the rest of the map)O - stairs to the Temple1 - first monster from the list (here butterfly) - note the SUBST: 1=12.2 - second monster from the list (plant)d - first item from the list (here stones)e - second item from the list (here occassionally a book)
years, there are some inconsistencies. For examples, dangerous statues(orange, silver, ice) are now genuine monsters. In particular, you might seemany older vaults still using the deprecated 'H' and 'S' glyphs which should
years, there are some inconsistencies. For examples, dangerous statues (ice,orange, silver) are now genuine monsters. In particular, you might see manyolder vaults still using the deprecated 'H' and 'S' glyphs which should
Try to respect line lengths of 80 characters. Should some line exceed that(which is quite possible, especially for ITEM and MONS lines), you can usethe \ symbol to break a line. You can break a line anywhere, with theexception of comma-separated lists, where you cannot start a new line witha comma. See the end of this section for examples.
Valid flags are: no_tele_control, which prevents the player fromusing teleport control; not_mappable, which prevents the playerfrom remembering where they've been (like in the Abyss), andno_magic_map, which prevents magic mapping from working.
Valid flags are:* no_tele_control - prevents the player from using teleport control* not_mappable - prevents the player from remembering wherethey've been (like in the Abyss)* no_magic_map - which prevents magic mapping from working.
Valid flags are: no_tele_control, which prevents the player fromusing teleport control; not_mappable, which prevents the playerfrom remembering where they've been (like in the Abyss), andno_magic_map, which prevents magic mapping from working.
Valid flags are:* no_tele_control - prevents the player from using teleport control* not_mappable - prevents the player from remembering wherethey've been (like in the Abyss)* no_magic_map - which prevents magic mapping from working.
If your map is not a minivault or a floating vault, make sure theside(s) forming the border have a rock wall padding at least 6 deep. Forinstance, 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),you must pad all around the map with 6 layers of wall.
The level making syntax is now very supportive for making a single mapappear in many versions. Use the SHUFFLE: and SUBST: directives and lookat the existing entry vaults. Besides reducing tedium, this avoids givingveterans a spoiled edge. For example, if a secret chamber with loot isalways at the same place, it's a no-brainer for those who know. The samegoes for traps. This is much less so if there are several places for thechamber (or trap) and there's even a chance it doesn't exist.
The level making syntax is very supportive for making a single map appearin many versions. Use the SHUFFLE: and SUBST: and NSUBST: directives andlook at the existing entry vaults. Besides reducing tedium, this avoidsgiving veterans a spoiled edge. As an example, if a secret chamber withloot is always at the same place, it's a no-brainer for those who know.The same goes for traps. This is much less so if there are several placesfor the chamber (or trap) and there's even a chance it doesn't exist.
It is often worthwhile (to me at least) to have a theme in mind beforemaking the actual level. For entry vaults, something simple like'fortress' or 'forest' may be enough. For later (or larger) maps, tryto think of distinguishing features your map may have. Being cool canbe good enough, but possessing some gameplay value (for example by beingeasier for particular skills/capabilities like ranged attacks ornecromancy or Traps & Doors) is even better.
It is often worthwhile (for me at least) to have a theme in mind beforemaking the actual level. For entry vaults, something simple like 'forest'or 'fortress' may be enough. For later (or larger) maps, try to think ofdistinguishing features your map may have. Being cool can be good enough,but possessing some gameplay value (for example by being easier forparticular skills/capabilities like ranged attacks or Traps & Doors ornecromancy) is even better.
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.
Vaults can be conjured up in wizard mode using the &L command. You don'tneed to specify the full name of the vault, a substring which uniquelydetermines the vault is enough. You can playtest portal vaults using the &Pwizard command. Branch ends can be conveniently tested with the &~ command.
------------------
==================Portal vaults are vaults accessed by portals in the dungeon (labyrinthsand bazaars are special cases of portal vaults). You can create customportal vaults in the following steps (no compilation is necessary):* Create a new file name.des in the dat/ folder. Rules:The "name" should be descriptive of the vault you're adding.The "name" should not exceed eight letters.The ending must be "des".* Add "name.des" to the list of local files in dat/clua/loadmaps.lua.* "name.des" should contain a comment at the top, explaining flavour andgameplay goals of the portal vault (and perhaps additional ideas etc.)* Define at least one vault containing the portal (see below).* Define at least one destination map (see below).* Add a short in-game description for the string "desc" (see below) todat/descript/features.txt.
Portal vaults are vaults accessed by portals in the dungeon (bazaarsare a special case of portal vaults). You can create custom portalvaults as follows:
Before going into the details of portal vault creation, some words abouttheir uses: Portal vaults are different from branches in that they arenot guaranteed. Furthermore, there is only one go at a portal vault - ifyou leave, it's gone for good. Finally, you can apply special rules to aportal vault, like disabling mapping. Bazaars and labyrinths are typicalexamples.
Define a vault to hold the portal itself:
In order to test a portal vault, you can either use PLACE: D:2 for anentry vault, or use the wizard mode command &L for conjuring up the entry.Define a vault to hold the portal itself----------------------------------------
The MARKER parameters---------------------The linesMARKER: O = lua:one_way_stair { desc = "A portal to places unknown", \dst = "generic_portal" }KFEAT: O = enter_portal_vaultensure that an 'O' glyph will be turned into a portal. Upon leaving the portalvault, you will be placed on its entry which has been turned into a floor. Youcan turn it into something different (usually an empty stone arch), by addingfloor = 'stone_arch'to the lua:one_way_stair parameters.Note that the desc string is what you will see upon examining the portal.The dst string is used for Crawl's right hand stat area; it will showPlace: generic portalin the above example. The dst string is also used to link the destination mapsto the entry maps.You can replace lua:one_way_stair by lua:timed_marker in order to make timedportal vaults (which will disappear after some time). bazaar.des and lab.descontain examples.Using lua functions as shortcuts--------------------------------If you are making several entry and destination vaults, you will note alot of duplicated header statements. This can be lessened using lua.Define a lua block right at the top (after your comments) as follows:{{function generic_portal(e)e.marker([[O = lua:one_way_stair { desc = "A portal to places unknown", \dst = "generic_portal", \floor = "stone_arch" }]])e.kfeat("O = enter_portal_vault")e.colour("O = magenta")end}}Instead of the MARKER and KFEAT lines introduced above you now just use:generic_portal(_G)and the resulting portal glyphs will even be magenta!