OSDN Git Service

[Refactor] #38997 do_cmd_write_nikki() に player_type * 引数を追加.
[hengband/hengband.git] / src / spells1.c
index 3a500f1..3ca4871 100644 (file)
@@ -586,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);
                                }
                        }
 
@@ -1730,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!"));
                                                }
@@ -1738,8 +1738,8 @@ 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))
                                                                {
@@ -1820,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!"));
                                                }
@@ -1828,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;
@@ -1836,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;
                                        }
@@ -2166,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 */
@@ -2217,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 */
@@ -2341,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;
@@ -2376,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 */
@@ -2392,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;
@@ -2435,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;
@@ -2478,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;
@@ -2510,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 */
@@ -2523,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;
@@ -2560,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 */
@@ -3476,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;
                                }
 
@@ -3620,8 +3620,8 @@ static bool project_m(MONSTER_IDX who, POSITION r, POSITION y, POSITION x, HIT_P
 
        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 */
@@ -3739,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,
@@ -3848,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);
+                       do_cmd_write_nikki(p_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name);
                }
 
                delete_monster_idx(g_ptr->m_idx);
@@ -4158,14 +4158,14 @@ 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(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, p_ptr->poisoned + randint0(dam) + 10);
                        }
@@ -4180,8 +4180,8 @@ 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, p_ptr->poisoned + randint0(dam) + 10);
 
@@ -4189,7 +4189,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                {
                                        msg_print(_("奇形的な変身を遂げた!", "You undergo a freakish metamorphosis!"));
                                        if (one_in_(4)) /* 4 */
-                                               do_poly_self();
+                                               do_poly_self(p_ptr);
                                        else
                                                status_shuffle();
                                }
@@ -4206,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;
                }
 
@@ -4218,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;
                }
 
@@ -4227,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;
                }
 
@@ -4243,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;
                }
 
@@ -4251,9 +4251,9 @@ 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, p_ptr->stun + plus_stun);
@@ -4278,9 +4278,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()) 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_(p_ptr, RACE_SPECTRE) && !CHECK_MULTISHADOW())
+                       if (PRACE_IS_(p_ptr, RACE_SPECTRE) && !CHECK_MULTISHADOW(p_ptr))
                        {
                                msg_print(_("気分がよくなった。", "You feel invigorated!"));
                                hp_player(p_ptr, dam / 4);
@@ -4288,7 +4288,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        }
                        else
                        {
-                               get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell);
+                               get_damage = take_hit(p_ptr, DAMAGE_ATTACK, dam, killer, monspell);
                        }
 
                        break;
@@ -4298,7 +4298,7 @@ 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)
                                {
@@ -4317,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;
                }
 
@@ -4330,7 +4330,7 @@ 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)
                                {
@@ -4347,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))
@@ -4357,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;
                }
 
@@ -4369,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))
@@ -4379,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;
                }
 
@@ -4391,7 +4391,7 @@ 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, p_ptr->stun + plus_stun);
@@ -4402,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;
                }
 
@@ -4414,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, 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;
                }
 
@@ -4430,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;
                }
 
@@ -4446,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;
                }
 
@@ -4458,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, 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;
                }
 
@@ -4471,7 +4471,7 @@ 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, p_ptr->stun + randint1(20));
                        }
@@ -4480,9 +4480,9 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        {
                                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))
@@ -4490,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;
                }
 
@@ -4498,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, 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;
                }
 
@@ -4511,14 +4511,14 @@ 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, p_ptr->blind + randint1(5) + 2);
                        }
 
                        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_(p_ptr, RACE_S_FAIRY))
@@ -4527,9 +4527,9 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                        }
 
                        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(_("閃光のため非物質的な影の存在でいられなくなった。",
@@ -4553,11 +4553,11 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
 
                                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, 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;
                }
 
@@ -4571,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))
                                {
@@ -4579,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;
                                        }
 
@@ -4620,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;
                }
 
@@ -4630,7 +4630,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 heavy!"));
                                msg_print(_("周辺の重力がゆがんだ。", "Gravity warps around you."));
 
-                       if (!CHECK_MULTISHADOW())
+                       if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                teleport_player(5, TELEPORT_PASSIVE);
                                if (!p_ptr->levitation)
@@ -4651,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;
                }
 
@@ -4660,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;
                }
 
@@ -4697,7 +4697,7 @@ 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, p_ptr->paralyzed + dam);
@@ -4711,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;
                }
 
@@ -4719,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;
                }
 
@@ -4728,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);
@@ -4743,11 +4743,11 @@ 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)
                                {
@@ -4771,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
                        {
@@ -4792,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;
                                }
                        }
@@ -4804,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!"));
                        }
@@ -4863,14 +4863,14 @@ 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."));
 
@@ -4893,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;
                }
@@ -4901,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."));
 
@@ -4921,8 +4921,8 @@ 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)
                                        {
@@ -4955,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;
                }
@@ -4971,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;
                }
@@ -4987,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;
                }
@@ -5003,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;
                }
@@ -5019,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;
                        }