OSDN Git Service

#37875 悪夢モード時で0:00になった際、TY_CURSEを発生させる前に広域マップを解除し、複数回の発生を回避するよう修正。 / On nightmare...
authorDeskull <desull@users.sourceforge.jp>
Wed, 14 Mar 2018 18:08:58 +0000 (03:08 +0900)
committerDeskull <desull@users.sourceforge.jp>
Wed, 14 Mar 2018 18:08:58 +0000 (03:08 +0900)
src/dungeon.c
src/externs.h
src/variable.c
src/wild.c

index 88ef652..d1a72d2 100644 (file)
@@ -3521,7 +3521,7 @@ static void process_world(void)
                        p_ptr->energy_need = 0;
                        battle_monsters();
                }
-               else if (turn - old_turn == 150*TURNS_PER_TICK)
+               else if (turn - old_turn == 150 * TURNS_PER_TICK)
                {
                        msg_print(_("申し分けありませんが、この勝負は引き分けとさせていただきます。", "This battle have ended in a draw."));
                        p_ptr->au += kakekin;
@@ -3774,11 +3774,12 @@ static void process_world(void)
 
        /*
         * Nightmare mode activates the TY_CURSE at midnight
-        *
         * Require exact minute -- Don't activate multiple times in a minute
         */
+
        if (ironman_nightmare && (min != prev_min))
        {
+
                /* Every 15 minutes after 11:00 pm */
                if ((hour == 23) && !(min % 15))
                {
@@ -3808,11 +3809,25 @@ static void process_world(void)
                /* TY_CURSE activates at midnight! */
                if (!hour && !min)
                {
-                       int count = 0;
 
                        disturb(1, 1);
                        msg_print(_("遠くで鐘が何回も鳴り、死んだような静けさの中へ消えていった。", "A distant bell tolls many times, fading into an deathly silence."));
-                       activate_ty_curse(FALSE, &count);
+
+                       if (p_ptr->wild_mode)
+                       {
+                               /* Go into large wilderness view */
+                               p_ptr->oldpy = randint1(MAX_HGT - 2);
+                               p_ptr->oldpx = randint1(MAX_WID - 2);
+                               change_wild_mode();
+
+                               /* Give first move to monsters */
+                               p_ptr->energy_use = 100;
+
+                               /* HACk -- set the encouter flag for the wilderness generation */
+                               generate_encounter = TRUE;
+                       }
+
+                       invoking_midnight_curse = TRUE;
                }
        }
 
@@ -5047,6 +5062,13 @@ static void process_player(void)
                hack_mutation = FALSE;
        }
 
+       if (invoking_midnight_curse)
+       {
+               int count = 0;
+               activate_ty_curse(FALSE, &count);
+               invoking_midnight_curse = FALSE;
+       }
+
        if (p_ptr->inside_battle)
        {
                for(i = 1; i < m_max; i++)
@@ -5870,9 +5892,6 @@ static void dungeon(bool load_game)
                /* Hack -- Notice death or departure */
                if (!p_ptr->playing || p_ptr->is_dead) break;
 
-               /* Handle "leaving" */
-               if (p_ptr->leaving) break;
-
                /* Count game turns */
                turn++;
 
@@ -5884,6 +5903,9 @@ static void dungeon(bool load_game)
 
                prevent_turn_overflow();
 
+               /* Handle "leaving" */
+               if (p_ptr->leaving) break;
+
                if (wild_regen) wild_regen--;
        }
 
index 434c1b2..12d28fd 100644 (file)
@@ -166,6 +166,7 @@ extern s16b num_repro;
 extern DEPTH object_level;
 extern DEPTH monster_level;
 extern DEPTH base_level;
+extern bool invoking_midnight_curse;
 extern s32b turn;
 extern s32b turn_limit;
 extern s32b dungeon_turn;
index a9749d0..f9bd923 100644 (file)
@@ -121,6 +121,7 @@ s16b num_repro;                     /* Current reproducer count */
 DEPTH object_level;            /* Current object creation level */
 DEPTH monster_level;   /* Current monster creation level */
 DEPTH base_level;              /* Base dungeon level */
+bool invoking_midnight_curse; /*!< 悪夢モード時の真夜中太古の呪い発生処理フラグ */
 
 GAME_TURN turn;                                /*!< 画面表示上のゲーム時間基準となるターン / Current game turn */
 GAME_TURN turn_limit;          /*!< turnの最大値 / Limit of game turn */
index 09a3d84..89ae00b 100644 (file)
@@ -657,7 +657,7 @@ void wilderness_gen(void)
        player_place(p_ptr->oldpy, p_ptr->oldpx);
        /* p_ptr->leaving_dungeon = FALSE;*/
 
-       lim = (generate_encounter==TRUE)?40:MIN_M_ALLOC_TN;
+       lim = (generate_encounter == TRUE) ? 40 : MIN_M_ALLOC_TN;
 
        /* Make some residents */
        for (i = 0; i < lim; i++)
@@ -1175,8 +1175,8 @@ bool change_wild_mode(void)
        p_ptr->energy_use = 1000;
 
        /* Remember the position */
-       p_ptr->oldpx = (s16b)p_ptr->x;
-       p_ptr->oldpy = (s16b)p_ptr->y;
+       p_ptr->oldpx = p_ptr->x;
+       p_ptr->oldpy = p_ptr->y;
 
        /* Cancel hex spelling */
        if (hex_spelling_any()) stop_hex_spell_all();