OSDN Git Service

[Refactor] #37353 汎用的なポインタ命名 c_ptr を g_ptr に改名。 / Rename c_ptr, common pointer naming...
[hengband/hengband.git] / src / spells3.c
index e269d48..ba0e282 100644 (file)
@@ -91,7 +91,7 @@ bool teleport_away(MONSTER_IDX m_idx, POSITION dis, BIT_FLAGS mode)
 
                        /* No teleporting into vaults and such */
                        if (!(p_ptr->inside_quest || p_ptr->inside_arena))
-                               if (cave[ny][nx].info & CAVE_ICKY) continue;
+                               if (grid_array[ny][nx].info & CAVE_ICKY) continue;
 
                        /* This grid looks good */
                        look = FALSE;
@@ -113,10 +113,10 @@ bool teleport_away(MONSTER_IDX m_idx, POSITION dis, BIT_FLAGS mode)
        sound(SOUND_TPOTHER);
 
        /* Update the old location */
-       cave[oy][ox].m_idx = 0;
+       grid_array[oy][ox].m_idx = 0;
 
        /* Update the new location */
-       cave[ny][nx].m_idx = m_idx;
+       grid_array[ny][nx].m_idx = m_idx;
 
        /* Move the monster */
        m_ptr->fy = ny;
@@ -193,7 +193,7 @@ void teleport_monster_to(MONSTER_IDX m_idx, POSITION ty, POSITION tx, int power,
                        if (!cave_monster_teleportable_bold(m_idx, ny, nx, mode)) continue;
 
                        /* No teleporting into vaults and such */
-                       /* if (cave[ny][nx].info & (CAVE_ICKY)) continue; */
+                       /* if (grid_array[ny][nx].info & (CAVE_ICKY)) continue; */
 
                        /* This grid looks good */
                        look = FALSE;
@@ -214,10 +214,10 @@ void teleport_monster_to(MONSTER_IDX m_idx, POSITION ty, POSITION tx, int power,
        sound(SOUND_TPOTHER);
 
        /* Update the old location */
-       cave[oy][ox].m_idx = 0;
+       grid_array[oy][ox].m_idx = 0;
 
        /* Update the new location */
-       cave[ny][nx].m_idx = m_idx;
+       grid_array[ny][nx].m_idx = m_idx;
 
        /* Move the monster */
        m_ptr->fy = ny;
@@ -381,7 +381,7 @@ void teleport_player(POSITION dis, BIT_FLAGS mode)
        {
                for (yy = -1; yy < 2; yy++)
                {
-                       MONSTER_IDX tmp_m_idx = cave[oy+yy][ox+xx].m_idx;
+                       MONSTER_IDX tmp_m_idx = grid_array[oy+yy][ox+xx].m_idx;
 
                        /* A monster except your mount may follow */
                        if (tmp_m_idx && (p_ptr->riding != tmp_m_idx))
@@ -423,7 +423,7 @@ void teleport_player_away(MONSTER_IDX m_idx, POSITION dis)
        {
                for (yy = -1; yy < 2; yy++)
                {
-                       IDX tmp_m_idx = cave[oy+yy][ox+xx].m_idx;
+                       MONSTER_IDX tmp_m_idx = grid_array[oy+yy][ox+xx].m_idx;
 
                        /* A monster except your mount or caster may follow */
                        if (tmp_m_idx && (p_ptr->riding != tmp_m_idx) && (m_idx != tmp_m_idx))
@@ -482,7 +482,7 @@ void teleport_player_to(POSITION ny, POSITION nx, BIT_FLAGS mode)
                }
 
                /* Accept any grid when wizard mode */
-               if (p_ptr->wizard && !(mode & TELEPORT_PASSIVE) && (!cave[y][x].m_idx || (cave[y][x].m_idx == p_ptr->riding))) break;
+               if (p_ptr->wizard && !(mode & TELEPORT_PASSIVE) && (!grid_array[y][x].m_idx || (grid_array[y][x].m_idx == p_ptr->riding))) break;
 
                /* Accept teleportable floor grids */
                if (cave_player_teleportable_bold(y, x, mode)) break;
@@ -553,6 +553,32 @@ void teleport_away_followable(MONSTER_IDX m_idx)
 }
 
 
+bool teleport_level_other(player_type *creature_ptr)
+{
+       MONSTER_IDX target_m_idx;
+       monster_type *m_ptr;
+       monster_race *r_ptr;
+       GAME_TEXT m_name[MAX_NLEN];
+
+       if (!target_set(TARGET_KILL)) return FALSE;
+       target_m_idx = grid_array[target_row][target_col].m_idx;
+       if (!target_m_idx) return TRUE;
+       if (!player_has_los_bold(target_row, target_col)) return TRUE;
+       if (!projectable(creature_ptr->y, creature_ptr->x, target_row, target_col)) return TRUE;
+       m_ptr = &m_list[target_m_idx];
+       r_ptr = &r_info[m_ptr->r_idx];
+       monster_desc(m_name, m_ptr, 0);
+       msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name);
+
+       if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) ||
+               (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > creature_ptr->lev + randint1(60)))
+       {
+               msg_format(_("しかし効果がなかった!", "%^s is unaffected!"), m_name);
+       }
+       else teleport_level(target_m_idx);
+       return TRUE;
+}
+
 /*!
  * @brief プレイヤー及びモンスターをレベルテレポートさせる /
  * Teleport the player one level up or down (random when legal)
@@ -603,7 +629,7 @@ void teleport_level(MONSTER_IDX m_idx)
        }
 
        /* Down only */ 
-       if ((ironman_downward && (m_idx <= 0)) || (dun_level <= d_info[dungeon_type].mindepth))
+       if ((ironman_downward && (m_idx <= 0)) || (dun_level <= d_info[p_ptr->dungeon_idx].mindepth))
        {
 #ifdef JP
                if (see_m) msg_format("%^sは床を突き破って沈んでいく。", m_name);
@@ -614,7 +640,7 @@ void teleport_level(MONSTER_IDX m_idx)
                {
                        if (!dun_level)
                        {
-                               dungeon_type = ironman_downward ? DUNGEON_ANGBAND : p_ptr->recall_dungeon;
+                               p_ptr->dungeon_idx = ironman_downward ? DUNGEON_ANGBAND : p_ptr->recall_dungeon;
                                p_ptr->oldpy = p_ptr->y;
                                p_ptr->oldpx = p_ptr->x;
                        }
@@ -625,7 +651,7 @@ void teleport_level(MONSTER_IDX m_idx)
 
                        if (!dun_level)
                        {
-                               dun_level = d_info[dungeon_type].mindepth;
+                               dun_level = d_info[p_ptr->dungeon_idx].mindepth;
                                prepare_change_floor_mode(CFM_RAND_PLACE);
                        }
                        else
@@ -639,7 +665,7 @@ void teleport_level(MONSTER_IDX m_idx)
        }
 
        /* Up only */
-       else if (quest_number(dun_level) || (dun_level >= d_info[dungeon_type].maxdepth))
+       else if (quest_number(dun_level) || (dun_level >= d_info[p_ptr->dungeon_idx].maxdepth))
        {
 #ifdef JP
                if (see_m) msg_format("%^sは天井を突き破って宙へ浮いていく。", m_name);
@@ -695,7 +721,7 @@ void teleport_level(MONSTER_IDX m_idx)
                if (m_idx <= 0) /* To player */
                {
                        /* Never reach this code on the surface */
-                       /* if (!dun_level) dungeon_type = p_ptr->recall_dungeon; */
+                       /* if (!dun_level) p_ptr->dungeon_idx = p_ptr->recall_dungeon; */
 
                        if (record_stair) do_cmd_write_nikki(NIKKI_TELE_LEV, 1, NULL);
 
@@ -758,7 +784,7 @@ DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x)
        }
 
        /* Allocate the "dun" array */
-       C_MAKE(dun, max_d_idx, s16b);
+       C_MAKE(dun, max_d_idx, DUNGEON_IDX);
 
        screen_save();
        for(i = 1; i < max_d_idx; i++)
@@ -792,7 +818,7 @@ DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x)
                if ((i == ESCAPE) || !num)
                {
                        /* Free the "dun" array */
-                       C_KILL(dun, max_d_idx, s16b);
+                       C_KILL(dun, max_d_idx, DUNGEON_IDX);
 
                        screen_load();
                        return 0;
@@ -807,7 +833,7 @@ DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x)
        screen_load();
 
        /* Free the "dun" array */
-       C_KILL(dun, max_d_idx, s16b);
+       C_KILL(dun, max_d_idx, DUNGEON_IDX);
 
        return select_dungeon;
 }
@@ -833,13 +859,13 @@ bool recall_player(player_type *creature_ptr, TIME_EFFECT turns)
                return TRUE;
        }
 
-       if (dun_level && (max_dlv[dungeon_type] > dun_level) && !creature_ptr->inside_quest && !creature_ptr->word_recall)
+       if (dun_level && (max_dlv[p_ptr->dungeon_idx] > dun_level) && !creature_ptr->inside_quest && !creature_ptr->word_recall)
        {
                if (get_check(_("ここは最深到達階より浅い階です。この階に戻って来ますか? ", "Reset recall depth? ")))
                {
-                       max_dlv[dungeon_type] = dun_level;
+                       max_dlv[p_ptr->dungeon_idx] = dun_level;
                        if (record_maxdepth)
-                               do_cmd_write_nikki(NIKKI_TRUMP, dungeon_type, _("帰還のときに", "when recall from dungeon"));
+                               do_cmd_write_nikki(NIKKI_TRUMP, p_ptr->dungeon_idx, _("帰還のときに", "when recall from dungeon"));
                }
 
        }
@@ -1074,8 +1100,8 @@ void mutate_player(void)
        int ii, jj, i;
 
        /* Pick a pair of stats */
-       ii = randint0(6);
-       for (jj = ii; jj == ii; jj = randint0(6)) /* loop */;
+       ii = randint0(A_MAX);
+       for (jj = ii; jj == ii; jj = randint0(A_MAX)) /* loop */;
 
        max1 = p_ptr->stat_max[ii];
        cur1 = p_ptr->stat_cur[ii];
@@ -1087,7 +1113,7 @@ void mutate_player(void)
        p_ptr->stat_max[jj] = max1;
        p_ptr->stat_cur[jj] = cur1;
 
-       for (i=0;i<6;i++)
+       for (i = 0; i < A_MAX; i++)
        {
                if(p_ptr->stat_max[i] > p_ptr->stat_max_max[i]) p_ptr->stat_max[i] = p_ptr->stat_max_max[i];
                if(p_ptr->stat_cur[i] > p_ptr->stat_max_max[i]) p_ptr->stat_cur[i] = p_ptr->stat_max_max[i];
@@ -1351,7 +1377,7 @@ void brand_weapon(int brand_type)
 static bool vanish_dungeon(void)
 {
        POSITION y, x;
-       cave_type *c_ptr;
+       grid_type *g_ptr;
        feature_type *f_ptr;
        monster_type *m_ptr;
        GAME_TEXT m_name[MAX_NLEN];
@@ -1367,21 +1393,21 @@ static bool vanish_dungeon(void)
        {
                for (x = 1; x < cur_wid - 1; x++)
                {
-                       c_ptr = &cave[y][x];
+                       g_ptr = &grid_array[y][x];
 
                        /* Seeing true feature code (ignore mimic) */
-                       f_ptr = &f_info[c_ptr->feat];
+                       f_ptr = &f_info[g_ptr->feat];
 
                        /* Lose room and vault */
-                       c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+                       g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
 
-                       m_ptr = &m_list[c_ptr->m_idx];
+                       m_ptr = &m_list[g_ptr->m_idx];
 
                        /* Awake monster */
-                       if (c_ptr->m_idx && MON_CSLEEP(m_ptr))
+                       if (g_ptr->m_idx && MON_CSLEEP(m_ptr))
                        {
                                /* Reset sleep counter */
-                               (void)set_monster_csleep(c_ptr->m_idx, 0);
+                               (void)set_monster_csleep(g_ptr->m_idx, 0);
 
                                /* Notice the "waking up" */
                                if (m_ptr->ml)
@@ -1399,68 +1425,68 @@ static bool vanish_dungeon(void)
        /* Special boundary walls -- Top and bottom */
        for (x = 0; x < cur_wid; x++)
        {
-               c_ptr = &cave[0][x];
-               f_ptr = &f_info[c_ptr->mimic];
+               g_ptr = &grid_array[0][x];
+               f_ptr = &f_info[g_ptr->mimic];
 
                /* Lose room and vault */
-               c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+               g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
 
                /* Set boundary mimic if needed */
-               if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+               if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
                {
-                       c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+                       g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
 
                        /* Check for change to boring grid */
-                       if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+                       if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
                }
 
-               c_ptr = &cave[cur_hgt - 1][x];
-               f_ptr = &f_info[c_ptr->mimic];
+               g_ptr = &grid_array[cur_hgt - 1][x];
+               f_ptr = &f_info[g_ptr->mimic];
 
                /* Lose room and vault */
-               c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+               g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
 
                /* Set boundary mimic if needed */
-               if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+               if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
                {
-                       c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+                       g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
 
                        /* Check for change to boring grid */
-                       if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+                       if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
                }
        }
 
        /* Special boundary walls -- Left and right */
        for (y = 1; y < (cur_hgt - 1); y++)
        {
-               c_ptr = &cave[y][0];
-               f_ptr = &f_info[c_ptr->mimic];
+               g_ptr = &grid_array[y][0];
+               f_ptr = &f_info[g_ptr->mimic];
 
                /* Lose room and vault */
-               c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+               g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
 
                /* Set boundary mimic if needed */
-               if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+               if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
                {
-                       c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+                       g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
 
                        /* Check for change to boring grid */
-                       if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+                       if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
                }
 
-               c_ptr = &cave[y][cur_wid - 1];
-               f_ptr = &f_info[c_ptr->mimic];
+               g_ptr = &grid_array[y][cur_wid - 1];
+               f_ptr = &f_info[g_ptr->mimic];
 
                /* Lose room and vault */
-               c_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
+               g_ptr->info &= ~(CAVE_ROOM | CAVE_ICKY);
 
                /* Set boundary mimic if needed */
-               if (c_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
+               if (g_ptr->mimic && have_flag(f_ptr->flags, FF_HURT_DISI))
                {
-                       c_ptr->mimic = feat_state(c_ptr->mimic, FF_HURT_DISI);
+                       g_ptr->mimic = feat_state(g_ptr->mimic, FF_HURT_DISI);
 
                        /* Check for change to boring grid */
-                       if (!have_flag(f_info[c_ptr->mimic].flags, FF_REMEMBER)) c_ptr->info &= ~(CAVE_MARK);
+                       if (!have_flag(f_info[g_ptr->mimic].flags, FF_REMEMBER)) g_ptr->info &= ~(CAVE_MARK);
                }
        }
 
@@ -1479,17 +1505,17 @@ static bool vanish_dungeon(void)
 void call_the_(void)
 {
        int i;
-       cave_type *c_ptr;
+       grid_type *g_ptr;
        bool do_call = TRUE;
 
        for (i = 0; i < 9; i++)
        {
-               c_ptr = &cave[p_ptr->y + ddy_ddd[i]][p_ptr->x + ddx_ddd[i]];
+               g_ptr = &grid_array[p_ptr->y + ddy_ddd[i]][p_ptr->x + ddx_ddd[i]];
 
-               if (!cave_have_flag_grid(c_ptr, FF_PROJECT))
+               if (!cave_have_flag_grid(g_ptr, FF_PROJECT))
                {
-                       if (!c_ptr->mimic || !have_flag(f_info[c_ptr->mimic].flags, FF_PROJECT) ||
-                           !permanent_wall(&f_info[c_ptr->feat]))
+                       if (!g_ptr->mimic || !have_flag(f_info[g_ptr->mimic].flags, FF_PROJECT) ||
+                           !permanent_wall(&f_info[g_ptr->feat]))
                        {
                                do_call = FALSE;
                                break;
@@ -1562,12 +1588,12 @@ void fetch(DIRECTION dir, WEIGHT wgt, bool require_los)
 {
        POSITION ty, tx;
        OBJECT_IDX i;
-       cave_type *c_ptr;
+       grid_type *g_ptr;
        object_type *o_ptr;
        GAME_TEXT o_name[MAX_NLEN];
 
        /* Check to see if an object is already there */
-       if (cave[p_ptr->y][p_ptr->x].o_idx)
+       if (grid_array[p_ptr->y][p_ptr->x].o_idx)
        {
                msg_print(_("自分の足の下にある物は取れません。", "You can't fetch when you're already standing on something."));
                return;
@@ -1585,17 +1611,17 @@ void fetch(DIRECTION dir, WEIGHT wgt, bool require_los)
                        return;
                }
 
-               c_ptr = &cave[ty][tx];
+               g_ptr = &grid_array[ty][tx];
 
                /* We need an item to fetch */
-               if (!c_ptr->o_idx)
+               if (!g_ptr->o_idx)
                {
                        msg_print(_("そこには何もありません。", "There is no object at this place."));
                        return;
                }
 
                /* No fetching from vault */
-               if (c_ptr->info & CAVE_ICKY)
+               if (g_ptr->info & CAVE_ICKY)
                {
                        msg_print(_("アイテムがコントロールを外れて落ちた。", "The item slips from your control."));
                        return;
@@ -1624,15 +1650,15 @@ void fetch(DIRECTION dir, WEIGHT wgt, bool require_los)
                {
                        ty += ddy[dir];
                        tx += ddx[dir];
-                       c_ptr = &cave[ty][tx];
+                       g_ptr = &grid_array[ty][tx];
 
                        if ((distance(p_ptr->y, p_ptr->x, ty, tx) > MAX_RANGE) ||
                                !cave_have_flag_bold(ty, tx, FF_PROJECT)) return;
                }
-               while (!c_ptr->o_idx);
+               while (!g_ptr->o_idx);
        }
 
-       o_ptr = &o_list[c_ptr->o_idx];
+       o_ptr = &o_list[g_ptr->o_idx];
 
        if (o_ptr->weight > wgt)
        {
@@ -1641,9 +1667,9 @@ void fetch(DIRECTION dir, WEIGHT wgt, bool require_los)
                return;
        }
 
-       i = c_ptr->o_idx;
-       c_ptr->o_idx = o_ptr->next_o_idx;
-       cave[p_ptr->y][p_ptr->x].o_idx = i; /* 'move' it */
+       i = g_ptr->o_idx;
+       g_ptr->o_idx = o_ptr->next_o_idx;
+       grid_array[p_ptr->y][p_ptr->x].o_idx = i; /* 'move' it */
 
        o_ptr->next_o_idx = 0;
        o_ptr->iy = p_ptr->y;
@@ -1702,8 +1728,8 @@ bool warding_glyph(void)
        }
 
        /* Create a glyph */
-       cave[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
-       cave[p_ptr->y][p_ptr->x].mimic = feat_glyph;
+       grid_array[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
+       grid_array[p_ptr->y][p_ptr->x].mimic = feat_glyph;
 
        note_spot(p_ptr->y, p_ptr->x);
        lite_spot(p_ptr->y, p_ptr->x);
@@ -1724,11 +1750,11 @@ bool place_mirror(void)
        }
 
        /* Create a mirror */
-       cave[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
-       cave[p_ptr->y][p_ptr->x].mimic = feat_mirror;
+       grid_array[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
+       grid_array[p_ptr->y][p_ptr->x].mimic = feat_mirror;
 
        /* Turn on the light */
-       cave[p_ptr->y][p_ptr->x].info |= CAVE_GLOW;
+       grid_array[p_ptr->y][p_ptr->x].info |= CAVE_GLOW;
 
        note_spot(p_ptr->y, p_ptr->x);
        lite_spot(p_ptr->y, p_ptr->x);
@@ -1752,8 +1778,8 @@ bool explosive_rune(void)
        }
 
        /* Create a glyph */
-       cave[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
-       cave[p_ptr->y][p_ptr->x].mimic = feat_explosive_rune;
+       grid_array[p_ptr->y][p_ptr->x].info |= CAVE_OBJECT;
+       grid_array[p_ptr->y][p_ptr->x].mimic = feat_explosive_rune;
 
        note_spot(p_ptr->y, p_ptr->x);  
        lite_spot(p_ptr->y, p_ptr->x);
@@ -4115,18 +4141,18 @@ static MONRACE_IDX poly_r_idx(MONRACE_IDX r_idx)
  */
 bool polymorph_monster(POSITION y, POSITION x)
 {
-       cave_type *c_ptr = &cave[y][x];
-       monster_type *m_ptr = &m_list[c_ptr->m_idx];
+       grid_type *g_ptr = &grid_array[y][x];
+       monster_type *m_ptr = &m_list[g_ptr->m_idx];
        bool polymorphed = FALSE;
        MONRACE_IDX new_r_idx;
        MONRACE_IDX old_r_idx = m_ptr->r_idx;
-       bool targeted = (target_who == c_ptr->m_idx) ? TRUE : FALSE;
-       bool health_tracked = (p_ptr->health_who == c_ptr->m_idx) ? TRUE : FALSE;
+       bool targeted = (target_who == g_ptr->m_idx) ? TRUE : FALSE;
+       bool health_tracked = (p_ptr->health_who == g_ptr->m_idx) ? TRUE : FALSE;
        monster_type back_m;
 
        if (p_ptr->inside_arena || p_ptr->inside_battle) return (FALSE);
 
-       if ((p_ptr->riding == c_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
+       if ((p_ptr->riding == g_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
 
        /* Memorize the monster before polymorphing */
        back_m = *m_ptr;
@@ -4150,7 +4176,7 @@ bool polymorph_monster(POSITION y, POSITION x)
                m_ptr->hold_o_idx = 0;
 
                /* "Kill" the "old" monster */
-               delete_monster_idx(c_ptr->m_idx);
+               delete_monster_idx(g_ptr->m_idx);
 
                /* Create a new monster (no groups) */
                if (place_monster_aux(0, y, x, new_r_idx, mode))
@@ -4536,9 +4562,7 @@ bool eat_magic(int power)
                p_ptr->csp = p_ptr->msp;
        }
 
-       /* Redraw mana and hp */
        p_ptr->redraw |= (PR_MANA);
-
        p_ptr->update |= (PU_COMBINE | PU_REORDER);
        p_ptr->window |= (PW_INVEN);
 
@@ -4555,7 +4579,7 @@ bool eat_magic(int power)
 void massacre(void)
 {
        POSITION x, y;
-       cave_type *c_ptr;
+       grid_type *g_ptr;
        monster_type *m_ptr;
        DIRECTION dir;
 
@@ -4563,11 +4587,11 @@ void massacre(void)
        {
                y = p_ptr->y + ddy_ddd[dir];
                x = p_ptr->x + ddx_ddd[dir];
-               c_ptr = &cave[y][x];
-               m_ptr = &m_list[c_ptr->m_idx];
+               g_ptr = &grid_array[y][x];
+               m_ptr = &m_list[g_ptr->m_idx];
 
                /* Hack -- attack monsters */
-               if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
+               if (g_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
                        py_attack(y, x, 0);
        }
 }
@@ -4575,16 +4599,16 @@ void massacre(void)
 bool eat_lock(void)
 {
        POSITION x, y;
-       cave_type *c_ptr;
+       grid_type *g_ptr;
        feature_type *f_ptr, *mimic_f_ptr;
        DIRECTION dir;
 
        if (!get_direction(&dir, FALSE, FALSE)) return FALSE;
        y = p_ptr->y + ddy[dir];
        x = p_ptr->x + ddx[dir];
-       c_ptr = &cave[y][x];
-       f_ptr = &f_info[c_ptr->feat];
-       mimic_f_ptr = &f_info[get_feat_mimic(c_ptr)];
+       g_ptr = &grid_array[y][x];
+       f_ptr = &f_info[g_ptr->feat];
+       mimic_f_ptr = &f_info[get_feat_mimic(g_ptr)];
 
        stop_mouth();
 
@@ -4596,9 +4620,9 @@ bool eat_lock(void)
        {
                msg_format(_("いてっ!この%sはあなたの歯より硬い!", "Ouch!  This %s is harder than your teeth!"), f_name + mimic_f_ptr->name);
        }
-       else if (c_ptr->m_idx)
+       else if (g_ptr->m_idx)
        {
-               monster_type *m_ptr = &m_list[c_ptr->m_idx];
+               monster_type *m_ptr = &m_list[g_ptr->m_idx];
                msg_print(_("何かが邪魔しています!", "There's something in the way!"));
 
                if (!m_ptr->ml || !is_pet(m_ptr)) py_attack(y, x, 0);
@@ -4649,12 +4673,12 @@ bool shock_power(void)
        x = p_ptr->x + ddx[dir];
        dam = damroll(8 + ((plev - 5) / 4) + boost / 12, 8);
        fire_beam(GF_MISSILE, dir, dam);
-       if (cave[y][x].m_idx)
+       if (grid_array[y][x].m_idx)
        {
                int i;
-               int ty = y, tx = x;
-               int oy = y, ox = x;
-               MONSTER_IDX m_idx = cave[y][x].m_idx;
+               POSITION ty = y, tx = x;
+               POSITION oy = y, ox = x;
+               MONSTER_IDX m_idx = grid_array[y][x].m_idx;
                monster_type *m_ptr = &m_list[m_idx];
                monster_race *r_ptr = &r_info[m_ptr->r_idx];
                GAME_TEXT m_name[MAX_NLEN];
@@ -4681,10 +4705,10 @@ bool shock_power(void)
                        if ((ty != oy) || (tx != ox))
                        {
                                msg_format(_("%sを吹き飛ばした!", "You blow %s away!"), m_name);
-                               cave[oy][ox].m_idx = 0;
-                               cave[ty][tx].m_idx = (s16b)m_idx;
-                               m_ptr->fy = (byte_hack)ty;
-                               m_ptr->fx = (byte_hack)tx;
+                               grid_array[oy][ox].m_idx = 0;
+                               grid_array[ty][tx].m_idx = m_idx;
+                               m_ptr->fy = ty;
+                               m_ptr->fx = tx;
 
                                update_monster(m_idx, TRUE);
                                lite_spot(oy, ox);