OSDN Git Service

[Refactor] #38997 wall_stone()、destroy_doors_touch()、disarm_traps_touch()、sleep_monst...
[hengband/hengband.git] / src / mspells4.c
index 6f55fcc..8fdd62e 100644 (file)
@@ -37,8 +37,8 @@
 */
 bool monster_near_player(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
 {
-       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
-       monster_type    *t_ptr = &current_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);
 }
 
@@ -49,7 +49,7 @@ bool monster_near_player(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
 */
 bool see_monster(MONSTER_IDX m_idx)
 {
-       monster_type *m_ptr = &current_floor_ptr->m_list[m_idx];
+       monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
        return is_seen(m_ptr);
 }
 
@@ -60,11 +60,11 @@ bool see_monster(MONSTER_IDX m_idx)
 */
 bool spell_learnable(MONSTER_IDX m_idx)
 {
-       monster_type *m_ptr = &current_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);
 }
 
@@ -76,7 +76,7 @@ bool spell_learnable(MONSTER_IDX m_idx)
 BIT_FLAGS monster_u_mode(MONSTER_IDX m_idx)
 {
        BIT_FLAGS u_mode = 0L;
-       monster_type *m_ptr = &current_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;
@@ -104,7 +104,7 @@ static void monspell_message_base(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr
        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)
        {
@@ -126,7 +126,7 @@ static void monspell_message_base(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr
        }
 
        if (mon_to_mon && known && !see_either)
-               current_floor_ptr->monster_noise = TRUE;
+               p_ptr->current_floor_ptr->monster_noise = TRUE;
 }
 
 /*!
@@ -162,8 +162,11 @@ void simple_monspell_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1,
  * @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."),
@@ -171,7 +174,7 @@ void spell_RF4_SHRIEK(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
        {
-               aggravate_monsters(m_idx);
+               aggravate_monsters(target_ptr, m_idx);
        }
        else if (TARGET_TYPE == MONSTER_TO_MONSTER)
        {
@@ -185,7 +188,7 @@ void spell_RF4_SHRIEK(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  * @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);
@@ -199,12 +202,12 @@ void spell_RF4_DISPEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
        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(_("弱い者いじめは止めるんだ!", ""));
@@ -214,7 +217,7 @@ void spell_RF4_DISPEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        }
        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);
        }
 }
@@ -286,7 +289,7 @@ HIT_POINT spell_RF4_BREATH(int GF_TYPE, POSITION y, POSITION x, MONSTER_IDX m_id
        HIT_POINT dam, ms_type, drs_type = 0;
        concptr type_s;
        bool smart_learn_aux = TRUE;
-       monster_type    *m_ptr = &current_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);
@@ -439,7 +442,7 @@ HIT_POINT spell_RF4_BREATH(int GF_TYPE, POSITION y, POSITION x, MONSTER_IDX m_id
        }
 
        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)
        {
@@ -468,7 +471,7 @@ HIT_POINT spell_RF4_BREATH(int GF_TYPE, POSITION y, POSITION x, MONSTER_IDX m_id
        }
 
        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);
@@ -602,7 +605,7 @@ HIT_POINT spell_RF5_BA_ELEC(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 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 = &current_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)
        {
@@ -823,7 +826,7 @@ HIT_POINT spell_RF5_DRAIN_MANA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTE
 
        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))
        { 
@@ -850,7 +853,7 @@ HIT_POINT spell_RF5_DRAIN_MANA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTE
 */
 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 = &current_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];
@@ -860,7 +863,7 @@ HIT_POINT spell_RF5_MIND_BLAST(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTE
 
        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
@@ -887,7 +890,7 @@ HIT_POINT spell_RF5_MIND_BLAST(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTE
 */
 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 = &current_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];
@@ -897,7 +900,7 @@ HIT_POINT spell_RF5_BRAIN_SMASH(POSITION y, POSITION x, MONSTER_IDX m_idx, MONST
 
        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
@@ -936,7 +939,7 @@ void spell_RF5_CAUSE(int GF_TYPE, HIT_POINT dam, POSITION y, POSITION x, MONSTER
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
        {
-               disturb(TRUE, TRUE);
+               disturb(p_ptr, TRUE, TRUE);
                if (p_ptr->blind)
                        msg_format(msg1, m_name);
                else
@@ -950,7 +953,7 @@ void spell_RF5_CAUSE(int GF_TYPE, HIT_POINT dam, POSITION y, POSITION x, MONSTER
                }
                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);
@@ -1384,7 +1387,7 @@ void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1,
 
        if (TARGET_TYPE == MONSTER_TO_PLAYER)
        {
-               disturb(TRUE, TRUE);
+               disturb(p_ptr, TRUE, TRUE);
                if (p_ptr->blind)
                        msg_format(msg1, m_name);
                else
@@ -1409,7 +1412,7 @@ void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1,
                        }
                        else
                        {
-                               current_floor_ptr->monster_noise = TRUE;
+                               p_ptr->current_floor_ptr->monster_noise = TRUE;
                        }
                }
 
@@ -1435,17 +1438,17 @@ void spell_badstatus_message(MONSTER_IDX m_idx, MONSTER_IDX t_idx, concptr msg1,
  * @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 = &current_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."),
@@ -1455,7 +1458,7 @@ void spell_RF5_SCARE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                if (!resist && !saving_throw)
                {
-                       (void)set_afraid(p_ptr, 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);
@@ -1485,17 +1488,17 @@ void spell_RF5_SCARE(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  * @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 = &current_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!"),
@@ -1505,7 +1508,7 @@ void spell_RF5_BLIND(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                if (!resist && !saving_throw)
                {
-                       (void)set_blind(p_ptr, 12 + randint0(4));
+                       (void)set_blind(target_ptr, 12 + randint0(4));
                }
                learn_spell(MS_BLIND);
                update_smart_learn(m_idx, DRS_BLIND);
@@ -1548,17 +1551,17 @@ void spell_RF5_BLIND(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  * @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 = &current_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."),
@@ -1568,7 +1571,7 @@ void spell_RF5_CONF(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                if (!resist && !saving_throw)
                {
-                       (void)set_confused(p_ptr, 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);
@@ -1598,17 +1601,17 @@ void spell_RF5_CONF(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  * @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 = &current_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!"),
@@ -1618,7 +1621,7 @@ void spell_RF5_SLOW(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                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);
@@ -1661,17 +1664,17 @@ void spell_RF5_SLOW(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
  * @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 = &current_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!"),
@@ -1681,7 +1684,7 @@ void spell_RF5_HOLD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                if (!resist && !saving_throw)
                {
-                       (void)set_paralyzed(p_ptr, 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);
@@ -1714,7 +1717,7 @@ void spell_RF5_HOLD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 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 = &current_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);
 
@@ -1773,13 +1776,13 @@ HIT_POINT spell_RF6_HAND_DOOM(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 */
 void spell_RF6_HEAL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &current_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."),
@@ -1839,7 +1842,7 @@ void spell_RF6_HEAL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_INVULNER(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &current_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,
@@ -1863,9 +1866,9 @@ void spell_RF6_BLINK(MONSTER_IDX m_idx, int TARGET_TYPE)
        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のテレポートを邪魔した。",
@@ -1876,7 +1879,7 @@ void spell_RF6_BLINK(MONSTER_IDX m_idx, int TARGET_TYPE)
                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);
@@ -1894,8 +1897,8 @@ void spell_RF6_TPORT(MONSTER_IDX m_idx, int TARGET_TYPE)
        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のテレポートを邪魔した。",
@@ -1906,25 +1909,26 @@ void spell_RF6_TPORT(MONSTER_IDX m_idx, int TARGET_TYPE)
                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 = &current_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;
 }
 
@@ -1934,7 +1938,7 @@ HIT_POINT spell_RF6_WORLD(MONSTER_IDX m_idx)
 */
 HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
 {
-       monster_type *m_ptr = &current_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;
@@ -1947,16 +1951,16 @@ HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
                        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;
@@ -1969,23 +1973,23 @@ HIT_POINT spell_RF6_SPECIAL_BANORLUPART(MONSTER_IDX m_idx)
                        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;
@@ -2037,16 +2041,16 @@ HIT_POINT spell_RF6_SPECIAL_ROLENTO(POSITION y, POSITION x, MONSTER_IDX m_idx, M
 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 = &current_floor_ptr->m_list[m_idx];
-       monster_type    *t_ptr = &current_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,
@@ -2054,7 +2058,7 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
                        _("%^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
@@ -2070,7 +2074,7 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
                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);
 
@@ -2099,7 +2103,7 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
                        /* 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];
@@ -2108,13 +2112,13 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 
                                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(&current_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);
@@ -2133,10 +2137,10 @@ HIT_POINT spell_RF6_SPECIAL_B(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 */
 HIT_POINT spell_RF6_SPECIAL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &current_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:
@@ -2173,8 +2177,8 @@ HIT_POINT spell_RF6_SPECIAL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_I
 */
 void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *m_ptr = &current_floor_ptr->m_list[m_idx];
-       monster_type    *t_ptr = &current_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,
@@ -2184,7 +2188,7 @@ void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
        
        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)
@@ -2218,7 +2222,7 @@ void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
                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);
                }
@@ -2236,7 +2240,7 @@ void spell_RF6_TELE_TO(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &current_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,
@@ -2255,7 +2259,7 @@ void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
                }
 
                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)
        {
@@ -2288,9 +2292,9 @@ void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
                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);
@@ -2306,7 +2310,7 @@ void spell_RF6_TELE_AWAY(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 */
 void spell_RF6_TELE_LEVEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 {
-       monster_type    *t_ptr = &current_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;
@@ -2324,7 +2328,7 @@ void spell_RF6_TELE_LEVEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                if (!resist && !saving_throw)
                {
-                       teleport_level(0);
+                       teleport_level(p_ptr, 0);
                }
                learn_spell(MS_TELE_LEVEL);
                update_smart_learn(m_idx, DRS_NEXUS);
@@ -2344,7 +2348,7 @@ void spell_RF6_TELE_LEVEL(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
 
                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);
                }
        }
 }
@@ -2375,16 +2379,17 @@ HIT_POINT spell_RF6_PSY_SPEAR(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER
 
 /*!
 * @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 = &current_floor_ptr->m_list[m_idx];
-       monster_type    *t_ptr = &current_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;
@@ -2392,7 +2397,7 @@ void spell_RF6_DARKNESS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        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;
@@ -2432,26 +2437,28 @@ void spell_RF6_DARKNESS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        {
                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);
        }
 }
 
@@ -2465,7 +2472,7 @@ void spell_RF6_TRAPS(POSITION y, POSITION x, MONSTER_IDX m_idx)
 {
        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が何かをつぶやいて邪悪に微笑んだ。",
@@ -2475,7 +2482,7 @@ void spell_RF6_TRAPS(POSITION y, POSITION x, MONSTER_IDX m_idx)
                "%^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);
 }
 
 /*!
@@ -2488,7 +2495,7 @@ void spell_RF6_FORGET(MONSTER_IDX m_idx)
        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);
@@ -2497,7 +2504,7 @@ void spell_RF6_FORGET(MONSTER_IDX m_idx)
        {
                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
        }
-       else if (lose_all_info())
+       else if (lose_all_info(p_ptr))
        {
                msg_print(_("記憶が薄れてしまった。", "Your memories fade away."));
        }
@@ -2507,13 +2514,14 @@ void spell_RF6_FORGET(MONSTER_IDX m_idx)
 
 /*!
 * @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 = &current_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."),
@@ -2521,7 +2529,7 @@ void spell_RF6_RAISE_DEAD(MONSTER_IDX m_idx, MONSTER_IDX t_idx, int TARGET_TYPE)
                _("%^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);
 }
 
 
@@ -2589,9 +2597,9 @@ MONSTER_NUMBER summon_Guardian(POSITION y, POSITION x, int rlev, MONSTER_IDX m_i
                        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++)
@@ -2675,7 +2683,7 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
        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 = &current_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;
@@ -2684,7 +2692,7 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
        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,
@@ -2696,7 +2704,7 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
        else
        {
                if (mon_to_player || (mon_to_mon && known && see_either))
-                       disturb(TRUE, TRUE);
+                       disturb(p_ptr, TRUE, TRUE);
 
                if (p_ptr->blind)
                {
@@ -2713,7 +2721,7 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
                }
 
                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)
@@ -2750,7 +2758,7 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
                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;
 }
 
 /*!
@@ -2765,7 +2773,7 @@ void spell_RF6_S_KIN(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
 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 = &current_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);
@@ -2789,7 +2797,7 @@ void spell_RF6_S_CYBER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
                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;
 }
 
 /*!
@@ -2827,7 +2835,7 @@ void spell_RF6_S_MONSTER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
                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;
 }
 
 /*!
@@ -2865,7 +2873,7 @@ void spell_RF6_S_MONSTERS(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX
                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;
 }
 
 /*!
@@ -2899,7 +2907,7 @@ void spell_RF6_S_ANT(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_id
                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;
 }
 
 /*!
@@ -2933,7 +2941,7 @@ void spell_RF6_S_SPIDER(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
                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;
 }
 
 /*!
@@ -2967,7 +2975,7 @@ void spell_RF6_S_HOUND(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
                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;
 }
 
 /*!
@@ -3001,7 +3009,7 @@ void spell_RF6_S_HYDRA(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
                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;
 }
 
 /*!
@@ -3017,7 +3025,7 @@ void spell_RF6_S_ANGEL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
 {
        int count = 0, k;
        int num = 1;
-       monster_type    *m_ptr = &current_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);
@@ -3050,7 +3058,7 @@ void spell_RF6_S_ANGEL(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
        }
        
        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;
 }
 
 /*!
@@ -3083,7 +3091,7 @@ void spell_RF6_S_DEMON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t_
                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;
 }
 
 /*!
@@ -3116,7 +3124,7 @@ void spell_RF6_S_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
                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;
 }
 
 /*!
@@ -3149,7 +3157,7 @@ void spell_RF6_S_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
                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;
 }
 
 /*!
@@ -3177,17 +3185,17 @@ MONSTER_NUMBER summon_NAZGUL(POSITION y, POSITION x, MONSTER_IDX m_idx)
 
        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))
                {
@@ -3223,13 +3231,13 @@ void spell_RF6_S_HI_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
 {
        bool mon_to_mon = (TARGET_TYPE == MONSTER_TO_MONSTER);
        bool mon_to_player = (TARGET_TYPE == MONSTER_TO_PLAYER);
-       monster_type    *m_ptr = &current_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) &&
@@ -3260,7 +3268,7 @@ void spell_RF6_S_HI_UNDEAD(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
        }
        
        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;
 }
 
 /*!
@@ -3300,7 +3308,7 @@ void spell_RF6_S_HI_DRAGON(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
        }
        
        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;
 }
 
 /*!
@@ -3336,7 +3344,7 @@ void spell_RF6_S_AMBERITES(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
        }
        
        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;
 }
 
 /*!
@@ -3351,7 +3359,7 @@ void spell_RF6_S_AMBERITES(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_ID
 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 = &current_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);
@@ -3388,7 +3396,7 @@ void spell_RF6_S_UNIQUE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
        }
        
        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;
 }
 
 
@@ -3401,13 +3409,13 @@ void spell_RF6_S_UNIQUE(POSITION y, POSITION x, MONSTER_IDX m_idx, MONSTER_IDX t
 * @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 */
@@ -3464,27 +3472,27 @@ HIT_POINT monspell_to_player(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX
        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 */
@@ -3506,7 +3514,9 @@ HIT_POINT monspell_to_player(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX
 }
 
 /*!
+* todo モンスターからモンスターへの呪文なのにplayer_typeが引数になり得るのは間違っている……
 * @brief モンスターからモンスターへの呪文の振り分け関数。 /
+* @param target_ptr プレーヤーへの参照ポインタ
 * @param SPELL_NUM モンスター魔法ID
 * @param y 対象の地点のy座標
 * @param x 対象の地点のx座標
@@ -3514,13 +3524,13 @@ HIT_POINT monspell_to_player(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX
 * @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 */
@@ -3577,11 +3587,11 @@ HIT_POINT monspell_to_monster(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX
        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 */
@@ -3594,10 +3604,10 @@ HIT_POINT monspell_to_monster(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX
        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 */
@@ -3615,6 +3625,7 @@ HIT_POINT monspell_to_monster(int SPELL_NUM, POSITION y, POSITION x, MONSTER_IDX
        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;
 }
 
@@ -4076,7 +4087,7 @@ HIT_POINT monspell_damage_base(int SPELL_NUM, int hp, int rlev, bool powerful, i
 */
 HIT_POINT monspell_damage(int SPELL_NUM, MONSTER_IDX m_idx, int TYPE)
 {
-       monster_type    *m_ptr = &current_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);
@@ -4126,8 +4137,8 @@ HIT_POINT monspell_bluemage_damage(int SPELL_NUM, PLAYER_LEVEL plev, int TYPE)
        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)
        {
@@ -4136,4 +4147,4 @@ HIT_POINT monspell_bluemage_damage(int SPELL_NUM, PLAYER_LEVEL plev, int TYPE)
                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
+}