OSDN Git Service

通常のセーブ/ロード時以外でc_ptr->mimicに0以外の値を代入する際に, 最
[hengbandforosx/hengbandosx.git] / src / spells1.c
index 3faa25c..9d04757 100644 (file)
@@ -1070,11 +1070,11 @@ msg_print("
 
                        /* Create a glyph */
                        cave[y][x].info |= CAVE_OBJECT;
-                       cave[y][x].mimic = FEAT_GLYPH;
+                       cave[y][x].mimic = f_info[FEAT_GLYPH].mimic;
 
                        /* Notice */
                        note_spot(y, x);
-       
+
                        /* Redraw */
                        lite_spot(y, x);
 
@@ -1791,11 +1791,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg)
        cptr note = NULL;
 
        /* Assume a default death */
-#ifdef JP
-       cptr note_dies = "¤Ï»à¤ó¤À¡£";
-#else
-       cptr note_dies = " dies.";
-#endif
+       cptr note_dies = extract_note_dies(real_r_ptr(m_ptr));
 
        int ty = m_ptr->fy;
        int tx = m_ptr->fx;
@@ -1827,32 +1823,6 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg)
 #endif
 
 
-       /* Some monsters get "destroyed" */
-       if (!monster_living(r_ptr))
-       {
-               int i;
-               bool explode = FALSE;
-
-               for (i = 0; i < 4; i++)
-               {
-                       if (r_ptr->blow[i].method == RBM_EXPLODE) explode = TRUE;
-               }
-
-               /* Special note at death */
-               if (explode)
-#ifdef JP
-note_dies = "¤ÏÇúȯ¤·¤ÆÊ´¡¹¤Ë¤Ê¤Ã¤¿¡£";
-#else
-                       note_dies = " explodes into tiny shreds.";
-#endif
-               else
-#ifdef JP
-note_dies = "¤òÅݤ·¤¿¡£";
-#else
-                       note_dies = " is destroyed.";
-#endif
-       }
-
        if (p_ptr->riding && (c_ptr->m_idx == p_ptr->riding)) disturb(1, 0);
 
        /* Analyze the damage type */
@@ -1871,7 +1841,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        break;
@@ -1890,7 +1860,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_IM_ACID)
@@ -1902,7 +1872,7 @@ note = "
 #endif
 
                                dam /= 9;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_ACID);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_ACID);
                        }
                        break;
                }
@@ -1920,7 +1890,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_IM_ELEC)
@@ -1932,7 +1902,7 @@ note = "
 #endif
 
                                dam /= 9;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_ELEC);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_ELEC);
                        }
                        break;
                }
@@ -1950,7 +1920,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_IM_FIRE)
@@ -1962,7 +1932,7 @@ note = "
 #endif
 
                                dam /= 9;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_FIRE);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_FIRE);
                        }
                        else if (r_ptr->flags3 & (RF3_HURT_FIRE))
                        {
@@ -1973,7 +1943,7 @@ note = "
 #endif
 
                                dam *= 2;
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_FIRE);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_FIRE);
                        }
                        break;
                }
@@ -1991,7 +1961,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_IM_COLD)
@@ -2003,7 +1973,7 @@ note = "
 #endif
 
                                dam /= 9;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_COLD);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_COLD);
                        }
                        else if (r_ptr->flags3 & (RF3_HURT_COLD))
                        {
@@ -2014,7 +1984,7 @@ note = "
 #endif
 
                                dam *= 2;
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_COLD);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_COLD);
                        }
                        break;
                }
@@ -2032,7 +2002,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_IM_POIS)
@@ -2044,7 +2014,7 @@ note = "
 #endif
 
                                dam /= 9;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_POIS);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_POIS);
                        }
                        break;
                }
@@ -2062,7 +2032,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_IM_POIS)
@@ -2074,7 +2044,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_POIS);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_POIS);
                        }
                        else if (one_in_(3)) do_poly = TRUE;
                        break;
@@ -2093,7 +2063,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags3 & RF3_GOOD)
@@ -2105,7 +2075,7 @@ note = "
                                note = " is hit hard.";
 #endif
 
-                               if (seen) r_ptr->r_flags3 |= (RF3_GOOD);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD);
                        }
                        break;
                }
@@ -2123,7 +2093,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags3 & RF3_GOOD)
@@ -2135,7 +2105,7 @@ note = "
                                note = " is immune.";
 #endif
 
-                               if (seen) r_ptr->r_flags3 |= RF3_GOOD;
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= RF3_GOOD;
                        }
                        else if (r_ptr->flags3 & RF3_EVIL)
                        {
@@ -2146,7 +2116,7 @@ note = "
                                note = " is hit hard.";
 #endif
 
-                               if (seen) r_ptr->r_flags3 |= RF3_EVIL;
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL;
                        }
                        else
                        {
@@ -2174,7 +2144,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        break;
@@ -2193,7 +2163,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_PLAS)
@@ -2205,7 +2175,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_PLAS);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_PLAS);
                        }
                        break;
                }
@@ -2223,7 +2193,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_NETH)
@@ -2237,7 +2207,7 @@ note = "
 #endif
 
                                        dam = 0;
-                                       if (seen) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD);
                                }
                                else
                                {
@@ -2249,7 +2219,7 @@ note = "
 
                                        dam *= 3; dam /= randint1(6) + 6;
                                }
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_NETH);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_NETH);
                        }
                        else if (r_ptr->flags3 & RF3_EVIL)
                        {
@@ -2260,7 +2230,7 @@ note = "
                                note = " resists somewhat.";
 #endif
 
-                               if (seen) r_ptr->r_flags3 |= (RF3_EVIL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL);
                        }
                        break;
                }
@@ -2278,7 +2248,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_WATE)
@@ -2303,7 +2273,7 @@ note = "
 
                                        dam *= 3; dam /= randint1(6) + 6;
                                }
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_WATE);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_WATE);
                        }
                        break;
                }
@@ -2321,7 +2291,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_CHAO)
@@ -2333,7 +2303,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_CHAO);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_CHAO);
                        }
                        else if ((r_ptr->flags3 & RF3_DEMON) && one_in_(3))
                        {
@@ -2344,7 +2314,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flags3 |= (RF3_DEMON);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON);
                        }
                        else
                        {
@@ -2367,7 +2337,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_SHAR)
@@ -2379,7 +2349,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_SHAR);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SHAR);
                        }
                        break;
                }
@@ -2397,7 +2367,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_SHAR)
@@ -2409,7 +2379,7 @@ note = "
 #endif
 
                                dam /= 2;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_SHAR);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SHAR);
                        }
                        break;
                }
@@ -2428,7 +2398,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_SOUN)
@@ -2440,7 +2410,7 @@ note = "
 #endif
 
                                dam *= 2; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_SOUN);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SOUN);
                        }
                        else do_stun = (10 + randint1(15) + r) / (r + 1);
                        break;
@@ -2459,7 +2429,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags3 & RF3_NO_CONF)
@@ -2471,7 +2441,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flags3 |= (RF3_NO_CONF);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                        }
                        else do_conf = (10 + randint1(15) + r) / (r + 1);
                        break;
@@ -2490,7 +2460,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_DISE)
@@ -2502,7 +2472,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_DISE);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DISE);
                        }
                        break;
                }
@@ -2520,7 +2490,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_NEXU)
@@ -2532,7 +2502,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_NEXU);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_NEXU);
                        }
                        break;
                }
@@ -2550,7 +2520,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_WALL)
@@ -2562,7 +2532,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_WALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_WALL);
                        }
                        else do_stun = (randint1(15) + r) / (r + 1);
                        break;
@@ -2581,7 +2551,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_INER)
@@ -2593,7 +2563,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_INER);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_INER);
                        }
                        else
                        {
@@ -2635,7 +2605,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_TIME)
@@ -2647,7 +2617,7 @@ note = "
 #endif
 
                                dam *= 3; dam /= randint1(6) + 6;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_TIME);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_TIME);
                        }
                        else do_time = (dam + 1) / 2;
                        break;
@@ -2668,14 +2638,14 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_TELE)
                        {
                                if (r_ptr->flags1 & (RF1_UNIQUE))
                                {
-                                       if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
 #else
@@ -2686,7 +2656,7 @@ note = "
                                }
                                else if (r_ptr->level > randint1(100))
                                {
-                                       if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª";
 #else
@@ -2711,7 +2681,7 @@ note = "
 
                                dam *= 3; dam /= randint1(6) + 6;
                                do_dist = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_GRAV);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_GRAV);
                        }
                        else
                        {
@@ -2775,7 +2745,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        break;
@@ -2795,12 +2765,12 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags3 & RF3_HURT_ROCK)
                        {
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_ROCK);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_ROCK);
 #ifdef JP
 note = "¤ÎÈéÉ椬¤¿¤À¤ì¤¿¡ª";
 note_dies = "¤Ï¾øȯ¤·¤¿¡ª";
@@ -2838,7 +2808,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags2 & RF2_EMPTY_MIND)
@@ -2849,7 +2819,7 @@ note_dies = "
 #else
                                note = " is immune!";
 #endif
-                               if (seen) r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
 
                        }
                        else if ((r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) ||
@@ -2975,7 +2945,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags2 & RF2_EMPTY_MIND)
@@ -3082,7 +3052,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (one_in_(4))
@@ -3119,7 +3089,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        break;
@@ -3138,7 +3108,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        break;
@@ -3158,7 +3128,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Attempt a saving throw */
@@ -3169,7 +3139,7 @@ note_dies = "
                                /* Memorize a flag */
                                if (r_ptr->flags3 & RF3_NO_CONF)
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_NO_CONF);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                                }
 
                                /* Resist */
@@ -3287,7 +3257,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        do_stun = (randint1(15) + 1) / (r + 1);
@@ -3300,7 +3270,7 @@ note = "
 #endif
 
                                dam /= 9;
-                               if (seen) r_ptr->r_flagsr |= (RFR_IM_COLD);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_COLD);
                        }
                        else if (r_ptr->flags3 & (RF3_HURT_COLD))
                        {
@@ -3311,7 +3281,7 @@ note = "
 #endif
 
                                dam *= 2;
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_COLD);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_COLD);
                        }
                        break;
                }
@@ -3330,19 +3300,19 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (!monster_living(r_ptr))
                        {
-                               if (r_ptr->flags3 & RF3_UNDEAD)
+                               if (seen)
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_UNDEAD);
-                               }
-
-                               if (r_ptr->flags3 & (RF3_DEMON))
-                               {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_DEMON);
+                                       if (is_original_ap(m_ptr))
+                                       {
+                                               if (r_ptr->flags3 & RF3_DEMON) r_ptr->r_flags3 |= (RF3_DEMON);
+                                               if (r_ptr->flags3 & RF3_UNDEAD) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                                               if (r_ptr->flags3 & RF3_NONLIVING) r_ptr->r_flags3 |= (RF3_NONLIVING);
+                                       }
                                }
 
 #ifdef JP
@@ -3372,14 +3342,19 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
-                       if (r_ptr->flags3 & (RF3_UNDEAD | RF3_NONLIVING))
+                       if (!monster_living(r_ptr))
                        {
-                               if (r_ptr->flags3 & RF3_UNDEAD)
+                               if (seen)
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                                       if (is_original_ap(m_ptr))
+                                       {
+                                               if (r_ptr->flags3 & RF3_DEMON) r_ptr->r_flags3 |= (RF3_DEMON);
+                                               if (r_ptr->flags3 & RF3_UNDEAD) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                                               if (r_ptr->flags3 & RF3_NONLIVING) r_ptr->r_flags3 |= (RF3_NONLIVING);
+                                       }
                                }
 
 #ifdef JP
@@ -3422,7 +3397,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Attempt to polymorph (see below) */
@@ -3495,6 +3470,8 @@ note = "
                        /* Wake up */
                        m_ptr->csleep = 0;
 
+                       if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
+
                        if (m_ptr->maxhp < m_ptr->max_maxhp)
                        {
 #ifdef JP
@@ -3513,6 +3490,8 @@ msg_format("%^s
                        /* Wake up */
                        m_ptr->csleep = 0;
 
+                       if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
+
                        if (m_ptr->stunned)
                        {
 #ifdef JP
@@ -3632,7 +3611,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Powerful monsters can resist */
@@ -3684,7 +3663,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Attempt a saving throw */
@@ -3695,7 +3674,7 @@ note = "
                                /* Memorize a flag */
                                if (r_ptr->flags3 & RF3_NO_SLEEP)
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_NO_SLEEP);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_SLEEP);
                                }
 
                                /* No obvious effect */
@@ -3738,7 +3717,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Attempt a saving throw */
@@ -3784,7 +3763,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Attempt a saving throw */
@@ -3843,7 +3822,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -3859,7 +3838,7 @@ note = "
                                /* Memorize a flag */
                                if (r_ptr->flags3 & RF3_NO_CONF)
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_NO_CONF);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                                }
 
                                /* Resist */
@@ -3930,7 +3909,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -4005,7 +3984,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -4081,7 +4060,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -4098,7 +4077,7 @@ note = "
                                /* Memorize a flag */
                                if (r_ptr->flags3 & (RF3_NO_CONF))
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_NO_CONF);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                                }
 
                                /* Resist */
@@ -4177,7 +4156,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -4187,7 +4166,7 @@ msg_format("%s
                        /* Attempt a saving throw */
                        if ((r_ptr->flags1 & (RF1_QUESTOR)) ||
                            (m_ptr->mflag2 & MFLAG2_NOPET) ||
-                                (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING)) ||
+                                !monster_living(r_ptr) ||
                                 ((r_ptr->level+10) > randint1(dam)))
                        {
                                /* Resist */
@@ -4243,7 +4222,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        /* Get confused later */
@@ -4257,7 +4236,7 @@ note = "
                                /* Memorize a flag */
                                if (r_ptr->flags3 & (RF3_NO_CONF))
                                {
-                                       if (seen) r_ptr->r_flags3 |= (RF3_NO_CONF);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                                }
 
                                /* Resist */
@@ -4290,7 +4269,7 @@ note = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        do_stun = damroll((caster_lev / 10) + 3 , (dam)) + 1;
@@ -4336,11 +4315,14 @@ note = "
                        /* Hurt by light */
                        if (r_ptr->flags3 & (RF3_HURT_LITE))
                        {
-                               /* Obvious effect */
-                               if (seen) obvious = TRUE;
+                               if (seen)
+                               {
+                                       /* Obvious effect */
+                                       obvious = TRUE;
 
-                               /* Memorize the effects */
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+                                       /* Memorize the effects */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+                               }
 
                                /* Special effect */
 #ifdef JP
@@ -4378,26 +4360,26 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_LITE)
                        {
 #ifdef JP
-note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª";
+                               note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª";
 #else
                                note = " resists.";
 #endif
 
                                dam *= 2; dam /= (randint1(6)+6);
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_LITE);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_LITE);
                        }
                        else if (r_ptr->flags3 & (RF3_HURT_LITE))
                        {
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE);
 #ifdef JP
-note = "¤Ï¸÷¤Ë¿È¤ò¤¹¤¯¤á¤¿¡ª";
-note_dies = "¤Ï¸÷¤ò¼õ¤±¤Æ¤·¤Ü¤ó¤Ç¤·¤Þ¤Ã¤¿¡ª";
+                               note = "¤Ï¸÷¤Ë¿È¤ò¤¹¤¯¤á¤¿¡ª";
+                               note_dies = "¤Ï¸÷¤ò¼õ¤±¤Æ¤·¤Ü¤ó¤Ç¤·¤Þ¤Ã¤¿¡ª";
 #else
                                note = " cringes from the light!";
                                note_dies = " shrivels away in the light!";
@@ -4422,7 +4404,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flagsr & RFR_RES_DARK)
@@ -4434,7 +4416,7 @@ note_dies = "
 #endif
 
                                dam *= 2; dam /= (randint1(6)+6);
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_DARK);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DARK);
                        }
                        break;
                }
@@ -4451,11 +4433,14 @@ note_dies = "
                        /* Hurt by rock remover */
                        if (r_ptr->flags3 & (RF3_HURT_ROCK))
                        {
-                               /* Notice effect */
-                               if (seen) obvious = TRUE;
+                               if (seen)
+                               {
+                                       /* Notice effect */
+                                       obvious = TRUE;
 
-                               /* Memorize the effects */
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_ROCK);
+                                       /* Memorize the effects */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_ROCK);
+                               }
 
                                /* Cute little message */
 #ifdef JP
@@ -4491,7 +4476,7 @@ note_dies = "
                                {
                                        if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL))
                                        {
-                                               if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª";
 #else
@@ -4502,7 +4487,7 @@ note = "
                                        }
                                        else if (r_ptr->level > randint1(100))
                                        {
-                                               if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª";
 #else
@@ -4515,8 +4500,11 @@ note = "
 
                                if (!resists_tele)
                                {
-                                       if (seen) obvious = TRUE;
-                                       if (seen) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                                       if (seen)
+                                       {
+                                               obvious = TRUE;
+                                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                                       }
                                        do_dist = dam;
                                }
                        }
@@ -4546,7 +4534,7 @@ note = "
                                {
                                        if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL))
                                        {
-                                               if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª";
 #else
@@ -4557,7 +4545,7 @@ note = "
                                        }
                                        else if (r_ptr->level > randint1(100))
                                        {
-                                               if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª";
 #else
@@ -4570,8 +4558,11 @@ note = "
 
                                if (!resists_tele)
                                {
-                                       if (seen) obvious = TRUE;
-                                       if (seen) r_ptr->r_flags3 |= (RF3_EVIL);
+                                       if (seen)
+                                       {
+                                               obvious = TRUE;
+                                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL);
+                                       }
                                        do_dist = dam;
                                }
                        }
@@ -4597,7 +4588,7 @@ note = "
                        {
                                if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL))
                                {
-                                       if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª";
 #else
@@ -4608,7 +4599,7 @@ note = "
                                }
                                else if (r_ptr->level > randint1(100))
                                {
-                                       if (seen) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
 note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª";
 #else
@@ -4645,11 +4636,14 @@ note = "
                        /* Only affect undead */
                        if (r_ptr->flags3 & (RF3_UNDEAD))
                        {
-                               /* Learn about type */
-                               if (seen) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                               if (seen)
+                               {
+                                       /* Learn about type */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD);
 
-                               /* Obvious */
-                               if (seen) obvious = TRUE;
+                                       /* Obvious */
+                                       obvious = TRUE;
+                               }
 
                                /* Apply some fear */
                                do_fear = damroll(3, (dam / 2)) + 1;
@@ -4693,11 +4687,14 @@ note = "
                        /* Only affect evil */
                        if (r_ptr->flags3 & (RF3_EVIL))
                        {
-                               /* Learn about type */
-                               if (seen) r_ptr->r_flags3 |= (RF3_EVIL);
+                               if (seen)
+                               {
+                                       /* Learn about type */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL);
 
-                               /* Obvious */
-                               if (seen) obvious = TRUE;
+                                       /* Obvious */
+                                       obvious = TRUE;
+                               }
 
                                /* Apply some fear */
                                do_fear = damroll(3, (dam / 2)) + 1;
@@ -4778,11 +4775,14 @@ note = "
                        /* Only affect undead */
                        if (r_ptr->flags3 & (RF3_UNDEAD))
                        {
-                               /* Learn about type */
-                               if (seen) r_ptr->r_flags3 |= (RF3_UNDEAD);
+                               if (seen)
+                               {
+                                       /* Learn about type */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD);
 
-                               /* Obvious */
-                               if (seen) obvious = TRUE;
+                                       /* Obvious */
+                                       obvious = TRUE;
+                               }
 
                                /* Message */
 #ifdef JP
@@ -4821,11 +4821,14 @@ note_dies = "
                        /* Only affect evil */
                        if (r_ptr->flags3 & (RF3_EVIL))
                        {
-                               /* Learn about type */
-                               if (seen) r_ptr->r_flags3 |= (RF3_EVIL);
+                               if (seen)
+                               {
+                                       /* Learn about type */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL);
 
-                               /* Obvious */
-                               if (seen) obvious = TRUE;
+                                       /* Obvious */
+                                       obvious = TRUE;
+                               }
 
                                /* Message */
 #ifdef JP
@@ -4863,11 +4866,14 @@ note_dies = "
                        /* Only affect good */
                        if (r_ptr->flags3 & (RF3_GOOD))
                        {
-                               /* Learn about type */
-                               if (seen) r_ptr->r_flags3 |= (RF3_GOOD);
+                               if (seen)
+                               {
+                                       /* Learn about type */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD);
 
-                               /* Obvious */
-                               if (seen) obvious = TRUE;
+                                       /* Obvious */
+                                       obvious = TRUE;
+                               }
 
                                /* Message */
 #ifdef JP
@@ -4944,11 +4950,14 @@ note_dies = "
                        /* Only affect demons */
                        if (r_ptr->flags3 & (RF3_DEMON))
                        {
-                               /* Learn about type */
-                               if (seen) r_ptr->r_flags3 |= (RF3_DEMON);
+                               if (seen)
+                               {
+                                       /* Learn about type */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON);
 
-                               /* Obvious */
-                               if (seen) obvious = TRUE;
+                                       /* Obvious */
+                                       obvious = TRUE;
+                               }
 
                                /* Message */
 #ifdef JP
@@ -5012,7 +5021,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5058,7 +5067,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5070,7 +5079,7 @@ msg_format("%s
                                /* Memorize a flag */
                                if (r_ptr->flags3 & (RF3_NO_CONF))
                                {
-                                       r_ptr->r_flags3 |= (RF3_NO_CONF);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                                }
 #ifdef JP
 note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
@@ -5113,7 +5122,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5125,7 +5134,7 @@ msg_format("%s
                                /* Memorize a flag */
                                if (r_ptr->flags3 & (RF3_NO_CONF))
                                {
-                                       r_ptr->r_flags3 |= (RF3_NO_CONF);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF);
                                }
 #ifdef JP
 note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
@@ -5172,7 +5181,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5209,7 +5218,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5246,7 +5255,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5283,7 +5292,7 @@ msg_format("%s
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5314,7 +5323,7 @@ note = "
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5366,11 +5375,11 @@ msg_format("%s
                        }
 
                        if (is_pet(m_ptr)) nokori_hp = m_ptr->maxhp*4L;
-                       else if ((p_ptr->pclass == CLASS_BEASTMASTER) && (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING)))
+                       else if ((p_ptr->pclass == CLASS_BEASTMASTER) && monster_living(r_ptr))
                                nokori_hp = m_ptr->maxhp * 3 / 10;
                        else
                                nokori_hp = m_ptr->maxhp * 3 / 20;
-                       
+
                        if (m_ptr->hp >= nokori_hp)
                        {
 #ifdef JP
@@ -5424,62 +5433,11 @@ msg_format("
                        break;
                }
 
+               /* Attack (Use "dam" as attack type) */
                case GF_ATTACK:
                {
-                       if (seen) obvious = TRUE;
-                       skipped = TRUE;
-                       if (dam == HISSATSU_NYUSIN)
-                       {
-                               int i, yy, xx;
-                               int ny = y, nx = x;
-                               bool success = FALSE;
-                               for (i = 0; i < 8; i++)
-                               {
-                                       yy = y + ddy[i];
-                                       xx = x + ddx[i];
-                                       if (cave_empty_bold(yy, xx) || player_bold(yy, xx))
-                                       {
-                                               success = TRUE;
-                                               if (distance(py, px, ny, nx) > distance(py, px, yy, xx))
-                                               {
-                                                       ny = yy;
-                                                       nx = xx;
-                                               }
-                                       }
-                               }
-                               if (success)
-                               {
-                                       if (!player_bold(ny, nx))
-                                       {
-                                               teleport_player_to(ny, nx, FALSE);
-#ifdef JP
-                                               msg_print("ÁÇÁ᤯Áê¼ê¤Î²û¤ËÆþ¤ê¹þ¤ó¤À¡ª");
-#else
-                                               msg_format("You quickly jump in and attack %s!", m_name);
-#endif
-                                       }
-                               }
-                               else
-                               {
-#ifdef JP
-                                       msg_print("¼ºÇÔ¡ª");
-#else
-                                       msg_print("Failed!");
-#endif
-                                       dam = 0;
-                                       break;
-                               }
-                       }
-                       if (c_ptr->m_idx)
-                               return (py_attack(y, x, dam));
-                       else
-#ifdef JP
-                               msg_print("¹¶·â¤Ï¶õ¤òÀڤä¿¡£");
-#else
-                               msg_print("You attack the empty air.");
-#endif
-                       dam = 0;
-                       break;
+                       /* Return this monster's death */
+                       return py_attack(y, x, dam);
                }
 
                /* Sleep (Use "dam" as "power") */
@@ -5498,7 +5456,7 @@ msg_format("
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        if (r_ptr->flags2 & RF2_EMPTY_MIND)
@@ -5510,7 +5468,7 @@ note = "
 #endif
                                dam = 0;
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
                                break;
                        }
                        if (m_ptr->csleep)
@@ -5595,7 +5553,7 @@ note = "
                                        /* Memorize a flag */
                                        if (r_ptr->flags3 & RF3_NO_SLEEP)
                                        {
-                                               if (seen) r_ptr->r_flags3 |= (RF3_NO_SLEEP);
+                                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_SLEEP);
                                        }
 
                                        /* No obvious effect */
@@ -5648,7 +5606,7 @@ note = "
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5715,11 +5673,14 @@ note = "
                        /* Hurt by light */
                        if (r_ptr->flags3 & (RF3_HURT_LITE))
                        {
-                               /* Obvious effect */
-                               if (seen) obvious = TRUE;
+                               if (seen)
+                               {
+                                       /* Obvious effect */
+                                       obvious = TRUE;
 
-                               /* Memorize the effects */
-                               if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+                                       /* Memorize the effects */
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+                               }
 
                                /* Special effect */
 #ifdef JP
@@ -5758,7 +5719,7 @@ note_dies = "
                                note = " is immune.";
 #endif
                                dam = 0;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                        break;
@@ -5809,7 +5770,7 @@ note = "
                                        m_ptr->fast = MIN(200, m_ptr->fast + 100);
 
                                        /* Learn about type */
-                                       if (seen) r_ptr->r_flags3 |= (RF3_GOOD);
+                                       if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD);
                                        success = TRUE;
                                }
                        }
@@ -5822,7 +5783,7 @@ note = "
                                }
                                else if (seen)
                                {
-                                       r_ptr->r_flags3 |= (RF3_NO_FEAR);
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_FEAR);
                                }
                        }
 
@@ -5843,7 +5804,7 @@ note = "
                                note = " is immune.";
 #endif
                                skipped = TRUE;
-                               if (seen) r_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
 
@@ -5902,7 +5863,7 @@ note = "
        tmp = dam;
        dam = mon_damage_mod(m_ptr, dam, (bool)(typ == GF_PSY_SPEAR));
 #ifdef JP
-       if ((tmp > 0) && (dam == 0)) note = "¤Ï¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤¤¤Ê¤¤";
+       if ((tmp > 0) && (dam == 0)) note = "¤Ï¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤¤¤Ê¤¤¡£";
 #else
        if ((tmp > 0) && (dam == 0)) note = " is unharmed.";
 #endif
@@ -6098,6 +6059,8 @@ note = "
                /* Wake the monster up */
                m_ptr->csleep = 0;
 
+               if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
+
                /* Hurt the monster */
                m_ptr->hp -= dam;
 
@@ -8746,11 +8709,6 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons
                                Term_xtra(TERM_XTRA_DELAY, msec);
                        }
                }
-               if ((typ == GF_ATTACK) && (dam == HISSATSU_NYUSIN) && ((i+1) == path_n))
-               {
-                       if (cave_empty_bold(y, x)) teleport_player_to(ny, nx, FALSE);
-               }
-
        }
 
        /* Save the "blast epicenter" */
@@ -9049,7 +9007,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons
                                                msg_print("The attack bounces!");
 #endif
 
-                                               ref_ptr->r_flags2 |= RF2_REFLECTING;
+                                               if (is_original_ap(m_ptr)) ref_ptr->r_flags2 |= RF2_REFLECTING;
                                        }
 
                                        /* Reflected bolts randomly target either one */