OSDN Git Service

- floors.c のコード整理。フロア保存をするかどうかの判断をなるべく
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 7 Sep 2003 14:33:03 +0000 (14:33 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 7 Sep 2003 14:33:03 +0000 (14:33 +0000)
floors.c の外でするようにした。
- Kangband時代の名残りの無駄な変数 p_ptr->leftbldg を削除。

14 files changed:
src/birth.c
src/bldg.c
src/cmd1.c
src/cmd2.c
src/cmd6.c
src/defines.h
src/dungeon.c
src/effects.c
src/floors.c
src/load.c
src/save.c
src/types.h
src/wild.c
src/wizard2.c

index 7ae7c25..3bdb570 100644 (file)
@@ -3313,7 +3313,6 @@ static void player_wipe(void)
        p_ptr->arena_number = 0;
        p_ptr->inside_arena = FALSE;
        p_ptr->inside_quest = 0;
-       p_ptr->leftbldg = FALSE;
        for (i = 0; i < MAX_MANE; i++)
        {
                p_ptr->mane_spell[i] = -1;
index ae098fd..bc1530f 100644 (file)
@@ -282,12 +282,11 @@ msg_print("
                                        if (get_check("Do you fight? "))
 #endif
                                        {
-                                               p_ptr->leftbldg = TRUE;
                                                p_ptr->exit_bldg = FALSE;
                                                reset_tim_flags();
 
-                                               /* Save the surface floor to preserve pets */
-                                               prepare_change_floor_mode(CFM_SAVE_SURFACE);
+                                               /* Save the surface floor as saved floor */
+                                               /* prepare_change_floor_mode(0); */
 
                                                p_ptr->inside_arena = TRUE;
                                                p_ptr->leaving = TRUE;
@@ -325,12 +324,11 @@ msg_print("
                        }
                        else
                        {
-                               p_ptr->leftbldg = TRUE;
                                p_ptr->exit_bldg = FALSE;
                                reset_tim_flags();
 
-                               /* Save the surface floor to preserve pets */
-                               prepare_change_floor_mode(CFM_SAVE_SURFACE);
+                               /* Save the surface floor as saved floor */
+                               /* prepare_change_floor_mode(0); */
 
                                p_ptr->inside_arena = TRUE;
                                p_ptr->leaving = TRUE;
@@ -2059,11 +2057,10 @@ msg_print("
                        battle_odds = MAX(wager+1, wager * battle_odds / 100);
                        kakekin = wager;
                        p_ptr->au -= wager;
-                       p_ptr->leftbldg = TRUE;
                        reset_tim_flags();
 
-                       /* Save the surface floor to preserve pets */
-                       prepare_change_floor_mode(CFM_SAVE_SURFACE);
+                       /* Save the surface floor as saved floor */
+                       /* prepare_change_floor_mode(0); */
 
                        p_ptr->inside_battle = TRUE;
                        p_ptr->leaving = TRUE;
@@ -2904,8 +2901,6 @@ msg_print("
 #endif
                                        }
                                }
-
-                               p_ptr->leftbldg = TRUE;
                        }
                        break;
 
@@ -4275,7 +4270,10 @@ bool tele_town(void)
                        }
                }
        }
-       p_ptr->leftbldg = TRUE;
+
+       /* Clear all saved floors */
+       prepare_change_floor_mode(CFM_CLEAR_ALL);
+
        p_ptr->leaving = TRUE;
        leave_bldg = TRUE;
        p_ptr->teleport_town = TRUE;
@@ -4909,9 +4907,12 @@ msg_print("
 
                leave_quest_check();
 
+               if (quest[p_ptr->inside_quest].type != QUEST_TYPE_RANDOM) dun_level = 1;
                p_ptr->inside_quest = cave[py][px].special;
-               if(quest[leaving_quest].type != QUEST_TYPE_RANDOM) dun_level = 1;
-               p_ptr->leftbldg = TRUE;
+
+               /* Clear all saved floors */
+               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                p_ptr->leaving = TRUE;
        }
 }
@@ -4970,8 +4971,8 @@ prt("
        }
        else if ((which == 2) && p_ptr->inside_arena)
        {
-               /* Restore the surface floor to preserve pets */
-               prepare_change_floor_mode(CFM_SAVE_SURFACE | CFM_NO_RETURN);
+               /* Don't save the arena as saved floor */
+               prepare_change_floor_mode(CFM_NO_RETURN);
 
                p_ptr->inside_arena = FALSE;
                p_ptr->leaving = TRUE;
@@ -4983,8 +4984,8 @@ prt("
        }
        else if (p_ptr->inside_battle)
        {
-               /* Restore the surface floor to preserve pets */
-               prepare_change_floor_mode(CFM_SAVE_SURFACE | CFM_NO_RETURN);
+               /* Don't save the arena as saved floor */
+               prepare_change_floor_mode(CFM_NO_RETURN);
 
                p_ptr->leaving = TRUE;
                p_ptr->inside_battle = FALSE;
@@ -5061,7 +5062,12 @@ prt("
 
        /* Reinit wilderness to activate quests ... */
        if (reinit_wilderness)
+       {
+               /* Clear all saved floors */
+               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                p_ptr->leaving = TRUE;
+       }
 
        /* Hack -- Decrease "icky" depth */
        character_icky--;
index c3767df..441cc40 100644 (file)
@@ -3655,7 +3655,9 @@ void move_player(int dir, int do_pickup, bool break_trap)
                                ambush_flag = FALSE;
                        }
 
-                       p_ptr->leftbldg = TRUE;
+                       /* Clear all saved floors */
+                       prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                        p_ptr->leaving = TRUE;
                        energy_use = 100;
 
@@ -4295,6 +4297,10 @@ msg_format("%s
                        dun_level = 0;
                        p_ptr->oldpx = 0;
                        p_ptr->oldpy = 0;
+
+                       /* Clear all saved floors */
+                       prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                        p_ptr->leaving = TRUE;
                }
 
index 5ca4238..e18661f 100644 (file)
@@ -59,9 +59,11 @@ void do_cmd_go_up(void)
                        dun_level = 0;
                }
 
+               /* Clear all saved floors */
+               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                /* Leaving */
                p_ptr->leaving = TRUE;
-               p_ptr->leftbldg = TRUE;
 
                p_ptr->oldpx = 0;
                p_ptr->oldpy = 0;
@@ -118,22 +120,27 @@ void do_cmd_go_up(void)
 
        if (autosave_l) do_cmd_save_game(TRUE);
 
-       if (p_ptr->inside_quest)
+       /* For a random quest */
+       if (p_ptr->inside_quest &&
+           quest[p_ptr->inside_quest].type == QUEST_TYPE_RANDOM)
        {
                leave_quest_check();
 
-               if (quest[leaving_quest].type != QUEST_TYPE_RANDOM)
-               {
-                       p_ptr->inside_quest = c_ptr->special;
-                       dun_level = 0;
-               }
-               else
-               {
-                       p_ptr->inside_quest = 0;
-               }
+               p_ptr->inside_quest = 0;
+       }
 
+       /* For a fixed quest */
+       if (p_ptr->inside_quest &&
+           quest[p_ptr->inside_quest].type != QUEST_TYPE_RANDOM)
+       {
+               leave_quest_check();
+
+               p_ptr->inside_quest = c_ptr->special;
+               dun_level = 0;
                up_num = 0;
        }
+
+       /* For normal dungeon and random quest */
        else
        {
                /* New depth */
@@ -231,9 +238,11 @@ void do_cmd_go_down(void)
                        dun_level = 0;
                }
 
+               /* Clear all saved floors */
+               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                /* Leaving */
                p_ptr->leaving = TRUE;
-               p_ptr->leftbldg = TRUE;
 
                p_ptr->oldpx = 0;
                p_ptr->oldpy = 0;
@@ -3086,6 +3095,10 @@ void do_cmd_stay(int pickup)
                dun_level = 0;
                p_ptr->oldpx = 0;
                p_ptr->oldpy = 0;
+
+               /* Clear all saved floors */
+               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                p_ptr->leaving = TRUE;
        }
 }
index 0508926..0f3fcdb 100644 (file)
@@ -4834,6 +4834,9 @@ if (get_check("
                                        {
                                                if (autosave_l) do_cmd_save_game(TRUE);
 
+                                               /* Clear all saved floors */
+                                               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                                                /* Leaving */
                                                p_ptr->leaving = TRUE;
                                        }
index 8fe248b..e9fe834 100644 (file)
@@ -5196,7 +5196,6 @@ extern int PlayerUID;
 #define CFM_RAND_CONNECT 0x0040  /* Connect with random stairs */
 #define CFM_CLEAR_ALL    0x0080  /* Reach to the surface/Recall/Alter reality */
 #define CFM_NO_RETURN    0x0100  /* Flee from random quest etc... */
-#define CFM_SAVE_SURFACE 0x0200  /* Save surface level (for arena) */
 
 
 /*
index 5045fcb..1da6b29 100644 (file)
@@ -671,16 +671,17 @@ msg_format("%d 
 
        /* Change level */
        dun_level = command_arg;
-       prepare_change_floor_mode(CFM_CLEAR_ALL);
 
        leave_quest_check();
 
        if (record_stair) do_cmd_write_nikki(NIKKI_PAT_TELE,0,NULL);
 
        p_ptr->inside_quest = 0;
-       p_ptr->leftbldg = FALSE;
        energy_use = 0;
 
+       /* Clear all saved floors */
+       prepare_change_floor_mode(CFM_CLEAR_ALL);
+
        /* Leaving */
        p_ptr->leaving = TRUE;
 }
@@ -4159,11 +4160,14 @@ msg_print("
 
                                dun_level = 0;
                                dungeon_type = 0;
-                               prepare_change_floor_mode(CFM_CLEAR_ALL);
 
                                leave_quest_check();
 
                                p_ptr->inside_quest = 0;
+
+                               /* Clear all saved floors */
+                               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                                p_ptr->leaving = TRUE;
                        }
                        else
@@ -4213,6 +4217,7 @@ msg_print("
                                }
                                p_ptr->wild_mode = FALSE;
 
+                               /* Clear all saved floors */
                                prepare_change_floor_mode(CFM_CLEAR_ALL);
 
                                /* Leaving */
@@ -4266,6 +4271,7 @@ msg_print("
                                msg_print("The world changes!");
 #endif
 
+                               /* Clear all saved floors */
                                prepare_change_floor_mode(CFM_CLEAR_ALL);
 
                                /* Leaving */
@@ -7217,6 +7223,10 @@ msg_print("ĥ
 
                                        /* Leaving */
                                        p_ptr->wild_mode = FALSE;
+
+                                       /* Clear all saved floors */
+                                       prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                                        p_ptr->leaving = TRUE;
 
 #ifdef JP
index 67f7e5d..8b272ed 100644 (file)
@@ -5132,6 +5132,9 @@ int take_hit(int damage_type, int damage, cptr hit_from, int monspell)
 
                chg_virtue(V_SACRIFICE, 10);
 
+               /* Clear all saved floors */
+               prepare_change_floor_mode(CFM_CLEAR_ALL);
+
                /* Leaving */
                p_ptr->leaving = TRUE;
 
index 2642cda..2c6fa0b 100644 (file)
@@ -749,28 +749,24 @@ void leave_floor(void)
        new_floor_id = 0;
 
 
-       /* From somewhere of the surface to somewhere of the surface */
-       if (!dungeon_type)
+       if (!p_ptr->floor_id)
        {
-               if (change_floor_mode & CFM_SAVE_SURFACE)
+               if (change_floor_mode & (CFM_NO_RETURN | CFM_CLEAR_ALL))
                {
-                       /* Save surface floor to preserve pets (for Arena) */
-                       if (!p_ptr->floor_id)
-                       {
-                               /* Get temporal floor_id */
-                               p_ptr->floor_id = get_new_floor_id();
-
-                               /* Record the dungeon level */
-                               get_sf_ptr(p_ptr->floor_id)->dun_level = dun_level;
-                       }
+                       /* No need to save current floor */
+                       return;
                }
                else
                {
-                       /* No need to save current floor */
-                       return;
+                       /* Get temporal floor_id */
+                       p_ptr->floor_id = get_new_floor_id();
+
+                       /* Record the dungeon level */
+                       get_sf_ptr(p_ptr->floor_id)->dun_level = dun_level;
                }
        }
 
+
        /* Search the quest monster index */
        for (i = 0; i < max_quests; i++)
        {
@@ -915,8 +911,7 @@ void leave_floor(void)
                c_ptr = &cave[py][px];
 
                /* Get back to old saved floor? */
-               if ((dun_level || (change_floor_mode & CFM_SAVE_SURFACE))
-                   && c_ptr->special && get_sf_ptr(c_ptr->special))
+               if (c_ptr->special && get_sf_ptr(c_ptr->special))
                {
                        /* Saved floor is exist.  Use it. */
                        new_floor_id = c_ptr->special;
@@ -1071,13 +1066,13 @@ void change_floor(void)
        /* Mega-Hack -- not ambushed on the wildness? */
        ambush_flag = FALSE;
 
-       /* On the surface */
-       if (!dungeon_type && !(change_floor_mode & CFM_SAVE_SURFACE))
+       /* No saved floors (On the surface etc.) */
+       if (change_floor_mode & CFM_CLEAR_ALL)
        {
                /* Create cave */
                generate_cave();
 
-               /* Paranoia -- Now on the surface */
+               /* Paranoia -- No new saved floor */
                new_floor_id = 0;
        }
 
@@ -1275,12 +1270,9 @@ void change_floor(void)
                        /* Set correct dun_level value */
                        sf_ptr->dun_level = dun_level;
 
-                       /* Creat connected stairs */
-                       if (!(change_floor_mode & (CFM_NO_RETURN | CFM_CLEAR_ALL))
-                           && (dun_level || (change_floor_mode & CFM_SAVE_SURFACE)))
+                       /* Create connected stairs */
+                       if (!(change_floor_mode & (CFM_NO_RETURN | CFM_CLEAR_ALL)))
                        {
-                               bool ok = TRUE;
-
                                /* Extract stair position */
                                cave_type *c_ptr = &cave[py][px];
 
@@ -1304,26 +1296,11 @@ void change_floor(void)
                                                c_ptr->feat = FEAT_LESS;
                                }
 
-                               /* Enter to/leave the Arena */
-                               else if (change_floor_mode & CFM_SAVE_SURFACE)
-                               {
-                                       /* Nothing to do */
-                               }
-
-                               else
-                               {
-                                       /* Hum??? */
-                                       ok = FALSE;
-                               }
-
-                               if (ok)
-                               {
-                                       /* Paranoia -- Clear mimic */
-                                       c_ptr->mimic = 0;
+                               /* Paranoia -- Clear mimic */
+                               c_ptr->mimic = 0;
 
-                                       /* Connect to previous floor */
-                                       c_ptr->special = p_ptr->floor_id;
-                               }
+                               /* Connect to previous floor */
+                               c_ptr->special = p_ptr->floor_id;
                        }
                }
 
index 6345a1a..fe102c9 100644 (file)
@@ -1652,7 +1652,7 @@ static void rd_extra(void)
                p_ptr->inside_battle = (bool)tmp16s;
        }
        rd_byte(&p_ptr->exit_bldg);
-       rd_byte(&p_ptr->leftbldg);
+       rd_byte(&tmp8u);
 
        rd_s16b(&p_ptr->oldpx);
        rd_s16b(&p_ptr->oldpy);
@@ -2859,12 +2859,9 @@ static errr rd_dungeon(void)
        /* Number of the saved_floors array elements */
        rd_byte(&num);
 
-       /*** On the surface  ***/
+       /*** No saved floor (On the surface etc.) ***/
        if (!num)
        {
-               /* It should be 0 */
-               if (num) err = 181;
-
                /* Read the current floor data */
                err = rd_saved_floor(NULL);
        }
@@ -2965,14 +2962,6 @@ static errr rd_dungeon(void)
 #endif
                break;
 
-       case 181:
-#ifdef JP
-               note("Error 181");
-#else
-               note("Error 181");
-#endif
-               break;
-
        case 182:
 #ifdef JP
                note("¥Æ¥ó¥Ý¥é¥ê¡¦¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡ª");
@@ -3172,24 +3161,6 @@ if (arg_fiddle) note("
 #endif
 
 
-#if 0
-       /*
-        * Initialize arena and rewards information
-        */
-       p_ptr->arena_number = 0;
-       p_ptr->inside_arena = 0;
-       p_ptr->inside_quest = 0;
-       p_ptr->leftbldg = FALSE;
-       p_ptr->exit_bldg = TRUE;
-
-       /* Start in town 1 */
-       p_ptr->town_num = 1;
-
-       p_ptr->wilderness_x = 4;
-       p_ptr->wilderness_y = 4;
-
-#endif
-
        /* Init the wilderness seeds */
        for (i = 0; i < max_wild_x; i++)
        {
index 11ced4b..e5547f8 100644 (file)
@@ -612,7 +612,7 @@ static void wr_extra(void)
        wr_s16b(p_ptr->inside_quest);
        wr_s16b(p_ptr->inside_battle);
        wr_byte(p_ptr->exit_bldg);
-       wr_byte(p_ptr->leftbldg); /* save building leave status -KMW- */
+       wr_byte(0); /* Unused */
 
        wr_s16b(p_ptr->oldpx);
        wr_s16b(p_ptr->oldpy);
@@ -1094,7 +1094,7 @@ static bool wr_dungeon(void)
        wr_byte(dungeon_type);
 
 
-       /*** On the surface  ***/
+       /*** No saved floor (On the surface etc.) ***/
        if (!p_ptr->floor_id)
        {
                /* No array elements */
index 57fcb41..9bc3fd4 100644 (file)
@@ -1146,7 +1146,6 @@ struct player_type
        bool leaving;                   /* True if player is leaving */
 
        byte exit_bldg;                 /* Goal obtained in arena? -KMW- */
-       byte leftbldg;                  /* did we just leave a special area? -KMW- */
 
        bool leaving_dungeon;   /* True if player is leaving the dungeon */
        bool teleport_town;
index a8e5515..b7752f8 100644 (file)
@@ -879,7 +879,6 @@ void wilderness_gen(void)
        }
 
        player_place(p_ptr->oldpy, p_ptr->oldpx);
-       p_ptr->leftbldg = FALSE;
        /* p_ptr->leaving_dungeon = FALSE;*/
 
        lim = (generate_encounter==TRUE)?40:MIN_M_ALLOC_TN;
@@ -1225,6 +1224,9 @@ bool change_wild_mode(void)
 
        p_ptr->wild_mode = !p_ptr->wild_mode;
 
+       /* Clear all saved floors */
+       prepare_change_floor_mode(CFM_CLEAR_ALL);
+
        /* Leaving */
        p_ptr->leaving = TRUE;
 
index f4cc1ee..27daf2d 100644 (file)
@@ -1537,7 +1537,6 @@ static void do_cmd_wiz_jump(void)
        if (record_stair) do_cmd_write_nikki(NIKKI_WIZ_TELE,0,NULL);
 
        p_ptr->inside_quest = 0;
-       p_ptr->leftbldg = FALSE;
        energy_use = 0;
 
        /* Prevent energy_need from being too lower than 0 */