summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/monstuff.cc
diff options
context:
space:
mode:
authorDavid Lawrence Ramsey <dolorous@users.sourceforge.net>2009-10-12 20:14:49 -0500
committerDavid Lawrence Ramsey <dolorous@users.sourceforge.net>2009-10-12 20:14:49 -0500
commit9cc9c1350516b56581c8bf86aafa695677d819f9 (patch)
tree0107beb99991e6e723b270388755d7e0b3033a37 /crawl-ref/source/monstuff.cc
parent533796c8cabcf71b654d45531bb25f0ba3af1506 (diff)
downloadcrawl-ref-9cc9c1350516b56581c8bf86aafa695677d819f9.tar.gz
crawl-ref-9cc9c1350516b56581c8bf86aafa695677d819f9.zip
Apply n78291's patch in [2877049], with a few tweaks, to expand Jiyva's
wrath, allow uncancelable transformations as part of it, and adjust his Slimify power.
Diffstat (limited to 'crawl-ref/source/monstuff.cc')
-rw-r--r--crawl-ref/source/monstuff.cc55
1 files changed, 51 insertions, 4 deletions
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 8df057e503..daf446fb0a 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -2531,6 +2531,54 @@ bool monster_blink(monsters *monster, bool quiet)
return (true);
}
+bool mon_can_be_slimified(monsters *monster)
+{
+ return (mons_holiness(monster) == MH_UNDEAD
+ || mons_holiness(monster) == MH_NATURAL
+ && !mons_is_slime(monster));
+}
+
+void slimify_monster(monsters *mon, bool hostile)
+{
+ if (mons_holiness(mon) == MH_UNDEAD)
+ monster_polymorph(mon, MONS_DEATH_OOZE);
+ else
+ {
+ const int x = mon->hit_dice + (coinflip() ? 1 : -1) * random2(5);
+
+ if (x < 3)
+ monster_polymorph(mon, MONS_OOZE);
+ else if (x >= 3 && x < 5)
+ monster_polymorph(mon, MONS_JELLY);
+ else if (x >= 5 && x < 7)
+ monster_polymorph(mon, MONS_BROWN_OOZE);
+ else if (x >= 7 && x <= 11)
+ {
+ if (coinflip())
+ monster_polymorph(mon, MONS_SLIME_CREATURE);
+ else
+ monster_polymorph(mon, MONS_GIANT_AMOEBA);
+ }
+ else
+ {
+ if (coinflip())
+ monster_polymorph(mon, MONS_ACID_BLOB);
+ else
+ monster_polymorph(mon, MONS_AZURE_JELLY);
+ }
+ }
+
+ if (!mons_eats_items(mon))
+ mon->add_ench(ENCH_EAT_ITEMS);
+
+ if (!hostile)
+ mon->attitude = ATT_STRICT_NEUTRAL;
+ else
+ mon->attitude = ATT_HOSTILE;
+
+ mons_make_god_gift(mon, GOD_JIYVA);
+}
+
static void _set_random_target(monsters* mon)
{
mon->target = random_in_bounds(); // If we don't find anything better
@@ -5533,12 +5581,12 @@ bool mons_avoids_cloud(const monsters *monster, cloud_struct cloud,
if (monster->flight_mode() != FL_NONE)
return (false);
- // These don't care about deep water.
+ // These don't care about deep water.
if (monster_habitable_grid(monster, DNGN_DEEP_WATER))
return (false);
// This position could become deep water, and they might drown.
- if (grd(cloud.pos) == DNGN_SHALLOW_WATER)
+ if (grd(cloud.pos) == DNGN_SHALLOW_WATER)
return (true);
// Otherwise, it's safe for everyone else.
@@ -9458,8 +9506,7 @@ static void _mons_in_cloud(monsters *monster)
hurted += ((4 * random2(3)) - random2(monster->ac));
wake = true;
}
-
- break;
+ break;
case CLOUD_MUTAGENIC:
simple_monster_message(monster, " is engulfed in a mutagenic fog!");