OSDN Git Service

#37287 #37353 (2.2.0.89) 型の置換を継続中。 / Ongoing type replacement.
[hengband/hengband.git] / src / dungeon.c
index a058144..3655c66 100644 (file)
@@ -600,8 +600,8 @@ static void sense_inventory2(void)
  */
 static void pattern_teleport(void)
 {
-       int min_level = 0;
-       int max_level = 99;
+       DEPTH min_level = 0;
+       DEPTH max_level = 99;
 
        /* Ask for level */
        if (get_check(_("他の階にテレポートしますか?", "Teleport level? ")))
@@ -631,13 +631,13 @@ static void pattern_teleport(void)
                sprintf(ppp, _("テレポート先:(%d-%d)", "Teleport to level (%d-%d): "), min_level, max_level);
 
                /* Default */
-               sprintf(tmp_val, "%d", dun_level);
+               sprintf(tmp_val, "%d", (int)dun_level);
 
                /* Ask for a level */
                if (!get_string(ppp, tmp_val, 10)) return;
 
                /* Extract request */
-               command_arg = atoi(tmp_val);
+               command_arg = (COMMAND_ARG)atoi(tmp_val);
        }
        else if (get_check(_("通常テレポート?", "Normal teleport? ")))
        {
@@ -650,10 +650,10 @@ static void pattern_teleport(void)
        }
 
        /* Paranoia */
-       if (command_arg < min_level) command_arg = min_level;
+       if (command_arg < min_level) command_arg = (COMMAND_ARG)min_level;
 
        /* Paranoia */
-       if (command_arg > max_level) command_arg = max_level;
+       if (command_arg > max_level) command_arg = (COMMAND_ARG)max_level;
 
        /* Accept request */
        msg_format(_("%d 階にテレポートしました。", "You teleport to dungeon level %d."), command_arg);
@@ -668,7 +668,7 @@ static void pattern_teleport(void)
        if (record_stair) do_cmd_write_nikki(NIKKI_PAT_TELE,0,NULL);
 
        p_ptr->inside_quest = 0;
-       energy_use = 0;
+       p_ptr->energy_use = 0;
 
        /*
         * Clear all saved floors
@@ -686,8 +686,9 @@ static void pattern_teleport(void)
  */
 static void wreck_the_pattern(void)
 {
-       int to_ruin = 0, r_y, r_x;
-       int pattern_type = f_info[cave[py][px].feat].subtype;
+       int to_ruin = 0;
+       POSITION r_y, r_x;
+       int pattern_type = f_info[cave[p_ptr->y][p_ptr->x].feat].subtype;
 
        if (pattern_type == PATTERN_TILE_WRECKED)
        {
@@ -705,7 +706,7 @@ static void wreck_the_pattern(void)
 
        while (to_ruin--)
        {
-               scatter(&r_y, &r_x, py, px, 4, 0);
+               scatter(&r_y, &r_x, p_ptr->y, p_ptr->x, 4, 0);
 
                if (pattern_tile(r_y, r_x) &&
                    (f_info[cave[r_y][r_x].feat].subtype != PATTERN_TILE_WRECKED))
@@ -714,7 +715,7 @@ static void wreck_the_pattern(void)
                }
        }
 
-       cave_set_feat(py, px, feat_pattern_corrupted);
+       cave_set_feat(p_ptr->y, p_ptr->x, feat_pattern_corrupted);
 }
 
 /*!
@@ -725,7 +726,7 @@ static bool pattern_effect(void)
 {
        int pattern_type;
 
-       if (!pattern_tile(py, px)) return FALSE;
+       if (!pattern_tile(p_ptr->y, p_ptr->x)) return FALSE;
 
        if ((prace_is_(RACE_AMBERITE)) &&
            (p_ptr->cut > 0) && one_in_(10))
@@ -733,7 +734,7 @@ static bool pattern_effect(void)
                wreck_the_pattern();
        }
 
-       pattern_type = f_info[cave[py][px].feat].subtype;
+       pattern_type = f_info[cave[p_ptr->y][p_ptr->x].feat].subtype;
 
        switch (pattern_type)
        {
@@ -753,7 +754,7 @@ static bool pattern_effect(void)
                (void)restore_level();
                (void)hp_player(1000);
 
-               cave_set_feat(py, px, feat_pattern_old);
+               cave_set_feat(p_ptr->y, p_ptr->x, feat_pattern_old);
                msg_print(_("「パターン」のこの部分は他の部分より強力でないようだ。", "This section of the Pattern looks less powerful."));
 
                /*
@@ -1533,7 +1534,7 @@ static object_type *choose_cursed_obj_name(u32b flag)
  */
 static void process_world_aux_hp_and_sp(void)
 {
-       feature_type *f_ptr = &f_info[cave[py][px].feat];
+       feature_type *f_ptr = &f_info[cave[p_ptr->y][p_ptr->x].feat];
        bool cave_no_regen = FALSE;
        int upkeep_factor = 0;
 
@@ -1603,7 +1604,7 @@ static void process_world_aux_hp_and_sp(void)
        {
                if (!dun_level && !p_ptr->resist_lite && !IS_INVULN() && is_daytime())
                {
-                       if ((cave[py][px].info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW)
+                       if ((cave[p_ptr->y][p_ptr->x].info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW)
                        {
                                /* Take damage */
                                msg_print(_("日光があなたのアンデッドの肉体を焼き焦がした!", "The sun's rays scorch your undead flesh!"));
@@ -1661,11 +1662,11 @@ static void process_world_aux_hp_and_sp(void)
                        {
                                msg_print(_("熱で火傷した!", "The heat burns you!"));
                                take_hit(DAMAGE_NOESCAPE, damage, format(_("%sの上に浮遊したダメージ", "flying over %s"), 
-                                                               f_name + f_info[get_feat_mimic(&cave[py][px])].name), -1);
+                                                               f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name), -1);
                        }
                        else
                        {
-                               cptr name = f_name + f_info[get_feat_mimic(&cave[py][px])].name;
+                               cptr name = f_name + f_info[get_feat_mimic(&cave[p_ptr->y][p_ptr->x])].name;
                                msg_format(_("%sで火傷した!", "The %s burns you!"), name);
                                take_hit(DAMAGE_NOESCAPE, damage, name, -1);
                        }
@@ -2323,7 +2324,7 @@ static void process_world_aux_mutation(void)
                if (pet) mode |= PM_FORCE_PET;
                else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
 
-               if (summon_specific((pet ? -1 : 0), py, px,
+               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x,
                                    dun_level, SUMMON_DEMON, mode))
                {
                        msg_print(_("あなたはデーモンを引き寄せた!", "You have attracted a demon!"));
@@ -2393,7 +2394,7 @@ static void process_world_aux_mutation(void)
                msg_print(NULL);
 
                /* Absorb light from the current possition */
-               if ((cave[py][px].info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW)
+               if ((cave[p_ptr->y][p_ptr->x].info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW)
                {
                        hp_player(10);
                }
@@ -2434,7 +2435,7 @@ static void process_world_aux_mutation(void)
                if (pet) mode |= PM_FORCE_PET;
                else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
 
-               if (summon_specific((pet ? -1 : 0), py, px, dun_level, SUMMON_ANIMAL, mode))
+               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, dun_level, SUMMON_ANIMAL, mode))
                {
                        msg_print(_("動物を引き寄せた!", "You have attracted an animal!"));
                        disturb(0, 1);
@@ -2514,7 +2515,7 @@ static void process_world_aux_mutation(void)
                if (pet) mode |= PM_FORCE_PET;
                else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
 
-               if (summon_specific((pet ? -1 : 0), py, px, dun_level, SUMMON_DRAGON, mode))
+               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, dun_level, SUMMON_DRAGON, mode))
                {
                        msg_print(_("ドラゴンを引き寄せた!", "You have attracted a dragon!"));
                        disturb(0, 1);
@@ -2796,7 +2797,7 @@ static void process_world_aux_curse(void)
                /* Call animal */
                if ((p_ptr->cursed & TRC_CALL_ANIMAL) && one_in_(2500))
                {
-                       if (summon_specific(0, py, px, dun_level, SUMMON_ANIMAL,
+                       if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_ANIMAL,
                            (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
                        {
                                char o_name[MAX_NLEN];
@@ -2809,7 +2810,7 @@ static void process_world_aux_curse(void)
                /* Call demon */
                if ((p_ptr->cursed & TRC_CALL_DEMON) && one_in_(1111))
                {
-                       if (summon_specific(0, py, px, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
+                       if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
                        {
                                char o_name[MAX_NLEN];
 
@@ -2821,7 +2822,7 @@ static void process_world_aux_curse(void)
                /* Call dragon */
                if ((p_ptr->cursed & TRC_CALL_DRAGON) && one_in_(800))
                {
-                       if (summon_specific(0, py, px, dun_level, SUMMON_DRAGON,
+                       if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_DRAGON,
                            (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
                        {
                                char o_name[MAX_NLEN];
@@ -2834,7 +2835,7 @@ static void process_world_aux_curse(void)
                /* Call undead */
                if ((p_ptr->cursed & TRC_CALL_UNDEAD) && one_in_(1111))
                {
-                       if (summon_specific(0, py, px, dun_level, SUMMON_UNDEAD,
+                       if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD,
                            (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))
                        {
                                char o_name[MAX_NLEN];
@@ -2971,8 +2972,8 @@ static void process_world_aux_recharge(void)
                if ((o_ptr->tval == TV_ROD) && (o_ptr->timeout))
                {
                        /* Determine how many rods are charging. */
-                       int temp = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
-                       if (temp > o_ptr->number) temp = o_ptr->number;
+                       TIME_EFFECT temp = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
+                       if (temp > o_ptr->number) temp = (TIME_EFFECT)o_ptr->number;
 
                        /* Decrease timeout by that number. */
                        o_ptr->timeout -= temp;
@@ -3016,7 +3017,7 @@ static void process_world_aux_recharge(void)
                if ((o_ptr->tval == TV_ROD) && (o_ptr->timeout))
                {
                        /* Charge it */
-                       o_ptr->timeout -= o_ptr->number;
+                       o_ptr->timeout -= (TIME_EFFECT)o_ptr->number;
 
                        /* Boundary control. */
                        if (o_ptr->timeout < 0) o_ptr->timeout = 0;
@@ -3107,14 +3108,14 @@ static void process_world_aux_movement(void)
 
                                if (p_ptr->wild_mode)
                                {
-                                       p_ptr->wilderness_y = py;
-                                       p_ptr->wilderness_x = px;
+                                       p_ptr->wilderness_y = p_ptr->y;
+                                       p_ptr->wilderness_x = p_ptr->x;
                                }
                                else
                                {
                                        /* Save player position */
-                                       p_ptr->oldpx = px;
-                                       p_ptr->oldpy = py;
+                                       p_ptr->oldpx = p_ptr->x;
+                                       p_ptr->oldpy = p_ptr->y;
                                }
                                p_ptr->wild_mode = FALSE;
 
@@ -3205,7 +3206,7 @@ static void process_world_aux_movement(void)
  * @param m_idx 隣接数を調べたいモンスターのID
  * @return 隣接しているモンスターの数
  */
-static int get_monster_crowd_number(int m_idx)
+static int get_monster_crowd_number(MONSTER_IDX m_idx)
 {
        monster_type *m_ptr = &m_list[m_idx];
        int my = m_ptr->fy;
@@ -3243,7 +3244,7 @@ static byte get_dungeon_feeling(void)
 {
        const int base = 10;
        int rating = 0;
-       int i;
+       IDX i;
 
        /* Hack -- no feeling in the town */
        if (!dun_level) return 0;
@@ -3457,6 +3458,17 @@ static void process_world(void)
        /* Update dungeon feeling, and announce it if changed */
        update_dungeon_feeling();
 
+       /* 帰還無しモード時のレベルテレポバグ対策 / Fix for level teleport bugs on ironman_downward.*/
+       if (ironman_downward && (dungeon_type != DUNGEON_ANGBAND && dungeon_type != 0))
+       {
+               dun_level = 0;
+               dungeon_type = 0;
+               prepare_change_floor_mode(CFM_FIRST_FLOOR | CFM_RAND_PLACE);
+               p_ptr->inside_arena = FALSE;
+               p_ptr->wild_mode = FALSE;
+               p_ptr->leaving = TRUE;
+       }
+
        /*** Check monster arena ***/
        if (p_ptr->inside_battle && !p_ptr->leaving)
        {
@@ -3670,7 +3682,7 @@ static void process_world(void)
 
                        if (p_ptr->special_defense & NINJA_S_STEALTH)
                        {
-                               if (cave[py][px].info & CAVE_GLOW) set_superstealth(FALSE);
+                               if (cave[p_ptr->y][p_ptr->x].info & CAVE_GLOW) set_superstealth(FALSE);
                        }
                }
        }
@@ -4444,12 +4456,12 @@ static void process_command(void)
                                                which_power = _("祈り", "prayer");
 
                                        msg_format(_("反魔法バリアが%sを邪魔した!", "An anti-magic shell disrupts your %s!"), which_power);
-                                       energy_use = 0;
+                                       p_ptr->energy_use = 0;
                                }
                                else if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER))
                                {
                                        msg_format(_("狂戦士化していて頭が回らない!", "You cannot think directly!"));
-                                       energy_use = 0;
+                                       p_ptr->energy_use = 0;
                                }
                                else
                                {
@@ -4918,7 +4930,7 @@ static void process_command(void)
                        break;
                }
        }
-       if (!energy_use && !now_message)
+       if (!p_ptr->energy_use && !now_message)
                now_message = old_now_message;
 }
 
@@ -4927,7 +4939,7 @@ static void process_command(void)
  * @param r_idx 判定したいモンスター種族のID
  * @return 釣れる対象ならばTRUEを返す
  */
-static bool monster_tsuri(int r_idx)
+static bool monster_tsuri(MONRACE_IDX r_idx)
 {
        monster_race *r_ptr = &r_info[r_idx];
 
@@ -4969,7 +4981,7 @@ static void pack_overflow(void)
                msg_format(_("%s(%c)を落とした。", "You drop %s (%c)."), o_name, index_to_label(INVEN_PACK));
 
                /* Drop it (carefully) near the player */
-               (void)drop_near(o_ptr, 0, py, px);
+               (void)drop_near(o_ptr, 0, p_ptr->y, p_ptr->x);
 
                /* Modify, Describe, Optimize */
                inven_item_increase(INVEN_PACK, -255);
@@ -5023,7 +5035,7 @@ static void process_upkeep_with_speed(void)
  */
 static void process_player(void)
 {
-       int i;
+       IDX i;
 
        /*** Apply energy ***/
 
@@ -5102,7 +5114,7 @@ static void process_player(void)
                Term_xtra(TERM_XTRA_DELAY, 10);
                if (one_in_(1000))
                {
-                       int r_idx;
+                       MONRACE_IDX r_idx;
                        bool success = FALSE;
                        get_mon_num_prep(monster_tsuri,NULL);
                        r_idx = get_mon_num(dun_level ? dun_level : wilderness[p_ptr->wilderness_y][p_ptr->wilderness_x].level);
@@ -5110,8 +5122,8 @@ static void process_player(void)
                        if (r_idx && one_in_(2))
                        {
                                int y, x;
-                               y = py+ddy[tsuri_dir];
-                               x = px+ddx[tsuri_dir];
+                               y = p_ptr->y+ddy[tsuri_dir];
+                               x = p_ptr->x+ddx[tsuri_dir];
                                if (place_monster_aux(0, y, x, r_idx, PM_NO_KAGE))
                                {
                                        char m_name[80];
@@ -5228,13 +5240,13 @@ static void process_player(void)
        {
                (void)set_lightspeed(p_ptr->lightspeed - 1, TRUE);
        }
-       if ((p_ptr->pclass == CLASS_FORCETRAINER) && (p_ptr->magic_num1[0]))
+       if ((p_ptr->pclass == CLASS_FORCETRAINER) && P_PTR_KI)
        {
-               if (p_ptr->magic_num1[0] < 40)
+               if (P_PTR_KI < 40)
                {
-                       p_ptr->magic_num1[0] = 0;
+                       P_PTR_KI = 0;
                }
-               else p_ptr->magic_num1[0] -= 40;
+               else P_PTR_KI -= 40;
                p_ptr->update |= (PU_BONUS);
        }
        if (p_ptr->action == ACTION_LEARN)
@@ -5294,7 +5306,7 @@ static void process_player(void)
                handle_stuff();
 
                /* Place the cursor on the player */
-               move_cursor_relative(py, px);
+               move_cursor_relative(p_ptr->y, p_ptr->x);
 
                /* Refresh (optional) */
                if (fresh_before) Term_fresh();
@@ -5309,13 +5321,13 @@ static void process_player(void)
 
 
                /* Assume free turn */
-               energy_use = 0;
+               p_ptr->energy_use = 0;
 
 
                if (p_ptr->inside_battle)
                {
                        /* Place the cursor on the player */
-                       move_cursor_relative(py, px);
+                       move_cursor_relative(p_ptr->y, p_ptr->x);
 
                        command_cmd = SPECIAL_KEY_BUILDING;
 
@@ -5327,7 +5339,7 @@ static void process_player(void)
                else if (p_ptr->paralyzed || (p_ptr->stun >= 100))
                {
                        /* Take a turn */
-                       energy_use = 100;
+                       p_ptr->energy_use = 100;
                }
 
                /* Resting */
@@ -5346,14 +5358,14 @@ static void process_player(void)
                        }
 
                        /* Take a turn */
-                       energy_use = 100;
+                       p_ptr->energy_use = 100;
                }
 
                /* Fishing */
                else if (p_ptr->action == ACTION_FISH)
                {
                        /* Take a turn */
-                       energy_use = 100;
+                       p_ptr->energy_use = 100;
                }
 
                /* Running */
@@ -5398,7 +5410,7 @@ static void process_player(void)
                else
                {
                        /* Place the cursor on the player */
-                       move_cursor_relative(py, px);
+                       move_cursor_relative(p_ptr->y, p_ptr->x);
 
                        can_save = TRUE;
                        /* Get a command (normal) */
@@ -5417,18 +5429,18 @@ static void process_player(void)
                /*** Clean up ***/
 
                /* Significant */
-               if (energy_use)
+               if (p_ptr->energy_use)
                {
                        /* Use some energy */
-                       if (world_player || energy_use > 400)
+                       if (world_player || p_ptr->energy_use > 400)
                        {
                                /* The Randomness is irrelevant */
-                               p_ptr->energy_need += energy_use * TURNS_PER_TICK / 10;
+                               p_ptr->energy_need += p_ptr->energy_use * TURNS_PER_TICK / 10;
                        }
                        else
                        {
                                /* There is some randomness of needed energy */
-                               p_ptr->energy_need += (s16b)((s32b)energy_use * ENERGY_NEED() / 100L);
+                               p_ptr->energy_need += (s16b)((s32b)p_ptr->energy_use * ENERGY_NEED() / 100L);
                        }
 
                        /* Hack -- constant hallucination */
@@ -5579,7 +5591,7 @@ static void process_player(void)
                }
 
                /* Sniper */
-               if (energy_use && reset_concent) reset_concentration(TRUE);
+               if (p_ptr->energy_use && reset_concent) reset_concentration(TRUE);
 
                /* Handle "leaving" */
                if (p_ptr->leaving) break;
@@ -5813,7 +5825,7 @@ static void dungeon(bool load_game)
                handle_stuff();
 
                /* Hack -- Hilite the player */
-               move_cursor_relative(py, px);
+               move_cursor_relative(p_ptr->y, p_ptr->x);
 
                /* Optional fresh */
                if (fresh_after) Term_fresh();
@@ -5831,7 +5843,7 @@ static void dungeon(bool load_game)
                handle_stuff();
 
                /* Hack -- Hilite the player */
-               move_cursor_relative(py, px);
+               move_cursor_relative(p_ptr->y, p_ptr->x);
 
                /* Optional fresh */
                if (fresh_after) Term_fresh();
@@ -5850,7 +5862,7 @@ static void dungeon(bool load_game)
                handle_stuff();
 
                /* Hack -- Hilite the player */
-               move_cursor_relative(py, px);
+               move_cursor_relative(p_ptr->y, p_ptr->x);
 
                /* Optional fresh */
                if (fresh_after) Term_fresh();
@@ -6099,7 +6111,7 @@ void determine_today_mon(bool conv_old)
  */
 void play_game(bool new_game)
 {
-       int i;
+       MONSTER_IDX i;
        bool load_game = TRUE;
        bool init_random_seed = FALSE;
 
@@ -6176,7 +6188,7 @@ void play_game(bool new_game)
 
                p_ptr->is_dead = TRUE;
 
-               start_time = time(NULL);
+               start_time = (u32b)time(NULL);
 
                /* No suspending now */
                signals_ignore_tstp();
@@ -6352,7 +6364,7 @@ void play_game(bool new_game)
                {
                        p_ptr->wizard = TRUE;
 
-                       if (p_ptr->is_dead || !py || !px)
+                       if (p_ptr->is_dead || !p_ptr->y || !p_ptr->x)
                        {
                                /* Initialize the saved floors data */
                                init_saved_floors(TRUE);
@@ -6361,7 +6373,7 @@ void play_game(bool new_game)
                                p_ptr->inside_quest = 0;
 
                                /* Avoid crash in update_view() */
-                               py = px = 10;
+                               p_ptr->y = p_ptr->x = 10;
                        }
                }
                else if (p_ptr->is_dead)
@@ -6398,14 +6410,14 @@ void play_game(bool new_game)
                if (p_ptr->panic_save)
                {
                        /* No player?  -- Try to regenerate floor */
-                       if (!py || !px)
+                       if (!p_ptr->y || !p_ptr->x)
                        {
                                msg_print(_("プレイヤーの位置がおかしい。フロアを再生成します。", "What a strange player location.  Regenerate the dungeon floor."));
                                change_floor();
                        }
 
                        /* Still no player?  -- Try to locate random place */
-                       if (!py || !px) py = px = 10;
+                       if (!p_ptr->y || !p_ptr->x) p_ptr->y = p_ptr->x = 10;
 
                        /* No longer in panic */
                        p_ptr->panic_save = 0;
@@ -6468,9 +6480,9 @@ void play_game(bool new_game)
        if (new_game && ((p_ptr->pclass == CLASS_CAVALRY) || (p_ptr->pclass == CLASS_BEASTMASTER)))
        {
                monster_type *m_ptr;
-               int pet_r_idx = ((p_ptr->pclass == CLASS_CAVALRY) ? MON_HORSE : MON_YASE_HORSE);
+               IDX pet_r_idx = ((p_ptr->pclass == CLASS_CAVALRY) ? MON_HORSE : MON_YASE_HORSE);
                monster_race *r_ptr = &r_info[pet_r_idx];
-               place_monster_aux(0, py, px - 1, pet_r_idx,
+               place_monster_aux(0, p_ptr->y, p_ptr->x - 1, pet_r_idx,
                                  (PM_FORCE_PET | PM_NO_KAGE));
                m_ptr = &m_list[hack_m_idx_ii];
                m_ptr->mspeed = r_ptr->speed;
@@ -6578,13 +6590,14 @@ void play_game(bool new_game)
 
                                        if (p_ptr->pclass == CLASS_MAGIC_EATER)
                                        {
-                                               for (i = 0; i < EATER_EXT*2; i++)
+                                               int magic_idx;
+                                               for (magic_idx = 0; magic_idx < EATER_EXT*2; magic_idx++)
                                                {
-                                                       p_ptr->magic_num1[i] = p_ptr->magic_num2[i]*EATER_CHARGE;
+                                                       p_ptr->magic_num1[magic_idx] = p_ptr->magic_num2[magic_idx]*EATER_CHARGE;
                                                }
-                                               for (; i < EATER_EXT*3; i++)
+                                               for (; magic_idx < EATER_EXT*3; magic_idx++)
                                                {
-                                                       p_ptr->magic_num1[i] = 0;
+                                                       p_ptr->magic_num1[magic_idx] = 0;
                                                }
                                        }
                                        /* Restore spell points */