From 9295e4fb393749bedc6ccdbe99c5147435949d35 Mon Sep 17 00:00:00 2001 From: dshaligram Date: Mon, 29 Jan 2007 15:42:46 +0000 Subject: Allow vaults to ask for a monster to be generated awake (generate_awake tag). Add Enter as a synonym for . in targeting. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@905 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/dat/vaults.des | 6 +++--- crawl-ref/source/direct.cc | 1 + crawl-ref/source/dungeon.cc | 18 +++++++++--------- crawl-ref/source/mapdef.cc | 23 ++++++++++++----------- crawl-ref/source/mapdef.h | 29 ++++++++++++++++------------- 5 files changed, 41 insertions(+), 36 deletions(-) (limited to 'crawl-ref') diff --git a/crawl-ref/source/dat/vaults.des b/crawl-ref/source/dat/vaults.des index e41a5d97c3..a30bb76c12 100644 --- a/crawl-ref/source/dat/vaults.des +++ b/crawl-ref/source/dat/vaults.des @@ -1803,8 +1803,8 @@ ENDMAP NAME: david_sounds_slurp TAGS: entry no_monster_gen -MONS: jelly -ITEM: stone +MONS: generate_awake jelly +ITEM: scroll of paper ORIENT: float MAP @@ -1830,7 +1830,7 @@ ENDMAP NAME: david_sounds_drone TAGS: entry no_monster_gen -MONS: boring beetle +MONS: generate_awake boring beetle ORIENT: float MAP diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc index 6150128df8..0a164913cb 100644 --- a/crawl-ref/source/direct.cc +++ b/crawl-ref/source/direct.cc @@ -110,6 +110,7 @@ static command_type read_direction_key() case '?': return CMD_TARGET_HELP; case ' ': return CMD_TARGET_CYCLE_BEAM; case ':': return CMD_TARGET_HIDE_BEAM; + case '\r': return CMD_TARGET_SELECT; case '.': return CMD_TARGET_SELECT; case '!': return CMD_TARGET_SELECT_ENDPOINT; diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index ecab6a7ea4..3c246cb906 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -5848,22 +5848,22 @@ static int vault_grid( vault_placement &place, if (vgrid >= '0' && vgrid <= '9') { int monster_level; - int monster_type_thing; + mons_spec monster_type_thing(RANDOM_MONSTER); monster_level = ((vgrid == '8') ? (4 + (level_number * 2)) : - (vgrid == '9') ? (5 + level_number) : level_number); + (vgrid == '9') ? (5 + level_number) : level_number); if (monster_level > 30) // very high level monsters more common here monster_level = 30; - monster_type_thing = ((vgrid == '8' - || vgrid == '9' - || vgrid == '0') ? RANDOM_MONSTER - : place.map.mons.get_monster(vgrid - '1')); + if (vgrid != '8' && vgrid != '9' && vgrid != '0') + monster_type_thing = place.map.mons.get_monster(vgrid - '1'); - if (monster_type_thing != -1) - place_monster( not_used, monster_type_thing, monster_level, - BEH_SLEEP, MHITNOT, true, vx, vy, false ); + if (monster_type_thing.mid != -1) + place_monster( not_used, monster_type_thing.mid, monster_level, + monster_type_thing.generate_awake? + BEH_WANDER : BEH_SLEEP, + MHITNOT, true, vx, vy, false ); } // again, this seems odd, given that this is just one of many diff --git a/crawl-ref/source/mapdef.cc b/crawl-ref/source/mapdef.cc index 87ae583cb1..a3ba920550 100644 --- a/crawl-ref/source/mapdef.cc +++ b/crawl-ref/source/mapdef.cc @@ -573,10 +573,10 @@ int mons_list::fix_demon(int demon) const return (summon_any_demon( demon )); } -int mons_list::pick_monster(mons_spec_slot &slot) +mons_spec mons_list::pick_monster(mons_spec_slot &slot) { int totweight = 0; - int pick = RANDOM_MONSTER; + mons_spec pick; for (mons_spec_list::iterator i = slot.mlist.begin(); i != slot.mlist.end(); ++i) @@ -584,30 +584,30 @@ int mons_list::pick_monster(mons_spec_slot &slot) const int weight = i->genweight; if (random2(totweight += weight) < weight) { - pick = i->mid; + pick = *i; - if (pick < 0 && i->fix_mons) - pick = i->mid = fix_demon(pick); + if (pick.mid < 0 && pick.fix_mons) + pick.mid = i->mid = fix_demon(pick.mid); } } - if (pick < 0) - pick = fix_demon(pick); + if (pick.mid < 0) + pick = fix_demon(pick.mid); if (slot.fix_slot) { slot.mlist.clear(); - slot.mlist.push_back( mons_spec(pick) ); + slot.mlist.push_back( pick ); slot.fix_slot = false; } return (pick); } -int mons_list::get_monster(int index) +mons_spec mons_list::get_monster(int index) { if (index < 0 || index >= (int) mons.size()) - return (RANDOM_MONSTER); + return mons_spec(RANDOM_MONSTER); return (pick_monster( mons[index] )); } @@ -633,6 +633,7 @@ mons_list::mons_spec_slot mons_list::parse_mons_spec(std::string spec) weight = 10; const bool fixmons = strip_tag(s, "fix_mons"); + const bool generate_awake = strip_tag(s, "generate_awake"); trim_string(s); const int mid = mons_by_name(s); @@ -643,7 +644,7 @@ mons_list::mons_spec_slot mons_list::parse_mons_spec(std::string spec) return (slot); } - slot.mlist.push_back( mons_spec(mid, weight, fixmons) ); + slot.mlist.push_back( mons_spec(mid, weight, fixmons, generate_awake) ); } return (slot); diff --git a/crawl-ref/source/mapdef.h b/crawl-ref/source/mapdef.h index b0f0d23818..52ce7ecf3d 100644 --- a/crawl-ref/source/mapdef.h +++ b/crawl-ref/source/mapdef.h @@ -84,6 +84,20 @@ private: bool solid_checked; }; +struct mons_spec +{ + int mid; + int genweight; + bool fix_mons; + bool generate_awake; + + mons_spec(int id = RANDOM_MONSTER, int gw = 10, bool _fixmons = false, + bool awaken = false) + : mid(id), genweight(gw), fix_mons(_fixmons), generate_awake(awaken) + { + } +}; + class mons_list { public: @@ -91,7 +105,7 @@ public: void clear(); - int get_monster(int index); + mons_spec get_monster(int index); // Returns an error string if the monster is unrecognised. std::string add_mons(const std::string &s); @@ -99,17 +113,6 @@ public: size_t size() const { return mons.size(); } private: - struct mons_spec - { - int mid; - int genweight; - bool fix_mons; - - mons_spec(int id = RANDOM_MONSTER, int gw = 10, bool _fixmons = false) - : mid(id), genweight(gw), fix_mons(_fixmons) - { - } - }; typedef std::vector mons_spec_list; struct mons_spec_slot @@ -131,7 +134,7 @@ private: private: int mons_by_name(std::string name) const; mons_spec_slot parse_mons_spec(std::string spec); - int pick_monster(mons_spec_slot &slot); + mons_spec pick_monster(mons_spec_slot &slot); int fix_demon(int id) const; private: -- cgit v1.2.3-54-g00ecf