OSDN Git Service

[Refactor] #37353 cmd1~melee1間整理。 / Refactor between cmd1 and melee1.
[hengband/hengband.git] / src / dungeon.c
index 71fba72..59dd0a1 100644 (file)
  */
 
 #include "angband.h"
-
-#define TY_CURSE_CHANCE 200 /*!<太古の怨念の1ターン毎の発動確率(1/n)*/
-#define CHAINSWORD_NOISE 100 /*!<チェンソーの1ターン毎の発動確率(1/n)*/
+#include "cmd-activate.h"
+#include "cmd-eat.h"
+#include "cmd-item.h"
+#include "cmd-magiceat.h"
+#include "cmd-quaff.h"
+#include "cmd-read.h"
+#include "cmd-usestaff.h"
+#include "cmd-zaprod.h"
+#include "cmd-zapwand.h"
+#include "cmd-pet.h"
 
 static bool load = TRUE; /*!<ロード処理中の分岐フラグ*/
 static int wild_regen = 20; /*!<広域マップ移動時の自然回復処理カウンタ(広域マップ1マス毎に20回処理を基本とする)*/
@@ -1394,7 +1401,7 @@ static void check_music(void)
 
        /* Music singed by player */
        if (p_ptr->pclass != CLASS_BARD) return;
-       if (!SINGING_SONG_ID(p_ptr) && !INTERUPTING_SONG_ID(p_ptr)) return;
+       if (!SINGING_SONG_EFFECT(p_ptr) && !INTERUPTING_SONG_EFFECT(p_ptr)) return;
 
        if (p_ptr->anti_magic)
        {
@@ -1402,7 +1409,7 @@ static void check_music(void)
                return;
        }
 
-       spell = p_ptr->magic_num2[0];
+       spell = SINGING_SONG_ID(p_ptr);
        s_ptr = &technic_info[REALM_MUSIC - MIN_TECHNIC][spell];
 
        need_mana = mod_need_mana(s_ptr->smana, spell, REALM_MUSIC);
@@ -1421,10 +1428,10 @@ static void check_music(void)
                s64b_sub(&(p_ptr->csp), &(p_ptr->csp_frac), need_mana, need_mana_frac);
 
                p_ptr->redraw |= PR_MANA;
-               if (INTERUPTING_SONG_ID(p_ptr))
+               if (INTERUPTING_SONG_EFFECT(p_ptr))
                {
-                       SINGING_SONG_ID(p_ptr) = p_ptr->magic_num1[1];
-                       INTERUPTING_SONG_ID(p_ptr) = 0;
+                       SINGING_SONG_EFFECT(p_ptr) = INTERUPTING_SONG_EFFECT(p_ptr);
+                       INTERUPTING_SONG_EFFECT(p_ptr) = MUSIC_NONE;
                        msg_print(_("歌を再開した。", "You restart singing."));
                        p_ptr->action = ACTION_SING;
 
@@ -3521,7 +3528,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 +3781,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 +3816,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;
                }
        }
 
@@ -4553,10 +4575,7 @@ static void process_command(void)
                /* Throw an item */
                case 'v':
                {
-                       if (!p_ptr->wild_mode)
-                       {
-                               do_cmd_throw();
-                       }
+                       if (!p_ptr->wild_mode) do_cmd_throw(1, FALSE, -1);
                        break;
                }
 
@@ -5047,6 +5066,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++)
@@ -5604,9 +5630,15 @@ static void process_player(void)
 /*!
  * @brief 現在プレイヤーがいるダンジョンの全体処理 / Interact with the current dungeon level.
  * @return なし
- * @note
+ * @details
+ * <p>
+ * この関数から現在の階層を出る、プレイヤーがキャラが死ぬ、
+ * ゲームを終了するかのいずれかまでループする。
+ * </p>
+ * <p>
  * This function will not exit until the level is completed,\n
  * the user dies, or the game is terminated.\n
+ * </p>
  */
 static void dungeon(bool load_game)
 {
@@ -5616,7 +5648,7 @@ static void dungeon(bool load_game)
        base_level = dun_level;
 
        /* Reset various flags */
-       hack_mind = FALSE;
+       is_loading_now = FALSE;
 
        /* Not leaving */
        p_ptr->leaving = FALSE;
@@ -5748,8 +5780,8 @@ static void dungeon(bool load_game)
                }
        }
 
-       if ((p_ptr->pclass == CLASS_BARD) && (SINGING_SONG_ID(p_ptr) > MUSIC_DETECT))
-               SINGING_SONG_ID(p_ptr) = MUSIC_DETECT;
+       if ((p_ptr->pclass == CLASS_BARD) && (SINGING_SONG_EFFECT(p_ptr) > MUSIC_DETECT))
+               SINGING_SONG_EFFECT(p_ptr) = MUSIC_DETECT;
 
        /* Hack -- notice death or departure */
        if (!p_ptr->playing || p_ptr->is_dead) return;
@@ -5784,7 +5816,7 @@ static void dungeon(bool load_game)
        /* Reset the object generation level */
        object_level = base_level;
 
-       hack_mind = TRUE;
+       is_loading_now = TRUE;
 
        if (p_ptr->energy_need > 0 && !p_ptr->inside_battle &&
            (dun_level || p_ptr->leaving_dungeon || p_ptr->inside_arena))
@@ -5870,9 +5902,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 +5913,9 @@ static void dungeon(bool load_game)
 
                prevent_turn_overflow();
 
+               /* Handle "leaving" */
+               if (p_ptr->leaving) break;
+
                if (wild_regen) wild_regen--;
        }