Skip to main content

wowlab_engine_content/generated/specs/
fury_warrior.rs

1//! @generated by codegen-cli from manifests/specs/warrior/fury/manifest.toml -- do not edit by hand.
2// Generated code: naming follows game data conventions
3#![allow(non_snake_case, dead_code)]
4use wowlab_types::{combat::ResourceType, game::SpecId};
5use wowlab_engine_domain::dbc::ProcAttributes;
6use wowlab_engine_combat::{
7    CombatSystemBuilder, CombatSystemDraft, AuraDefinitionDraft, LocalAuraIdx,
8    LocalSpellIdx, SpellDefinitionDraft,
9};
10use wowlab_engine_ports::{
11    DeclaredSpecMetadata, SpecDescriptor, SpecHandler, HeroTalentTreeDesc,
12    DeclaredServerProcEntry,
13};
14use wowlab_engine_gamedata::ResolvedGameData;
15pub(crate) mod SPELL {
16    ///<https://wowlab.gg/inspect/spell/23881>
17    pub(crate) const BLOODTHIRST: u32 = 23881;
18    ///<https://wowlab.gg/inspect/spell/85288>
19    pub(crate) const RAGING_BLOW: u32 = 85288;
20    ///<https://wowlab.gg/inspect/spell/184367>
21    pub(crate) const RAMPAGE: u32 = 184_367;
22    ///<https://wowlab.gg/inspect/spell/280735>
23    pub(crate) const EXECUTE: u32 = 280_735;
24    ///<https://wowlab.gg/inspect/spell/190411>
25    pub(crate) const WHIRLWIND: u32 = 190_411;
26    ///<https://wowlab.gg/inspect/spell/1719>
27    pub(crate) const RECKLESSNESS: u32 = 1719;
28    ///<https://wowlab.gg/inspect/spell/107574>
29    pub(crate) const AVATAR: u32 = 107_574;
30    ///<https://wowlab.gg/inspect/spell/335096>
31    pub(crate) const BLOODBATH: u32 = 335_096;
32    ///<https://wowlab.gg/inspect/spell/335097>
33    pub(crate) const CRUSHING_BLOW: u32 = 335_097;
34    ///<https://wowlab.gg/inspect/spell/6343>
35    pub(crate) const THUNDER_CLAP: u32 = 6343;
36    ///<https://wowlab.gg/inspect/spell/772>
37    pub(crate) const REND: u32 = 772;
38    ///<https://wowlab.gg/inspect/spell/6673>
39    pub(crate) const BATTLE_SHOUT: u32 = 6673;
40    ///<https://wowlab.gg/inspect/spell/1464>
41    pub(crate) const SLAM: u32 = 1464;
42    ///<https://wowlab.gg/inspect/spell/57755>
43    pub(crate) const HEROIC_THROW: u32 = 57755;
44    ///<https://wowlab.gg/inspect/spell/227847>
45    pub(crate) const BLADESTORM: u32 = 227_847;
46    ///<https://wowlab.gg/inspect/spell/385059>
47    pub(crate) const ODYNS_FURY: u32 = 385_059;
48    ///<https://wowlab.gg/inspect/spell/228920>
49    pub(crate) const RAVAGER: u32 = 228_920;
50    ///<https://wowlab.gg/inspect/spell/445579>
51    pub(crate) const SLAYERS_STRIKE: u32 = 445_579;
52    ///<https://wowlab.gg/inspect/spell/446005>
53    pub(crate) const REAP_THE_STORM_EXECUTE: u32 = 446_005;
54}
55pub(crate) mod AURA {
56    ///<https://wowlab.gg/inspect/spell/184362>
57    pub(crate) const ENRAGE: u32 = 184_362;
58    ///<https://wowlab.gg/inspect/spell/1719>
59    pub(crate) const RECKLESSNESS: u32 = 1719;
60    ///<https://wowlab.gg/inspect/spell/1296646>
61    pub(crate) const MID2_RECKLESSNESS_CRIT: u32 = 1_296_646;
62    ///<https://wowlab.gg/inspect/spell/85739>
63    pub(crate) const WHIRLWIND: u32 = 85739;
64    ///<https://wowlab.gg/inspect/spell/107574>
65    pub(crate) const AVATAR: u32 = 107_574;
66    ///<https://wowlab.gg/inspect/spell/335082>
67    pub(crate) const FRENZY: u32 = 335_082;
68    ///<https://wowlab.gg/inspect/spell/52437>
69    pub(crate) const SUDDEN_DEATH: u32 = 52437;
70    ///<https://wowlab.gg/inspect/spell/388539>
71    pub(crate) const REND: u32 = 388_539;
72    ///<https://wowlab.gg/inspect/spell/113344>
73    pub(crate) const BLOODBATH_DOT: u32 = 113_344;
74    ///<https://wowlab.gg/inspect/spell/385042>
75    pub(crate) const GUSHING_WOUND: u32 = 385_042;
76    ///<https://wowlab.gg/inspect/spell/6673>
77    pub(crate) const BATTLE_SHOUT: u32 = 6673;
78    ///<https://wowlab.gg/inspect/spell/184367>
79    pub(crate) const RAMPAGE: u32 = 184_367;
80    ///<https://wowlab.gg/inspect/spell/262115>
81    pub(crate) const DEEP_WOUNDS: u32 = 262_115;
82    ///<https://wowlab.gg/inspect/spell/392778>
83    pub(crate) const WILD_STRIKES: u32 = 392_778;
84    ///<https://wowlab.gg/inspect/spell/1265560>
85    pub(crate) const SURGE_OF_ADRENALINE: u32 = 1_265_560;
86    ///<https://wowlab.gg/inspect/spell/1265406>
87    pub(crate) const BLOODBORNE: u32 = 1_265_406;
88    ///<https://wowlab.gg/inspect/spell/386196>
89    pub(crate) const BERSERKER_STANCE: u32 = 386_196;
90    ///<https://wowlab.gg/inspect/spell/227847>
91    pub(crate) const BLADESTORM: u32 = 227_847;
92    ///<https://wowlab.gg/inspect/spell/385060>
93    pub(crate) const ODYNS_FURY_DOT: u32 = 385_060;
94    ///<https://wowlab.gg/inspect/spell/228920>
95    pub(crate) const RAVAGER: u32 = 228_920;
96    ///<https://wowlab.gg/inspect/spell/445584>
97    pub(crate) const EXECUTIONER: u32 = 445_584;
98    ///<https://wowlab.gg/inspect/spell/445836>
99    pub(crate) const OVERWHELMED: u32 = 445_836;
100    ///<https://wowlab.gg/inspect/spell/445606>
101    pub(crate) const IMMINENT_DEMISE: u32 = 445_606;
102    ///<https://wowlab.gg/inspect/spell/1265575>
103    pub(crate) const EXECUTIONERS_WRATH: u32 = 1_265_575;
104    ///<https://wowlab.gg/inspect/spell/435615>
105    pub(crate) const THUNDER_BLAST: u32 = 435_615;
106    ///<https://wowlab.gg/inspect/spell/436707>
107    pub(crate) const CRASHING_THUNDER: u32 = 436_707;
108}
109pub(crate) mod TALENT {
110    ///<https://wowlab.gg/inspect/spell/152278>
111    pub(crate) const ANGER_MANAGEMENT: u32 = 152_278;
112    ///<https://wowlab.gg/inspect/spell/107574>
113    pub(crate) const AVATAR: u32 = 107_574;
114    ///<https://wowlab.gg/inspect/spell/386196>
115    pub(crate) const BERSERKER_STANCE: u32 = 386_196;
116    ///<https://wowlab.gg/inspect/spell/385703>
117    pub(crate) const BLOODBORNE: u32 = 385_703;
118    ///<https://wowlab.gg/inspect/spell/383959>
119    pub(crate) const COLD_STEEL_HOT_BLOOD: u32 = 383_959;
120    ///<https://wowlab.gg/inspect/spell/1261060>
121    pub(crate) const DEEP_WOUNDS: u32 = 1_261_060;
122    ///<https://wowlab.gg/inspect/spell/1265570>
123    pub(crate) const EXECUTIONERS_WRATH: u32 = 1_265_570;
124    ///<https://wowlab.gg/inspect/spell/392792>
125    pub(crate) const FROTHING_BERSERKER: u32 = 392_792;
126    ///<https://wowlab.gg/inspect/spell/383877>
127    pub(crate) const HACK_AND_SLASH: u32 = 383_877;
128    ///<https://wowlab.gg/inspect/spell/444769>
129    pub(crate) const IMMINENT_DEMISE: u32 = 444_769;
130    ///<https://wowlab.gg/inspect/spell/316402>
131    pub(crate) const IMPROVED_EXECUTE: u32 = 316_402;
132    ///<https://wowlab.gg/inspect/spell/383854>
133    pub(crate) const IMPROVED_RAGING_BLOW: u32 = 383_854;
134    ///<https://wowlab.gg/inspect/spell/12950>
135    pub(crate) const IMPROVED_WHIRLWIND: u32 = 12950;
136    ///<https://wowlab.gg/inspect/spell/206315>
137    pub(crate) const MASSACRE: u32 = 206_315;
138    ///<https://wowlab.gg/inspect/spell/444772>
139    pub(crate) const OVERWHELMING_BLADES: u32 = 444_772;
140    ///<https://wowlab.gg/inspect/spell/1269308>
141    pub(crate) const RAMPAGING_BERSERKER: u32 = 1_269_308;
142    ///<https://wowlab.gg/inspect/spell/1269309>
143    pub(crate) const RAMPAGING_BERSERKER_2: u32 = 1_269_309;
144    ///<https://wowlab.gg/inspect/spell/1265357>
145    pub(crate) const RAMPAGING_RUIN: u32 = 1_265_357;
146    ///<https://wowlab.gg/inspect/spell/444775>
147    pub(crate) const REAP_THE_STORM: u32 = 444_775;
148    ///<https://wowlab.gg/inspect/spell/396749>
149    pub(crate) const RECKLESS_ABANDON: u32 = 396_749;
150    ///<https://wowlab.gg/inspect/spell/444767>
151    pub(crate) const SLAYERS_DOMINANCE: u32 = 444_767;
152    ///<https://wowlab.gg/inspect/spell/444779>
153    pub(crate) const SLAYERS_MALICE: u32 = 444_779;
154    ///<https://wowlab.gg/inspect/spell/29725>
155    pub(crate) const SUDDEN_DEATH: u32 = 29725;
156    ///<https://wowlab.gg/inspect/spell/1265359>
157    pub(crate) const SURGE_OF_ADRENALINE: u32 = 1_265_359;
158    ///<https://wowlab.gg/inspect/spell/6343>
159    pub(crate) const THUNDER_CLAP: u32 = 6343;
160    ///<https://wowlab.gg/inspect/spell/386628>
161    pub(crate) const UNHINGED: u32 = 386_628;
162    ///<https://wowlab.gg/inspect/spell/444780>
163    pub(crate) const UNRELENTING_ONSLAUGHT: u32 = 444_780;
164    ///<https://wowlab.gg/inspect/spell/262231>
165    pub(crate) const WAR_MACHINE: u32 = 262_231;
166    ///<https://wowlab.gg/inspect/spell/382946>
167    pub(crate) const WILD_STRIKES: u32 = 382_946;
168    ///<https://wowlab.gg/inspect/spell/392936>
169    pub(crate) const WRATH_AND_FURY: u32 = 392_936;
170}
171pub(crate) mod SET_BONUS {
172    ///<https://wowlab.gg/inspect/spell/1296645>
173    pub(crate) const MID2_FURY_2PC: u32 = 1_296_645;
174    ///<https://wowlab.gg/inspect/spell/1296646>
175    pub(crate) const MID2_FURY_4PC: u32 = 1_296_646;
176}
177pub(crate) mod REPORTED_SPELL {
178    ///<https://wowlab.gg/inspect/spell/335098>
179    pub(crate) const CRUSHING_BLOW_MAIN_HAND: u32 = 335_098;
180    ///<https://wowlab.gg/inspect/spell/335100>
181    pub(crate) const CRUSHING_BLOW_OFF_HAND: u32 = 335_100;
182    ///<https://wowlab.gg/inspect/spell/96103>
183    pub(crate) const RAGING_BLOW_MAIN_HAND: u32 = 96103;
184    ///<https://wowlab.gg/inspect/spell/85384>
185    pub(crate) const RAGING_BLOW_OFF_HAND: u32 = 85384;
186}
187pub(crate) mod HERO {
188    pub(crate) mod SLAYER {
189        pub(crate) mod SPELL {
190            ///<https://wowlab.gg/inspect/spell/446005>
191            pub(crate) const REAP_THE_STORM: u32 = 446_005;
192            ///<https://wowlab.gg/inspect/spell/445579>
193            pub(crate) const SLAYERS_STRIKE: u32 = 445_579;
194        }
195        pub(crate) mod AURA {
196            ///<https://wowlab.gg/inspect/spell/446918>
197            pub(crate) const BRUTAL_FINISH: u32 = 446_918;
198            ///<https://wowlab.gg/inspect/spell/458689>
199            pub(crate) const FIERCE_FOLLOWTHROUGH: u32 = 458_689;
200            ///<https://wowlab.gg/inspect/spell/456120>
201            pub(crate) const OPPORTUNIST: u32 = 456_120;
202            ///<https://wowlab.gg/inspect/spell/1270731>
203            pub(crate) const VIOLENT_EUPHORIA: u32 = 1_270_731;
204        }
205    }
206    pub(crate) mod MOUNTAIN_THANE {
207        pub(crate) mod SPELL {
208            ///<https://wowlab.gg/inspect/spell/460670>
209            pub(crate) const GROUND_CURRENT: u32 = 460_670;
210            ///<https://wowlab.gg/inspect/spell/435791>
211            pub(crate) const LIGHTNING_STRIKE: u32 = 435_791;
212            ///<https://wowlab.gg/inspect/spell/435222>
213            pub(crate) const THUNDER_BLAST: u32 = 435_222;
214        }
215        pub(crate) mod AURA {
216            ///<https://wowlab.gg/inspect/spell/437121>
217            pub(crate) const BURST_OF_POWER: u32 = 437_121;
218            ///<https://wowlab.gg/inspect/spell/435615>
219            pub(crate) const THUNDER_BLAST_BUFF: u32 = 435_615;
220        }
221    }
222}
223static HERO_TREE_SLAYER_SPELLS: &[(&str, u32)] = &[
224    ("REAP_THE_STORM", 446_005),
225    ("SLAYERS_STRIKE", 445_579),
226];
227static HERO_TREE_SLAYER_AURAS: &[(&str, u32)] = &[
228    ("BRUTAL_FINISH", 446_918),
229    ("FIERCE_FOLLOWTHROUGH", 458_689),
230    ("OPPORTUNIST", 456_120),
231    ("VIOLENT_EUPHORIA", 1_270_731),
232];
233static HERO_TREE_MOUNTAIN_THANE_SPELLS: &[(&str, u32)] = &[
234    ("GROUND_CURRENT", 460_670),
235    ("LIGHTNING_STRIKE", 435_791),
236    ("THUNDER_BLAST", 435_222),
237];
238static HERO_TREE_MOUNTAIN_THANE_AURAS: &[(&str, u32)] = &[
239    ("BURST_OF_POWER", 437_121),
240    ("THUNDER_BLAST_BUFF", 435_615),
241];
242pub(crate) mod DAMAGE_SPELL {
243    pub(crate) const BLOODTHIRST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_23881;
244    pub(crate) const RAGING_BLOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_85288;
245    pub(crate) const RAMPAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_184367;
246    pub(crate) const EXECUTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_280735;
247    pub(crate) const WHIRLWIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_190411;
248    pub(crate) const RECKLESSNESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1719;
249    pub(crate) const AVATAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_107574;
250    pub(crate) const BLOODBATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_335096;
251    pub(crate) const CRUSHING_BLOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_335097;
252    pub(crate) const THUNDER_CLAP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_6343;
253    pub(crate) const REND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_772;
254    pub(crate) const BATTLE_SHOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_6673;
255    pub(crate) const SLAM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1464;
256    pub(crate) const HEROIC_THROW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_57755;
257    pub(crate) const BLADESTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_227847;
258    pub(crate) const ODYNS_FURY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_385059;
259    pub(crate) const RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_228920;
260    pub(crate) const SLAYERS_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_445579;
261    pub(crate) const REAP_THE_STORM_EXECUTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_446005;
262    pub(crate) const REAP_THE_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_446005;
263    pub(crate) const GROUND_CURRENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_460670;
264    pub(crate) const LIGHTNING_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_435791;
265    pub(crate) const THUNDER_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_435222;
266}
267pub(crate) mod DAMAGE_AURA {
268    pub(crate) const ENRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_184362;
269    pub(crate) const RECKLESSNESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1719;
270    pub(crate) const MID2_RECKLESSNESS_CRIT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1296646;
271    pub(crate) const WHIRLWIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_85739;
272    pub(crate) const AVATAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_107574;
273    pub(crate) const FRENZY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_335082;
274    pub(crate) const SUDDEN_DEATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_52437;
275    pub(crate) const REND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_388539;
276    pub(crate) const BLOODBATH_DOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_113344;
277    pub(crate) const GUSHING_WOUND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_385042;
278    pub(crate) const BATTLE_SHOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_6673;
279    pub(crate) const RAMPAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_184367;
280    pub(crate) const DEEP_WOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_262115;
281    pub(crate) const WILD_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_392778;
282    pub(crate) const SURGE_OF_ADRENALINE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1265560;
283    pub(crate) const BLOODBORNE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1265406;
284    pub(crate) const BERSERKER_STANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_386196;
285    pub(crate) const BLADESTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_227847;
286    pub(crate) const ODYNS_FURY_DOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_385060;
287    pub(crate) const RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_228920;
288    pub(crate) const EXECUTIONER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_445584;
289    pub(crate) const OVERWHELMED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_445836;
290    pub(crate) const IMMINENT_DEMISE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_445606;
291    pub(crate) const EXECUTIONERS_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1265575;
292    pub(crate) const THUNDER_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_435615;
293    pub(crate) const CRASHING_THUNDER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_436707;
294}
295pub(crate) mod DAMAGE_TALENT {
296    pub(crate) const ANGER_MANAGEMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_152278;
297    pub(crate) const AVATAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_107574;
298    pub(crate) const BERSERKER_STANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_386196;
299    pub(crate) const BLOODBORNE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_385703;
300    pub(crate) const COLD_STEEL_HOT_BLOOD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_383959;
301    pub(crate) const DEEP_WOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1261060;
302    pub(crate) const EXECUTIONERS_WRATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1265570;
303    pub(crate) const FROTHING_BERSERKER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_392792;
304    pub(crate) const HACK_AND_SLASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_383877;
305    pub(crate) const IMMINENT_DEMISE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_444769;
306    pub(crate) const IMPROVED_EXECUTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_316402;
307    pub(crate) const IMPROVED_RAGING_BLOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_383854;
308    pub(crate) const IMPROVED_WHIRLWIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_12950;
309    pub(crate) const MASSACRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_206315;
310    pub(crate) const OVERWHELMING_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_444772;
311    pub(crate) const RAMPAGING_BERSERKER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1269308;
312    pub(crate) const RAMPAGING_BERSERKER_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1269309;
313    pub(crate) const RAMPAGING_RUIN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1265357;
314    pub(crate) const REAP_THE_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_444775;
315    pub(crate) const RECKLESS_ABANDON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_396749;
316    pub(crate) const SLAYERS_DOMINANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_444767;
317    pub(crate) const SLAYERS_MALICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_444779;
318    pub(crate) const SUDDEN_DEATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_29725;
319    pub(crate) const SURGE_OF_ADRENALINE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_1265359;
320    pub(crate) const THUNDER_CLAP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_6343;
321    pub(crate) const UNHINGED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_386628;
322    pub(crate) const UNRELENTING_ONSLAUGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_444780;
323    pub(crate) const WAR_MACHINE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_262231;
324    pub(crate) const WILD_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_382946;
325    pub(crate) const WRATH_AND_FURY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_392936;
326}
327pub(crate) mod DAMAGE_REPORTED {
328    pub(crate) const CRUSHING_BLOW_MAIN_HAND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_335098;
329    pub(crate) const CRUSHING_BLOW_OFF_HAND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_335100;
330    pub(crate) const RAGING_BLOW_MAIN_HAND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_96103;
331    pub(crate) const RAGING_BLOW_OFF_HAND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ACTION::SPELL_85384;
332}
333pub(crate) mod DAMAGE_EFFECT {
334    pub(crate) const BLOODTHIRST_ENRAGE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_23881_EFFECT_3;
335    pub(crate) const BLOODTHIRST_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_23881_EFFECT_1;
336    pub(crate) const BLOODTHIRST_RAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_23881_EFFECT_2;
337    pub(crate) const BLOODBATH_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_335096_EFFECT_1;
338    pub(crate) const BLOODBATH_RAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_335096_EFFECT_2;
339    pub(crate) const BLADESTORM_PERIOD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_227847_EFFECT_1;
340    pub(crate) const RAMPAGING_BERSERKER_COST: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1269309_EFFECT_1;
341    pub(crate) const RAMPAGING_BERSERKER_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1269309_EFFECT_2;
342    pub(crate) const BLOODBATH_ENRAGE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_335096_EFFECT_3;
343    pub(crate) const COLD_STEEL_HOT_BLOOD_RAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_383978_EFFECT_1;
344    pub(crate) const RB_RESET_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_85288_EFFECT_1;
345    pub(crate) const WNF_RESET_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_392936_EFFECT_1;
346    pub(crate) const IMPROVED_EXECUTE_RAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_316402_EFFECT_3;
347    pub(crate) const EXECUTIONERS_WRATH_RAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1265570_EFFECT_1;
348    pub(crate) const MASSACRE_EXECUTE_CDR_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_206315_EFFECT_3;
349    pub(crate) const MASSACRE_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_206315_EFFECT_2;
350    pub(crate) const SLAYERS_STRIKE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_445579_EFFECT_1;
351    pub(crate) const IMMINENT_DEMISE_EVERY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_444769_EFFECT_1;
352    pub(crate) const IMMINENT_DEMISE_REAP_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_444769_EFFECT_2;
353    pub(crate) const REAP_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_446005_EFFECT_1;
354    pub(crate) const UNRELENTING_CDR_S: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_444780_EFFECT_1;
355    pub(crate) const UNRELENTING_OVERWHELMED: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_444780_EFFECT_2;
356    pub(crate) const ANGER_MANAGEMENT_DIV: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_152278_EFFECT_3;
357    pub(crate) const FROTHING_REFUND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_392792_EFFECT_1;
358    pub(crate) const RECKLESS_ABANDON_RAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_396749_EFFECT_1;
359    pub(crate) const MID2_RAGING_BLOW_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1296645_EFFECT_1;
360    pub(crate) const MID2_RECKLESSNESS_EXTENSION_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1296645_EFFECT_2;
361    pub(crate) const MID2_RECKLESSNESS_EXTENSION_CAP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1296645_EFFECT_3;
362    pub(crate) const MID2_BLOODTHIRST_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::EFFECT::SPELL_1296646_EFFECT_1;
363}
364pub(crate) const AURA_ENRAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_ENRAGE
365    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
366pub(crate) const AURA_RECKLESSNESS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_RECKLESSNESS
367    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
368pub(crate) const AURA_MID2_RECKLESSNESS_CRIT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_MID2_RECKLESSNESS_CRIT
369    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
370pub(crate) const AURA_WHIRLWIND: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_WHIRLWIND
371    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
372pub(crate) const AURA_AVATAR: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_AVATAR
373    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
374pub(crate) const AURA_FRENZY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_FRENZY
375    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
376pub(crate) const AURA_SUDDEN_DEATH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_SUDDEN_DEATH
377    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
378pub(crate) const AURA_REND: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_REND
379    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
380pub(crate) const AURA_BLOODBATH_DOT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_BLOODBATH_DOT
381    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
382pub(crate) const AURA_GUSHING_WOUND: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_GUSHING_WOUND
383    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
384pub(crate) const AURA_BATTLE_SHOUT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_BATTLE_SHOUT
385    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
386pub(crate) const AURA_RAMPAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_RAMPAGE
387    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
388pub(crate) const AURA_DEEP_WOUNDS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_DEEP_WOUNDS
389    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
390pub(crate) const AURA_WILD_STRIKES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_WILD_STRIKES
391    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
392pub(crate) const AURA_SURGE_OF_ADRENALINE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_SURGE_OF_ADRENALINE
393    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
394pub(crate) const AURA_BLOODBORNE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_BLOODBORNE
395    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
396pub(crate) const AURA_BERSERKER_STANCE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_BERSERKER_STANCE
397    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
398pub(crate) const AURA_BLADESTORM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_BLADESTORM
399    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
400pub(crate) const AURA_ODYNS_FURY_DOT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_ODYNS_FURY_DOT
401    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
402pub(crate) const AURA_RAVAGER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_RAVAGER
403    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
404pub(crate) const AURA_EXECUTIONER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_EXECUTIONER
405    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
406pub(crate) const AURA_OVERWHELMED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_OVERWHELMED
407    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
408pub(crate) const AURA_IMMINENT_DEMISE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_IMMINENT_DEMISE
409    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
410pub(crate) const AURA_EXECUTIONERS_WRATH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_EXECUTIONERS_WRATH
411    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
412pub(crate) const AURA_THUNDER_BLAST: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_THUNDER_BLAST
413    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
414pub(crate) const AURA_CRASHING_THUNDER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::AURA_CRASHING_THUNDER
415    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
416pub(crate) const AURA_COUNT: usize = 26;
417const _: () = assert!(
418    AURA_COUNT == 26, "AURA index ABI: count changed -- update positional hook consumers"
419);
420pub(crate) const SPELL_BLOODTHIRST: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_BLOODTHIRST
421    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
422pub(crate) const SPELL_RAGING_BLOW: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_RAGING_BLOW
423    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
424pub(crate) const SPELL_RAMPAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_RAMPAGE
425    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
426pub(crate) const SPELL_EXECUTE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_EXECUTE
427    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
428pub(crate) const SPELL_WHIRLWIND: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_WHIRLWIND
429    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
430pub(crate) const SPELL_RECKLESSNESS: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_RECKLESSNESS
431    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
432pub(crate) const SPELL_AVATAR: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_AVATAR
433    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
434pub(crate) const SPELL_BLOODBATH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_BLOODBATH
435    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
436pub(crate) const SPELL_CRUSHING_BLOW: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_CRUSHING_BLOW
437    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
438pub(crate) const SPELL_THUNDER_CLAP: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_THUNDER_CLAP
439    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
440pub(crate) const SPELL_REND: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_REND
441    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
442pub(crate) const SPELL_BATTLE_SHOUT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_BATTLE_SHOUT
443    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
444pub(crate) const SPELL_SLAM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_SLAM
445    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
446pub(crate) const SPELL_HEROIC_THROW: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_HEROIC_THROW
447    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
448pub(crate) const SPELL_BLADESTORM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_BLADESTORM
449    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
450pub(crate) const SPELL_ODYNS_FURY: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_ODYNS_FURY
451    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
452pub(crate) const SPELL_RAVAGER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_RAVAGER
453    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
454pub(crate) const SPELL_SLAYERS_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_SLAYERS_STRIKE
455    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
456pub(crate) const SPELL_REAP_THE_STORM_EXECUTE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fury_warrior::SPELL_REAP_THE_STORM_EXECUTE
457    .bind(wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF);
458pub(crate) const SPELL_COUNT: usize = 19;
459const _: () = assert!(
460    SPELL_COUNT == 19,
461    "SPELL index ABI: count changed -- update positional hook consumers"
462);
463pub(crate) mod EFFECT {
464    ///<https://wowlab.gg/inspect/spell/23881>
465    pub(crate) const BLOODTHIRST_ENRAGE_CHANCE: (u32, u8) = (23881, 3);
466    ///<https://wowlab.gg/inspect/spell/23881>
467    pub(crate) const BLOODTHIRST_DAMAGE: (u32, u8) = (23881, 1);
468    ///<https://wowlab.gg/inspect/spell/23881>
469    pub(crate) const BLOODTHIRST_RAGE: (u32, u8) = (23881, 2);
470    ///<https://wowlab.gg/inspect/spell/335096>
471    pub(crate) const BLOODBATH_DAMAGE: (u32, u8) = (335_096, 1);
472    ///<https://wowlab.gg/inspect/spell/335096>
473    pub(crate) const BLOODBATH_RAGE: (u32, u8) = (335_096, 2);
474    ///<https://wowlab.gg/inspect/spell/227847>
475    pub(crate) const BLADESTORM_PERIOD: (u32, u8) = (227_847, 1);
476    ///<https://wowlab.gg/inspect/spell/1269309>
477    pub(crate) const RAMPAGING_BERSERKER_COST: (u32, u8) = (1_269_309, 1);
478    ///<https://wowlab.gg/inspect/spell/1269309>
479    pub(crate) const RAMPAGING_BERSERKER_DMG: (u32, u8) = (1_269_309, 2);
480    ///<https://wowlab.gg/inspect/spell/335096>
481    pub(crate) const BLOODBATH_ENRAGE_CHANCE: (u32, u8) = (335_096, 3);
482    ///<https://wowlab.gg/inspect/spell/383978>
483    pub(crate) const COLD_STEEL_HOT_BLOOD_RAGE: (u32, u8) = (383_978, 1);
484    ///<https://wowlab.gg/inspect/spell/85288>
485    pub(crate) const RB_RESET_CHANCE: (u32, u8) = (85288, 1);
486    ///<https://wowlab.gg/inspect/spell/392936>
487    pub(crate) const WNF_RESET_CHANCE: (u32, u8) = (392_936, 1);
488    ///<https://wowlab.gg/inspect/spell/316402>
489    pub(crate) const IMPROVED_EXECUTE_RAGE: (u32, u8) = (316_402, 3);
490    ///<https://wowlab.gg/inspect/spell/1265570>
491    pub(crate) const EXECUTIONERS_WRATH_RAGE: (u32, u8) = (1_265_570, 1);
492    ///<https://wowlab.gg/inspect/spell/206315>
493    pub(crate) const MASSACRE_EXECUTE_CDR_MS: (u32, u8) = (206_315, 3);
494    ///<https://wowlab.gg/inspect/spell/206315>
495    pub(crate) const MASSACRE_PCT: (u32, u8) = (206_315, 2);
496    ///<https://wowlab.gg/inspect/spell/445579>
497    pub(crate) const SLAYERS_STRIKE_DMG: (u32, u8) = (445_579, 1);
498    ///<https://wowlab.gg/inspect/spell/444769>
499    pub(crate) const IMMINENT_DEMISE_EVERY: (u32, u8) = (444_769, 1);
500    ///<https://wowlab.gg/inspect/spell/444769>
501    pub(crate) const IMMINENT_DEMISE_REAP_CHANCE: (u32, u8) = (444_769, 2);
502    ///<https://wowlab.gg/inspect/spell/446005>
503    pub(crate) const REAP_DMG: (u32, u8) = (446_005, 1);
504    ///<https://wowlab.gg/inspect/spell/444780>
505    pub(crate) const UNRELENTING_CDR_S: (u32, u8) = (444_780, 1);
506    ///<https://wowlab.gg/inspect/spell/444780>
507    pub(crate) const UNRELENTING_OVERWHELMED: (u32, u8) = (444_780, 2);
508    ///<https://wowlab.gg/inspect/spell/152278>
509    pub(crate) const ANGER_MANAGEMENT_DIV: (u32, u8) = (152_278, 3);
510    ///<https://wowlab.gg/inspect/spell/392792>
511    pub(crate) const FROTHING_REFUND: (u32, u8) = (392_792, 1);
512    ///<https://wowlab.gg/inspect/spell/396749>
513    pub(crate) const RECKLESS_ABANDON_RAGE: (u32, u8) = (396_749, 1);
514    ///<https://wowlab.gg/inspect/spell/1296645>
515    pub(crate) const MID2_RAGING_BLOW_DAMAGE: (u32, u8) = (1_296_645, 1);
516    ///<https://wowlab.gg/inspect/spell/1296645>
517    pub(crate) const MID2_RECKLESSNESS_EXTENSION_MS: (u32, u8) = (1_296_645, 2);
518    ///<https://wowlab.gg/inspect/spell/1296645>
519    pub(crate) const MID2_RECKLESSNESS_EXTENSION_CAP: (u32, u8) = (1_296_645, 3);
520    ///<https://wowlab.gg/inspect/spell/1296646>
521    pub(crate) const MID2_BLOODTHIRST_DAMAGE: (u32, u8) = (1_296_646, 1);
522}
523static REPORTED_SPELLS: &[(&str, u32)] = &[
524    ("crushing_blow_main_hand", 335_098),
525    ("crushing_blow_off_hand", 335_100),
526    ("raging_blow_main_hand", 96103),
527    ("raging_blow_off_hand", 85384),
528];
529static DECLARED_SPELL_IDS: &[u32] = &[
530    23881, 85288, 184_367, 280_735, 190_411, 1719, 107_574, 335_096, 335_097, 6343, 772,
531    6673, 1464, 57755, 227_847, 385_059, 228_920, 445_579, 446_005, 184_362, 1_296_646,
532    85739, 335_082, 52437, 388_539, 113_344, 385_042, 262_115, 392_778, 1_265_560,
533    1_265_406, 386_196, 385_060, 445_584, 445_836, 445_606, 1_265_575, 435_615, 436_707,
534    152_278, 385_703, 383_959, 1_261_060, 1_265_570, 392_792, 383_877, 444_769, 316_402,
535    383_854, 12950, 206_315, 444_772, 1_269_308, 1_269_309, 1_265_357, 444_775, 396_749,
536    444_767, 444_779, 29725, 1_265_359, 386_628, 444_780, 262_231, 382_946, 392_936,
537    6603, 76856, 85384, 96103, 335_098, 335_100, 383_978, 1_296_645, 446_918, 458_689,
538    456_120, 1_270_731, 460_670, 435_791, 435_222, 437_121,
539];
540static DECLARED_AURA_IDS: &[u32] = &[
541    184_362, 1719, 1_296_646, 85739, 107_574, 335_082, 52437, 388_539, 113_344, 385_042,
542    6673, 184_367, 262_115, 392_778, 1_265_560, 1_265_406, 386_196, 227_847, 385_060,
543    228_920, 445_584, 445_836, 445_606, 1_265_575, 435_615, 436_707, 446_918, 458_689,
544    456_120, 1_270_731, 437_121, 435_615,
545];
546static TALENTS: &[(&str, u32)] = &[
547    ("ANGER_MANAGEMENT", TALENT::ANGER_MANAGEMENT),
548    ("AVATAR", TALENT::AVATAR),
549    ("BERSERKER_STANCE", TALENT::BERSERKER_STANCE),
550    ("BLOODBORNE", TALENT::BLOODBORNE),
551    ("COLD_STEEL_HOT_BLOOD", TALENT::COLD_STEEL_HOT_BLOOD),
552    ("DEEP_WOUNDS", TALENT::DEEP_WOUNDS),
553    ("EXECUTIONERS_WRATH", TALENT::EXECUTIONERS_WRATH),
554    ("FROTHING_BERSERKER", TALENT::FROTHING_BERSERKER),
555    ("HACK_AND_SLASH", TALENT::HACK_AND_SLASH),
556    ("IMMINENT_DEMISE", TALENT::IMMINENT_DEMISE),
557    ("IMPROVED_EXECUTE", TALENT::IMPROVED_EXECUTE),
558    ("IMPROVED_RAGING_BLOW", TALENT::IMPROVED_RAGING_BLOW),
559    ("IMPROVED_WHIRLWIND", TALENT::IMPROVED_WHIRLWIND),
560    ("MASSACRE", TALENT::MASSACRE),
561    ("OVERWHELMING_BLADES", TALENT::OVERWHELMING_BLADES),
562    ("RAMPAGING_BERSERKER", TALENT::RAMPAGING_BERSERKER),
563    ("RAMPAGING_BERSERKER_2", TALENT::RAMPAGING_BERSERKER_2),
564    ("RAMPAGING_RUIN", TALENT::RAMPAGING_RUIN),
565    ("REAP_THE_STORM", TALENT::REAP_THE_STORM),
566    ("RECKLESS_ABANDON", TALENT::RECKLESS_ABANDON),
567    ("SLAYERS_DOMINANCE", TALENT::SLAYERS_DOMINANCE),
568    ("SLAYERS_MALICE", TALENT::SLAYERS_MALICE),
569    ("SUDDEN_DEATH", TALENT::SUDDEN_DEATH),
570    ("SURGE_OF_ADRENALINE", TALENT::SURGE_OF_ADRENALINE),
571    ("THUNDER_CLAP", TALENT::THUNDER_CLAP),
572    ("UNHINGED", TALENT::UNHINGED),
573    ("UNRELENTING_ONSLAUGHT", TALENT::UNRELENTING_ONSLAUGHT),
574    ("WAR_MACHINE", TALENT::WAR_MACHINE),
575    ("WILD_STRIKES", TALENT::WILD_STRIKES),
576    ("WRATH_AND_FURY", TALENT::WRATH_AND_FURY),
577];
578pub(crate) mod FURY_WARRIOR {
579    pub(crate) const BLOODTHIRST_CASTS: u32 = 0;
580    pub(crate) const RAGING_BLOW_CASTS: u32 = 1;
581    pub(crate) const RAMPAGE_CASTS: u32 = 2;
582    pub(crate) const EXECUTE_CASTS: u32 = 3;
583    pub(crate) const RECKLESSNESS_CASTS: u32 = 4;
584    pub(crate) const AVATAR_CASTS: u32 = 5;
585    pub(crate) const ENRAGE_UPTIME_MS: u32 = 6;
586    pub(crate) const RECKLESSNESS_UPTIME_MS: u32 = 7;
587}
588fn aura_enrage(
589    a: AuraDefinitionDraft,
590    data: &ResolvedGameData,
591) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
592    Ok(
593        a
594            .on_player()
595            .apply_base_from_data(data, 184_362)?
596            .max_stacks(
597                data
598                    .require_aura_max_stacks(
599                        wowlab_types::sim::SpellIdx::from_raw(184_362),
600                    )?,
601            ),
602    )
603}
604fn aura_recklessness(
605    a: AuraDefinitionDraft,
606    data: &ResolvedGameData,
607) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
608    Ok(
609        a
610            .on_player()
611            .apply_base_from_data(data, 1719)?
612            .max_stacks(
613                data
614                    .require_aura_max_stacks(
615                        wowlab_types::sim::SpellIdx::from_raw(1719),
616                    )?,
617            )
618            .resource_gain_mult_per_stack(
619                data.base_points(wowlab_types::sim::SpellIdx::from_raw(1719), 1),
620            )?
621            .on_expire(crate::hooks::fury_warrior::recklessness_expire_hook),
622    )
623}
624fn aura_mid2_recklessness_crit(
625    a: AuraDefinitionDraft,
626    data: &ResolvedGameData,
627) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
628    a.on_player()
629        .apply_base_from_data(data, 1_296_646)?
630        .max_stacks(
631            wowlab_engine_combat::validated_max_stacks(
632                2.0,
633                1_296_646,
634                "aura.max_stacks",
635            )?,
636        )
637        .crit_per_stack(5.0)
638}
639fn aura_whirlwind(
640    a: AuraDefinitionDraft,
641    data: &ResolvedGameData,
642) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
643    Ok(
644        a
645            .on_player()
646            .apply_base_from_data(data, 85739)?
647            .max_stacks(
648                data
649                    .require_aura_max_stacks(
650                        wowlab_types::sim::SpellIdx::from_raw(85739),
651                    )?,
652            ),
653    )
654}
655fn aura_avatar(
656    a: AuraDefinitionDraft,
657    data: &ResolvedGameData,
658) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
659    Ok(
660        a
661            .on_player()
662            .apply_base_from_data(data, 107_574)?
663            .max_stacks(
664                data
665                    .require_aura_max_stacks(
666                        wowlab_types::sim::SpellIdx::from_raw(107_574),
667                    )?,
668            ),
669    )
670}
671fn aura_frenzy(
672    a: AuraDefinitionDraft,
673    data: &ResolvedGameData,
674) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
675    Ok(
676        a
677            .on_player()
678            .apply_base_from_data(data, 335_082)?
679            .max_stacks(
680                data
681                    .require_aura_max_stacks(
682                        wowlab_types::sim::SpellIdx::from_raw(335_082),
683                    )?,
684            ),
685    )
686}
687fn aura_sudden_death(
688    a: AuraDefinitionDraft,
689    data: &ResolvedGameData,
690) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
691    Ok(
692        a
693            .on_player()
694            .apply_base_from_data(data, 52437)?
695            .max_stacks(
696                data
697                    .require_aura_max_stacks(
698                        wowlab_types::sim::SpellIdx::from_raw(52437),
699                    )?,
700            ),
701    )
702}
703fn aura_rend(
704    a: AuraDefinitionDraft,
705    data: &ResolvedGameData,
706) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
707    Ok(
708        a
709            .on_target()
710            .apply_base_from_data(data, 388_539)?
711            .max_stacks(
712                data
713                    .require_aura_max_stacks(
714                        wowlab_types::sim::SpellIdx::from_raw(388_539),
715                    )?,
716            ),
717    )
718}
719fn aura_bloodbath_dot(
720    a: AuraDefinitionDraft,
721    data: &ResolvedGameData,
722) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
723    Ok(
724        a
725            .on_target()
726            .apply_base_from_data(data, 113_344)?
727            .max_stacks(
728                data
729                    .require_aura_max_stacks(
730                        wowlab_types::sim::SpellIdx::from_raw(113_344),
731                    )?,
732            ),
733    )
734}
735fn aura_gushing_wound(
736    a: AuraDefinitionDraft,
737    data: &ResolvedGameData,
738) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
739    a.on_target()
740        .apply_base_from_data(data, 385_042)?
741        .max_stacks(
742            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(385_042))?,
743        )
744        .periodic_damage(
745            wowlab_engine_combat::validated_milliseconds(
746                data.period(wowlab_types::sim::SpellIdx::from_raw(385_042), 1),
747                385_042,
748                "periodic_damage.tick_ms",
749            )?,
750            data.ap_coef(wowlab_types::sim::SpellIdx::from_raw(385_042), 1),
751            wowlab_engine_combat::DamageFlags::PHYSICAL,
752        )
753        .apply_periodic_behavior_from_data(data, 385_042)
754}
755fn aura_battle_shout(
756    a: AuraDefinitionDraft,
757    data: &ResolvedGameData,
758) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
759    Ok(
760        a
761            .on_player()
762            .apply_base_from_data(data, 6673)?
763            .max_stacks(
764                data
765                    .require_aura_max_stacks(
766                        wowlab_types::sim::SpellIdx::from_raw(6673),
767                    )?,
768            ),
769    )
770}
771fn aura_rampage(
772    a: AuraDefinitionDraft,
773    data: &ResolvedGameData,
774) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
775    Ok(
776        a
777            .on_player()
778            .apply_base_from_data(data, 184_367)?
779            .max_stacks(
780                data
781                    .require_aura_max_stacks(
782                        wowlab_types::sim::SpellIdx::from_raw(184_367),
783                    )?,
784            ),
785    )
786}
787fn aura_deep_wounds(
788    a: AuraDefinitionDraft,
789    data: &ResolvedGameData,
790) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
791    Ok(
792        a
793            .on_target()
794            .apply_base_from_data(data, 262_115)?
795            .max_stacks(
796                data
797                    .require_aura_max_stacks(
798                        wowlab_types::sim::SpellIdx::from_raw(262_115),
799                    )?,
800            ),
801    )
802}
803fn aura_wild_strikes(
804    a: AuraDefinitionDraft,
805    data: &ResolvedGameData,
806) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
807    Ok(
808        a
809            .on_player()
810            .apply_base_from_data(data, 392_778)?
811            .max_stacks(
812                data
813                    .require_aura_max_stacks(
814                        wowlab_types::sim::SpellIdx::from_raw(392_778),
815                    )?,
816            ),
817    )
818}
819fn aura_surge_of_adrenaline(
820    a: AuraDefinitionDraft,
821    data: &ResolvedGameData,
822) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
823    Ok(
824        a
825            .on_player()
826            .apply_base_from_data(data, 1_265_560)?
827            .max_stacks(
828                data
829                    .require_aura_max_stacks(
830                        wowlab_types::sim::SpellIdx::from_raw(1_265_560),
831                    )?,
832            ),
833    )
834}
835fn aura_bloodborne(
836    a: AuraDefinitionDraft,
837    data: &ResolvedGameData,
838) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
839    Ok(
840        a
841            .on_player()
842            .apply_base_from_data(data, 1_265_406)?
843            .max_stacks(
844                data
845                    .require_aura_max_stacks(
846                        wowlab_types::sim::SpellIdx::from_raw(1_265_406),
847                    )?,
848            ),
849    )
850}
851fn aura_berserker_stance(
852    a: AuraDefinitionDraft,
853    data: &ResolvedGameData,
854) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
855    Ok(
856        a
857            .on_player()
858            .apply_base_from_data(data, 386_196)?
859            .max_stacks(
860                data
861                    .require_aura_max_stacks(
862                        wowlab_types::sim::SpellIdx::from_raw(386_196),
863                    )?,
864            ),
865    )
866}
867fn aura_bladestorm(
868    a: AuraDefinitionDraft,
869    data: &ResolvedGameData,
870) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
871    Ok(
872        a
873            .on_player()
874            .apply_base_from_data(data, 227_847)?
875            .max_stacks(
876                data
877                    .require_aura_max_stacks(
878                        wowlab_types::sim::SpellIdx::from_raw(227_847),
879                    )?,
880            )
881            .periodic_hook(
882                wowlab_engine_combat::validated_milliseconds(
883                    data.period(wowlab_types::sim::SpellIdx::from_raw(227_847), 1),
884                    227_847,
885                    "periodic_hook.tick_ms",
886                )?,
887            )
888            .apply_periodic_behavior_from_data(data, 227_847)?
889            .tick_hook(crate::hooks::fury_warrior::bladestorm_tick_hook),
890    )
891}
892fn aura_odyns_fury_dot(
893    a: AuraDefinitionDraft,
894    data: &ResolvedGameData,
895) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
896    Ok(
897        a
898            .on_target()
899            .apply_base_from_data(data, 385_060)?
900            .max_stacks(
901                data
902                    .require_aura_max_stacks(
903                        wowlab_types::sim::SpellIdx::from_raw(385_060),
904                    )?,
905            ),
906    )
907}
908fn aura_ravager(
909    a: AuraDefinitionDraft,
910    data: &ResolvedGameData,
911) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
912    Ok(
913        a
914            .on_player()
915            .apply_base_from_data(data, 228_920)?
916            .max_stacks(
917                data
918                    .require_aura_max_stacks(
919                        wowlab_types::sim::SpellIdx::from_raw(228_920),
920                    )?,
921            ),
922    )
923}
924fn aura_executioner(
925    a: AuraDefinitionDraft,
926    data: &ResolvedGameData,
927) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
928    Ok(
929        a
930            .on_player()
931            .apply_base_from_data(data, 445_584)?
932            .max_stacks(
933                data
934                    .require_aura_max_stacks(
935                        wowlab_types::sim::SpellIdx::from_raw(445_584),
936                    )?,
937            ),
938    )
939}
940fn aura_overwhelmed(
941    a: AuraDefinitionDraft,
942    data: &ResolvedGameData,
943) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
944    Ok(
945        a
946            .on_target()
947            .apply_base_from_data(data, 445_836)?
948            .max_stacks(
949                data
950                    .require_aura_max_stacks(
951                        wowlab_types::sim::SpellIdx::from_raw(445_836),
952                    )?,
953            ),
954    )
955}
956fn aura_imminent_demise(
957    a: AuraDefinitionDraft,
958    data: &ResolvedGameData,
959) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
960    Ok(
961        a
962            .on_player()
963            .apply_base_from_data(data, 445_606)?
964            .max_stacks(
965                data
966                    .require_aura_max_stacks(
967                        wowlab_types::sim::SpellIdx::from_raw(445_606),
968                    )?,
969            ),
970    )
971}
972fn aura_executioners_wrath(
973    a: AuraDefinitionDraft,
974    data: &ResolvedGameData,
975) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
976    Ok(
977        a
978            .on_player()
979            .apply_base_from_data(data, 1_265_575)?
980            .max_stacks(
981                data
982                    .require_aura_max_stacks(
983                        wowlab_types::sim::SpellIdx::from_raw(1_265_575),
984                    )?,
985            ),
986    )
987}
988fn aura_thunder_blast(
989    a: AuraDefinitionDraft,
990    data: &ResolvedGameData,
991) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
992    Ok(
993        a
994            .on_player()
995            .apply_base_from_data(data, 435_615)?
996            .max_stacks(
997                data
998                    .require_aura_max_stacks(
999                        wowlab_types::sim::SpellIdx::from_raw(435_615),
1000                    )?,
1001            ),
1002    )
1003}
1004fn aura_crashing_thunder(
1005    a: AuraDefinitionDraft,
1006    data: &ResolvedGameData,
1007) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1008    Ok(
1009        a
1010            .on_player()
1011            .apply_base_from_data(data, 436_707)?
1012            .max_stacks(
1013                data
1014                    .require_aura_max_stacks(
1015                        wowlab_types::sim::SpellIdx::from_raw(436_707),
1016                    )?,
1017            ),
1018    )
1019}
1020fn spell_bloodthirst(
1021    s: SpellDefinitionDraft,
1022    data: &ResolvedGameData,
1023) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1024    Ok(
1025        s
1026            .apply_base_from_data(data, 23881)?
1027            .apply_aoe_from_data(data)
1028            .on_cast(crate::hooks::fury_warrior::bloodthirst_hook),
1029    )
1030}
1031fn spell_raging_blow(
1032    s: SpellDefinitionDraft,
1033    data: &ResolvedGameData,
1034) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1035    Ok(
1036        s
1037            .apply_base_from_data(data, 85288)?
1038            .without_primary_data_damage()
1039            .apply_aoe_from_data(data)
1040            .on_cast(crate::hooks::fury_warrior::raging_blow_hook),
1041    )
1042}
1043fn spell_rampage(
1044    s: SpellDefinitionDraft,
1045    data: &ResolvedGameData,
1046) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1047    Ok(
1048        s
1049            .apply_base_from_data(data, 184_367)?
1050            .without_primary_data_damage()
1051            .trigger_program_predicate(
1052                2,
1053                crate::hooks::fury_warrior::rampage_single_target_trigger,
1054            )
1055            .trigger_program_predicate(
1056                3,
1057                crate::hooks::fury_warrior::rampage_single_target_trigger,
1058            )
1059            .trigger_program_predicate(
1060                4,
1061                crate::hooks::fury_warrior::rampage_single_target_trigger,
1062            )
1063            .trigger_program_predicate(
1064                5,
1065                crate::hooks::fury_warrior::rampage_single_target_trigger,
1066            )
1067            .trigger_program_predicate(
1068                6,
1069                crate::hooks::fury_warrior::rampaging_ruin_trigger,
1070            )
1071            .trigger_program_predicate(
1072                7,
1073                crate::hooks::fury_warrior::rampaging_ruin_trigger,
1074            )
1075            .trigger_program_predicate(
1076                8,
1077                crate::hooks::fury_warrior::rampaging_ruin_trigger,
1078            )
1079            .trigger_program_predicate(
1080                9,
1081                crate::hooks::fury_warrior::rampaging_ruin_trigger,
1082            )
1083            .applies_aura(AURA_ENRAGE)
1084            .apply_aoe_from_data(data)
1085            .on_cast(crate::hooks::fury_warrior::rampage_hook),
1086    )
1087}
1088fn spell_execute(
1089    s: SpellDefinitionDraft,
1090    data: &ResolvedGameData,
1091) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1092    Ok(
1093        s
1094            .apply_base_from_data(data, 280_735)?
1095            .apply_aoe_from_data(data)
1096            .on_cast(crate::hooks::fury_warrior::execute_hook),
1097    )
1098}
1099fn spell_whirlwind(
1100    s: SpellDefinitionDraft,
1101    data: &ResolvedGameData,
1102) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1103    Ok(
1104        s
1105            .apply_base_from_data(data, 190_411)?
1106            .applies_aura(AURA_WHIRLWIND)
1107            .apply_aoe_from_data(data)
1108            .on_cast(crate::hooks::fury_warrior::whirlwind_hook),
1109    )
1110}
1111fn spell_recklessness(
1112    s: SpellDefinitionDraft,
1113    data: &ResolvedGameData,
1114) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1115    Ok(
1116        s
1117            .apply_base_from_data(data, 1719)?
1118            .applies_inferred_aura(AURA_RECKLESSNESS, 1719)
1119            .apply_aoe_from_data(data)
1120            .on_cast(crate::hooks::fury_warrior::recklessness_hook),
1121    )
1122}
1123fn spell_avatar(
1124    s: SpellDefinitionDraft,
1125    data: &ResolvedGameData,
1126) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1127    Ok(
1128        s
1129            .apply_base_from_data(data, 107_574)?
1130            .applies_inferred_aura(AURA_AVATAR, 107_574)
1131            .apply_aoe_from_data(data),
1132    )
1133}
1134fn spell_bloodbath(
1135    s: SpellDefinitionDraft,
1136    data: &ResolvedGameData,
1137) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1138    Ok(
1139        s
1140            .apply_base_from_data(data, 335_096)?
1141            .apply_aoe_from_data(data)
1142            .on_cast(crate::hooks::fury_warrior::bloodbath_hook),
1143    )
1144}
1145fn spell_crushing_blow(
1146    s: SpellDefinitionDraft,
1147    data: &ResolvedGameData,
1148) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1149    Ok(
1150        s
1151            .apply_base_from_data(data, 335_097)?
1152            .without_primary_data_damage()
1153            .apply_aoe_from_data(data)
1154            .on_cast(crate::hooks::fury_warrior::crushing_blow_hook),
1155    )
1156}
1157fn spell_thunder_clap(
1158    s: SpellDefinitionDraft,
1159    data: &ResolvedGameData,
1160) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1161    Ok(
1162        s
1163            .apply_base_from_data(data, 6343)?
1164            .gain(5.0)
1165            .apply_aoe_from_data(data)
1166            .on_cast(crate::hooks::fury_warrior::thunder_clap_hook),
1167    )
1168}
1169fn spell_rend(
1170    s: SpellDefinitionDraft,
1171    data: &ResolvedGameData,
1172) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1173    Ok(
1174        s
1175            .apply_base_from_data(data, 772)?
1176            .applies_aura(AURA_REND)
1177            .apply_aoe_from_data(data)
1178            .on_cast(crate::hooks::fury_warrior::rend_hook),
1179    )
1180}
1181fn spell_battle_shout(
1182    s: SpellDefinitionDraft,
1183    data: &ResolvedGameData,
1184) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1185    Ok(
1186        s
1187            .apply_base_from_data(data, 6673)?
1188            .applies_inferred_aura(AURA_BATTLE_SHOUT, 6673)
1189            .apply_aoe_from_data(data),
1190    )
1191}
1192fn spell_slam(
1193    s: SpellDefinitionDraft,
1194    data: &ResolvedGameData,
1195) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1196    Ok(
1197        s
1198            .apply_base_from_data(data, 1464)?
1199            .apply_aoe_from_data(data)
1200            .on_cast(crate::hooks::fury_warrior::slam_hook),
1201    )
1202}
1203fn spell_heroic_throw(
1204    s: SpellDefinitionDraft,
1205    data: &ResolvedGameData,
1206) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1207    Ok(s.apply_base_from_data(data, 57755)?.apply_aoe_from_data(data))
1208}
1209fn spell_bladestorm(
1210    s: SpellDefinitionDraft,
1211    data: &ResolvedGameData,
1212) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1213    Ok(
1214        s
1215            .apply_base_from_data(data, 227_847)?
1216            .applies_inferred_aura(AURA_BLADESTORM, 227_847)
1217            .apply_aoe_from_data(data)
1218            .on_cast(crate::hooks::fury_warrior::bladestorm_hook),
1219    )
1220}
1221fn spell_odyns_fury(
1222    s: SpellDefinitionDraft,
1223    data: &ResolvedGameData,
1224) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1225    Ok(
1226        s
1227            .apply_base_from_data(data, 385_059)?
1228            .without_primary_data_damage()
1229            .applies_aura(AURA_ENRAGE)
1230            .apply_aoe_from_data(data)
1231            .on_cast(crate::hooks::fury_warrior::odyns_fury_hook),
1232    )
1233}
1234fn spell_ravager(
1235    s: SpellDefinitionDraft,
1236    data: &ResolvedGameData,
1237) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1238    Ok(
1239        s
1240            .apply_base_from_data(data, 228_920)?
1241            .applies_inferred_aura(AURA_RAVAGER, 228_920)
1242            .apply_aoe_from_data(data),
1243    )
1244}
1245fn spell_slayers_strike(
1246    s: SpellDefinitionDraft,
1247    data: &ResolvedGameData,
1248) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1249    Ok(s.apply_base_from_data(data, 445_579)?.apply_aoe_from_data(data))
1250}
1251fn spell_reap_the_storm_execute(
1252    s: SpellDefinitionDraft,
1253    data: &ResolvedGameData,
1254) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1255    Ok(s.apply_base_from_data(data, 446_005)?.apply_aoe_from_data(data))
1256}
1257pub(crate) fn build_combat_system_draft(
1258    params: &wowlab_engine_ports::HandlerParams<'_>,
1259) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1260    let builder = CombatSystemBuilder::new(params.stats.clone())
1261        .spec_id(SpecId::Fury)
1262        .spec_identity(
1263            wowlab_engine_combat::generated_identities::specs::fury_warrior::PROOF,
1264        )
1265        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1266        .effect_identities(
1267            wowlab_engine_combat::generated_identities::specs::fury_warrior::damage::ALL,
1268        )
1269        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1270        .mastery_spell(76856)
1271        .mastery_hook(crate::hooks::fury_warrior::mastery)
1272        .resource(
1273            "rage",
1274            params
1275                .game_data
1276                .power_max(1)
1277                .ok_or_else(|| {
1278                    wowlab_engine_ports::EngineError::spec_construction(
1279                        "missing power-type power_max for type_id 1",
1280                    )
1281                })?,
1282            params
1283                .game_data
1284                .power_regen_for_max(
1285                    1,
1286                    params
1287                        .game_data
1288                        .power_max(1)
1289                        .ok_or_else(|| {
1290                            wowlab_engine_ports::EngineError::spec_construction(
1291                                "missing power-type power_max for type_id 1",
1292                            )
1293                        })?,
1294                )
1295                .ok_or_else(|| {
1296                    wowlab_engine_ports::EngineError::spec_construction(
1297                        "missing power-type power_regen_for_max for type_id 1",
1298                    )
1299                })?,
1300        )
1301        .resource_type_id(1)
1302        .resource_start(
1303            params
1304                .game_data
1305                .power_default(1)
1306                .ok_or_else(|| {
1307                    wowlab_engine_ports::EngineError::spec_construction(
1308                        "missing power-type power_default for type_id 1",
1309                    )
1310                })?,
1311        )
1312        .aura("enrage", AURA::ENRAGE, |a| aura_enrage(a, &params.game_data))
1313        .aura(
1314            "recklessness",
1315            AURA::RECKLESSNESS,
1316            |a| aura_recklessness(a, &params.game_data),
1317        )
1318        .aura(
1319            "mid2_recklessness_crit",
1320            AURA::MID2_RECKLESSNESS_CRIT,
1321            |a| aura_mid2_recklessness_crit(a, &params.game_data),
1322        )
1323        .aura("whirlwind", AURA::WHIRLWIND, |a| aura_whirlwind(a, &params.game_data))
1324        .aura("avatar", AURA::AVATAR, |a| aura_avatar(a, &params.game_data))
1325        .aura("frenzy", AURA::FRENZY, |a| aura_frenzy(a, &params.game_data))
1326        .aura(
1327            "sudden_death",
1328            AURA::SUDDEN_DEATH,
1329            |a| aura_sudden_death(a, &params.game_data),
1330        )
1331        .aura("rend", AURA::REND, |a| aura_rend(a, &params.game_data))
1332        .aura(
1333            "bloodbath_dot",
1334            AURA::BLOODBATH_DOT,
1335            |a| aura_bloodbath_dot(a, &params.game_data),
1336        )
1337        .aura(
1338            "gushing_wound",
1339            AURA::GUSHING_WOUND,
1340            |a| aura_gushing_wound(a, &params.game_data),
1341        )
1342        .aura(
1343            "battle_shout",
1344            AURA::BATTLE_SHOUT,
1345            |a| aura_battle_shout(a, &params.game_data),
1346        )
1347        .aura("rampage", AURA::RAMPAGE, |a| aura_rampage(a, &params.game_data))
1348        .aura(
1349            "deep_wounds",
1350            AURA::DEEP_WOUNDS,
1351            |a| aura_deep_wounds(a, &params.game_data),
1352        )
1353        .aura(
1354            "wild_strikes",
1355            AURA::WILD_STRIKES,
1356            |a| aura_wild_strikes(a, &params.game_data),
1357        )
1358        .aura(
1359            "surge_of_adrenaline",
1360            AURA::SURGE_OF_ADRENALINE,
1361            |a| aura_surge_of_adrenaline(a, &params.game_data),
1362        )
1363        .aura("bloodborne", AURA::BLOODBORNE, |a| aura_bloodborne(a, &params.game_data))
1364        .aura(
1365            "berserker_stance",
1366            AURA::BERSERKER_STANCE,
1367            |a| aura_berserker_stance(a, &params.game_data),
1368        )
1369        .aura("bladestorm", AURA::BLADESTORM, |a| aura_bladestorm(a, &params.game_data))
1370        .aura(
1371            "odyns_fury_dot",
1372            AURA::ODYNS_FURY_DOT,
1373            |a| aura_odyns_fury_dot(a, &params.game_data),
1374        )
1375        .aura("ravager", AURA::RAVAGER, |a| aura_ravager(a, &params.game_data))
1376        .aura(
1377            "executioner",
1378            AURA::EXECUTIONER,
1379            |a| aura_executioner(a, &params.game_data),
1380        )
1381        .aura(
1382            "overwhelmed",
1383            AURA::OVERWHELMED,
1384            |a| aura_overwhelmed(a, &params.game_data),
1385        )
1386        .aura(
1387            "imminent_demise",
1388            AURA::IMMINENT_DEMISE,
1389            |a| aura_imminent_demise(a, &params.game_data),
1390        )
1391        .aura(
1392            "executioners_wrath",
1393            AURA::EXECUTIONERS_WRATH,
1394            |a| aura_executioners_wrath(a, &params.game_data),
1395        )
1396        .aura(
1397            "thunder_blast",
1398            AURA::THUNDER_BLAST,
1399            |a| aura_thunder_blast(a, &params.game_data),
1400        )
1401        .aura(
1402            "crashing_thunder",
1403            AURA::CRASHING_THUNDER,
1404            |a| aura_crashing_thunder(a, &params.game_data),
1405        )
1406        .spell(
1407            "bloodthirst",
1408            SPELL::BLOODTHIRST,
1409            |s| spell_bloodthirst(s, &params.game_data),
1410        )
1411        .spell(
1412            "raging_blow",
1413            SPELL::RAGING_BLOW,
1414            |s| spell_raging_blow(s, &params.game_data),
1415        )
1416        .spell("rampage", SPELL::RAMPAGE, |s| spell_rampage(s, &params.game_data))
1417        .spell("execute", SPELL::EXECUTE, |s| spell_execute(s, &params.game_data))
1418        .spell("whirlwind", SPELL::WHIRLWIND, |s| spell_whirlwind(s, &params.game_data))
1419        .spell(
1420            "recklessness",
1421            SPELL::RECKLESSNESS,
1422            |s| spell_recklessness(s, &params.game_data),
1423        )
1424        .spell("avatar", SPELL::AVATAR, |s| spell_avatar(s, &params.game_data))
1425        .spell("bloodbath", SPELL::BLOODBATH, |s| spell_bloodbath(s, &params.game_data))
1426        .spell(
1427            "crushing_blow",
1428            SPELL::CRUSHING_BLOW,
1429            |s| spell_crushing_blow(s, &params.game_data),
1430        )
1431        .spell(
1432            "thunder_clap",
1433            SPELL::THUNDER_CLAP,
1434            |s| spell_thunder_clap(s, &params.game_data),
1435        )
1436        .spell("rend", SPELL::REND, |s| spell_rend(s, &params.game_data))
1437        .spell(
1438            "battle_shout",
1439            SPELL::BATTLE_SHOUT,
1440            |s| spell_battle_shout(s, &params.game_data),
1441        )
1442        .spell("slam", SPELL::SLAM, |s| spell_slam(s, &params.game_data))
1443        .spell(
1444            "heroic_throw",
1445            SPELL::HEROIC_THROW,
1446            |s| spell_heroic_throw(s, &params.game_data),
1447        )
1448        .spell(
1449            "bladestorm",
1450            SPELL::BLADESTORM,
1451            |s| spell_bladestorm(s, &params.game_data),
1452        )
1453        .spell(
1454            "odyns_fury",
1455            SPELL::ODYNS_FURY,
1456            |s| spell_odyns_fury(s, &params.game_data),
1457        )
1458        .spell("ravager", SPELL::RAVAGER, |s| spell_ravager(s, &params.game_data))
1459        .spell(
1460            "slayers_strike",
1461            SPELL::SLAYERS_STRIKE,
1462            |s| spell_slayers_strike(s, &params.game_data),
1463        )
1464        .spell(
1465            "reap_the_storm_execute",
1466            SPELL::REAP_THE_STORM_EXECUTE,
1467            |s| spell_reap_the_storm_execute(s, &params.game_data),
1468        )
1469        .auto_attack(|a| {
1470            a
1471                .spell_id(6603)
1472                .swing_ms(3600)
1473                .apply_base_from_data(&params.game_data)
1474                .on_swing(crate::hooks::fury_warrior::swing_hook)
1475        })
1476        .auto_attack(|a| {
1477            a
1478                .spell_id(6603)
1479                .swing_ms(3600)
1480                .apply_base_from_data(&params.game_data)
1481                .on_swing(crate::hooks::fury_warrior::swing_hook)
1482        })
1483        .game_data(params.game_data.clone())
1484        .talent_spell_ids(TALENTS)
1485        .talent_selections(params.talent_selections)
1486        .set_bonus_auras(params.set_bonus_auras)
1487        .encounter(params.encounter.clone());
1488    let builder = crate::generated::items::register_equipped(
1489        builder,
1490        &params.game_data,
1491        params.equipped_items,
1492    )?;
1493
1494    builder.into_draft()
1495}
1496fn new_handler(
1497    params: wowlab_engine_ports::HandlerParams<'_>,
1498) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1499    let handler = crate::composition::compose_handler(
1500        build_combat_system_draft,
1501        &params,
1502        crate::hooks::fury_warrior::FuryHandler::try_new,
1503    )?;
1504
1505    Ok(Box::new(handler))
1506}
1507static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1508    primary_resource: ResourceType::Rage,
1509    secondary_resource: None,
1510    spell_ids: DECLARED_SPELL_IDS,
1511    aura_ids: DECLARED_AURA_IDS,
1512    server_proc_entries: &[
1513        DeclaredServerProcEntry {
1514            spell_id: 85739,
1515            attributes: ProcAttributes::USE_STACKS_FOR_CHARGES.bits(),
1516        },
1517        DeclaredServerProcEntry {
1518            spell_id: 52437,
1519            attributes: ProcAttributes::REQUIRE_SPELL_MODIFIER.bits()
1520                | ProcAttributes::USE_STACKS_FOR_CHARGES.bits(),
1521        },
1522        DeclaredServerProcEntry {
1523            spell_id: 435_615,
1524            attributes: ProcAttributes::USE_STACKS_FOR_CHARGES.bits(),
1525        },
1526    ],
1527    talents: TALENTS,
1528    rotation_field_schema: &[],
1529    metrics_plugin_id: None,
1530    hero_talent_trees: &[
1531        HeroTalentTreeDesc {
1532            name: "Slayer",
1533            spells: HERO_TREE_SLAYER_SPELLS,
1534            auras: HERO_TREE_SLAYER_AURAS,
1535        },
1536        HeroTalentTreeDesc {
1537            name: "Mountain Thane",
1538            spells: HERO_TREE_MOUNTAIN_THANE_SPELLS,
1539            auras: HERO_TREE_MOUNTAIN_THANE_AURAS,
1540        },
1541    ],
1542    reported_spells: REPORTED_SPELLS,
1543    masked_passive_effects: &[],
1544    passive_effect_overrides: &[],
1545};
1546pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1547    spec_id: SpecId::Fury,
1548    display_name: "Fury Warrior",
1549    metadata: DECLARED_METADATA,
1550    handler_factory: new_handler,
1551};
1552wowlab_engine_combat::smoke_test!(build_combat_system_draft);