summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dungeon.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-05-10 11:59:37 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-05-10 11:59:37 +0000
commita4ac31b1514c2eb7066379e79bfdd5985a7ddecb (patch)
tree22defa8f8c1ce38b45361fe8afc59f08588917de /crawl-ref/source/dungeon.cc
parentdc456cfe8e4b7e096cd5261817e6d0d36f233e85 (diff)
downloadcrawl-ref-a4ac31b1514c2eb7066379e79bfdd5985a7ddecb.tar.gz
crawl-ref-a4ac31b1514c2eb7066379e79bfdd5985a7ddecb.zip
Updated level-design.txt.
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
Diffstat (limited to 'crawl-ref/source/dungeon.cc')
-rw-r--r--crawl-ref/source/dungeon.cc48
1 files changed, 32 insertions, 16 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index c2b3c8aebd..b590650b36 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -3183,7 +3183,8 @@ static void dngn_place_item_explicit(int index, int x, int y,
dngn_place_item_explicit(spec, x, y, level);
}
-static void dngn_place_monster(
+static bool dngn_place_monster(
+ const vault_placement &place,
const mons_spec &monster_type_thing,
int monster_level,
int vx, int vy)
@@ -3191,6 +3192,10 @@ static void dngn_place_monster(
if (monster_type_thing.mid != -1)
{
const int mid = monster_type_thing.mid;
+ const bool generate_awake =
+ monster_type_thing.generate_awake
+ || place.map.has_tag("generate_awake");
+
int not_used;
const int mlev = monster_type_thing.mlevel;
@@ -3207,18 +3212,35 @@ static void dngn_place_monster(
if (mid != RANDOM_MONSTER && mid < NUM_MONSTERS)
{
if (mons_is_unique(mid) && you.unique_creatures[mid])
- return;
+ return (false);
const int habitat = monster_habitat(mid);
if (habitat != DNGN_FLOOR)
grd[vx][vy] = habitat;
}
-
- 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);
+ }
+ }
+ return (false);
}
static monster_type random_evil_statue()
@@ -3277,10 +3299,8 @@ static int vault_grid( vault_placement &place,
else
grd[vx][vy] = DNGN_FLOOR;
- 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);
item_list &items = mapsp->get_items();
dngn_place_multiple_items(items, vx, vy, level_number);
@@ -3487,11 +3507,7 @@ static int vault_grid( vault_placement &place,
if (vgrid != '8' && vgrid != '9' && vgrid != '0')
monster_type_thing = place.map.mons.get_monster(vgrid - '1');
- if (place.map.has_tag("generate_awake"))
- monster_type_thing.generate_awake = true;
-
- dngn_place_monster(monster_type_thing, monster_level,
- vx, vy);
+ dngn_place_monster(place, monster_type_thing, monster_level, vx, vy);
}
// again, this seems odd, given that this is just one of many