OSDN Git Service

[Refactor] #37353 monster_living() の引数修正。 / Type replacement of monster_living()...
authorDeskull <deskull@users.sourceforge.jp>
Wed, 12 Dec 2018 12:28:49 +0000 (21:28 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Wed, 12 Dec 2018 12:28:49 +0000 (21:28 +0900)
13 files changed:
src/cmd2.c
src/externs.h
src/hissatsu.c
src/melee1.c
src/monster-hook.c
src/monster-hook.h
src/monster-process.c
src/monster2.c
src/mspells4.c
src/realm-hissatsu.c
src/spells1.c
src/spells2.c
src/xtra2.c

index bafddf7..67aa35c 100644 (file)
@@ -3081,14 +3081,12 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr)
                                if (snipe_type == SP_HOLYNESS)
                                {
                                        cave[ny][nx].info |= (CAVE_GLOW);
                                if (snipe_type == SP_HOLYNESS)
                                {
                                        cave[ny][nx].info |= (CAVE_GLOW);
-
                                        note_spot(ny, nx);
                                        note_spot(ny, nx);
-
                                        lite_spot(ny, nx);
                                }
 
                                /* Hit the monster, check for death */
                                        lite_spot(ny, nx);
                                }
 
                                /* Hit the monster, check for death */
-                               if (mon_take_hit(c_mon_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr))))
+                               if (mon_take_hit(c_mon_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr))))
                                {
                                        /* Dead monster */
                                }
                                {
                                        /* Dead monster */
                                }
@@ -3679,7 +3677,7 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken)
                                        tdam, m_ptr->hp - tdam, m_ptr->maxhp, m_ptr->max_maxhp);
 
                                /* Hit the monster, check for death */
                                        tdam, m_ptr->hp - tdam, m_ptr->maxhp, m_ptr->max_maxhp);
 
                                /* Hit the monster, check for death */
-                               if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr))))
+                               if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr))))
                                {
                                        /* Dead monster */
                                }
                                {
                                        /* Dead monster */
                                }
index e7e2586..c3049f0 100644 (file)
@@ -747,6 +747,7 @@ extern cptr funny_comments[MAX_SAN_COMMENT];
 extern void set_target(monster_type *m_ptr, POSITION y, POSITION x);
 extern void reset_target(monster_type *m_ptr);
 extern monster_race *real_r_ptr(monster_type *m_ptr);
 extern void set_target(monster_type *m_ptr, POSITION y, POSITION x);
 extern void reset_target(monster_type *m_ptr);
 extern monster_race *real_r_ptr(monster_type *m_ptr);
+extern MONRACE_IDX real_r_idx(monster_type *m_ptr);
 extern void delete_monster_idx(MONSTER_IDX i);
 extern void delete_monster(POSITION y, POSITION x);
 extern void compact_monsters(int size);
 extern void delete_monster_idx(MONSTER_IDX i);
 extern void delete_monster(POSITION y, POSITION x);
 extern void compact_monsters(int size);
@@ -1261,7 +1262,7 @@ extern void check_experience(void);
 extern void complete_quest(QUEST_IDX quest_num);
 extern void check_quest_completion(monster_type *m_ptr);
 extern void check_find_art_quest_completion(object_type *o_ptr);
 extern void complete_quest(QUEST_IDX quest_num);
 extern void check_quest_completion(monster_type *m_ptr);
 extern void check_find_art_quest_completion(object_type *o_ptr);
-extern cptr extract_note_dies(monster_race *r_ptr);
+extern cptr extract_note_dies(MONRACE_IDX r_idx);
 extern void monster_death(MONSTER_IDX m_idx, bool drop_item);
 extern bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note);
 extern void get_screen_size(TERM_LEN *wid_p, TERM_LEN *hgt_p);
 extern void monster_death(MONSTER_IDX m_idx, bool drop_item);
 extern bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note);
 extern void get_screen_size(TERM_LEN *wid_p, TERM_LEN *hgt_p);
index 5851735..e80af2d 100644 (file)
@@ -553,7 +553,7 @@ MULTIPLY mult_hissatsu(MULTIPLY mult, BIT_FLAGS *flgs, monster_type *m_ptr, BIT_
        /* Zammaken (Nonliving Evil) */
        if (mode == HISSATSU_ZANMA)
        {
        /* Zammaken (Nonliving Evil) */
        if (mode == HISSATSU_ZANMA)
        {
-               if (!monster_living(r_ptr) && (r_ptr->flags3 & RF3_EVIL))
+               if (!monster_living(m_ptr->r_idx) && (r_ptr->flags3 & RF3_EVIL))
                {
                        if (mult < 15) mult = 25;
                        else if (mult < 50) mult = MIN(50, mult+20);
                {
                        if (mult < 15) mult = 25;
                        else if (mult < 50) mult = MIN(50, mult+20);
@@ -636,7 +636,7 @@ MULTIPLY mult_hissatsu(MULTIPLY mult, BIT_FLAGS *flgs, monster_type *m_ptr, BIT_
        }
 
        /* Bloody Maelstrom */
        }
 
        /* Bloody Maelstrom */
-       if ((mode == HISSATSU_SEKIRYUKA) && p_ptr->cut && monster_living(r_ptr))
+       if ((mode == HISSATSU_SEKIRYUKA) && p_ptr->cut && monster_living(m_ptr->r_idx))
        {
                MULTIPLY tmp = MIN(100, MAX(10, p_ptr->cut / 10));
                if (mult < tmp) mult = tmp;
        {
                MULTIPLY tmp = MIN(100, MAX(10, p_ptr->cut / 10));
                if (mult < tmp) mult = tmp;
index 578fc4d..e9bf4a0 100644 (file)
@@ -650,7 +650,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
                        if ((have_flag(flgs, TR_VAMPIRIC)) || (chaos_effect == 1) || (mode == HISSATSU_DRAIN) || hex_spelling(HEX_VAMP_BLADE))
                        {
                                /* Only drain "living" monsters */
                        if ((have_flag(flgs, TR_VAMPIRIC)) || (chaos_effect == 1) || (mode == HISSATSU_DRAIN) || hex_spelling(HEX_VAMP_BLADE))
                        {
                                /* Only drain "living" monsters */
-                               if (monster_living(r_ptr))
+                               if (monster_living(m_ptr->r_idx))
                                        can_drain = TRUE;
                                else
                                        can_drain = FALSE;
                                        can_drain = TRUE;
                                else
                                        can_drain = FALSE;
@@ -881,13 +881,13 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
                        drain_result += p_ptr->to_d[hand];
 
                        if ((mode == HISSATSU_SUTEMI) || (mode == HISSATSU_3DAN)) k *= 2;
                        drain_result += p_ptr->to_d[hand];
 
                        if ((mode == HISSATSU_SUTEMI) || (mode == HISSATSU_3DAN)) k *= 2;
-                       if ((mode == HISSATSU_SEKIRYUKA) && !monster_living(r_ptr)) k = 0;
+                       if ((mode == HISSATSU_SEKIRYUKA) && !monster_living(m_ptr->r_idx)) k = 0;
                        if ((mode == HISSATSU_SEKIRYUKA) && !p_ptr->cut) k /= 2;
 
                        /* No negative damage */
                        if (k < 0) k = 0;
 
                        if ((mode == HISSATSU_SEKIRYUKA) && !p_ptr->cut) k /= 2;
 
                        /* No negative damage */
                        if (k < 0) k = 0;
 
-                       if ((mode == HISSATSU_ZANMA) && !(!monster_living(r_ptr) && (r_ptr->flags3 & RF3_EVIL)))
+                       if ((mode == HISSATSU_ZANMA) && !(!monster_living(m_ptr->r_idx) && (r_ptr->flags3 & RF3_EVIL)))
                        {
                                k = 0;
                        }
                        {
                                k = 0;
                        }
index baebe62..6fb76c0 100644 (file)
@@ -630,8 +630,10 @@ bool vault_aux_dark_elf(MONRACE_IDX r_idx)
  * Used to determine the message to print for a killed monster.
  * ("dies", "destroyed")
  */
  * Used to determine the message to print for a killed monster.
  * ("dies", "destroyed")
  */
-bool monster_living(monster_race *r_ptr)
+bool monster_living(MONRACE_IDX r_idx)
 {
 {
+       monster_race *r_ptr = &r_info[r_idx];
+
        /* Non-living, undead, or demon */
        if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
                return FALSE;
        /* Non-living, undead, or demon */
        if (r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING))
                return FALSE;
index bc87a6d..a05aab3 100644 (file)
@@ -58,5 +58,5 @@ extern bool vault_aux_demon(MONRACE_IDX r_idx);
 extern bool vault_aux_cthulhu(MONRACE_IDX r_idx);\r
 extern bool vault_aux_dark_elf(MONRACE_IDX r_idx);\r
 \r
 extern bool vault_aux_cthulhu(MONRACE_IDX r_idx);\r
 extern bool vault_aux_dark_elf(MONRACE_IDX r_idx);\r
 \r
-extern bool monster_living(monster_race *r_ptr);\r
+extern bool monster_living(MONRACE_IDX r_idx);\r
 extern bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx);\r
 extern bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx);\r
index ab1f74c..5590a90 100644 (file)
@@ -259,7 +259,7 @@ void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note, I
                else
                {
                        /* Make a sound */
                else
                {
                        /* Make a sound */
-                       if (!monster_living(r_ptr))
+                       if (!monster_living(m_ptr->r_idx))
                        {
                                sound(SOUND_N_KILL);
                        }
                        {
                                sound(SOUND_N_KILL);
                        }
@@ -282,7 +282,7 @@ void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note, I
                                        msg_format(_("%^s%s", "%^s%s"), m_name, note);
                                }
                                /* Death by normal attack -- nonliving monster */
                                        msg_format(_("%^s%s", "%^s%s"), m_name, note);
                                }
                                /* Death by normal attack -- nonliving monster */
-                               else if (!monster_living(r_ptr))
+                               else if (!monster_living(m_ptr->r_idx))
                                {
                                        msg_format(_("%^sは破壊された。", "%^s is destroyed."), m_name);
                                }
                                {
                                        msg_format(_("%^sは破壊された。", "%^s is destroyed."), m_name);
                                }
@@ -1851,7 +1851,7 @@ static bool monst_attack_monst(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
                                        break;
 
                                case BLOW_EFFECT_TYPE_HEAL:
                                        break;
 
                                case BLOW_EFFECT_TYPE_HEAL:
-                                       if ((monster_living(tr_ptr)) && (damage > 2))
+                                       if ((monster_living(m_idx)) && (damage > 2))
                                        {
                                                bool did_heal = FALSE;
 
                                        {
                                                bool did_heal = FALSE;
 
index 8ce1b4c..89ec8bd 100644 (file)
@@ -197,19 +197,24 @@ void reset_target(monster_type *m_ptr)
  */
 monster_race *real_r_ptr(monster_type *m_ptr)
 {
  */
 monster_race *real_r_ptr(monster_type *m_ptr)
 {
+               return &r_info[real_r_idx(m_ptr)];
+}
+
+MONRACE_IDX real_r_idx(monster_type *m_ptr)
+{
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
        /* Extract real race */
        if (m_ptr->mflag2 & MFLAG2_CHAMELEON)
        {
                if (r_ptr->flags1 & RF1_UNIQUE)
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
        /* Extract real race */
        if (m_ptr->mflag2 & MFLAG2_CHAMELEON)
        {
                if (r_ptr->flags1 & RF1_UNIQUE)
-                       return &r_info[MON_CHAMELEON_K];
+                       return MON_CHAMELEON_K;
                else
                else
-                       return &r_info[MON_CHAMELEON];
+                       return MON_CHAMELEON;
        }
        else
        {
        }
        else
        {
-               return r_ptr;
+               return m_ptr->r_idx;
        }
 }
 
        }
 }
 
@@ -824,13 +829,13 @@ static bool summon_specific_aux(MONRACE_IDX r_idx)
 
                case SUMMON_HI_DRAGON_LIVING:
                {
 
                case SUMMON_HI_DRAGON_LIVING:
                {
-                       okay = ((r_ptr->d_char == 'D') && monster_living(r_ptr));
+                       okay = ((r_ptr->d_char == 'D') && monster_living(r_idx));
                        break;
                }
 
                case SUMMON_LIVING:
                {
                        break;
                }
 
                case SUMMON_LIVING:
                {
-                       okay = monster_living(r_ptr);
+                       okay = monster_living(r_idx);
                        break;
                }
 
                        break;
                }
 
@@ -884,7 +889,7 @@ static bool summon_specific_aux(MONRACE_IDX r_idx)
 
                        for (i = 0; i < 4; i++)
                                if (r_ptr->blow[i].method == RBM_EXPLODE) okay = TRUE;
 
                        for (i = 0; i < 4; i++)
                                if (r_ptr->blow[i].method == RBM_EXPLODE) okay = TRUE;
-                       okay = (okay && monster_living(r_ptr));
+                       okay = (okay && monster_living(r_idx));
                        break;
                }
 
                        break;
                }
 
index a0a31c3..72ba893 100644 (file)
@@ -2134,10 +2134,10 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
                }
 
                if(monster_to_player && p_ptr->riding)
                }
 
                if(monster_to_player && p_ptr->riding)
-                       mon_take_hit_mon(p_ptr->riding, dam, &fear, extract_note_dies(real_r_ptr(&m_list[p_ptr->riding])), m_idx);
+                       mon_take_hit_mon(p_ptr->riding, dam, &fear, extract_note_dies(real_r_idx(&m_list[p_ptr->riding])), m_idx);
 
                if(monster_to_monster)
 
                if(monster_to_monster)
-                       mon_take_hit_mon(t_idx, dam, &fear, extract_note_dies(real_r_ptr(t_ptr)), m_idx);
+                       mon_take_hit_mon(t_idx, dam, &fear, extract_note_dies(real_r_idx(t_ptr)), m_idx);
        }
        return dam;
 }
        }
        return dam;
 }
index 01ca7e1..df590ea 100644 (file)
@@ -530,7 +530,7 @@ cptr do_hissatsu_spell(SPELL_IDX spell, BIT_FLAGS mode)
                                /* Hack -- attack monsters */
                                if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
                                {
                                /* Hack -- attack monsters */
                                if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
                                {
-                                       if (!monster_living(&r_info[m_ptr->r_idx]))
+                                       if (!monster_living(m_ptr->r_idx))
                                        {
                                                char m_name[80];
 
                                        {
                                                char m_name[80];
 
index a09fcdf..9832e6a 100644 (file)
@@ -1694,12 +1694,12 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
        cptr note = NULL;
 
        /* Assume a default death */
        cptr note = NULL;
 
        /* Assume a default death */
-       cptr note_dies = extract_note_dies(real_r_ptr(m_ptr));
+       cptr note_dies = extract_note_dies(real_r_idx(m_ptr));
 
 
-       int ty = m_ptr->fy;
-       int tx = m_ptr->fx;
+       POSITION ty = m_ptr->fy;
+       POSITION tx = m_ptr->fx;
 
 
-       int caster_lev = (who > 0) ? r_info[caster_ptr->r_idx].level : (p_ptr->lev * 2);
+       DEPTH caster_lev = (who > 0) ? r_info[caster_ptr->r_idx].level : (p_ptr->lev * 2);
 
        /* Nobody here */
        if (!c_ptr->m_idx) return (FALSE);
 
        /* Nobody here */
        if (!c_ptr->m_idx) return (FALSE);
@@ -2786,7 +2786,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                                if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
-                       if (!monster_living(r_ptr))
+                       if (!monster_living(m_ptr->r_idx))
                        {
                                if (is_original_ap_and_seen(m_ptr))
                                {
                        {
                                if (is_original_ap_and_seen(m_ptr))
                                {
@@ -2815,7 +2815,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
                                if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL);
                                break;
                        }
-                       if (!monster_living(r_ptr))
+                       if (!monster_living(m_ptr->r_idx))
                        {
                                if (is_original_ap_and_seen(m_ptr))
                                {
                        {
                                if (is_original_ap_and_seen(m_ptr))
                                {
@@ -3358,7 +3358,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                        /* Attempt a saving throw */
                        if (common_saving_throw_charm(p_ptr, dam, m_ptr) ||
 
                        /* Attempt a saving throw */
                        if (common_saving_throw_charm(p_ptr, dam, m_ptr) ||
-                               !monster_living(r_ptr))
+                               !monster_living(m_ptr->r_idx))
                        {
                                /* Resist */
                                /* No obvious effect */
                        {
                                /* Resist */
                                /* No obvious effect */
@@ -3930,7 +3930,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                break;
                        }
                        /* Only affect non-undead */
                                break;
                        }
                        /* Only affect non-undead */
-                       if (monster_living(r_ptr))
+                       if (monster_living(m_ptr->r_idx))
                        {
                                if (seen) obvious = TRUE;
 
                        {
                                if (seen) obvious = TRUE;
 
@@ -4304,7 +4304,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                        }
 
                        if (is_pet(m_ptr)) nokori_hp = m_ptr->maxhp * 4L;
                        }
 
                        if (is_pet(m_ptr)) nokori_hp = m_ptr->maxhp * 4L;
-                       else if ((p_ptr->pclass == CLASS_BEASTMASTER) && monster_living(r_ptr))
+                       else if ((p_ptr->pclass == CLASS_BEASTMASTER) && monster_living(m_ptr->r_idx))
                                nokori_hp = m_ptr->maxhp * 3 / 10;
                        else
                                nokori_hp = m_ptr->maxhp * 3 / 20;
                                nokori_hp = m_ptr->maxhp * 3 / 10;
                        else
                                nokori_hp = m_ptr->maxhp * 3 / 20;
index 354d56b..0a5328c 100644 (file)
@@ -541,7 +541,7 @@ bool detect_monsters_nonliving(POSITION range)
                if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
 
                /* Detect non-living monsters */
                if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue;
 
                /* Detect non-living monsters */
-               if (!monster_living(r_ptr))
+               if (!monster_living(m_ptr->r_idx))
                {
                        /* Update monster recall window */
                        if (p_ptr->monster_race_idx == m_ptr->r_idx)
                {
                        /* Update monster recall window */
                        if (p_ptr->monster_race_idx == m_ptr->r_idx)
index 6e74963..b227e5f 100644 (file)
@@ -666,10 +666,11 @@ void check_find_art_quest_completion(object_type *o_ptr)
  * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
  * @return 撃破されたモンスターの述語
  */
  * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ
  * @return 撃破されたモンスターの述語
  */
-cptr extract_note_dies(monster_race *r_ptr)
+cptr extract_note_dies(MONRACE_IDX r_idx)
 {
 {
+       monster_race *r_ptr = &r_info[r_idx];
        /* Some monsters get "destroyed" */
        /* Some monsters get "destroyed" */
-       if (!monster_living(r_ptr))
+       if (!monster_living(r_idx))
        {
                int i;
 
        {
                int i;
 
@@ -1800,7 +1801,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note)
                }
 
                /* Death by Physical attack -- non-living monster */
                }
 
                /* Death by Physical attack -- non-living monster */
-               else if (!monster_living(r_ptr))
+               else if (!monster_living(m_ptr->r_idx))
                {
                        bool explode = FALSE;
 
                {
                        bool explode = FALSE;
 
@@ -2223,7 +2224,7 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode)
        cptr clone;
 
        /* Determine if the monster is "living" */
        cptr clone;
 
        /* Determine if the monster is "living" */
-       living = monster_living(ap_r_ptr);
+       living = monster_living(m_ptr->ap_r_idx);
 
        /* Calculate a health "percentage" */
        perc = 100L * m_ptr->hp / m_ptr->maxhp;
 
        /* Calculate a health "percentage" */
        perc = 100L * m_ptr->hp / m_ptr->maxhp;