OSDN Git Service

スピードシステム修正に備えて、turnと時刻の取りあつかいのコードを整理。
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sat, 13 Apr 2002 18:23:58 +0000 (18:23 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sat, 13 Apr 2002 18:23:58 +0000 (18:23 +0000)
#define TURNS_PER_TICK 20L を定義した。
日付を求める関数等を用意してそれを呼ぶようにした。

12 files changed:
src/birth.c
src/bldg.c
src/cave.c
src/cmd4.c
src/defines.h
src/dungeon.c
src/externs.h
src/files.c
src/generate.c
src/store.c
src/wild.c
src/xtra1.c

index b4779ce..7c537bf 100644 (file)
@@ -5449,7 +5449,7 @@ static bool player_birth_aux(void)
            (p_ptr->prace == RACE_SPECTRE))
        {
                /* Undead start just after midnight */
-               turn = (60L * TOWN_DAWN) / 4 + 1;
+               turn = (TURNS_PER_TICK*3 * TOWN_DAWN) / 4 + 1;
        }
        else
        {
index 03184c2..f70b239 100644 (file)
@@ -1921,7 +1921,7 @@ static bool kakutoujou(void)
        char out_val[160], tmp_str[80];
        cptr p;
 
-       if ((turn - old_battle) > 5000)
+       if ((turn - old_battle) > TURNS_PER_TICK*250)
        {
                battle_monsters();
                old_battle = turn;
@@ -2685,8 +2685,8 @@ msg_print("
                        break;
 
                case BACT_REST: /* Rest for the night */
-                       dawnval = ((turn % (20L * TOWN_DAWN)));
-                       if (dawnval > 50000)
+                       dawnval = ((turn % (TURNS_PER_TICK * TOWN_DAWN)));
+                       if (dawnval > (TURNS_PER_TICK * TOWN_DAWN)/4)
                        {  /* nighttime */
                                if ((p_ptr->poisoned) || (p_ptr->cut))
                                {
@@ -2712,11 +2712,11 @@ msg_print("
 #else
                                        do_cmd_write_nikki(NIKKI_BUNSHOU, 0, "stay over night at the inn");
 #endif
-                                       turn = ((turn / 100000) + 1) * 100000;
-                                       if (((oldturn + 5L * TOWN_DAWN) % (20L * TOWN_DAWN)) > 50000L) do_cmd_write_nikki(NIKKI_HIGAWARI, 0, NULL);
+                                       turn = (turn / (TURNS_PER_TICK*TOWN_DAWN/2) + 1) * (TURNS_PER_TICK*TOWN_DAWN/2);
+                                       if (((oldturn + TURNS_PER_TICK * TOWN_DAWN / 4) % (TURNS_PER_TICK * TOWN_DAWN)) > TURNS_PER_TICK * TOWN_DAWN/4) do_cmd_write_nikki(NIKKI_HIGAWARI, 0, NULL);
                                        p_ptr->chp = p_ptr->mhp;
 
-                                       dungeon_turn += MIN(turn - oldturn, 5000);
+                                       dungeon_turn += MIN(turn - oldturn, TURNS_PER_TICK*250);
 
                                        if (ironman_nightmare)
                                        {
index 552bc40..36ab79c 100644 (file)
@@ -3342,8 +3342,6 @@ void update_mon_lite(void)
 
        s16b end_temp;
 
-       bool daytime = ((turn % (20L * TOWN_DAWN)) < ((20L * TOWN_DAWN) / 2));
-
        /* Clear all monster lit squares */
        for (i = 0; i < mon_lite_n; i++)
        {
@@ -3381,7 +3379,7 @@ void update_mon_lite(void)
 
                /* Exit if has no light */
                if (!rad) continue;
-               if (!(r_ptr->flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2)) && (m_ptr->csleep || (!dun_level && daytime) || p_ptr->inside_battle)) continue;
+               if (!(r_ptr->flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2)) && (m_ptr->csleep || (!dun_level && is_daytime()) || p_ptr->inside_battle)) continue;
 
                if (world_monster) continue;
 
index 5c70c80..c07d1ec 100644 (file)
@@ -224,23 +224,11 @@ errr do_cmd_write_nikki(int type, int num, cptr note)
        cptr note_level = "";
        bool do_level = TRUE;
 
-       s32b len = 20L * TOWN_DAWN;
-       s32b tick = turn % len + len / 4;
-
        static bool disable_nikki = FALSE;
 
-       if (disable_nikki) return(-1);
-
-       if ((p_ptr->prace == RACE_VAMPIRE) ||
-           (p_ptr->prace == RACE_SKELETON) ||
-           (p_ptr->prace == RACE_ZOMBIE) ||
-           (p_ptr->prace == RACE_SPECTRE))
-               day = (turn - (15L * TOWN_DAWN))/ len + 1;
-       else
-               day = (turn + (5L * TOWN_DAWN))/ len + 1;
+       extract_day_hour_min(&day, &hour, &min);
 
-       hour = (24 * tick / len) % 24;
-       min = (1440 * tick / len) % 60;
+       if (disable_nikki) return(-1);
 
        if (type == NIKKI_FIX_QUEST_C ||
            type == NIKKI_FIX_QUEST_F ||
@@ -4625,7 +4613,7 @@ void do_cmd_feeling(void)
        }
 
        /* Display the feeling */
-        if (turn - old_turn >= (3000 - dun_level*20) || cheat_xtra)
+        if (turn - old_turn >= (150 - dun_level)*TURNS_PER_TICK || cheat_xtra)
         {
                 if (p_ptr->muta3 & MUT3_GOOD_LUCK) msg_print(do_cmd_feeling_text_lucky[feeling]);
                 else {
@@ -7670,18 +7658,8 @@ void do_cmd_time(void)
 
        FILE *fff;
 
-       s32b len = 20L * TOWN_DAWN;
-       s32b tick = turn % len + len / 4;
+       extract_day_hour_min(&day, &hour, &min);
 
-       if ((p_ptr->prace == RACE_VAMPIRE) ||
-           (p_ptr->prace == RACE_SKELETON) ||
-           (p_ptr->prace == RACE_ZOMBIE) ||
-           (p_ptr->prace == RACE_SPECTRE))
-               day = (turn - (15L * TOWN_DAWN))/ len + 1;
-       else
-               day = (turn + (5L * TOWN_DAWN))/ len + 1;
-       hour = (24 * tick / len) % 24;
-       min = (1440 * tick / len) % 60;
        full = hour * 100 + min;
 
        start = 9999;
index f482251..a813be8 100644 (file)
 /*
  * Misc constants
  */
-#define TOWN_DAWN               10000   /* Number of turns from dawn to dawn XXX */
+#define TOWN_DAWN               10000   /* Number of ticks from dawn to dawn XXX */
+#define TURNS_PER_TICK          20L     /* # of energy-gain-turns per ticks */
 #define BREAK_GLYPH             550             /* Rune of protection resistance */
 #define BREAK_MINOR_GLYPH       299             /* For explosive runes */
 #define BTH_PLUS_ADJ    3       /* Adjust BTH per plus-to-hit */
index 99656e3..3bd0d3b 100644 (file)
@@ -1085,7 +1085,8 @@ msg_print("
        /* The light is getting dim */
        else if (o_ptr->name2 == EGO_LITE_LONG)
        {
-               if ((o_ptr->xtra4 < 50) && (!(o_ptr->xtra4 % 5)) && (turn % 40))
+               if ((o_ptr->xtra4 < 50) && (!(o_ptr->xtra4 % 5))
+                   && (turn % (TURNS_PER_TICK*2)))
                {
                        if (disturb_minor) disturb(0, 0);
 #ifdef JP
@@ -1488,15 +1489,16 @@ static void process_world(void)
        object_kind *k_ptr;
        const int dec_count = (easy_band ? 2 : 1);
 
-       int hour, min, prev_min;
-       s32b len = 20L * TOWN_DAWN;
+       int day, hour, min, prev_min;
+
+       s32b len = TURNS_PER_TICK * TOWN_DAWN;
        s32b tick = turn % len + len / 4;
 
-       hour = (24 * tick / len) % 24;
-       min = (1440 * tick / len) % 60;
+       extract_day_hour_min(&day, &hour, &min);
        prev_min = (1440 * (tick - 20) / len) % 60;
 
-        if ((turn - old_turn == (3000 - dun_level*20)) && (dun_level) &&
+        if ((turn - old_turn == (150 - dun_level) * TURNS_PER_TICK)
+           && (dun_level) &&
            !(quest_number(dun_level) && ((quest_number(dun_level) < MIN_RANDOM_QUEST) && !(quest_number(dun_level) == QUEST_OBERON || quest_number(dun_level) == QUEST_SERPENT || !(quest[quest_number(dun_level)].flags & QUEST_FLAG_PRESET)))) &&
            !(p_ptr->inside_battle))
                do_cmd_feeling();
@@ -1569,7 +1571,7 @@ msg_print("
                        p_ptr->energy = 100;
                        battle_monsters();
                }
-               else if(turn - old_turn == 3000L)
+               else if(turn - old_turn == 150*TURNS_PER_TICK)
                {
 #ifdef JP
 msg_print("¿½¤·Ê¬¤±¤¢¤ê¤Þ¤»¤ó¤¬¡¢¤³¤Î¾¡Éé¤Ï°ú¤­Ê¬¤±¤È¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤¹¡£");
@@ -1584,11 +1586,11 @@ msg_print("
        }
 
        /* Every 20 game turns */
-       if (turn % 20) return;
+       if (turn % TURNS_PER_TICK) return;
 
        /*** Check the Time and Load ***/
 
-       if (!(turn % 1000))
+       if (!(turn % (50*TURNS_PER_TICK)))
        {
                /* Check time and load */
                if ((0 != check_time()) || (0 != check_load()))
@@ -1636,7 +1638,7 @@ msg_print("
        /*** Attempt timed autosave ***/
        if (autosave_t && autosave_freq && !p_ptr->inside_battle)
        {
-               if (!(turn % ((s32b)autosave_freq * 20)))
+               if (!(turn % ((s32b)autosave_freq * TURNS_PER_TICK)))
                        do_cmd_save_game(TRUE);
        }
 
@@ -1655,12 +1657,12 @@ msg_print("
        if (!dun_level && !p_ptr->inside_quest && !p_ptr->inside_battle && !p_ptr->inside_arena && !p_ptr->wild_mode)
        {
                /* Hack -- Daybreak/Nighfall in town */
-               if (!(turn % ((20L * TOWN_DAWN) / 2)))
+               if (!(turn % ((TURNS_PER_TICK * TOWN_DAWN) / 2)))
                {
                        bool dawn;
 
                        /* Check for dawn */
-                       dawn = (!(turn % (20L * TOWN_DAWN)));
+                       dawn = (!(turn % (TURNS_PER_TICK * TOWN_DAWN)));
 
                        /* Day breaks */
                        if (dawn)
@@ -1740,7 +1742,7 @@ msg_print("
        }
 
        /* Set back the rewards once a day */
-       if (!(turn % (200L * STORE_TURNS)))
+       if (!(turn % (TURNS_PER_TICK*10 * STORE_TURNS)))
        {
                int n;
 
@@ -1771,8 +1773,8 @@ if (cheat_xtra) msg_print("
        }
 
        /* Hack -- Check for creature regeneration */
-       if (!(turn % 200) && !p_ptr->inside_battle) regen_monsters();
-       if (!(turn % 60)) regen_captured_monsters();
+       if (!(turn % (TURNS_PER_TICK*10)) && !p_ptr->inside_battle) regen_monsters();
+       if (!(turn % (TURNS_PER_TICK*3))) regen_captured_monsters();
 
 
        /*** Damage over Time ***/
@@ -1793,8 +1795,7 @@ take_hit(DAMAGE_NOESCAPE, 1, "
        /* (Vampires) Take damage from sunlight */
        if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE))
        {
-               if (!dun_level && !p_ptr->resist_lite && !p_ptr->invuln &&
-                   (!((turn / ((20L * TOWN_DAWN) / 2)) % 2)))
+               if (!dun_level && !p_ptr->resist_lite && !p_ptr->invuln && is_daytime())
                {
                        if (cave[py][px].info & CAVE_GLOW)
                        {
@@ -2197,7 +2198,7 @@ take_hit(DAMAGE_NOESCAPE, i, "
                if (p_ptr->food < PY_FOOD_MAX)
                {
                        /* Every 100 game turns */
-                       if (!(turn % 100))
+                       if (!(turn % (TURNS_PER_TICK*5)))
                        {
                                /* Basic digestion rate based on speed */
                                i = /* extract_energy[p_ptr->pspeed] * 2;*/
@@ -2703,7 +2704,7 @@ msg_print("
                        /* Decrease life-span */
                        if (o_ptr->name2 == EGO_LITE_LONG)
                        {
-                               if (turn % 40) o_ptr->xtra4--;
+                               if (turn % (TURNS_PER_TICK*2)) o_ptr->xtra4--;
                        }
                        else o_ptr->xtra4--;
 
@@ -6786,7 +6787,7 @@ s32b turn_real(s32b hoge)
            (p_ptr->prace == RACE_SKELETON) ||
            (p_ptr->prace == RACE_ZOMBIE) ||
            (p_ptr->prace == RACE_SPECTRE))
-               return hoge-(60L * TOWN_DAWN) / 4;
+               return hoge-(TURNS_PER_TICK * TOWN_DAWN *3/ 4);
        else
                return hoge;
 }
index 9c280ef..1b3dace 100644 (file)
@@ -1185,6 +1185,8 @@ extern void build_gamma_table(int gamma);
 #endif /* SUPPORT_GAMMA */
 
 /* xtra1.c */
+extern bool is_daytime(void);
+extern void extract_day_hour_min(int *day, int *hour, int *min);
 extern void prt_time(void);
 extern cptr map_name(void);
 extern void cnv_stat(int val, char *out_val);
index e34e5a6..51cae90 100644 (file)
@@ -1878,8 +1878,8 @@ static void display_player_middle(void)
 
        /* Dump Day */
        {
-               s32b len = 20L * TOWN_DAWN;
-               s32b tick = turn % len + len / 4;
+               int day, hour, min;
+               extract_day_hour_min(&day, &hour, &min);
 
                sprintf(buf, 
 #ifdef JP
@@ -1887,14 +1887,7 @@ static void display_player_middle(void)
 #else
                        "Day %ld %2ld:%02ld", 
 #endif
-                       ((p_ptr->prace == RACE_VAMPIRE) ||
-                        (p_ptr->prace == RACE_SKELETON) ||
-                        (p_ptr->prace == RACE_ZOMBIE) ||
-                        (p_ptr->prace == RACE_SPECTRE))
-                       ? (turn - (15L * TOWN_DAWN)) / len + 1
-                       : (turn + (5L * TOWN_DAWN))/ len + 1,
-                       (24 * tick / len) % 24,
-                       (1440 * tick / len) % 60);
+                       day, hour, min);
        }
        display_player_one_line(ENTRY_DAY, buf, TERM_L_GREEN);
 
index dc49662..7578fef 100644 (file)
@@ -1162,15 +1162,6 @@ static void arena_gen(void)
        int y, x;
        int qy = SCREEN_HGT;
        int qx = SCREEN_WID;
-       bool daytime;
-
-       /* Day time */
-       if ((turn % (20L * TOWN_DAWN)) < ((20L * TOWN_DAWN) / 2))
-               daytime = TRUE;
-
-       /* Night time */
-       else
-               daytime = FALSE;
 
        /* Start with solid walls */
        for (y = 0; y < MAX_HGT; y++)
@@ -1440,7 +1431,7 @@ static byte extract_feeling(void)
        if (rating > 10) return 8;
        if (rating > 0) return 9;
 
-       if((turn - old_turn) > 100000L)
+       if((turn - old_turn) > TURNS_PER_TICK * TOWN_DAWN /2)
                chg_virtue(V_PATIENCE, 1);
 
        return 10;
index b0490f1..44c0172 100644 (file)
@@ -2465,7 +2465,7 @@ static int increase_insults(void)
                st_ptr->bad_buy = 0;
 
                /* Open tomorrow */
-               st_ptr->store_open = turn + 25000 + randint1(25000);
+               st_ptr->store_open = turn + TURNS_PER_TICK*TOWN_DAWN/8 + randint1(TURNS_PER_TICK*TOWN_DAWN/8);
 
                /* Closed */
                return (TRUE);
@@ -4485,7 +4485,7 @@ void do_cmd_store(void)
        }
 
        /* Calculate the number of store maintainances since the last visit */
-       maintain_num = (turn - town[p_ptr->town_num].store[which].last_visit) / (20L * STORE_TURNS);
+       maintain_num = (turn - town[p_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TURNS);
 
        /* Maintain the store max. 10 times */
        if (maintain_num > 10) maintain_num = 10;
index e79b142..4067202 100644 (file)
@@ -639,7 +639,6 @@ static border_type border;
 void wilderness_gen(void)
 {
        int i, y, x, lim;
-       bool daytime;
        cave_type *c_ptr;
 
        /* Big town */
@@ -753,13 +752,6 @@ void wilderness_gen(void)
        /* South east corner */
        cave[MAX_HGT - 1][MAX_WID - 1].mimic = border.south_east;
 
-
-       /* Day time */
-       if ((turn % (20L * TOWN_DAWN)) < ((20L * TOWN_DAWN) / 2))
-               daytime = TRUE;
-       else
-               daytime = FALSE;
-
        /* Light up or darken the area */
        for (y = 0; y < cur_hgt; y++)
        {
@@ -768,7 +760,7 @@ void wilderness_gen(void)
                        /* Get the cave grid */
                        c_ptr = &cave[y][x];
 
-                       if (daytime)
+                       if (is_daytime())
                        {
                                /* Assume lit */
                                c_ptr->info |= (CAVE_GLOW);
index 848e01a..ae4a7b0 100644 (file)
@@ -113,16 +113,48 @@ static void prt_field(cptr info, int row, int col)
 
 
 /*
+ *  Whether daytime or not
+ */
+bool is_daytime(void)
+{
+       s32b len = TURNS_PER_TICK * TOWN_DAWN;
+       if ((turn % len) < (len / 2))
+               return TRUE;
+       else
+               return FALSE;
+}
+
+/*
+ * Extract day, hour, min
+ */
+void extract_day_hour_min(int *day, int *hour, int *min)
+{
+       s32b len = TURNS_PER_TICK * TOWN_DAWN;
+       s32b tick = turn % len + len / 4;
+
+       if ((p_ptr->prace == RACE_VAMPIRE) ||
+           (p_ptr->prace == RACE_SKELETON) ||
+           (p_ptr->prace == RACE_ZOMBIE) ||
+           (p_ptr->prace == RACE_SPECTRE))
+               *day = (turn - (TURNS_PER_TICK * TOWN_DAWN *3/4)) / len + 1;
+       else
+               *day = (turn + (TURNS_PER_TICK * TOWN_DAWN /4))/ len + 1;
+       *hour = (24 * tick / len) % 24;
+       *min = (1440 * tick / len) % 60;
+}
+
+/*
  * Print time
  */
 void prt_time(void)
 {
-       s32b len = 20L * TOWN_DAWN;
-       s32b tick = turn % len + len / 4;
+       int day, hour, min;
 
        /* Dump 13 spaces to clear */
        c_put_str(TERM_WHITE, "             ", ROW_DAY, COL_DAY);
 
+       extract_day_hour_min(&day, &hour, &min);
+
        /* Dump the info itself */
        c_put_str(TERM_WHITE, format(
 #ifdef JP
@@ -130,18 +162,9 @@ void prt_time(void)
 #else
                "Day %-2d",
 #endif
-               ((p_ptr->prace == RACE_VAMPIRE) ||
-                (p_ptr->prace == RACE_SKELETON) ||
-                (p_ptr->prace == RACE_ZOMBIE) ||
-                (p_ptr->prace == RACE_SPECTRE))
-               ? (turn - (15L * TOWN_DAWN)) / len + 1
-               : (turn + (5L * TOWN_DAWN))/ len + 1),
-                 ROW_DAY, COL_DAY);
+               day), ROW_DAY, COL_DAY);
        
-       c_put_str(TERM_WHITE, format("%2d:%02d",
-                                     (24 * tick / len) % 24,
-                                     (1440 * tick / len) % 60),
-                 ROW_DAY, COL_DAY+7);
+       c_put_str(TERM_WHITE, format("%2d:%02d", hour, min), ROW_DAY, COL_DAY+7);
 }