summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mon-chimera.cc
diff options
context:
space:
mode:
authorPete Hurst <pete@streamuniverse.tv>2013-06-14 13:52:47 +0100
committerPete Hurst <pete@streamuniverse.tv>2013-06-21 18:26:18 +0100
commite8f99bc6796333c491081ae433531b4cce2d82d5 (patch)
tree6f2d86fefc0dee1ca9623fb46339dcebc5607c7c /crawl-ref/source/mon-chimera.cc
parent92e16063525814529dc7614239ea6e335121c41c (diff)
downloadcrawl-ref-e8f99bc6796333c491081ae433531b4cce2d82d5.tar.gz
crawl-ref-e8f99bc6796333c491081ae433531b4cce2d82d5.zip
Allow chimera to fly if any base creatures are winged
Diffstat (limited to 'crawl-ref/source/mon-chimera.cc')
-rw-r--r--crawl-ref/source/mon-chimera.cc29
1 files changed, 22 insertions, 7 deletions
diff --git a/crawl-ref/source/mon-chimera.cc b/crawl-ref/source/mon-chimera.cc
index 53c104bcb4..0f31e99d28 100644
--- a/crawl-ref/source/mon-chimera.cc
+++ b/crawl-ref/source/mon-chimera.cc
@@ -53,24 +53,30 @@ static void apply_chimera_part(monster* mon, monster_type part, int partnum)
if (mons_is_batty(&dummy))
mon->props["chimera_batty"].get_int() = partnum;
+ else if (mons_flies(&dummy))
+ mon->props["chimera_wings"].get_int() = partnum;
}
-monster_type get_chimera_part(monster* mon, int partnum)
+monster_type get_chimera_part(const monster* mon, int partnum)
{
ASSERT_RANGE(partnum,1,4);
if (partnum == 1) return mon->base_monster;
- if (partnum == 2) return static_cast<monster_type>(mon->props["chimera_part_2"].get_int());
- if (partnum == 3) return static_cast<monster_type>(mon->props["chimera_part_3"].get_int());
- return MONS_NO_MONSTER;
+ if (partnum == 2 && mon->props.exists("chimera_part_2"))
+ return static_cast<monster_type>(mon->props["chimera_part_2"].get_int());
+ if (partnum == 3 && mon->props.exists("chimera_part_3"))
+ return static_cast<monster_type>(mon->props["chimera_part_3"].get_int());
+ return MONS_PROGRAM_BUG;
}
monster_type get_chimera_part(const monster_info* mi, int partnum)
{
ASSERT_RANGE(partnum,1,4);
if (partnum == 1) return mi->base_type;
- if (partnum == 2) return static_cast<monster_type>(mi->props["chimera_part_2"].get_int());
- if (partnum == 3) return static_cast<monster_type>(mi->props["chimera_part_3"].get_int());
- return MONS_NO_MONSTER;
+ if (partnum == 2 && mi->props.exists("chimera_part_2"))
+ return static_cast<monster_type>(mi->props["chimera_part_2"].get_int());
+ if (partnum == 3 && mi->props.exists("chimera_part_3"))
+ return static_cast<monster_type>(mi->props["chimera_part_3"].get_int());
+ return MONS_PROGRAM_BUG;
}
bool chimera_is_batty(const monster* mon)
@@ -78,6 +84,15 @@ bool chimera_is_batty(const monster* mon)
return mon->props.exists("chimera_batty");
}
+monster_type get_chimera_wings(const monster* mon)
+{
+ if (chimera_is_batty(mon))
+ return get_chimera_part(mon, mon->props["chimera_batty"].get_int());
+ if (mon->props.exists("chimera_wings"))
+ return get_chimera_part(mon, mon->props["chimera_wings"].get_int());
+ return MONS_NO_MONSTER;
+}
+
string monster_info::chimera_part_names() const
{
if (!props.exists("chimera_part_2") || !props.exists("chimera_part_3"))