3 #include "system/angband.h"
10 #define MIN_RANDOM_QUEST 40 /*<! ランダムクエストを割り当てるクエストIDの開始値 */
11 #define MAX_RANDOM_QUEST 49 /*<! ランダムクエストを割り当てるクエストIDの終了値 */
17 #define QUEST_STATUS_UNTAKEN 0 /*!< クエストステータス状態:未発生*/
18 #define QUEST_STATUS_TAKEN 1 /*!< クエストステータス状態:発生中*/
19 #define QUEST_STATUS_COMPLETED 2 /*!< クエストステータス状態:達成*/
20 #define QUEST_STATUS_REWARDED 3 /*!< クエストステータス状態:報酬受け取り前*/
21 #define QUEST_STATUS_FINISHED 4 /*!< クエストステータス状態:完了*/
22 #define QUEST_STATUS_FAILED 5 /*!< クエストステータス状態:失敗*/
23 #define QUEST_STATUS_FAILED_DONE 6 /*!< クエストステータス状態:失敗完了*/
24 #define QUEST_STATUS_STAGE_COMPLETED 7 /*!< クエストステータス状態:ステージ毎達成*/
29 #define QUEST_TYPE_KILL_LEVEL 1 /*!< クエスト目的: 特定のユニークモンスターを倒す */
30 #define QUEST_TYPE_KILL_ANY_LEVEL 2 /*!< クエスト目的: イベント受託時点でランダムで選ばれた特定のユニークモンスターを倒す */
31 #define QUEST_TYPE_FIND_ARTIFACT 3 /*!< クエスト目的: 特定のアーティファクトを発見する */
32 #define QUEST_TYPE_FIND_EXIT 4 /*!< クエスト目的: 脱出する */
33 #define QUEST_TYPE_KILL_NUMBER 5 /*!< クエスト目的: モンスターを無差別に特定数倒す */
34 #define QUEST_TYPE_KILL_ALL 6 /*!< クエスト目的: エリア中のすべてのモンスターを全て倒す */
35 #define QUEST_TYPE_RANDOM 7 /*!< クエスト目的: ランダムクエストとして選ばれたユニーク1体を倒す */
36 #define QUEST_TYPE_TOWER 8 /*!< クエスト目的: 複数のエリアの全てのモンスターを倒す */
41 #define QUEST_FLAG_SILENT 0x01 /*!< クエストフラグ: クエスト進行に関する情報表示を抑止する / no messages from completion */
42 #define QUEST_FLAG_PRESET 0x02 /*!< クエストフラグ: クエストがダンジョン外で発生する / quest is outside the main dungeon */
43 #define QUEST_FLAG_ONCE 0x04 /*!< クエストフラグ: クエストがフロアを出た時点で完了する / quest is marked finished after leaving */
44 #define QUEST_FLAG_TOWER 0x08 /*!< クエストフラグ: クエスト:塔の形式で進行する / Tower quest is special */
46 #define QUEST_TOWER1 5 /*<! 塔クエスト(第1階層)に割り振るクエストID */
47 #define QUEST_TOWER2 6 /*<! 塔クエスト(第2階層)に割り振るクエストID */
48 #define QUEST_TOWER3 7 /*<! 塔クエスト(第3階層)に割り振るクエストID */
49 #define QUEST_OBERON 8 /*<! オベロン打倒クエストに割り振るクエストID */
50 #define QUEST_SERPENT 9 /*<! サーペント打倒クエストに割り振るクエストID */
54 * @brief クエスト情報の構造体 / Structure for the "quests".
58 quest_type() = default;
59 virtual ~quest_type() = default;
60 int16_t status; /*!< クエストの進行ステータス / Is the quest taken, completed, finished? */
61 int16_t type; /*!< クエストの種別 / The quest type */
63 GAME_TEXT name[60]; /*!< クエスト名 / Quest name */
64 DEPTH level; /*!< 処理階層 / Dungeon level */
65 MONRACE_IDX r_idx; /*!< クエスト対象のモンスターID / Monster race */
67 MONSTER_NUMBER cur_num; /*!< 撃破したモンスターの数 / Number killed */
68 MONSTER_NUMBER max_num; /*!< 求められるモンスターの撃破数 / Number required */
70 KIND_OBJECT_IDX k_idx; /*!< クエスト対象のアイテムID / object index */
71 MONSTER_NUMBER num_mon; /*!< QUEST_TYPE_KILL_NUMBER時の目標撃破数 number of monsters on level */
73 BIT_FLAGS flags; /*!< クエストに関するフラグビット / quest flags */
74 DUNGEON_IDX dungeon; /*!< クエスト対象のダンジョンID / quest dungeon */
76 PLAYER_LEVEL complev; /*!< クリア時プレイヤーレベル / player level (complete) */
77 REAL_TIME comptime; /*!< クリア時ゲーム時間 / quest clear time*/
79 static bool is_fixed(short quest_idx);
82 extern std::vector<quest_type> quest;
83 extern QUEST_IDX max_q_idx;
84 extern char quest_text[10][80];
85 extern int quest_text_line;
86 extern int leaving_quest;
90 void determine_random_questor(player_type *player_ptr, quest_type *q_ptr);
91 void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, int16_t stat);
92 void complete_quest(player_type *player_ptr, QUEST_IDX quest_num);
93 void check_find_art_quest_completion(player_type *player_ptr, object_type *o_ptr);
94 void quest_discovery(QUEST_IDX q_idx);
95 QUEST_IDX quest_number(player_type *player_ptr, DEPTH level);
96 QUEST_IDX random_quest_number(player_type *player_ptr, DEPTH level);
97 void leave_quest_check(player_type *player_ptr);
98 void leave_tower_check(player_type *player_ptr);
99 void exe_enter_quest(player_type *player_ptr, QUEST_IDX quest_idx);
100 void do_cmd_quest(player_type *player_ptr);