OSDN Git Service

[Refactor] #40514 calc_dark_damage_rate() 実装. / Implement calc_dark_damage_rate().
authordeskull <deskull@users.sourceforge.jp>
Sat, 12 Sep 2020 17:22:20 +0000 (02:22 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Sat, 12 Sep 2020 17:22:20 +0000 (02:22 +0900)
src/effect/effect-player-resist-hurt.c
src/object/warning.c
src/player/player-status-resist.c
src/player/player-status-resist.h

index 24a4c6d..0e263eb 100644 (file)
@@ -384,13 +384,10 @@ void effect_player_dark(player_type *target_ptr, effect_player_type *ep_ptr)
 {
     if (target_ptr->blind)
         msg_print(_("何かで攻撃された!", "You are hit by something!"));
-    if (target_ptr->resist_dark) {
-        ep_ptr->dam *= 4;
-        ep_ptr->dam /= (randint1(4) + 7);
 
-        if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE) || target_ptr->wraith_form)
-            ep_ptr->dam = 0;
-    } else if (!target_ptr->blind && !target_ptr->resist_blind && !check_multishadow(target_ptr)) {
+    ep_ptr->dam = ep_ptr->dam * calc_dark_damage_rate(target_ptr, CALC_RAND) / 100;
+
+    if (!target_ptr->blind && !target_ptr->resist_blind && !check_multishadow(target_ptr)) {
         (void)set_blind(target_ptr, target_ptr->blind + randint1(5) + 2);
     }
 
index b5baa7c..81ee960 100644 (file)
@@ -147,11 +147,9 @@ static void spell_damcalc(player_type *target_ptr, monster_type *m_ptr, EFFECT_I
         break;
 
     case GF_DARK:
-        if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE) || target_ptr->wraith_form) {
-            dam = 0;
+        dam = dam * calc_dark_damage_rate(target_ptr, RAND_MAX) / 100;
+        if (is_specific_player_race(target_ptr, RACE_VAMPIRE) || (target_ptr->mimic_form == MIMIC_VAMPIRE) || target_ptr->wraith_form)
             ignore_wraith_form = TRUE;
-        } else if (target_ptr->resist_dark)
-            dam /= 2; /* Worst case of 4 / (d4 + 7) */
         break;
 
     case GF_SHARDS:
index 5e6832b..ff89dd9 100644 (file)
 
 PERCENTAGE randrate(int dice, int fix, rate_calc_type_mode mode)
 {
-    switch (mode) {    
-        case CALC_RAND:
-            return randint1(dice) * 100 + fix * 100;
-            break;
-        case CALC_AVERAGE:    
-            return (dice + 1) * 50 + fix * 100;
-            break;
-        case CALC_MIN:    
-            return (fix + 1) * 100;
-            break;
-        case CALC_MAX:
-            return (dice + fix) * 100;
-            break;
-        default:
-            return (fix + 1) * 100;
-            break;
+    switch (mode) {
+    case CALC_RAND:
+        return randint1(dice) * 100 + fix * 100;
+        break;
+    case CALC_AVERAGE:
+        return (dice + 1) * 50 + fix * 100;
+        break;
+    case CALC_MIN:
+        return (fix + 1) * 100;
+        break;
+    case CALC_MAX:
+        return (dice + fix) * 100;
+        break;
+    default:
+        return (fix + 1) * 100;
+        break;
     }
 }
 
@@ -177,3 +177,19 @@ PERCENTAGE calc_lite_damage_rate(player_type *creature_ptr, rate_calc_type_mode
 
     return per;
 }
+
+PERCENTAGE calc_dark_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode)
+{
+    PERCENTAGE per = 100;
+
+    if (is_specific_player_race(creature_ptr, RACE_VAMPIRE) || (creature_ptr->mimic_form == MIMIC_VAMPIRE) || creature_ptr->wraith_form) {
+        return 0;
+    }
+
+    if (creature_ptr->resist_dark) {
+        per *= 400;
+        per /= randrate(4, 7, mode);
+    }
+
+    return per;
+}
\ No newline at end of file
index c4f1f86..2cb3a69 100644 (file)
@@ -14,3 +14,4 @@ PERCENTAGE calc_fire_damage_rate(player_type *creature_ptr);
 PERCENTAGE calc_cold_damage_rate(player_type *creature_ptr);
 PERCENTAGE calc_pois_damage_rate(player_type *creature_ptr);
 PERCENTAGE calc_lite_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);
+PERCENTAGE calc_dark_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);