From 1e60ec7f6e12ceeebd6bacf7e02b2224afcabe6b Mon Sep 17 00:00:00 2001 From: Hourier Date: Fri, 22 May 2020 23:56:47 +0900 Subject: [PATCH] [Refactor] #40416 Separated calc_death_scythe_reflection_magnificant_mimic_none() from exe_player_attack_to_monster() --- src/combat/player-attack.c | 109 ++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 52 deletions(-) diff --git a/src/combat/player-attack.c b/src/combat/player-attack.c index 194252ab6..728935d0c 100644 --- a/src/combat/player-attack.c +++ b/src/combat/player-attack.c @@ -256,6 +256,41 @@ static bool decide_attack_hit(player_type *attacker_ptr, player_attack_type *pa_ } /*! + * @brief 死の大鎌ダメージが跳ね返ってきた時の、種族ごとのダメージ倍率を返す + * @param attacker_ptr プレーヤーへの参照ポインタ + * @return 倍率 (実際は1/10になる) + */ +static int calc_death_scythe_reflection_magnificant_mimic_none(player_type *attacker_ptr) +{ + switch (attacker_ptr->prace) { + case RACE_YEEK: + case RACE_KLACKON: + case RACE_HUMAN: + case RACE_AMBERITE: + case RACE_DUNADAN: + case RACE_BARBARIAN: + case RACE_BEASTMAN: + return 25; + case RACE_HALF_ORC: + case RACE_HALF_TROLL: + case RACE_HALF_OGRE: + case RACE_HALF_GIANT: + case RACE_HALF_TITAN: + case RACE_CYCLOPS: + case RACE_IMP: + case RACE_SKELETON: + case RACE_ZOMBIE: + case RACE_VAMPIRE: + case RACE_SPECTRE: + case RACE_BALROG: + case RACE_DRACONIAN: + return 30; + default: + return 10; + } +} + +/*! * @brief プレイヤーの打撃処理サブルーチン / * Player attacks a (poor, defenseless) creature -RAK- * @param y 攻撃目標のY座標 @@ -314,90 +349,60 @@ void exe_player_attack_to_monster(player_type *attacker_ptr, POSITION y, POSITIO if ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE) && one_in_(3)) { BIT_FLAGS flgs_aux[TR_FLAG_SIZE]; - sound(SOUND_HIT); - msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name); msg_print(_("振り回した大鎌が自分自身に返ってきた!", "Your scythe returns to you!")); object_flags(o_ptr, flgs_aux); - pa_ptr->attack_damage = damroll(o_ptr->dd + attacker_ptr->to_dd[hand], o_ptr->ds + attacker_ptr->to_ds[hand]); { - int mult; + int magnificant; switch (attacker_ptr->mimic_form) { case MIMIC_NONE: - switch (attacker_ptr->prace) { - case RACE_YEEK: - case RACE_KLACKON: - case RACE_HUMAN: - case RACE_AMBERITE: - case RACE_DUNADAN: - case RACE_BARBARIAN: - case RACE_BEASTMAN: - mult = 25; - break; - case RACE_HALF_ORC: - case RACE_HALF_TROLL: - case RACE_HALF_OGRE: - case RACE_HALF_GIANT: - case RACE_HALF_TITAN: - case RACE_CYCLOPS: - case RACE_IMP: - case RACE_SKELETON: - case RACE_ZOMBIE: - case RACE_VAMPIRE: - case RACE_SPECTRE: - case RACE_BALROG: - case RACE_DRACONIAN: - mult = 30; - break; - default: - mult = 10; - break; - } + magnificant = calc_death_scythe_reflection_magnificant_mimic_none(attacker_ptr); break; case MIMIC_DEMON: case MIMIC_DEMON_LORD: case MIMIC_VAMPIRE: - mult = 30; + magnificant = 30; break; default: - mult = 10; + magnificant = 10; break; } - if (attacker_ptr->align < 0 && mult < 20) - mult = 20; - if (!(attacker_ptr->resist_acid || is_oppose_acid(attacker_ptr) || attacker_ptr->immune_acid) && (mult < 25)) - mult = 25; - if (!(attacker_ptr->resist_elec || is_oppose_elec(attacker_ptr) || attacker_ptr->immune_elec) && (mult < 25)) - mult = 25; - if (!(attacker_ptr->resist_fire || is_oppose_fire(attacker_ptr) || attacker_ptr->immune_fire) && (mult < 25)) - mult = 25; - if (!(attacker_ptr->resist_cold || is_oppose_cold(attacker_ptr) || attacker_ptr->immune_cold) && (mult < 25)) - mult = 25; - if (!(attacker_ptr->resist_pois || is_oppose_pois(attacker_ptr)) && (mult < 25)) - mult = 25; + if (attacker_ptr->align < 0 && magnificant < 20) + magnificant = 20; + if (!(attacker_ptr->resist_acid || is_oppose_acid(attacker_ptr) || attacker_ptr->immune_acid) && (magnificant < 25)) + magnificant = 25; + if (!(attacker_ptr->resist_elec || is_oppose_elec(attacker_ptr) || attacker_ptr->immune_elec) && (magnificant < 25)) + magnificant = 25; + if (!(attacker_ptr->resist_fire || is_oppose_fire(attacker_ptr) || attacker_ptr->immune_fire) && (magnificant < 25)) + magnificant = 25; + if (!(attacker_ptr->resist_cold || is_oppose_cold(attacker_ptr) || attacker_ptr->immune_cold) && (magnificant < 25)) + magnificant = 25; + if (!(attacker_ptr->resist_pois || is_oppose_pois(attacker_ptr)) && (magnificant < 25)) + magnificant = 25; if ((attacker_ptr->pclass != CLASS_SAMURAI) && (have_flag(flgs_aux, TR_FORCE_WEAPON)) && (attacker_ptr->csp > (attacker_ptr->msp / 30))) { attacker_ptr->csp -= (1 + (attacker_ptr->msp / 30)); attacker_ptr->redraw |= (PR_MANA); - mult = mult * 3 / 2 + 20; + magnificant = magnificant * 3 / 2 + 20; } - pa_ptr->attack_damage *= (HIT_POINT)mult; + + pa_ptr->attack_damage *= (HIT_POINT)magnificant; pa_ptr->attack_damage /= 10; } pa_ptr->attack_damage = critical_norm(attacker_ptr, o_ptr->weight, o_ptr->to_h, pa_ptr->attack_damage, attacker_ptr->to_h[hand], mode); if (one_in_(6)) { - int mult = 2; + int more_magnificant = 2; msg_format(_("グッサリ切り裂かれた!", "Your weapon cuts deep into yourself!")); /* Try to increase the damage */ while (one_in_(4)) { - mult++; + more_magnificant++; } - pa_ptr->attack_damage *= (HIT_POINT)mult; + pa_ptr->attack_damage *= (HIT_POINT)more_magnificant; } pa_ptr->attack_damage += (attacker_ptr->to_d[hand] + o_ptr->to_d); if (pa_ptr->attack_damage < 0) -- 2.11.0