From: Deskull Date: Wed, 12 Dec 2018 12:28:49 +0000 (+0900) Subject: [Refactor] #37353 monster_living() の引数修正。 / Type replacement of monster_living()... X-Git-Url: http://git.osdn.net/view?p=hengband%2Fhengband.git;a=commitdiff_plain;h=6f3a1d8fb3d0c49b1f02d41464fd5767f188f9f5 [Refactor] #37353 monster_living() の引数修正。 / Type replacement of monster_living()'s arguments. --- diff --git a/src/cmd2.c b/src/cmd2.c index bafddf74f..67aa35c17 100644 --- a/src/cmd2.c +++ b/src/cmd2.c @@ -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); - note_spot(ny, nx); - 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 */ } @@ -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 */ - 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 */ } diff --git a/src/externs.h b/src/externs.h index e7e2586de..c3049f04c 100644 --- a/src/externs.h +++ b/src/externs.h @@ -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 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); @@ -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 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); diff --git a/src/hissatsu.c b/src/hissatsu.c index 5851735fd..e80af2da6 100644 --- a/src/hissatsu.c +++ b/src/hissatsu.c @@ -553,7 +553,7 @@ MULTIPLY mult_hissatsu(MULTIPLY mult, BIT_FLAGS *flgs, monster_type *m_ptr, BIT_ /* 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); @@ -636,7 +636,7 @@ MULTIPLY mult_hissatsu(MULTIPLY mult, BIT_FLAGS *flgs, monster_type *m_ptr, BIT_ } /* 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; diff --git a/src/melee1.c b/src/melee1.c index 578fc4d1a..e9bf4a032 100644 --- a/src/melee1.c +++ b/src/melee1.c @@ -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 (monster_living(r_ptr)) + if (monster_living(m_ptr->r_idx)) 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; - 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_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; } diff --git a/src/monster-hook.c b/src/monster-hook.c index baebe620a..6fb76c04d 100644 --- a/src/monster-hook.c +++ b/src/monster-hook.c @@ -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") */ -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; diff --git a/src/monster-hook.h b/src/monster-hook.h index bc87a6deb..a05aab315 100644 --- a/src/monster-hook.h +++ b/src/monster-hook.h @@ -58,5 +58,5 @@ extern bool vault_aux_demon(MONRACE_IDX r_idx); extern bool vault_aux_cthulhu(MONRACE_IDX r_idx); extern bool vault_aux_dark_elf(MONRACE_IDX r_idx); -extern bool monster_living(monster_race *r_ptr); +extern bool monster_living(MONRACE_IDX r_idx); extern bool no_questor_or_bounty_uniques(MONRACE_IDX r_idx); diff --git a/src/monster-process.c b/src/monster-process.c index ab1f74c05..5590a9037 100644 --- a/src/monster-process.c +++ b/src/monster-process.c @@ -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 */ - if (!monster_living(r_ptr)) + if (!monster_living(m_ptr->r_idx)) { 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 */ - else if (!monster_living(r_ptr)) + else if (!monster_living(m_ptr->r_idx)) { 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: - if ((monster_living(tr_ptr)) && (damage > 2)) + if ((monster_living(m_idx)) && (damage > 2)) { bool did_heal = FALSE; diff --git a/src/monster2.c b/src/monster2.c index 8ce1b4cf7..89ec8bd26 100644 --- a/src/monster2.c +++ b/src/monster2.c @@ -197,19 +197,24 @@ void reset_target(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) - return &r_info[MON_CHAMELEON_K]; + return MON_CHAMELEON_K; else - return &r_info[MON_CHAMELEON]; + return MON_CHAMELEON; } 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: { - okay = ((r_ptr->d_char == 'D') && monster_living(r_ptr)); + okay = ((r_ptr->d_char == 'D') && monster_living(r_idx)); break; } case SUMMON_LIVING: { - okay = monster_living(r_ptr); + okay = monster_living(r_idx); 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; - okay = (okay && monster_living(r_ptr)); + okay = (okay && monster_living(r_idx)); break; } diff --git a/src/mspells4.c b/src/mspells4.c index a0a31c3b7..72ba893f4 100644 --- a/src/mspells4.c +++ b/src/mspells4.c @@ -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) - 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) - 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; } diff --git a/src/realm-hissatsu.c b/src/realm-hissatsu.c index 01ca7e195..df590ea23 100644 --- a/src/realm-hissatsu.c +++ b/src/realm-hissatsu.c @@ -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))) { - if (!monster_living(&r_info[m_ptr->r_idx])) + if (!monster_living(m_ptr->r_idx)) { char m_name[80]; diff --git a/src/spells1.c b/src/spells1.c index a09fcdf3e..9832e6af0 100644 --- a/src/spells1.c +++ b/src/spells1.c @@ -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_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); @@ -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 (!monster_living(r_ptr)) + if (!monster_living(m_ptr->r_idx)) { 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 (!monster_living(r_ptr)) + if (!monster_living(m_ptr->r_idx)) { 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) || - !monster_living(r_ptr)) + !monster_living(m_ptr->r_idx)) { /* 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 */ - if (monster_living(r_ptr)) + if (monster_living(m_ptr->r_idx)) { 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; - 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; diff --git a/src/spells2.c b/src/spells2.c index 354d56ba8..0a5328cf7 100644 --- a/src/spells2.c +++ b/src/spells2.c @@ -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 (!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) diff --git a/src/xtra2.c b/src/xtra2.c index 6e74963ba..b227e5fec 100644 --- a/src/xtra2.c +++ b/src/xtra2.c @@ -666,10 +666,11 @@ void check_find_art_quest_completion(object_type *o_ptr) * @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" */ - if (!monster_living(r_ptr)) + if (!monster_living(r_idx)) { 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 */ - else if (!monster_living(r_ptr)) + else if (!monster_living(m_ptr->r_idx)) { 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" */ - 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;