*/
bool monster_near_player(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
+ monster_type *t_ptr = &p_ptr->current_floor_ptr->m_list[t_idx];
return (m_ptr->cdis <= MAX_SIGHT) || (t_ptr->cdis <= MAX_SIGHT);
}
*/
bool see_monster(MONSTER_IDX m_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
return is_seen(m_ptr);
}
*/
bool spell_learnable(MONSTER_IDX m_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
/* 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 maneable = player_has_los_bold(p_ptr, m_ptr->fy, m_ptr->fx);
return (seen && maneable && !current_world_ptr->timewalk_m_idx);
}
BIT_FLAGS monster_u_mode(MONSTER_IDX m_idx)
{
BIT_FLAGS u_mode = 0L;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
bool pet = is_pet(m_ptr);
if (!pet) u_mode |= PM_ALLOW_UNIQUE;
return u_mode;
monster_name(t_idx, t_name);
if (mon_to_player || (mon_to_mon && known && see_either))
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (msg_flag_aux)
{
}
if (mon_to_mon && known && !see_either)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF4_SHRIEK(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF4_SHRIEK(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
+ // temporary unused
+ (target_ptr);
+
simple_monspell_message(m_idx, t_idx,
_("%^sがかん高い金切り声をあげた。", "%^s makes a high pitched shriek."),
_("%^sが%sに向かって叫んだ。", "%^s shrieks at %s."),
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- aggravate_monsters(m_idx);
+ aggravate_monsters(target_ptr, m_idx);
}
else if (TARGET_TYPE == MONSTER_TO_MONSTER)
{
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF4_DISPEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF4_DISPEL(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
monster_name(m_idx, m_name);
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- dispel_player();
- if (p_ptr->riding) dispel_monster_status(p_ptr->riding);
+ dispel_player(target_ptr);
+ if (target_ptr->riding) dispel_monster_status(target_ptr->riding);
- if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (p_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON))
+ if ((target_ptr->pseikaku == SEIKAKU_COMBAT) || (target_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON))
msg_print(_("やりやがったな!", ""));
- else if ((p_ptr->pseikaku == SEIKAKU_CHARGEMAN))
+ else if ((target_ptr->pseikaku == SEIKAKU_CHARGEMAN))
{
if (randint0(2) == 0) msg_print(_("ジュラル星人め!", ""));
else msg_print(_("弱い者いじめは止めるんだ!", ""));
}
else if (TARGET_TYPE == MONSTER_TO_MONSTER)
{
- if (t_idx == p_ptr->riding) dispel_player();
+ if (t_idx == target_ptr->riding) dispel_player(target_ptr);
dispel_monster_status(t_idx);
}
}
HIT_POINT dam, ms_type, drs_type = 0;
concptr type_s;
bool smart_learn_aux = TRUE;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
bool known = monster_near_player(m_idx, t_idx);
bool see_either = see_monster(m_idx) || see_monster(t_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
}
if (mon_to_player || (mon_to_mon && known && see_either))
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (m_ptr->r_idx == MON_JAIAN && GF_TYPE == GF_SOUND)
{
}
if (mon_to_mon && known && !see_either)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
sound(SOUND_BREATH);
breath(y, x, m_idx, GF_TYPE, dam, 0, TRUE, ms_type, TARGET_TYPE);
HIT_POINT spell_RF5_BA_FIRE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
HIT_POINT dam, rad;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
if (m_ptr->r_idx == MON_ROLENTO)
{
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
}
else if (TARGET_TYPE == MONSTER_TO_MONSTER && see_monster(m_idx))
{
*/
HIT_POINT spell_RF5_MIND_BLAST(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, 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];
bool seen = (!p_ptr->blind && m_ptr->ml);
HIT_POINT dam;
GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (!seen)
msg_print(_("何かがあなたの精神に念を放っているようだ。", "You feel something focusing on your mind."));
else
*/
HIT_POINT spell_RF5_BRAIN_SMASH(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, 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];
bool seen = (!p_ptr->blind && m_ptr->ml);
HIT_POINT dam;
GAME_TEXT m_name[MAX_NLEN], t_name[MAX_NLEN];
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (!seen)
msg_print(_("何かがあなたの精神に念を放っているようだ。", "You feel something focusing on your mind."));
else
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (p_ptr->blind)
msg_format(msg1, m_name);
else
}
else
{
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
}
breath(y, x, m_idx, GF_TYPE, dam, 0, FALSE, MS_TYPE, TARGET_TYPE);
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (p_ptr->blind)
msg_format(msg1, m_name);
else
}
else
{
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
}
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF5_SCARE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF5_SCARE(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &target_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool resist, saving_throw;
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- resist = p_ptr->resist_fear;
- saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+ resist = target_ptr->resist_fear;
+ saving_throw = (randint0(100 + rlev / 2) < target_ptr->skill_sav);
spell_badstatus_message(m_idx, t_idx,
_("%^sが何かをつぶやくと、恐ろしげな音が聞こえた。", "%^s mumbles, and you hear scary noises."),
_("%^sが恐ろしげな幻覚を作り出した。", "%^s casts a fearful illusion."),
if (!resist && !saving_throw)
{
- (void)set_afraid(p_ptr->afraid + randint0(4) + 4);
+ (void)set_afraid(target_ptr, target_ptr->afraid + randint0(4) + 4);
}
learn_spell(MS_SCARE);
update_smart_learn(m_idx, DRS_FEAR);
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF5_BLIND(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF5_BLIND(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &target_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool resist, saving_throw;
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- resist = p_ptr->resist_blind;
- saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+ resist = target_ptr->resist_blind;
+ saving_throw = (randint0(100 + rlev / 2) < target_ptr->skill_sav);
spell_badstatus_message(m_idx, t_idx,
_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが呪文を唱えてあなたの目をくらました!", "%^s casts a spell, burning your eyes!"),
if (!resist && !saving_throw)
{
- (void)set_blind(12 + randint0(4));
+ (void)set_blind(target_ptr, 12 + randint0(4));
}
learn_spell(MS_BLIND);
update_smart_learn(m_idx, DRS_BLIND);
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF5_CONF(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF5_CONF(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &target_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool resist, saving_throw;
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- resist = p_ptr->resist_conf;
- saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+ resist = target_ptr->resist_conf;
+ saving_throw = (randint0(100 + rlev / 2) < target_ptr->skill_sav);
spell_badstatus_message(m_idx, t_idx,
_("%^sが何かをつぶやくと、頭を悩ます音がした。", "%^s mumbles, and you hear puzzling noises."),
_("%^sが誘惑的な幻覚を作り出した。", "%^s creates a mesmerising illusion."),
if (!resist && !saving_throw)
{
- (void)set_confused(p_ptr->confused + randint0(4) + 4);
+ (void)set_confused(target_ptr, target_ptr->confused + randint0(4) + 4);
}
learn_spell(MS_CONF);
update_smart_learn(m_idx, DRS_CONF);
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF5_SLOW(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF5_SLOW(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &target_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool resist, saving_throw;
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- resist = p_ptr->resist_conf;
- saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+ resist = target_ptr->resist_conf;
+ saving_throw = (randint0(100 + rlev / 2) < target_ptr->skill_sav);
spell_badstatus_message(m_idx, t_idx,
_("%^sがあなたの筋力を吸い取ろうとした!", "%^s drains power from your muscles!"),
_("%^sがあなたの筋力を吸い取ろうとした!", "%^s drains power from your muscles!"),
if (!resist && !saving_throw)
{
- (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+ (void)set_slow(target_ptr, target_ptr->slow + randint0(4) + 4, FALSE);
}
learn_spell(MS_SLOW);
update_smart_learn(m_idx, DRS_FREE);
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF5_HOLD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF5_HOLD(MONSTER_IDX m_idx, player_type *target_ptr, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &target_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool resist, saving_throw;
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- resist = p_ptr->free_act;
- saving_throw = (randint0(100 + rlev / 2) < p_ptr->skill_sav);
+ resist = target_ptr->free_act;
+ saving_throw = (randint0(100 + rlev / 2) < target_ptr->skill_sav);
spell_badstatus_message(m_idx, t_idx,
_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sがあなたの目をじっと見つめた!", "%^s stares deep into your eyes!"),
if (!resist && !saving_throw)
{
- (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
+ (void)set_paralyzed(target_ptr, target_ptr->paralyzed + randint0(4) + 4);
}
learn_spell(MS_SLEEP);
update_smart_learn(m_idx, DRS_FREE);
void spell_RF6_HASTE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
bool see_m = see_monster(m_idx);
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
*/
void spell_RF6_HEAL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, 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];
DEPTH rlev = monster_level_idx(m_idx);
bool seen = (!p_ptr->blind && m_ptr->ml);
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
monspell_message_base(m_idx, t_idx,
_("%^sが何かをつぶやいた。", "%^s mumbles."),
*/
void spell_RF6_INVULNER(MONSTER_IDX m_idx, MONSTER_IDX t_idx, 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];
bool seen = (!p_ptr->blind && m_ptr->ml);
monspell_message_base(m_idx, t_idx,
monster_name(m_idx, m_name);
if (TARGET_TYPE==MONSTER_TO_PLAYER)
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
- if (teleport_barrier(m_idx))
+ if (teleport_barrier(p_ptr, m_idx))
{
if(see_monster(m_idx))
msg_format(_("魔法のバリアが%^sのテレポートを邪魔した。",
if(see_monster(m_idx))
msg_format(_("%^sが瞬時に消えた。", "%^s blinks away."), m_name);
- teleport_away(m_idx, 10, 0L);
+ teleport_away(p_ptr, m_idx, 10, 0L);
if (TARGET_TYPE==MONSTER_TO_PLAYER)
p_ptr->update |= (PU_MONSTERS);
monster_name(m_idx, m_name);
if (TARGET_TYPE==MONSTER_TO_PLAYER)
- disturb(TRUE, TRUE);
- if (teleport_barrier(m_idx))
+ disturb(p_ptr, TRUE, TRUE);
+ if (teleport_barrier(p_ptr, m_idx))
{
if(see_monster(m_idx))
msg_format(_("魔法のバリアが%^sのテレポートを邪魔した。",
if(see_monster(m_idx))
msg_format(_("%^sがテレポートした。", "%^s teleports away."), m_name);
- teleport_away_followable(m_idx);
+ teleport_away_followable(p_ptr, m_idx);
}
}
/*!
* @brief RF6_WORLDの処理。時を止める。 /
+* @param target_ptr プレーヤーへの参照ポインタ
* @param m_idx 呪文を唱えるモンスターID
*/
-HIT_POINT spell_RF6_WORLD(MONSTER_IDX m_idx)
+HIT_POINT spell_RF6_WORLD(player_type *target_ptr, MONSTER_IDX m_idx)
{
- 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_IDX who = 0;
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
- disturb(TRUE, TRUE);
+ disturb(target_ptr, TRUE, TRUE);
if (m_ptr->r_idx == MON_DIO) who = 1;
else if (m_ptr->r_idx == MON_WONG) who = 3;
- if (!set_monster_timewalk(randint1(2) + 2, who, TRUE)) return (FALSE);
+ if (!set_monster_timewalk(target_ptr, randint1(2) + 2, who, TRUE)) return (FALSE);
return who;
}
*/
HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
HIT_POINT dummy_hp, dummy_maxhp;
MONSTER_IDX k;
POSITION dummy_y = m_ptr->fy;
dummy_hp = (m_ptr->hp + 1) / 2;
dummy_maxhp = m_ptr->maxhp / 2;
- if (p_ptr->inside_arena || p_ptr->phase_out || !summon_possible(m_ptr->fy, m_ptr->fx))
+ if (p_ptr->current_floor_ptr->inside_arena || p_ptr->phase_out || !summon_possible(m_ptr->fy, m_ptr->fx))
return -1;
- delete_monster_idx(current_floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].m_idx);
+ delete_monster_idx(p_ptr->current_floor_ptr->grid_array[m_ptr->fy][m_ptr->fx].m_idx);
summon_named_creature(0, dummy_y, dummy_x, MON_BANOR, mode);
- current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
- current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
+ p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
+ p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
summon_named_creature(0, dummy_y, dummy_x, MON_LUPART, mode);
- current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
- current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
+ p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
+ p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
msg_print(_("『バーノール・ルパート』が分裂した!","Banor=Rupart splits in two person!"));
break;
if (!r_info[MON_BANOR].cur_num || !r_info[MON_LUPART].cur_num)
return -1;
- for (k = 1; k < current_floor_ptr->m_max; k++)
+ for (k = 1; k < p_ptr->current_floor_ptr->m_max; k++)
{
- if (current_floor_ptr->m_list[k].r_idx == MON_BANOR || current_floor_ptr->m_list[k].r_idx == MON_LUPART)
+ if (p_ptr->current_floor_ptr->m_list[k].r_idx == MON_BANOR || p_ptr->current_floor_ptr->m_list[k].r_idx == MON_LUPART)
{
- dummy_hp += current_floor_ptr->m_list[k].hp;
- dummy_maxhp += current_floor_ptr->m_list[k].maxhp;
- if (current_floor_ptr->m_list[k].r_idx != m_ptr->r_idx)
+ dummy_hp += p_ptr->current_floor_ptr->m_list[k].hp;
+ dummy_maxhp += p_ptr->current_floor_ptr->m_list[k].maxhp;
+ if (p_ptr->current_floor_ptr->m_list[k].r_idx != m_ptr->r_idx)
{
- dummy_y = current_floor_ptr->m_list[k].fy;
- dummy_x = current_floor_ptr->m_list[k].fx;
+ dummy_y = p_ptr->current_floor_ptr->m_list[k].fy;
+ dummy_x = p_ptr->current_floor_ptr->m_list[k].fx;
}
delete_monster_idx(k);
}
}
summon_named_creature(0, dummy_y, dummy_x, MON_BANORLUPART, mode);
- current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
- current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
+ p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].hp = dummy_hp;
+ p_ptr->current_floor_ptr->m_list[hack_m_idx_ii].maxhp = dummy_maxhp;
msg_print(_("『バーノール』と『ルパート』が合体した!", "Banor and Rupart combine into one!"));
break;
HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
HIT_POINT dam = -1;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
+ monster_type *t_ptr = &p_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
bool monster_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
bool monster_to_monster = (TARGET_TYPE == MONSTER_TO_MONSTER);
- bool direct = player_bold(y, x);
+ bool direct = player_bold(p_ptr, y, x);
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (one_in_(3) || !direct)
{
simple_monspell_message(m_idx, t_idx,
_("%^sは突然急上昇して視界から消えた!", "%^s suddenly go out of your sight!"),
TARGET_TYPE);
- teleport_away(m_idx, 10, TELEPORT_NONMAGICAL);
+ teleport_away(p_ptr, m_idx, 10, TELEPORT_NONMAGICAL);
p_ptr->update |= (PU_MONSTERS);
}
else
dam = damroll(4, 8);
if (monster_to_player || t_idx == p_ptr->riding)
- teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
+ teleport_player_to(p_ptr, m_ptr->fy, m_ptr->fx, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
else
teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE);
/* Mega hack -- this special action deals damage to the player. Therefore the code of "eyeeye" is necessary.
-- henkma
*/
- get_damage = take_hit(DAMAGE_NOESCAPE, dam, m_name, -1);
+ get_damage = take_hit(p_ptr, DAMAGE_NOESCAPE, dam, m_name, -1);
if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
{
GAME_TEXT m_name_self[80];
msg_format(_("攻撃が%s自身を傷つけた!", "The attack of %s has wounded %s!"), m_name, m_name_self);
- project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
- set_tim_eyeeye(p_ptr->tim_eyeeye - 5, TRUE);
+ project(p_ptr, 0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
+ set_tim_eyeeye(p_ptr, p_ptr->tim_eyeeye - 5, TRUE);
}
}
if(monster_to_player && p_ptr->riding)
- mon_take_hit_mon(p_ptr->riding, dam, &dead, &fear, extract_note_dies(real_r_idx(¤t_floor_ptr->m_list[p_ptr->riding])), m_idx);
+ mon_take_hit_mon(p_ptr->riding, dam, &dead, &fear, extract_note_dies(real_r_idx(&p_ptr->current_floor_ptr->m_list[p_ptr->riding])), m_idx);
if(monster_to_monster)
mon_take_hit_mon(t_idx, dam, &dead, &fear, extract_note_dies(real_r_idx(t_ptr)), m_idx);
*/
HIT_POINT spell_RF6_SPECIAL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, 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];
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
switch (m_ptr->r_idx)
{
case MON_OHMU:
*/
void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
+ monster_type *t_ptr = &p_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
simple_monspell_message(m_idx, t_idx,
if (TARGET_TYPE == MONSTER_TO_PLAYER)
{
- teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
+ teleport_player_to(p_ptr, m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
learn_spell(MS_TELE_TO);
}
else if (TARGET_TYPE == MONSTER_TO_MONSTER)
if (!resists_tele)
{
if (t_idx == p_ptr->riding)
- teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
+ teleport_player_to(p_ptr, m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE);
else
teleport_monster_to(t_idx, m_ptr->fy, m_ptr->fx, 100, TELEPORT_PASSIVE);
}
*/
void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &p_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
simple_monspell_message(m_idx, t_idx,
}
learn_spell(MS_TELE_AWAY);
- teleport_player_away(m_idx, 100);
+ teleport_player_away(m_idx, p_ptr, 100);
}
else if (TARGET_TYPE == MONSTER_TO_MONSTER)
{
if (!resists_tele)
{
if (t_idx == p_ptr->riding)
- teleport_player_away(m_idx, MAX_SIGHT * 2 + 5);
+ teleport_player_away(m_idx, p_ptr, MAX_SIGHT * 2 + 5);
else
- teleport_away(t_idx, MAX_SIGHT * 2 + 5, TELEPORT_PASSIVE);
+ teleport_away(p_ptr, t_idx, MAX_SIGHT * 2 + 5, TELEPORT_PASSIVE);
}
set_monster_csleep(t_idx, 0);
*/
void spell_RF6_TELE_LEVEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *t_ptr = &p_ptr->current_floor_ptr->m_list[t_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool resist, saving_throw;
if (!resist && !saving_throw)
{
- teleport_level(0);
+ teleport_level(p_ptr, 0);
}
learn_spell(MS_TELE_LEVEL);
update_smart_learn(m_idx, DRS_NEXUS);
if (!resist && !saving_throw)
{
- teleport_level((t_idx == p_ptr->riding) ? 0 : t_idx);
+ teleport_level(p_ptr, (t_idx == p_ptr->riding) ? 0 : t_idx);
}
}
}
/*!
* @brief RF6_DARKNESSの処理。暗闇or閃光。 /
+* @param target_type プレーヤーへの参照ポインタ
* @param y 対象の地点のy座標
* @param x 対象の地点のx座標
* @param m_idx 呪文を唱えるモンスターID
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF6_DARKNESS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF6_DARKNESS(player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *m_ptr = &target_ptr->current_floor_ptr->m_list[m_idx];
+ monster_type *t_ptr = &target_ptr->current_floor_ptr->m_list[t_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
bool can_use_lite_area = FALSE;
bool monster_to_monster = TARGET_TYPE == MONSTER_TO_MONSTER;
GAME_TEXT t_name[MAX_NLEN];
monster_name(t_idx, t_name);
- 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 (can_use_lite_area)
{
- (void)lite_area(0, 3);
+ (void)lite_area(target_ptr, 0, 3);
}
else
{
learn_spell(MS_DARKNESS);
- (void)unlite_area(0, 3);
+ (void)unlite_area(target_ptr, 0, 3);
}
+
+ return;
}
- else if(monster_to_monster)
+
+ if (!monster_to_monster) return;
+
+ if (can_use_lite_area)
{
- if (can_use_lite_area)
- {
- (void)project(m_idx, 3, y, x, 0, GF_LITE_WEAK, PROJECT_GRID | PROJECT_KILL, -1);
- lite_room(y, x);
- }
- else
- {
- (void)project(m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL, MS_DARKNESS);
- unlite_room(y, x);
- }
+ (void)project(target_ptr, m_idx, 3, y, x, 0, GF_LITE_WEAK, PROJECT_GRID | PROJECT_KILL, -1);
+ lite_room(target_ptr, y, x);
+ }
+ else
+ {
+ (void)project(target_ptr, m_idx, 3, y, x, 0, GF_DARK_WEAK, PROJECT_GRID | PROJECT_KILL, MS_DARKNESS);
+ unlite_room(target_ptr, y, x);
}
}
{
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (p_ptr->blind)
msg_format(_("%^sが何かをつぶやいて邪悪に微笑んだ。",
"%^s casts a spell and cackles evilly."), m_name);
learn_spell(MS_MAKE_TRAP);
- (void)trap_creation(y, x);
+ (void)trap_creation(p_ptr, y, x);
}
/*!
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
msg_format(_("%^sがあなたの記憶を消去しようとしている。",
"%^s tries to blank your mind."), m_name);
{
msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
}
- else if (lose_all_info())
+ else if (lose_all_info(p_ptr))
{
msg_print(_("記憶が薄れてしまった。", "Your memories fade away."));
}
/*!
* @brief RF6_RAISE_DEADの処理。死者復活。 /
+* @param target_ptr プレーヤーへの参照ポインタ
* @param m_idx 呪文を唱えるモンスターID
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @param TARGET_TYPE プレイヤーを対象とする場合MONSTER_TO_PLAYER、モンスターを対象とする場合MONSTER_TO_MONSTER
*/
-void spell_RF6_RAISE_DEAD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
+void spell_RF6_RAISE_DEAD(player_type *target_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx, 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];
monspell_message(m_idx, t_idx,
_("%^sが何かをつぶやいた。", "%^s mumbles."),
_("%^sが死者復活の呪文を唱えた。", "%^s casts a spell to revive corpses."),
TARGET_TYPE);
- animate_dead(m_idx, m_ptr->fy, m_ptr->fx);
+ animate_dead(target_ptr, m_idx, m_ptr->fy, m_ptr->fx);
}
TARGET_TYPE);
if(mon_to_player)
- fire_ball_hide(GF_WATER_FLOW, 0, 3, 8);
+ fire_ball_hide(p_ptr, GF_WATER_FLOW, 0, 3, 8);
else if(mon_to_mon)
- project(t_idx, 8, y, x, 3, GF_WATER_FLOW, PROJECT_GRID | PROJECT_HIDE, -1);
+ project(p_ptr, t_idx, 8, y, x, 3, GF_WATER_FLOW, PROJECT_GRID | PROJECT_HIDE, -1);
}
for (k = 0; k < num; k++)
bool see_either = see_monster(m_idx) || see_monster(t_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
- 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];
DEPTH rlev = monster_level_idx(m_idx);
int count = 0;
monster_name(t_idx, t_name);
monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT)
{
monspell_message(m_idx, t_idx,
else
{
if (mon_to_player || (mon_to_mon && known && see_either))
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (p_ptr->blind)
{
}
if (mon_to_mon && known && !see_either)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
switch (m_ptr->r_idx)
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
if (known && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
void spell_RF6_S_CYBER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
int count = 0;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
msg_print(_("重厚な足音が近くで聞こえる。", "You hear heavy steps nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("多くのものが間近に現れた音がする。", "You hear many things appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
{
int count = 0, k;
int num = 1;
- 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];
DEPTH rlev = monster_level_idx(m_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
}
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
msg_print(_("何かが間近に現れた音がする。", "You hear something appear nearby."));
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
for (k = 0; k < 30; k++)
{
- if (!summon_possible(cy, cx) || !cave_empty_bold(cy, cx))
+ if (!summon_possible(cy, cx) || !cave_empty_bold(p_ptr->current_floor_ptr, cy, cx))
{
int j;
for (j = 100; j > 0; j--)
{
scatter(&cy, &cx, y, x, 2, 0);
- if (cave_empty_bold(cy, cx)) break;
+ if (cave_empty_bold(p_ptr->current_floor_ptr, cy, cx)) break;
}
if (!j) break;
}
- if (!cave_empty_bold(cy, cx)) continue;
+ if (!cave_empty_bold(p_ptr->current_floor_ptr, cy, cx)) continue;
if (summon_named_creature(m_idx, cy, cx, MON_NAZGUL, mode))
{
{
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
DEPTH rlev = monster_level_idx(m_idx);
int k, count = 0;
GAME_TEXT m_name[MAX_NLEN];
monster_name(m_idx, m_name);
- disturb(TRUE, TRUE);
+ disturb(p_ptr, TRUE, TRUE);
if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) &&
((r_info[MON_NAZGUL].cur_num + 2) < r_info[MON_NAZGUL].max_num) &&
}
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
}
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
}
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/*!
void spell_RF6_S_UNIQUE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
{
int count = 0, k;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
DEPTH rlev = monster_level_idx(m_idx);
bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
}
if (monster_near_player(m_idx, t_idx) && !see_monster(t_idx) && count && mon_to_mon)
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
* @param m_idx 呪文を唱えるモンスターID
* @return 攻撃呪文のダメージ、または召喚したモンスターの数を返す。その他の場合0。以降の処理を中断するなら-1を返す。
*/
-HIT_POINT monspell_to_player(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX m_idx)
+HIT_POINT monspell_to_player(int SPELL_NUM, player_type *target_ptr, POSITION y, POSITION x, MONSTER_IDX m_idx)
{
switch (SPELL_NUM)
{
- case RF4_SPELL_START + 0: spell_RF4_SHRIEK(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_SHRIEK */
+ case RF4_SPELL_START + 0: spell_RF4_SHRIEK(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF4_SHRIEK */
case RF4_SPELL_START + 1: break; /* RF4_XXX1 */
- case RF4_SPELL_START + 2: spell_RF4_DISPEL(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF4_DISPEL */
+ case RF4_SPELL_START + 2: spell_RF4_DISPEL(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF4_DISPEL */
case RF4_SPELL_START + 3: return spell_RF4_ROCKET(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_ROCKET */
case RF4_SPELL_START + 4: return spell_RF4_SHOOT(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF4_SHOOT */
case RF4_SPELL_START + 5: break; /* RF4_XXX2 */
case RF5_SPELL_START + 24: return spell_RF5_BO_PLAS(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_PLAS */
case RF5_SPELL_START + 25: return spell_RF5_BO_ICEE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_BO_ICEE */
case RF5_SPELL_START + 26: return spell_RF5_MISSILE(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF5_MISSILE */
- case RF5_SPELL_START + 27: spell_RF5_SCARE(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_SCARE */
- case RF5_SPELL_START + 28: spell_RF5_BLIND(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_BLIND */
- case RF5_SPELL_START + 29: spell_RF5_CONF(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_CONF */
- case RF5_SPELL_START + 30: spell_RF5_SLOW(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_SLOW */
- case RF5_SPELL_START + 31: spell_RF5_HOLD(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF5_HOLD */
+ case RF5_SPELL_START + 27: spell_RF5_SCARE(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF5_SCARE */
+ case RF5_SPELL_START + 28: spell_RF5_BLIND(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF5_BLIND */
+ case RF5_SPELL_START + 29: spell_RF5_CONF(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF5_CONF */
+ case RF5_SPELL_START + 30: spell_RF5_SLOW(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF5_SLOW */
+ case RF5_SPELL_START + 31: spell_RF5_HOLD(m_idx, target_ptr, 0, MONSTER_TO_PLAYER); break; /* RF5_HOLD */
case RF6_SPELL_START + 0: spell_RF6_HASTE(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_HASTE */
case RF6_SPELL_START + 1: return spell_RF6_HAND_DOOM(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF6_HAND_DOOM */
case RF6_SPELL_START + 2: spell_RF6_HEAL(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_HEAL */
case RF6_SPELL_START + 3: spell_RF6_INVULNER(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_INVULNER */
case RF6_SPELL_START + 4: spell_RF6_BLINK(m_idx, MONSTER_TO_PLAYER); break; /* RF6_BLINK */
case RF6_SPELL_START + 5: spell_RF6_TPORT(m_idx, MONSTER_TO_PLAYER); break; /* RF6_TPORT */
- case RF6_SPELL_START + 6: return spell_RF6_WORLD(m_idx); break; /* RF6_WORLD */
+ case RF6_SPELL_START + 6: return spell_RF6_WORLD(target_ptr, m_idx); break; /* RF6_WORLD */
case RF6_SPELL_START + 7: return spell_RF6_SPECIAL(y, x, m_idx, 0, MONSTER_TO_PLAYER); /* RF6_SPECIAL */
case RF6_SPELL_START + 8: spell_RF6_TELE_TO(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_TELE_TO */
case RF6_SPELL_START + 9: spell_RF6_TELE_AWAY(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_TELE_AWAY */
case RF6_SPELL_START + 10: spell_RF6_TELE_LEVEL(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_TELE_LEVEL */
case RF6_SPELL_START + 11: spell_RF6_PSY_SPEAR(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_PSY_SPEAR */
- case RF6_SPELL_START + 12: spell_RF6_DARKNESS(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_DARKNESS */
+ case RF6_SPELL_START + 12: spell_RF6_DARKNESS(target_ptr, y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_DARKNESS */
case RF6_SPELL_START + 13: spell_RF6_TRAPS(y, x, m_idx); break; /* RF6_TRAPS */
case RF6_SPELL_START + 14: spell_RF6_FORGET(m_idx); break; /* RF6_FORGET */
- case RF6_SPELL_START + 15: spell_RF6_RAISE_DEAD(m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_RAISE_DEAD */
+ case RF6_SPELL_START + 15: spell_RF6_RAISE_DEAD(target_ptr, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_RAISE_DEAD */
case RF6_SPELL_START + 16: spell_RF6_S_KIN(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_S_KIN */
case RF6_SPELL_START + 17: spell_RF6_S_CYBER(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_S_CYBER */
case RF6_SPELL_START + 18: spell_RF6_S_MONSTER(y, x, m_idx, 0, MONSTER_TO_PLAYER); break; /* RF6_S_MONSTER */
}
/*!
+* todo モンスターからモンスターへの呪文なのにplayer_typeが引数になり得るのは間違っている……
* @brief モンスターからモンスターへの呪文の振り分け関数。 /
+* @param target_ptr プレーヤーへの参照ポインタ
* @param SPELL_NUM モンスター魔法ID
* @param y 対象の地点のy座標
* @param x 対象の地点のx座標
* @param t_idx 呪文を受けるモンスターID。プレイヤーの場合はdummyで0とする。
* @return 攻撃呪文のダメージ、または召喚したモンスターの数を返す。その他の場合0。以降の処理を中断するなら-1を返す。
*/
-HIT_POINT monspell_to_monster(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx)
+HIT_POINT monspell_to_monster(player_type *target_ptr, int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx)
{
switch (SPELL_NUM)
{
- case RF4_SPELL_START + 0: spell_RF4_SHRIEK(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHRIEK */
+ case RF4_SPELL_START + 0: spell_RF4_SHRIEK(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF4_SHRIEK */
case RF4_SPELL_START + 1: return -1; /* RF4_XXX1 */
- case RF4_SPELL_START + 2: spell_RF4_DISPEL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF4_DISPEL */
+ case RF4_SPELL_START + 2: spell_RF4_DISPEL(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF4_DISPEL */
case RF4_SPELL_START + 3: return spell_RF4_ROCKET(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_ROCKET */
case RF4_SPELL_START + 4: return spell_RF4_SHOOT(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF4_SHOOT */
case RF4_SPELL_START + 5: return -1; /* RF4_XXX2 */
case RF5_SPELL_START + 24: return spell_RF5_BO_PLAS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_PLAS */
case RF5_SPELL_START + 25: return spell_RF5_BO_ICEE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_BO_ICEE */
case RF5_SPELL_START + 26: return spell_RF5_MISSILE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF5_MISSILE */
- case RF5_SPELL_START + 27: spell_RF5_SCARE(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_SCARE */
- case RF5_SPELL_START + 28: spell_RF5_BLIND(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BLIND */
- case RF5_SPELL_START + 29: spell_RF5_CONF(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CONF */
- case RF5_SPELL_START + 30: spell_RF5_SLOW(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_SLOW */
- case RF5_SPELL_START + 31: spell_RF5_HOLD(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF5_HOLD */
+ case RF5_SPELL_START + 27: spell_RF5_SCARE(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF5_SCARE */
+ case RF5_SPELL_START + 28: spell_RF5_BLIND(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF5_BLIND */
+ case RF5_SPELL_START + 29: spell_RF5_CONF(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF5_CONF */
+ case RF5_SPELL_START + 30: spell_RF5_SLOW(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF5_SLOW */
+ case RF5_SPELL_START + 31: spell_RF5_HOLD(m_idx, p_ptr, t_idx, MONSTER_TO_MONSTER); break; /* RF5_HOLD */
case RF6_SPELL_START + 0: spell_RF6_HASTE(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_HASTE */
case RF6_SPELL_START + 1: return spell_RF6_HAND_DOOM(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); /* RF6_HAND_DOOM */
case RF6_SPELL_START + 2: spell_RF6_HEAL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_HEAL */
case RF6_SPELL_START + 9: spell_RF6_TELE_AWAY(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_TELE_AWAY */
case RF6_SPELL_START + 10: spell_RF6_TELE_LEVEL(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_TELE_LEVEL */
case RF6_SPELL_START + 11: return spell_RF6_PSY_SPEAR(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_PSY_SPEAR */
- case RF6_SPELL_START + 12: spell_RF6_DARKNESS(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_DARKNESS */
+ case RF6_SPELL_START + 12: spell_RF6_DARKNESS(target_ptr, y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_DARKNESS */
case RF6_SPELL_START + 13: return -1; /* RF6_TRAPS */
case RF6_SPELL_START + 14: return -1; /* RF6_FORGET */
- case RF6_SPELL_START + 15: spell_RF6_RAISE_DEAD(m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_RAISE_DEAD */
+ case RF6_SPELL_START + 15: spell_RF6_RAISE_DEAD(target_ptr, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_RAISE_DEAD */
case RF6_SPELL_START + 16: spell_RF6_S_KIN(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_KIN */
case RF6_SPELL_START + 17: spell_RF6_S_CYBER(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_CYBER */
case RF6_SPELL_START + 18: spell_RF6_S_MONSTER(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_MONSTER */
case RF6_SPELL_START + 30: spell_RF6_S_AMBERITES(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_AMBERITES */
case RF6_SPELL_START + 31: spell_RF6_S_UNIQUE(y, x, m_idx, t_idx, MONSTER_TO_MONSTER); break; /* RF6_S_UNIQUE */
}
+
return 0;
}
*/
HIT_POINT monspell_damage(int SPELL_NUM, MONSTER_IDX m_idx, int 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];
int hp;
DEPTH rlev = monster_level_idx(m_idx);
int shoot_dd = 1, shoot_ds = 1, shoot_base = 0;
object_type *o_ptr = NULL;
- if (has_melee_weapon(INVEN_RARM)) o_ptr = &p_ptr->inventory_list[INVEN_RARM];
- else if (has_melee_weapon(INVEN_LARM)) o_ptr = &p_ptr->inventory_list[INVEN_LARM];
+ if (has_melee_weapon(p_ptr, INVEN_RARM)) o_ptr = &p_ptr->inventory_list[INVEN_RARM];
+ else if (has_melee_weapon(p_ptr, INVEN_LARM)) o_ptr = &p_ptr->inventory_list[INVEN_LARM];
if (o_ptr)
{
shoot_base = o_ptr->to_d;
}
return monspell_damage_base(SPELL_NUM, hp, plev * 2, FALSE, shoot_dd, shoot_ds, shoot_base, TYPE);
-}
\ No newline at end of file
+}