From a4ac31b1514c2eb7066379e79bfdd5985a7ddecb Mon Sep 17 00:00:00 2001 From: dshaligram Date: Thu, 10 May 2007 11:59:37 +0000 Subject: 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 --- crawl-ref/source/dungeon.cc | 48 ++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 16 deletions(-) (limited to 'crawl-ref/source/dungeon.cc') 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 -- cgit v1.2.3-54-g00ecf