summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-27 12:20:50 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-27 12:20:50 +0000
commit2fd7717a242e81f52a1e6ca1f4b6a9c94900bc08 (patch)
tree3f849a505eae91eee245f4ac7892c4015cdd9c4b /crawl-ref
parent962e0244aac6795b08d6106fdf4751fd5cb8f780 (diff)
downloadcrawl-ref-2fd7717a242e81f52a1e6ca1f4b6a9c94900bc08.tar.gz
crawl-ref-2fd7717a242e81f52a1e6ca1f4b6a9c94900bc08.zip
Fixed unique demon lord stats so they're more of a challenge. May need some tweaks, some of them may be too nasty now (such as Gloorx Vloq).
Fixed broken monster self-teleport. Players do not get to resist dispel undead - may need to revisit this, low level necro ghosts could destroy undead characters. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3345 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/beam.cc1
-rw-r--r--crawl-ref/source/mon-data.h70
-rw-r--r--crawl-ref/source/mon-spll.h22
-rw-r--r--crawl-ref/source/mon-util.cc6
-rw-r--r--crawl-ref/source/monstuff.cc65
-rw-r--r--crawl-ref/source/mstuff2.cc12
6 files changed, 103 insertions, 73 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 445aaf25a1..a3694362d6 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -3245,6 +3245,7 @@ static int affect_player( bolt &beam )
&& beam.flavour != BEAM_INVISIBILITY
&& beam.flavour != BEAM_HEALING
&& beam.flavour != BEAM_POLYMORPH
+ && beam.flavour != BEAM_DISPEL_UNDEAD
&& ((beam.flavour != BEAM_TELEPORT && beam.flavour != BEAM_BANISH)
|| !beam.aimed_at_feet)
&& you_resist_magic( beam.ench_power ))
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 5b1d63de84..4c1fa40ed7 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -1139,11 +1139,11 @@
// random
{
MONS_BEAST, '4', BROWN, "beast",
- M_EVIL,
+ M_EVIL | M_FIGHTER,
MR_NO_FLAGS,
0, 10, MONS_BEAST, MONS_BEAST, MH_DEMONIC, -3,
- { {AT_CLAW, AF_PLAIN, 12}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 5, 3, 5, 0 },
+ { {AT_BITE, AF_PLAIN, 28}, {AT_CLAW, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
+ { 7, 9, 6, 0 },
0, 0, MST_NO_SPELLS, CE_CONTAMINATED, Z_NOZOMBIE, S_RANDOM, I_NORMAL,
HT_LAND, 0, DEFAULT_ENERGY, MONUSE_OPEN_DOORS, SIZE_LARGE
},
@@ -2461,10 +2461,10 @@
MONS_MNOLEG, '&', LIGHTGREEN, "Mnoleg",
M_FIGHTER | M_SEE_INVIS | M_SPELLCASTER | M_SPEAKS | M_EVIL | M_UNIQUE,
MR_RES_ELEC | MR_RES_POISON | MR_RES_FIRE,
- 0, 25, MONS_MNOLEG, MONS_MNOLEG, MH_DEMONIC, MAG_IMMUNE,
+ 0, 15, MONS_MNOLEG, MONS_MNOLEG, MH_DEMONIC, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 35}, {AT_HIT, AF_PLAIN, 23}, AT_NO_ATK, AT_NO_ATK },
- { 17, 0, 0, 199 },
- 10, 13, MST_MNOLEG, CE_CONTAMINATED, Z_NOZOMBIE, S_BUZZ, I_HIGH,
+ { 17, 0, 0, 250 },
+ 10, 25, MST_MNOLEG, CE_CONTAMINATED, Z_NOZOMBIE, S_BUZZ, I_HIGH,
HT_LAND, 13, DEFAULT_ENERGY, MONUSE_OPEN_DOORS, SIZE_LARGE
},
@@ -2472,21 +2472,21 @@
MONS_LOM_LOBON, '&', LIGHTBLUE, "Lom Lobon",
M_FIGHTER | M_LEVITATE | M_SEE_INVIS | M_SPELLCASTER | M_SPEAKS | M_EVIL | M_UNIQUE,
MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
- 0, 25, MONS_LOM_LOBON, MONS_LOM_LOBON, MH_DEMONIC, MAG_IMMUNE,
+ 0, 15, MONS_LOM_LOBON, MONS_LOM_LOBON, MH_DEMONIC, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 19, 0, 0, 223 },
- 10, 7, MST_LOM_LOBON, CE_CONTAMINATED, Z_NOZOMBIE, S_SCREAM, I_HIGH,
- HT_LAND, 8, DEFAULT_ENERGY, MONUSE_OPEN_DOORS, SIZE_LARGE
+ { 19, 0, 0, 250 },
+ 10, 20, MST_LOM_LOBON, CE_CONTAMINATED, Z_NOZOMBIE, S_SCREAM, I_HIGH,
+ HT_LAND, 10, DEFAULT_ENERGY, MONUSE_OPEN_DOORS, SIZE_LARGE
},
{
MONS_CEREBOV, '&', RED, "Cerebov",
M_FIGHTER | M_SPELLCASTER | M_SEE_INVIS | M_SPEAKS | M_EVIL | M_UNIQUE,
MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE,
- 0, 25, MONS_CEREBOV, MONS_CEREBOV, MH_DEMONIC, -6,
+ 0, 15, MONS_CEREBOV, MONS_CEREBOV, MH_DEMONIC, -6,
{ {AT_HIT, AF_PLAIN, 60}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 21, 0, 0, 253 },
- 15, 8, MST_CEREBOV, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_NORMAL,
+ { 21, 0, 0, 650 },
+ 30, 8, MST_CEREBOV, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_NORMAL,
HT_LAND, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_GIANT,
},
@@ -2494,11 +2494,11 @@
MONS_GLOORX_VLOQ, '&', DARKGREY, "Gloorx Vloq",
M_FIGHTER | M_LEVITATE | M_SEE_INVIS | M_SPELLCASTER | M_SPEAKS | M_EVIL | M_UNIQUE,
MR_RES_POISON | MR_RES_COLD | MR_RES_ELEC,
- 0, 25, MONS_GLOORX_VLOQ, MONS_GLOORX_VLOQ, MH_DEMONIC, -14,
- { {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 16, 0, 0, 234 },
+ 0, 15, MONS_GLOORX_VLOQ, MONS_GLOORX_VLOQ, MH_DEMONIC, -14,
+ { {AT_HIT, AF_PLAIN, 45}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 16, 0, 0, 350 },
10, 10, MST_GLOORX_VLOQ, CE_CONTAMINATED, Z_NOZOMBIE, S_MOAN, I_HIGH,
- HT_LAND, 10, DEFAULT_ENERGY, MONUSE_OPEN_DOORS, SIZE_LARGE
+ HT_LAND, 20, DEFAULT_ENERGY, MONUSE_OPEN_DOORS, SIZE_LARGE
},
/* ******************************************************************
@@ -3111,9 +3111,9 @@
M_FIGHTER | M_SPELLCASTER | M_SEE_INVIS | M_SPEAKS | M_EVIL | M_FLIES
| M_UNIQUE,
MR_NO_FLAGS,
- 0, 25, MONS_GERYON, MONS_GERYON, MH_DEMONIC, -6,
+ 0, 15, MONS_GERYON, MONS_GERYON, MH_DEMONIC, -6,
{ {AT_HIT, AF_PLAIN, 35}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 15, 0, 0, 240 },
+ { 15, 0, 0, 300 },
15, 6, MST_GERYON, CE_CONTAMINATED, Z_NOZOMBIE, S_ROAR, I_NORMAL,
HT_LAND, 10, DEFAULT_ENERGY, MONUSE_STARTING_EQUIPMENT, SIZE_GIANT,
},
@@ -3122,11 +3122,11 @@
MONS_DISPATER, '&', MAGENTA, "Dispater",
M_FIGHTER | M_SPELLCASTER | M_SEE_INVIS | M_SPEAKS | M_EVIL | M_UNIQUE,
MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE | MR_RES_COLD,
- 0, 25, MONS_DISPATER, MONS_DISPATER, MH_DEMONIC, -10,
+ 0, 15, MONS_DISPATER, MONS_DISPATER, MH_DEMONIC, -10,
{ {AT_HIT, AF_PLAIN, 50}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 16, 0, 0, 222 },
- 15, 3, MST_DISPATER, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
- HT_LAND, 6, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_LARGE
+ { 16, 0, 0, 450 },
+ 40, 3, MST_DISPATER, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
+ HT_LAND, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_LARGE
},
{
@@ -3135,9 +3135,9 @@
MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE,
0, 25, MONS_ASMODEUS, MONS_ASMODEUS, MH_DEMONIC, -12,
{ {AT_HIT, AF_PLAIN, 50}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 17, 0, 0, 245 },
- 12, 7, MST_ASMODEUS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
- HT_LAND, 9, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_LARGE
+ { 17, 0, 0, 450 },
+ 30, 7, MST_ASMODEUS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
+ HT_LAND, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_LARGE
},
// Antaeus is now demonic so that he'll resist torment. -- bwr
@@ -3145,22 +3145,22 @@
MONS_ANTAEUS, 'C', LIGHTCYAN, "Antaeus",
M_FIGHTER | M_SPELLCASTER | M_SPEAKS | M_UNIQUE,
MR_RES_ELEC | MR_VUL_FIRE | MR_RES_COLD,
- 0, 25, MONS_HILL_GIANT, MONS_ANTAEUS, MH_DEMONIC, -9,
- { {AT_HIT, AF_COLD, 75}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 22, 0, 0, 250 },
- 10, 4, MST_ANTAEUS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
- HT_LAND, 7, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_GIANT,
+ 0, 15, MONS_HILL_GIANT, MONS_ANTAEUS, MH_DEMONIC, -9,
+ { {AT_HIT, AF_COLD, 75}, {AT_HIT, AF_COLD, 30}, AT_NO_ATK, AT_NO_ATK },
+ { 22, 0, 0, 700 },
+ 28, 4, MST_ANTAEUS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
+ HT_LAND, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_GIANT,
},
{
MONS_ERESHKIGAL, '&', WHITE, "Ereshkigal",
M_SPELLCASTER | M_SEE_INVIS | M_SPEAKS | M_EVIL | M_UNIQUE,
MR_RES_ELEC | MR_RES_POISON | MR_RES_COLD,
- 0, 25, MONS_ERESHKIGAL, MONS_ERESHKIGAL, MH_DEMONIC, -10,
+ 0, 15, MONS_ERESHKIGAL, MONS_ERESHKIGAL, MH_DEMONIC, -10,
{ {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 18, 0, 0, 238 },
- 15, 6, MST_ERESHKIGAL, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
- HT_LAND, 9, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_LARGE
+ { 18, 0, 0, 250 },
+ 10, 30, MST_ERESHKIGAL, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT, I_HIGH,
+ HT_LAND, 14, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_LARGE
},
{
diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h
index 7a49b88d9c..0e49b5ed2c 100644
--- a/crawl-ref/source/mon-spll.h
+++ b/crawl-ref/source/mon-spll.h
@@ -349,7 +349,7 @@
SPELL_BOLT_OF_DRAINING,
SPELL_NO_SPELL,
SPELL_SYMBOL_OF_TORMENT,
- SPELL_NO_SPELL,
+ SPELL_DISPEL_UNDEAD,
SPELL_SUMMON_DEMON }
},
@@ -497,8 +497,8 @@
{
SPELL_BOLT_OF_DRAINING,
SPELL_BOLT_OF_COLD,
- SPELL_SUMMON_DEMON,
- SPELL_PAIN,
+ SPELL_SUMMON_GREATER_DEMON,
+ SPELL_SYMBOL_OF_TORMENT,
SPELL_PARALYSE,
SPELL_LESSER_HEALING }
},
@@ -515,7 +515,7 @@
{ MST_MNOLEG,
{
- SPELL_SUMMON_DEMON,
+ SPELL_SUMMON_GREATER_DEMON,
SPELL_SMITING,
SPELL_INVISIBILITY,
SPELL_POLYMORPH_OTHER,
@@ -527,7 +527,7 @@
{
SPELL_LIGHTNING_BOLT,
SPELL_BOLT_OF_COLD,
- SPELL_LESSER_HEALING,
+ SPELL_GREATER_HEALING,
SPELL_SUMMON_DEMON,
SPELL_TELEPORT_SELF,
SPELL_TELEPORT_SELF }
@@ -537,20 +537,20 @@
{
SPELL_BOLT_OF_FIRE,
SPELL_BOLT_OF_IRON,
- SPELL_NO_SPELL,
+ SPELL_HASTE,
SPELL_FIREBALL,
- SPELL_CALL_IMP,
- SPELL_NO_SPELL }
+ SPELL_SUMMON_GREATER_DEMON,
+ SPELL_HASTE }
},
{ MST_GLOORX_VLOQ,
{
SPELL_POISON_ARROW,
- SPELL_SLOW,
+ SPELL_MIASMA,
SPELL_SUMMON_DEMON,
SPELL_BOLT_OF_DRAINING,
- SPELL_SUMMON_DEMON,
- SPELL_NO_SPELL }
+ SPELL_DISPEL_UNDEAD,
+ SPELL_INVISIBILITY }
},
{ MST_TITAN,
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index d7f8d89bfb..c49abd1bd9 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -1924,6 +1924,7 @@ bool ms_useful_fleeing_out_of_sight( const monsters *mon, spell_type monspell )
case SPELL_HASTE:
case SPELL_INVISIBILITY:
case SPELL_LESSER_HEALING:
+ case SPELL_GREATER_HEALING:
case SPELL_ANIMATE_DEAD:
return (true);
@@ -1956,6 +1957,7 @@ bool ms_low_hitpoint_cast( const monsters *mon, spell_type monspell )
case SPELL_TELEPORT_SELF:
case SPELL_TELEPORT_OTHER:
case SPELL_LESSER_HEALING:
+ case SPELL_GREATER_HEALING:
ret = true;
break;
@@ -2036,6 +2038,7 @@ bool ms_waste_of_time( const monsters *mon, spell_type monspell )
break;
case SPELL_LESSER_HEALING:
+ case SPELL_GREATER_HEALING:
if (mon->hit_points > mon->max_hit_points / 2)
ret = true;
break;
@@ -2125,6 +2128,7 @@ static bool ms_ranged_spell( spell_type monspell )
{
case SPELL_HASTE:
case SPELL_LESSER_HEALING:
+ case SPELL_GREATER_HEALING:
case SPELL_TELEPORT_SELF:
case SPELL_INVISIBILITY:
case SPELL_BLINK:
@@ -4839,7 +4843,7 @@ int monsters::base_speed(int mcls)
speed = 6 + random2avg(7, 2);
break;
case MONS_BEAST:
- speed = 8 + random2(5);
+ speed = 10 + random2(8);
break;
}
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 862e75da5d..fdce44abda 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -3701,37 +3701,42 @@ static bool handle_spell( monsters *monster, bolt & beem )
else
{
spell_type spell_cast = SPELL_NO_SPELL;
- monster_spells hspell_pass = monster->spells;
+ monster_spells hspell_pass(monster->spells);
if (!enemies_around(monster))
{
// forces the casting of dig when player not visible - this is EVIL!
- if (hspell_pass[4] == SPELL_DIG && monster->behaviour == BEH_SEEK)
+ if (monster->has_spell(SPELL_DIG)
+ && monster->behaviour == BEH_SEEK)
{
spell_cast = SPELL_DIG;
finalAnswer = true;
}
- else if (hspell_pass[2] == SPELL_LESSER_HEALING
+ else if ((monster->has_spell(SPELL_LESSER_HEALING)
+ || monster->has_spell(SPELL_GREATER_HEALING))
&& monster->hit_points < monster->max_hit_points)
{
// The player's out of sight!
// Quick, let's take a turn to heal ourselves. -- bwr
- spell_cast = SPELL_LESSER_HEALING;
+ spell_cast =
+ monster->has_spell(SPELL_GREATER_HEALING)?
+ SPELL_GREATER_HEALING : SPELL_LESSER_HEALING;
finalAnswer = true;
}
else if (monster->behaviour == BEH_FLEE)
{
// Since the player isn't around, we'll extend the monster's
// normal fleeing choices to include the self-enchant slot.
- if (ms_useful_fleeing_out_of_sight(monster,hspell_pass[5]))
- {
- spell_cast = hspell_pass[5];
- finalAnswer = true;
- }
- else if (ms_useful_fleeing_out_of_sight(monster,hspell_pass[2]))
+
+ int foundcount = 0;
+ for (int i = NUM_MONSTER_SPELL_SLOTS - 1; i >= 0; --i)
{
- spell_cast = hspell_pass[2];
- finalAnswer = true;
+ if (ms_useful_fleeing_out_of_sight(monster, hspell_pass[i])
+ && one_chance_in(++foundcount))
+ {
+ spell_cast = hspell_pass[i];
+ finalAnswer = true;
+ }
}
}
else if (monster->foe == MHITYOU && !monsterNearby)
@@ -3745,11 +3750,11 @@ static bool handle_spell( monsters *monster, bolt & beem )
if (!finalAnswer && enemies_around(monster) && mons_is_caught(monster)
&& one_chance_in(4))
{
- for (int i = 0; i < 6; i++)
+ for (int i = 0; i < NUM_MONSTER_SPELL_SLOTS; i++)
{
if (ms_quick_get_away( monster, hspell_pass[i] ))
{
- spell_cast = hspell_pass[5];
+ spell_cast = hspell_pass[i];
finalAnswer = true;
break;
}
@@ -3764,17 +3769,26 @@ static bool handle_spell( monsters *monster, bolt & beem )
// Note: There should always be at least some chance we don't
// get here... even if the monster is on its last HP. That
// way we don't have to worry about monsters infinitely casting
- // Healing on themselves (e.g. orc priests).
+ // Healing on themselves (e.g. orc high priests).
if (monster->behaviour == BEH_FLEE
&& ms_low_hitpoint_cast( monster, hspell_pass[5] ))
{
spell_cast = hspell_pass[5];
finalAnswer = true;
}
- else if (ms_low_hitpoint_cast( monster, hspell_pass[2] ))
+
+ if (!finalAnswer)
{
- spell_cast = hspell_pass[2];
- finalAnswer = true;
+ int found_spell = 0;
+ for (int i = 0; i < NUM_MONSTER_SPELL_SLOTS; ++i)
+ {
+ if (ms_low_hitpoint_cast( monster, hspell_pass[i] )
+ && one_chance_in(++found_spell))
+ {
+ spell_cast = hspell_pass[i];
+ finalAnswer = true;
+ }
+ }
}
}
@@ -3787,18 +3801,16 @@ static bool handle_spell( monsters *monster, bolt & beem )
return (false);
}
- // should monster not have selected dig by now, it never will:
- if (hspell_pass[4] == SPELL_DIG)
- hspell_pass[4] = SPELL_NO_SPELL;
-
// remove healing/invis/haste if we don't need them
int num_no_spell = 0;
- for (int i = 0; i < 6; i++)
+ for (int i = 0; i < NUM_MONSTER_SPELL_SLOTS; i++)
{
if (hspell_pass[i] == SPELL_NO_SPELL)
num_no_spell++;
- else if (ms_waste_of_time( monster, hspell_pass[i] ))
+ else if (ms_waste_of_time( monster, hspell_pass[i] )
+ // should monster not have selected dig by now, it never will:
+ || hspell_pass[i] == SPELL_DIG)
{
hspell_pass[i] = SPELL_NO_SPELL;
num_no_spell++;
@@ -3806,8 +3818,11 @@ static bool handle_spell( monsters *monster, bolt & beem )
}
// If no useful spells... cast no spell.
- if (num_no_spell == 6 && draco_breath == SPELL_NO_SPELL)
+ if (num_no_spell == NUM_MONSTER_SPELL_SLOTS
+ && draco_breath == SPELL_NO_SPELL)
+ {
return (false);
+ }
// up to four tries to pick a spell.
for (int loopy = 0; loopy < 4; loopy ++)
diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc
index ff02fa2ebd..31054162f6 100644
--- a/crawl-ref/source/mstuff2.cc
+++ b/crawl-ref/source/mstuff2.cc
@@ -530,6 +530,14 @@ void mons_cast(monsters *monster, bolt &pbolt, spell_type spell_cast)
default:
break;
+ case SPELL_GREATER_HEALING:
+ if (heal_monster(monster, 50 + random2avg(monster->hit_dice * 10, 2),
+ false))
+ {
+ simple_monster_message(monster, " is healed.");
+ }
+ return;
+
case SPELL_BERSERKER_RAGE:
monster->go_berserk(true);
return;
@@ -854,6 +862,7 @@ void setup_mons_cast(const monsters *monster, struct bolt &pbolt, int spell_cast
switch (spell_cast)
{
case SPELL_SUMMON_SMALL_MAMMAL:
+ case SPELL_GREATER_HEALING:
case SPELL_VAMPIRE_SUMMON:
case SPELL_SHADOW_CREATURES: // summon anything appropriate for level
case SPELL_FAKE_RAKSHASA_SUMMON:
@@ -937,7 +946,8 @@ void monster_teleport(struct monsters *monster, bool instan, bool silent)
{
if (!silent)
simple_monster_message(monster, " looks slightly unstable.");
- monster->add_ench( mon_enchant(ENCH_TP, coinflip()? 3 : 4) );
+ monster->add_ench( mon_enchant(ENCH_TP, 0, KC_OTHER,
+ coinflip()? 2 : 3) );
}
return;