OSDN Git Service

[Refactor] #38997 in_bound() に floor_type * 引数を追加. / Add floor_type * argument to...
[hengbandforosx/hengbandosx.git] / src / spells1.c
index cd3a73a..9b29aa5 100644 (file)
@@ -575,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;
@@ -638,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;
 
@@ -1221,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
@@ -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;
                                        }
@@ -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;
@@ -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;
@@ -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;
@@ -3344,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);
                                                }
@@ -3366,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") */
@@ -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);
+                       exe_write_diary(p_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name);
                }
 
                delete_monster_idx(g_ptr->m_idx);
@@ -4071,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;
        }
 
@@ -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);
 
@@ -4191,7 +4191,7 @@ static bool project_p(MONSTER_IDX who, concptr who_name, int r, POSITION y, POSI
                                        if (one_in_(4)) /* 4 */
                                                do_poly_self(p_ptr);
                                        else
-                                               status_shuffle();
+                                               status_shuffle(p_ptr);
                                }
 
                                if (one_in_(6))
@@ -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(p_ptr, 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)
                                {
@@ -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,7 +4369,7 @@ 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,p_ptr->cut + dam);
                        }
@@ -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,7 +4480,7 @@ 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,p_ptr->cut + (dam / 2));
                        }
@@ -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))
                                {
@@ -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,7 +4743,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 sharp and cold!"));
                        get_damage = cold_dam(dam, killer, monspell, FALSE);
-                       if (!CHECK_MULTISHADOW())
+                       if (!CHECK_MULTISHADOW(p_ptr))
                        {
                                if (!p_ptr->resist_shard)
                                {
@@ -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,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;
                        }
@@ -5071,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))
@@ -5139,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)
@@ -5362,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;
@@ -6581,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);
                        }