Skip to main content

wowlab_engine_content/generated/specs/
demonology_warlock.rs

1//! @generated by codegen-cli from manifests/specs/warlock/demonology/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/686>
15    pub(crate) const SHADOW_BOLT: u32 = 686;
16    ///<https://wowlab.gg/inspect/spell/264178>
17    pub(crate) const DEMONBOLT: u32 = 264_178;
18    ///<https://wowlab.gg/inspect/spell/105174>
19    pub(crate) const HAND_OF_GULDAN: u32 = 105_174;
20    ///<https://wowlab.gg/inspect/spell/334581>
21    pub(crate) const POWER_SIPHON: u32 = 334_581;
22    ///<https://wowlab.gg/inspect/spell/234153>
23    pub(crate) const DRAIN_LIFE: u32 = 234_153;
24    ///<https://wowlab.gg/inspect/spell/30146>
25    pub(crate) const SUMMON_FELGUARD: u32 = 30146;
26    ///<https://wowlab.gg/inspect/spell/691>
27    pub(crate) const SUMMON_FELHUNTER: u32 = 691;
28    ///<https://wowlab.gg/inspect/spell/688>
29    pub(crate) const SUMMON_IMP: u32 = 688;
30    ///<https://wowlab.gg/inspect/spell/104316>
31    pub(crate) const CALL_DREADSTALKERS: u32 = 104_316;
32    ///<https://wowlab.gg/inspect/spell/265187>
33    pub(crate) const SUMMON_DEMONIC_TYRANT: u32 = 265_187;
34    ///<https://wowlab.gg/inspect/spell/264119>
35    pub(crate) const SUMMON_VILEFIEND: u32 = 264_119;
36    ///<https://wowlab.gg/inspect/spell/196277>
37    pub(crate) const IMPLOSION: u32 = 196_277;
38    ///<https://wowlab.gg/inspect/spell/1276452>
39    pub(crate) const GRIMOIRE_IMP_LORD: u32 = 1_276_452;
40    ///<https://wowlab.gg/inspect/spell/1276467>
41    pub(crate) const GRIMOIRE_FEL_RAVAGER: u32 = 1_276_467;
42    ///<https://wowlab.gg/inspect/spell/1276672>
43    pub(crate) const SUMMON_DOOMGUARD: u32 = 1_276_672;
44    ///<https://wowlab.gg/inspect/spell/434506>
45    pub(crate) const INFERNAL_BOLT: u32 = 434_506;
46    ///<https://wowlab.gg/inspect/spell/434635>
47    pub(crate) const RUINATION: u32 = 434_635;
48}
49pub(crate) mod AURA {
50    ///<https://wowlab.gg/inspect/spell/264173>
51    pub(crate) const DEMONIC_CORE: u32 = 264_173;
52    ///<https://wowlab.gg/inspect/spell/386194>
53    pub(crate) const CARNIVOROUS_STALKERS_TALENT: u32 = 386_194;
54    ///<https://wowlab.gg/inspect/spell/334581>
55    pub(crate) const POWER_SIPHON: u32 = 334_581;
56    ///<https://wowlab.gg/inspect/spell/460553>
57    pub(crate) const DOOM: u32 = 460_553;
58    ///<https://wowlab.gg/inspect/spell/1276767>
59    pub(crate) const TYRANTS_OBLATION: u32 = 1_276_767;
60    ///<https://wowlab.gg/inspect/spell/1281559>
61    pub(crate) const HELLBENT_COMMANDER: u32 = 1_281_559;
62    ///<https://wowlab.gg/inspect/spell/267216>
63    pub(crate) const INNER_DEMONS: u32 = 267_216;
64    ///<https://wowlab.gg/inspect/spell/1276166>
65    pub(crate) const DOMINION_OF_ARGUS: u32 = 1_276_166;
66    ///<https://wowlab.gg/inspect/spell/449793>
67    pub(crate) const SUCCULENT_SOUL: u32 = 449_793;
68    ///<https://wowlab.gg/inspect/spell/1269042>
69    pub(crate) const MANIFESTED_DEMONIC_SOUL: u32 = 1_269_042;
70    ///<https://wowlab.gg/inspect/spell/196099>
71    pub(crate) const GRIMOIRE_OF_SACRIFICE: u32 = 196_099;
72    ///<https://wowlab.gg/inspect/spell/104317>
73    pub(crate) const WILD_IMPS: u32 = 104_317;
74    ///<https://wowlab.gg/inspect/spell/193332>
75    pub(crate) const DREADSTALKERS: u32 = 193_332;
76    ///<https://wowlab.gg/inspect/spell/462599>
77    pub(crate) const TRACK_PETS: u32 = 462_599;
78    ///<https://wowlab.gg/inspect/spell/453699>
79    pub(crate) const FLAMETOUCHED_TALENT: u32 = 453_699;
80    ///<https://wowlab.gg/inspect/spell/433891>
81    pub(crate) const INFERNAL_BOLT: u32 = 433_891;
82    ///<https://wowlab.gg/inspect/spell/433885>
83    pub(crate) const RUINATION: u32 = 433_885;
84    ///<https://wowlab.gg/inspect/spell/428514>
85    pub(crate) const DIABOLIC_RITUAL_TALENT: u32 = 428_514;
86    ///<https://wowlab.gg/inspect/spell/431944>
87    pub(crate) const DIABOLIC_RITUAL_OVERLORD: u32 = 431_944;
88    ///<https://wowlab.gg/inspect/spell/432815>
89    pub(crate) const DIABOLIC_RITUAL_MOTHER: u32 = 432_815;
90    ///<https://wowlab.gg/inspect/spell/432816>
91    pub(crate) const DIABOLIC_RITUAL_PIT_LORD: u32 = 432_816;
92    ///<https://wowlab.gg/inspect/spell/428524>
93    pub(crate) const DEMONIC_ART_OVERLORD: u32 = 428_524;
94    ///<https://wowlab.gg/inspect/spell/432794>
95    pub(crate) const DEMONIC_ART_MOTHER: u32 = 432_794;
96    ///<https://wowlab.gg/inspect/spell/432795>
97    pub(crate) const DEMONIC_ART_PIT_LORD: u32 = 432_795;
98    ///<https://wowlab.gg/inspect/spell/1269643>
99    pub(crate) const DEMONIC_OCULI: u32 = 1_269_643;
100    ///<https://wowlab.gg/inspect/spell/1268709>
101    pub(crate) const DIABOLIC_OCULI_TALENT: u32 = 1_268_709;
102    ///<https://wowlab.gg/inspect/spell/1268713>
103    pub(crate) const LOOKS_THAT_KILL_TALENT: u32 = 1_268_713;
104    ///<https://wowlab.gg/inspect/spell/1268716>
105    pub(crate) const MINDS_EYES_TALENT: u32 = 1_268_716;
106    ///<https://wowlab.gg/inspect/spell/1269879>
107    pub(crate) const MINDS_EYES: u32 = 1_269_879;
108    ///<https://wowlab.gg/inspect/spell/456323>
109    pub(crate) const ABYSSAL_DOMINION: u32 = 456_323;
110    ///<https://wowlab.gg/inspect/spell/429581>
111    pub(crate) const ABYSSAL_DOMINION_TALENT: u32 = 429_581;
112    ///<https://wowlab.gg/inspect/spell/434424>
113    pub(crate) const CLOVEN_SOUL: u32 = 434_424;
114}
115pub(crate) mod TALENT {
116    ///<https://wowlab.gg/inspect/spell/429581>
117    pub(crate) const ABYSSAL_DOMINION_TALENT: u32 = 429_581;
118    ///<https://wowlab.gg/inspect/spell/1250921>
119    pub(crate) const ANTORAN_ARMAMENTS: u32 = 1_250_921;
120    ///<https://wowlab.gg/inspect/spell/1276956>
121    pub(crate) const BLIGHTED_MAW: u32 = 1_276_956;
122    ///<https://wowlab.gg/inspect/spell/104316>
123    pub(crate) const CALL_DREADSTALKERS: u32 = 104_316;
124    ///<https://wowlab.gg/inspect/spell/386194>
125    pub(crate) const CARNIVOROUS_STALKERS: u32 = 386_194;
126    ///<https://wowlab.gg/inspect/spell/426115>
127    pub(crate) const DEMONIAC: u32 = 426_115;
128    ///<https://wowlab.gg/inspect/spell/453908>
129    pub(crate) const DEMONIC_BRUTALITY: u32 = 453_908;
130    ///<https://wowlab.gg/inspect/spell/1276947>
131    pub(crate) const DEMONIC_CALLING: u32 = 1_276_947;
132    ///<https://wowlab.gg/inspect/spell/386185>
133    pub(crate) const DEMONIC_KNOWLEDGE: u32 = 386_185;
134    ///<https://wowlab.gg/inspect/spell/1268709>
135    pub(crate) const DIABOLIC_OCULI: u32 = 1_268_709;
136    ///<https://wowlab.gg/inspect/spell/428514>
137    pub(crate) const DIABOLIC_RITUAL: u32 = 428_514;
138    ///<https://wowlab.gg/inspect/spell/1276163>
139    pub(crate) const DOMINION_OF_ARGUS: u32 = 1_276_163;
140    ///<https://wowlab.gg/inspect/spell/1276190>
141    pub(crate) const DOMINION_OF_ARGUS_2: u32 = 1_276_190;
142    ///<https://wowlab.gg/inspect/spell/1276222>
143    pub(crate) const DOMINION_OF_ARGUS_3: u32 = 1_276_222;
144    ///<https://wowlab.gg/inspect/spell/460551>
145    pub(crate) const DOOM: u32 = 460_551;
146    ///<https://wowlab.gg/inspect/spell/264078>
147    pub(crate) const DREADLASH: u32 = 264_078;
148    ///<https://wowlab.gg/inspect/spell/453699>
149    pub(crate) const FLAMETOUCHED: u32 = 453_699;
150    ///<https://wowlab.gg/inspect/spell/429899>
151    pub(crate) const GLOOM_OF_NATHREZA: u32 = 429_899;
152    ///<https://wowlab.gg/inspect/spell/1276467>
153    pub(crate) const GRIMOIRE_FEL_RAVAGER: u32 = 1_276_467;
154    ///<https://wowlab.gg/inspect/spell/1276452>
155    pub(crate) const GRIMOIRE_IMP_LORD: u32 = 1_276_452;
156    ///<https://wowlab.gg/inspect/spell/1250273>
157    pub(crate) const HAND_OF_GULDAN: u32 = 1_250_273;
158    ///<https://wowlab.gg/inspect/spell/1250897>
159    pub(crate) const HELLBENT_COMMANDER: u32 = 1_250_897;
160    ///<https://wowlab.gg/inspect/spell/196277>
161    pub(crate) const IMPLOSION: u32 = 196_277;
162    ///<https://wowlab.gg/inspect/spell/1250768>
163    pub(crate) const IMP_GANG_BOSS: u32 = 1_250_768;
164    ///<https://wowlab.gg/inspect/spell/1263941>
165    pub(crate) const INFERNAL_RAPIDITY: u32 = 1_263_941;
166    ///<https://wowlab.gg/inspect/spell/267216>
167    pub(crate) const INNER_DEMONS: u32 = 267_216;
168    ///<https://wowlab.gg/inspect/spell/1268713>
169    pub(crate) const LOOKS_THAT_KILL: u32 = 1_268_713;
170    ///<https://wowlab.gg/inspect/spell/455449>
171    pub(crate) const MARK_OF_SHATUG: u32 = 455_449;
172    ///<https://wowlab.gg/inspect/spell/1268716>
173    pub(crate) const MINDS_EYES: u32 = 1_268_716;
174    ///<https://wowlab.gg/inspect/spell/264130>
175    pub(crate) const POWER_SIPHON: u32 = 264_130;
176    ///<https://wowlab.gg/inspect/spell/1276748>
177    pub(crate) const REIGN_OF_TYRANNY: u32 = 1_276_748;
178    ///<https://wowlab.gg/inspect/spell/267214>
179    pub(crate) const SACRIFICED_SOULS: u32 = 267_214;
180    ///<https://wowlab.gg/inspect/spell/428394>
181    pub(crate) const SPITEFUL_RECONSTITUTION: u32 = 428_394;
182    ///<https://wowlab.gg/inspect/spell/265187>
183    pub(crate) const SUMMON_DEMONIC_TYRANT: u32 = 265_187;
184    ///<https://wowlab.gg/inspect/spell/1276672>
185    pub(crate) const SUMMON_DOOMGUARD: u32 = 1_276_672;
186    ///<https://wowlab.gg/inspect/spell/1251778>
187    pub(crate) const SUMMON_VILEFIEND: u32 = 1_251_778;
188    ///<https://wowlab.gg/inspect/spell/264119>
189    pub(crate) const SUMMON_VILEFIEND_CASTABLE: u32 = 264_119;
190    ///<https://wowlab.gg/inspect/spell/1281511>
191    pub(crate) const TO_HELL_AND_BACK: u32 = 1_281_511;
192    ///<https://wowlab.gg/inspect/spell/1276746>
193    pub(crate) const TYRANTS_OBLATION: u32 = 1_276_746;
194}
195pub(crate) mod SET_BONUS {
196    ///<https://wowlab.gg/inspect/spell/1296573>
197    pub(crate) const MID2_DEMONOLOGY_2PC: u32 = 1_296_573;
198    ///<https://wowlab.gg/inspect/spell/1296574>
199    pub(crate) const MID2_DEMONOLOGY_4PC: u32 = 1_296_574;
200}
201pub(crate) mod REPORTED_SPELL {
202    ///<https://wowlab.gg/inspect/spell/1276283>
203    pub(crate) const ANTORAN_INQUISITOR: u32 = 1_276_283;
204    ///<https://wowlab.gg/inspect/spell/1276182>
205    pub(crate) const ANTORAN_JAILER: u32 = 1_276_182;
206    ///<https://wowlab.gg/inspect/spell/267997>
207    pub(crate) const BILE_SPIT: u32 = 267_997;
208    ///<https://wowlab.gg/inspect/spell/1282534>
209    pub(crate) const BLAZE_MISSILE: u32 = 1_282_534;
210    ///<https://wowlab.gg/inspect/spell/1276960>
211    pub(crate) const BLIGHTED_MAW: u32 = 1_276_960;
212    ///<https://wowlab.gg/inspect/spell/1264093>
213    pub(crate) const BURNING_CLEAVE: u32 = 1_264_093;
214    ///<https://wowlab.gg/inspect/spell/432596>
215    pub(crate) const CHAOS_SALVO: u32 = 432_596;
216    ///<https://wowlab.gg/inspect/spell/1269892>
217    pub(crate) const DIABOLIC_GAZE_1: u32 = 1_269_892;
218    ///<https://wowlab.gg/inspect/spell/1269886>
219    pub(crate) const DIABOLIC_GAZE_2: u32 = 1_269_886;
220    ///<https://wowlab.gg/inspect/spell/1269885>
221    pub(crate) const DIABOLIC_GAZE_3: u32 = 1_269_885;
222    ///<https://wowlab.gg/inspect/spell/271971>
223    pub(crate) const DREADBITE: u32 = 271_971;
224    ///<https://wowlab.gg/inspect/spell/193332>
225    pub(crate) const DREADSTALKER_MELEE: u32 = 193_332;
226    ///<https://wowlab.gg/inspect/spell/1269800>
227    pub(crate) const EYE_EXPLOSION: u32 = 1_269_800;
228    ///<https://wowlab.gg/inspect/spell/434404>
229    pub(crate) const FELSEEKER: u32 = 434_404;
230    ///<https://wowlab.gg/inspect/spell/89753>
231    pub(crate) const FELSTORM: u32 = 89753;
232    ///<https://wowlab.gg/inspect/spell/104318>
233    pub(crate) const FEL_FIREBOLT: u32 = 104_318;
234    ///<https://wowlab.gg/inspect/spell/455491>
235    pub(crate) const GLOOM_SLASH: u32 = 455_491;
236    ///<https://wowlab.gg/inspect/spell/1282502>
237    pub(crate) const GRAND_WARLOCK_ALYTHESS: u32 = 1_282_502;
238    ///<https://wowlab.gg/inspect/spell/86040>
239    pub(crate) const HAND_OF_GULDAN_IMPACT: u32 = 86040;
240    ///<https://wowlab.gg/inspect/spell/267999>
241    pub(crate) const HEADBUTT: u32 = 267_999;
242    ///<https://wowlab.gg/inspect/spell/1306077>
243    pub(crate) const ISOLATED_IMPLOSION: u32 = 1_306_077;
244    ///<https://wowlab.gg/inspect/spell/1309535>
245    pub(crate) const ISOLATED_IMPLOSION_DRIVER: u32 = 1_309_535;
246    ///<https://wowlab.gg/inspect/spell/1282501>
247    pub(crate) const LADY_SACROLASH: u32 = 1_282_501;
248    ///<https://wowlab.gg/inspect/spell/30213>
249    pub(crate) const LEGION_STRIKE: u32 = 30213;
250    ///<https://wowlab.gg/inspect/spell/1280460>
251    pub(crate) const MIND_SEAR_CHANNEL: u32 = 1_280_460;
252    ///<https://wowlab.gg/inspect/spell/1282507>
253    pub(crate) const SHADOW_NOVA: u32 = 1_282_507;
254    ///<https://wowlab.gg/inspect/spell/1292391>
255    pub(crate) const SOUL_BARRAGE_CAST: u32 = 1_292_391;
256    ///<https://wowlab.gg/inspect/spell/1281512>
257    pub(crate) const UNSTABLE_GANG_BOSS: u32 = 1_281_512;
258    ///<https://wowlab.gg/inspect/spell/1251781>
259    pub(crate) const VILEFIEND: u32 = 1_251_781;
260    ///<https://wowlab.gg/inspect/spell/432120>
261    pub(crate) const WICKED_CLEAVE: u32 = 432_120;
262}
263pub(crate) mod HERO {
264    pub(crate) mod SOUL_HARVESTER {
265        pub(crate) mod SPELL {
266            ///<https://wowlab.gg/inspect/spell/449801>
267            pub(crate) const DEMONIC_SOUL_DAMAGE: u32 = 449_801;
268            ///<https://wowlab.gg/inspect/spell/449858>
269            pub(crate) const SHADOW_OF_DEATH_ENERGIZE: u32 = 449_858;
270            ///<https://wowlab.gg/inspect/spell/450591>
271            pub(crate) const SHARED_FATE: u32 = 450_591;
272            ///<https://wowlab.gg/inspect/spell/450538>
273            pub(crate) const SOUL_ANATHEMA: u32 = 450_538;
274            ///<https://wowlab.gg/inspect/spell/449826>
275            pub(crate) const WICKED_REAPING: u32 = 449_826;
276        }
277        pub(crate) mod AURA {
278            ///<https://wowlab.gg/inspect/spell/1269042>
279            pub(crate) const MANIFESTED_DEMONIC_SOUL: u32 = 1_269_042;
280            ///<https://wowlab.gg/inspect/spell/449793>
281            pub(crate) const SUCCULENT_SOUL: u32 = 449_793;
282        }
283    }
284    pub(crate) mod DIABOLIST {
285        pub(crate) mod SPELL {
286            ///<https://wowlab.gg/inspect/spell/434506>
287            pub(crate) const INFERNAL_BOLT: u32 = 434_506;
288            ///<https://wowlab.gg/inspect/spell/434635>
289            pub(crate) const RUINATION: u32 = 434_635;
290            ///<https://wowlab.gg/inspect/spell/434636>
291            pub(crate) const RUINATION_IMPACT: u32 = 434_636;
292        }
293        pub(crate) mod AURA {
294            ///<https://wowlab.gg/inspect/spell/456323>
295            pub(crate) const ABYSSAL_DOMINION: u32 = 456_323;
296            ///<https://wowlab.gg/inspect/spell/434424>
297            pub(crate) const CLOVEN_SOUL: u32 = 434_424;
298            ///<https://wowlab.gg/inspect/spell/432794>
299            pub(crate) const DEMONIC_ART_MOTHER: u32 = 432_794;
300            ///<https://wowlab.gg/inspect/spell/428524>
301            pub(crate) const DEMONIC_ART_OVERLORD: u32 = 428_524;
302            ///<https://wowlab.gg/inspect/spell/432795>
303            pub(crate) const DEMONIC_ART_PIT_LORD: u32 = 432_795;
304            ///<https://wowlab.gg/inspect/spell/1269643>
305            pub(crate) const DEMONIC_OCULI: u32 = 1_269_643;
306            ///<https://wowlab.gg/inspect/spell/432815>
307            pub(crate) const DIABOLIC_RITUAL_MOTHER: u32 = 432_815;
308            ///<https://wowlab.gg/inspect/spell/431944>
309            pub(crate) const DIABOLIC_RITUAL_OVERLORD: u32 = 431_944;
310            ///<https://wowlab.gg/inspect/spell/432816>
311            pub(crate) const DIABOLIC_RITUAL_PIT_LORD: u32 = 432_816;
312            ///<https://wowlab.gg/inspect/spell/433891>
313            pub(crate) const INFERNAL_BOLT_BUFF: u32 = 433_891;
314            ///<https://wowlab.gg/inspect/spell/1269879>
315            pub(crate) const MINDS_EYES: u32 = 1_269_879;
316            ///<https://wowlab.gg/inspect/spell/433885>
317            pub(crate) const RUINATION_BUFF: u32 = 433_885;
318        }
319    }
320}
321static HERO_TREE_SOUL_HARVESTER_SPELLS: &[(&str, u32)] = &[
322    ("DEMONIC_SOUL_DAMAGE", 449_801),
323    ("SHADOW_OF_DEATH_ENERGIZE", 449_858),
324    ("SHARED_FATE", 450_591),
325    ("SOUL_ANATHEMA", 450_538),
326    ("WICKED_REAPING", 449_826),
327];
328static HERO_TREE_SOUL_HARVESTER_AURAS: &[(&str, u32)] = &[
329    ("MANIFESTED_DEMONIC_SOUL", 1_269_042),
330    ("SUCCULENT_SOUL", 449_793),
331];
332static HERO_TREE_DIABOLIST_SPELLS: &[(&str, u32)] = &[
333    ("INFERNAL_BOLT", 434_506),
334    ("RUINATION", 434_635),
335    ("RUINATION_IMPACT", 434_636),
336];
337static HERO_TREE_DIABOLIST_AURAS: &[(&str, u32)] = &[
338    ("ABYSSAL_DOMINION", 456_323),
339    ("CLOVEN_SOUL", 434_424),
340    ("DEMONIC_ART_MOTHER", 432_794),
341    ("DEMONIC_ART_OVERLORD", 428_524),
342    ("DEMONIC_ART_PIT_LORD", 432_795),
343    ("DEMONIC_OCULI", 1_269_643),
344    ("DIABOLIC_RITUAL_MOTHER", 432_815),
345    ("DIABOLIC_RITUAL_OVERLORD", 431_944),
346    ("DIABOLIC_RITUAL_PIT_LORD", 432_816),
347    ("INFERNAL_BOLT_BUFF", 433_891),
348    ("MINDS_EYES", 1_269_879),
349    ("RUINATION_BUFF", 433_885),
350];
351pub(crate) mod DAMAGE_SPELL {
352    pub(crate) const SHADOW_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_686;
353    pub(crate) const DEMONBOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_264178;
354    pub(crate) const HAND_OF_GULDAN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_105174;
355    pub(crate) const POWER_SIPHON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_334581;
356    pub(crate) const DRAIN_LIFE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_234153;
357    pub(crate) const SUMMON_FELGUARD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_30146;
358    pub(crate) const SUMMON_FELHUNTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_691;
359    pub(crate) const SUMMON_IMP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_688;
360    pub(crate) const CALL_DREADSTALKERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_104316;
361    pub(crate) const SUMMON_DEMONIC_TYRANT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_265187;
362    pub(crate) const SUMMON_VILEFIEND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_264119;
363    pub(crate) const IMPLOSION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_196277;
364    pub(crate) const GRIMOIRE_IMP_LORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276452;
365    pub(crate) const GRIMOIRE_FEL_RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276467;
366    pub(crate) const SUMMON_DOOMGUARD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276672;
367    pub(crate) const INFERNAL_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_434506;
368    pub(crate) const RUINATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_434635;
369    pub(crate) const DEMONIC_SOUL_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_449801;
370    pub(crate) const SHADOW_OF_DEATH_ENERGIZE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_449858;
371    pub(crate) const SHARED_FATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_450591;
372    pub(crate) const SOUL_ANATHEMA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_450538;
373    pub(crate) const WICKED_REAPING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_449826;
374    pub(crate) const RUINATION_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_434636;
375}
376pub(crate) mod DAMAGE_AURA {
377    pub(crate) const DEMONIC_CORE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_264173;
378    pub(crate) const CARNIVOROUS_STALKERS_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_386194;
379    pub(crate) const POWER_SIPHON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_334581;
380    pub(crate) const DOOM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_460553;
381    pub(crate) const TYRANTS_OBLATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276767;
382    pub(crate) const HELLBENT_COMMANDER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1281559;
383    pub(crate) const INNER_DEMONS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_267216;
384    pub(crate) const DOMINION_OF_ARGUS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276166;
385    pub(crate) const SUCCULENT_SOUL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_449793;
386    pub(crate) const MANIFESTED_DEMONIC_SOUL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269042;
387    pub(crate) const GRIMOIRE_OF_SACRIFICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_196099;
388    pub(crate) const WILD_IMPS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_104317;
389    pub(crate) const DREADSTALKERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_193332;
390    pub(crate) const TRACK_PETS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_462599;
391    pub(crate) const FLAMETOUCHED_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_453699;
392    pub(crate) const INFERNAL_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_433891;
393    pub(crate) const RUINATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_433885;
394    pub(crate) const DIABOLIC_RITUAL_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_428514;
395    pub(crate) const DIABOLIC_RITUAL_OVERLORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_431944;
396    pub(crate) const DIABOLIC_RITUAL_MOTHER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_432815;
397    pub(crate) const DIABOLIC_RITUAL_PIT_LORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_432816;
398    pub(crate) const DEMONIC_ART_OVERLORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_428524;
399    pub(crate) const DEMONIC_ART_MOTHER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_432794;
400    pub(crate) const DEMONIC_ART_PIT_LORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_432795;
401    pub(crate) const DEMONIC_OCULI: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269643;
402    pub(crate) const DIABOLIC_OCULI_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1268709;
403    pub(crate) const LOOKS_THAT_KILL_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1268713;
404    pub(crate) const MINDS_EYES_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1268716;
405    pub(crate) const MINDS_EYES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269879;
406    pub(crate) const ABYSSAL_DOMINION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_456323;
407    pub(crate) const ABYSSAL_DOMINION_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_429581;
408    pub(crate) const CLOVEN_SOUL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_434424;
409}
410pub(crate) mod DAMAGE_TALENT {
411    pub(crate) const ABYSSAL_DOMINION_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_429581;
412    pub(crate) const ANTORAN_ARMAMENTS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1250921;
413    pub(crate) const BLIGHTED_MAW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276956;
414    pub(crate) const CALL_DREADSTALKERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_104316;
415    pub(crate) const CARNIVOROUS_STALKERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_386194;
416    pub(crate) const DEMONIAC: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_426115;
417    pub(crate) const DEMONIC_BRUTALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_453908;
418    pub(crate) const DEMONIC_CALLING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276947;
419    pub(crate) const DEMONIC_KNOWLEDGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_386185;
420    pub(crate) const DIABOLIC_OCULI: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1268709;
421    pub(crate) const DIABOLIC_RITUAL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_428514;
422    pub(crate) const DOMINION_OF_ARGUS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276163;
423    pub(crate) const DOMINION_OF_ARGUS_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276190;
424    pub(crate) const DOMINION_OF_ARGUS_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276222;
425    pub(crate) const DOOM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_460551;
426    pub(crate) const DREADLASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_264078;
427    pub(crate) const FLAMETOUCHED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_453699;
428    pub(crate) const GLOOM_OF_NATHREZA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_429899;
429    pub(crate) const GRIMOIRE_FEL_RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276467;
430    pub(crate) const GRIMOIRE_IMP_LORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276452;
431    pub(crate) const HAND_OF_GULDAN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1250273;
432    pub(crate) const HELLBENT_COMMANDER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1250897;
433    pub(crate) const IMPLOSION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_196277;
434    pub(crate) const IMP_GANG_BOSS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1250768;
435    pub(crate) const INFERNAL_RAPIDITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1263941;
436    pub(crate) const INNER_DEMONS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_267216;
437    pub(crate) const LOOKS_THAT_KILL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1268713;
438    pub(crate) const MARK_OF_SHATUG: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_455449;
439    pub(crate) const MINDS_EYES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1268716;
440    pub(crate) const POWER_SIPHON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_264130;
441    pub(crate) const REIGN_OF_TYRANNY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276748;
442    pub(crate) const SACRIFICED_SOULS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_267214;
443    pub(crate) const SPITEFUL_RECONSTITUTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_428394;
444    pub(crate) const SUMMON_DEMONIC_TYRANT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_265187;
445    pub(crate) const SUMMON_DOOMGUARD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276672;
446    pub(crate) const SUMMON_VILEFIEND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1251778;
447    pub(crate) const SUMMON_VILEFIEND_CASTABLE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_264119;
448    pub(crate) const TO_HELL_AND_BACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1281511;
449    pub(crate) const TYRANTS_OBLATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276746;
450}
451pub(crate) mod DAMAGE_REPORTED {
452    pub(crate) const ANTORAN_INQUISITOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276283;
453    pub(crate) const ANTORAN_JAILER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276182;
454    pub(crate) const BILE_SPIT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_267997;
455    pub(crate) const BLAZE_MISSILE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1282534;
456    pub(crate) const BLIGHTED_MAW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1276960;
457    pub(crate) const BURNING_CLEAVE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1264093;
458    pub(crate) const CHAOS_SALVO: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_432596;
459    pub(crate) const DIABOLIC_GAZE_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269892;
460    pub(crate) const DIABOLIC_GAZE_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269886;
461    pub(crate) const DIABOLIC_GAZE_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269885;
462    pub(crate) const DREADBITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_271971;
463    pub(crate) const DREADSTALKER_MELEE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_193332;
464    pub(crate) const EYE_EXPLOSION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1269800;
465    pub(crate) const FELSEEKER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_434404;
466    pub(crate) const FELSTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_89753;
467    pub(crate) const FEL_FIREBOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_104318;
468    pub(crate) const GLOOM_SLASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_455491;
469    pub(crate) const GRAND_WARLOCK_ALYTHESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1282502;
470    pub(crate) const HAND_OF_GULDAN_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_86040;
471    pub(crate) const HEADBUTT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_267999;
472    pub(crate) const ISOLATED_IMPLOSION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1306077;
473    pub(crate) const ISOLATED_IMPLOSION_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1309535;
474    pub(crate) const LADY_SACROLASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1282501;
475    pub(crate) const LEGION_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_30213;
476    pub(crate) const MIND_SEAR_CHANNEL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1280460;
477    pub(crate) const SHADOW_NOVA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1282507;
478    pub(crate) const SOUL_BARRAGE_CAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1292391;
479    pub(crate) const UNSTABLE_GANG_BOSS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1281512;
480    pub(crate) const VILEFIEND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_1251781;
481    pub(crate) const WICKED_CLEAVE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ACTION::SPELL_432120;
482}
483pub(crate) mod DAMAGE_EFFECT {
484    pub(crate) const BURNING_CLEAVE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1264093_EFFECT_1;
485    pub(crate) const FEL_FIREBOLT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_104318_EFFECT_1;
486    pub(crate) const SHADOW_NOVA_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1282507_EFFECT_1;
487    pub(crate) const BLAZE_MISSILE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1282534_EFFECT_1;
488    pub(crate) const MIND_SEAR_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1280460_EFFECT_2;
489    pub(crate) const SOUL_BARRAGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1292391_EFFECT_1;
490    pub(crate) const HAND_OF_GULDAN_IMPACT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_86040_EFFECT_1;
491    pub(crate) const BILE_SPIT_DIRECT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_267997_EFFECT_1;
492    pub(crate) const BILE_SPIT_TICK_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_267997_EFFECT_2;
493    pub(crate) const HEADBUTT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_267999_EFFECT_1;
494    pub(crate) const GLOOM_SLASH_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_455491_EFFECT_1;
495    pub(crate) const LEGION_STRIKE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_30213_EFFECT_1;
496    pub(crate) const FELSTORM_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_89753_EFFECT_1;
497    pub(crate) const DREADBITE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_271971_EFFECT_1;
498    pub(crate) const DEMONIC_CORE_IMP_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_267102_EFFECT_1;
499    pub(crate) const IMPLOSION_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_196278_EFFECT_1;
500    pub(crate) const MID2_DEMONOLOGY_2PC_IMP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1296573_EFFECT_1;
501    pub(crate) const MID2_DEMONOLOGY_2PC_IMPLOSION: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1296573_EFFECT_2;
502    pub(crate) const MID2_DEMONOLOGY_4PC_MAIN: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1296574_EFFECT_1;
503    pub(crate) const MID2_DEMONOLOGY_4PC_SECONDARY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1296574_EFFECT_2;
504    pub(crate) const MID2_DEMONOLOGY_4PC_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1296574_EFFECT_3;
505    pub(crate) const WICKED_CLEAVE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_432120_EFFECT_1;
506    pub(crate) const CHAOS_SALVO_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_432596_EFFECT_1;
507    pub(crate) const FELSEEKER_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_434404_EFFECT_1;
508    pub(crate) const EYE_EXPLOSION_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1269800_EFFECT_1;
509    pub(crate) const DIABOLIC_GAZE_1_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1269892_EFFECT_1;
510    pub(crate) const DIABOLIC_GAZE_2_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1269886_EFFECT_1;
511    pub(crate) const DIABOLIC_GAZE_3_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::EFFECT::SPELL_1269885_EFFECT_1;
512}
513pub(crate) const AURA_DEMONIC_CORE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DEMONIC_CORE
514    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
515pub(crate) const AURA_CARNIVOROUS_STALKERS_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_CARNIVOROUS_STALKERS_TALENT
516    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
517pub(crate) const AURA_POWER_SIPHON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_POWER_SIPHON
518    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
519pub(crate) const AURA_DOOM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DOOM
520    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
521pub(crate) const AURA_TYRANTS_OBLATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_TYRANTS_OBLATION
522    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
523pub(crate) const AURA_HELLBENT_COMMANDER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_HELLBENT_COMMANDER
524    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
525pub(crate) const AURA_INNER_DEMONS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_INNER_DEMONS
526    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
527pub(crate) const AURA_DOMINION_OF_ARGUS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DOMINION_OF_ARGUS
528    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
529pub(crate) const AURA_SUCCULENT_SOUL: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_SUCCULENT_SOUL
530    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
531pub(crate) const AURA_MANIFESTED_DEMONIC_SOUL: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_MANIFESTED_DEMONIC_SOUL
532    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
533pub(crate) const AURA_GRIMOIRE_OF_SACRIFICE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_GRIMOIRE_OF_SACRIFICE
534    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
535pub(crate) const AURA_WILD_IMPS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_WILD_IMPS
536    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
537pub(crate) const AURA_DREADSTALKERS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DREADSTALKERS
538    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
539pub(crate) const AURA_TRACK_PETS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_TRACK_PETS
540    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
541pub(crate) const AURA_FLAMETOUCHED_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_FLAMETOUCHED_TALENT
542    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
543pub(crate) const AURA_INFERNAL_BOLT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_INFERNAL_BOLT
544    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
545pub(crate) const AURA_RUINATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_RUINATION
546    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
547pub(crate) const AURA_DIABOLIC_RITUAL_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DIABOLIC_RITUAL_TALENT
548    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
549pub(crate) const AURA_DIABOLIC_RITUAL_OVERLORD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DIABOLIC_RITUAL_OVERLORD
550    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
551pub(crate) const AURA_DIABOLIC_RITUAL_MOTHER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DIABOLIC_RITUAL_MOTHER
552    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
553pub(crate) const AURA_DIABOLIC_RITUAL_PIT_LORD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DIABOLIC_RITUAL_PIT_LORD
554    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
555pub(crate) const AURA_DEMONIC_ART_OVERLORD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DEMONIC_ART_OVERLORD
556    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
557pub(crate) const AURA_DEMONIC_ART_MOTHER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DEMONIC_ART_MOTHER
558    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
559pub(crate) const AURA_DEMONIC_ART_PIT_LORD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DEMONIC_ART_PIT_LORD
560    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
561pub(crate) const AURA_DEMONIC_OCULI: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DEMONIC_OCULI
562    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
563pub(crate) const AURA_DIABOLIC_OCULI_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_DIABOLIC_OCULI_TALENT
564    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
565pub(crate) const AURA_LOOKS_THAT_KILL_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_LOOKS_THAT_KILL_TALENT
566    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
567pub(crate) const AURA_MINDS_EYES_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_MINDS_EYES_TALENT
568    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
569pub(crate) const AURA_MINDS_EYES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_MINDS_EYES
570    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
571pub(crate) const AURA_ABYSSAL_DOMINION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_ABYSSAL_DOMINION
572    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
573pub(crate) const AURA_ABYSSAL_DOMINION_TALENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_ABYSSAL_DOMINION_TALENT
574    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
575pub(crate) const AURA_CLOVEN_SOUL: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::AURA_CLOVEN_SOUL
576    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
577pub(crate) const AURA_COUNT: usize = 32;
578const _: () = assert!(
579    AURA_COUNT == 32, "AURA index ABI: count changed -- update positional hook consumers"
580);
581pub(crate) const SPELL_SHADOW_BOLT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SHADOW_BOLT
582    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
583pub(crate) const SPELL_DEMONBOLT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_DEMONBOLT
584    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
585pub(crate) const SPELL_HAND_OF_GULDAN: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_HAND_OF_GULDAN
586    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
587pub(crate) const SPELL_POWER_SIPHON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_POWER_SIPHON
588    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
589pub(crate) const SPELL_DRAIN_LIFE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_DRAIN_LIFE
590    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
591pub(crate) const SPELL_SUMMON_FELGUARD: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SUMMON_FELGUARD
592    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
593pub(crate) const SPELL_SUMMON_FELHUNTER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SUMMON_FELHUNTER
594    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
595pub(crate) const SPELL_SUMMON_IMP: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SUMMON_IMP
596    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
597pub(crate) const SPELL_CALL_DREADSTALKERS: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_CALL_DREADSTALKERS
598    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
599pub(crate) const SPELL_SUMMON_DEMONIC_TYRANT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SUMMON_DEMONIC_TYRANT
600    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
601pub(crate) const SPELL_SUMMON_VILEFIEND: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SUMMON_VILEFIEND
602    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
603pub(crate) const SPELL_IMPLOSION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_IMPLOSION
604    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
605pub(crate) const SPELL_GRIMOIRE_IMP_LORD: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_GRIMOIRE_IMP_LORD
606    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
607pub(crate) const SPELL_GRIMOIRE_FEL_RAVAGER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_GRIMOIRE_FEL_RAVAGER
608    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
609pub(crate) const SPELL_SUMMON_DOOMGUARD: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_SUMMON_DOOMGUARD
610    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
611pub(crate) const SPELL_INFERNAL_BOLT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_INFERNAL_BOLT
612    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
613pub(crate) const SPELL_RUINATION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::demonology_warlock::SPELL_RUINATION
614    .bind(wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF);
615pub(crate) const SPELL_COUNT: usize = 17;
616const _: () = assert!(
617    SPELL_COUNT == 17,
618    "SPELL index ABI: count changed -- update positional hook consumers"
619);
620pub(crate) mod EFFECT {
621    ///<https://wowlab.gg/inspect/spell/1264093>
622    pub(crate) const BURNING_CLEAVE: (u32, u8) = (1_264_093, 1);
623    ///<https://wowlab.gg/inspect/spell/104318>
624    pub(crate) const FEL_FIREBOLT_DAMAGE: (u32, u8) = (104_318, 1);
625    ///<https://wowlab.gg/inspect/spell/1282507>
626    pub(crate) const SHADOW_NOVA_DAMAGE: (u32, u8) = (1_282_507, 1);
627    ///<https://wowlab.gg/inspect/spell/1282534>
628    pub(crate) const BLAZE_MISSILE_DAMAGE: (u32, u8) = (1_282_534, 1);
629    ///<https://wowlab.gg/inspect/spell/1280460>
630    pub(crate) const MIND_SEAR_DAMAGE: (u32, u8) = (1_280_460, 2);
631    ///<https://wowlab.gg/inspect/spell/1292391>
632    pub(crate) const SOUL_BARRAGE_DAMAGE: (u32, u8) = (1_292_391, 1);
633    ///<https://wowlab.gg/inspect/spell/86040>
634    pub(crate) const HAND_OF_GULDAN_IMPACT_DAMAGE: (u32, u8) = (86040, 1);
635    ///<https://wowlab.gg/inspect/spell/267997>
636    pub(crate) const BILE_SPIT_DIRECT_DAMAGE: (u32, u8) = (267_997, 1);
637    ///<https://wowlab.gg/inspect/spell/267997>
638    pub(crate) const BILE_SPIT_TICK_DAMAGE: (u32, u8) = (267_997, 2);
639    ///<https://wowlab.gg/inspect/spell/267999>
640    pub(crate) const HEADBUTT_DAMAGE: (u32, u8) = (267_999, 1);
641    ///<https://wowlab.gg/inspect/spell/455491>
642    pub(crate) const GLOOM_SLASH_DAMAGE: (u32, u8) = (455_491, 1);
643    ///<https://wowlab.gg/inspect/spell/30213>
644    pub(crate) const LEGION_STRIKE_DAMAGE: (u32, u8) = (30213, 1);
645    ///<https://wowlab.gg/inspect/spell/89753>
646    pub(crate) const FELSTORM_DAMAGE: (u32, u8) = (89753, 1);
647    ///<https://wowlab.gg/inspect/spell/271971>
648    pub(crate) const DREADBITE_DAMAGE: (u32, u8) = (271_971, 1);
649    ///<https://wowlab.gg/inspect/spell/267102>
650    pub(crate) const DEMONIC_CORE_IMP_CHANCE: (u32, u8) = (267_102, 1);
651    ///<https://wowlab.gg/inspect/spell/196278>
652    pub(crate) const IMPLOSION_DAMAGE: (u32, u8) = (196_278, 1);
653    ///<https://wowlab.gg/inspect/spell/1296573>
654    pub(crate) const MID2_DEMONOLOGY_2PC_IMP: (u32, u8) = (1_296_573, 1);
655    ///<https://wowlab.gg/inspect/spell/1296573>
656    pub(crate) const MID2_DEMONOLOGY_2PC_IMPLOSION: (u32, u8) = (1_296_573, 2);
657    ///<https://wowlab.gg/inspect/spell/1296574>
658    pub(crate) const MID2_DEMONOLOGY_4PC_MAIN: (u32, u8) = (1_296_574, 1);
659    ///<https://wowlab.gg/inspect/spell/1296574>
660    pub(crate) const MID2_DEMONOLOGY_4PC_SECONDARY: (u32, u8) = (1_296_574, 2);
661    ///<https://wowlab.gg/inspect/spell/1296574>
662    pub(crate) const MID2_DEMONOLOGY_4PC_CHANCE: (u32, u8) = (1_296_574, 3);
663    ///<https://wowlab.gg/inspect/spell/432120>
664    pub(crate) const WICKED_CLEAVE_DAMAGE: (u32, u8) = (432_120, 1);
665    ///<https://wowlab.gg/inspect/spell/432596>
666    pub(crate) const CHAOS_SALVO_DAMAGE: (u32, u8) = (432_596, 1);
667    ///<https://wowlab.gg/inspect/spell/434404>
668    pub(crate) const FELSEEKER_DAMAGE: (u32, u8) = (434_404, 1);
669    ///<https://wowlab.gg/inspect/spell/1269800>
670    pub(crate) const EYE_EXPLOSION_DAMAGE: (u32, u8) = (1_269_800, 1);
671    ///<https://wowlab.gg/inspect/spell/1269892>
672    pub(crate) const DIABOLIC_GAZE_1_DAMAGE: (u32, u8) = (1_269_892, 1);
673    ///<https://wowlab.gg/inspect/spell/1269886>
674    pub(crate) const DIABOLIC_GAZE_2_DAMAGE: (u32, u8) = (1_269_886, 1);
675    ///<https://wowlab.gg/inspect/spell/1269885>
676    pub(crate) const DIABOLIC_GAZE_3_DAMAGE: (u32, u8) = (1_269_885, 1);
677}
678static REPORTED_SPELLS: &[(&str, u32)] = &[
679    ("antoran_inquisitor", 1_276_283),
680    ("antoran_jailer", 1_276_182),
681    ("bile_spit", 267_997),
682    ("blaze_missile", 1_282_534),
683    ("blighted_maw", 1_276_960),
684    ("burning_cleave", 1_264_093),
685    ("chaos_salvo", 432_596),
686    ("diabolic_gaze_1", 1_269_892),
687    ("diabolic_gaze_2", 1_269_886),
688    ("diabolic_gaze_3", 1_269_885),
689    ("dreadbite", 271_971),
690    ("dreadstalker_melee", 193_332),
691    ("eye_explosion", 1_269_800),
692    ("felseeker", 434_404),
693    ("felstorm", 89753),
694    ("fel_firebolt", 104_318),
695    ("gloom_slash", 455_491),
696    ("grand_warlock_alythess", 1_282_502),
697    ("hand_of_guldan_impact", 86040),
698    ("headbutt", 267_999),
699    ("isolated_implosion", 1_306_077),
700    ("isolated_implosion_driver", 1_309_535),
701    ("lady_sacrolash", 1_282_501),
702    ("legion_strike", 30213),
703    ("mind_sear_channel", 1_280_460),
704    ("shadow_nova", 1_282_507),
705    ("soul_barrage_cast", 1_292_391),
706    ("unstable_gang_boss", 1_281_512),
707    ("vilefiend", 1_251_781),
708    ("wicked_cleave", 432_120),
709];
710static DECLARED_SPELL_IDS: &[u32] = &[
711    686, 264_178, 105_174, 334_581, 234_153, 30146, 691, 688, 104_316, 265_187, 264_119,
712    196_277, 1_276_452, 1_276_467, 1_276_672, 434_506, 434_635, 264_173, 386_194,
713    460_553, 1_276_767, 1_281_559, 267_216, 1_276_166, 449_793, 1_269_042, 196_099,
714    104_317, 193_332, 462_599, 453_699, 433_891, 433_885, 428_514, 431_944, 432_815,
715    432_816, 428_524, 432_794, 432_795, 1_269_643, 1_268_709, 1_268_713, 1_268_716,
716    1_269_879, 456_323, 429_581, 434_424, 1_250_921, 1_276_956, 426_115, 453_908,
717    1_276_947, 386_185, 1_276_163, 1_276_190, 1_276_222, 460_551, 264_078, 429_899,
718    1_250_273, 1_250_897, 1_250_768, 1_263_941, 455_449, 264_130, 1_276_748, 267_214,
719    428_394, 1_251_778, 1_281_511, 1_276_746, 1, 30213, 77219, 86040, 89753, 104_318,
720    196_278, 267_102, 267_997, 267_999, 271_971, 432_120, 432_596, 434_404, 455_491,
721    1_251_781, 1_264_093, 1_269_800, 1_269_885, 1_269_886, 1_269_892, 1_276_182,
722    1_276_283, 1_276_960, 1_280_460, 1_281_512, 1_282_501, 1_282_502, 1_282_507,
723    1_282_534, 1_292_391, 1_296_573, 1_296_574, 1_306_077, 1_309_535, 449_801, 449_858,
724    450_591, 450_538, 449_826, 434_636,
725];
726static DECLARED_AURA_IDS: &[u32] = &[
727    264_173, 386_194, 334_581, 460_553, 1_276_767, 1_281_559, 267_216, 1_276_166,
728    449_793, 1_269_042, 196_099, 104_317, 193_332, 462_599, 453_699, 433_891, 433_885,
729    428_514, 431_944, 432_815, 432_816, 428_524, 432_794, 432_795, 1_269_643, 1_268_709,
730    1_268_713, 1_268_716, 1_269_879, 456_323, 429_581, 434_424, 1_269_042, 449_793,
731    456_323, 434_424, 432_794, 428_524, 432_795, 1_269_643, 432_815, 431_944, 432_816,
732    433_891, 1_269_879, 433_885,
733];
734static TALENTS: &[(&str, u32)] = &[
735    ("ABYSSAL_DOMINION_TALENT", TALENT::ABYSSAL_DOMINION_TALENT),
736    ("ANTORAN_ARMAMENTS", TALENT::ANTORAN_ARMAMENTS),
737    ("BLIGHTED_MAW", TALENT::BLIGHTED_MAW),
738    ("CALL_DREADSTALKERS", TALENT::CALL_DREADSTALKERS),
739    ("CARNIVOROUS_STALKERS", TALENT::CARNIVOROUS_STALKERS),
740    ("DEMONIAC", TALENT::DEMONIAC),
741    ("DEMONIC_BRUTALITY", TALENT::DEMONIC_BRUTALITY),
742    ("DEMONIC_CALLING", TALENT::DEMONIC_CALLING),
743    ("DEMONIC_KNOWLEDGE", TALENT::DEMONIC_KNOWLEDGE),
744    ("DIABOLIC_OCULI", TALENT::DIABOLIC_OCULI),
745    ("DIABOLIC_RITUAL", TALENT::DIABOLIC_RITUAL),
746    ("DOMINION_OF_ARGUS", TALENT::DOMINION_OF_ARGUS),
747    ("DOMINION_OF_ARGUS_2", TALENT::DOMINION_OF_ARGUS_2),
748    ("DOMINION_OF_ARGUS_3", TALENT::DOMINION_OF_ARGUS_3),
749    ("DOOM", TALENT::DOOM),
750    ("DREADLASH", TALENT::DREADLASH),
751    ("FLAMETOUCHED", TALENT::FLAMETOUCHED),
752    ("GLOOM_OF_NATHREZA", TALENT::GLOOM_OF_NATHREZA),
753    ("GRIMOIRE_FEL_RAVAGER", TALENT::GRIMOIRE_FEL_RAVAGER),
754    ("GRIMOIRE_IMP_LORD", TALENT::GRIMOIRE_IMP_LORD),
755    ("HAND_OF_GULDAN", TALENT::HAND_OF_GULDAN),
756    ("HELLBENT_COMMANDER", TALENT::HELLBENT_COMMANDER),
757    ("IMPLOSION", TALENT::IMPLOSION),
758    ("IMP_GANG_BOSS", TALENT::IMP_GANG_BOSS),
759    ("INFERNAL_RAPIDITY", TALENT::INFERNAL_RAPIDITY),
760    ("INNER_DEMONS", TALENT::INNER_DEMONS),
761    ("LOOKS_THAT_KILL", TALENT::LOOKS_THAT_KILL),
762    ("MARK_OF_SHATUG", TALENT::MARK_OF_SHATUG),
763    ("MINDS_EYES", TALENT::MINDS_EYES),
764    ("POWER_SIPHON", TALENT::POWER_SIPHON),
765    ("REIGN_OF_TYRANNY", TALENT::REIGN_OF_TYRANNY),
766    ("SACRIFICED_SOULS", TALENT::SACRIFICED_SOULS),
767    ("SPITEFUL_RECONSTITUTION", TALENT::SPITEFUL_RECONSTITUTION),
768    ("SUMMON_DEMONIC_TYRANT", TALENT::SUMMON_DEMONIC_TYRANT),
769    ("SUMMON_DOOMGUARD", TALENT::SUMMON_DOOMGUARD),
770    ("SUMMON_VILEFIEND", TALENT::SUMMON_VILEFIEND),
771    ("SUMMON_VILEFIEND_CASTABLE", TALENT::SUMMON_VILEFIEND_CASTABLE),
772    ("TO_HELL_AND_BACK", TALENT::TO_HELL_AND_BACK),
773    ("TYRANTS_OBLATION", TALENT::TYRANTS_OBLATION),
774];
775pub(crate) mod DEMONOLOGY_WARLOCK {
776    pub(crate) const SHADOW_BOLT_CASTS: u32 = 0;
777    pub(crate) const DEMONBOLT_CASTS: u32 = 1;
778    pub(crate) const HAND_OF_GULDAN_CASTS: u32 = 2;
779    pub(crate) const CALL_DREADSTALKERS_CASTS: u32 = 3;
780    pub(crate) const SUMMON_DEMONIC_TYRANT_CASTS: u32 = 4;
781    pub(crate) const POWER_SIPHON_CASTS: u32 = 5;
782    pub(crate) const DEMONIC_CORE_UPTIME_MS: u32 = 6;
783    pub(crate) const TYRANT_UPTIME_MS: u32 = 7;
784}
785fn aura_demonic_core(
786    a: AuraDefinitionDraft,
787    data: &ResolvedGameData,
788) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
789    Ok(
790        a
791            .on_player()
792            .apply_base_from_data(data, 264_173)?
793            .max_stacks(
794                data
795                    .require_aura_max_stacks(
796                        wowlab_types::sim::SpellIdx::from_raw(264_173),
797                    )?,
798            ),
799    )
800}
801fn aura_carnivorous_stalkers_talent(
802    a: AuraDefinitionDraft,
803    data: &ResolvedGameData,
804) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
805    Ok(
806        a
807            .on_player()
808            .apply_base_from_data(data, 386_194)?
809            .max_stacks(
810                data
811                    .require_aura_max_stacks(
812                        wowlab_types::sim::SpellIdx::from_raw(386_194),
813                    )?,
814            ),
815    )
816}
817fn aura_power_siphon(
818    a: AuraDefinitionDraft,
819    data: &ResolvedGameData,
820) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
821    a.on_player()
822        .apply_base_from_data(data, 334_581)?
823        .max_stacks(
824            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(334_581))?,
825        )
826        .damage_percent_spells_linear(30.0, &[264_178])
827}
828fn aura_doom(
829    a: AuraDefinitionDraft,
830    data: &ResolvedGameData,
831) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
832    Ok(
833        a
834            .on_target()
835            .apply_base_from_data(data, 460_553)?
836            .max_stacks(
837                data
838                    .require_aura_max_stacks(
839                        wowlab_types::sim::SpellIdx::from_raw(460_553),
840                    )?,
841            ),
842    )
843}
844fn aura_tyrants_oblation(
845    a: AuraDefinitionDraft,
846    data: &ResolvedGameData,
847) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
848    Ok(
849        a
850            .on_player()
851            .apply_base_from_data(data, 1_276_767)?
852            .max_stacks(
853                data
854                    .require_aura_max_stacks(
855                        wowlab_types::sim::SpellIdx::from_raw(1_276_767),
856                    )?,
857            ),
858    )
859}
860fn aura_hellbent_commander(
861    a: AuraDefinitionDraft,
862    data: &ResolvedGameData,
863) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
864    Ok(
865        a
866            .on_player()
867            .apply_base_from_data(data, 1_281_559)?
868            .max_stacks(
869                data
870                    .require_aura_max_stacks(
871                        wowlab_types::sim::SpellIdx::from_raw(1_281_559),
872                    )?,
873            ),
874    )
875}
876fn aura_inner_demons(
877    a: AuraDefinitionDraft,
878    data: &ResolvedGameData,
879) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
880    Ok(
881        a
882            .on_player()
883            .apply_base_from_data(data, 267_216)?
884            .max_stacks(
885                data
886                    .require_aura_max_stacks(
887                        wowlab_types::sim::SpellIdx::from_raw(267_216),
888                    )?,
889            ),
890    )
891}
892fn aura_dominion_of_argus(
893    a: AuraDefinitionDraft,
894    data: &ResolvedGameData,
895) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
896    Ok(
897        a
898            .on_player()
899            .apply_base_from_data(data, 1_276_166)?
900            .max_stacks(
901                data
902                    .require_aura_max_stacks(
903                        wowlab_types::sim::SpellIdx::from_raw(1_276_166),
904                    )?,
905            ),
906    )
907}
908fn aura_succulent_soul(
909    a: AuraDefinitionDraft,
910    data: &ResolvedGameData,
911) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
912    Ok(
913        a
914            .on_player()
915            .apply_base_from_data(data, 449_793)?
916            .max_stacks(
917                data
918                    .require_aura_max_stacks(
919                        wowlab_types::sim::SpellIdx::from_raw(449_793),
920                    )?,
921            ),
922    )
923}
924fn aura_manifested_demonic_soul(
925    a: AuraDefinitionDraft,
926    data: &ResolvedGameData,
927) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
928    Ok(
929        a
930            .on_player()
931            .apply_base_from_data(data, 1_269_042)?
932            .max_stacks(
933                data
934                    .require_aura_max_stacks(
935                        wowlab_types::sim::SpellIdx::from_raw(1_269_042),
936                    )?,
937            ),
938    )
939}
940fn aura_grimoire_of_sacrifice(
941    a: AuraDefinitionDraft,
942    data: &ResolvedGameData,
943) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
944    Ok(
945        a
946            .on_player()
947            .apply_base_from_data(data, 196_099)?
948            .max_stacks(
949                data
950                    .require_aura_max_stacks(
951                        wowlab_types::sim::SpellIdx::from_raw(196_099),
952                    )?,
953            ),
954    )
955}
956fn aura_wild_imps(
957    a: AuraDefinitionDraft,
958    data: &ResolvedGameData,
959) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
960    Ok(
961        a
962            .on_player()
963            .apply_base_from_data(data, 104_317)?
964            .max_stacks(
965                data
966                    .require_aura_max_stacks(
967                        wowlab_types::sim::SpellIdx::from_raw(104_317),
968                    )?,
969            ),
970    )
971}
972fn aura_dreadstalkers(
973    a: AuraDefinitionDraft,
974    data: &ResolvedGameData,
975) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
976    Ok(
977        a
978            .on_player()
979            .apply_base_from_data(data, 193_332)?
980            .max_stacks(
981                data
982                    .require_aura_max_stacks(
983                        wowlab_types::sim::SpellIdx::from_raw(193_332),
984                    )?,
985            ),
986    )
987}
988fn aura_track_pets(
989    a: AuraDefinitionDraft,
990    data: &ResolvedGameData,
991) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
992    Ok(
993        a
994            .on_player()
995            .apply_base_from_data(data, 462_599)?
996            .max_stacks(
997                data
998                    .require_aura_max_stacks(
999                        wowlab_types::sim::SpellIdx::from_raw(462_599),
1000                    )?,
1001            ),
1002    )
1003}
1004fn aura_flametouched_talent(
1005    a: AuraDefinitionDraft,
1006    data: &ResolvedGameData,
1007) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1008    Ok(
1009        a
1010            .on_player()
1011            .apply_base_from_data(data, 453_699)?
1012            .max_stacks(
1013                data
1014                    .require_aura_max_stacks(
1015                        wowlab_types::sim::SpellIdx::from_raw(453_699),
1016                    )?,
1017            ),
1018    )
1019}
1020fn aura_infernal_bolt(
1021    a: AuraDefinitionDraft,
1022    data: &ResolvedGameData,
1023) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1024    Ok(
1025        a
1026            .on_player()
1027            .apply_base_from_data(data, 433_891)?
1028            .max_stacks(
1029                data
1030                    .require_aura_max_stacks(
1031                        wowlab_types::sim::SpellIdx::from_raw(433_891),
1032                    )?,
1033            ),
1034    )
1035}
1036fn aura_ruination(
1037    a: AuraDefinitionDraft,
1038    data: &ResolvedGameData,
1039) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1040    Ok(
1041        a
1042            .on_player()
1043            .apply_base_from_data(data, 433_885)?
1044            .max_stacks(
1045                data
1046                    .require_aura_max_stacks(
1047                        wowlab_types::sim::SpellIdx::from_raw(433_885),
1048                    )?,
1049            ),
1050    )
1051}
1052fn aura_diabolic_ritual_talent(
1053    a: AuraDefinitionDraft,
1054    data: &ResolvedGameData,
1055) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1056    Ok(
1057        a
1058            .on_player()
1059            .apply_base_from_data(data, 428_514)?
1060            .max_stacks(
1061                data
1062                    .require_aura_max_stacks(
1063                        wowlab_types::sim::SpellIdx::from_raw(428_514),
1064                    )?,
1065            ),
1066    )
1067}
1068fn aura_diabolic_ritual_overlord(
1069    a: AuraDefinitionDraft,
1070    data: &ResolvedGameData,
1071) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1072    Ok(
1073        a
1074            .on_player()
1075            .apply_base_from_data(data, 431_944)?
1076            .max_stacks(
1077                data
1078                    .require_aura_max_stacks(
1079                        wowlab_types::sim::SpellIdx::from_raw(431_944),
1080                    )?,
1081            )
1082            .on_expire(
1083                crate::hooks::demonology_warlock::demonology_diabolic_ritual_overlord_expire_hook,
1084            ),
1085    )
1086}
1087fn aura_diabolic_ritual_mother(
1088    a: AuraDefinitionDraft,
1089    data: &ResolvedGameData,
1090) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1091    Ok(
1092        a
1093            .on_player()
1094            .apply_base_from_data(data, 432_815)?
1095            .max_stacks(
1096                data
1097                    .require_aura_max_stacks(
1098                        wowlab_types::sim::SpellIdx::from_raw(432_815),
1099                    )?,
1100            )
1101            .on_expire(
1102                crate::hooks::demonology_warlock::demonology_diabolic_ritual_mother_expire_hook,
1103            ),
1104    )
1105}
1106fn aura_diabolic_ritual_pit_lord(
1107    a: AuraDefinitionDraft,
1108    data: &ResolvedGameData,
1109) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1110    Ok(
1111        a
1112            .on_player()
1113            .apply_base_from_data(data, 432_816)?
1114            .max_stacks(
1115                data
1116                    .require_aura_max_stacks(
1117                        wowlab_types::sim::SpellIdx::from_raw(432_816),
1118                    )?,
1119            )
1120            .on_expire(
1121                crate::hooks::demonology_warlock::demonology_diabolic_ritual_pit_lord_expire_hook,
1122            ),
1123    )
1124}
1125fn aura_demonic_art_overlord(
1126    a: AuraDefinitionDraft,
1127    data: &ResolvedGameData,
1128) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1129    Ok(
1130        a
1131            .on_player()
1132            .apply_base_from_data(data, 428_524)?
1133            .max_stacks(
1134                data
1135                    .require_aura_max_stacks(
1136                        wowlab_types::sim::SpellIdx::from_raw(428_524),
1137                    )?,
1138            )
1139            .on_expire(
1140                crate::hooks::demonology_warlock::demonology_demonic_art_overlord_expire_hook,
1141            ),
1142    )
1143}
1144fn aura_demonic_art_mother(
1145    a: AuraDefinitionDraft,
1146    data: &ResolvedGameData,
1147) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1148    Ok(
1149        a
1150            .on_player()
1151            .apply_base_from_data(data, 432_794)?
1152            .max_stacks(
1153                data
1154                    .require_aura_max_stacks(
1155                        wowlab_types::sim::SpellIdx::from_raw(432_794),
1156                    )?,
1157            )
1158            .on_expire(
1159                crate::hooks::demonology_warlock::demonology_demonic_art_mother_expire_hook,
1160            ),
1161    )
1162}
1163fn aura_demonic_art_pit_lord(
1164    a: AuraDefinitionDraft,
1165    data: &ResolvedGameData,
1166) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1167    Ok(
1168        a
1169            .on_player()
1170            .apply_base_from_data(data, 432_795)?
1171            .max_stacks(
1172                data
1173                    .require_aura_max_stacks(
1174                        wowlab_types::sim::SpellIdx::from_raw(432_795),
1175                    )?,
1176            )
1177            .on_expire(
1178                crate::hooks::demonology_warlock::demonology_demonic_art_pit_lord_expire_hook,
1179            ),
1180    )
1181}
1182fn aura_demonic_oculi(
1183    a: AuraDefinitionDraft,
1184    data: &ResolvedGameData,
1185) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1186    Ok(
1187        a
1188            .on_player()
1189            .apply_base_from_data(data, 1_269_643)?
1190            .max_stacks(
1191                data
1192                    .require_aura_max_stacks(
1193                        wowlab_types::sim::SpellIdx::from_raw(1_269_643),
1194                    )?,
1195            ),
1196    )
1197}
1198fn aura_diabolic_oculi_talent(
1199    a: AuraDefinitionDraft,
1200    data: &ResolvedGameData,
1201) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1202    Ok(
1203        a
1204            .on_player()
1205            .apply_base_from_data(data, 1_268_709)?
1206            .max_stacks(
1207                data
1208                    .require_aura_max_stacks(
1209                        wowlab_types::sim::SpellIdx::from_raw(1_268_709),
1210                    )?,
1211            ),
1212    )
1213}
1214fn aura_looks_that_kill_talent(
1215    a: AuraDefinitionDraft,
1216    data: &ResolvedGameData,
1217) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1218    Ok(
1219        a
1220            .on_player()
1221            .apply_base_from_data(data, 1_268_713)?
1222            .max_stacks(
1223                data
1224                    .require_aura_max_stacks(
1225                        wowlab_types::sim::SpellIdx::from_raw(1_268_713),
1226                    )?,
1227            ),
1228    )
1229}
1230fn aura_minds_eyes_talent(
1231    a: AuraDefinitionDraft,
1232    data: &ResolvedGameData,
1233) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1234    Ok(
1235        a
1236            .on_player()
1237            .apply_base_from_data(data, 1_268_716)?
1238            .max_stacks(
1239                data
1240                    .require_aura_max_stacks(
1241                        wowlab_types::sim::SpellIdx::from_raw(1_268_716),
1242                    )?,
1243            ),
1244    )
1245}
1246fn aura_minds_eyes(
1247    a: AuraDefinitionDraft,
1248    data: &ResolvedGameData,
1249) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1250    a.on_player()
1251        .apply_base_from_data(data, 1_269_879)?
1252        .max_stacks(
1253            data
1254                .require_aura_max_stacks(
1255                    wowlab_types::sim::SpellIdx::from_raw(1_269_879),
1256                )?,
1257        )
1258        .primary_pct_per_stack(
1259            data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_269_879), 1),
1260        )
1261}
1262fn aura_abyssal_dominion(
1263    a: AuraDefinitionDraft,
1264    data: &ResolvedGameData,
1265) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1266    a.on_player()
1267        .apply_base_from_data(data, 456_323)?
1268        .max_stacks(
1269            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(456_323))?,
1270        )
1271        .pet_damage_multiplier(
1272            ((data.base_points(wowlab_types::sim::SpellIdx::from_raw(456_323), 1))
1273                * 0.01) + 1.0,
1274        )
1275}
1276fn aura_abyssal_dominion_talent(
1277    a: AuraDefinitionDraft,
1278    data: &ResolvedGameData,
1279) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1280    Ok(
1281        a
1282            .on_player()
1283            .apply_base_from_data(data, 429_581)?
1284            .max_stacks(
1285                data
1286                    .require_aura_max_stacks(
1287                        wowlab_types::sim::SpellIdx::from_raw(429_581),
1288                    )?,
1289            ),
1290    )
1291}
1292fn aura_cloven_soul(
1293    a: AuraDefinitionDraft,
1294    data: &ResolvedGameData,
1295) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1296    Ok(
1297        a
1298            .on_target()
1299            .apply_base_from_data(data, 434_424)?
1300            .max_stacks(
1301                data
1302                    .require_aura_max_stacks(
1303                        wowlab_types::sim::SpellIdx::from_raw(434_424),
1304                    )?,
1305            ),
1306    )
1307}
1308fn spell_shadow_bolt(
1309    s: SpellDefinitionDraft,
1310    data: &ResolvedGameData,
1311) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1312    Ok(s.apply_base_from_data(data, 686)?.gain(1.0).apply_aoe_from_data(data))
1313}
1314fn spell_demonbolt(
1315    s: SpellDefinitionDraft,
1316    data: &ResolvedGameData,
1317) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1318    Ok(
1319        s
1320            .apply_base_from_data(data, 264_178)?
1321            .gain(2.0)
1322            .apply_aoe_from_data(data)
1323            .on_cast(crate::hooks::demonology_warlock::demonbolt_hook)
1324            .instant_when_aura(AURA::DEMONIC_CORE),
1325    )
1326}
1327fn spell_hand_of_guldan(
1328    s: SpellDefinitionDraft,
1329    data: &ResolvedGameData,
1330) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1331    Ok(
1332        s
1333            .apply_base_from_data(data, 105_174)?
1334            .apply_aoe_from_data(data)
1335            .on_cast(crate::hooks::demonology_warlock::hand_of_guldan_hook),
1336    )
1337}
1338fn spell_power_siphon(
1339    s: SpellDefinitionDraft,
1340    data: &ResolvedGameData,
1341) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1342    Ok(
1343        s
1344            .apply_base_from_data(data, 334_581)?
1345            .without_data_damage()
1346            .apply_aoe_from_data(data)
1347            .on_cast(crate::hooks::demonology_warlock::power_siphon_hook),
1348    )
1349}
1350fn spell_drain_life(
1351    s: SpellDefinitionDraft,
1352    data: &ResolvedGameData,
1353) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1354    Ok(s.apply_base_from_data(data, 234_153)?.apply_aoe_from_data(data))
1355}
1356fn spell_summon_felguard(
1357    s: SpellDefinitionDraft,
1358    data: &ResolvedGameData,
1359) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1360    Ok(s.apply_base_from_data(data, 30146)?.apply_aoe_from_data(data))
1361}
1362fn spell_summon_felhunter(
1363    s: SpellDefinitionDraft,
1364    data: &ResolvedGameData,
1365) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1366    Ok(s.apply_base_from_data(data, 691)?.apply_aoe_from_data(data))
1367}
1368fn spell_summon_imp(
1369    s: SpellDefinitionDraft,
1370    data: &ResolvedGameData,
1371) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1372    Ok(s.apply_base_from_data(data, 688)?.apply_aoe_from_data(data))
1373}
1374fn spell_call_dreadstalkers(
1375    s: SpellDefinitionDraft,
1376    data: &ResolvedGameData,
1377) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1378    Ok(
1379        s
1380            .apply_base_from_data(data, 104_316)?
1381            .apply_aoe_from_data(data)
1382            .on_cast(crate::hooks::demonology_warlock::call_dreadstalkers_hook),
1383    )
1384}
1385fn spell_summon_demonic_tyrant(
1386    s: SpellDefinitionDraft,
1387    data: &ResolvedGameData,
1388) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1389    Ok(
1390        s
1391            .apply_base_from_data(data, 265_187)?
1392            .apply_aoe_from_data(data)
1393            .on_cast(crate::hooks::demonology_warlock::summon_demonic_tyrant_hook),
1394    )
1395}
1396fn spell_summon_vilefiend(
1397    s: SpellDefinitionDraft,
1398    data: &ResolvedGameData,
1399) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1400    Ok(s.apply_base_from_data(data, 264_119)?.apply_aoe_from_data(data))
1401}
1402fn spell_implosion(
1403    s: SpellDefinitionDraft,
1404    data: &ResolvedGameData,
1405) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1406    Ok(s.apply_base_from_data(data, 196_277)?.apply_aoe_from_data(data))
1407}
1408fn spell_grimoire_imp_lord(
1409    s: SpellDefinitionDraft,
1410    data: &ResolvedGameData,
1411) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1412    Ok(s.apply_base_from_data(data, 1_276_452)?.apply_aoe_from_data(data))
1413}
1414fn spell_grimoire_fel_ravager(
1415    s: SpellDefinitionDraft,
1416    data: &ResolvedGameData,
1417) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1418    Ok(s.apply_base_from_data(data, 1_276_467)?.apply_aoe_from_data(data))
1419}
1420fn spell_summon_doomguard(
1421    s: SpellDefinitionDraft,
1422    data: &ResolvedGameData,
1423) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1424    Ok(s.apply_base_from_data(data, 1_276_672)?.apply_aoe_from_data(data))
1425}
1426fn spell_infernal_bolt(
1427    s: SpellDefinitionDraft,
1428    data: &ResolvedGameData,
1429) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1430    Ok(
1431        s
1432            .apply_base_from_data(data, 434_506)?
1433            .gain(
1434                (data.base_points(wowlab_types::sim::SpellIdx::from_raw(434_506), 2))
1435                    * 0.1,
1436            )
1437            .apply_aoe_from_data(data)
1438            .requires_aura_at_min_stacks(433_891, 0)
1439            .consume_aura_on_cast(433_891),
1440    )
1441}
1442fn spell_ruination(
1443    s: SpellDefinitionDraft,
1444    data: &ResolvedGameData,
1445) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1446    Ok(
1447        s
1448            .apply_base_from_data(data, 434_635)?
1449            .travel_time(
1450                wowlab_engine_combat::validated_milliseconds(
1451                    1000.0,
1452                    434_635,
1453                    "spell.travel_time_ms",
1454                )?,
1455            )
1456            .apply_aoe_from_data(data)
1457            .on_cast(crate::hooks::demonology_warlock::ruination_hook)
1458            .requires_aura_at_min_stacks(433_885, 0)
1459            .consume_aura_on_cast(433_885),
1460    )
1461}
1462pub(crate) fn build_combat_system_draft(
1463    params: &wowlab_engine_ports::HandlerParams<'_>,
1464) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1465    let builder = CombatSystemBuilder::new(params.stats.clone())
1466        .spec_id(SpecId::Demonology)
1467        .spec_identity(
1468            wowlab_engine_combat::generated_identities::specs::demonology_warlock::PROOF,
1469        )
1470        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1471        .effect_identities(
1472            wowlab_engine_combat::generated_identities::specs::demonology_warlock::damage::ALL,
1473        )
1474        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1475        .mastery_spell(77219)
1476        .mastery_hook(crate::hooks::demonology_warlock::mastery)
1477        .resource(
1478            "soul_shards",
1479            5.0,
1480            params
1481                .game_data
1482                .power_regen_for_max(7, 5.0)
1483                .ok_or_else(|| {
1484                    wowlab_engine_ports::EngineError::spec_construction(
1485                        "missing power-type power_regen_for_max for type_id 7",
1486                    )
1487                })?,
1488        )
1489        .resource_type_id(7)
1490        .resource_start(3.0)
1491        .mastery_crit_damage_hook(crate::hooks::demonology_warlock::crit_damage)
1492        .has_pet(true)
1493        .aura(
1494            "demonic_core",
1495            AURA::DEMONIC_CORE,
1496            |a| aura_demonic_core(a, &params.game_data),
1497        )
1498        .aura(
1499            "carnivorous_stalkers_talent",
1500            AURA::CARNIVOROUS_STALKERS_TALENT,
1501            |a| aura_carnivorous_stalkers_talent(a, &params.game_data),
1502        )
1503        .aura(
1504            "power_siphon",
1505            AURA::POWER_SIPHON,
1506            |a| aura_power_siphon(a, &params.game_data),
1507        )
1508        .aura("doom", AURA::DOOM, |a| aura_doom(a, &params.game_data))
1509        .aura(
1510            "tyrants_oblation",
1511            AURA::TYRANTS_OBLATION,
1512            |a| aura_tyrants_oblation(a, &params.game_data),
1513        )
1514        .aura(
1515            "hellbent_commander",
1516            AURA::HELLBENT_COMMANDER,
1517            |a| aura_hellbent_commander(a, &params.game_data),
1518        )
1519        .aura(
1520            "inner_demons",
1521            AURA::INNER_DEMONS,
1522            |a| aura_inner_demons(a, &params.game_data),
1523        )
1524        .aura(
1525            "dominion_of_argus",
1526            AURA::DOMINION_OF_ARGUS,
1527            |a| aura_dominion_of_argus(a, &params.game_data),
1528        )
1529        .aura(
1530            "succulent_soul",
1531            AURA::SUCCULENT_SOUL,
1532            |a| aura_succulent_soul(a, &params.game_data),
1533        )
1534        .aura(
1535            "manifested_demonic_soul",
1536            AURA::MANIFESTED_DEMONIC_SOUL,
1537            |a| aura_manifested_demonic_soul(a, &params.game_data),
1538        )
1539        .aura(
1540            "grimoire_of_sacrifice",
1541            AURA::GRIMOIRE_OF_SACRIFICE,
1542            |a| aura_grimoire_of_sacrifice(a, &params.game_data),
1543        )
1544        .aura("wild_imps", AURA::WILD_IMPS, |a| aura_wild_imps(a, &params.game_data))
1545        .aura(
1546            "dreadstalkers",
1547            AURA::DREADSTALKERS,
1548            |a| aura_dreadstalkers(a, &params.game_data),
1549        )
1550        .aura("track_pets", AURA::TRACK_PETS, |a| aura_track_pets(a, &params.game_data))
1551        .aura(
1552            "flametouched_talent",
1553            AURA::FLAMETOUCHED_TALENT,
1554            |a| aura_flametouched_talent(a, &params.game_data),
1555        )
1556        .aura(
1557            "infernal_bolt",
1558            AURA::INFERNAL_BOLT,
1559            |a| aura_infernal_bolt(a, &params.game_data),
1560        )
1561        .aura("ruination", AURA::RUINATION, |a| aura_ruination(a, &params.game_data))
1562        .aura(
1563            "diabolic_ritual_talent",
1564            AURA::DIABOLIC_RITUAL_TALENT,
1565            |a| aura_diabolic_ritual_talent(a, &params.game_data),
1566        )
1567        .aura(
1568            "diabolic_ritual_overlord",
1569            AURA::DIABOLIC_RITUAL_OVERLORD,
1570            |a| aura_diabolic_ritual_overlord(a, &params.game_data),
1571        )
1572        .aura(
1573            "diabolic_ritual_mother",
1574            AURA::DIABOLIC_RITUAL_MOTHER,
1575            |a| aura_diabolic_ritual_mother(a, &params.game_data),
1576        )
1577        .aura(
1578            "diabolic_ritual_pit_lord",
1579            AURA::DIABOLIC_RITUAL_PIT_LORD,
1580            |a| aura_diabolic_ritual_pit_lord(a, &params.game_data),
1581        )
1582        .aura(
1583            "demonic_art_overlord",
1584            AURA::DEMONIC_ART_OVERLORD,
1585            |a| aura_demonic_art_overlord(a, &params.game_data),
1586        )
1587        .aura(
1588            "demonic_art_mother",
1589            AURA::DEMONIC_ART_MOTHER,
1590            |a| aura_demonic_art_mother(a, &params.game_data),
1591        )
1592        .aura(
1593            "demonic_art_pit_lord",
1594            AURA::DEMONIC_ART_PIT_LORD,
1595            |a| aura_demonic_art_pit_lord(a, &params.game_data),
1596        )
1597        .aura(
1598            "demonic_oculi",
1599            AURA::DEMONIC_OCULI,
1600            |a| aura_demonic_oculi(a, &params.game_data),
1601        )
1602        .aura(
1603            "diabolic_oculi_talent",
1604            AURA::DIABOLIC_OCULI_TALENT,
1605            |a| aura_diabolic_oculi_talent(a, &params.game_data),
1606        )
1607        .aura(
1608            "looks_that_kill_talent",
1609            AURA::LOOKS_THAT_KILL_TALENT,
1610            |a| aura_looks_that_kill_talent(a, &params.game_data),
1611        )
1612        .aura(
1613            "minds_eyes_talent",
1614            AURA::MINDS_EYES_TALENT,
1615            |a| aura_minds_eyes_talent(a, &params.game_data),
1616        )
1617        .aura("minds_eyes", AURA::MINDS_EYES, |a| aura_minds_eyes(a, &params.game_data))
1618        .aura(
1619            "abyssal_dominion",
1620            AURA::ABYSSAL_DOMINION,
1621            |a| aura_abyssal_dominion(a, &params.game_data),
1622        )
1623        .aura(
1624            "abyssal_dominion_talent",
1625            AURA::ABYSSAL_DOMINION_TALENT,
1626            |a| aura_abyssal_dominion_talent(a, &params.game_data),
1627        )
1628        .aura(
1629            "cloven_soul",
1630            AURA::CLOVEN_SOUL,
1631            |a| aura_cloven_soul(a, &params.game_data),
1632        )
1633        .spell(
1634            "shadow_bolt",
1635            SPELL::SHADOW_BOLT,
1636            |s| spell_shadow_bolt(s, &params.game_data),
1637        )
1638        .spell("demonbolt", SPELL::DEMONBOLT, |s| spell_demonbolt(s, &params.game_data))
1639        .spell(
1640            "hand_of_guldan",
1641            SPELL::HAND_OF_GULDAN,
1642            |s| spell_hand_of_guldan(s, &params.game_data),
1643        )
1644        .spell(
1645            "power_siphon",
1646            SPELL::POWER_SIPHON,
1647            |s| spell_power_siphon(s, &params.game_data),
1648        )
1649        .spell(
1650            "drain_life",
1651            SPELL::DRAIN_LIFE,
1652            |s| spell_drain_life(s, &params.game_data),
1653        )
1654        .spell(
1655            "summon_felguard",
1656            SPELL::SUMMON_FELGUARD,
1657            |s| spell_summon_felguard(s, &params.game_data),
1658        )
1659        .spell(
1660            "summon_felhunter",
1661            SPELL::SUMMON_FELHUNTER,
1662            |s| spell_summon_felhunter(s, &params.game_data),
1663        )
1664        .spell(
1665            "summon_imp",
1666            SPELL::SUMMON_IMP,
1667            |s| spell_summon_imp(s, &params.game_data),
1668        )
1669        .spell(
1670            "call_dreadstalkers",
1671            SPELL::CALL_DREADSTALKERS,
1672            |s| spell_call_dreadstalkers(s, &params.game_data),
1673        )
1674        .spell(
1675            "summon_demonic_tyrant",
1676            SPELL::SUMMON_DEMONIC_TYRANT,
1677            |s| spell_summon_demonic_tyrant(s, &params.game_data),
1678        )
1679        .spell(
1680            "summon_vilefiend",
1681            SPELL::SUMMON_VILEFIEND,
1682            |s| spell_summon_vilefiend(s, &params.game_data),
1683        )
1684        .spell("implosion", SPELL::IMPLOSION, |s| spell_implosion(s, &params.game_data))
1685        .spell(
1686            "grimoire_imp_lord",
1687            SPELL::GRIMOIRE_IMP_LORD,
1688            |s| spell_grimoire_imp_lord(s, &params.game_data),
1689        )
1690        .spell(
1691            "grimoire_fel_ravager",
1692            SPELL::GRIMOIRE_FEL_RAVAGER,
1693            |s| spell_grimoire_fel_ravager(s, &params.game_data),
1694        )
1695        .spell(
1696            "summon_doomguard",
1697            SPELL::SUMMON_DOOMGUARD,
1698            |s| spell_summon_doomguard(s, &params.game_data),
1699        )
1700        .spell(
1701            "infernal_bolt",
1702            SPELL::INFERNAL_BOLT,
1703            |s| spell_infernal_bolt(s, &params.game_data),
1704        )
1705        .spell("ruination", SPELL::RUINATION, |s| spell_ruination(s, &params.game_data))
1706        .auto_attack(|a| {
1707            a
1708                .spell_id(1)
1709                .swing_ms(2000)
1710                .apply_base_from_data(&params.game_data)
1711                .ap_coef(0.7297)
1712                .is_pet()
1713                .uses_spell_power()
1714        })
1715        .game_data(params.game_data.clone())
1716        .talent_spell_ids(TALENTS)
1717        .talent_selections(params.talent_selections)
1718        .talent_companion_aura(
1719            TALENT::ABYSSAL_DOMINION_TALENT,
1720            AURA_ABYSSAL_DOMINION_TALENT,
1721        )
1722        .talent_companion_aura(
1723            TALENT::CARNIVOROUS_STALKERS,
1724            AURA_CARNIVOROUS_STALKERS_TALENT,
1725        )
1726        .talent_companion_aura(TALENT::DIABOLIC_OCULI, AURA_DIABOLIC_OCULI_TALENT)
1727        .talent_companion_aura(TALENT::DIABOLIC_RITUAL, AURA_DIABOLIC_RITUAL_TALENT)
1728        .talent_companion_aura(TALENT::FLAMETOUCHED, AURA_FLAMETOUCHED_TALENT)
1729        .talent_companion_aura(TALENT::LOOKS_THAT_KILL, AURA_LOOKS_THAT_KILL_TALENT)
1730        .talent_companion_aura(TALENT::MINDS_EYES, AURA_MINDS_EYES_TALENT)
1731        .set_bonus_auras(params.set_bonus_auras)
1732        .encounter(params.encounter.clone());
1733    let builder = crate::generated::items::register_equipped(
1734        builder,
1735        &params.game_data,
1736        params.equipped_items,
1737    )?;
1738
1739    builder.into_draft()
1740}
1741fn new_handler(
1742    params: wowlab_engine_ports::HandlerParams<'_>,
1743) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1744    let handler = crate::composition::compose_handler(
1745        build_combat_system_draft,
1746        &params,
1747        crate::hooks::demonology_warlock::DemonologyHandler::new,
1748    )?;
1749
1750    Ok(Box::new(handler))
1751}
1752static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1753    primary_resource: ResourceType::SoulShards,
1754    secondary_resource: None,
1755    spell_ids: DECLARED_SPELL_IDS,
1756    aura_ids: DECLARED_AURA_IDS,
1757    server_proc_entries: &[],
1758    talents: TALENTS,
1759    rotation_field_schema: &[],
1760    metrics_plugin_id: None,
1761    hero_talent_trees: &[
1762        HeroTalentTreeDesc {
1763            name: "Soul Harvester",
1764            spells: HERO_TREE_SOUL_HARVESTER_SPELLS,
1765            auras: HERO_TREE_SOUL_HARVESTER_AURAS,
1766        },
1767        HeroTalentTreeDesc {
1768            name: "Diabolist",
1769            spells: HERO_TREE_DIABOLIST_SPELLS,
1770            auras: HERO_TREE_DIABOLIST_AURAS,
1771        },
1772    ],
1773    reported_spells: REPORTED_SPELLS,
1774    masked_passive_effects: &[],
1775    passive_effect_overrides: &[],
1776};
1777pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1778    spec_id: SpecId::Demonology,
1779    display_name: "Demonology Warlock",
1780    metadata: DECLARED_METADATA,
1781    handler_factory: new_handler,
1782};
1783wowlab_engine_combat::smoke_test!(build_combat_system_draft);