OSDN Git Service

[Refactor] #3736 activation_type のフィールド変数をconcptr からstring に差し替えた
[hengbandforosx/hengbandosx.git] / src / object-enchant / object-ego.h
1 #pragma once
2
3 #include <map>
4 #include <string>
5 #include <vector>
6
7 #include "object-enchant/object-ego.h"
8 #include "object-enchant/tr-flags.h"
9 #include "object-enchant/tr-types.h"
10 #include "object-enchant/trg-types.h"
11 #include "system/angband.h"
12 #include "util/flag-group.h"
13
14 enum class EgoType {
15     NONE = 0,
16
17     /* Body Armor */
18     A_MORGUL = 4,
19     A_DEMON = 5,
20     DRUID = 6,
21     OLOG = 7,
22     RESISTANCE = 8,
23     ELVENKIND = 9,
24     DWARVEN = 10,
25     PERMANENCE = 11,
26     TWILIGHT = 12,
27     URUKISH = 13,
28
29     /* Shields */
30     ENDURE_ACID = 16,
31     ENDURE_ELEC = 17,
32     ENDURE_FIRE = 18,
33     ENDURE_COLD = 19,
34     ENDURANCE = 20,
35     REFLECTION = 21,
36     NIGHT_DAY = 22,
37     S_PROTECTION = 238,
38     S_DWARVEN = 239,
39
40     /* Crowns and Helms */
41     DARK = 23,
42     BRILLIANCE = 24,
43     H_PROTECTION = 25,
44     H_DEMON = 26,
45     MAGI = 27,
46     MIGHT = 28,
47     LORDLINESS = 29,
48     SEEING = 30,
49     INFRAVISION = 31,
50     LITE = 32,
51     TELEPATHY = 33,
52     REGENERATION = 34,
53     TELEPORTATION = 35,
54     FOOL = 36,
55     BASILISK = 37,
56     ANCIENT_CURSE = 38,
57     SICKLINESS = 39,
58
59     /* Cloaks */
60     PROTECTION = 40,
61     STEALTH = 41,
62     AMAN = 42,
63     AURA_FIRE = 43,
64     ENVELOPING = 44,
65     VULNERABILITY = 45,
66     IRRITATION = 46,
67     AURA_ELEC = 47,
68     AURA_COLD = 128,
69     BAT = 129,
70     NAZGUL = 240,
71
72     /* Gloves */
73     FREE_ACTION = 48,
74     SLAYING = 49,
75     AGILITY = 50,
76     POWER = 51,
77     TWO_WEAPON = 52,
78     MAGIC_MASTERY = 53,
79     WEAKNESS = 54,
80     CLUMSINESS = 55,
81
82     /* Boots */
83     SLOW_DESCENT = 56,
84     QUIET = 57,
85     MOTION = 58,
86     SPEED = 59,
87     JUMP = 60,
88     NOISE = 61,
89     SLOWNESS = 62,
90     ANNOYANCE = 63,
91
92     /* Weapons */
93     HA = 64,
94     DF = 65,
95     BLESS_BLADE = 66,
96     WEST = 68,
97     ATTACKS = 69,
98     SLAYING_WEAPON = 70,
99     FORCE_WEAPON = 71,
100     BRAND_ACID = 72,
101     BRAND_ELEC = 73,
102     BRAND_FIRE = 74,
103     BRAND_COLD = 75,
104     BRAND_POIS = 76,
105     CHAOTIC = 77,
106     SHARPNESS = 78,
107     EARTHQUAKES = 79,
108     W_FAIRLY = 83,
109     W_OMNIVOROUS = 84,
110     W_DARK_REVENGER = 85,
111     KILL_GOOD = 86,
112     WEIRD = 87,
113     KILL_ANIMAL = 88,
114     KILL_EVIL = 89,
115     KILL_UNDEAD = 90,
116     KILL_DEMON = 91,
117     KILL_ORC = 92,
118     KILL_TROLL = 93,
119     KILL_GIANT = 94,
120     KILL_DRAGON = 95,
121     VAMPIRIC = 96,
122     PRISM = 97,
123     TRUMP = 98,
124     PATTERN = 99,
125     DIGGING = 100,
126     DEMON = 101,
127     MORGUL = 102,
128     KILL_HUMAN = 103,
129
130     /* Bows */
131     ACCURACY = 104,
132     VELOCITY = 105,
133     EXTRA_MIGHT = 108,
134     EXTRA_SHOTS = 109,
135
136     /* Ammo */
137     HURT_ANIMAL = 112,
138     HURT_EVIL = 113,
139     HURT_DRAGON = 119,
140     SLAYING_BOLT = 120,
141     LIGHTNING_BOLT = 121,
142     FLAME = 122,
143     FROST = 123,
144     WOUNDING = 124,
145     BACKBITING = 125,
146     SHATTERED = 126,
147     BLASTED = 127,
148
149     /* Lite */
150     LITE_SHINE = 140,
151     LITE_ILLUMINATION = 141,
152     LITE_AURA_FIRE = 142,
153     LITE_INFRA = 143,
154     LITE_LONG = 144,
155     LITE_DARKNESS = 145,
156     LITE_EYE = 146,
157
158     /* Ring */
159     RING_HERO = 150,
160     RING_SLAY = 151,
161     RING_SUPER_AC = 152,
162     RING_MAGIC_MIS = 153,
163     RING_FIRE_BOLT = 154,
164     RING_COLD_BOLT = 155,
165     RING_ELEC_BOLT = 156,
166     RING_ACID_BOLT = 157,
167     RING_MANA_BOLT = 158,
168     RING_FIRE_BALL = 159,
169     RING_COLD_BALL = 160,
170     RING_ELEC_BALL = 161,
171     RING_ACID_BALL = 162,
172     RING_MANA_BALL = 163,
173     RING_DRAGON_F = 164,
174     RING_DRAGON_C = 165,
175     RING_D_SPEED = 166,
176     RING_BERSERKER = 167,
177     RING_HUNTER = 168,
178     RING_THROW = 169,
179     RING_REGEN = 170,
180     RING_LITE = 171,
181     RING_M_DETECT = 172,
182     RING_STEALTH = 173,
183     RING_TELE_AWAY = 174,
184     RING_TO_H = 175,
185     RING_TO_D = 176,
186     RING_RES_LITE = 177,
187     RING_RES_DARK = 178,
188     RING_WIZARD = 179,
189     RING_TRUE = 180,
190     RING_DRAIN_EXP = 181,
191     RING_NO_MELEE = 182,
192     RING_AGGRAVATE = 183,
193     RING_TY_CURSE = 184,
194     RING_RES_TIME = 185,
195     RING_TELEPORT = 186,
196     RING_ALBINO = 187,
197
198     /* Amulet */
199     AMU_SLOW_D = 210,
200     AMU_INFRA = 211,
201     AMU_SEE_INVIS = 212,
202     AMU_HOLD_EXP = 213,
203     AMU_DRAIN_EXP = 214,
204     AMU_FOOL = 215,
205     AMU_AGGRAVATE = 216,
206     AMU_TY_CURSE = 217,
207     AMU_AC = 218,
208     AMU_IDENT = 219,
209     AMU_CHARM = 220,
210     AMU_STEALTH = 221,
211     AMU_JUMP = 222,
212     AMU_TELEPORT = 223,
213     AMU_D_DOOR = 224,
214     AMU_DEFENDER = 225,
215     AMU_RES_FIRE = 226,
216     AMU_RES_FIRE_ = 227,
217     AMU_RES_COLD = 228,
218     AMU_RES_COLD_ = 229,
219     AMU_RES_ELEC = 230,
220     AMU_RES_ELEC_ = 231,
221     AMU_RES_ACID = 232,
222     AMU_RES_ACID_ = 233,
223     AMU_LEVITATION = 234,
224     AMU_GREAT = 235,
225     AMU_DETECTION = 236,
226     AMU_NAIVETY = 237,
227     // MAX 240,
228
229 };
230
231 struct ego_generate_type {
232     int mul{}; //<! 確率分子
233     int dev{}; //<! 確率分母
234     std::vector<tr_type> tr_flags{};
235     std::vector<ItemGenerationTraitType> trg_flags{};
236 };
237
238 /*
239  * Information about "ego-items".
240  */
241 enum class RandomArtActType : short;
242 class EgoItemDefinition {
243 public:
244     EgoItemDefinition() = default;
245     EgoType idx{};
246
247     std::string name; //!< エゴの名前
248     std::string text; //!< フレーバーテキスト
249
250     INVENTORY_IDX slot{}; //!< 装備部位 / Standard slot value
251     PRICE rating{}; //!< レーティングボーナス(雰囲気に影響) / Rating boost
252
253     DEPTH level{}; //!< 生成レベル
254     RARITY rarity{}; //<! レアリティ
255
256     HIT_PROB base_to_h{}; //!< ベース命中修正
257     int base_to_d{}; //!< べ^スダメージ修正
258     ARMOUR_CLASS base_to_a{}; //!< ベースAC修正
259
260     HIT_PROB max_to_h{}; //!< 最大ボーナス命中修正
261     int max_to_d{}; //!< 最大ボーナスダメージ修正
262     ARMOUR_CLASS max_to_a{}; //!< 最大ボーナスAC修正
263
264     PARAMETER_VALUE max_pval{}; //!< 最大pval
265
266     PRICE cost{}; //!< コスト
267
268     TrFlags flags{}; //!< 能力/耐性フラグ
269     EnumClassFlagGroup<ItemGenerationTraitType> gen_flags; //!< 生成時適用フラグ
270     std::vector<ego_generate_type> xtra_flags{}; //!< 追加能力/耐性フラグ
271
272     RandomArtActType act_idx{}; //!< 発動番号 / Activative ability index
273 };
274
275 extern std::map<EgoType, EgoItemDefinition> egos_info;
276
277 class ItemEntity;
278 class PlayerType;
279 EgoType get_random_ego(byte slot, bool good);
280 void apply_ego(ItemEntity *o_ptr, DEPTH lev);