OSDN Git Service

[feature] ソースファイルをC++に対応
[hengbandforosx/hengbandosx.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 "object/object-kind-hook.h"
6 #include "store/store-owners.h"
7 #include "store/store-util.h"
8 #include "store/store.h"
9 #include "system/building-type-definition.h"
10 #include "system/object-type-definition.h"
11
12 /*!
13  * @brief 町情報読み込みのメインルーチン /
14  * Initialize town array
15  * @return エラーコード
16  */
17 errr init_towns(void)
18 {
19     C_MAKE(town_info, max_towns, town_type);
20     for (int i = 1; i < max_towns; i++) {
21         C_MAKE(town_info[i].store, MAX_STORES, store_type);
22         for (int j = 0; j < MAX_STORES; j++) {
23             store_type *store_ptr = &town_info[i].store[j];
24             if ((i > 1) && (j == STORE_MUSEUM || j == STORE_HOME))
25                 continue;
26
27             /*
28              * 我が家が 20 ページまで使える隠し機能のための準備。
29              * オプションが有効でもそうでなくても一応スペースを作っておく。
30              */
31             if (j == STORE_HOME) {
32                 store_ptr->stock_size = STORE_INVEN_MAX * 10;
33             } else if (j == STORE_MUSEUM) {
34                 store_ptr->stock_size = STORE_INVEN_MAX * 50;
35             } else {
36                 store_ptr->stock_size = STORE_INVEN_MAX;
37             }
38
39             C_MAKE(store_ptr->stock, store_ptr->stock_size, object_type);
40             if ((j == STORE_BLACK) || (j == STORE_HOME) || (j == STORE_MUSEUM))
41                 continue;
42
43             store_ptr->regular_num = 0;
44             store_ptr->regular_size = STORE_INVEN_MAX;
45             C_MAKE(store_ptr->regular, store_ptr->regular_size + 1, KIND_OBJECT_IDX);
46             for (int k = 0; k < store_ptr->regular_size; k++) {
47                 int tv = store_regular_table[j][k].tval;
48                 int sv = store_regular_table[j][k].sval;
49                 if (tv == 0)
50                     break;
51
52                 KIND_OBJECT_IDX k_idx = lookup_kind(static_cast<tval_type>(tv), sv);
53
54                 if (k_idx == 0)
55                     continue;
56
57                 store_ptr->regular[store_ptr->regular_num++] = k_idx;
58             }
59
60             store_ptr->table_num = 0;
61             store_ptr->table_size = STORE_CHOICES;
62             C_MAKE(store_ptr->table, store_ptr->table_size + 1, KIND_OBJECT_IDX);
63             for (int k = 0; k < store_ptr->table_size; k++) {
64                 int tv = store_table[j][k].tval;
65                 int sv = store_table[j][k].sval;
66                 if (tv == 0)
67                     break;
68
69                 KIND_OBJECT_IDX k_idx = lookup_kind(static_cast<tval_type>(tv), sv);
70
71                 if (k_idx == 0)
72                     continue;
73
74                 store_ptr->table[store_ptr->table_num++] = k_idx;
75             }
76         }
77     }
78
79     return 0;
80 }
81
82 /*!
83  * @brief 店情報初期化のメインルーチン /
84  * Initialize buildings
85  * @return エラーコード
86  */
87 errr init_buildings(void)
88 {
89     for (int i = 0; i < MAX_BLDG; i++) {
90         building[i].name[0] = '\0';
91         building[i].owner_name[0] = '\0';
92         building[i].owner_race[0] = '\0';
93
94         for (int j = 0; j < 8; j++) {
95             building[i].act_names[j][0] = '\0';
96             building[i].member_costs[j] = 0;
97             building[i].other_costs[j] = 0;
98             building[i].letters[j] = 0;
99             building[i].actions[j] = 0;
100             building[i].action_restr[j] = 0;
101         }
102
103         for (int j = 0; j < MAX_CLASS; j++)
104             building[i].member_class[j] = CLASS_WARRIOR;
105
106         for (int j = 0; j < MAX_RACES; j++)
107             building[i].member_race[j] = RACE_HUMAN;
108
109         for (int j = 0; j < MAX_MAGIC + 1; j++)
110             building[i].member_realm[j] = 0;
111     }
112
113     return 0;
114 }