OSDN Git Service

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