From 74e8adc30e6cea7e96bb822b329c8bae48b3006a Mon Sep 17 00:00:00 2001 From: Hourier Date: Sat, 26 Sep 2020 14:50:28 +0900 Subject: [PATCH] =?utf8?q?[Implement]=20#37285=20=E6=99=82=E9=96=93?= =?utf8?q?=E9=80=86=E8=BB=A2=E3=83=80=E3=83=A1=E3=83=BC=E3=82=B8=E3=81=AE?= =?utf8?q?=E6=B8=9B=E8=A1=B0=E5=BC=8F=E3=82=92=E8=BF=BD=E5=8A=A0=20/=20Add?= =?utf8?q?ed=20attenuation=20calculation=20for=20time-reversal=20blow?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/monster-attack/monster-attack-switcher.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/monster-attack/monster-attack-switcher.c b/src/monster-attack/monster-attack-switcher.c index 92663801e..4bfcbe55b 100644 --- a/src/monster-attack/monster-attack-switcher.c +++ b/src/monster-attack/monster-attack-switcher.c @@ -176,6 +176,24 @@ static void calc_blow_drain_exp(player_type *target_ptr, monap_type *monap_ptr, (void)drain_exp(target_ptr, d, d / 10, hold_exp_prob); } +/*! + * @brief 時間逆転ダメージを計算する (耐性があれば、(1d4 + 4) / 9になる) + * @param target_ptr プレーヤーへの参照ポインタ + * @param monap_ptr モンスターからプレーヤーへの直接攻撃構造体への参照ポインタ + * @return なし + */ +static void calc_blow_time(player_type *target_ptr, monap_type *monap_ptr) +{ + if (monap_ptr->explode) + return; + + process_monster_attack_time(target_ptr, monap_ptr); + if (is_resist_time(target_ptr)) + monap_ptr->damage = monap_ptr->damage * (randint1(4) + 4) / 9; + + monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1); +} + void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_ptr) { switch (monap_ptr->effect) { @@ -358,14 +376,9 @@ void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_pt case RBE_DISEASE: calc_blow_disease(target_ptr, monap_ptr); break; - case RBE_TIME: { - if (monap_ptr->explode) - break; - - process_monster_attack_time(target_ptr, monap_ptr); - monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc, -1); + case RBE_TIME: + calc_blow_time(target_ptr, monap_ptr); break; - } case RBE_DR_LIFE: { s32b d = damroll(60, 6) + (target_ptr->exp / 100) * MON_DRAIN_LIFE; monap_ptr->obvious = TRUE; -- 2.11.0