Skip to main content

wowlab_engine_content/generated/specs/
fire_mage.rs

1//! @generated by codegen-cli from manifests/specs/mage/fire/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/133>
15    pub(crate) const FIREBALL: u32 = 133;
16    ///<https://wowlab.gg/inspect/spell/11366>
17    pub(crate) const PYROBLAST: u32 = 11366;
18    ///<https://wowlab.gg/inspect/spell/108853>
19    pub(crate) const FIRE_BLAST: u32 = 108_853;
20    ///<https://wowlab.gg/inspect/spell/2120>
21    pub(crate) const FLAMESTRIKE: u32 = 2120;
22    ///<https://wowlab.gg/inspect/spell/190319>
23    pub(crate) const COMBUSTION: u32 = 190_319;
24    ///<https://wowlab.gg/inspect/spell/153561>
25    pub(crate) const METEOR: u32 = 153_561;
26    ///<https://wowlab.gg/inspect/spell/2948>
27    pub(crate) const SCORCH: u32 = 2948;
28    ///<https://wowlab.gg/inspect/spell/431044>
29    pub(crate) const FROSTFIRE_BOLT: u32 = 431_044;
30    ///<https://wowlab.gg/inspect/spell/1459>
31    pub(crate) const ARCANE_INTELLECT: u32 = 1459;
32    ///<https://wowlab.gg/inspect/spell/12654>
33    pub(crate) const IGNITE: u32 = 12654;
34    ///<https://wowlab.gg/inspect/spell/419800>
35    pub(crate) const INTENSIFYING_FLAME: u32 = 419_800;
36    ///<https://wowlab.gg/inspect/spell/1271335>
37    pub(crate) const BURNOUT: u32 = 1_271_335;
38}
39pub(crate) mod AURA {
40    ///<https://wowlab.gg/inspect/spell/48107>
41    pub(crate) const HEATING_UP: u32 = 48107;
42    ///<https://wowlab.gg/inspect/spell/48108>
43    pub(crate) const HOT_STREAK: u32 = 48108;
44    ///<https://wowlab.gg/inspect/spell/190319>
45    pub(crate) const COMBUSTION: u32 = 190_319;
46    ///<https://wowlab.gg/inspect/spell/12654>
47    pub(crate) const IGNITE: u32 = 12654;
48    ///<https://wowlab.gg/inspect/spell/453268>
49    pub(crate) const CONTROLLED_DESTRUCTION: u32 = 453_268;
50    ///<https://wowlab.gg/inspect/spell/383874>
51    pub(crate) const HYPERTHERMIA: u32 = 383_874;
52    ///<https://wowlab.gg/inspect/spell/1242220>
53    pub(crate) const HYPERTHERMIA_DAMAGE: u32 = 1_242_220;
54    ///<https://wowlab.gg/inspect/spell/157644>
55    pub(crate) const PYROTECHNICS: u32 = 157_644;
56    ///<https://wowlab.gg/inspect/spell/269651>
57    pub(crate) const PYROCLASM: u32 = 269_651;
58    ///<https://wowlab.gg/inspect/spell/383395>
59    pub(crate) const FEEL_THE_BURN: u32 = 383_395;
60    ///<https://wowlab.gg/inspect/spell/383811>
61    pub(crate) const FEVERED_INCANTATION: u32 = 383_811;
62    ///<https://wowlab.gg/inspect/spell/1257350>
63    pub(crate) const FIRED_UP: u32 = 1_257_350;
64    ///<https://wowlab.gg/inspect/spell/458964>
65    pub(crate) const HEAT_SHIMMER: u32 = 458_964;
66    ///<https://wowlab.gg/inspect/spell/431177>
67    pub(crate) const FROSTFIRE_EMPOWERMENT: u32 = 431_177;
68    ///<https://wowlab.gg/inspect/spell/1459>
69    pub(crate) const ARCANE_INTELLECT_HIGHLIGHT: u32 = 1459;
70    ///<https://wowlab.gg/inspect/spell/448604>
71    pub(crate) const SPELLFIRE_SPHERE: u32 = 448_604;
72    ///<https://wowlab.gg/inspect/spell/383637>
73    pub(crate) const FIERY_RUSH_EFFECT: u32 = 383_637;
74}
75pub(crate) mod TALENT {
76    ///<https://wowlab.gg/inspect/spell/1271177>
77    pub(crate) const BURNOUT: u32 = 1_271_177;
78    ///<https://wowlab.gg/inspect/spell/1254512>
79    pub(crate) const BURN_IT_ALL: u32 = 1_254_512;
80    ///<https://wowlab.gg/inspect/spell/1254865>
81    pub(crate) const CINDERSTORM: u32 = 1_254_865;
82    ///<https://wowlab.gg/inspect/spell/449382>
83    pub(crate) const CODEX_OF_THE_SUNSTRIDERS: u32 = 449_382;
84    ///<https://wowlab.gg/inspect/spell/190319>
85    pub(crate) const COMBUSTION: u32 = 190_319;
86    ///<https://wowlab.gg/inspect/spell/1271171>
87    pub(crate) const CONFLAGRATION: u32 = 1_271_171;
88    ///<https://wowlab.gg/inspect/spell/383669>
89    pub(crate) const CONTROLLED_DESTRUCTION: u32 = 383_669;
90    ///<https://wowlab.gg/inspect/spell/117216>
91    pub(crate) const CRITICAL_MASS: u32 = 117_216;
92    ///<https://wowlab.gg/inspect/spell/416719>
93    pub(crate) const DEEP_IMPACT: u32 = 416_719;
94    ///<https://wowlab.gg/inspect/spell/383391>
95    pub(crate) const FEEL_THE_BURN: u32 = 383_391;
96    ///<https://wowlab.gg/inspect/spell/383810>
97    pub(crate) const FEVERED_INCANTATION: u32 = 383_810;
98    ///<https://wowlab.gg/inspect/spell/383634>
99    pub(crate) const FIERY_RUSH: u32 = 383_634;
100    ///<https://wowlab.gg/inspect/spell/1257343>
101    pub(crate) const FIRED_UP_1: u32 = 1_257_343;
102    ///<https://wowlab.gg/inspect/spell/1257349>
103    pub(crate) const FIRED_UP_2: u32 = 1_257_349;
104    ///<https://wowlab.gg/inspect/spell/1257348>
105    pub(crate) const FIRED_UP_3: u32 = 1_257_348;
106    ///<https://wowlab.gg/inspect/spell/205026>
107    pub(crate) const FIRESTARTER: u32 = 205_026;
108    ///<https://wowlab.gg/inspect/spell/450831>
109    pub(crate) const FIRES_IRE: u32 = 450_831;
110    ///<https://wowlab.gg/inspect/spell/108853>
111    pub(crate) const FIRE_BLAST: u32 = 108_853;
112    ///<https://wowlab.gg/inspect/spell/2120>
113    pub(crate) const FLAMESTRIKE: u32 = 2120;
114    ///<https://wowlab.gg/inspect/spell/205029>
115    pub(crate) const FLAME_ON: u32 = 205_029;
116    ///<https://wowlab.gg/inspect/spell/342344>
117    pub(crate) const FROM_THE_ASHES: u32 = 342_344;
118    ///<https://wowlab.gg/inspect/spell/383550>
119    pub(crate) const FUEL_THE_FIRE: u32 = 383_550;
120    ///<https://wowlab.gg/inspect/spell/457736>
121    pub(crate) const HEAT_SHIMMER: u32 = 457_736;
122    ///<https://wowlab.gg/inspect/spell/383549>
123    pub(crate) const IGNITION: u32 = 383_549;
124    ///<https://wowlab.gg/inspect/spell/417467>
125    pub(crate) const INFLAME: u32 = 417_467;
126    ///<https://wowlab.gg/inspect/spell/416714>
127    pub(crate) const INTENSIFYING_FLAME: u32 = 416_714;
128    ///<https://wowlab.gg/inspect/spell/448658>
129    pub(crate) const INVOCATION_ARCANE_PHOENIX: u32 = 448_658;
130    ///<https://wowlab.gg/inspect/spell/155148>
131    pub(crate) const KINDLING: u32 = 155_148;
132    ///<https://wowlab.gg/inspect/spell/384174>
133    pub(crate) const MASTER_OF_FLAME: u32 = 384_174;
134    ///<https://wowlab.gg/inspect/spell/449619>
135    pub(crate) const MEMORY_OF_ALAR: u32 = 449_619;
136    ///<https://wowlab.gg/inspect/spell/153561>
137    pub(crate) const METEOR: u32 = 153_561;
138    ///<https://wowlab.gg/inspect/spell/457803>
139    pub(crate) const MOLTEN_FURY: u32 = 457_803;
140    ///<https://wowlab.gg/inspect/spell/11366>
141    pub(crate) const PYROBLAST: u32 = 11366;
142    ///<https://wowlab.gg/inspect/spell/269650>
143    pub(crate) const PYROCLASM: u32 = 269_650;
144    ///<https://wowlab.gg/inspect/spell/451466>
145    pub(crate) const PYROMANIAC: u32 = 451_466;
146    ///<https://wowlab.gg/inspect/spell/449412>
147    pub(crate) const SAVOR_THE_MOMENT: u32 = 449_412;
148    ///<https://wowlab.gg/inspect/spell/450746>
149    pub(crate) const SCALD: u32 = 450_746;
150    ///<https://wowlab.gg/inspect/spell/2948>
151    pub(crate) const SCORCH: u32 = 2948;
152    ///<https://wowlab.gg/inspect/spell/383967>
153    pub(crate) const SLOW_BURN: u32 = 383_967;
154    ///<https://wowlab.gg/inspect/spell/451875>
155    pub(crate) const SPONTANEOUS_COMBUSTION: u32 = 451_875;
156    ///<https://wowlab.gg/inspect/spell/383489>
157    pub(crate) const WILDFIRE: u32 = 383_489;
158}
159pub(crate) mod SET_BONUS {
160    ///<https://wowlab.gg/inspect/spell/1296583>
161    pub(crate) const MID2_FIRE_2PC: u32 = 1_296_583;
162    ///<https://wowlab.gg/inspect/spell/1296584>
163    pub(crate) const MID2_FIRE_4PC: u32 = 1_296_584;
164}
165pub(crate) mod REPORTED_SPELL {
166    ///<https://wowlab.gg/inspect/spell/450499>
167    pub(crate) const ARCANE_BARRAGE: u32 = 450_499;
168    ///<https://wowlab.gg/inspect/spell/448659>
169    pub(crate) const ARCANE_PHOENIX_CONTROLLER: u32 = 448_659;
170    ///<https://wowlab.gg/inspect/spell/453326>
171    pub(crate) const ARCANE_SURGE: u32 = 453_326;
172    ///<https://wowlab.gg/inspect/spell/450421>
173    pub(crate) const GREATER_PYROBLAST: u32 = 450_421;
174    ///<https://wowlab.gg/inspect/spell/12654>
175    pub(crate) const IGNITE: u32 = 12654;
176    ///<https://wowlab.gg/inspect/spell/449560>
177    pub(crate) const METEORITE_BUG_IMPACT: u32 = 449_560;
178    ///<https://wowlab.gg/inspect/spell/456139>
179    pub(crate) const METEORITE_IMPACT: u32 = 456_139;
180    ///<https://wowlab.gg/inspect/spell/450461>
181    pub(crate) const PHOENIX_PYROBLAST: u32 = 450_461;
182    ///<https://wowlab.gg/inspect/spell/460475>
183    pub(crate) const PYROBLAST_PYROMANIAC: u32 = 460_475;
184    ///<https://wowlab.gg/inspect/spell/451466>
185    pub(crate) const PYROMANIAC_CONTROLLER: u32 = 451_466;
186}
187pub(crate) mod HERO {
188    pub(crate) mod FROSTFIRE {
189        pub(crate) mod SPELL {
190            ///<https://wowlab.gg/inspect/spell/1236209>
191            pub(crate) const DUALITY_GLACIAL_SPIKE: u32 = 1_236_209;
192            ///<https://wowlab.gg/inspect/spell/1278079>
193            pub(crate) const FLASH_FREEZEBURN_DAMAGE: u32 = 1_278_079;
194            ///<https://wowlab.gg/inspect/spell/431044>
195            pub(crate) const FROSTFIRE_BOLT: u32 = 431_044;
196            ///<https://wowlab.gg/inspect/spell/431186>
197            pub(crate) const FROSTFIRE_EMPOWERMENT_DAMAGE: u32 = 431_186;
198            ///<https://wowlab.gg/inspect/spell/1262887>
199            pub(crate) const MOLTEN_CHILL_IGNITE: u32 = 1_262_887;
200        }
201        pub(crate) mod AURA {
202            ///<https://wowlab.gg/inspect/spell/431177>
203            pub(crate) const FROSTFIRE_EMPOWERMENT: u32 = 431_177;
204        }
205    }
206    pub(crate) mod SUNFURY {
207        pub(crate) mod SPELL {
208            ///<https://wowlab.gg/inspect/spell/449559>
209            pub(crate) const METEORITE: u32 = 449_559;
210            ///<https://wowlab.gg/inspect/spell/449569>
211            pub(crate) const METEORITE_IMPACT: u32 = 449_569;
212        }
213        pub(crate) mod AURA {
214            ///<https://wowlab.gg/inspect/spell/451073>
215            pub(crate) const GLORIOUS_INCANDESCENCE: u32 = 451_073;
216            ///<https://wowlab.gg/inspect/spell/383874>
217            pub(crate) const HYPERTHERMIA: u32 = 383_874;
218            ///<https://wowlab.gg/inspect/spell/1242220>
219            pub(crate) const HYPERTHERMIA_DAMAGE: u32 = 1_242_220;
220            ///<https://wowlab.gg/inspect/spell/1260277>
221            pub(crate) const LESSER_TIME_WARP: u32 = 1_260_277;
222            ///<https://wowlab.gg/inspect/spell/449314>
223            pub(crate) const MANA_CASCADE: u32 = 449_314;
224            ///<https://wowlab.gg/inspect/spell/448604>
225            pub(crate) const SPELLFIRE_SPHERE: u32 = 448_604;
226        }
227    }
228}
229static HERO_TREE_FROSTFIRE_SPELLS: &[(&str, u32)] = &[
230    ("DUALITY_GLACIAL_SPIKE", 1_236_209),
231    ("FLASH_FREEZEBURN_DAMAGE", 1_278_079),
232    ("FROSTFIRE_BOLT", 431_044),
233    ("FROSTFIRE_EMPOWERMENT_DAMAGE", 431_186),
234    ("MOLTEN_CHILL_IGNITE", 1_262_887),
235];
236static HERO_TREE_FROSTFIRE_AURAS: &[(&str, u32)] = &[("FROSTFIRE_EMPOWERMENT", 431_177)];
237static HERO_TREE_SUNFURY_SPELLS: &[(&str, u32)] = &[
238    ("METEORITE", 449_559),
239    ("METEORITE_IMPACT", 449_569),
240];
241static HERO_TREE_SUNFURY_AURAS: &[(&str, u32)] = &[
242    ("GLORIOUS_INCANDESCENCE", 451_073),
243    ("HYPERTHERMIA", 383_874),
244    ("HYPERTHERMIA_DAMAGE", 1_242_220),
245    ("LESSER_TIME_WARP", 1_260_277),
246    ("MANA_CASCADE", 449_314),
247    ("SPELLFIRE_SPHERE", 448_604),
248];
249pub(crate) mod DAMAGE_SPELL {
250    pub(crate) const FIREBALL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_133;
251    pub(crate) const PYROBLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_11366;
252    pub(crate) const FIRE_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_108853;
253    pub(crate) const FLAMESTRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_2120;
254    pub(crate) const COMBUSTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_190319;
255    pub(crate) const METEOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_153561;
256    pub(crate) const SCORCH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_2948;
257    pub(crate) const FROSTFIRE_BOLT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_431044;
258    pub(crate) const ARCANE_INTELLECT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1459;
259    pub(crate) const IGNITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_12654;
260    pub(crate) const INTENSIFYING_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_419800;
261    pub(crate) const BURNOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1271335;
262    pub(crate) const DUALITY_GLACIAL_SPIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1236209;
263    pub(crate) const FLASH_FREEZEBURN_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1278079;
264    pub(crate) const FROSTFIRE_EMPOWERMENT_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_431186;
265    pub(crate) const MOLTEN_CHILL_IGNITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1262887;
266    pub(crate) const METEORITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_449559;
267    pub(crate) const METEORITE_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_449569;
268}
269pub(crate) mod DAMAGE_AURA {
270    pub(crate) const HEATING_UP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_48107;
271    pub(crate) const HOT_STREAK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_48108;
272    pub(crate) const COMBUSTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_190319;
273    pub(crate) const IGNITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_12654;
274    pub(crate) const CONTROLLED_DESTRUCTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_453268;
275    pub(crate) const HYPERTHERMIA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383874;
276    pub(crate) const HYPERTHERMIA_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1242220;
277    pub(crate) const PYROTECHNICS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_157644;
278    pub(crate) const PYROCLASM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_269651;
279    pub(crate) const FEEL_THE_BURN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383395;
280    pub(crate) const FEVERED_INCANTATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383811;
281    pub(crate) const FIRED_UP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1257350;
282    pub(crate) const HEAT_SHIMMER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_458964;
283    pub(crate) const FROSTFIRE_EMPOWERMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_431177;
284    pub(crate) const ARCANE_INTELLECT_HIGHLIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1459;
285    pub(crate) const SPELLFIRE_SPHERE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_448604;
286    pub(crate) const FIERY_RUSH_EFFECT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383637;
287}
288pub(crate) mod DAMAGE_TALENT {
289    pub(crate) const BURNOUT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1271177;
290    pub(crate) const BURN_IT_ALL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1254512;
291    pub(crate) const CINDERSTORM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1254865;
292    pub(crate) const CODEX_OF_THE_SUNSTRIDERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_449382;
293    pub(crate) const COMBUSTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_190319;
294    pub(crate) const CONFLAGRATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1271171;
295    pub(crate) const CONTROLLED_DESTRUCTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383669;
296    pub(crate) const CRITICAL_MASS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_117216;
297    pub(crate) const DEEP_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_416719;
298    pub(crate) const FEEL_THE_BURN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383391;
299    pub(crate) const FEVERED_INCANTATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383810;
300    pub(crate) const FIERY_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383634;
301    pub(crate) const FIRED_UP_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1257343;
302    pub(crate) const FIRED_UP_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1257349;
303    pub(crate) const FIRED_UP_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_1257348;
304    pub(crate) const FIRESTARTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_205026;
305    pub(crate) const FIRES_IRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_450831;
306    pub(crate) const FIRE_BLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_108853;
307    pub(crate) const FLAMESTRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_2120;
308    pub(crate) const FLAME_ON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_205029;
309    pub(crate) const FROM_THE_ASHES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_342344;
310    pub(crate) const FUEL_THE_FIRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383550;
311    pub(crate) const HEAT_SHIMMER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_457736;
312    pub(crate) const IGNITION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383549;
313    pub(crate) const INFLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_417467;
314    pub(crate) const INTENSIFYING_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_416714;
315    pub(crate) const INVOCATION_ARCANE_PHOENIX: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_448658;
316    pub(crate) const KINDLING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_155148;
317    pub(crate) const MASTER_OF_FLAME: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_384174;
318    pub(crate) const MEMORY_OF_ALAR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_449619;
319    pub(crate) const METEOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_153561;
320    pub(crate) const MOLTEN_FURY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_457803;
321    pub(crate) const PYROBLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_11366;
322    pub(crate) const PYROCLASM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_269650;
323    pub(crate) const PYROMANIAC: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_451466;
324    pub(crate) const SAVOR_THE_MOMENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_449412;
325    pub(crate) const SCALD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_450746;
326    pub(crate) const SCORCH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_2948;
327    pub(crate) const SLOW_BURN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383967;
328    pub(crate) const SPONTANEOUS_COMBUSTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_451875;
329    pub(crate) const WILDFIRE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_383489;
330}
331pub(crate) mod DAMAGE_REPORTED {
332    pub(crate) const ARCANE_BARRAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_450499;
333    pub(crate) const ARCANE_PHOENIX_CONTROLLER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_448659;
334    pub(crate) const ARCANE_SURGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_453326;
335    pub(crate) const GREATER_PYROBLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_450421;
336    pub(crate) const IGNITE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_12654;
337    pub(crate) const METEORITE_BUG_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_449560;
338    pub(crate) const METEORITE_IMPACT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_456139;
339    pub(crate) const PHOENIX_PYROBLAST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_450461;
340    pub(crate) const PYROBLAST_PYROMANIAC: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_460475;
341    pub(crate) const PYROMANIAC_CONTROLLER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ACTION::SPELL_451466;
342}
343pub(crate) mod DAMAGE_EFFECT {
344    pub(crate) const FIRESTARTER_THRESHOLD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_205026_EFFECT_1;
345    pub(crate) const IGNITE_MASTERY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_12846_EFFECT_1;
346    pub(crate) const METEOR_BURN_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_155158_EFFECT_1;
347    pub(crate) const METEOR_BURN_DURATION: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_175396_EFFECT_1;
348    pub(crate) const METEOR_DELAY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_177345_EFFECT_1;
349    pub(crate) const METEOR_IMPACT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_351140_EFFECT_1;
350    pub(crate) const METEORITE_IMPACT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_449569_EFFECT_1;
351    pub(crate) const PHOENIX_ARCANE_BARRAGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_450499_EFFECT_1;
352    pub(crate) const PHOENIX_ARCANE_SURGE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_453326_EFFECT_1;
353    pub(crate) const PHOENIX_GREATER_PYROBLAST_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_450421_EFFECT_1;
354    pub(crate) const PHOENIX_METEORITE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_456139_EFFECT_1;
355    pub(crate) const PHOENIX_PYROBLAST_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_450461_EFFECT_1;
356    pub(crate) const PYROBLAST_PYROMANIAC_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_460475_EFFECT_1;
357    pub(crate) const PYROCLASM_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_269650_EFFECT_1;
358    pub(crate) const BURNOUT_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_1271177_EFFECT_1;
359    pub(crate) const INTENSIFYING_FLAME_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_416714_EFFECT_2;
360    pub(crate) const FIRED_UP_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_1257343_EFFECT_1;
361    pub(crate) const FIRED_UP_COMBUSTION_EXTEND_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_1257348_EFFECT_2;
362    pub(crate) const FIRED_UP_FIRE_BLAST_CDR_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_1257349_EFFECT_1;
363    pub(crate) const BURN_IT_ALL_BASE_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_1254512_EFFECT_2;
364    pub(crate) const BURN_IT_ALL_CRIT_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_1254512_EFFECT_1;
365    pub(crate) const CODEX_COMBUSTION_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_449382_EFFECT_2;
366    pub(crate) const CONTROLLED_DESTRUCTION_PCT_X100: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_383669_EFFECT_2;
367    pub(crate) const SAVOR_CAP_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_449412_EFFECT_2;
368    pub(crate) const SAVOR_PER_SPHERE_MS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::fire_mage::damage::EFFECT::SPELL_449412_EFFECT_1;
369}
370pub(crate) const AURA_HEATING_UP: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_HEATING_UP
371    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
372pub(crate) const AURA_HOT_STREAK: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_HOT_STREAK
373    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
374pub(crate) const AURA_COMBUSTION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_COMBUSTION
375    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
376pub(crate) const AURA_IGNITE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_IGNITE
377    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
378pub(crate) const AURA_CONTROLLED_DESTRUCTION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_CONTROLLED_DESTRUCTION
379    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
380pub(crate) const AURA_HYPERTHERMIA: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_HYPERTHERMIA
381    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
382pub(crate) const AURA_HYPERTHERMIA_DAMAGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_HYPERTHERMIA_DAMAGE
383    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
384pub(crate) const AURA_PYROTECHNICS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_PYROTECHNICS
385    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
386pub(crate) const AURA_PYROCLASM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_PYROCLASM
387    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
388pub(crate) const AURA_FEEL_THE_BURN: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_FEEL_THE_BURN
389    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
390pub(crate) const AURA_FEVERED_INCANTATION: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_FEVERED_INCANTATION
391    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
392pub(crate) const AURA_FIRED_UP: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_FIRED_UP
393    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
394pub(crate) const AURA_HEAT_SHIMMER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_HEAT_SHIMMER
395    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
396pub(crate) const AURA_FROSTFIRE_EMPOWERMENT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_FROSTFIRE_EMPOWERMENT
397    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
398pub(crate) const AURA_ARCANE_INTELLECT_HIGHLIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_ARCANE_INTELLECT_HIGHLIGHT
399    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
400pub(crate) const AURA_SPELLFIRE_SPHERE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_SPELLFIRE_SPHERE
401    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
402pub(crate) const AURA_FIERY_RUSH_EFFECT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::AURA_FIERY_RUSH_EFFECT
403    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
404pub(crate) const AURA_COUNT: usize = 17;
405const _: () = assert!(
406    AURA_COUNT == 17, "AURA index ABI: count changed -- update positional hook consumers"
407);
408pub(crate) const SPELL_FIREBALL: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_FIREBALL
409    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
410pub(crate) const SPELL_PYROBLAST: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_PYROBLAST
411    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
412pub(crate) const SPELL_FIRE_BLAST: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_FIRE_BLAST
413    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
414pub(crate) const SPELL_FLAMESTRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_FLAMESTRIKE
415    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
416pub(crate) const SPELL_COMBUSTION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_COMBUSTION
417    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
418pub(crate) const SPELL_METEOR: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_METEOR
419    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
420pub(crate) const SPELL_SCORCH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_SCORCH
421    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
422pub(crate) const SPELL_FROSTFIRE_BOLT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_FROSTFIRE_BOLT
423    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
424pub(crate) const SPELL_ARCANE_INTELLECT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_ARCANE_INTELLECT
425    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
426pub(crate) const SPELL_IGNITE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_IGNITE
427    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
428pub(crate) const SPELL_INTENSIFYING_FLAME: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_INTENSIFYING_FLAME
429    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
430pub(crate) const SPELL_BURNOUT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::fire_mage::SPELL_BURNOUT
431    .bind(wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF);
432pub(crate) const SPELL_COUNT: usize = 12;
433const _: () = assert!(
434    SPELL_COUNT == 12,
435    "SPELL index ABI: count changed -- update positional hook consumers"
436);
437pub(crate) mod EFFECT {
438    ///<https://wowlab.gg/inspect/spell/205026>
439    pub(crate) const FIRESTARTER_THRESHOLD: (u32, u8) = (205_026, 1);
440    ///<https://wowlab.gg/inspect/spell/12846>
441    pub(crate) const IGNITE_MASTERY: (u32, u8) = (12846, 1);
442    ///<https://wowlab.gg/inspect/spell/155158>
443    pub(crate) const METEOR_BURN_DAMAGE: (u32, u8) = (155_158, 1);
444    ///<https://wowlab.gg/inspect/spell/175396>
445    pub(crate) const METEOR_BURN_DURATION: (u32, u8) = (175_396, 1);
446    ///<https://wowlab.gg/inspect/spell/177345>
447    pub(crate) const METEOR_DELAY: (u32, u8) = (177_345, 1);
448    ///<https://wowlab.gg/inspect/spell/351140>
449    pub(crate) const METEOR_IMPACT_DAMAGE: (u32, u8) = (351_140, 1);
450    ///<https://wowlab.gg/inspect/spell/449569>
451    pub(crate) const METEORITE_IMPACT_DAMAGE: (u32, u8) = (449_569, 1);
452    ///<https://wowlab.gg/inspect/spell/450499>
453    pub(crate) const PHOENIX_ARCANE_BARRAGE_DAMAGE: (u32, u8) = (450_499, 1);
454    ///<https://wowlab.gg/inspect/spell/453326>
455    pub(crate) const PHOENIX_ARCANE_SURGE_DAMAGE: (u32, u8) = (453_326, 1);
456    ///<https://wowlab.gg/inspect/spell/450421>
457    pub(crate) const PHOENIX_GREATER_PYROBLAST_DAMAGE: (u32, u8) = (450_421, 1);
458    ///<https://wowlab.gg/inspect/spell/456139>
459    pub(crate) const PHOENIX_METEORITE_DAMAGE: (u32, u8) = (456_139, 1);
460    ///<https://wowlab.gg/inspect/spell/450461>
461    pub(crate) const PHOENIX_PYROBLAST_DAMAGE: (u32, u8) = (450_461, 1);
462    ///<https://wowlab.gg/inspect/spell/460475>
463    pub(crate) const PYROBLAST_PYROMANIAC_DAMAGE: (u32, u8) = (460_475, 1);
464    ///<https://wowlab.gg/inspect/spell/269650>
465    pub(crate) const PYROCLASM_CHANCE: (u32, u8) = (269_650, 1);
466    ///<https://wowlab.gg/inspect/spell/1271177>
467    pub(crate) const BURNOUT_PCT: (u32, u8) = (1_271_177, 1);
468    ///<https://wowlab.gg/inspect/spell/416714>
469    pub(crate) const INTENSIFYING_FLAME_PCT: (u32, u8) = (416_714, 2);
470    ///<https://wowlab.gg/inspect/spell/1257343>
471    pub(crate) const FIRED_UP_CHANCE: (u32, u8) = (1_257_343, 1);
472    ///<https://wowlab.gg/inspect/spell/1257348>
473    pub(crate) const FIRED_UP_COMBUSTION_EXTEND_MS: (u32, u8) = (1_257_348, 2);
474    ///<https://wowlab.gg/inspect/spell/1257349>
475    pub(crate) const FIRED_UP_FIRE_BLAST_CDR_MS: (u32, u8) = (1_257_349, 1);
476    ///<https://wowlab.gg/inspect/spell/1254512>
477    pub(crate) const BURN_IT_ALL_BASE_PCT: (u32, u8) = (1_254_512, 2);
478    ///<https://wowlab.gg/inspect/spell/1254512>
479    pub(crate) const BURN_IT_ALL_CRIT_PCT: (u32, u8) = (1_254_512, 1);
480    ///<https://wowlab.gg/inspect/spell/449382>
481    pub(crate) const CODEX_COMBUSTION_PCT: (u32, u8) = (449_382, 2);
482    ///<https://wowlab.gg/inspect/spell/383669>
483    pub(crate) const CONTROLLED_DESTRUCTION_PCT_X100: (u32, u8) = (383_669, 2);
484    ///<https://wowlab.gg/inspect/spell/449412>
485    pub(crate) const SAVOR_CAP_MS: (u32, u8) = (449_412, 2);
486    ///<https://wowlab.gg/inspect/spell/449412>
487    pub(crate) const SAVOR_PER_SPHERE_MS: (u32, u8) = (449_412, 1);
488}
489static REPORTED_SPELLS: &[(&str, u32)] = &[
490    ("arcane_barrage", 450_499),
491    ("arcane_phoenix_controller", 448_659),
492    ("arcane_surge", 453_326),
493    ("greater_pyroblast", 450_421),
494    ("ignite", 12654),
495    ("meteorite_bug_impact", 449_560),
496    ("meteorite_impact", 456_139),
497    ("phoenix_pyroblast", 450_461),
498    ("pyroblast_pyromaniac", 460_475),
499    ("pyromaniac_controller", 451_466),
500];
501static DECLARED_SPELL_IDS: &[u32] = &[
502    133, 11366, 108_853, 2120, 190_319, 153_561, 2948, 431_044, 1459, 12654, 419_800,
503    1_271_335, 48107, 48108, 453_268, 383_874, 1_242_220, 157_644, 269_651, 383_395,
504    383_811, 1_257_350, 458_964, 431_177, 448_604, 383_637, 1_271_177, 1_254_512,
505    1_254_865, 449_382, 1_271_171, 383_669, 117_216, 416_719, 383_391, 383_810, 383_634,
506    1_257_343, 1_257_349, 1_257_348, 205_026, 450_831, 205_029, 342_344, 383_550,
507    457_736, 383_549, 417_467, 416_714, 448_658, 155_148, 384_174, 449_619, 457_803,
508    269_650, 451_466, 449_412, 450_746, 383_967, 451_875, 383_489, 12846, 155_158,
509    175_396, 177_345, 351_140, 448_659, 449_560, 449_569, 450_421, 450_461, 450_499,
510    453_326, 456_139, 460_475, 1_236_209, 1_278_079, 431_186, 1_262_887, 449_559,
511    451_073, 1_260_277, 449_314,
512];
513static DECLARED_AURA_IDS: &[u32] = &[
514    48107, 48108, 190_319, 12654, 453_268, 383_874, 1_242_220, 157_644, 269_651, 383_395,
515    383_811, 1_257_350, 458_964, 431_177, 1459, 448_604, 383_637, 431_177, 451_073,
516    383_874, 1_242_220, 1_260_277, 449_314, 448_604,
517];
518static TALENTS: &[(&str, u32)] = &[
519    ("BURNOUT", TALENT::BURNOUT),
520    ("BURN_IT_ALL", TALENT::BURN_IT_ALL),
521    ("CINDERSTORM", TALENT::CINDERSTORM),
522    ("CODEX_OF_THE_SUNSTRIDERS", TALENT::CODEX_OF_THE_SUNSTRIDERS),
523    ("COMBUSTION", TALENT::COMBUSTION),
524    ("CONFLAGRATION", TALENT::CONFLAGRATION),
525    ("CONTROLLED_DESTRUCTION", TALENT::CONTROLLED_DESTRUCTION),
526    ("CRITICAL_MASS", TALENT::CRITICAL_MASS),
527    ("DEEP_IMPACT", TALENT::DEEP_IMPACT),
528    ("FEEL_THE_BURN", TALENT::FEEL_THE_BURN),
529    ("FEVERED_INCANTATION", TALENT::FEVERED_INCANTATION),
530    ("FIERY_RUSH", TALENT::FIERY_RUSH),
531    ("FIRED_UP_1", TALENT::FIRED_UP_1),
532    ("FIRED_UP_2", TALENT::FIRED_UP_2),
533    ("FIRED_UP_3", TALENT::FIRED_UP_3),
534    ("FIRESTARTER", TALENT::FIRESTARTER),
535    ("FIRES_IRE", TALENT::FIRES_IRE),
536    ("FIRE_BLAST", TALENT::FIRE_BLAST),
537    ("FLAMESTRIKE", TALENT::FLAMESTRIKE),
538    ("FLAME_ON", TALENT::FLAME_ON),
539    ("FROM_THE_ASHES", TALENT::FROM_THE_ASHES),
540    ("FUEL_THE_FIRE", TALENT::FUEL_THE_FIRE),
541    ("HEAT_SHIMMER", TALENT::HEAT_SHIMMER),
542    ("IGNITION", TALENT::IGNITION),
543    ("INFLAME", TALENT::INFLAME),
544    ("INTENSIFYING_FLAME", TALENT::INTENSIFYING_FLAME),
545    ("INVOCATION_ARCANE_PHOENIX", TALENT::INVOCATION_ARCANE_PHOENIX),
546    ("KINDLING", TALENT::KINDLING),
547    ("MASTER_OF_FLAME", TALENT::MASTER_OF_FLAME),
548    ("MEMORY_OF_ALAR", TALENT::MEMORY_OF_ALAR),
549    ("METEOR", TALENT::METEOR),
550    ("MOLTEN_FURY", TALENT::MOLTEN_FURY),
551    ("PYROBLAST", TALENT::PYROBLAST),
552    ("PYROCLASM", TALENT::PYROCLASM),
553    ("PYROMANIAC", TALENT::PYROMANIAC),
554    ("SAVOR_THE_MOMENT", TALENT::SAVOR_THE_MOMENT),
555    ("SCALD", TALENT::SCALD),
556    ("SCORCH", TALENT::SCORCH),
557    ("SLOW_BURN", TALENT::SLOW_BURN),
558    ("SPONTANEOUS_COMBUSTION", TALENT::SPONTANEOUS_COMBUSTION),
559    ("WILDFIRE", TALENT::WILDFIRE),
560];
561pub(crate) mod FIRE_MAGE {
562    pub(crate) const FIREBALL_CASTS: u32 = 0;
563    pub(crate) const PYROBLAST_CASTS: u32 = 1;
564    pub(crate) const FIRE_BLAST_CASTS: u32 = 2;
565    pub(crate) const COMBUSTION_CASTS: u32 = 3;
566    pub(crate) const METEOR_CASTS: u32 = 4;
567    pub(crate) const FLAMESTRIKE_CASTS: u32 = 5;
568    pub(crate) const COMBUSTION_UPTIME_MS: u32 = 6;
569    pub(crate) const IGNITE_UPTIME_MS: u32 = 7;
570}
571fn aura_heating_up(
572    a: AuraDefinitionDraft,
573    data: &ResolvedGameData,
574) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
575    Ok(
576        a
577            .on_player()
578            .apply_base_from_data(data, 48107)?
579            .max_stacks(
580                data
581                    .require_aura_max_stacks(
582                        wowlab_types::sim::SpellIdx::from_raw(48107),
583                    )?,
584            ),
585    )
586}
587fn aura_hot_streak(
588    a: AuraDefinitionDraft,
589    data: &ResolvedGameData,
590) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
591    Ok(
592        a
593            .on_player()
594            .apply_base_from_data(data, 48108)?
595            .max_stacks(
596                data
597                    .require_aura_max_stacks(
598                        wowlab_types::sim::SpellIdx::from_raw(48108),
599                    )?,
600            ),
601    )
602}
603fn aura_combustion(
604    a: AuraDefinitionDraft,
605    data: &ResolvedGameData,
606) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
607    Ok(
608        a
609            .on_player()
610            .apply_base_from_data(data, 190_319)?
611            .max_stacks(
612                data
613                    .require_aura_max_stacks(
614                        wowlab_types::sim::SpellIdx::from_raw(190_319),
615                    )?,
616            )
617            .on_expire(crate::hooks::fire_mage::combustion_expire_hook),
618    )
619}
620fn aura_ignite(
621    a: AuraDefinitionDraft,
622    data: &ResolvedGameData,
623) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
624    a.on_target()
625        .apply_base_from_data(data, 12654)?
626        .max_stacks(
627            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(12654))?,
628        )
629        .periodic_residual_damage(
630            wowlab_engine_combat::validated_milliseconds(
631                data.period(wowlab_types::sim::SpellIdx::from_raw(12654), 1),
632                12654,
633                "periodic_residual_damage.tick_ms",
634            )?,
635        )
636        .apply_periodic_behavior_from_data(data, 12654)
637}
638fn aura_controlled_destruction(
639    a: AuraDefinitionDraft,
640    data: &ResolvedGameData,
641) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
642    Ok(
643        a
644            .on_target()
645            .apply_base_from_data(data, 453_268)?
646            .max_stacks(
647                data
648                    .require_aura_max_stacks(
649                        wowlab_types::sim::SpellIdx::from_raw(453_268),
650                    )?,
651            ),
652    )
653}
654fn aura_hyperthermia(
655    a: AuraDefinitionDraft,
656    data: &ResolvedGameData,
657) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
658    Ok(
659        a
660            .on_player()
661            .duration_ms(
662                wowlab_engine_combat::validated_milliseconds(
663                    (f64::from(
664                        data
665                            .require_aura_duration_ms(
666                                wowlab_types::sim::SpellIdx::from_raw(383_874),
667                            )?,
668                    )) * 0.8,
669                    383_874,
670                    "aura.duration_ms",
671                )?,
672            )
673            .apply_periodic_effect_from_data(data, 383_874)?
674            .apply_duration_behavior_from_data(data, 383_874)?
675            .apply_timing_modifiers_from_data(data, 383_874)?
676            .max_stacks(
677                data
678                    .require_aura_max_stacks(
679                        wowlab_types::sim::SpellIdx::from_raw(383_874),
680                    )?,
681            )
682            .crit_chance_spells(100.0, &[11366, 2120])?
683            .apply_periodic_behavior_from_data(data, 383_874)?
684            .on_expire(crate::hooks::fire_mage::hyperthermia_expire_hook),
685    )
686}
687fn aura_hyperthermia_damage(
688    a: AuraDefinitionDraft,
689    data: &ResolvedGameData,
690) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
691    Ok(
692        a
693            .on_player()
694            .apply_base_from_data(data, 1_242_220)?
695            .max_stacks(
696                data
697                    .require_aura_max_stacks(
698                        wowlab_types::sim::SpellIdx::from_raw(1_242_220),
699                    )?,
700            ),
701    )
702}
703fn aura_pyrotechnics(
704    a: AuraDefinitionDraft,
705    data: &ResolvedGameData,
706) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
707    a.on_player()
708        .apply_base_from_data(data, 157_644)?
709        .max_stacks(
710            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(157_644))?,
711        )
712        .crit_chance_spells(20.0, &[133])
713}
714fn aura_pyroclasm(
715    a: AuraDefinitionDraft,
716    data: &ResolvedGameData,
717) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
718    Ok(
719        a
720            .on_player()
721            .apply_base_from_data(data, 269_651)?
722            .max_stacks(
723                wowlab_engine_combat::validated_max_stacks(
724                    2.0,
725                    269_651,
726                    "aura.max_stacks",
727                )?,
728            ),
729    )
730}
731fn aura_feel_the_burn(
732    a: AuraDefinitionDraft,
733    data: &ResolvedGameData,
734) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
735    Ok(
736        a
737            .on_player()
738            .apply_base_from_data(data, 383_395)?
739            .max_stacks(
740                data
741                    .require_aura_max_stacks(
742                        wowlab_types::sim::SpellIdx::from_raw(383_395),
743                    )?,
744            ),
745    )
746}
747fn aura_fevered_incantation(
748    a: AuraDefinitionDraft,
749    data: &ResolvedGameData,
750) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
751    a.on_player()
752        .apply_base_from_data(data, 383_811)?
753        .max_stacks(
754            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(383_811))?,
755        )
756        .crit_damage_spells(2.0, &[133, 11366, 108_853, 2120, 153_561, 2948, 431_044])
757}
758fn aura_fired_up(
759    a: AuraDefinitionDraft,
760    data: &ResolvedGameData,
761) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
762    Ok(
763        a
764            .on_player()
765            .apply_base_from_data(data, 1_257_350)?
766            .max_stacks(
767                data
768                    .require_aura_max_stacks(
769                        wowlab_types::sim::SpellIdx::from_raw(1_257_350),
770                    )?,
771            )
772            .damage_multiplier_stacking(
773                (data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_257_350), 1))
774                    * 0.01,
775                (data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_257_350), 1))
776                    * 0.01,
777            )?
778            .async_stacks(),
779    )
780}
781fn aura_heat_shimmer(
782    a: AuraDefinitionDraft,
783    data: &ResolvedGameData,
784) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
785    Ok(
786        a
787            .on_player()
788            .apply_base_from_data(data, 458_964)?
789            .max_stacks(
790                data
791                    .require_aura_max_stacks(
792                        wowlab_types::sim::SpellIdx::from_raw(458_964),
793                    )?,
794            ),
795    )
796}
797fn aura_frostfire_empowerment(
798    a: AuraDefinitionDraft,
799    data: &ResolvedGameData,
800) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
801    Ok(
802        a
803            .on_player()
804            .apply_base_from_data(data, 431_177)?
805            .max_stacks(
806                data
807                    .require_aura_max_stacks(
808                        wowlab_types::sim::SpellIdx::from_raw(431_177),
809                    )?,
810            ),
811    )
812}
813fn aura_arcane_intellect_highlight(
814    a: AuraDefinitionDraft,
815    data: &ResolvedGameData,
816) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
817    Ok(
818        a
819            .on_player()
820            .apply_base_from_data(data, 1459)?
821            .max_stacks(
822                data
823                    .require_aura_max_stacks(
824                        wowlab_types::sim::SpellIdx::from_raw(1459),
825                    )?,
826            ),
827    )
828}
829fn aura_spellfire_sphere(
830    a: AuraDefinitionDraft,
831    data: &ResolvedGameData,
832) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
833    Ok(
834        a
835            .on_player()
836            .duration_ms(
837                wowlab_engine_combat::validated_milliseconds(
838                    0.0,
839                    448_604,
840                    "aura.duration_ms",
841                )?,
842            )
843            .apply_periodic_effect_from_data(data, 448_604)?
844            .max_stacks(
845                data
846                    .require_aura_max_stacks(
847                        wowlab_types::sim::SpellIdx::from_raw(448_604),
848                    )?,
849            )
850            .apply_at_max_stacks(),
851    )
852}
853fn aura_fiery_rush_effect(
854    a: AuraDefinitionDraft,
855    data: &ResolvedGameData,
856) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
857    Ok(
858        a
859            .on_player()
860            .apply_base_from_data(data, 383_637)?
861            .max_stacks(
862                data
863                    .require_aura_max_stacks(
864                        wowlab_types::sim::SpellIdx::from_raw(383_637),
865                    )?,
866            ),
867    )
868}
869fn spell_fireball(
870    s: SpellDefinitionDraft,
871    data: &ResolvedGameData,
872) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
873    Ok(
874        s
875            .apply_base_from_data(data, 133)?
876            .travel_time(
877                wowlab_engine_combat::validated_milliseconds(
878                    200.0,
879                    133,
880                    "spell.travel_time_ms",
881                )?,
882            )
883            .apply_aoe_from_data(data)
884            .on_cast(crate::hooks::fire_mage::fireball_hook),
885    )
886}
887fn spell_pyroblast(
888    s: SpellDefinitionDraft,
889    data: &ResolvedGameData,
890) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
891    Ok(
892        s
893            .apply_base_from_data(data, 11366)?
894            .cast_time(
895                wowlab_engine_combat::validated_milliseconds(
896                    4500.0,
897                    11366,
898                    "spell.cast_time_ms",
899                )?,
900            )
901            .apply_aoe_from_data(data)
902            .on_cast(crate::hooks::fire_mage::pyroblast_hook),
903    )
904}
905fn spell_fire_blast(
906    s: SpellDefinitionDraft,
907    data: &ResolvedGameData,
908) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
909    Ok(
910        s
911            .apply_base_from_data(data, 108_853)?
912            .usable_while_casting()
913            .guaranteed_crit()
914            .apply_aoe_from_data(data)
915            .on_cast(crate::hooks::fire_mage::fire_blast_hook),
916    )
917}
918fn spell_flamestrike(
919    s: SpellDefinitionDraft,
920    data: &ResolvedGameData,
921) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
922    Ok(
923        s
924            .apply_base_from_data(data, 2120)?
925            .apply_aoe_from_data(data)
926            .on_cast(crate::hooks::fire_mage::flamestrike_hook),
927    )
928}
929fn spell_combustion(
930    s: SpellDefinitionDraft,
931    data: &ResolvedGameData,
932) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
933    Ok(
934        s
935            .apply_base_from_data(data, 190_319)?
936            .applies_inferred_aura(AURA_COMBUSTION, 190_319)
937            .apply_aoe_from_data(data)
938            .on_cast(crate::hooks::fire_mage::combustion_hook),
939    )
940}
941fn spell_meteor(
942    s: SpellDefinitionDraft,
943    data: &ResolvedGameData,
944) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
945    Ok(
946        s
947            .apply_base_from_data(data, 153_561)?
948            .apply_aoe_from_data(data)
949            .on_cast(crate::hooks::fire_mage::meteor_hook),
950    )
951}
952fn spell_scorch(
953    s: SpellDefinitionDraft,
954    data: &ResolvedGameData,
955) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
956    Ok(s.apply_base_from_data(data, 2948)?.apply_aoe_from_data(data))
957}
958fn spell_frostfire_bolt(
959    s: SpellDefinitionDraft,
960    data: &ResolvedGameData,
961) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
962    Ok(s.apply_base_from_data(data, 431_044)?.apply_aoe_from_data(data))
963}
964fn spell_arcane_intellect(
965    s: SpellDefinitionDraft,
966    data: &ResolvedGameData,
967) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
968    Ok(
969        s
970            .apply_base_from_data(data, 1459)?
971            .without_data_damage()
972            .applies_inferred_aura(AURA_ARCANE_INTELLECT_HIGHLIGHT, 1459)
973            .apply_aoe_from_data(data),
974    )
975}
976fn spell_ignite(
977    s: SpellDefinitionDraft,
978    data: &ResolvedGameData,
979) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
980    Ok(
981        s
982            .apply_base_from_data(data, 12654)?
983            .applies_inferred_aura(AURA_IGNITE, 12654)
984            .apply_aoe_from_data(data),
985    )
986}
987fn spell_intensifying_flame(
988    s: SpellDefinitionDraft,
989    data: &ResolvedGameData,
990) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
991    Ok(s.apply_base_from_data(data, 419_800)?.apply_aoe_from_data(data))
992}
993fn spell_burnout(
994    s: SpellDefinitionDraft,
995    data: &ResolvedGameData,
996) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
997    Ok(s.apply_base_from_data(data, 1_271_335)?.apply_aoe_from_data(data))
998}
999pub(crate) fn build_combat_system_draft(
1000    params: &wowlab_engine_ports::HandlerParams<'_>,
1001) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1002    let builder = CombatSystemBuilder::new(params.stats.clone())
1003        .spec_id(SpecId::Fire)
1004        .spec_identity(
1005            wowlab_engine_combat::generated_identities::specs::fire_mage::PROOF,
1006        )
1007        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1008        .effect_identities(
1009            wowlab_engine_combat::generated_identities::specs::fire_mage::damage::ALL,
1010        )
1011        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1012        .mastery_spell(12846)
1013        .mastery_hook(crate::hooks::fire_mage::mastery)
1014        .resource(
1015            "mana",
1016            100_000.0,
1017            params
1018                .game_data
1019                .power_regen_for_max(0, 100_000.0)
1020                .ok_or_else(|| {
1021                    wowlab_engine_ports::EngineError::spec_construction(
1022                        "missing power-type power_regen_for_max for type_id 0",
1023                    )
1024                })?,
1025        )
1026        .resource_type_id(0)
1027        .resource_start(100_000.0)
1028        .precombat_aura(AURA_SPELLFIRE_SPHERE)
1029        .aura("heating_up", AURA::HEATING_UP, |a| aura_heating_up(a, &params.game_data))
1030        .aura("hot_streak", AURA::HOT_STREAK, |a| aura_hot_streak(a, &params.game_data))
1031        .aura("combustion", AURA::COMBUSTION, |a| aura_combustion(a, &params.game_data))
1032        .aura("ignite", AURA::IGNITE, |a| aura_ignite(a, &params.game_data))
1033        .aura(
1034            "controlled_destruction",
1035            AURA::CONTROLLED_DESTRUCTION,
1036            |a| aura_controlled_destruction(a, &params.game_data),
1037        )
1038        .aura(
1039            "hyperthermia",
1040            AURA::HYPERTHERMIA,
1041            |a| aura_hyperthermia(a, &params.game_data),
1042        )
1043        .aura(
1044            "hyperthermia_damage",
1045            AURA::HYPERTHERMIA_DAMAGE,
1046            |a| aura_hyperthermia_damage(a, &params.game_data),
1047        )
1048        .aura(
1049            "pyrotechnics",
1050            AURA::PYROTECHNICS,
1051            |a| aura_pyrotechnics(a, &params.game_data),
1052        )
1053        .aura("pyroclasm", AURA::PYROCLASM, |a| aura_pyroclasm(a, &params.game_data))
1054        .aura(
1055            "feel_the_burn",
1056            AURA::FEEL_THE_BURN,
1057            |a| aura_feel_the_burn(a, &params.game_data),
1058        )
1059        .aura(
1060            "fevered_incantation",
1061            AURA::FEVERED_INCANTATION,
1062            |a| aura_fevered_incantation(a, &params.game_data),
1063        )
1064        .aura("fired_up", AURA::FIRED_UP, |a| aura_fired_up(a, &params.game_data))
1065        .aura(
1066            "heat_shimmer",
1067            AURA::HEAT_SHIMMER,
1068            |a| aura_heat_shimmer(a, &params.game_data),
1069        )
1070        .aura(
1071            "frostfire_empowerment",
1072            AURA::FROSTFIRE_EMPOWERMENT,
1073            |a| aura_frostfire_empowerment(a, &params.game_data),
1074        )
1075        .aura(
1076            "arcane_intellect_highlight",
1077            AURA::ARCANE_INTELLECT_HIGHLIGHT,
1078            |a| aura_arcane_intellect_highlight(a, &params.game_data),
1079        )
1080        .aura(
1081            "spellfire_sphere",
1082            AURA::SPELLFIRE_SPHERE,
1083            |a| aura_spellfire_sphere(a, &params.game_data),
1084        )
1085        .aura(
1086            "fiery_rush_effect",
1087            AURA::FIERY_RUSH_EFFECT,
1088            |a| aura_fiery_rush_effect(a, &params.game_data),
1089        )
1090        .spell("fireball", SPELL::FIREBALL, |s| spell_fireball(s, &params.game_data))
1091        .spell("pyroblast", SPELL::PYROBLAST, |s| spell_pyroblast(s, &params.game_data))
1092        .spell(
1093            "fire_blast",
1094            SPELL::FIRE_BLAST,
1095            |s| spell_fire_blast(s, &params.game_data),
1096        )
1097        .spell(
1098            "flamestrike",
1099            SPELL::FLAMESTRIKE,
1100            |s| spell_flamestrike(s, &params.game_data),
1101        )
1102        .spell(
1103            "combustion",
1104            SPELL::COMBUSTION,
1105            |s| spell_combustion(s, &params.game_data),
1106        )
1107        .spell("meteor", SPELL::METEOR, |s| spell_meteor(s, &params.game_data))
1108        .spell("scorch", SPELL::SCORCH, |s| spell_scorch(s, &params.game_data))
1109        .spell(
1110            "frostfire_bolt",
1111            SPELL::FROSTFIRE_BOLT,
1112            |s| spell_frostfire_bolt(s, &params.game_data),
1113        )
1114        .spell(
1115            "arcane_intellect",
1116            SPELL::ARCANE_INTELLECT,
1117            |s| spell_arcane_intellect(s, &params.game_data),
1118        )
1119        .spell("ignite", SPELL::IGNITE, |s| spell_ignite(s, &params.game_data))
1120        .spell(
1121            "intensifying_flame",
1122            SPELL::INTENSIFYING_FLAME,
1123            |s| spell_intensifying_flame(s, &params.game_data),
1124        )
1125        .spell("burnout", SPELL::BURNOUT, |s| spell_burnout(s, &params.game_data))
1126        .game_data(params.game_data.clone())
1127        .talent_spell_ids(TALENTS)
1128        .talent_selections(params.talent_selections)
1129        .talent_gated_aura_effect(TALENT::FIERY_RUSH, AURA_COMBUSTION, 383_637, 1)
1130        .set_bonus_auras(params.set_bonus_auras)
1131        .encounter(params.encounter.clone());
1132    let builder = crate::generated::items::register_equipped(
1133        builder,
1134        &params.game_data,
1135        params.equipped_items,
1136    )?;
1137
1138    builder.into_draft()
1139}
1140fn new_handler(
1141    params: wowlab_engine_ports::HandlerParams<'_>,
1142) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
1143    let handler = crate::composition::compose_handler(
1144        build_combat_system_draft,
1145        &params,
1146        crate::hooks::fire_mage::FireHandler::new,
1147    )?;
1148
1149    Ok(Box::new(handler))
1150}
1151static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
1152    primary_resource: ResourceType::Mana,
1153    secondary_resource: None,
1154    spell_ids: DECLARED_SPELL_IDS,
1155    aura_ids: DECLARED_AURA_IDS,
1156    server_proc_entries: &[],
1157    talents: TALENTS,
1158    rotation_field_schema: &[],
1159    metrics_plugin_id: None,
1160    hero_talent_trees: &[
1161        HeroTalentTreeDesc {
1162            name: "Frostfire",
1163            spells: HERO_TREE_FROSTFIRE_SPELLS,
1164            auras: HERO_TREE_FROSTFIRE_AURAS,
1165        },
1166        HeroTalentTreeDesc {
1167            name: "Sunfury",
1168            spells: HERO_TREE_SUNFURY_SPELLS,
1169            auras: HERO_TREE_SUNFURY_AURAS,
1170        },
1171    ],
1172    reported_spells: REPORTED_SPELLS,
1173    masked_passive_effects: &[],
1174    passive_effect_overrides: &[],
1175};
1176pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
1177    spec_id: SpecId::Fire,
1178    display_name: "Fire Mage",
1179    metadata: DECLARED_METADATA,
1180    handler_factory: new_handler,
1181};
1182wowlab_engine_combat::smoke_test!(build_combat_system_draft);