1 #include "main/game-data-initializer.h"
2 #include "cmd-io/macro-util.h"
3 #include "dungeon/dungeon.h"
4 #include "dungeon/quest.h"
5 #include "floor/floor-util.h"
6 #include "game-option/option-flags.h"
7 #include "game-option/option-types-table.h"
9 #include "monster-race/monster-race.h"
10 #include "object/object-kind.h"
11 #include "system/alloc-entries.h"
12 #include "system/floor-type-definition.h"
13 #include "system/object-type-definition.h"
14 #include "term/gameterm.h"
15 #include "util/angband-files.h"
16 #include "util/quarks.h"
17 #include "util/tag-sorter.h"
18 #include "view/display-messages.h"
19 #include "world/world.h"
22 * @brief マクロ登録の最大数 / Maximum number of macros (see "io.c")
23 * @note Default: assume at most 256 macros are used
25 static const int MACRO_MAX = 256;
28 * @brief クエスト情報初期化のメインルーチン /
29 * Initialize quest array
32 errr init_quests(void)
34 C_MAKE(quest, max_q_idx, quest_type);
35 for (int i = 0; i < max_q_idx; i++)
36 quest[i].status = QUEST_STATUS_UNTAKEN;
43 * Initialize some other arrays
46 errr init_other(player_type *player_ptr)
48 player_ptr->current_floor_ptr = &floor_info; // TODO:本当はこんなところで初期化したくない
49 floor_type *floor_ptr = player_ptr->current_floor_ptr;
50 C_MAKE(floor_ptr->o_list, current_world_ptr->max_o_idx, object_type);
51 C_MAKE(floor_ptr->m_list, current_world_ptr->max_m_idx, monster_type);
52 for (int i = 0; i < MAX_MTIMED; i++)
53 C_MAKE(floor_ptr->mproc_list[i], current_world_ptr->max_m_idx, s16b);
55 C_MAKE(max_dlv, current_world_ptr->max_d_idx, DEPTH);
56 for (int i = 0; i < MAX_HGT; i++)
57 C_MAKE(floor_ptr->grid_array[i], MAX_WID, grid_type);
59 C_MAKE(macro__pat, MACRO_MAX, concptr);
60 C_MAKE(macro__act, MACRO_MAX, concptr);
61 C_MAKE(macro__cmd, MACRO_MAX, bool);
62 C_MAKE(macro__buf, FILE_READ_BUFF_SIZE, char);
65 C_MAKE(message__ptr, MESSAGE_MAX, u32b);
66 C_MAKE(message__buf, MESSAGE_BUF, char);
67 message__tail = MESSAGE_BUF;
69 for (int i = 0; option_info[i].o_desc; i++) {
70 int os = option_info[i].o_set;
71 int ob = option_info[i].o_bit;
72 if (!option_info[i].o_var)
75 option_mask[os] |= (1UL << ob);
76 if (option_info[i].o_norm)
77 option_flag[os] |= (1UL << ob);
79 option_flag[os] &= ~(1UL << ob);
82 for (int n = 0; n < 8; n++)
83 for (int i = 0; i < 32; i++)
84 if (window_flag_desc[i])
85 window_mask[n] |= (1UL << i);
88 * Set the "default" window flags
89 * Window 1 : Display messages
90 * Window 2 : Display inven/equip
92 window_flag[1] = 1UL << A_MAX;
93 window_flag[2] = 1UL << 0;
94 (void)format("%s (%s).", "Mr.Hoge", MAINTAINER);
99 * @brief オブジェクト配列を初期化する /
100 * Initialize some other arrays
103 errr init_object_alloc(void)
106 (void)C_WIPE(aux, MAX_DEPTH, s16b);
109 (void)C_WIPE(num, MAX_DEPTH, s16b);
111 if (alloc_kind_table)
112 C_KILL(alloc_kind_table, alloc_kind_size, alloc_entry);
115 for (int i = 1; i < max_k_idx; i++) {
118 for (int j = 0; j < 4; j++) {
119 if (k_ptr->chance[j]) {
121 num[k_ptr->locale[j]]++;
126 for (int i = 1; i < MAX_DEPTH; i++)
127 num[i] += num[i - 1];
130 quit(_("町のアイテムがない!", "No town objects!"));
132 C_MAKE(alloc_kind_table, alloc_kind_size, alloc_entry);
134 table = alloc_kind_table;
135 for (int i = 1; i < max_k_idx; i++) {
138 for (int j = 0; j < 4; j++) {
139 if (k_ptr->chance[j] == 0)
142 int x = k_ptr->locale[j];
143 int p = (100 / k_ptr->chance[j]);
144 int y = (x > 0) ? num[x - 1] : 0;
146 table[z].index = (KIND_OBJECT_IDX)i;
147 table[z].level = (DEPTH)x;
148 table[z].prob1 = (PROB)p;
149 table[z].prob2 = (PROB)p;
158 * @brief モンスター配列と生成テーブルを初期化する /
159 * Initialize some other arrays
162 errr init_alloc(void)
166 C_MAKE(elements, max_r_idx, tag_type);
167 for (int i = 1; i < max_r_idx; i++) {
168 elements[i].tag = r_info[i].level;
169 elements[i].index = i;
172 tag_sort(elements, max_r_idx);
173 alloc_race_size = max_r_idx;
174 C_MAKE(alloc_race_table, alloc_race_size, alloc_entry);
175 for (int i = 1; i < max_r_idx; i++) {
176 r_ptr = &r_info[elements[i].index];
177 if (r_ptr->rarity == 0)
180 int x = r_ptr->level;
181 int p = (100 / r_ptr->rarity);
182 alloc_race_table[i].index = (KIND_OBJECT_IDX)elements[i].index;
183 alloc_race_table[i].level = (DEPTH)x;
184 alloc_race_table[i].prob1 = (PROB)p;
185 alloc_race_table[i].prob2 = (PROB)p;
188 C_KILL(elements, max_r_idx, tag_type);
189 (void)init_object_alloc();