summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/monstuff.cc7
-rw-r--r--crawl-ref/source/spells2.cc10
2 files changed, 13 insertions, 4 deletions
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 8f244f3766..3073e5d492 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -1004,10 +1004,13 @@ void monster_die(monsters *monster, killer_type killer, int i, bool silent)
&& mons_holiness(monster) == MH_NATURAL
&& mons_weight(mons_species(monster->type)))
{
- if (create_monster(
+ const monster_type spectre = mons_species(monster->type);
+ // Don't allow 0-headed hydras to become spectral hydras.
+ if ((spectre != MONS_HYDRA || monster->number)
+ && create_monster(
mgen_data( MONS_SPECTRAL_THING, BEH_FRIENDLY,
0, monster->pos(), you.pet_target,
- 0, mons_species(monster->type),
+ 0, spectre,
monster->number )) != -1)
{
if (death_message)
diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc
index 3044c39009..45e91764a3 100644
--- a/crawl-ref/source/spells2.cc
+++ b/crawl-ref/source/spells2.cc
@@ -460,12 +460,18 @@ static int raise_corpse( int corps, int corx, int cory,
? mitm[corps].props[MONSTER_NUMBER].get_short()
: 0;
+ const monster_type zombie_type =
+ static_cast<monster_type>(mitm[corps].plus);
+
+ // Headless hydras cannot be raised, sorry.
+ if (!number && zombie_type == MONS_HYDRA)
+ return (0);
+
create_monster(
mgen_data(
type, corps_beh, 0,
coord_def(corx, cory), corps_hit,
- 0, static_cast<monster_type>(mitm[corps].plus),
- number));
+ 0, zombie_type, number));
destroy_item(corps);
}