* @param f6p モンスター魔法のフラグリスト3
* @return なし
*/
-static void remove_bad_spells(MONSTER_IDX m_idx, u32b *f4p, u32b *f5p, u32b *f6p)
+static void remove_bad_spells(MONSTER_IDX m_idx, player_type *target_ptr, u32b *f4p, u32b *f5p, u32b *f6p)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &target_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
u32b f4 = (*f4p);
if (smart_cheat)
{
/* Know basic info */
- if (p_ptr->resist_acid) smart |= (SM_RES_ACID);
+ if (target_ptr->resist_acid) smart |= (SM_RES_ACID);
if (IS_OPPOSE_ACID()) smart |= (SM_OPP_ACID);
- if (p_ptr->immune_acid) smart |= (SM_IMM_ACID);
- if (p_ptr->resist_elec) smart |= (SM_RES_ELEC);
+ if (target_ptr->immune_acid) smart |= (SM_IMM_ACID);
+ if (target_ptr->resist_elec) smart |= (SM_RES_ELEC);
if (IS_OPPOSE_ELEC()) smart |= (SM_OPP_ELEC);
- if (p_ptr->immune_elec) smart |= (SM_IMM_ELEC);
- if (p_ptr->resist_fire) smart |= (SM_RES_FIRE);
+ if (target_ptr->immune_elec) smart |= (SM_IMM_ELEC);
+ if (target_ptr->resist_fire) smart |= (SM_RES_FIRE);
if (IS_OPPOSE_FIRE()) smart |= (SM_OPP_FIRE);
- if (p_ptr->immune_fire) smart |= (SM_IMM_FIRE);
- if (p_ptr->resist_cold) smart |= (SM_RES_COLD);
+ if (target_ptr->immune_fire) smart |= (SM_IMM_FIRE);
+ if (target_ptr->resist_cold) smart |= (SM_RES_COLD);
if (IS_OPPOSE_COLD()) smart |= (SM_OPP_COLD);
- if (p_ptr->immune_cold) smart |= (SM_IMM_COLD);
+ if (target_ptr->immune_cold) smart |= (SM_IMM_COLD);
/* Know poison info */
- if (p_ptr->resist_pois) smart |= (SM_RES_POIS);
+ if (target_ptr->resist_pois) smart |= (SM_RES_POIS);
if (IS_OPPOSE_POIS()) smart |= (SM_OPP_POIS);
/* Know special resistances */
- if (p_ptr->resist_neth) smart |= (SM_RES_NETH);
- if (p_ptr->resist_lite) smart |= (SM_RES_LITE);
- if (p_ptr->resist_dark) smart |= (SM_RES_DARK);
- if (p_ptr->resist_fear) smart |= (SM_RES_FEAR);
- if (p_ptr->resist_conf) smart |= (SM_RES_CONF);
- if (p_ptr->resist_chaos) smart |= (SM_RES_CHAOS);
- if (p_ptr->resist_disen) smart |= (SM_RES_DISEN);
- if (p_ptr->resist_blind) smart |= (SM_RES_BLIND);
- if (p_ptr->resist_nexus) smart |= (SM_RES_NEXUS);
- if (p_ptr->resist_sound) smart |= (SM_RES_SOUND);
- if (p_ptr->resist_shard) smart |= (SM_RES_SHARD);
- if (p_ptr->reflect) smart |= (SM_IMM_REFLECT);
+ if (target_ptr->resist_neth) smart |= (SM_RES_NETH);
+ if (target_ptr->resist_lite) smart |= (SM_RES_LITE);
+ if (target_ptr->resist_dark) smart |= (SM_RES_DARK);
+ if (target_ptr->resist_fear) smart |= (SM_RES_FEAR);
+ if (target_ptr->resist_conf) smart |= (SM_RES_CONF);
+ if (target_ptr->resist_chaos) smart |= (SM_RES_CHAOS);
+ if (target_ptr->resist_disen) smart |= (SM_RES_DISEN);
+ if (target_ptr->resist_blind) smart |= (SM_RES_BLIND);
+ if (target_ptr->resist_nexus) smart |= (SM_RES_NEXUS);
+ if (target_ptr->resist_sound) smart |= (SM_RES_SOUND);
+ if (target_ptr->resist_shard) smart |= (SM_RES_SHARD);
+ if (target_ptr->reflect) smart |= (SM_IMM_REFLECT);
/* Know bizarre "resistances" */
- if (p_ptr->free_act) smart |= (SM_IMM_FREE);
- if (!p_ptr->msp) smart |= (SM_IMM_MANA);
+ if (target_ptr->free_act) smart |= (SM_IMM_FREE);
+ if (!target_ptr->msp) smart |= (SM_IMM_MANA);
}
if (smart & (SM_RES_NETH))
{
- if (PRACE_IS_(p_ptr, RACE_SPECTRE))
+ if (PRACE_IS_(target_ptr, RACE_SPECTRE))
{
f4 &= ~(RF4_BR_NETH);
f5 &= ~(RF5_BA_NETH);
if (smart & (SM_RES_DARK))
{
- if (PRACE_IS_(p_ptr, RACE_VAMPIRE))
+ if (PRACE_IS_(target_ptr, RACE_VAMPIRE))
{
f4 &= ~(RF4_BR_DARK);
f5 &= ~(RF5_BA_DARK);
for (x = x1 - 2; x <= x1 + 2; x++)
{
/* Ignore illegal locations */
- if (!in_bounds(y, x)) continue;
+ if (!in_bounds(p_ptr->current_floor_ptr, y, x)) continue;
/* Only check a circular area */
if (distance(y1, x1, y, x)>2) continue;
if (pattern_tile(y, x)) continue;
/* Require empty floor grid in line of projection */
- if (cave_empty_bold(y, x) && projectable(y1, x1, y, x) && projectable(y, x, y1, x1)) return (TRUE);
+ if (cave_empty_bold(p_ptr->current_floor_ptr, y, x) && projectable(p_ptr->current_floor_ptr, y1, x1, y, x) && projectable(p_ptr->current_floor_ptr, y, x, y1, x1)) return (TRUE);
}
}
for (yy = y - 5; yy <= y + 5; yy++)
{
if (distance(y, x, yy, xx) > 5) continue;
- if (!los(y, x, yy, xx)) continue;
- if (!projectable(y, x, yy, xx)) continue;
+ if (!los(p_ptr->current_floor_ptr, y, x, yy, xx)) continue;
+ if (!projectable(p_ptr->current_floor_ptr, y, x, yy, xx)) continue;
- g_ptr = ¤t_floor_ptr->grid_array[yy][xx];
+ g_ptr = &p_ptr->current_floor_ptr->grid_array[yy][xx];
/* Scan the pile of objects */
for (this_o_idx = g_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
- object_type *o_ptr = ¤t_floor_ptr->o_list[this_o_idx];
+ object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[this_o_idx];
next_o_idx = o_ptr->next_o_idx;
/* Known to be worthless? */
u16b grid_g[512];
/* Check the projection path */
- grid_n = project_path(grid_g, MAX_RANGE, y1, x1, y2, x2, 0);
+ grid_n = project_path(p_ptr->current_floor_ptr, grid_g, MAX_RANGE, y1, x1, y2, x2, 0);
/* No grid is ever projectable from itself */
if (!grid_n) return (FALSE);
y = GRID_Y(grid_g[i]);
x = GRID_X(grid_g[i]);
- if ((current_floor_ptr->grid_array[y][x].m_idx > 0) && !((y == y2) && (x == x2)))
+ if ((p_ptr->current_floor_ptr->grid_array[y][x].m_idx > 0) && !((y == y2) && (x == x2)))
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[current_floor_ptr->grid_array[y][x].m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[p_ptr->current_floor_ptr->grid_array[y][x].m_idx];
if (is_friend == is_pet(m_ptr))
{
return (FALSE);
}
}
/* Pets may not shoot through the character - TNB */
- if (player_bold(y, x))
+ if (player_bold(p_ptr, y, x))
{
if (is_friend) return (FALSE);
}
if (typ != GF_ARROW) flg |= PROJECT_REFLECTABLE;
/* Target the player with a bolt attack */
- (void)project(m_idx, 0, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
+ (void)project(p_ptr, m_idx, 0, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
}
/*!
}
/* Target the player with a bolt attack */
- (void)project(m_idx, 0, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
+ (void)project(p_ptr, m_idx, 0, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
}
*/
void breath(POSITION y, POSITION x, MONSTER_IDX m_idx, EFFECT_ID typ, int dam_hp, POSITION rad, bool breath, int monspell, int target_type)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
bool learnable = spell_learnable(m_idx);
BIT_FLAGS flg = 0x00;
}
/* Target the player with a ball attack */
- (void)project(m_idx, rad, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
+ (void)project(p_ptr, m_idx, rad, y, x, dam_hp, typ, flg, (learnable ? monspell : -1));
}
* @param m_idx モンスターの構造体配列ID
* @return 魔力消去をかけるべきならTRUEを返す。
*/
-bool dispel_check(MONSTER_IDX m_idx)
+bool dispel_check(player_type *creature_ptr, MONSTER_IDX m_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &creature_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
/* Invulnabilty (including the song) */
- if (IS_INVULN()) return (TRUE);
+ if (IS_INVULN(creature_ptr)) return (TRUE);
/* Wraith form */
- if (p_ptr->wraith_form) return (TRUE);
+ if (creature_ptr->wraith_form) return (TRUE);
/* Shield */
- if (p_ptr->shield) return (TRUE);
+ if (creature_ptr->shield) return (TRUE);
/* Magic defence */
- if (p_ptr->magicdef) return (TRUE);
+ if (creature_ptr->magicdef) return (TRUE);
/* Multi Shadow */
- if (p_ptr->multishadow) return (TRUE);
+ if (creature_ptr->multishadow) return (TRUE);
/* Robe of dust */
- if (p_ptr->dustrobe) return (TRUE);
+ if (creature_ptr->dustrobe) return (TRUE);
/* Berserk Strength */
- if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER)) return (TRUE);
+ if (creature_ptr->shero && (creature_ptr->pclass != CLASS_BERSERKER)) return (TRUE);
/* Demon Lord */
- if (p_ptr->mimic_form == MIMIC_DEMON_LORD) return (TRUE);
+ if (creature_ptr->mimic_form == MIMIC_DEMON_LORD) return (TRUE);
/* Elemental resistances */
if (r_ptr->flags4 & RF4_BR_ACID)
{
- if (!p_ptr->immune_acid && (p_ptr->oppose_acid || music_singing(p_ptr, MUSIC_RESIST))) return (TRUE);
- if (p_ptr->special_defense & DEFENSE_ACID) return (TRUE);
+ if (!creature_ptr->immune_acid && (creature_ptr->oppose_acid || music_singing(creature_ptr, MUSIC_RESIST))) return (TRUE);
+ if (creature_ptr->special_defense & DEFENSE_ACID) return (TRUE);
}
if (r_ptr->flags4 & RF4_BR_FIRE)
{
- if (!((p_ptr->prace == RACE_DEMON) && p_ptr->lev > 44))
+ if (!((creature_ptr->prace == RACE_DEMON) && creature_ptr->lev > 44))
{
- if (!p_ptr->immune_fire && (p_ptr->oppose_fire || music_singing(p_ptr, MUSIC_RESIST))) return (TRUE);
- if (p_ptr->special_defense & DEFENSE_FIRE) return (TRUE);
+ if (!creature_ptr->immune_fire && (creature_ptr->oppose_fire || music_singing(creature_ptr, MUSIC_RESIST))) return (TRUE);
+ if (creature_ptr->special_defense & DEFENSE_FIRE) return (TRUE);
}
}
if (r_ptr->flags4 & RF4_BR_ELEC)
{
- if (!p_ptr->immune_elec && (p_ptr->oppose_elec || music_singing(p_ptr, MUSIC_RESIST))) return (TRUE);
- if (p_ptr->special_defense & DEFENSE_ELEC) return (TRUE);
+ if (!creature_ptr->immune_elec && (creature_ptr->oppose_elec || music_singing(creature_ptr, MUSIC_RESIST))) return (TRUE);
+ if (creature_ptr->special_defense & DEFENSE_ELEC) return (TRUE);
}
if (r_ptr->flags4 & RF4_BR_COLD)
{
- if (!p_ptr->immune_cold && (p_ptr->oppose_cold || music_singing(p_ptr, MUSIC_RESIST))) return (TRUE);
- if (p_ptr->special_defense & DEFENSE_COLD) return (TRUE);
+ if (!creature_ptr->immune_cold && (creature_ptr->oppose_cold || music_singing(creature_ptr, MUSIC_RESIST))) return (TRUE);
+ if (creature_ptr->special_defense & DEFENSE_COLD) return (TRUE);
}
if (r_ptr->flags4 & (RF4_BR_POIS | RF4_BR_NUKE))
{
- if (!((p_ptr->pclass == CLASS_NINJA) && p_ptr->lev > 44))
+ if (!((creature_ptr->pclass == CLASS_NINJA) && creature_ptr->lev > 44))
{
- if (p_ptr->oppose_pois || music_singing(p_ptr, MUSIC_RESIST)) return (TRUE);
- if (p_ptr->special_defense & DEFENSE_POIS) return (TRUE);
+ if (creature_ptr->oppose_pois || music_singing(creature_ptr, MUSIC_RESIST)) return (TRUE);
+ if (creature_ptr->special_defense & DEFENSE_POIS) return (TRUE);
}
}
/* Ultimate resistance */
- if (p_ptr->ult_res) return (TRUE);
+ if (creature_ptr->ult_res) return (TRUE);
/* Potion of Neo Tsuyosi special */
- if (p_ptr->tsuyoshi) return (TRUE);
+ if (creature_ptr->tsuyoshi) return (TRUE);
/* Elemental Brands */
- if ((p_ptr->special_attack & ATTACK_ACID) && !(r_ptr->flagsr & RFR_EFF_IM_ACID_MASK)) return (TRUE);
- if ((p_ptr->special_attack & ATTACK_FIRE) && !(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)) return (TRUE);
- if ((p_ptr->special_attack & ATTACK_ELEC) && !(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK)) return (TRUE);
- if ((p_ptr->special_attack & ATTACK_COLD) && !(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)) return (TRUE);
- if ((p_ptr->special_attack & ATTACK_POIS) && !(r_ptr->flagsr & RFR_EFF_IM_POIS_MASK)) return (TRUE);
+ if ((creature_ptr->special_attack & ATTACK_ACID) && !(r_ptr->flagsr & RFR_EFF_IM_ACID_MASK)) return (TRUE);
+ if ((creature_ptr->special_attack & ATTACK_FIRE) && !(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)) return (TRUE);
+ if ((creature_ptr->special_attack & ATTACK_ELEC) && !(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK)) return (TRUE);
+ if ((creature_ptr->special_attack & ATTACK_COLD) && !(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)) return (TRUE);
+ if ((creature_ptr->special_attack & ATTACK_POIS) && !(r_ptr->flagsr & RFR_EFF_IM_POIS_MASK)) return (TRUE);
- if (p_ptr->pspeed < 145)
+ if (creature_ptr->pspeed < 145)
{
- if (IS_FAST()) return (TRUE);
+ if (IS_FAST(creature_ptr)) return (TRUE);
}
/* Light speed */
- if (p_ptr->lightspeed && (m_ptr->mspeed < 136)) return (TRUE);
+ if (creature_ptr->lightspeed && (m_ptr->mspeed < 136)) return (TRUE);
- if (p_ptr->riding && (current_floor_ptr->m_list[p_ptr->riding].mspeed < 135))
+ if (creature_ptr->riding && (creature_ptr->current_floor_ptr->m_list[creature_ptr->riding].mspeed < 135))
{
- if (MON_FAST(¤t_floor_ptr->m_list[p_ptr->riding])) return (TRUE);
+ if (MON_FAST(&creature_ptr->current_floor_ptr->m_list[creature_ptr->riding])) return (TRUE);
}
/* No need to cast dispel spell */
*/
static int choose_attack_spell(MONSTER_IDX m_idx, byte spells[], byte num)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
byte escape[96], escape_num = 0;
if (dispel_num && one_in_(2))
{
/* Choose dispel spell if possible */
- if (dispel_check(m_idx))
+ if (dispel_check(p_ptr, m_idx))
{
return (dispel[randint0(dispel_num)]);
}
}
/* Attack spell (most of the time) */
- if (IS_INVULN())
+ if (IS_INVULN(p_ptr))
{
if (psy_spe_num && (randint0(100) < 50))
{
* @return 有効な座標があった場合TRUEを返す
*/
static bool adjacent_grid_check(monster_type *m_ptr, POSITION *yp, POSITION *xp,
- int f_flag, bool (*path_check)(POSITION, POSITION, POSITION, POSITION))
+ int f_flag, bool (*path_check)(floor_type *, POSITION, POSITION, POSITION, POSITION))
{
int i;
int tonari;
grid_type *g_ptr;
/* Access the next grid */
- g_ptr = ¤t_floor_ptr->grid_array[next_y][next_x];
+ g_ptr = &p_ptr->current_floor_ptr->grid_array[next_y][next_x];
/* Skip this feature */
if (!cave_have_flag_grid(g_ptr, f_flag)) continue;
- if (path_check(m_ptr->fy, m_ptr->fx, next_y, next_x))
+ if (path_check(p_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, next_y, next_x))
{
*yp = next_y;
*xp = next_x;
* Note the special "MFLAG_NICE" flag, which prevents a monster from using\n
* any spell attacks until the player has had a single chance to move.\n
*/
-bool make_attack_spell(MONSTER_IDX m_idx)
+bool make_attack_spell(MONSTER_IDX m_idx, player_type *target_ptr)
{
int k;
SPELL_IDX thrown_spell = 0;
PERCENTAGE failrate;
byte spell[96], num = 0;
BIT_FLAGS f4, f5, f6;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &target_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
GAME_TEXT m_name[MAX_NLEN];
#ifndef JP
bool do_spell = DO_SPELL_NONE;
int dam = 0;
- POSITION x = p_ptr->x;
- POSITION y = p_ptr->y;
+ POSITION x = target_ptr->x;
+ POSITION y = target_ptr->y;
/* Target location for lite breath */
POSITION x_br_lite = 0;
POSITION y_br_lite = 0;
/* Extract the "see-able-ness" */
- bool seen = (!p_ptr->blind && m_ptr->ml);
- bool maneable = player_has_los_bold(m_ptr->fy, m_ptr->fx);
+ bool seen = (!target_ptr->blind && m_ptr->ml);
+ bool maneable = player_has_los_bold(target_ptr, m_ptr->fy, m_ptr->fx);
/* Check "projectable" */
bool direct;
- bool in_no_magic_dungeon = (d_info[p_ptr->dungeon_idx].flags1 & DF1_NO_MAGIC) && current_floor_ptr->dun_level
- && (!p_ptr->inside_quest || is_fixed_quest_idx(p_ptr->inside_quest));
+ bool in_no_magic_dungeon = (d_info[target_ptr->dungeon_idx].flags1 & DF1_NO_MAGIC) && target_ptr->current_floor_ptr->dun_level
+ && (!target_ptr->current_floor_ptr->inside_quest || is_fixed_quest_idx(target_ptr->current_floor_ptr->inside_quest));
bool can_use_lite_area = FALSE;
y_br_lite = y;
x_br_lite = x;
- if (los(m_ptr->fy, m_ptr->fx, y_br_lite, x_br_lite))
+ if (los(target_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, y_br_lite, x_br_lite))
{
- feature_type *f_ptr = &f_info[current_floor_ptr->grid_array[y_br_lite][x_br_lite].feat];
+ feature_type *f_ptr = &f_info[target_ptr->current_floor_ptr->grid_array[y_br_lite][x_br_lite].feat];
if (!have_flag(f_ptr->flags, FF_LOS))
{
}
/* Check path */
- if (projectable(m_ptr->fy, m_ptr->fx, y, x))
+ if (projectable(target_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, y, x))
{
- feature_type *f_ptr = &f_info[current_floor_ptr->grid_array[y][x].feat];
+ feature_type *f_ptr = &f_info[target_ptr->current_floor_ptr->grid_array[y][x].feat];
if (!have_flag(f_ptr->flags, FF_PROJECT))
{
bool success = FALSE;
if ((f4 & RF4_BR_DISI) && (m_ptr->cdis < MAX_RANGE/2) &&
- in_disintegration_range(m_ptr->fy, m_ptr->fx, y, x) &&
- (one_in_(10) || (projectable(y, x, m_ptr->fy, m_ptr->fx) && one_in_(2))))
+ in_disintegration_range(target_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, y, x) &&
+ (one_in_(10) || (projectable(target_ptr->current_floor_ptr, y, x, m_ptr->fy, m_ptr->fx) && one_in_(2))))
{
do_spell = DO_SPELL_BR_DISI;
success = TRUE;
}
else if ((f4 & RF4_BR_LITE) && (m_ptr->cdis < MAX_RANGE/2) &&
- los(m_ptr->fy, m_ptr->fx, y, x) && one_in_(5))
+ los(target_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, y, x) && one_in_(5))
{
do_spell = DO_SPELL_BR_LITE;
success = TRUE;
else if ((f5 & RF5_BA_LITE) && (m_ptr->cdis <= MAX_RANGE))
{
POSITION by = y, bx = x;
- get_project_point(m_ptr->fy, m_ptr->fx, &by, &bx, 0L);
- if ((distance(by, bx, y, x) <= 3) && los(by, bx, y, x) && one_in_(5))
+ get_project_point(target_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, &by, &bx, 0L);
+ if ((distance(by, bx, y, x) <= 3) && los(target_ptr->current_floor_ptr, by, bx, y, x) && one_in_(5))
{
do_spell = DO_SPELL_BA_LITE;
success = TRUE;
if (f6 & RF6_DARKNESS)
{
- if ((p_ptr->pclass == CLASS_NINJA) &&
+ if ((target_ptr->pclass == CLASS_NINJA) &&
!(r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) &&
!(r_ptr->flags7 & RF7_DARK_MASK))
can_use_lite_area = TRUE;
if (!(r_ptr->flags2 & RF2_STUPID))
{
- if (d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS) f6 &= ~(RF6_DARKNESS);
- else if ((p_ptr->pclass == CLASS_NINJA) && !can_use_lite_area) f6 &= ~(RF6_DARKNESS);
+ if (d_info[target_ptr->dungeon_idx].flags1 & DF1_DARKNESS) f6 &= ~(RF6_DARKNESS);
+ else if ((target_ptr->pclass == CLASS_NINJA) && !can_use_lite_area) f6 &= ~(RF6_DARKNESS);
}
}
if (!f4 && !f5 && !f6) return (FALSE);
/* Remove the "ineffective" spells */
- remove_bad_spells(m_idx, &f4, &f5, &f6);
+ remove_bad_spells(m_idx, target_ptr, &f4, &f5, &f6);
- if (p_ptr->inside_arena || p_ptr->phase_out)
+ if (target_ptr->current_floor_ptr->inside_arena || target_ptr->phase_out)
{
f4 &= ~(RF4_SUMMON_MASK);
f5 &= ~(RF5_SUMMON_MASK);
if (!(r_ptr->flags2 & RF2_STUPID))
{
- if (!p_ptr->csp) f5 &= ~(RF5_DRAIN_MANA);
+ if (!target_ptr->csp) f5 &= ~(RF5_DRAIN_MANA);
/* Check for a clean bolt shot */
if (((f4 & RF4_BOLT_MASK) ||
(f5 & RF5_BOLT_MASK) ||
(f6 & RF6_BOLT_MASK)) &&
- !clean_shot(m_ptr->fy, m_ptr->fx, p_ptr->y, p_ptr->x, FALSE))
+ !clean_shot(m_ptr->fy, m_ptr->fx, target_ptr->y, target_ptr->x, FALSE))
{
/* Remove spells that will only hurt friends */
f4 &= ~(RF4_BOLT_MASK);
if (!num) return (FALSE);
/* Stop if player is dead or gone */
- if (!p_ptr->playing || p_ptr->is_dead) return (FALSE);
+ if (!target_ptr->playing || target_ptr->is_dead) return (FALSE);
/* Stop if player is leaving */
- if (p_ptr->leaving) return (FALSE);
+ if (target_ptr->leaving) return (FALSE);
/* Get the monster name (or "it") */
monster_desc(m_name, m_ptr, 0x00);
if (!spell_is_inate(thrown_spell)
&& (in_no_magic_dungeon || (MON_STUNNED(m_ptr) && one_in_(2)) || (randint0(100) < failrate)))
{
- disturb(TRUE, TRUE);
+ disturb(target_ptr, TRUE, TRUE);
msg_format(_("%^sは呪文を唱えようとしたが失敗した。", "%^s tries to cast a spell, but fails."), m_name);
return (TRUE);
}
/* Hex: Anti Magic Barrier */
- if (!spell_is_inate(thrown_spell) && magic_barrier(m_idx))
+ if (!spell_is_inate(thrown_spell) && magic_barrier(p_ptr, m_idx))
{
msg_format(_("反魔法バリアが%^sの呪文をかき消した。", "Anti magic barrier cancels the spell which %^s casts."), m_name);
return (TRUE);
}
/* Projectable? */
- direct = player_bold(y, x);
+ direct = player_bold(target_ptr, y, x);
can_remember = is_original_ap_and_seen(m_ptr);
}
/* Cast the spell. */
- dam = monspell_to_player(thrown_spell, y, x, m_idx);
+ dam = monspell_to_player(thrown_spell, target_ptr, y, x, m_idx);
if (dam < 0) return FALSE;
- if ((p_ptr->action == ACTION_LEARN) && thrown_spell > 175)
+ if ((target_ptr->action == ACTION_LEARN) && thrown_spell > 175)
{
learn_spell(thrown_spell - 96);
}
- if (seen && maneable && !current_world_ptr->timewalk_m_idx && (p_ptr->pclass == CLASS_IMITATOR))
+ if (seen && maneable && !current_world_ptr->timewalk_m_idx && (target_ptr->pclass == CLASS_IMITATOR))
{
if (thrown_spell != 167) /* Not RF6_SPECIAL */
{
- if (p_ptr->mane_num == MAX_MANE)
+ if (target_ptr->mane_num == MAX_MANE)
{
int i;
- p_ptr->mane_num--;
- for (i = 0;i < p_ptr->mane_num;i++)
+ target_ptr->mane_num--;
+ for (i = 0;i < target_ptr->mane_num;i++)
{
- p_ptr->mane_spell[i] = p_ptr->mane_spell[i+1];
- p_ptr->mane_dam[i] = p_ptr->mane_dam[i+1];
+ target_ptr->mane_spell[i] = target_ptr->mane_spell[i+1];
+ target_ptr->mane_dam[i] = target_ptr->mane_dam[i+1];
}
}
- p_ptr->mane_spell[p_ptr->mane_num] = thrown_spell - 96;
- p_ptr->mane_dam[p_ptr->mane_num] = dam;
- p_ptr->mane_num++;
- p_ptr->new_mane = TRUE;
+ target_ptr->mane_spell[target_ptr->mane_num] = thrown_spell - 96;
+ target_ptr->mane_dam[target_ptr->mane_num] = dam;
+ target_ptr->mane_num++;
+ target_ptr->new_mane = TRUE;
- p_ptr->redraw |= (PR_IMITATION);
+ target_ptr->redraw |= (PR_IMITATION);
}
}
/* Always take note of monsters that kill you */
- if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
+ if (target_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !target_ptr->current_floor_ptr->inside_arena)
{
r_ptr->r_deaths++; /* Ignore appearance difference */
}