{
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);
}
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:
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;
}
}
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
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);