OSDN Git Service

Merge remote-tracking branch 'remotes/origin/feature/Refactor-Monster-Alpha5' into...
[hengband/hengband.git] / src / market / building-initializer.c
1 #include "market/building-initializer.h"
2 #include "floor/floor-town.h"
3 #include "market/articles-on-sale.h"
4 #include "object/object-kind.h"
5 #include "store/store-owners.h"
6 #include "store/store-util.h"
7 #include "store/store.h"
8 #include "system/building-type-definition.h"
9 #include "system/object-type-definition.h"
10
11 /*!
12  * @brief 町情報読み込みのメインルーチン /
13  * Initialize town array
14  * @return エラーコード
15  */
16 errr init_towns(void)
17 {
18     C_MAKE(town_info, max_towns, town_type);
19     for (int i = 1; i < max_towns; i++) {
20         C_MAKE(town_info[i].store, MAX_STORES, store_type);
21         for (int j = 0; j < MAX_STORES; j++) {
22             store_type *store_ptr = &town_info[i].store[j];
23             if ((i > 1) && (j == STORE_MUSEUM || j == STORE_HOME))
24                 continue;
25
26             /*
27              * 我が家が 20 ページまで使える隠し機能のための準備。
28              * オプションが有効でもそうでなくても一応スペースを作っておく。
29              */
30             if (j == STORE_HOME) {
31                 store_ptr->stock_size = STORE_INVEN_MAX * 10;
32             } else if (j == STORE_MUSEUM) {
33                 store_ptr->stock_size = STORE_INVEN_MAX * 50;
34             } else {
35                 store_ptr->stock_size = STORE_INVEN_MAX;
36             }
37
38             C_MAKE(store_ptr->stock, store_ptr->stock_size, object_type);
39             if ((j == STORE_BLACK) || (j == STORE_HOME) || (j == STORE_MUSEUM))
40                 continue;
41
42             store_ptr->table_size = STORE_CHOICES;
43             C_MAKE(store_ptr->table, store_ptr->table_size, s16b);
44             for (int k = 0; k < STORE_CHOICES; k++) {
45                 KIND_OBJECT_IDX k_idx;
46                 int tv = store_table[j][k][0];
47                 int sv = store_table[j][k][1];
48                 for (k_idx = 1; k_idx < max_k_idx; k_idx++) {
49                     object_kind *k_ptr = &k_info[k_idx];
50                     if ((k_ptr->tval == tv) && (k_ptr->sval == sv))
51                         break;
52                 }
53
54                 if (k_idx == max_k_idx)
55                     continue;
56
57                 store_ptr->table[store_ptr->table_num++] = k_idx;
58             }
59         }
60     }
61
62     return 0;
63 }
64
65 /*!
66  * @brief 店情報初期化のメインルーチン /
67  * Initialize buildings
68  * @return エラーコード
69  */
70 errr init_buildings(void)
71 {
72     for (int i = 0; i < MAX_BLDG; i++) {
73         building[i].name[0] = '\0';
74         building[i].owner_name[0] = '\0';
75         building[i].owner_race[0] = '\0';
76
77         for (int j = 0; j < 8; j++) {
78             building[i].act_names[j][0] = '\0';
79             building[i].member_costs[j] = 0;
80             building[i].other_costs[j] = 0;
81             building[i].letters[j] = 0;
82             building[i].actions[j] = 0;
83             building[i].action_restr[j] = 0;
84         }
85
86         for (int j = 0; j < MAX_CLASS; j++)
87             building[i].member_class[j] = 0;
88
89         for (int j = 0; j < MAX_RACES; j++)
90             building[i].member_race[j] = 0;
91
92         for (int j = 0; j < MAX_MAGIC + 1; j++)
93             building[i].member_realm[j] = 0;
94     }
95
96     return 0;
97 }