OSDN Git Service

[Refactor] #38997 in_bound() に floor_type * 引数を追加. / Add floor_type * argument to...
[hengbandforosx/hengbandosx.git] / src / spells1.c
index 1742fb0..9b29aa5 100644 (file)
@@ -24,6 +24,7 @@
 #include "player-damage.h"
 #include "player-effects.h"
 #include "player-race.h"
+#include "player-class.h"
 
 #include "monster.h"
 #include "monster-status.h"
@@ -43,6 +44,7 @@
 #include "player-status.h"
 #include "player-move.h"
 #include "realm-hex.h"
+#include "realm-song.h"
 #include "object-hook.h"
 #include "object-broken.h"
 #include "object-flavor.h"
@@ -56,6 +58,7 @@
 
 static int rakubadam_m; /*!< 振り落とされた際のダメージ量 */
 static int rakubadam_p; /*!< 落馬した際のダメージ量 */
+bool sukekaku;
 
 int project_length = 0; /*!< 投射の射程距離 */
 
@@ -572,7 +575,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                g_ptr->info |= (CAVE_GLOW);
                                note_spot(y, x);
                                lite_spot(y, x);
-                               update_local_illumination(y, x);
+                               update_local_illumination(p_ptr, y, x);
 
                                /* Observe */
                                if (player_can_see_bold(y, x)) obvious = TRUE;
@@ -583,7 +586,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                                if (p_ptr->special_defense & NINJA_S_STEALTH)
                                {
-                                       if (player_bold(y, x)) set_superstealth(FALSE);
+                                       if (player_bold(y, x)) set_superstealth(p_ptr, FALSE);
                                }
                        }
 
@@ -594,7 +597,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                case GF_DARK_WEAK:
                case GF_DARK:
                {
-                       bool do_dark = !p_ptr->inside_battle && !is_mirror_grid(g_ptr);
+                       bool do_dark = !p_ptr->phase_out && !is_mirror_grid(g_ptr);
                        int j;
 
                        /* Turn off the light. */
@@ -635,7 +638,7 @@ static bool project_f(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                                lite_spot(y, x);
 
-                               update_local_illumination(y, x);
+                               update_local_illumination(p_ptr, y, x);
 
                                if (player_can_see_bold(y, x)) obvious = TRUE;
 
@@ -1151,7 +1154,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
        bool obvious = FALSE;
 
        /* Can the player know about this effect? */
-       bool known = ((m_ptr->cdis <= MAX_SIGHT) || p_ptr->inside_battle);
+       bool known = ((m_ptr->cdis <= MAX_SIGHT) || p_ptr->phase_out);
 
        /* Were the effects "irrelevant"? */
        bool skipped = FALSE;
@@ -1218,7 +1221,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
        /* Get the monster possessive ("his"/"her"/"its") */
        monster_desc(m_poss, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE);
 
-       if (p_ptr->riding && (g_ptr->m_idx == p_ptr->riding)) disturb(TRUE, TRUE);
+       if (p_ptr->riding && (g_ptr->m_idx == p_ptr->riding)) disturb(p_ptr, TRUE, TRUE);
 
        if (r_ptr->flagsr & RFR_RES_ALL &&
                typ != GF_OLD_CLONE && typ != GF_STAR_HEAL && typ != GF_OLD_HEAL
@@ -1727,7 +1730,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                                                        "%^ss corrupted mind backlashes your attack!")), m_name);
 
                                                /* Saving throw */
-                                               if ((randint0(100 + r_ptr->level / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW())
+                                               if ((randint0(100 + r_ptr->level / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW(p_ptr))
                                                {
                                                        msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                                }
@@ -1735,28 +1738,28 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                                {
                                                        /* Injure +/- confusion */
                                                        monster_desc(killer, m_ptr, MD_WRONGDOER_NAME);
-                                                       take_hit(DAMAGE_ATTACK, dam, killer, -1);  /* has already been /3 */
-                                                       if (one_in_(4) && !CHECK_MULTISHADOW())
+                                                       take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, -1);  /* has already been /3 */
+                                                       if (one_in_(4) && !CHECK_MULTISHADOW(p_ptr))
                                                        {
                                                                switch (randint1(4))
                                                                {
                                                                        case 1:
-                                                                               set_confused(p_ptr->confused + 3 + randint1(dam));
+                                                                               set_confused(p_ptr, p_ptr->confused + 3 + randint1(dam));
                                                                                break;
                                                                        case 2:
-                                                                               set_stun(p_ptr->stun + randint1(dam));
+                                                                               set_stun(p_ptr, p_ptr->stun + randint1(dam));
                                                                                break;
                                                                        case 3:
                                                                        {
                                                                                if (r_ptr->flags3 & RF3_NO_FEAR)
                                                                                        note = _("には効果がなかった。", " is unaffected.");
                                                                                else
-                                                                                       set_afraid(p_ptr->afraid + 3 + randint1(dam));
+                                                                                       set_afraid(p_ptr, p_ptr->afraid + 3 + randint1(dam));
                                                                                break;
                                                                        }
                                                                        default:
                                                                                if (!p_ptr->free_act)
-                                                                                       (void)set_paralyzed(p_ptr->paralyzed + randint1(dam));
+                                                                                       (void)set_paralyzed(p_ptr, p_ptr->paralyzed + randint1(dam));
                                                                                break;
                                                                }
                                                        }
@@ -1817,7 +1820,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                                        (seen ? "%^s's corrupted mind backlashes your attack!" : 
                                                                        "%^ss corrupted mind backlashes your attack!")), m_name);
                                                /* Saving throw */
-                                               if ((randint0(100 + r_ptr->level / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW())
+                                               if ((randint0(100 + r_ptr->level / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW(p_ptr))
                                                {
                                                        msg_print(_("あなたは効力を跳ね返した!", "You resist the effects!"));
                                                }
@@ -1825,7 +1828,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                                {
                                                        /* Injure + mana drain */
                                                        monster_desc(killer, m_ptr, MD_WRONGDOER_NAME);
-                                                       if (!CHECK_MULTISHADOW())
+                                                       if (!CHECK_MULTISHADOW(p_ptr))
                                                        {
                                                                msg_print(_("超能力パワーを吸いとられた!", "Your psychic energy is drained!"));
                                                                p_ptr->csp -= damroll(5, dam) / 2;
@@ -1833,7 +1836,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                                                p_ptr->redraw |= PR_MANA;
                                                                p_ptr->window |= (PW_SPELL);
                                                        }
-                                                       take_hit(DAMAGE_ATTACK, dam, killer, -1);  /* has already been /3 */
+                                                       take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, -1);  /* has already been /3 */
                                                }
                                                dam = 0;
                                        }
@@ -1936,17 +1939,17 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                                        switch (randint1(4))
                                                        {
                                                                case 1:
-                                                                       set_stun(p_ptr->stun + dam / 2);
+                                                                       set_stun(p_ptr, p_ptr->stun + dam / 2);
                                                                        break;
                                                                case 2:
-                                                                       set_confused(p_ptr->confused + dam / 2);
+                                                                       set_confused(p_ptr, p_ptr->confused + dam / 2);
                                                                        break;
                                                                default:
                                                                {
                                                                        if (r_ptr->flags3 & RF3_NO_FEAR)
                                                                                note = _("には効果がなかった。", " is unaffected.");
                                                                        else
-                                                                               set_afraid(p_ptr->afraid + dam);
+                                                                               set_afraid(p_ptr, p_ptr->afraid + dam);
                                                                }
                                                        }
                                                }
@@ -2163,29 +2166,29 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                                if (!who)
                                {
-                                       chg_virtue(V_VITALITY, 1);
+                                       chg_virtue(p_ptr, V_VITALITY, 1);
 
                                        if (r_ptr->flags1 & RF1_UNIQUE)
-                                               chg_virtue(V_INDIVIDUALISM, 1);
+                                               chg_virtue(p_ptr, V_INDIVIDUALISM, 1);
 
                                        if (is_friendly(m_ptr))
-                                               chg_virtue(V_HONOUR, 1);
+                                               chg_virtue(p_ptr, V_HONOUR, 1);
                                        else if (!(r_ptr->flags3 & RF3_EVIL))
                                        {
                                                if (r_ptr->flags3 & RF3_GOOD)
-                                                       chg_virtue(V_COMPASSION, 2);
+                                                       chg_virtue(p_ptr, V_COMPASSION, 2);
                                                else
-                                                       chg_virtue(V_COMPASSION, 1);
+                                                       chg_virtue(p_ptr, V_COMPASSION, 1);
                                        }
 
                                        if (r_ptr->flags3 & RF3_ANIMAL)
-                                               chg_virtue(V_NATURE, 1);
+                                               chg_virtue(p_ptr, V_NATURE, 1);
                                }
 
                                if (m_ptr->r_idx == MON_LEPER)
                                {
                                        heal_leper = TRUE;
-                                       if (!who) chg_virtue(V_COMPASSION, 5);
+                                       if (!who) chg_virtue(p_ptr, V_COMPASSION, 5);
                                }
 
                                /* Redraw (later) if needed */
@@ -2214,9 +2217,9 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                if (!who)
                                {
                                        if (r_ptr->flags1 & RF1_UNIQUE)
-                                               chg_virtue(V_INDIVIDUALISM, 1);
+                                               chg_virtue(p_ptr, V_INDIVIDUALISM, 1);
                                        if (is_friendly(m_ptr))
-                                               chg_virtue(V_HONOUR, 1);
+                                               chg_virtue(p_ptr, V_HONOUR, 1);
                                }
 
                                /* No "real" damage */
@@ -2338,13 +2341,13 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                        case GF_CHARM:
                        {
                                int vir;
-                               vir = virtue_number(V_HARMONY);
+                               vir = virtue_number(p_ptr, V_HARMONY);
                                if (vir)
                                {
                                        dam += p_ptr->virtues[vir-1]/10;
                                }
 
-                               vir = virtue_number(V_INDIVIDUALISM);
+                               vir = virtue_number(p_ptr, V_INDIVIDUALISM);
                                if (vir)
                                {
                                        dam -= p_ptr->virtues[vir-1]/20;
@@ -2373,9 +2376,9 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                        note = _("は突然友好的になったようだ!", " suddenly seems friendly!");
                                        set_pet(m_ptr);
 
-                                       chg_virtue(V_INDIVIDUALISM, -1);
+                                       chg_virtue(p_ptr, V_INDIVIDUALISM, -1);
                                        if (r_ptr->flags3 & RF3_ANIMAL)
-                                               chg_virtue(V_NATURE, 1);
+                                               chg_virtue(p_ptr, V_NATURE, 1);
                                }
 
                                /* No "real" damage */
@@ -2389,13 +2392,13 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                int vir;
                                if (seen) obvious = TRUE;
 
-                               vir = virtue_number(V_UNLIFE);
+                               vir = virtue_number(p_ptr, V_UNLIFE);
                                if (vir)
                                {
                                        dam += p_ptr->virtues[vir-1]/10;
                                }
 
-                               vir = virtue_number(V_INDIVIDUALISM);
+                               vir = virtue_number(p_ptr, V_INDIVIDUALISM);
                                if (vir)
                                {
                                        dam -= p_ptr->virtues[vir-1]/20;
@@ -2432,13 +2435,13 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                int vir;
                                if (seen) obvious = TRUE;
 
-                               vir = virtue_number(V_UNLIFE);
+                               vir = virtue_number(p_ptr, V_UNLIFE);
                                if (vir)
                                {
                                        dam += p_ptr->virtues[vir-1]/10;
                                }
 
-                               vir = virtue_number(V_INDIVIDUALISM);
+                               vir = virtue_number(p_ptr, V_INDIVIDUALISM);
                                if (vir)
                                {
                                        dam -= p_ptr->virtues[vir-1]/20;
@@ -2475,13 +2478,13 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                int vir;
                                if (seen) obvious = TRUE;
 
-                               vir = virtue_number(V_NATURE);
+                               vir = virtue_number(p_ptr, V_NATURE);
                                if (vir)
                                {
                                        dam += p_ptr->virtues[vir-1]/10;
                                }
 
-                               vir = virtue_number(V_INDIVIDUALISM);
+                               vir = virtue_number(p_ptr, V_INDIVIDUALISM);
                                if (vir)
                                {
                                        dam -= p_ptr->virtues[vir-1]/20;
@@ -2507,7 +2510,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                        note = _("はなついた。", " is tamed!");
                                        set_pet(m_ptr);
                                        if (r_ptr->flags3 & RF3_ANIMAL)
-                                               chg_virtue(V_NATURE, 1);
+                                               chg_virtue(p_ptr, V_NATURE, 1);
                                }
 
                                /* No "real" damage */
@@ -2520,16 +2523,16 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                        {
                                int vir;
 
-                               vir = virtue_number(V_UNLIFE);
+                               vir = virtue_number(p_ptr, V_UNLIFE);
                                if (seen) obvious = TRUE;
 
-                               vir = virtue_number(V_UNLIFE);
+                               vir = virtue_number(p_ptr, V_UNLIFE);
                                if (vir)
                                {
                                        dam -= p_ptr->virtues[vir-1]/10;
                                }
 
-                               vir = virtue_number(V_INDIVIDUALISM);
+                               vir = virtue_number(p_ptr, V_INDIVIDUALISM);
                                if (vir)
                                {
                                        dam -= p_ptr->virtues[vir-1]/20;
@@ -2557,7 +2560,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                        note = _("を支配した。", " is tamed!");
                                        set_pet(m_ptr);
                                        if (r_ptr->flags3 & RF3_ANIMAL)
-                                               chg_virtue(V_NATURE, 1);
+                                               chg_virtue(p_ptr, V_NATURE, 1);
                                }
 
                                /* No "real" damage */
@@ -3119,7 +3122,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                        else
                                        {
                                                msg_format(_("%sから精神エネルギーを吸いとった。", "You draw psychic energy from %s."), m_name);
-                                               (void)hp_player(dam);
+                                               (void)hp_player(p_ptr, dam);
                                        }
                                }
                                else
@@ -3341,7 +3344,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                        cap_nickname = m_ptr->nickname; /* Quark transfer */
                                        if (g_ptr->m_idx == p_ptr->riding)
                                        {
-                                               if (rakuba(-1, FALSE))
+                                               if (rakuba(p_ptr, -1, FALSE))
                                                {
                                                        msg_format(_("地面に落とされた。", "You have fallen from %s."), m_name);
                                                }
@@ -3363,7 +3366,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                        case GF_ATTACK:
                        {
                                /* Return this monster's death */
-                               return py_attack(y, x, dam);
+                               return py_attack(p_ptr, y, x, dam);
                        }
 
                        /* Sleep (Use "dam" as "power") */
@@ -3473,7 +3476,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                                if (genocide_aux(g_ptr->m_idx, dam, !who, (r_ptr->level + 1) / 2, _("モンスター消滅", "Genocide One")))
                                {
                                        if (seen_msg) msg_format(_("%sは消滅した!", "%^s disappered!"), m_name);
-                                       chg_virtue(V_VITALITY, -1);
+                                       chg_virtue(p_ptr, V_VITALITY, -1);
                                        return TRUE;
                                }
 
@@ -3610,15 +3613,15 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
        if (p_ptr->riding && (g_ptr->m_idx == p_ptr->riding)) do_poly = FALSE;
 
        /* "Unique" and "quest" monsters can only be "killed" by the player. */
-       if (((r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & RF7_NAZGUL)) && !p_ptr->inside_battle)
+       if (((r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & RF7_NAZGUL)) && !p_ptr->phase_out)
        {
                if (who && (dam > m_ptr->hp)) dam = m_ptr->hp;
        }
 
        if (!who && slept)
        {
-               if (!(r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(V_COMPASSION, -1);
-               if (!(r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(V_HONOUR, -1);
+               if (!(r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(p_ptr, V_COMPASSION, -1);
+               if (!(r_ptr->flags3 & RF3_EVIL) || one_in_(5)) chg_virtue(p_ptr, V_HONOUR, -1);
        }
 
        /* Modify the damage */
@@ -3736,7 +3739,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
                        note = _("が消え去った!", " disappears!");
 
-                       if (!who) chg_virtue(V_VALOUR, -1);
+                       if (!who) chg_virtue(p_ptr, V_VALOUR, -1);
 
                        /* Teleport */
                        teleport_away(g_ptr->m_idx, do_dist,
@@ -3845,7 +3848,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                        char m2_name[MAX_NLEN];
 
                        monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE);
-                       do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name);
+                       exe_write_diary(p_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name);
                }
 
                delete_monster_idx(g_ptr->m_idx);
@@ -3898,7 +3901,7 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
                blood_curse_to_enemy(who);
        }
 
-       if (p_ptr->inside_battle)
+       if (p_ptr->phase_out)
        {
                p_ptr->health_who = g_ptr->m_idx;
                p_ptr->redraw |= (PR_HEALTH);
@@ -4068,7 +4071,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
 
                project(0, 0, t_y, t_x, dam, typ, (PROJECT_STOP|PROJECT_KILL|PROJECT_REFLECTABLE), monspell);
 
-               disturb(TRUE, TRUE);
+               disturb(p_ptr, TRUE, TRUE);
                return TRUE;
        }
 
@@ -4155,16 +4158,16 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        if (p_ptr->resist_pois) dam = (dam + 2) / 3;
                        if (double_resist) dam = (dam + 2) / 3;
 
-                       if ((!(double_resist || p_ptr->resist_pois)) && one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW())
+                       if ((!(double_resist || p_ptr->resist_pois)) && one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               do_dec_stat(A_CON);
+                               do_dec_stat(p_ptr, A_CON);
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
 
-                       if (!(double_resist || p_ptr->resist_pois) && !CHECK_MULTISHADOW())
+                       if (!(double_resist || p_ptr->resist_pois) && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               set_poisoned(p_ptr->poisoned + randint0(dam) + 10);
+                               set_poisoned(p_ptr, p_ptr->poisoned + randint0(dam) + 10);
                        }
                        break;
                }
@@ -4177,18 +4180,18 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
 
                        if (p_ptr->resist_pois) dam = (2 * dam + 2) / 5;
                        if (double_resist) dam = (2 * dam + 2) / 5;
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
-                       if (!(double_resist || p_ptr->resist_pois) && !CHECK_MULTISHADOW())
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
+                       if (!(double_resist || p_ptr->resist_pois) && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               set_poisoned(p_ptr->poisoned + randint0(dam) + 10);
+                               set_poisoned(p_ptr, p_ptr->poisoned + randint0(dam) + 10);
 
                                if (one_in_(5)) /* 6 */
                                {
                                        msg_print(_("奇形的な変身を遂げた!", "You undergo a freakish metamorphosis!"));
                                        if (one_in_(4)) /* 4 */
-                                               do_poly_self();
+                                               do_poly_self(p_ptr);
                                        else
-                                               status_shuffle();
+                                               status_shuffle(p_ptr);
                                }
 
                                if (one_in_(6))
@@ -4203,7 +4206,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_MISSILE:
                {
                        if (fuzzy) msg_print(_("何かで攻撃された!", "You are hit by something!"));
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4215,7 +4218,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                dam /= 2;
                        else if (p_ptr->align < -10)
                                dam *= 2;
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4224,7 +4227,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        if (fuzzy) msg_print(_("何かで攻撃された!", "You are hit by something!"));
                        if (p_ptr->align > 10)
                                dam *= 2;
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4240,7 +4243,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                msg_print(_("矢を斬り捨てた!", "You cut down the arrow!"));
                                break;
                        }
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4248,12 +4251,12 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_PLASMA:
                {
                        if (fuzzy) msg_print(_("何かとても熱いもので攻撃された!", "You are hit by something *HOT*!"));
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
 
-                       if (!p_ptr->resist_sound && !CHECK_MULTISHADOW())
+                       if (!p_ptr->resist_sound && !CHECK_MULTISHADOW(p_ptr))
                        {
                                int plus_stun = (randint1((dam > 40) ? 35 : (dam * 3 / 4 + 5)));
-                               (void)set_stun(p_ptr->stun + plus_stun);
+                               (void)set_stun(p_ptr, p_ptr->stun + plus_stun);
                        }
 
                        if (!(p_ptr->resist_fire || IS_OPPOSE_FIRE() || p_ptr->immune_fire))
@@ -4270,22 +4273,22 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        if (fuzzy) msg_print(_("地獄の力で攻撃された!", "You are hit by nether forces!"));
                        if (p_ptr->resist_neth)
                        {
-                               if (!prace_is_(RACE_SPECTRE))
+                               if (!PRACE_IS_(p_ptr, RACE_SPECTRE))
                                {
                                        dam *= 6; dam /= (randint1(4) + 7);
                                }
                        }
-                       else if (!CHECK_MULTISHADOW()) drain_exp(200 + (p_ptr->exp / 100), 200 + (p_ptr->exp / 1000), 75);
+                       else if (!CHECK_MULTISHADOW(p_ptr)) drain_exp(p_ptr, 200 + (p_ptr->exp / 100), 200 + (p_ptr->exp / 1000), 75);
 
-                       if (prace_is_(RACE_SPECTRE) && !CHECK_MULTISHADOW())
+                       if (PRACE_IS_(p_ptr, RACE_SPECTRE) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("気分がよくなった。", "You feel invigorated!"));
-                               hp_player(dam / 4);
+                               hp_player(p_ptr, dam / 4);
                                learn_spell(monspell);
                        }
                        else
                        {
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
 
                        break;
@@ -4295,15 +4298,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_WATER:
                {
                        if (fuzzy) msg_print(_("何か湿ったもので攻撃された!", "You are hit by something wet!"));
-                       if (!CHECK_MULTISHADOW())
+                       if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                if (!p_ptr->resist_sound && !p_ptr->resist_water)
                                {
-                                       set_stun(p_ptr->stun + randint1(40));
+                                       set_stun(p_ptr, p_ptr->stun + randint1(40));
                                }
                                if (!p_ptr->resist_conf && !p_ptr->resist_water)
                                {
-                                       set_confused(p_ptr->confused + randint1(5) + 5);
+                                       set_confused(p_ptr, p_ptr->confused + randint1(5) + 5);
                                }
 
                                if (one_in_(5) && !p_ptr->resist_water)
@@ -4314,7 +4317,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                if (p_ptr->resist_water) get_damage /= 4;
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4327,15 +4330,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                dam *= 6; dam /= (randint1(4) + 7);
                        }
 
-                       if (!CHECK_MULTISHADOW())
+                       if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                if (!p_ptr->resist_conf)
                                {
-                                       (void)set_confused(p_ptr->confused + randint0(20) + 10);
+                                       (void)set_confused(p_ptr, p_ptr->confused + randint0(20) + 10);
                                }
                                if (!p_ptr->resist_chaos)
                                {
-                                       (void)set_image(p_ptr->image + randint1(10));
+                                       (void)set_image(p_ptr, p_ptr->image + randint1(10));
                                        if (one_in_(3))
                                        {
                                                msg_print(_("あなたの身体はカオスの力で捻じ曲げられた!", "Your body is twisted by chaos!"));
@@ -4344,7 +4347,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                }
                                if (!p_ptr->resist_neth && !p_ptr->resist_chaos)
                                {
-                                       drain_exp(5000 + (p_ptr->exp / 100), 500 + (p_ptr->exp / 1000), 75);
+                                       drain_exp(p_ptr, 5000 + (p_ptr->exp / 100), 500 + (p_ptr->exp / 1000), 75);
                                }
 
                                if (!p_ptr->resist_chaos || one_in_(9))
@@ -4354,7 +4357,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                }
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4366,9 +4369,9 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 6; dam /= (randint1(4) + 7);
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_cut(p_ptr->cut + dam);
+                               (void)set_cut(p_ptr,p_ptr->cut + dam);
                        }
 
                        if (!p_ptr->resist_shard || one_in_(13))
@@ -4376,7 +4379,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                inven_damage(set_cold_destroy, 2);
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4388,10 +4391,10 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 5; dam /= (randint1(4) + 7);
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                int plus_stun = (randint1((dam > 90) ? 35 : (dam / 3 + 5)));
-                               (void)set_stun(p_ptr->stun + plus_stun);
+                               (void)set_stun(p_ptr, p_ptr->stun + plus_stun);
                        }
 
                        if (!p_ptr->resist_sound || one_in_(13))
@@ -4399,7 +4402,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                inven_damage(set_cold_destroy, 2);
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4411,11 +4414,11 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 5; dam /= (randint1(4) + 7);
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_confused(p_ptr->confused + randint1(20) + 10);
+                               (void)set_confused(p_ptr, p_ptr->confused + randint1(20) + 10);
                        }
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4427,11 +4430,11 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 6; dam /= (randint1(4) + 7);
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                (void)apply_disenchant(0);
                        }
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4443,11 +4446,11 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 6; dam /= (randint1(4) + 7);
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                apply_nexus(m_ptr);
                        }
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4455,11 +4458,11 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_FORCE:
                {
                        if (fuzzy) msg_print(_("運動エネルギーで攻撃された!", "You are hit by kinetic force!"));
-                       if (!p_ptr->resist_sound && !CHECK_MULTISHADOW())
+                       if (!p_ptr->resist_sound && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_stun(p_ptr->stun + randint1(20));
+                               (void)set_stun(p_ptr, p_ptr->stun + randint1(20));
                        }
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4468,18 +4471,18 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_ROCKET:
                {
                        if (fuzzy) msg_print(_("爆発があった!", "There is an explosion!"));
-                       if (!p_ptr->resist_sound && !CHECK_MULTISHADOW())
+                       if (!p_ptr->resist_sound && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_stun(p_ptr->stun + randint1(20));
+                               (void)set_stun(p_ptr, p_ptr->stun + randint1(20));
                        }
 
                        if (p_ptr->resist_shard)
                        {
                                dam /= 2;
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_cut(p_ptr->cut + (dam / 2));
+                               (void)set_cut(p_ptr,p_ptr->cut + (dam / 2));
                        }
 
                        if (!p_ptr->resist_shard || one_in_(12))
@@ -4487,7 +4490,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                inven_damage(set_cold_destroy, 3);
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4495,8 +4498,8 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_INERTIAL:
                {
                        if (fuzzy) msg_print(_("何か遅いもので攻撃された!", "You are hit by something slow!"));
-                       if (!CHECK_MULTISHADOW()) (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       if (!CHECK_MULTISHADOW(p_ptr)) (void)set_slow(p_ptr, p_ptr->slow + randint0(4) + 4, FALSE);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4508,25 +4511,25 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 4; dam /= (randint1(4) + 7);
                        }
-                       else if (!blind && !p_ptr->resist_blind && !CHECK_MULTISHADOW())
+                       else if (!blind && !p_ptr->resist_blind && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_blind(p_ptr->blind + randint1(5) + 2);
+                               (void)set_blind(p_ptr, p_ptr->blind + randint1(5) + 2);
                        }
 
-                       if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
+                       if (PRACE_IS_(p_ptr, RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
                        {
-                               if (!CHECK_MULTISHADOW()) msg_print(_("光で肉体が焦がされた!", "The light scorches your flesh!"));
+                               if (!CHECK_MULTISHADOW(p_ptr)) msg_print(_("光で肉体が焦がされた!", "The light scorches your flesh!"));
                                dam *= 2;
                        }
-                       else if (prace_is_(RACE_S_FAIRY))
+                       else if (PRACE_IS_(p_ptr, RACE_S_FAIRY))
                        {
                                dam = dam * 4 / 3;
                        }
 
                        if (p_ptr->wraith_form) dam *= 2;
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
 
-                       if (p_ptr->wraith_form && !CHECK_MULTISHADOW())
+                       if (p_ptr->wraith_form && !CHECK_MULTISHADOW(p_ptr))
                        {
                                p_ptr->wraith_form = 0;
                                msg_print(_("閃光のため非物質的な影の存在でいられなくなった。",
@@ -4548,13 +4551,13 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                dam *= 4; dam /= (randint1(4) + 7);
 
-                               if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form) dam = 0;
+                               if (PRACE_IS_(p_ptr, RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form) dam = 0;
                        }
-                       else if (!blind && !p_ptr->resist_blind && !CHECK_MULTISHADOW())
+                       else if (!blind && !p_ptr->resist_blind && !CHECK_MULTISHADOW(p_ptr))
                        {
-                               (void)set_blind(p_ptr->blind + randint1(5) + 2);
+                               (void)set_blind(p_ptr, p_ptr->blind + randint1(5) + 2);
                        }
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4568,7 +4571,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                dam /= (randint1(4) + 7);
                                msg_print(_("時間が通り過ぎていく気がする。", "You feel as if time is passing you by."));
                        }
-                       else if (!CHECK_MULTISHADOW())
+                       else if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                switch (randint1(10))
                                {
@@ -4576,7 +4579,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                        {
                                                if (p_ptr->prace == RACE_ANDROID) break;
                                                msg_print(_("人生が逆戻りした気がする。", "You feel life has clocked back."));
-                                               lose_exp(100 + (p_ptr->exp / 100) * MON_DRAIN_LIFE);
+                                               lose_exp(p_ptr, 100 + (p_ptr->exp / 100) * MON_DRAIN_LIFE);
                                                break;
                                        }
 
@@ -4617,7 +4620,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                }
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4627,15 +4630,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        if (fuzzy) msg_print(_("何か重いもので攻撃された!", "You are hit by something heavy!"));
                                msg_print(_("周辺の重力がゆがんだ。", "Gravity warps around you."));
 
-                       if (!CHECK_MULTISHADOW())
+                       if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                teleport_player(5, TELEPORT_PASSIVE);
                                if (!p_ptr->levitation)
-                                       (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+                                       (void)set_slow(p_ptr, p_ptr->slow + randint0(4) + 4, FALSE);
                                if (!(p_ptr->resist_sound || p_ptr->levitation))
                                {
                                        int plus_stun = (randint1((dam > 90) ? 35 : (dam / 3 + 5)));
-                                       (void)set_stun(p_ptr->stun + plus_stun);
+                                       (void)set_stun(p_ptr, p_ptr->stun + plus_stun);
                                }
                        }
                        if (p_ptr->levitation)
@@ -4648,7 +4651,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                inven_damage(set_cold_destroy, 2);
                        }
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4657,7 +4660,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                {
                        if (fuzzy) msg_print(_("純粋なエネルギーで攻撃された!", "You are hit by pure energy!"));
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4665,7 +4668,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                {
                        if (fuzzy) msg_print(_("何らかの攻撃によって気分がよくなった。", "You are hit by something invigorating!"));
 
-                       (void)hp_player(dam);
+                       (void)hp_player(p_ptr, dam);
                        dam = 0;
                        break;
                }
@@ -4673,7 +4676,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_OLD_SPEED:
                {
                        if (fuzzy) msg_print(_("何かで攻撃された!", "You are hit by something!"));
-                       (void)set_fast(p_ptr->fast + randint1(5), FALSE);
+                       (void)set_fast(p_ptr, p_ptr->fast + randint1(5), FALSE);
                        dam = 0;
                        break;
                }
@@ -4681,7 +4684,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_OLD_SLOW:
                {
                        if (fuzzy) msg_print(_("何か遅いもので攻撃された!", "You are hit by something slow!"));
-                       (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+                       (void)set_slow(p_ptr, p_ptr->slow + randint0(4) + 4, FALSE);
                        break;
                }
 
@@ -4694,10 +4697,10 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                msg_print(_("恐ろしい光景が頭に浮かんできた。", "A horrible vision enters your mind."));
                                /* Have some nightmares */
-                               sanity_blast(NULL, FALSE);
+                               sanity_blast(p_ptr, NULL, FALSE);
                        }
 
-                       set_paralyzed(p_ptr->paralyzed + dam);
+                       set_paralyzed(p_ptr, p_ptr->paralyzed + dam);
                        dam = 0;
                        break;
                }
@@ -4708,7 +4711,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_SUPER_RAY:
                {
                        if (fuzzy) msg_print(_("魔法のオーラで攻撃された!", "You are hit by an aura of magic!"));
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        break;
                }
 
@@ -4716,7 +4719,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                case GF_PSY_SPEAR:
                {
                        if (fuzzy) msg_print(_("エネルギーの塊で攻撃された!", "You are hit by an energy!"));
-                       get_damage = take_hit(DAMAGE_FORCE, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_FORCE, dam, killer, monspell);
                        break;
                }
 
@@ -4725,7 +4728,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                {
                        if (fuzzy) msg_print(_("何かが空からあなたの頭上に落ちてきた!", "Something falls from the sky on you!"));
 
-                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        if (!p_ptr->resist_shard || one_in_(13))
                        {
                                if (!p_ptr->immune_fire) inven_damage(set_fire_destroy, 2);
@@ -4740,15 +4743,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                {
                        if (fuzzy) msg_print(_("何か鋭く冷たいもので攻撃された!", "You are hit by something sharp and cold!"));
                        get_damage = cold_dam(dam, killer, monspell, FALSE);
-                       if (!CHECK_MULTISHADOW())
+                       if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                if (!p_ptr->resist_shard)
                                {
-                                       (void)set_cut(p_ptr->cut + damroll(5, 8));
+                                       (void)set_cut(p_ptr,p_ptr->cut + damroll(5, 8));
                                }
                                if (!p_ptr->resist_sound)
                                {
-                                       (void)set_stun(p_ptr->stun + randint1(15));
+                                       (void)set_stun(p_ptr, p_ptr->stun + randint1(15));
                                }
 
                                if ((!(p_ptr->resist_cold || IS_OPPOSE_COLD())) || one_in_(12))
@@ -4768,7 +4771,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        if (p_ptr->mimic_form)
                        {
                                if (!(mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING))
-                                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
                        else
                        {
@@ -4789,7 +4792,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                /* Hurt a lot */
                                default:
                                {
-                                       get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                                       get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                                        break;
                                }
                        }
@@ -4801,7 +4804,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* Drain mana */
                case GF_DRAIN_MANA:
                {
-                       if (CHECK_MULTISHADOW())
+                       if (CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, you are unharmed!"));
                        }
@@ -4860,25 +4863,25 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* Mind blast */
                case GF_MIND_BLAST:
                {
-                       if ((randint0(100 + rlev / 2) < MAX(5, p_ptr->skill_sav)) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev / 2) < MAX(5, p_ptr->skill_sav)) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               if (!CHECK_MULTISHADOW())
+                               if (!CHECK_MULTISHADOW(p_ptr))
                                {
                                        msg_print(_("霊的エネルギーで精神が攻撃された。", "Your mind is blasted by psyonic energy."));
 
                                        if (!p_ptr->resist_conf)
                                        {
-                                               (void)set_confused(p_ptr->confused + randint0(4) + 4);
+                                               (void)set_confused(p_ptr, p_ptr->confused + randint0(4) + 4);
                                        }
 
                                        if (!p_ptr->resist_chaos && one_in_(3))
                                        {
-                                               (void)set_image(p_ptr->image + randint0(250) + 150);
+                                               (void)set_image(p_ptr, p_ptr->image + randint0(250) + 150);
                                        }
 
                                        p_ptr->csp -= 50;
@@ -4890,7 +4893,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                        p_ptr->redraw |= PR_MANA;
                                }
 
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
                        break;
                }
@@ -4898,14 +4901,14 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* Brain smash */
                case GF_BRAIN_SMASH:
                {
-                       if ((randint0(100 + rlev / 2) < MAX(5, p_ptr->skill_sav)) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev / 2) < MAX(5, p_ptr->skill_sav)) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               if (!CHECK_MULTISHADOW())
+                               if (!CHECK_MULTISHADOW(p_ptr))
                                {
                                        msg_print(_("霊的エネルギーで精神が攻撃された。", "Your mind is blasted by psyonic energy."));
 
@@ -4918,31 +4921,31 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                        p_ptr->redraw |= PR_MANA;
                                }
 
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
-                               if (!CHECK_MULTISHADOW())
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
+                               if (!CHECK_MULTISHADOW(p_ptr))
                                {
                                        if (!p_ptr->resist_blind)
                                        {
-                                               (void)set_blind(p_ptr->blind + 8 + randint0(8));
+                                               (void)set_blind(p_ptr, p_ptr->blind + 8 + randint0(8));
                                        }
                                        if (!p_ptr->resist_conf)
                                        {
-                                               (void)set_confused(p_ptr->confused + randint0(4) + 4);
+                                               (void)set_confused(p_ptr, p_ptr->confused + randint0(4) + 4);
                                        }
                                        if (!p_ptr->free_act)
                                        {
-                                               (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4);
+                                               (void)set_paralyzed(p_ptr, p_ptr->paralyzed + randint0(4) + 4);
                                        }
-                                       (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE);
+                                       (void)set_slow(p_ptr, p_ptr->slow + randint0(4) + 4, FALSE);
 
                                        while (randint0(100 + rlev / 2) > (MAX(5, p_ptr->skill_sav)))
-                                               (void)do_dec_stat(A_INT);
+                                               (void)do_dec_stat(p_ptr, A_INT);
                                        while (randint0(100 + rlev / 2) > (MAX(5, p_ptr->skill_sav)))
-                                               (void)do_dec_stat(A_WIS);
+                                               (void)do_dec_stat(p_ptr, A_WIS);
 
                                        if (!p_ptr->resist_chaos)
                                        {
-                                               (void)set_image(p_ptr->image + randint0(250) + 150);
+                                               (void)set_image(p_ptr, p_ptr->image + randint0(250) + 150);
                                        }
                                }
                        }
@@ -4952,15 +4955,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* cause 1 */
                case GF_CAUSE_1:
                {
-                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               if (!CHECK_MULTISHADOW()) curse_equipment(15, 0);
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                               if (!CHECK_MULTISHADOW(p_ptr)) curse_equipment(15, 0);
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
                        break;
                }
@@ -4968,15 +4971,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* cause 2 */
                case GF_CAUSE_2:
                {
-                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               if (!CHECK_MULTISHADOW()) curse_equipment(25, MIN(rlev / 2 - 15, 5));
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                               if (!CHECK_MULTISHADOW(p_ptr)) curse_equipment(25, MIN(rlev / 2 - 15, 5));
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
                        break;
                }
@@ -4984,15 +4987,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* cause 3 */
                case GF_CAUSE_3:
                {
-                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               if (!CHECK_MULTISHADOW()) curse_equipment(33, MIN(rlev / 2 - 15, 15));
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                               if (!CHECK_MULTISHADOW(p_ptr)) curse_equipment(33, MIN(rlev / 2 - 15, 15));
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
                        break;
                }
@@ -5000,15 +5003,15 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* cause 4 */
                case GF_CAUSE_4:
                {
-                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし秘孔を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
-                               if (!CHECK_MULTISHADOW()) (void)set_cut(p_ptr->cut + damroll(10, 10));
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
+                               if (!CHECK_MULTISHADOW(p_ptr)) (void)set_cut(p_ptr,p_ptr->cut + damroll(10, 10));
                        }
                        break;
                }
@@ -5016,20 +5019,20 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                /* Hand of Doom */
                case GF_HAND_DOOM:
                {
-                       if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW())
+                       if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
                                learn_spell(monspell);
                        }
                        else
                        {
-                               if (!CHECK_MULTISHADOW())
+                               if (!CHECK_MULTISHADOW(p_ptr))
                                {
                                        msg_print(_("あなたは命が薄まっていくように感じた!", "You feel your life fade away!"));
                                        curse_equipment(40, 20);
                                }
 
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, m_name, monspell);
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, m_name, monspell);
 
                                if (p_ptr->chp < 1) p_ptr->chp = 1;
                        }
@@ -5059,7 +5062,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
 
                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);
-               if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
+               if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr, p_ptr->tim_eyeeye-5, TRUE);
        }
 
        if (p_ptr->riding && dam > 0)
@@ -5068,7 +5071,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
        }
 
 
-       disturb(TRUE, TRUE);
+       disturb(p_ptr, TRUE, TRUE);
 
 
        if ((p_ptr->special_defense & NINJA_KAWARIMI) && dam && who && (who != p_ptr->riding))
@@ -5136,7 +5139,7 @@ bool in_disintegration_range(POSITION y1, POSITION x1, POSITION y2, POSITION x2)
        if ((ax < 2) && (ay < 2)) return (TRUE);
 
        /* Paranoia -- require "safe" origin */
-       /* if (!in_bounds(y1, x1)) return (FALSE); */
+       /* if (!in_bounds(current_floor_ptr, y1, x1)) return (FALSE); */
 
        /* Directly South/North */
        if (!dx)
@@ -5359,7 +5362,7 @@ void breath_shape(u16b *path_g, int dist, int *pgrids, POSITION *gx, POSITION *g
                                for (x = bx - cdis; x <= bx + cdis; x++)
                                {
                                        /* Ignore "illegal" locations */
-                                       if (!in_bounds(y, x)) continue;
+                                       if (!in_bounds(current_floor_ptr, y, x)) continue;
 
                                        /* Enforce a circular "ripple" */
                                        if (distance(y1, x1, y, x) != bdis) continue;
@@ -5415,7 +5418,7 @@ void breath_shape(u16b *path_g, int dist, int *pgrids, POSITION *gx, POSITION *g
  * @param x 目標X座標 / Target x location (or location to travel "towards")
  * @param dam 基本威力 / Base damage roll to apply to affected monsters (or player)
  * @param typ 効果属性 / Type of damage to apply to monsters (and objects)
- * @param flg 効果フラグ / Extra bit flags (see PROJECT_xxxx in "defines.h")
+ * @param flg 効果フラグ / Extra bit flags (see PROJECT_xxxx)
  * @param monspell 効果元のモンスター魔法ID
  * @return 何か一つでも効力があればTRUEを返す / TRUE if any "effects" of the projection were observed, else FALSE
  * @details
@@ -6173,7 +6176,6 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da
                        /* Dump everything with this radius */
                        for (i = gm[t]; i < gm[t+1]; i++)
                        {
-                               /* Extract the location */
                                y = gy[i];
                                x = gx[i];
 
@@ -6218,7 +6220,6 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da
                        /* Erase the explosion drawn above */
                        for (i = 0; i < grids; i++)
                        {
-                               /* Extract the location */
                                y = gy[i];
                                x = gx[i];
 
@@ -6580,14 +6581,14 @@ bool project(MONSTER_IDX who, POSITION rad, POSITION y, POSITION x, HIT_POINT da
 
                if (rakubadam_m > 0)
                {
-                       if (rakuba(rakubadam_m, FALSE))
+                       if (rakuba(p_ptr, rakubadam_m, FALSE))
                        {
                                msg_format(_("%^sに振り落とされた!", "%^s has thrown you off!"), m_name);
                        }
                }
                if (p_ptr->riding && rakubadam_p > 0)
                {
-                       if(rakuba(rakubadam_p, FALSE))
+                       if(rakuba(p_ptr, rakubadam_p, FALSE))
                        {
                                msg_format(_("%^sから落ちてしまった!", "You have fallen from %s."), m_name);
                        }