summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/dat/descript/ability.txt1
-rw-r--r--crawl-ref/source/dat/descript/spells.txt2
-rw-r--r--crawl-ref/source/monstuff.cc38
-rw-r--r--crawl-ref/source/transfor.cc8
4 files changed, 41 insertions, 8 deletions
diff --git a/crawl-ref/source/dat/descript/ability.txt b/crawl-ref/source/dat/descript/ability.txt
index 2d60ad5151..161a34deda 100644
--- a/crawl-ref/source/dat/descript/ability.txt
+++ b/crawl-ref/source/dat/descript/ability.txt
@@ -50,6 +50,7 @@ Breathe a jet of steam at a targeted monster.
Bat Form
Turn into a speedy vampire bat. In bat form you cannot interact with items in any form (except picking them up or dropping them), nor cast spells. Note that Bat Form will decrease your current strength while increasing your dexterity. Thus, you won't be able to change form if your strength is too low.
+Vampires below experience level 10 will be unable to transform if wearing cursed equipment.
%%%%
Spit Acid
diff --git a/crawl-ref/source/dat/descript/spells.txt b/crawl-ref/source/dat/descript/spells.txt
index ff3be0f462..31dd72eb29 100644
--- a/crawl-ref/source/dat/descript/spells.txt
+++ b/crawl-ref/source/dat/descript/spells.txt
@@ -565,7 +565,7 @@ This spell smites one creature of the caster's choice.
%%%%
Spider Form
-This spell temporarily transforms the caster into a venomous, spider-like creature. Spellcasting is slightly more difficult in this form. This spell is not powerful enough to allow the caster to slip out of cursed equipment.
+This spell temporarily transforms the caster into a venomous, spider-like creature. Spellcasting is slightly more difficult in this form. This spell is not powerful enough to allow the caster to meld with their cursed equipment.
%%%%
Static Discharge
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 71d91827e3..4008f11a12 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -3673,9 +3673,9 @@ static bool _allied_monster_at(monsters *mon, coord_def a, coord_def b,
if (mons_is_stationary(&menv[mgrd(pos[i])]))
continue;
- // Hostile monsters of animal-like intelligence only move aside
- // for monsters of the same type.
- if (mons_intel(mon) < I_NORMAL && !mons_wont_attack(mon)
+ // Hostile monsters of normal intelligence only move aside for
+ // monsters of the same type.
+ if (mons_intel(mon) <= I_NORMAL && !mons_wont_attack(mon)
&& mons_genus(mon->type) != mons_genus((&menv[mgrd(pos[i])])->type))
{
continue;
@@ -3868,8 +3868,8 @@ static void _handle_movement(monsters *monster)
if (!good_move[0][1] && !good_move[2][1]
&& (good_move[0][mmov.y+1] || good_move[2][mmov.y+1])
&& (_allied_monster_at(monster, coord_def(-1, -mmov.y),
- coord_def(0, -mmov.y),
- coord_def(1, -mmov.y))
+ coord_def(0, -mmov.y),
+ coord_def(1, -mmov.y))
|| mons_intel(monster) >= I_NORMAL
&& !mons_wont_attack(monster)
&& _ranged_allied_monster_in_dir(monster,
@@ -3881,6 +3881,34 @@ static void _handle_movement(monsters *monster)
mmov.x = 1;
}
}
+ else // We're moving diagonally.
+ {
+ if (good_move[mmov.x+1][1])
+ {
+ if (!good_move[1][mmov.y+1]
+ && (_allied_monster_at(monster, coord_def(-mmov.x, -1),
+ coord_def(-mmov.x, 0),
+ coord_def(-mmov.x, 1))
+ || mons_intel(monster) >= I_NORMAL
+ && !mons_wont_attack(monster)
+ && _ranged_allied_monster_in_dir(monster,
+ coord_def(-mmov.x, -mmov.y))))
+ {
+ mmov.y = 0;
+ }
+ }
+ else if (good_move[1][mmov.y+1]
+ && (_allied_monster_at(monster, coord_def(-1, -mmov.y),
+ coord_def(0, -mmov.x),
+ coord_def(1, -mmov.x))
+ || mons_intel(monster) >= I_NORMAL
+ && !mons_wont_attack(monster)
+ && _ranged_allied_monster_in_dir(monster,
+ coord_def(-mmov.x, -mmov.y))))
+ {
+ mmov.x = 0;
+ }
+ }
}
}
diff --git a/crawl-ref/source/transfor.cc b/crawl-ref/source/transfor.cc
index 0643dbef37..1fb46961d4 100644
--- a/crawl-ref/source/transfor.cc
+++ b/crawl-ref/source/transfor.cc
@@ -207,10 +207,14 @@ static bool _tran_may_meld_cursed(int transformation)
{
switch (transformation)
{
+ case TRAN_BAT:
+ // Vampires of certain Xp may transform into bats even
+ // with cursed gear.
+ if (you.species == SP_VAMPIRE && you.experience_level >= 10)
+ return (true);
+ // intentional fall-through
case TRAN_SPIDER:
- case TRAN_BAT: // Maybe this should depend on xp?
case TRAN_AIR:
- case TRAN_ICE_BEAST:
return (false);
default:
return (true);