}
-
/*!
* @brief モンスターに与えたダメージを元に経験値を加算する /
* Calculate experience point to be get
* experience point of a monster later.
* </pre>
*/
-static void get_exp_from_mon(HIT_POINT dam, monster_type *m_ptr)
+static void get_exp_from_mon(player_type *target_ptr, HIT_POINT dam, monster_type *m_ptr)
{
monster_race *r_ptr = &r_info[m_ptr->r_idx];
u32b div_l;
if (!monster_is_valid(m_ptr)) return;
- if (is_pet(m_ptr) || p_ptr->phase_out) return;
+ if (is_pet(m_ptr) || target_ptr->phase_out) return;
/*
* - Ratio of monster's level to player's level effects
new_exp = r_ptr->level * SPEED_TO_ENERGY(m_ptr->mspeed) * dam;
new_exp_frac = 0;
div_h = 0L;
- div_l = (p_ptr->max_plv + 2) * SPEED_TO_ENERGY(r_ptr->speed);
+ div_l = (target_ptr->max_plv + 2) * SPEED_TO_ENERGY(r_ptr->speed);
/* Use (average maxhp * 2) as a denominator */
if (!(r_ptr->flags1 & RF1_FORCE_MAXHP))
s64b_mul(&div_h, &div_l, 0, r_ptr->hdice * (ironman_nightmare ? 2 : 1) * r_ptr->hside * 2);
/* Special penalty in the wilderness */
- if (!p_ptr->current_floor_ptr->dun_level && (!(r_ptr->flags8 & RF8_WILD_ONLY) || !(r_ptr->flags1 & RF1_UNIQUE)))
+ if (!target_ptr->current_floor_ptr->dun_level && (!(r_ptr->flags8 & RF8_WILD_ONLY) || !(r_ptr->flags1 & RF1_UNIQUE)))
s64b_mul(&div_h, &div_l, 0, 5);
/* Do division first to prevent overflaw */
/* Finally multiply base experience point of the monster */
s64b_mul(&new_exp, &new_exp_frac, 0, r_ptr->mexp);
- gain_exp_64(p_ptr, new_exp, new_exp_frac);
+ gain_exp_64(target_ptr, new_exp, new_exp_frac);
}
expdam = (m_ptr->hp > dam) ? dam : m_ptr->hp;
- get_exp_from_mon(expdam, &exp_mon);
+ get_exp_from_mon(target_ptr, expdam, &exp_mon);
/* Genocided by chaos patron */
if (!monster_is_valid(m_ptr)) m_idx = 0;
delete_monster_idx(m_idx);
}
- get_exp_from_mon((long)exp_mon.max_maxhp * 2, &exp_mon);
+ get_exp_from_mon(target_ptr, (long)exp_mon.max_maxhp * 2, &exp_mon);
/* Not afraid */
(*fear) = FALSE;