OSDN Git Service

[Refactor] #40635 Separated game-data-initializer.c/h from init.c
authorHourier <hourier@users.sourceforge.jp>
Thu, 20 Aug 2020 12:35:40 +0000 (21:35 +0900)
committerHourier <hourier@users.sourceforge.jp>
Thu, 20 Aug 2020 12:35:40 +0000 (21:35 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/main/game-data-initializer.c [new file with mode: 0644]
src/main/game-data-initializer.h [new file with mode: 0644]
src/main/init.c

index 182e590..9f60371 100644 (file)
     <ClCompile Include="..\..\src\io\store-key-processor.c" />\r
     <ClCompile Include="..\..\src\load\info-loader.c" />\r
     <ClCompile Include="..\..\src\main\angband-headers.c" />\r
+    <ClCompile Include="..\..\src\main\game-data-initializer.c" />\r
     <ClCompile Include="..\..\src\main\info-initializer.c" />\r
     <ClCompile Include="..\..\src\main\init-error-messages-table.c" />\r
     <ClCompile Include="..\..\src\market\building-initializer.c" />\r
     <ClInclude Include="..\..\src\load\info-loader.h" />\r
     <ClInclude Include="..\..\src\locale\language-switcher.h" />\r
     <ClInclude Include="..\..\src\main\angband-headers.h" />\r
+    <ClInclude Include="..\..\src\main\game-data-initializer.h" />\r
     <ClInclude Include="..\..\src\main\info-initializer.h" />\r
     <ClInclude Include="..\..\src\main\init-error-messages-table.h" />\r
     <ClInclude Include="..\..\src\market\building-initializer.h" />\r
index fd11ea9..f5b25da 100644 (file)
     <ClCompile Include="..\..\src\market\building-initializer.c">
       <Filter>market</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\main\game-data-initializer.c">
+      <Filter>main</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\combat\shoot.h">
     <ClInclude Include="..\..\src\market\building-initializer.h">
       <Filter>market</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\main\game-data-initializer.h">
+      <Filter>main</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index ff88ef0..223f8c4 100644 (file)
@@ -380,6 +380,7 @@ hengband_SOURCES = \
        main.c main-x11.c main-gcu.c \
        \
        main/angband-headers.c main/angband-headers.h \
+       main/game-data-initializer.c main/game-data-initializer.h \
        main/info-initializer.c main/info-initializer.h \
        main/init.c main/init.h \
        main/initialization-error-messages-table.c main/initialization-error-messages-table.h \
diff --git a/src/main/game-data-initializer.c b/src/main/game-data-initializer.c
new file mode 100644 (file)
index 0000000..fda1e11
--- /dev/null
@@ -0,0 +1,192 @@
+#include "main/game-data-initializer.h"
+#include "cmd-io/macro-util.h"
+#include "dungeon/dungeon.h"
+#include "dungeon/quest.h"
+#include "floor/floor-util.h"
+#include "game-option/option-flags.h"
+#include "game-option/option-types-table.h"
+#include "grid/grid.h"
+#include "monster-race/monster-race.h"
+#include "object/object-kind.h"
+#include "system/alloc-entries.h"
+#include "system/floor-type-definition.h"
+#include "system/object-type-definition.h"
+#include "term/gameterm.h"
+#include "util/quarks.h"
+#include "util/tag-sorter.h"
+#include "view/display-messages.h"
+#include "world/world.h"
+
+/*!
+ * @brief \83}\83N\83\8d\93o\98^\82Ì\8dÅ\91å\90\94 / Maximum number of macros (see "io.c")
+ * @note Default: assume at most 256 macros are used
+ */
+static const int MACRO_MAX = 256;
+
+/*!
+ * @brief \83N\83G\83X\83g\8fî\95ñ\8f\89\8aú\89»\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93 /
+ * Initialize quest array
+ * @return \83G\83\89\81[\83R\81[\83h
+ */
+errr init_quests(void)
+{
+    C_MAKE(quest, max_q_idx, quest_type);
+    for (int i = 0; i < max_q_idx; i++)
+        quest[i].status = QUEST_STATUS_UNTAKEN;
+
+    return 0;
+}
+
+/*!
+ * @brief \82»\82Ì\91¼\82Ì\8f\89\8aú\8fî\95ñ\8dX\90V /
+ * Initialize some other arrays
+ * @return \83G\83\89\81[\83R\81[\83h
+ */
+errr init_other(player_type *player_ptr)
+{
+    player_ptr->current_floor_ptr = &floor_info; // TODO:\96{\93\96\82Í\82±\82ñ\82È\82Æ\82±\82ë\82Å\8f\89\8aú\89»\82µ\82½\82­\82È\82¢
+    floor_type *floor_ptr = player_ptr->current_floor_ptr;
+    C_MAKE(floor_ptr->o_list, current_world_ptr->max_o_idx, object_type);
+    C_MAKE(floor_ptr->m_list, current_world_ptr->max_m_idx, monster_type);
+    for (int i = 0; i < MAX_MTIMED; i++)
+        C_MAKE(floor_ptr->mproc_list[i], current_world_ptr->max_m_idx, s16b);
+
+    C_MAKE(max_dlv, current_world_ptr->max_d_idx, DEPTH);
+    for (int i = 0; i < MAX_HGT; i++)
+        C_MAKE(floor_ptr->grid_array[i], MAX_WID, grid_type);
+
+    C_MAKE(macro__pat, MACRO_MAX, concptr);
+    C_MAKE(macro__act, MACRO_MAX, concptr);
+    C_MAKE(macro__cmd, MACRO_MAX, bool);
+    C_MAKE(macro__buf, 1024, char);
+    quark_init();
+
+    C_MAKE(message__ptr, MESSAGE_MAX, u32b);
+    C_MAKE(message__buf, MESSAGE_BUF, char);
+    message__tail = MESSAGE_BUF;
+
+    for (int i = 0; option_info[i].o_desc; i++) {
+        int os = option_info[i].o_set;
+        int ob = option_info[i].o_bit;
+        if (!option_info[i].o_var)
+            continue;
+
+        option_mask[os] |= (1L << ob);
+        if (option_info[i].o_norm)
+            option_flag[os] |= (1L << ob);
+        else
+            option_flag[os] &= ~(1L << ob);
+    }
+
+    for (int n = 0; n < 8; n++)
+        for (int i = 0; i < 32; i++)
+            if (window_flag_desc[i])
+                window_mask[n] |= (1L << i);
+
+    /*
+     *  Set the "default" window flags
+     *  Window 1 : Display messages
+     *  Window 2 : Display inven/equip
+     */
+    window_flag[1] = 1L << A_MAX;
+    window_flag[2] = 1L << 0;
+    (void)format("%s (%s).", "Mr.Hoge", MAINTAINER);
+    return 0;
+}
+
+/*!
+ * @brief \83I\83u\83W\83F\83N\83g\94z\97ñ\82ð\8f\89\8aú\89»\82·\82é /
+ * Initialize some other arrays
+ * @return \83G\83\89\81[\83R\81[\83h
+ */
+errr init_object_alloc(void)
+{
+    s16b aux[MAX_DEPTH];
+    (void)C_WIPE(&aux, MAX_DEPTH, s16b);
+
+    s16b num[MAX_DEPTH];
+    (void)C_WIPE(&num, MAX_DEPTH, s16b);
+
+    if (alloc_kind_table)
+        C_KILL(alloc_kind_table, alloc_kind_size, alloc_entry);
+
+    alloc_kind_size = 0;
+    for (int i = 1; i < max_k_idx; i++) {
+        object_kind *k_ptr;
+        k_ptr = &k_info[i];
+        for (int j = 0; j < 4; j++) {
+            if (k_ptr->chance[j]) {
+                alloc_kind_size++;
+                num[k_ptr->locale[j]]++;
+            }
+        }
+    }
+
+    for (int i = 1; i < MAX_DEPTH; i++)
+        num[i] += num[i - 1];
+
+    if (!num[0])
+        quit(_("\92¬\82Ì\83A\83C\83e\83\80\82ª\82È\82¢\81I", "No town objects!"));
+
+    C_MAKE(alloc_kind_table, alloc_kind_size, alloc_entry);
+    alloc_entry *table;
+    table = alloc_kind_table;
+    for (int i = 1; i < max_k_idx; i++) {
+        object_kind *k_ptr;
+        k_ptr = &k_info[i];
+        for (int j = 0; j < 4; j++) {
+            if (k_ptr->chance[j] == 0)
+                continue;
+
+            int x = k_ptr->locale[j];
+            int p = (100 / k_ptr->chance[j]);
+            int y = (x > 0) ? num[x - 1] : 0;
+            int z = y + aux[x];
+            table[z].index = (KIND_OBJECT_IDX)i;
+            table[z].level = (DEPTH)x;
+            table[z].prob1 = (PROB)p;
+            table[z].prob2 = (PROB)p;
+            table[z].prob3 = (PROB)p;
+            aux[x]++;
+        }
+    }
+
+    return 0;
+}
+
+/*!
+ * @brief \83\82\83\93\83X\83^\81[\94z\97ñ\82Æ\90\90¬\83e\81[\83u\83\8b\82ð\8f\89\8aú\89»\82·\82é /
+ * Initialize some other arrays
+ * @return \83G\83\89\81[\83R\81[\83h
+ */
+errr init_alloc(void)
+{
+    monster_race *r_ptr;
+    tag_type *elements;
+    C_MAKE(elements, max_r_idx, tag_type);
+    for (int i = 1; i < max_r_idx; i++) {
+        elements[i].tag = r_info[i].level;
+        elements[i].index = i;
+    }
+
+    tag_sort(elements, max_r_idx);
+    alloc_race_size = max_r_idx;
+    C_MAKE(alloc_race_table, alloc_race_size, alloc_entry);
+    for (int i = 1; i < max_r_idx; i++) {
+        r_ptr = &r_info[elements[i].index];
+        if (r_ptr->rarity == 0)
+            continue;
+
+        int x = r_ptr->level;
+        int p = (100 / r_ptr->rarity);
+        alloc_race_table[i].index = (KIND_OBJECT_IDX)elements[i].index;
+        alloc_race_table[i].level = (DEPTH)x;
+        alloc_race_table[i].prob1 = (PROB)p;
+        alloc_race_table[i].prob2 = (PROB)p;
+        alloc_race_table[i].prob3 = (PROB)p;
+    }
+
+    C_KILL(elements, max_r_idx, tag_type);
+    (void)init_object_alloc();
+    return 0;
+}
diff --git a/src/main/game-data-initializer.h b/src/main/game-data-initializer.h
new file mode 100644 (file)
index 0000000..5a53c9e
--- /dev/null
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "system/angband.h"
+
+errr init_quests(void);
+errr init_other(player_type *player_ptr);
+errr init_object_alloc(void);
+errr init_alloc(void);
index a2c695d..f74fe1a 100644 (file)
@@ -57,6 +57,7 @@
 #include "io/read-pref-file.h"
 #include "io/uid-checker.h"
 #include "main/angband-headers.h"
+#include "main/game-data-initializer.h"
 #include "main/info-initializer.h"
 #include "main/init-error-messages-table.h"
 #include "market/articles-on-sale.h"
 #include "world/world.h"
 
 /*!
- * @brief マクロ登録の最大数 / Maximum number of macros (see "io.c")
- * @note Default: assume at most 256 macros are used
- */
-static const int MACRO_MAX = 256;
-
-/*!
  * @brief 各データファイルを読み取るためのパスを取得する
  * Find the default paths to all of our important sub-directories.
  * @param path パス保管先の文字列
@@ -177,174 +172,6 @@ void init_file_paths(char *path)
 }
 
 /*!
- * @brief クエスト情報初期化のメインルーチン /
- * Initialize quest array
- * @return エラーコード
- */
-static errr init_quests(void)
-{
-    C_MAKE(quest, max_q_idx, quest_type);
-    for (int i = 0; i < max_q_idx; i++)
-        quest[i].status = QUEST_STATUS_UNTAKEN;
-
-    return 0;
-}
-
-/*!
- * @brief その他の初期情報更新 /
- * Initialize some other arrays
- * @return エラーコード
- */
-static errr init_other(player_type *player_ptr)
-{
-    player_ptr->current_floor_ptr = &floor_info; // TODO:本当はこんなところで初期化したくない
-    floor_type *floor_ptr = player_ptr->current_floor_ptr;
-    C_MAKE(floor_ptr->o_list, current_world_ptr->max_o_idx, object_type);
-    C_MAKE(floor_ptr->m_list, current_world_ptr->max_m_idx, monster_type);
-    for (int i = 0; i < MAX_MTIMED; i++)
-        C_MAKE(floor_ptr->mproc_list[i], current_world_ptr->max_m_idx, s16b);
-
-    C_MAKE(max_dlv, current_world_ptr->max_d_idx, DEPTH);
-    for (int i = 0; i < MAX_HGT; i++)
-        C_MAKE(floor_ptr->grid_array[i], MAX_WID, grid_type);
-
-    C_MAKE(macro__pat, MACRO_MAX, concptr);
-    C_MAKE(macro__act, MACRO_MAX, concptr);
-    C_MAKE(macro__cmd, MACRO_MAX, bool);
-    C_MAKE(macro__buf, 1024, char);
-    quark_init();
-
-    C_MAKE(message__ptr, MESSAGE_MAX, u32b);
-    C_MAKE(message__buf, MESSAGE_BUF, char);
-    message__tail = MESSAGE_BUF;
-
-    for (int i = 0; option_info[i].o_desc; i++) {
-        int os = option_info[i].o_set;
-        int ob = option_info[i].o_bit;
-        if (!option_info[i].o_var)
-            continue;
-
-        option_mask[os] |= (1L << ob);
-        if (option_info[i].o_norm)
-            option_flag[os] |= (1L << ob);
-        else
-            option_flag[os] &= ~(1L << ob);
-    }
-
-    for (int n = 0; n < 8; n++)
-        for (int i = 0; i < 32; i++)
-            if (window_flag_desc[i])
-                window_mask[n] |= (1L << i);
-
-    /*
-     *  Set the "default" window flags
-     *  Window 1 : Display messages
-     *  Window 2 : Display inven/equip
-     */
-    window_flag[1] = 1L << A_MAX;
-    window_flag[2] = 1L << 0;
-    (void)format("%s (%s).", "Mr.Hoge", MAINTAINER);
-    return 0;
-}
-
-/*!
- * @brief オブジェクト配列を初期化する /
- * Initialize some other arrays
- * @return エラーコード
- */
-static errr init_object_alloc(void)
-{
-    s16b aux[MAX_DEPTH];
-    (void)C_WIPE(&aux, MAX_DEPTH, s16b);
-
-    s16b num[MAX_DEPTH];
-    (void)C_WIPE(&num, MAX_DEPTH, s16b);
-
-    if (alloc_kind_table)
-        C_KILL(alloc_kind_table, alloc_kind_size, alloc_entry);
-
-    alloc_kind_size = 0;
-    for (int i = 1; i < max_k_idx; i++) {
-        object_kind *k_ptr;
-        k_ptr = &k_info[i];
-        for (int j = 0; j < 4; j++) {
-            if (k_ptr->chance[j]) {
-                alloc_kind_size++;
-                num[k_ptr->locale[j]]++;
-            }
-        }
-    }
-
-    for (int i = 1; i < MAX_DEPTH; i++)
-        num[i] += num[i - 1];
-
-    if (!num[0])
-        quit(_("町のアイテムがない!", "No town objects!"));
-
-    C_MAKE(alloc_kind_table, alloc_kind_size, alloc_entry);
-    alloc_entry *table;
-    table = alloc_kind_table;
-    for (int i = 1; i < max_k_idx; i++) {
-        object_kind *k_ptr;
-        k_ptr = &k_info[i];
-        for (int j = 0; j < 4; j++) {
-            if (k_ptr->chance[j] == 0)
-                continue;
-
-            int x = k_ptr->locale[j];
-            int p = (100 / k_ptr->chance[j]);
-            int y = (x > 0) ? num[x - 1] : 0;
-            int z = y + aux[x];
-            table[z].index = (KIND_OBJECT_IDX)i;
-            table[z].level = (DEPTH)x;
-            table[z].prob1 = (PROB)p;
-            table[z].prob2 = (PROB)p;
-            table[z].prob3 = (PROB)p;
-            aux[x]++;
-        }
-    }
-
-    return 0;
-}
-
-/*!
- * @brief モンスター配列と生成テーブルを初期化する /
- * Initialize some other arrays
- * @return エラーコード
- */
-static errr init_alloc(void)
-{
-    monster_race *r_ptr;
-    tag_type *elements;
-    C_MAKE(elements, max_r_idx, tag_type);
-    for (int i = 1; i < max_r_idx; i++) {
-        elements[i].tag = r_info[i].level;
-        elements[i].index = i;
-    }
-
-    tag_sort(elements, max_r_idx);
-    alloc_race_size = max_r_idx;
-    C_MAKE(alloc_race_table, alloc_race_size, alloc_entry);
-    for (int i = 1; i < max_r_idx; i++) {
-        r_ptr = &r_info[elements[i].index];
-        if (r_ptr->rarity == 0)
-            continue;
-
-        int x = r_ptr->level;
-        int p = (100 / r_ptr->rarity);
-        alloc_race_table[i].index = (KIND_OBJECT_IDX)elements[i].index;
-        alloc_race_table[i].level = (DEPTH)x;
-        alloc_race_table[i].prob1 = (PROB)p;
-        alloc_race_table[i].prob2 = (PROB)p;
-        alloc_race_table[i].prob3 = (PROB)p;
-    }
-
-    C_KILL(elements, max_r_idx, tag_type);
-    (void)init_object_alloc();
-    return 0;
-}
-
-/*!
  * @brief 画面左下にシステムメッセージを表示する /
  * Hack -- take notes on line 23
  * @return なし