OSDN Git Service

見えない敵を倒したときにその殺害数もカウントする変数r_akillsをmonster_race構造体に追加した。
authoriks <iks@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 22 Feb 2004 08:30:45 +0000 (08:30 +0000)
committeriks <iks@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 22 Feb 2004 08:30:45 +0000 (08:30 +0000)
多数の敵を殺害したときに経験値ペナルティはr_akillsを参照するようにした。
モンスターの思い出で出てくる殺害数については、従来のr_pkillsのままにした。

src/defines.h
src/load.c
src/monster2.c
src/save.c
src/types.h
src/xtra2.c

index 6a76a06..feff709 100644 (file)
@@ -76,7 +76,7 @@
 #define H_VER_MAJOR 1
 #define H_VER_MINOR 7
 #define H_VER_PATCH 0
-#define H_VER_EXTRA 4
+#define H_VER_EXTRA 5
 
 
 #define ANGBAND_2_8_1
index bec4b48..981837b 100644 (file)
@@ -965,6 +965,14 @@ static void rd_lore(int r_idx)
        rd_s16b(&r_ptr->r_sights);
        rd_s16b(&r_ptr->r_deaths);
        rd_s16b(&r_ptr->r_pkills);
+       if (h_older_than(1, 7, 0, 5))
+       {
+               r_ptr->r_akills = r_ptr->r_pkills;
+       }
+       else
+       {
+               rd_s16b(&r_ptr->r_akills);
+       }
        rd_s16b(&r_ptr->r_tkills);
 
        /* Count wakes and ignores */
index 6e8a2b1..7bca770 100644 (file)
@@ -487,12 +487,14 @@ void wipe_m_list(void)
                {
                        r_info[MON_BANOR].max_num = 0;
                        r_info[MON_BANOR].r_pkills++;
+                       r_info[MON_BANOR].r_akills++;
                        if (r_info[MON_BANOR].r_tkills < MAX_SHORT) r_info[MON_BANOR].r_tkills++;
                }
                if (r_info[MON_LUPART].max_num)
                {
                        r_info[MON_LUPART].max_num = 0;
                        r_info[MON_LUPART].r_pkills++;
+                       r_info[MON_LUPART].r_akills++;
                        if (r_info[MON_LUPART].r_tkills < MAX_SHORT) r_info[MON_LUPART].r_tkills++;
                }
        }
index 9b73034..00c564d 100644 (file)
@@ -276,6 +276,7 @@ static void wr_lore(int r_idx)
        wr_s16b(r_ptr->r_sights);
        wr_s16b(r_ptr->r_deaths);
        wr_s16b(r_ptr->r_pkills);
+       wr_s16b(r_ptr->r_akills);
        wr_s16b(r_ptr->r_tkills);
 
        /* Count wakes and ignores */
index 4572a72..f164fcd 100644 (file)
@@ -348,7 +348,8 @@ struct monster_race
        s16b r_sights;                  /* Count sightings of this monster */
        s16b r_deaths;                  /* Count deaths from this monster */
 
-       s16b r_pkills;                  /* Count monsters killed in this life */
+       s16b r_pkills;                  /* Count visible monsters killed in this life */
+       s16b r_akills;                  /* Count all monsters killed in this life */
        s16b r_tkills;                  /* Count monsters killed in all lives */
 
        byte r_wake;                    /* Number of times woken up (?) */
index 6a6064d..3ab65b5 100644 (file)
@@ -1079,7 +1079,7 @@ msg_print("
        case MON_A_GOLD:
        case MON_A_SILVER:
                if (drop_chosen_item && ((m_ptr->r_idx == MON_A_GOLD) ||
-                    ((m_ptr->r_idx == MON_A_SILVER) && (r_ptr->r_pkills % 5 == 0))))
+                    ((m_ptr->r_idx == MON_A_SILVER) && (r_ptr->r_akills % 5 == 0))))
                {
                        /* Get local object */
                        q_ptr = &forge;
@@ -1642,7 +1642,7 @@ static void get_exp_from_mon(int dam, monster_type *m_ptr)
        /* Special penalty for mutiply-monster */
        if ((r_ptr->flags2 & RF2_MULTIPLY) || (m_ptr->r_idx == MON_DAWN))
        {
-               int monnum_penarty = r_ptr->r_pkills / 400;
+               int monnum_penarty = r_ptr->r_akills / 400;
                if (monnum_penarty > 8) monnum_penarty = 8;
 
                while (monnum_penarty--)
@@ -1758,15 +1758,18 @@ bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note)
                                {
                                        r_info[MON_BANORLUPART].max_num = 0;
                                        r_info[MON_BANORLUPART].r_pkills++;
+                                       r_info[MON_BANORLUPART].r_akills++;
                                        if (r_info[MON_BANORLUPART].r_tkills < MAX_SHORT) r_info[MON_BANORLUPART].r_tkills++;
                                }
                                else if (m_ptr->r_idx == MON_BANORLUPART)
                                {
                                        r_info[MON_BANOR].max_num = 0;
                                        r_info[MON_BANOR].r_pkills++;
+                                       r_info[MON_BANOR].r_akills++;
                                        if (r_info[MON_BANOR].r_tkills < MAX_SHORT) r_info[MON_BANOR].r_tkills++;
                                        r_info[MON_LUPART].max_num = 0;
                                        r_info[MON_LUPART].r_pkills++;
+                                       r_info[MON_LUPART].r_akills++;
                                        if (r_info[MON_LUPART].r_tkills < MAX_SHORT) r_info[MON_LUPART].r_tkills++;
                                }
                        }
@@ -1775,6 +1778,9 @@ bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note)
                        else if (r_ptr->flags7 & RF7_NAZGUL) r_ptr->max_num--;
                }
 
+               /* Count all monsters killed */
+               if (r_ptr->r_akills < MAX_SHORT) r_ptr->r_akills++;
+
                /* Recall even invisible uniques or winners */
                if (m_ptr->ml || (r_ptr->flags1 & RF1_UNIQUE))
                {
@@ -1910,7 +1916,7 @@ msg_format("%^s
                                chg_virtue(V_HONOUR, 1);
                        }
                }
-               if ((r_ptr->flags2 & RF2_MULTIPLY) && (r_ptr->r_pkills > 1000) && one_in_(10))
+               if ((r_ptr->flags2 & RF2_MULTIPLY) && (r_ptr->r_akills > 1000) && one_in_(10))
                {
                        chg_virtue(V_VALOUR, -1);
                }