OSDN Git Service

あやしい影等でモンスターの外見が違っている状態でモンスターが耐性など
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 26 Jun 2003 18:29:21 +0000 (18:29 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 26 Jun 2003 18:29:21 +0000 (18:29 +0000)
を示した場合に, そのフラグがプレイヤーが直接は知らないはずのモンス
ターの正体のr_infoに記録されるバグを修正. なお, この過程で以下の変更
を含む.
* 増殖モンスターがあやしい影に隠れている場合は増殖したモンスターもあ
  やしい影となるように変更. 同様に, ap_r_idxで外見を変えたモンスター
  をクローンした場合は外見を引き継ぐように変更.
* 狂気の判定は外見を使うこととした. あやしい影などに隠れている場合は
  狂気が発揮されないという視点から. たぬきが多少強くなる.

src/cmd1.c
src/cmd2.c
src/defines.h
src/melee1.c
src/melee2.c
src/monster2.c
src/mspells1.c
src/mspells2.c
src/mspells3.c
src/spells1.c
src/spells2.c

index 754d37e..f57bd36 100644 (file)
@@ -242,7 +242,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_ANIMAL)) &&
                            (r_ptr->flags3 & RF3_ANIMAL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ANIMAL;
                                }
@@ -254,7 +254,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_ANIMAL)) &&
                            (r_ptr->flags3 & RF3_ANIMAL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ANIMAL;
                                }
@@ -266,7 +266,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_EVIL)) &&
                            (r_ptr->flags3 & RF3_EVIL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_EVIL;
                                }
@@ -278,7 +278,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_EVIL)) &&
                            (r_ptr->flags3 & RF3_EVIL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_EVIL;
                                }
@@ -290,7 +290,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_HUMAN)) &&
                            (r_ptr->flags2 & RF2_HUMAN))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags2 |= RF2_HUMAN;
                                }
@@ -302,7 +302,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_HUMAN)) &&
                            (r_ptr->flags2 & RF2_HUMAN))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags2 |= RF2_HUMAN;
                                }
@@ -314,7 +314,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_UNDEAD)) &&
                            (r_ptr->flags3 & RF3_UNDEAD))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_UNDEAD;
                                }
@@ -326,7 +326,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_UNDEAD)) &&
                            (r_ptr->flags3 & RF3_UNDEAD))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_UNDEAD;
                                }
@@ -338,7 +338,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_DEMON)) &&
                            (r_ptr->flags3 & RF3_DEMON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DEMON;
                                }
@@ -350,7 +350,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_DEMON)) &&
                            (r_ptr->flags3 & RF3_DEMON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DEMON;
                                }
@@ -362,7 +362,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_ORC)) &&
                            (r_ptr->flags3 & RF3_ORC))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ORC;
                                }
@@ -374,7 +374,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_ORC)) &&
                            (r_ptr->flags3 & RF3_ORC))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ORC;
                                }
@@ -386,7 +386,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_TROLL)) &&
                            (r_ptr->flags3 & RF3_TROLL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_TROLL;
                                }
@@ -398,7 +398,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_TROLL)) &&
                            (r_ptr->flags3 & RF3_TROLL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_TROLL;
                                }
@@ -410,7 +410,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_GIANT)) &&
                            (r_ptr->flags3 & RF3_GIANT))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_GIANT;
                                }
@@ -424,7 +424,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_GIANT)) &&
                            (r_ptr->flags3 & RF3_GIANT))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_GIANT;
                                }
@@ -436,7 +436,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_SLAY_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DRAGON;
                                }
@@ -448,7 +448,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        if ((have_flag(flgs, TR_KILL_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DRAGON;
                                }
@@ -465,7 +465,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_ACID_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ACID_MASK);
                                        }
@@ -484,7 +484,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
                                        }
@@ -512,7 +512,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
                                        }
@@ -524,7 +524,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                        if (r_ptr->flags3 & RF3_HURT_FIRE)
                                        {
                                                if (mult < 70) mult = 70;
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                {
                                                        r_ptr->r_flags3 |= RF3_HURT_FIRE;
                                                }
@@ -536,7 +536,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                        if (r_ptr->flags3 & RF3_HURT_FIRE)
                                        {
                                                if (mult < 50) mult = 50;
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                {
                                                        r_ptr->r_flags3 |= RF3_HURT_FIRE;
                                                }
@@ -551,7 +551,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
                                        }
@@ -562,7 +562,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                        if (r_ptr->flags3 & RF3_HURT_COLD)
                                        {
                                                if (mult < 70) mult = 70;
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                {
                                                        r_ptr->r_flags3 |= RF3_HURT_COLD;
                                                }
@@ -574,7 +574,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                        if (r_ptr->flags3 & RF3_HURT_COLD)
                                        {
                                                if (mult < 50) mult = 50;
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                {
                                                        r_ptr->r_flags3 |= RF3_HURT_COLD;
                                                }
@@ -589,7 +589,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_POIS_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_POIS_MASK);
                                        }
@@ -614,7 +614,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        {
                                if (r_ptr->flags3 & RF3_UNDEAD)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flags3 |= RF3_UNDEAD;
                                        }
@@ -631,7 +631,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode, bo
                        }
                        if ((mode == HISSATSU_HAGAN) && (r_ptr->flags3 & RF3_HURT_ROCK))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_HURT_ROCK;
                                }
@@ -1739,7 +1739,7 @@ static void touch_zap_player(monster_type *m_ptr)
                        if (p_ptr->resist_fire) aura_damage = (aura_damage + 2) / 3;
 
                        take_hit(DAMAGE_NOESCAPE, aura_damage, aura_dam, -1);
-                       if (m_ptr->ml) r_ptr->r_flags2 |= RF2_AURA_FIRE;
+                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags2 |= RF2_AURA_FIRE;
                        handle_stuff();
                }
        }
@@ -1766,7 +1766,7 @@ static void touch_zap_player(monster_type *m_ptr)
                        if (p_ptr->resist_cold) aura_damage = (aura_damage + 2) / 3;
 
                        take_hit(DAMAGE_NOESCAPE, aura_damage, aura_dam, -1);
-                       if (m_ptr->ml) r_ptr->r_flags3 |= RF3_AURA_COLD;
+                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags3 |= RF3_AURA_COLD;
                        handle_stuff();
                }
        }
@@ -1793,7 +1793,7 @@ static void touch_zap_player(monster_type *m_ptr)
 #endif
 
                        take_hit(DAMAGE_NOESCAPE, aura_damage, aura_dam, -1);
-                       if (m_ptr->ml) r_ptr->r_flags2 |= RF2_AURA_ELEC;
+                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags2 |= RF2_AURA_ELEC;
                        handle_stuff();
                }
        }
@@ -2806,7 +2806,7 @@ msg_format("
                                /* Confuse the monster */
                                if (r_ptr->flags3 & RF3_NO_CONF)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flags3 |= RF3_NO_CONF;
                                        }
@@ -2847,7 +2847,7 @@ msg_format("
                                {
                                        if (r_ptr->flags1 & RF1_UNIQUE)
                                        {
-                                               if (m_ptr->ml) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                                msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
 #else
@@ -2858,7 +2858,7 @@ msg_format("
                                        }
                                        else if (r_ptr->level > randint1(100))
                                        {
-                                               if (m_ptr->ml) r_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                                msg_format("%^s¤ÏÄñ¹³ÎϤò»ý¤Ã¤Æ¤¤¤ë¡ª", m_name);
 #else
index b606232..5df67ac 100644 (file)
@@ -3250,7 +3250,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_ANIMAL)) &&
                            (r_ptr->flags3 & RF3_ANIMAL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ANIMAL;
                                }
@@ -3262,7 +3262,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_ANIMAL)) &&
                            (r_ptr->flags3 & RF3_ANIMAL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ANIMAL;
                                }
@@ -3274,7 +3274,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_EVIL)) &&
                            (r_ptr->flags3 & RF3_EVIL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_EVIL;
                                }
@@ -3286,7 +3286,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_EVIL)) &&
                            (r_ptr->flags3 & RF3_EVIL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_EVIL;
                                }
@@ -3298,7 +3298,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_HUMAN)) &&
                            (r_ptr->flags2 & RF2_HUMAN))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags2 |= RF2_HUMAN;
                                }
@@ -3310,7 +3310,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_HUMAN)) &&
                            (r_ptr->flags2 & RF2_HUMAN))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags2 |= RF2_HUMAN;
                                }
@@ -3322,7 +3322,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_UNDEAD)) &&
                            (r_ptr->flags3 & RF3_UNDEAD))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_UNDEAD;
                                }
@@ -3334,7 +3334,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_UNDEAD)) &&
                            (r_ptr->flags3 & RF3_UNDEAD))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_UNDEAD;
                                }
@@ -3346,7 +3346,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_DEMON)) &&
                            (r_ptr->flags3 & RF3_DEMON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DEMON;
                                }
@@ -3358,7 +3358,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_DEMON)) &&
                            (r_ptr->flags3 & RF3_DEMON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DEMON;
                                }
@@ -3370,7 +3370,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_ORC)) &&
                            (r_ptr->flags3 & RF3_ORC))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ORC;
                                }
@@ -3382,7 +3382,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_ORC)) &&
                            (r_ptr->flags3 & RF3_ORC))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_ORC;
                                }
@@ -3394,7 +3394,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_TROLL)) &&
                            (r_ptr->flags3 & RF3_TROLL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_TROLL;
                                }
@@ -3406,7 +3406,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_TROLL)) &&
                            (r_ptr->flags3 & RF3_TROLL))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_TROLL;
                                }
@@ -3418,7 +3418,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_GIANT)) &&
                            (r_ptr->flags3 & RF3_GIANT))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_GIANT;
                                }
@@ -3430,7 +3430,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_GIANT)) &&
                            (r_ptr->flags3 & RF3_GIANT))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_GIANT;
                                }
@@ -3442,7 +3442,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_SLAY_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DRAGON;
                                }
@@ -3454,7 +3454,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        if ((have_flag(flgs, TR_KILL_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_DRAGON;
                                }
@@ -3473,7 +3473,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_ACID_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ACID_MASK);
                                        }
@@ -3492,7 +3492,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
                                        }
@@ -3511,7 +3511,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
                                        }
@@ -3523,7 +3523,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                        if (r_ptr->flags3 & RF3_HURT_FIRE)
                                        {
                                                if (mult < 25) mult = 25;
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                {
                                                        r_ptr->r_flags3 |= RF3_HURT_FIRE;
                                                }
@@ -3538,7 +3538,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
                                        }
@@ -3549,7 +3549,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                        if (r_ptr->flags3 & RF3_HURT_COLD)
                                        {
                                                if (mult < 25) mult = 25;
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                {
                                                        r_ptr->r_flags3 |= RF3_HURT_COLD;
                                                }
@@ -3564,7 +3564,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                /* Notice immunity */
                                if (r_ptr->flagsr & RFR_EFF_IM_POIS_MASK)
                                {
-                                       if (m_ptr->ml)
+                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                        {
                                                r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_POIS_MASK);
                                        }
index c477219..2780c32 100644 (file)
 #define is_hostile(A) \
         (bool)((is_friendly(A) || is_pet(A)) ? FALSE : TRUE)
 
+/* Hack -- Determine monster race appearance index is same as race index */
+#define is_original_ap(A) \
+        (bool)(((A)->ap_r_idx == (A)->r_idx) ? TRUE : FALSE)
+
 
 /*** Macro Definitions ***/
 
index b52c4a8..aa54f33 100644 (file)
@@ -268,7 +268,7 @@ bool make_attack_normal(int m_idx)
                            ((randint0(100) + p_ptr->lev) > 50))
                        {
                                /* Remember the Evil-ness */
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_EVIL;
                                }
@@ -1874,7 +1874,7 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                        r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
                                        }
                                }
@@ -1906,7 +1906,7 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                        r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
                                        }
                                }
@@ -1938,7 +1938,7 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                        r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
                                        }
                                }
@@ -1970,7 +1970,7 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                        r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK);
                                        }
 
@@ -2004,12 +2004,12 @@ msg_format("%s
                                                                blinked = FALSE;
                                                                alive = FALSE;
                                                        }
-                                                       if (m_ptr->ml)
+                                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                                                r_ptr->r_flags3 |= RF3_EVIL;
                                                }
                                                else
                                                {
-                                                       if (m_ptr->ml)
+                                                       if (m_ptr->ml && is_original_ap(m_ptr))
                                                                r_ptr->r_flagsr |= RFR_RES_ALL;
                                                }
                                        }
@@ -2042,7 +2042,7 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
                                                        r_ptr->r_flagsr |= RFR_RES_ALL;
                                        }
                                }
index 200ea78..87a9463 100644 (file)
@@ -2058,7 +2058,7 @@ msg_format("%s
                                                                msg_format("%^s is suddenly very hot!", m_name);
 #endif
 
-                                                               if (see_t) tr_ptr->r_flags2 |= RF2_AURA_FIRE;
+                                                               if (see_t && is_original_ap(t_ptr)) tr_ptr->r_flags2 |= RF2_AURA_FIRE;
                                                        }
                                                        project(t_idx, 0, m_ptr->fy, m_ptr->fx,
                                                                damroll (1 + ((tr_ptr->level) / 26),
@@ -2067,7 +2067,7 @@ msg_format("%s
                                                }
                                                else
                                                {
-                                                       if (see_m) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
+                                                       if (see_m && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
                                                }
                                        }
 
@@ -2085,7 +2085,7 @@ msg_format("%s
                                                                msg_format("%^s is suddenly very cold!", m_name);
 #endif
 
-                                                               if (see_t) tr_ptr->r_flags3 |= RF3_AURA_COLD;
+                                                               if (see_t && is_original_ap(t_ptr)) tr_ptr->r_flags3 |= RF3_AURA_COLD;
                                                        }
                                                        project(t_idx, 0, m_ptr->fy, m_ptr->fx,
                                                                damroll (1 + ((tr_ptr->level) / 26),
@@ -2094,7 +2094,7 @@ msg_format("%s
                                                }
                                                else
                                                {
-                                                       if (see_m) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
+                                                       if (see_m && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
                                                }
                                        }
 
@@ -2112,7 +2112,7 @@ msg_format("%s
                                                                msg_format("%^s gets zapped!", m_name);
 #endif
 
-                                                               if (see_t) tr_ptr->r_flags2 |= RF2_AURA_ELEC;
+                                                               if (see_t && is_original_ap(t_ptr)) tr_ptr->r_flags2 |= RF2_AURA_ELEC;
                                                        }
                                                        project(t_idx, 0, m_ptr->fy, m_ptr->fx,
                                                                damroll (1 + ((tr_ptr->level) / 26),
@@ -2121,7 +2121,7 @@ msg_format("%s
                                                }
                                                else
                                                {
-                                                       if (see_m) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
+                                                       if (see_m && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
                                                }
                                        }
                                }
@@ -2521,7 +2521,7 @@ msg_format("%^s
                        if (multiply_monster(m_idx, FALSE, (is_pet(m_ptr) ? PM_FORCE_PET : 0)))
                        {
                                /* Take note if visible */
-                               if (m_ptr->ml && m_list[hack_m_idx_ii].ml)
+                               if (m_ptr->ml && m_list[hack_m_idx_ii].ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags2 |= (RF2_MULTIPLY);
                                }
@@ -2554,7 +2554,7 @@ msg_format("%^s
                                                }
                                        }
 
-                                       if (count && m_ptr->ml) r_ptr->r_flags6 |= (RF6_SPECIAL);
+                                       if (count && m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags6 |= (RF6_SPECIAL);
                                }
                        }
                }
@@ -2695,13 +2695,11 @@ msg_format("%^s%s", m_name, monmessage);
        }
 
        /* 75% random movement */
-       else if ((r_ptr->flags1 & RF1_RAND_50) &&
-                               (r_ptr->flags1 & RF1_RAND_25) &&
+       else if (((r_ptr->flags1 & (RF1_RAND_50 | RF1_RAND_25)) == (RF1_RAND_50 | RF1_RAND_25)) &&
                 (randint0(100) < 75))
        {
                /* Memorize flags */
-               if (m_ptr->ml) r_ptr->r_flags1 |= (RF1_RAND_50);
-               if (m_ptr->ml) r_ptr->r_flags1 |= (RF1_RAND_25);
+               if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags1 |= (RF1_RAND_50 | RF1_RAND_25);
 
                /* Try four "random" directions */
                mm[0] = mm[1] = mm[2] = mm[3] = 5;
@@ -2712,7 +2710,7 @@ msg_format("%^s%s", m_name, monmessage);
                                (randint0(100) < 50))
        {
                /* Memorize flags */
-               if (m_ptr->ml) r_ptr->r_flags1 |= (RF1_RAND_50);
+               if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags1 |= (RF1_RAND_50);
 
                /* Try four "random" directions */
                mm[0] = mm[1] = mm[2] = mm[3] = 5;
@@ -2723,7 +2721,7 @@ msg_format("%^s%s", m_name, monmessage);
                                (randint0(100) < 25))
        {
                /* Memorize flags */
-               if (m_ptr->ml) r_ptr->r_flags1 |= RF1_RAND_25;
+               if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags1 |= RF1_RAND_25;
 
                /* Try four "random" directions */
                mm[0] = mm[1] = mm[2] = mm[3] = 5;
@@ -3101,7 +3099,7 @@ msg_print("
                if (do_move && player_bold(ny, nx) && (r_ptr->flags1 & RF1_NEVER_BLOW))
                {
                        /* Hack -- memorize lack of attacks */
-                       if (m_ptr->ml) r_ptr->r_flags1 |= (RF1_NEVER_BLOW);
+                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags1 |= (RF1_NEVER_BLOW);
 
                        /* Do not move */
                        do_move = FALSE;
@@ -3149,7 +3147,10 @@ msg_print("
                        {
                                do_move = FALSE;
 
-                               if (r_ptr->flags2 & RF2_KILL_BODY) r_ptr->r_flags2 |= (RF2_KILL_BODY);
+                               if (r_ptr->flags2 & RF2_KILL_BODY)
+                               {
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_KILL_BODY);
+                               }
 
                                /* attack */
                                if ((m2_ptr->r_idx) && (m2_ptr->hp >= 0))
@@ -3191,7 +3192,7 @@ msg_print("
                if (do_move && (r_ptr->flags1 & RF1_NEVER_MOVE))
                {
                        /* Hack -- memorize lack of attacks */
-                       if (m_ptr->ml) r_ptr->r_flags1 |= (RF1_NEVER_MOVE);
+                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flags1 |= (RF1_NEVER_MOVE);
 
                        /* Do not move */
                        do_move = FALSE;
@@ -3476,7 +3477,7 @@ msg_format("%^s
        }
 
        /* Learn things from observable monster */
-       if (m_ptr->ml)
+       if (m_ptr->ml && is_original_ap(m_ptr))
        {
                /* Monster opened a door */
                if (did_open_door) r_ptr->r_flags2 |= (RF2_OPEN_DOOR);
index ed3b189..efb8945 100644 (file)
@@ -1937,6 +1937,9 @@ void lore_treasure(int m_idx, int num_item, int num_gold)
 
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
+       /* If the monster doesn't have original appearance, don't note */
+       if (!is_original_ap(m_ptr)) return;
+
        /* Note the number of things dropped */
        if (num_item > r_ptr->r_drop_item) r_ptr->r_drop_item = num_item;
        if (num_gold > r_ptr->r_drop_gold) r_ptr->r_drop_gold = num_gold;
@@ -1965,7 +1968,7 @@ void sanity_blast(monster_type *m_ptr, bool necro)
        if (!necro)
        {
                char            m_name[80];
-               monster_race    *r_ptr = &r_info[m_ptr->r_idx];
+               monster_race    *r_ptr = &r_info[m_ptr->ap_r_idx];
 
                power = r_ptr->level / 2;
 
@@ -2369,9 +2372,12 @@ void update_mon(int m_idx, bool full)
                                /* Detectable */
                                flag = TRUE;
 
-                               /* Hack -- Memorize mental flags */
-                               if (r_ptr->flags2 & (RF2_SMART)) r_ptr->r_flags2 |= (RF2_SMART);
-                               if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
+                               if (is_original_ap(m_ptr))
+                               {
+                                       /* Hack -- Memorize mental flags */
+                                       if (r_ptr->flags2 & (RF2_SMART)) r_ptr->r_flags2 |= (RF2_SMART);
+                                       if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
+                               }
                        }
 
                        /* Basic telepathy */
@@ -2381,7 +2387,7 @@ void update_mon(int m_idx, bool full)
                                if (r_ptr->flags2 & (RF2_EMPTY_MIND))
                                {
                                        /* Memorize flags */
-                                       r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
+                                       if (is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND);
                                }
 
                                /* Weird mind, occasional telepathy */
@@ -2393,12 +2399,15 @@ void update_mon(int m_idx, bool full)
                                                /* Detectable */
                                                flag = TRUE;
 
-                                               /* Memorize flags */
-                                               r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
+                                               if (is_original_ap(m_ptr))
+                                               {
+                                                       /* Memorize flags */
+                                                       r_ptr->r_flags2 |= (RF2_WEIRD_MIND);
 
-                                               /* Hack -- Memorize mental flags */
-                                               if (r_ptr->flags2 & (RF2_SMART)) r_ptr->r_flags2 |= (RF2_SMART);
-                                               if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
+                                                       /* Hack -- Memorize mental flags */
+                                                       if (r_ptr->flags2 & (RF2_SMART)) r_ptr->r_flags2 |= (RF2_SMART);
+                                                       if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
+                                               }
                                        }
                                }
 
@@ -2408,9 +2417,12 @@ void update_mon(int m_idx, bool full)
                                        /* Detectable */
                                        flag = TRUE;
 
-                                       /* Hack -- Memorize mental flags */
-                                       if (r_ptr->flags2 & (RF2_SMART)) r_ptr->r_flags2 |= (RF2_SMART);
-                                       if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
+                                       if (is_original_ap(m_ptr))
+                                       {
+                                               /* Hack -- Memorize mental flags */
+                                               if (r_ptr->flags2 & (RF2_SMART)) r_ptr->r_flags2 |= (RF2_SMART);
+                                               if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
+                                       }
                                }
                        }
 
@@ -2418,97 +2430,85 @@ void update_mon(int m_idx, bool full)
                        if ((p_ptr->esp_animal) && (r_ptr->flags3 & (RF3_ANIMAL)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_ANIMAL);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_ANIMAL);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_undead) && (r_ptr->flags3 & (RF3_UNDEAD)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_UNDEAD);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_demon) && (r_ptr->flags3 & (RF3_DEMON)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_DEMON);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_orc) && (r_ptr->flags3 & (RF3_ORC)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_ORC);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_ORC);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_troll) && (r_ptr->flags3 & (RF3_TROLL)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_TROLL);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_TROLL);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_giant) && (r_ptr->flags3 & (RF3_GIANT)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_GIANT);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GIANT);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_dragon) && (r_ptr->flags3 & (RF3_DRAGON)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_DRAGON);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_DRAGON);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_human) && (r_ptr->flags2 & (RF2_HUMAN)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags2 |= (RF2_HUMAN);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_HUMAN);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_evil) && (r_ptr->flags3 & (RF3_EVIL)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_EVIL);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_good) && (r_ptr->flags3 & (RF3_GOOD)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_GOOD);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD);
                        }
 
                        /* Magical sensing */
-                       if ((p_ptr->esp_nonliving) && 
+                       if ((p_ptr->esp_nonliving) &&
                            ((r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING)) == RF3_NONLIVING))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags3 |= (RF3_NONLIVING);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NONLIVING);
                        }
 
                        /* Magical sensing */
                        if ((p_ptr->esp_unique) && (r_ptr->flags1 & (RF1_UNIQUE)))
                        {
                                flag = TRUE;
-                               r_ptr->r_flags1 |= (RF1_UNIQUE);
-
+                               if (is_original_ap(m_ptr)) r_ptr->r_flags1 |= (RF1_UNIQUE);
                        }
                }
 
@@ -2564,9 +2564,12 @@ void update_mon(int m_idx, bool full)
                        /* Visible */
                        if (flag)
                        {
-                               /* Memorize flags */
-                               if (do_invisible) r_ptr->r_flags2 |= (RF2_INVISIBLE);
-                               if (do_cold_blood) r_ptr->r_flags2 |= (RF2_COLD_BLOOD);
+                               if (is_original_ap(m_ptr))
+                               {
+                                       /* Memorize flags */
+                                       if (do_invisible) r_ptr->r_flags2 |= (RF2_INVISIBLE);
+                                       if (do_cold_blood) r_ptr->r_flags2 |= (RF2_COLD_BLOOD);
+                               }
                        }
                }
        }
@@ -4097,6 +4100,12 @@ bool multiply_monster(int m_idx, bool clone, u32b mode)
                m_list[hack_m_idx_ii].mflag2 |= MFLAG2_NOPET;
        }
 
+       /* Hack -- Shadower spawns Shadower */
+       if (m_ptr->mflag2 & MFLAG2_KAGE) m_list[hack_m_idx_ii].mflag2 |= MFLAG2_KAGE;
+
+       /* Hack -- Appearance transfer */
+       if (!is_original_ap(m_ptr)) m_list[hack_m_idx_ii].ap_r_idx = m_ptr->ap_r_idx;
+
        return TRUE;
 }
 
index 43d5989..17b7a7a 100644 (file)
@@ -4514,7 +4514,7 @@ msg_print("¿
        }
 
        /* Remember what the monster did to us */
-       if (seen)
+       if (seen && is_original_ap(m_ptr))
        {
                /* Inate spell */
                if (thrown_spell < 32 * 4)
@@ -4542,7 +4542,7 @@ msg_print("¿
        /* Always take note of monsters that kill you */
        if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
        {
-               r_ptr->r_deaths++;
+               r_ptr->r_deaths++; /* Ignore appearance difference */
        }
 
        /* A spell was cast */
index f641b51..ff7219d 100644 (file)
@@ -2111,9 +2111,12 @@ bool monst_spell_monst(int m_idx)
                        /* No obvious effect */
                        if (see_both)
                        {
-                               /* Memorize a flag */
-                               if (tr_ptr->flagsr & RFR_RES_ALL) tr_ptr->r_flagsr |= (RFR_RES_ALL);
-                               if (tr_ptr->flags3 & RF3_NO_CONF) tr_ptr->r_flags3 |= (RF3_NO_CONF);
+                               if (is_original_ap(t_ptr))
+                               {
+                                       /* Memorize a flag */
+                                       if (tr_ptr->flagsr & RFR_RES_ALL) tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                                       if (tr_ptr->flags3 & RF3_NO_CONF) tr_ptr->r_flags3 |= (RF3_NO_CONF);
+                               }
 
 #ifdef JP
                                msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", t_name);
@@ -2170,9 +2173,12 @@ bool monst_spell_monst(int m_idx)
                        /* No obvious effect */
                        if (see_both)
                        {
-                               /* Memorize a flag */
-                               if (tr_ptr->flagsr & RFR_RES_ALL) tr_ptr->r_flagsr |= (RFR_RES_ALL);
-                               if (tr_ptr->flags3 & RF3_NO_CONF) tr_ptr->r_flags3 |= (RF3_NO_CONF);
+                               if (is_original_ap(t_ptr))
+                               {
+                                       /* Memorize a flag */
+                                       if (tr_ptr->flagsr & RFR_RES_ALL) tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                                       if (tr_ptr->flags3 & RF3_NO_CONF) tr_ptr->r_flags3 |= (RF3_NO_CONF);
+                               }
 
 #ifdef JP
                                msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", t_name);
@@ -2235,7 +2241,7 @@ bool monst_spell_monst(int m_idx)
                        /* Memorize a flag */
                        if (tr_ptr->flagsr & RFR_RES_ALL)
                        {
-                               tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= (RFR_RES_ALL);
                        }
 #ifdef JP
                        if (see_both) msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
@@ -2279,7 +2285,7 @@ bool monst_spell_monst(int m_idx)
                        /* Memorize a flag */
                        if (tr_ptr->flagsr & RFR_RES_ALL)
                        {
-                               tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= (RFR_RES_ALL);
                        }
 #ifdef JP
                        if (see_both) msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
@@ -2323,7 +2329,7 @@ bool monst_spell_monst(int m_idx)
                        /* Memorize a flag */
                        if (tr_ptr->flagsr & RFR_RES_ALL)
                        {
-                               tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= (RFR_RES_ALL);
                        }
 #ifdef JP
                        if (see_both) msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
@@ -2367,7 +2373,7 @@ bool monst_spell_monst(int m_idx)
                        /* Memorize a flag */
                        if (tr_ptr->flagsr & RFR_RES_ALL)
                        {
-                               tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= (RFR_RES_ALL);
                        }
 #ifdef JP
                        if (see_both) msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
@@ -2997,7 +3003,7 @@ bool monst_spell_monst(int m_idx)
                        /* Memorize a flag */
                        if (tr_ptr->flagsr & RFR_RES_ALL)
                        {
-                               tr_ptr->r_flagsr |= (RFR_RES_ALL);
+                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= (RFR_RES_ALL);
                        }
 #ifdef JP
                        if (see_both) msg_format("¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", t_name);
@@ -3293,7 +3299,7 @@ bool monst_spell_monst(int m_idx)
                                {
                                        if (see_t)
                                        {
-                                               tr_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                                msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", t_name);
 #else
@@ -3308,7 +3314,7 @@ bool monst_spell_monst(int m_idx)
                                {
                                        if (see_t)
                                        {
-                                               tr_ptr->r_flagsr |= RFR_RES_TELE;
+                                               if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                                msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
 #else
@@ -4109,7 +4115,7 @@ bool monst_spell_monst(int m_idx)
        }
 
        /* Remember what the monster did, if we saw it */
-       if (see_m)
+       if (see_m && is_original_ap(m_ptr))
        {
                /* Inate spell */
                if (thrown_spell < 32*4)
@@ -4136,7 +4142,7 @@ bool monst_spell_monst(int m_idx)
        /* Always take note of monsters that kill you */
        if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
        {
-               r_ptr->r_deaths++;
+               r_ptr->r_deaths++; /* Ignore appearance difference */
        }
 
        /* A spell was cast */
index 0670cf0..c1864a0 100644 (file)
@@ -1404,9 +1404,9 @@ msg_print("̵
                {
                        if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL))
                        {
-                               r_ptr->r_flagsr |= RFR_RES_TELE;
+                               if (is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
-msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", m_name);
+                               msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", m_name);
 #else
                                msg_format("%s is unaffected!", m_name);
 #endif
@@ -1415,9 +1415,9 @@ msg_format("%s
                        }
                        else if (r_ptr->level > randint1(100))
                        {
-                               r_ptr->r_flagsr |= RFR_RES_TELE;
+                               if (is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
-msg_format("%s¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª", m_name);
+                               msg_format("%s¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª", m_name);
 #else
                                msg_format("%s resists!", m_name);
 #endif
index 9f157fd..7e489c7 100644 (file)
@@ -1871,7 +1871,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 +1890,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 +1902,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 +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_ELEC)
@@ -1932,7 +1932,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 +1950,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 +1962,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 +1973,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 +1991,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 +2003,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 +2014,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 +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)
@@ -2044,7 +2044,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 +2062,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 +2074,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 +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)
@@ -2105,7 +2105,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 +2123,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 +2135,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 +2146,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 +2174,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 +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_PLAS)
@@ -2205,7 +2205,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 +2223,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 +2237,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 +2249,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 +2260,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 +2278,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 +2303,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 +2321,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 +2333,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 +2344,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 +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)
@@ -2379,7 +2379,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 +2397,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 +2409,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 +2428,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 +2440,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 +2459,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 +2471,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 +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_DISE)
@@ -2502,7 +2502,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 +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_NEXU)
@@ -2532,7 +2532,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 +2550,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 +2562,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 +2581,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 +2593,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 +2635,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 +2647,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 +2668,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 +2686,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 +2711,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 +2775,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 +2795,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 +2838,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 +2849,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 +2975,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 +3082,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 +3119,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 +3138,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 +3158,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 +3169,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 +3287,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 +3300,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 +3311,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,16 +3330,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 (seen)
                                {
-                                       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);
+                                       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
@@ -3369,16 +3372,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 (seen)
                                {
-                                       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);
+                                       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
@@ -3421,7 +3427,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) */
@@ -3631,7 +3637,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 */
@@ -3683,7 +3689,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 */
@@ -3694,7 +3700,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 */
@@ -3737,7 +3743,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 */
@@ -3783,7 +3789,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 */
@@ -3842,7 +3848,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;
                        }
 
@@ -3858,7 +3864,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 */
@@ -3929,7 +3935,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;
                        }
 
@@ -4004,7 +4010,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;
                        }
 
@@ -4080,7 +4086,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;
                        }
 
@@ -4097,7 +4103,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 */
@@ -4176,7 +4182,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;
                        }
 
@@ -4242,7 +4248,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 */
@@ -4256,7 +4262,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 */
@@ -4289,7 +4295,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;
@@ -4335,11 +4341,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
@@ -4377,26 +4386,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!";
@@ -4421,7 +4430,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)
@@ -4433,7 +4442,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;
                }
@@ -4450,11 +4459,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
@@ -4490,7 +4502,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
@@ -4501,7 +4513,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
@@ -4514,8 +4526,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;
                                }
                        }
@@ -4545,7 +4560,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
@@ -4556,7 +4571,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
@@ -4569,8 +4584,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;
                                }
                        }
@@ -4596,7 +4614,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
@@ -4607,7 +4625,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
@@ -4644,11 +4662,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;
@@ -4692,11 +4713,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;
@@ -4777,11 +4801,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
@@ -4820,11 +4847,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
@@ -4862,11 +4892,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
@@ -4943,11 +4976,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
@@ -5011,7 +5047,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;
                        }
 
@@ -5057,7 +5093,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;
                        }
 
@@ -5069,7 +5105,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 = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
@@ -5112,7 +5148,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;
                        }
 
@@ -5124,7 +5160,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 = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
@@ -5171,7 +5207,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;
                        }
 
@@ -5208,7 +5244,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;
                        }
 
@@ -5245,7 +5281,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;
                        }
 
@@ -5282,7 +5318,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;
                        }
 
@@ -5313,7 +5349,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;
                        }
 
@@ -5497,7 +5533,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)
@@ -5509,7 +5545,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)
@@ -5594,7 +5630,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 */
@@ -5647,7 +5683,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;
                        }
 
@@ -5714,11 +5750,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
@@ -5757,7 +5796,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;
@@ -5808,7 +5847,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;
                                }
                        }
@@ -5821,7 +5860,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);
                                }
                        }
 
@@ -5842,7 +5881,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;
                        }
 
@@ -9048,7 +9087,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 */
index 13fa91d..e637acf 100644 (file)
@@ -4156,14 +4156,17 @@ bool detect_monsters_evil(int range)
                /* Detect evil monsters */
                if (r_ptr->flags3 & RF3_EVIL)
                {
-                       /* Take note that they are evil */
-                       r_ptr->r_flags3 |= (RF3_EVIL);
-
-                       /* Update monster recall window */
-                       if (p_ptr->monster_race_idx == m_ptr->r_idx)
+                       if (is_original_ap(m_ptr))
                        {
-                               /* Window stuff */
-                               p_ptr->window |= (PW_MONSTER);
+                               /* Take note that they are evil */
+                               r_ptr->r_flags3 |= (RF3_EVIL);
+
+                               /* Update monster recall window */
+                               if (p_ptr->monster_race_idx == m_ptr->r_idx)
+                               {
+                                       /* Window stuff */
+                                       p_ptr->window |= (PW_MONSTER);
+                               }
                        }
 
                        /* Repair visibility later */
@@ -4436,14 +4439,17 @@ cptr desc_monsters = "
                /* Detect evil monsters */
                if (r_ptr->flags3 & (match_flag))
                {
-                       /* Take note that they are something */
-                       r_ptr->r_flags3 |= (match_flag);
-
-                       /* Update monster recall window */
-                       if (p_ptr->monster_race_idx == m_ptr->r_idx)
+                       if (is_original_ap(m_ptr))
                        {
-                               /* Window stuff */
-                               p_ptr->window |= (PW_MONSTER);
+                               /* Take note that they are something */
+                               r_ptr->r_flags3 |= (match_flag);
+
+                               /* Update monster recall window */
+                               if (p_ptr->monster_race_idx == m_ptr->r_idx)
+                               {
+                                       /* Window stuff */
+                                       p_ptr->window |= (PW_MONSTER);
+                               }
                        }
 
                        /* Repair visibility later */
@@ -6758,7 +6764,7 @@ msg_print("
                msg_print("Your teleportation is blocked!");
 #endif
 
-               if (m_ptr->ml) r_ptr->r_flagsr |= RFR_RES_TELE;
+               if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE;
 
                m_ptr->csleep = 0;
                /* Failure */