{
if (target_ptr->blind)
msg_print(_("何かさえないもので攻撃された!", "You are hit by something static!"));
- if (target_ptr->resist_disen) {
- ep_ptr->dam *= 6;
- ep_ptr->dam /= (randint1(4) + 7);
- } else if (!check_multishadow(target_ptr)) {
+
+ ep_ptr->dam = ep_ptr->dam * calc_disenchant_damage_rate(target_ptr, CALC_RAND) / 100;
+
+ if (!target_ptr->resist_disen && !check_multishadow(target_ptr)) {
(void)apply_disenchant(target_ptr, 0);
}
break;
case GF_DISENCHANT:
- if (target_ptr->resist_disen)
- dam = dam * 3 / 4; /* Worst case of 6 / (d4 + 7) */
+ dam = dam * calc_disenchant_damage_rate(target_ptr, CALC_MAX) / 100;
break;
case GF_NEXUS:
return per;
}
+PERCENTAGE calc_disenchant_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode)
+{
+ PERCENTAGE per = 100;
+
+ if (creature_ptr->resist_disen) {
+ per *= 600;
+ per /= randrate(4, 7, mode);
+ }
+
+ return per;
+}
+
PERCENTAGE calc_nether_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode)
{
PERCENTAGE per = 100;
PERCENTAGE calc_conf_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);
PERCENTAGE calc_chaos_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);
PERCENTAGE calc_nether_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);
+PERCENTAGE calc_disenchant_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);
PERCENTAGE calc_holy_fire_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);
PERCENTAGE calc_hell_fire_damage_rate(player_type *creature_ptr, rate_calc_type_mode mode);