Skip to main content

wowlab_engine_content/generated/specs/
subtlety_rogue.rs

1//! @generated by codegen-cli from manifests/specs/rogue/subtlety/manifest.toml -- do not edit by hand.
2// Generated code: naming follows game data conventions
3#![allow(non_snake_case, dead_code)]
4use wowlab_types::{combat::ResourceType, game::SpecId};
5use wowlab_engine_combat::{
6    CombatSystemBuilder, CombatSystemDraft, AuraDefinitionDraft, LocalAuraIdx,
7    LocalSpellIdx, SpellDefinitionDraft,
8};
9use wowlab_engine_ports::{
10    DeclaredSpecMetadata, SpecDescriptor, SpecHandler, HeroTalentTreeDesc,
11};
12use wowlab_engine_gamedata::ResolvedGameData;
13pub(crate) mod SPELL {
14    ///<https://wowlab.gg/inspect/spell/53>
15    pub(crate) const BACKSTAB: u32 = 53;
16    ///<https://wowlab.gg/inspect/spell/185438>
17    pub(crate) const SHADOWSTRIKE: u32 = 185_438;
18    ///<https://wowlab.gg/inspect/spell/197835>
19    pub(crate) const SHURIKEN_STORM: u32 = 197_835;
20    ///<https://wowlab.gg/inspect/spell/114014>
21    pub(crate) const SHURIKEN_TOSS: u32 = 114_014;
22    ///<https://wowlab.gg/inspect/spell/196819>
23    pub(crate) const EVISCERATE: u32 = 196_819;
24    ///<https://wowlab.gg/inspect/spell/319175>
25    pub(crate) const BLACK_POWDER: u32 = 319_175;
26    ///<https://wowlab.gg/inspect/spell/280719>
27    pub(crate) const SECRET_TECHNIQUE: u32 = 280_719;
28    ///<https://wowlab.gg/inspect/spell/426591>
29    pub(crate) const GOREMAW_S_BITE: u32 = 426_591;
30    ///<https://wowlab.gg/inspect/spell/315496>
31    pub(crate) const SLICE_AND_DICE: u32 = 315_496;
32    ///<https://wowlab.gg/inspect/spell/315584>
33    pub(crate) const INSTANT_POISON: u32 = 315_584;
34    ///<https://wowlab.gg/inspect/spell/8679>
35    pub(crate) const WOUND_POISON: u32 = 8679;
36    ///<https://wowlab.gg/inspect/spell/381637>
37    pub(crate) const ATROPHIC_POISON: u32 = 381_637;
38    ///<https://wowlab.gg/inspect/spell/5761>
39    pub(crate) const NUMBING_POISON: u32 = 5761;
40    ///<https://wowlab.gg/inspect/spell/3408>
41    pub(crate) const CRIPPLING_POISON: u32 = 3408;
42    ///<https://wowlab.gg/inspect/spell/315585>
43    pub(crate) const INSTANT_POISON_DAMAGE: u32 = 315_585;
44    ///<https://wowlab.gg/inspect/spell/328082>
45    pub(crate) const EVISCERATE_BONUS: u32 = 328_082;
46    ///<https://wowlab.gg/inspect/spell/319190>
47    pub(crate) const BLACK_POWDER_BONUS: u32 = 319_190;
48    ///<https://wowlab.gg/inspect/spell/280720>
49    pub(crate) const SECRET_TECHNIQUE_PLAYER: u32 = 280_720;
50    ///<https://wowlab.gg/inspect/spell/282449>
51    pub(crate) const SECRET_TECHNIQUE_CLONES: u32 = 282_449;
52    ///<https://wowlab.gg/inspect/spell/1264397>
53    pub(crate) const LASHE_MACABRE: u32 = 1_264_397;
54    ///<https://wowlab.gg/inspect/spell/1766>
55    pub(crate) const KICK: u32 = 1766;
56    ///<https://wowlab.gg/inspect/spell/185313>
57    pub(crate) const SHADOW_DANCE: u32 = 185_313;
58    ///<https://wowlab.gg/inspect/spell/121471>
59    pub(crate) const SHADOW_BLADES: u32 = 121_471;
60    ///<https://wowlab.gg/inspect/spell/279043>
61    pub(crate) const SHADOW_BLADES_ATTACK: u32 = 279_043;
62    ///<https://wowlab.gg/inspect/spell/1269209>
63    pub(crate) const BACKSTAB_SHADOW_CLONE: u32 = 1_269_209;
64    ///<https://wowlab.gg/inspect/spell/1269336>
65    pub(crate) const SHADOWSTRIKE_SHADOW_CLONE: u32 = 1_269_336;
66    ///<https://wowlab.gg/inspect/spell/1269205>
67    pub(crate) const EVISCERATE_SHADOW_CLONE: u32 = 1_269_205;
68    ///<https://wowlab.gg/inspect/spell/1269340>
69    pub(crate) const SHURIKEN_STORM_SHADOW_CLONE: u32 = 1_269_340;
70    ///<https://wowlab.gg/inspect/spell/1269560>
71    pub(crate) const SECRET_TECHNIQUE_SHADOW_CLONE: u32 = 1_269_560;
72    ///<https://wowlab.gg/inspect/spell/1269565>
73    pub(crate) const BLACK_POWDER_SHADOW_CLONE: u32 = 1_269_565;
74    ///<https://wowlab.gg/inspect/spell/381623>
75    pub(crate) const THISTLE_TEA: u32 = 381_623;
76    ///<https://wowlab.gg/inspect/spell/1856>
77    pub(crate) const VANISH: u32 = 1856;
78}
79pub(crate) mod AURA {
80    ///<https://wowlab.gg/inspect/spell/1264521>
81    pub(crate) const FIND_WEAKNESS: u32 = 1_264_521;
82    ///<https://wowlab.gg/inspect/spell/315496>
83    pub(crate) const SLICE_AND_DICE: u32 = 315_496;
84    ///<https://wowlab.gg/inspect/spell/1784>
85    pub(crate) const STEALTH: u32 = 1784;
86    ///<https://wowlab.gg/inspect/spell/1856>
87    pub(crate) const VANISH: u32 = 1856;
88    ///<https://wowlab.gg/inspect/spell/115192>
89    pub(crate) const SUBTERFUGE: u32 = 115_192;
90    ///<https://wowlab.gg/inspect/spell/196911>
91    pub(crate) const SHADOW_TECHNIQUES: u32 = 196_911;
92    ///<https://wowlab.gg/inspect/spell/196980>
93    pub(crate) const MASTER_OF_SHADOWS: u32 = 196_980;
94    ///<https://wowlab.gg/inspect/spell/193538>
95    pub(crate) const ALACRITY: u32 = 193_538;
96    ///<https://wowlab.gg/inspect/spell/315584>
97    pub(crate) const INSTANT_POISON: u32 = 315_584;
98    ///<https://wowlab.gg/inspect/spell/8679>
99    pub(crate) const WOUND_POISON: u32 = 8679;
100    ///<https://wowlab.gg/inspect/spell/381637>
101    pub(crate) const ATROPHIC_POISON: u32 = 381_637;
102    ///<https://wowlab.gg/inspect/spell/5761>
103    pub(crate) const NUMBING_POISON: u32 = 5761;
104    ///<https://wowlab.gg/inspect/spell/3408>
105    pub(crate) const CRIPPLING_POISON: u32 = 3408;
106    ///<https://wowlab.gg/inspect/spell/193531>
107    pub(crate) const DEEPER_STRATAGEM: u32 = 193_531;
108    ///<https://wowlab.gg/inspect/spell/394320>
109    pub(crate) const SECRET_STRATAGEM: u32 = 394_320;
110    ///<https://wowlab.gg/inspect/spell/457280>
111    pub(crate) const DARKEST_NIGHT: u32 = 457_280;
112    ///<https://wowlab.gg/inspect/spell/385960>
113    pub(crate) const LINGERING_SHADOW: u32 = 385_960;
114    ///<https://wowlab.gg/inspect/spell/185313>
115    pub(crate) const SHADOW_DANCE: u32 = 185_313;
116    ///<https://wowlab.gg/inspect/spell/343173>
117    pub(crate) const PREMEDITATION: u32 = 343_173;
118    ///<https://wowlab.gg/inspect/spell/121471>
119    pub(crate) const SHADOW_BLADES: u32 = 121_471;
120    ///<https://wowlab.gg/inspect/spell/1269163>
121    pub(crate) const ANCIENT_ARTS: u32 = 1_269_163;
122    ///<https://wowlab.gg/inspect/spell/441786>
123    pub(crate) const ESCALATING_BLADE: u32 = 441_786;
124    ///<https://wowlab.gg/inspect/spell/441519>
125    pub(crate) const COUP_DE_GRACE: u32 = 441_519;
126    ///<https://wowlab.gg/inspect/spell/459485>
127    pub(crate) const UNSEEN_BLADE_CD: u32 = 459_485;
128    ///<https://wowlab.gg/inspect/spell/441326>
129    pub(crate) const FLAWLESS_FORM: u32 = 441_326;
130    ///<https://wowlab.gg/inspect/spell/441274>
131    pub(crate) const DISORIENTING_STRIKES: u32 = 441_274;
132    ///<https://wowlab.gg/inspect/spell/441224>
133    pub(crate) const FAZED: u32 = 441_224;
134    ///<https://wowlab.gg/inspect/spell/134735>
135    pub(crate) const PVP_RULES_ENABLED_HARDCODED: u32 = 134_735;
136}
137pub(crate) mod TALENT {
138    ///<https://wowlab.gg/inspect/spell/193539>
139    pub(crate) const ALACRITY: u32 = 193_539;
140    ///<https://wowlab.gg/inspect/spell/1268932>
141    pub(crate) const ANCIENT_ARTS_1: u32 = 1_268_932;
142    ///<https://wowlab.gg/inspect/spell/1268936>
143    pub(crate) const ANCIENT_ARTS_2: u32 = 1_268_936;
144    ///<https://wowlab.gg/inspect/spell/1268939>
145    pub(crate) const ANCIENT_ARTS_3: u32 = 1_268_939;
146    ///<https://wowlab.gg/inspect/spell/382528>
147    pub(crate) const DANSE_MACABRE: u32 = 382_528;
148    ///<https://wowlab.gg/inspect/spell/245687>
149    pub(crate) const DARK_SHADOW: u32 = 245_687;
150    ///<https://wowlab.gg/inspect/spell/469642>
151    pub(crate) const DEATH_PERCEPTION: u32 = 469_642;
152    ///<https://wowlab.gg/inspect/spell/185314>
153    pub(crate) const DEEPENING_SHADOWS: u32 = 185_314;
154    ///<https://wowlab.gg/inspect/spell/382517>
155    pub(crate) const DEEPER_DAGGERS: u32 = 382_517;
156    ///<https://wowlab.gg/inspect/spell/193531>
157    pub(crate) const DEEPER_STRATAGEM: u32 = 193_531;
158    ///<https://wowlab.gg/inspect/spell/394930>
159    pub(crate) const DOUBLE_DANCE: u32 = 394_930;
160    ///<https://wowlab.gg/inspect/spell/382525>
161    pub(crate) const FINALITY: u32 = 382_525;
162    ///<https://wowlab.gg/inspect/spell/91023>
163    pub(crate) const FIND_WEAKNESS: u32 = 91023;
164    ///<https://wowlab.gg/inspect/spell/470668>
165    pub(crate) const FORCED_INDUCTION: u32 = 470_668;
166    ///<https://wowlab.gg/inspect/spell/200758>
167    pub(crate) const GLOOMBLADE: u32 = 200_758;
168    ///<https://wowlab.gg/inspect/spell/426591>
169    pub(crate) const GOREMAWS_BITE: u32 = 426_591;
170    ///<https://wowlab.gg/inspect/spell/319949>
171    pub(crate) const IMPROVED_BACKSTAB: u32 = 319_949;
172    ///<https://wowlab.gg/inspect/spell/1279444>
173    pub(crate) const IMPROVED_SECRET_TECHNIQUE: u32 = 1_279_444;
174    ///<https://wowlab.gg/inspect/spell/382238>
175    pub(crate) const LETHALITY: u32 = 382_238;
176    ///<https://wowlab.gg/inspect/spell/382524>
177    pub(crate) const LINGERING_SHADOW: u32 = 382_524;
178    ///<https://wowlab.gg/inspect/spell/196976>
179    pub(crate) const MASTER_OF_SHADOWS: u32 = 196_976;
180    ///<https://wowlab.gg/inspect/spell/382518>
181    pub(crate) const PERFORATED_VEINS: u32 = 382_518;
182    ///<https://wowlab.gg/inspect/spell/381634>
183    pub(crate) const POTENT_POWDER: u32 = 381_634;
184    ///<https://wowlab.gg/inspect/spell/343160>
185    pub(crate) const PREMEDITATION: u32 = 343_160;
186    ///<https://wowlab.gg/inspect/spell/58423>
187    pub(crate) const RELENTLESS_STRIKES: u32 = 58423;
188    ///<https://wowlab.gg/inspect/spell/382506>
189    pub(crate) const REPLICATING_SHADOWS: u32 = 382_506;
190    ///<https://wowlab.gg/inspect/spell/394320>
191    pub(crate) const SECRET_STRATAGEM: u32 = 394_320;
192    ///<https://wowlab.gg/inspect/spell/426594>
193    pub(crate) const SHADOWCRAFT: u32 = 426_594;
194    ///<https://wowlab.gg/inspect/spell/382511>
195    pub(crate) const SHADOWED_FINISHERS: u32 = 382_511;
196    ///<https://wowlab.gg/inspect/spell/121471>
197    pub(crate) const SHADOW_BLADES: u32 = 121_471;
198    ///<https://wowlab.gg/inspect/spell/385722>
199    pub(crate) const SILENT_STORM: u32 = 385_722;
200    ///<https://wowlab.gg/inspect/spell/470347>
201    pub(crate) const SUPERCHARGER: u32 = 470_347;
202    ///<https://wowlab.gg/inspect/spell/382015>
203    pub(crate) const THE_ROTTEN: u32 = 382_015;
204    ///<https://wowlab.gg/inspect/spell/469779>
205    pub(crate) const THISTLE_TEA: u32 = 469_779;
206    ///<https://wowlab.gg/inspect/spell/1281468>
207    pub(crate) const UMBRAL_EDGE: u32 = 1_281_468;
208    ///<https://wowlab.gg/inspect/spell/382017>
209    pub(crate) const VEILTOUCHED: u32 = 382_017;
210    ///<https://wowlab.gg/inspect/spell/193537>
211    pub(crate) const WEAPONMASTER: u32 = 193_537;
212}
213pub(crate) mod SET_BONUS {
214    ///<https://wowlab.gg/inspect/spell/1296592>
215    pub(crate) const MID2_SUBTLETY_2PC: u32 = 1_296_592;
216    ///<https://wowlab.gg/inspect/spell/1296593>
217    pub(crate) const MID2_SUBTLETY_4PC: u32 = 1_296_593;
218}
219pub(crate) mod REPORTED_SPELL {
220    ///<https://wowlab.gg/inspect/spell/462244>
221    pub(crate) const CDG_BONUS_1: u32 = 462_244;
222    ///<https://wowlab.gg/inspect/spell/462247>
223    pub(crate) const CDG_BONUS_2: u32 = 462_247;
224    ///<https://wowlab.gg/inspect/spell/462248>
225    pub(crate) const CDG_BONUS_3: u32 = 462_248;
226    ///<https://wowlab.gg/inspect/spell/6603>
227    pub(crate) const MELEE: u32 = 6603;
228}
229pub(crate) mod HERO {
230    pub(crate) mod TRICKSTER {
231        pub(crate) mod SPELL {
232            ///<https://wowlab.gg/inspect/spell/1276679>
233            pub(crate) const CLEVER_COMBATANT: u32 = 1_276_679;
234            ///<https://wowlab.gg/inspect/spell/441423>
235            pub(crate) const COUP_DE_GRACE: u32 = 441_423;
236            ///<https://wowlab.gg/inspect/spell/462241>
237            pub(crate) const COUP_DE_GRACE_DAMAGE_1: u32 = 462_241;
238            ///<https://wowlab.gg/inspect/spell/462242>
239            pub(crate) const COUP_DE_GRACE_DAMAGE_2: u32 = 462_242;
240            ///<https://wowlab.gg/inspect/spell/462243>
241            pub(crate) const COUP_DE_GRACE_DAMAGE_3: u32 = 462_243;
242            ///<https://wowlab.gg/inspect/spell/441263>
243            pub(crate) const DEVIOUS_DISTRACTIONS: u32 = 441_263;
244            ///<https://wowlab.gg/inspect/spell/441274>
245            pub(crate) const DISORIENTING_STRIKES: u32 = 441_274;
246            ///<https://wowlab.gg/inspect/spell/1276630>
247            pub(crate) const FLASHING_STEEL: u32 = 1_276_630;
248            ///<https://wowlab.gg/inspect/spell/441321>
249            pub(crate) const FLAWLESS_FORM: u32 = 441_321;
250            ///<https://wowlab.gg/inspect/spell/441367>
251            pub(crate) const NIMBLE_FLURRY: u32 = 441_367;
252            ///<https://wowlab.gg/inspect/spell/441273>
253            pub(crate) const SURPRISING_STRIKES: u32 = 441_273;
254            ///<https://wowlab.gg/inspect/spell/441144>
255            pub(crate) const UNSEEN_BLADE: u32 = 441_144;
256            ///<https://wowlab.gg/inspect/spell/441146>
257            pub(crate) const UNSEEN_BLADE_TALENT: u32 = 441_146;
258        }
259    }
260    pub(crate) mod DEATHSTALKER {
261        pub(crate) mod SPELL {
262            ///<https://wowlab.gg/inspect/spell/457157>
263            pub(crate) const DEATHSTALKERS_MARK_DAMAGE: u32 = 457_157;
264            ///<https://wowlab.gg/inspect/spell/457193>
265            pub(crate) const HUNT_THEM_DOWN: u32 = 457_193;
266        }
267        pub(crate) mod AURA {
268            ///<https://wowlab.gg/inspect/spell/457052>
269            pub(crate) const DEATHSTALKERS_MARK: u32 = 457_052;
270            ///<https://wowlab.gg/inspect/spell/457068>
271            pub(crate) const FOLLOW_THE_BLOOD: u32 = 457_068;
272            ///<https://wowlab.gg/inspect/spell/457273>
273            pub(crate) const LINGERING_DARKNESS: u32 = 457_273;
274            ///<https://wowlab.gg/inspect/spell/457284>
275            pub(crate) const MOMENTUM_OF_DESPAIR: u32 = 457_284;
276            ///<https://wowlab.gg/inspect/spell/457167>
277            pub(crate) const SYMBOLIC_VICTORY: u32 = 457_167;
278            ///<https://wowlab.gg/inspect/spell/1248774>
279            pub(crate) const UNSHAKEABLE_DRIVE: u32 = 1_248_774;
280        }
281    }
282}
283static HERO_TREE_TRICKSTER_SPELLS: &[(&str, u32)] = &[
284    ("CLEVER_COMBATANT", 1_276_679),
285    ("COUP_DE_GRACE", 441_423),
286    ("COUP_DE_GRACE_DAMAGE_1", 462_241),
287    ("COUP_DE_GRACE_DAMAGE_2", 462_242),
288    ("COUP_DE_GRACE_DAMAGE_3", 462_243),
289    ("DEVIOUS_DISTRACTIONS", 441_263),
290    ("DISORIENTING_STRIKES", 441_274),
291    ("FLASHING_STEEL", 1_276_630),
292    ("FLAWLESS_FORM", 441_321),
293    ("NIMBLE_FLURRY", 441_367),
294    ("SURPRISING_STRIKES", 441_273),
295    ("UNSEEN_BLADE", 441_144),
296    ("UNSEEN_BLADE_TALENT", 441_146),
297];
298static HERO_TREE_TRICKSTER_AURAS: &[(&str, u32)] = &[];
299static HERO_TREE_DEATHSTALKER_SPELLS: &[(&str, u32)] = &[
300    ("DEATHSTALKERS_MARK_DAMAGE", 457_157),
301    ("HUNT_THEM_DOWN", 457_193),
302];
303static HERO_TREE_DEATHSTALKER_AURAS: &[(&str, u32)] = &[
304    ("DEATHSTALKERS_MARK", 457_052),
305    ("FOLLOW_THE_BLOOD", 457_068),
306    ("LINGERING_DARKNESS", 457_273),
307    ("MOMENTUM_OF_DESPAIR", 457_284),
308    ("SYMBOLIC_VICTORY", 457_167),
309    ("UNSHAKEABLE_DRIVE", 1_248_774),
310];
311pub(crate) mod DAMAGE_SPELL {
312    pub(crate) const BACKSTAB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_53;
313    pub(crate) const SHADOWSTRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_185438;
314    pub(crate) const SHURIKEN_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_197835;
315    pub(crate) const SHURIKEN_TOSS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_114014;
316    pub(crate) const EVISCERATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_196819;
317    pub(crate) const BLACK_POWDER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_319175;
318    pub(crate) const SECRET_TECHNIQUE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_280719;
319    pub(crate) const GOREMAW_S_BITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_426591;
320    pub(crate) const SLICE_AND_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_315496;
321    pub(crate) const INSTANT_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_315584;
322    pub(crate) const WOUND_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_8679;
323    pub(crate) const ATROPHIC_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_381637;
324    pub(crate) const NUMBING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_5761;
325    pub(crate) const CRIPPLING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_3408;
326    pub(crate) const INSTANT_POISON_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_315585;
327    pub(crate) const EVISCERATE_BONUS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_328082;
328    pub(crate) const BLACK_POWDER_BONUS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_319190;
329    pub(crate) const SECRET_TECHNIQUE_PLAYER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_280720;
330    pub(crate) const SECRET_TECHNIQUE_CLONES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_282449;
331    pub(crate) const LASHE_MACABRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1264397;
332    pub(crate) const KICK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1766;
333    pub(crate) const SHADOW_DANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_185313;
334    pub(crate) const SHADOW_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_121471;
335    pub(crate) const SHADOW_BLADES_ATTACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_279043;
336    pub(crate) const BACKSTAB_SHADOW_CLONE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269209;
337    pub(crate) const SHADOWSTRIKE_SHADOW_CLONE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269336;
338    pub(crate) const EVISCERATE_SHADOW_CLONE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269205;
339    pub(crate) const SHURIKEN_STORM_SHADOW_CLONE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269340;
340    pub(crate) const SECRET_TECHNIQUE_SHADOW_CLONE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269560;
341    pub(crate) const BLACK_POWDER_SHADOW_CLONE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269565;
342    pub(crate) const THISTLE_TEA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_381623;
343    pub(crate) const VANISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1856;
344    pub(crate) const CLEVER_COMBATANT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1276679;
345    pub(crate) const COUP_DE_GRACE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441423;
346    pub(crate) const COUP_DE_GRACE_DAMAGE_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_462241;
347    pub(crate) const COUP_DE_GRACE_DAMAGE_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_462242;
348    pub(crate) const COUP_DE_GRACE_DAMAGE_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_462243;
349    pub(crate) const DEVIOUS_DISTRACTIONS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441263;
350    pub(crate) const DISORIENTING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441274;
351    pub(crate) const FLASHING_STEEL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1276630;
352    pub(crate) const FLAWLESS_FORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441321;
353    pub(crate) const NIMBLE_FLURRY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441367;
354    pub(crate) const SURPRISING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441273;
355    pub(crate) const UNSEEN_BLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441144;
356    pub(crate) const UNSEEN_BLADE_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441146;
357    pub(crate) const DEATHSTALKERS_MARK_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_457157;
358    pub(crate) const HUNT_THEM_DOWN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_457193;
359}
360pub(crate) mod DAMAGE_AURA {
361    pub(crate) const FIND_WEAKNESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1264521;
362    pub(crate) const SLICE_AND_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_315496;
363    pub(crate) const STEALTH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1784;
364    pub(crate) const VANISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1856;
365    pub(crate) const SUBTERFUGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_115192;
366    pub(crate) const SHADOW_TECHNIQUES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_196911;
367    pub(crate) const MASTER_OF_SHADOWS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_196980;
368    pub(crate) const ALACRITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_193538;
369    pub(crate) const INSTANT_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_315584;
370    pub(crate) const WOUND_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_8679;
371    pub(crate) const ATROPHIC_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_381637;
372    pub(crate) const NUMBING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_5761;
373    pub(crate) const CRIPPLING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_3408;
374    pub(crate) const DEEPER_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_193531;
375    pub(crate) const SECRET_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_394320;
376    pub(crate) const DARKEST_NIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_457280;
377    pub(crate) const LINGERING_SHADOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_385960;
378    pub(crate) const SHADOW_DANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_185313;
379    pub(crate) const PREMEDITATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_343173;
380    pub(crate) const SHADOW_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_121471;
381    pub(crate) const ANCIENT_ARTS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1269163;
382    pub(crate) const ESCALATING_BLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441786;
383    pub(crate) const COUP_DE_GRACE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441519;
384    pub(crate) const UNSEEN_BLADE_CD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_459485;
385    pub(crate) const FLAWLESS_FORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441326;
386    pub(crate) const DISORIENTING_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441274;
387    pub(crate) const FAZED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_441224;
388    pub(crate) const PVP_RULES_ENABLED_HARDCODED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_134735;
389}
390pub(crate) mod DAMAGE_TALENT {
391    pub(crate) const ALACRITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_193539;
392    pub(crate) const ANCIENT_ARTS_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1268932;
393    pub(crate) const ANCIENT_ARTS_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1268936;
394    pub(crate) const ANCIENT_ARTS_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1268939;
395    pub(crate) const DANSE_MACABRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382528;
396    pub(crate) const DARK_SHADOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_245687;
397    pub(crate) const DEATH_PERCEPTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_469642;
398    pub(crate) const DEEPENING_SHADOWS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_185314;
399    pub(crate) const DEEPER_DAGGERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382517;
400    pub(crate) const DEEPER_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_193531;
401    pub(crate) const DOUBLE_DANCE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_394930;
402    pub(crate) const FINALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382525;
403    pub(crate) const FIND_WEAKNESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_91023;
404    pub(crate) const FORCED_INDUCTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_470668;
405    pub(crate) const GLOOMBLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_200758;
406    pub(crate) const GOREMAWS_BITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_426591;
407    pub(crate) const IMPROVED_BACKSTAB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_319949;
408    pub(crate) const IMPROVED_SECRET_TECHNIQUE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1279444;
409    pub(crate) const LETHALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382238;
410    pub(crate) const LINGERING_SHADOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382524;
411    pub(crate) const MASTER_OF_SHADOWS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_196976;
412    pub(crate) const PERFORATED_VEINS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382518;
413    pub(crate) const POTENT_POWDER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_381634;
414    pub(crate) const PREMEDITATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_343160;
415    pub(crate) const RELENTLESS_STRIKES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_58423;
416    pub(crate) const REPLICATING_SHADOWS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382506;
417    pub(crate) const SECRET_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_394320;
418    pub(crate) const SHADOWCRAFT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_426594;
419    pub(crate) const SHADOWED_FINISHERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382511;
420    pub(crate) const SHADOW_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_121471;
421    pub(crate) const SILENT_STORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_385722;
422    pub(crate) const SUPERCHARGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_470347;
423    pub(crate) const THE_ROTTEN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382015;
424    pub(crate) const THISTLE_TEA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_469779;
425    pub(crate) const UMBRAL_EDGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_1281468;
426    pub(crate) const VEILTOUCHED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_382017;
427    pub(crate) const WEAPONMASTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_193537;
428}
429pub(crate) mod DAMAGE_REPORTED {
430    pub(crate) const CDG_BONUS_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_462244;
431    pub(crate) const CDG_BONUS_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_462247;
432    pub(crate) const CDG_BONUS_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_462248;
433    pub(crate) const MELEE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ACTION::SPELL_6603;
434}
435pub(crate) mod DAMAGE_EFFECT {
436    pub(crate) const ALACRITY_CHANCE_PER_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_193539_EFFECT_2;
437    pub(crate) const MID2_SUBTLETY_2PC_BACKSTAB_COST: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1296592_EFFECT_1;
438    pub(crate) const MID2_SUBTLETY_2PC_BACKSTAB_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1296592_EFFECT_2;
439    pub(crate) const MID2_SUBTLETY_2PC_SHURIKEN_COST: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1296592_EFFECT_3;
440    pub(crate) const MID2_SUBTLETY_2PC_SHURIKEN_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1296592_EFFECT_4;
441    pub(crate) const MID2_SUBTLETY_4PC_LINGERING: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1296593_EFFECT_1;
442    pub(crate) const ANCIENT_ARTS_1_CLONE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1268932_EFFECT_1;
443    pub(crate) const ANCIENT_ARTS_2_SHT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1268936_EFFECT_1;
444    pub(crate) const BLACK_POWDER_BONUS_COEF: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_319190_EFFECT_1;
445    pub(crate) const CDG_BONUS_1: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_462244_EFFECT_1;
446    pub(crate) const CDG_BONUS_2: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_462247_EFFECT_1;
447    pub(crate) const CDG_BONUS_3: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_462248_EFFECT_1;
448    pub(crate) const CDG_DAMAGE_1: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_462241_EFFECT_1;
449    pub(crate) const CDG_DAMAGE_2: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_462242_EFFECT_1;
450    pub(crate) const CDG_DAMAGE_3: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_462243_EFFECT_1;
451    pub(crate) const CLONE_BACKSTAB: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1269209_EFFECT_1;
452    pub(crate) const CLONE_BLACK_POWDER: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1269565_EFFECT_1;
453    pub(crate) const CLONE_EVISCERATE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1269205_EFFECT_1;
454    pub(crate) const CLONE_SECRET_TECHNIQUE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1269560_EFFECT_1;
455    pub(crate) const CLONE_SHADOWSTRIKE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1269336_EFFECT_1;
456    pub(crate) const CLONE_SHURIKEN_STORM: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1269340_EFFECT_1;
457    pub(crate) const COUP_DE_GRACE_BONUS_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_441423_EFFECT_3;
458    pub(crate) const COUP_DE_GRACE_FLAWLESS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_441423_EFFECT_2;
459    pub(crate) const DEEPENING_SHADOWS_DURATION: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1271702_EFFECT_3;
460    pub(crate) const DISORIENTING_FREE_BLADES: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_441274_EFFECT_2;
461    pub(crate) const DISORIENTING_ST_CDR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_441274_EFFECT_1;
462    pub(crate) const EVISCERATE_BONUS_COEF: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_328082_EFFECT_1;
463    pub(crate) const EVISCERATE_COEF: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_196819_EFFECT_1;
464    pub(crate) const EXECUTIONER_DIRECT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_76808_EFFECT_1;
465    pub(crate) const EXECUTIONER_PERIODIC: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_76808_EFFECT_2;
466    pub(crate) const FIND_WEAKNESS_ARMOR_PEN: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1264521_EFFECT_1;
467    pub(crate) const FLASHING_STEEL_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1276630_EFFECT_2;
468    pub(crate) const FLASHING_STEEL_WINDOW: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1276630_EFFECT_1;
469    pub(crate) const FORCED_INDUCTION_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_470668_EFFECT_1;
470    pub(crate) const IMPROVED_SECRET_TECHNIQUE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1279444_EFFECT_1;
471    pub(crate) const INSTANT_POISON_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_315585_EFFECT_1;
472    pub(crate) const LASHE_MACABRE_COEF: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1264397_EFFECT_1;
473    pub(crate) const PREMEDITATION_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_343160_EFFECT_1;
474    pub(crate) const RELENTLESS_STRIKES_ENERGY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_98440_EFFECT_1;
475    pub(crate) const REPLICATING_SHADOWS_CLONE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_382506_EFFECT_2;
476    pub(crate) const SECRET_TECHNIQUE_CLONE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_282449_EFFECT_1;
477    pub(crate) const SECRET_TECHNIQUE_PLAYER: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_280720_EFFECT_1;
478    pub(crate) const SHADOWED_FINISHERS_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_382511_EFFECT_1;
479    pub(crate) const SHADOW_BLADES_ATTACK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_279043_EFFECT_1;
480    pub(crate) const SHADOW_BLADES_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_121471_EFFECT_2;
481    pub(crate) const SHADOW_BLADES_ECHO: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_121471_EFFECT_1;
482    pub(crate) const SHT_ENERGIZE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_196911_EFFECT_2;
483    pub(crate) const SPEC_AURA_PET_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_137035_EFFECT_3;
484    pub(crate) const SUPERCHARGER_BONUS_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_470347_EFFECT_2;
485    pub(crate) const SUPERCHARGER_CHARGES: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_470347_EFFECT_1;
486    pub(crate) const SURPRISING_STRIKES_CRIT_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_441273_EFFECT_1;
487    pub(crate) const UMBRAL_EDGE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_1281468_EFFECT_1;
488    pub(crate) const UNSEEN_BLADE_COEF: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::EFFECT::SPELL_441144_EFFECT_1;
489}
490pub(crate) const AURA_FIND_WEAKNESS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_FIND_WEAKNESS
491    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
492pub(crate) const AURA_SLICE_AND_DICE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_SLICE_AND_DICE
493    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
494pub(crate) const AURA_STEALTH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_STEALTH
495    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
496pub(crate) const AURA_VANISH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_VANISH
497    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
498pub(crate) const AURA_SUBTERFUGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_SUBTERFUGE
499    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
500pub(crate) const AURA_SHADOW_TECHNIQUES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_SHADOW_TECHNIQUES
501    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
502pub(crate) const AURA_MASTER_OF_SHADOWS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_MASTER_OF_SHADOWS
503    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
504pub(crate) const AURA_ALACRITY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_ALACRITY
505    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
506pub(crate) const AURA_INSTANT_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_INSTANT_POISON
507    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
508pub(crate) const AURA_WOUND_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_WOUND_POISON
509    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
510pub(crate) const AURA_ATROPHIC_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_ATROPHIC_POISON
511    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
512pub(crate) const AURA_NUMBING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_NUMBING_POISON
513    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
514pub(crate) const AURA_CRIPPLING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_CRIPPLING_POISON
515    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
516pub(crate) const AURA_DEEPER_STRATAGEM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_DEEPER_STRATAGEM
517    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
518pub(crate) const AURA_SECRET_STRATAGEM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_SECRET_STRATAGEM
519    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
520pub(crate) const AURA_DARKEST_NIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_DARKEST_NIGHT
521    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
522pub(crate) const AURA_LINGERING_SHADOW: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_LINGERING_SHADOW
523    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
524pub(crate) const AURA_SHADOW_DANCE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_SHADOW_DANCE
525    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
526pub(crate) const AURA_PREMEDITATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_PREMEDITATION
527    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
528pub(crate) const AURA_SHADOW_BLADES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_SHADOW_BLADES
529    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
530pub(crate) const AURA_ANCIENT_ARTS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_ANCIENT_ARTS
531    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
532pub(crate) const AURA_ESCALATING_BLADE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_ESCALATING_BLADE
533    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
534pub(crate) const AURA_COUP_DE_GRACE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_COUP_DE_GRACE
535    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
536pub(crate) const AURA_UNSEEN_BLADE_CD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_UNSEEN_BLADE_CD
537    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
538pub(crate) const AURA_FLAWLESS_FORM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_FLAWLESS_FORM
539    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
540pub(crate) const AURA_DISORIENTING_STRIKES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_DISORIENTING_STRIKES
541    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
542pub(crate) const AURA_FAZED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_FAZED
543    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
544pub(crate) const AURA_PVP_RULES_ENABLED_HARDCODED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::AURA_PVP_RULES_ENABLED_HARDCODED
545    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
546pub(crate) const AURA_COUNT: usize = 28;
547const _: () = assert!(
548    AURA_COUNT == 28, "AURA index ABI: count changed -- update positional hook consumers"
549);
550pub(crate) const SPELL_BACKSTAB: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_BACKSTAB
551    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
552pub(crate) const SPELL_SHADOWSTRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHADOWSTRIKE
553    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
554pub(crate) const SPELL_SHURIKEN_STORM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHURIKEN_STORM
555    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
556pub(crate) const SPELL_SHURIKEN_TOSS: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHURIKEN_TOSS
557    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
558pub(crate) const SPELL_EVISCERATE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_EVISCERATE
559    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
560pub(crate) const SPELL_BLACK_POWDER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_BLACK_POWDER
561    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
562pub(crate) const SPELL_SECRET_TECHNIQUE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SECRET_TECHNIQUE
563    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
564pub(crate) const SPELL_GOREMAW_S_BITE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_GOREMAW_S_BITE
565    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
566pub(crate) const SPELL_SLICE_AND_DICE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SLICE_AND_DICE
567    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
568pub(crate) const SPELL_INSTANT_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_INSTANT_POISON
569    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
570pub(crate) const SPELL_WOUND_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_WOUND_POISON
571    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
572pub(crate) const SPELL_ATROPHIC_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_ATROPHIC_POISON
573    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
574pub(crate) const SPELL_NUMBING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_NUMBING_POISON
575    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
576pub(crate) const SPELL_CRIPPLING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_CRIPPLING_POISON
577    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
578pub(crate) const SPELL_INSTANT_POISON_DAMAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_INSTANT_POISON_DAMAGE
579    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
580pub(crate) const SPELL_EVISCERATE_BONUS: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_EVISCERATE_BONUS
581    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
582pub(crate) const SPELL_BLACK_POWDER_BONUS: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_BLACK_POWDER_BONUS
583    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
584pub(crate) const SPELL_SECRET_TECHNIQUE_PLAYER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SECRET_TECHNIQUE_PLAYER
585    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
586pub(crate) const SPELL_SECRET_TECHNIQUE_CLONES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SECRET_TECHNIQUE_CLONES
587    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
588pub(crate) const SPELL_LASHE_MACABRE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_LASHE_MACABRE
589    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
590pub(crate) const SPELL_KICK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_KICK
591    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
592pub(crate) const SPELL_SHADOW_DANCE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHADOW_DANCE
593    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
594pub(crate) const SPELL_SHADOW_BLADES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHADOW_BLADES
595    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
596pub(crate) const SPELL_SHADOW_BLADES_ATTACK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHADOW_BLADES_ATTACK
597    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
598pub(crate) const SPELL_BACKSTAB_SHADOW_CLONE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_BACKSTAB_SHADOW_CLONE
599    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
600pub(crate) const SPELL_SHADOWSTRIKE_SHADOW_CLONE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHADOWSTRIKE_SHADOW_CLONE
601    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
602pub(crate) const SPELL_EVISCERATE_SHADOW_CLONE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_EVISCERATE_SHADOW_CLONE
603    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
604pub(crate) const SPELL_SHURIKEN_STORM_SHADOW_CLONE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SHURIKEN_STORM_SHADOW_CLONE
605    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
606pub(crate) const SPELL_SECRET_TECHNIQUE_SHADOW_CLONE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_SECRET_TECHNIQUE_SHADOW_CLONE
607    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
608pub(crate) const SPELL_BLACK_POWDER_SHADOW_CLONE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_BLACK_POWDER_SHADOW_CLONE
609    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
610pub(crate) const SPELL_THISTLE_TEA: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_THISTLE_TEA
611    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
612pub(crate) const SPELL_VANISH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::subtlety_rogue::SPELL_VANISH
613    .bind(wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF);
614pub(crate) const SPELL_COUNT: usize = 32;
615const _: () = assert!(
616    SPELL_COUNT == 32,
617    "SPELL index ABI: count changed -- update positional hook consumers"
618);
619pub(crate) mod EFFECT {
620    ///<https://wowlab.gg/inspect/spell/193539>
621    pub(crate) const ALACRITY_CHANCE_PER_CP: (u32, u8) = (193_539, 2);
622    ///<https://wowlab.gg/inspect/spell/1296592>
623    pub(crate) const MID2_SUBTLETY_2PC_BACKSTAB_COST: (u32, u8) = (1_296_592, 1);
624    ///<https://wowlab.gg/inspect/spell/1296592>
625    pub(crate) const MID2_SUBTLETY_2PC_BACKSTAB_DAMAGE: (u32, u8) = (1_296_592, 2);
626    ///<https://wowlab.gg/inspect/spell/1296592>
627    pub(crate) const MID2_SUBTLETY_2PC_SHURIKEN_COST: (u32, u8) = (1_296_592, 3);
628    ///<https://wowlab.gg/inspect/spell/1296592>
629    pub(crate) const MID2_SUBTLETY_2PC_SHURIKEN_DAMAGE: (u32, u8) = (1_296_592, 4);
630    ///<https://wowlab.gg/inspect/spell/1296593>
631    pub(crate) const MID2_SUBTLETY_4PC_LINGERING: (u32, u8) = (1_296_593, 1);
632    ///<https://wowlab.gg/inspect/spell/1268932>
633    pub(crate) const ANCIENT_ARTS_1_CLONE: (u32, u8) = (1_268_932, 1);
634    ///<https://wowlab.gg/inspect/spell/1268936>
635    pub(crate) const ANCIENT_ARTS_2_SHT: (u32, u8) = (1_268_936, 1);
636    ///<https://wowlab.gg/inspect/spell/319190>
637    pub(crate) const BLACK_POWDER_BONUS_COEF: (u32, u8) = (319_190, 1);
638    ///<https://wowlab.gg/inspect/spell/462244>
639    pub(crate) const CDG_BONUS_1: (u32, u8) = (462_244, 1);
640    ///<https://wowlab.gg/inspect/spell/462247>
641    pub(crate) const CDG_BONUS_2: (u32, u8) = (462_247, 1);
642    ///<https://wowlab.gg/inspect/spell/462248>
643    pub(crate) const CDG_BONUS_3: (u32, u8) = (462_248, 1);
644    ///<https://wowlab.gg/inspect/spell/462241>
645    pub(crate) const CDG_DAMAGE_1: (u32, u8) = (462_241, 1);
646    ///<https://wowlab.gg/inspect/spell/462242>
647    pub(crate) const CDG_DAMAGE_2: (u32, u8) = (462_242, 1);
648    ///<https://wowlab.gg/inspect/spell/462243>
649    pub(crate) const CDG_DAMAGE_3: (u32, u8) = (462_243, 1);
650    ///<https://wowlab.gg/inspect/spell/1269209>
651    pub(crate) const CLONE_BACKSTAB: (u32, u8) = (1_269_209, 1);
652    ///<https://wowlab.gg/inspect/spell/1269565>
653    pub(crate) const CLONE_BLACK_POWDER: (u32, u8) = (1_269_565, 1);
654    ///<https://wowlab.gg/inspect/spell/1269205>
655    pub(crate) const CLONE_EVISCERATE: (u32, u8) = (1_269_205, 1);
656    ///<https://wowlab.gg/inspect/spell/1269560>
657    pub(crate) const CLONE_SECRET_TECHNIQUE: (u32, u8) = (1_269_560, 1);
658    ///<https://wowlab.gg/inspect/spell/1269336>
659    pub(crate) const CLONE_SHADOWSTRIKE: (u32, u8) = (1_269_336, 1);
660    ///<https://wowlab.gg/inspect/spell/1269340>
661    pub(crate) const CLONE_SHURIKEN_STORM: (u32, u8) = (1_269_340, 1);
662    ///<https://wowlab.gg/inspect/spell/441423>
663    pub(crate) const COUP_DE_GRACE_BONUS_CP: (u32, u8) = (441_423, 3);
664    ///<https://wowlab.gg/inspect/spell/441423>
665    pub(crate) const COUP_DE_GRACE_FLAWLESS: (u32, u8) = (441_423, 2);
666    ///<https://wowlab.gg/inspect/spell/1271702>
667    pub(crate) const DEEPENING_SHADOWS_DURATION: (u32, u8) = (1_271_702, 3);
668    ///<https://wowlab.gg/inspect/spell/441274>
669    pub(crate) const DISORIENTING_FREE_BLADES: (u32, u8) = (441_274, 2);
670    ///<https://wowlab.gg/inspect/spell/441274>
671    pub(crate) const DISORIENTING_ST_CDR: (u32, u8) = (441_274, 1);
672    ///<https://wowlab.gg/inspect/spell/328082>
673    pub(crate) const EVISCERATE_BONUS_COEF: (u32, u8) = (328_082, 1);
674    ///<https://wowlab.gg/inspect/spell/196819>
675    pub(crate) const EVISCERATE_COEF: (u32, u8) = (196_819, 1);
676    ///<https://wowlab.gg/inspect/spell/76808>
677    pub(crate) const EXECUTIONER_DIRECT: (u32, u8) = (76808, 1);
678    ///<https://wowlab.gg/inspect/spell/76808>
679    pub(crate) const EXECUTIONER_PERIODIC: (u32, u8) = (76808, 2);
680    ///<https://wowlab.gg/inspect/spell/1264521>
681    pub(crate) const FIND_WEAKNESS_ARMOR_PEN: (u32, u8) = (1_264_521, 1);
682    ///<https://wowlab.gg/inspect/spell/1276630>
683    pub(crate) const FLASHING_STEEL_CHANCE: (u32, u8) = (1_276_630, 2);
684    ///<https://wowlab.gg/inspect/spell/1276630>
685    pub(crate) const FLASHING_STEEL_WINDOW: (u32, u8) = (1_276_630, 1);
686    ///<https://wowlab.gg/inspect/spell/470668>
687    pub(crate) const FORCED_INDUCTION_BONUS: (u32, u8) = (470_668, 1);
688    ///<https://wowlab.gg/inspect/spell/1279444>
689    pub(crate) const IMPROVED_SECRET_TECHNIQUE_DMG: (u32, u8) = (1_279_444, 1);
690    ///<https://wowlab.gg/inspect/spell/315585>
691    pub(crate) const INSTANT_POISON_DAMAGE: (u32, u8) = (315_585, 1);
692    ///<https://wowlab.gg/inspect/spell/1264397>
693    pub(crate) const LASHE_MACABRE_COEF: (u32, u8) = (1_264_397, 1);
694    ///<https://wowlab.gg/inspect/spell/343160>
695    pub(crate) const PREMEDITATION_CP: (u32, u8) = (343_160, 1);
696    ///<https://wowlab.gg/inspect/spell/98440>
697    pub(crate) const RELENTLESS_STRIKES_ENERGY: (u32, u8) = (98440, 1);
698    ///<https://wowlab.gg/inspect/spell/382506>
699    pub(crate) const REPLICATING_SHADOWS_CLONE: (u32, u8) = (382_506, 2);
700    ///<https://wowlab.gg/inspect/spell/282449>
701    pub(crate) const SECRET_TECHNIQUE_CLONE: (u32, u8) = (282_449, 1);
702    ///<https://wowlab.gg/inspect/spell/280720>
703    pub(crate) const SECRET_TECHNIQUE_PLAYER: (u32, u8) = (280_720, 1);
704    ///<https://wowlab.gg/inspect/spell/382511>
705    pub(crate) const SHADOWED_FINISHERS_PCT: (u32, u8) = (382_511, 1);
706    ///<https://wowlab.gg/inspect/spell/279043>
707    pub(crate) const SHADOW_BLADES_ATTACK: (u32, u8) = (279_043, 1);
708    ///<https://wowlab.gg/inspect/spell/121471>
709    pub(crate) const SHADOW_BLADES_CP: (u32, u8) = (121_471, 2);
710    ///<https://wowlab.gg/inspect/spell/121471>
711    pub(crate) const SHADOW_BLADES_ECHO: (u32, u8) = (121_471, 1);
712    ///<https://wowlab.gg/inspect/spell/196911>
713    pub(crate) const SHT_ENERGIZE: (u32, u8) = (196_911, 2);
714    ///<https://wowlab.gg/inspect/spell/137035>
715    pub(crate) const SPEC_AURA_PET_DMG: (u32, u8) = (137_035, 3);
716    ///<https://wowlab.gg/inspect/spell/470347>
717    pub(crate) const SUPERCHARGER_BONUS_CP: (u32, u8) = (470_347, 2);
718    ///<https://wowlab.gg/inspect/spell/470347>
719    pub(crate) const SUPERCHARGER_CHARGES: (u32, u8) = (470_347, 1);
720    ///<https://wowlab.gg/inspect/spell/441273>
721    pub(crate) const SURPRISING_STRIKES_CRIT_DMG: (u32, u8) = (441_273, 1);
722    ///<https://wowlab.gg/inspect/spell/1281468>
723    pub(crate) const UMBRAL_EDGE_DMG: (u32, u8) = (1_281_468, 1);
724    ///<https://wowlab.gg/inspect/spell/441144>
725    pub(crate) const UNSEEN_BLADE_COEF: (u32, u8) = (441_144, 1);
726}
727static REPORTED_SPELLS: &[(&str, u32)] = &[
728    ("cdg_bonus_1", 462_244),
729    ("cdg_bonus_2", 462_247),
730    ("cdg_bonus_3", 462_248),
731    ("melee", 6603),
732];
733static DECLARED_SPELL_IDS: &[u32] = &[
734    53, 185_438, 197_835, 114_014, 196_819, 319_175, 280_719, 426_591, 315_496, 315_584,
735    8679, 381_637, 5761, 3408, 315_585, 328_082, 319_190, 280_720, 282_449, 1_264_397,
736    1766, 185_313, 121_471, 279_043, 1_269_209, 1_269_336, 1_269_205, 1_269_340,
737    1_269_560, 1_269_565, 381_623, 1856, 1_264_521, 1784, 115_192, 196_911, 196_980,
738    193_538, 193_531, 394_320, 457_280, 385_960, 343_173, 1_269_163, 441_786, 441_519,
739    459_485, 441_326, 441_274, 441_224, 134_735, 193_539, 1_268_932, 1_268_936,
740    1_268_939, 382_528, 245_687, 469_642, 185_314, 382_517, 394_930, 382_525, 91023,
741    470_668, 200_758, 319_949, 1_279_444, 382_238, 382_524, 196_976, 382_518, 381_634,
742    343_160, 58423, 382_506, 426_594, 382_511, 385_722, 470_347, 382_015, 469_779,
743    1_281_468, 382_017, 193_537, 6603, 76808, 98440, 137_035, 441_144, 441_273, 441_423,
744    462_241, 462_242, 462_243, 462_244, 462_247, 462_248, 1_271_702, 1_276_630,
745    1_296_592, 1_296_593, 1_276_679, 441_263, 441_321, 441_367, 441_146, 457_157,
746    457_193, 457_052, 457_068, 457_273, 457_284, 457_167, 1_248_774,
747];
748static DECLARED_AURA_IDS: &[u32] = &[
749    1_264_521, 315_496, 1784, 1856, 115_192, 196_911, 196_980, 193_538, 315_584, 8679,
750    381_637, 5761, 3408, 193_531, 394_320, 457_280, 385_960, 185_313, 343_173, 121_471,
751    1_269_163, 441_786, 441_519, 459_485, 441_326, 441_274, 441_224, 134_735, 457_052,
752    457_068, 457_273, 457_284, 457_167, 1_248_774,
753];
754static TALENTS: &[(&str, u32)] = &[
755    ("ALACRITY", TALENT::ALACRITY),
756    ("ANCIENT_ARTS_1", TALENT::ANCIENT_ARTS_1),
757    ("ANCIENT_ARTS_2", TALENT::ANCIENT_ARTS_2),
758    ("ANCIENT_ARTS_3", TALENT::ANCIENT_ARTS_3),
759    ("DANSE_MACABRE", TALENT::DANSE_MACABRE),
760    ("DARK_SHADOW", TALENT::DARK_SHADOW),
761    ("DEATH_PERCEPTION", TALENT::DEATH_PERCEPTION),
762    ("DEEPENING_SHADOWS", TALENT::DEEPENING_SHADOWS),
763    ("DEEPER_DAGGERS", TALENT::DEEPER_DAGGERS),
764    ("DEEPER_STRATAGEM", TALENT::DEEPER_STRATAGEM),
765    ("DOUBLE_DANCE", TALENT::DOUBLE_DANCE),
766    ("FINALITY", TALENT::FINALITY),
767    ("FIND_WEAKNESS", TALENT::FIND_WEAKNESS),
768    ("FORCED_INDUCTION", TALENT::FORCED_INDUCTION),
769    ("GLOOMBLADE", TALENT::GLOOMBLADE),
770    ("GOREMAWS_BITE", TALENT::GOREMAWS_BITE),
771    ("IMPROVED_BACKSTAB", TALENT::IMPROVED_BACKSTAB),
772    ("IMPROVED_SECRET_TECHNIQUE", TALENT::IMPROVED_SECRET_TECHNIQUE),
773    ("LETHALITY", TALENT::LETHALITY),
774    ("LINGERING_SHADOW", TALENT::LINGERING_SHADOW),
775    ("MASTER_OF_SHADOWS", TALENT::MASTER_OF_SHADOWS),
776    ("PERFORATED_VEINS", TALENT::PERFORATED_VEINS),
777    ("POTENT_POWDER", TALENT::POTENT_POWDER),
778    ("PREMEDITATION", TALENT::PREMEDITATION),
779    ("RELENTLESS_STRIKES", TALENT::RELENTLESS_STRIKES),
780    ("REPLICATING_SHADOWS", TALENT::REPLICATING_SHADOWS),
781    ("SECRET_STRATAGEM", TALENT::SECRET_STRATAGEM),
782    ("SHADOWCRAFT", TALENT::SHADOWCRAFT),
783    ("SHADOWED_FINISHERS", TALENT::SHADOWED_FINISHERS),
784    ("SHADOW_BLADES", TALENT::SHADOW_BLADES),
785    ("SILENT_STORM", TALENT::SILENT_STORM),
786    ("SUPERCHARGER", TALENT::SUPERCHARGER),
787    ("THE_ROTTEN", TALENT::THE_ROTTEN),
788    ("THISTLE_TEA", TALENT::THISTLE_TEA),
789    ("UMBRAL_EDGE", TALENT::UMBRAL_EDGE),
790    ("VEILTOUCHED", TALENT::VEILTOUCHED),
791    ("WEAPONMASTER", TALENT::WEAPONMASTER),
792];
793pub(crate) mod SUBTLETY_ROGUE {
794    pub(crate) const BACKSTAB_CASTS: u32 = 0;
795    pub(crate) const SHADOWSTRIKE_CASTS: u32 = 1;
796    pub(crate) const EVISCERATE_CASTS: u32 = 2;
797    pub(crate) const BLACK_POWDER_CASTS: u32 = 3;
798    pub(crate) const SECRET_TECHNIQUE_CASTS: u32 = 4;
799    pub(crate) const SHADOW_BLADES_CASTS: u32 = 5;
800    pub(crate) const SHADOW_DANCE_CASTS: u32 = 6;
801    pub(crate) const GOREMAWS_BITE_CASTS: u32 = 7;
802    pub(crate) const SHADOW_DANCE_UPTIME_MS: u32 = 8;
803    pub(crate) const SHADOW_BLADES_UPTIME_MS: u32 = 9;
804    pub(crate) const FIND_WEAKNESS_UPTIME_MS: u32 = 10;
805}
806fn aura_find_weakness(
807    a: AuraDefinitionDraft,
808    data: &ResolvedGameData,
809) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
810    Ok(
811        a
812            .on_player()
813            .apply_base_from_data(data, 1_264_521)?
814            .max_stacks(
815                data
816                    .require_aura_max_stacks(
817                        wowlab_types::sim::SpellIdx::from_raw(1_264_521),
818                    )?,
819            ),
820    )
821}
822fn aura_slice_and_dice(
823    a: AuraDefinitionDraft,
824    data: &ResolvedGameData,
825) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
826    Ok(
827        a
828            .on_player()
829            .apply_base_from_data(data, 315_496)?
830            .max_stacks(
831                data
832                    .require_aura_max_stacks(
833                        wowlab_types::sim::SpellIdx::from_raw(315_496),
834                    )?,
835            ),
836    )
837}
838fn aura_stealth(
839    a: AuraDefinitionDraft,
840    data: &ResolvedGameData,
841) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
842    Ok(
843        a
844            .on_player()
845            .apply_base_from_data(data, 1784)?
846            .max_stacks(
847                data
848                    .require_aura_max_stacks(
849                        wowlab_types::sim::SpellIdx::from_raw(1784),
850                    )?,
851            ),
852    )
853}
854fn aura_vanish(
855    a: AuraDefinitionDraft,
856    data: &ResolvedGameData,
857) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
858    Ok(
859        a
860            .on_player()
861            .apply_base_from_data(data, 1856)?
862            .max_stacks(
863                data
864                    .require_aura_max_stacks(
865                        wowlab_types::sim::SpellIdx::from_raw(1856),
866                    )?,
867            ),
868    )
869}
870fn aura_subterfuge(
871    a: AuraDefinitionDraft,
872    data: &ResolvedGameData,
873) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
874    Ok(
875        a
876            .on_player()
877            .apply_base_from_data(data, 115_192)?
878            .max_stacks(
879                data
880                    .require_aura_max_stacks(
881                        wowlab_types::sim::SpellIdx::from_raw(115_192),
882                    )?,
883            ),
884    )
885}
886fn aura_shadow_techniques(
887    a: AuraDefinitionDraft,
888    data: &ResolvedGameData,
889) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
890    Ok(
891        a
892            .on_player()
893            .apply_base_from_data(data, 196_911)?
894            .max_stacks(
895                data
896                    .require_aura_max_stacks(
897                        wowlab_types::sim::SpellIdx::from_raw(196_911),
898                    )?,
899            ),
900    )
901}
902fn aura_master_of_shadows(
903    a: AuraDefinitionDraft,
904    data: &ResolvedGameData,
905) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
906    Ok(
907        a
908            .on_player()
909            .apply_base_from_data(data, 196_980)?
910            .max_stacks(
911                data
912                    .require_aura_max_stacks(
913                        wowlab_types::sim::SpellIdx::from_raw(196_980),
914                    )?,
915            ),
916    )
917}
918fn aura_alacrity(
919    a: AuraDefinitionDraft,
920    data: &ResolvedGameData,
921) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
922    a.on_player()
923        .apply_base_from_data(data, 193_538)?
924        .max_stacks(
925            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(193_538))?,
926        )
927        .haste_per_stack(
928            data.base_points(wowlab_types::sim::SpellIdx::from_raw(193_538), 1),
929        )
930}
931fn aura_instant_poison(
932    a: AuraDefinitionDraft,
933    data: &ResolvedGameData,
934) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
935    Ok(
936        a
937            .on_player()
938            .apply_base_from_data(data, 315_584)?
939            .max_stacks(
940                data
941                    .require_aura_max_stacks(
942                        wowlab_types::sim::SpellIdx::from_raw(315_584),
943                    )?,
944            )
945            .spell_group(0, wowlab_types::combat::SpellGroupRule::Exclusive),
946    )
947}
948fn aura_wound_poison(
949    a: AuraDefinitionDraft,
950    data: &ResolvedGameData,
951) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
952    Ok(
953        a
954            .on_player()
955            .apply_base_from_data(data, 8679)?
956            .max_stacks(
957                data
958                    .require_aura_max_stacks(
959                        wowlab_types::sim::SpellIdx::from_raw(8679),
960                    )?,
961            )
962            .spell_group(0, wowlab_types::combat::SpellGroupRule::Exclusive),
963    )
964}
965fn aura_atrophic_poison(
966    a: AuraDefinitionDraft,
967    data: &ResolvedGameData,
968) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
969    Ok(
970        a
971            .on_player()
972            .apply_base_from_data(data, 381_637)?
973            .max_stacks(
974                data
975                    .require_aura_max_stacks(
976                        wowlab_types::sim::SpellIdx::from_raw(381_637),
977                    )?,
978            )
979            .spell_group(1, wowlab_types::combat::SpellGroupRule::Exclusive),
980    )
981}
982fn aura_numbing_poison(
983    a: AuraDefinitionDraft,
984    data: &ResolvedGameData,
985) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
986    Ok(
987        a
988            .on_player()
989            .apply_base_from_data(data, 5761)?
990            .max_stacks(
991                data
992                    .require_aura_max_stacks(
993                        wowlab_types::sim::SpellIdx::from_raw(5761),
994                    )?,
995            )
996            .spell_group(1, wowlab_types::combat::SpellGroupRule::Exclusive),
997    )
998}
999fn aura_crippling_poison(
1000    a: AuraDefinitionDraft,
1001    data: &ResolvedGameData,
1002) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1003    Ok(
1004        a
1005            .on_player()
1006            .apply_base_from_data(data, 3408)?
1007            .max_stacks(
1008                data
1009                    .require_aura_max_stacks(
1010                        wowlab_types::sim::SpellIdx::from_raw(3408),
1011                    )?,
1012            )
1013            .spell_group(1, wowlab_types::combat::SpellGroupRule::Exclusive),
1014    )
1015}
1016fn aura_deeper_stratagem(
1017    a: AuraDefinitionDraft,
1018    data: &ResolvedGameData,
1019) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1020    Ok(
1021        a
1022            .on_player()
1023            .apply_base_from_data(data, 193_531)?
1024            .max_stacks(
1025                data
1026                    .require_aura_max_stacks(
1027                        wowlab_types::sim::SpellIdx::from_raw(193_531),
1028                    )?,
1029            ),
1030    )
1031}
1032fn aura_secret_stratagem(
1033    a: AuraDefinitionDraft,
1034    data: &ResolvedGameData,
1035) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1036    Ok(
1037        a
1038            .on_player()
1039            .apply_base_from_data(data, 394_320)?
1040            .max_stacks(
1041                data
1042                    .require_aura_max_stacks(
1043                        wowlab_types::sim::SpellIdx::from_raw(394_320),
1044                    )?,
1045            ),
1046    )
1047}
1048fn aura_darkest_night(
1049    a: AuraDefinitionDraft,
1050    data: &ResolvedGameData,
1051) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1052    Ok(
1053        a
1054            .on_player()
1055            .apply_base_from_data(data, 457_280)?
1056            .max_stacks(
1057                data
1058                    .require_aura_max_stacks(
1059                        wowlab_types::sim::SpellIdx::from_raw(457_280),
1060                    )?,
1061            ),
1062    )
1063}
1064fn aura_lingering_shadow(
1065    a: AuraDefinitionDraft,
1066    data: &ResolvedGameData,
1067) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1068    Ok(
1069        a
1070            .on_player()
1071            .apply_base_from_data(data, 385_960)?
1072            .max_stacks(
1073                data
1074                    .require_aura_max_stacks(
1075                        wowlab_types::sim::SpellIdx::from_raw(385_960),
1076                    )?,
1077            )
1078            .periodic_hook(
1079                wowlab_engine_combat::validated_milliseconds(
1080                    1000.0,
1081                    385_960,
1082                    "periodic_hook.tick_ms",
1083                )?,
1084            )
1085            .apply_periodic_behavior_from_data(data, 385_960)?
1086            .tick_hook(crate::hooks::subtlety_rogue::lingering_shadow_tick_hook),
1087    )
1088}
1089fn aura_shadow_dance(
1090    a: AuraDefinitionDraft,
1091    data: &ResolvedGameData,
1092) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1093    Ok(
1094        a
1095            .on_player()
1096            .apply_base_from_data(data, 185_313)?
1097            .max_stacks(
1098                data
1099                    .require_aura_max_stacks(
1100                        wowlab_types::sim::SpellIdx::from_raw(185_313),
1101                    )?,
1102            )
1103            .on_expire(crate::hooks::subtlety_rogue::shadow_dance_expire_hook),
1104    )
1105}
1106fn aura_premeditation(
1107    a: AuraDefinitionDraft,
1108    data: &ResolvedGameData,
1109) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1110    Ok(
1111        a
1112            .on_player()
1113            .apply_base_from_data(data, 343_173)?
1114            .max_stacks(
1115                data
1116                    .require_aura_max_stacks(
1117                        wowlab_types::sim::SpellIdx::from_raw(343_173),
1118                    )?,
1119            ),
1120    )
1121}
1122fn aura_shadow_blades(
1123    a: AuraDefinitionDraft,
1124    data: &ResolvedGameData,
1125) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1126    Ok(
1127        a
1128            .on_player()
1129            .apply_base_from_data(data, 121_471)?
1130            .max_stacks(
1131                data
1132                    .require_aura_max_stacks(
1133                        wowlab_types::sim::SpellIdx::from_raw(121_471),
1134                    )?,
1135            ),
1136    )
1137}
1138fn aura_ancient_arts(
1139    a: AuraDefinitionDraft,
1140    data: &ResolvedGameData,
1141) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1142    Ok(
1143        a
1144            .on_player()
1145            .apply_base_from_data(data, 1_269_163)?
1146            .max_stacks(
1147                data
1148                    .require_aura_max_stacks(
1149                        wowlab_types::sim::SpellIdx::from_raw(1_269_163),
1150                    )?,
1151            ),
1152    )
1153}
1154fn aura_escalating_blade(
1155    a: AuraDefinitionDraft,
1156    data: &ResolvedGameData,
1157) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1158    Ok(
1159        a
1160            .on_player()
1161            .apply_base_from_data(data, 441_786)?
1162            .max_stacks(
1163                data
1164                    .require_aura_max_stacks(
1165                        wowlab_types::sim::SpellIdx::from_raw(441_786),
1166                    )?,
1167            ),
1168    )
1169}
1170fn aura_coup_de_grace(
1171    a: AuraDefinitionDraft,
1172    data: &ResolvedGameData,
1173) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1174    Ok(
1175        a
1176            .on_player()
1177            .apply_base_from_data(data, 441_519)?
1178            .max_stacks(
1179                data
1180                    .require_aura_max_stacks(
1181                        wowlab_types::sim::SpellIdx::from_raw(441_519),
1182                    )?,
1183            ),
1184    )
1185}
1186fn aura_unseen_blade_cd(
1187    a: AuraDefinitionDraft,
1188    data: &ResolvedGameData,
1189) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1190    Ok(
1191        a
1192            .on_player()
1193            .apply_base_from_data(data, 459_485)?
1194            .max_stacks(
1195                data
1196                    .require_aura_max_stacks(
1197                        wowlab_types::sim::SpellIdx::from_raw(459_485),
1198                    )?,
1199            ),
1200    )
1201}
1202fn aura_flawless_form(
1203    a: AuraDefinitionDraft,
1204    data: &ResolvedGameData,
1205) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1206    Ok(
1207        a
1208            .on_player()
1209            .apply_base_from_data(data, 441_326)?
1210            .max_stacks(
1211                data
1212                    .require_aura_max_stacks(
1213                        wowlab_types::sim::SpellIdx::from_raw(441_326),
1214                    )?,
1215            ),
1216    )
1217}
1218fn aura_disorienting_strikes(
1219    a: AuraDefinitionDraft,
1220    data: &ResolvedGameData,
1221) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1222    a.on_player()
1223        .duration_ms(
1224            wowlab_engine_combat::validated_milliseconds(
1225                (((f64::from(
1226                    data
1227                        .require_aura_duration_ms(
1228                            wowlab_types::sim::SpellIdx::from_raw(459_485),
1229                        )?,
1230                )) * 1.333_333_333_333_333_3) * 1.0)
1231                    .round() / 1.0,
1232                441_274,
1233                "aura.duration_ms",
1234            )?,
1235        )
1236        .apply_periodic_effect_from_data(data, 441_274)?
1237        .apply_duration_behavior_from_data(data, 459_485)?
1238        .apply_timing_modifiers_from_data(data, 441_274)?
1239        .max_stacks(
1240            wowlab_engine_combat::validated_max_stacks(2.0, 441_274, "aura.max_stacks")?,
1241        )
1242        .apply_periodic_behavior_from_data(data, 459_485)
1243}
1244fn aura_fazed(
1245    a: AuraDefinitionDraft,
1246    data: &ResolvedGameData,
1247) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1248    Ok(
1249        a
1250            .on_target()
1251            .apply_base_from_data(data, 441_224)?
1252            .max_stacks(
1253                data
1254                    .require_aura_max_stacks(
1255                        wowlab_types::sim::SpellIdx::from_raw(441_224),
1256                    )?,
1257            ),
1258    )
1259}
1260fn aura_pvp_rules_enabled_hardcoded(
1261    a: AuraDefinitionDraft,
1262    data: &ResolvedGameData,
1263) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1264    Ok(
1265        a
1266            .on_player()
1267            .apply_base_from_data(data, 134_735)?
1268            .max_stacks(
1269                data
1270                    .require_aura_max_stacks(
1271                        wowlab_types::sim::SpellIdx::from_raw(134_735),
1272                    )?,
1273            ),
1274    )
1275}
1276fn spell_backstab(
1277    s: SpellDefinitionDraft,
1278    data: &ResolvedGameData,
1279) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1280    Ok(
1281        s
1282            .apply_base_from_data(data, 53)?
1283            .apply_aoe_from_data(data)
1284            .on_cast(crate::hooks::subtlety_rogue::backstab_hook),
1285    )
1286}
1287fn spell_shadowstrike(
1288    s: SpellDefinitionDraft,
1289    data: &ResolvedGameData,
1290) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1291    Ok(
1292        s
1293            .apply_base_from_data(data, 185_438)?
1294            .no_stealth_break()
1295            .apply_aoe_from_data(data)
1296            .on_cast(crate::hooks::subtlety_rogue::shadowstrike_hook),
1297    )
1298}
1299fn spell_shuriken_storm(
1300    s: SpellDefinitionDraft,
1301    data: &ResolvedGameData,
1302) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1303    Ok(
1304        s
1305            .apply_base_from_data(data, 197_835)?
1306            .apply_aoe_from_data(data)
1307            .on_cast(crate::hooks::subtlety_rogue::shuriken_storm_hook),
1308    )
1309}
1310fn spell_shuriken_toss(
1311    s: SpellDefinitionDraft,
1312    data: &ResolvedGameData,
1313) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1314    Ok(s.apply_base_from_data(data, 114_014)?.apply_aoe_from_data(data))
1315}
1316fn spell_eviscerate(
1317    s: SpellDefinitionDraft,
1318    data: &ResolvedGameData,
1319) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1320    Ok(
1321        s
1322            .apply_base_from_data(data, 196_819)?
1323            .apply_aoe_from_data(data)
1324            .on_cast(crate::hooks::subtlety_rogue::eviscerate_hook),
1325    )
1326}
1327fn spell_black_powder(
1328    s: SpellDefinitionDraft,
1329    data: &ResolvedGameData,
1330) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1331    Ok(
1332        s
1333            .apply_base_from_data(data, 319_175)?
1334            .apply_aoe_from_data(data)
1335            .on_cast(crate::hooks::subtlety_rogue::black_powder_hook),
1336    )
1337}
1338fn spell_secret_technique(
1339    s: SpellDefinitionDraft,
1340    data: &ResolvedGameData,
1341) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1342    Ok(
1343        s
1344            .apply_base_from_data(data, 280_719)?
1345            .apply_aoe_from_data(data)
1346            .on_cast(crate::hooks::subtlety_rogue::secret_technique_hook),
1347    )
1348}
1349fn spell_goremaw_s_bite(
1350    s: SpellDefinitionDraft,
1351    data: &ResolvedGameData,
1352) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1353    Ok(s.apply_base_from_data(data, 426_591)?.apply_aoe_from_data(data))
1354}
1355fn spell_slice_and_dice(
1356    s: SpellDefinitionDraft,
1357    data: &ResolvedGameData,
1358) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1359    Ok(
1360        s
1361            .apply_base_from_data(data, 315_496)?
1362            .applies_inferred_aura(AURA_SLICE_AND_DICE, 315_496)
1363            .apply_aoe_from_data(data),
1364    )
1365}
1366fn spell_instant_poison(
1367    s: SpellDefinitionDraft,
1368    data: &ResolvedGameData,
1369) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1370    Ok(
1371        s
1372            .apply_base_from_data(data, 315_584)?
1373            .applies_inferred_aura(AURA_INSTANT_POISON, 315_584)
1374            .apply_aoe_from_data(data),
1375    )
1376}
1377fn spell_wound_poison(
1378    s: SpellDefinitionDraft,
1379    data: &ResolvedGameData,
1380) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1381    Ok(
1382        s
1383            .apply_base_from_data(data, 8679)?
1384            .applies_inferred_aura(AURA_WOUND_POISON, 8679)
1385            .apply_aoe_from_data(data),
1386    )
1387}
1388fn spell_atrophic_poison(
1389    s: SpellDefinitionDraft,
1390    data: &ResolvedGameData,
1391) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1392    Ok(
1393        s
1394            .apply_base_from_data(data, 381_637)?
1395            .applies_inferred_aura(AURA_ATROPHIC_POISON, 381_637)
1396            .apply_aoe_from_data(data),
1397    )
1398}
1399fn spell_numbing_poison(
1400    s: SpellDefinitionDraft,
1401    data: &ResolvedGameData,
1402) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1403    Ok(
1404        s
1405            .apply_base_from_data(data, 5761)?
1406            .applies_inferred_aura(AURA_NUMBING_POISON, 5761)
1407            .apply_aoe_from_data(data),
1408    )
1409}
1410fn spell_crippling_poison(
1411    s: SpellDefinitionDraft,
1412    data: &ResolvedGameData,
1413) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1414    Ok(
1415        s
1416            .apply_base_from_data(data, 3408)?
1417            .applies_inferred_aura(AURA_CRIPPLING_POISON, 3408)
1418            .apply_aoe_from_data(data),
1419    )
1420}
1421fn spell_instant_poison_damage(
1422    s: SpellDefinitionDraft,
1423    data: &ResolvedGameData,
1424) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1425    Ok(s.apply_base_from_data(data, 315_585)?.apply_aoe_from_data(data))
1426}
1427fn spell_eviscerate_bonus(
1428    s: SpellDefinitionDraft,
1429    data: &ResolvedGameData,
1430) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1431    Ok(s.apply_base_from_data(data, 328_082)?.apply_aoe_from_data(data))
1432}
1433fn spell_black_powder_bonus(
1434    s: SpellDefinitionDraft,
1435    data: &ResolvedGameData,
1436) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1437    Ok(s.apply_base_from_data(data, 319_190)?.apply_aoe_from_data(data))
1438}
1439fn spell_secret_technique_player(
1440    s: SpellDefinitionDraft,
1441    data: &ResolvedGameData,
1442) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1443    Ok(s.apply_base_from_data(data, 280_720)?.apply_aoe_from_data(data))
1444}
1445fn spell_secret_technique_clones(
1446    s: SpellDefinitionDraft,
1447    data: &ResolvedGameData,
1448) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1449    Ok(s.apply_base_from_data(data, 282_449)?.apply_aoe_from_data(data))
1450}
1451fn spell_lashe_macabre(
1452    s: SpellDefinitionDraft,
1453    data: &ResolvedGameData,
1454) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1455    Ok(s.apply_base_from_data(data, 1_264_397)?.apply_aoe_from_data(data))
1456}
1457fn spell_kick(
1458    s: SpellDefinitionDraft,
1459    data: &ResolvedGameData,
1460) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1461    Ok(s.apply_base_from_data(data, 1766)?.apply_aoe_from_data(data))
1462}
1463fn spell_shadow_dance(
1464    s: SpellDefinitionDraft,
1465    data: &ResolvedGameData,
1466) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1467    Ok(
1468        s
1469            .apply_base_from_data(data, 185_313)?
1470            .applies_aura(AURA_SHADOW_DANCE)
1471            .no_stealth_break()
1472            .apply_aoe_from_data(data)
1473            .on_cast(crate::hooks::subtlety_rogue::shadow_dance_hook),
1474    )
1475}
1476fn spell_shadow_blades(
1477    s: SpellDefinitionDraft,
1478    data: &ResolvedGameData,
1479) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1480    Ok(
1481        s
1482            .apply_base_from_data(data, 121_471)?
1483            .applies_inferred_aura(AURA_SHADOW_BLADES, 121_471)
1484            .no_stealth_break()
1485            .apply_aoe_from_data(data)
1486            .on_cast(crate::hooks::subtlety_rogue::shadow_blades_hook),
1487    )
1488}
1489fn spell_shadow_blades_attack(
1490    s: SpellDefinitionDraft,
1491    data: &ResolvedGameData,
1492) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1493    Ok(s.apply_base_from_data(data, 279_043)?.apply_aoe_from_data(data))
1494}
1495fn spell_backstab_shadow_clone(
1496    s: SpellDefinitionDraft,
1497    data: &ResolvedGameData,
1498) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1499    Ok(s.apply_base_from_data(data, 1_269_209)?.apply_aoe_from_data(data))
1500}
1501fn spell_shadowstrike_shadow_clone(
1502    s: SpellDefinitionDraft,
1503    data: &ResolvedGameData,
1504) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1505    Ok(s.apply_base_from_data(data, 1_269_336)?.apply_aoe_from_data(data))
1506}
1507fn spell_eviscerate_shadow_clone(
1508    s: SpellDefinitionDraft,
1509    data: &ResolvedGameData,
1510) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1511    Ok(s.apply_base_from_data(data, 1_269_205)?.apply_aoe_from_data(data))
1512}
1513fn spell_shuriken_storm_shadow_clone(
1514    s: SpellDefinitionDraft,
1515    data: &ResolvedGameData,
1516) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1517    Ok(s.apply_base_from_data(data, 1_269_340)?.apply_aoe_from_data(data))
1518}
1519fn spell_secret_technique_shadow_clone(
1520    s: SpellDefinitionDraft,
1521    data: &ResolvedGameData,
1522) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1523    Ok(s.apply_base_from_data(data, 1_269_560)?.apply_aoe_from_data(data))
1524}
1525fn spell_black_powder_shadow_clone(
1526    s: SpellDefinitionDraft,
1527    data: &ResolvedGameData,
1528) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1529    Ok(s.apply_base_from_data(data, 1_269_565)?.apply_aoe_from_data(data))
1530}
1531fn spell_thistle_tea(
1532    s: SpellDefinitionDraft,
1533    data: &ResolvedGameData,
1534) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1535    Ok(
1536        s
1537            .apply_base_from_data(data, 381_623)?
1538            .no_stealth_break()
1539            .apply_aoe_from_data(data),
1540    )
1541}
1542fn spell_vanish(
1543    s: SpellDefinitionDraft,
1544    data: &ResolvedGameData,
1545) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1546    Ok(
1547        s
1548            .apply_base_from_data(data, 1856)?
1549            .applies_aura(AURA_STEALTH)
1550            .no_stealth_break()
1551            .apply_aoe_from_data(data),
1552    )
1553}
1554pub(crate) fn build_combat_system_draft(
1555    params: &wowlab_engine_ports::HandlerParams<'_>,
1556) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1557    let builder = CombatSystemBuilder::new(params.stats.clone())
1558        .spec_id(SpecId::Subtlety)
1559        .spec_identity(
1560            wowlab_engine_combat::generated_identities::specs::subtlety_rogue::PROOF,
1561        )
1562        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1563        .effect_identities(
1564            wowlab_engine_combat::generated_identities::specs::subtlety_rogue::damage::ALL,
1565        )
1566        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1567        .mastery_spell(76808)
1568        .mastery_hook(crate::hooks::subtlety_rogue::mastery)
1569        .resource(
1570            "energy",
1571            params
1572                .game_data
1573                .power_max(3)
1574                .ok_or_else(|| {
1575                    wowlab_engine_ports::EngineError::spec_construction(
1576                        "missing power-type power_max for type_id 3",
1577                    )
1578                })?,
1579            params
1580                .game_data
1581                .power_regen_for_max(
1582                    3,
1583                    params
1584                        .game_data
1585                        .power_max(3)
1586                        .ok_or_else(|| {
1587                            wowlab_engine_ports::EngineError::spec_construction(
1588                                "missing power-type power_max for type_id 3",
1589                            )
1590                        })?,
1591                )
1592                .ok_or_else(|| {
1593                    wowlab_engine_ports::EngineError::spec_construction(
1594                        "missing power-type power_regen_for_max for type_id 3",
1595                    )
1596                })?,
1597        )
1598        .resource_type_id(3)
1599        .resource_start(
1600            params
1601                .game_data
1602                .power_default(3)
1603                .ok_or_else(|| {
1604                    wowlab_engine_ports::EngineError::spec_construction(
1605                        "missing power-type power_default for type_id 3",
1606                    )
1607                })?,
1608        )
1609        .mastery_crit_damage_hook(crate::hooks::subtlety_rogue::crit_damage)
1610        .secondary_resource(
1611            "combo_points",
1612            params
1613                .game_data
1614                .power_max(4)
1615                .ok_or_else(|| {
1616                    wowlab_engine_ports::EngineError::spec_construction(
1617                        "missing power-type power_max for type_id 4",
1618                    )
1619                })?,
1620        )
1621        .secondary_resource_type_id(4)
1622        .precombat_aura(AURA_STEALTH)
1623        .precombat_aura(AURA_INSTANT_POISON)
1624        .precombat_aura(AURA_ATROPHIC_POISON)
1625        .stealth_aura(AURA::STEALTH)
1626        .aura(
1627            "find_weakness",
1628            AURA::FIND_WEAKNESS,
1629            |a| aura_find_weakness(a, &params.game_data),
1630        )
1631        .aura(
1632            "slice_and_dice",
1633            AURA::SLICE_AND_DICE,
1634            |a| aura_slice_and_dice(a, &params.game_data),
1635        )
1636        .aura("stealth", AURA::STEALTH, |a| aura_stealth(a, &params.game_data))
1637        .aura("vanish", AURA::VANISH, |a| aura_vanish(a, &params.game_data))
1638        .aura("subterfuge", AURA::SUBTERFUGE, |a| aura_subterfuge(a, &params.game_data))
1639        .aura(
1640            "shadow_techniques",
1641            AURA::SHADOW_TECHNIQUES,
1642            |a| aura_shadow_techniques(a, &params.game_data),
1643        )
1644        .aura(
1645            "master_of_shadows",
1646            AURA::MASTER_OF_SHADOWS,
1647            |a| aura_master_of_shadows(a, &params.game_data),
1648        )
1649        .aura("alacrity", AURA::ALACRITY, |a| aura_alacrity(a, &params.game_data))
1650        .aura(
1651            "instant_poison",
1652            AURA::INSTANT_POISON,
1653            |a| aura_instant_poison(a, &params.game_data),
1654        )
1655        .aura(
1656            "wound_poison",
1657            AURA::WOUND_POISON,
1658            |a| aura_wound_poison(a, &params.game_data),
1659        )
1660        .aura(
1661            "atrophic_poison",
1662            AURA::ATROPHIC_POISON,
1663            |a| aura_atrophic_poison(a, &params.game_data),
1664        )
1665        .aura(
1666            "numbing_poison",
1667            AURA::NUMBING_POISON,
1668            |a| aura_numbing_poison(a, &params.game_data),
1669        )
1670        .aura(
1671            "crippling_poison",
1672            AURA::CRIPPLING_POISON,
1673            |a| aura_crippling_poison(a, &params.game_data),
1674        )
1675        .aura(
1676            "deeper_stratagem",
1677            AURA::DEEPER_STRATAGEM,
1678            |a| aura_deeper_stratagem(a, &params.game_data),
1679        )
1680        .aura(
1681            "secret_stratagem",
1682            AURA::SECRET_STRATAGEM,
1683            |a| aura_secret_stratagem(a, &params.game_data),
1684        )
1685        .aura(
1686            "darkest_night",
1687            AURA::DARKEST_NIGHT,
1688            |a| aura_darkest_night(a, &params.game_data),
1689        )
1690        .aura(
1691            "lingering_shadow",
1692            AURA::LINGERING_SHADOW,
1693            |a| aura_lingering_shadow(a, &params.game_data),
1694        )
1695        .aura(
1696            "shadow_dance",
1697            AURA::SHADOW_DANCE,
1698            |a| aura_shadow_dance(a, &params.game_data),
1699        )
1700        .aura(
1701            "premeditation",
1702            AURA::PREMEDITATION,
1703            |a| aura_premeditation(a, &params.game_data),
1704        )
1705        .aura(
1706            "shadow_blades",
1707            AURA::SHADOW_BLADES,
1708            |a| aura_shadow_blades(a, &params.game_data),
1709        )
1710        .aura(
1711            "ancient_arts",
1712            AURA::ANCIENT_ARTS,
1713            |a| aura_ancient_arts(a, &params.game_data),
1714        )
1715        .aura(
1716            "escalating_blade",
1717            AURA::ESCALATING_BLADE,
1718            |a| aura_escalating_blade(a, &params.game_data),
1719        )
1720        .aura(
1721            "coup_de_grace",
1722            AURA::COUP_DE_GRACE,
1723            |a| aura_coup_de_grace(a, &params.game_data),
1724        )
1725        .aura(
1726            "unseen_blade_cd",
1727            AURA::UNSEEN_BLADE_CD,
1728            |a| aura_unseen_blade_cd(a, &params.game_data),
1729        )
1730        .aura(
1731            "flawless_form",
1732            AURA::FLAWLESS_FORM,
1733            |a| aura_flawless_form(a, &params.game_data),
1734        )
1735        .aura(
1736            "disorienting_strikes",
1737            AURA::DISORIENTING_STRIKES,
1738            |a| aura_disorienting_strikes(a, &params.game_data),
1739        )
1740        .aura("fazed", AURA::FAZED, |a| aura_fazed(a, &params.game_data))
1741        .aura(
1742            "pvp_rules_enabled_hardcoded",
1743            AURA::PVP_RULES_ENABLED_HARDCODED,
1744            |a| aura_pvp_rules_enabled_hardcoded(a, &params.game_data),
1745        )
1746        .spell("backstab", SPELL::BACKSTAB, |s| spell_backstab(s, &params.game_data))
1747        .spell(
1748            "shadowstrike",
1749            SPELL::SHADOWSTRIKE,
1750            |s| spell_shadowstrike(s, &params.game_data),
1751        )
1752        .spell(
1753            "shuriken_storm",
1754            SPELL::SHURIKEN_STORM,
1755            |s| spell_shuriken_storm(s, &params.game_data),
1756        )
1757        .spell(
1758            "shuriken_toss",
1759            SPELL::SHURIKEN_TOSS,
1760            |s| spell_shuriken_toss(s, &params.game_data),
1761        )
1762        .spell(
1763            "eviscerate",
1764            SPELL::EVISCERATE,
1765            |s| spell_eviscerate(s, &params.game_data),
1766        )
1767        .spell(
1768            "black_powder",
1769            SPELL::BLACK_POWDER,
1770            |s| spell_black_powder(s, &params.game_data),
1771        )
1772        .spell(
1773            "secret_technique",
1774            SPELL::SECRET_TECHNIQUE,
1775            |s| spell_secret_technique(s, &params.game_data),
1776        )
1777        .spell(
1778            "goremaws_bite",
1779            SPELL::GOREMAW_S_BITE,
1780            |s| spell_goremaw_s_bite(s, &params.game_data),
1781        )
1782        .spell(
1783            "slice_and_dice",
1784            SPELL::SLICE_AND_DICE,
1785            |s| spell_slice_and_dice(s, &params.game_data),
1786        )
1787        .spell(
1788            "instant_poison",
1789            SPELL::INSTANT_POISON,
1790            |s| spell_instant_poison(s, &params.game_data),
1791        )
1792        .spell(
1793            "wound_poison",
1794            SPELL::WOUND_POISON,
1795            |s| spell_wound_poison(s, &params.game_data),
1796        )
1797        .spell(
1798            "atrophic_poison",
1799            SPELL::ATROPHIC_POISON,
1800            |s| spell_atrophic_poison(s, &params.game_data),
1801        )
1802        .spell(
1803            "numbing_poison",
1804            SPELL::NUMBING_POISON,
1805            |s| spell_numbing_poison(s, &params.game_data),
1806        )
1807        .spell(
1808            "crippling_poison",
1809            SPELL::CRIPPLING_POISON,
1810            |s| spell_crippling_poison(s, &params.game_data),
1811        )
1812        .spell(
1813            "instant_poison_damage",
1814            SPELL::INSTANT_POISON_DAMAGE,
1815            |s| spell_instant_poison_damage(s, &params.game_data),
1816        )
1817        .spell(
1818            "eviscerate_bonus",
1819            SPELL::EVISCERATE_BONUS,
1820            |s| spell_eviscerate_bonus(s, &params.game_data),
1821        )
1822        .spell(
1823            "black_powder_bonus",
1824            SPELL::BLACK_POWDER_BONUS,
1825            |s| spell_black_powder_bonus(s, &params.game_data),
1826        )
1827        .spell(
1828            "secret_technique_player",
1829            SPELL::SECRET_TECHNIQUE_PLAYER,
1830            |s| spell_secret_technique_player(s, &params.game_data),
1831        )
1832        .spell(
1833            "secret_technique_clones",
1834            SPELL::SECRET_TECHNIQUE_CLONES,
1835            |s| spell_secret_technique_clones(s, &params.game_data),
1836        )
1837        .spell(
1838            "lashe_macabre",
1839            SPELL::LASHE_MACABRE,
1840            |s| spell_lashe_macabre(s, &params.game_data),
1841        )
1842        .spell("kick", SPELL::KICK, |s| spell_kick(s, &params.game_data))
1843        .spell(
1844            "shadow_dance",
1845            SPELL::SHADOW_DANCE,
1846            |s| spell_shadow_dance(s, &params.game_data),
1847        )
1848        .spell(
1849            "shadow_blades",
1850            SPELL::SHADOW_BLADES,
1851            |s| spell_shadow_blades(s, &params.game_data),
1852        )
1853        .spell(
1854            "shadow_blades_attack",
1855            SPELL::SHADOW_BLADES_ATTACK,
1856            |s| spell_shadow_blades_attack(s, &params.game_data),
1857        )
1858        .spell(
1859            "backstab_shadow_clone",
1860            SPELL::BACKSTAB_SHADOW_CLONE,
1861            |s| spell_backstab_shadow_clone(s, &params.game_data),
1862        )
1863        .spell(
1864            "shadowstrike_shadow_clone",
1865            SPELL::SHADOWSTRIKE_SHADOW_CLONE,
1866            |s| spell_shadowstrike_shadow_clone(s, &params.game_data),
1867        )
1868        .spell(
1869            "eviscerate_shadow_clone",
1870            SPELL::EVISCERATE_SHADOW_CLONE,
1871            |s| spell_eviscerate_shadow_clone(s, &params.game_data),
1872        )
1873        .spell(
1874            "shuriken_storm_shadow_clone",
1875            SPELL::SHURIKEN_STORM_SHADOW_CLONE,
1876            |s| spell_shuriken_storm_shadow_clone(s, &params.game_data),
1877        )
1878        .spell(
1879            "secret_technique_shadow_clone",
1880            SPELL::SECRET_TECHNIQUE_SHADOW_CLONE,
1881            |s| spell_secret_technique_shadow_clone(s, &params.game_data),
1882        )
1883        .spell(
1884            "black_powder_shadow_clone",
1885            SPELL::BLACK_POWDER_SHADOW_CLONE,
1886            |s| spell_black_powder_shadow_clone(s, &params.game_data),
1887        )
1888        .spell(
1889            "thistle_tea",
1890            SPELL::THISTLE_TEA,
1891            |s| spell_thistle_tea(s, &params.game_data),
1892        )
1893        .spell("vanish", SPELL::VANISH, |s| spell_vanish(s, &params.game_data))
1894        .auto_attack(|a| {
1895            a
1896                .spell_id(6603)
1897                .swing_ms(1800)
1898                .apply_base_from_data(&params.game_data)
1899                .on_swing(crate::hooks::subtlety_rogue::swing_hook)
1900        })
1901        .game_data(params.game_data.clone())
1902        .talent_spell_ids(TALENTS)
1903        .talent_selections(params.talent_selections)
1904        .set_bonus_auras(params.set_bonus_auras)
1905        .encounter(params.encounter.clone());
1906    let builder = crate::generated::items::register_equipped(
1907        builder,
1908        &params.game_data,
1909        params.equipped_items,
1910    )?;
1911
1912    builder.into_draft()
1913}
1914fn new_handler(
1915    params: wowlab_engine_ports::HandlerParams<'_>,
1916) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1917    let handler = crate::composition::compose_handler(
1918        build_combat_system_draft,
1919        &params,
1920        crate::hooks::subtlety_rogue::SubtletyHandler::try_new,
1921    )?;
1922
1923    Ok(Box::new(handler))
1924}
1925static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1926    primary_resource: ResourceType::Energy,
1927    secondary_resource: Some(ResourceType::ComboPoints),
1928    spell_ids: DECLARED_SPELL_IDS,
1929    aura_ids: DECLARED_AURA_IDS,
1930    server_proc_entries: &[],
1931    talents: TALENTS,
1932    rotation_field_schema: &[],
1933    metrics_plugin_id: None,
1934    hero_talent_trees: &[
1935        HeroTalentTreeDesc {
1936            name: "Trickster",
1937            spells: HERO_TREE_TRICKSTER_SPELLS,
1938            auras: HERO_TREE_TRICKSTER_AURAS,
1939        },
1940        HeroTalentTreeDesc {
1941            name: "Deathstalker",
1942            spells: HERO_TREE_DEATHSTALKER_SPELLS,
1943            auras: HERO_TREE_DEATHSTALKER_AURAS,
1944        },
1945    ],
1946    reported_spells: REPORTED_SPELLS,
1947    masked_passive_effects: &[],
1948    passive_effect_overrides: &[],
1949};
1950pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1951    spec_id: SpecId::Subtlety,
1952    display_name: "Subtlety Rogue",
1953    metadata: DECLARED_METADATA,
1954    handler_factory: new_handler,
1955};
1956wowlab_engine_combat::smoke_test!(build_combat_system_draft);