OSDN Git Service

視界外でテレパシーなどで見えているだけのモンスターの行動メッセージを
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Tue, 16 Dec 2003 19:41:47 +0000 (19:41 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Tue, 16 Dec 2003 19:41:47 +0000 (19:41 +0000)
表示しないオプション "ignore_unview" をXAngbandより移植. ただし, メッ
セージは省略してもモンスターの行動は事実として記憶に残る. なお, 以下
の修正と変更を含む.
* モンスター同士で殴り合う際に, 殴る側が見えていなくても殴られる側さ
  え見えていればオーラが記憶されていたので, 殴る側が見えなければ記憶
  されないように変更.
* 盲目状態で乗馬が見えなくなっている時に乗馬の加速/減速が切れると正し
  くプレイヤー速度が更新されないバグを修正.
* モンスター対モンスターで乗馬が減速を受けた直後に正しくプレイヤー速
  度が更新されなかったバグを修正.
* モンスターの加速, 減速, 朦朧, 混乱ではヘルスバーを書き換える必要は
  ないので, そのような場合にはPR_HEALTHやPR_UHEALTHは発行しないように
  変更.
* Typo fix: "ものでで攻撃された" -> "もので攻撃された".

14 files changed:
lib/help/joption.txt
lib/pref/pref-opt.prf
src/defines.h
src/dungeon.c
src/externs.h
src/floors.c
src/melee2.c
src/mspells2.c
src/spells1.c
src/spells2.c
src/spells3.c
src/tables.c
src/variable.c
src/xtra2.c

index a0dd1ba..1008267 100644 (file)
@@ -387,6 +387,12 @@ MP
     ¤³¤Î¥ª¥×¥·¥ç¥ó¤òON¤Ë¤¹¤ë¤È¥á¥¤¥ó²èÌ̤κ¸¤Ë¤¢¤ë·Ð¸³ÃͤÎÍó¤Ë¸½ºß¤Î·Ð
     ¸³ÃͤǤϤʤ¯¡¢¼¡¤Î¥ì¥Ù¥ë¤ËɬÍפʷи³Ãͤòɽ¼¨¤·¤Þ¤¹¡£
 
+***** <ignore_unview>
+»ë³¦³°¤Î¥â¥ó¥¹¥¿¡¼¤Î¹ÔÆ°¤òɽ¼¨¤·¤Ê¤¤  [ignore_unview]
+    »ë³¦³°¤Ç¤«¤Ä¥Æ¥ì¥Ñ¥·¡¼¤Ê¤É¤Ç¸«¤¨¤Æ¤¤¤ë¤À¤±¤Î¥â¥ó¥¹¥¿¡¼¤¬¹ÔÆ°¤·¤Æ¤â
+    ¤½¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤»¤ó¡£¤¿¤À¤·¼ÂºÝ¤Ë¤Ï¤½¤Î¥â¥ó¥¹¥¿¡¼¤Ï¹ÔÆ°¤·
+    ¤Æ¤¤¤ë¤¿¤á¡¢¥â¥ó¥¹¥¿¡¼¤Î¹ÔÆ°¤Ïµ­²±¤Ë»Ä¤ê¤Þ¤¹¡£
+
 
 ***** <GamePlay>
 === ¥ª¥×¥·¥ç¥ó4 -- ¥²¡¼¥à¥×¥ì¥¤ ===
index c4fddcb..cfcd329 100644 (file)
@@ -64,6 +64,7 @@ X:compress_savefile
 X:abbrev_extra
 X:abbrev_all
 X:exp_need
+X:ignore_unview
 
 ##### Game-Play #####
 
index cfd2b7c..a1cd4f5 100644 (file)
 #define is_original_ap(A) \
         (bool)(((A)->ap_r_idx == (A)->r_idx) ? TRUE : FALSE)
 
+/*
+ * Is the monster seen by the player?
+ */
+#define is_seen(A) \
+       ((bool) ((A)->ml && (!ignore_unview || player_can_see_bold((A)->fy, (A)->fx))))
+
 
 /*** Option Definitions ***/
 
index 5f82675..3949d95 100644 (file)
@@ -1107,6 +1107,7 @@ static void process_monsters_counters(void)
        int          m_idx;
        monster_type *m_ptr;
        monster_race *r_ptr;
+       bool         see_m;
 
        u32b noise; /* Hack -- local "player stealth" value */
 
@@ -1126,6 +1127,8 @@ static void process_monsters_counters(void)
                /* Ignore "dead" monsters */
                if (!m_ptr->r_idx) continue;
 
+               see_m = is_seen(m_ptr);
+
                /* Handle Invulnerability */
                if (m_ptr->invulner)
                {
@@ -1134,7 +1137,7 @@ static void process_monsters_counters(void)
 
                        if (!m_ptr->invulner)
                        {
-                               if (m_ptr->ml)
+                               if (see_m)
                                {
                                        char m_name[80];
 
@@ -1147,7 +1150,9 @@ static void process_monsters_counters(void)
 #else
                                        msg_format("%^s is no longer invulnerable.", m_name);
 #endif
-
+                               }
+                               if (m_ptr->ml)
+                               {
                                        if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
                                        if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
                                }
@@ -1161,26 +1166,23 @@ static void process_monsters_counters(void)
                        /* Reduce by one, note if expires */
                        m_ptr->fast--;
 
-                       if (!m_ptr->fast && m_ptr->ml)
+                       if (!m_ptr->fast)
                        {
-                               char m_name[80];
+                               if (see_m)
+                               {
+                                       char m_name[80];
 
-                               /* Acquire the monster name */
-                               monster_desc(m_name, m_ptr, 0);
+                                       /* Acquire the monster name */
+                                       monster_desc(m_name, m_ptr, 0);
 
-                               /* Dump a message */
+                                       /* Dump a message */
 #ifdef JP
-                               msg_format("%^s¤Ï¤â¤¦²Ã®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
+                                       msg_format("%^s¤Ï¤â¤¦²Ã®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
 #else
-                               msg_format("%^s is no longer fast.", m_name);
+                                       msg_format("%^s is no longer fast.", m_name);
 #endif
-
-                               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
-                               if (p_ptr->riding == m_idx)
-                               {
-                                       p_ptr->redraw |= (PR_UHEALTH);
-                                       p_ptr->update |= (PU_BONUS);
                                }
+                               if (p_ptr->riding == m_idx) p_ptr->update |= (PU_BONUS);
                        }
                }
 
@@ -1190,26 +1192,23 @@ static void process_monsters_counters(void)
                        /* Reduce by one, note if expires */
                        m_ptr->slow--;
 
-                       if (!m_ptr->slow && m_ptr->ml)
+                       if (!m_ptr->slow)
                        {
-                               char m_name[80];
+                               if (see_m)
+                               {
+                                       char m_name[80];
 
-                               /* Acquire the monster name */
-                               monster_desc(m_name, m_ptr, 0);
+                                       /* Acquire the monster name */
+                                       monster_desc(m_name, m_ptr, 0);
 
-                               /* Dump a message */
+                                       /* Dump a message */
 #ifdef JP
-                               msg_format("%^s¤Ï¤â¤¦¸ºÂ®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
+                                       msg_format("%^s¤Ï¤â¤¦¸ºÂ®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
 #else
-                               msg_format("%^s is no longer slow.", m_name);
+                                       msg_format("%^s is no longer slow.", m_name);
 #endif
-
-                               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
-                               if (p_ptr->riding == m_idx)
-                               {
-                                       p_ptr->redraw |= (PR_UHEALTH);
-                                       p_ptr->update |= (PU_BONUS);
                                }
+                               if (p_ptr->riding == m_idx) p_ptr->update |= (PU_BONUS);
                        }
                }
 
@@ -1281,7 +1280,7 @@ static void process_monsters_counters(void)
                                                if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
 
                                                /* Notice the "waking up" */
-                                               if (m_ptr->ml)
+                                               if (see_m)
                                                {
                                                        char m_name[80];
 
@@ -1294,7 +1293,10 @@ static void process_monsters_counters(void)
 #else
                                                        msg_format("%^s wakes up.", m_name);
 #endif
+                                               }
 
+                                               if (m_ptr->ml)
+                                               {
                                                        /* Redraw the health bar */
                                                        if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
                                                        if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
@@ -1336,7 +1338,7 @@ static void process_monsters_counters(void)
                                m_ptr->stunned = 0;
 
                                /* Message if visible */
-                               if (m_ptr->ml)
+                               if (see_m)
                                {
                                        char m_name[80];
 
@@ -1349,9 +1351,6 @@ static void process_monsters_counters(void)
 #else
                                        msg_format("%^s is no longer stunned.", m_name);
 #endif
-
-                                       if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
-                                       if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
                                }
                        }
                }
@@ -1376,7 +1375,7 @@ static void process_monsters_counters(void)
                                m_ptr->confused = 0;
 
                                /* Message if visible */
-                               if (m_ptr->ml)
+                               if (see_m)
                                {
                                        char m_name[80];
 
@@ -1389,9 +1388,6 @@ static void process_monsters_counters(void)
 #else
                                        msg_format("%^s is no longer confused.", m_name);
 #endif
-
-                                       if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
-                                       if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
                                }
                        }
                }
@@ -1416,7 +1412,7 @@ static void process_monsters_counters(void)
                                m_ptr->monfear = 0;
 
                                /* Visual note */
-                               if (m_ptr->ml)
+                               if (see_m)
                                {
                                        char m_name[80];
 #ifndef JP
@@ -1435,7 +1431,9 @@ static void process_monsters_counters(void)
 #else
                                        msg_format("%^s recovers %s courage.", m_name, m_poss);
 #endif
-
+                               }
+                               if (m_ptr->ml)
+                               {
                                        if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
                                        if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
                                }
index 8e9893f..b35a483 100644 (file)
@@ -277,6 +277,7 @@ extern bool compress_savefile;      /* Compress messages in savefiles */
 extern bool abbrev_extra;      /* Describe obj's extra resistances by abbreviation */
 extern bool abbrev_all;        /* Describe obj's all resistances by abbreviation */
 extern bool exp_need;  /* Show the experience needed for next level */
+extern bool ignore_unview;     /* Ignore whenever any monster does */
 
 
 /*** Game-Play Options ***/
index 4eb2e56..371d445 100644 (file)
@@ -447,10 +447,10 @@ static void preserve_pet(void)
                {
                        /* Its parent have gone, it also goes away. */
 
-                       if (m_ptr->ml)
+                       if (is_seen(m_ptr))
                        {
                                char m_name[80];
-                       
+
                                /* Acquire the monster name */
                                monster_desc(m_name, m_ptr, 0);
 
index 5d512de..4d18b33 100644 (file)
@@ -194,7 +194,7 @@ void mon_take_hit_mon(int m_idx, int dam, bool *fear, cptr note, int who)
 
        char m_name[160];
 
-       bool seen = m_ptr->ml;
+       bool seen = is_seen(m_ptr);
 
        /* Can the player be aware of this attack? */
        bool known = (m_ptr->cdis <= MAX_SIGHT);
@@ -203,8 +203,11 @@ void mon_take_hit_mon(int m_idx, int dam, bool *fear, cptr note, int who)
        monster_desc(m_name, m_ptr, 0);
 
        /* Redraw (later) if needed */
-       if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
-       if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
+       if (m_ptr->ml)
+       {
+               if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
+               if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
+       }
 
        /* Wake it up */
        m_ptr->csleep = 0;
@@ -1447,8 +1450,8 @@ static bool monst_attack_monst(int m_idx, int t_idx)
        int             y_saver = t_ptr->fy;
        int             x_saver = t_ptr->fx;
 
-       bool see_m = m_ptr->ml;
-       bool see_t = t_ptr->ml;
+       bool see_m = is_seen(m_ptr);
+       bool see_t = is_seen(t_ptr);
        bool see_either = see_m || see_t;
 
        /* Can the player be aware of this attack? */
@@ -2044,9 +2047,8 @@ msg_format("%s
 #else
                                                                msg_format("%^s is suddenly very hot!", m_name);
 #endif
-
-                                                               if (see_t && is_original_ap(t_ptr)) tr_ptr->r_flags2 |= RF2_AURA_FIRE;
                                                        }
+                                                       if (m_ptr->ml && t_ptr->ml && 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),
                                                                1 + ((tr_ptr->level) / 17)),
@@ -2054,7 +2056,7 @@ msg_format("%s
                                                }
                                                else
                                                {
-                                                       if (see_m && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
+                                                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
                                                }
                                        }
 
@@ -2070,9 +2072,8 @@ msg_format("%s
 #else
                                                                msg_format("%^s is suddenly very cold!", m_name);
 #endif
-
-                                                               if (see_t && is_original_ap(t_ptr)) tr_ptr->r_flags3 |= RF3_AURA_COLD;
                                                        }
+                                                       if (m_ptr->ml && t_ptr->ml && 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),
                                                                1 + ((tr_ptr->level) / 17)),
@@ -2080,7 +2081,7 @@ msg_format("%s
                                                }
                                                else
                                                {
-                                                       if (see_m && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
+                                                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
                                                }
                                        }
 
@@ -2096,9 +2097,8 @@ msg_format("%s
 #else
                                                                msg_format("%^s gets zapped!", m_name);
 #endif
-
-                                                               if (see_t && is_original_ap(t_ptr)) tr_ptr->r_flags2 |= RF2_AURA_ELEC;
                                                        }
+                                                       if (m_ptr->ml && t_ptr->ml && 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),
                                                                1 + ((tr_ptr->level) / 17)),
@@ -2106,7 +2106,7 @@ msg_format("%s
                                                }
                                                else
                                                {
-                                                       if (see_m && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
+                                                       if (m_ptr->ml && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
                                                }
                                        }
                                }
@@ -2156,7 +2156,7 @@ msg_format("%s
 
 
                /* Analyze "visible" monsters only */
-               if (see_m && !do_silly_attack)
+               if (m_ptr->ml && !do_silly_attack)
                {
                        /* Count "obvious" attacks (and ones that cause damage) */
                        if (obvious || damage || (r_ptr->r_blows[ap_cnt] > 10))
@@ -2269,6 +2269,8 @@ static void process_monster(int m_idx)
 
        bool            is_riding_mon = (m_idx == p_ptr->riding);
 
+       bool            see_m = is_seen(m_ptr);
+
        if (is_riding_mon && !(r_ptr->flags7 & RF7_RIDING))
        {
                if (rakuba(0, TRUE))
@@ -2305,10 +2307,10 @@ static void process_monster(int m_idx)
        {
                /* Its parent have gone, it also goes away. */
 
-               if (m_ptr->ml)
+               if (see_m)
                {
                        char m_name[80];
-                       
+
                        /* Acquire the monster name */
                        monster_desc(m_name, m_ptr, 0);
 
@@ -2339,7 +2341,7 @@ static void process_monster(int m_idx)
                        if (is_pet(m_ptr) && !(m_ptr->ml))
                                sad = TRUE;
 
-                       if (m_ptr->ml)
+                       if (see_m)
                        {
                                char m_name[80];
 
@@ -2348,11 +2350,10 @@ static void process_monster(int m_idx)
 
                                /* Oops */
 #ifdef JP
-msg_format("%s¤Ï¾Ã¤¨µî¤Ã¤¿¡ª", m_name);
+                               msg_format("%s¤Ï¾Ã¤¨µî¤Ã¤¿¡ª", m_name);
 #else
                                msg_format("%^s disappears!", m_name);
 #endif
-
                        }
 
                        /* Generate treasure, etc */
@@ -2364,11 +2365,10 @@ msg_format("%s
                        if (sad)
                        {
 #ifdef JP
-msg_print("¾¯¤·¤Î´ÖÈᤷ¤¤µ¤Ê¬¤Ë¤Ê¤Ã¤¿¡£");
+                               msg_print("¾¯¤·¤Î´ÖÈᤷ¤¤µ¤Ê¬¤Ë¤Ê¤Ã¤¿¡£");
 #else
                                msg_print("You feel sad for a moment.");
 #endif
-
                        }
 
                        return;
@@ -2420,7 +2420,7 @@ msg_print("
                                        }
                                }
 
-                               if (m_ptr->ml)
+                               if (see_m)
                                {
                                        if ((r_ptr->flags2 & RF2_CAN_SPEAK) && (m_ptr->r_idx != MON_GRIP) && (m_ptr->r_idx != MON_WOLF) && (m_ptr->r_idx != MON_FANG) &&
                                            player_has_los_bold(m_ptr->fy, m_ptr->fx) && projectable(m_ptr->fy, m_ptr->fx, py, px))
@@ -2478,7 +2478,7 @@ msg_print("
                if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
 
                /* Notice the "waking up" */
-               if (m_ptr->ml)
+               if (see_m)
                {
                        char m_name[80];
 
@@ -3537,7 +3537,7 @@ msg_format("%^s%s", m_name, monmessage);
                m_ptr->monfear = 0;
 
                /* Message if seen */
-               if (m_ptr->ml)
+               if (see_m)
                {
                        char m_name[80];
 
@@ -3958,11 +3958,15 @@ void monster_gain_exp(int m_idx, int s_idx)
 
                if (is_pet(m_ptr) || m_ptr->ml)
                {
+                       if (!ignore_unview || player_can_see_bold(m_ptr->fy, m_ptr->fx))
+                       {
 #ifdef JP
-                       msg_format("%s¤Ï%s¤Ë¿Ê²½¤·¤¿¡£", m_name, r_name + r_ptr->name);
+                               msg_format("%s¤Ï%s¤Ë¿Ê²½¤·¤¿¡£", m_name, r_name + r_ptr->name);
 #else
-                       msg_format("%^s evolved into %s.", m_name, r_name + r_ptr->name);
+                               msg_format("%^s evolved into %s.", m_name, r_name + r_ptr->name);
 #endif
+                       }
+
                        r_info[old_r_idx].r_xtra1 |= MR1_SINKA;
 
                        /* Now you feel very close to this pet. */
index 70f0449..f76d244 100644 (file)
@@ -288,9 +288,9 @@ bool monst_spell_monst(int m_idx)
 
        bool blind = (p_ptr->blind ? TRUE : FALSE);
 
-       bool see_m = m_ptr->ml;
+       bool see_m = is_seen(m_ptr);
        bool maneable = player_has_los_bold(m_ptr->fy, m_ptr->fx);
-       bool learnable = (see_m && maneable && !world_monster);
+       bool learnable = (m_ptr->ml && maneable && !world_monster);
        bool see_t;
        bool see_either;
        bool known;
@@ -672,7 +672,7 @@ bool monst_spell_monst(int m_idx)
        /* Choose a spell to cast */
        thrown_spell = spell[randint0(num)];
 
-       see_t = t_ptr->ml;
+       see_t = is_seen(t_ptr);
        see_either = (see_m || see_t);
 
        /* Can the player be aware of this attack? */
@@ -2699,7 +2699,7 @@ bool monst_spell_monst(int m_idx)
                else
                {
 #ifdef JP
-                       if (see_t)   msg_format("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", t_name);
+                       if (see_t) msg_format("%^s¤ÏÌܤ¬¸«¤¨¤Ê¤¯¤Ê¤Ã¤¿¡ª ", t_name);
 #else
                        if (see_t) msg_format("%^s is blinded!", t_name);
 #endif
@@ -2815,6 +2815,7 @@ bool monst_spell_monst(int m_idx)
                        }
 
                        t_ptr->slow = MIN(200, t_ptr->slow + 50);
+                       if (p_ptr->riding == t_idx) p_ptr->update |= PU_BONUS;
                }
 
                wake_up = TRUE;
@@ -3073,7 +3074,7 @@ bool monst_spell_monst(int m_idx)
 
                teleport_away(m_idx, MAX_SIGHT * 2 + 5, FALSE, FALSE);
 
-               if (los(py, px, m_ptr->fy, m_ptr->fx) && !world_monster && see_m)
+               if (los(py, px, m_ptr->fy, m_ptr->fx) && !world_monster && m_ptr->ml)
                {
                        for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
                        {
@@ -3284,30 +3285,28 @@ bool monst_spell_monst(int m_idx)
                {
                        if ((tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flagsr & RFR_RES_ALL))
                        {
+                               if (t_ptr->ml && is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
                                if (see_t)
                                {
-                                       if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                        msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", t_name);
 #else
                                        msg_format("%^s is unaffected!", t_name);
 #endif
-
                                }
 
                                resists_tele = TRUE;
                        }
                        else if (tr_ptr->level > randint1(100))
                        {
+                               if (t_ptr->ml && is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
                                if (see_t)
                                {
-                                       if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                        msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
 #else
                                        msg_format("%^s resists!", t_name);
 #endif
-
                                }
 
                                resists_tele = TRUE;
@@ -3346,30 +3345,28 @@ bool monst_spell_monst(int m_idx)
                {
                        if ((tr_ptr->flags1 & RF1_UNIQUE) || (tr_ptr->flagsr & RFR_RES_ALL))
                        {
+                               if (t_ptr->ml && is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
                                if (see_t)
                                {
-                                       if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                        msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", t_name);
 #else
                                        msg_format("%^s is unaffected!", t_name);
 #endif
-
                                }
 
                                resists_tele = TRUE;
                        }
                        else if (tr_ptr->level > randint1(100))
                        {
+                               if (t_ptr->ml && is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
                                if (see_t)
                                {
-                                       if (is_original_ap(t_ptr)) tr_ptr->r_flagsr |= RFR_RES_TELE;
 #ifdef JP
                                        msg_format("%^s¤ÏÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤ë¡ª", t_name);
 #else
                                        msg_format("%^s resists!", t_name);
 #endif
-
                                }
 
                                resists_tele = TRUE;
@@ -4184,7 +4181,7 @@ bool monst_spell_monst(int m_idx)
 
        }
 
-       if (see_m && maneable && !world_monster && !p_ptr->blind && (p_ptr->pclass == CLASS_IMITATOR))
+       if (m_ptr->ml && maneable && !world_monster && !p_ptr->blind && (p_ptr->pclass == CLASS_IMITATOR))
        {
                if (thrown_spell != 167) /* Not RF6_SPECIAL */
                {
@@ -4207,7 +4204,7 @@ bool monst_spell_monst(int m_idx)
        }
 
        /* Remember what the monster did, if we saw it */
-       if (see_m && is_original_ap(m_ptr))
+       if (m_ptr->ml && is_original_ap(m_ptr))
        {
                /* Inate spell */
                if (thrown_spell < 32*4)
index d47fe15..8cf31da 100644 (file)
@@ -1655,6 +1655,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg)
        cave_type *c_ptr = &cave[y][x];
 
        monster_type *m_ptr = &m_list[c_ptr->m_idx];
+       monster_type *caster_ptr = (who > 0) ? &m_list[who] : NULL;
 
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
@@ -1672,7 +1673,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg)
        bool known = ((m_ptr->cdis <= MAX_SIGHT) || p_ptr->inside_battle);
 
        /* Can the player see the source of this effect? */
-       bool see_s = ((who <= 0) || m_list[who].ml);
+       bool see_s = ((who <= 0) || is_seen(caster_ptr));
 
        /* Were the effects "irrelevant"? */
        bool skipped = FALSE;
@@ -1721,7 +1722,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg)
        int ty = m_ptr->fy;
        int tx = m_ptr->fx;
 
-       int caster_lev = (who > 0) ? r_info[m_list[who].r_idx].level : p_ptr->lev * 2;
+       int caster_lev = (who > 0) ? r_info[caster_ptr->r_idx].level : (p_ptr->lev * 2);
 
        /* Nobody here */
        if (!c_ptr->m_idx) return (FALSE);
@@ -2717,9 +2718,9 @@ note_dies = "
                        if (!(los(m_ptr->fy, m_ptr->fx, py, px)))
                        {
 #ifdef JP
-                               if (seen) msg_format("%s¤Ï¤¢¤Ê¤¿¤¬¸«¤¨¤Ê¤¤¤Î¤Ç±Æ¶Á¤µ¤ì¤Ê¤¤¡ª", m_name);
+                               if (is_seen(m_ptr)) msg_format("%s¤Ï¤¢¤Ê¤¿¤¬¸«¤¨¤Ê¤¤¤Î¤Ç±Æ¶Á¤µ¤ì¤Ê¤¤¡ª", m_name);
 #else
-                               if (seen) msg_format("%^s can't see you, and isn't affected!", m_name);
+                               if (is_seen(m_ptr)) msg_format("%^s can't see you, and isn't affected!", m_name);
 #endif
                                skipped = TRUE;
                                break;
@@ -4954,8 +4955,6 @@ note_dies = "
                        {
                                if (who > 0)
                                {
-                                       monster_type *caster_ptr = &m_list[who];
-
                                        /* Heal the monster */
                                        if (caster_ptr->hp < caster_ptr->maxhp)
                                        {
@@ -4968,7 +4967,7 @@ note_dies = "
                                                if (p_ptr->riding == who) p_ptr->redraw |= (PR_UHEALTH);
 
                                                /* Special message */
-                                               if (caster_ptr->ml)
+                                               if (is_seen(caster_ptr))
                                                {
                                                        /* Get the monster name */
                                                        monster_desc(killer, caster_ptr, 0);
@@ -5299,7 +5298,7 @@ note_dies = "
                        }
 
                        /* Attempt a saving throw */
-                       if ((randint0(100 + (caster_lev / 2)) < (r_ptr->level + 35)) && ((who <= 0) || (m_list[who].r_idx != MON_KENSHIROU)))
+                       if ((randint0(100 + (caster_lev / 2)) < (r_ptr->level + 35)) && ((who <= 0) || (caster_ptr->r_idx != MON_KENSHIROU)))
                        {
 #ifdef JP
                                note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
@@ -6115,7 +6114,7 @@ msg_print("
                else
                {
                        /* Give detailed messages if visible or destroyed */
-                       if (note && seen) msg_format("%^s%s", m_name, note);
+                       if (note && is_seen(m_ptr)) msg_format("%^s%s", m_name, note);
 
                        /* Hack -- Pain message */
                        else if (see_s)
@@ -6135,9 +6134,9 @@ msg_print("
        else if (heal_leper)
        {
 #ifdef JP
-msg_print("ÉÔ·é¤ÊÉ¿ͤÏɵ¤¤¬¼£¤Ã¤¿¡ª");
+               if (is_seen(m_ptr)) msg_print("ÉÔ·é¤ÊÉ¿ͤÏɵ¤¤¬¼£¤Ã¤¿¡ª");
 #else
-               msg_print("The Mangy looking leper is healed!");
+               if (is_seen(m_ptr)) msg_print("The Mangy looking leper is healed!");
 #endif
 
                delete_monster_idx(c_ptr->m_idx);
@@ -6161,9 +6160,9 @@ msg_print("
                        if (do_sleep) anger_monster(m_ptr);
 
                        /* Give detailed messages if visible or destroyed */
-                       if (note && seen)
+                       if (note && is_seen(m_ptr))
 #ifdef JP
-msg_format("%s%s", m_name, note);
+                               msg_format("%s%s", m_name, note);
 #else
                                msg_format("%^s%s", m_name, note);
 #endif
@@ -6180,18 +6179,17 @@ msg_format("%s%s", m_name, note);
                                anger_monster(m_ptr);
 
                        /* Take note */
-                       if ((fear || do_fear) && (m_ptr->ml))
+                       if ((fear || do_fear) && is_seen(m_ptr))
                        {
                                /* Sound */
                                sound(SOUND_FLEE);
 
                                /* Message */
 #ifdef JP
-msg_format("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", m_name);
+                               msg_format("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", m_name);
 #else
                                msg_format("%^s flees in terror!", m_name);
 #endif
-
                        }
 
                        /* Hack -- handle sleep */
@@ -6341,9 +6339,9 @@ msg_print("
                                set_target(m_ptr, monster_target_y, monster_target_x);
                        }
                }
-               else if (is_pet(&m_list[who]) && !player_bold(m_ptr->target_y, m_ptr->target_x))
+               else if ((who > 0) && is_pet(caster_ptr) && !player_bold(m_ptr->target_y, m_ptr->target_x))
                {
-                       set_target(m_ptr, m_list[who].fy, m_list[who].fx);
+                       set_target(m_ptr, caster_ptr->fy, caster_ptr->fx);
                }
        }
 
@@ -6707,7 +6705,7 @@ if (fuzzy) msg_print("
                case GF_PLASMA:
                {
 #ifdef JP
-if (fuzzy) msg_print("²¿¤«¤È¤Æ¤âÇ®¤¤¤â¤Î¤Ç¤Ç¹¶·â¤µ¤ì¤¿¡ª");
+                       if (fuzzy) msg_print("²¿¤«¤È¤Æ¤âÇ®¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª");
 #else
                        if (fuzzy) msg_print("You are hit by something *HOT*!");
 #endif
@@ -6917,7 +6915,7 @@ if (fuzzy) msg_print("
                case GF_DISENCHANT:
                {
 #ifdef JP
-if (fuzzy) msg_print("²¿¤«¤µ¤¨¤Ê¤¤¤â¤Î¤Ç¤Ç¹¶·â¤µ¤ì¤¿¡ª");
+                       if (fuzzy) msg_print("²¿¤«¤µ¤¨¤Ê¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª");
 #else
                        if (fuzzy) msg_print("You are hit by something static!");
 #endif
@@ -7198,8 +7196,8 @@ msg_print("
                case GF_GRAVITY:
                {
 #ifdef JP
-if (fuzzy) msg_print("²¿¤«½Å¤¤¤â¤Î¤Ç¤Ç¹¶·â¤µ¤ì¤¿¡ª");
-msg_print("¼þÊդνÅÎϤ¬¤æ¤¬¤ó¤À¡£");
+                       if (fuzzy) msg_print("²¿¤«½Å¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª");
+                       msg_print("¼þÊդνÅÎϤ¬¤æ¤¬¤ó¤À¡£");
 #else
                        if (fuzzy) msg_print("You are hit by something heavy!");
                        msg_print("Gravity warps around you.");
@@ -9047,7 +9045,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons
                                                t_x = x_saver;
                                        }
 
-                                       if (m_ptr->ml)
+                                       if (is_seen(m_ptr))
                                        {
 #ifdef JP
                                                if ((m_ptr->r_idx == MON_KENSHIROU) || (m_ptr->r_idx == MON_RAOU))
@@ -9057,9 +9055,8 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons
 #else
                                                msg_print("The attack bounces!");
 #endif
-
-                                               if (is_original_ap(m_ptr)) ref_ptr->r_flags2 |= RF2_REFLECTING;
                                        }
+                                       if (m_ptr->ml && is_original_ap(m_ptr)) ref_ptr->r_flags2 |= RF2_REFLECTING;
 
                                        /* Reflected bolts randomly target either one */
                                        if (one_in_(2)) flg |= PROJECT_PLAYER;
index f67fe0b..32d22a1 100644 (file)
@@ -4698,8 +4698,10 @@ while(!get_com("
 
                if (angry && player_cast)
                {
+                       bool see_m = is_seen(m_ptr);
+
                        monster_desc(m_name, m_ptr, 0);
-                       if (m_ptr->ml && !p_ptr->blind)
+                       if (see_m && !p_ptr->blind)
                        {
 #ifdef JP
 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
@@ -4711,7 +4713,7 @@ msg_format("%^s
                        {
                                m_ptr->csleep = 0;
                                if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
-                               if (m_ptr->ml && !p_ptr->blind)
+                               if (see_m && !p_ptr->blind)
                                {
 #ifdef JP
 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
@@ -4722,7 +4724,7 @@ msg_format("%^s
                        }
                        if (is_friendly(m_ptr) && !is_pet(m_ptr))
                        {
-                               if (m_ptr->ml && !p_ptr->blind)
+                               if (see_m && !p_ptr->blind)
                                {
 #ifdef JP
                                        msg_format("%s¤ÏÅܤä¿¡ª", m_name);
@@ -4828,8 +4830,10 @@ bool mass_genocide(int power, int player_cast)
 
                if (angry && player_cast)
                {
+                       bool see_m = is_seen(m_ptr);
+
                        monster_desc(m_name, m_ptr, 0);
-                       if (m_ptr->ml && !p_ptr->blind)
+                       if (see_m && !p_ptr->blind)
                        {
 #ifdef JP
 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
@@ -4841,7 +4845,7 @@ msg_format("%^s
                        {
                                m_ptr->csleep = 0;
                                if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
-                               if (m_ptr->ml && !p_ptr->blind)
+                               if (see_m && !p_ptr->blind)
                                {
 #ifdef JP
 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
@@ -4852,7 +4856,7 @@ msg_format("%^s
                        }
                        if (is_friendly(m_ptr) && !is_pet(m_ptr))
                        {
-                               if (m_ptr->ml && !p_ptr->blind)
+                               if (see_m && !p_ptr->blind)
                                {
 #ifdef JP
                                        msg_format("%s¤ÏÅܤä¿¡ª", m_name);
@@ -4961,8 +4965,10 @@ bool mass_genocide_undead(int power, int player_cast)
 
                if (angry && player_cast)
                {
+                       bool see_m = is_seen(m_ptr);
+
                        monster_desc(m_name, m_ptr, 0);
-                       if (m_ptr->ml && !p_ptr->blind)
+                       if (see_m && !p_ptr->blind)
                        {
 #ifdef JP
 msg_format("%^s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name);
@@ -4974,7 +4980,7 @@ msg_format("%^s
                        {
                                m_ptr->csleep = 0;
                                if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
-                               if (m_ptr->ml && !p_ptr->blind)
+                               if (see_m && !p_ptr->blind)
                                {
 #ifdef JP
 msg_format("%^s¤¬Ìܤò³Ð¤Þ¤·¤¿¡£", m_name);
@@ -4985,7 +4991,7 @@ msg_format("%^s
                        }
                        if (is_friendly(m_ptr) && !is_pet(m_ptr))
                        {
-                               if (m_ptr->ml && !p_ptr->blind)
+                               if (see_m && !p_ptr->blind)
                                {
 #ifdef JP
                                        msg_format("%s¤ÏÅܤä¿¡ª", m_name);
@@ -6034,7 +6040,7 @@ static void cave_temp_room_lite(void)
                                if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
 
                                /* Notice the "waking up" */
-                               if (m_ptr->ml)
+                               if (is_seen(m_ptr))
                                {
                                        char m_name[80];
 
@@ -6047,11 +6053,11 @@ msg_format("%^s
 #else
                                        msg_format("%^s wakes up.", m_name);
 #endif
-                                       /* Redraw the health bar */
-                                       if (p_ptr->health_who == c_ptr->m_idx)
-                                               p_ptr->redraw |= (PR_HEALTH);
-
                                }
+
+                               /* Redraw the health bar */
+                               if (m_ptr->ml && (p_ptr->health_who == c_ptr->m_idx))
+                                       p_ptr->redraw |= (PR_HEALTH);
                        }
                }
 
index 776d2a7..a105881 100644 (file)
@@ -505,7 +505,7 @@ void teleport_level(int m_idx)
                /* Get the monster name (or "it") */
                monster_desc(m_name, m_ptr, 0);
 
-               see_m = m_ptr->ml;
+               see_m = is_seen(m_ptr);
        }
 
        /* No effect in some case */
@@ -1491,7 +1491,7 @@ static bool vanish_dungeon(void)
                                m_ptr->csleep = 0;
 
                                /* Notice the "waking up" */
-                               if (m_ptr->ml)
+                               if (is_seen(m_ptr))
                                {
                                        /* Acquire the monster name */
                                        monster_desc(m_name, m_ptr, 0);
index 10762e5..fc4ca9a 100644 (file)
@@ -6726,7 +6726,6 @@ option_type option_info[] =
        "display_path",                 "Display actual path before shooting" },
 #endif
 
-
        /*** Text Display Options ***/
 
 #ifdef JP
@@ -6833,6 +6832,13 @@ option_type option_info[] =
        "exp_need",                     "Show the experience needed for next level" },
 #endif
 
+#ifdef JP
+       { &ignore_unview,               FALSE, OPT_PAGE_TEXT, 2, 13,
+       "ignore_unview",                "»ë³¦³°¤Î¥â¥ó¥¹¥¿¡¼¤Î¹ÔÆ°¤òɽ¼¨¤·¤Ê¤¤" },
+#else
+       { &ignore_unview,               FALSE, OPT_PAGE_TEXT, 2, 13,
+       "ignore_unview",                "Ignore whenever any monster does" },
+#endif
 
        /*** Game-Play ***/
 
index 4fa7c98..42946f2 100644 (file)
@@ -242,6 +242,7 @@ bool compress_savefile;     /* Compress messages in savefiles */
 bool abbrev_extra;     /* Describe obj's extra resistances by abbreviation */
 bool abbrev_all;       /* Describe obj's all resistances by abbreviation */
 bool exp_need; /* Show the experience needed for next level */
+bool ignore_unview;    /* Ignore whenever any monster does */
 
 
 /*** Game-Play Options ***/
index efce385..ee13ff3 100644 (file)
@@ -1577,7 +1577,7 @@ int mon_damage_mod(monster_type *m_ptr, int dam, bool is_psy_spear)
        {
                if (is_psy_spear)
                {
-                       if(!p_ptr->blind && m_ptr->ml)
+                       if (!p_ptr->blind && is_seen(m_ptr))
                        {
 #ifdef JP
 msg_print("¥Ð¥ê¥¢¤òÀÚ¤êÎö¤¤¤¿¡ª");