diff options
author | Pete Hurst <pete@streamuniverse.tv> | 2013-06-14 13:52:47 +0100 |
---|---|---|
committer | Pete Hurst <pete@streamuniverse.tv> | 2013-06-21 18:26:18 +0100 |
commit | e8f99bc6796333c491081ae433531b4cce2d82d5 (patch) | |
tree | 6f2d86fefc0dee1ca9623fb46339dcebc5607c7c /crawl-ref/source/mon-chimera.cc | |
parent | 92e16063525814529dc7614239ea6e335121c41c (diff) | |
download | crawl-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.cc | 29 |
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")) |