Skip to main content

wowlab_engine_content/generated/specs/
devastation_evoker.rs

1//! @generated by codegen-cli from manifests/specs/evoker/devastation/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_domain::dbc::ProcAttributes;
6use wowlab_engine_combat::{
7    CombatSystemBuilder, CombatSystemDraft, AuraDefinitionDraft, LocalAuraIdx,
8    LocalSpellIdx, SpellDefinitionDraft,
9};
10use wowlab_engine_ports::{
11    DeclaredSpecMetadata, SpecDescriptor, SpecHandler, HeroTalentTreeDesc,
12    DeclaredServerProcEntry,
13};
14use wowlab_engine_gamedata::ResolvedGameData;
15pub(crate) mod SPELL {
16    ///<https://wowlab.gg/inspect/spell/361469>
17    pub(crate) const LIVING_FLAME: u32 = 361_469;
18    ///<https://wowlab.gg/inspect/spell/362969>
19    pub(crate) const AZURE_STRIKE: u32 = 362_969;
20    ///<https://wowlab.gg/inspect/spell/356995>
21    pub(crate) const DISINTEGRATE: u32 = 356_995;
22    ///<https://wowlab.gg/inspect/spell/357208>
23    pub(crate) const FIRE_BREATH: u32 = 357_208;
24    ///<https://wowlab.gg/inspect/spell/359073>
25    pub(crate) const ETERNITY_SURGE: u32 = 359_073;
26    ///<https://wowlab.gg/inspect/spell/357211>
27    pub(crate) const PYRE: u32 = 357_211;
28    ///<https://wowlab.gg/inspect/spell/375087>
29    pub(crate) const DRAGONRAGE: u32 = 375_087;
30    ///<https://wowlab.gg/inspect/spell/1292321>
31    pub(crate) const UNBOUND_FLAME: u32 = 1_292_321;
32    ///<https://wowlab.gg/inspect/spell/370553>
33    pub(crate) const TIP_THE_SCALES: u32 = 370_553;
34    ///<https://wowlab.gg/inspect/spell/370821>
35    pub(crate) const SCINTILLATION: u32 = 370_821;
36    ///<https://wowlab.gg/inspect/spell/1265804>
37    pub(crate) const SHATTERING_STAR: u32 = 1_265_804;
38    ///<https://wowlab.gg/inspect/spell/381748>
39    pub(crate) const BLESSING_OF_THE_BRONZE: u32 = 381_748;
40    ///<https://wowlab.gg/inspect/spell/357210>
41    pub(crate) const DEEP_BREATH: u32 = 357_210;
42}
43pub(crate) mod AURA {
44    ///<https://wowlab.gg/inspect/spell/375087>
45    pub(crate) const DRAGONRAGE: u32 = 375_087;
46    ///<https://wowlab.gg/inspect/spell/359618>
47    pub(crate) const ESSENCE_BURST: u32 = 359_618;
48    ///<https://wowlab.gg/inspect/spell/375802>
49    pub(crate) const BURNOUT: u32 = 375_802;
50    ///<https://wowlab.gg/inspect/spell/370454>
51    pub(crate) const CHARGED_BLAST: u32 = 370_454;
52    ///<https://wowlab.gg/inspect/spell/386399>
53    pub(crate) const IRIDESCENCE_BLUE: u32 = 386_399;
54    ///<https://wowlab.gg/inspect/spell/386353>
55    pub(crate) const IRIDESCENCE_RED: u32 = 386_353;
56    ///<https://wowlab.gg/inspect/spell/370901>
57    pub(crate) const LEAPING_FLAMES: u32 = 370_901;
58    ///<https://wowlab.gg/inspect/spell/375583>
59    pub(crate) const ANCIENT_FLAME: u32 = 375_583;
60    ///<https://wowlab.gg/inspect/spell/370553>
61    pub(crate) const TIP_THE_SCALES: u32 = 370_553;
62    ///<https://wowlab.gg/inspect/spell/376850>
63    pub(crate) const POWER_SWELL: u32 = 376_850;
64    ///<https://wowlab.gg/inspect/spell/411055>
65    pub(crate) const IMMINENT_DESTRUCTION: u32 = 411_055;
66    ///<https://wowlab.gg/inspect/spell/357209>
67    pub(crate) const FIRE_BREATH: u32 = 357_209;
68    ///<https://wowlab.gg/inspect/spell/444088>
69    pub(crate) const CONSUME_FLAME: u32 = 444_088;
70    ///<https://wowlab.gg/inspect/spell/1265871>
71    pub(crate) const AZURE_SWEEP: u32 = 1_265_871;
72    ///<https://wowlab.gg/inspect/spell/371807>
73    pub(crate) const RECALL: u32 = 371_807;
74    ///<https://wowlab.gg/inspect/spell/381748>
75    pub(crate) const BLESSING_OF_THE_BRONZE: u32 = 381_748;
76    ///<https://wowlab.gg/inspect/spell/1271783>
77    pub(crate) const RISING_FURY: u32 = 1_271_783;
78    ///<https://wowlab.gg/inspect/spell/1292323>
79    pub(crate) const UNBOUND_FLAME: u32 = 1_292_323;
80    ///<https://wowlab.gg/inspect/spell/353759>
81    pub(crate) const DEEP_BREATH_TRIGGER: u32 = 353_759;
82    ///<https://wowlab.gg/inspect/spell/441172>
83    pub(crate) const MELT_ARMOR_DOT: u32 = 441_172;
84    ///<https://wowlab.gg/inspect/spell/1266165>
85    pub(crate) const STRAFING_RUN: u32 = 1_266_165;
86    ///<https://wowlab.gg/inspect/spell/434473>
87    pub(crate) const BOMBARDMENTS: u32 = 434_473;
88    ///<https://wowlab.gg/inspect/spell/436336>
89    pub(crate) const MASS_DISINTEGRATE: u32 = 436_336;
90}
91pub(crate) mod TALENT {
92    ///<https://wowlab.gg/inspect/spell/375797>
93    pub(crate) const ANIMOSITY: u32 = 375_797;
94    ///<https://wowlab.gg/inspect/spell/1219723>
95    pub(crate) const AZURE_CELERITY: u32 = 1_219_723;
96    ///<https://wowlab.gg/inspect/spell/375721>
97    pub(crate) const AZURE_ESSENCE_BURST: u32 = 375_721;
98    ///<https://wowlab.gg/inspect/spell/1265867>
99    pub(crate) const AZURE_SWEEP: u32 = 1_265_867;
100    ///<https://wowlab.gg/inspect/spell/375510>
101    pub(crate) const BLAST_FURNACE: u32 = 375_510;
102    ///<https://wowlab.gg/inspect/spell/434300>
103    pub(crate) const BOMBARDMENTS_GATE: u32 = 434_300;
104    ///<https://wowlab.gg/inspect/spell/375801>
105    pub(crate) const BURNOUT: u32 = 375_801;
106    ///<https://wowlab.gg/inspect/spell/386283>
107    pub(crate) const CATALYZE: u32 = 386_283;
108    ///<https://wowlab.gg/inspect/spell/375777>
109    pub(crate) const CAUSALITY: u32 = 375_777;
110    ///<https://wowlab.gg/inspect/spell/370455>
111    pub(crate) const CHARGED_BLAST: u32 = 370_455;
112    ///<https://wowlab.gg/inspect/spell/375087>
113    pub(crate) const DRAGONRAGE: u32 = 375_087;
114    ///<https://wowlab.gg/inspect/spell/375722>
115    pub(crate) const ESSENCE_ATTUNEMENT: u32 = 375_722;
116    ///<https://wowlab.gg/inspect/spell/375757>
117    pub(crate) const ETERNITY_SPAN: u32 = 375_757;
118    ///<https://wowlab.gg/inspect/spell/359073>
119    pub(crate) const ETERNITY_SURGE: u32 = 359_073;
120    ///<https://wowlab.gg/inspect/spell/411165>
121    pub(crate) const EYE_OF_INFINITY: u32 = 411_165;
122    ///<https://wowlab.gg/inspect/spell/369846>
123    pub(crate) const FEED_THE_FLAMES: u32 = 369_846;
124    ///<https://wowlab.gg/inspect/spell/411212>
125    pub(crate) const FONT_OF_MAGIC: u32 = 411_212;
126    ///<https://wowlab.gg/inspect/spell/370781>
127    pub(crate) const IMMINENT_DESTRUCTION: u32 = 370_781;
128    ///<https://wowlab.gg/inspect/spell/370867>
129    pub(crate) const IRIDESCENCE: u32 = 370_867;
130    ///<https://wowlab.gg/inspect/spell/369939>
131    pub(crate) const LEAPING_FLAMES: u32 = 369_939;
132    ///<https://wowlab.gg/inspect/spell/433871>
133    pub(crate) const MANEUVERABILITY_GATE: u32 = 433_871;
134    ///<https://wowlab.gg/inspect/spell/436335>
135    pub(crate) const MASS_DISINTEGRATE_GATE: u32 = 436_335;
136    ///<https://wowlab.gg/inspect/spell/441176>
137    pub(crate) const MELT_ARMOR_GATE: u32 = 441_176;
138    ///<https://wowlab.gg/inspect/spell/369908>
139    pub(crate) const POWER_NEXUS: u32 = 369_908;
140    ///<https://wowlab.gg/inspect/spell/370839>
141    pub(crate) const POWER_SWELL: u32 = 370_839;
142    ///<https://wowlab.gg/inspect/spell/357211>
143    pub(crate) const PYRE: u32 = 357_211;
144    ///<https://wowlab.gg/inspect/spell/1271687>
145    pub(crate) const RISING_FURY: u32 = 1_271_687;
146    ///<https://wowlab.gg/inspect/spell/1271796>
147    pub(crate) const RISING_FURY_2: u32 = 1_271_796;
148    ///<https://wowlab.gg/inspect/spell/1271788>
149    pub(crate) const RISING_FURY_3: u32 = 1_271_788;
150    ///<https://wowlab.gg/inspect/spell/376872>
151    pub(crate) const RUBY_ESSENCE_BURST: u32 = 376_872;
152    ///<https://wowlab.gg/inspect/spell/370821>
153    pub(crate) const SCINTILLATION: u32 = 370_821;
154    ///<https://wowlab.gg/inspect/spell/370819>
155    pub(crate) const SCORCHING_EMBERS: u32 = 370_819;
156    ///<https://wowlab.gg/inspect/spell/1265802>
157    pub(crate) const SHATTERING_STARS: u32 = 1_265_802;
158    ///<https://wowlab.gg/inspect/spell/1266151>
159    pub(crate) const STRAFING_RUN_GATE: u32 = 1_266_151;
160    ///<https://wowlab.gg/inspect/spell/370553>
161    pub(crate) const TIP_THE_SCALES: u32 = 370_553;
162    ///<https://wowlab.gg/inspect/spell/386272>
163    pub(crate) const TITANIC_WRATH: u32 = 386_272;
164    ///<https://wowlab.gg/inspect/spell/376888>
165    pub(crate) const TYRANNY: u32 = 376_888;
166    ///<https://wowlab.gg/inspect/spell/369089>
167    pub(crate) const VOLATILITY: u32 = 369_089;
168}
169pub(crate) mod SET_BONUS {
170    ///<https://wowlab.gg/inspect/spell/1296639>
171    pub(crate) const MID2_DEVASTATION_2PC: u32 = 1_296_639;
172    ///<https://wowlab.gg/inspect/spell/1296640>
173    pub(crate) const MID2_DEVASTATION_4PC: u32 = 1_296_640;
174}
175pub(crate) mod REPORTED_SPELL {
176    ///<https://wowlab.gg/inspect/spell/359077>
177    pub(crate) const ETERNITY_SURGE_DAMAGE: u32 = 359_077;
178    ///<https://wowlab.gg/inspect/spell/357209>
179    pub(crate) const FIRE_BREATH_DAMAGE: u32 = 357_209;
180    ///<https://wowlab.gg/inspect/spell/361500>
181    pub(crate) const LIVING_FLAME_DAMAGE: u32 = 361_500;
182    ///<https://wowlab.gg/inspect/spell/357212>
183    pub(crate) const PYRE_DAMAGE: u32 = 357_212;
184    ///<https://wowlab.gg/inspect/spell/1292322>
185    pub(crate) const UNBOUND_FLAME_DAMAGE: u32 = 1_292_322;
186}
187pub(crate) mod HERO {
188    pub(crate) mod FLAMESHAPER {
189        pub(crate) mod SPELL {
190            ///<https://wowlab.gg/inspect/spell/444017>
191            pub(crate) const ENKINDLE: u32 = 444_017;
192            ///<https://wowlab.gg/inspect/spell/1265980>
193            pub(crate) const TWIN_FLAME: u32 = 1_265_980;
194        }
195        pub(crate) mod AURA {
196            ///<https://wowlab.gg/inspect/spell/375802>
197            pub(crate) const BURNOUT: u32 = 375_802;
198            ///<https://wowlab.gg/inspect/spell/444088>
199            pub(crate) const CONSUME_FLAME: u32 = 444_088;
200            ///<https://wowlab.gg/inspect/spell/1265993>
201            pub(crate) const ESSENCE_WELL: u32 = 1_265_993;
202            ///<https://wowlab.gg/inspect/spell/1236776>
203            pub(crate) const INNER_FLAME: u32 = 1_236_776;
204        }
205    }
206    pub(crate) mod CHRONOWARDEN {
207        pub(crate) mod SPELL {
208            ///<https://wowlab.gg/inspect/spell/431583>
209            pub(crate) const CHRONO_FLAME: u32 = 431_583;
210            ///<https://wowlab.gg/inspect/spell/431698>
211            pub(crate) const TEMPORAL_BURST: u32 = 431_698;
212        }
213        pub(crate) mod AURA {
214            ///<https://wowlab.gg/inspect/spell/431654>
215            pub(crate) const PRIMACY: u32 = 431_654;
216            ///<https://wowlab.gg/inspect/spell/431698>
217            pub(crate) const TEMPORAL_BURST: u32 = 431_698;
218            ///<https://wowlab.gg/inspect/spell/431991>
219            pub(crate) const TIME_CONVERGENCE: u32 = 431_991;
220        }
221    }
222    pub(crate) mod SCALECOMMANDER {
223        pub(crate) mod SPELL {
224            ///<https://wowlab.gg/inspect/spell/434481>
225            pub(crate) const BOMBARDMENTS_DAMAGE: u32 = 434_481;
226            ///<https://wowlab.gg/inspect/spell/436336>
227            pub(crate) const MASS_DISINTEGRATE: u32 = 436_336;
228            ///<https://wowlab.gg/inspect/spell/441172>
229            pub(crate) const MELT_ARMOR_DOT: u32 = 441_172;
230        }
231        pub(crate) mod AURA {
232            ///<https://wowlab.gg/inspect/spell/434473>
233            pub(crate) const BOMBARDMENTS: u32 = 434_473;
234            ///<https://wowlab.gg/inspect/spell/436336>
235            pub(crate) const MASS_DISINTEGRATE: u32 = 436_336;
236            ///<https://wowlab.gg/inspect/spell/441172>
237            pub(crate) const MELT_ARMOR: u32 = 441_172;
238            ///<https://wowlab.gg/inspect/spell/1266165>
239            pub(crate) const STRAFING_RUN: u32 = 1_266_165;
240            ///<https://wowlab.gg/inspect/spell/441248>
241            pub(crate) const UNRELENTING_SIEGE: u32 = 441_248;
242        }
243    }
244}
245static HERO_TREE_FLAMESHAPER_SPELLS: &[(&str, u32)] = &[
246    ("ENKINDLE", 444_017),
247    ("TWIN_FLAME", 1_265_980),
248];
249static HERO_TREE_FLAMESHAPER_AURAS: &[(&str, u32)] = &[
250    ("BURNOUT", 375_802),
251    ("CONSUME_FLAME", 444_088),
252    ("ESSENCE_WELL", 1_265_993),
253    ("INNER_FLAME", 1_236_776),
254];
255static HERO_TREE_CHRONOWARDEN_SPELLS: &[(&str, u32)] = &[
256    ("CHRONO_FLAME", 431_583),
257    ("TEMPORAL_BURST", 431_698),
258];
259static HERO_TREE_CHRONOWARDEN_AURAS: &[(&str, u32)] = &[
260    ("PRIMACY", 431_654),
261    ("TEMPORAL_BURST", 431_698),
262    ("TIME_CONVERGENCE", 431_991),
263];
264static HERO_TREE_SCALECOMMANDER_SPELLS: &[(&str, u32)] = &[
265    ("BOMBARDMENTS_DAMAGE", 434_481),
266    ("MASS_DISINTEGRATE", 436_336),
267    ("MELT_ARMOR_DOT", 441_172),
268];
269static HERO_TREE_SCALECOMMANDER_AURAS: &[(&str, u32)] = &[
270    ("BOMBARDMENTS", 434_473),
271    ("MASS_DISINTEGRATE", 436_336),
272    ("MELT_ARMOR", 441_172),
273    ("STRAFING_RUN", 1_266_165),
274    ("UNRELENTING_SIEGE", 441_248),
275];
276pub(crate) mod DAMAGE_SPELL {
277    pub(crate) const LIVING_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_361469;
278    pub(crate) const AZURE_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_362969;
279    pub(crate) const DISINTEGRATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_356995;
280    pub(crate) const FIRE_BREATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357208;
281    pub(crate) const ETERNITY_SURGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_359073;
282    pub(crate) const PYRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357211;
283    pub(crate) const DRAGONRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375087;
284    pub(crate) const UNBOUND_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1292321;
285    pub(crate) const TIP_THE_SCALES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370553;
286    pub(crate) const SCINTILLATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370821;
287    pub(crate) const SHATTERING_STAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1265804;
288    pub(crate) const BLESSING_OF_THE_BRONZE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_381748;
289    pub(crate) const DEEP_BREATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357210;
290    pub(crate) const ENKINDLE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_444017;
291    pub(crate) const TWIN_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1265980;
292    pub(crate) const CHRONO_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_431583;
293    pub(crate) const TEMPORAL_BURST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_431698;
294    pub(crate) const BOMBARDMENTS_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_434481;
295    pub(crate) const MASS_DISINTEGRATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_436336;
296    pub(crate) const MELT_ARMOR_DOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_441172;
297}
298pub(crate) mod DAMAGE_AURA {
299    pub(crate) const DRAGONRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375087;
300    pub(crate) const ESSENCE_BURST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_359618;
301    pub(crate) const BURNOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375802;
302    pub(crate) const CHARGED_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370454;
303    pub(crate) const IRIDESCENCE_BLUE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_386399;
304    pub(crate) const IRIDESCENCE_RED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_386353;
305    pub(crate) const LEAPING_FLAMES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370901;
306    pub(crate) const ANCIENT_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375583;
307    pub(crate) const TIP_THE_SCALES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370553;
308    pub(crate) const POWER_SWELL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_376850;
309    pub(crate) const IMMINENT_DESTRUCTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_411055;
310    pub(crate) const FIRE_BREATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357209;
311    pub(crate) const CONSUME_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_444088;
312    pub(crate) const AZURE_SWEEP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1265871;
313    pub(crate) const RECALL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_371807;
314    pub(crate) const BLESSING_OF_THE_BRONZE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_381748;
315    pub(crate) const RISING_FURY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1271783;
316    pub(crate) const UNBOUND_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1292323;
317    pub(crate) const DEEP_BREATH_TRIGGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_353759;
318    pub(crate) const MELT_ARMOR_DOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_441172;
319    pub(crate) const STRAFING_RUN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1266165;
320    pub(crate) const BOMBARDMENTS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_434473;
321    pub(crate) const MASS_DISINTEGRATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_436336;
322}
323pub(crate) mod DAMAGE_TALENT {
324    pub(crate) const ANIMOSITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375797;
325    pub(crate) const AZURE_CELERITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1219723;
326    pub(crate) const AZURE_ESSENCE_BURST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375721;
327    pub(crate) const AZURE_SWEEP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1265867;
328    pub(crate) const BLAST_FURNACE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375510;
329    pub(crate) const BOMBARDMENTS_GATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_434300;
330    pub(crate) const BURNOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375801;
331    pub(crate) const CATALYZE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_386283;
332    pub(crate) const CAUSALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375777;
333    pub(crate) const CHARGED_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370455;
334    pub(crate) const DRAGONRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375087;
335    pub(crate) const ESSENCE_ATTUNEMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375722;
336    pub(crate) const ETERNITY_SPAN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_375757;
337    pub(crate) const ETERNITY_SURGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_359073;
338    pub(crate) const EYE_OF_INFINITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_411165;
339    pub(crate) const FEED_THE_FLAMES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_369846;
340    pub(crate) const FONT_OF_MAGIC: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_411212;
341    pub(crate) const IMMINENT_DESTRUCTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370781;
342    pub(crate) const IRIDESCENCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370867;
343    pub(crate) const LEAPING_FLAMES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_369939;
344    pub(crate) const MANEUVERABILITY_GATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_433871;
345    pub(crate) const MASS_DISINTEGRATE_GATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_436335;
346    pub(crate) const MELT_ARMOR_GATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_441176;
347    pub(crate) const POWER_NEXUS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_369908;
348    pub(crate) const POWER_SWELL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370839;
349    pub(crate) const PYRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357211;
350    pub(crate) const RISING_FURY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1271687;
351    pub(crate) const RISING_FURY_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1271796;
352    pub(crate) const RISING_FURY_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1271788;
353    pub(crate) const RUBY_ESSENCE_BURST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_376872;
354    pub(crate) const SCINTILLATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370821;
355    pub(crate) const SCORCHING_EMBERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370819;
356    pub(crate) const SHATTERING_STARS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1265802;
357    pub(crate) const STRAFING_RUN_GATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1266151;
358    pub(crate) const TIP_THE_SCALES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_370553;
359    pub(crate) const TITANIC_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_386272;
360    pub(crate) const TYRANNY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_376888;
361    pub(crate) const VOLATILITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_369089;
362}
363pub(crate) mod DAMAGE_REPORTED {
364    pub(crate) const ETERNITY_SURGE_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_359077;
365    pub(crate) const FIRE_BREATH_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357209;
366    pub(crate) const LIVING_FLAME_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_361500;
367    pub(crate) const PYRE_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_357212;
368    pub(crate) const UNBOUND_FLAME_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ACTION::SPELL_1292322;
369}
370pub(crate) mod DAMAGE_EFFECT {
371    pub(crate) const BLAST_FURNACE_DURATION: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_375510_EFFECT_1;
372    pub(crate) const DEEP_BREATH_PATH: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_353759_EFFECT_1;
373    pub(crate) const PYRE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_357212_EFFECT_1;
374    pub(crate) const SCINTILLATION_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_370821_EFFECT_2;
375    pub(crate) const SCINTILLATION_POWER: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_370821_EFFECT_1;
376    pub(crate) const ETERNITY_SURGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_359077_EFFECT_2;
377    pub(crate) const SHATTERING_STAR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1265804_EFFECT_1;
378    pub(crate) const CAUSALITY_DISINTEGRATE_CDR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_375777_EFFECT_1;
379    pub(crate) const ANIMOSITY_EXTEND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_375797_EFFECT_1;
380    pub(crate) const AZURE_EB_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_375721_EFFECT_1;
381    pub(crate) const RUBY_EB_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_376872_EFFECT_1;
382    pub(crate) const BURNOUT_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_375801_EFFECT_1;
383    pub(crate) const IRIDESCENCE_BLUE_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_386399_EFFECT_1;
384    pub(crate) const IRIDESCENCE_RED_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_386353_EFFECT_1;
385    pub(crate) const TITANIC_WRATH_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_386272_EFFECT_1;
386    pub(crate) const SHATTERING_STARS_PER_RANK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1265802_EFFECT_1;
387    pub(crate) const MID2_2PC_SHATTERING_STAR_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1296639_EFFECT_1;
388    pub(crate) const MID2_4PC_CAUSALITY_CDR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1296640_EFFECT_1;
389    pub(crate) const MID2_4PC_ETERNITY_SURGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1296640_EFFECT_3;
390    pub(crate) const UNBOUND_FLAME_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1292322_EFFECT_1;
391    pub(crate) const RISING_FURY_PERSIST_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::EFFECT::SPELL_1271788_EFFECT_1;
392}
393pub(crate) const AURA_DRAGONRAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_DRAGONRAGE
394    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
395pub(crate) const AURA_ESSENCE_BURST: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_ESSENCE_BURST
396    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
397pub(crate) const AURA_BURNOUT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_BURNOUT
398    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
399pub(crate) const AURA_CHARGED_BLAST: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_CHARGED_BLAST
400    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
401pub(crate) const AURA_IRIDESCENCE_BLUE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_IRIDESCENCE_BLUE
402    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
403pub(crate) const AURA_IRIDESCENCE_RED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_IRIDESCENCE_RED
404    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
405pub(crate) const AURA_LEAPING_FLAMES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_LEAPING_FLAMES
406    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
407pub(crate) const AURA_ANCIENT_FLAME: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_ANCIENT_FLAME
408    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
409pub(crate) const AURA_TIP_THE_SCALES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_TIP_THE_SCALES
410    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
411pub(crate) const AURA_POWER_SWELL: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_POWER_SWELL
412    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
413pub(crate) const AURA_IMMINENT_DESTRUCTION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_IMMINENT_DESTRUCTION
414    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
415pub(crate) const AURA_FIRE_BREATH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_FIRE_BREATH
416    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
417pub(crate) const AURA_CONSUME_FLAME: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_CONSUME_FLAME
418    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
419pub(crate) const AURA_AZURE_SWEEP: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_AZURE_SWEEP
420    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
421pub(crate) const AURA_RECALL: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_RECALL
422    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
423pub(crate) const AURA_BLESSING_OF_THE_BRONZE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_BLESSING_OF_THE_BRONZE
424    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
425pub(crate) const AURA_RISING_FURY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_RISING_FURY
426    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
427pub(crate) const AURA_UNBOUND_FLAME: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_UNBOUND_FLAME
428    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
429pub(crate) const AURA_DEEP_BREATH_TRIGGER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_DEEP_BREATH_TRIGGER
430    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
431pub(crate) const AURA_MELT_ARMOR_DOT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_MELT_ARMOR_DOT
432    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
433pub(crate) const AURA_STRAFING_RUN: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_STRAFING_RUN
434    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
435pub(crate) const AURA_BOMBARDMENTS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_BOMBARDMENTS
436    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
437pub(crate) const AURA_MASS_DISINTEGRATE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::AURA_MASS_DISINTEGRATE
438    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
439pub(crate) const AURA_COUNT: usize = 23;
440const _: () = assert!(
441    AURA_COUNT == 23, "AURA index ABI: count changed -- update positional hook consumers"
442);
443pub(crate) const SPELL_LIVING_FLAME: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_LIVING_FLAME
444    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
445pub(crate) const SPELL_AZURE_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_AZURE_STRIKE
446    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
447pub(crate) const SPELL_DISINTEGRATE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_DISINTEGRATE
448    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
449pub(crate) const SPELL_FIRE_BREATH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_FIRE_BREATH
450    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
451pub(crate) const SPELL_ETERNITY_SURGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_ETERNITY_SURGE
452    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
453pub(crate) const SPELL_PYRE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_PYRE
454    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
455pub(crate) const SPELL_DRAGONRAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_DRAGONRAGE
456    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
457pub(crate) const SPELL_UNBOUND_FLAME: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_UNBOUND_FLAME
458    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
459pub(crate) const SPELL_TIP_THE_SCALES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_TIP_THE_SCALES
460    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
461pub(crate) const SPELL_SCINTILLATION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_SCINTILLATION
462    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
463pub(crate) const SPELL_SHATTERING_STAR: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_SHATTERING_STAR
464    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
465pub(crate) const SPELL_BLESSING_OF_THE_BRONZE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_BLESSING_OF_THE_BRONZE
466    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
467pub(crate) const SPELL_DEEP_BREATH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::devastation_evoker::SPELL_DEEP_BREATH
468    .bind(wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF);
469pub(crate) const SPELL_COUNT: usize = 13;
470const _: () = assert!(
471    SPELL_COUNT == 13,
472    "SPELL index ABI: count changed -- update positional hook consumers"
473);
474pub(crate) mod EFFECT {
475    ///<https://wowlab.gg/inspect/spell/375510>
476    pub(crate) const BLAST_FURNACE_DURATION: (u32, u8) = (375_510, 1);
477    ///<https://wowlab.gg/inspect/spell/353759>
478    pub(crate) const DEEP_BREATH_PATH: (u32, u8) = (353_759, 1);
479    ///<https://wowlab.gg/inspect/spell/357212>
480    pub(crate) const PYRE_DAMAGE: (u32, u8) = (357_212, 1);
481    ///<https://wowlab.gg/inspect/spell/370821>
482    pub(crate) const SCINTILLATION_CHANCE: (u32, u8) = (370_821, 2);
483    ///<https://wowlab.gg/inspect/spell/370821>
484    pub(crate) const SCINTILLATION_POWER: (u32, u8) = (370_821, 1);
485    ///<https://wowlab.gg/inspect/spell/359077>
486    pub(crate) const ETERNITY_SURGE_DAMAGE: (u32, u8) = (359_077, 2);
487    ///<https://wowlab.gg/inspect/spell/1265804>
488    pub(crate) const SHATTERING_STAR: (u32, u8) = (1_265_804, 1);
489    ///<https://wowlab.gg/inspect/spell/375777>
490    pub(crate) const CAUSALITY_DISINTEGRATE_CDR: (u32, u8) = (375_777, 1);
491    ///<https://wowlab.gg/inspect/spell/375797>
492    pub(crate) const ANIMOSITY_EXTEND: (u32, u8) = (375_797, 1);
493    ///<https://wowlab.gg/inspect/spell/375721>
494    pub(crate) const AZURE_EB_CHANCE: (u32, u8) = (375_721, 1);
495    ///<https://wowlab.gg/inspect/spell/376872>
496    pub(crate) const RUBY_EB_CHANCE: (u32, u8) = (376_872, 1);
497    ///<https://wowlab.gg/inspect/spell/375801>
498    pub(crate) const BURNOUT_CHANCE: (u32, u8) = (375_801, 1);
499    ///<https://wowlab.gg/inspect/spell/386399>
500    pub(crate) const IRIDESCENCE_BLUE_MULT: (u32, u8) = (386_399, 1);
501    ///<https://wowlab.gg/inspect/spell/386353>
502    pub(crate) const IRIDESCENCE_RED_MULT: (u32, u8) = (386_353, 1);
503    ///<https://wowlab.gg/inspect/spell/386272>
504    pub(crate) const TITANIC_WRATH_MULT: (u32, u8) = (386_272, 1);
505    ///<https://wowlab.gg/inspect/spell/1265802>
506    pub(crate) const SHATTERING_STARS_PER_RANK: (u32, u8) = (1_265_802, 1);
507    ///<https://wowlab.gg/inspect/spell/1296639>
508    pub(crate) const MID2_2PC_SHATTERING_STAR_DAMAGE: (u32, u8) = (1_296_639, 1);
509    ///<https://wowlab.gg/inspect/spell/1296640>
510    pub(crate) const MID2_4PC_CAUSALITY_CDR: (u32, u8) = (1_296_640, 1);
511    ///<https://wowlab.gg/inspect/spell/1296640>
512    pub(crate) const MID2_4PC_ETERNITY_SURGE_DAMAGE: (u32, u8) = (1_296_640, 3);
513    ///<https://wowlab.gg/inspect/spell/1292322>
514    pub(crate) const UNBOUND_FLAME_DAMAGE: (u32, u8) = (1_292_322, 1);
515    ///<https://wowlab.gg/inspect/spell/1271788>
516    pub(crate) const RISING_FURY_PERSIST_MS: (u32, u8) = (1_271_788, 1);
517}
518static REPORTED_SPELLS: &[(&str, u32)] = &[
519    ("eternity_surge_damage", 359_077),
520    ("fire_breath_damage", 357_209),
521    ("living_flame_damage", 361_500),
522    ("pyre_damage", 357_212),
523    ("unbound_flame_damage", 1_292_322),
524];
525static DECLARED_SPELL_IDS: &[u32] = &[
526    361_469, 362_969, 356_995, 357_208, 359_073, 357_211, 375_087, 1_292_321, 370_553,
527    370_821, 1_265_804, 381_748, 357_210, 359_618, 375_802, 370_454, 386_399, 386_353,
528    370_901, 375_583, 376_850, 411_055, 357_209, 444_088, 1_265_871, 371_807, 1_271_783,
529    1_292_323, 353_759, 441_172, 1_266_165, 434_473, 436_336, 375_797, 1_219_723,
530    375_721, 1_265_867, 375_510, 434_300, 375_801, 386_283, 375_777, 370_455, 375_722,
531    375_757, 411_165, 369_846, 411_212, 370_781, 370_867, 369_939, 433_871, 436_335,
532    441_176, 369_908, 370_839, 1_271_687, 1_271_796, 1_271_788, 376_872, 370_819,
533    1_265_802, 1_266_151, 386_272, 376_888, 369_089, 357_212, 359_077, 361_500, 362_980,
534    434_481, 443_788, 1_292_322, 1_296_639, 1_296_640, 444_017, 1_265_980, 1_265_993,
535    1_236_776, 431_583, 431_698, 431_654, 431_991, 441_248,
536];
537static DECLARED_AURA_IDS: &[u32] = &[
538    375_087, 359_618, 375_802, 370_454, 386_399, 386_353, 370_901, 375_583, 370_553,
539    376_850, 411_055, 357_209, 444_088, 1_265_871, 371_807, 381_748, 1_271_783,
540    1_292_323, 353_759, 441_172, 1_266_165, 434_473, 436_336, 375_802, 444_088,
541    1_265_993, 1_236_776, 431_654, 431_698, 431_991, 434_473, 436_336, 441_172,
542    1_266_165, 441_248,
543];
544static TALENTS: &[(&str, u32)] = &[
545    ("ANIMOSITY", TALENT::ANIMOSITY),
546    ("AZURE_CELERITY", TALENT::AZURE_CELERITY),
547    ("AZURE_ESSENCE_BURST", TALENT::AZURE_ESSENCE_BURST),
548    ("AZURE_SWEEP", TALENT::AZURE_SWEEP),
549    ("BLAST_FURNACE", TALENT::BLAST_FURNACE),
550    ("BOMBARDMENTS_GATE", TALENT::BOMBARDMENTS_GATE),
551    ("BURNOUT", TALENT::BURNOUT),
552    ("CATALYZE", TALENT::CATALYZE),
553    ("CAUSALITY", TALENT::CAUSALITY),
554    ("CHARGED_BLAST", TALENT::CHARGED_BLAST),
555    ("DRAGONRAGE", TALENT::DRAGONRAGE),
556    ("ESSENCE_ATTUNEMENT", TALENT::ESSENCE_ATTUNEMENT),
557    ("ETERNITY_SPAN", TALENT::ETERNITY_SPAN),
558    ("ETERNITY_SURGE", TALENT::ETERNITY_SURGE),
559    ("EYE_OF_INFINITY", TALENT::EYE_OF_INFINITY),
560    ("FEED_THE_FLAMES", TALENT::FEED_THE_FLAMES),
561    ("FONT_OF_MAGIC", TALENT::FONT_OF_MAGIC),
562    ("IMMINENT_DESTRUCTION", TALENT::IMMINENT_DESTRUCTION),
563    ("IRIDESCENCE", TALENT::IRIDESCENCE),
564    ("LEAPING_FLAMES", TALENT::LEAPING_FLAMES),
565    ("MANEUVERABILITY_GATE", TALENT::MANEUVERABILITY_GATE),
566    ("MASS_DISINTEGRATE_GATE", TALENT::MASS_DISINTEGRATE_GATE),
567    ("MELT_ARMOR_GATE", TALENT::MELT_ARMOR_GATE),
568    ("POWER_NEXUS", TALENT::POWER_NEXUS),
569    ("POWER_SWELL", TALENT::POWER_SWELL),
570    ("PYRE", TALENT::PYRE),
571    ("RISING_FURY", TALENT::RISING_FURY),
572    ("RISING_FURY_2", TALENT::RISING_FURY_2),
573    ("RISING_FURY_3", TALENT::RISING_FURY_3),
574    ("RUBY_ESSENCE_BURST", TALENT::RUBY_ESSENCE_BURST),
575    ("SCINTILLATION", TALENT::SCINTILLATION),
576    ("SCORCHING_EMBERS", TALENT::SCORCHING_EMBERS),
577    ("SHATTERING_STARS", TALENT::SHATTERING_STARS),
578    ("STRAFING_RUN_GATE", TALENT::STRAFING_RUN_GATE),
579    ("TIP_THE_SCALES", TALENT::TIP_THE_SCALES),
580    ("TITANIC_WRATH", TALENT::TITANIC_WRATH),
581    ("TYRANNY", TALENT::TYRANNY),
582    ("VOLATILITY", TALENT::VOLATILITY),
583];
584pub(crate) mod DEVASTATION_EVOKER {
585    pub(crate) const LIVING_FLAME_CASTS: u32 = 0;
586    pub(crate) const AZURE_STRIKE_CASTS: u32 = 1;
587    pub(crate) const DISINTEGRATE_CASTS: u32 = 2;
588    pub(crate) const FIRE_BREATH_CASTS: u32 = 3;
589    pub(crate) const ETERNITY_SURGE_CASTS: u32 = 4;
590    pub(crate) const PYRE_CASTS: u32 = 5;
591    pub(crate) const DRAGONRAGE_CASTS: u32 = 6;
592    pub(crate) const DRAGONRAGE_UPTIME_MS: u32 = 7;
593}
594fn aura_dragonrage(
595    a: AuraDefinitionDraft,
596    data: &ResolvedGameData,
597) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
598    Ok(
599        a
600            .on_player()
601            .apply_base_from_data(data, 375_087)?
602            .max_stacks(
603                data
604                    .require_aura_max_stacks(
605                        wowlab_types::sim::SpellIdx::from_raw(375_087),
606                    )?,
607            )
608            .damage_multiplier(1.2)?
609            .on_expire(crate::hooks::devastation_evoker::dragonrage_expire_hook),
610    )
611}
612fn aura_essence_burst(
613    a: AuraDefinitionDraft,
614    data: &ResolvedGameData,
615) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
616    Ok(
617        a
618            .on_player()
619            .apply_base_from_data(data, 359_618)?
620            .max_stacks(
621                data
622                    .require_aura_max_stacks(
623                        wowlab_types::sim::SpellIdx::from_raw(359_618),
624                    )?,
625            ),
626    )
627}
628fn aura_burnout(
629    a: AuraDefinitionDraft,
630    data: &ResolvedGameData,
631) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
632    Ok(
633        a
634            .on_player()
635            .apply_base_from_data(data, 375_802)?
636            .max_stacks(
637                data
638                    .require_aura_max_stacks(
639                        wowlab_types::sim::SpellIdx::from_raw(375_802),
640                    )?,
641            ),
642    )
643}
644fn aura_charged_blast(
645    a: AuraDefinitionDraft,
646    data: &ResolvedGameData,
647) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
648    Ok(
649        a
650            .on_player()
651            .apply_base_from_data(data, 370_454)?
652            .max_stacks(
653                data
654                    .require_aura_max_stacks(
655                        wowlab_types::sim::SpellIdx::from_raw(370_454),
656                    )?,
657            ),
658    )
659}
660fn aura_iridescence_blue(
661    a: AuraDefinitionDraft,
662    data: &ResolvedGameData,
663) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
664    a.on_player()
665        .apply_base_from_data(data, 386_399)?
666        .max_stacks(
667            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(386_399))?,
668        )
669        .damage_percent_spells(
670            data.base_points(wowlab_types::sim::SpellIdx::from_raw(386_399), 1),
671            &[356_995, 362_969, 370_821, 1_265_804],
672        )
673}
674fn aura_iridescence_red(
675    a: AuraDefinitionDraft,
676    data: &ResolvedGameData,
677) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
678    Ok(
679        a
680            .on_player()
681            .apply_base_from_data(data, 386_353)?
682            .max_stacks(
683                data
684                    .require_aura_max_stacks(
685                        wowlab_types::sim::SpellIdx::from_raw(386_353),
686                    )?,
687            ),
688    )
689}
690fn aura_leaping_flames(
691    a: AuraDefinitionDraft,
692    data: &ResolvedGameData,
693) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
694    Ok(
695        a
696            .on_player()
697            .apply_base_from_data(data, 370_901)?
698            .max_stacks(
699                data
700                    .require_aura_max_stacks(
701                        wowlab_types::sim::SpellIdx::from_raw(370_901),
702                    )?,
703            ),
704    )
705}
706fn aura_ancient_flame(
707    a: AuraDefinitionDraft,
708    data: &ResolvedGameData,
709) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
710    Ok(
711        a
712            .on_player()
713            .apply_base_from_data(data, 375_583)?
714            .max_stacks(
715                data
716                    .require_aura_max_stacks(
717                        wowlab_types::sim::SpellIdx::from_raw(375_583),
718                    )?,
719            ),
720    )
721}
722fn aura_tip_the_scales(
723    a: AuraDefinitionDraft,
724    data: &ResolvedGameData,
725) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
726    Ok(
727        a
728            .on_player()
729            .apply_base_from_data(data, 370_553)?
730            .max_stacks(
731                data
732                    .require_aura_max_stacks(
733                        wowlab_types::sim::SpellIdx::from_raw(370_553),
734                    )?,
735            ),
736    )
737}
738fn aura_power_swell(
739    a: AuraDefinitionDraft,
740    data: &ResolvedGameData,
741) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
742    Ok(
743        a
744            .on_player()
745            .apply_base_from_data(data, 376_850)?
746            .max_stacks(
747                data
748                    .require_aura_max_stacks(
749                        wowlab_types::sim::SpellIdx::from_raw(376_850),
750                    )?,
751            ),
752    )
753}
754fn aura_imminent_destruction(
755    a: AuraDefinitionDraft,
756    data: &ResolvedGameData,
757) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
758    Ok(
759        a
760            .on_player()
761            .apply_base_from_data(data, 411_055)?
762            .max_stacks(
763                data
764                    .require_aura_max_stacks(
765                        wowlab_types::sim::SpellIdx::from_raw(411_055),
766                    )?,
767            ),
768    )
769}
770fn aura_fire_breath(
771    a: AuraDefinitionDraft,
772    data: &ResolvedGameData,
773) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
774    Ok(
775        a
776            .on_target()
777            .apply_base_from_data(data, 357_209)?
778            .max_stacks(
779                data
780                    .require_aura_max_stacks(
781                        wowlab_types::sim::SpellIdx::from_raw(357_209),
782                    )?,
783            ),
784    )
785}
786fn aura_consume_flame(
787    a: AuraDefinitionDraft,
788    data: &ResolvedGameData,
789) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
790    Ok(
791        a
792            .on_player()
793            .apply_base_from_data(data, 444_088)?
794            .max_stacks(
795                data
796                    .require_aura_max_stacks(
797                        wowlab_types::sim::SpellIdx::from_raw(444_088),
798                    )?,
799            ),
800    )
801}
802fn aura_azure_sweep(
803    a: AuraDefinitionDraft,
804    data: &ResolvedGameData,
805) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
806    Ok(
807        a
808            .on_player()
809            .apply_base_from_data(data, 1_265_871)?
810            .max_stacks(
811                data
812                    .require_aura_max_stacks(
813                        wowlab_types::sim::SpellIdx::from_raw(1_265_871),
814                    )?,
815            ),
816    )
817}
818fn aura_recall(
819    a: AuraDefinitionDraft,
820    data: &ResolvedGameData,
821) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
822    Ok(
823        a
824            .on_player()
825            .apply_base_from_data(data, 371_807)?
826            .max_stacks(
827                data
828                    .require_aura_max_stacks(
829                        wowlab_types::sim::SpellIdx::from_raw(371_807),
830                    )?,
831            ),
832    )
833}
834fn aura_blessing_of_the_bronze(
835    a: AuraDefinitionDraft,
836    data: &ResolvedGameData,
837) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
838    Ok(
839        a
840            .on_player()
841            .apply_base_from_data(data, 381_748)?
842            .max_stacks(
843                data
844                    .require_aura_max_stacks(
845                        wowlab_types::sim::SpellIdx::from_raw(381_748),
846                    )?,
847            ),
848    )
849}
850fn aura_rising_fury(
851    a: AuraDefinitionDraft,
852    data: &ResolvedGameData,
853) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
854    a.on_player()
855        .apply_base_from_data(data, 1_271_783)?
856        .max_stacks(
857            data
858                .require_aura_max_stacks(
859                    wowlab_types::sim::SpellIdx::from_raw(1_271_783),
860                )?,
861        )
862        .periodic_apply_aura(
863            wowlab_engine_combat::validated_milliseconds(
864                data.period(wowlab_types::sim::SpellIdx::from_raw(1_271_783), 4),
865                1_271_783,
866                "periodic_apply_aura.tick_ms",
867            )?,
868            16,
869        )
870        .apply_periodic_behavior_from_data(data, 1_271_783)
871}
872fn aura_unbound_flame(
873    a: AuraDefinitionDraft,
874    data: &ResolvedGameData,
875) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
876    Ok(
877        a
878            .on_player()
879            .apply_base_from_data(data, 1_292_323)?
880            .max_stacks(
881                data
882                    .require_aura_max_stacks(
883                        wowlab_types::sim::SpellIdx::from_raw(1_292_323),
884                    )?,
885            )
886            .reverse(),
887    )
888}
889fn aura_deep_breath_trigger(
890    a: AuraDefinitionDraft,
891    data: &ResolvedGameData,
892) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
893    Ok(
894        a
895            .on_target()
896            .apply_base_from_data(data, 353_759)?
897            .max_stacks(
898                data
899                    .require_aura_max_stacks(
900                        wowlab_types::sim::SpellIdx::from_raw(353_759),
901                    )?,
902            ),
903    )
904}
905fn aura_melt_armor_dot(
906    a: AuraDefinitionDraft,
907    data: &ResolvedGameData,
908) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
909    Ok(
910        a
911            .on_target()
912            .apply_base_from_data(data, 441_172)?
913            .max_stacks(
914                data
915                    .require_aura_max_stacks(
916                        wowlab_types::sim::SpellIdx::from_raw(441_172),
917                    )?,
918            ),
919    )
920}
921fn aura_strafing_run(
922    a: AuraDefinitionDraft,
923    data: &ResolvedGameData,
924) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
925    Ok(
926        a
927            .on_player()
928            .apply_base_from_data(data, 1_266_165)?
929            .max_stacks(
930                data
931                    .require_aura_max_stacks(
932                        wowlab_types::sim::SpellIdx::from_raw(1_266_165),
933                    )?,
934            ),
935    )
936}
937fn aura_bombardments(
938    a: AuraDefinitionDraft,
939    data: &ResolvedGameData,
940) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
941    a.on_target()
942        .apply_base_from_data(data, 434_473)?
943        .max_stacks(
944            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(434_473))?,
945        )
946        .periodic_damage_sp_from_spell(
947            wowlab_engine_combat::validated_milliseconds(
948                f64::from(
949                    data
950                        .require_proc_category_recovery_ms(
951                            wowlab_types::sim::SpellIdx::from_raw(443_788),
952                        )?,
953                ),
954                434_473,
955                "periodic_damage.tick_ms",
956            )?,
957            wowlab_engine_combat::DamagePayload::new(
958                434_481,
959                data.sp_coef(wowlab_types::sim::SpellIdx::from_raw(434_481), 1),
960                wowlab_engine_combat::DamageFlags::empty(),
961            ),
962        )
963        .apply_periodic_behavior_from_data(data, 434_473)
964}
965fn aura_mass_disintegrate(
966    a: AuraDefinitionDraft,
967    data: &ResolvedGameData,
968) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
969    Ok(
970        a
971            .on_player()
972            .apply_base_from_data(data, 436_336)?
973            .max_stacks(
974                wowlab_engine_combat::validated_max_stacks(
975                    3.0,
976                    436_336,
977                    "aura.max_stacks",
978                )?,
979            ),
980    )
981}
982fn spell_living_flame(
983    s: SpellDefinitionDraft,
984    data: &ResolvedGameData,
985) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
986    Ok(
987        s
988            .apply_base_from_data(data, 361_469)?
989            .damage_sp_from_data(
990                wowlab_engine_domain::dbc::EffectLookup::new(
991                    data,
992                    wowlab_types::sim::EffectRef::new(
993                        wowlab_types::sim::SpellIdx::from_raw(361_500),
994                        1,
995                    ),
996                ),
997            )?
998            .apply_aoe_from_data(data)
999            .on_cast(crate::hooks::devastation_evoker::living_flame_hook),
1000    )
1001}
1002fn spell_azure_strike(
1003    s: SpellDefinitionDraft,
1004    data: &ResolvedGameData,
1005) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1006    Ok(
1007        s
1008            .apply_base_from_data(data, 362_969)?
1009            .apply_aoe_from_data(data)
1010            .on_cast(crate::hooks::devastation_evoker::azure_strike_hook),
1011    )
1012}
1013fn spell_disintegrate(
1014    s: SpellDefinitionDraft,
1015    data: &ResolvedGameData,
1016) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1017    Ok(
1018        s
1019            .apply_base_from_data(data, 356_995)?
1020            .apply_aoe_from_data(data)
1021            .channel(
1022                wowlab_engine_combat::validated_channel_tick_count(
1023                    5.0,
1024                    356_995,
1025                    "channel.tick_count",
1026                )?,
1027            )
1028            .channel_tick_damage_sp_from_data(
1029                wowlab_engine_domain::dbc::EffectLookup::new(
1030                    data,
1031                    wowlab_types::sim::EffectRef::new(
1032                        wowlab_types::sim::SpellIdx::from_raw(356_995),
1033                        1,
1034                    ),
1035                ),
1036            )?
1037            .on_channel_tick(crate::hooks::devastation_evoker::disintegrate_tick_hook)
1038            .on_cast(crate::hooks::devastation_evoker::disintegrate_hook)
1039            .cost_free_when_aura(359_618)
1040            .consume_aura_on_cast(411_055),
1041    )
1042}
1043fn spell_fire_breath(
1044    s: SpellDefinitionDraft,
1045    data: &ResolvedGameData,
1046) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1047    Ok(
1048        s
1049            .apply_base_from_data(data, 357_208)?
1050            .max_empower_when_aura(AURA::TIP_THE_SCALES)
1051            .on_empower_release(
1052                crate::hooks::devastation_evoker::fire_breath_empower_release,
1053            )
1054            .damage_sp_from_data(
1055                wowlab_engine_domain::dbc::EffectLookup::new(
1056                    data,
1057                    wowlab_types::sim::EffectRef::new(
1058                        wowlab_types::sim::SpellIdx::from_raw(357_209),
1059                        1,
1060                    ),
1061                ),
1062            )?
1063            .applies_inferred_aura(AURA_FIRE_BREATH, 357_209)
1064            .apply_aoe_from_data(data)
1065            .on_cast(crate::hooks::devastation_evoker::fire_breath_hook),
1066    )
1067}
1068fn spell_eternity_surge(
1069    s: SpellDefinitionDraft,
1070    data: &ResolvedGameData,
1071) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1072    Ok(
1073        s
1074            .apply_base_from_data(data, 359_073)?
1075            .max_empower_when_aura(AURA::TIP_THE_SCALES)
1076            .damage_sp_from_data(
1077                wowlab_engine_domain::dbc::EffectLookup::new(
1078                    data,
1079                    wowlab_types::sim::EffectRef::new(
1080                        wowlab_types::sim::SpellIdx::from_raw(359_077),
1081                        2,
1082                    ),
1083                ),
1084            )?
1085            .apply_aoe_from_data(data)
1086            .on_cast(crate::hooks::devastation_evoker::eternity_surge_hook),
1087    )
1088}
1089fn spell_pyre(
1090    s: SpellDefinitionDraft,
1091    data: &ResolvedGameData,
1092) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1093    Ok(
1094        s
1095            .apply_base_from_data(data, 357_211)?
1096            .damage_sp_from_data(
1097                wowlab_engine_domain::dbc::EffectLookup::new(
1098                    data,
1099                    wowlab_types::sim::EffectRef::new(
1100                        wowlab_types::sim::SpellIdx::from_raw(357_212),
1101                        1,
1102                    ),
1103                ),
1104            )?
1105            .apply_aoe_from_data(data)
1106            .on_cast(crate::hooks::devastation_evoker::pyre_hook)
1107            .cost_free_when_aura(359_618)
1108            .consume_aura_on_cast(411_055),
1109    )
1110}
1111fn spell_dragonrage(
1112    s: SpellDefinitionDraft,
1113    data: &ResolvedGameData,
1114) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1115    Ok(
1116        s
1117            .apply_base_from_data(data, 375_087)?
1118            .applies_inferred_aura(AURA_DRAGONRAGE, 375_087)
1119            .apply_aoe_from_data(data)
1120            .on_cast(crate::hooks::devastation_evoker::dragonrage_hook),
1121    )
1122}
1123fn spell_unbound_flame(
1124    s: SpellDefinitionDraft,
1125    data: &ResolvedGameData,
1126) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1127    Ok(
1128        s
1129            .apply_base_from_data(data, 1_292_321)?
1130            .damage_sp(0.0, wowlab_engine_combat::DamageFlags::empty())
1131            .applies_inferred_aura(AURA_UNBOUND_FLAME, 1_292_323)
1132            .apply_aoe_from_data(data)
1133            .on_cast(crate::hooks::devastation_evoker::unbound_flame_hook)
1134            .requires_aura_at_min_stacks(1_292_323, 0),
1135    )
1136}
1137fn spell_tip_the_scales(
1138    s: SpellDefinitionDraft,
1139    data: &ResolvedGameData,
1140) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1141    Ok(
1142        s
1143            .apply_base_from_data(data, 370_553)?
1144            .applies_aura(AURA_TIP_THE_SCALES)
1145            .apply_aoe_from_data(data),
1146    )
1147}
1148fn spell_scintillation(
1149    s: SpellDefinitionDraft,
1150    data: &ResolvedGameData,
1151) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1152    Ok(s.apply_base_from_data(data, 370_821)?.apply_aoe_from_data(data))
1153}
1154fn spell_shattering_star(
1155    s: SpellDefinitionDraft,
1156    data: &ResolvedGameData,
1157) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1158    Ok(s.apply_base_from_data(data, 1_265_804)?.apply_aoe_from_data(data))
1159}
1160fn spell_blessing_of_the_bronze(
1161    s: SpellDefinitionDraft,
1162    data: &ResolvedGameData,
1163) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1164    Ok(
1165        s
1166            .apply_base_from_data(data, 381_748)?
1167            .applies_inferred_aura(AURA_BLESSING_OF_THE_BRONZE, 381_748)
1168            .apply_aoe_from_data(data),
1169    )
1170}
1171fn spell_deep_breath(
1172    s: SpellDefinitionDraft,
1173    data: &ResolvedGameData,
1174) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1175    Ok(
1176        s
1177            .apply_base_from_data(data, 357_210)?
1178            .apply_aoe_from_data(data)
1179            .on_cast(crate::hooks::devastation_evoker::deep_breath_hook),
1180    )
1181}
1182pub(crate) fn build_combat_system_draft(
1183    params: &wowlab_engine_ports::HandlerParams<'_>,
1184) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1185    let builder = CombatSystemBuilder::new(params.stats.clone())
1186        .spec_id(SpecId::Devastation)
1187        .spec_identity(
1188            wowlab_engine_combat::generated_identities::specs::devastation_evoker::PROOF,
1189        )
1190        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1191        .effect_identities(
1192            wowlab_engine_combat::generated_identities::specs::devastation_evoker::damage::ALL,
1193        )
1194        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1195        .mastery_spell(362_980)
1196        .mastery_hook(crate::hooks::devastation_evoker::mastery)
1197        .resource(
1198            "essence",
1199            params
1200                .game_data
1201                .power_max(19)
1202                .ok_or_else(|| {
1203                    wowlab_engine_ports::EngineError::spec_construction(
1204                        "missing power-type power_max for type_id 19",
1205                    )
1206                })?,
1207            0.2,
1208        )
1209        .resource_type_id(19)
1210        .resource_start(
1211            params
1212                .game_data
1213                .power_default(19)
1214                .ok_or_else(|| {
1215                    wowlab_engine_ports::EngineError::spec_construction(
1216                        "missing power-type power_default for type_id 19",
1217                    )
1218                })?,
1219        )
1220        .aura("dragonrage", AURA::DRAGONRAGE, |a| aura_dragonrage(a, &params.game_data))
1221        .aura(
1222            "essence_burst",
1223            AURA::ESSENCE_BURST,
1224            |a| aura_essence_burst(a, &params.game_data),
1225        )
1226        .aura("burnout", AURA::BURNOUT, |a| aura_burnout(a, &params.game_data))
1227        .aura(
1228            "charged_blast",
1229            AURA::CHARGED_BLAST,
1230            |a| aura_charged_blast(a, &params.game_data),
1231        )
1232        .aura(
1233            "iridescence_blue",
1234            AURA::IRIDESCENCE_BLUE,
1235            |a| aura_iridescence_blue(a, &params.game_data),
1236        )
1237        .aura(
1238            "iridescence_red",
1239            AURA::IRIDESCENCE_RED,
1240            |a| aura_iridescence_red(a, &params.game_data),
1241        )
1242        .aura(
1243            "leaping_flames",
1244            AURA::LEAPING_FLAMES,
1245            |a| aura_leaping_flames(a, &params.game_data),
1246        )
1247        .aura(
1248            "ancient_flame",
1249            AURA::ANCIENT_FLAME,
1250            |a| aura_ancient_flame(a, &params.game_data),
1251        )
1252        .aura(
1253            "tip_the_scales",
1254            AURA::TIP_THE_SCALES,
1255            |a| aura_tip_the_scales(a, &params.game_data),
1256        )
1257        .aura(
1258            "power_swell",
1259            AURA::POWER_SWELL,
1260            |a| aura_power_swell(a, &params.game_data),
1261        )
1262        .aura(
1263            "imminent_destruction",
1264            AURA::IMMINENT_DESTRUCTION,
1265            |a| aura_imminent_destruction(a, &params.game_data),
1266        )
1267        .aura(
1268            "fire_breath",
1269            AURA::FIRE_BREATH,
1270            |a| aura_fire_breath(a, &params.game_data),
1271        )
1272        .aura(
1273            "consume_flame",
1274            AURA::CONSUME_FLAME,
1275            |a| aura_consume_flame(a, &params.game_data),
1276        )
1277        .aura(
1278            "azure_sweep",
1279            AURA::AZURE_SWEEP,
1280            |a| aura_azure_sweep(a, &params.game_data),
1281        )
1282        .aura("recall", AURA::RECALL, |a| aura_recall(a, &params.game_data))
1283        .aura(
1284            "blessing_of_the_bronze",
1285            AURA::BLESSING_OF_THE_BRONZE,
1286            |a| aura_blessing_of_the_bronze(a, &params.game_data),
1287        )
1288        .aura(
1289            "rising_fury",
1290            AURA::RISING_FURY,
1291            |a| aura_rising_fury(a, &params.game_data),
1292        )
1293        .aura(
1294            "unbound_flame",
1295            AURA::UNBOUND_FLAME,
1296            |a| aura_unbound_flame(a, &params.game_data),
1297        )
1298        .aura(
1299            "deep_breath_trigger",
1300            AURA::DEEP_BREATH_TRIGGER,
1301            |a| aura_deep_breath_trigger(a, &params.game_data),
1302        )
1303        .aura(
1304            "melt_armor_dot",
1305            AURA::MELT_ARMOR_DOT,
1306            |a| aura_melt_armor_dot(a, &params.game_data),
1307        )
1308        .aura(
1309            "strafing_run",
1310            AURA::STRAFING_RUN,
1311            |a| aura_strafing_run(a, &params.game_data),
1312        )
1313        .aura(
1314            "bombardments",
1315            AURA::BOMBARDMENTS,
1316            |a| aura_bombardments(a, &params.game_data),
1317        )
1318        .aura(
1319            "mass_disintegrate",
1320            AURA::MASS_DISINTEGRATE,
1321            |a| aura_mass_disintegrate(a, &params.game_data),
1322        )
1323        .spell(
1324            "living_flame",
1325            SPELL::LIVING_FLAME,
1326            |s| spell_living_flame(s, &params.game_data),
1327        )
1328        .spell(
1329            "azure_strike",
1330            SPELL::AZURE_STRIKE,
1331            |s| spell_azure_strike(s, &params.game_data),
1332        )
1333        .spell(
1334            "disintegrate",
1335            SPELL::DISINTEGRATE,
1336            |s| spell_disintegrate(s, &params.game_data),
1337        )
1338        .spell(
1339            "fire_breath",
1340            SPELL::FIRE_BREATH,
1341            |s| spell_fire_breath(s, &params.game_data),
1342        )
1343        .spell(
1344            "eternity_surge",
1345            SPELL::ETERNITY_SURGE,
1346            |s| spell_eternity_surge(s, &params.game_data),
1347        )
1348        .spell("pyre", SPELL::PYRE, |s| spell_pyre(s, &params.game_data))
1349        .spell(
1350            "dragonrage",
1351            SPELL::DRAGONRAGE,
1352            |s| spell_dragonrage(s, &params.game_data),
1353        )
1354        .spell(
1355            "unbound_flame",
1356            SPELL::UNBOUND_FLAME,
1357            |s| spell_unbound_flame(s, &params.game_data),
1358        )
1359        .spell(
1360            "tip_the_scales",
1361            SPELL::TIP_THE_SCALES,
1362            |s| spell_tip_the_scales(s, &params.game_data),
1363        )
1364        .spell(
1365            "scintillation",
1366            SPELL::SCINTILLATION,
1367            |s| spell_scintillation(s, &params.game_data),
1368        )
1369        .spell(
1370            "shattering_star",
1371            SPELL::SHATTERING_STAR,
1372            |s| spell_shattering_star(s, &params.game_data),
1373        )
1374        .spell(
1375            "blessing_of_the_bronze",
1376            SPELL::BLESSING_OF_THE_BRONZE,
1377            |s| spell_blessing_of_the_bronze(s, &params.game_data),
1378        )
1379        .spell(
1380            "deep_breath",
1381            SPELL::DEEP_BREATH,
1382            |s| spell_deep_breath(s, &params.game_data),
1383        )
1384        .game_data(params.game_data.clone())
1385        .talent_spell_ids(TALENTS)
1386        .talent_selections(params.talent_selections)
1387        .set_bonus_auras(params.set_bonus_auras)
1388        .encounter(params.encounter.clone());
1389    let builder = crate::generated::items::register_equipped(
1390        builder,
1391        &params.game_data,
1392        params.equipped_items,
1393    )?;
1394
1395    builder.into_draft()
1396}
1397fn new_handler(
1398    params: wowlab_engine_ports::HandlerParams<'_>,
1399) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1400    let handler = crate::composition::compose_handler(
1401        build_combat_system_draft,
1402        &params,
1403        crate::hooks::devastation_evoker::DevastationHandler::new,
1404    )?;
1405
1406    Ok(Box::new(handler))
1407}
1408static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1409    primary_resource: ResourceType::Essence,
1410    secondary_resource: None,
1411    spell_ids: DECLARED_SPELL_IDS,
1412    aura_ids: DECLARED_AURA_IDS,
1413    server_proc_entries: &[
1414        DeclaredServerProcEntry {
1415            spell_id: 359_618,
1416            attributes: ProcAttributes::REQUIRE_SPELL_MODIFIER.bits()
1417                | ProcAttributes::USE_STACKS_FOR_CHARGES.bits(),
1418        },
1419        DeclaredServerProcEntry {
1420            spell_id: 375_802,
1421            attributes: ProcAttributes::REQUIRE_SPELL_MODIFIER.bits()
1422                | ProcAttributes::USE_STACKS_FOR_CHARGES.bits(),
1423        },
1424    ],
1425    talents: TALENTS,
1426    rotation_field_schema: &[],
1427    metrics_plugin_id: None,
1428    hero_talent_trees: &[
1429        HeroTalentTreeDesc {
1430            name: "Flameshaper",
1431            spells: HERO_TREE_FLAMESHAPER_SPELLS,
1432            auras: HERO_TREE_FLAMESHAPER_AURAS,
1433        },
1434        HeroTalentTreeDesc {
1435            name: "Chronowarden",
1436            spells: HERO_TREE_CHRONOWARDEN_SPELLS,
1437            auras: HERO_TREE_CHRONOWARDEN_AURAS,
1438        },
1439        HeroTalentTreeDesc {
1440            name: "Scalecommander",
1441            spells: HERO_TREE_SCALECOMMANDER_SPELLS,
1442            auras: HERO_TREE_SCALECOMMANDER_AURAS,
1443        },
1444    ],
1445    reported_spells: REPORTED_SPELLS,
1446    masked_passive_effects: &[],
1447    passive_effect_overrides: &[],
1448};
1449pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1450    spec_id: SpecId::Devastation,
1451    display_name: "Devastation Evoker",
1452    metadata: DECLARED_METADATA,
1453    handler_factory: new_handler,
1454};
1455wowlab_engine_combat::smoke_test!(build_combat_system_draft);