OSDN Git Service

refactor: extract summoning functions in monst_spell_monst
authordis- <dis.rogue@gmail.com>
Sun, 23 Feb 2014 15:11:43 +0000 (00:11 +0900)
committerdis- <dis.rogue@gmail.com>
Sun, 23 Feb 2014 15:11:43 +0000 (00:11 +0900)
src/externs.h
src/mspells2.c
src/mspells4.c

index a83d836..ed1a520 100644 (file)
@@ -1598,28 +1598,6 @@ extern bool spell_learnable(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_PSY_SPEAR(int y, int x, int m_idx);
-extern void spell_RF6_DARKNESS(int m_idx);
-extern void spell_RF6_TRAPS(int y, int x, int m_idx);
-extern void spell_RF6_FORGET(int m_idx);
-extern void spell_RF6_RAISE_DEAD(int m_idx);
-extern void spell_RF6_S_KIN(int y, int x, int m_idx);
-extern void spell_RF6_S_CYBER(int y, int x, int m_idx);
-extern void spell_RF6_S_MONSTER(int y, int x, int m_idx);
-extern void spell_RF6_S_MONSTERS(int y, int x, int m_idx);
-extern void spell_RF6_S_ANT(int y, int x, int m_idx);
-extern void spell_RF6_S_SPIDER(int y, int x, int m_idx);
-extern void spell_RF6_S_HOUND(int y, int x, int m_idx);
-extern void spell_RF6_S_HYDRA(int y, int x, int m_idx);
-extern void spell_RF6_S_ANGEL(int y, int x, int m_idx);
-extern void spell_RF6_S_DEMON(int y, int x, int m_idx);
-extern void spell_RF6_S_UNDEAD(int y, int x, int m_idx);
-extern void spell_RF6_S_DRAGON(int y, int x, int m_idx);
-extern void spell_RF6_S_HI_UNDEAD(int y, int x, int m_idx);
-extern void spell_RF6_S_HI_DRAGON(int y, int x, int m_idx);
-extern void spell_RF6_S_AMBERITES(int y, int x, int m_idx);
-extern void spell_RF6_S_UNIQUE(int y, int x, int m_idx);
-
 /* hissatsu.c */
 extern void hissatsu_info(char *p, int power);
 extern void do_cmd_hissatsu(void);
index 9109ac0..83d1138 100644 (file)
@@ -736,684 +736,6 @@ bool monst_spell_monst(int m_idx)
     dam = monspell_to_monster(thrown_spell, y, x, m_idx, t_idx);
     if (dam < 0)return FALSE;
 
-       switch (thrown_spell)
-    {
-
-       /* RF6_PSY_SPEAR */
-       case 160+11:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               msg_format(_("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", "%^s throw a Psycho-spear at %s."), m_name, t_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               dam = (r_ptr->flags2 & RF2_POWERFUL) ? (randint1(rlev * 2) + 180) : (randint1(rlev * 3 / 2) + 120);
-               beam(m_idx, y, x, GF_PSY_SPEAR, dam, MS_PSY_SPEAR, MONSTER_TO_MONSTER);
-               break;
-
-       /* RF6_DARKNESS */
-       case 160+12:
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               if (can_use_lite_area)
-                               {
-                                       msg_format(_("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", "%^s cast a spell to light up."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", "%^s gestures in shadow."), m_name);
-                               }
-
-                               if (see_t)
-                               {
-                                       if (can_use_lite_area)
-                                       {
-                                               msg_format(_("%^s¤ÏÇò¤¤¸÷¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by a white light."), t_name);
-                                       }
-                                       else
-                                       {
-                                               msg_format(_("%^s¤Ï°Å°Ç¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by darkness."), t_name);
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (can_use_lite_area)
-               {
-                       (void)project(m_idx, 3, y, x, 0, GF_LITE_WEAK, PROJECT_GRID | PROJECT_KILL, -1);
-                       lite_room(y, x);
-               }
-               else
-               {
-                       (void)project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL, MS_DARKNESS);
-                       unlite_room(y, x);
-               }
-
-               break;
-
-       /* RF6_TRAPS */
-       case 160+13:
-#if 0
-               if (known)
-               {
-                       if (see_m)
-                       {
-                               msg_format(_("%^s¤¬¼öʸ¤ò¾§¤¨¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", "%^s casts a spell and cackles evilly."), m_name);
-                       }
-                       else
-                       {
-                               msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                       }
-               }
-
-               trap_creation(y, x);
-
-               break;
-#else
-               /* Not implemented */
-               return FALSE;
-#endif
-
-       /* RF6_FORGET */
-       case 160+14:
-               /* Not implemented */
-               return FALSE;
-
-       /* RF6_RAISE_DEAD */
-       case 160+15:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-                               if (blind)
-                               {
-                                       msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-                               }
-                               else
-                               {
-                                       msg_format(_("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a spell to revive corpses."), m_name);
-                               }
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-               animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
-               break;
-
-       /* RF6_S_KIN */
-       case 160+16:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
-                               {
-                                       msg_format(_("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", "%^s magically summons guardians of dungeons."), m_name);
-                               }
-                               else
-                               {
-                                       _(msg_format("%s¤¬ËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£", m_name, ((r_ptr->flags1 & RF1_UNIQUE) ? "¼ê²¼" : "Ãç´Ö")),   
-                                         msg_format("%^s magically summons %s %s.", m_name, m_poss, ((r_ptr->flags1 & RF1_UNIQUE) ? "minions" : "kin")));
-                               }
-
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               switch (m_ptr->r_idx)
-               {
-               case MON_MENELDOR:
-               case MON_GWAIHIR:
-               case MON_THORONDOR:
-                       {
-                               int num = 4 + randint1(3);
-                               for (k = 0; k < num; k++)
-                               {
-                                       count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-                               }
-                       }
-                       break;
-
-               case MON_BULLGATES:
-                       {
-                               int num = 2 + randint1(3);
-                               for (k = 0; k < num; k++)
-                               {
-                                       count += summon_named_creature(m_idx, y, x, MON_IE, 0);
-                               }
-                       }
-                       break;
-
-               case MON_SERPENT:
-               case MON_ZOMBI_SERPENT:
-                       if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
-                       {
-                               if (known && see_t)
-                               {
-                                       msg_print(_("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª", "Water blew off from the ground!"));
-                               }
-                               project(t_idx, 8, y, x, 3, GF_WATER_FLOW, PROJECT_GRID | PROJECT_HIDE, -1);
-                       }
-
-                       {
-                               int num = 2 + randint1(3);
-                               for (k = 0; k < num; k++)
-                               {
-                                       count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-                               }
-                       }
-                       break;
-
-               case MON_CALDARM:
-                       {
-                               int num = randint1(3);
-                               for (k = 0; k < num; k++)
-                               {
-                                       count += summon_named_creature(m_idx, y, x, MON_LOCKE_CLONE, 0);
-                               }
-                       }
-                       break;
-
-               case MON_LOUSY:
-                       {
-                               int num = 2 + randint1(3);
-                               for (k = 0; k < num; k++)
-                               {
-                                       count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, (PM_ALLOW_GROUP));
-                               }
-                       }
-                       break;
-
-               default:
-                       summon_kin_type = r_ptr->d_char;
-
-                       for (k = 0; k < 4; k++)
-                       {
-                               count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, (PM_ALLOW_GROUP));
-                       }
-                       break;
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_CYBER */
-       case 160+17:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Cyberdemons!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               if (is_friendly(m_ptr))
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
-               }
-               else
-               {
-                       count += summon_cyber(m_idx, y, x);
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_MONSTER */
-       case 160+18:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons help!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               count += summon_specific(m_idx, y, x, rlev, 0, (u_mode));
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_MONSTERS */
-       case 160+19:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons monsters!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_6; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | u_mode));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_ANT */
-       case 160+20:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", "%^s magically summons ants."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_6; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_SPIDER */
-       case 160+21:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", "%^s magically summons spiders."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_6; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_HOUND */
-       case 160+22:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hounds."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_4; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_HYDRA */
-       case 160+23:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hydras."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_4; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_ANGEL */
-       case 160+24:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons an angel!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               {
-                       int num = 1;
-
-                       if ((r_ptr->flags1 & RF1_UNIQUE) && !easy_band)
-                       {
-                               num += r_ptr->level/40;
-                       }
-
-                       for (k = 0; k < num; k++)
-                       {
-                               count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP));
-                       }
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_DEMON */
-       case 160+25:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Çº®Æ٤εÜÄ¤é¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", 
-                                                "%^s magically summons a demon from the Courts of Chaos!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < 1; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_UNDEAD */
-       case 160+26:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < 1; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_DRAGON */
-       case 160+27:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a dragon!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < 1; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, (PM_ALLOW_GROUP));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_HI_UNDEAD */
-       case 160+28:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_6; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | u_mode));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_HI_DRAGON */
-       case 160+29:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons ancient dragons!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_4; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | u_mode));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_AMBERITES */
-       case 160+30:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Lords of Amber!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_4; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-
-       /* RF6_S_UNIQUE */
-       case 160+31:
-               if (known)
-               {
-                       if (see_either)
-                       {
-                               disturb(1, 1);
-
-                               msg_format(_("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons special opponents!"), m_name);
-                       }
-                       else
-                       {
-                               mon_fight = TRUE;
-                       }
-               }
-
-               for (k = 0; k < s_num_4; k++)
-               {
-                       count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-               }
-
-               {
-                       int non_unique_type = SUMMON_HI_UNDEAD;
-
-                       if ((m_ptr->sub_align & (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL)) == (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL))
-                               non_unique_type = 0;
-                       else if (m_ptr->sub_align & SUB_ALIGN_GOOD)
-                               non_unique_type = SUMMON_ANGEL;
-
-                       for (k = count; k < s_num_4; k++)
-                       {
-                               count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-                       }
-               }
-
-               if (known && !see_t && count)
-               {
-                       mon_fight = TRUE;
-               }
-
-               break;
-       }
-
-       if (wake_up) (void)set_monster_csleep(t_idx, 0);
-
-       if (fear && see_t)
-       {
-               msg_format(_("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", "%^s flees in terror!"), t_name);
-       }
-
        if (m_ptr->ml && maneable && !world_monster && !p_ptr->blind && (p_ptr->pclass == CLASS_IMITATOR))
        {
                if (thrown_spell != 167) /* Not RF6_SPECIAL */
index 34e9340..aa8c147 100644 (file)
@@ -47,19 +47,18 @@ bool monster_is_powerful(int m_idx)
     return (r_ptr->flags2 & RF2_POWERFUL);
 }
 
-void monster_wakeup(int t_idx)
+u32b monster_u_mode(int m_idx)
 {
-    (void)set_monster_csleep(t_idx, 0);
+       u32b u_mode = 0L;
+    monster_type    *m_ptr = &m_list[m_idx];
+       bool pet = is_pet(m_ptr);
+       if (!pet) u_mode |= PM_ALLOW_UNIQUE;
+       return u_mode;
 }
 
-void monster_fear_message(int t_idx)
+void monster_wakeup(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)set_monster_csleep(t_idx, 0);
 }
 
 void monspell_message_base(int m_idx, int t_idx, cptr msg1, cptr msg2, cptr msg3, cptr msg4, bool msg_flag, int TARGET_TYPE)
@@ -1906,56 +1905,94 @@ void spell_RF6_TELE_LEVEL(int m_idx, int t_idx, int TARGET_TYPE)
     }
 }
 
-int spell_RF6_PSY_SPEAR(int y, int x, int m_idx)
+int spell_RF6_PSY_SPEAR(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
-    monster_type    *m_ptr = &m_list[m_idx];
-    monster_race    *r_ptr = &r_info[m_ptr->r_idx];
-       int rlev = monster_level_idx(m_idx);
     int dam;
-       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 throw a Psycho-Spear."), m_name);
+    int rlev = monster_level_idx(m_idx);
 
-    dam = (r_ptr->flags2 & RF2_POWERFUL) ? (randint1(rlev * 2) + 150) : (randint1(rlev * 3 / 2) + 100);
+    monspell_message(m_idx, t_idx,
+        _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+        _("%^s¤¬¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", "%^s throw a Psycho-Spear."),
+        _("%^s¤¬%s¤Ë¸þ¤«¤Ã¤Æ¸÷¤Î·õ¤òÊü¤Ã¤¿¡£", "%^s throw a Psycho-spear at %s."),
+        TARGET_TYPE);
+       
+    dam = monster_is_powerful(m_idx) ? (randint1(rlev * 2) + 150) : (randint1(rlev * 3 / 2) + 100);
     beam(m_idx, y, x, GF_PSY_SPEAR, dam, MS_PSY_SPEAR, MONSTER_TO_PLAYER);
     return dam;
 }
 
-void spell_RF6_DARKNESS(int m_idx)
+void spell_RF6_DARKNESS(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
     monster_type    *m_ptr = &m_list[m_idx];
+    monster_type    *t_ptr = &m_list[t_idx];
     monster_race    *r_ptr = &r_info[m_ptr->r_idx];
     bool can_use_lite_area = FALSE;
-       char m_name[80];
-    monster_name(m_idx, m_name);
+       bool monster_to_monster = TARGET_TYPE == MONSTER_TO_MONSTER;
+       bool monster_to_player = TARGET_TYPE == MONSTER_TO_PLAYER;
+       char t_name[80];
+       monster_name(t_idx, t_name);
 
     if ((p_ptr->pclass == CLASS_NINJA) &&
         !(r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) &&
         !(r_ptr->flags7 & RF7_DARK_MASK))
         can_use_lite_area = TRUE;
-    disturb(1, 1);
 
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else if (can_use_lite_area)
-        msg_format(_("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", "%^s cast a spell to light up."), m_name);
-    else
-        msg_format(_("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", "%^s gestures in shadow."), m_name);
+       if(monster_to_monster && !is_hostile(t_ptr))
+        can_use_lite_area = FALSE;
 
-    if (can_use_lite_area)
-    {
-        (void)lite_area(0, 3);
-    }
-    else
-    {
-        learn_spell(MS_DARKNESS);
-        (void)unlite_area(0, 3);
-    }
+       
+       if (can_use_lite_area)
+       {
+               monspell_message(m_idx, t_idx,
+                       _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+                       _("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", "%^s cast a spell to light up."),
+                       _("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", "%^s cast a spell to light up."),
+                       TARGET_TYPE);
+
+               if (see_monster(t_idx) && monster_to_monster)
+               {
+                       msg_format(_("%^s¤ÏÇò¤¤¸÷¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by a white light."), t_name);
+               }
+       }
+       else
+       {
+               monspell_message(m_idx, t_idx,
+                       _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+                       _("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", "%^s gestures in shadow."),
+                       _("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", "%^s gestures in shadow."),
+                       TARGET_TYPE);
+
+               if (see_monster(t_idx) && monster_to_monster)
+               {
+                       msg_format(_("%^s¤Ï°Å°Ç¤ËÊñ¤Þ¤ì¤¿¡£", "%^s is surrounded by darkness."), t_name);
+               }
+       }
+
+       if(monster_to_player)
+       {
+               if (can_use_lite_area)
+               {
+                       (void)lite_area(0, 3);
+               }
+               else
+               {
+                       learn_spell(MS_DARKNESS);
+                       (void)unlite_area(0, 3);
+               }
+       }
+       else if(monster_to_monster)
+       {
+               if (can_use_lite_area)
+               {
+                       (void)project(m_idx, 3, y, x, 0, GF_LITE_WEAK, PROJECT_GRID | PROJECT_KILL, -1);
+                       lite_room(y, x);
+               }
+               else
+               {
+                       (void)project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL, MS_DARKNESS);
+                       unlite_room(y, x);
+               }
+       }
 }
 
 void spell_RF6_TRAPS(int y, int x, int m_idx)
@@ -1997,58 +2034,150 @@ void spell_RF6_FORGET(int m_idx)
     learn_spell(MS_FORGET);
 }
 
-void spell_RF6_RAISE_DEAD(int m_idx)
+void spell_RF6_RAISE_DEAD(int m_idx, int t_idx, int TARGET_TYPE)
 {
     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 casts a spell to revive corpses."), m_name);
+    monspell_message(m_idx, t_idx,
+        _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+        _("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a spell to revive corpses."),
+        _("%^s¤¬»à¼ÔÉü³è¤Î¼öʸ¤ò¾§¤¨¤¿¡£", "%^s casts a spell to revive corpses."),
+        TARGET_TYPE);
 
     animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
 }
 
-void spell_RF6_S_KIN(int y, int x, int m_idx)
+int summon_EAGLE(int y, int x, int rlev, int m_idx)
+{
+       int k, count = 0;       
+       int num = 4 + randint1(3);
+       for (k = 0; k < num; k++)
+       {
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+       }
+       return count;
+}
+
+int summon_IE(int y, int x, int rlev, int m_idx, int mode)
+{
+       int k, count = 0;       
+       int num = 2 + randint1(3);
+    for (k = 0; k < num; k++)
+    {
+        count += summon_named_creature(m_idx, y, x, MON_IE, mode);
+    }
+       return count;
+}
+
+int summon_Guardian(int y, int x, int rlev, int m_idx, int t_idx, int TARGET_TYPE)
+{
+       int k, count = 0;       
+       int num = 2 + randint1(3);
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+
+    if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
+    {
+               simple_monspell_message(m_idx, t_idx,
+                       _("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª", "Water blew off from the ground!"),
+                       _("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª", "Water blew off from the ground!"),
+                       TARGET_TYPE);
+
+               if(mon_to_player)
+               fire_ball_hide(GF_WATER_FLOW, 0, 3, 8);
+               else if(mon_to_mon)
+                       project(t_idx, 8, y, x, 3, GF_WATER_FLOW, PROJECT_GRID | PROJECT_HIDE, -1);
+    }
+
+    for (k = 0; k < num; k++)
+    {
+        count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+    }
+       return count;
+}
+
+int summon_LOCK_CLONE(int y, int x, int rlev, int m_idx, int mode)
+{
+       int k, count = 0;       
+       int num = randint1(3);
+    for (k = 0; k < num; k++)
+    {
+        count += summon_named_creature(m_idx, y, x, MON_LOCKE_CLONE, mode);
+    }
+       return count;
+}
+
+int summon_LOUSE(int y, int x, int rlev, int m_idx)
+{
+       int k, count = 0;       
+       int num = 2 + randint1(3);
+    for (k = 0; k < num; k++)
+    {
+        count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP);
+    }
+       return count;
+}
+
+int summon_Kin(int y, int x, int rlev, int m_idx)
+{
+       int k, count = 0;
+    monster_type    *m_ptr = &m_list[m_idx];
+    monster_race    *r_ptr = &r_info[m_ptr->r_idx];
+       summon_kin_type = r_ptr->d_char; /* Big hack */
+
+       for (k = 0; k < 4; k++)
+       {
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP);
+       }
+       return count;
+}
+
+void spell_RF6_S_KIN(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+       bool known = monster_near_player(m_idx, t_idx);
+    bool see_either = see_monster(m_idx) || see_monster(t_idx);
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
     monster_type    *m_ptr = &m_list[m_idx];
     monster_race    *r_ptr = &r_info[m_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
-    int count = 0, k;
+    int count = 0;
     u32b mode = 0L;
-       char m_name[80];
+       char m_name[80], t_name[80], m_poss[80];
     monster_name(m_idx, m_name);
+       monster_name(t_idx, t_name);
+       monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
 
     disturb(1, 1);
     if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
     {
-        if (p_ptr->blind)
-            msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-        else
-            msg_format(_("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£",
-            "%^s magically summons guardians of dungeons."), m_name);
+               monspell_message(m_idx, t_idx,
+                       _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+                       _("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", "%^s magically summons guardians of dungeons."),
+                       _("%^s¤¬¥À¥ó¥¸¥ç¥ó¤Î¼ç¤ò¾¤´­¤·¤¿¡£", "%^s magically summons guardians of dungeons."),
+                       TARGET_TYPE);
     }
     else
     {
-        if (p_ptr->blind)
-            msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-        else
-#ifdef JP
-            msg_format("%^s¤ÏËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£",
-            m_name,
-            ((r_ptr->flags1) & RF1_UNIQUE ?
-            "¼ê²¼" : "Ãç´Ö"));
-#else
-            msg_format("%^s magically summons %s %s.",
-            m_name, m_poss,
-            ((r_ptr->flags1) & RF1_UNIQUE ?
-            "minions" : "kin"));
-#endif
+               if (mon_to_player || (mon_to_mon && known && see_either))
+                       disturb(1, 1);
+
+               if (p_ptr->blind)
+               {
+                       if (mon_to_player)
+                               msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
+               }
+               else
+               {
+                       if (mon_to_player || (mon_to_mon && known && see_either))
+                       {
+                               _(msg_format("%s¤¬ËâË¡¤Ç%s¤ò¾¤´­¤·¤¿¡£", m_name, ((r_ptr->flags1 & RF1_UNIQUE) ? "¼ê²¼" : "Ãç´Ö")),
+                                 msg_format("%^s magically summons %s %s.", m_name, m_poss, ((r_ptr->flags1 & RF1_UNIQUE) ? "minions" : "kin")));
+                       }
+               }
+
+               if (mon_to_mon && known && !see_either)
+                       mon_fight = TRUE;
     }
 
     switch (m_ptr->r_idx)
@@ -2056,260 +2185,259 @@ void spell_RF6_S_KIN(int y, int x, int m_idx)
         case MON_MENELDOR:
         case MON_GWAIHIR:
         case MON_THORONDOR:
-        {
-            int num = 4 + randint1(3);
-            for (k = 0; k < num; k++)
-            {
-                count += summon_specific(m_idx, y, x, rlev, SUMMON_EAGLES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-            }
-        }
-        break;
+                       count += summon_EAGLE(y, x, rlev, m_idx);
+                       break;
 
         case MON_BULLGATES:
-        {
-            int num = 2 + randint1(3);
-            for (k = 0; k < num; k++)
-            {
-                count += summon_named_creature(m_idx, y, x, MON_IE, mode);
-            }
-        }
-        break;
+                       count += summon_IE(y, x, rlev, m_idx, mode);
+               break;
 
         case MON_SERPENT:
         case MON_ZOMBI_SERPENT:
-        {
-            int num = 2 + randint1(3);
-
-            if (r_info[MON_JORMUNGAND].cur_num < r_info[MON_JORMUNGAND].max_num && one_in_(6))
-            {
-                msg_print(_("ÃÏÌ̤«¤é¿å¤¬¿á¤­½Ð¤·¤¿¡ª", "Water blew off from the ground!"));
-                fire_ball_hide(GF_WATER_FLOW, 0, 3, 8);
-            }
-
-            for (k = 0; k < num; k++)
-            {
-                count += summon_specific(m_idx, y, x, rlev, SUMMON_GUARDIANS, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
-            }
-        }
-        break;
-
+                       count += summon_Guardian(y, x, rlev, m_idx, t_idx, TARGET_TYPE);
+               break;
+                       
         case MON_CALDARM:
-        {
-            int num = randint1(3);
-            for (k = 0; k < num; k++)
-            {
-                count += summon_named_creature(m_idx, y, x, MON_LOCKE_CLONE, mode);
-            }
-        }
-        break;
+                       count += summon_LOCK_CLONE(y, x, rlev, m_idx, mode);
+                       break;
 
         case MON_LOUSY:
-        {
-            int num = 2 + randint1(3);
-            for (k = 0; k < num; k++)
-            {
-                count += summon_specific(m_idx, y, x, rlev, SUMMON_LOUSE, PM_ALLOW_GROUP);
-            }
-        }
-        break;
+                       count += summon_LOUSE(y, x, rlev, m_idx);
+               break;
 
         default:
-        summon_kin_type = r_ptr->d_char; /* Big hack */
-
-        for (k = 0; k < 4; k++)
-        {
-            count += summon_specific(m_idx, y, x, rlev, SUMMON_KIN, PM_ALLOW_GROUP);
-        }
-        break;
+                       count += summon_Kin(y, x, rlev, m_idx);
+                       break;
     }
     
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
+
+       if (known && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_CYBER(int y, int x, int m_idx)
+void spell_RF6_S_CYBER(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
     int count = 0;
-       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 magically summons Cyberdemons!"), m_name);
+    monster_type    *m_ptr = &m_list[m_idx];
+    int rlev = monster_level_idx(m_idx);
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Cyberdemons!"),
+               _("%^s¤¬¥µ¥¤¥Ð¡¼¥Ç¡¼¥â¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Cyberdemons!"),
+               TARGET_TYPE);
 
-    count = summon_cyber(m_idx, y, x);
+       if (is_friendly(m_ptr) && mon_to_mon)
+       {
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_CYBER, (PM_ALLOW_GROUP));
+       }
+       else
+       {
+               count += summon_cyber(m_idx, y, x);
+       }
 
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("½Å¸ü¤Ê­²»¤¬¶á¤¯¤Çʹ¤³¤¨¤ë¡£", "You hear heavy steps nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_MONSTER(int y, int x, int m_idx)
+
+void spell_RF6_S_MONSTER(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons help!"), m_name);
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons help!"),
+               _("%^s¤¬ËâË¡¤ÇÃç´Ö¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons help!"),
+               TARGET_TYPE);
 
     for (k = 0; k < 1; k++)
     {
-        count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               if(mon_to_player)
+               count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+
+               if(mon_to_mon)
+                       count += summon_specific(m_idx, y, x, rlev, 0, (monster_u_mode(m_idx)));
     }
-    if (p_ptr->blind && count)
+
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear something appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_MONSTERS(int y, int x, int m_idx)
+void spell_RF6_S_MONSTERS(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons monsters!"), m_name);
-
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons monsters!"),
+               _("%^s¤¬ËâË¡¤Ç¥â¥ó¥¹¥¿¡¼¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons monsters!"),
+               TARGET_TYPE);
+       
     for (k = 0; k < S_NUM_6; k++)
     {
-        count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+               if(mon_to_player)
+                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+
+               if(mon_to_mon)
+                       count += summon_specific(m_idx, y, x, rlev, 0, (PM_ALLOW_GROUP | monster_u_mode(m_idx)));
     }
 
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_ANT(int y, int x, int m_idx)
+void spell_RF6_S_ANT(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons ants."), m_name);
-
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", "%^s magically summons ants."),
+               _("%^s¤¬ËâË¡¤Ç¥¢¥ê¤ò¾¤´­¤·¤¿¡£", "%^s magically summons ants."),
+               TARGET_TYPE);
+       
     for (k = 0; k < S_NUM_6; k++)
     {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_ANT, PM_ALLOW_GROUP);
     }
 
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_SPIDER(int y, int x, int m_idx)
+void spell_RF6_S_SPIDER(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons spiders."), m_name);
-
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", "%^s magically summons spiders."),
+               _("%^s¤¬ËâË¡¤Ç¥¯¥â¤ò¾¤´­¤·¤¿¡£", "%^s magically summons spiders."),
+               TARGET_TYPE);
+       
     for (k = 0; k < S_NUM_6; k++)
     {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_SPIDER, PM_ALLOW_GROUP);
     }
 
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_HOUND(int y, int x, int m_idx)
+void spell_RF6_S_HOUND(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons hounds."), m_name);
-
-    for (k = 0; k < S_NUM_4; k++)
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hounds."),
+               _("%^s¤¬ËâË¡¤Ç¥Ï¥¦¥ó¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hounds."),
+               TARGET_TYPE);
+       
+       for (k = 0; k < S_NUM_4; k++)
     {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_HOUND, PM_ALLOW_GROUP);
     }
 
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_HYDRA(int y, int x, int m_idx)
+void spell_RF6_S_HYDRA(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons hydras."), m_name);
-
-    for (k = 0; k < S_NUM_4; k++)
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hydras."),
+               _("%^s¤¬ËâË¡¤Ç¥Ò¥É¥é¤ò¾¤´­¤·¤¿¡£", "%^s magically summons hydras."),
+               TARGET_TYPE);
+       
+       for (k = 0; k < S_NUM_4; k++)
     {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_HYDRA, PM_ALLOW_GROUP);
     }
-    if (p_ptr->blind && count)
+
+    if (p_ptr->blind && count && mon_to_player)
         msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_ANGEL(int y, int x, int m_idx)
+void spell_RF6_S_ANGEL(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    int num = 1;
     monster_type    *m_ptr = &m_list[m_idx];
     monster_race    *r_ptr = &r_info[m_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-    int num = 1;
-       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 magically summons an angel!"), m_name);
-
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons an angel!"),
+               _("%^s¤¬ËâË¡¤ÇÅ·»È¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons an angel!"),
+               TARGET_TYPE);
+       
     if ((r_ptr->flags1 & RF1_UNIQUE) && !easy_band)
     {
         num += r_ptr->level / 40;
     }
-
-    for (k = 0; k < num; k++)
-    {
+       
+       for (k = 0; k < num; k++)
+       {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, PM_ALLOW_GROUP);
-    }
-
+       }
+       
     if (count < 2)
     {
         if (p_ptr->blind && count)
@@ -2320,220 +2448,266 @@ void spell_RF6_S_ANGEL(int y, int x, int m_idx)
         if (p_ptr->blind)
             msg_print(_("¿¤¯¤Î¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear many things appear nearby."));
     }
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_DEMON(int y, int x, int m_idx)
+void spell_RF6_S_DEMON(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons a demon from the Courts of Chaos!"), m_name);
-
-    for (k = 0; k < 1; k++)
-    {
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤ÏËâË¡¤Çº®Æ٤εÜÄ¤é°­Ëâ¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a demon from the Courts of Chaos!"),
+               _("%^s¤ÏËâË¡¤Çº®Æ٤εÜÄ¤é°­Ëâ¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a demon from the Courts of Chaos!"),
+               TARGET_TYPE);
+       
+       for (k = 0; k < 1; k++)
+       {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_DEMON, PM_ALLOW_GROUP);
-    }
-
+       }
+       
     if (p_ptr->blind && count)
         msg_print(_("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear something appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_UNDEAD(int y, int x, int m_idx)
+void spell_RF6_S_UNDEAD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-       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 magically summons an undead adversary!"), m_name);
-
-    for (k = 0; k < 1; k++)
-    {
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤Î¶¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons an undead adversary!"),
+               _("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."),
+               TARGET_TYPE);
+       
+       for (k = 0; k < 1; k++)
+       {
         count += summon_specific(m_idx, y, x, rlev, SUMMON_UNDEAD, PM_ALLOW_GROUP);
-    }
-
+       }
+       
     if (p_ptr->blind && count)
         msg_print(_("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear something appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_DRAGON(int y, int x, int m_idx)
+void spell_RF6_S_DRAGON(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a dragon!"),
+               _("%^s¤¬ËâË¡¤Ç¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons a dragon!"),
+               TARGET_TYPE);
+       
+       for (k = 0; k < 1; k++)
+       {
+        count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, PM_ALLOW_GROUP);
+       }
+       
+    if (p_ptr->blind && count)
+        msg_print(_("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear something appear nearby."));
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
+}
+
+int summon_NAZGUL(int y, int x, int m_idx, int mode)
+{
+       int count = 0, k;
+       int cy = y;
+    int cx = x;
        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 magically summons a dragon!"), m_name);
+        msg_format(_("%^s¤¬ËâË¡¤ÇÍ©µ´ÀïÂâ¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons rangers of Nazgul!"), m_name);
 
-    for (k = 0; k < 1; k++)
+    msg_print(NULL);
+
+    for (k = 0; k < 30; k++)
     {
-        count += summon_specific(m_idx, y, x, rlev, SUMMON_DRAGON, PM_ALLOW_GROUP);
+        if (!summon_possible(cy, cx) || !cave_empty_bold(cy, cx))
+        {
+            int j;
+            for (j = 100; j > 0; j--)
+            {
+                scatter(&cy, &cx, y, x, 2, 0);
+                if (cave_empty_bold(cy, cx)) break;
+            }
+            if (!j) break;
+        }
+        if (!cave_empty_bold(cy, cx)) continue;
+
+        if (summon_named_creature(m_idx, cy, cx, MON_NAZGUL, mode))
+        {
+            y = cy;
+            x = cx;
+            count++;
+            if (count == 1)
+                msg_format(_("¡ÖÍ©µ´ÀïÂâ%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×",
+                "A Nazgul says 'Nazgul-Rangers Number %d, Nazgul-Black!'"), count);
+            else
+                msg_format(_("¡ÖƱ¤¸¤¯%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×",
+                "Another one says 'Number %d, Nazgul-Black!'"), count);
+
+            msg_print(NULL);
+        }
     }
-    if (p_ptr->blind && count)
-        msg_print(_("²¿¤«¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬¤¹¤ë¡£", "You hear something appear nearby."));
+    msg_format(_("¡Ö%d¿Í¤½¤í¤Ã¤Æ¡¢¥ê¥ó¥°¥ì¥ó¥¸¥ã¡¼¡ª¡×",
+        "They say 'The %d meets! We are the Ring-Ranger!'."), count);
+    msg_print(NULL);
+       return count;
 }
 
-void spell_RF6_S_HI_UNDEAD(int y, int x, int m_idx)
+void spell_RF6_S_HI_UNDEAD(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
-    char* m_name = monster_name(m_idx, "");
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
     monster_type    *m_ptr = &m_list[m_idx];
     monster_race    *r_ptr = &r_info[m_ptr->r_idx];
     int rlev = monster_level_idx(m_idx);
     u32b mode = 0L;
     int k, count = 0;
+       char m_name[80];
+    monster_name(m_idx, m_name);
+
     disturb(1, 1);
 
-    if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) && ((r_info[MON_NAZGUL].cur_num + 2) < r_info[MON_NAZGUL].max_num))
+    if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) &&
+               ((r_info[MON_NAZGUL].cur_num + 2) < r_info[MON_NAZGUL].max_num) &&
+               mon_to_player)
     {
-        int cy = y;
-        int cx = x;
-
-        if (p_ptr->blind)
-            msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-        else
-            msg_format(_("%^s¤¬ËâË¡¤ÇÍ©µ´ÀïÂâ¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons rangers of Nazgul!"), m_name);
-
-        msg_print(NULL);
-
-        for (k = 0; k < 30; k++)
-        {
-            if (!summon_possible(cy, cx) || !cave_empty_bold(cy, cx))
-            {
-                int j;
-                for (j = 100; j > 0; j--)
-                {
-                    scatter(&cy, &cx, y, x, 2, 0);
-                    if (cave_empty_bold(cy, cx)) break;
-                }
-                if (!j) break;
-            }
-            if (!cave_empty_bold(cy, cx)) continue;
-
-            if (summon_named_creature(m_idx, cy, cx, MON_NAZGUL, mode))
-            {
-                y = cy;
-                x = cx;
-                count++;
-                if (count == 1)
-                    msg_format(_("¡ÖÍ©µ´ÀïÂâ%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×",
-                    "A Nazgul says 'Nazgul-Rangers Number %d, Nazgul-Black!'"), count);
-                else
-                    msg_format(_("¡ÖƱ¤¸¤¯%d¹æ¡¢¥Ê¥º¥°¥ë¡¦¥Ö¥é¥Ã¥¯¡ª¡×",
-                    "Another one says 'Number %d, Nazgul-Black!'"), count);
-
-                msg_print(NULL);
-            }
-        }
-        msg_format(_("¡Ö%d¿Í¤½¤í¤Ã¤Æ¡¢¥ê¥ó¥°¥ì¥ó¥¸¥ã¡¼¡ª¡×",
-            "They say 'The %d meets! We are the Ring-Ranger!'."), count);
-        msg_print(NULL);
+        count +=  summon_NAZGUL(y, x, m_idx, mode);
     }
     else
-    {
-        if (p_ptr->blind)
-            msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-        else
-            msg_format(_("%^s¤¬ËâË¡¤Ç¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡ª",
-            "%^s magically summons greater undead!"), m_name);
+    {  
+               monspell_message(m_idx, t_idx,
+                       _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+                       _("%^s¤¬ËâË¡¤Ç¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons greater undead!"),
+                       _("%s¤¬ËâË¡¤Ç¥¢¥ó¥Ç¥Ã¥É¤ò¾¤´­¤·¤¿¡£", "%^s magically summons undead."),
+                       TARGET_TYPE);
 
         for (k = 0; k < S_NUM_6; k++)
         {
-            count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+                       if(mon_to_player)
+                   count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+
+                       if(mon_to_mon)
+                               count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | monster_u_mode(m_idx)));
         }
     }
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
     {
-        msg_print(_("´Ö¶á¤Ç²¿¤«Â¿¤¯¤Î¤â¤Î¤¬Ç礤²ó¤ë²»¤¬Ê¹¤³¤¨¤ë¡£",
-            "You hear many creepy things appear nearby."));
+        msg_print(_("´Ö¶á¤Ç²¿¤«Â¿¤¯¤Î¤â¤Î¤¬Ç礤²ó¤ë²»¤¬Ê¹¤³¤¨¤ë¡£", "You hear many creepy things appear nearby."));
     }
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-
-void spell_RF6_S_HI_DRAGON(int y, int x, int m_idx)
+void spell_RF6_S_HI_DRAGON(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
-    char* m_name = monster_name(m_idx, "");
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-    disturb(1, 1);
-
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else
-        msg_format(_("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons ancient dragons!"), m_name);
-
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons ancient dragons!"),
+               _("%^s¤¬ËâË¡¤Ç¸ÅÂå¥É¥é¥´¥ó¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons ancient dragons!"),
+               TARGET_TYPE);
+       
     for (k = 0; k < S_NUM_4; k++)
-    {
-        count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+    {  
+               if(mon_to_player)
+                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+
+               if(mon_to_mon)
+                       count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_DRAGON, (PM_ALLOW_GROUP | monster_u_mode(m_idx)));
     }
-    if (p_ptr->blind && count)
+       
+    if (p_ptr->blind && count && mon_to_player)
     {
-        msg_print(_("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£",
-            "You hear many powerful things appear nearby."));
+        msg_print(_("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£", "You hear many powerful things appear nearby."));
     }
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_AMBERITES(int y, int x, int m_idx)
+void spell_RF6_S_AMBERITES(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
-    char* m_name = monster_name(m_idx, "");
+    int count = 0, k;
+    monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
-    disturb(1, 1);
-
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else
-        msg_format(_("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Lords of Amber!"), m_name);
-
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Lords of Amber!"),
+               _("%^s¤¬¥¢¥ó¥Ð¡¼¤Î²¦Â²¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons Lords of Amber!"),
+               TARGET_TYPE);
+       
     for (k = 0; k < S_NUM_4; k++)
-    {
-        count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
+    {  
+               count += summon_specific(m_idx, y, x, rlev, SUMMON_AMBERITES, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
     }
-    if (p_ptr->blind && count)
+       
+    if (p_ptr->blind && count && mon_to_player)
     {
         msg_print(_("ÉÔ»à¤Î¼Ô¤¬¶á¤¯¤Ë¸½¤ì¤ë¤Î¤¬Ê¹¤³¤¨¤¿¡£", "You hear immortal beings appear nearby."));
     }
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-void spell_RF6_S_UNIQUE(int y, int x, int m_idx)
+void spell_RF6_S_UNIQUE(int y, int x, int m_idx, int t_idx, int TARGET_TYPE)
 {
-    char* m_name = monster_name(m_idx, "");
+    int count = 0, k;
     monster_type    *m_ptr = &m_list[m_idx];
     int rlev = monster_level_idx(m_idx);
-    int k, count = 0;
+    bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
+    bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
     bool uniques_are_summoned = FALSE;
     int non_unique_type = SUMMON_HI_UNDEAD;
-
-    disturb(1, 1);
-
-    if (p_ptr->blind)
-        msg_format(_("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."), m_name);
-    else
-        msg_format(_("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons special opponents!"), m_name);
-
+       
+       monspell_message(m_idx, t_idx,
+               _("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", "%^s mumbles."),
+               _("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons special opponents!"),
+               _("%^s¤¬ËâË¡¤ÇÆÃÊ̤ʶ¯Å¨¤ò¾¤´­¤·¤¿¡ª", "%^s magically summons special opponents!"),
+               TARGET_TYPE);
+       
     for (k = 0; k < S_NUM_4; k++)
-    {
+    {  
         count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
     }
-
+       
     if (count) uniques_are_summoned = TRUE;
 
     if ((m_ptr->sub_align & (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL)) == (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL))
@@ -2546,14 +2720,16 @@ void spell_RF6_S_UNIQUE(int y, int x, int m_idx)
         count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE));
     }
 
-    if (p_ptr->blind && count)
+    if (p_ptr->blind && count && mon_to_player)
     {
         msg_format(_("¿¤¯¤Î%s¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£", "You hear many %s appear nearby."),
             uniques_are_summoned ? _("Î϶¯¤¤¤â¤Î", "powerful things") : _("¤â¤Î", "things"));
     }
+       
+       if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
+               mon_fight = TRUE;
 }
 
-
 int monspell_to_player(int SPELL_NUM, int y, int x, int m_idx)
 {
     switch (SPELL_NUM)
@@ -2633,27 +2809,27 @@ int monspell_to_player(int SPELL_NUM, int y, int x, int m_idx)
     case 160 + 8:  spell_RF6_TELE_TO(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_TELE_TO */
     case 160 + 9:  spell_RF6_TELE_AWAY(m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_TELE_AWAY */
     case 160 + 10: spell_RF6_TELE_LEVEL(m_idx, 0, MONSTER_TO_PLAYER); 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 + 11: spell_RF6_PSY_SPEAR(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_PSY_SPEAR */
+    case 160 + 12: spell_RF6_DARKNESS(y, x, m_idx, 0, MONSTER_TO_PLAYER); 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 */
+    case 160 + 15: spell_RF6_RAISE_DEAD(m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF6_RAISE_DEAD */
+    case 160 + 16: spell_RF6_S_KIN(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_S_KIN */
+    case 160 + 17: spell_RF6_S_CYBER(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_CYBER */
+    case 160 + 18: spell_RF6_S_MONSTER(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_S_MONSTER */
+    case 160 + 19: spell_RF6_S_MONSTERS(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;    /* RF6_S_MONSTER */
+    case 160 + 20: spell_RF6_S_ANT(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_S_ANT */
+    case 160 + 21: spell_RF6_S_SPIDER(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF6_S_SPIDER */
+    case 160 + 22: spell_RF6_S_HOUND(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_HOUND */
+    case 160 + 23: spell_RF6_S_HYDRA(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_HYDRA */
+    case 160 + 24: spell_RF6_S_ANGEL(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_ANGEL */
+    case 160 + 25: spell_RF6_S_DEMON(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_DEMON */
+    case 160 + 26: spell_RF6_S_UNDEAD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF6_S_UNDEAD */
+    case 160 + 27: spell_RF6_S_DRAGON(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF6_S_DRAGON */
+    case 160 + 28: spell_RF6_S_HI_UNDEAD(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_HI_UNDEAD */
+    case 160 + 29: spell_RF6_S_HI_DRAGON(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_HI_DRAGON */
+    case 160 + 30: spell_RF6_S_AMBERITES(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;   /* RF6_S_AMBERITES */
+    case 160 + 31: spell_RF6_S_UNIQUE(y, x, m_idx, 0, MONSTER_TO_PLAYER); break;  /* RF6_S_UNIQUE */
     }
     return 0;
 }
@@ -2736,7 +2912,28 @@ int monspell_to_monster(int SPELL_NUM, int y, int x, int m_idx, int t_idx)
     case 160 + 7:  return spell_RF6_SPECIAL(y, x, m_idx, t_idx, MONSTER_TO_MONSTER);   /* RF6_SPECIAL */
     case 160 + 8:  spell_RF6_TELE_TO(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_TELE_TO */
     case 160 + 9:  spell_RF6_TELE_AWAY(m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_TELE_AWAY */
-    case 160 + 10: spell_RF6_TELE_LEVEL(m_idx, t_idx, MONSTER_TO_PLAYER); break;  /* RF6_TELE_LEVEL */
+    case 160 + 10: spell_RF6_TELE_LEVEL(m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF6_TELE_LEVEL */
+    case 160 + 11: spell_RF6_PSY_SPEAR(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_PSY_SPEAR */
+    case 160 + 12: spell_RF6_DARKNESS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;    /* RF6_DARKNESS */
+    case 160 + 13: return -1; /* RF6_TRAPS */
+    case 160 + 14: return -1;  /* RF6_FORGET */
+    case 160 + 15: spell_RF6_RAISE_DEAD(m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF6_RAISE_DEAD */
+    case 160 + 16: spell_RF6_S_KIN(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_KIN */
+    case 160 + 17: spell_RF6_S_CYBER(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_CYBER */
+    case 160 + 18: spell_RF6_S_MONSTER(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_MONSTER */
+    case 160 + 19: spell_RF6_S_MONSTERS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;    /* RF6_S_MONSTER */
+    case 160 + 20: spell_RF6_S_ANT(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_ANT */
+    case 160 + 21: spell_RF6_S_SPIDER(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF6_S_SPIDER */
+    case 160 + 22: spell_RF6_S_HOUND(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_HOUND */
+    case 160 + 23: spell_RF6_S_HYDRA(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_HYDRA */
+    case 160 + 24: spell_RF6_S_ANGEL(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_ANGEL */
+    case 160 + 25: spell_RF6_S_DEMON(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_DEMON */
+    case 160 + 26: spell_RF6_S_UNDEAD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF6_S_UNDEAD */
+    case 160 + 27: spell_RF6_S_DRAGON(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF6_S_DRAGON */
+    case 160 + 28: spell_RF6_S_HI_UNDEAD(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_HI_UNDEAD */
+    case 160 + 29: spell_RF6_S_HI_DRAGON(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_HI_DRAGON */
+    case 160 + 30: spell_RF6_S_AMBERITES(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;   /* RF6_S_AMBERITES */
+    case 160 + 31: spell_RF6_S_UNIQUE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break;  /* RF6_S_UNIQUE */
     }
     return 0;
 }
\ No newline at end of file