OSDN Git Service

[Refactor] #1447 Replaced 'typedef struct player_type player_type;' to 'struct player...
[hengbandforosx/hengbandosx.git] / src / object-enchant / object-ego.h
1 #pragma once
2
3 #include <string>
4 #include <vector>
5
6 #include "object-enchant/tr-types.h"
7 #include "object-enchant/trg-types.h"
8 #include "system/angband.h"
9 #include "system/system-variables.h"
10 #include "util/flag-group.h"
11
12 /* Body Armor */
13 #define EGO_A_MORGUL            4
14 #define EGO_A_DEMON             5
15 #define EGO_DRUID               6
16 #define EGO_OLOG                7
17 #define EGO_RESISTANCE          8
18 #define EGO_ELVENKIND           9
19 #define EGO_DWARVEN             10
20 #define EGO_PERMANENCE          11
21 #define EGO_TWILIGHT             12
22 #define EGO_URUKISH             13
23
24 /* Shields */
25 #define EGO_ENDURE_ACID         16
26 #define EGO_ENDURE_ELEC         17
27 #define EGO_ENDURE_FIRE         18
28 #define EGO_ENDURE_COLD         19
29 #define EGO_ENDURANCE           20
30 #define EGO_REFLECTION          21
31 #define EGO_NIGHT_DAY           22
32 #define EGO_S_PROTECTION        238
33 #define EGO_S_DWARVEN           239
34
35 /* Crowns and Helms */
36 #define EGO_DARK                23
37 #define EGO_BRILLIANCE          24
38 #define EGO_H_PROTECTION        25
39 #define EGO_H_DEMON             26
40 #define EGO_MAGI                27
41 #define EGO_MIGHT               28
42 #define EGO_LORDLINESS          29
43 #define EGO_SEEING              30
44 #define EGO_INFRAVISION         31
45 #define EGO_LITE                32
46 #define EGO_TELEPATHY           33
47 #define EGO_REGENERATION        34
48 #define EGO_TELEPORTATION       35
49 #define EGO_FOOL                36
50 #define EGO_BASILISK            37
51 #define EGO_ANCIENT_CURSE       38
52 #define EGO_SICKLINESS          39
53
54 /* Cloaks */
55 #define EGO_PROTECTION          40
56 #define EGO_STEALTH             41
57 #define EGO_AMAN                42
58 #define EGO_AURA_FIRE           43
59 #define EGO_ENVELOPING          44
60 #define EGO_VULNERABILITY       45
61 #define EGO_IRRITATION          46
62 #define EGO_AURA_ELEC           47
63 #define EGO_AURA_COLD          128
64 #define EGO_BAT                129
65 #define EGO_NAZGUL             240
66
67 /* Gloves */
68 #define EGO_FREE_ACTION         48
69 #define EGO_SLAYING             49
70 #define EGO_AGILITY             50
71 #define EGO_POWER               51
72 #define EGO_2WEAPON             52
73 #define EGO_MAGIC_MASTERY       53
74 #define EGO_WEAKNESS            54
75 #define EGO_CLUMSINESS          55
76
77 /* Boots */
78 #define EGO_SLOW_DESCENT        56
79 #define EGO_QUIET               57
80 #define EGO_MOTION              58
81 #define EGO_SPEED               59
82 #define EGO_JUMP                60
83 #define EGO_NOISE               61
84 #define EGO_SLOWNESS            62
85 #define EGO_ANNOYANCE           63
86
87 /* Weapons */
88 #define EGO_HA                  64
89 #define EGO_DF                  65
90 #define EGO_BLESS_BLADE         66
91 #define EGO_WEST                68
92 #define EGO_ATTACKS             69
93 #define EGO_SLAYING_WEAPON      70
94 #define EGO_FORCE_WEAPON        71
95 #define EGO_BRAND_ACID          72
96 #define EGO_BRAND_ELEC          73
97 #define EGO_BRAND_FIRE          74
98 #define EGO_BRAND_COLD          75
99 #define EGO_BRAND_POIS          76
100 #define EGO_CHAOTIC             77
101 #define EGO_SHARPNESS           78
102 #define EGO_EARTHQUAKES         79
103 #define EGO_W_FAIRLY            83
104 #define EGO_W_OMNIVOROUS        84
105 #define EGO_W_DARK_REVENGER     85
106 #define EGO_KILL_GOOD           86
107 #define EGO_WEIRD               87
108 #define EGO_KILL_ANIMAL         88
109 #define EGO_KILL_EVIL           89
110 #define EGO_KILL_UNDEAD         90
111 #define EGO_KILL_DEMON          91
112 #define EGO_KILL_ORC            92
113 #define EGO_KILL_TROLL          93
114 #define EGO_KILL_GIANT          94
115 #define EGO_KILL_DRAGON         95
116 #define EGO_VAMPIRIC            96
117 #define EGO_PRISM               97
118 #define EGO_TRUMP               98
119 #define EGO_PATTERN             99
120 #define EGO_DIGGING             100
121 #define EGO_DEMON               101
122 #define EGO_MORGUL              102
123 #define EGO_KILL_HUMAN          103
124
125 /* Bows */
126 #define EGO_ACCURACY            104
127 #define EGO_VELOCITY            105
128 #define EGO_EXTRA_MIGHT         108
129 #define EGO_EXTRA_SHOTS         109
130
131 /* Ammo */
132 #define EGO_HURT_ANIMAL         112
133 #define EGO_HURT_EVIL           113
134 #define EGO_HURT_DRAGON         119
135 #define EGO_SLAYING_BOLT        120
136 #define EGO_LIGHTNING_BOLT      121
137 #define EGO_FLAME               122
138 #define EGO_FROST               123
139 #define EGO_WOUNDING            124
140 #define EGO_BACKBITING          125
141 #define EGO_SHATTERED           126
142 #define EGO_BLASTED             127
143
144 /* Lite */
145 #define EGO_LITE_SHINE          140
146 #define EGO_LITE_ILLUMINATION   141
147 #define EGO_LITE_AURA_FIRE      142
148 #define EGO_LITE_INFRA          143
149 #define EGO_LITE_LONG           144
150 #define EGO_LITE_DARKNESS       145
151 #define EGO_LITE_EYE            146
152
153 /* Ring */
154 #define EGO_RING_HERO           150
155 #define EGO_RING_SLAY           151
156 #define EGO_RING_SUPER_AC       152
157 #define EGO_RING_MAGIC_MIS      153
158 #define EGO_RING_FIRE_BOLT      154
159 #define EGO_RING_COLD_BOLT      155
160 #define EGO_RING_ELEC_BOLT      156
161 #define EGO_RING_ACID_BOLT      157
162 #define EGO_RING_MANA_BOLT      158
163 #define EGO_RING_FIRE_BALL      159
164 #define EGO_RING_COLD_BALL      160
165 #define EGO_RING_ELEC_BALL      161
166 #define EGO_RING_ACID_BALL      162
167 #define EGO_RING_MANA_BALL      163
168 #define EGO_RING_DRAGON_F       164
169 #define EGO_RING_DRAGON_C       165
170 #define EGO_RING_D_SPEED        166
171 #define EGO_RING_BERSERKER      167
172 #define EGO_RING_HUNTER         168
173 #define EGO_RING_THROW          169
174 #define EGO_RING_REGEN          170
175 #define EGO_RING_LITE           171
176 #define EGO_RING_M_DETECT       172
177 #define EGO_RING_STEALTH        173
178 #define EGO_RING_TELE_AWAY      174
179 #define EGO_RING_TO_H           175
180 #define EGO_RING_TO_D           176
181 #define EGO_RING_RES_LITE       177
182 #define EGO_RING_RES_DARK       178
183 #define EGO_RING_WIZARD         179
184 #define EGO_RING_TRUE           180
185 #define EGO_RING_DRAIN_EXP      181
186 #define EGO_RING_NO_MELEE       182
187 #define EGO_RING_AGGRAVATE      183
188 #define EGO_RING_TY_CURSE       184
189 #define EGO_RING_RES_TIME       185
190 #define EGO_RING_TELEPORT       186
191 #define EGO_RING_ALBINO         187
192
193 /* Amulet */
194 #define EGO_AMU_SLOW_D          210
195 #define EGO_AMU_INFRA           211
196 #define EGO_AMU_SEE_INVIS       212
197 #define EGO_AMU_HOLD_EXP        213
198 #define EGO_AMU_DRAIN_EXP       214
199 #define EGO_AMU_FOOL            215
200 #define EGO_AMU_AGGRAVATE       216
201 #define EGO_AMU_TY_CURSE        217
202 #define EGO_AMU_AC              218
203 #define EGO_AMU_IDENT           219
204 #define EGO_AMU_CHARM           220
205 #define EGO_AMU_STEALTH         221
206 #define EGO_AMU_JUMP            222
207 #define EGO_AMU_TELEPORT        223
208 #define EGO_AMU_D_DOOR          224
209 #define EGO_AMU_DEFENDER        225
210 #define EGO_AMU_RES_FIRE        226
211 #define EGO_AMU_RES_FIRE_       227
212 #define EGO_AMU_RES_COLD        228
213 #define EGO_AMU_RES_COLD_       229
214 #define EGO_AMU_RES_ELEC        230
215 #define EGO_AMU_RES_ELEC_       231
216 #define EGO_AMU_RES_ACID        232
217 #define EGO_AMU_RES_ACID_       233
218 #define EGO_AMU_LEVITATION      234
219 #define EGO_AMU_GREAT           235
220 #define EGO_AMU_DETECTION       236
221 #define EGO_AMU_NAIVETY         237
222 // MAX 240
223
224 struct ego_generate_type {
225     int mul{}; //<! 確率分子
226     int dev{}; //<! 確率分母
227     std::vector<tr_type> tr_flags{};
228     std::vector<TRG> trg_flags{};
229 };
230
231 /*
232  * Information about "ego-items".
233  */
234 struct ego_item_type {
235     std::string name; //!< エゴの名前
236     std::string text; //!< フレーバーテキスト
237
238     INVENTORY_IDX slot{}; //!< 装備部位 / Standard slot value
239     PRICE rating{}; //!< レーティングボーナス(雰囲気に影響) / Rating boost
240
241     DEPTH level{}; //!< 生成レベル
242     RARITY rarity{}; //<! レアリティ
243
244     HIT_PROB base_to_h{}; //!< ベース命中修正
245     HIT_POINT base_to_d{}; //!< べ^スダメージ修正
246     ARMOUR_CLASS base_to_a{}; //!< ベースAC修正
247
248     HIT_PROB max_to_h{}; //!< 最大ボーナス命中修正
249     HIT_POINT max_to_d{}; //!< 最大ボーナスダメージ修正
250     ARMOUR_CLASS max_to_a{}; //!< 最大ボーナスAC修正
251
252     PARAMETER_VALUE max_pval{}; //!< 最大pval
253
254     PRICE cost{}; //!< コスト
255
256     TrFlags flags{}; //!< 能力/耐性フラグ
257     EnumClassFlagGroup<TRG> gen_flags; //!< 生成時適用フラグ
258     std::vector<ego_generate_type> xtra_flags{}; //!< 追加能力/耐性フラグ
259
260     IDX act_idx{}; //!< 発動番号 / Activative ability index
261 };
262
263 extern EGO_IDX max_e_idx;
264 extern std::vector<ego_item_type> e_info;
265
266 typedef struct object_type object_type;
267 struct player_type;
268 byte get_random_ego(byte slot, bool good);
269 void apply_ego(object_type *o_ptr, DEPTH lev);