From c47d438f8342d087eaf53b3348b3e204045779ab Mon Sep 17 00:00:00 2001 From: Hourier Date: Sat, 2 May 2020 23:43:15 +0900 Subject: [PATCH] [Refactor] #39963 Separated effect_monster_away_resist() from effect_monster_away_*() --- src/effect/effect-monster-switcher.c | 116 ++++++++++++++--------------------- 1 file changed, 46 insertions(+), 70 deletions(-) diff --git a/src/effect/effect-monster-switcher.c b/src/effect/effect-monster-switcher.c index b309ba932..82d215771 100644 --- a/src/effect/effect-monster-switcher.c +++ b/src/effect/effect-monster-switcher.c @@ -143,38 +143,45 @@ gf_switch_result effect_monster_kill_wall(player_type *caster_ptr, effect_monste } -gf_switch_result effect_monster_away_undead(player_type *caster_ptr, effect_monster_type *em_ptr) +static bool effect_monster_away_resist(player_type *caster_ptr, effect_monster_type *em_ptr) { - if (em_ptr->r_ptr->flags3 & (RF3_UNDEAD)) + if ((em_ptr->r_ptr->flagsr & RFR_RES_TELE) == 0) return FALSE; + + if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL)) + { + if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; + em_ptr->note = _("には効果がなかった。", " is unaffected."); + return TRUE; + } + + if (em_ptr->r_ptr->level > randint1(100)) { - bool resists_tele = FALSE; + if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; + em_ptr->note = _("には耐性がある!", " resists!"); + return TRUE; + } - if (em_ptr->r_ptr->flagsr & RFR_RES_TELE) - { - if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL)) - { - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; - em_ptr->note = _("には効果がなかった。", " is unaffected."); - resists_tele = TRUE; - } - else if (em_ptr->r_ptr->level > randint1(100)) - { - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; - em_ptr->note = _("には耐性がある!", " resists!"); - resists_tele = TRUE; - } - } + return FALSE; +} - if (!resists_tele) - { - if (em_ptr->seen) em_ptr->obvious = TRUE; - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD); - em_ptr->do_dist = em_ptr->dam; - } - } - else + +gf_switch_result effect_monster_away_undead(player_type *caster_ptr, effect_monster_type *em_ptr) +{ + if ((em_ptr->r_ptr->flags3 & (RF3_UNDEAD)) == 0) { em_ptr->skipped = TRUE; + em_ptr->dam = 0; + return GF_SWITCH_CONTINUE; + } + + bool resists_tele = effect_monster_away_resist(caster_ptr, em_ptr); + if (!resists_tele) + { + if (em_ptr->seen) em_ptr->obvious = TRUE; + if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) + em_ptr->r_ptr->r_flags3 |= (RF3_UNDEAD); + + em_ptr->do_dist = em_ptr->dam; } em_ptr->dam = 0; @@ -184,36 +191,21 @@ gf_switch_result effect_monster_away_undead(player_type *caster_ptr, effect_mons gf_switch_result effect_monster_away_evil(player_type *caster_ptr, effect_monster_type *em_ptr) { - if (em_ptr->r_ptr->flags3 & (RF3_EVIL)) + if ((em_ptr->r_ptr->flags3 & (RF3_EVIL)) == 0) { - bool resists_tele = FALSE; - - if (em_ptr->r_ptr->flagsr & RFR_RES_TELE) - { - if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL)) - { - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; - em_ptr->note = _("には効果がなかった。", " is unaffected."); - resists_tele = TRUE; - } - else if (em_ptr->r_ptr->level > randint1(100)) - { - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; - em_ptr->note = _("には耐性がある!", " resists!"); - resists_tele = TRUE; - } - } - - if (!resists_tele) - { - if (em_ptr->seen) em_ptr->obvious = TRUE; - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flags3 |= (RF3_EVIL); - em_ptr->do_dist = em_ptr->dam; - } + em_ptr->skipped = TRUE; + em_ptr->dam = 0; + return GF_SWITCH_CONTINUE; } - else + + bool resists_tele = effect_monster_away_resist(caster_ptr, em_ptr); + if (!resists_tele) { - em_ptr->skipped = TRUE; + if (em_ptr->seen) em_ptr->obvious = TRUE; + if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) + em_ptr->r_ptr->r_flags3 |= (RF3_EVIL); + + em_ptr->do_dist = em_ptr->dam; } em_ptr->dam = 0; @@ -223,23 +215,7 @@ gf_switch_result effect_monster_away_evil(player_type *caster_ptr, effect_monste gf_switch_result effect_monster_away_all(player_type *caster_ptr, effect_monster_type *em_ptr) { - bool resists_tele = FALSE; - if (em_ptr->r_ptr->flagsr & RFR_RES_TELE) - { - if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || (em_ptr->r_ptr->flagsr & RFR_RES_ALL)) - { - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; - em_ptr->note = _("には効果がなかった。", " is unaffected."); - resists_tele = TRUE; - } - else if (em_ptr->r_ptr->level > randint1(100)) - { - if (is_original_ap_and_seen(caster_ptr, em_ptr->m_ptr)) em_ptr->r_ptr->r_flagsr |= RFR_RES_TELE; - em_ptr->note = _("には耐性がある!", " resists!"); - resists_tele = TRUE; - } - } - + bool resists_tele = effect_monster_away_resist(caster_ptr, em_ptr); if (!resists_tele) { if (em_ptr->seen) em_ptr->obvious = TRUE; -- 2.11.0