From e342ed46c8075e9f99498aeec673b0ce56f44814 Mon Sep 17 00:00:00 2001 From: Hourier Date: Sun, 3 May 2020 13:42:39 +0900 Subject: [PATCH] [Refactor] #39963 Moved effect_monster_stasis() and effect_monster_stun() from effect-monster-switcher.c to effect-monster-oldies.c/h because it includes sleep and slow/speed --- src/effect/effect-monster-oldies.c | 43 +++++++++++++++++++++++++++++++++ src/effect/effect-monster-oldies.h | 2 ++ src/effect/effect-monster-switcher.c | 46 +++--------------------------------- 3 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/effect/effect-monster-oldies.c b/src/effect/effect-monster-oldies.c index e22811119..c7e6cfc0a 100644 --- a/src/effect/effect-monster-oldies.c +++ b/src/effect/effect-monster-oldies.c @@ -246,3 +246,46 @@ gf_switch_result effect_monster_old_conf(player_type *caster_ptr, effect_monster em_ptr->dam = 0; return GF_SWITCH_CONTINUE; } + + +gf_switch_result effect_monster_stasis(effect_monster_type *em_ptr, bool to_evil) +{ + if (em_ptr->seen) em_ptr->obvious = TRUE; + + int stasis_damage = (em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10); + bool has_resistance = (em_ptr->r_ptr->flags1 & RF1_UNIQUE) != 0; + has_resistance |= em_ptr->r_ptr->level > randint1(stasis_damage) + 10; + if (to_evil) has_resistance |= (em_ptr->r_ptr->flags3 & RF3_EVIL) == 0; + + if (has_resistance) + { + em_ptr->note = _("には効果がなかった。", " is unaffected."); + em_ptr->obvious = FALSE; + } + else + { + em_ptr->note = _("は動けなくなった!", " is suspended!"); + em_ptr->do_sleep = 500; + } + + em_ptr->dam = 0; + return GF_SWITCH_CONTINUE; +} + + +gf_switch_result effect_monster_stun(effect_monster_type *em_ptr) +{ + if (em_ptr->seen) em_ptr->obvious = TRUE; + + em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1; + if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || + (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)) + { + em_ptr->do_stun = 0; + em_ptr->note = _("には効果がなかった。", " is unaffected."); + em_ptr->obvious = FALSE; + } + + em_ptr->dam = 0; + return GF_SWITCH_CONTINUE; +} diff --git a/src/effect/effect-monster-oldies.h b/src/effect/effect-monster-oldies.h index e211bc5ec..a623083a6 100644 --- a/src/effect/effect-monster-oldies.h +++ b/src/effect/effect-monster-oldies.h @@ -8,3 +8,5 @@ gf_switch_result effect_monster_old_speed(player_type *caster_ptr, effect_monste gf_switch_result effect_monster_old_slow(player_type *caster_ptr, effect_monster_type *em_ptr); gf_switch_result effect_monster_old_sleep(player_type *caster_ptr, effect_monster_type *em_ptr); gf_switch_result effect_monster_old_conf(player_type *caster_ptr, effect_monster_type *em_ptr); +gf_switch_result effect_monster_stasis(effect_monster_type *em_ptr, bool to_evil); +gf_switch_result effect_monster_stun(effect_monster_type *em_ptr); diff --git a/src/effect/effect-monster-switcher.c b/src/effect/effect-monster-switcher.c index ce8b7d367..3d3621db0 100644 --- a/src/effect/effect-monster-switcher.c +++ b/src/effect/effect-monster-switcher.c @@ -1,4 +1,6 @@ /*! + * todo どうしても「その他」に分類せざるを得ない魔法種別が残った + * 本ファイル内の行数はまともなレベルに落ち着いているので、一旦ここに留め置くこととする * @brief 魔法種別による各種処理切り替え * @date 2020/04/29 * @author Hourier @@ -27,6 +29,7 @@ gf_switch_result effect_monster_hypodynamia(player_type *caster_ptr, effect_monster_type *em_ptr) { if (em_ptr->seen) em_ptr->obvious = TRUE; + if (monster_living(em_ptr->m_ptr->r_idx)) { em_ptr->do_time = (em_ptr->dam + 7) / 8; @@ -81,49 +84,6 @@ gf_switch_result effect_monster_death_ray(player_type *caster_ptr, effect_monste } -gf_switch_result effect_monster_stasis(effect_monster_type *em_ptr, bool to_evil) -{ - if (em_ptr->seen) em_ptr->obvious = TRUE; - - int stasis_damage = (em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10); - bool has_resistance = (em_ptr->r_ptr->flags1 & RF1_UNIQUE) != 0; - has_resistance |= em_ptr->r_ptr->level > randint1(stasis_damage) + 10; - if (to_evil) has_resistance |= (em_ptr->r_ptr->flags3 & RF3_EVIL) == 0; - - if (has_resistance) - { - em_ptr->note = _("には効果がなかった。", " is unaffected."); - em_ptr->obvious = FALSE; - } - else - { - em_ptr->note = _("は動けなくなった!", " is suspended!"); - em_ptr->do_sleep = 500; - } - - em_ptr->dam = 0; - return GF_SWITCH_CONTINUE; -} - - -gf_switch_result effect_monster_stun(effect_monster_type *em_ptr) -{ - if (em_ptr->seen) em_ptr->obvious = TRUE; - - em_ptr->do_stun = damroll((em_ptr->caster_lev / 20) + 3, (em_ptr->dam)) + 1; - if ((em_ptr->r_ptr->flags1 & (RF1_UNIQUE)) || - (em_ptr->r_ptr->level > randint1((em_ptr->dam - 10) < 1 ? 1 : (em_ptr->dam - 10)) + 10)) - { - em_ptr->do_stun = 0; - em_ptr->note = _("には効果がなかった。", " is unaffected."); - em_ptr->obvious = FALSE; - } - - em_ptr->dam = 0; - return GF_SWITCH_CONTINUE; -} - - gf_switch_result effect_monster_kill_wall(player_type *caster_ptr, effect_monster_type *em_ptr) { if ((em_ptr->r_ptr->flags3 & (RF3_HURT_ROCK)) == 0) -- 2.11.0