summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mapdef.cc
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/source/mapdef.cc
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/source/mapdef.cc')
-rw-r--r--crawl-ref/source/mapdef.cc23
1 files changed, 12 insertions, 11 deletions
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);