1use super::{ModifierFilter, ModifierOperation, SemanticSupport};
2
3const UNKNOWN_AURA_EVIDENCE: &str = "unknown SimC aura subtype requires behavior evidence";
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq, num_enum::TryFromPrimitive)]
7#[repr(i32)]
8#[non_exhaustive]
9pub enum StatModifierKind {
10 Primary = -2,
11 All = -1,
12 Strength = 0,
13 Agility = 1,
14 Stamina = 2,
15 Intellect = 3,
16}
17
18impl StatModifierKind {
19 #[must_use]
20 pub const fn from_attribute(attribute: wowlab_types::game::Attribute) -> Self {
21 match attribute {
22 wowlab_types::game::Attribute::Strength => Self::Strength,
23 wowlab_types::game::Attribute::Agility => Self::Agility,
24 wowlab_types::game::Attribute::Stamina => Self::Stamina,
25 wowlab_types::game::Attribute::Intellect => Self::Intellect,
26 }
27 }
28
29 #[must_use]
30 pub const fn stat_index(self) -> Option<usize> {
31 match self {
32 Self::Strength | Self::Agility | Self::Stamina | Self::Intellect => Some(self as usize),
33 Self::Primary | Self::All => None,
34 }
35 }
36
37 #[must_use]
38 pub const fn matches(self, attribute: wowlab_types::game::Attribute) -> bool {
39 match self {
40 Self::Primary => false,
41 Self::All => true,
42 Self::Strength => matches!(attribute, wowlab_types::game::Attribute::Strength),
43 Self::Agility => matches!(attribute, wowlab_types::game::Attribute::Agility),
44 Self::Stamina => matches!(attribute, wowlab_types::game::Attribute::Stamina),
45 Self::Intellect => matches!(attribute, wowlab_types::game::Attribute::Intellect),
46 }
47 }
48}
49
50#[must_use]
52pub const fn is_primary_stat_misc(misc_value_0: i32) -> bool {
53 misc_value_0 == StatModifierKind::Primary as i32
54}
55
56#[derive(Clone, Copy, Debug, Eq, PartialEq)]
58#[repr(i32)]
59#[non_exhaustive]
60pub enum AuraSubtypeKind {
61 None = 0,
62 PeriodicDamage = 3,
63 Dummy = 4,
64 ModConfuse = 5,
65 Fear = 7,
66 PeriodicHeal = 8,
67 Threat = 10,
68 Stun = 12,
69 Invisibility = 18,
70 PeriodicHealPercent = 20,
71 PeriodicTriggerSpell = 23,
72 PeriodicEnergize = 24,
73 Root = 26,
74 Silence = 27,
75 SpellReflection = 28,
76 ModStat = 29,
77 ModIncreaseMovementSpeed = 31,
78 ModDecreaseMovementSpeed = 33,
79 ModIncreaseEnergy = 35,
80 Shapeshift = 36,
81 SchoolImmunity = 39,
82 DisableStealth = 41,
83 ProcTriggerSpell = 42,
84 ModParryPercent = 47,
85 ModDodgePercent = 49,
86 PeriodicLeech = 53,
87 ChangeModel = 56,
88 ModSpellCritChance = 57,
89 PacifySilence = 60,
90 ScalePercentStacking = 61,
91 ModAdditionalPowerCost = 63,
92 AbsorbDamage = 69,
93 SpellReflectionSchool = 74,
94 Unknown75 = 75,
95 MechanicImmunity = 77,
96 ModDamageDonePercent = 79,
97 TransferDamagePercent = 81,
98 ModPowerRegen = 85,
99 ModDamageTakenPercent = 87,
100 PeriodicMaxHealthDamage = 89,
101 InterruptRegen = 94,
102 ModArmorPercent = 101,
103 TemporaryThreatReduction = 103,
104 Levitate = 106,
105 AddFlatModifier = 107,
106 AddPercentModifier = 108,
107 ModPowerRegenPercent = 110,
108 ModHealingFlat = 115,
109 ModHealingReceivedPercent = 118,
110 ModIncreaseMovementSpeedStacking = 129,
111 IncreaseHealthPercent = 133,
112 ModManaRegenInterrupted = 134,
113 ModHealingDoneFlat = 135,
114 ModHealingDonePercent = 136,
115 ModTotalStatPercentage = 137,
116 ModBaseResistance = 142,
117 UnknownPartyAura145 = 145,
118 CreatureImmunities = 147,
119 ModChargeCooldownRechargeRateCategory = 148,
120 ModAggroDistance = 152,
121 ModCritDamageMultiplier = 163,
122 IncreaseMountedSpeedPercent = 172,
123 ModCritChanceVersusTargetHealth = 183,
124 ModAttackerSpellHitChance = 186,
125 ModAttackerMeleeCritChance = 187,
126 ModAttackerRangedCritChance = 188,
127 ModRating = 189,
128 UseBaseMoveSpeed = 191,
129 HasteAll = 193,
130 Unknown195 = 195,
131 ModAttackerCritChance = 197,
132 ModRageGeneratedFromAutoAttacks = 213,
133 AddPercentLabelModifier = 218,
134 AddFlatLabelModifier = 219,
135 ModSpellSchool = 220,
136 PeriodicDummy = 226,
137 ModAoeDamageTakenPercent = 229,
138 TriggerSpellWithValue = 231,
139 ModMechanicDurationPercentStacking = 232,
140 ModDebuffDurationPercent = 245,
141 ModDamagePercentDoneByTargetAuraMechanic = 249,
142 ModMechanicDamageTakenPercent = 255,
143 ModPeriodicHealingPercent = 259,
144 Unknown260 = 260,
145 IgnoreAuraState = 262,
146 DisableAbilities = 263,
147 ModDamageTakenFromCaster = 270,
148 ModDamageTakenFromCasterSpells = 271,
149 ModStanceMask = 275,
150 ModTargetArmorPercent = 280,
151 ModHealingTakenFromCasterPercent = 283,
152 CastLinkedSpellWithValue = 285,
153 ModCooldownRechargeRatePercent = 286,
154 DeflectSpells = 287,
155 ModAllCritChance = 290,
156 PreventRegeneratePower = 294,
157 ShareDamagePercent = 300,
158 AbsorbHealing = 301,
159 ModMinSpeedPercent = 305,
160 AllowCastingWhileMovingLabel = 307,
161 ModCreatureAoeDamageAvoidance = 310,
162 ReplaceAnimationSet = 312,
163 AbsorbOverkillDamageFromSchool = 316,
164 ModMasteryPercent = 318,
165 ModMeleeAutoAttackSpeedPercent = 319,
166 ApplyHastedGcdLabel = 320,
167 CastWhileMovingWhitelist = 330,
168 OverrideActionSpell = 332,
169 ModAutoAttackCritChance = 334,
170 Unknown335 = 335,
171 ModCooldownTimeCategory = 341,
172 ModRangedAndMeleeAutoAttackSpeedPercent = 342,
173 ModAutoAttackDamageTakenFromCaster = 343,
174 ModAutoAttackDamage = 344,
175 IgnoreArmorPercent = 345,
176 ModSpellHastePercent = 355,
177 OverrideAutoAttackWithAbility = 361,
178 OverrideSpellPowerByAttackPowerPercent = 366,
179 CastWhileMoving = 377,
180 ModManaRegenPercent = 379,
181 ModDamageTakenFromCasterGuardian = 380,
182 ModDamageTakenFromCasterPet = 381,
183 ModPetStat = 382,
184 AreaTrigger = 395,
185 ResourceThresholdTrigger = 396,
186 ModTimeRate = 399,
187 OverrideAttackPowerBySpellPowerPercent = 404,
188 ModRatingMultiplier = 405,
189 SetActionButtonSpellCount = 408,
190 ModCooldownChargeCategory = 411,
191 HastedCooldown = 416,
192 HastedGlobalCooldown = 417,
193 ModMaxResource = 418,
194 ModAbsorbDonePercent = 421,
195 ModAbsorbReceivedPercent = 422,
196 ModManaCostPercent = 423,
197 ModPetDamageDone = 429,
198 ModLeechPercent = 443,
199 ModRechargeTimeCategory = 453,
200 ModRechargeTimePercentCategory = 454,
201 RootRespectsThreatTable = 455,
202 HastedCooldownCategory = 457,
203 ModBonusStatPercent = 467,
204 TriggerSpellBasedOnHealthPercent = 468,
205 ModTimeRateLabel = 470,
206 ModVersatilityPercent = 471,
207 TriggerSpellOnExpire = 495,
208 IgnoreSpellChargeCooldown = 500,
209 ModGuardianDamageDonePercent = 531,
210 ModDamageTakenFromCasterSpellsLabel = 537,
211}
212
213#[derive(Clone, Copy, Debug, Eq, PartialEq)]
215#[repr(i32)]
216#[non_exhaustive]
217pub enum PetStatKind {
218 AttackPowerInheritance = 2,
219 SpellPowerInheritance = 3,
220}
221
222#[derive(Clone, Copy, Debug, Eq, PartialEq)]
224pub struct AuraSubtypeSemantic {
225 pub kind: AuraSubtypeKind,
226 pub name: &'static str,
227 pub support: SemanticSupport,
228 pub handler: &'static str,
229 pub modifier: Option<(ModifierOperation, ModifierFilter)>,
230}
231
232#[rustfmt::skip]
234pub const AURA_SUBTYPE_SEMANTICS: &[AuraSubtypeSemantic] = &[
235 aura(AuraSubtypeKind::None, "None", SemanticSupport::Ignored, "absence sentinel; no aura behavior to lower", None),
236 aura(AuraSubtypeKind::PeriodicDamage, "Periodic Damage", SemanticSupport::Generic, "automatic AP, SP, and flat periodic damage construction", None),
237 aura(AuraSubtypeKind::Dummy, "Dummy", SemanticSupport::ContentRequired, "spec or item content", None),
238 aura(AuraSubtypeKind::ModConfuse, "Mod Confuse", SemanticSupport::Generic, "target-generic incapacitate state with diminishing returns", None),
239 aura(AuraSubtypeKind::Fear, "Fear", SemanticSupport::Generic, "target-generic fear state with diminishing returns", None),
240 aura(AuraSubtypeKind::PeriodicHeal, "Periodic Heal", SemanticSupport::Generic, "shared periodic healing pipeline", None),
241 aura(AuraSubtypeKind::Threat, "Threat", SemanticSupport::Unsupported, "threat generation is not modelled", None),
242 aura(AuraSubtypeKind::Stun, "Stun", SemanticSupport::Generic, "target-generic stun state with diminishing returns", None),
243 aura(AuraSubtypeKind::Invisibility, "Invisibility", SemanticSupport::Unsupported, "generic invisibility state and action/proc interaction are not modelled", None),
244 aura(AuraSubtypeKind::PeriodicHealPercent, "Periodic Heal Percent", SemanticSupport::Generic, "maximum-health percentage periodic healing", None),
245 aura(AuraSubtypeKind::PeriodicTriggerSpell, "Periodic Trigger Spell", SemanticSupport::Partial, "registered aura ticks execute typed child damage, aura, resource, and charge operations; missing cadence, unsupported children, and unregistered destinations remain explicit gaps", None),
246 aura(AuraSubtypeKind::PeriodicEnergize, "Periodic Energize", SemanticSupport::Generic, "periodic resource resolution", None),
247 aura(AuraSubtypeKind::Root, "Root", SemanticSupport::Generic, "target-generic root state with diminishing returns", None),
248 aura(AuraSubtypeKind::Silence, "Silence", SemanticSupport::Generic, "target-generic silence state with diminishing returns", None),
249 aura(AuraSubtypeKind::SpellReflection, "Spell Reflection", SemanticSupport::Generic, "incoming spell reflection re-resolves damage against the caster", None),
250 aura(AuraSubtypeKind::ModStat, "Mod Stat", SemanticSupport::Generic, "stat and consumable resolution", None),
251 aura(AuraSubtypeKind::ModIncreaseMovementSpeed, "Mod Increase Movement Speed", SemanticSupport::Unsupported, "actor movement speed is not modelled", None),
252 aura(AuraSubtypeKind::ModDecreaseMovementSpeed, "Mod Decrease Movement Speed", SemanticSupport::Unsupported, "actor movement speed is not modelled", None),
253 aura(AuraSubtypeKind::ModIncreaseEnergy, "Mod Increase Energy", SemanticSupport::Generic, "resource passive resolution", None),
254 aura(AuraSubtypeKind::Shapeshift, "Shapeshift", SemanticSupport::Generic, "shared player form state and spell stance-mask gating", None),
255 aura(AuraSubtypeKind::SchoolImmunity, "School Immunity", SemanticSupport::Generic, "active actor incoming school-damage immunity", None),
256 aura(AuraSubtypeKind::DisableStealth, "Disable Stealth", SemanticSupport::Unsupported, "stealth suppression across actors is not modelled", None),
257 aura(AuraSubtypeKind::ProcTriggerSpell, "Proc Trigger Spell", SemanticSupport::Partial, "proc relation resolved; content wires trigger event", None),
258 aura(AuraSubtypeKind::ModParryPercent, "Mod Parry Percent", SemanticSupport::Unsupported, "DBC defensive parry modifiers are not applied to incoming attack resolution", None),
259 aura(AuraSubtypeKind::ModDodgePercent, "Mod Dodge Percent", SemanticSupport::Unsupported, "DBC defensive dodge modifiers are not applied to incoming attack resolution", None),
260 aura(AuraSubtypeKind::PeriodicLeech, "Periodic Leech", SemanticSupport::Generic, "periodic damage and actual-damage leech healing", None),
261 aura(AuraSubtypeKind::ChangeModel, "Change Model", SemanticSupport::Ignored, "visual model changes have no combat impact", None),
262 aura(AuraSubtypeKind::ModSpellCritChance, "Mod Spell Crit Chance", SemanticSupport::Generic, "passive stat resolution", None),
263 aura(AuraSubtypeKind::PacifySilence, "Pacify Silence", SemanticSupport::Generic, "target-generic silence state with diminishing returns; pacify has no additional Patchwerk action effect", None),
264 aura(AuraSubtypeKind::ScalePercentStacking, "Scale Percent Stacking", SemanticSupport::Ignored, "visual scale has no combat impact", None),
265 aura(AuraSubtypeKind::ModAdditionalPowerCost, "Modify Additional Power Cost", SemanticSupport::Generic, "active affected-spell optional-cost adjustment for the matching power type", None),
266 aura(AuraSubtypeKind::AbsorbDamage, "Absorb Damage", SemanticSupport::Generic, "school-filtered priority-ordered mutable damage absorbs", None),
267 aura(AuraSubtypeKind::SpellReflectionSchool, "Spell Reflection by School", SemanticSupport::Generic, "school-filtered incoming spell reflection", None),
268 aura(AuraSubtypeKind::Unknown75, "Unknown Aura 75", SemanticSupport::Unsupported, UNKNOWN_AURA_EVIDENCE, None),
269 aura(AuraSubtypeKind::MechanicImmunity, "Mechanic Immunity", SemanticSupport::Generic, "active actor incoming mechanic immunity", None),
270 aura(AuraSubtypeKind::ModDamageDonePercent, "Mod Damage Done Percent", SemanticSupport::Generic, "source-aware actor outgoing school-damage accumulation", None),
271 aura(AuraSubtypeKind::TransferDamagePercent, "Transfer Damage Percent", SemanticSupport::Generic, "pre-mitigation target damage split to aura caster", None),
272 aura(AuraSubtypeKind::ModPowerRegen, "Mod Power Regen", SemanticSupport::Generic, "active and passive DBC power-type regeneration", None),
273 aura(AuraSubtypeKind::ModDamageTakenPercent, "Mod Damage Taken Percent", SemanticSupport::Generic, "active actor incoming school-damage multiplier", None),
274 aura(AuraSubtypeKind::PeriodicMaxHealthDamage, "Periodic Max Health Percent Damage", SemanticSupport::Partial, "enemy-target max-health periodic damage; friendly-actor periodic damage dispatch is not modelled", None),
275 aura(AuraSubtypeKind::InterruptRegen, "Interrupt Regen", SemanticSupport::Generic, "active actor interrupted-regeneration state", None),
276 aura(AuraSubtypeKind::ModArmorPercent, "Mod Armor Percent", SemanticSupport::Unsupported, "DBC actor armor percentage is not applied to incoming physical mitigation", None),
277 aura(AuraSubtypeKind::TemporaryThreatReduction, "Temporary Threat Reduction", SemanticSupport::Unsupported, "temporary threat changes are not modelled", None),
278 aura(AuraSubtypeKind::Levitate, "Levitate", SemanticSupport::Unsupported, "actor movement modes are not modelled", None),
279 aura(AuraSubtypeKind::AddFlatModifier, "Add Flat Modifier", SemanticSupport::Generic, "spell modifier resolution", Some((ModifierOperation::Flat, ModifierFilter::ClassFamilyMask))),
280 aura(AuraSubtypeKind::AddPercentModifier, "Add Percent Modifier", SemanticSupport::Generic, "spell modifier resolution", Some((ModifierOperation::Percent, ModifierFilter::ClassFamilyMask))),
281 aura(AuraSubtypeKind::ModPowerRegenPercent, "Mod Power Regen Percent", SemanticSupport::Generic, "active and passive resource resolution", None),
282 aura(AuraSubtypeKind::ModHealingFlat, "Mod Healing Flat", SemanticSupport::Generic, "source-side school-filtered flat healing", None),
283 aura(AuraSubtypeKind::ModHealingReceivedPercent, "Mod Healing Received Percent", SemanticSupport::Generic, "target-side healing multiplier", None),
284 aura(AuraSubtypeKind::ModIncreaseMovementSpeedStacking, "Mod Increase Movement Speed Stacking", SemanticSupport::Unsupported, "stacking actor movement speed is not modelled", None),
285 aura(AuraSubtypeKind::IncreaseHealthPercent, "Increase Health Percent", SemanticSupport::Unsupported, "active maximum-health percentage changes are not projected onto actor health pools", None),
286 aura(AuraSubtypeKind::ModManaRegenInterrupted, "Mod Mana Regen Interrupted", SemanticSupport::Generic, "active interrupted-regeneration continuation percent", None),
287 aura(AuraSubtypeKind::ModHealingDoneFlat, "Mod Healing Done Flat", SemanticSupport::Generic, "source-side school-filtered flat healing", None),
288 aura(AuraSubtypeKind::ModHealingDonePercent, "Mod Healing Done Percent", SemanticSupport::Generic, "source-side healing multiplier", None),
289 aura(AuraSubtypeKind::ModTotalStatPercentage, "Mod Total Stat Percentage", SemanticSupport::Generic, "passive stat and buff resolution", None),
290 aura(AuraSubtypeKind::ModBaseResistance, "Mod Base Resistance", SemanticSupport::Unsupported, "actor resistance and incoming magic damage are not modelled", None),
291 aura(AuraSubtypeKind::UnknownPartyAura145, "Unknown Party Aura 145", SemanticSupport::ContentRequired, "unknown party-aura behavior requires explicit content evidence", None),
292 aura(AuraSubtypeKind::CreatureImmunities, "Creature Immunities", SemanticSupport::Generic, "active actor incoming mechanic-mask immunity", None),
293 aura(AuraSubtypeKind::ModChargeCooldownRechargeRateCategory, "Modify Charge Cooldown Recharge Rate Percent by Category", SemanticSupport::Generic, "active charge-category rate resolution and deadline reprojection", None),
294 aura(AuraSubtypeKind::ModAggroDistance, "Mod Aggro Distance", SemanticSupport::Unsupported, "aggro distance and encounter geometry are not modelled", None),
295 aura(AuraSubtypeKind::ModCritDamageMultiplier, "Mod Crit Damage Multiplier", SemanticSupport::Generic, "gear stat resolution", None),
296 aura(AuraSubtypeKind::IncreaseMountedSpeedPercent, "Increase Mounted Speed Percent", SemanticSupport::Unsupported, "mounted actor movement is not modelled", None),
297 aura(AuraSubtypeKind::ModCritChanceVersusTargetHealth, "Modify Critical Chance Versus Target Health", SemanticSupport::Generic, "active source aura adds critical chance while target health is at or above its DBC threshold", None),
298 aura(AuraSubtypeKind::ModAttackerSpellHitChance, "Mod Attacker Spell Hit Chance", SemanticSupport::Unsupported, "incoming spell hit resolution is not modelled", None),
299 aura(AuraSubtypeKind::ModAttackerMeleeCritChance, "Mod Attacker Melee Crit Chance", SemanticSupport::Unsupported, "incoming melee critical strikes are not modelled", None),
300 aura(AuraSubtypeKind::ModAttackerRangedCritChance, "Mod Attacker Ranged Crit Chance", SemanticSupport::Unsupported, "incoming ranged critical strikes are not modelled", None),
301 aura(AuraSubtypeKind::ModRating, "Mod Rating", SemanticSupport::Generic, "buff and enchant resolution", None),
302 aura(AuraSubtypeKind::UseBaseMoveSpeed, "Use Base Move Speed", SemanticSupport::Unsupported, "actor movement speed is not modelled", None),
303 aura(AuraSubtypeKind::HasteAll, "Haste All", SemanticSupport::Generic, "active and passive stat resolution", None),
304 aura(AuraSubtypeKind::Unknown195, "Unknown Aura 195", SemanticSupport::Unsupported, UNKNOWN_AURA_EVIDENCE, None),
305 aura(AuraSubtypeKind::ModAttackerCritChance, "Mod Attacker Crit Chance", SemanticSupport::Unsupported, "incoming critical strikes are not modelled", None),
306 aura(AuraSubtypeKind::ModRageGeneratedFromAutoAttacks, "Mod Rage Generated From Auto Attacks", SemanticSupport::Generic, "auto-attack-scoped active and passive Rage generation", None),
307 aura(AuraSubtypeKind::AddPercentLabelModifier, "Add Percent Label Modifier", SemanticSupport::Generic, "spell modifier resolution", Some((ModifierOperation::Percent, ModifierFilter::Label))),
308 aura(AuraSubtypeKind::AddFlatLabelModifier, "Add Flat Label Modifier", SemanticSupport::Generic, "spell modifier resolution", Some((ModifierOperation::Flat, ModifierFilter::Label))),
309 aura(AuraSubtypeKind::ModSpellSchool, "Mod Spell School", SemanticSupport::Generic, "active caster aura overrides affected damage identities before school modifiers and mitigation", None),
310 aura(AuraSubtypeKind::PeriodicDummy, "Periodic Dummy", SemanticSupport::Partial, "consumable model or content", None),
311 aura(AuraSubtypeKind::ModAoeDamageTakenPercent, "Mod AoE Damage Taken Percent", SemanticSupport::Generic, "active actor incoming area-damage school multiplier", None),
312 aura(AuraSubtypeKind::TriggerSpellWithValue, "Trigger Spell With Value", SemanticSupport::Partial, "registered passive proc activation forwards the driver value through typed child operations; unsupported proc forms and destinations remain explicit gaps", None),
313 aura(AuraSubtypeKind::ModMechanicDurationPercentStacking, "Mod Mechanic Duration Percent Stacking", SemanticSupport::Unsupported, "stacking crowd-control duration modifiers are not modelled", None),
314 aura(AuraSubtypeKind::ModDebuffDurationPercent, "Mod Debuff Duration Percent", SemanticSupport::Unsupported, "incoming debuff duration modifiers are not modelled", None),
315 aura(AuraSubtypeKind::ModDamagePercentDoneByTargetAuraMechanic, "Mod Damage Percent Done by Target Aura Mechanic", SemanticSupport::Generic, "source damage multiplier when the target carries the requested mechanic-tagged aura", None),
316 aura(AuraSubtypeKind::ModMechanicDamageTakenPercent, "Mod Mechanic Damage Taken Percent", SemanticSupport::Generic, "target damage multiplier for spells carrying the requested mechanic", None),
317 aura(AuraSubtypeKind::ModPeriodicHealingPercent, "Mod Periodic Healing Percent", SemanticSupport::Generic, "target-side periodic-healing multiplier", None),
318 aura(AuraSubtypeKind::Unknown260, "Unknown Aura 260", SemanticSupport::Unsupported, UNKNOWN_AURA_EVIDENCE, None),
319 aura(AuraSubtypeKind::IgnoreAuraState, "Ignore Aura State", SemanticSupport::Generic, "active DBC spell-gate exception", None),
320 aura(AuraSubtypeKind::DisableAbilities, "Disable Abilities", SemanticSupport::Generic, "active DBC spell-gate restriction", None),
321 aura(AuraSubtypeKind::ModDamageTakenFromCaster, "Mod Damage Taken From Caster", SemanticSupport::Generic, "active target aura applies caster-scoped damage in the damage pipeline", None),
322 aura(AuraSubtypeKind::ModDamageTakenFromCasterSpells, "Mod Damage Taken From Caster Spells", SemanticSupport::Generic, "active target aura resolves its DBC affect list in the damage pipeline", None),
323 aura(AuraSubtypeKind::ModStanceMask, "Mod Stance Mask", SemanticSupport::Generic, "active affect-listed stance-mask exceptions participate in spell usability", None),
324 aura(AuraSubtypeKind::ModTargetArmorPercent, "Mod Target Armor Percent", SemanticSupport::Generic, "passive target-armor resolution", None),
325 aura(AuraSubtypeKind::ModHealingTakenFromCasterPercent, "Mod Healing Taken From Caster Percent", SemanticSupport::Generic, "caster-scoped target healing multiplier", None),
326 aura(AuraSubtypeKind::CastLinkedSpellWithValue, "Cast Linked Spell With Value", SemanticSupport::Partial, "registered spell activation forwards the driver value through typed child operations; passive, learn, and unregistered activation forms remain unsupported", None),
327 aura(AuraSubtypeKind::ModCooldownRechargeRatePercent, "Mod Cooldown Recharge Rate Percent", SemanticSupport::Generic, "active affected-spell rate resolution and deadline reprojection", None),
328 aura(AuraSubtypeKind::DeflectSpells, "Deflect Spells", SemanticSupport::Generic, "active target spell-deflection chance", None),
329 aura(AuraSubtypeKind::ModAllCritChance, "Mod All Crit Chance", SemanticSupport::Generic, "active and passive stat resolution", None),
330 aura(AuraSubtypeKind::PreventRegeneratePower, "Prevent Regenerate Power", SemanticSupport::Generic, "active DBC power-mask regeneration prevention", None),
331 aura(AuraSubtypeKind::ShareDamagePercent, "Share Damage Percent", SemanticSupport::Generic, "post-mitigation target damage share to aura caster", None),
332 aura(AuraSubtypeKind::AbsorbHealing, "Absorb Healing", SemanticSupport::Generic, "school-filtered priority-ordered healing absorbs", None),
333 aura(AuraSubtypeKind::ModMinSpeedPercent, "Mod Min Speed Percent", SemanticSupport::Unsupported, "actor movement speed is not modelled", None),
334 aura(AuraSubtypeKind::AllowCastingWhileMovingLabel, "Allow Casting While Moving for Spells in Label", SemanticSupport::Generic, "active label-filtered movement cast exception", None),
335 aura(AuraSubtypeKind::ModCreatureAoeDamageAvoidance, "Mod Creature AoE Damage Avoidance", SemanticSupport::Generic, "target-side area-damage multiplier filtered by school", None),
336 aura(AuraSubtypeKind::ReplaceAnimationSet, "Replace Animation Set", SemanticSupport::Ignored, "client-side animation replacement has no combat impact", None),
337 aura(AuraSubtypeKind::AbsorbOverkillDamageFromSchool, "Absorb Overkill Damage From School", SemanticSupport::Generic, "school-filtered lethal-hit overkill absorbs", None),
338 aura(AuraSubtypeKind::ModMasteryPercent, "Mod Mastery Percent", SemanticSupport::Generic, "active and passive stat resolution", None),
339 aura(AuraSubtypeKind::ModMeleeAutoAttackSpeedPercent, "Mod Melee Auto Attack Speed Percent", SemanticSupport::Generic, "active and passive auto-attack timing", None),
340 aura(AuraSubtypeKind::ApplyHastedGcdLabel, "Apply Hasted GCD to Spells in Label", SemanticSupport::Generic, "passive label-filtered GCD haste classification", None),
341 aura(AuraSubtypeKind::CastWhileMovingWhitelist, "Cast While Moving Whitelist", SemanticSupport::Generic, "active affect-list movement cast exception", None),
342 aura(AuraSubtypeKind::OverrideActionSpell, "Override Action Spell", SemanticSupport::Generic, "DBC action override resolution", None),
343 aura(AuraSubtypeKind::ModAutoAttackCritChance, "Mod Auto Attack Crit Chance", SemanticSupport::Generic, "active actor aura adds critical chance to that actor's white auto-attacks only", None),
344 aura(AuraSubtypeKind::Unknown335, "Unknown Aura 335", SemanticSupport::Unsupported, UNKNOWN_AURA_EVIDENCE, None),
345 aura(AuraSubtypeKind::ModCooldownTimeCategory, "Mod Cooldown Time Category", SemanticSupport::Generic, "passive category cooldown resolution", None),
346 aura(AuraSubtypeKind::ModRangedAndMeleeAutoAttackSpeedPercent, "Mod Ranged and Melee Auto Attack Speed Percent", SemanticSupport::Generic, "active and passive auto-attack timing", None),
347 aura(AuraSubtypeKind::ModAutoAttackDamageTakenFromCaster, "Mod Auto Attack Damage Taken from Caster", SemanticSupport::Generic, "active target aura accumulation", None),
348 aura(AuraSubtypeKind::ModAutoAttackDamage, "Mod Auto Attack Damage", SemanticSupport::Generic, "passive damage resolution", None),
349 aura(AuraSubtypeKind::IgnoreArmorPercent, "Ignore Armor Percent", SemanticSupport::Generic, "active target aura bypasses armor only for its exact caster", None),
350 aura(AuraSubtypeKind::ModSpellHastePercent, "Mod Spell Haste Percent", SemanticSupport::Generic, "source-aware actor spell-haste accumulation and guardian cadence", None),
351 aura(AuraSubtypeKind::OverrideAutoAttackWithAbility, "Override Auto Attack With Ability", SemanticSupport::Generic, "active caster aura replaces main-hand white swings with its trigger spell and expiry restores white swings", None),
352 aura(AuraSubtypeKind::OverrideSpellPowerByAttackPowerPercent, "Override Spell Power by Attack Power Percent", SemanticSupport::Generic, "active owner stat override derives spell power from pre-override attack power", None),
353 aura(AuraSubtypeKind::CastWhileMoving, "Cast While Moving", SemanticSupport::Generic, "active affect-list movement cast exception", None),
354 aura(AuraSubtypeKind::ModManaRegenPercent, "Mod Mana Regen Percent", SemanticSupport::Generic, "passive resource resolution", None),
355 aura(AuraSubtypeKind::ModDamageTakenFromCasterGuardian, "Mod Damage Taken From Caster Guardian", SemanticSupport::Generic, "active target aura applies guardian-scoped damage in the damage pipeline", None),
356 aura(AuraSubtypeKind::ModDamageTakenFromCasterPet, "Mod Damage Taken From Caster Pet", SemanticSupport::Generic, "active target aura applies pet-scoped damage in the damage pipeline", None),
357 aura(AuraSubtypeKind::ModPetStat, "Mod Pet Stat", SemanticSupport::Generic, "passive NPC-filtered AP/SP inheritance resolution", None),
358 aura(AuraSubtypeKind::AreaTrigger, "Area Trigger", SemanticSupport::ContentRequired, "spec content wires area-trigger behavior", None),
359 aura(AuraSubtypeKind::ResourceThresholdTrigger, "Resource Threshold Trigger", SemanticSupport::Generic, "resource-threshold trigger resolution", None),
360 aura(AuraSubtypeKind::ModTimeRate, "Modify Time Rate", SemanticSupport::Generic, "active wall-clock aura duration and periodic cadence reprojection", None),
361 aura(AuraSubtypeKind::OverrideAttackPowerBySpellPowerPercent, "Override Attack Power by Spell Power Percent", SemanticSupport::Generic, "active owner stat override derives attack power from pre-override spell power", None),
362 aura(AuraSubtypeKind::ModRatingMultiplier, "Mod Rating Multiplier", SemanticSupport::Generic, "passive stat resolution", None),
363 aura(AuraSubtypeKind::SetActionButtonSpellCount, "Set Action Button Spell Count", SemanticSupport::Ignored, "client-side action-button display has no combat impact", None),
364 aura(AuraSubtypeKind::ModCooldownChargeCategory, "Mod Cooldown Charge Category", SemanticSupport::Generic, "passive category charge resolution", None),
365 aura(AuraSubtypeKind::HastedCooldown, "Hasted Cooldown", SemanticSupport::Generic, "passive cooldown resolution", None),
366 aura(AuraSubtypeKind::HastedGlobalCooldown, "Hasted Global Cooldown", SemanticSupport::Generic, "passive class-family GCD haste classification", None),
367 aura(AuraSubtypeKind::ModMaxResource, "Mod Max Resource", SemanticSupport::Generic, "resource passive resolution", None),
368 aura(AuraSubtypeKind::ModAbsorbDonePercent, "Mod Absorb Done Percent", SemanticSupport::Generic, "source-side absorb amount multiplier", None),
369 aura(AuraSubtypeKind::ModAbsorbReceivedPercent, "Mod Absorb Received Percent", SemanticSupport::Generic, "target-side absorb amount multiplier", None),
370 aura(AuraSubtypeKind::ModManaCostPercent, "Mod Mana Cost Percent", SemanticSupport::Generic, "active, passive, and externally sourced player mana-cost resolution", None),
371 aura(AuraSubtypeKind::ModPetDamageDone, "Mod Pet Damage Done", SemanticSupport::Generic, "passive damage resolution", None),
372 aura(AuraSubtypeKind::ModLeechPercent, "Mod Leech Percent", SemanticSupport::Generic, "damage-to-self-healing percentage", None),
373 aura(AuraSubtypeKind::ModRechargeTimeCategory, "Mod Recharge Time Category", SemanticSupport::Generic, "passive cooldown resolution", None),
374 aura(AuraSubtypeKind::ModRechargeTimePercentCategory, "Mod Recharge Time Percent Category", SemanticSupport::Generic, "passive cooldown resolution", None),
375 aura(AuraSubtypeKind::RootRespectsThreatTable, "Root Respects Threat Table", SemanticSupport::Generic, "target-generic root state; the Patchwerk target model has no threat-table branch", None),
376 aura(AuraSubtypeKind::HastedCooldownCategory, "Hasted Cooldown Category", SemanticSupport::Generic, "passive cooldown resolution", None),
377 aura(AuraSubtypeKind::ModBonusStatPercent, "Modify Bonus Stat Percent", SemanticSupport::Generic, "active non-create stat-gain percentage resolved by DBC stat selector", None),
378 aura(AuraSubtypeKind::TriggerSpellBasedOnHealthPercent, "Trigger Spell Based on Health Percent", SemanticSupport::Generic, "active affected-actor health crossing casts the DBC trigger spell", None),
379 aura(AuraSubtypeKind::ModTimeRateLabel, "Modify Time Rate for Spells in Label", SemanticSupport::Generic, "active label-scoped wall-clock aura duration and periodic cadence reprojection", None),
380 aura(AuraSubtypeKind::ModVersatilityPercent, "Mod Versatility Percent", SemanticSupport::Generic, "passive stat resolution", None),
381 aura(AuraSubtypeKind::TriggerSpellOnExpire, "Trigger Spell On Expire", SemanticSupport::Generic, "natural aura expiry schedules the DBC trigger spell with its caster coordinate", None),
382 aura(AuraSubtypeKind::IgnoreSpellChargeCooldown, "Ignore Spell Charge Cooldown", SemanticSupport::Generic, "active charge-category consumption bypass", None),
383 aura(AuraSubtypeKind::ModGuardianDamageDonePercent, "Mod Guardian Damage Done Percent", SemanticSupport::Generic, "passive guardian damage resolution", None),
384 aura(AuraSubtypeKind::ModDamageTakenFromCasterSpellsLabel, "Mod Damage Taken From Caster Spells Label", SemanticSupport::Generic, "active target aura resolves its DBC spell label in the damage pipeline", None),
385];
386
387const fn aura(
388 kind: AuraSubtypeKind,
389 name: &'static str,
390 support: SemanticSupport,
391 handler: &'static str,
392 modifier: Option<(ModifierOperation, ModifierFilter)>,
393) -> AuraSubtypeSemantic {
394 AuraSubtypeSemantic {
395 kind,
396 name,
397 support,
398 handler,
399 modifier,
400 }
401}