OSDN Git Service

外見が異なるモンスターの処理に関する修正.
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Wed, 10 Mar 2004 12:06:24 +0000 (12:06 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Wed, 10 Mar 2004 12:06:24 +0000 (12:06 +0000)
* is_original_ap()でまとめられる部分の整理.
* update_mon()内での狂気判定が正しく外見依存になっていなかったバグを
  修正.
* たぬきをクローンした直後に別のモンスターの外見が表示されてからク
  ローン元のモンスターの外見になるバグを修正. 生成直後に2重に狂気判定
  を行うことがないように, 召喚時にモンスター外見のコピーを行うための
  モードPM_MUTIPLYを追加.

src/defines.h
src/monster2.c
src/save.c
src/spells2.c

index feff709..4d55fe7 100644 (file)
 #define PM_IGNORE_TERRAIN 0x00000080
 #define PM_HASTE          0x00000100
 #define PM_KAGE           0x00000200
+#define PM_MULTIPLY       0x00000400
 
 
 /* Bit flags for monster_desc() */
index 7bca770..d7843b7 100644 (file)
@@ -1652,7 +1652,7 @@ void monster_desc(char *desc, monster_type *m_ptr, int mode)
        else
        {
                /* Tanuki? */
-               if (is_pet(m_ptr) && m_ptr->ap_r_idx != m_ptr->r_idx)
+               if (is_pet(m_ptr) && !is_original_ap(m_ptr))
                {
 #ifdef JP
                        char *t;
@@ -1788,7 +1788,7 @@ void monster_desc(char *desc, monster_type *m_ptr, int mode)
                        }
                }
 
-               if ((mode & MD_IGNORE_HALLU) && m_ptr->ap_r_idx != m_ptr->r_idx)
+               if ((mode & MD_IGNORE_HALLU) && !is_original_ap(m_ptr))
                {
                        strcat(desc, format("(%s)", r_name + r_info[m_ptr->r_idx].name));
                }
@@ -2593,11 +2593,11 @@ void update_mon(int m_idx, bool full)
                        /* Hack -- Count "fresh" sightings */
                        if ((m_ptr->ap_r_idx == MON_KAGE) && (r_info[MON_KAGE].r_sights < MAX_SHORT))
                                r_info[MON_KAGE].r_sights++;
-                       else if (m_ptr->ap_r_idx == m_ptr->r_idx && 
-                                r_ptr->r_sights < MAX_SHORT) r_ptr->r_sights++;
+                       else if (is_original_ap(m_ptr) && (r_ptr->r_sights < MAX_SHORT))
+                               r_ptr->r_sights++;
 
                        /* Eldritch Horror */
-                       if (r_ptr->flags2 & RF2_ELDRITCH_HORROR)
+                       if (r_info[m_ptr->ap_r_idx].flags2 & RF2_ELDRITCH_HORROR)
                        {
                                sanity_blast(m_ptr, FALSE);
                        }
@@ -3119,6 +3119,10 @@ msg_print("
        m_ptr->r_idx = r_idx;
        m_ptr->ap_r_idx = initial_r_appearance(r_idx);
 
+       /* Hack -- Appearance transfer */
+       if ((mode & PM_MULTIPLY) && (who > 0) && !is_original_ap(&m_list[who]))
+               m_ptr->ap_r_idx = m_list[who].ap_r_idx;
+
        /* Sub-alignment of a monster */
        if ((who > 0) && !(r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)))
                m_ptr->sub_align = m_list[who].sub_align;
@@ -4067,7 +4071,7 @@ bool multiply_monster(int m_idx, bool clone, u32b mode)
        if (m_ptr->mflag2 & MFLAG2_KAGE) mode |= PM_KAGE;
 
        /* Create a new monster (awake, no groups) */
-       if (!place_monster_aux(m_idx, y, x, m_ptr->r_idx, (mode | PM_NO_KAGE)))
+       if (!place_monster_aux(m_idx, y, x, m_ptr->r_idx, (mode | PM_NO_KAGE | PM_MULTIPLY)))
                return FALSE;
 
        /* Hack -- Transfer "clone" flag */
@@ -4077,9 +4081,6 @@ bool multiply_monster(int m_idx, bool clone, u32b mode)
                m_list[hack_m_idx_ii].mflag2 |= MFLAG2_NOPET;
        }
 
-       /* 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 00c564d..f26418e 100644 (file)
@@ -188,7 +188,7 @@ static void wr_monster(monster_type *m_ptr)
        u32b flags = 0x00000000;
        byte tmp8u;
 
-       if (m_ptr->ap_r_idx != m_ptr->r_idx) flags |= SAVE_MON_AP_R_IDX;
+       if (!is_original_ap(m_ptr)) flags |= SAVE_MON_AP_R_IDX;
        if (m_ptr->sub_align) flags |= SAVE_MON_SUB_ALIGN;
        if (MON_CSLEEP(m_ptr)) flags |= SAVE_MON_CSLEEP;
        if (MON_FAST(m_ptr)) flags |= SAVE_MON_FAST;
index 6940e73..6caa944 100644 (file)
@@ -4923,7 +4923,7 @@ bool probing(void)
 
                        msg_print(NULL);
 
-                       if (m_ptr->ap_r_idx != m_ptr->r_idx)
+                       if (!is_original_ap(m_ptr))
                        {
                                if (m_ptr->mflag2 & MFLAG2_KAGE)
                                        m_ptr->mflag2 &= ~(MFLAG2_KAGE);