3 #include "system/angband.h"
5 #include "object-enchant/tr-types.h"
6 #include "object-enchant/trg-types.h"
7 #include "system/object-type-definition.h"
8 #include "util/flag-group.h"
14 #define EGO_A_MORGUL 4
18 #define EGO_RESISTANCE 8
19 #define EGO_ELVENKIND 9
20 #define EGO_DWARVEN 10
21 #define EGO_PERMANENCE 11
22 #define EGO_YOIYAMI 12
23 #define EGO_URUKISH 13
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
36 /* Crowns and Helms */
38 #define EGO_BRILLIANCE 24
39 #define EGO_H_PROTECTION 25
40 #define EGO_H_DEMON 26
43 #define EGO_LORDLINESS 29
45 #define EGO_INFRAVISION 31
47 #define EGO_TELEPATHY 33
48 #define EGO_REGENERATION 34
49 #define EGO_TELEPORTATION 35
51 #define EGO_BASILISK 37
52 #define EGO_ANCIENT_CURSE 38
53 #define EGO_SICKLINESS 39
56 #define EGO_PROTECTION 40
57 #define EGO_STEALTH 41
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
66 #define EGO_NAZGUL 240
69 #define EGO_FREE_ACTION 48
70 #define EGO_SLAYING 49
71 #define EGO_AGILITY 50
73 #define EGO_2WEAPON 52
74 #define EGO_MAGIC_MASTERY 53
75 #define EGO_WEAKNESS 54
76 #define EGO_CLUMSINESS 55
79 #define EGO_SLOW_DESCENT 56
85 #define EGO_SLOWNESS 62
86 #define EGO_ANNOYANCE 63
91 #define EGO_BLESS_BLADE 66
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
105 #define EGO_KILL_ANIMAL 88
106 #define EGO_KILL_EVIL 89
107 #define EGO_KILL_UNDEAD 90
108 #define EGO_KILL_DEMON 91
109 #define EGO_KILL_ORC 92
110 #define EGO_KILL_TROLL 93
111 #define EGO_KILL_GIANT 94
112 #define EGO_KILL_DRAGON 95
113 #define EGO_VAMPIRIC 96
116 #define EGO_PATTERN 99
117 #define EGO_DIGGING 100
118 #define EGO_DEMON 101
119 #define EGO_MORGUL 102
120 #define EGO_KILL_HUMAN 103
123 #define EGO_ACCURACY 104
124 #define EGO_VELOCITY 105
125 #define EGO_EXTRA_MIGHT 108
126 #define EGO_EXTRA_SHOTS 109
129 #define EGO_HURT_ANIMAL 112
130 #define EGO_HURT_EVIL 113
131 #define EGO_HURT_DRAGON 119
132 #define EGO_SLAYING_BOLT 120
133 #define EGO_LIGHTNING_BOLT 121
134 #define EGO_FLAME 122
135 #define EGO_FROST 123
136 #define EGO_WOUNDING 124
137 #define EGO_BACKBITING 125
138 #define EGO_SHATTERED 126
139 #define EGO_BLASTED 127
142 #define EGO_LITE_SHINE 140
143 #define EGO_LITE_ILLUMINATION 141
144 #define EGO_LITE_AURA_FIRE 142
145 #define EGO_LITE_INFRA 143
146 #define EGO_LITE_LONG 144
147 #define EGO_LITE_DARKNESS 145
148 #define EGO_LITE_EYE 146
151 #define EGO_RING_HERO 150
152 #define EGO_RING_SLAY 151
153 #define EGO_RING_SUPER_AC 152
154 #define EGO_RING_MAGIC_MIS 153
155 #define EGO_RING_FIRE_BOLT 154
156 #define EGO_RING_COLD_BOLT 155
157 #define EGO_RING_ELEC_BOLT 156
158 #define EGO_RING_ACID_BOLT 157
159 #define EGO_RING_MANA_BOLT 158
160 #define EGO_RING_FIRE_BALL 159
161 #define EGO_RING_COLD_BALL 160
162 #define EGO_RING_ELEC_BALL 161
163 #define EGO_RING_ACID_BALL 162
164 #define EGO_RING_MANA_BALL 163
165 #define EGO_RING_DRAGON_F 164
166 #define EGO_RING_DRAGON_C 165
167 #define EGO_RING_D_SPEED 166
168 #define EGO_RING_BERSERKER 167
169 #define EGO_RING_HUNTER 168
170 #define EGO_RING_THROW 169
171 #define EGO_RING_REGEN 170
172 #define EGO_RING_LITE 171
173 #define EGO_RING_M_DETECT 172
174 #define EGO_RING_STEALTH 173
175 #define EGO_RING_TELE_AWAY 174
176 #define EGO_RING_TO_H 175
177 #define EGO_RING_TO_D 176
178 #define EGO_RING_RES_LITE 177
179 #define EGO_RING_RES_DARK 178
180 #define EGO_RING_WIZARD 179
181 #define EGO_RING_TRUE 180
182 #define EGO_RING_DRAIN_EXP 181
183 #define EGO_RING_NO_MELEE 182
184 #define EGO_RING_AGGRAVATE 183
185 #define EGO_RING_TY_CURSE 184
186 #define EGO_RING_RES_TIME 185
187 #define EGO_RING_TELEPORT 186
188 #define EGO_RING_ALBINO 187
191 #define EGO_AMU_SLOW_D 210
192 #define EGO_AMU_INFRA 211
193 #define EGO_AMU_SEE_INVIS 212
194 #define EGO_AMU_HOLD_EXP 213
195 #define EGO_AMU_DRAIN_EXP 214
196 #define EGO_AMU_FOOL 215
197 #define EGO_AMU_AGGRAVATE 216
198 #define EGO_AMU_TY_CURSE 217
199 #define EGO_AMU_AC 218
200 #define EGO_AMU_IDENT 219
201 #define EGO_AMU_CHARM 220
202 #define EGO_AMU_STEALTH 221
203 #define EGO_AMU_JUMP 222
204 #define EGO_AMU_TELEPORT 223
205 #define EGO_AMU_D_DOOR 224
206 #define EGO_AMU_DEFENDER 225
207 #define EGO_AMU_RES_FIRE 226
208 #define EGO_AMU_RES_FIRE_ 227
209 #define EGO_AMU_RES_COLD 228
210 #define EGO_AMU_RES_COLD_ 229
211 #define EGO_AMU_RES_ELEC 230
212 #define EGO_AMU_RES_ELEC_ 231
213 #define EGO_AMU_RES_ACID 232
214 #define EGO_AMU_RES_ACID_ 233
215 #define EGO_AMU_LEVITATION 234
216 #define EGO_AMU_GREAT 235
217 #define EGO_AMU_DETECTION 236
218 #define EGO_AMU_NAIVETY 237
221 struct ego_generate_type {
224 std::vector<tr_type> tr_flags{};
225 std::vector<TRG> trg_flags{};
229 * Information about "ego-items".
231 struct ego_item_type {
232 std::string name; //!< エゴの名前
233 std::string text; //!< フレーバーテキスト
235 INVENTORY_IDX slot{}; //!< 装備部位 / Standard slot value
236 PRICE rating{}; //!< レーティングボーナス(雰囲気に影響) / Rating boost
238 DEPTH level{}; //!< 生成レベル
239 RARITY rarity{}; //<! レアリティ
241 HIT_PROB max_to_h{}; //!< 最大ボーナス命中修正
242 HIT_POINT max_to_d{}; //!< 最大ボーナスダメージ修正
243 ARMOUR_CLASS max_to_a{}; //!< 最大ボーナスAC修正
245 PARAMETER_VALUE max_pval{}; //!< 最大pval
247 PRICE cost{}; //!< コスト
249 BIT_FLAGS flags[TR_FLAG_SIZE]{}; //!< 能力/耐性フラグ
250 FlagGroup<TRG> gen_flags; //!< 生成時適用フラグ
251 std::vector<ego_generate_type> xtra_flags{}; //!< 追加能力/耐性フラグ
253 IDX act_idx{}; //!< 発動番号 / Activative ability index
256 extern EGO_IDX max_e_idx;
257 extern std::vector<ego_item_type> e_info;
259 byte get_random_ego(byte slot, bool good);
260 void apply_ego(player_type *player_ptr, object_type *o_ptr, DEPTH lev);