OSDN Git Service

万色モンスターの再描画フラグshimmer_monstersに関する修正.
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 1 Jun 2003 20:14:35 +0000 (20:14 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 1 Jun 2003 20:14:35 +0000 (20:14 +0000)
* shimmer_monstersフラグ関連の処理ではモンスターの外見であるap_r_idx
  を見るように変更.
* shimmer_monstersのループでは見えていないモンスターは無視するように
  変更.
* ATTR_MULTIの他にSHAPECHANGERでも再描画フラグを立てることとした. こ
  れは問題があればすぐに無効化するべき.

src/dungeon.c
src/floors.c
src/monster2.c

index 5ef96f1..2939a9a 100644 (file)
@@ -6005,11 +6005,15 @@ msg_format("%s(%c)
                                        /* Skip dead monsters */
                                        if (!m_ptr->r_idx) continue;
 
+                                       /* Skip unseen monsters */
+                                       if (!m_ptr->ml) continue;
+
                                        /* Access the monster race */
-                                       r_ptr = &r_info[m_ptr->r_idx];
+                                       r_ptr = &r_info[m_ptr->ap_r_idx];
 
                                        /* Skip non-multi-hued monsters */
-                                       if (!(r_ptr->flags1 & RF1_ATTR_MULTI)) continue;
+                                       if (!(r_ptr->flags1 & RF1_ATTR_MULTI) && !(r_ptr->flags2 & RF2_SHAPECHANGER))
+                                               continue;
 
                                        /* Reset the flag */
                                        shimmer_monsters = TRUE;
index 15bc436..187f6ab 100644 (file)
@@ -461,12 +461,12 @@ static void place_pet(void)
                        else
                                m_idx = m_pop();
                }
-               
+
                if (m_idx)
                {
                        monster_type *m_ptr = &m_list[m_idx];
                        monster_race *r_ptr;
-                       
+
                        cave[cy][cx].m_idx = m_idx;
 
                        m_ptr->r_idx = party_mon[i].r_idx;
@@ -488,27 +488,31 @@ static void place_pet(void)
                        {
                                /* Monster is still being nice */
                                m_ptr->mflag |= (MFLAG_NICE);
-                               
+
                                /* Must repair monsters */
                                repair_monsters = TRUE;
                        }
-                       
+
                        /* Update the monster */
                        update_mon(m_idx, TRUE);
                        lite_spot(cy, cx);
-                       
+
                        r_ptr->cur_num++;
-                       
+
                        /* Hack -- Count the number of "reproducers" */
                        if (r_ptr->flags2 & RF2_MULTIPLY) num_repro++;
-                       
+
                        /* Hack -- Notice new multi-hued monsters */
-                       if (r_ptr->flags1 & RF1_ATTR_MULTI) shimmer_monsters = TRUE;
+                       {
+                               monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
+                               if ((ap_r_ptr->flags1 & RF1_ATTR_MULTI) || (ap_r_ptr->flags2 & RF2_SHAPECHANGER))
+                                       shimmer_monsters = TRUE;
+                       }
                }
                else
                {
                        char m_name[80];
-                       
+
                        monster_desc(m_name, &party_mon[i], 0);
 #ifdef JP
                        msg_format("%s¤È¤Ï¤°¤ì¤Æ¤·¤Þ¤Ã¤¿¡£", m_name);
index ba72d53..23a41c9 100644 (file)
@@ -3305,7 +3305,11 @@ msg_print("
 
 
        /* Hack -- Notice new multi-hued monsters */
-       if (r_ptr->flags1 & RF1_ATTR_MULTI) shimmer_monsters = TRUE;
+       {
+               monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
+               if ((ap_r_ptr->flags1 & RF1_ATTR_MULTI) || (ap_r_ptr->flags2 & RF2_SHAPECHANGER))
+                       shimmer_monsters = TRUE;
+       }
 
        if (p_ptr->warning && character_dungeon)
        {