From: Hourier Date: Sat, 23 May 2020 10:49:40 +0000 (+0900) Subject: [Refactor] #40416 Separated judge_tereprt_resistance() from exe_player_attack_to_mons... X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0ba571693262cb9aa6968e13ae97c3f4f34eab15;p=hengband%2Fhengband.git [Refactor] #40416 Separated judge_tereprt_resistance() from exe_player_attack_to_monster() --- diff --git a/src/combat/player-attack.c b/src/combat/player-attack.c index 268ded45e..5e7d82fed 100644 --- a/src/combat/player-attack.c +++ b/src/combat/player-attack.c @@ -365,6 +365,37 @@ static void attack_confuse(player_type *attacker_ptr, player_attack_type *pa_ptr } /*! + * @breif カオス武器でのテレポート・アウェイを行うか判定する (抵抗されたら無効) + * @param attacker_ptr プレーヤーへの参照ポインタ + * @param pa_ptr 直接攻撃構造体への参照ポインタ + * @return 抵抗されたらTRUE、アウェイされるならFALSE + */ +static bool judge_tereprt_resistance(player_type *attacker_ptr, player_attack_type *pa_ptr) +{ + monster_race *r_ptr = &r_info[pa_ptr->m_ptr->r_idx]; + if ((r_ptr->flagsr & RFR_RES_TELE) == 0) + return FALSE; + + if (r_ptr->flags1 & RF1_UNIQUE) { + if (is_original_ap_and_seen(attacker_ptr, pa_ptr->m_ptr)) + r_ptr->r_flagsr |= RFR_RES_TELE; + + msg_format(_("%^sには効果がなかった。", "%^s is unaffected!"), pa_ptr->m_name); + return TRUE; + } + + if (r_ptr->level > randint1(100)) { + if (is_original_ap_and_seen(attacker_ptr, pa_ptr->m_ptr)) + r_ptr->r_flagsr |= RFR_RES_TELE; + + msg_format(_("%^sは抵抗力を持っている!", "%^s resists!"), pa_ptr->m_name); + return TRUE; + } + + return FALSE; +} + +/*! * @brief プレイヤーの打撃処理サブルーチン / * Player attacks a (poor, defenseless) creature -RAK- * @param y 攻撃目標のY座標 @@ -451,22 +482,7 @@ void exe_player_attack_to_monster(player_type *attacker_ptr, POSITION y, POSITIO attack_confuse(attacker_ptr, m_ptr); } else if (pa_ptr->chaos_effect == CE_TELE_AWAY) { - bool resists_tele = FALSE; - - if (r_ptr->flagsr & RFR_RES_TELE) { - if (r_ptr->flags1 & RF1_UNIQUE) { - if (is_original_ap_and_seen(attacker_ptr, m_ptr)) - r_ptr->r_flagsr |= RFR_RES_TELE; - msg_format(_("%^sには効果がなかった。", "%^s is unaffected!"), pa_ptr->m_name); - resists_tele = TRUE; - } else if (r_ptr->level > randint1(100)) { - if (is_original_ap_and_seen(attacker_ptr, m_ptr)) - r_ptr->r_flagsr |= RFR_RES_TELE; - msg_format(_("%^sは抵抗力を持っている!", "%^s resists!"), pa_ptr->m_name); - resists_tele = TRUE; - } - } - + bool resists_tele = judge_tereprt_resistance(attacker_ptr, pa_ptr); if (!resists_tele) { msg_format(_("%^sは消えた!", "%^s disappears!"), pa_ptr->m_name); teleport_away(attacker_ptr, g_ptr->m_idx, 50, TELEPORT_PASSIVE);