1 #include "system/angband.h"
2 #include "core/turn-compensator.h"
3 #include "world/world.h"
4 #include "floor/floor.h"
5 #include "floor/floor-town.h"
6 #include "store/store-owners.h"
7 #include "store/store-util.h"
8 #include "store/store.h"
9 #include "player/player-races-types.h"
12 * @brief ゲームターンからの実時間換算を行うための補正をかける
14 * @details アンデッド種族は18:00からゲームを開始するので、この修正を予め行う。
15 * @return 修正をかけた後のゲームターン
17 s32b turn_real(player_type* player_ptr, s32b hoge)
19 switch (player_ptr->start_race) {
24 return hoge - (TURNS_PER_TICK * TOWN_DAWN * 3 / 4);
31 * @brief ターンのオーバーフローに対する対処
32 * @param player_ptr プレーヤーへの参照ポインタ
33 * @details ターン及びターンを記録する変数をターンの限界の1日前まで巻き戻す.
34 * @return 修正をかけた後のゲームターン
36 void prevent_turn_overflow(player_type* player_ptr)
38 if (current_world_ptr->game_turn < current_world_ptr->game_turn_limit)
41 int rollback_days = 1 + (current_world_ptr->game_turn - current_world_ptr->game_turn_limit) / (TURNS_PER_TICK * TOWN_DAWN);
42 s32b rollback_turns = TURNS_PER_TICK * TOWN_DAWN * rollback_days;
44 if (current_world_ptr->game_turn > rollback_turns)
45 current_world_ptr->game_turn -= rollback_turns;
47 current_world_ptr->game_turn = 1;
48 floor_type* floor_ptr = player_ptr->current_floor_ptr;
49 if (floor_ptr->generated_turn > rollback_turns)
50 floor_ptr->generated_turn -= rollback_turns;
52 floor_ptr->generated_turn = 1;
53 if (current_world_ptr->arena_start_turn > rollback_turns)
54 current_world_ptr->arena_start_turn -= rollback_turns;
56 current_world_ptr->arena_start_turn = 1;
57 if (player_ptr->feeling_turn > rollback_turns)
58 player_ptr->feeling_turn -= rollback_turns;
60 player_ptr->feeling_turn = 1;
62 for (int i = 1; i < max_towns; i++) {
63 for (int j = 0; j < MAX_STORES; j++) {
64 store_type* store_ptr = &town_info[i].store[j];
66 if (store_ptr->last_visit > -10L * TURNS_PER_TICK * STORE_TICKS) {
67 store_ptr->last_visit -= rollback_turns;
68 if (store_ptr->last_visit < -10L * TURNS_PER_TICK * STORE_TICKS)
69 store_ptr->last_visit = -10L * TURNS_PER_TICK * STORE_TICKS;
72 if (store_ptr->store_open) {
73 store_ptr->store_open -= rollback_turns;
74 if (store_ptr->store_open < 1)
75 store_ptr->store_open = 1;