extern PERCENTAGE mod_spell_chance_2(PERCENTAGE chance);
extern PERCENTAGE spell_chance(SPELL_IDX spell, REALM_IDX realm);
extern void print_spells(SPELL_IDX target_spell, SPELL_IDX *spells, int num, TERM_LEN y, TERM_LEN x, REALM_IDX realm);
-extern bool polymorph_monster(POSITION y, POSITION x);
+extern bool polymorph_monster(player_type *caster_ptr, POSITION y, POSITION x);
extern bool dimension_door(void);
extern bool mirror_tunnel(void);
extern void massacre(void);
* @param x 指定のX座標
* @return 実際に変身したらTRUEを返す
*/
-bool polymorph_monster(POSITION y, POSITION x)
+bool polymorph_monster(player_type *caster_ptr, POSITION y, POSITION x)
{
- grid_type *g_ptr = &p_ptr->current_floor_ptr->grid_array[y][x];
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
+ grid_type *g_ptr = &caster_ptr->current_floor_ptr->grid_array[y][x];
+ monster_type *m_ptr = &caster_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
bool polymorphed = FALSE;
MONRACE_IDX new_r_idx;
MONRACE_IDX old_r_idx = m_ptr->r_idx;
bool targeted = (target_who == g_ptr->m_idx) ? TRUE : FALSE;
- bool health_tracked = (p_ptr->health_who == g_ptr->m_idx) ? TRUE : FALSE;
+ bool health_tracked = (caster_ptr->health_who == g_ptr->m_idx) ? TRUE : FALSE;
monster_type back_m;
- if (p_ptr->inside_arena || p_ptr->phase_out) return (FALSE);
+ if (caster_ptr->inside_arena || caster_ptr->phase_out) return (FALSE);
- if ((p_ptr->riding == g_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
+ if ((caster_ptr->riding == g_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
/* Memorize the monster before polymorphing */
back_m = *m_ptr;
/* Create a new monster (no groups) */
if (place_monster_aux(0, y, x, new_r_idx, mode))
{
- p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].nickname = back_m.nickname;
- p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].parent_m_idx = back_m.parent_m_idx;
- p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].hold_o_idx = back_m.hold_o_idx;
+ caster_ptr->current_floor_ptr->m_list[hack_m_idx_ii].nickname = back_m.nickname;
+ caster_ptr->current_floor_ptr->m_list[hack_m_idx_ii].parent_m_idx = back_m.parent_m_idx;
+ caster_ptr->current_floor_ptr->m_list[hack_m_idx_ii].hold_o_idx = back_m.hold_o_idx;
/* Success */
polymorphed = TRUE;
/* Placing the new monster failed */
if (place_monster_aux(0, y, x, old_r_idx, (mode | PM_NO_KAGE | PM_IGNORE_TERRAIN)))
{
- p_ptr->current_floor_ptr->m_list[hack_m_idx_ii] = back_m;
+ caster_ptr->current_floor_ptr->m_list[hack_m_idx_ii] = back_m;
/* Re-initialize monster process */
mproc_init();
{
for (this_o_idx = back_m.hold_o_idx; this_o_idx; this_o_idx = next_o_idx)
{
- object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[this_o_idx];
+ object_type *o_ptr = &caster_ptr->current_floor_ptr->o_list[this_o_idx];
next_o_idx = o_ptr->next_o_idx;
/* Held by new monster */
{
for (this_o_idx = back_m.hold_o_idx; this_o_idx; this_o_idx = next_o_idx)
{
- next_o_idx = p_ptr->current_floor_ptr->o_list[this_o_idx].next_o_idx;
+ next_o_idx = caster_ptr->current_floor_ptr->o_list[this_o_idx].next_o_idx;
delete_object_idx(this_o_idx);
}
}