Skip to main content

wowlab_engine_content/generated/specs/
retribution_paladin.rs

1//! @generated by codegen-cli from manifests/specs/paladin/retribution/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/35395>
15    pub(crate) const CRUSADER_STRIKE: u32 = 35395;
16    ///<https://wowlab.gg/inspect/spell/20271>
17    pub(crate) const JUDGMENT: u32 = 20271;
18    ///<https://wowlab.gg/inspect/spell/184575>
19    pub(crate) const BLADE_OF_JUSTICE: u32 = 184_575;
20    ///<https://wowlab.gg/inspect/spell/85256>
21    pub(crate) const TEMPLARS_VERDICT: u32 = 85256;
22    ///<https://wowlab.gg/inspect/spell/53385>
23    pub(crate) const DIVINE_STORM: u32 = 53385;
24    ///<https://wowlab.gg/inspect/spell/255937>
25    pub(crate) const WAKE_OF_ASHES: u32 = 255_937;
26    ///<https://wowlab.gg/inspect/spell/31884>
27    pub(crate) const AVENGING_WRATH: u32 = 31884;
28    ///<https://wowlab.gg/inspect/spell/383328>
29    pub(crate) const FINAL_VERDICT: u32 = 383_328;
30    ///<https://wowlab.gg/inspect/spell/408385>
31    pub(crate) const CRUSADING_STRIKE: u32 = 408_385;
32    ///<https://wowlab.gg/inspect/spell/1261160>
33    pub(crate) const LIGHT_WITHIN_BOJ: u32 = 1_261_160;
34    ///<https://wowlab.gg/inspect/spell/383921>
35    pub(crate) const HIGHLORDS_JUDGMENT: u32 = 383_921;
36    ///<https://wowlab.gg/inspect/spell/406957>
37    pub(crate) const JUDGMENT_DIVINE_TOLL: u32 = 406_957;
38    ///<https://wowlab.gg/inspect/spell/1279408>
39    pub(crate) const HAMMER_OF_WRATH_DIVINE_TOLL: u32 = 1_279_408;
40    ///<https://wowlab.gg/inspect/spell/375576>
41    pub(crate) const DIVINE_TOLL: u32 = 375_576;
42    ///<https://wowlab.gg/inspect/spell/24275>
43    pub(crate) const HAMMER_OF_WRATH: u32 = 24275;
44    ///<https://wowlab.gg/inspect/spell/343527>
45    pub(crate) const EXECUTION_SENTENCE: u32 = 343_527;
46    ///<https://wowlab.gg/inspect/spell/427453>
47    pub(crate) const HAMMER_OF_LIGHT: u32 = 427_453;
48    ///<https://wowlab.gg/inspect/spell/431398>
49    pub(crate) const EMPYREAN_HAMMER: u32 = 431_398;
50}
51pub(crate) mod AURA {
52    ///<https://wowlab.gg/inspect/spell/31884>
53    pub(crate) const AVENGING_WRATH: u32 = 31884;
54    ///<https://wowlab.gg/inspect/spell/326733>
55    pub(crate) const EMPYREAN_POWER: u32 = 326_733;
56    ///<https://wowlab.gg/inspect/spell/387178>
57    pub(crate) const EMPYREAN_LEGACY: u32 = 387_178;
58    ///<https://wowlab.gg/inspect/spell/408458>
59    pub(crate) const DIVINE_PURPOSE: u32 = 408_458;
60    ///<https://wowlab.gg/inspect/spell/1305230>
61    pub(crate) const DIVINE_POWER: u32 = 1_305_230;
62    ///<https://wowlab.gg/inspect/spell/1306161>
63    pub(crate) const DIVINE_ARBITER_VERDICT: u32 = 1_306_161;
64    ///<https://wowlab.gg/inspect/spell/1306162>
65    pub(crate) const DIVINE_ARBITER_DIVINE_STORM: u32 = 1_306_162;
66    ///<https://wowlab.gg/inspect/spell/1310461>
67    pub(crate) const DIVINE_ARBITER_HAMMER_OF_LIGHT: u32 = 1_310_461;
68    ///<https://wowlab.gg/inspect/spell/406086>
69    pub(crate) const ART_OF_WAR: u32 = 406_086;
70    ///<https://wowlab.gg/inspect/spell/402916>
71    pub(crate) const RIGHTEOUS_CAUSE: u32 = 402_916;
72    ///<https://wowlab.gg/inspect/spell/1277026>
73    pub(crate) const HAMMER_OF_WRATH: u32 = 1_277_026;
74    ///<https://wowlab.gg/inspect/spell/197277>
75    pub(crate) const JUDGMENT_DEBUFF: u32 = 197_277;
76    ///<https://wowlab.gg/inspect/spell/382538>
77    pub(crate) const SANCTIFY: u32 = 382_538;
78    ///<https://wowlab.gg/inspect/spell/383346>
79    pub(crate) const EXPURGATION: u32 = 383_346;
80    ///<https://wowlab.gg/inspect/spell/403695>
81    pub(crate) const TRUTHS_WAKE: u32 = 403_695;
82    ///<https://wowlab.gg/inspect/spell/404542>
83    pub(crate) const CRUSADING_STRIKES: u32 = 404_542;
84    ///<https://wowlab.gg/inspect/spell/403509>
85    pub(crate) const ZEALOTS_FERVOR: u32 = 403_509;
86    ///<https://wowlab.gg/inspect/spell/407475>
87    pub(crate) const CONSECRATED_BLADE_LOCKOUT: u32 = 407_475;
88    ///<https://wowlab.gg/inspect/spell/433671>
89    pub(crate) const SANCTIFICATION: u32 = 433_671;
90    ///<https://wowlab.gg/inspect/spell/407065>
91    pub(crate) const RUSH_OF_LIGHT: u32 = 407_065;
92    ///<https://wowlab.gg/inspect/spell/343527>
93    pub(crate) const EXECUTION_SENTENCE: u32 = 343_527;
94    ///<https://wowlab.gg/inspect/spell/1260251>
95    pub(crate) const EXECUTION_SENTENCE_GATHER: u32 = 1_260_251;
96    ///<https://wowlab.gg/inspect/spell/1234189>
97    pub(crate) const EXECUTION_SENTENCE_TRACKER: u32 = 1_234_189;
98    ///<https://wowlab.gg/inspect/spell/427441>
99    pub(crate) const HAMMER_OF_LIGHT: u32 = 427_441;
100    ///<https://wowlab.gg/inspect/spell/433732>
101    pub(crate) const HAMMER_OF_LIGHT_FREE: u32 = 433_732;
102    ///<https://wowlab.gg/inspect/spell/431536>
103    pub(crate) const SHAKE_THE_HEAVENS: u32 = 431_536;
104    ///<https://wowlab.gg/inspect/spell/433674>
105    pub(crate) const LIGHTS_DELIVERANCE: u32 = 433_674;
106    ///<https://wowlab.gg/inspect/spell/432629>
107    pub(crate) const UNDISPUTED_RULING: u32 = 432_629;
108    ///<https://wowlab.gg/inspect/spell/198034>
109    pub(crate) const DIVINE_HAMMER: u32 = 198_034;
110}
111pub(crate) mod TALENT {
112    ///<https://wowlab.gg/inspect/spell/406064>
113    pub(crate) const ART_OF_WAR: u32 = 406_064;
114    ///<https://wowlab.gg/inspect/spell/184575>
115    pub(crate) const BLADE_OF_JUSTICE: u32 = 184_575;
116    ///<https://wowlab.gg/inspect/spell/404358>
117    pub(crate) const BLADE_OF_VENGEANCE: u32 = 404_358;
118    ///<https://wowlab.gg/inspect/spell/403010>
119    pub(crate) const BLESSED_CHAMPION: u32 = 403_010;
120    ///<https://wowlab.gg/inspect/spell/446663>
121    pub(crate) const BURN_TO_ASH: u32 = 446_663;
122    ///<https://wowlab.gg/inspect/spell/404834>
123    pub(crate) const CONSECRATED_BLADE: u32 = 404_834;
124    ///<https://wowlab.gg/inspect/spell/1253598>
125    pub(crate) const CRUSADE: u32 = 1_253_598;
126    ///<https://wowlab.gg/inspect/spell/404542>
127    pub(crate) const CRUSADING_STRIKES: u32 = 404_542;
128    ///<https://wowlab.gg/inspect/spell/408459>
129    pub(crate) const DIVINE_PURPOSE: u32 = 408_459;
130    ///<https://wowlab.gg/inspect/spell/53385>
131    pub(crate) const DIVINE_STORM: u32 = 53385;
132    ///<https://wowlab.gg/inspect/spell/375576>
133    pub(crate) const DIVINE_TOLL: u32 = 375_576;
134    ///<https://wowlab.gg/inspect/spell/387170>
135    pub(crate) const EMPYREAN_LEGACY: u32 = 387_170;
136    ///<https://wowlab.gg/inspect/spell/326732>
137    pub(crate) const EMPYREAN_POWER: u32 = 326_732;
138    ///<https://wowlab.gg/inspect/spell/343527>
139    pub(crate) const EXECUTION_SENTENCE: u32 = 343_527;
140    ///<https://wowlab.gg/inspect/spell/383344>
141    pub(crate) const EXPURGATION: u32 = 383_344;
142    ///<https://wowlab.gg/inspect/spell/383328>
143    pub(crate) const FINAL_VERDICT: u32 = 383_328;
144    ///<https://wowlab.gg/inspect/spell/231663>
145    pub(crate) const GREATER_JUDGMENT: u32 = 231_663;
146    ///<https://wowlab.gg/inspect/spell/1241288>
147    pub(crate) const HAMMER_OF_WRATH_TALENT: u32 = 1_241_288;
148    ///<https://wowlab.gg/inspect/spell/406154>
149    pub(crate) const HEART_OF_THE_CRUSADER: u32 = 406_154;
150    ///<https://wowlab.gg/inspect/spell/404512>
151    pub(crate) const HIGHLORDS_WRATH: u32 = 404_512;
152    ///<https://wowlab.gg/inspect/spell/383342>
153    pub(crate) const HOLY_BLADE: u32 = 383_342;
154    ///<https://wowlab.gg/inspect/spell/405461>
155    pub(crate) const IMPROVED_JUDGMENT: u32 = 405_461;
156    ///<https://wowlab.gg/inspect/spell/453433>
157    pub(crate) const JUDGE_JURY_AND_EXECUTIONER: u32 = 453_433;
158    ///<https://wowlab.gg/inspect/spell/404436>
159    pub(crate) const LIGHT_OF_JUSTICE: u32 = 404_436;
160    ///<https://wowlab.gg/inspect/spell/1261113>
161    pub(crate) const LIGHT_WITHIN: u32 = 1_261_113;
162    ///<https://wowlab.gg/inspect/spell/1261111>
163    pub(crate) const LIGHT_WITHIN_VERDICT: u32 = 1_261_111;
164    ///<https://wowlab.gg/inspect/spell/1261159>
165    pub(crate) const LIGHT_WITHIN_WAVE: u32 = 1_261_159;
166    ///<https://wowlab.gg/inspect/spell/379391>
167    pub(crate) const QUICKENED_INVOCATION: u32 = 379_391;
168    ///<https://wowlab.gg/inspect/spell/458359>
169    pub(crate) const RADIANT_GLORY: u32 = 458_359;
170    ///<https://wowlab.gg/inspect/spell/402912>
171    pub(crate) const RIGHTEOUS_CAUSE: u32 = 402_912;
172    ///<https://wowlab.gg/inspect/spell/407067>
173    pub(crate) const RUSH_OF_LIGHT: u32 = 407_067;
174    ///<https://wowlab.gg/inspect/spell/382536>
175    pub(crate) const SANCTIFY: u32 = 382_536;
176    ///<https://wowlab.gg/inspect/spell/405355>
177    pub(crate) const SEETHING_FLAMES: u32 = 405_355;
178    ///<https://wowlab.gg/inspect/spell/383396>
179    pub(crate) const TEMPEST_OF_THE_LIGHTBRINGER: u32 = 383_396;
180    ///<https://wowlab.gg/inspect/spell/406646>
181    pub(crate) const TEMPLAR_STRIKES: u32 = 406_646;
182    ///<https://wowlab.gg/inspect/spell/1241958>
183    pub(crate) const VENGEFUL_WRATH: u32 = 1_241_958;
184    ///<https://wowlab.gg/inspect/spell/255937>
185    pub(crate) const WAKE_OF_ASHES: u32 = 255_937;
186    ///<https://wowlab.gg/inspect/spell/403509>
187    pub(crate) const ZEALOTS_FERVOR: u32 = 403_509;
188}
189pub(crate) mod SET_BONUS {
190    ///<https://wowlab.gg/inspect/spell/1296660>
191    pub(crate) const MID2_RETRIBUTION_2PC: u32 = 1_296_660;
192    ///<https://wowlab.gg/inspect/spell/1296661>
193    pub(crate) const MID2_RETRIBUTION_4PC: u32 = 1_296_661;
194}
195pub(crate) mod REPORTED_SPELL {
196    ///<https://wowlab.gg/inspect/spell/404358>
197    pub(crate) const BLADE_OF_VENGEANCE: u32 = 404_358;
198    ///<https://wowlab.gg/inspect/spell/1306923>
199    pub(crate) const DIVINE_ARBITER: u32 = 1_306_923;
200    ///<https://wowlab.gg/inspect/spell/387113>
201    pub(crate) const EXECUTION_SENTENCE: u32 = 387_113;
202    ///<https://wowlab.gg/inspect/spell/1260251>
203    pub(crate) const EXECUTION_SENTENCE_INIT: u32 = 1_260_251;
204    ///<https://wowlab.gg/inspect/spell/383346>
205    pub(crate) const EXPURGATION: u32 = 383_346;
206}
207pub(crate) mod HERO {
208    pub(crate) mod TEMPLAR {
209        pub(crate) mod SPELL {
210            ///<https://wowlab.gg/inspect/spell/1260429>
211            pub(crate) const DIVINE_EXACTION: u32 = 1_260_429;
212            ///<https://wowlab.gg/inspect/spell/198034>
213            pub(crate) const DIVINE_HAMMER: u32 = 198_034;
214            ///<https://wowlab.gg/inspect/spell/432929>
215            pub(crate) const DIVINE_HAMMER_TALENT: u32 = 432_929;
216            ///<https://wowlab.gg/inspect/spell/198137>
217            pub(crate) const DIVINE_HAMMER_TICK: u32 = 198_137;
218            ///<https://wowlab.gg/inspect/spell/431398>
219            pub(crate) const EMPYREAN_HAMMER: u32 = 431_398;
220            ///<https://wowlab.gg/inspect/spell/431625>
221            pub(crate) const EMPYREAN_HAMMER_WD: u32 = 431_625;
222            ///<https://wowlab.gg/inspect/spell/432463>
223            pub(crate) const HAMMERFALL: u32 = 432_463;
224            ///<https://wowlab.gg/inspect/spell/427453>
225            pub(crate) const HAMMER_OF_LIGHT: u32 = 427_453;
226            ///<https://wowlab.gg/inspect/spell/431687>
227            pub(crate) const HIGHER_CALLING: u32 = 431_687;
228            ///<https://wowlab.gg/inspect/spell/425518>
229            pub(crate) const LIGHTS_DELIVERANCE_TALENT: u32 = 425_518;
230            ///<https://wowlab.gg/inspect/spell/427445>
231            pub(crate) const LIGHTS_GUIDANCE: u32 = 427_445;
232            ///<https://wowlab.gg/inspect/spell/1261525>
233            pub(crate) const LIGHTS_JUDICATOR: u32 = 1_261_525;
234            ///<https://wowlab.gg/inspect/spell/432977>
235            pub(crate) const SANCTIFICATION_TALENT: u32 = 432_977;
236            ///<https://wowlab.gg/inspect/spell/431533>
237            pub(crate) const SHAKE_THE_HEAVENS_TALENT: u32 = 431_533;
238            ///<https://wowlab.gg/inspect/spell/432626>
239            pub(crate) const UNDISPUTED_RULING_TALENT: u32 = 432_626;
240            ///<https://wowlab.gg/inspect/spell/431463>
241            pub(crate) const ZEALOUS_VINDICATION: u32 = 431_463;
242        }
243        pub(crate) mod AURA {
244            ///<https://wowlab.gg/inspect/spell/427441>
245            pub(crate) const HAMMER_OF_LIGHT_READY: u32 = 427_441;
246            ///<https://wowlab.gg/inspect/spell/433674>
247            pub(crate) const LIGHTS_DELIVERANCE: u32 = 433_674;
248            ///<https://wowlab.gg/inspect/spell/433671>
249            pub(crate) const SANCTIFICATION: u32 = 433_671;
250            ///<https://wowlab.gg/inspect/spell/431536>
251            pub(crate) const SHAKE_THE_HEAVENS: u32 = 431_536;
252            ///<https://wowlab.gg/inspect/spell/406648>
253            pub(crate) const TEMPLAR_STRIKES: u32 = 406_648;
254            ///<https://wowlab.gg/inspect/spell/432629>
255            pub(crate) const UNDISPUTED_RULING: u32 = 432_629;
256        }
257    }
258    pub(crate) mod HERALD_OF_THE_SUN {
259        pub(crate) mod SPELL {
260            ///<https://wowlab.gg/inspect/spell/431474>
261            pub(crate) const SECOND_SUNRISE: u32 = 431_474;
262            ///<https://wowlab.gg/inspect/spell/431414>
263            pub(crate) const SUN_SEAR: u32 = 431_414;
264        }
265        pub(crate) mod AURA {
266            ///<https://wowlab.gg/inspect/spell/445206>
267            pub(crate) const BLESSING_OF_ANSHE: u32 = 445_206;
268            ///<https://wowlab.gg/inspect/spell/1264050>
269            pub(crate) const BORN_IN_SUNLIGHT: u32 = 1_264_050;
270            ///<https://wowlab.gg/inspect/spell/431522>
271            pub(crate) const DAWNLIGHT: u32 = 431_522;
272            ///<https://wowlab.gg/inspect/spell/431539>
273            pub(crate) const MORNING_STAR: u32 = 431_539;
274            ///<https://wowlab.gg/inspect/spell/431404>
275            pub(crate) const SOLAR_GRACE: u32 = 431_404;
276        }
277    }
278}
279static HERO_TREE_TEMPLAR_SPELLS: &[(&str, u32)] = &[
280    ("DIVINE_EXACTION", 1_260_429),
281    ("DIVINE_HAMMER", 198_034),
282    ("DIVINE_HAMMER_TALENT", 432_929),
283    ("DIVINE_HAMMER_TICK", 198_137),
284    ("EMPYREAN_HAMMER", 431_398),
285    ("EMPYREAN_HAMMER_WD", 431_625),
286    ("HAMMERFALL", 432_463),
287    ("HAMMER_OF_LIGHT", 427_453),
288    ("HIGHER_CALLING", 431_687),
289    ("LIGHTS_DELIVERANCE_TALENT", 425_518),
290    ("LIGHTS_GUIDANCE", 427_445),
291    ("LIGHTS_JUDICATOR", 1_261_525),
292    ("SANCTIFICATION_TALENT", 432_977),
293    ("SHAKE_THE_HEAVENS_TALENT", 431_533),
294    ("UNDISPUTED_RULING_TALENT", 432_626),
295    ("ZEALOUS_VINDICATION", 431_463),
296];
297static HERO_TREE_TEMPLAR_AURAS: &[(&str, u32)] = &[
298    ("HAMMER_OF_LIGHT_READY", 427_441),
299    ("LIGHTS_DELIVERANCE", 433_674),
300    ("SANCTIFICATION", 433_671),
301    ("SHAKE_THE_HEAVENS", 431_536),
302    ("TEMPLAR_STRIKES", 406_648),
303    ("UNDISPUTED_RULING", 432_629),
304];
305static HERO_TREE_HERALD_OF_THE_SUN_SPELLS: &[(&str, u32)] = &[
306    ("SECOND_SUNRISE", 431_474),
307    ("SUN_SEAR", 431_414),
308];
309static HERO_TREE_HERALD_OF_THE_SUN_AURAS: &[(&str, u32)] = &[
310    ("BLESSING_OF_ANSHE", 445_206),
311    ("BORN_IN_SUNLIGHT", 1_264_050),
312    ("DAWNLIGHT", 431_522),
313    ("MORNING_STAR", 431_539),
314    ("SOLAR_GRACE", 431_404),
315];
316pub(crate) mod DAMAGE_SPELL {
317    pub(crate) const CRUSADER_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_35395;
318    pub(crate) const JUDGMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_20271;
319    pub(crate) const BLADE_OF_JUSTICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_184575;
320    pub(crate) const TEMPLARS_VERDICT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_85256;
321    pub(crate) const DIVINE_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_53385;
322    pub(crate) const WAKE_OF_ASHES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_255937;
323    pub(crate) const AVENGING_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_31884;
324    pub(crate) const FINAL_VERDICT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383328;
325    pub(crate) const CRUSADING_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_408385;
326    pub(crate) const LIGHT_WITHIN_BOJ: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1261160;
327    pub(crate) const HIGHLORDS_JUDGMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383921;
328    pub(crate) const JUDGMENT_DIVINE_TOLL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_406957;
329    pub(crate) const HAMMER_OF_WRATH_DIVINE_TOLL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1279408;
330    pub(crate) const DIVINE_TOLL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_375576;
331    pub(crate) const HAMMER_OF_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_24275;
332    pub(crate) const EXECUTION_SENTENCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_343527;
333    pub(crate) const HAMMER_OF_LIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_427453;
334    pub(crate) const EMPYREAN_HAMMER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431398;
335    pub(crate) const DIVINE_EXACTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1260429;
336    pub(crate) const DIVINE_HAMMER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_198034;
337    pub(crate) const DIVINE_HAMMER_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_432929;
338    pub(crate) const DIVINE_HAMMER_TICK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_198137;
339    pub(crate) const EMPYREAN_HAMMER_WD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431625;
340    pub(crate) const HAMMERFALL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_432463;
341    pub(crate) const HIGHER_CALLING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431687;
342    pub(crate) const LIGHTS_DELIVERANCE_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_425518;
343    pub(crate) const LIGHTS_GUIDANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_427445;
344    pub(crate) const LIGHTS_JUDICATOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1261525;
345    pub(crate) const SANCTIFICATION_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_432977;
346    pub(crate) const SHAKE_THE_HEAVENS_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431533;
347    pub(crate) const UNDISPUTED_RULING_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_432626;
348    pub(crate) const ZEALOUS_VINDICATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431463;
349    pub(crate) const SECOND_SUNRISE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431474;
350    pub(crate) const SUN_SEAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431414;
351}
352pub(crate) mod DAMAGE_AURA {
353    pub(crate) const AVENGING_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_31884;
354    pub(crate) const EMPYREAN_POWER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_326733;
355    pub(crate) const EMPYREAN_LEGACY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_387178;
356    pub(crate) const DIVINE_PURPOSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_408458;
357    pub(crate) const DIVINE_POWER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1305230;
358    pub(crate) const DIVINE_ARBITER_VERDICT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1306161;
359    pub(crate) const DIVINE_ARBITER_DIVINE_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1306162;
360    pub(crate) const DIVINE_ARBITER_HAMMER_OF_LIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1310461;
361    pub(crate) const ART_OF_WAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_406086;
362    pub(crate) const RIGHTEOUS_CAUSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_402916;
363    pub(crate) const HAMMER_OF_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1277026;
364    pub(crate) const JUDGMENT_DEBUFF: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_197277;
365    pub(crate) const SANCTIFY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_382538;
366    pub(crate) const EXPURGATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383346;
367    pub(crate) const TRUTHS_WAKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_403695;
368    pub(crate) const CRUSADING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404542;
369    pub(crate) const ZEALOTS_FERVOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_403509;
370    pub(crate) const CONSECRATED_BLADE_LOCKOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_407475;
371    pub(crate) const SANCTIFICATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_433671;
372    pub(crate) const RUSH_OF_LIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_407065;
373    pub(crate) const EXECUTION_SENTENCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_343527;
374    pub(crate) const EXECUTION_SENTENCE_GATHER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1260251;
375    pub(crate) const EXECUTION_SENTENCE_TRACKER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1234189;
376    pub(crate) const HAMMER_OF_LIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_427441;
377    pub(crate) const HAMMER_OF_LIGHT_FREE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_433732;
378    pub(crate) const SHAKE_THE_HEAVENS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_431536;
379    pub(crate) const LIGHTS_DELIVERANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_433674;
380    pub(crate) const UNDISPUTED_RULING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_432629;
381    pub(crate) const DIVINE_HAMMER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_198034;
382}
383pub(crate) mod DAMAGE_TALENT {
384    pub(crate) const ART_OF_WAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_406064;
385    pub(crate) const BLADE_OF_JUSTICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_184575;
386    pub(crate) const BLADE_OF_VENGEANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404358;
387    pub(crate) const BLESSED_CHAMPION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_403010;
388    pub(crate) const BURN_TO_ASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_446663;
389    pub(crate) const CONSECRATED_BLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404834;
390    pub(crate) const CRUSADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1253598;
391    pub(crate) const CRUSADING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404542;
392    pub(crate) const DIVINE_PURPOSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_408459;
393    pub(crate) const DIVINE_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_53385;
394    pub(crate) const DIVINE_TOLL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_375576;
395    pub(crate) const EMPYREAN_LEGACY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_387170;
396    pub(crate) const EMPYREAN_POWER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_326732;
397    pub(crate) const EXECUTION_SENTENCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_343527;
398    pub(crate) const EXPURGATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383344;
399    pub(crate) const FINAL_VERDICT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383328;
400    pub(crate) const GREATER_JUDGMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_231663;
401    pub(crate) const HAMMER_OF_WRATH_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1241288;
402    pub(crate) const HEART_OF_THE_CRUSADER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_406154;
403    pub(crate) const HIGHLORDS_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404512;
404    pub(crate) const HOLY_BLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383342;
405    pub(crate) const IMPROVED_JUDGMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_405461;
406    pub(crate) const JUDGE_JURY_AND_EXECUTIONER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_453433;
407    pub(crate) const LIGHT_OF_JUSTICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404436;
408    pub(crate) const LIGHT_WITHIN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1261113;
409    pub(crate) const LIGHT_WITHIN_VERDICT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1261111;
410    pub(crate) const LIGHT_WITHIN_WAVE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1261159;
411    pub(crate) const QUICKENED_INVOCATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_379391;
412    pub(crate) const RADIANT_GLORY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_458359;
413    pub(crate) const RIGHTEOUS_CAUSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_402912;
414    pub(crate) const RUSH_OF_LIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_407067;
415    pub(crate) const SANCTIFY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_382536;
416    pub(crate) const SEETHING_FLAMES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_405355;
417    pub(crate) const TEMPEST_OF_THE_LIGHTBRINGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383396;
418    pub(crate) const TEMPLAR_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_406646;
419    pub(crate) const VENGEFUL_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1241958;
420    pub(crate) const WAKE_OF_ASHES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_255937;
421    pub(crate) const ZEALOTS_FERVOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_403509;
422}
423pub(crate) mod DAMAGE_REPORTED {
424    pub(crate) const BLADE_OF_VENGEANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_404358;
425    pub(crate) const DIVINE_ARBITER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1306923;
426    pub(crate) const EXECUTION_SENTENCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_387113;
427    pub(crate) const EXECUTION_SENTENCE_INIT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_1260251;
428    pub(crate) const EXPURGATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ACTION::SPELL_383346;
429}
430pub(crate) mod DAMAGE_EFFECT {
431    pub(crate) const BURN_TO_ASH_EXTEND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_446663_EFFECT_1;
432    pub(crate) const CONSECRATION_TIMING: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_26573_EFFECT_1;
433    pub(crate) const CONSECRATION_GEOMETRY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_26573_EFFECT_3;
434    pub(crate) const CONSECRATION_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_81297_EFFECT_1;
435    pub(crate) const EXECUTION_SENTENCE_ACCUM_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_343527_EFFECT_2;
436    pub(crate) const EXECUTION_SENTENCE_INIT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1260251_EFFECT_1;
437    pub(crate) const HIGHLORDS_MASTERY_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_267316_EFFECT_1;
438    pub(crate) const HIGHLORDS_MASTERY_FACTOR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_267316_EFFECT_4;
439    pub(crate) const HIGHLORDS_WRATH_DIVISOR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_404512_EFFECT_2;
440    pub(crate) const DIVINE_ARBITER_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1306923_EFFECT_1;
441    pub(crate) const MID2_DIVINE_PURPOSE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1296660_EFFECT_1;
442    pub(crate) const HIGHLORDS_JUDGMENT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_383921_EFFECT_1;
443    pub(crate) const HIGHLORDS_WRATH: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_404512_EFFECT_3;
444    pub(crate) const ART_OF_WAR_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_406064_EFFECT_1;
445    pub(crate) const ART_OF_WAR_CRIT_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_406064_EFFECT_2;
446    pub(crate) const LIGHT_WITHIN: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1261160_EFFECT_1;
447    pub(crate) const LIGHT_WITHIN_VERDICT_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1261111_EFFECT_1;
448    pub(crate) const LIGHT_WITHIN_WAVE_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1261159_EFFECT_1;
449    pub(crate) const RIGHTEOUS_CAUSE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_402912_EFFECT_1;
450    pub(crate) const CRUSADING_STRIKES_HP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_406834_EFFECT_1;
451    pub(crate) const EMPYREAN_POWER_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_326732_EFFECT_2;
452    pub(crate) const DIVINE_PURPOSE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_408459_EFFECT_1;
453    pub(crate) const DIVINE_STORM_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_53385_EFFECT_1;
454    pub(crate) const EMPYREAN_LEGACY_EFFECTIVENESS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_387170_EFFECT_2;
455    pub(crate) const EMPYREAN_HAMMER_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_431398_EFFECT_1;
456    pub(crate) const HAMMER_OF_LIGHT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_427453_EFFECT_1;
457    pub(crate) const LIGHTS_GUIDANCE_COUNT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_427445_EFFECT_2;
458    pub(crate) const LIGHTS_GUIDANCE_DELAY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_427445_EFFECT_4;
459    pub(crate) const LIGHTS_GUIDANCE_STAGGER: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_427445_EFFECT_3;
460    pub(crate) const ZEALOUS_VINDICATION_COUNT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_431463_EFFECT_1;
461    pub(crate) const HIGHER_CALLING_EXTEND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_431687_EFFECT_1;
462    pub(crate) const DIVINE_TOLL_HOW: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1279408_EFFECT_1;
463    pub(crate) const DIVINE_TOLL_JUDGMENT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_406957_EFFECT_1;
464    pub(crate) const HAMMER_OF_WRATH_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_24275_EFFECT_1;
465    pub(crate) const VENGEFUL_WRATH_MAX_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1241958_EFFECT_1;
466    pub(crate) const DIVINE_TOLL_ECHO_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_375576_EFFECT_6;
467    pub(crate) const DIVINE_EXACTION_COUNT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1260429_EFFECT_1;
468    pub(crate) const DIVINE_EXACTION_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1260429_EFFECT_2;
469    pub(crate) const JUDGMENT_DEBUFF_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_197277_EFFECT_1;
470    pub(crate) const HOLY_BLADE_ENERGIZE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_383342_EFFECT_1;
471    pub(crate) const CRUSADE_HASTE_PER_STACK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1253598_EFFECT_1;
472    pub(crate) const CRUSADE_HASTE_CAP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_1253598_EFFECT_2;
473    pub(crate) const AVENGING_WRATH_CRIT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_31884_EFFECT_3;
474    pub(crate) const AVENGING_WRATH_PERIODIC_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_31884_EFFECT_2;
475    pub(crate) const TRUTHS_WAKE_BURN_EFFECT_4: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::EFFECT::SPELL_403695_EFFECT_4;
476}
477pub(crate) const AURA_AVENGING_WRATH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_AVENGING_WRATH
478    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
479pub(crate) const AURA_EMPYREAN_POWER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_EMPYREAN_POWER
480    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
481pub(crate) const AURA_EMPYREAN_LEGACY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_EMPYREAN_LEGACY
482    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
483pub(crate) const AURA_DIVINE_PURPOSE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_DIVINE_PURPOSE
484    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
485pub(crate) const AURA_DIVINE_POWER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_DIVINE_POWER
486    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
487pub(crate) const AURA_DIVINE_ARBITER_VERDICT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_DIVINE_ARBITER_VERDICT
488    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
489pub(crate) const AURA_DIVINE_ARBITER_DIVINE_STORM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_DIVINE_ARBITER_DIVINE_STORM
490    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
491pub(crate) const AURA_DIVINE_ARBITER_HAMMER_OF_LIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_DIVINE_ARBITER_HAMMER_OF_LIGHT
492    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
493pub(crate) const AURA_ART_OF_WAR: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_ART_OF_WAR
494    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
495pub(crate) const AURA_RIGHTEOUS_CAUSE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_RIGHTEOUS_CAUSE
496    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
497pub(crate) const AURA_HAMMER_OF_WRATH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_HAMMER_OF_WRATH
498    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
499pub(crate) const AURA_JUDGMENT_DEBUFF: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_JUDGMENT_DEBUFF
500    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
501pub(crate) const AURA_SANCTIFY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_SANCTIFY
502    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
503pub(crate) const AURA_EXPURGATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_EXPURGATION
504    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
505pub(crate) const AURA_TRUTHS_WAKE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_TRUTHS_WAKE
506    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
507pub(crate) const AURA_CRUSADING_STRIKES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_CRUSADING_STRIKES
508    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
509pub(crate) const AURA_ZEALOTS_FERVOR: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_ZEALOTS_FERVOR
510    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
511pub(crate) const AURA_CONSECRATED_BLADE_LOCKOUT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_CONSECRATED_BLADE_LOCKOUT
512    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
513pub(crate) const AURA_SANCTIFICATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_SANCTIFICATION
514    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
515pub(crate) const AURA_RUSH_OF_LIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_RUSH_OF_LIGHT
516    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
517pub(crate) const AURA_EXECUTION_SENTENCE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_EXECUTION_SENTENCE
518    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
519pub(crate) const AURA_EXECUTION_SENTENCE_GATHER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_EXECUTION_SENTENCE_GATHER
520    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
521pub(crate) const AURA_EXECUTION_SENTENCE_TRACKER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_EXECUTION_SENTENCE_TRACKER
522    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
523pub(crate) const AURA_HAMMER_OF_LIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_HAMMER_OF_LIGHT
524    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
525pub(crate) const AURA_HAMMER_OF_LIGHT_FREE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_HAMMER_OF_LIGHT_FREE
526    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
527pub(crate) const AURA_SHAKE_THE_HEAVENS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_SHAKE_THE_HEAVENS
528    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
529pub(crate) const AURA_LIGHTS_DELIVERANCE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_LIGHTS_DELIVERANCE
530    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
531pub(crate) const AURA_UNDISPUTED_RULING: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_UNDISPUTED_RULING
532    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
533pub(crate) const AURA_DIVINE_HAMMER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::AURA_DIVINE_HAMMER
534    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
535pub(crate) const AURA_COUNT: usize = 29;
536const _: () = assert!(
537    AURA_COUNT == 29, "AURA index ABI: count changed -- update positional hook consumers"
538);
539pub(crate) const SPELL_CRUSADER_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_CRUSADER_STRIKE
540    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
541pub(crate) const SPELL_JUDGMENT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_JUDGMENT
542    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
543pub(crate) const SPELL_BLADE_OF_JUSTICE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_BLADE_OF_JUSTICE
544    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
545pub(crate) const SPELL_TEMPLARS_VERDICT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_TEMPLARS_VERDICT
546    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
547pub(crate) const SPELL_DIVINE_STORM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_DIVINE_STORM
548    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
549pub(crate) const SPELL_WAKE_OF_ASHES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_WAKE_OF_ASHES
550    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
551pub(crate) const SPELL_AVENGING_WRATH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_AVENGING_WRATH
552    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
553pub(crate) const SPELL_FINAL_VERDICT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_FINAL_VERDICT
554    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
555pub(crate) const SPELL_CRUSADING_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_CRUSADING_STRIKE
556    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
557pub(crate) const SPELL_LIGHT_WITHIN_BOJ: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_LIGHT_WITHIN_BOJ
558    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
559pub(crate) const SPELL_HIGHLORDS_JUDGMENT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_HIGHLORDS_JUDGMENT
560    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
561pub(crate) const SPELL_JUDGMENT_DIVINE_TOLL: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_JUDGMENT_DIVINE_TOLL
562    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
563pub(crate) const SPELL_HAMMER_OF_WRATH_DIVINE_TOLL: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_HAMMER_OF_WRATH_DIVINE_TOLL
564    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
565pub(crate) const SPELL_DIVINE_TOLL: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_DIVINE_TOLL
566    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
567pub(crate) const SPELL_HAMMER_OF_WRATH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_HAMMER_OF_WRATH
568    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
569pub(crate) const SPELL_EXECUTION_SENTENCE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_EXECUTION_SENTENCE
570    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
571pub(crate) const SPELL_HAMMER_OF_LIGHT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_HAMMER_OF_LIGHT
572    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
573pub(crate) const SPELL_EMPYREAN_HAMMER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::retribution_paladin::SPELL_EMPYREAN_HAMMER
574    .bind(wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF);
575pub(crate) const SPELL_COUNT: usize = 18;
576const _: () = assert!(
577    SPELL_COUNT == 18,
578    "SPELL index ABI: count changed -- update positional hook consumers"
579);
580pub(crate) mod EFFECT {
581    ///<https://wowlab.gg/inspect/spell/446663>
582    pub(crate) const BURN_TO_ASH_EXTEND: (u32, u8) = (446_663, 1);
583    ///<https://wowlab.gg/inspect/spell/26573>
584    pub(crate) const CONSECRATION_TIMING: (u32, u8) = (26573, 1);
585    ///<https://wowlab.gg/inspect/spell/26573>
586    pub(crate) const CONSECRATION_GEOMETRY: (u32, u8) = (26573, 3);
587    ///<https://wowlab.gg/inspect/spell/81297>
588    pub(crate) const CONSECRATION_DAMAGE: (u32, u8) = (81297, 1);
589    ///<https://wowlab.gg/inspect/spell/343527>
590    pub(crate) const EXECUTION_SENTENCE_ACCUM_PCT: (u32, u8) = (343_527, 2);
591    ///<https://wowlab.gg/inspect/spell/1260251>
592    pub(crate) const EXECUTION_SENTENCE_INIT: (u32, u8) = (1_260_251, 1);
593    ///<https://wowlab.gg/inspect/spell/267316>
594    pub(crate) const HIGHLORDS_MASTERY_DAMAGE: (u32, u8) = (267_316, 1);
595    ///<https://wowlab.gg/inspect/spell/267316>
596    pub(crate) const HIGHLORDS_MASTERY_FACTOR: (u32, u8) = (267_316, 4);
597    ///<https://wowlab.gg/inspect/spell/404512>
598    pub(crate) const HIGHLORDS_WRATH_DIVISOR: (u32, u8) = (404_512, 2);
599    ///<https://wowlab.gg/inspect/spell/1306923>
600    pub(crate) const DIVINE_ARBITER_DAMAGE: (u32, u8) = (1_306_923, 1);
601    ///<https://wowlab.gg/inspect/spell/1296660>
602    pub(crate) const MID2_DIVINE_PURPOSE_CHANCE: (u32, u8) = (1_296_660, 1);
603    ///<https://wowlab.gg/inspect/spell/383921>
604    pub(crate) const HIGHLORDS_JUDGMENT: (u32, u8) = (383_921, 1);
605    ///<https://wowlab.gg/inspect/spell/404512>
606    pub(crate) const HIGHLORDS_WRATH: (u32, u8) = (404_512, 3);
607    ///<https://wowlab.gg/inspect/spell/406064>
608    pub(crate) const ART_OF_WAR_CHANCE: (u32, u8) = (406_064, 1);
609    ///<https://wowlab.gg/inspect/spell/406064>
610    pub(crate) const ART_OF_WAR_CRIT_BONUS: (u32, u8) = (406_064, 2);
611    ///<https://wowlab.gg/inspect/spell/1261160>
612    pub(crate) const LIGHT_WITHIN: (u32, u8) = (1_261_160, 1);
613    ///<https://wowlab.gg/inspect/spell/1261111>
614    pub(crate) const LIGHT_WITHIN_VERDICT_BONUS: (u32, u8) = (1_261_111, 1);
615    ///<https://wowlab.gg/inspect/spell/1261159>
616    pub(crate) const LIGHT_WITHIN_WAVE_BONUS: (u32, u8) = (1_261_159, 1);
617    ///<https://wowlab.gg/inspect/spell/402912>
618    pub(crate) const RIGHTEOUS_CAUSE_CHANCE: (u32, u8) = (402_912, 1);
619    ///<https://wowlab.gg/inspect/spell/406834>
620    pub(crate) const CRUSADING_STRIKES_HP: (u32, u8) = (406_834, 1);
621    ///<https://wowlab.gg/inspect/spell/326732>
622    pub(crate) const EMPYREAN_POWER_CHANCE: (u32, u8) = (326_732, 2);
623    ///<https://wowlab.gg/inspect/spell/408459>
624    pub(crate) const DIVINE_PURPOSE_CHANCE: (u32, u8) = (408_459, 1);
625    ///<https://wowlab.gg/inspect/spell/53385>
626    pub(crate) const DIVINE_STORM_DAMAGE: (u32, u8) = (53385, 1);
627    ///<https://wowlab.gg/inspect/spell/387170>
628    pub(crate) const EMPYREAN_LEGACY_EFFECTIVENESS: (u32, u8) = (387_170, 2);
629    ///<https://wowlab.gg/inspect/spell/431398>
630    pub(crate) const EMPYREAN_HAMMER_DAMAGE: (u32, u8) = (431_398, 1);
631    ///<https://wowlab.gg/inspect/spell/427453>
632    pub(crate) const HAMMER_OF_LIGHT_DAMAGE: (u32, u8) = (427_453, 1);
633    ///<https://wowlab.gg/inspect/spell/427445>
634    pub(crate) const LIGHTS_GUIDANCE_COUNT: (u32, u8) = (427_445, 2);
635    ///<https://wowlab.gg/inspect/spell/427445>
636    pub(crate) const LIGHTS_GUIDANCE_DELAY: (u32, u8) = (427_445, 4);
637    ///<https://wowlab.gg/inspect/spell/427445>
638    pub(crate) const LIGHTS_GUIDANCE_STAGGER: (u32, u8) = (427_445, 3);
639    ///<https://wowlab.gg/inspect/spell/431463>
640    pub(crate) const ZEALOUS_VINDICATION_COUNT: (u32, u8) = (431_463, 1);
641    ///<https://wowlab.gg/inspect/spell/431687>
642    pub(crate) const HIGHER_CALLING_EXTEND: (u32, u8) = (431_687, 1);
643    ///<https://wowlab.gg/inspect/spell/1279408>
644    pub(crate) const DIVINE_TOLL_HOW: (u32, u8) = (1_279_408, 1);
645    ///<https://wowlab.gg/inspect/spell/406957>
646    pub(crate) const DIVINE_TOLL_JUDGMENT: (u32, u8) = (406_957, 1);
647    ///<https://wowlab.gg/inspect/spell/24275>
648    pub(crate) const HAMMER_OF_WRATH_DAMAGE: (u32, u8) = (24275, 1);
649    ///<https://wowlab.gg/inspect/spell/1241958>
650    pub(crate) const VENGEFUL_WRATH_MAX_BONUS: (u32, u8) = (1_241_958, 1);
651    ///<https://wowlab.gg/inspect/spell/375576>
652    pub(crate) const DIVINE_TOLL_ECHO_MULT: (u32, u8) = (375_576, 6);
653    ///<https://wowlab.gg/inspect/spell/1260429>
654    pub(crate) const DIVINE_EXACTION_COUNT: (u32, u8) = (1_260_429, 1);
655    ///<https://wowlab.gg/inspect/spell/1260429>
656    pub(crate) const DIVINE_EXACTION_MULT: (u32, u8) = (1_260_429, 2);
657    ///<https://wowlab.gg/inspect/spell/197277>
658    pub(crate) const JUDGMENT_DEBUFF_BONUS: (u32, u8) = (197_277, 1);
659    ///<https://wowlab.gg/inspect/spell/383342>
660    pub(crate) const HOLY_BLADE_ENERGIZE: (u32, u8) = (383_342, 1);
661    ///<https://wowlab.gg/inspect/spell/1253598>
662    pub(crate) const CRUSADE_HASTE_PER_STACK: (u32, u8) = (1_253_598, 1);
663    ///<https://wowlab.gg/inspect/spell/1253598>
664    pub(crate) const CRUSADE_HASTE_CAP: (u32, u8) = (1_253_598, 2);
665    ///<https://wowlab.gg/inspect/spell/31884>
666    pub(crate) const AVENGING_WRATH_CRIT: (u32, u8) = (31884, 3);
667    ///<https://wowlab.gg/inspect/spell/31884>
668    pub(crate) const AVENGING_WRATH_PERIODIC_DAMAGE: (u32, u8) = (31884, 2);
669    ///<https://wowlab.gg/inspect/spell/403695>
670    pub(crate) const TRUTHS_WAKE_BURN_EFFECT_4: (u32, u8) = (403_695, 4);
671}
672static REPORTED_SPELLS: &[(&str, u32)] = &[
673    ("blade_of_vengeance", 404_358),
674    ("divine_arbiter", 1_306_923),
675    ("execution_sentence", 387_113),
676    ("execution_sentence_init", 1_260_251),
677    ("expurgation", 383_346),
678];
679static DECLARED_SPELL_IDS: &[u32] = &[
680    35395, 20271, 184_575, 85256, 53385, 255_937, 31884, 383_328, 408_385, 1_261_160,
681    383_921, 406_957, 1_279_408, 375_576, 24275, 343_527, 427_453, 431_398, 326_733,
682    387_178, 408_458, 1_305_230, 1_306_161, 1_306_162, 1_310_461, 406_086, 402_916,
683    1_277_026, 197_277, 382_538, 383_346, 403_695, 404_542, 403_509, 407_475, 433_671,
684    407_065, 1_260_251, 1_234_189, 427_441, 433_732, 431_536, 433_674, 432_629, 198_034,
685    406_064, 404_358, 403_010, 446_663, 404_834, 1_253_598, 408_459, 387_170, 326_732,
686    383_344, 231_663, 1_241_288, 406_154, 404_512, 383_342, 405_461, 453_433, 404_436,
687    1_261_113, 1_261_111, 1_261_159, 379_391, 458_359, 402_912, 407_067, 382_536,
688    405_355, 383_396, 406_646, 1_241_958, 6603, 26573, 81297, 267_316, 387_113, 406_834,
689    427_445, 431_463, 431_687, 1_260_429, 1_296_660, 1_306_923, 432_929, 198_137,
690    431_625, 432_463, 425_518, 1_261_525, 432_977, 431_533, 432_626, 406_648, 431_474,
691    431_414, 445_206, 1_264_050, 431_522, 431_539, 431_404,
692];
693static DECLARED_AURA_IDS: &[u32] = &[
694    31884, 326_733, 387_178, 408_458, 1_305_230, 1_306_161, 1_306_162, 1_310_461,
695    406_086, 402_916, 1_277_026, 197_277, 382_538, 383_346, 403_695, 404_542, 403_509,
696    407_475, 433_671, 407_065, 343_527, 1_260_251, 1_234_189, 427_441, 433_732, 431_536,
697    433_674, 432_629, 198_034, 427_441, 433_674, 433_671, 431_536, 406_648, 432_629,
698    445_206, 1_264_050, 431_522, 431_539, 431_404,
699];
700static TALENTS: &[(&str, u32)] = &[
701    ("ART_OF_WAR", TALENT::ART_OF_WAR),
702    ("BLADE_OF_JUSTICE", TALENT::BLADE_OF_JUSTICE),
703    ("BLADE_OF_VENGEANCE", TALENT::BLADE_OF_VENGEANCE),
704    ("BLESSED_CHAMPION", TALENT::BLESSED_CHAMPION),
705    ("BURN_TO_ASH", TALENT::BURN_TO_ASH),
706    ("CONSECRATED_BLADE", TALENT::CONSECRATED_BLADE),
707    ("CRUSADE", TALENT::CRUSADE),
708    ("CRUSADING_STRIKES", TALENT::CRUSADING_STRIKES),
709    ("DIVINE_PURPOSE", TALENT::DIVINE_PURPOSE),
710    ("DIVINE_STORM", TALENT::DIVINE_STORM),
711    ("DIVINE_TOLL", TALENT::DIVINE_TOLL),
712    ("EMPYREAN_LEGACY", TALENT::EMPYREAN_LEGACY),
713    ("EMPYREAN_POWER", TALENT::EMPYREAN_POWER),
714    ("EXECUTION_SENTENCE", TALENT::EXECUTION_SENTENCE),
715    ("EXPURGATION", TALENT::EXPURGATION),
716    ("FINAL_VERDICT", TALENT::FINAL_VERDICT),
717    ("GREATER_JUDGMENT", TALENT::GREATER_JUDGMENT),
718    ("HAMMER_OF_WRATH_TALENT", TALENT::HAMMER_OF_WRATH_TALENT),
719    ("HEART_OF_THE_CRUSADER", TALENT::HEART_OF_THE_CRUSADER),
720    ("HIGHLORDS_WRATH", TALENT::HIGHLORDS_WRATH),
721    ("HOLY_BLADE", TALENT::HOLY_BLADE),
722    ("IMPROVED_JUDGMENT", TALENT::IMPROVED_JUDGMENT),
723    ("JUDGE_JURY_AND_EXECUTIONER", TALENT::JUDGE_JURY_AND_EXECUTIONER),
724    ("LIGHT_OF_JUSTICE", TALENT::LIGHT_OF_JUSTICE),
725    ("LIGHT_WITHIN", TALENT::LIGHT_WITHIN),
726    ("LIGHT_WITHIN_VERDICT", TALENT::LIGHT_WITHIN_VERDICT),
727    ("LIGHT_WITHIN_WAVE", TALENT::LIGHT_WITHIN_WAVE),
728    ("QUICKENED_INVOCATION", TALENT::QUICKENED_INVOCATION),
729    ("RADIANT_GLORY", TALENT::RADIANT_GLORY),
730    ("RIGHTEOUS_CAUSE", TALENT::RIGHTEOUS_CAUSE),
731    ("RUSH_OF_LIGHT", TALENT::RUSH_OF_LIGHT),
732    ("SANCTIFY", TALENT::SANCTIFY),
733    ("SEETHING_FLAMES", TALENT::SEETHING_FLAMES),
734    ("TEMPEST_OF_THE_LIGHTBRINGER", TALENT::TEMPEST_OF_THE_LIGHTBRINGER),
735    ("TEMPLAR_STRIKES", TALENT::TEMPLAR_STRIKES),
736    ("VENGEFUL_WRATH", TALENT::VENGEFUL_WRATH),
737    ("WAKE_OF_ASHES", TALENT::WAKE_OF_ASHES),
738    ("ZEALOTS_FERVOR", TALENT::ZEALOTS_FERVOR),
739];
740pub(crate) mod RETRIBUTION_PALADIN {
741    pub(crate) const CRUSADER_STRIKE_CASTS: u32 = 0;
742    pub(crate) const JUDGMENT_CASTS: u32 = 1;
743    pub(crate) const BLADE_OF_JUSTICE_CASTS: u32 = 2;
744    pub(crate) const TEMPLARS_VERDICT_CASTS: u32 = 3;
745    pub(crate) const DIVINE_STORM_CASTS: u32 = 4;
746    pub(crate) const WAKE_OF_ASHES_CASTS: u32 = 5;
747    pub(crate) const AVENGING_WRATH_CASTS: u32 = 6;
748    pub(crate) const AVENGING_WRATH_UPTIME_MS: u32 = 7;
749}
750fn aura_avenging_wrath(
751    a: AuraDefinitionDraft,
752    data: &ResolvedGameData,
753) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
754    Ok(
755        a
756            .on_player()
757            .apply_base_from_data(data, 31884)?
758            .max_stacks(
759                data
760                    .require_aura_max_stacks(
761                        wowlab_types::sim::SpellIdx::from_raw(31884),
762                    )?,
763            )
764            .on_expire(crate::hooks::retribution_paladin::avenging_wrath_expire_hook),
765    )
766}
767fn aura_empyrean_power(
768    a: AuraDefinitionDraft,
769    data: &ResolvedGameData,
770) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
771    Ok(
772        a
773            .on_player()
774            .apply_base_from_data(data, 326_733)?
775            .max_stacks(
776                data
777                    .require_aura_max_stacks(
778                        wowlab_types::sim::SpellIdx::from_raw(326_733),
779                    )?,
780            ),
781    )
782}
783fn aura_empyrean_legacy(
784    a: AuraDefinitionDraft,
785    data: &ResolvedGameData,
786) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
787    Ok(
788        a
789            .on_player()
790            .apply_base_from_data(data, 387_178)?
791            .max_stacks(
792                data
793                    .require_aura_max_stacks(
794                        wowlab_types::sim::SpellIdx::from_raw(387_178),
795                    )?,
796            ),
797    )
798}
799fn aura_divine_purpose(
800    a: AuraDefinitionDraft,
801    data: &ResolvedGameData,
802) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
803    Ok(
804        a
805            .on_player()
806            .apply_base_from_data(data, 408_458)?
807            .max_stacks(
808                data
809                    .require_aura_max_stacks(
810                        wowlab_types::sim::SpellIdx::from_raw(408_458),
811                    )?,
812            ),
813    )
814}
815fn aura_divine_power(
816    a: AuraDefinitionDraft,
817    data: &ResolvedGameData,
818) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
819    Ok(
820        a
821            .on_player()
822            .apply_base_from_data(data, 1_305_230)?
823            .max_stacks(
824                data
825                    .require_aura_max_stacks(
826                        wowlab_types::sim::SpellIdx::from_raw(1_305_230),
827                    )?,
828            ),
829    )
830}
831fn aura_divine_arbiter_verdict(
832    a: AuraDefinitionDraft,
833    data: &ResolvedGameData,
834) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
835    Ok(
836        a
837            .on_player()
838            .apply_base_from_data(data, 1_306_161)?
839            .max_stacks(
840                data
841                    .require_aura_max_stacks(
842                        wowlab_types::sim::SpellIdx::from_raw(1_306_161),
843                    )?,
844            ),
845    )
846}
847fn aura_divine_arbiter_divine_storm(
848    a: AuraDefinitionDraft,
849    data: &ResolvedGameData,
850) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
851    Ok(
852        a
853            .on_player()
854            .apply_base_from_data(data, 1_306_162)?
855            .max_stacks(
856                data
857                    .require_aura_max_stacks(
858                        wowlab_types::sim::SpellIdx::from_raw(1_306_162),
859                    )?,
860            ),
861    )
862}
863fn aura_divine_arbiter_hammer_of_light(
864    a: AuraDefinitionDraft,
865    data: &ResolvedGameData,
866) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
867    Ok(
868        a
869            .on_player()
870            .apply_base_from_data(data, 1_310_461)?
871            .max_stacks(
872                data
873                    .require_aura_max_stacks(
874                        wowlab_types::sim::SpellIdx::from_raw(1_310_461),
875                    )?,
876            ),
877    )
878}
879fn aura_art_of_war(
880    a: AuraDefinitionDraft,
881    data: &ResolvedGameData,
882) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
883    Ok(
884        a
885            .on_player()
886            .apply_base_from_data(data, 406_086)?
887            .max_stacks(
888                data
889                    .require_aura_max_stacks(
890                        wowlab_types::sim::SpellIdx::from_raw(406_086),
891                    )?,
892            ),
893    )
894}
895fn aura_righteous_cause(
896    a: AuraDefinitionDraft,
897    data: &ResolvedGameData,
898) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
899    Ok(
900        a
901            .on_player()
902            .apply_base_from_data(data, 402_916)?
903            .max_stacks(
904                data
905                    .require_aura_max_stacks(
906                        wowlab_types::sim::SpellIdx::from_raw(402_916),
907                    )?,
908            ),
909    )
910}
911fn aura_hammer_of_wrath(
912    a: AuraDefinitionDraft,
913    data: &ResolvedGameData,
914) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
915    Ok(
916        a
917            .on_player()
918            .apply_base_from_data(data, 1_277_026)?
919            .max_stacks(
920                data
921                    .require_aura_max_stacks(
922                        wowlab_types::sim::SpellIdx::from_raw(1_277_026),
923                    )?,
924            ),
925    )
926}
927fn aura_judgment_debuff(
928    a: AuraDefinitionDraft,
929    data: &ResolvedGameData,
930) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
931    Ok(
932        a
933            .on_target()
934            .apply_base_from_data(data, 197_277)?
935            .max_stacks(
936                data
937                    .require_aura_max_stacks(
938                        wowlab_types::sim::SpellIdx::from_raw(197_277),
939                    )?,
940            ),
941    )
942}
943fn aura_sanctify(
944    a: AuraDefinitionDraft,
945    data: &ResolvedGameData,
946) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
947    Ok(
948        a
949            .on_target()
950            .apply_base_from_data(data, 382_538)?
951            .max_stacks(
952                data
953                    .require_aura_max_stacks(
954                        wowlab_types::sim::SpellIdx::from_raw(382_538),
955                    )?,
956            ),
957    )
958}
959fn aura_expurgation(
960    a: AuraDefinitionDraft,
961    data: &ResolvedGameData,
962) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
963    Ok(
964        a
965            .on_target()
966            .apply_base_from_data(data, 383_346)?
967            .max_stacks(
968                data
969                    .require_aura_max_stacks(
970                        wowlab_types::sim::SpellIdx::from_raw(383_346),
971                    )?,
972            )
973            .snapshot(),
974    )
975}
976fn aura_truths_wake(
977    a: AuraDefinitionDraft,
978    data: &ResolvedGameData,
979) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
980    Ok(
981        a
982            .on_target()
983            .apply_base_from_data(data, 403_695)?
984            .max_stacks(
985                data
986                    .require_aura_max_stacks(
987                        wowlab_types::sim::SpellIdx::from_raw(403_695),
988                    )?,
989            )
990            .snapshot()
991            .hasted_periodic(),
992    )
993}
994fn aura_crusading_strikes(
995    a: AuraDefinitionDraft,
996    data: &ResolvedGameData,
997) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
998    Ok(
999        a
1000            .on_player()
1001            .apply_base_from_data(data, 404_542)?
1002            .max_stacks(
1003                data
1004                    .require_aura_max_stacks(
1005                        wowlab_types::sim::SpellIdx::from_raw(404_542),
1006                    )?,
1007            ),
1008    )
1009}
1010fn aura_zealots_fervor(
1011    a: AuraDefinitionDraft,
1012    data: &ResolvedGameData,
1013) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1014    Ok(
1015        a
1016            .on_player()
1017            .apply_base_from_data(data, 403_509)?
1018            .max_stacks(
1019                data
1020                    .require_aura_max_stacks(
1021                        wowlab_types::sim::SpellIdx::from_raw(403_509),
1022                    )?,
1023            ),
1024    )
1025}
1026fn aura_consecrated_blade_lockout(
1027    a: AuraDefinitionDraft,
1028    data: &ResolvedGameData,
1029) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1030    Ok(
1031        a
1032            .on_player()
1033            .apply_base_from_data(data, 407_475)?
1034            .max_stacks(
1035                data
1036                    .require_aura_max_stacks(
1037                        wowlab_types::sim::SpellIdx::from_raw(407_475),
1038                    )?,
1039            ),
1040    )
1041}
1042fn aura_sanctification(
1043    a: AuraDefinitionDraft,
1044    data: &ResolvedGameData,
1045) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1046    a.on_player()
1047        .duration_ms(
1048            wowlab_engine_combat::validated_milliseconds(
1049                (f64::from(
1050                    data
1051                        .require_aura_duration_ms(
1052                            wowlab_types::sim::SpellIdx::from_raw(433_671),
1053                        )?,
1054                )) * 0.833_333_333_333_333_4,
1055                433_671,
1056                "aura.duration_ms",
1057            )?,
1058        )
1059        .apply_periodic_effect_from_data(data, 433_671)?
1060        .apply_duration_behavior_from_data(data, 433_671)?
1061        .apply_timing_modifiers_from_data(data, 433_671)?
1062        .max_stacks(
1063            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(433_671))?,
1064        )
1065        .async_stacks()
1066        .damage_percent_spells_linear(
1067            data.base_points(wowlab_types::sim::SpellIdx::from_raw(433_671), 1),
1068            &[431_398],
1069        )?
1070        .apply_periodic_behavior_from_data(data, 433_671)
1071}
1072fn aura_rush_of_light(
1073    a: AuraDefinitionDraft,
1074    data: &ResolvedGameData,
1075) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1076    Ok(
1077        a
1078            .on_player()
1079            .apply_base_from_data(data, 407_065)?
1080            .max_stacks(
1081                data
1082                    .require_aura_max_stacks(
1083                        wowlab_types::sim::SpellIdx::from_raw(407_065),
1084                    )?,
1085            ),
1086    )
1087}
1088fn aura_execution_sentence(
1089    a: AuraDefinitionDraft,
1090    data: &ResolvedGameData,
1091) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1092    Ok(
1093        a
1094            .on_target()
1095            .apply_base_from_data(data, 343_527)?
1096            .max_stacks(
1097                data
1098                    .require_aura_max_stacks(
1099                        wowlab_types::sim::SpellIdx::from_raw(343_527),
1100                    )?,
1101            )
1102            .no_pandemic()
1103            .on_expire(crate::hooks::retribution_paladin::execution_sentence_expire_hook),
1104    )
1105}
1106fn aura_execution_sentence_gather(
1107    a: AuraDefinitionDraft,
1108    data: &ResolvedGameData,
1109) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1110    Ok(
1111        a
1112            .on_target()
1113            .apply_base_from_data(data, 1_260_251)?
1114            .max_stacks(
1115                data
1116                    .require_aura_max_stacks(
1117                        wowlab_types::sim::SpellIdx::from_raw(1_260_251),
1118                    )?,
1119            )
1120            .no_pandemic(),
1121    )
1122}
1123fn aura_execution_sentence_tracker(
1124    a: AuraDefinitionDraft,
1125    data: &ResolvedGameData,
1126) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1127    Ok(
1128        a
1129            .on_player()
1130            .apply_base_from_data(data, 1_234_189)?
1131            .max_stacks(
1132                data
1133                    .require_aura_max_stacks(
1134                        wowlab_types::sim::SpellIdx::from_raw(1_234_189),
1135                    )?,
1136            ),
1137    )
1138}
1139fn aura_hammer_of_light(
1140    a: AuraDefinitionDraft,
1141    data: &ResolvedGameData,
1142) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1143    Ok(
1144        a
1145            .on_player()
1146            .apply_base_from_data(data, 427_441)?
1147            .max_stacks(
1148                data
1149                    .require_aura_max_stacks(
1150                        wowlab_types::sim::SpellIdx::from_raw(427_441),
1151                    )?,
1152            )
1153            .on_expire(crate::hooks::retribution_paladin::lights_deliverance_check_hook),
1154    )
1155}
1156fn aura_hammer_of_light_free(
1157    a: AuraDefinitionDraft,
1158    data: &ResolvedGameData,
1159) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1160    Ok(
1161        a
1162            .on_player()
1163            .apply_base_from_data(data, 433_732)?
1164            .max_stacks(
1165                data
1166                    .require_aura_max_stacks(
1167                        wowlab_types::sim::SpellIdx::from_raw(433_732),
1168                    )?,
1169            ),
1170    )
1171}
1172fn aura_shake_the_heavens(
1173    a: AuraDefinitionDraft,
1174    data: &ResolvedGameData,
1175) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1176    Ok(
1177        a
1178            .on_player()
1179            .apply_base_from_data(data, 431_536)?
1180            .max_stacks(
1181                data
1182                    .require_aura_max_stacks(
1183                        wowlab_types::sim::SpellIdx::from_raw(431_536),
1184                    )?,
1185            )
1186            .periodic_hook(
1187                wowlab_engine_combat::validated_milliseconds(
1188                    data.period(wowlab_types::sim::SpellIdx::from_raw(431_536), 1),
1189                    431_536,
1190                    "periodic_hook.tick_ms",
1191                )?,
1192            )
1193            .apply_periodic_behavior_from_data(data, 431_536)?
1194            .partial_tick()
1195            .tick_hook(crate::hooks::retribution_paladin::sth_pulse_hook),
1196    )
1197}
1198fn aura_lights_deliverance(
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, 433_674)?
1206            .max_stacks(
1207                data
1208                    .require_aura_max_stacks(
1209                        wowlab_types::sim::SpellIdx::from_raw(433_674),
1210                    )?,
1211            ),
1212    )
1213}
1214fn aura_undisputed_ruling(
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, 432_629)?
1222            .max_stacks(
1223                data
1224                    .require_aura_max_stacks(
1225                        wowlab_types::sim::SpellIdx::from_raw(432_629),
1226                    )?,
1227            ),
1228    )
1229}
1230fn aura_divine_hammer(
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, 198_034)?
1238            .max_stacks(
1239                data
1240                    .require_aura_max_stacks(
1241                        wowlab_types::sim::SpellIdx::from_raw(198_034),
1242                    )?,
1243            )
1244            .periodic_hook(
1245                wowlab_engine_combat::validated_milliseconds(
1246                    data.period(wowlab_types::sim::SpellIdx::from_raw(198_034), 1),
1247                    198_034,
1248                    "periodic_hook.tick_ms",
1249                )?,
1250            )
1251            .apply_periodic_behavior_from_data(data, 198_034)?
1252            .partial_tick()
1253            .tick_hook(crate::hooks::retribution_paladin::divine_hammer_pulse_hook),
1254    )
1255}
1256fn spell_crusader_strike(
1257    s: SpellDefinitionDraft,
1258    data: &ResolvedGameData,
1259) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1260    Ok(s.apply_base_from_data(data, 35395)?.apply_aoe_from_data(data))
1261}
1262fn spell_judgment(
1263    s: SpellDefinitionDraft,
1264    data: &ResolvedGameData,
1265) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1266    Ok(
1267        s
1268            .apply_base_from_data(data, 20271)?
1269            .gain(1.0)
1270            .apply_aoe_from_data(data)
1271            .on_cast(crate::hooks::retribution_paladin::judgment_hook),
1272    )
1273}
1274fn spell_blade_of_justice(
1275    s: SpellDefinitionDraft,
1276    data: &ResolvedGameData,
1277) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1278    Ok(
1279        s
1280            .apply_base_from_data(data, 184_575)?
1281            .trigger_program_predicate(
1282                3,
1283                crate::hooks::retribution_paladin::blade_of_vengeance_trigger_disabled,
1284            )
1285            .apply_aoe_from_data(data)
1286            .on_cast(crate::hooks::retribution_paladin::blade_of_justice_hook),
1287    )
1288}
1289fn spell_templars_verdict(
1290    s: SpellDefinitionDraft,
1291    data: &ResolvedGameData,
1292) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1293    Ok(
1294        s
1295            .apply_base_from_data(data, 85256)?
1296            .apply_aoe_from_data(data)
1297            .on_cast(crate::hooks::retribution_paladin::templars_verdict_hook),
1298    )
1299}
1300fn spell_divine_storm(
1301    s: SpellDefinitionDraft,
1302    data: &ResolvedGameData,
1303) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1304    Ok(
1305        s
1306            .apply_base_from_data(data, 53385)?
1307            .apply_aoe_from_data(data)
1308            .on_cast(crate::hooks::retribution_paladin::divine_storm_hook),
1309    )
1310}
1311fn spell_wake_of_ashes(
1312    s: SpellDefinitionDraft,
1313    data: &ResolvedGameData,
1314) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1315    Ok(
1316        s
1317            .apply_base_from_data(data, 255_937)?
1318            .apply_aoe_from_data(data)
1319            .on_cast(crate::hooks::retribution_paladin::wake_of_ashes_hook),
1320    )
1321}
1322fn spell_avenging_wrath(
1323    s: SpellDefinitionDraft,
1324    data: &ResolvedGameData,
1325) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1326    Ok(
1327        s
1328            .apply_base_from_data(data, 31884)?
1329            .applies_inferred_aura(AURA_AVENGING_WRATH, 31884)
1330            .apply_aoe_from_data(data)
1331            .on_cast(crate::hooks::retribution_paladin::avenging_wrath_hook),
1332    )
1333}
1334fn spell_final_verdict(
1335    s: SpellDefinitionDraft,
1336    data: &ResolvedGameData,
1337) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1338    Ok(
1339        s
1340            .apply_base_from_data(data, 383_328)?
1341            .apply_aoe_from_data(data)
1342            .on_cast(crate::hooks::retribution_paladin::templars_verdict_hook),
1343    )
1344}
1345fn spell_crusading_strike(
1346    s: SpellDefinitionDraft,
1347    data: &ResolvedGameData,
1348) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1349    Ok(s.apply_base_from_data(data, 408_385)?.apply_aoe_from_data(data))
1350}
1351fn spell_light_within_boj(
1352    s: SpellDefinitionDraft,
1353    data: &ResolvedGameData,
1354) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1355    Ok(
1356        s
1357            .apply_base_from_data(data, 1_261_160)?
1358            .damage_flat(0.0)
1359            .apply_aoe_from_data(data),
1360    )
1361}
1362fn spell_highlords_judgment(
1363    s: SpellDefinitionDraft,
1364    data: &ResolvedGameData,
1365) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1366    Ok(s.apply_base_from_data(data, 383_921)?.damage_flat(0.0).apply_aoe_from_data(data))
1367}
1368fn spell_judgment_divine_toll(
1369    s: SpellDefinitionDraft,
1370    data: &ResolvedGameData,
1371) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1372    Ok(s.apply_base_from_data(data, 406_957)?.damage_flat(0.0).apply_aoe_from_data(data))
1373}
1374fn spell_hammer_of_wrath_divine_toll(
1375    s: SpellDefinitionDraft,
1376    data: &ResolvedGameData,
1377) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1378    Ok(
1379        s
1380            .apply_base_from_data(data, 1_279_408)?
1381            .damage_flat(0.0)
1382            .apply_aoe_from_data(data),
1383    )
1384}
1385fn spell_divine_toll(
1386    s: SpellDefinitionDraft,
1387    data: &ResolvedGameData,
1388) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1389    Ok(
1390        s
1391            .apply_base_from_data(data, 375_576)?
1392            .apply_aoe_from_data(data)
1393            .on_cast(crate::hooks::retribution_paladin::divine_toll_hook),
1394    )
1395}
1396fn spell_hammer_of_wrath(
1397    s: SpellDefinitionDraft,
1398    data: &ResolvedGameData,
1399) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1400    Ok(
1401        s
1402            .apply_base_from_data(data, 24275)?
1403            .damage_flat(0.0)
1404            .applies_inferred_aura(AURA_HAMMER_OF_WRATH, 1_277_026)
1405            .apply_aoe_from_data(data)
1406            .on_cast(crate::hooks::retribution_paladin::hammer_of_wrath_hook),
1407    )
1408}
1409fn spell_execution_sentence(
1410    s: SpellDefinitionDraft,
1411    data: &ResolvedGameData,
1412) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1413    Ok(
1414        s
1415            .apply_base_from_data(data, 343_527)?
1416            .without_primary_data_damage()
1417            .apply_aoe_from_data(data)
1418            .on_cast(crate::hooks::retribution_paladin::execution_sentence_hook),
1419    )
1420}
1421fn spell_hammer_of_light(
1422    s: SpellDefinitionDraft,
1423    data: &ResolvedGameData,
1424) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1425    Ok(
1426        s
1427            .apply_base_from_data(data, 427_453)?
1428            .cost(
1429                wowlab_engine_combat::validated_nonnegative(5.0, 427_453, "spell.cost")?,
1430            )
1431            .damage_flat(0.0)
1432            .applies_inferred_aura(AURA_HAMMER_OF_LIGHT, 427_441)
1433            .apply_aoe_from_data(data)
1434            .on_cast(crate::hooks::retribution_paladin::hammer_of_light_hook)
1435            .requires_aura_at_min_stacks(427_441, 0)
1436            .cost_free_when_aura(433_732),
1437    )
1438}
1439fn spell_empyrean_hammer(
1440    s: SpellDefinitionDraft,
1441    data: &ResolvedGameData,
1442) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1443    Ok(s.apply_base_from_data(data, 431_398)?.damage_flat(0.0).apply_aoe_from_data(data))
1444}
1445pub(crate) fn build_combat_system_draft(
1446    params: &wowlab_engine_ports::HandlerParams<'_>,
1447) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1448    let builder = CombatSystemBuilder::new(params.stats.clone())
1449        .spec_id(SpecId::Retribution)
1450        .spec_identity(
1451            wowlab_engine_combat::generated_identities::specs::retribution_paladin::PROOF,
1452        )
1453        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1454        .effect_identities(
1455            wowlab_engine_combat::generated_identities::specs::retribution_paladin::damage::ALL,
1456        )
1457        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1458        .mastery_spell(267_316)
1459        .mastery_hook(crate::hooks::retribution_paladin::mastery)
1460        .resource(
1461            "holy_power",
1462            5.0,
1463            params
1464                .game_data
1465                .power_regen_for_max(9, 5.0)
1466                .ok_or_else(|| {
1467                    wowlab_engine_ports::EngineError::spec_construction(
1468                        "missing power-type power_regen_for_max for type_id 9",
1469                    )
1470                })?,
1471        )
1472        .resource_type_id(9)
1473        .resource_start(
1474            params
1475                .game_data
1476                .power_default(9)
1477                .ok_or_else(|| {
1478                    wowlab_engine_ports::EngineError::spec_construction(
1479                        "missing power-type power_default for type_id 9",
1480                    )
1481                })?,
1482        )
1483        .aura(
1484            "avenging_wrath",
1485            AURA::AVENGING_WRATH,
1486            |a| aura_avenging_wrath(a, &params.game_data),
1487        )
1488        .aura(
1489            "empyrean_power",
1490            AURA::EMPYREAN_POWER,
1491            |a| aura_empyrean_power(a, &params.game_data),
1492        )
1493        .aura(
1494            "empyrean_legacy",
1495            AURA::EMPYREAN_LEGACY,
1496            |a| aura_empyrean_legacy(a, &params.game_data),
1497        )
1498        .aura(
1499            "divine_purpose",
1500            AURA::DIVINE_PURPOSE,
1501            |a| aura_divine_purpose(a, &params.game_data),
1502        )
1503        .aura(
1504            "divine_power",
1505            AURA::DIVINE_POWER,
1506            |a| aura_divine_power(a, &params.game_data),
1507        )
1508        .aura(
1509            "divine_arbiter_verdict",
1510            AURA::DIVINE_ARBITER_VERDICT,
1511            |a| aura_divine_arbiter_verdict(a, &params.game_data),
1512        )
1513        .aura(
1514            "divine_arbiter_divine_storm",
1515            AURA::DIVINE_ARBITER_DIVINE_STORM,
1516            |a| aura_divine_arbiter_divine_storm(a, &params.game_data),
1517        )
1518        .aura(
1519            "divine_arbiter_hammer_of_light",
1520            AURA::DIVINE_ARBITER_HAMMER_OF_LIGHT,
1521            |a| aura_divine_arbiter_hammer_of_light(a, &params.game_data),
1522        )
1523        .aura("art_of_war", AURA::ART_OF_WAR, |a| aura_art_of_war(a, &params.game_data))
1524        .aura(
1525            "righteous_cause",
1526            AURA::RIGHTEOUS_CAUSE,
1527            |a| aura_righteous_cause(a, &params.game_data),
1528        )
1529        .aura(
1530            "hammer_of_wrath",
1531            AURA::HAMMER_OF_WRATH,
1532            |a| aura_hammer_of_wrath(a, &params.game_data),
1533        )
1534        .aura(
1535            "judgment_debuff",
1536            AURA::JUDGMENT_DEBUFF,
1537            |a| aura_judgment_debuff(a, &params.game_data),
1538        )
1539        .aura("sanctify", AURA::SANCTIFY, |a| aura_sanctify(a, &params.game_data))
1540        .aura(
1541            "expurgation",
1542            AURA::EXPURGATION,
1543            |a| aura_expurgation(a, &params.game_data),
1544        )
1545        .aura(
1546            "truths_wake",
1547            AURA::TRUTHS_WAKE,
1548            |a| aura_truths_wake(a, &params.game_data),
1549        )
1550        .aura(
1551            "crusading_strikes",
1552            AURA::CRUSADING_STRIKES,
1553            |a| aura_crusading_strikes(a, &params.game_data),
1554        )
1555        .aura(
1556            "zealots_fervor",
1557            AURA::ZEALOTS_FERVOR,
1558            |a| aura_zealots_fervor(a, &params.game_data),
1559        )
1560        .aura(
1561            "consecrated_blade_lockout",
1562            AURA::CONSECRATED_BLADE_LOCKOUT,
1563            |a| aura_consecrated_blade_lockout(a, &params.game_data),
1564        )
1565        .aura(
1566            "sanctification",
1567            AURA::SANCTIFICATION,
1568            |a| aura_sanctification(a, &params.game_data),
1569        )
1570        .aura(
1571            "rush_of_light",
1572            AURA::RUSH_OF_LIGHT,
1573            |a| aura_rush_of_light(a, &params.game_data),
1574        )
1575        .aura(
1576            "execution_sentence",
1577            AURA::EXECUTION_SENTENCE,
1578            |a| aura_execution_sentence(a, &params.game_data),
1579        )
1580        .aura(
1581            "execution_sentence_gather",
1582            AURA::EXECUTION_SENTENCE_GATHER,
1583            |a| aura_execution_sentence_gather(a, &params.game_data),
1584        )
1585        .aura(
1586            "execution_sentence_tracker",
1587            AURA::EXECUTION_SENTENCE_TRACKER,
1588            |a| aura_execution_sentence_tracker(a, &params.game_data),
1589        )
1590        .aura(
1591            "hammer_of_light",
1592            AURA::HAMMER_OF_LIGHT,
1593            |a| aura_hammer_of_light(a, &params.game_data),
1594        )
1595        .aura(
1596            "hammer_of_light_free",
1597            AURA::HAMMER_OF_LIGHT_FREE,
1598            |a| aura_hammer_of_light_free(a, &params.game_data),
1599        )
1600        .aura(
1601            "shake_the_heavens",
1602            AURA::SHAKE_THE_HEAVENS,
1603            |a| aura_shake_the_heavens(a, &params.game_data),
1604        )
1605        .aura(
1606            "lights_deliverance",
1607            AURA::LIGHTS_DELIVERANCE,
1608            |a| aura_lights_deliverance(a, &params.game_data),
1609        )
1610        .aura(
1611            "undisputed_ruling",
1612            AURA::UNDISPUTED_RULING,
1613            |a| aura_undisputed_ruling(a, &params.game_data),
1614        )
1615        .aura(
1616            "divine_hammer",
1617            AURA::DIVINE_HAMMER,
1618            |a| aura_divine_hammer(a, &params.game_data),
1619        )
1620        .spell(
1621            "crusader_strike",
1622            SPELL::CRUSADER_STRIKE,
1623            |s| spell_crusader_strike(s, &params.game_data),
1624        )
1625        .spell("judgment", SPELL::JUDGMENT, |s| spell_judgment(s, &params.game_data))
1626        .spell(
1627            "blade_of_justice",
1628            SPELL::BLADE_OF_JUSTICE,
1629            |s| spell_blade_of_justice(s, &params.game_data),
1630        )
1631        .spell(
1632            "templars_verdict",
1633            SPELL::TEMPLARS_VERDICT,
1634            |s| spell_templars_verdict(s, &params.game_data),
1635        )
1636        .spell(
1637            "divine_storm",
1638            SPELL::DIVINE_STORM,
1639            |s| spell_divine_storm(s, &params.game_data),
1640        )
1641        .spell(
1642            "wake_of_ashes",
1643            SPELL::WAKE_OF_ASHES,
1644            |s| spell_wake_of_ashes(s, &params.game_data),
1645        )
1646        .spell(
1647            "avenging_wrath",
1648            SPELL::AVENGING_WRATH,
1649            |s| spell_avenging_wrath(s, &params.game_data),
1650        )
1651        .spell(
1652            "final_verdict",
1653            SPELL::FINAL_VERDICT,
1654            |s| spell_final_verdict(s, &params.game_data),
1655        )
1656        .spell(
1657            "crusading_strike",
1658            SPELL::CRUSADING_STRIKE,
1659            |s| spell_crusading_strike(s, &params.game_data),
1660        )
1661        .spell(
1662            "light_within_boj",
1663            SPELL::LIGHT_WITHIN_BOJ,
1664            |s| spell_light_within_boj(s, &params.game_data),
1665        )
1666        .spell(
1667            "highlords_judgment",
1668            SPELL::HIGHLORDS_JUDGMENT,
1669            |s| spell_highlords_judgment(s, &params.game_data),
1670        )
1671        .spell(
1672            "judgment_divine_toll",
1673            SPELL::JUDGMENT_DIVINE_TOLL,
1674            |s| spell_judgment_divine_toll(s, &params.game_data),
1675        )
1676        .spell(
1677            "hammer_of_wrath_divine_toll",
1678            SPELL::HAMMER_OF_WRATH_DIVINE_TOLL,
1679            |s| spell_hammer_of_wrath_divine_toll(s, &params.game_data),
1680        )
1681        .spell(
1682            "divine_toll",
1683            SPELL::DIVINE_TOLL,
1684            |s| spell_divine_toll(s, &params.game_data),
1685        )
1686        .spell(
1687            "hammer_of_wrath",
1688            SPELL::HAMMER_OF_WRATH,
1689            |s| spell_hammer_of_wrath(s, &params.game_data),
1690        )
1691        .spell(
1692            "execution_sentence",
1693            SPELL::EXECUTION_SENTENCE,
1694            |s| spell_execution_sentence(s, &params.game_data),
1695        )
1696        .spell(
1697            "hammer_of_light",
1698            SPELL::HAMMER_OF_LIGHT,
1699            |s| spell_hammer_of_light(s, &params.game_data),
1700        )
1701        .spell(
1702            "empyrean_hammer",
1703            SPELL::EMPYREAN_HAMMER,
1704            |s| spell_empyrean_hammer(s, &params.game_data),
1705        )
1706        .auto_attack(|a| {
1707            a
1708                .spell_id(6603)
1709                .swing_ms(3600)
1710                .apply_base_from_data(&params.game_data)
1711                .on_swing(crate::hooks::retribution_paladin::swing_hook)
1712        })
1713        .game_data(params.game_data.clone())
1714        .talent_spell_ids(TALENTS)
1715        .talent_selections(params.talent_selections)
1716        .talent_gated_aura_effect(TALENT::CRUSADE, AURA_AVENGING_WRATH, 31884, 11)
1717        .talent_gated_aura_effect(TALENT::BURN_TO_ASH, AURA_TRUTHS_WAKE, 403_695, 4)
1718        .talent_gated_aura_effect(TALENT::BURN_TO_ASH, AURA_TRUTHS_WAKE, 403_695, 5)
1719        .talent_gated_aura_effect(TALENT::BURN_TO_ASH, AURA_TRUTHS_WAKE, 403_695, 6)
1720        .set_bonus_auras(params.set_bonus_auras)
1721        .encounter(params.encounter.clone());
1722    let builder = crate::generated::items::register_equipped(
1723        builder,
1724        &params.game_data,
1725        params.equipped_items,
1726    )?;
1727
1728    builder.into_draft()
1729}
1730fn new_handler(
1731    params: wowlab_engine_ports::HandlerParams<'_>,
1732) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1733    let handler = crate::composition::compose_handler(
1734        build_combat_system_draft,
1735        &params,
1736        crate::hooks::retribution_paladin::RetributionHandler::new,
1737    )?;
1738
1739    Ok(Box::new(handler))
1740}
1741static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1742    primary_resource: ResourceType::HolyPower,
1743    secondary_resource: None,
1744    spell_ids: DECLARED_SPELL_IDS,
1745    aura_ids: DECLARED_AURA_IDS,
1746    server_proc_entries: &[],
1747    talents: TALENTS,
1748    rotation_field_schema: &[],
1749    metrics_plugin_id: None,
1750    hero_talent_trees: &[
1751        HeroTalentTreeDesc {
1752            name: "Templar",
1753            spells: HERO_TREE_TEMPLAR_SPELLS,
1754            auras: HERO_TREE_TEMPLAR_AURAS,
1755        },
1756        HeroTalentTreeDesc {
1757            name: "Herald Of The Sun",
1758            spells: HERO_TREE_HERALD_OF_THE_SUN_SPELLS,
1759            auras: HERO_TREE_HERALD_OF_THE_SUN_AURAS,
1760        },
1761    ],
1762    reported_spells: REPORTED_SPELLS,
1763    masked_passive_effects: &[],
1764    passive_effect_overrides: &[],
1765};
1766pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1767    spec_id: SpecId::Retribution,
1768    display_name: "Retribution Paladin",
1769    metadata: DECLARED_METADATA,
1770    handler_factory: new_handler,
1771};
1772wowlab_engine_combat::smoke_test!(build_combat_system_draft);