OSDN Git Service

refactor: extract damage spells in monst_spell_monst
[hengbandforosx/hengbandosx.git] / src / mspells2.c
index 8181a77..0779e9e 100644 (file)
@@ -735,734 +735,65 @@ bool monst_spell_monst(int m_idx)
 
        switch (thrown_spell)
        {
-    case 96 + 0:  MM_spell_RF4_SHRIEK(m_idx, t_idx); break; /* RF4_SHRIEK */
-    case 96 + 1:  return FALSE;  /* RF4_XXX1 */
-    case 96 + 2:  MM_spell_RF4_DISPEL(m_idx, t_idx); break; /* RF4_DISPEL */
-    case 96 + 3:  dam = MM_spell_RF4_ROCKET(y, x, m_idx, t_idx); break; /* RF4_ROCKET */
-    case 96 + 4:  dam = MM_spell_RF4_SHOOT(y, x, m_idx, t_idx); 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 = MM_spell_RF4_BREATH(GF_ACID, y, x, m_idx, t_idx); break; /* RF4_BR_ACID */
-    case 96 + 9:  dam = MM_spell_RF4_BREATH(GF_ELEC, y, x, m_idx, t_idx); break; /* RF4_BR_ELEC */
-    case 96 + 10: dam = MM_spell_RF4_BREATH(GF_FIRE, y, x, m_idx, t_idx); break; /* RF4_BR_FIRE */
-    case 96 + 11: dam = MM_spell_RF4_BREATH(GF_COLD, y, x, m_idx, t_idx); break; /* RF4_BR_COLD */
-    case 96 + 12: dam = MM_spell_RF4_BREATH(GF_POIS, y, x, m_idx, t_idx); break; /* RF4_BR_POIS */
-    case 96 + 13: dam = MM_spell_RF4_BREATH(GF_NETHER, y, x, m_idx, t_idx); break; /* RF4_BR_NETH */
-    case 96 + 14: dam = MM_spell_RF4_BREATH(GF_LITE, y, x, m_idx, t_idx); break; /* RF4_BR_LITE */
-    case 96 + 15: dam = MM_spell_RF4_BREATH(GF_DARK, y, x, m_idx, t_idx); break; /* RF4_BR_DARK */
-    case 96 + 16: dam = MM_spell_RF4_BREATH(GF_CONFUSION, y, x, m_idx, t_idx); break; /* RF4_BR_CONF */
-    case 96 + 17: dam = MM_spell_RF4_BREATH(GF_SOUND, y, x, m_idx, t_idx); break; /* RF4_BR_SOUN */
-    case 96 + 18: dam = MM_spell_RF4_BREATH(GF_CHAOS, y, x, m_idx, t_idx); break; /* RF4_BR_CHAO */
-    case 96 + 19: dam = MM_spell_RF4_BREATH(GF_DISENCHANT, y, x, m_idx, t_idx); break; /* RF4_BR_DISE */
-    case 96 + 20: dam = MM_spell_RF4_BREATH(GF_NEXUS, y, x, m_idx, t_idx); break; /* RF4_BR_NEXU */
-    case 96 + 21: dam = MM_spell_RF4_BREATH(GF_TIME, y, x, m_idx, t_idx); break; /* RF4_BR_TIME */
-    case 96 + 22: dam = MM_spell_RF4_BREATH(GF_INERTIA, y, x, m_idx, t_idx); break; /* RF4_BR_INER */
-    case 96 + 23: dam = MM_spell_RF4_BREATH(GF_GRAVITY, y, x, m_idx, t_idx); break; /* RF4_BR_GRAV */
-    case 96 + 24: dam = MM_spell_RF4_BREATH(GF_SHARDS, y, x, m_idx, t_idx); break; /* RF4_BR_SHAR */
-    case 96 + 25: dam = MM_spell_RF4_BREATH(GF_PLASMA, y, x, m_idx, t_idx); break; /* RF4_BR_PLAS */
-    case 96 + 26: dam = MM_spell_RF4_BREATH(GF_FORCE, y, x, m_idx, t_idx); break; /* RF4_BR_WALL */
-    case 96 + 27: dam = MM_spell_RF4_BREATH(GF_MANA, y, x, m_idx, t_idx); break; /* RF4_BR_MANA */
-
-    /* RF4_BA_NUKE */
-    case 96 + 28:
-        if (known)
-        {
-            if (see_either)
-            {
-                disturb(1, 1);
-
-                if (blind)
-                {
-                    msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                }
-                else
-                {
-                    msg_format(_("%^s¤¬%s¤ËÊü¼Íǽµå¤òÊü¤Ã¤¿¡£", "%^s casts a ball of radiation at %s."), m_name, t_name);
-                }
-            }
-            else
-            {
-                mon_fight = TRUE;
-            }
-        }
-
-        dam = (rlev + damroll(10, 6));
-        breath(y, x, m_idx, GF_NUKE, dam, 2, FALSE, MS_BALL_NUKE, MONSTER_TO_MONSTER);
-
-        break;
-
-    case 96 + 29: dam = MM_spell_RF4_BREATH(GF_NUKE, y, x, m_idx, t_idx); break; /* RF4_BR_NUKE */
-    
-    /* RF4_BA_CHAO */
-    case 96 + 30:
-        if (known)
-        {
-            if (see_either)
-            {
-                disturb(1, 1);
-
-                if (blind)
-                {
-                    msg_format(_("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles frighteningly."), m_name);
-                }
-                else
-                {
-                    msg_format(_("%^s¤¬%s¤Ë½ã¥í¥°¥ë¥¹¤òÊü¤Ã¤¿¡£", "%^s invokes raw Logrus upon %s."), m_name, t_name);
-                }
-            }
-            else
-            {
-                mon_fight = TRUE;
-            }
-        }
-
-        dam = (rlev * 2) + damroll(10, 10);
-        breath(y, x, m_idx, GF_CHAOS, dam, 4, FALSE, MS_BALL_CHAOS, MONSTER_TO_MONSTER);
-        break;
-
-    case 96 + 31: dam = MM_spell_RF4_BREATH(GF_DISINTEGRATE, y, x, m_idx, t_idx); break; /* RF4_BR_DISI */
-
-       /* RF5_BA_ACID */
-       case 128+0:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                        "%^s casts an acid ball at %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (r_ptr->flags2 & RF2_POWERFUL)
-               {
-                       rad = 4;
-                       dam = (rlev * 4) + 50 + damroll(10, 10);
-               }
-               else
-               {
-                       rad = 2;
-                       dam = (randint1(rlev * 3) + 15);
-               }
-        breath(y, x, m_idx,GF_ACID, dam, rad, FALSE, MS_BALL_ACID, MONSTER_TO_MONSTER);
-               break;
-
-       /* RF5_BA_ELEC */
-       case 128+1:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a lightning ball at %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (r_ptr->flags2 & RF2_POWERFUL)
-               {
-                       rad = 4;
-                       dam = (rlev * 4) + 50 + damroll(10, 10);
-               }
-               else
-               {
-                       rad = 2;
-                       dam = (randint1(rlev * 3 / 2) + 8);
-               }
-        breath(y, x, m_idx,GF_ELEC, dam, rad, FALSE, MS_BALL_ELEC, MONSTER_TO_MONSTER);
-               break;
-
-       /* RF5_BA_FIRE */
-       case 128+2:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (m_ptr->r_idx == MON_ROLENTO)
-                               {
-                                       if (blind)
-                                               msg_format(_("%^s¤¬²¿¤«¤òÅꤲ¤¿¡£", "%^s throws something."), m_name);
-                                       else
-                                               msg_format(_("%^s¤¬%^s¤Ë¸þ¤«¤Ã¤Æ¼êÜØÃƤòÅꤲ¤¿¡£", "%^s throws a hand grenade."), m_name, t_name);
-                               }
-                               else
-                               {
-                                       if (blind)
-                                       {
-                                               msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                                       }
-                                       else
-                                       {
-                                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
-                                                                "%^s casts a fire ball at %s."), m_name, t_name);
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (r_ptr->flags2 & RF2_POWERFUL)
-               {
-                       rad = 4;
-                       dam = (rlev * 4) + 50 + damroll(10, 10);
-               }
-               else
-               {
-                       rad = 2;
-                       dam = (randint1(rlev * 7 / 2) + 10);
-               }
-        breath(y, x, m_idx,GF_FIRE, dam, rad, FALSE, MS_BALL_FIRE, MONSTER_TO_MONSTER);
-               break;
-
-       /* RF5_BA_COLD */
-       case 128+3:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                        "%^s casts a frost ball at %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (r_ptr->flags2 & RF2_POWERFUL)
-               {
-                       rad = 4;
-                       dam = (rlev * 4) + 50 + damroll(10, 10);
-               }
-               else
-               {
-                       rad = 2;
-                       dam = (randint1(rlev * 3 / 2) + 10);
-               }
-        breath(y, x, m_idx,GF_COLD, dam, rad, FALSE, MS_BALL_COLD, MONSTER_TO_MONSTER);
-               break;
-
-       /* RF5_BA_POIS */
-       case 128+4:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ°­½­±À¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                        "%^s casts a stinking cloud at %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(12, 2) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
-        breath(y, x, m_idx,GF_POIS, dam, 2, FALSE, MS_BALL_POIS, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BA_NETH */
-       case 128+5:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆÃϹöµå¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a nether ball at %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = 50 + damroll(10, 10) + (rlev * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1));
-        breath(y, x, m_idx,GF_NETHER, dam, 2, FALSE, MS_BALL_NETHER, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BA_WATE */
-       case 128+6:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤ËÂФ·¤Æή¤ì¤ë¤è¤¦¤Ê¿È¿¶¤ê¤ò¤·¤¿¡£", "%^s gestures fluidly at %s."), m_name, t_name);
-
-                                       msg_format(_("%^s¤Ï±²´¬¤Ë°û¤ß¹þ¤Þ¤ì¤¿¡£", "%^s is engulfed in a whirlpool."), t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = ((r_ptr->flags2 & RF2_POWERFUL) ? randint1(rlev * 3) : randint1(rlev * 2)) + 50;
-        breath(y, x, m_idx,GF_WATER, dam, 4, FALSE, MS_BALL_WATER, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BA_MANA */
-       case 128+7:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤ËÂФ·¤ÆËâÎϤÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a mana storm upon %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (rlev * 4) + 50 + damroll(10, 10);
-        breath(y, x, m_idx,GF_MANA, dam, 4, FALSE, MS_BALL_MANA, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BA_DARK */
-       case 128+8:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤ËÂФ·¤Æ°Å¹õ¤ÎÍò¤Î¼öʸ¤òÇ°¤¸¤¿¡£", "%^s invokes a darkness storm upon %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (rlev * 4) + 50 + damroll(10, 10);
-        breath(y, x, m_idx,GF_DARK, dam, 4, FALSE, MS_BALL_DARK, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_DRAIN_MANA */
-       case 128+9:
-               if (see_m)
-               {
-                       /* Basic message */
-                       msg_format(_("%^s¤ÏÀº¿À¥¨¥Í¥ë¥®¡¼¤ò%s¤«¤éµÛ¤¤¤È¤Ã¤¿¡£", "%^s draws psychic energy from %s."), m_name, t_name);
-               }
-
-               dam = ((randint1(rlev) / 2) + 1);
-        breath(y, x, m_idx,GF_DRAIN_MANA, dam, 0, FALSE, MS_DRAIN_MANA, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_MIND_BLAST */
-       case 128+10:
-               if (see_m)
-               {
-                       msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤Èâˤó¤À¡£", "%^s gazes intently at %s."), m_name, t_name);
-               }
-
-               dam = damroll(7, 7);
-        breath(y, x, m_idx,GF_MIND_BLAST, dam, 0, FALSE, MS_MIND_BLAST, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BRAIN_SMASH */
-       case 128+11:
-               if (see_m)
-               {
-                       msg_format(_("%^s¤Ï%s¤ò¤¸¤Ã¤Èâˤó¤À¡£", "%^s gazes intently at %s."), m_name, t_name);
-               }
-
-               dam = damroll(12, 12);
-        breath(y, x, m_idx,GF_BRAIN_SMASH, dam, 0, FALSE, MS_BRAIN_SMASH, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_CAUSE_1 */
-       case 128+12:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¤Æ¼ö¤¤¤ò¤«¤±¤¿¡£", "%^s points at %s and curses."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(3, 8);
-        breath(y, x, m_idx,GF_CAUSE_1, dam, 0, FALSE, MS_CAUSE_1, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_CAUSE_2 */
-       case 128+13:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¤Æ¶²¤í¤·¤²¤Ë¼ö¤¤¤ò¤«¤±¤¿¡£", 
-                                                "%^s points at %s and curses horribly."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(8, 8);
-        breath(y, x, m_idx,GF_CAUSE_2, dam, 0, FALSE, MS_CAUSE_2, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_CAUSE_3 */
-       case 128+14:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤Ï%s¤ò»Ø¤µ¤·¡¢¶²¤í¤·¤²¤Ë¼öʸ¤ò¾§¤¨¤¿¡ª", 
-                                                "%^s points at %s, incanting terribly!"), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(10, 15);
-        breath(y, x, m_idx,GF_CAUSE_3, dam, 0, FALSE, MS_CAUSE_3, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_CAUSE_4 */
-       case 128+15:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤¬%s¤ÎÈ빦¤òÆͤ¤¤Æ¡¢¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", 
-                                                "%^s points at %s, screaming the word, 'DIE!'"), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(15, 15);
-        breath(y, x, m_idx,GF_CAUSE_4, dam, 0, FALSE, MS_CAUSE_4, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_ACID */
-       case 128+16:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥·¥Ã¥É¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts an acid bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (damroll(7, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
-        bolt(m_idx, y, x, GF_ACID, dam, MS_BOLT_ACID, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_ELEC */
-       case 128+17:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥µ¥ó¥À¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a lightning bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (damroll(4, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
-        bolt(m_idx, y, x, GF_ELEC, dam, MS_BOLT_ELEC, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_FIRE */
-       case 128+18:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a fire bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (damroll(9, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
-        bolt(m_idx, y, x, GF_FIRE, dam, MS_BOLT_FIRE, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_COLD */
-       case 128+19:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¢¥¤¥¹¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a frost bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (damroll(6, 8) + (rlev / 3)) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1);
-        bolt(m_idx, y, x, GF_COLD, dam, MS_BOLT_COLD, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BA_LITE */
-       case 128+20:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles powerfully."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬%s¤ËÂФ·¤Æ¥¹¥¿¡¼¥Ð¡¼¥¹¥È¤Î¼öʸ¤òÇ°¤¸¤¿¡£", 
-                                                        "%^s invokes a starburst upon %s."), m_name, t_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (rlev * 4) + 50 + damroll(10, 10);
-        breath(y, x, m_idx,GF_LITE, dam, 4, FALSE, MS_STARBURST, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_NETH */
-       case 128+21:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆÃϹö¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
-                                                "%^s casts a nether bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = 30 + damroll(5, 5) + (rlev * 4) / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3);
-        bolt(m_idx, y, x, GF_NETHER, dam, MS_BOLT_NETHER, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_WATE */
-       case 128+22:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥¦¥©¡¼¥¿¡¼¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                "%^s casts a water bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(10, 10) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
-        bolt(m_idx, y, x, GF_WATER, dam, MS_BOLT_WATER, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_MANA */
-       case 128+23:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤ÆËâÎϤÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                "%^s casts a mana bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = randint1(rlev * 7 / 2) + 50;
-        bolt(m_idx, y, x, GF_MANA, dam, MS_BOLT_MANA, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_PLAS */
-       case 128+24:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥×¥é¥º¥Þ¡¦¥Ü¥ë¥È¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                "%^s casts a plasma bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = 10 + damroll(8, 7) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
-        bolt(m_idx, y, x, GF_PLASMA, dam, MS_BOLT_PLASMA, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_BO_ICEE */
-       case 128+25:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¶Ë´¨¤ÎÌð¤Î¼öʸ¤ò¾§¤¨¤¿¡£",
-                                                "%^s casts an ice bolt at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(6, 6) + (rlev * 3 / ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 3));
-        bolt(m_idx, y, x, GF_ICE, dam, MS_BOLT_ICE, MONSTER_TO_MONSTER);
-
-               break;
-
-       /* RF5_MISSILE */
-       case 128+26:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¥Þ¥¸¥Ã¥¯¡¦¥ß¥µ¥¤¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", 
-                                                "%^s casts a magic missile at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = damroll(2, 6) + (rlev / 3);
-        bolt(m_idx, y, x, GF_MISSILE, dam, MS_MAGIC_MISSILE, MONSTER_TO_MONSTER);
-
-               break;
+    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: