Added spacing for another minivault, updated depths.
Tweaked KMONS: to allow alternate monsters to be placed if a requested unique is unavailable.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1445 c06c8d41-db1a-0410-9941-cceddc491573
ILN2K6ASDZSMEHOPJ22IZLZJUO6DDGZTKAKXM3YXG6JZZHJNLX4AC
R6XS2HO5QX2FJUGL5UQQRNETKCMYWTUFPHPPS5SYWK3OQA4UDUQQC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC
442VGKMARB6LTQUEBIB5P447EI34BRJL6JALZKXLWPDHWCM6KKCQC
5P64LHKJKGKIO3FUV63KFQ2OHZ5RNRV7WXS25OHXVNYYFZAVGLMAC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
2TTHWHQ3ZDD3DLB3KRULTBMS3ZREJG472IBVZXIGTP7MBZWAU52QC
34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC
XY77S75KH5KV54MZVAPMUC64TVRE2QM2KVJAAGJGCIBGQEC5GUTQC
7YSKYUNV34XIWRTJUHJV4QMQRTXXYDIXM5AZSPSDPAYDW4B4PU6QC
MI7CWKRDXHAU7PIHLXXOSFBULRGT2OOMIMOSQLMVYOUVGABIVXGAC
25V4IA67QFLZRTBPZLHZ7R2VTFRBBQBE3IS4ASN5BJRBXPEHSALQC
LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC
OVDIHWR5FEPTBZCTEAXNPB4MYP5NUNPQMC6UM4F6SC4EBGWH3DSQC
OTAXEUGHFR5A4NAUA3HDTIOQZO7E4MFX6ILDID3DHFEAOWUWRZ4QC
FOCWL2MOKK6BNARCKZIN6DPTOYRFILRJLURUT2JBORS25MMVGGSQC
TY6JR6MSAREXQ3JH44ILKPYBVVCBVDXWD2UA74RLIDULCU23XRHQC
place_monster( not_used, mid, monster_level,
monster_type_thing.generate_awake?
BEH_WANDER : BEH_SLEEP,
MHITNOT, true, vx, vy, false );
return (place_monster( not_used, mid, monster_level,
generate_awake? BEH_WANDER : BEH_SLEEP,
MHITNOT, true, vx, vy, false ));
}
return (false);
}
static bool dngn_place_one_monster(
const vault_placement &place,
mons_list &mons,
int monster_level,
int vx, int vy)
{
for (int i = 0, size = mons.size(); i < size; ++i)
{
if (dngn_place_monster(place, mons.get_monster(i),
monster_level, vx, vy))
{
return (true);
}
mons_spec mons = mapsp->get_mons();
if (place.map.has_tag("generate_awake"))
mons.generate_awake = true;
dngn_place_monster(mons, level_number, vx, vy);
mons_list &mons = mapsp->get_monsters();
dngn_place_one_monster(place, mons, level_number, vx, vy);
w - deep water - can be turned into shallow water; prevent this with the
no_pool_fixup TAG. Also, this may receive water creatures! For entry
w - deep water - can be randomly turned into shallow water by the
level-builder; you can prevent this conversion with the no_pool_fixup TAG.
Also, water may automatically receive water creatures! For entry
@ - entry point - must be on outside and, except in ORIENT:float layouts,
must always be on a particular side or sides - see templates. If you use
ORIENT: float, and do not use any @, the dungeon builder will connect at
least one floorspace on the edge of your map to the rest of the level; if
there is no floorspace on the edge of your map, it will be isolated.
}{ - stairs 82/86 - You must be able to reach these from each other. The
@ - entry point - must be on outside edge. If you use ORIENT: float, and do
not use any @, the dungeon builder will connect at least one floorspace on
the edge of your map to the rest of the level; if there is no floorspace
on the edge of your map, it will be isolated.
}{ - Stone stairs - You must be able to reach these from each other. The
Note: Due to the level maker having seen incremental improvements over
the years, there are some inconsistencies. For examples, dangerous
statues (orange, silver ice) are now genuine monsters. In particular,
the 'H' and 'S' glyphs could be dispensed with (but many older vaults
use them, of course) - especially as there's no glyph for ice statues.
# Note: Due to the level maker having seen incremental improvements over the
# years, there are some inconsistencies. For examples, dangerous statues
# (orange, silver ice) are now genuine monsters. In particular, the 'G' and 'S'
# glyphs could be dispensed with (but many older vaults use them, of course) -
# especially as there's no glyph for ice statues.
#
# Also, the most of the other feature glyphs can be replaced with KFEAT:
# lines. The same goes for some item glyphs ('O', 'P', 'R', 'Z') which could
# be replaced by KITEM: lines.
Also, the most of the other feature glyphs can be replaced with KFEAT:
lines. The same goes for some item glyphs ('R', 'Z') which
could be replaced by KITEM: lines.
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.)
You can constrain a map by branch:
DEPTH: Lair:7-9
(Anywhere between levels 7-9 of the Lair, inclusive.)
You can apply multiple constraints (with multiple DEPTH: lines, if
necessary, or on one line, comma-separated):
DEPTH: 7-20, !12-14
(Anywhere in the dungeon between depths 7-20, but not on levels
12-14.)
DEPTH: 7-20, !Orc
(Anywhere in the dungeon between depths 7-20, but never in the Orcish
Mines.)
DEPTH: Lair:*
(Anywhere in the Lair. Can also be expressed as "DEPTH: Lair".)
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.
Use "O" to place the stairs. Branch entries should go to splev.des.
As long as a branch has very few entries, a dummy one is a must.
Use "O" to place the stairs. Branch entries should go to
ebranch.des. 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.
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
For items like gold or fountains, you have to use the description
of items instead of their shortcuts. For example,
KITEM: none / gold
For items like gold, you have to use the description of items
instead of their shortcuts. For example,
KITEM: ? = nothing / gold
The entry point '@' must be present (except full-screen vaults where it
must not). For ORIENT: float maps, all @ will be connected to floors in
the rest of the map. Make sure that no part of your entry level can be
cut off! If no @ is present, the level builder will put one on a random
floor space '.' at the circumference. (Sometimes this may be used for
good effect. When you give no @'s with this feature in mind, please make
a comment stating this - else somebody may just add @'s later on :)
Minivaults should generally be completely surrounded by one-space of
floor for accessibility. Minivaults are not handled like regular
vaults in terms of entry-points: the entry-point glyph @ is ignored
for minivaults. In general, at least one square of a minivault will
be reachable from the rest of the level, but there is no way to
predict which one. If your minivault is intended to be accessible,
surround it with floor.
The entry point '@' must be present for all vaults (except
full-screen vaults and minivaults where it must not, and floating
vaults where it is optional). All @ will be connected to floor space
in the rest of the map (multiple @ close together may merge into the
same exit corridor). Make sure that no part of your entry level can
be cut off! If no @ is present in a floating vault (and there are no
doors on the edge of the map, see below), the level builder will put
one or more on a random floor space '.' at the circumference. Note
that it is not possible to predict which floor spaces the level
builder will choose to connect; if you need predictability, use
explicit @ exits on the edge.
The level-builder will also implicitly treat doors and secret doors
on the edge of a map as explicit exits (the same as using @) and
connect them to the rest of the level.
Note that non-rectangular maps will be padded with rock walls for the
smallest rectangle containing them. Unfortunately.
Not using @ and allowing the level-builder to pick exits is
acceptable in floating vaults, but when you use no @'s with this
feature in mind, please add comments stating this - else somebody
may just add @'s later on. :)
Non-rectangular maps will be padded (to the right) with rock walls
(or with floor spaces for minivaults) for the smallest rectangle
containing them. Unfortunately.