Skip to main content

wowlab_engine_content/generated/specs/
arms_warrior.rs

1//! @generated by codegen-cli from manifests/specs/warrior/arms/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/12294>
17    pub(crate) const MORTAL_STRIKE: u32 = 12294;
18    ///<https://wowlab.gg/inspect/spell/7384>
19    pub(crate) const OVERPOWER: u32 = 7384;
20    ///<https://wowlab.gg/inspect/spell/163201>
21    pub(crate) const EXECUTE: u32 = 163_201;
22    ///<https://wowlab.gg/inspect/spell/1464>
23    pub(crate) const SLAM: u32 = 1464;
24    ///<https://wowlab.gg/inspect/spell/167105>
25    pub(crate) const COLOSSUS_SMASH: u32 = 167_105;
26    ///<https://wowlab.gg/inspect/spell/107574>
27    pub(crate) const AVATAR: u32 = 107_574;
28    ///<https://wowlab.gg/inspect/spell/260708>
29    pub(crate) const SWEEPING_STRIKES: u32 = 260_708;
30    ///<https://wowlab.gg/inspect/spell/845>
31    pub(crate) const CLEAVE: u32 = 845;
32    ///<https://wowlab.gg/inspect/spell/1680>
33    pub(crate) const WHIRLWIND: u32 = 1680;
34    ///<https://wowlab.gg/inspect/spell/772>
35    pub(crate) const REND: u32 = 772;
36    ///<https://wowlab.gg/inspect/spell/6343>
37    pub(crate) const THUNDER_CLAP: u32 = 6343;
38    ///<https://wowlab.gg/inspect/spell/1269383>
39    pub(crate) const HEROIC_STRIKE: u32 = 1_269_383;
40    ///<https://wowlab.gg/inspect/spell/376079>
41    pub(crate) const CHAMPIONS_SPEAR: u32 = 376_079;
42    ///<https://wowlab.gg/inspect/spell/6673>
43    pub(crate) const BATTLE_SHOUT: u32 = 6673;
44    ///<https://wowlab.gg/inspect/spell/57755>
45    pub(crate) const HEROIC_THROW: u32 = 57755;
46    ///<https://wowlab.gg/inspect/spell/260798>
47    pub(crate) const EXECUTE_DAMAGE: u32 = 260_798;
48    ///<https://wowlab.gg/inspect/spell/315961>
49    pub(crate) const DREADNAUGHT: u32 = 315_961;
50    ///<https://wowlab.gg/inspect/spell/383706>
51    pub(crate) const FATALITY: u32 = 383_706;
52    ///<https://wowlab.gg/inspect/spell/227847>
53    pub(crate) const BLADESTORM: u32 = 227_847;
54    ///<https://wowlab.gg/inspect/spell/228920>
55    pub(crate) const RAVAGER: u32 = 228_920;
56    ///<https://wowlab.gg/inspect/spell/436358>
57    pub(crate) const DEMOLISH: u32 = 436_358;
58}
59pub(crate) mod AURA {
60    ///<https://wowlab.gg/inspect/spell/208086>
61    pub(crate) const COLOSSUS_SMASH: u32 = 208_086;
62    ///<https://wowlab.gg/inspect/spell/262115>
63    pub(crate) const DEEP_WOUNDS: u32 = 262_115;
64    ///<https://wowlab.gg/inspect/spell/388539>
65    pub(crate) const REND: u32 = 388_539;
66    ///<https://wowlab.gg/inspect/spell/260708>
67    pub(crate) const SWEEPING_STRIKES: u32 = 260_708;
68    ///<https://wowlab.gg/inspect/spell/107574>
69    pub(crate) const AVATAR: u32 = 107_574;
70    ///<https://wowlab.gg/inspect/spell/52437>
71    pub(crate) const SUDDEN_DEATH: u32 = 52437;
72    ///<https://wowlab.gg/inspect/spell/316440>
73    pub(crate) const MARTIAL_PROWESS: u32 = 316_440;
74    ///<https://wowlab.gg/inspect/spell/386631>
75    pub(crate) const BATTLELORD: u32 = 386_631;
76    ///<https://wowlab.gg/inspect/spell/334783>
77    pub(crate) const COLLATERAL_DAMAGE: u32 = 334_783;
78    ///<https://wowlab.gg/inspect/spell/383704>
79    pub(crate) const FATAL_MARK: u32 = 383_704;
80    ///<https://wowlab.gg/inspect/spell/6673>
81    pub(crate) const BATTLE_SHOUT: u32 = 6673;
82    ///<https://wowlab.gg/inspect/spell/386164>
83    pub(crate) const BATTLE_STANCE: u32 = 386_164;
84    ///<https://wowlab.gg/inspect/spell/1300670>
85    pub(crate) const WINDING_UP: u32 = 1_300_670;
86    ///<https://wowlab.gg/inspect/spell/228920>
87    pub(crate) const RAVAGER: u32 = 228_920;
88    ///<https://wowlab.gg/inspect/spell/227847>
89    pub(crate) const BLADESTORM: u32 = 227_847;
90    ///<https://wowlab.gg/inspect/spell/386633>
91    pub(crate) const EXECUTIONERS_PRECISION: u32 = 386_633;
92    ///<https://wowlab.gg/inspect/spell/445606>
93    pub(crate) const IMMINENT_DEMISE: u32 = 445_606;
94    ///<https://wowlab.gg/inspect/spell/458689>
95    pub(crate) const FIERCE_FOLLOWTHROUGH: u32 = 458_689;
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/1269391>
101    pub(crate) const MASTER_OF_WARFARE: u32 = 1_269_391;
102    ///<https://wowlab.gg/inspect/spell/1269394>
103    pub(crate) const MASTER_OF_WARFARE_DAMAGE: u32 = 1_269_394;
104}
105pub(crate) mod TALENT {
106    ///<https://wowlab.gg/inspect/spell/152278>
107    pub(crate) const ANGER_MANAGEMENT: u32 = 152_278;
108    ///<https://wowlab.gg/inspect/spell/386630>
109    pub(crate) const BATTLELORD: u32 = 386_630;
110    ///<https://wowlab.gg/inspect/spell/386164>
111    pub(crate) const BATTLE_STANCE: u32 = 386_164;
112    ///<https://wowlab.gg/inspect/spell/389306>
113    pub(crate) const CRITICAL_THINKING: u32 = 389_306;
114    ///<https://wowlab.gg/inspect/spell/382764>
115    pub(crate) const CRUSHING_FORCE: u32 = 382_764;
116    ///<https://wowlab.gg/inspect/spell/1261060>
117    pub(crate) const DEEP_WOUNDS: u32 = 1_261_060;
118    ///<https://wowlab.gg/inspect/spell/262150>
119    pub(crate) const DREADNAUGHT: u32 = 262_150;
120    ///<https://wowlab.gg/inspect/spell/386634>
121    pub(crate) const EXECUTIONERS_PRECISION: u32 = 386_634;
122    ///<https://wowlab.gg/inspect/spell/383703>
123    pub(crate) const FATALITY: u32 = 383_703;
124    ///<https://wowlab.gg/inspect/spell/444773>
125    pub(crate) const FIERCE_FOLLOWTHROUGH: u32 = 444_773;
126    ///<https://wowlab.gg/inspect/spell/392792>
127    pub(crate) const FROTHING_BERSERKER: u32 = 392_792;
128    ///<https://wowlab.gg/inspect/spell/444769>
129    pub(crate) const IMMINENT_DEMISE: u32 = 444_769;
130    ///<https://wowlab.gg/inspect/spell/383430>
131    pub(crate) const IMPALE: u32 = 383_430;
132    ///<https://wowlab.gg/inspect/spell/316405>
133    pub(crate) const IMPROVED_EXECUTE: u32 = 316_405;
134    ///<https://wowlab.gg/inspect/spell/385571>
135    pub(crate) const IMPROVED_OVERPOWER: u32 = 385_571;
136    ///<https://wowlab.gg/inspect/spell/1273062>
137    pub(crate) const MARTIAL_PROWESS: u32 = 1_273_062;
138    ///<https://wowlab.gg/inspect/spell/281001>
139    pub(crate) const MASSACRE: u32 = 281_001;
140    ///<https://wowlab.gg/inspect/spell/1269314>
141    pub(crate) const MASTER_OF_WARFARE: u32 = 1_269_314;
142    ///<https://wowlab.gg/inspect/spell/1261062>
143    pub(crate) const MORTAL_WOUNDS: u32 = 1_261_062;
144    ///<https://wowlab.gg/inspect/spell/400205>
145    pub(crate) const OVERPOWERING_FINISH: u32 = 400_205;
146    ///<https://wowlab.gg/inspect/spell/444772>
147    pub(crate) const OVERWHELMING_BLADES: u32 = 444_772;
148    ///<https://wowlab.gg/inspect/spell/382767>
149    pub(crate) const OVERWHELMING_RAGE: u32 = 382_767;
150    ///<https://wowlab.gg/inspect/spell/228920>
151    pub(crate) const RAVAGER: u32 = 228_920;
152    ///<https://wowlab.gg/inspect/spell/444775>
153    pub(crate) const REAP_THE_STORM: u32 = 444_775;
154    ///<https://wowlab.gg/inspect/spell/383341>
155    pub(crate) const SHARPENED_BLADES: u32 = 383_341;
156    ///<https://wowlab.gg/inspect/spell/444767>
157    pub(crate) const SLAYERS_DOMINANCE: u32 = 444_767;
158    ///<https://wowlab.gg/inspect/spell/400803>
159    pub(crate) const STRENGTH_OF_ARMS: u32 = 400_803;
160    ///<https://wowlab.gg/inspect/spell/29725>
161    pub(crate) const SUDDEN_DEATH: u32 = 29725;
162    ///<https://wowlab.gg/inspect/spell/184783>
163    pub(crate) const TACTICIAN: u32 = 184_783;
164    ///<https://wowlab.gg/inspect/spell/386628>
165    pub(crate) const UNHINGED: u32 = 386_628;
166    ///<https://wowlab.gg/inspect/spell/444780>
167    pub(crate) const UNRELENTING_ONSLAUGHT: u32 = 444_780;
168    ///<https://wowlab.gg/inspect/spell/262231>
169    pub(crate) const WAR_MACHINE: u32 = 262_231;
170}
171pub(crate) mod SET_BONUS {
172    ///<https://wowlab.gg/inspect/spell/1296643>
173    pub(crate) const MID2_ARMS_2PC: u32 = 1_296_643;
174    ///<https://wowlab.gg/inspect/spell/1296644>
175    pub(crate) const MID2_ARMS_4PC: u32 = 1_296_644;
176}
177pub(crate) mod REPORTED_SPELL {
178    ///<https://wowlab.gg/inspect/spell/1300660>
179    pub(crate) const CONCUSSIVE_SLAM: u32 = 1_300_660;
180}
181pub(crate) mod HERO {
182    pub(crate) mod SLAYER {
183        pub(crate) mod SPELL {
184            ///<https://wowlab.gg/inspect/spell/446005>
185            pub(crate) const REAP_THE_STORM_EXECUTE: u32 = 446_005;
186            ///<https://wowlab.gg/inspect/spell/445579>
187            pub(crate) const SLAYERS_STRIKE: u32 = 445_579;
188        }
189        pub(crate) mod AURA {
190            ///<https://wowlab.gg/inspect/spell/446918>
191            pub(crate) const BRUTAL_FINISH: u32 = 446_918;
192            ///<https://wowlab.gg/inspect/spell/456120>
193            pub(crate) const OPPORTUNIST: u32 = 456_120;
194            ///<https://wowlab.gg/inspect/spell/1270731>
195            pub(crate) const VIOLENT_EUPHORIA: u32 = 1_270_731;
196        }
197    }
198    pub(crate) mod COLOSSUS {
199        pub(crate) mod SPELL {
200            ///<https://wowlab.gg/inspect/spell/436358>
201            pub(crate) const DEMOLISH: u32 = 436_358;
202            ///<https://wowlab.gg/inspect/spell/440884>
203            pub(crate) const DEMOLISH_HIT_1: u32 = 440_884;
204            ///<https://wowlab.gg/inspect/spell/440886>
205            pub(crate) const DEMOLISH_HIT_2: u32 = 440_886;
206            ///<https://wowlab.gg/inspect/spell/440888>
207            pub(crate) const DEMOLISH_HIT_3: u32 = 440_888;
208        }
209        pub(crate) mod AURA {
210            ///<https://wowlab.gg/inspect/spell/1270846>
211            pub(crate) const CELERITOUS_CONCLUSION_CRIT: u32 = 1_270_846;
212            ///<https://wowlab.gg/inspect/spell/1270843>
213            pub(crate) const CELERITOUS_CONCLUSION_HASTE: u32 = 1_270_843;
214            ///<https://wowlab.gg/inspect/spell/440989>
215            pub(crate) const COLOSSAL_MIGHT: u32 = 440_989;
216            ///<https://wowlab.gg/inspect/spell/1270840>
217            pub(crate) const CUT_TO_THE_BONE: u32 = 1_270_840;
218            ///<https://wowlab.gg/inspect/spell/447513>
219            pub(crate) const WRECKED: u32 = 447_513;
220        }
221    }
222}
223static HERO_TREE_SLAYER_SPELLS: &[(&str, u32)] = &[
224    ("REAP_THE_STORM_EXECUTE", 446_005),
225    ("SLAYERS_STRIKE", 445_579),
226];
227static HERO_TREE_SLAYER_AURAS: &[(&str, u32)] = &[
228    ("BRUTAL_FINISH", 446_918),
229    ("OPPORTUNIST", 456_120),
230    ("VIOLENT_EUPHORIA", 1_270_731),
231];
232static HERO_TREE_COLOSSUS_SPELLS: &[(&str, u32)] = &[
233    ("DEMOLISH", 436_358),
234    ("DEMOLISH_HIT_1", 440_884),
235    ("DEMOLISH_HIT_2", 440_886),
236    ("DEMOLISH_HIT_3", 440_888),
237];
238static HERO_TREE_COLOSSUS_AURAS: &[(&str, u32)] = &[
239    ("CELERITOUS_CONCLUSION_CRIT", 1_270_846),
240    ("CELERITOUS_CONCLUSION_HASTE", 1_270_843),
241    ("COLOSSAL_MIGHT", 440_989),
242    ("CUT_TO_THE_BONE", 1_270_840),
243    ("WRECKED", 447_513),
244];
245pub(crate) mod DAMAGE_SPELL {
246    pub(crate) const MORTAL_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_12294;
247    pub(crate) const OVERPOWER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_7384;
248    pub(crate) const EXECUTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_163201;
249    pub(crate) const SLAM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1464;
250    pub(crate) const COLOSSUS_SMASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_167105;
251    pub(crate) const AVATAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_107574;
252    pub(crate) const SWEEPING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_260708;
253    pub(crate) const CLEAVE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_845;
254    pub(crate) const WHIRLWIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1680;
255    pub(crate) const REND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_772;
256    pub(crate) const THUNDER_CLAP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_6343;
257    pub(crate) const HEROIC_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1269383;
258    pub(crate) const CHAMPIONS_SPEAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_376079;
259    pub(crate) const BATTLE_SHOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_6673;
260    pub(crate) const HEROIC_THROW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_57755;
261    pub(crate) const EXECUTE_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_260798;
262    pub(crate) const DREADNAUGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_315961;
263    pub(crate) const FATALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_383706;
264    pub(crate) const BLADESTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_227847;
265    pub(crate) const RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_228920;
266    pub(crate) const DEMOLISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_436358;
267    pub(crate) const REAP_THE_STORM_EXECUTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_446005;
268    pub(crate) const SLAYERS_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_445579;
269    pub(crate) const DEMOLISH_HIT_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_440884;
270    pub(crate) const DEMOLISH_HIT_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_440886;
271    pub(crate) const DEMOLISH_HIT_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_440888;
272}
273pub(crate) mod DAMAGE_AURA {
274    pub(crate) const COLOSSUS_SMASH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_208086;
275    pub(crate) const DEEP_WOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_262115;
276    pub(crate) const REND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_388539;
277    pub(crate) const SWEEPING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_260708;
278    pub(crate) const AVATAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_107574;
279    pub(crate) const SUDDEN_DEATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_52437;
280    pub(crate) const MARTIAL_PROWESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_316440;
281    pub(crate) const BATTLELORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386631;
282    pub(crate) const COLLATERAL_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_334783;
283    pub(crate) const FATAL_MARK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_383704;
284    pub(crate) const BATTLE_SHOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_6673;
285    pub(crate) const BATTLE_STANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386164;
286    pub(crate) const WINDING_UP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1300670;
287    pub(crate) const RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_228920;
288    pub(crate) const BLADESTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_227847;
289    pub(crate) const EXECUTIONERS_PRECISION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386633;
290    pub(crate) const IMMINENT_DEMISE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_445606;
291    pub(crate) const FIERCE_FOLLOWTHROUGH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_458689;
292    pub(crate) const EXECUTIONER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_445584;
293    pub(crate) const OVERWHELMED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_445836;
294    pub(crate) const MASTER_OF_WARFARE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1269391;
295    pub(crate) const MASTER_OF_WARFARE_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1269394;
296}
297pub(crate) mod DAMAGE_TALENT {
298    pub(crate) const ANGER_MANAGEMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_152278;
299    pub(crate) const BATTLELORD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386630;
300    pub(crate) const BATTLE_STANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386164;
301    pub(crate) const CRITICAL_THINKING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_389306;
302    pub(crate) const CRUSHING_FORCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_382764;
303    pub(crate) const DEEP_WOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1261060;
304    pub(crate) const DREADNAUGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_262150;
305    pub(crate) const EXECUTIONERS_PRECISION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386634;
306    pub(crate) const FATALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_383703;
307    pub(crate) const FIERCE_FOLLOWTHROUGH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_444773;
308    pub(crate) const FROTHING_BERSERKER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_392792;
309    pub(crate) const IMMINENT_DEMISE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_444769;
310    pub(crate) const IMPALE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_383430;
311    pub(crate) const IMPROVED_EXECUTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_316405;
312    pub(crate) const IMPROVED_OVERPOWER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_385571;
313    pub(crate) const MARTIAL_PROWESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1273062;
314    pub(crate) const MASSACRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_281001;
315    pub(crate) const MASTER_OF_WARFARE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1269314;
316    pub(crate) const MORTAL_WOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1261062;
317    pub(crate) const OVERPOWERING_FINISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_400205;
318    pub(crate) const OVERWHELMING_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_444772;
319    pub(crate) const OVERWHELMING_RAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_382767;
320    pub(crate) const RAVAGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_228920;
321    pub(crate) const REAP_THE_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_444775;
322    pub(crate) const SHARPENED_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_383341;
323    pub(crate) const SLAYERS_DOMINANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_444767;
324    pub(crate) const STRENGTH_OF_ARMS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_400803;
325    pub(crate) const SUDDEN_DEATH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_29725;
326    pub(crate) const TACTICIAN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_184783;
327    pub(crate) const UNHINGED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_386628;
328    pub(crate) const UNRELENTING_ONSLAUGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_444780;
329    pub(crate) const WAR_MACHINE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_262231;
330}
331pub(crate) mod DAMAGE_REPORTED {
332    pub(crate) const CONCUSSIVE_SLAM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ACTION::SPELL_1300660;
333}
334pub(crate) mod DAMAGE_EFFECT {
335    pub(crate) const SEASONED_SOLDIER_CRIT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_279423_EFFECT_1;
336    pub(crate) const EXECUTE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_260798_EFFECT_1;
337    pub(crate) const EXECUTE_REFUND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_163201_EFFECT_2;
338    pub(crate) const CRITICAL_THINKING_REFUND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_389306_EFFECT_2;
339    pub(crate) const MASSACRE_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_281001_EFFECT_2;
340    pub(crate) const MORTAL_STRIKE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_12294_EFFECT_1;
341    pub(crate) const BLADESTORM_PERIOD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_227847_EFFECT_1;
342    pub(crate) const OVERPOWER_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_7384_EFFECT_1;
343    pub(crate) const TACTICIAN_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_184783_EFFECT_1;
344    pub(crate) const ANGER_MANAGEMENT_DIV: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_152278_EFFECT_1;
345    pub(crate) const FATALITY_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_383703_EFFECT_1;
346    pub(crate) const FATALITY_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_383706_EFFECT_1;
347    pub(crate) const DREADNAUGHT_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_315961_EFFECT_1;
348    pub(crate) const SLAYERS_STRIKE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_445579_EFFECT_1;
349    pub(crate) const IMMINENT_DEMISE_EVERY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_444769_EFFECT_1;
350    pub(crate) const REAP_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_446005_EFFECT_1;
351    pub(crate) const OVERPOWERING_FINISH_BELOW: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_400205_EFFECT_2;
352    pub(crate) const OVERPOWERING_FINISH_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_400205_EFFECT_1;
353    pub(crate) const FROTHING_REFUND: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_392792_EFFECT_1;
354    pub(crate) const UNRELENTING_CDR_S: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_444780_EFFECT_1;
355    pub(crate) const UNRELENTING_OVERWHELMED: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_444780_EFFECT_2;
356    pub(crate) const MID2_MORTAL_STRIKE_EXECUTE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_1296643_EFFECT_1;
357    pub(crate) const MID2_OVERPOWER_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_1296644_EFFECT_1;
358    pub(crate) const MID2_CONCUSSIVE_SLAM_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_1300660_EFFECT_1;
359    pub(crate) const MID2_CONCUSSIVE_SLAM_REDUCED_TARGETS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::EFFECT::SPELL_1300660_EFFECT_2;
360}
361pub(crate) const AURA_COLOSSUS_SMASH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_COLOSSUS_SMASH
362    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
363pub(crate) const AURA_DEEP_WOUNDS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_DEEP_WOUNDS
364    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
365pub(crate) const AURA_REND: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_REND
366    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
367pub(crate) const AURA_SWEEPING_STRIKES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_SWEEPING_STRIKES
368    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
369pub(crate) const AURA_AVATAR: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_AVATAR
370    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
371pub(crate) const AURA_SUDDEN_DEATH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_SUDDEN_DEATH
372    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
373pub(crate) const AURA_MARTIAL_PROWESS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_MARTIAL_PROWESS
374    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
375pub(crate) const AURA_BATTLELORD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_BATTLELORD
376    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
377pub(crate) const AURA_COLLATERAL_DAMAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_COLLATERAL_DAMAGE
378    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
379pub(crate) const AURA_FATAL_MARK: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_FATAL_MARK
380    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
381pub(crate) const AURA_BATTLE_SHOUT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_BATTLE_SHOUT
382    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
383pub(crate) const AURA_BATTLE_STANCE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_BATTLE_STANCE
384    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
385pub(crate) const AURA_WINDING_UP: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_WINDING_UP
386    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
387pub(crate) const AURA_RAVAGER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_RAVAGER
388    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
389pub(crate) const AURA_BLADESTORM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_BLADESTORM
390    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
391pub(crate) const AURA_EXECUTIONERS_PRECISION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_EXECUTIONERS_PRECISION
392    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
393pub(crate) const AURA_IMMINENT_DEMISE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_IMMINENT_DEMISE
394    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
395pub(crate) const AURA_FIERCE_FOLLOWTHROUGH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_FIERCE_FOLLOWTHROUGH
396    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
397pub(crate) const AURA_EXECUTIONER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_EXECUTIONER
398    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
399pub(crate) const AURA_OVERWHELMED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_OVERWHELMED
400    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
401pub(crate) const AURA_MASTER_OF_WARFARE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_MASTER_OF_WARFARE
402    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
403pub(crate) const AURA_MASTER_OF_WARFARE_DAMAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::AURA_MASTER_OF_WARFARE_DAMAGE
404    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
405pub(crate) const AURA_COUNT: usize = 22;
406const _: () = assert!(
407    AURA_COUNT == 22, "AURA index ABI: count changed -- update positional hook consumers"
408);
409pub(crate) const SPELL_MORTAL_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_MORTAL_STRIKE
410    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
411pub(crate) const SPELL_OVERPOWER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_OVERPOWER
412    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
413pub(crate) const SPELL_EXECUTE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_EXECUTE
414    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
415pub(crate) const SPELL_SLAM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_SLAM
416    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
417pub(crate) const SPELL_COLOSSUS_SMASH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_COLOSSUS_SMASH
418    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
419pub(crate) const SPELL_AVATAR: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_AVATAR
420    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
421pub(crate) const SPELL_SWEEPING_STRIKES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_SWEEPING_STRIKES
422    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
423pub(crate) const SPELL_CLEAVE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_CLEAVE
424    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
425pub(crate) const SPELL_WHIRLWIND: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_WHIRLWIND
426    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
427pub(crate) const SPELL_REND: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_REND
428    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
429pub(crate) const SPELL_THUNDER_CLAP: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_THUNDER_CLAP
430    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
431pub(crate) const SPELL_HEROIC_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_HEROIC_STRIKE
432    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
433pub(crate) const SPELL_CHAMPIONS_SPEAR: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_CHAMPIONS_SPEAR
434    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
435pub(crate) const SPELL_BATTLE_SHOUT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_BATTLE_SHOUT
436    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
437pub(crate) const SPELL_HEROIC_THROW: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_HEROIC_THROW
438    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
439pub(crate) const SPELL_EXECUTE_DAMAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_EXECUTE_DAMAGE
440    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
441pub(crate) const SPELL_DREADNAUGHT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_DREADNAUGHT
442    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
443pub(crate) const SPELL_FATALITY: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_FATALITY
444    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
445pub(crate) const SPELL_BLADESTORM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_BLADESTORM
446    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
447pub(crate) const SPELL_RAVAGER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_RAVAGER
448    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
449pub(crate) const SPELL_DEMOLISH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::arms_warrior::SPELL_DEMOLISH
450    .bind(wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF);
451pub(crate) const SPELL_COUNT: usize = 21;
452const _: () = assert!(
453    SPELL_COUNT == 21,
454    "SPELL index ABI: count changed -- update positional hook consumers"
455);
456pub(crate) mod EFFECT {
457    ///<https://wowlab.gg/inspect/spell/279423>
458    pub(crate) const SEASONED_SOLDIER_CRIT: (u32, u8) = (279_423, 1);
459    ///<https://wowlab.gg/inspect/spell/260798>
460    pub(crate) const EXECUTE_DMG: (u32, u8) = (260_798, 1);
461    ///<https://wowlab.gg/inspect/spell/163201>
462    pub(crate) const EXECUTE_REFUND: (u32, u8) = (163_201, 2);
463    ///<https://wowlab.gg/inspect/spell/389306>
464    pub(crate) const CRITICAL_THINKING_REFUND: (u32, u8) = (389_306, 2);
465    ///<https://wowlab.gg/inspect/spell/281001>
466    pub(crate) const MASSACRE_PCT: (u32, u8) = (281_001, 2);
467    ///<https://wowlab.gg/inspect/spell/12294>
468    pub(crate) const MORTAL_STRIKE_DMG: (u32, u8) = (12294, 1);
469    ///<https://wowlab.gg/inspect/spell/227847>
470    pub(crate) const BLADESTORM_PERIOD: (u32, u8) = (227_847, 1);
471    ///<https://wowlab.gg/inspect/spell/7384>
472    pub(crate) const OVERPOWER_DMG: (u32, u8) = (7384, 1);
473    ///<https://wowlab.gg/inspect/spell/184783>
474    pub(crate) const TACTICIAN_CHANCE: (u32, u8) = (184_783, 1);
475    ///<https://wowlab.gg/inspect/spell/152278>
476    pub(crate) const ANGER_MANAGEMENT_DIV: (u32, u8) = (152_278, 1);
477    ///<https://wowlab.gg/inspect/spell/383703>
478    pub(crate) const FATALITY_CHANCE: (u32, u8) = (383_703, 1);
479    ///<https://wowlab.gg/inspect/spell/383706>
480    pub(crate) const FATALITY_DMG: (u32, u8) = (383_706, 1);
481    ///<https://wowlab.gg/inspect/spell/315961>
482    pub(crate) const DREADNAUGHT_DMG: (u32, u8) = (315_961, 1);
483    ///<https://wowlab.gg/inspect/spell/445579>
484    pub(crate) const SLAYERS_STRIKE_DMG: (u32, u8) = (445_579, 1);
485    ///<https://wowlab.gg/inspect/spell/444769>
486    pub(crate) const IMMINENT_DEMISE_EVERY: (u32, u8) = (444_769, 1);
487    ///<https://wowlab.gg/inspect/spell/446005>
488    pub(crate) const REAP_DMG: (u32, u8) = (446_005, 1);
489    ///<https://wowlab.gg/inspect/spell/400205>
490    pub(crate) const OVERPOWERING_FINISH_BELOW: (u32, u8) = (400_205, 2);
491    ///<https://wowlab.gg/inspect/spell/400205>
492    pub(crate) const OVERPOWERING_FINISH_PCT: (u32, u8) = (400_205, 1);
493    ///<https://wowlab.gg/inspect/spell/392792>
494    pub(crate) const FROTHING_REFUND: (u32, u8) = (392_792, 1);
495    ///<https://wowlab.gg/inspect/spell/444780>
496    pub(crate) const UNRELENTING_CDR_S: (u32, u8) = (444_780, 1);
497    ///<https://wowlab.gg/inspect/spell/444780>
498    pub(crate) const UNRELENTING_OVERWHELMED: (u32, u8) = (444_780, 2);
499    ///<https://wowlab.gg/inspect/spell/1296643>
500    pub(crate) const MID2_MORTAL_STRIKE_EXECUTE_DAMAGE: (u32, u8) = (1_296_643, 1);
501    ///<https://wowlab.gg/inspect/spell/1296644>
502    pub(crate) const MID2_OVERPOWER_DAMAGE: (u32, u8) = (1_296_644, 1);
503    ///<https://wowlab.gg/inspect/spell/1300660>
504    pub(crate) const MID2_CONCUSSIVE_SLAM_DAMAGE: (u32, u8) = (1_300_660, 1);
505    ///<https://wowlab.gg/inspect/spell/1300660>
506    pub(crate) const MID2_CONCUSSIVE_SLAM_REDUCED_TARGETS: (u32, u8) = (1_300_660, 2);
507}
508static REPORTED_SPELLS: &[(&str, u32)] = &[("concussive_slam", 1_300_660)];
509static DECLARED_SPELL_IDS: &[u32] = &[
510    12294, 7384, 163_201, 1464, 167_105, 107_574, 260_708, 845, 1680, 772, 6343,
511    1_269_383, 376_079, 6673, 57755, 260_798, 315_961, 383_706, 227_847, 228_920,
512    436_358, 208_086, 262_115, 388_539, 52437, 316_440, 386_631, 334_783, 383_704,
513    386_164, 1_300_670, 386_633, 445_606, 458_689, 445_584, 445_836, 1_269_391,
514    1_269_394, 152_278, 386_630, 389_306, 382_764, 1_261_060, 262_150, 386_634, 383_703,
515    444_773, 392_792, 444_769, 383_430, 316_405, 385_571, 1_273_062, 281_001, 1_269_314,
516    1_261_062, 400_205, 444_772, 382_767, 444_775, 383_341, 444_767, 400_803, 29725,
517    184_783, 386_628, 444_780, 262_231, 6603, 279_423, 445_579, 446_005, 1_258_398,
518    1_296_643, 1_296_644, 1_300_660, 446_918, 456_120, 1_270_731, 440_884, 440_886,
519    440_888, 1_270_846, 1_270_843, 440_989, 1_270_840, 447_513,
520];
521static DECLARED_AURA_IDS: &[u32] = &[
522    208_086, 262_115, 388_539, 260_708, 107_574, 52437, 316_440, 386_631, 334_783,
523    383_704, 6673, 386_164, 1_300_670, 228_920, 227_847, 386_633, 445_606, 458_689,
524    445_584, 445_836, 1_269_391, 1_269_394, 446_918, 456_120, 1_270_731, 1_270_846,
525    1_270_843, 440_989, 1_270_840, 447_513,
526];
527static TALENTS: &[(&str, u32)] = &[
528    ("ANGER_MANAGEMENT", TALENT::ANGER_MANAGEMENT),
529    ("BATTLELORD", TALENT::BATTLELORD),
530    ("BATTLE_STANCE", TALENT::BATTLE_STANCE),
531    ("CRITICAL_THINKING", TALENT::CRITICAL_THINKING),
532    ("CRUSHING_FORCE", TALENT::CRUSHING_FORCE),
533    ("DEEP_WOUNDS", TALENT::DEEP_WOUNDS),
534    ("DREADNAUGHT", TALENT::DREADNAUGHT),
535    ("EXECUTIONERS_PRECISION", TALENT::EXECUTIONERS_PRECISION),
536    ("FATALITY", TALENT::FATALITY),
537    ("FIERCE_FOLLOWTHROUGH", TALENT::FIERCE_FOLLOWTHROUGH),
538    ("FROTHING_BERSERKER", TALENT::FROTHING_BERSERKER),
539    ("IMMINENT_DEMISE", TALENT::IMMINENT_DEMISE),
540    ("IMPALE", TALENT::IMPALE),
541    ("IMPROVED_EXECUTE", TALENT::IMPROVED_EXECUTE),
542    ("IMPROVED_OVERPOWER", TALENT::IMPROVED_OVERPOWER),
543    ("MARTIAL_PROWESS", TALENT::MARTIAL_PROWESS),
544    ("MASSACRE", TALENT::MASSACRE),
545    ("MASTER_OF_WARFARE", TALENT::MASTER_OF_WARFARE),
546    ("MORTAL_WOUNDS", TALENT::MORTAL_WOUNDS),
547    ("OVERPOWERING_FINISH", TALENT::OVERPOWERING_FINISH),
548    ("OVERWHELMING_BLADES", TALENT::OVERWHELMING_BLADES),
549    ("OVERWHELMING_RAGE", TALENT::OVERWHELMING_RAGE),
550    ("RAVAGER", TALENT::RAVAGER),
551    ("REAP_THE_STORM", TALENT::REAP_THE_STORM),
552    ("SHARPENED_BLADES", TALENT::SHARPENED_BLADES),
553    ("SLAYERS_DOMINANCE", TALENT::SLAYERS_DOMINANCE),
554    ("STRENGTH_OF_ARMS", TALENT::STRENGTH_OF_ARMS),
555    ("SUDDEN_DEATH", TALENT::SUDDEN_DEATH),
556    ("TACTICIAN", TALENT::TACTICIAN),
557    ("UNHINGED", TALENT::UNHINGED),
558    ("UNRELENTING_ONSLAUGHT", TALENT::UNRELENTING_ONSLAUGHT),
559    ("WAR_MACHINE", TALENT::WAR_MACHINE),
560];
561pub(crate) mod ARMS_WARRIOR {
562    pub(crate) const MORTAL_STRIKE_CASTS: u32 = 0;
563    pub(crate) const OVERPOWER_CASTS: u32 = 1;
564    pub(crate) const EXECUTE_CASTS: u32 = 2;
565    pub(crate) const SLAM_CASTS: u32 = 3;
566    pub(crate) const COLOSSUS_SMASH_CASTS: u32 = 4;
567    pub(crate) const BLADESTORM_CASTS: u32 = 5;
568    pub(crate) const AVATAR_CASTS: u32 = 6;
569    pub(crate) const COLOSSUS_SMASH_UPTIME_MS: u32 = 7;
570    pub(crate) const AVATAR_UPTIME_MS: u32 = 8;
571}
572fn aura_colossus_smash(
573    a: AuraDefinitionDraft,
574    data: &ResolvedGameData,
575) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
576    Ok(
577        a
578            .on_target()
579            .apply_base_from_data(data, 208_086)?
580            .max_stacks(
581                data
582                    .require_aura_max_stacks(
583                        wowlab_types::sim::SpellIdx::from_raw(208_086),
584                    )?,
585            ),
586    )
587}
588fn aura_deep_wounds(
589    a: AuraDefinitionDraft,
590    data: &ResolvedGameData,
591) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
592    Ok(
593        a
594            .on_target()
595            .apply_base_from_data(data, 262_115)?
596            .max_stacks(
597                data
598                    .require_aura_max_stacks(
599                        wowlab_types::sim::SpellIdx::from_raw(262_115),
600                    )?,
601            ),
602    )
603}
604fn aura_rend(
605    a: AuraDefinitionDraft,
606    data: &ResolvedGameData,
607) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
608    Ok(
609        a
610            .on_target()
611            .apply_base_from_data(data, 388_539)?
612            .max_stacks(
613                data
614                    .require_aura_max_stacks(
615                        wowlab_types::sim::SpellIdx::from_raw(388_539),
616                    )?,
617            ),
618    )
619}
620fn aura_sweeping_strikes(
621    a: AuraDefinitionDraft,
622    data: &ResolvedGameData,
623) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
624    Ok(
625        a
626            .on_player()
627            .apply_base_from_data(data, 260_708)?
628            .max_stacks(
629                data
630                    .require_aura_max_stacks(
631                        wowlab_types::sim::SpellIdx::from_raw(260_708),
632                    )?,
633            ),
634    )
635}
636fn aura_avatar(
637    a: AuraDefinitionDraft,
638    data: &ResolvedGameData,
639) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
640    Ok(
641        a
642            .on_player()
643            .apply_base_from_data(data, 107_574)?
644            .max_stacks(
645                data
646                    .require_aura_max_stacks(
647                        wowlab_types::sim::SpellIdx::from_raw(107_574),
648                    )?,
649            ),
650    )
651}
652fn aura_sudden_death(
653    a: AuraDefinitionDraft,
654    data: &ResolvedGameData,
655) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
656    Ok(
657        a
658            .on_player()
659            .apply_base_from_data(data, 52437)?
660            .max_stacks(
661                data
662                    .require_aura_max_stacks(
663                        wowlab_types::sim::SpellIdx::from_raw(52437),
664                    )?,
665            ),
666    )
667}
668fn aura_martial_prowess(
669    a: AuraDefinitionDraft,
670    data: &ResolvedGameData,
671) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
672    Ok(
673        a
674            .on_player()
675            .apply_base_from_data(data, 316_440)?
676            .max_stacks(
677                data
678                    .require_aura_max_stacks(
679                        wowlab_types::sim::SpellIdx::from_raw(316_440),
680                    )?,
681            ),
682    )
683}
684fn aura_battlelord(
685    a: AuraDefinitionDraft,
686    data: &ResolvedGameData,
687) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
688    Ok(
689        a
690            .on_player()
691            .apply_base_from_data(data, 386_631)?
692            .max_stacks(
693                data
694                    .require_aura_max_stacks(
695                        wowlab_types::sim::SpellIdx::from_raw(386_631),
696                    )?,
697            ),
698    )
699}
700fn aura_collateral_damage(
701    a: AuraDefinitionDraft,
702    data: &ResolvedGameData,
703) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
704    Ok(
705        a
706            .on_player()
707            .apply_base_from_data(data, 334_783)?
708            .max_stacks(
709                data
710                    .require_aura_max_stacks(
711                        wowlab_types::sim::SpellIdx::from_raw(334_783),
712                    )?,
713            ),
714    )
715}
716fn aura_fatal_mark(
717    a: AuraDefinitionDraft,
718    data: &ResolvedGameData,
719) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
720    Ok(
721        a
722            .on_target()
723            .apply_base_from_data(data, 383_704)?
724            .max_stacks(
725                data
726                    .require_aura_max_stacks(
727                        wowlab_types::sim::SpellIdx::from_raw(383_704),
728                    )?,
729            ),
730    )
731}
732fn aura_battle_shout(
733    a: AuraDefinitionDraft,
734    data: &ResolvedGameData,
735) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
736    a.on_player()
737        .apply_base_from_data(data, 6673)?
738        .max_stacks(
739            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(6673))?,
740        )
741        .attack_power_pct_per_stack(
742            data.base_points(wowlab_types::sim::SpellIdx::from_raw(6673), 1),
743        )
744}
745fn aura_battle_stance(
746    a: AuraDefinitionDraft,
747    data: &ResolvedGameData,
748) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
749    Ok(
750        a
751            .on_player()
752            .apply_base_from_data(data, 386_164)?
753            .max_stacks(
754                data
755                    .require_aura_max_stacks(
756                        wowlab_types::sim::SpellIdx::from_raw(386_164),
757                    )?,
758            ),
759    )
760}
761fn aura_winding_up(
762    a: AuraDefinitionDraft,
763    data: &ResolvedGameData,
764) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
765    a.on_player()
766        .apply_base_from_data(data, 1_300_670)?
767        .max_stacks(
768            wowlab_engine_combat::validated_max_stacks(
769                5.0,
770                1_300_670,
771                "aura.max_stacks",
772            )?,
773        )
774        .damage_percent_spells_linear(
775            data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_300_670), 1),
776            &[1464, 1_269_383],
777        )
778}
779fn aura_ravager(
780    a: AuraDefinitionDraft,
781    data: &ResolvedGameData,
782) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
783    Ok(
784        a
785            .on_player()
786            .apply_base_from_data(data, 228_920)?
787            .max_stacks(
788                data
789                    .require_aura_max_stacks(
790                        wowlab_types::sim::SpellIdx::from_raw(228_920),
791                    )?,
792            ),
793    )
794}
795fn aura_bladestorm(
796    a: AuraDefinitionDraft,
797    data: &ResolvedGameData,
798) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
799    Ok(
800        a
801            .on_player()
802            .apply_base_from_data(data, 227_847)?
803            .max_stacks(
804                data
805                    .require_aura_max_stacks(
806                        wowlab_types::sim::SpellIdx::from_raw(227_847),
807                    )?,
808            ),
809    )
810}
811fn aura_executioners_precision(
812    a: AuraDefinitionDraft,
813    data: &ResolvedGameData,
814) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
815    Ok(
816        a
817            .on_player()
818            .apply_base_from_data(data, 386_633)?
819            .max_stacks(
820                data
821                    .require_aura_max_stacks(
822                        wowlab_types::sim::SpellIdx::from_raw(386_633),
823                    )?,
824            ),
825    )
826}
827fn aura_imminent_demise(
828    a: AuraDefinitionDraft,
829    data: &ResolvedGameData,
830) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
831    Ok(
832        a
833            .on_player()
834            .apply_base_from_data(data, 445_606)?
835            .max_stacks(
836                data
837                    .require_aura_max_stacks(
838                        wowlab_types::sim::SpellIdx::from_raw(445_606),
839                    )?,
840            ),
841    )
842}
843fn aura_fierce_followthrough(
844    a: AuraDefinitionDraft,
845    data: &ResolvedGameData,
846) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
847    Ok(
848        a
849            .on_player()
850            .apply_base_from_data(data, 458_689)?
851            .max_stacks(
852                data
853                    .require_aura_max_stacks(
854                        wowlab_types::sim::SpellIdx::from_raw(458_689),
855                    )?,
856            ),
857    )
858}
859fn aura_executioner(
860    a: AuraDefinitionDraft,
861    data: &ResolvedGameData,
862) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
863    Ok(
864        a
865            .on_player()
866            .apply_base_from_data(data, 445_584)?
867            .max_stacks(
868                data
869                    .require_aura_max_stacks(
870                        wowlab_types::sim::SpellIdx::from_raw(445_584),
871                    )?,
872            ),
873    )
874}
875fn aura_overwhelmed(
876    a: AuraDefinitionDraft,
877    data: &ResolvedGameData,
878) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
879    Ok(
880        a
881            .on_target()
882            .apply_base_from_data(data, 445_836)?
883            .max_stacks(
884                data
885                    .require_aura_max_stacks(
886                        wowlab_types::sim::SpellIdx::from_raw(445_836),
887                    )?,
888            ),
889    )
890}
891fn aura_master_of_warfare(
892    a: AuraDefinitionDraft,
893    data: &ResolvedGameData,
894) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
895    Ok(
896        a
897            .on_player()
898            .apply_base_from_data(data, 1_269_391)?
899            .max_stacks(
900                data
901                    .require_aura_max_stacks(
902                        wowlab_types::sim::SpellIdx::from_raw(1_269_391),
903                    )?,
904            ),
905    )
906}
907fn aura_master_of_warfare_damage(
908    a: AuraDefinitionDraft,
909    data: &ResolvedGameData,
910) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
911    Ok(
912        a
913            .on_player()
914            .apply_base_from_data(data, 1_269_394)?
915            .max_stacks(
916                data
917                    .require_aura_max_stacks(
918                        wowlab_types::sim::SpellIdx::from_raw(1_269_394),
919                    )?,
920            ),
921    )
922}
923fn spell_mortal_strike(
924    s: SpellDefinitionDraft,
925    data: &ResolvedGameData,
926) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
927    Ok(
928        s
929            .apply_base_from_data(data, 12294)?
930            .apply_aoe_from_data(data)
931            .on_cast(crate::hooks::arms_warrior::mortal_strike_hook),
932    )
933}
934fn spell_overpower(
935    s: SpellDefinitionDraft,
936    data: &ResolvedGameData,
937) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
938    Ok(
939        s
940            .apply_base_from_data(data, 7384)?
941            .apply_aoe_from_data(data)
942            .on_cast(crate::hooks::arms_warrior::overpower_hook),
943    )
944}
945fn spell_execute(
946    s: SpellDefinitionDraft,
947    data: &ResolvedGameData,
948) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
949    Ok(
950        s
951            .apply_base_from_data(data, 163_201)?
952            .apply_aoe_from_data(data)
953            .on_cast(crate::hooks::arms_warrior::execute_hook)
954            .cost_free_when_aura(52437),
955    )
956}
957fn spell_slam(
958    s: SpellDefinitionDraft,
959    data: &ResolvedGameData,
960) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
961    Ok(
962        s
963            .apply_base_from_data(data, 1464)?
964            .apply_aoe_from_data(data)
965            .on_cast(crate::hooks::arms_warrior::slam_hook),
966    )
967}
968fn spell_colossus_smash(
969    s: SpellDefinitionDraft,
970    data: &ResolvedGameData,
971) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
972    Ok(
973        s
974            .apply_base_from_data(data, 167_105)?
975            .applies_aura(AURA_COLOSSUS_SMASH)
976            .apply_aoe_from_data(data)
977            .on_cast(crate::hooks::arms_warrior::colossus_smash_hook),
978    )
979}
980fn spell_avatar(
981    s: SpellDefinitionDraft,
982    data: &ResolvedGameData,
983) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
984    Ok(
985        s
986            .apply_base_from_data(data, 107_574)?
987            .applies_inferred_aura(AURA_AVATAR, 107_574)
988            .apply_aoe_from_data(data),
989    )
990}
991fn spell_sweeping_strikes(
992    s: SpellDefinitionDraft,
993    data: &ResolvedGameData,
994) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
995    Ok(
996        s
997            .apply_base_from_data(data, 260_708)?
998            .applies_inferred_aura(AURA_SWEEPING_STRIKES, 260_708)
999            .apply_aoe_from_data(data),
1000    )
1001}
1002fn spell_cleave(
1003    s: SpellDefinitionDraft,
1004    data: &ResolvedGameData,
1005) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1006    Ok(s.apply_base_from_data(data, 845)?.apply_aoe_from_data(data))
1007}
1008fn spell_whirlwind(
1009    s: SpellDefinitionDraft,
1010    data: &ResolvedGameData,
1011) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1012    Ok(s.apply_base_from_data(data, 1680)?.apply_aoe_from_data(data))
1013}
1014fn spell_rend(
1015    s: SpellDefinitionDraft,
1016    data: &ResolvedGameData,
1017) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1018    Ok(
1019        s
1020            .apply_base_from_data(data, 772)?
1021            .applies_aura(AURA_REND)
1022            .apply_aoe_from_data(data)
1023            .on_cast(crate::hooks::arms_warrior::rend_hook),
1024    )
1025}
1026fn spell_thunder_clap(
1027    s: SpellDefinitionDraft,
1028    data: &ResolvedGameData,
1029) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1030    Ok(
1031        s
1032            .apply_base_from_data(data, 6343)?
1033            .gain(5.0)
1034            .apply_aoe_from_data(data)
1035            .on_cast(crate::hooks::arms_warrior::thunder_clap_hook),
1036    )
1037}
1038fn spell_heroic_strike(
1039    s: SpellDefinitionDraft,
1040    data: &ResolvedGameData,
1041) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1042    Ok(s.apply_base_from_data(data, 1_269_383)?.apply_aoe_from_data(data))
1043}
1044fn spell_champions_spear(
1045    s: SpellDefinitionDraft,
1046    data: &ResolvedGameData,
1047) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1048    Ok(s.apply_base_from_data(data, 376_079)?.apply_aoe_from_data(data))
1049}
1050fn spell_battle_shout(
1051    s: SpellDefinitionDraft,
1052    data: &ResolvedGameData,
1053) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1054    Ok(
1055        s
1056            .apply_base_from_data(data, 6673)?
1057            .applies_inferred_aura(AURA_BATTLE_SHOUT, 6673)
1058            .apply_aoe_from_data(data),
1059    )
1060}
1061fn spell_heroic_throw(
1062    s: SpellDefinitionDraft,
1063    data: &ResolvedGameData,
1064) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1065    Ok(s.apply_base_from_data(data, 57755)?.apply_aoe_from_data(data))
1066}
1067fn spell_execute_damage(
1068    s: SpellDefinitionDraft,
1069    data: &ResolvedGameData,
1070) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1071    Ok(s.apply_base_from_data(data, 260_798)?.apply_aoe_from_data(data))
1072}
1073fn spell_dreadnaught(
1074    s: SpellDefinitionDraft,
1075    data: &ResolvedGameData,
1076) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1077    Ok(s.apply_base_from_data(data, 315_961)?.apply_aoe_from_data(data))
1078}
1079fn spell_fatality(
1080    s: SpellDefinitionDraft,
1081    data: &ResolvedGameData,
1082) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1083    Ok(s.apply_base_from_data(data, 383_706)?.apply_aoe_from_data(data))
1084}
1085fn spell_bladestorm(
1086    s: SpellDefinitionDraft,
1087    data: &ResolvedGameData,
1088) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1089    Ok(
1090        s
1091            .apply_base_from_data(data, 227_847)?
1092            .applies_inferred_aura(AURA_BLADESTORM, 227_847)
1093            .apply_aoe_from_data(data)
1094            .on_cast(crate::hooks::arms_warrior::bladestorm_hook),
1095    )
1096}
1097fn spell_ravager(
1098    s: SpellDefinitionDraft,
1099    data: &ResolvedGameData,
1100) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1101    Ok(
1102        s
1103            .apply_base_from_data(data, 228_920)?
1104            .applies_inferred_aura(AURA_RAVAGER, 228_920)
1105            .apply_aoe_from_data(data),
1106    )
1107}
1108fn spell_demolish(
1109    s: SpellDefinitionDraft,
1110    data: &ResolvedGameData,
1111) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1112    Ok(s.apply_base_from_data(data, 436_358)?.apply_aoe_from_data(data))
1113}
1114pub(crate) fn build_combat_system_draft(
1115    params: &wowlab_engine_ports::HandlerParams<'_>,
1116) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1117    let builder = CombatSystemBuilder::new(params.stats.clone())
1118        .spec_id(SpecId::Arms)
1119        .spec_identity(
1120            wowlab_engine_combat::generated_identities::specs::arms_warrior::PROOF,
1121        )
1122        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1123        .effect_identities(
1124            wowlab_engine_combat::generated_identities::specs::arms_warrior::damage::ALL,
1125        )
1126        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1127        .mastery_spell(1_258_398)
1128        .mastery_hook(crate::hooks::arms_warrior::mastery)
1129        .resource(
1130            "rage",
1131            params
1132                .game_data
1133                .power_max(1)
1134                .ok_or_else(|| {
1135                    wowlab_engine_ports::EngineError::spec_construction(
1136                        "missing power-type power_max for type_id 1",
1137                    )
1138                })?,
1139            params
1140                .game_data
1141                .power_regen_for_max(
1142                    1,
1143                    params
1144                        .game_data
1145                        .power_max(1)
1146                        .ok_or_else(|| {
1147                            wowlab_engine_ports::EngineError::spec_construction(
1148                                "missing power-type power_max for type_id 1",
1149                            )
1150                        })?,
1151                )
1152                .ok_or_else(|| {
1153                    wowlab_engine_ports::EngineError::spec_construction(
1154                        "missing power-type power_regen_for_max for type_id 1",
1155                    )
1156                })?,
1157        )
1158        .resource_type_id(1)
1159        .resource_start(
1160            params
1161                .game_data
1162                .power_default(1)
1163                .ok_or_else(|| {
1164                    wowlab_engine_ports::EngineError::spec_construction(
1165                        "missing power-type power_default for type_id 1",
1166                    )
1167                })?,
1168        )
1169        .aura(
1170            "colossus_smash",
1171            AURA::COLOSSUS_SMASH,
1172            |a| aura_colossus_smash(a, &params.game_data),
1173        )
1174        .aura(
1175            "deep_wounds",
1176            AURA::DEEP_WOUNDS,
1177            |a| aura_deep_wounds(a, &params.game_data),
1178        )
1179        .aura("rend", AURA::REND, |a| aura_rend(a, &params.game_data))
1180        .aura(
1181            "sweeping_strikes",
1182            AURA::SWEEPING_STRIKES,
1183            |a| aura_sweeping_strikes(a, &params.game_data),
1184        )
1185        .aura("avatar", AURA::AVATAR, |a| aura_avatar(a, &params.game_data))
1186        .aura(
1187            "sudden_death",
1188            AURA::SUDDEN_DEATH,
1189            |a| aura_sudden_death(a, &params.game_data),
1190        )
1191        .aura(
1192            "martial_prowess",
1193            AURA::MARTIAL_PROWESS,
1194            |a| aura_martial_prowess(a, &params.game_data),
1195        )
1196        .aura("battlelord", AURA::BATTLELORD, |a| aura_battlelord(a, &params.game_data))
1197        .aura(
1198            "collateral_damage",
1199            AURA::COLLATERAL_DAMAGE,
1200            |a| aura_collateral_damage(a, &params.game_data),
1201        )
1202        .aura("fatal_mark", AURA::FATAL_MARK, |a| aura_fatal_mark(a, &params.game_data))
1203        .aura(
1204            "battle_shout",
1205            AURA::BATTLE_SHOUT,
1206            |a| aura_battle_shout(a, &params.game_data),
1207        )
1208        .aura(
1209            "battle_stance",
1210            AURA::BATTLE_STANCE,
1211            |a| aura_battle_stance(a, &params.game_data),
1212        )
1213        .aura("winding_up", AURA::WINDING_UP, |a| aura_winding_up(a, &params.game_data))
1214        .aura("ravager", AURA::RAVAGER, |a| aura_ravager(a, &params.game_data))
1215        .aura("bladestorm", AURA::BLADESTORM, |a| aura_bladestorm(a, &params.game_data))
1216        .aura(
1217            "executioners_precision",
1218            AURA::EXECUTIONERS_PRECISION,
1219            |a| aura_executioners_precision(a, &params.game_data),
1220        )
1221        .aura(
1222            "imminent_demise",
1223            AURA::IMMINENT_DEMISE,
1224            |a| aura_imminent_demise(a, &params.game_data),
1225        )
1226        .aura(
1227            "fierce_followthrough",
1228            AURA::FIERCE_FOLLOWTHROUGH,
1229            |a| aura_fierce_followthrough(a, &params.game_data),
1230        )
1231        .aura(
1232            "executioner",
1233            AURA::EXECUTIONER,
1234            |a| aura_executioner(a, &params.game_data),
1235        )
1236        .aura(
1237            "overwhelmed",
1238            AURA::OVERWHELMED,
1239            |a| aura_overwhelmed(a, &params.game_data),
1240        )
1241        .aura(
1242            "master_of_warfare",
1243            AURA::MASTER_OF_WARFARE,
1244            |a| aura_master_of_warfare(a, &params.game_data),
1245        )
1246        .aura(
1247            "master_of_warfare_damage",
1248            AURA::MASTER_OF_WARFARE_DAMAGE,
1249            |a| aura_master_of_warfare_damage(a, &params.game_data),
1250        )
1251        .spell(
1252            "mortal_strike",
1253            SPELL::MORTAL_STRIKE,
1254            |s| spell_mortal_strike(s, &params.game_data),
1255        )
1256        .spell("overpower", SPELL::OVERPOWER, |s| spell_overpower(s, &params.game_data))
1257        .spell("execute", SPELL::EXECUTE, |s| spell_execute(s, &params.game_data))
1258        .spell("slam", SPELL::SLAM, |s| spell_slam(s, &params.game_data))
1259        .spell(
1260            "colossus_smash",
1261            SPELL::COLOSSUS_SMASH,
1262            |s| spell_colossus_smash(s, &params.game_data),
1263        )
1264        .spell("avatar", SPELL::AVATAR, |s| spell_avatar(s, &params.game_data))
1265        .spell(
1266            "sweeping_strikes",
1267            SPELL::SWEEPING_STRIKES,
1268            |s| spell_sweeping_strikes(s, &params.game_data),
1269        )
1270        .spell("cleave", SPELL::CLEAVE, |s| spell_cleave(s, &params.game_data))
1271        .spell("whirlwind", SPELL::WHIRLWIND, |s| spell_whirlwind(s, &params.game_data))
1272        .spell("rend", SPELL::REND, |s| spell_rend(s, &params.game_data))
1273        .spell(
1274            "thunder_clap",
1275            SPELL::THUNDER_CLAP,
1276            |s| spell_thunder_clap(s, &params.game_data),
1277        )
1278        .spell(
1279            "heroic_strike",
1280            SPELL::HEROIC_STRIKE,
1281            |s| spell_heroic_strike(s, &params.game_data),
1282        )
1283        .spell(
1284            "champions_spear",
1285            SPELL::CHAMPIONS_SPEAR,
1286            |s| spell_champions_spear(s, &params.game_data),
1287        )
1288        .spell(
1289            "battle_shout",
1290            SPELL::BATTLE_SHOUT,
1291            |s| spell_battle_shout(s, &params.game_data),
1292        )
1293        .spell(
1294            "heroic_throw",
1295            SPELL::HEROIC_THROW,
1296            |s| spell_heroic_throw(s, &params.game_data),
1297        )
1298        .spell(
1299            "execute_damage",
1300            SPELL::EXECUTE_DAMAGE,
1301            |s| spell_execute_damage(s, &params.game_data),
1302        )
1303        .spell(
1304            "dreadnaught",
1305            SPELL::DREADNAUGHT,
1306            |s| spell_dreadnaught(s, &params.game_data),
1307        )
1308        .spell("fatality", SPELL::FATALITY, |s| spell_fatality(s, &params.game_data))
1309        .spell(
1310            "bladestorm",
1311            SPELL::BLADESTORM,
1312            |s| spell_bladestorm(s, &params.game_data),
1313        )
1314        .spell("ravager", SPELL::RAVAGER, |s| spell_ravager(s, &params.game_data))
1315        .spell("demolish", SPELL::DEMOLISH, |s| spell_demolish(s, &params.game_data))
1316        .auto_attack(|a| {
1317            a
1318                .spell_id(6603)
1319                .swing_ms(3600)
1320                .apply_base_from_data(&params.game_data)
1321                .on_swing(crate::hooks::arms_warrior::swing_hook)
1322        })
1323        .game_data(params.game_data.clone())
1324        .talent_spell_ids(TALENTS)
1325        .talent_selections(params.talent_selections)
1326        .set_bonus_auras(params.set_bonus_auras)
1327        .encounter(params.encounter.clone());
1328    let builder = crate::generated::items::register_equipped(
1329        builder,
1330        &params.game_data,
1331        params.equipped_items,
1332    )?;
1333
1334    builder.into_draft()
1335}
1336fn new_handler(
1337    params: wowlab_engine_ports::HandlerParams<'_>,
1338) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1339    let handler = crate::composition::compose_handler(
1340        build_combat_system_draft,
1341        &params,
1342        crate::hooks::arms_warrior::ArmsHandler::try_new,
1343    )?;
1344
1345    Ok(Box::new(handler))
1346}
1347static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1348    primary_resource: ResourceType::Rage,
1349    secondary_resource: None,
1350    spell_ids: DECLARED_SPELL_IDS,
1351    aura_ids: DECLARED_AURA_IDS,
1352    server_proc_entries: &[
1353        DeclaredServerProcEntry {
1354            spell_id: 52437,
1355            attributes: ProcAttributes::REQUIRE_SPELL_MODIFIER.bits()
1356                | ProcAttributes::USE_STACKS_FOR_CHARGES.bits(),
1357        },
1358    ],
1359    talents: TALENTS,
1360    rotation_field_schema: &[],
1361    metrics_plugin_id: None,
1362    hero_talent_trees: &[
1363        HeroTalentTreeDesc {
1364            name: "Slayer",
1365            spells: HERO_TREE_SLAYER_SPELLS,
1366            auras: HERO_TREE_SLAYER_AURAS,
1367        },
1368        HeroTalentTreeDesc {
1369            name: "Colossus",
1370            spells: HERO_TREE_COLOSSUS_SPELLS,
1371            auras: HERO_TREE_COLOSSUS_AURAS,
1372        },
1373    ],
1374    reported_spells: REPORTED_SPELLS,
1375    masked_passive_effects: &[],
1376    passive_effect_overrides: &[],
1377};
1378pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1379    spec_id: SpecId::Arms,
1380    display_name: "Arms Warrior",
1381    metadata: DECLARED_METADATA,
1382    handler_factory: new_handler,
1383};
1384wowlab_engine_combat::smoke_test!(build_combat_system_draft);