Skip to main content

wowlab_engine_content/generated/specs/
arcane_mage.rs

1//! @generated by codegen-cli from manifests/specs/mage/arcane/manifest.toml -- do not edit by hand.
2// Generated code: naming follows game data conventions
3#![allow(non_snake_case, dead_code)]
4use wowlab_types::{combat::ResourceType, game::SpecId};
5use wowlab_engine_combat::{
6    CombatSystemBuilder, CombatSystemDraft, AuraDefinitionDraft, LocalAuraIdx,
7    LocalSpellIdx, SpellDefinitionDraft,
8};
9use wowlab_engine_ports::{
10    DeclaredSpecMetadata, SpecDescriptor, SpecHandler, HeroTalentTreeDesc,
11};
12use wowlab_engine_gamedata::ResolvedGameData;
13pub(crate) mod SPELL {
14    ///<https://wowlab.gg/inspect/spell/30451>
15    pub(crate) const ARCANE_BLAST: u32 = 30451;
16    ///<https://wowlab.gg/inspect/spell/44425>
17    pub(crate) const ARCANE_BARRAGE: u32 = 44425;
18    ///<https://wowlab.gg/inspect/spell/5143>
19    pub(crate) const ARCANE_MISSILES: u32 = 5143;
20    ///<https://wowlab.gg/inspect/spell/7268>
21    pub(crate) const ARCANE_MISSILES_DAMAGE: u32 = 7268;
22    ///<https://wowlab.gg/inspect/spell/365350>
23    pub(crate) const ARCANE_SURGE: u32 = 365_350;
24    ///<https://wowlab.gg/inspect/spell/153626>
25    pub(crate) const ARCANE_ORB: u32 = 153_626;
26    ///<https://wowlab.gg/inspect/spell/153640>
27    pub(crate) const ARCANE_ORB_BOLT: u32 = 153_640;
28    ///<https://wowlab.gg/inspect/spell/443763>
29    pub(crate) const ARCANE_SPLINTER: u32 = 443_763;
30    ///<https://wowlab.gg/inspect/spell/321507>
31    pub(crate) const TOUCH_OF_THE_MAGI: u32 = 321_507;
32    ///<https://wowlab.gg/inspect/spell/210833>
33    pub(crate) const TOUCH_OF_THE_MAGI_EXPLOSION: u32 = 210_833;
34    ///<https://wowlab.gg/inspect/spell/1258134>
35    pub(crate) const TOUCH_OF_THE_ARCHMAGE: u32 = 1_258_134;
36    ///<https://wowlab.gg/inspect/spell/12051>
37    pub(crate) const EVOCATION: u32 = 12051;
38    ///<https://wowlab.gg/inspect/spell/205025>
39    pub(crate) const PRESENCE_OF_MIND: u32 = 205_025;
40    ///<https://wowlab.gg/inspect/spell/1449>
41    pub(crate) const ARCANE_EXPLOSION: u32 = 1449;
42    ///<https://wowlab.gg/inspect/spell/1241462>
43    pub(crate) const ARCANE_PULSE: u32 = 1_241_462;
44    ///<https://wowlab.gg/inspect/spell/1295924>
45    pub(crate) const PRISMATIC_BOLT: u32 = 1_295_924;
46    ///<https://wowlab.gg/inspect/spell/1459>
47    pub(crate) const ARCANE_INTELLECT: u32 = 1459;
48    ///<https://wowlab.gg/inspect/spell/225119>
49    pub(crate) const ARCANE_ASSAULT: u32 = 225_119;
50}
51pub(crate) mod AURA {
52    ///<https://wowlab.gg/inspect/spell/36032>
53    pub(crate) const ARCANE_CHARGE: u32 = 36032;
54    ///<https://wowlab.gg/inspect/spell/365362>
55    pub(crate) const ARCANE_SURGE: u32 = 365_362;
56    ///<https://wowlab.gg/inspect/spell/263725>
57    pub(crate) const CLEARCASTING: u32 = 263_725;
58    ///<https://wowlab.gg/inspect/spell/1217242>
59    pub(crate) const ENLIGHTENED: u32 = 1_217_242;
60    ///<https://wowlab.gg/inspect/spell/1242974>
61    pub(crate) const ARCANE_SALVO: u32 = 1_242_974;
62    ///<https://wowlab.gg/inspect/spell/1223797>
63    pub(crate) const INTUITION: u32 = 1_223_797;
64    ///<https://wowlab.gg/inspect/spell/205025>
65    pub(crate) const PRESENCE_OF_MIND: u32 = 205_025;
66    ///<https://wowlab.gg/inspect/spell/12051>
67    pub(crate) const EVOCATION: u32 = 12051;
68    ///<https://wowlab.gg/inspect/spell/210824>
69    pub(crate) const TOUCH_OF_THE_MAGI: u32 = 210_824;
70    ///<https://wowlab.gg/inspect/spell/383783>
71    pub(crate) const NETHER_PRECISION: u32 = 383_783;
72    ///<https://wowlab.gg/inspect/spell/1277009>
73    pub(crate) const OVERPOWERED_MISSILES: u32 = 1_277_009;
74    ///<https://wowlab.gg/inspect/spell/1459>
75    pub(crate) const ARCANE_INTELLECT_HIGHLIGHT: u32 = 1459;
76    ///<https://wowlab.gg/inspect/spell/461524>
77    pub(crate) const HIGH_VOLTAGE: u32 = 461_524;
78    ///<https://wowlab.gg/inspect/spell/236628>
79    pub(crate) const AMPLIFICATION: u32 = 236_628;
80    ///<https://wowlab.gg/inspect/spell/449322>
81    pub(crate) const SPELLFIRE_SALVO: u32 = 449_322;
82    ///<https://wowlab.gg/inspect/spell/1296930>
83    pub(crate) const CUMULATIVE_POWER: u32 = 1_296_930;
84    ///<https://wowlab.gg/inspect/spell/1295942>
85    pub(crate) const PRISMATIC_BOLT: u32 = 1_295_942;
86}
87pub(crate) mod TALENT {
88    ///<https://wowlab.gg/inspect/spell/1243507>
89    pub(crate) const AEGWYNNS_TECHNIQUE: u32 = 1_243_507;
90    ///<https://wowlab.gg/inspect/spell/236628>
91    pub(crate) const AMPLIFICATION: u32 = 236_628;
92    ///<https://wowlab.gg/inspect/spell/342231>
93    pub(crate) const ARCANE_ECHO: u32 = 342_231;
94    ///<https://wowlab.gg/inspect/spell/205022>
95    pub(crate) const ARCANE_FAMILIAR: u32 = 205_022;
96    ///<https://wowlab.gg/inspect/spell/5143>
97    pub(crate) const ARCANE_MISSILES: u32 = 5143;
98    ///<https://wowlab.gg/inspect/spell/153626>
99    pub(crate) const ARCANE_ORB: u32 = 153_626;
100    ///<https://wowlab.gg/inspect/spell/1241462>
101    pub(crate) const ARCANE_PULSE: u32 = 1_241_462;
102    ///<https://wowlab.gg/inspect/spell/1242974>
103    pub(crate) const ARCANE_SALVO: u32 = 1_242_974;
104    ///<https://wowlab.gg/inspect/spell/384452>
105    pub(crate) const ARCANE_SALVO_DRIVER: u32 = 384_452;
106    ///<https://wowlab.gg/inspect/spell/365350>
107    pub(crate) const ARCANE_SURGE: u32 = 365_350;
108    ///<https://wowlab.gg/inspect/spell/231564>
109    pub(crate) const ARCING_CLEAVE: u32 = 231_564;
110    ///<https://wowlab.gg/inspect/spell/1261106>
111    pub(crate) const ATTUNED_FAMILIAR: u32 = 1_261_106;
112    ///<https://wowlab.gg/inspect/spell/1280165>
113    pub(crate) const AUGURY_ABOUNDS: u32 = 1_280_165;
114    ///<https://wowlab.gg/inspect/spell/461251>
115    pub(crate) const CHARGED_MISSILES: u32 = 461_251;
116    ///<https://wowlab.gg/inspect/spell/384651>
117    pub(crate) const CHARGED_ORB: u32 = 384_651;
118    ///<https://wowlab.gg/inspect/spell/452997>
119    pub(crate) const ENERGIZED_FAMILIAR: u32 = 452_997;
120    ///<https://wowlab.gg/inspect/spell/321387>
121    pub(crate) const ENLIGHTENED: u32 = 321_387;
122    ///<https://wowlab.gg/inspect/spell/452198>
123    pub(crate) const EUREKA: u32 = 452_198;
124    ///<https://wowlab.gg/inspect/spell/12051>
125    pub(crate) const EVOCATION: u32 = 12051;
126    ///<https://wowlab.gg/inspect/spell/451548>
127    pub(crate) const EXPANDED_MIND: u32 = 451_548;
128    ///<https://wowlab.gg/inspect/spell/1243557>
129    pub(crate) const EXPANDED_MIND_DRIVER: u32 = 1_243_557;
130    ///<https://wowlab.gg/inspect/spell/452143>
131    pub(crate) const FOCUSING_CRYSTAL: u32 = 452_143;
132    ///<https://wowlab.gg/inspect/spell/444719>
133    pub(crate) const FORCE_OF_WILL_DRIVER: u32 = 444_719;
134    ///<https://wowlab.gg/inspect/spell/461248>
135    pub(crate) const HIGH_VOLTAGE: u32 = 461_248;
136    ///<https://wowlab.gg/inspect/spell/384060>
137    pub(crate) const ILLUMINATED_THOUGHTS: u32 = 384_060;
138    ///<https://wowlab.gg/inspect/spell/321420>
139    pub(crate) const IMPROVED_CLEARCASTING: u32 = 321_420;
140    ///<https://wowlab.gg/inspect/spell/1261080>
141    pub(crate) const INFUSED_SPLINTERS: u32 = 1_261_080;
142    ///<https://wowlab.gg/inspect/spell/1223798>
143    pub(crate) const INTUITION: u32 = 1_223_798;
144    ///<https://wowlab.gg/inspect/spell/321526>
145    pub(crate) const MANA_ADEPT: u32 = 321_526;
146    ///<https://wowlab.gg/inspect/spell/449906>
147    pub(crate) const MANA_BOMB: u32 = 449_906;
148    ///<https://wowlab.gg/inspect/spell/457521>
149    pub(crate) const MANA_BOMB_DRIVER: u32 = 457_521;
150    ///<https://wowlab.gg/inspect/spell/384858>
151    pub(crate) const ORB_BARRAGE: u32 = 384_858;
152    ///<https://wowlab.gg/inspect/spell/452197>
153    pub(crate) const ORB_MASTERY: u32 = 452_197;
154    ///<https://wowlab.gg/inspect/spell/1243435>
155    pub(crate) const ORB_MASTERY_DRIVER: u32 = 1_243_435;
156    ///<https://wowlab.gg/inspect/spell/451728>
157    pub(crate) const OVERPOWERED_MISSILES: u32 = 451_728;
158    ///<https://wowlab.gg/inspect/spell/1244329>
159    pub(crate) const OVERPOWERED_MISSILES_DRIVER: u32 = 1_244_329;
160    ///<https://wowlab.gg/inspect/spell/205025>
161    pub(crate) const PRESENCE_OF_MIND: u32 = 205_025;
162    ///<https://wowlab.gg/inspect/spell/1295923>
163    pub(crate) const PRISMATIC_BOLT_1: u32 = 1_295_923;
164    ///<https://wowlab.gg/inspect/spell/1295944>
165    pub(crate) const PRISMATIC_BOLT_2: u32 = 1_295_944;
166    ///<https://wowlab.gg/inspect/spell/1295946>
167    pub(crate) const PRISMATIC_BOLT_3: u32 = 1_295_946;
168    ///<https://wowlab.gg/inspect/spell/384612>
169    pub(crate) const PRODIGIOUS_SAVANT: u32 = 384_612;
170    ///<https://wowlab.gg/inspect/spell/205028>
171    pub(crate) const RESONANCE: u32 = 205_028;
172    ///<https://wowlab.gg/inspect/spell/281482>
173    pub(crate) const REVERBERATE: u32 = 281_482;
174    ///<https://wowlab.gg/inspect/spell/236457>
175    pub(crate) const SLIPSTREAM: u32 = 236_457;
176    ///<https://wowlab.gg/inspect/spell/444986>
177    pub(crate) const SPELLFROST_TEACHINGS: u32 = 444_986;
178    ///<https://wowlab.gg/inspect/spell/444256>
179    pub(crate) const SPLINTERING_ORBS: u32 = 444_256;
180    ///<https://wowlab.gg/inspect/spell/443739>
181    pub(crate) const SPLINTERING_SORCERY: u32 = 443_739;
182    ///<https://wowlab.gg/inspect/spell/443783>
183    pub(crate) const SPLINTERSTORM: u32 = 443_783;
184    ///<https://wowlab.gg/inspect/spell/1257950>
185    pub(crate) const TOUCH_OF_THE_ARCHMAGE: u32 = 1_257_950;
186    ///<https://wowlab.gg/inspect/spell/321507>
187    pub(crate) const TOUCH_OF_THE_MAGI: u32 = 321_507;
188}
189pub(crate) mod SET_BONUS {
190    ///<https://wowlab.gg/inspect/spell/1296581>
191    pub(crate) const MID2_ARCANE_2PC: u32 = 1_296_581;
192    ///<https://wowlab.gg/inspect/spell/1296582>
193    pub(crate) const MID2_ARCANE_4PC: u32 = 1_296_582;
194}
195pub(crate) mod REPORTED_SPELL {
196    ///<https://wowlab.gg/inspect/spell/210126>
197    pub(crate) const ARCANE_FAMILIAR: u32 = 210_126;
198    ///<https://wowlab.gg/inspect/spell/7268>
199    pub(crate) const ARCANE_MISSILES: u32 = 7268;
200    ///<https://wowlab.gg/inspect/spell/1295924>
201    pub(crate) const PRISMATIC_BOLT: u32 = 1_295_924;
202    ///<https://wowlab.gg/inspect/spell/1295939>
203    pub(crate) const PRISMATIC_BOLT_AOE: u32 = 1_295_939;
204}
205pub(crate) mod HERO {
206    pub(crate) mod SPELLSLINGER {
207        pub(crate) mod SPELL {
208            ///<https://wowlab.gg/inspect/spell/444720>
209            pub(crate) const CONTROLLED_INSTINCTS: u32 = 444_720;
210            ///<https://wowlab.gg/inspect/spell/443763>
211            pub(crate) const SPLINTER: u32 = 443_763;
212        }
213        pub(crate) mod AURA {
214            ///<https://wowlab.gg/inspect/spell/443783>
215            pub(crate) const SPLINTERSTORM: u32 = 443_783;
216        }
217    }
218    pub(crate) mod SUNFURY {
219        pub(crate) mod SPELL {
220            ///<https://wowlab.gg/inspect/spell/449559>
221            pub(crate) const METEORITE: u32 = 449_559;
222            ///<https://wowlab.gg/inspect/spell/449569>
223            pub(crate) const METEORITE_IMPACT: u32 = 449_569;
224        }
225        pub(crate) mod AURA {
226            ///<https://wowlab.gg/inspect/spell/451038>
227            pub(crate) const ARCANE_SOUL: u32 = 451_038;
228            ///<https://wowlab.gg/inspect/spell/1260277>
229            pub(crate) const LESSER_TIME_WARP: u32 = 1_260_277;
230            ///<https://wowlab.gg/inspect/spell/449322>
231            pub(crate) const MANA_CASCADE: u32 = 449_322;
232            ///<https://wowlab.gg/inspect/spell/448604>
233            pub(crate) const SPELLFIRE_SPHERE: u32 = 448_604;
234        }
235    }
236}
237static HERO_TREE_SPELLSLINGER_SPELLS: &[(&str, u32)] = &[
238    ("CONTROLLED_INSTINCTS", 444_720),
239    ("SPLINTER", 443_763),
240];
241static HERO_TREE_SPELLSLINGER_AURAS: &[(&str, u32)] = &[("SPLINTERSTORM", 443_783)];
242static HERO_TREE_SUNFURY_SPELLS: &[(&str, u32)] = &[
243    ("METEORITE", 449_559),
244    ("METEORITE_IMPACT", 449_569),
245];
246static HERO_TREE_SUNFURY_AURAS: &[(&str, u32)] = &[
247    ("ARCANE_SOUL", 451_038),
248    ("LESSER_TIME_WARP", 1_260_277),
249    ("MANA_CASCADE", 449_322),
250    ("SPELLFIRE_SPHERE", 448_604),
251];
252pub(crate) mod DAMAGE_SPELL {
253    pub(crate) const ARCANE_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_30451;
254    pub(crate) const ARCANE_BARRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_44425;
255    pub(crate) const ARCANE_MISSILES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_5143;
256    pub(crate) const ARCANE_MISSILES_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_7268;
257    pub(crate) const ARCANE_SURGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_365350;
258    pub(crate) const ARCANE_ORB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_153626;
259    pub(crate) const ARCANE_ORB_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_153640;
260    pub(crate) const ARCANE_SPLINTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_443763;
261    pub(crate) const TOUCH_OF_THE_MAGI: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_321507;
262    pub(crate) const TOUCH_OF_THE_MAGI_EXPLOSION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_210833;
263    pub(crate) const TOUCH_OF_THE_ARCHMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1258134;
264    pub(crate) const EVOCATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_12051;
265    pub(crate) const PRESENCE_OF_MIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_205025;
266    pub(crate) const ARCANE_EXPLOSION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1449;
267    pub(crate) const ARCANE_PULSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1241462;
268    pub(crate) const PRISMATIC_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295924;
269    pub(crate) const ARCANE_INTELLECT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1459;
270    pub(crate) const ARCANE_ASSAULT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_225119;
271    pub(crate) const CONTROLLED_INSTINCTS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_444720;
272    pub(crate) const SPLINTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_443763;
273    pub(crate) const METEORITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_449559;
274    pub(crate) const METEORITE_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_449569;
275}
276pub(crate) mod DAMAGE_AURA {
277    pub(crate) const ARCANE_CHARGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_36032;
278    pub(crate) const ARCANE_SURGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_365362;
279    pub(crate) const CLEARCASTING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_263725;
280    pub(crate) const ENLIGHTENED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1217242;
281    pub(crate) const ARCANE_SALVO: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1242974;
282    pub(crate) const INTUITION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1223797;
283    pub(crate) const PRESENCE_OF_MIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_205025;
284    pub(crate) const EVOCATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_12051;
285    pub(crate) const TOUCH_OF_THE_MAGI: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_210824;
286    pub(crate) const NETHER_PRECISION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_383783;
287    pub(crate) const OVERPOWERED_MISSILES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1277009;
288    pub(crate) const ARCANE_INTELLECT_HIGHLIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1459;
289    pub(crate) const HIGH_VOLTAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_461524;
290    pub(crate) const AMPLIFICATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_236628;
291    pub(crate) const SPELLFIRE_SALVO: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_449322;
292    pub(crate) const CUMULATIVE_POWER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1296930;
293    pub(crate) const PRISMATIC_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295942;
294}
295pub(crate) mod DAMAGE_TALENT {
296    pub(crate) const AEGWYNNS_TECHNIQUE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1243507;
297    pub(crate) const AMPLIFICATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_236628;
298    pub(crate) const ARCANE_ECHO: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_342231;
299    pub(crate) const ARCANE_FAMILIAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_205022;
300    pub(crate) const ARCANE_MISSILES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_5143;
301    pub(crate) const ARCANE_ORB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_153626;
302    pub(crate) const ARCANE_PULSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1241462;
303    pub(crate) const ARCANE_SALVO: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1242974;
304    pub(crate) const ARCANE_SALVO_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_384452;
305    pub(crate) const ARCANE_SURGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_365350;
306    pub(crate) const ARCING_CLEAVE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_231564;
307    pub(crate) const ATTUNED_FAMILIAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1261106;
308    pub(crate) const AUGURY_ABOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1280165;
309    pub(crate) const CHARGED_MISSILES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_461251;
310    pub(crate) const CHARGED_ORB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_384651;
311    pub(crate) const ENERGIZED_FAMILIAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_452997;
312    pub(crate) const ENLIGHTENED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_321387;
313    pub(crate) const EUREKA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_452198;
314    pub(crate) const EVOCATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_12051;
315    pub(crate) const EXPANDED_MIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_451548;
316    pub(crate) const EXPANDED_MIND_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1243557;
317    pub(crate) const FOCUSING_CRYSTAL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_452143;
318    pub(crate) const FORCE_OF_WILL_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_444719;
319    pub(crate) const HIGH_VOLTAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_461248;
320    pub(crate) const ILLUMINATED_THOUGHTS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_384060;
321    pub(crate) const IMPROVED_CLEARCASTING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_321420;
322    pub(crate) const INFUSED_SPLINTERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1261080;
323    pub(crate) const INTUITION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1223798;
324    pub(crate) const MANA_ADEPT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_321526;
325    pub(crate) const MANA_BOMB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_449906;
326    pub(crate) const MANA_BOMB_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_457521;
327    pub(crate) const ORB_BARRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_384858;
328    pub(crate) const ORB_MASTERY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_452197;
329    pub(crate) const ORB_MASTERY_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1243435;
330    pub(crate) const OVERPOWERED_MISSILES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_451728;
331    pub(crate) const OVERPOWERED_MISSILES_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1244329;
332    pub(crate) const PRESENCE_OF_MIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_205025;
333    pub(crate) const PRISMATIC_BOLT_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295923;
334    pub(crate) const PRISMATIC_BOLT_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295944;
335    pub(crate) const PRISMATIC_BOLT_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295946;
336    pub(crate) const PRODIGIOUS_SAVANT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_384612;
337    pub(crate) const RESONANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_205028;
338    pub(crate) const REVERBERATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_281482;
339    pub(crate) const SLIPSTREAM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_236457;
340    pub(crate) const SPELLFROST_TEACHINGS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_444986;
341    pub(crate) const SPLINTERING_ORBS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_444256;
342    pub(crate) const SPLINTERING_SORCERY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_443739;
343    pub(crate) const SPLINTERSTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_443783;
344    pub(crate) const TOUCH_OF_THE_ARCHMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1257950;
345    pub(crate) const TOUCH_OF_THE_MAGI: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_321507;
346}
347pub(crate) mod DAMAGE_REPORTED {
348    pub(crate) const ARCANE_FAMILIAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_210126;
349    pub(crate) const ARCANE_MISSILES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_7268;
350    pub(crate) const PRISMATIC_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295924;
351    pub(crate) const PRISMATIC_BOLT_AOE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ACTION::SPELL_1295939;
352}
353pub(crate) mod DAMAGE_EFFECT {
354    pub(crate) const MID2_ARCANE_2PC_EXTRA_WAVES: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1296581_EFFECT_1;
355    pub(crate) const AMPLIFICATION_WAVES: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_236628_EFFECT_2;
356    pub(crate) const ARCANE_ASSAULT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_225119_EFFECT_1;
357    pub(crate) const ARCANE_BARRAGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_44425_EFFECT_1;
358    pub(crate) const ARCANE_BLAST_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_30451_EFFECT_1;
359    pub(crate) const ARCANE_CHARGE_BARRAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_36032_EFFECT_2;
360    pub(crate) const ARCANE_CHARGE_BLAST: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_36032_EFFECT_1;
361    pub(crate) const ARCANE_FAMILIAR_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_210126_EFFECT_1;
362    pub(crate) const ARCANE_MISSILES_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_7268_EFFECT_1;
363    pub(crate) const ARCANE_ORB_BOLT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_153640_EFFECT_1;
364    pub(crate) const ARCANE_ORB_TARGETS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_153626_EFFECT_1;
365    pub(crate) const ARCANE_PULSE_CHARGES_PER_TARGET: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295977_EFFECT_1;
366    pub(crate) const ARCANE_PULSE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1241462_EFFECT_1;
367    pub(crate) const ARCANE_PULSE_REDUCED_TARGETS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1241462_EFFECT_2;
368    pub(crate) const ARCANE_SALVO_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1242974_EFFECT_1;
369    pub(crate) const ARCANE_SPLINTER_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_443763_EFFECT_1;
370    pub(crate) const ARCANE_SURGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_365350_EFFECT_1;
371    pub(crate) const PRISMATIC_BOLT_AOE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295939_EFFECT_2;
372    pub(crate) const PRISMATIC_BOLT_AOE_TARGETS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295939_EFFECT_2;
373    pub(crate) const PRISMATIC_BOLT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295924_EFFECT_1;
374    pub(crate) const PRISMATIC_BOLT_CHARGES: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295924_EFFECT_3;
375    pub(crate) const PRISMATIC_BOLT_CLEARCASTING_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295944_EFFECT_1;
376    pub(crate) const PRISMATIC_BOLT_PROC_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295923_EFFECT_1;
377    pub(crate) const PRISMATIC_BOLT_PROC_CHANCE_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295946_EFFECT_2;
378    pub(crate) const PRISMATIC_BOLT_REDUCED_TARGETS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1295924_EFFECT_4;
379    pub(crate) const ATTUNED_FAMILIAR_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1261106_EFFECT_1;
380    pub(crate) const CHARGED_MISSILES_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_461251_EFFECT_1;
381    pub(crate) const CLEARCASTING_PROC: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_79684_EFFECT_2;
382    pub(crate) const ENERGIZED_FAMILIAR_ASSAULTS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_452997_EFFECT_1;
383    pub(crate) const ENERGIZED_FAMILIAR_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_452997_EFFECT_2;
384    pub(crate) const ENERGIZED_FAMILIAR_GAIN: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_454020_EFFECT_1;
385    pub(crate) const ENLIGHTENED_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_321387_EFFECT_2;
386    pub(crate) const ENLIGHTENED_REGEN: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_321387_EFFECT_3;
387    pub(crate) const FORCE_OF_WILL_BARRAGE_DIVISOR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_444719_EFFECT_1;
388    pub(crate) const ILLUMINATED_THOUGHTS_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_384060_EFFECT_1;
389    pub(crate) const INTUITION_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1223797_EFFECT_1;
390    pub(crate) const MANA_ADEPT_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_321526_EFFECT_1;
391    pub(crate) const ORB_MASTERY_COUNT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1243435_EFFECT_1;
392    pub(crate) const ORB_MASTERY_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_1243435_EFFECT_2;
393    pub(crate) const SAVANT_BARRAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_190740_EFFECT_3;
394    pub(crate) const SAVANT_BASE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_190740_EFFECT_1;
395    pub(crate) const SAVANT_BLAST: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_190740_EFFECT_2;
396    pub(crate) const SAVANT_MASTERY_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_190740_EFFECT_5;
397    pub(crate) const SAVANT_SPLINTER_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::EFFECT::SPELL_190740_EFFECT_6;
398}
399pub(crate) const AURA_ARCANE_CHARGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_ARCANE_CHARGE
400    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
401pub(crate) const AURA_ARCANE_SURGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_ARCANE_SURGE
402    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
403pub(crate) const AURA_CLEARCASTING: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_CLEARCASTING
404    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
405pub(crate) const AURA_ENLIGHTENED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_ENLIGHTENED
406    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
407pub(crate) const AURA_ARCANE_SALVO: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_ARCANE_SALVO
408    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
409pub(crate) const AURA_INTUITION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_INTUITION
410    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
411pub(crate) const AURA_PRESENCE_OF_MIND: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_PRESENCE_OF_MIND
412    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
413pub(crate) const AURA_EVOCATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_EVOCATION
414    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
415pub(crate) const AURA_TOUCH_OF_THE_MAGI: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_TOUCH_OF_THE_MAGI
416    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
417pub(crate) const AURA_NETHER_PRECISION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_NETHER_PRECISION
418    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
419pub(crate) const AURA_OVERPOWERED_MISSILES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_OVERPOWERED_MISSILES
420    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
421pub(crate) const AURA_ARCANE_INTELLECT_HIGHLIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_ARCANE_INTELLECT_HIGHLIGHT
422    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
423pub(crate) const AURA_HIGH_VOLTAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_HIGH_VOLTAGE
424    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
425pub(crate) const AURA_AMPLIFICATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_AMPLIFICATION
426    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
427pub(crate) const AURA_SPELLFIRE_SALVO: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_SPELLFIRE_SALVO
428    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
429pub(crate) const AURA_CUMULATIVE_POWER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_CUMULATIVE_POWER
430    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
431pub(crate) const AURA_PRISMATIC_BOLT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::AURA_PRISMATIC_BOLT
432    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
433pub(crate) const AURA_COUNT: usize = 17;
434const _: () = assert!(
435    AURA_COUNT == 17, "AURA index ABI: count changed -- update positional hook consumers"
436);
437pub(crate) const SPELL_ARCANE_BLAST: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_BLAST
438    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
439pub(crate) const SPELL_ARCANE_BARRAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_BARRAGE
440    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
441pub(crate) const SPELL_ARCANE_MISSILES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_MISSILES
442    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
443pub(crate) const SPELL_ARCANE_MISSILES_DAMAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_MISSILES_DAMAGE
444    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
445pub(crate) const SPELL_ARCANE_SURGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_SURGE
446    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
447pub(crate) const SPELL_ARCANE_ORB: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_ORB
448    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
449pub(crate) const SPELL_ARCANE_ORB_BOLT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_ORB_BOLT
450    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
451pub(crate) const SPELL_ARCANE_SPLINTER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_SPLINTER
452    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
453pub(crate) const SPELL_TOUCH_OF_THE_MAGI: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_TOUCH_OF_THE_MAGI
454    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
455pub(crate) const SPELL_TOUCH_OF_THE_MAGI_EXPLOSION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_TOUCH_OF_THE_MAGI_EXPLOSION
456    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
457pub(crate) const SPELL_TOUCH_OF_THE_ARCHMAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_TOUCH_OF_THE_ARCHMAGE
458    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
459pub(crate) const SPELL_EVOCATION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_EVOCATION
460    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
461pub(crate) const SPELL_PRESENCE_OF_MIND: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_PRESENCE_OF_MIND
462    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
463pub(crate) const SPELL_ARCANE_EXPLOSION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_EXPLOSION
464    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
465pub(crate) const SPELL_ARCANE_PULSE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_PULSE
466    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
467pub(crate) const SPELL_PRISMATIC_BOLT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_PRISMATIC_BOLT
468    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
469pub(crate) const SPELL_ARCANE_INTELLECT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_INTELLECT
470    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
471pub(crate) const SPELL_ARCANE_ASSAULT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arcane_mage::SPELL_ARCANE_ASSAULT
472    .bind(wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF);
473pub(crate) const SPELL_COUNT: usize = 18;
474const _: () = assert!(
475    SPELL_COUNT == 18,
476    "SPELL index ABI: count changed -- update positional hook consumers"
477);
478pub(crate) mod EFFECT {
479    ///<https://wowlab.gg/inspect/spell/1296581>
480    pub(crate) const MID2_ARCANE_2PC_EXTRA_WAVES: (u32, u8) = (1_296_581, 1);
481    ///<https://wowlab.gg/inspect/spell/236628>
482    pub(crate) const AMPLIFICATION_WAVES: (u32, u8) = (236_628, 2);
483    ///<https://wowlab.gg/inspect/spell/225119>
484    pub(crate) const ARCANE_ASSAULT_DAMAGE: (u32, u8) = (225_119, 1);
485    ///<https://wowlab.gg/inspect/spell/44425>
486    pub(crate) const ARCANE_BARRAGE_DAMAGE: (u32, u8) = (44425, 1);
487    ///<https://wowlab.gg/inspect/spell/30451>
488    pub(crate) const ARCANE_BLAST_DAMAGE: (u32, u8) = (30451, 1);
489    ///<https://wowlab.gg/inspect/spell/36032>
490    pub(crate) const ARCANE_CHARGE_BARRAGE: (u32, u8) = (36032, 2);
491    ///<https://wowlab.gg/inspect/spell/36032>
492    pub(crate) const ARCANE_CHARGE_BLAST: (u32, u8) = (36032, 1);
493    ///<https://wowlab.gg/inspect/spell/210126>
494    pub(crate) const ARCANE_FAMILIAR_BONUS: (u32, u8) = (210_126, 1);
495    ///<https://wowlab.gg/inspect/spell/7268>
496    pub(crate) const ARCANE_MISSILES_DAMAGE: (u32, u8) = (7268, 1);
497    ///<https://wowlab.gg/inspect/spell/153640>
498    pub(crate) const ARCANE_ORB_BOLT_DAMAGE: (u32, u8) = (153_640, 1);
499    ///<https://wowlab.gg/inspect/spell/153626>
500    pub(crate) const ARCANE_ORB_TARGETS: (u32, u8) = (153_626, 1);
501    ///<https://wowlab.gg/inspect/spell/1295977>
502    pub(crate) const ARCANE_PULSE_CHARGES_PER_TARGET: (u32, u8) = (1_295_977, 1);
503    ///<https://wowlab.gg/inspect/spell/1241462>
504    pub(crate) const ARCANE_PULSE_DAMAGE: (u32, u8) = (1_241_462, 1);
505    ///<https://wowlab.gg/inspect/spell/1241462>
506    pub(crate) const ARCANE_PULSE_REDUCED_TARGETS: (u32, u8) = (1_241_462, 2);
507    ///<https://wowlab.gg/inspect/spell/1242974>
508    pub(crate) const ARCANE_SALVO_DAMAGE: (u32, u8) = (1_242_974, 1);
509    ///<https://wowlab.gg/inspect/spell/443763>
510    pub(crate) const ARCANE_SPLINTER_DAMAGE: (u32, u8) = (443_763, 1);
511    ///<https://wowlab.gg/inspect/spell/365350>
512    pub(crate) const ARCANE_SURGE_DAMAGE: (u32, u8) = (365_350, 1);
513    ///<https://wowlab.gg/inspect/spell/1295939>
514    pub(crate) const PRISMATIC_BOLT_AOE_DAMAGE: (u32, u8) = (1_295_939, 2);
515    ///<https://wowlab.gg/inspect/spell/1295939>
516    pub(crate) const PRISMATIC_BOLT_AOE_TARGETS: (u32, u8) = (1_295_939, 2);
517    ///<https://wowlab.gg/inspect/spell/1295924>
518    pub(crate) const PRISMATIC_BOLT_DAMAGE: (u32, u8) = (1_295_924, 1);
519    ///<https://wowlab.gg/inspect/spell/1295924>
520    pub(crate) const PRISMATIC_BOLT_CHARGES: (u32, u8) = (1_295_924, 3);
521    ///<https://wowlab.gg/inspect/spell/1295944>
522    pub(crate) const PRISMATIC_BOLT_CLEARCASTING_CHANCE: (u32, u8) = (1_295_944, 1);
523    ///<https://wowlab.gg/inspect/spell/1295923>
524    pub(crate) const PRISMATIC_BOLT_PROC_CHANCE: (u32, u8) = (1_295_923, 1);
525    ///<https://wowlab.gg/inspect/spell/1295946>
526    pub(crate) const PRISMATIC_BOLT_PROC_CHANCE_BONUS: (u32, u8) = (1_295_946, 2);
527    ///<https://wowlab.gg/inspect/spell/1295924>
528    pub(crate) const PRISMATIC_BOLT_REDUCED_TARGETS: (u32, u8) = (1_295_924, 4);
529    ///<https://wowlab.gg/inspect/spell/1261106>
530    pub(crate) const ATTUNED_FAMILIAR_CHANCE: (u32, u8) = (1_261_106, 1);
531    ///<https://wowlab.gg/inspect/spell/461251>
532    pub(crate) const CHARGED_MISSILES_DAMAGE: (u32, u8) = (461_251, 1);
533    ///<https://wowlab.gg/inspect/spell/79684>
534    pub(crate) const CLEARCASTING_PROC: (u32, u8) = (79684, 2);
535    ///<https://wowlab.gg/inspect/spell/452997>
536    pub(crate) const ENERGIZED_FAMILIAR_ASSAULTS: (u32, u8) = (452_997, 1);
537    ///<https://wowlab.gg/inspect/spell/452997>
538    pub(crate) const ENERGIZED_FAMILIAR_CHANCE: (u32, u8) = (452_997, 2);
539    ///<https://wowlab.gg/inspect/spell/454020>
540    pub(crate) const ENERGIZED_FAMILIAR_GAIN: (u32, u8) = (454_020, 1);
541    ///<https://wowlab.gg/inspect/spell/321387>
542    pub(crate) const ENLIGHTENED_DAMAGE: (u32, u8) = (321_387, 2);
543    ///<https://wowlab.gg/inspect/spell/321387>
544    pub(crate) const ENLIGHTENED_REGEN: (u32, u8) = (321_387, 3);
545    ///<https://wowlab.gg/inspect/spell/444719>
546    pub(crate) const FORCE_OF_WILL_BARRAGE_DIVISOR: (u32, u8) = (444_719, 1);
547    ///<https://wowlab.gg/inspect/spell/384060>
548    pub(crate) const ILLUMINATED_THOUGHTS_CHANCE: (u32, u8) = (384_060, 1);
549    ///<https://wowlab.gg/inspect/spell/1223797>
550    pub(crate) const INTUITION_DAMAGE: (u32, u8) = (1_223_797, 1);
551    ///<https://wowlab.gg/inspect/spell/321526>
552    pub(crate) const MANA_ADEPT_BONUS: (u32, u8) = (321_526, 1);
553    ///<https://wowlab.gg/inspect/spell/1243435>
554    pub(crate) const ORB_MASTERY_COUNT: (u32, u8) = (1_243_435, 1);
555    ///<https://wowlab.gg/inspect/spell/1243435>
556    pub(crate) const ORB_MASTERY_DAMAGE: (u32, u8) = (1_243_435, 2);
557    ///<https://wowlab.gg/inspect/spell/190740>
558    pub(crate) const SAVANT_BARRAGE: (u32, u8) = (190_740, 3);
559    ///<https://wowlab.gg/inspect/spell/190740>
560    pub(crate) const SAVANT_BASE: (u32, u8) = (190_740, 1);
561    ///<https://wowlab.gg/inspect/spell/190740>
562    pub(crate) const SAVANT_BLAST: (u32, u8) = (190_740, 2);
563    ///<https://wowlab.gg/inspect/spell/190740>
564    pub(crate) const SAVANT_MASTERY_DAMAGE: (u32, u8) = (190_740, 5);
565    ///<https://wowlab.gg/inspect/spell/190740>
566    pub(crate) const SAVANT_SPLINTER_DAMAGE: (u32, u8) = (190_740, 6);
567}
568static REPORTED_SPELLS: &[(&str, u32)] = &[
569    ("arcane_familiar", 210_126),
570    ("arcane_missiles", 7268),
571    ("prismatic_bolt", 1_295_924),
572    ("prismatic_bolt_aoe", 1_295_939),
573];
574static DECLARED_SPELL_IDS: &[u32] = &[
575    30451, 44425, 5143, 7268, 365_350, 153_626, 153_640, 443_763, 321_507, 210_833,
576    1_258_134, 12051, 205_025, 1449, 1_241_462, 1_295_924, 1459, 225_119, 36032, 365_362,
577    263_725, 1_217_242, 1_242_974, 1_223_797, 210_824, 383_783, 1_277_009, 461_524,
578    236_628, 449_322, 1_296_930, 1_295_942, 1_243_507, 342_231, 205_022, 384_452,
579    231_564, 1_261_106, 1_280_165, 461_251, 384_651, 452_997, 321_387, 452_198, 451_548,
580    1_243_557, 452_143, 444_719, 461_248, 384_060, 321_420, 1_261_080, 1_223_798,
581    321_526, 449_906, 457_521, 384_858, 452_197, 1_243_435, 451_728, 1_244_329,
582    1_295_923, 1_295_944, 1_295_946, 384_612, 205_028, 281_482, 236_457, 444_986,
583    444_256, 443_739, 443_783, 1_257_950, 79684, 190_740, 210_126, 454_020, 1_295_939,
584    1_295_977, 1_296_581, 444_720, 449_559, 449_569, 451_038, 1_260_277, 448_604,
585];
586static DECLARED_AURA_IDS: &[u32] = &[
587    36032, 365_362, 263_725, 1_217_242, 1_242_974, 1_223_797, 205_025, 12051, 210_824,
588    383_783, 1_277_009, 1459, 461_524, 236_628, 449_322, 1_296_930, 1_295_942, 443_783,
589    451_038, 1_260_277, 449_322, 448_604,
590];
591static TALENTS: &[(&str, u32)] = &[
592    ("AEGWYNNS_TECHNIQUE", TALENT::AEGWYNNS_TECHNIQUE),
593    ("AMPLIFICATION", TALENT::AMPLIFICATION),
594    ("ARCANE_ECHO", TALENT::ARCANE_ECHO),
595    ("ARCANE_FAMILIAR", TALENT::ARCANE_FAMILIAR),
596    ("ARCANE_MISSILES", TALENT::ARCANE_MISSILES),
597    ("ARCANE_ORB", TALENT::ARCANE_ORB),
598    ("ARCANE_PULSE", TALENT::ARCANE_PULSE),
599    ("ARCANE_SALVO", TALENT::ARCANE_SALVO),
600    ("ARCANE_SALVO_DRIVER", TALENT::ARCANE_SALVO_DRIVER),
601    ("ARCANE_SURGE", TALENT::ARCANE_SURGE),
602    ("ARCING_CLEAVE", TALENT::ARCING_CLEAVE),
603    ("ATTUNED_FAMILIAR", TALENT::ATTUNED_FAMILIAR),
604    ("AUGURY_ABOUNDS", TALENT::AUGURY_ABOUNDS),
605    ("CHARGED_MISSILES", TALENT::CHARGED_MISSILES),
606    ("CHARGED_ORB", TALENT::CHARGED_ORB),
607    ("ENERGIZED_FAMILIAR", TALENT::ENERGIZED_FAMILIAR),
608    ("ENLIGHTENED", TALENT::ENLIGHTENED),
609    ("EUREKA", TALENT::EUREKA),
610    ("EVOCATION", TALENT::EVOCATION),
611    ("EXPANDED_MIND", TALENT::EXPANDED_MIND),
612    ("EXPANDED_MIND_DRIVER", TALENT::EXPANDED_MIND_DRIVER),
613    ("FOCUSING_CRYSTAL", TALENT::FOCUSING_CRYSTAL),
614    ("FORCE_OF_WILL_DRIVER", TALENT::FORCE_OF_WILL_DRIVER),
615    ("HIGH_VOLTAGE", TALENT::HIGH_VOLTAGE),
616    ("ILLUMINATED_THOUGHTS", TALENT::ILLUMINATED_THOUGHTS),
617    ("IMPROVED_CLEARCASTING", TALENT::IMPROVED_CLEARCASTING),
618    ("INFUSED_SPLINTERS", TALENT::INFUSED_SPLINTERS),
619    ("INTUITION", TALENT::INTUITION),
620    ("MANA_ADEPT", TALENT::MANA_ADEPT),
621    ("MANA_BOMB", TALENT::MANA_BOMB),
622    ("MANA_BOMB_DRIVER", TALENT::MANA_BOMB_DRIVER),
623    ("ORB_BARRAGE", TALENT::ORB_BARRAGE),
624    ("ORB_MASTERY", TALENT::ORB_MASTERY),
625    ("ORB_MASTERY_DRIVER", TALENT::ORB_MASTERY_DRIVER),
626    ("OVERPOWERED_MISSILES", TALENT::OVERPOWERED_MISSILES),
627    ("OVERPOWERED_MISSILES_DRIVER", TALENT::OVERPOWERED_MISSILES_DRIVER),
628    ("PRESENCE_OF_MIND", TALENT::PRESENCE_OF_MIND),
629    ("PRISMATIC_BOLT_1", TALENT::PRISMATIC_BOLT_1),
630    ("PRISMATIC_BOLT_2", TALENT::PRISMATIC_BOLT_2),
631    ("PRISMATIC_BOLT_3", TALENT::PRISMATIC_BOLT_3),
632    ("PRODIGIOUS_SAVANT", TALENT::PRODIGIOUS_SAVANT),
633    ("RESONANCE", TALENT::RESONANCE),
634    ("REVERBERATE", TALENT::REVERBERATE),
635    ("SLIPSTREAM", TALENT::SLIPSTREAM),
636    ("SPELLFROST_TEACHINGS", TALENT::SPELLFROST_TEACHINGS),
637    ("SPLINTERING_ORBS", TALENT::SPLINTERING_ORBS),
638    ("SPLINTERING_SORCERY", TALENT::SPLINTERING_SORCERY),
639    ("SPLINTERSTORM", TALENT::SPLINTERSTORM),
640    ("TOUCH_OF_THE_ARCHMAGE", TALENT::TOUCH_OF_THE_ARCHMAGE),
641    ("TOUCH_OF_THE_MAGI", TALENT::TOUCH_OF_THE_MAGI),
642];
643pub(crate) mod ARCANE_MAGE {
644    pub(crate) const ARCANE_BLAST_CASTS: u32 = 0;
645    pub(crate) const ARCANE_BARRAGE_CASTS: u32 = 1;
646    pub(crate) const ARCANE_MISSILES_CASTS: u32 = 2;
647    pub(crate) const ARCANE_SURGE_CASTS: u32 = 3;
648    pub(crate) const ARCANE_ORB_CASTS: u32 = 4;
649    pub(crate) const TOUCH_OF_THE_MAGI_CASTS: u32 = 5;
650    pub(crate) const ARCANE_SURGE_UPTIME_MS: u32 = 6;
651    pub(crate) const TOUCH_OF_THE_MAGI_UPTIME_MS: u32 = 7;
652}
653fn aura_arcane_charge(
654    a: AuraDefinitionDraft,
655    data: &ResolvedGameData,
656) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
657    Ok(
658        a
659            .on_player()
660            .apply_base_from_data(data, 36032)?
661            .max_stacks(
662                data
663                    .require_aura_max_stacks(
664                        wowlab_types::sim::SpellIdx::from_raw(36032),
665                    )?,
666            ),
667    )
668}
669fn aura_arcane_surge(
670    a: AuraDefinitionDraft,
671    data: &ResolvedGameData,
672) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
673    Ok(
674        a
675            .on_player()
676            .apply_base_from_data(data, 365_362)?
677            .max_stacks(
678                data
679                    .require_aura_max_stacks(
680                        wowlab_types::sim::SpellIdx::from_raw(365_362),
681                    )?,
682            ),
683    )
684}
685fn aura_clearcasting(
686    a: AuraDefinitionDraft,
687    data: &ResolvedGameData,
688) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
689    Ok(
690        a
691            .on_player()
692            .apply_base_from_data(data, 263_725)?
693            .max_stacks(
694                data
695                    .require_aura_max_stacks(
696                        wowlab_types::sim::SpellIdx::from_raw(263_725),
697                    )?,
698            ),
699    )
700}
701fn aura_enlightened(
702    a: AuraDefinitionDraft,
703    data: &ResolvedGameData,
704) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
705    Ok(
706        a
707            .on_player()
708            .apply_base_from_data(data, 1_217_242)?
709            .max_stacks(
710                data
711                    .require_aura_max_stacks(
712                        wowlab_types::sim::SpellIdx::from_raw(1_217_242),
713                    )?,
714            ),
715    )
716}
717fn aura_arcane_salvo(
718    a: AuraDefinitionDraft,
719    data: &ResolvedGameData,
720) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
721    Ok(
722        a
723            .on_player()
724            .apply_base_from_data(data, 1_242_974)?
725            .max_stacks(
726                data
727                    .require_aura_max_stacks(
728                        wowlab_types::sim::SpellIdx::from_raw(1_242_974),
729                    )?,
730            ),
731    )
732}
733fn aura_intuition(
734    a: AuraDefinitionDraft,
735    data: &ResolvedGameData,
736) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
737    Ok(
738        a
739            .on_player()
740            .apply_base_from_data(data, 1_223_797)?
741            .max_stacks(
742                data
743                    .require_aura_max_stacks(
744                        wowlab_types::sim::SpellIdx::from_raw(1_223_797),
745                    )?,
746            ),
747    )
748}
749fn aura_presence_of_mind(
750    a: AuraDefinitionDraft,
751    data: &ResolvedGameData,
752) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
753    Ok(
754        a
755            .on_player()
756            .apply_base_from_data(data, 205_025)?
757            .max_stacks(
758                data
759                    .require_aura_max_stacks(
760                        wowlab_types::sim::SpellIdx::from_raw(205_025),
761                    )?,
762            ),
763    )
764}
765fn aura_evocation(
766    a: AuraDefinitionDraft,
767    data: &ResolvedGameData,
768) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
769    Ok(
770        a
771            .on_player()
772            .apply_base_from_data(data, 12051)?
773            .max_stacks(
774                data
775                    .require_aura_max_stacks(
776                        wowlab_types::sim::SpellIdx::from_raw(12051),
777                    )?,
778            ),
779    )
780}
781fn aura_touch_of_the_magi(
782    a: AuraDefinitionDraft,
783    data: &ResolvedGameData,
784) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
785    Ok(
786        a
787            .on_target()
788            .apply_base_from_data(data, 210_824)?
789            .max_stacks(
790                data
791                    .require_aura_max_stacks(
792                        wowlab_types::sim::SpellIdx::from_raw(210_824),
793                    )?,
794            )
795            .on_expire(crate::hooks::arcane_mage::touch_of_the_magi_expire_hook),
796    )
797}
798fn aura_nether_precision(
799    a: AuraDefinitionDraft,
800    data: &ResolvedGameData,
801) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
802    Ok(
803        a
804            .on_player()
805            .apply_base_from_data(data, 383_783)?
806            .max_stacks(
807                data
808                    .require_aura_max_stacks(
809                        wowlab_types::sim::SpellIdx::from_raw(383_783),
810                    )?,
811            ),
812    )
813}
814fn aura_overpowered_missiles(
815    a: AuraDefinitionDraft,
816    data: &ResolvedGameData,
817) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
818    Ok(
819        a
820            .on_player()
821            .apply_base_from_data(data, 1_277_009)?
822            .max_stacks(
823                data
824                    .require_aura_max_stacks(
825                        wowlab_types::sim::SpellIdx::from_raw(1_277_009),
826                    )?,
827            ),
828    )
829}
830fn aura_arcane_intellect_highlight(
831    a: AuraDefinitionDraft,
832    data: &ResolvedGameData,
833) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
834    Ok(
835        a
836            .on_player()
837            .apply_base_from_data(data, 1459)?
838            .max_stacks(
839                data
840                    .require_aura_max_stacks(
841                        wowlab_types::sim::SpellIdx::from_raw(1459),
842                    )?,
843            ),
844    )
845}
846fn aura_high_voltage(
847    a: AuraDefinitionDraft,
848    data: &ResolvedGameData,
849) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
850    Ok(
851        a
852            .on_player()
853            .apply_base_from_data(data, 461_524)?
854            .max_stacks(
855                data
856                    .require_aura_max_stacks(
857                        wowlab_types::sim::SpellIdx::from_raw(461_524),
858                    )?,
859            ),
860    )
861}
862fn aura_amplification(
863    a: AuraDefinitionDraft,
864    data: &ResolvedGameData,
865) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
866    Ok(
867        a
868            .on_player()
869            .apply_base_from_data(data, 236_628)?
870            .max_stacks(
871                data
872                    .require_aura_max_stacks(
873                        wowlab_types::sim::SpellIdx::from_raw(236_628),
874                    )?,
875            ),
876    )
877}
878fn aura_spellfire_salvo(
879    a: AuraDefinitionDraft,
880    data: &ResolvedGameData,
881) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
882    Ok(
883        a
884            .on_player()
885            .apply_base_from_data(data, 449_322)?
886            .max_stacks(
887                data
888                    .require_aura_max_stacks(
889                        wowlab_types::sim::SpellIdx::from_raw(449_322),
890                    )?,
891            ),
892    )
893}
894fn aura_cumulative_power(
895    a: AuraDefinitionDraft,
896    data: &ResolvedGameData,
897) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
898    Ok(
899        a
900            .on_player()
901            .apply_base_from_data(data, 1_296_930)?
902            .max_stacks(
903                data
904                    .require_aura_max_stacks(
905                        wowlab_types::sim::SpellIdx::from_raw(1_296_930),
906                    )?,
907            ),
908    )
909}
910fn aura_prismatic_bolt(
911    a: AuraDefinitionDraft,
912    data: &ResolvedGameData,
913) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
914    Ok(
915        a
916            .on_player()
917            .apply_base_from_data(data, 1_295_942)?
918            .max_stacks(
919                data
920                    .require_aura_max_stacks(
921                        wowlab_types::sim::SpellIdx::from_raw(1_295_942),
922                    )?,
923            ),
924    )
925}
926fn spell_arcane_blast(
927    s: SpellDefinitionDraft,
928    data: &ResolvedGameData,
929) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
930    Ok(
931        s
932            .apply_base_from_data(data, 30451)?
933            .apply_aoe_from_data(data)
934            .on_cast(crate::hooks::arcane_mage::arcane_blast_hook),
935    )
936}
937fn spell_arcane_barrage(
938    s: SpellDefinitionDraft,
939    data: &ResolvedGameData,
940) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
941    Ok(
942        s
943            .apply_base_from_data(data, 44425)?
944            .apply_aoe_from_data(data)
945            .on_cast(crate::hooks::arcane_mage::arcane_barrage_hook),
946    )
947}
948fn spell_arcane_missiles(
949    s: SpellDefinitionDraft,
950    data: &ResolvedGameData,
951) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
952    Ok(
953        s
954            .apply_base_from_data(data, 5143)?
955            .apply_aoe_from_data(data)
956            .on_cast(crate::hooks::arcane_mage::arcane_missiles_hook),
957    )
958}
959fn spell_arcane_missiles_damage(
960    s: SpellDefinitionDraft,
961    data: &ResolvedGameData,
962) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
963    Ok(s.apply_base_from_data(data, 7268)?.apply_aoe_from_data(data))
964}
965fn spell_arcane_surge(
966    s: SpellDefinitionDraft,
967    data: &ResolvedGameData,
968) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
969    Ok(
970        s
971            .apply_base_from_data(data, 365_350)?
972            .applies_aura(AURA_ARCANE_SURGE)
973            .apply_aoe_from_data(data)
974            .on_cast(crate::hooks::arcane_mage::arcane_surge_hook),
975    )
976}
977fn spell_arcane_orb(
978    s: SpellDefinitionDraft,
979    data: &ResolvedGameData,
980) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
981    Ok(
982        s
983            .apply_base_from_data(data, 153_626)?
984            .apply_aoe_from_data(data)
985            .on_cast(crate::hooks::arcane_mage::arcane_orb_hook),
986    )
987}
988fn spell_arcane_orb_bolt(
989    s: SpellDefinitionDraft,
990    data: &ResolvedGameData,
991) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
992    Ok(s.apply_base_from_data(data, 153_640)?.apply_aoe_from_data(data))
993}
994fn spell_arcane_splinter(
995    s: SpellDefinitionDraft,
996    data: &ResolvedGameData,
997) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
998    Ok(s.apply_base_from_data(data, 443_763)?.apply_aoe_from_data(data))
999}
1000fn spell_touch_of_the_magi(
1001    s: SpellDefinitionDraft,
1002    data: &ResolvedGameData,
1003) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1004    Ok(
1005        s
1006            .apply_base_from_data(data, 321_507)?
1007            .applies_aura(AURA_TOUCH_OF_THE_MAGI)
1008            .apply_aoe_from_data(data)
1009            .on_cast(crate::hooks::arcane_mage::touch_of_the_magi_hook),
1010    )
1011}
1012fn spell_touch_of_the_magi_explosion(
1013    s: SpellDefinitionDraft,
1014    data: &ResolvedGameData,
1015) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1016    Ok(s.apply_base_from_data(data, 210_833)?.apply_aoe_from_data(data))
1017}
1018fn spell_touch_of_the_archmage(
1019    s: SpellDefinitionDraft,
1020    data: &ResolvedGameData,
1021) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1022    Ok(s.apply_base_from_data(data, 1_258_134)?.apply_aoe_from_data(data))
1023}
1024fn spell_evocation(
1025    s: SpellDefinitionDraft,
1026    data: &ResolvedGameData,
1027) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1028    Ok(
1029        s
1030            .apply_base_from_data(data, 12051)?
1031            .applies_inferred_aura(AURA_EVOCATION, 12051)
1032            .apply_aoe_from_data(data),
1033    )
1034}
1035fn spell_presence_of_mind(
1036    s: SpellDefinitionDraft,
1037    data: &ResolvedGameData,
1038) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1039    Ok(
1040        s
1041            .apply_base_from_data(data, 205_025)?
1042            .applies_inferred_aura(AURA_PRESENCE_OF_MIND, 205_025)
1043            .apply_aoe_from_data(data),
1044    )
1045}
1046fn spell_arcane_explosion(
1047    s: SpellDefinitionDraft,
1048    data: &ResolvedGameData,
1049) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1050    Ok(s.apply_base_from_data(data, 1449)?.apply_aoe_from_data(data))
1051}
1052fn spell_arcane_pulse(
1053    s: SpellDefinitionDraft,
1054    data: &ResolvedGameData,
1055) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1056    Ok(
1057        s
1058            .apply_base_from_data(data, 1_241_462)?
1059            .apply_aoe_from_data(data)
1060            .on_cast(crate::hooks::arcane_mage::arcane_pulse_hook),
1061    )
1062}
1063fn spell_prismatic_bolt(
1064    s: SpellDefinitionDraft,
1065    data: &ResolvedGameData,
1066) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1067    Ok(
1068        s
1069            .apply_base_from_data(data, 1_295_924)?
1070            .applies_inferred_aura(AURA_PRISMATIC_BOLT, 1_295_942)
1071            .apply_aoe_from_data(data)
1072            .on_cast(crate::hooks::arcane_mage::prismatic_bolt_hook)
1073            .requires_aura_at_min_stacks(1_295_942, 0),
1074    )
1075}
1076fn spell_arcane_intellect(
1077    s: SpellDefinitionDraft,
1078    data: &ResolvedGameData,
1079) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1080    Ok(
1081        s
1082            .apply_base_from_data(data, 1459)?
1083            .without_data_damage()
1084            .applies_inferred_aura(AURA_ARCANE_INTELLECT_HIGHLIGHT, 1459)
1085            .apply_aoe_from_data(data),
1086    )
1087}
1088fn spell_arcane_assault(
1089    s: SpellDefinitionDraft,
1090    data: &ResolvedGameData,
1091) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1092    Ok(s.apply_base_from_data(data, 225_119)?.apply_aoe_from_data(data))
1093}
1094pub(crate) fn build_combat_system_draft(
1095    params: &wowlab_engine_ports::HandlerParams<'_>,
1096) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1097    let builder = CombatSystemBuilder::new(params.stats.clone())
1098        .spec_id(SpecId::Arcane)
1099        .spec_identity(
1100            wowlab_engine_combat::generated_identities::specs::arcane_mage::PROOF,
1101        )
1102        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1103        .effect_identities(
1104            wowlab_engine_combat::generated_identities::specs::arcane_mage::damage::ALL,
1105        )
1106        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1107        .mastery_spell(190_740)
1108        .mastery_hook(crate::hooks::arcane_mage::mastery)
1109        .resource(
1110            "mana",
1111            100_000.0,
1112            params
1113                .game_data
1114                .power_regen_for_max(0, 100_000.0)
1115                .ok_or_else(|| {
1116                    wowlab_engine_ports::EngineError::spec_construction(
1117                        "missing power-type power_regen_for_max for type_id 0",
1118                    )
1119                })?,
1120        )
1121        .resource_type_id(0)
1122        .resource_start(100_000.0)
1123        .secondary_resource(
1124            "arcane_charges",
1125            params
1126                .game_data
1127                .power_max(16)
1128                .ok_or_else(|| {
1129                    wowlab_engine_ports::EngineError::spec_construction(
1130                        "missing power-type power_max for type_id 16",
1131                    )
1132                })?,
1133        )
1134        .secondary_resource_type_id(16)
1135        .aura(
1136            "arcane_charge",
1137            AURA::ARCANE_CHARGE,
1138            |a| aura_arcane_charge(a, &params.game_data),
1139        )
1140        .aura(
1141            "arcane_surge",
1142            AURA::ARCANE_SURGE,
1143            |a| aura_arcane_surge(a, &params.game_data),
1144        )
1145        .aura(
1146            "clearcasting",
1147            AURA::CLEARCASTING,
1148            |a| aura_clearcasting(a, &params.game_data),
1149        )
1150        .aura(
1151            "enlightened",
1152            AURA::ENLIGHTENED,
1153            |a| aura_enlightened(a, &params.game_data),
1154        )
1155        .aura(
1156            "arcane_salvo",
1157            AURA::ARCANE_SALVO,
1158            |a| aura_arcane_salvo(a, &params.game_data),
1159        )
1160        .aura("intuition", AURA::INTUITION, |a| aura_intuition(a, &params.game_data))
1161        .aura(
1162            "presence_of_mind",
1163            AURA::PRESENCE_OF_MIND,
1164            |a| aura_presence_of_mind(a, &params.game_data),
1165        )
1166        .aura("evocation", AURA::EVOCATION, |a| aura_evocation(a, &params.game_data))
1167        .aura(
1168            "touch_of_the_magi",
1169            AURA::TOUCH_OF_THE_MAGI,
1170            |a| aura_touch_of_the_magi(a, &params.game_data),
1171        )
1172        .aura(
1173            "nether_precision",
1174            AURA::NETHER_PRECISION,
1175            |a| aura_nether_precision(a, &params.game_data),
1176        )
1177        .aura(
1178            "overpowered_missiles",
1179            AURA::OVERPOWERED_MISSILES,
1180            |a| aura_overpowered_missiles(a, &params.game_data),
1181        )
1182        .aura(
1183            "arcane_intellect_highlight",
1184            AURA::ARCANE_INTELLECT_HIGHLIGHT,
1185            |a| aura_arcane_intellect_highlight(a, &params.game_data),
1186        )
1187        .aura(
1188            "high_voltage",
1189            AURA::HIGH_VOLTAGE,
1190            |a| aura_high_voltage(a, &params.game_data),
1191        )
1192        .aura(
1193            "amplification",
1194            AURA::AMPLIFICATION,
1195            |a| aura_amplification(a, &params.game_data),
1196        )
1197        .aura(
1198            "spellfire_salvo",
1199            AURA::SPELLFIRE_SALVO,
1200            |a| aura_spellfire_salvo(a, &params.game_data),
1201        )
1202        .aura(
1203            "cumulative_power",
1204            AURA::CUMULATIVE_POWER,
1205            |a| aura_cumulative_power(a, &params.game_data),
1206        )
1207        .aura(
1208            "prismatic_bolt",
1209            AURA::PRISMATIC_BOLT,
1210            |a| aura_prismatic_bolt(a, &params.game_data),
1211        )
1212        .spell(
1213            "arcane_blast",
1214            SPELL::ARCANE_BLAST,
1215            |s| spell_arcane_blast(s, &params.game_data),
1216        )
1217        .spell(
1218            "arcane_barrage",
1219            SPELL::ARCANE_BARRAGE,
1220            |s| spell_arcane_barrage(s, &params.game_data),
1221        )
1222        .spell(
1223            "arcane_missiles",
1224            SPELL::ARCANE_MISSILES,
1225            |s| spell_arcane_missiles(s, &params.game_data),
1226        )
1227        .spell(
1228            "arcane_missiles_damage",
1229            SPELL::ARCANE_MISSILES_DAMAGE,
1230            |s| spell_arcane_missiles_damage(s, &params.game_data),
1231        )
1232        .spell(
1233            "arcane_surge",
1234            SPELL::ARCANE_SURGE,
1235            |s| spell_arcane_surge(s, &params.game_data),
1236        )
1237        .spell(
1238            "arcane_orb",
1239            SPELL::ARCANE_ORB,
1240            |s| spell_arcane_orb(s, &params.game_data),
1241        )
1242        .spell(
1243            "arcane_orb_bolt",
1244            SPELL::ARCANE_ORB_BOLT,
1245            |s| spell_arcane_orb_bolt(s, &params.game_data),
1246        )
1247        .spell(
1248            "arcane_splinter",
1249            SPELL::ARCANE_SPLINTER,
1250            |s| spell_arcane_splinter(s, &params.game_data),
1251        )
1252        .spell(
1253            "touch_of_the_magi",
1254            SPELL::TOUCH_OF_THE_MAGI,
1255            |s| spell_touch_of_the_magi(s, &params.game_data),
1256        )
1257        .spell(
1258            "touch_of_the_magi_explosion",
1259            SPELL::TOUCH_OF_THE_MAGI_EXPLOSION,
1260            |s| spell_touch_of_the_magi_explosion(s, &params.game_data),
1261        )
1262        .spell(
1263            "touch_of_the_archmage",
1264            SPELL::TOUCH_OF_THE_ARCHMAGE,
1265            |s| spell_touch_of_the_archmage(s, &params.game_data),
1266        )
1267        .spell("evocation", SPELL::EVOCATION, |s| spell_evocation(s, &params.game_data))
1268        .spell(
1269            "presence_of_mind",
1270            SPELL::PRESENCE_OF_MIND,
1271            |s| spell_presence_of_mind(s, &params.game_data),
1272        )
1273        .spell(
1274            "arcane_explosion",
1275            SPELL::ARCANE_EXPLOSION,
1276            |s| spell_arcane_explosion(s, &params.game_data),
1277        )
1278        .spell(
1279            "arcane_pulse",
1280            SPELL::ARCANE_PULSE,
1281            |s| spell_arcane_pulse(s, &params.game_data),
1282        )
1283        .spell(
1284            "prismatic_bolt",
1285            SPELL::PRISMATIC_BOLT,
1286            |s| spell_prismatic_bolt(s, &params.game_data),
1287        )
1288        .spell(
1289            "arcane_intellect",
1290            SPELL::ARCANE_INTELLECT,
1291            |s| spell_arcane_intellect(s, &params.game_data),
1292        )
1293        .spell(
1294            "arcane_assault",
1295            SPELL::ARCANE_ASSAULT,
1296            |s| spell_arcane_assault(s, &params.game_data),
1297        )
1298        .game_data(params.game_data.clone())
1299        .talent_spell_ids(TALENTS)
1300        .talent_selections(params.talent_selections)
1301        .talent_companion_aura(TALENT::ENLIGHTENED, AURA_ENLIGHTENED)
1302        .set_bonus_auras(params.set_bonus_auras)
1303        .encounter(params.encounter.clone());
1304    let builder = crate::generated::items::register_equipped(
1305        builder,
1306        &params.game_data,
1307        params.equipped_items,
1308    )?;
1309
1310    builder.into_draft()
1311}
1312fn new_handler(
1313    params: wowlab_engine_ports::HandlerParams<'_>,
1314) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1315    let handler = crate::composition::compose_handler(
1316        build_combat_system_draft,
1317        &params,
1318        crate::hooks::arcane_mage::ArcaneHandler::new,
1319    )?;
1320
1321    Ok(Box::new(handler))
1322}
1323static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1324    primary_resource: ResourceType::Mana,
1325    secondary_resource: Some(ResourceType::ArcaneCharges),
1326    spell_ids: DECLARED_SPELL_IDS,
1327    aura_ids: DECLARED_AURA_IDS,
1328    server_proc_entries: &[],
1329    talents: TALENTS,
1330    rotation_field_schema: &[],
1331    metrics_plugin_id: None,
1332    hero_talent_trees: &[
1333        HeroTalentTreeDesc {
1334            name: "Spellslinger",
1335            spells: HERO_TREE_SPELLSLINGER_SPELLS,
1336            auras: HERO_TREE_SPELLSLINGER_AURAS,
1337        },
1338        HeroTalentTreeDesc {
1339            name: "Sunfury",
1340            spells: HERO_TREE_SUNFURY_SPELLS,
1341            auras: HERO_TREE_SUNFURY_AURAS,
1342        },
1343    ],
1344    reported_spells: REPORTED_SPELLS,
1345    masked_passive_effects: &[],
1346    passive_effect_overrides: &[],
1347};
1348pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1349    spec_id: SpecId::Arcane,
1350    display_name: "Arcane Mage",
1351    metadata: DECLARED_METADATA,
1352    handler_factory: new_handler,
1353};
1354wowlab_engine_combat::smoke_test!(build_combat_system_draft);