OSDN Git Service

[Refactor] #1710 Definitions QUEST_STATUS_* to enum class QuestStatusType
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 2 Oct 2021 10:21:05 +0000 (19:21 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 2 Oct 2021 15:11:22 +0000 (00:11 +0900)
19 files changed:
src/birth/game-play-initializer.cpp
src/cmd-action/cmd-move.cpp
src/dungeon/quest-completion-checker.cpp
src/dungeon/quest-monster-placer.cpp
src/dungeon/quest.cpp
src/dungeon/quest.h
src/floor/floor-events.cpp
src/floor/floor-leaver.cpp
src/floor/wild.cpp
src/info-reader/fixed-map-parser.cpp
src/knowledge/knowledge-quests.cpp
src/load/load.cpp
src/load/quest-loader.cpp
src/main/game-data-initializer.cpp
src/market/building-quest.cpp
src/save/save.cpp
src/spell-kind/spells-world.cpp
src/wizard/wizard-game-modifier.cpp
src/world/world-movement-processor.cpp

index 720e5de..44b7203 100644 (file)
@@ -60,7 +60,7 @@ void player_wipe_without_name(player_type *player_ptr)
 
     for (int i = 0; i < max_q_idx; i++) {
         quest_type *const q_ptr = &quest[i];
-        q_ptr->status = QUEST_STATUS_UNTAKEN;
+        q_ptr->status = QuestStatusType::UNTAKEN;
         q_ptr->cur_num = 0;
         q_ptr->max_num = 0;
         q_ptr->type = 0;
@@ -181,7 +181,7 @@ void init_dungeon_quests(player_type *player_ptr)
     for (int i = MIN_RANDOM_QUEST + number_of_quests - 1; i >= MIN_RANDOM_QUEST; i--) {
         quest_type *q_ptr = &quest[i];
         monster_race *quest_r_ptr;
-        q_ptr->status = QUEST_STATUS_TAKEN;
+        q_ptr->status = QuestStatusType::TAKEN;
         determine_random_questor(player_ptr, q_ptr);
         quest_r_ptr = &r_info[q_ptr->r_idx];
         quest_r_ptr->flags1 |= RF1_QUESTOR;
@@ -191,11 +191,11 @@ void init_dungeon_quests(player_type *player_ptr)
     init_flags = INIT_ASSIGN;
     floor_ptr->inside_quest = QUEST_OBERON;
     parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0);
-    quest[QUEST_OBERON].status = QUEST_STATUS_TAKEN;
+    quest[QUEST_OBERON].status = QuestStatusType::TAKEN;
 
     floor_ptr->inside_quest = QUEST_SERPENT;
     parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0);
-    quest[QUEST_SERPENT].status = QUEST_STATUS_TAKEN;
+    quest[QUEST_SERPENT].status = QuestStatusType::TAKEN;
     floor_ptr->inside_quest = 0;
 }
 
index c8ffd8f..9db738c 100644 (file)
@@ -55,9 +55,9 @@ static bool confirm_leave_level(player_type *player_ptr, bool down_stair)
 {
     quest_type *q_ptr = &quest[player_ptr->current_floor_ptr->inside_quest];
     if (confirm_quest && player_ptr->current_floor_ptr->inside_quest
-        && (q_ptr->type == QUEST_TYPE_RANDOM || (q_ptr->flags & QUEST_FLAG_ONCE && q_ptr->status != QUEST_STATUS_COMPLETED)
+        && (q_ptr->type == QUEST_TYPE_RANDOM || (q_ptr->flags & QUEST_FLAG_ONCE && q_ptr->status != QuestStatusType::COMPLETED)
             || (q_ptr->flags & QUEST_FLAG_TOWER
-                && ((q_ptr->status != QUEST_STATUS_STAGE_COMPLETED) || (down_stair && (quest[QUEST_TOWER1].status != QUEST_STATUS_COMPLETED)))))) {
+                && ((q_ptr->status != QuestStatusType::STAGE_COMPLETED) || (down_stair && (quest[QUEST_TOWER1].status != QuestStatusType::COMPLETED)))))) {
         msg_print(_("この階を一度去ると二度と戻って来られません。", "You can't come back here once you leave this floor."));
         return get_check(_("本当にこの階を去りますか?", "Really leave this floor? "));
     }
@@ -94,13 +94,13 @@ void do_cmd_go_up(player_type *player_ptr)
 
         leave_quest_check(player_ptr);
         player_ptr->current_floor_ptr->inside_quest = g_ptr->special;
-        if (!quest[player_ptr->current_floor_ptr->inside_quest].status) {
+        if (quest[player_ptr->current_floor_ptr->inside_quest].status != QuestStatusType::UNTAKEN) {
             if (quest[player_ptr->current_floor_ptr->inside_quest].type != QUEST_TYPE_RANDOM) {
                 init_flags = INIT_ASSIGN;
                 parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0);
             }
 
-            quest[player_ptr->current_floor_ptr->inside_quest].status = QUEST_STATUS_TAKEN;
+            quest[player_ptr->current_floor_ptr->inside_quest].status = QuestStatusType::TAKEN;
         }
 
         if (!player_ptr->current_floor_ptr->inside_quest) {
@@ -211,13 +211,13 @@ void do_cmd_go_down(player_type *player_ptr)
         leave_quest_check(player_ptr);
         leave_tower_check(player_ptr);
         player_ptr->current_floor_ptr->inside_quest = g_ptr->special;
-        if (!quest[player_ptr->current_floor_ptr->inside_quest].status) {
+        if (quest[player_ptr->current_floor_ptr->inside_quest].status != QuestStatusType::UNTAKEN) {
             if (quest[player_ptr->current_floor_ptr->inside_quest].type != QUEST_TYPE_RANDOM) {
                 init_flags = INIT_ASSIGN;
                 parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0);
             }
 
-            quest[player_ptr->current_floor_ptr->inside_quest].status = QUEST_STATUS_TAKEN;
+            quest[player_ptr->current_floor_ptr->inside_quest].status = QuestStatusType::TAKEN;
         }
 
         if (!player_ptr->current_floor_ptr->inside_quest) {
index a153ded..1676bae 100644 (file)
@@ -37,7 +37,7 @@ void QuestCompletionChecker::complete()
         short i;
         for (i = max_q_idx - 1; i > 0; i--) {
             auto *const q_ptr = &quest[i];
-            if (q_ptr->status != QUEST_STATUS_TAKEN) {
+            if (q_ptr->status != QuestStatusType::TAKEN) {
                 continue;
             }
 
@@ -67,7 +67,7 @@ void QuestCompletionChecker::complete()
 
     auto create_stairs = false;
     auto reward = false;
-    if ((quest_num > 0) && (quest[quest_num].status == QUEST_STATUS_TAKEN)) {
+    if ((quest_num > 0) && (quest[quest_num].status == QuestStatusType::TAKEN)) {
         auto *const q_ptr = &quest[quest_num];
         switch (q_ptr->type) {
         case QUEST_TYPE_KILL_NUMBER:
@@ -84,7 +84,7 @@ void QuestCompletionChecker::complete()
             }
 
             if (q_ptr->flags & QUEST_FLAG_SILENT) {
-                q_ptr->status = QUEST_STATUS_FINISHED;
+                q_ptr->status = QuestStatusType::FINISHED;
             } else {
                 complete_quest(this->player_ptr, quest_num);
             }
@@ -108,12 +108,12 @@ void QuestCompletionChecker::complete()
             }
 
             if ((quest_num == QUEST_OBERON) || (quest_num == QUEST_SERPENT)) {
-                q_ptr->status = QUEST_STATUS_FINISHED;
+                q_ptr->status = QuestStatusType::FINISHED;
             }
 
             if (q_ptr->type == QUEST_TYPE_RANDOM) {
                 reward = true;
-                q_ptr->status = QUEST_STATUS_FINISHED;
+                q_ptr->status = QuestStatusType::FINISHED;
             }
 
             break;
@@ -131,9 +131,9 @@ void QuestCompletionChecker::complete()
             }
 
             if (this->count_all_hostile_monsters() == 1) {
-                q_ptr->status = QUEST_STATUS_STAGE_COMPLETED;
-                if ((quest[QUEST_TOWER1].status == QUEST_STATUS_STAGE_COMPLETED) && (quest[QUEST_TOWER2].status == QUEST_STATUS_STAGE_COMPLETED)
-                    && (quest[QUEST_TOWER3].status == QUEST_STATUS_STAGE_COMPLETED)) {
+                q_ptr->status = QuestStatusType::STAGE_COMPLETED;
+                if ((quest[QUEST_TOWER1].status == QuestStatusType::STAGE_COMPLETED) && (quest[QUEST_TOWER2].status == QuestStatusType::STAGE_COMPLETED)
+                    && (quest[QUEST_TOWER3].status == QuestStatusType::STAGE_COMPLETED)) {
                     complete_quest(this->player_ptr, QUEST_TOWER1);
                 }
             }
index c205ac8..fc42f19 100644 (file)
@@ -25,7 +25,7 @@ bool place_quest_monsters(player_type *player_ptr)
     for (int i = 0; i < max_q_idx; i++) {
         monster_race *r_ptr;
         BIT_FLAGS mode;
-        if (quest[i].status != QUEST_STATUS_TAKEN || (quest[i].type != QUEST_TYPE_KILL_LEVEL && quest[i].type != QUEST_TYPE_RANDOM)
+        if (quest[i].status != QuestStatusType::TAKEN || (quest[i].type != QUEST_TYPE_KILL_LEVEL && quest[i].type != QUEST_TYPE_RANDOM)
             || quest[i].level != floor_ptr->dun_level || player_ptr->dungeon_idx != quest[i].dungeon || (quest[i].flags & QUEST_FLAG_PRESET)) {
             continue;
         }
index c31962d..90856db 100644 (file)
@@ -115,7 +115,7 @@ void determine_random_questor(player_type *player_ptr, quest_type *q_ptr)
  * @param q_ptr クエスト情報への参照ポインタ
  * @param stat ステータス(成功or失敗)
  */
-void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, int16_t stat)
+void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, QuestStatusType stat)
 {
     q_ptr->status = stat;
     q_ptr->complev = lev;
@@ -143,7 +143,7 @@ void complete_quest(player_type *player_ptr, QUEST_IDX quest_num)
         break;
     }
 
-    record_quest_final_status(q_ptr, player_ptr->lev, QUEST_STATUS_COMPLETED);
+    record_quest_final_status(q_ptr, player_ptr->lev, QuestStatusType::COMPLETED);
 
     if (q_ptr->flags & QUEST_FLAG_SILENT)
         return;
@@ -163,7 +163,7 @@ void check_find_art_quest_completion(player_type *player_ptr, object_type *o_ptr
 {
     /* Check if completed a quest */
     for (QUEST_IDX i = 0; i < max_q_idx; i++) {
-        if ((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) && (quest[i].status == QUEST_STATUS_TAKEN) && (quest[i].k_idx == o_ptr->name1)) {
+        if ((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) && (quest[i].status == QuestStatusType::TAKEN) && (quest[i].k_idx == o_ptr->name1)) {
             complete_quest(player_ptr, i);
         }
     }
@@ -205,7 +205,7 @@ void quest_discovery(QUEST_IDX q_idx)
     }
 
     msg_print(_("この階は以前は誰かによって守られていたようだ…。", "It seems that this level was protected by someone before..."));
-    record_quest_final_status(q_ptr, 0, QUEST_STATUS_FINISHED);
+    record_quest_final_status(q_ptr, 0, QuestStatusType::FINISHED);
 }
 
 /*!
@@ -222,7 +222,7 @@ QUEST_IDX quest_number(player_type *player_ptr, DEPTH level)
         return (floor_ptr->inside_quest);
 
     for (QUEST_IDX i = 0; i < max_q_idx; i++) {
-        if (quest[i].status != QUEST_STATUS_TAKEN)
+        if (quest[i].status != QuestStatusType::TAKEN)
             continue;
 
         if ((quest[i].type == QUEST_TYPE_KILL_LEVEL) && !(quest[i].flags & QUEST_FLAG_PRESET) && (quest[i].level == level)
@@ -245,7 +245,7 @@ QUEST_IDX random_quest_number(player_type *player_ptr, DEPTH level)
         return 0;
 
     for (QUEST_IDX i = MIN_RANDOM_QUEST; i < MAX_RANDOM_QUEST + 1; i++) {
-        if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QUEST_STATUS_TAKEN) && (quest[i].level == level)
+        if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QuestStatusType::TAKEN) && (quest[i].level == level)
             && (quest[i].dungeon == DUNGEON_ANGBAND)) {
             return i;
         }
@@ -265,16 +265,16 @@ void leave_quest_check(player_type *player_ptr)
         return;
 
     quest_type *const q_ptr = &quest[leaving_quest];
-    bool is_one_time_quest = ((q_ptr->flags & QUEST_FLAG_ONCE) || (q_ptr->type == QUEST_TYPE_RANDOM)) && (q_ptr->status == QUEST_STATUS_TAKEN);
+    bool is_one_time_quest = ((q_ptr->flags & QUEST_FLAG_ONCE) || (q_ptr->type == QUEST_TYPE_RANDOM)) && (q_ptr->status == QuestStatusType::TAKEN);
     if (!is_one_time_quest)
         return;
 
-    record_quest_final_status(q_ptr, player_ptr->lev, QUEST_STATUS_FAILED);
+    record_quest_final_status(q_ptr, player_ptr->lev, QuestStatusType::FAILED);
 
     /* Additional settings */
     switch (q_ptr->type) {
     case QUEST_TYPE_TOWER:
-        quest[QUEST_TOWER1].status = QUEST_STATUS_FAILED;
+        quest[QUEST_TOWER1].status = QuestStatusType::FAILED;
         quest[QUEST_TOWER1].complev = player_ptr->lev;
         break;
     case QUEST_TYPE_FIND_ARTIFACT:
@@ -307,13 +307,13 @@ void leave_tower_check(player_type *player_ptr)
     leaving_quest = player_ptr->current_floor_ptr->inside_quest;
     bool is_leaving_from_tower = leaving_quest != 0;
     is_leaving_from_tower &= quest[leaving_quest].type == QUEST_TYPE_TOWER;
-    is_leaving_from_tower &= quest[QUEST_TOWER1].status != QUEST_STATUS_COMPLETED;
+    is_leaving_from_tower &= quest[QUEST_TOWER1].status != QuestStatusType::COMPLETED;
     if (!is_leaving_from_tower)
         return;
     if (quest[leaving_quest].type != QUEST_TYPE_TOWER)
         return;
 
-    quest[QUEST_TOWER1].status = QUEST_STATUS_FAILED;
+    quest[QUEST_TOWER1].status = QuestStatusType::FAILED;
     quest[QUEST_TOWER1].complev = player_ptr->lev;
     update_playtime();
     quest[QUEST_TOWER1].comptime = w_ptr->play_time;
index b9340cc..e786e97 100644 (file)
 #define MIN_RANDOM_QUEST 40 /*<! ランダムクエストを割り当てるクエストIDの開始値 */
 #define MAX_RANDOM_QUEST 49 /*<! ランダムクエストを割り当てるクエストIDの終了値 */
 
-/*
- * @brief Quest status
- * @todo 後でenumにする.
- */
-#define QUEST_STATUS_UNTAKEN              0 /*!< クエストステータス状態:未発生*/
-#define QUEST_STATUS_TAKEN                1 /*!< クエストステータス状態:発生中*/
-#define QUEST_STATUS_COMPLETED            2 /*!< クエストステータス状態:達成*/
-#define QUEST_STATUS_REWARDED             3 /*!< クエストステータス状態:報酬受け取り前*/
-#define QUEST_STATUS_FINISHED             4 /*!< クエストステータス状態:完了*/
-#define QUEST_STATUS_FAILED               5 /*!< クエストステータス状態:失敗*/
-#define QUEST_STATUS_FAILED_DONE          6 /*!< クエストステータス状態:失敗完了*/
-#define QUEST_STATUS_STAGE_COMPLETED      7 /*!< クエストステータス状態:ステージ毎達成*/
+// clang-format off
+
+enum class QuestStatusType : short {
      UNTAKEN = 0,         /*!< クエストステータス状態:未発生*/
+       TAKEN = 1,           /*!< クエストステータス状態:発生中*/
+       COMPLETED=  2,       /*!< クエストステータス状態:達成*/
+       REWARDED = 3,        /*!< クエストステータス状態:報酬受け取り前*/
+       FINISHED = 4,        /*!< クエストステータス状態:完了*/
+       FAILED = 5,          /*!< クエストステータス状態:失敗*/
+       FAILED_DONE = 6,     /*!< クエストステータス状態:失敗完了*/
+       STAGE_COMPLETED = 7, /*!< クエストステータス状態:ステージ毎達成*/
+};
 
 /*
  * Quest type
@@ -49,6 +49,8 @@
 #define QUEST_OBERON 8 /*<! オベロン打倒クエストに割り振るクエストID */
 #define QUEST_SERPENT 9 /*<! サーペント打倒クエストに割り振るクエストID */
 
+// clang-format on
+
 /*!
  * @struct quest_type
  * @brief クエスト情報の構造体 / Structure for the "quests".
@@ -57,7 +59,7 @@ struct quest_type {
 public:
     quest_type() = default;
     virtual ~quest_type() = default;
-       int16_t status;          /*!< クエストの進行ステータス / Is the quest taken, completed, finished? */
+    QuestStatusType status; /*!< クエストの進行ステータス / Is the quest taken, completed, finished? */
        int16_t type;              /*!< クエストの種別 / The quest type */
 
        GAME_TEXT name[60];          /*!< クエスト名 / Quest name */
@@ -88,7 +90,7 @@ extern int leaving_quest;
 struct object_type;;
 struct player_type;
 void determine_random_questor(player_type *player_ptr, quest_type *q_ptr);
-void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, int16_t stat);
+void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, QuestStatusType stat);
 void complete_quest(player_type *player_ptr, QUEST_IDX quest_num);
 void check_find_art_quest_completion(player_type *player_ptr, object_type *o_ptr);
 void quest_discovery(QUEST_IDX q_idx);
index 1eeef69..e605f8f 100644 (file)
@@ -241,8 +241,8 @@ void update_dungeon_feeling(player_type *player_ptr)
     if (w_ptr->game_turn < player_ptr->feeling_turn + delay && !cheat_xtra)
         return;
 
-    int quest_num = quest_number(player_ptr, floor_ptr->dun_level);
-    if (quest_num
+    auto quest_num = quest_number(player_ptr, floor_ptr->dun_level);
+    if ((quest_num > 0)
         && (quest_type::is_fixed(quest_num) && !((quest_num == QUEST_OBERON) || (quest_num == QUEST_SERPENT) || !(quest[quest_num].flags & QUEST_FLAG_PRESET))))
         return;
 
index 56849d3..b2ab0d5 100644 (file)
@@ -249,7 +249,7 @@ static void preserve_info(player_type *player_ptr)
 {
     MONRACE_IDX quest_r_idx = 0;
     for (DUNGEON_IDX i = 0; i < max_q_idx; i++) {
-        if ((quest[i].status == QUEST_STATUS_TAKEN) && ((quest[i].type == QUEST_TYPE_KILL_LEVEL) || (quest[i].type == QUEST_TYPE_RANDOM))
+        if ((quest[i].status == QuestStatusType::TAKEN) && ((quest[i].type == QUEST_TYPE_KILL_LEVEL) || (quest[i].type == QUEST_TYPE_RANDOM))
             && (quest[i].level == player_ptr->current_floor_ptr->dun_level) && (player_ptr->dungeon_idx == quest[i].dungeon)
             && !(quest[i].flags & QUEST_FLAG_PRESET)) {
             quest_r_idx = quest[i].r_idx;
index 6d04c21..9b9daff 100644 (file)
@@ -542,8 +542,8 @@ void wilderness_gen(player_type *player_ptr)
     generate_encounter = false;
     set_floor_and_wall(0);
     for (int i = 0; i < max_q_idx; i++)
-        if (quest[i].status == QUEST_STATUS_REWARDED)
-            quest[i].status = QUEST_STATUS_FINISHED;
+        if (quest[i].status == QuestStatusType::REWARDED)
+            quest[i].status = QuestStatusType::FINISHED;
 }
 
 static int16_t conv_terrain2feat[MAX_WILDERNESS];
index cf51ae3..bcb31a8 100644 (file)
@@ -198,7 +198,7 @@ static concptr parse_fixed_map_expression(player_type *player_ptr, char **sp, ch
         sprintf(tmp, "%d", quest[atoi(b + 11)].type);
         v = tmp;
     } else if (prefix(b + 1, "QUEST")) {
-        sprintf(tmp, "%d", quest[atoi(b + 6)].status);
+        sprintf(tmp, "%d", enum2i(quest[atoi(b + 6)].status));
         v = tmp;
     } else if (prefix(b + 1, "RANDOM")) {
         sprintf(tmp, "%d", (int)(w_ptr->seed_town % atoi(b + 7)));
index f110417..10278f2 100644 (file)
@@ -55,9 +55,9 @@ static void do_cmd_knowledge_quests_current(player_type *player_ptr, FILE *fff)
     fprintf(fff, _("《遂行中のクエスト》\n", "< Current Quest >\n"));
 
     for (QUEST_IDX i = 1; i < max_q_idx; i++) {
-        bool is_print = quest[i].status == QUEST_STATUS_TAKEN;
-        is_print |= (quest[i].status == QUEST_STATUS_STAGE_COMPLETED) && (quest[i].type == QUEST_TYPE_TOWER);
-        is_print |= quest[i].status == QUEST_STATUS_COMPLETED;
+        bool is_print = quest[i].status == QuestStatusType::TAKEN;
+        is_print |= (quest[i].status == QuestStatusType::STAGE_COMPLETED) && (quest[i].type == QUEST_TYPE_TOWER);
+        is_print |= quest[i].status == QuestStatusType::COMPLETED;
         if (!is_print)
             continue;
 
@@ -77,7 +77,7 @@ static void do_cmd_knowledge_quests_current(player_type *player_ptr, FILE *fff)
         if (quest[i].type != QUEST_TYPE_RANDOM) {
             char note[512] = "\0";
 
-            if (quest[i].status == QUEST_STATUS_TAKEN || quest[i].status == QUEST_STATUS_STAGE_COMPLETED) {
+            if (quest[i].status == QuestStatusType::TAKEN || quest[i].status == QuestStatusType::STAGE_COMPLETED) {
                 switch (quest[i].type) {
                 case QUEST_TYPE_KILL_LEVEL:
                 case QUEST_TYPE_KILL_ANY_LEVEL:
@@ -128,7 +128,7 @@ static void do_cmd_knowledge_quests_current(player_type *player_ptr, FILE *fff)
 
             sprintf(tmp_str, _("  %s (危険度:%d階相当)%s\n", "  %s (Danger level: %d)%s\n"), quest[i].name, (int)quest[i].level, note);
             fputs(tmp_str, fff);
-            if (quest[i].status == QUEST_STATUS_COMPLETED) {
+            if (quest[i].status == QuestStatusType::COMPLETED) {
                 sprintf(tmp_str, _("    クエスト達成 - まだ報酬を受けとってない。\n", "    Quest Completed - Unrewarded\n"));
                 fputs(tmp_str, fff);
                 continue;
@@ -229,7 +229,7 @@ void do_cmd_knowledge_quests_completed(player_type *player_ptr, FILE *fff, QUEST
         QUEST_IDX q_idx = quest_num[i];
         quest_type *const q_ptr = &quest[q_idx];
 
-        if (q_ptr->status == QUEST_STATUS_FINISHED && do_cmd_knowledge_quests_aux(player_ptr, fff, q_idx)) {
+        if (q_ptr->status == QuestStatusType::FINISHED && do_cmd_knowledge_quests_aux(player_ptr, fff, q_idx)) {
             ++total;
         }
     }
@@ -252,7 +252,7 @@ void do_cmd_knowledge_quests_failed(player_type *player_ptr, FILE *fff, QUEST_ID
         QUEST_IDX q_idx = quest_num[i];
         quest_type *const q_ptr = &quest[q_idx];
 
-        if (((q_ptr->status == QUEST_STATUS_FAILED_DONE) || (q_ptr->status == QUEST_STATUS_FAILED)) && do_cmd_knowledge_quests_aux(player_ptr, fff, q_idx)) {
+        if (((q_ptr->status == QuestStatusType::FAILED_DONE) || (q_ptr->status == QuestStatusType::FAILED)) && do_cmd_knowledge_quests_aux(player_ptr, fff, q_idx)) {
             ++total;
         }
     }
@@ -273,7 +273,7 @@ static void do_cmd_knowledge_quests_wiz_random(FILE *fff)
         if (quest[i].flags & QUEST_FLAG_SILENT)
             continue;
 
-        if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QUEST_STATUS_TAKEN)) {
+        if ((quest[i].type == QUEST_TYPE_RANDOM) && (quest[i].status == QuestStatusType::TAKEN)) {
             total++;
             sprintf(tmp_str, _("  %s (%d階, %s)\n", "  %s (%d, %s)\n"), quest[i].name, (int)quest[i].level, r_info[quest[i].r_idx].name.c_str());
             fputs(tmp_str, fff);
index 0899d4c..0f80b86 100644 (file)
@@ -71,7 +71,7 @@ static errr load_town_quest(player_type *player_ptr)
     /* Quest 18 was removed */
     if (h_older_than(1, 7, 0, 6)) {
         quest[OLD_QUEST_WATER_CAVE] = {};
-        quest[OLD_QUEST_WATER_CAVE].status = QUEST_STATUS_UNTAKEN;
+        quest[OLD_QUEST_WATER_CAVE].status = QuestStatusType::UNTAKEN;
     }
 
     load_wilderness_info(player_ptr);
index 5127530..5c4f9db 100644 (file)
@@ -12,6 +12,7 @@
 #include "system/floor-type-definition.h"
 #include "system/monster-race-definition.h"
 #include "system/player-type-definition.h"
+#include "util/enum-converter.h"
 
 /*!
  * @brief ランダムクエスト情報の読み込み
@@ -69,9 +70,10 @@ static bool check_quest_index(int loading_quest_index)
 
 static void load_quest_completion(quest_type *q_ptr)
 {
-    rd_s16b(&q_ptr->status);
     int16_t tmp16s;
     rd_s16b(&tmp16s);
+    q_ptr->status = i2enum<QuestStatusType>(tmp16s);
+    rd_s16b(&tmp16s);
     q_ptr->level = tmp16s;
 
     if (h_older_than(1, 0, 6))
@@ -119,8 +121,8 @@ void analyze_quests(player_type *player_ptr, const uint16_t max_quests_load, con
 
         quest_type *const q_ptr = &quest[i];
         load_quest_completion(q_ptr);
-        bool is_quest_running = (q_ptr->status == QUEST_STATUS_TAKEN);
-        is_quest_running |= (!h_older_than(0, 3, 14) && (q_ptr->status == QUEST_STATUS_COMPLETED));
+        bool is_quest_running = (q_ptr->status == QuestStatusType::TAKEN);
+        is_quest_running |= (!h_older_than(0, 3, 14) && (q_ptr->status == QuestStatusType::COMPLETED));
         is_quest_running |= (!h_older_than(1, 0, 7) && (i >= MIN_RANDOM_QUEST) && (i <= (MIN_RANDOM_QUEST + max_rquests_load)));
         if (!is_quest_running)
             continue;
@@ -134,7 +136,7 @@ void analyze_quests(player_type *player_ptr, const uint16_t max_quests_load, con
             q_ptr->dungeon = tmp8u;
         }
 
-        if (q_ptr->status == QUEST_STATUS_TAKEN || q_ptr->status == QUEST_STATUS_UNTAKEN)
+        if (q_ptr->status == QuestStatusType::TAKEN || q_ptr->status == QuestStatusType::UNTAKEN)
             if (r_info[q_ptr->r_idx].flags1 & RF1_UNIQUE)
                 r_info[q_ptr->r_idx].flags1 |= RF1_QUESTOR;
     }
index 3c994b0..281b108 100644 (file)
@@ -42,7 +42,7 @@ void init_quests(void)
 {
     quest.assign(max_q_idx, {});
     for (auto &q_ref : quest) {
-        q_ref.status = QUEST_STATUS_UNTAKEN;
+        q_ref.status = QuestStatusType::UNTAKEN;
     }
 }
 
index ace4a2f..a6ccdb2 100644 (file)
@@ -77,14 +77,14 @@ void castle_quest(player_type *player_ptr)
 
     quest_type *q_ptr;
     q_ptr = &quest[q_index];
-    if (q_ptr->status == QUEST_STATUS_COMPLETED) {
-        q_ptr->status = QUEST_STATUS_REWARDED;
+    if (q_ptr->status == QuestStatusType::COMPLETED) {
+        q_ptr->status = QuestStatusType::REWARDED;
         print_questinfo(player_ptr, q_index, false);
         reinit_wilderness = true;
         return;
     }
 
-    if (q_ptr->status == QUEST_STATUS_TAKEN) {
+    if (q_ptr->status == QuestStatusType::TAKEN) {
         put_str(_("あなたは現在のクエストを終了させていません!", "You have not completed your current quest yet!"), 8, 0);
         put_str(_("CTRL-Qを使えばクエストの状態がチェックできます。", "Use CTRL-Q to check the status of your quest."), 9, 0);
 
@@ -104,20 +104,20 @@ void castle_quest(player_type *player_ptr)
         clear_bldg(4, 18);
         msg_print(_("放棄しました。", "You gave up."));
         msg_print(nullptr);
-        record_quest_final_status(q_ptr, player_ptr->lev, QUEST_STATUS_FAILED);
+        record_quest_final_status(q_ptr, player_ptr->lev, QuestStatusType::FAILED);
     }
 
-    if (q_ptr->status == QUEST_STATUS_FAILED) {
+    if (q_ptr->status == QuestStatusType::FAILED) {
         print_questinfo(player_ptr, q_index, false);
-        q_ptr->status = QUEST_STATUS_FAILED_DONE;
+        q_ptr->status = QuestStatusType::FAILED_DONE;
         reinit_wilderness = true;
         return;
     }
 
-    if (q_ptr->status != QUEST_STATUS_UNTAKEN)
+    if (q_ptr->status != QuestStatusType::UNTAKEN)
         return;
 
-    q_ptr->status = QUEST_STATUS_TAKEN;
+    q_ptr->status = QuestStatusType::TAKEN;
     reinit_wilderness = true;
     if (q_ptr->type != QUEST_TYPE_KILL_ANY_LEVEL) {
         print_questinfo(player_ptr, q_index, true);
index edcc8e1..3381fcc 100644 (file)
@@ -125,13 +125,13 @@ static bool wr_savefile_new(player_type *player_ptr, save_type type)
 
     for (short i = 0; i < max_q_idx; i++) {
         auto *const q_ptr = &quest[i];
-        wr_s16b(q_ptr->status);
+        wr_s16b(enum2i(q_ptr->status));
         wr_s16b((int16_t)q_ptr->level);
         wr_byte((byte)q_ptr->complev);
         wr_u32b(q_ptr->comptime);
 
-        bool is_quest_running = q_ptr->status == QUEST_STATUS_TAKEN;
-        is_quest_running |= q_ptr->status == QUEST_STATUS_COMPLETED;
+        bool is_quest_running = q_ptr->status == QuestStatusType::TAKEN;
+        is_quest_running |= q_ptr->status == QuestStatusType::COMPLETED;
         is_quest_running |= !quest_type::is_fixed(i);
         if (!is_quest_running)
             continue;
index 44a2bdb..341df46 100644 (file)
@@ -398,9 +398,9 @@ bool free_level_recall(player_type *player_ptr)
 
     DEPTH max_depth = d_info[select_dungeon].maxdepth;
     if (select_dungeon == DUNGEON_ANGBAND) {
-        if (quest[QUEST_OBERON].status != QUEST_STATUS_FINISHED)
+        if (quest[QUEST_OBERON].status != QuestStatusType::FINISHED)
             max_depth = 98;
-        else if (quest[QUEST_SERPENT].status != QUEST_STATUS_FINISHED)
+        else if (quest[QUEST_SERPENT].status != QuestStatusType::FINISHED)
             max_depth = 99;
     }
 
index 9e793ba..30a2e80 100644 (file)
@@ -119,7 +119,7 @@ void wiz_enter_quest(player_type* player_ptr)
     init_flags = i2enum<init_flags_type>(INIT_SHOW_TEXT | INIT_ASSIGN);
     player_ptr->current_floor_ptr->inside_quest = (QUEST_IDX)tmp_int;
     parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0);
-    quest[tmp_int].status = QUEST_STATUS_TAKEN;
+    quest[tmp_int].status = QuestStatusType::TAKEN;
     if (quest[tmp_int].dungeon == 0)
         exe_enter_quest(player_ptr, (QUEST_IDX)tmp_int);
 }
@@ -136,7 +136,7 @@ void wiz_complete_quest(player_type *player_ptr)
         return;
     }
 
-    if (quest[player_ptr->current_floor_ptr->inside_quest].status == QUEST_STATUS_TAKEN)
+    if (quest[player_ptr->current_floor_ptr->inside_quest].status == QuestStatusType::TAKEN)
         complete_quest(player_ptr, player_ptr->current_floor_ptr->inside_quest);
 }
 
index e8fbb64..fbffb6b 100644 (file)
@@ -31,8 +31,8 @@ void check_random_quest_auto_failure(player_type *player_ptr)
     }
     for (auto i = MIN_RANDOM_QUEST; i < MAX_RANDOM_QUEST + 1; i++) {
         auto q_ptr = &quest[i];
-        if ((q_ptr->type == QUEST_TYPE_RANDOM) && (q_ptr->status == QUEST_STATUS_TAKEN) && (q_ptr->level < player_ptr->current_floor_ptr->dun_level)) {
-            q_ptr->status = QUEST_STATUS_FAILED;
+        if ((q_ptr->type == QUEST_TYPE_RANDOM) && (q_ptr->status == QuestStatusType::TAKEN) && (q_ptr->level < player_ptr->current_floor_ptr->dun_level)) {
+            q_ptr->status = QuestStatusType::FAILED;
             q_ptr->complev = (byte)player_ptr->lev;
             update_playtime();
             q_ptr->comptime = w_ptr->play_time;