summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-01-29 15:42:46 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-01-29 15:42:46 +0000
commit9295e4fb393749bedc6ccdbe99c5147435949d35 (patch)
treeb3e70eb49b9f5b1f93255eaca78e63254c30c89b /crawl-ref
parent95ae20f32661c0f904607c46471a4324ce470e34 (diff)
downloadcrawl-ref-9295e4fb393749bedc6ccdbe99c5147435949d35.tar.gz
crawl-ref-9295e4fb393749bedc6ccdbe99c5147435949d35.zip
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
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/dat/vaults.des6
-rw-r--r--crawl-ref/source/direct.cc1
-rw-r--r--crawl-ref/source/dungeon.cc18
-rw-r--r--crawl-ref/source/mapdef.cc23
-rw-r--r--crawl-ref/source/mapdef.h29
5 files changed, 41 insertions, 36 deletions
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> 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: