OSDN Git Service

refactor: extract monst_spell_monst
authordis- <dis.rogue@gmail.com>
Fri, 21 Feb 2014 16:32:18 +0000 (01:32 +0900)
committerdis- <dis.rogue@gmail.com>
Fri, 21 Feb 2014 16:32:18 +0000 (01:32 +0900)
src/externs.h
src/mspells1.c
src/mspells2.c
src/mspells4.c

index b78a66e..06a36d7 100644 (file)
@@ -1573,6 +1573,17 @@ extern void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int
 extern void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type);
 extern void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, int target_type);
 
+/* mspells1.c */
+extern bool clean_shot(int y1, int x1, int y2, int x2, bool is_friend);
+extern bool summon_possible(int y1, int x1);
+extern bool raise_possible(monster_type *m_ptr);
+extern bool dispel_check(int m_idx);
+extern bool spell_is_inate(u16b spell);
+extern bool make_attack_spell(int m_idx);
+extern void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type);
+extern void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type);
+extern void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, int target_type);
+
 /* mspells2.c */
 extern void get_project_point(int sy, int sx, int *ty, int *tx, int flg);
 extern bool monst_spell_monst(int m_idx);
@@ -1584,52 +1595,9 @@ extern void set_rf_masks(s32b *f4, s32b *f5, s32b *f6, int mode);
 
 /* mspells4.c */
 extern bool spell_learnable(int m_idx);
-extern void spell_RF4_SHRIEK(int m_idx, int t_idx, int TARGET_TYPE);;
-extern void spell_RF4_DISPEL(int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF4_ROCKET(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF4_SHOOT(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF4_BREATH(int GF_TYPE, int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF4_BA_NUKE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF4_BA_CHAO(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_ACID(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_ELEC(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_FIRE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_COLD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_POIS(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_NETH(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_WATE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_MANA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_DARK(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_DRAIN_MANA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_MIND_BLAST(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BRAIN_SMASH(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_CAUSE_1(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_CAUSE_2(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_CAUSE_3(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_CAUSE_4(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_ACID(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_ELEC(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_FIRE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_COLD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BA_LITE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_NETH(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_WATE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_MANA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_PLAS(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_BO_ICEE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern int spell_RF5_MISSILE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE);
-extern void spell_RF5_SCARE(int y, int x, int m_idx);
-extern void spell_RF5_BLIND(int y, int x, int m_idx);
-extern void spell_RF5_CONF(int y, int x, int m_idx);
-extern void spell_RF5_SLOW(int y, int x, int m_idx);
-extern void spell_RF5_HOLD(int y, int x, int m_idx);
-extern void spell_RF6_HASTE(int m_idx);
-extern int spell_RF6_HAND_DOOM(int y, int x, int m_idx);
-extern void spell_RF6_HEAL(int m_idx);
-extern void spell_RF6_INVULNER(int m_idx);
-extern void spell_RF6_BLINK(int m_idx);
-extern void spell_RF6_TPORT(int m_idx);
-extern int spell_RF6_WORLD(int m_idx);
+extern int monspell_to_player(int SPELL_NUM, int y, int x, int m_idx);
+extern int monspell_to_monster(int SPELL_NUM, int y, int x, int m_idx, int t_idx);
+
 extern int spell_RF6_SPECIAL(int y, int x, int m_idx);
 extern void spell_RF6_TELE_TO(int m_idx);
 extern void spell_RF6_TELE_AWAY(int m_idx);
index a83758f..3bd78c5 100644 (file)
@@ -507,7 +507,7 @@ bool clean_shot(int y1, int x1, int y2, int x2, bool is_friend)
  * @param typ ¸ú²Ì°À­ID
  * @param dam_hp °ÒÎÏ
  * @param monspell ¥â¥ó¥¹¥¿¡¼ËâË¡¤ÎID
- * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ê¤éMONSTER_TO_PLAYER
+ * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¡¦E¤¥ä¡¼¤Ê¤¡¦ONSTER_TO_PLAYER
  * @return ¤Ê¤·
  */
 void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type)
@@ -538,7 +538,7 @@ void bolt(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target
  * @param typ ¸ú²Ì°À­ID
  * @param dam_hp °ÒÎÏ
  * @param monspell ¥â¥ó¥¹¥¿¡¼ËâË¡¤ÎID
- * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ê¤éMONSTER_TO_PLAYER
+ * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¡¦E¤¥ä¡¼¤Ê¤¡¦ONSTER_TO_PLAYER
  * @return ¤Ê¤·
  */
 void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target_type)
@@ -570,9 +570,9 @@ void beam(int m_idx, int y, int x, int typ, int dam_hp, int monspell, int target
  * @param typ ¸ú²Ì°À­ID
  * @param dam_hp °ÒÎÏ
  * @param rad È¾·Â
- * @param breath TRUE¤Ê¤é¤Ð¥Ö¥ì¥¹½èÍý¡¢FALSE¤Ê¤é¤Ð¥Ü¡¼¥ë½èÍý
+ * @param breath TRUE¤Ê¤é¤Ð¥Ö¡¦E¹½èÍ¡¦¡¥ALSE¤Ê¤é¤Ð¥Ü¡¼¡¦EèÍ
  * @param monspell ¥â¥ó¥¹¥¿¡¼ËâË¡¤ÎID
- * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ê¤éMONSTER_TO_PLAYER
+ * @param target_type ¥â¥ó¥¹¥¿¡¼¤«¤é¥â¥ó¥¹¥¿¡¼¤Ø·â¤Ä¤Ê¤éMONSTER_TO_MONSTER¡¢¥â¥ó¥¹¥¿¡¼¤«¤é¥×¡¦E¤¥ä¡¼¤Ê¤¡¦ONSTER_TO_PLAYER
  * @return ¤Ê¤·
  */
 void breath(int y, int x, int m_idx, int typ, int dam_hp, int rad, bool breath, int monspell, int target_type)
@@ -1871,112 +1871,9 @@ bool make_attack_spell(int m_idx)
         }
     }
 
-       /* Cast the spell. */
-       switch (thrown_spell)
-       {
-        case 96 + 0:   spell_RF4_SHRIEK(m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF4_SHRIEK */
-        case 96 + 1:   break;   /* RF4_XXX1 */
-        case 96 + 2:   spell_RF4_DISPEL(m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF4_DISPEL */
-        case 96 + 3:   dam = spell_RF4_ROCKET(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF4_ROCKET */
-        case 96 + 4:   dam = spell_RF4_SHOOT(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_SHOOT */
-        case 96 + 5:   break;   /* RF4_XXX2 */
-        case 96 + 6:   break;   /* RF4_XXX3 */
-        case 96 + 7:   break;   /* RF4_XXX4 */
-        case 96 + 8:   dam = spell_RF4_BREATH(GF_ACID, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_ACID */
-        case 96 + 9:   dam = spell_RF4_BREATH(GF_ELEC, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_ELEC */
-        case 96 + 10:  dam = spell_RF4_BREATH(GF_FIRE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_FIRE */
-        case 96 + 11:  dam = spell_RF4_BREATH(GF_COLD, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_COLD */
-        case 96 + 12:  dam = spell_RF4_BREATH(GF_POIS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_POIS */
-        case 96 + 13:  dam = spell_RF4_BREATH(GF_NETHER, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_NETH */
-        case 96 + 14:  dam = spell_RF4_BREATH(GF_LITE, y_br_lite, x_br_lite, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_LITE */
-        case 96 + 15:  dam = spell_RF4_BREATH(GF_DARK, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_DARK */
-        case 96 + 16:  dam = spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_CONF */
-        case 96 + 17:  dam = spell_RF4_BREATH(GF_SOUND, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_SOUN */
-        case 96 + 18:  dam = spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_CHAO */
-        case 96 + 19:  dam = spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_DISE */
-        case 96 + 20:  dam = spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_NEXU */
-        case 96 + 21:  dam = spell_RF4_BREATH(GF_TIME, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_TIME */
-        case 96 + 22:  dam = spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_INER */
-        case 96 + 23:  dam = spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_GRAV */
-        case 96 + 24:  dam = spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_SHAR */
-        case 96 + 25:  dam = spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_PLAS */
-        case 96 + 26:  dam = spell_RF4_BREATH(GF_FORCE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_WALL */
-        case 96 + 27:  dam = spell_RF4_BREATH(GF_MANA, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_MANA */
-        case 96 + 28:  dam = spell_RF4_BA_NUKE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF4_BA_NUKE */
-        case 96 + 29:  dam = spell_RF4_BREATH(GF_NUKE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_NUKE */
-        case 96 + 30:  dam = spell_RF4_BA_CHAO(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF4_BA_CHAO */
-        case 96 + 31:  dam = spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_BR_DISI */
-        case 128 + 0:  dam = spell_RF5_BA_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_ACID */
-        case 128 + 1:  dam = spell_RF5_BA_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_ELEC */
-        case 128 + 2:  dam = spell_RF5_BA_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_FIRE */
-        case 128 + 3:  dam = spell_RF5_BA_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_COLD */
-        case 128 + 4:  dam = spell_RF5_BA_POIS(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_POIS */
-        case 128 + 5:  dam = spell_RF5_BA_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_NETH */
-        case 128 + 6:  dam = spell_RF5_BA_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_WATE */
-        case 128 + 7:  dam = spell_RF5_BA_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_MANA */
-        case 128 + 8:  dam = spell_RF5_BA_DARK(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_DARK */
-        case 128 + 9:  dam = spell_RF5_DRAIN_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_DRAIN_MANA */
-        case 128 + 10: dam = spell_RF5_MIND_BLAST(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_MIND_BLAST */
-        case 128 + 11: dam = spell_RF5_BRAIN_SMASH(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_MIND_BLAST */
-        case 128 + 12: dam = spell_RF5_CAUSE_1(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_CAUSE_1 */
-        case 128 + 13: dam = spell_RF5_CAUSE_2(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_CAUSE_2 */
-        case 128 + 14: dam = spell_RF5_CAUSE_3(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_CAUSE_3 */
-        case 128 + 15: dam = spell_RF5_CAUSE_4(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_CAUSE_4 */
-        case 128 + 16: dam = spell_RF5_BO_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_ACID */
-        case 128 + 17: dam = spell_RF5_BO_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_ELEC */
-        case 128 + 18: dam = spell_RF5_BO_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_FIRE */
-        case 128 + 19: dam = spell_RF5_BO_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_COLD */
-        case 128 + 20: dam = spell_RF5_BA_LITE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BA_LITE */
-        case 128 + 21: dam = spell_RF5_BO_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_NETH */
-        case 128 + 22: dam = spell_RF5_BO_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_WATE */
-        case 128 + 23: dam = spell_RF5_BO_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_MANA */
-        case 128 + 24: dam = spell_RF5_BO_PLAS(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_PLAS */
-        case 128 + 25: dam = spell_RF5_BO_ICEE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_BO_ICEE */
-        case 128 + 26: dam = spell_RF5_MISSILE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF5_MISSILE */
-        case 128 + 27: spell_RF5_SCARE(y, x, m_idx); break;    /* RF5_SCARE */
-        case 128 + 28: spell_RF5_BLIND(y, x, m_idx); break;    /* RF5_BLIND */
-        case 128 + 29: spell_RF5_CONF(y, x, m_idx); break;    /* RF5_CONF */
-        case 128 + 30: spell_RF5_SLOW(y, x, m_idx); break;    /* RF5_SLOW */
-        case 128 + 31: spell_RF5_HOLD(y, x, m_idx); break;    /* RF5_HOLD */
-        case 160 + 0:  spell_RF6_HASTE(m_idx); break;    /* RF6_HASTE */
-        case 160 + 1:  dam = spell_RF6_HAND_DOOM(y, x, m_idx); break;    /* RF6_HAND_DOOM */
-        case 160 + 2:  spell_RF6_HEAL(m_idx); break;     /* RF6_HEAL */
-        case 160 + 3:  spell_RF6_INVULNER(m_idx); break;     /* RF6_INVULNER */
-        case 160 + 4:  spell_RF6_BLINK(m_idx); break;     /* RF6_BLINK */
-        case 160 + 5:  spell_RF6_TPORT(m_idx); break;     /* RF6_TPORT */
-        case 160 + 6:  dam = spell_RF6_WORLD(m_idx); break;     /* RF6_WORLD */
-            
-        /* RF6_SPECIAL */
-        case 160 + 7:  
-            dam = spell_RF6_SPECIAL(y, x, m_idx);
-            if (dam < 0) return FALSE; 
-            break;
-
-        case 160 + 8:  spell_RF6_TELE_TO(m_idx); break;     /* RF6_TELE_TO */
-        case 160 + 9:  spell_RF6_TELE_AWAY(m_idx); break;     /* RF6_TELE_AWAY */
-        case 160 + 10: spell_RF6_TELE_LEVEL(m_idx); break;     /* RF6_TELE_LEVEL */
-        case 160 + 11: spell_RF6_PSY_SPEAR(y, x, m_idx); break;    /* RF6_PSY_SPEAR */
-        case 160 + 12: spell_RF6_DARKNESS(m_idx); break;     /* RF6_DARKNESS */
-        case 160 + 13: spell_RF6_TRAPS(y, x, m_idx); break;     /* RF6_TRAPS */
-        case 160 + 14: spell_RF6_FORGET(m_idx); break;     /* RF6_FORGET */
-        case 160 + 15: spell_RF6_RAISE_DEAD(m_idx); break;    /* RF6_RAISE_DEAD */
-        case 160 + 16: spell_RF6_S_KIN(y, x, m_idx); break;  /* RF6_S_KIN */
-        case 160 + 17: spell_RF6_S_CYBER(y, x, m_idx); break;    /* RF6_S_CYBER */
-        case 160 + 18: spell_RF6_S_MONSTER(y, x, m_idx); break;    /* RF6_S_MONSTER */
-        case 160 + 19: spell_RF6_S_MONSTERS(y, x, m_idx); break;    /* RF6_S_MONSTER */
-        case 160 + 20: spell_RF6_S_ANT(y, x, m_idx); break;    /* RF6_S_ANT */
-        case 160 + 21: spell_RF6_S_SPIDER(y, x, m_idx); break;    /* RF6_S_SPIDER */
-        case 160 + 22: spell_RF6_S_HOUND(y, x, m_idx); break;    /* RF6_S_HOUND */
-        case 160 + 23: spell_RF6_S_HYDRA(y, x, m_idx); break;    /* RF6_S_HYDRA */
-        case 160 + 24: spell_RF6_S_ANGEL(y, x, m_idx); break;   /* RF6_S_ANGEL */
-        case 160 + 25: spell_RF6_S_DEMON(y, x, m_idx); break;   /* RF6_S_DEMON */
-        case 160 + 26: spell_RF6_S_UNDEAD(y, x, m_idx); break;   /* RF6_S_UNDEAD */
-        case 160 + 27: spell_RF6_S_DRAGON(y, x, m_idx); break;   /* RF6_S_DRAGON */
-        case 160 + 28: spell_RF6_S_HI_UNDEAD(y, x, m_idx); break;  /* RF6_S_HI_UNDEAD */
-        case 160 + 29: spell_RF6_S_HI_DRAGON(y, x, m_idx); break;  /* RF6_S_HI_DRAGON */
-        case 160 + 30: spell_RF6_S_AMBERITES(y, x, m_idx); break;  /* RF6_S_AMBERITES */
-        case 160 + 31: spell_RF6_S_UNIQUE(y, x, m_idx); break;     /* RF6_S_UNIQUE */
-       }
+    /* Cast the spell. */
+    dam = monspell_to_player(thrown_spell, y, x, m_idx);
+    if (dam < 0) return FALSE;
 
        if ((p_ptr->action == ACTION_LEARN) && thrown_spell > 175)
        {
index 0779e9e..4f06082 100644 (file)
@@ -733,422 +733,11 @@ bool monst_spell_monst(int m_idx)
 
        can_remember = is_original_ap_and_seen(m_ptr);
 
-       switch (thrown_spell)
-       {
-    case 96 + 0:   spell_RF4_SHRIEK(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHRIEK */
-    case 96 + 1:   return FALSE;  /* RF4_XXX1 */
-    case 96 + 2:   spell_RF4_DISPEL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_DISPEL */
-    case 96 + 3:   dam = spell_RF4_ROCKET(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_ROCKET */
-    case 96 + 4:   dam = spell_RF4_SHOOT(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHOOT */
-    case 96 + 5:   return FALSE; /* RF4_XXX2 */
-    case 96 + 6:   return FALSE; /* RF4_XXX3 */
-    case 96 + 7:   return FALSE; /* RF4_XXX4 */
-    case 96 + 8:   dam = spell_RF4_BREATH(GF_ACID, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_ACID */
-    case 96 + 9:   dam = spell_RF4_BREATH(GF_ELEC, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_ELEC */
-    case 96 + 10:  dam = spell_RF4_BREATH(GF_FIRE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_FIRE */
-    case 96 + 11:  dam = spell_RF4_BREATH(GF_COLD, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_COLD */
-    case 96 + 12:  dam = spell_RF4_BREATH(GF_POIS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_POIS */
-    case 96 + 13:  dam = spell_RF4_BREATH(GF_NETHER, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_NETH */
-    case 96 + 14:  dam = spell_RF4_BREATH(GF_LITE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_LITE */
-    case 96 + 15:  dam = spell_RF4_BREATH(GF_DARK, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_DARK */
-    case 96 + 16:  dam = spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_CONF */
-    case 96 + 17:  dam = spell_RF4_BREATH(GF_SOUND, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_SOUN */
-    case 96 + 18:  dam = spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_CHAO */
-    case 96 + 19:  dam = spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_DISE */
-    case 96 + 20:  dam = spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_NEXU */
-    case 96 + 21:  dam = spell_RF4_BREATH(GF_TIME, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_TIME */
-    case 96 + 22:  dam = spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_INER */
-    case 96 + 23:  dam = spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_GRAV */
-    case 96 + 24:  dam = spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_SHAR */
-    case 96 + 25:  dam = spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_PLAS */
-    case 96 + 26:  dam = spell_RF4_BREATH(GF_FORCE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_WALL */
-    case 96 + 27:  dam = spell_RF4_BREATH(GF_MANA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_MANA */
-    case 96 + 28:  dam = spell_RF4_BA_NUKE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BA_NUKE */
-    case 96 + 29:  dam = spell_RF4_BREATH(GF_NUKE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_NUKE */
-    case 96 + 30:  dam = spell_RF4_BA_CHAO(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BA_CHAO */
-    case 96 + 31:  dam = spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_BR_DISI */
-    case 128 + 0:  dam = spell_RF5_BA_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_ACID */
-    case 128 + 1:  dam = spell_RF5_BA_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_ELEC */
-    case 128 + 2:  dam = spell_RF5_BA_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_FIRE */
-    case 128 + 3:  dam = spell_RF5_BA_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_COLD */
-    case 128 + 4:  dam = spell_RF5_BA_POIS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_POIS */
-    case 128 + 5:  dam = spell_RF5_BA_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_NETH */
-    case 128 + 6:  dam = spell_RF5_BA_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_WATE */
-    case 128 + 7:  dam = spell_RF5_BA_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_MANA */
-    case 128 + 8:  dam = spell_RF5_BA_DARK(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_DARK */
-    case 128 + 9:  dam = spell_RF5_DRAIN_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_DRAIN_MANA */
-    case 128 + 10: dam = spell_RF5_MIND_BLAST(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_MIND_BLAST */
-    case 128 + 11: dam = spell_RF5_BRAIN_SMASH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BRAIN_SMASH */
-    case 128 + 12: dam = spell_RF5_CAUSE_1(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_1 */
-    case 128 + 13: dam = spell_RF5_CAUSE_2(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_2 */
-    case 128 + 14: dam = spell_RF5_CAUSE_3(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_3 */
-    case 128 + 15: dam = spell_RF5_CAUSE_4(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CAUSE_4 */
-    case 128 + 16: dam = spell_RF5_BO_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_ACID */
-    case 128 + 17: dam = spell_RF5_BO_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_ELEC */
-    case 128 + 18: dam = spell_RF5_BO_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_FIRE */
-    case 128 + 19: dam = spell_RF5_BO_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_COLD */
-    case 128 + 20: dam = spell_RF5_BA_LITE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BA_LITE */
-    case 128 + 21: dam = spell_RF5_BO_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_NETH */
-    case 128 + 22: dam = spell_RF5_BO_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_WATE */
-    case 128 + 23: dam = spell_RF5_BO_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_MANA */
-    case 128 + 24: dam = spell_RF5_BO_PLAS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_PLAS */
-    case 128 + 25: dam = spell_RF5_BO_ICEE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BO_ICEE */
-    case 128 + 26: dam = spell_RF5_MISSILE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_MISSILE */
-
-       /* RF5_SCARE */
-       case 128+27:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£",
-                                                "%^s casts a fearful illusion in front of %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (tr_ptr->flags3 & RF3_NO_FEAR)
-               {
-                       if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", 
-                                                   "%^s refuses to be frightened."), t_name);
-
-               }
-               else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
-               {
-                       if (see_t) msg_format(_("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", 
-                                                   "%^s refuses to be frightened."), t_name);
-               }
-               else
-               {
-                       if (set_monster_monfear(t_idx, MON_MONFEAR(t_ptr) + randint0(4) + 4)) fear = TRUE;
-               }
-
-               wake_up = TRUE;
-
-               break;
-
-       /* RF5_BLIND */
-       case 128+28:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               _(msg_format("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", m_name, t_name),
-                                 msg_format("%^s casts a spell, burning %s%s eyes.", m_name, t_name,
-                                                (streq(t_name, "it") ? "s" : "'s")));
-
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               /* Simulate blindness with confusion */
-               if (tr_ptr->flags3 & RF3_NO_CONF)
-               {
-                       if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
-               }
-               else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
-               {
-                       if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
-               }
-               else
-               {
-                       if (see_t) msg_format(_("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", "%^s is blinded!"), t_name);
-
-                       (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
-               }
-
-               wake_up = TRUE;
-
-               break;
-
-       /* RF5_CONF */
-       case 128+29:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤ÎÁ°¤Ë¸¸ÏÇŪ¤Ê¸¸¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£",
-                                                "%^s casts a mesmerizing illusion in front of %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (tr_ptr->flags3 & RF3_NO_CONF)
-               {
-                       if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£",
-                                                   "%^s disbelieves the feeble spell."), t_name);
-               }
-               else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
-               {
-                       if (see_t) msg_format(_("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£",
-                                                   "%^s disbelieves the feeble spell."), t_name);
-               }
-               else
-               {
-                       if (see_t) msg_format(_("%^s¤Ïº®Í𤷤¿¤è¤¦¤À¡£",
-                                                   "%^s seems confused."), t_name);
-
-                       (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
-               }
-
-               wake_up = TRUE;
-
-               break;
-
-       /* RF5_SLOW */
-       case 128+30:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               _(msg_format("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", m_name, t_name),
-                                 msg_format("%^s drains power from %s%s muscles.", m_name, t_name,
-                                          (streq(t_name, "it") ? "s" : "'s")));
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (tr_ptr->flags1 & RF1_UNIQUE)
-               {
-                       if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",
-                                                   "%^s is unaffected."), t_name);
-               }
-               else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
-               {
-                       if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",
-                                                   "%^s is unaffected."), t_name);
-               }
-               else
-               {
-                       if (set_monster_slow(t_idx, MON_SLOW(t_ptr) + 50))
-                       {
-                               if (see_t) msg_format(_("%s¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£",
-                                                           "%^s starts moving slower."), t_name);
-                       }
-               }
-
-               wake_up = TRUE;
-
-               break;
-
-       /* RF5_HOLD */
-       case 128+31:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡£", "%^s stares intently at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
+    dam = monspell_to_monster(thrown_spell, y, x, m_idx, t_idx);
+    if (dam < 0)return FALSE;
 
-               if ((tr_ptr->flags1 & RF1_UNIQUE) ||
-                   (tr_ptr->flags3 & RF3_NO_STUN))
-               {
-                       if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
-               }
-               else if (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10)
-               {
-                       if (see_t) msg_format(_("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), t_name);
-               }
-               else
-               {
-                       if (see_t) msg_format(_("%^s¤ÏËãá㤷¤¿¡ª", "%^s is paralyzed!"), t_name);
-
-                       (void)set_monster_stunned(t_idx, MON_STUNNED(t_ptr) + randint1(4) + 4);
-               }
-
-               wake_up = TRUE;
-
-               break;
-
-
-       /* RF6_HASTE */
-       case 160+0:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               /* Allow quick speed increases to base+10 */
-               if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100))
-               {
-                       if (see_m) msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name);
-               }
-               break;
-
-       /* RF6_HAND_DOOM */
-       case 160+1:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom upon %s!"), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = 20; /* Dummy power */
-        breath(y, x, m_idx,GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF6_HEAL */
-       case 160+2:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               /* Heal some */
-               m_ptr->hp += (rlev * 6);
-
-               /* Fully healed */
-               if (m_ptr->hp >= m_ptr->maxhp)
-               {
-                       /* Fully healed */
-                       m_ptr->hp = m_ptr->maxhp;
-
-                       if (known)
-                       {
-                               if (see_m)
-                               {
-                                       msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), m_name);
-                               }
-                               else
-                               {
-                                       mon_fight = TRUE;
-                               }
-                       }
-               }
-
-               /* Partially healed */
-               else if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               /* Redraw (later) if needed */
-               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
-               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
-
-               /* Cancel fear */
-               if (MON_MONFEAR(m_ptr))
-               {
-                       /* Cancel fear */
-                       (void)set_monster_monfear(m_idx, 0);
-
-                       /* Message */
-                       if (see_m) msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name);
-               }
-
-               break;
-
-       /* RF6_INVULNER */
-       case 160+3:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               disturb(1, 1);
-                               msg_format(_("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE);
-               break;
-
-       /* RF6_BLINK */
-       case 160+4:
-               if (teleport_barrier(m_idx))
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name);
-                       }
-               }
-               else
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name);
-                       }
-                       teleport_away(m_idx, 10, 0L);
-               }
-               break;
-
-       /* RF6_TPORT */
-       case 160+5:
-               if (teleport_barrier(m_idx))
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", "Magic barrier obstructs teleporting of %^s."), m_name);
-                       }
-               }
-               else
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name);
-                       }
-                       teleport_away_followable(m_idx);
-               }
-               break;
-
-       /* RF6_WORLD */
-       case 160+6:
-#if 0
-               int who = 0;
-               if(m_ptr->r_idx = MON_DIO) who == 1;
-               else if(m_ptr->r_idx = MON_WONG) who == 3;
-               dam = who;
-               if(!process_the_world(randint1(2)+2, who, player_has_los_bold(m_ptr->fy, m_ptr->fx))) return (FALSE);
-#endif
-               return FALSE;
+       switch (thrown_spell)
+    {
 
        /* RF6_SPECIAL */
        case 160+7:
index 91e64d6..2ac376f 100644 (file)
@@ -47,7 +47,22 @@ bool monster_is_powerful(int m_idx)
     return (r_ptr->flags2 & RF2_POWERFUL);
 }
 
-void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int TARGET_TYPE)
+void monster_wakeup(int t_idx)
+{
+    (void)set_monster_csleep(t_idx, 0);
+}
+
+void monster_fear_message(int t_idx)
+{
+    char t_name[80];
+    monster_name(t_idx, t_name);
+    if (see_monster(t_idx))
+    {
+        msg_format(_("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"), t_name);
+    }
+}
+
+void monspell_message_base(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool msg_flag, int TARGET_TYPE)
 {
     bool known = monster_near_player(m_idx, t_idx);
     bool see_either = see_monster(m_idx) || see_monster(t_idx);
@@ -57,24 +72,25 @@ void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int
     monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
-
     if (mon_to_player || (mon_to_mon && known && see_either))
         disturb(1, 1);
 
-    if (p_ptr->blind)
+    if (msg_flag)
     {
-        if (mon_to_player || (mon_to_mon && known && see_either))
+        if (mon_to_player)
             msg_format(msg1, m_name);
+        else if (mon_to_mon && known && see_either)
+            msg_format(msg2, m_name);
     }
     else
     {
         if (mon_to_player)
         {
-            msg_format(msg2, m_name);
+            msg_format(msg3, m_name);
         }
         else if (mon_to_mon && known && see_either)
         {
-            msg_format(msg3, m_name, t_name);
+            msg_format(msg4, m_name, t_name);
         }
     }
 
@@ -82,34 +98,30 @@ void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int
         mon_fight = TRUE;
 }
 
+void monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, int TARGET_TYPE)
+{
+    monspell_message_base(m_idx, t_idx, msg1, msg1, msg2, msg3, p_ptr->blind, TARGET_TYPE);
+}
+
+void simple_monspell_message(int m_idx, int t_idx, cptr msg1, cptr msg2, int TARGET_TYPE)
+{
+    monspell_message_base(m_idx, t_idx, msg1, msg1, msg2, msg2, p_ptr->blind, TARGET_TYPE);
+}
+
 void spell_RF4_SHRIEK(int m_idx, int t_idx, int TARGET_TYPE)
 {
-       bool known = monster_near_player(m_idx, t_idx);
-    bool see_m = see_monster(m_idx);
-       char m_name[80], t_name[80];
-    monster_name(m_idx, m_name);
-       monster_name(t_idx, t_name);
+    simple_monspell_message(m_idx, t_idx,
+        _("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", "%^s makes a high pitched shriek."),
+        _("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶«¤ó¤À¡£", "%^s shrieks at %s."),
+        TARGET_TYPE);
 
-    if (TARGET_TYPE == MONSTER_TO_MONSTER)
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        if (known)
-        {
-            if (see_m)
-            {
-                msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶«¤ó¤À¡£", "%^s shrieks at %s."), m_name, t_name);
-            }
-            else
-            {
-                mon_fight = TRUE;
-            }
-        }
-        (void)set_monster_csleep(t_idx, 0);
+        aggravate_monsters(m_idx);
     }
-    else if (TARGET_TYPE == MONSTER_TO_PLAYER)
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        disturb(1, 1);
-        msg_format(_("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", "%^s makes a high pitched shriek."), m_name);
-        aggravate_monsters(m_idx);
+        monster_wakeup(t_idx);
     }
 }
 
@@ -121,34 +133,14 @@ void spell_RF4_DISPEL(int m_idx, int t_idx, int TARGET_TYPE)
     monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
+    monspell_message(m_idx, t_idx,
+        _("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."),
+        _("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic."),
+        _("%^s¤¬%s¤ËÂФ·¤ÆËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic at %s."),
+        TARGET_TYPE);
 
-    if (TARGET_TYPE == MONSTER_TO_MONSTER)
-    {
-        if (known)
-        {
-            if (see_m)
-            {
-                msg_format(_("%^s¤¬%s¤ËÂФ·¤ÆËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£",
-                    "%^s invokes a dispel magic at %s."), m_name, t_name);
-            }
-            else
-            {
-                mon_fight = TRUE;
-            }
-        }
-
-        if (t_idx == p_ptr->riding) dispel_player();
-        dispel_monster_status(t_idx);
-    }
-    else if (TARGET_TYPE == MONSTER_TO_PLAYER)
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        disturb(1, 1);
-
-        if (p_ptr->blind)
-            msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
-        else
-            msg_format(_("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a dispel magic."), m_name);
-
         dispel_player();
         if (p_ptr->riding) dispel_monster_status(p_ptr->riding);
 
@@ -157,6 +149,11 @@ void spell_RF4_DISPEL(int m_idx, int t_idx, int TARGET_TYPE)
 
         learn_spell(MS_DISPEL);
     }
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
+    {
+        if (t_idx == p_ptr->riding) dispel_player();
+        dispel_monster_status(t_idx);
+    }
 }
 
 int spell_RF4_ROCKET(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
@@ -757,7 +754,6 @@ void spell_RF5_CAUSE(int GF_TYPE, int dam, int y, int x, int m_idx, int t_idx, c
     monster_name(m_idx, m_name);
        monster_name(t_idx, t_name);
 
-
     if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
         disturb(1, 1);
@@ -1058,187 +1054,355 @@ int spell_RF5_MISSILE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
     return dam;
 }
 
-void spell_RF5_SCARE(int y, int x, int m_idx)
+void spell_badstatus_message(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool resist, bool saving_throw, int TARGET_TYPE)
 {
-    int rlev = monster_level_idx(m_idx);
-       char m_name[80];
+    bool see_either = see_monster(m_idx) || see_monster(t_idx);
+    bool see_t = see_monster(t_idx);
+    bool known = monster_near_player(m_idx, t_idx);
+    char m_name[80], t_name[80];
     monster_name(m_idx, m_name);
-    disturb(1, 1);
-
-
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", "%^s mumbles, and you hear scary noises."), m_name);
-    else
-        msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s casts a fearful illusion."), m_name);
+    monster_name(t_idx, t_name);
 
-    if (p_ptr->resist_fear)
-    {
-        msg_print(_("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened."));
-    }
-    else if (randint0(100 + rlev / 2) < p_ptr->skill_sav)
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        msg_print(_("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened."));
+        disturb(1, 1);
+        if (p_ptr->blind)
+            msg_format(msg1, m_name);
+        else
+            msg_format(msg2, m_name);
+
+        if (resist)
+        {
+            msg_print(msg3);
+        }
+        else if (saving_throw)
+        {
+            msg_print(msg4);
+        }
     }
-    else
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        (void)set_afraid(p_ptr->afraid + randint0(4) + 4);
+        if (known)
+        {
+            if (see_either)
+            {
+                msg_format(msg1, m_name, t_name);
+            }
+            else
+            {
+                mon_fight = TRUE;
+            }
+        }
+
+        if (resist)
+        {
+            if (see_t) msg_format(msg2, t_name);
+        }
+        else if (saving_throw)
+        {
+            if (see_t) msg_format(msg3, t_name);
+        }
+        else
+        {
+            if (see_t) msg_format(msg4, t_name);
+        }
+        monster_wakeup(t_idx);
     }
-    learn_spell(MS_SCARE);
-    update_smart_learn(m_idx, DRS_FEAR);
 }
 
-void spell_RF5_BLIND(int y, int x, int m_idx)
+void spell_RF5_SCARE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    monster_type    *t_ptr = &m_list[t_idx];
+    monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
-       char m_name[80];
-    monster_name(m_idx, m_name);
-
-    disturb(1, 1);
-
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else
-        msg_format(_("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¤¢¤Ê¤¿¤ÎÌܤò¤¯¤é¤Þ¤·¤¿¡ª",
-        "%^s casts a spell, burning your eyes!"), m_name);
+    bool resist, saving_throw;
 
-    if (p_ptr->resist_blind)
-    {
-        msg_print(_("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"));
-    }
-    else if (randint0(100 + rlev / 2) < p_ptr->skill_sav)
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        msg_print(_("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"));
+        resist = p_ptr->resist_fear;
+        saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", "%^s mumbles, and you hear scary noises."),
+            _("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s casts a fearful illusion."),
+            _("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened."),
+            _("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You refuse to be frightened."),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_afraid(p_ptr->afraid + randint0(4) + 4);
+        }
+        learn_spell(MS_SCARE);
+        update_smart_learn(m_idx, DRS_FEAR);
     }
-    else
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        (void)set_blind(12 + randint0(4));
+        resist = tr_ptr->flags3 & RF3_NO_FEAR;
+        saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
+
+        spell_badstatus_message(m_idx, t_idx, 
+            _("%^s¤¬¶²¤í¤·¤²¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s casts a fearful illusion in front of %s."),
+            _("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", "%^s refuses to be frightened."),
+            _("%^s¤Ï¶²Éݤò´¶¤¸¤Ê¤¤¡£", "%^s refuses to be frightened."),
+            _("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            set_monster_monfear(t_idx, MON_MONFEAR(t_ptr) + randint0(4) + 4);
+        }
     }
-    learn_spell(MS_BLIND);
-    update_smart_learn(m_idx, DRS_BLIND);
 }
 
-void spell_RF5_CONF(int y, int x, int m_idx)
+void spell_RF5_BLIND(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    monster_type    *t_ptr = &m_list[t_idx];
+    monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
-       char m_name[80];
-    monster_name(m_idx, m_name);
-
-    disturb(1, 1);
-
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£",
-        "%^s mumbles, and you hear puzzling noises."), m_name);
-    else
-        msg_format(_("%^s¤¬Í¶ÏÇŪ¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£",
-        "%^s creates a mesmerising illusion."), m_name);
+    bool resist, saving_throw;
 
-    if (p_ptr->resist_conf)
-    {
-        msg_print(_("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell."));
-    }
-    else if (randint0(100 + rlev / 2) < p_ptr->skill_sav)
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        msg_print(_("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell."));
+        resist = p_ptr->resist_blind;
+        saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+            _("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¤¢¤Ê¤¿¤ÎÌܤò¤¯¤é¤Þ¤·¤¿¡ª", "%^s casts a spell, burning your eyes!"),
+            _("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"),
+            _("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_blind(12 + randint0(4));
+        }
+        learn_spell(MS_BLIND);
+        update_smart_learn(m_idx, DRS_BLIND);
     }
-    else
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        (void)set_confused(p_ptr->confused + randint0(4) + 4);
+        cptr msg1;
+        char t_name[80];
+        monster_name(t_idx, t_name);
+        
+        if (streq(t_name, "it"))
+        {
+            msg1 = _("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", "%^s casts a spell, burning %ss eyes.");
+        }
+        else
+        {
+            msg1 = _("%s¤Ï¼öʸ¤ò¾§¤¨¤Æ%s¤ÎÌܤò¾Æ¤­ÉÕ¤«¤»¤¿¡£", "%^s casts a spell, burning %s's eyes.");
+        }
+
+        resist = tr_ptr->flags3 & RF3_NO_CONF;
+        saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
+
+        spell_badstatus_message(m_idx, t_idx,
+            msg1,
+            _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."),
+            _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."),
+            _("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", "%^s is blinded!"),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
+        }
     }
-    learn_spell(MS_CONF);
-    update_smart_learn(m_idx, DRS_CONF);
 }
 
-void spell_RF5_SLOW(int y, int x, int m_idx)
+void spell_RF5_CONF(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    monster_type    *t_ptr = &m_list[t_idx];
+    monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
-       char m_name[80];
-    monster_name(m_idx, m_name);
+    bool resist, saving_throw;
 
-    disturb(1, 1);
-
-    msg_format(_("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª",
-        "%^s drains power from your muscles!"), m_name);
-
-    if (p_ptr->free_act)
-    {
-        msg_print(_("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"));
-    }
-    else if (randint0(100 + rlev / 2) < p_ptr->skill_sav)
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        msg_print(_("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"));
+        resist = p_ptr->resist_conf;
+        saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£", "%^s mumbles, and you hear puzzling noises."),
+            _("%^s¤¬Í¶ÏÇŪ¤Ê¸¸³Ð¤òºî¤ê½Ð¤·¤¿¡£", "%^s creates a mesmerising illusion."),
+            _("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell."),
+            _("¤·¤«¤·¸¸³Ð¤Ë¤Ï¤À¤Þ¤µ¤ì¤Ê¤«¤Ã¤¿¡£", "You disbelieve the feeble spell."),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_confused(p_ptr->confused + randint0(4) + 4);
+        }
+        learn_spell(MS_CONF);
+        update_smart_learn(m_idx, DRS_CONF);
     }
-    else
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+        resist = tr_ptr->flags3 & RF3_NO_CONF;
+        saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
+
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤¬%s¤ÎÁ°¤Ë¸¸ÏÇŪ¤Ê¸¸¤ò¤Ä¤¯¤ê½Ð¤·¤¿¡£", "%^s casts a mesmerizing illusion in front of %s."),
+            _("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£", "%^s disbelieves the feeble spell."),
+            _("%^s¤ÏÏǤ蘆¤ì¤Ê¤«¤Ã¤¿¡£", "%^s disbelieves the feeble spell."),
+            _("%^s¤Ïº®Í𤷤¿¤è¤¦¤À¡£", "%^s seems confused."),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_monster_confused(t_idx, MON_CONFUSED(t_ptr) + 12 + randint0(4));
+        }
     }
-    learn_spell(MS_SLOW);
-    update_smart_learn(m_idx, DRS_FREE);
 }
 
-void spell_RF5_HOLD(int y, int x, int m_idx)
+
+void spell_RF5_SLOW(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    monster_type    *t_ptr = &m_list[t_idx];
+    monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
-       char m_name[80];
-    monster_name(m_idx, m_name);
-    disturb(1, 1);
+    bool resist, saving_throw;
 
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else
-        msg_format(_("%^s¤¬¤¢¤Ê¤¿¤ÎÌܤò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡ª", "%^s stares deep into your eyes!"), m_name);
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
+    {
+        resist = p_ptr->resist_conf;
+        saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", "%^s drains power from your muscles!"),
+            _("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", "%^s drains power from your muscles!"),
+            _("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"),
+            _("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"),
+            resist, saving_throw, TARGET_TYPE);
 
-    if (p_ptr->free_act)
+        if (!resist && !saving_throw)
+        {
+            (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+        }
+        learn_spell(MS_SLOW);
+        update_smart_learn(m_idx, DRS_FREE);
+    }
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        msg_print(_("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"));
+        cptr msg1;
+        char t_name[80];
+        monster_name(t_idx, t_name);
+
+        if (streq(t_name, "it"))
+        {
+            msg1 = _("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", "%^s drains power from %ss muscles.");
+        }
+        else
+        {
+            msg1 = _("%s¤¬%s¤Î¶ÚÆù¤«¤éÎϤòµÛ¤¤¤È¤Ã¤¿¡£", "%^s drains power from %s's muscles.");
+        }
+
+        resist = tr_ptr->flags1 & RF1_UNIQUE;
+        saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
+
+        spell_badstatus_message(m_idx, t_idx,
+            msg1,
+            _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."),
+            _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."),
+            _("%s¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving slower."),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            set_monster_slow(t_idx, MON_SLOW(t_ptr) + 50);
+        }
     }
-    else if (randint0(100 + rlev / 2) < p_ptr->skill_sav)
+}
+
+void spell_RF5_HOLD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
+{
+    monster_type    *t_ptr = &m_list[t_idx];
+    monster_race    *tr_ptr = &r_info[t_ptr->r_idx];
+    int rlev = monster_level_idx(m_idx);
+    bool resist, saving_throw;
+
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
     {
-        msg_format(_("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"));
+        resist = p_ptr->free_act;
+        saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+            _("%^s¤¬¤¢¤Ê¤¿¤ÎÌܤò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡ª", "%^s stares deep into your eyes!"),
+            _("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", "You are unaffected!"),
+            _("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª", "You resist the effects!"),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
+        }
+        learn_spell(MS_SLEEP);
+        update_smart_learn(m_idx, DRS_FREE);
     }
-    else
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
     {
-        (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
+        resist = (tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flags3 & RF3_NO_STUN);
+        saving_throw = (tr_ptr->level > randint1((rlev - 10) < 1 ? 1 : (rlev - 10)) + 10);
+
+        spell_badstatus_message(m_idx, t_idx,
+            _("%^s¤Ï%s¤ò¤¸¤Ã¤È¸«¤Ä¤á¤¿¡£", "%^s stares intently at %s."),
+            _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."),
+            _("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", "%^s is unaffected."), 
+            _("%^s¤ÏËãá㤷¤¿¡ª", "%^s is paralyzed!"),
+            resist, saving_throw, TARGET_TYPE);
+
+        if (!resist && !saving_throw)
+        {
+            (void)set_monster_stunned(t_idx, MON_STUNNED(t_ptr) + randint1(4) + 4);
+        }
     }
-    learn_spell(MS_SLEEP);
-    update_smart_learn(m_idx, DRS_FREE);
 }
 
-void spell_RF6_HASTE(int m_idx)
+void spell_RF6_HASTE(int m_idx, int t_idx, int TARGET_TYPE)
 {
+    bool see_m = see_monster(m_idx);
     monster_type    *m_ptr = &m_list[m_idx];
        char m_name[80];
     monster_name(m_idx, m_name);
-    disturb(1, 1);
-    if (p_ptr->blind)
-    {
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    }
-    else
-    {
-        msg_format(_("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."), m_name);
-    }
+
+    monspell_message_base(m_idx, t_idx,
+        _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+        _("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."),
+        _("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."),
+        _("%^s¤¬¼«Ê¬¤ÎÂΤËÇ°¤òÁ÷¤Ã¤¿¡£", "%^s concentrates on %s body."),
+        p_ptr->blind, TARGET_TYPE);
 
     /* Allow quick speed increases to base+10 */
     if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100))
     {
-        msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name);
+        if (TARGET_TYPE == MONSTER_TO_PLAYER ||
+            (TARGET_TYPE == MONSTER_TO_MONSTER && see_m))
+            msg_format(_("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", "%^s starts moving faster."), m_name);
     }
 }
 
-int spell_RF6_HAND_DOOM(int y, int x, int m_idx)
+int spell_RF6_HAND_DOOM(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
-    monster_type    *m_ptr = &m_list[m_idx];
     int dam;
-       char m_name[80];
-    monster_name(m_idx, m_name);
-    disturb(1, 1);
-    msg_format(_("%^s¤¬<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom!"), m_name);
-    dam = (((s32b)((40 + randint1(20)) * (p_ptr->chp))) / 100);
-    breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_PLAYER);
+
+    simple_monspell_message(m_idx, t_idx,
+        _("%^s¤¬<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom!"),
+        _("%^s¤¬%s¤Ë<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", "%^s invokes the Hand of Doom upon %s!"),
+        TARGET_TYPE);
+
+    if (TARGET_TYPE == MONSTER_TO_PLAYER)
+    {
+        dam = (((s32b)((40 + randint1(20)) * (p_ptr->chp))) / 100);
+        breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_PLAYER);
+    }
+    else if (TARGET_TYPE == MONSTER_TO_MONSTER)
+    {
+        dam = 20; /* Dummy power */
+        breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, MONSTER_TO_MONSTER);
+    }
     return dam;
 }
 
-void spell_RF6_HEAL(int m_idx)
+void spell_RF6_HEAL(int m_idx, int t_idx, int TARGET_TYPE)
 {
     monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
@@ -1249,10 +1413,12 @@ void spell_RF6_HEAL(int m_idx)
     disturb(1, 1);
 
     /* Message */
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else
-        msg_format(_("%^s¤¬¼«Ê¬¤Î½ý¤Ë½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."), m_name);
+    monspell_message_base(m_idx, t_idx,
+        _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+        _("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."),
+        _("%^s¤¬¼«Ê¬¤Î½ý¤Ë½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."),
+        _("%^s¤Ï¼«Ê¬¤Î½ý¤ËÇ°¤ò½¸Ã椷¤¿¡£", "%^s concentrates on %s wounds."),
+        p_ptr->blind, TARGET_TYPE);
 
     /* Heal some */
     m_ptr->hp += (rlev * 6);
@@ -1264,20 +1430,24 @@ void spell_RF6_HEAL(int m_idx)
         m_ptr->hp = m_ptr->maxhp;
 
         /* Message */
-        if (seen)
-            msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"), m_name);
-        else
-            msg_format(_("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", "%^s sounds completely healed!"), m_name);
+        monspell_message_base(m_idx, t_idx,
+            _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", "%^s sounds completely healed!"),
+            _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¤è¤¦¤À¡ª", "%^s sounds completely healed!"),
+            _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"),
+            _("%^s¤Ï´°Á´¤Ë¼£¤Ã¤¿¡ª", "%^s looks completely healed!"),
+            !seen, TARGET_TYPE);
     }
 
     /* Partially healed */
     else
     {
         /* Message */
-        if (seen)
-            msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."), m_name);
-        else
-            msg_format(_("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s sounds healthier."), m_name);
+        monspell_message_base(m_idx, t_idx,
+            _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s sounds healthier."),
+            _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s sounds healthier."),
+            _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."),
+            _("%^s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", "%^s looks healthier."),
+            !seen, TARGET_TYPE);
     }
 
     /* Redraw (later) if needed */
@@ -1291,59 +1461,70 @@ void spell_RF6_HEAL(int m_idx)
         (void)set_monster_monfear(m_idx, 0);
 
         /* Message */
-        msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name);
+        if (see_monster(m_idx))
+            msg_format(_("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", "%^s recovers %s courage."), m_name);
     }
 }
-void spell_RF6_INVULNER(int m_idx)
+void spell_RF6_INVULNER(int m_idx, int t_idx, int TARGET_TYPE)
 {
     monster_type    *m_ptr = &m_list[m_idx];
     bool seen = (!p_ptr->blind && m_ptr->ml);
-       char m_name[80];
-    monster_name(m_idx, m_name);
-    disturb(1, 1);
 
     /* Message */
-    if (!seen)
-        msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
-    else
-        msg_format(_("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."), m_name);
+       monspell_message_base(m_idx, t_idx,
+            _("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."),
+            _("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."),
+            _("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."),
+            _("%s¤Ï̵½ý¤Îµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a Globe of Invulnerability."),
+            !seen, TARGET_TYPE);
 
     if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE);
 }
 
-void spell_RF6_BLINK(int m_idx)
+void spell_RF6_BLINK(int m_idx, int TARGET_TYPE)
 {
        char m_name[80];
     monster_name(m_idx, m_name);
+       
+       if (TARGET_TYPE==MONSTER_TO_PLAYER)
+               disturb(1, 1);
 
-    disturb(1, 1);
     if (teleport_barrier(m_idx))
     {
-        msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£",
-            "Magic barrier obstructs teleporting of %^s."), m_name);
+               if(see_monster(m_idx))
+               msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£",
+                                                "Magic barrier obstructs teleporting of %^s."), m_name);
     }
     else
     {
-        msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name);
+               if(see_monster(m_idx))
+               msg_format(_("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", "%^s blinks away."), m_name);
+
         teleport_away(m_idx, 10, 0L);
-        p_ptr->update |= (PU_MONSTERS);
+
+               if (TARGET_TYPE==MONSTER_TO_PLAYER)
+               p_ptr->update |= (PU_MONSTERS);
     }
 }
 
-void spell_RF6_TPORT(int m_idx)
+void spell_RF6_TPORT(int m_idx, int TARGET_TYPE)
 {      
        char m_name[80];
     monster_name(m_idx, m_name);
-
-       disturb(1, 1);
+       
+       if (TARGET_TYPE==MONSTER_TO_PLAYER)
+               disturb(1, 1);
     if (teleport_barrier(m_idx))
     {
-        msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£",
-            "Magic barrier obstructs teleporting of %^s."), m_name);
+               if(see_monster(m_idx))
+                       msg_format(_("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£",
+                                                "Magic barrier obstructs teleporting of %^s."), m_name);
     }
     else
     {
-        msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name);
+               if(see_monster(m_idx))
+                       msg_format(_("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", "%^s teleports away."), m_name);
+
         teleport_away_followable(m_idx);
     }
 }
@@ -2216,3 +2397,186 @@ void spell_RF6_S_UNIQUE(int y, int x, int m_idx)
     }
 }
 
+
+int monspell_to_player(int SPELL_NUM, int y, int x, int m_idx)
+{
+    switch (SPELL_NUM)
+    {
+    case 96 + 0:   spell_RF4_SHRIEK(m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_SHRIEK */
+    case 96 + 1:   break;   /* RF4_XXX1 */
+    case 96 + 2:   spell_RF4_DISPEL(m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF4_DISPEL */
+    case 96 + 3:   return spell_RF4_ROCKET(y, x, m_idx, 0, MONSTER_TO_PLAYER);  /* RF4_ROCKET */
+    case 96 + 4:   return spell_RF4_SHOOT(y, x, m_idx, 0, MONSTER_TO_PLAYER);   /* RF4_SHOOT */
+    case 96 + 5:   break;   /* RF4_XXX2 */
+    case 96 + 6:   break;   /* RF4_XXX3 */
+    case 96 + 7:   break;   /* RF4_XXX4 */
+    case 96 + 8:   return spell_RF4_BREATH(GF_ACID, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_ACID */
+    case 96 + 9:   return spell_RF4_BREATH(GF_ELEC, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_ELEC */
+    case 96 + 10:  return spell_RF4_BREATH(GF_FIRE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_FIRE */
+    case 96 + 11:  return spell_RF4_BREATH(GF_COLD, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_COLD */
+    case 96 + 12:  return spell_RF4_BREATH(GF_POIS, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_POIS */
+    case 96 + 13:  return spell_RF4_BREATH(GF_NETHER, y, x, m_idx, 0, MONSTER_TO_PLAYER);   /* RF4_BR_NETH */
+    case 96 + 14:  return spell_RF4_BREATH(GF_LITE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_LITE */
+    case 96 + 15:  return spell_RF4_BREATH(GF_DARK, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_DARK */
+    case 96 + 16:  return spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, 0, MONSTER_TO_PLAYER);    /* RF4_BR_CONF */
+    case 96 + 17:  return spell_RF4_BREATH(GF_SOUND, y, x, m_idx, 0, MONSTER_TO_PLAYER);    /* RF4_BR_SOUN */
+    case 96 + 18:  return spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, 0, MONSTER_TO_PLAYER);    /* RF4_BR_CHAO */
+    case 96 + 19:  return spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, 0, MONSTER_TO_PLAYER);   /* RF4_BR_DISE */
+    case 96 + 20:  return spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, 0, MONSTER_TO_PLAYER);    /* RF4_BR_NEXU */
+    case 96 + 21:  return spell_RF4_BREATH(GF_TIME, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_TIME */
+    case 96 + 22:  return spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, 0, MONSTER_TO_PLAYER);  /* RF4_BR_INER */
+    case 96 + 23:  return spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, 0, MONSTER_TO_PLAYER);  /* RF4_BR_GRAV */
+    case 96 + 24:  return spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, 0, MONSTER_TO_PLAYER);   /* RF4_BR_SHAR */
+    case 96 + 25:  return spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, 0, MONSTER_TO_PLAYER);   /* RF4_BR_PLAS */
+    case 96 + 26:  return spell_RF4_BREATH(GF_FORCE, y, x, m_idx, 0, MONSTER_TO_PLAYER);    /* RF4_BR_WALL */
+    case 96 + 27:  return spell_RF4_BREATH(GF_MANA, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_MANA */
+    case 96 + 28:  return spell_RF4_BA_NUKE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BA_NUKE */
+    case 96 + 29:  return spell_RF4_BREATH(GF_NUKE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_NUKE */
+    case 96 + 30:  return spell_RF4_BA_CHAO(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BA_CHAO */
+    case 96 + 31:  return spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_BR_DISI */
+    case 128 + 0:  return spell_RF5_BA_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ACID */
+    case 128 + 1:  return spell_RF5_BA_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_ELEC */
+    case 128 + 2:  return spell_RF5_BA_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_FIRE */
+    case 128 + 3:  return spell_RF5_BA_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_COLD */
+    case 128 + 4:  return spell_RF5_BA_POIS(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_POIS */
+    case 128 + 5:  return spell_RF5_BA_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_NETH */
+    case 128 + 6:  return spell_RF5_BA_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_WATE */
+    case 128 + 7:  return spell_RF5_BA_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_MANA */
+    case 128 + 8:  return spell_RF5_BA_DARK(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_DARK */
+    case 128 + 9:  return spell_RF5_DRAIN_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER);  /* RF5_DRAIN_MANA */
+    case 128 + 10: return spell_RF5_MIND_BLAST(y, x, m_idx, 0, MONSTER_TO_PLAYER);  /* RF5_MIND_BLAST */
+    case 128 + 11: return spell_RF5_BRAIN_SMASH(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MIND_BLAST */
+    case 128 + 12: return spell_RF5_CAUSE_1(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_1 */
+    case 128 + 13: return spell_RF5_CAUSE_2(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_2 */
+    case 128 + 14: return spell_RF5_CAUSE_3(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_3 */
+    case 128 + 15: return spell_RF5_CAUSE_4(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_CAUSE_4 */
+    case 128 + 16: return spell_RF5_BO_ACID(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ACID */
+    case 128 + 17: return spell_RF5_BO_ELEC(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ELEC */
+    case 128 + 18: return spell_RF5_BO_FIRE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_FIRE */
+    case 128 + 19: return spell_RF5_BO_COLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_COLD */
+    case 128 + 20: return spell_RF5_BA_LITE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BA_LITE */
+    case 128 + 21: return spell_RF5_BO_NETH(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_NETH */
+    case 128 + 22: return spell_RF5_BO_WATE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_WATE */
+    case 128 + 23: return spell_RF5_BO_MANA(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_MANA */
+    case 128 + 24: return spell_RF5_BO_PLAS(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_PLAS */
+    case 128 + 25: return spell_RF5_BO_ICEE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ICEE */
+    case 128 + 26: return spell_RF5_MISSILE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MISSILE */
+    case 128 + 27: spell_RF5_SCARE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF5_SCARE */
+    case 128 + 28: spell_RF5_BLIND(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF5_BLIND */
+    case 128 + 29: spell_RF5_CONF(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF5_CONF */
+    case 128 + 30: spell_RF5_SLOW(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF5_SLOW */
+    case 128 + 31: spell_RF5_HOLD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF5_HOLD */
+    case 160 + 0:  spell_RF6_HASTE(m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_HASTE */
+    case 160 + 1:  return spell_RF6_HAND_DOOM(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF6_HAND_DOOM */
+    case 160 + 2:  spell_RF6_HEAL(m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF6_HEAL */
+    case 160 + 3:  spell_RF6_INVULNER(m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF6_INVULNER */
+    case 160 + 4:  spell_RF6_BLINK(m_idx, MONSTER_TO_PLAYER); break;   /* RF6_BLINK */
+    case 160 + 5:  spell_RF6_TPORT(m_idx, MONSTER_TO_PLAYER); break;   /* RF6_TPORT */
+    case 160 + 6:  return spell_RF6_WORLD(m_idx); break;    /* RF6_WORLD */
+    case 160 + 7:  return spell_RF6_SPECIAL(y, x, m_idx);   /* RF6_SPECIAL */
+    case 160 + 8:  spell_RF6_TELE_TO(m_idx); break; /* RF6_TELE_TO */
+    case 160 + 9:  spell_RF6_TELE_AWAY(m_idx); break;   /* RF6_TELE_AWAY */
+    case 160 + 10: spell_RF6_TELE_LEVEL(m_idx); break;  /* RF6_TELE_LEVEL */
+    case 160 + 11: spell_RF6_PSY_SPEAR(y, x, m_idx); break; /* RF6_PSY_SPEAR */
+    case 160 + 12: spell_RF6_DARKNESS(m_idx); break;    /* RF6_DARKNESS */
+    case 160 + 13: spell_RF6_TRAPS(y, x, m_idx); break; /* RF6_TRAPS */
+    case 160 + 14: spell_RF6_FORGET(m_idx); break;  /* RF6_FORGET */
+    case 160 + 15: spell_RF6_RAISE_DEAD(m_idx); break;  /* RF6_RAISE_DEAD */
+    case 160 + 16: spell_RF6_S_KIN(y, x, m_idx); break; /* RF6_S_KIN */
+    case 160 + 17: spell_RF6_S_CYBER(y, x, m_idx); break;   /* RF6_S_CYBER */
+    case 160 + 18: spell_RF6_S_MONSTER(y, x, m_idx); break; /* RF6_S_MONSTER */
+    case 160 + 19: spell_RF6_S_MONSTERS(y, x, m_idx); break;    /* RF6_S_MONSTER */
+    case 160 + 20: spell_RF6_S_ANT(y, x, m_idx); break; /* RF6_S_ANT */
+    case 160 + 21: spell_RF6_S_SPIDER(y, x, m_idx); break;  /* RF6_S_SPIDER */
+    case 160 + 22: spell_RF6_S_HOUND(y, x, m_idx); break;   /* RF6_S_HOUND */
+    case 160 + 23: spell_RF6_S_HYDRA(y, x, m_idx); break;   /* RF6_S_HYDRA */
+    case 160 + 24: spell_RF6_S_ANGEL(y, x, m_idx); break;   /* RF6_S_ANGEL */
+    case 160 + 25: spell_RF6_S_DEMON(y, x, m_idx); break;   /* RF6_S_DEMON */
+    case 160 + 26: spell_RF6_S_UNDEAD(y, x, m_idx); break;  /* RF6_S_UNDEAD */
+    case 160 + 27: spell_RF6_S_DRAGON(y, x, m_idx); break;  /* RF6_S_DRAGON */
+    case 160 + 28: spell_RF6_S_HI_UNDEAD(y, x, m_idx); break;   /* RF6_S_HI_UNDEAD */
+    case 160 + 29: spell_RF6_S_HI_DRAGON(y, x, m_idx); break;   /* RF6_S_HI_DRAGON */
+    case 160 + 30: spell_RF6_S_AMBERITES(y, x, m_idx); break;   /* RF6_S_AMBERITES */
+    case 160 + 31: spell_RF6_S_UNIQUE(y, x, m_idx); break;  /* RF6_S_UNIQUE */
+    }
+    return 0;
+}
+
+int monspell_to_monster(int SPELL_NUM, int y, int x, int m_idx, int t_idx)
+{
+    switch (SPELL_NUM)
+    {
+    case 96 + 0:   spell_RF4_SHRIEK(m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF4_SHRIEK */
+    case 96 + 1:   return -1;   /* RF4_XXX1 */
+    case 96 + 2:   spell_RF4_DISPEL(m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF4_DISPEL */
+    case 96 + 3:   return spell_RF4_ROCKET(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_ROCKET */
+    case 96 + 4:   return spell_RF4_SHOOT(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);  /* RF4_SHOOT */
+    case 96 + 5:   return -1;   /* RF4_XXX2 */
+    case 96 + 6:   return -1;   /* RF4_XXX3 */
+    case 96 + 7:   return -1;   /* RF4_XXX4 */
+    case 96 + 8:   return spell_RF4_BREATH(GF_ACID, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_ACID */
+    case 96 + 9:   return spell_RF4_BREATH(GF_ELEC, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_ELEC */
+    case 96 + 10:  return spell_RF4_BREATH(GF_FIRE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_FIRE */
+    case 96 + 11:  return spell_RF4_BREATH(GF_COLD, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_COLD */
+    case 96 + 12:  return spell_RF4_BREATH(GF_POIS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_POIS */
+    case 96 + 13:  return spell_RF4_BREATH(GF_NETHER, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);  /* RF4_BR_NETH */
+    case 96 + 14:  return spell_RF4_BREATH(GF_LITE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_LITE */
+    case 96 + 15:  return spell_RF4_BREATH(GF_DARK, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_DARK */
+    case 96 + 16:  return spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);   /* RF4_BR_CONF */
+    case 96 + 17:  return spell_RF4_BREATH(GF_SOUND, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);   /* RF4_BR_SOUN */
+    case 96 + 18:  return spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);   /* RF4_BR_CHAO */
+    case 96 + 19:  return spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);  /* RF4_BR_DISE */
+    case 96 + 20:  return spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);   /* RF4_BR_NEXU */
+    case 96 + 21:  return spell_RF4_BREATH(GF_TIME, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_TIME */
+    case 96 + 22:  return spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_INER */
+    case 96 + 23:  return spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_BR_GRAV */
+    case 96 + 24:  return spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);  /* RF4_BR_SHAR */
+    case 96 + 25:  return spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);  /* RF4_BR_PLAS */
+    case 96 + 26:  return spell_RF4_BREATH(GF_FORCE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);   /* RF4_BR_WALL */
+    case 96 + 27:  return spell_RF4_BREATH(GF_MANA, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_MANA */
+    case 96 + 28:  return spell_RF4_BA_NUKE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BA_NUKE */
+    case 96 + 29:  return spell_RF4_BREATH(GF_NUKE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_NUKE */
+    case 96 + 30:  return spell_RF4_BA_CHAO(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BA_CHAO */
+    case 96 + 31:  return spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF4_BR_DISI */
+    case 128 + 0:  return spell_RF5_BA_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_ACID */
+    case 128 + 1:  return spell_RF5_BA_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_ELEC */
+    case 128 + 2:  return spell_RF5_BA_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_FIRE */
+    case 128 + 3:  return spell_RF5_BA_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_COLD */
+    case 128 + 4:  return spell_RF5_BA_POIS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_POIS */
+    case 128 + 5:  return spell_RF5_BA_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_NETH */
+    case 128 + 6:  return spell_RF5_BA_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_WATE */
+    case 128 + 7:  return spell_RF5_BA_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_MANA */
+    case 128 + 8:  return spell_RF5_BA_DARK(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_DARK */
+    case 128 + 9:  return spell_RF5_DRAIN_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_DRAIN_MANA */
+    case 128 + 10: return spell_RF5_MIND_BLAST(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_MIND_BLAST */
+    case 128 + 11: return spell_RF5_BRAIN_SMASH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BRAIN_SMASH */
+    case 128 + 12: return spell_RF5_CAUSE_1(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_CAUSE_1 */
+    case 128 + 13: return spell_RF5_CAUSE_2(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_CAUSE_2 */
+    case 128 + 14: return spell_RF5_CAUSE_3(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_CAUSE_3 */
+    case 128 + 15: return spell_RF5_CAUSE_4(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_CAUSE_4 */
+    case 128 + 16: return spell_RF5_BO_ACID(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_ACID */
+    case 128 + 17: return spell_RF5_BO_ELEC(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_ELEC */
+    case 128 + 18: return spell_RF5_BO_FIRE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_FIRE */
+    case 128 + 19: return spell_RF5_BO_COLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_COLD */
+    case 128 + 20: return spell_RF5_BA_LITE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BA_LITE */
+    case 128 + 21: return spell_RF5_BO_NETH(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_NETH */
+    case 128 + 22: return spell_RF5_BO_WATE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_WATE */
+    case 128 + 23: return spell_RF5_BO_MANA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_MANA */
+    case 128 + 24: return spell_RF5_BO_PLAS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_PLAS */
+    case 128 + 25: return spell_RF5_BO_ICEE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_BO_ICEE */
+    case 128 + 26: return spell_RF5_MISSILE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);    /* RF5_MISSILE */
+    case 128 + 27: spell_RF5_SCARE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF5_SCARE */
+    case 128 + 28: spell_RF5_BLIND(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF5_BLIND */
+    case 128 + 29: spell_RF5_CONF(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF5_CONF */
+    case 128 + 30: spell_RF5_SLOW(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF5_SLOW */
+    case 128 + 31: spell_RF5_HOLD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF5_HOLD */
+    case 160 + 0:  spell_RF6_HASTE(m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_HASTE */
+    case 160 + 1:  return spell_RF6_HAND_DOOM(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF6_HAND_DOOM */
+    case 160 + 2:  spell_RF6_HEAL(m_idx, t_idx, MONSTER_TO_MONSTER); break;    /* RF6_HEAL */
+    case 160 + 3:  spell_RF6_INVULNER(m_idx, t_idx, MONSTER_TO_MONSTER); break;    /* RF6_INVULNER */
+    case 160 + 4:  spell_RF6_BLINK(m_idx, MONSTER_TO_MONSTER); break;   /* RF6_BLINK */
+    case 160 + 5:  spell_RF6_TPORT(m_idx, MONSTER_TO_MONSTER); break;   /* RF6_TPORT */
+    case 160 + 6:  return -1; break;    /* RF6_WORLD */
+    }
+    return 0;
+}
\ No newline at end of file