}
/*!
+ * @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座標
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);