Ability Coverage
This note tracks the current OpenWarcraft3 game-side ability registry against the reference ability base-code list used for parity work.
See the implemented ability verification review for the September 2026 source audit, lifecycle fixes, and current coverage limits.
Primary local files:
games/warcraft-3/game/skills/s_skills.cgames/warcraft-3/game/skills/*.c
The practical parity list maps Warcraft ability base codes to concrete ability
type definitions. Unknown or unsupported codes may resolve to explicit local
stubs for recognition/passive coverage, but command-card discovery requires a
an explicit command or an executable AB_SPELL definition so a stub cannot create a dead button.
Current Model
Campaign rawcodes in CampaignAbilityStrings.txt are registered through
games/warcraft-3/game/skills/s_campaign_abilities.c. Registry entries resolve to reusable ability_t handlers; each invocation carries its
actual rawcode in abilityitem_t, so S_SpellData, duration, unit, buff, and
target lookups read the campaign AbilityData.slk row. Shared execution
families cover campaign area damage, War Stomp, summons, timed statuses,
toggles, dispel, Battle Roar, and Storm Bolt without aliasing a standard
rawcode's gameplay data. The registry test in game/tests/t_spell.c checks every
campaign rawcode for a concrete command, executable procedure, and matching spell
code. Campaign-specific presentation, exact summon composition, Parasite
death spawning, and full three-form Storm/Earth/Fire behavior remain separate
follow-up contracts when their authored rows and runtime consumers are added.
OpenWarcraft3 uses a small Quake-style ability_t registry row and one abilityProc_t per behavior. Flags select command, spell, item, autocast and update paths; those paths send typed abilityMsg_t messages. UnitAddAbility and UnitRemoveAbility send A_ENABLE and A_DISABLE immediately. Stateful abilities answer A_LEVEL, and S_RefreshAbilityLevel() forwards the value through A_LEVEL_CHANGED. Command-card discovery uses S_AbilityHasCommand, so passive/no-op procedures do not create dead buttons. Concrete procedures explicitly call their TFT parent procedure for unhandled messages; no callback descriptor or runtime parent table exists.
Aoar (Healing Ward Aura), Aabr (Aura of Blight), and Aarm (Mana Regeneration Aura) are registered passive regeneration families. Alias rows such as ACnr -> Aoar and ANre -> Aarm are discovered on the owning unit and keep alias-authored area, targets, and DataA/DataB values. Percentage mode scales against the recipient's maximum HP/mana; same-family sources use the strongest value while Aoar and Aabr remain distinct contributors. Presentation effects remain separate work. See Regeneration Auras And Fountains.
The CommonAbility base codes use the subsystem that already owns their behavior.
AEbu, AGbu, AHbu, ANbu, AObu, and AUbu share the build command; AGbu (including aliases whose base resolves to it) selects explicit Naga worker-inside/autonomous construction before race fallback;
ARal, Aatk, and Amov share the ordinary rally, attack, and move commands;
Atdp and Atlp share cargo drop/load. AEpa is the Poison Arrows toggle and
reads its own DataA bonus in missile attack resolution. Aloc applies
unselectable, invulnerable, collisionless, no-pathing traits during unit spawn.
The five Afih/Afin/Afio/Afir/Afiu rawcodes share one passive procedure;
retail does not list these rawcodes in UnitAbilities.slk, so buildings synthesize
CAbilityOnFireHuman as an intrinsic capability. G_SetHealth() refreshes its derived level and
the A_LEVEL_CHANGED case owns health-stage and UnitData.race model selection. Hero revival and Hero identity
remain owned by their existing lifecycle systems, while their CommonAbility rawcodes
are explicit passive rows. ROC and TFT ability_audit rows match for this block;
Adet is an abstract base code absent as a standalone row in both archives.
Timed statuses remain generic abilstatus[] records. Their common duration and
expiration bookkeeping stays in unit_updatestatuses(); add apply, refresh, or remove
procedure cases only when a status record can resolve its owning ability unambiguously.
Abilities are discovered through the static abilitylist[] in
games/warcraft-3/game/skills/s_skills.c. Normal unit command buttons are shown only when the
unit ability alias resolves through Units\AbilityData.slk to a registered base
code. The command keeps the original alias when dispatching so per-alias SLK
data such as item heal amounts still resolves correctly. Hero abilities are
stored as heroability_t entries on the unit; heroAbilList, skill points,
reqLevel, levelSkip, maximum ranks, and the Research-button learn menu are
described in Hero Ability Progression.
Registry entries must not be counted as implemented until their gameplay consumer, authored data, and inverse behavior are covered. Use the Ability Implementation Plan to start from the archive data and observable behavior, then add focused evidence for any remaining uncertainty before adding coverage.
The old a_unimplemented registry marker is not an implementation strategy for
these entries. It may remain only as temporary audit scaffolding while a real
handler is being developed, and must be removed from an entry when that entry
is registered for gameplay.
Directly copying another engine's ability classes is not mechanical. The local
implementation should port behavior into flat C procedures, umove_t state
machines, existing edict fields, and data loaded from SLK/config tables.
AIbl, AIbg, AIbt, AIbb, AIbf, AIbr, AIbs, and AIbh now share
a partial point-targeted Tiny Structures item ability: the gameplay layer
validates placement and starts workerless automatic construction with the
authored duration. HumanX01's tgrh item uses its stock AIbg ability and
resolves to the Human Town Hall; its campaign hint calls it a Tiny Castle, but
the hint does not override the item data. The stock Great Hall ability remains
owner-race dependent, with explicit map UnitID overrides preserved. See
Tiny Structures.
Local Registry
| Code | Local file | Status |
|---|---|---|
CmdStop |
s_stop.c |
Implemented immediate Stop command; clears retained movement/combat goals, interrupts channels, captures the current Stop guard point, permits ordinary idle acquisition/chase and returns there after automatic combat when no explicit queued work supersedes it, supports Shift-queued no-target replay, and exposes the ordinary stopped/idle command-card engaged state. |
CmdMove |
s_move.c |
Implemented ground move command. |
CmdAttack |
s_attack.c |
Implemented basic melee/ranged attack and projectiles. Explicit Attack may target friendly units and buildings; Smart/right-click attack selection remains unchanged. Building attack range is measured to authored pathing footprints so large blocked structures do not cause attackers to orbit their centres. |
CmdBuild |
s_build.c |
Implemented build menu and placement flow. |
CmdHoldPos |
s_holdpos.c |
Implemented persistent Hold Position state; command-card and scripted holdposition orders share the same transition, interrupt active channels, support Shift-queued no-target replay, retain the Hold command-card engaged state through automatic combat, acquire at normal uacq, and suppress chase movement. Generic Hold-safe autocast remains. |
CmdPatrol |
s_patrol.c |
Registered stub. |
CmdCancel |
s_cancel.c |
Implemented UI cancel. |
CmdSelectSkill |
s_selectskill.c |
Partial; candidate skill menu, next-rank Research UI, point/level gating, max-rank hiding, and authoritative learning are implemented. Skill-point and next-rank numeric overlays are implemented; multi-selection presentation remains. |
Ahar |
s_harvest_lumber.c |
Partial worker harvest implementation. |
Awrp |
s_waygate.c, api/api_unit.h |
Partial; CAbilityWarp owns explicit Smart traversal, authored rectangular entry dimensions, interruption cleanup, and JASS state. m_unit.c only supplies generic target-order/order-accepted hooks. Automatic portal-aware point routing remains. See Way Gates. |
Amic, Amil |
s_militia.c |
Partial; paired Hall/worker Call to Arms and Back to Work orders, footprint approach, Data A/B in-place Peasant/Militia transform, carried-resource return, per-unit Bmil expiry, and explicit worker auto-harvest resume are implemented. CommandStrings-keyed errors, ability sound/effects, and morph-animation polish remain. See Call to Arms and Militia. |
Amrf, Arav |
m_unit.c |
Partial; script-issued ravenform/unravenform immediate orders select the matching stock transform ability by its AbilityData Data A / UnitID endpoints, transform the same unit in place, and rebind the target type's Required Animation Names. Full cast/morph timing, altitude transition, effects/sounds, automatic duration reversion, and command-card behavior remain. See Unit Animation Properties And Transformation Forms. |
Asb1, Asb2, Asb3, ANsu |
s_campaign_abilities.c |
Partial; submerge / unsubmerge use authored Data A / UnitID form endpoints, require swimmable non-walkable terrain to enter, preserve one unit identity through G_TransformUnitType, expose Surface through toggle state, and route submerged RF_HIDDEN through gameplay invisibility/detection. Exact morph animation/effect timing remains. |
Arep |
s_repair.c |
Partial; entity command, Smart/Shift orders, building-footprint and live mechanical-unit approach, completed-target DataA/DataB costs, Friend/mechanical/Ancient target subset, floating-target DataE, paused owner-only Human power building, canonical numeric Repair order IDs, and nearest-valid Auto Repair are wired. Complete generic target masks, destructibles, and broader autocast policy coverage remain. |
Agld |
s_goldmine.c |
Basic gold mine harvest loop. |
AHad |
s_devotionaura.c, s_hero_passives.c, m_unit.c, hud_infopanel.c |
Partial; registered passive, learned aliases use authored Area/DataA/DataB/Targets Allowed in the shared strongest-source Hero-aura cache, including Had2 percent-of-authored-Defense-Base armor. G_UnitArmorValue() consumes the bonus, and the HUD renders the winning authored BuffID virtually while recipients reconcile persistent target art. Broader cross-aura presentation sharing remains. |
AHhb |
s_holylight.c |
Partial target spell; validates target/range/masks, rejects self and full-health friendly targets before commitment, spends mana, starts cooldown, heals allies, damages undead enemies, and plays target art. |
AHds |
s_ability_stubs.c |
Partial; authored-duration invulnerability and authored BuffID timed status are implemented. Invulnerability still uses save/restore of one boolean rather than a general modifier-source stack. |
AHre |
s_requested_abilities.c |
Partial; rejects empty casts, revives nearby friendly ordinary raisable corpses in place, prefers higher-level corpses and then the nearest equal-level corpse, preserves owner, retires death state, honors authored DataB/Hre2 raised-unit invulnerability, and plays authored caster/target art. |
AUdc |
s_requested_abilities.c |
Partial; validates friendly Undead/enemy living targets, rejects self/full-health friendly targets, launches MissileArt at authored/fallback missile speed, rejects reused target incarnations at impact, and applies heal/damage; enemy SpecialArt is emitted only when shared spell damage actually applies. Richer damage typing remains. |
AUdp |
s_requested_abilities.c, m_unit.c |
Partial; requires a friendly Undead non-Hero target, implements current-life DataA/DataB conversion plus DataC/DataD fixed-value conversion and its target-mana rule, honors DataE leave-target-alive, otherwise kills as a direct sacrifice and marks the victim non-raisable/no-decay so corpse abilities cannot reuse it. Richer localized command errors remain. |
AUau |
s_hero_passives.c, s_move.c, g_phys.c, hud_infopanel.c |
Partial; learned aliases use authored Area/DataA/DataB/DataC/Targets Allowed in strongest-source movement and HP-regeneration consumers; DataC selects max-life-percent vs flat regeneration. The HUD renders the winning BuffID virtually and recipients reconcile persistent target art. |
AUan / AUa2 |
s_requested_abilities.c |
Partial; rejects empty casts, raises nearby non-Hero/non-building raisable corpses for the caster, prefers higher-level corpses before lower-level ones, retires death state, restores full life without food reactivation, preserves existing ability ownership in place, honors authored DataB/Hre2 raised-unit invulnerability, marks the temporary unit non-raisable/no-decay with summon_ability, applies non-dispellable lifecycle BTLF, excludes it from dispel-style summoned-unit damage, relinks, and plays authored caster/target art. Modern AUa2 is registered to this ability-preserving path; classic random equal-level selection, Uan3, and legacy ability stripping remain. |
Acan |
s_undead_abilities.c, m_unit.c |
Partial; nearest authored-target-valid corpse acquisition through DataB, including holder-relative stored Meat Wagon cargo and holder-directed approach movement, exclusive decay-suspending reservation, continuous DataA HP/sec, full-health/duration/channel termination, corpse consumption on every started-channel end, and Cantfindcorpse feedback are implemented. Group-order wounded-unit assignment/retention and exact presentation remain. See Corpse Mechanics. |
Agyd |
s_undead_abilities.c, m_unit.c |
Partial; passive Cool cadence, DataA corpse cap, DataB/Gyd2 spawn radius, DataC/Gyd3 count radius (including holder-relative stored corpses), UnitID corpse type, normal raisability/decay lifecycle, and saveable producer thinker are implemented. Exact retail random/grave-marker placement remains. See Corpse Mechanics. |
Arai, ACrd, AIrd |
s_undead_abilities.c, s_summon.c |
Partial; lower-rank-before-distance corpse priority, Cantfindcorpse, DataA×DataC plus DataB×DataD summons, authored BuffID presentation beside shared BTLF timed life, summon identity/effects, holder-relative corpse cargo, autocast/item alias, and the authored Raiu/UnitID 25-per-player oldest-first limit check are implemented. Exact presentation remains. See Corpse Mechanics. |
AHtb |
s_thunderbolt.c |
Partial target spell; projectile, damage, mana, cooldown, range, target masks, and stun status. |
ANfb |
s_thunderbolt.c |
Partial target spell sharing Thunder Bolt behavior with Fire Bolt data/art. |
ANdc, SNdc |
s_campaign_abilities.c |
Dark Conversion consumes the targeted unit, spawns the authored UnitID at its location, applies its authored buff, and publishes summon events. Human05's JASS conversion trigger owns the final zombie replacement, allegiance, and order. |
AHwe, AOsf |
s_summon.c |
Partial no-target summon; reads unit id/count/duration, spawns owned timed-life units, and publishes unit/player summon events. |
AOmi |
s_mirror_image.c |
Partial Mirror Image; no-target cast creates data-counted timed copies, marks them as illusions, copies visible Hero state, excludes them from persistent Hero shortcut/XP/revival behavior, and publishes summon events. Damage multipliers, dispel, shuffle, and complete visual semantics remain. |
AHbz, AUcs, ANcl |
s_area_spell.c |
Partial point/channel spell family; Blizzard ticks area damage, Carrion Swarm applies a simple point blast, Channel opens cancel mode. |
ANch, AIco, Aeat, Ambt, Aroo |
s_utility_abilities.c |
Partial utility behaviors: Charm ownership transfer, Eat Tree heal/remove, Moon Well transfer, Root toggle. |
AIhe, AIma, AImi |
s_item.c |
Synchronous item use for heal, mana restore, and permanent life gain; successful charged uses decrement charges and zero-charge perishables are removed. |
AIpm |
s_wards.c, g_items.c, s_spell.c |
Point-target mine placement through authored UnitID; successful targeted item completion consumes exactly one charge while invalid/cancelled targets do not. See Land Mines. |
Amin |
s_wards.c |
Innate mine activation/invisibility/proximity behavior; DataA arm delay, DataB invisibility transition, Cast Range trigger radius, walk-over collision, True Sight integration, rooted-Ancient exclusion/mobile-uprooted exception, and normal self-death dispatch are implemented. See Land Mines. |
Adda, Amnx |
s_creep_abilities.c |
Two-ring authored death AOE with target-mask filtering, Duration-delayed victim enumeration at the saved death position, and authored tree/wall/debris/bridge/decoration destructible damage. See Land Mines. |
Ablo, Afae, Arej, Aroa |
s_melee_spells.c |
Partial melee unit spells; Bloodlust/Faerie Fire are autocast unit-target timed statuses, Rejuvenation is a friendly heal-over-time status, Roar is a no-target friendly-area status. Attack-rate/move, armor, damage-bonus, and heal-rate consumers read authored DataA/DataB/Dur. Faerie Fire vision and Ensnare-style movement locks remain. |
Afzy |
s_melee_spells.c |
Partial; autocast unit-target timed status applies Bfzy. S_FrenzyAttackBonus feeds the attack-speed divisor; S_FrenzyArmorDelta subtracts authored DataB armor in G_UnitArmorValue. |
Auhf |
s_melee_spells.c |
Partial; unit-target timed status applies Buhf. S_UnholyFrenzyAttackBonus feeds the attack-speed divisor; S_UnholyFrenzyLifeDrain drains authored DataB HP/sec in the physics tick. No autocast (parent AAsm). |
Acrs |
s_melee_spells.c |
Partial; autocast unit-target timed status applies Bcrs. S_CurseMissChance returns authored DataA miss fraction checked against the attacker before damage in S_ResolveAttackHit. Vision reveal of cursed targets is not yet implemented. |
Acri, ACcr |
s_status_spells.c |
Partial; enemy unit-target timed status applies Bcri. S_CrippleMoveReduction feeds unit_effective_speed; S_CrippleAttackReduction feeds the attack-speed divisor; S_CrippleDamageReduction scales outgoing attack damage. All three read authored DataA/DataB/DataC. |
ANso |
s_status_spells.c |
CAbilitySoulBurn. Enemy unit-target timed status applies BNso. S_SoulBurnDamageRate drains authored DataA HP/sec; S_SoulBurnDamageReduction scales outgoing attack damage by DataC. S_UnitIsSilenced (BNso or BNsi) blocks spell_validate / spell_validate_point. DataB unused. |
Atau |
s_status_spells.c |
Partial; no-target AOE issues order_attack(enemy, caster) for each alive enemy within authored Area. No persistent buff; effect is a one-shot re-target. |
Aens, ANen, ACen |
s_campaign_abilities.c |
CAbilityEnsnare + AB_UPDATE. TFT Bena/Beng by air/ground, ROC empty BuffID → Bens. S_UnitIsEnsnared locks order_move with BEer. Flyers clear AI_FLYING immediately; DataA/B gradual land/rise; DataC melee attack range via S_EnsnareMeleeRange. Flight/phase ownership lives in the ability via A_STATUS_REFRESH/A_STATUS_REMOVE; m_unit.c keeps storage/iteration/timing/dispatch. |
Aprg, Apg2, AIlp |
s_orc_abilities.c |
CAbilityPurge. Clears timed statuses, applies BuffID/Bprg, slows via authored DataA (S_PurgeMoveReduction), damages summoned (DataC when owner set). Apg2 immobilizes for DataD (unit) / DataE (hero) via S_PurgeIsImmobilized in order_move / walk. Gradual slow recovery over Dur and creep ACpu remain. See Purge. |
ACtb |
s_thunderbolt.c (shared) |
Registered; shares CAbilityThunderBolt with own authored data (Hurl Boulder projectile, stun, damage). |
Adis, Adch, Advm |
s_human_abilities.c |
CAbilityDispelMagic. Area timed-status dispel. Adis/Adch summoned damage from DataB; Advm heals caster DataA HP / DataB mana per buff removed and damages summons with DataE. See dispel-magic.md. |
ACcs |
s_melee_spells.c (shared) |
Registered; shares CAbilityCurse with autocast for the creep Curse variant. |
Aams, Aam2, ACam |
s_undead_abilities.c |
CAbilityAntiMagicShell. Empty DataC applies Bams targeting/spell immunity; authored DataC applies Bam2 and absorbs that much S_SpellDamage. Physical hits ignore the shell. ROC rows omit BuffID and fall back to Bams. |
Aami, AIxs |
s_undead_abilities.c |
CAbilityAntiMagicShellInstant (parent Aams). Item Instant AMS; AIxs code=Aami (not an Aams alias). Reuses Bams/Bam2 DataC paths. DataB magic-damage reduction authored, not wired. |
Apos, ACps, Aps2 |
s_undead_abilities.c |
CAbilityPossession / CAbilityPossessionTwo. Instant Apos/ACps transfer ownership and kill the caster. TFT Aps2 channels for Dur with Bpos/Bpoc, DataB attack amp, DataC invuln, DataD spell-immune. Not Charm. See possession.md. |
Acyc, ACcy, SCc1, Acny, AIcy |
s_cyclone.c |
CAbilityCyclone. Authored targs (TFT unit organic; item AIcy omits it); first BuffID token or ROC Bcyc fallback; S_UnitIsCycloned locks move/attack/spell. DataA (Can Be Dispelled) via status.data + S_StatusIsUndispellable (0 survives Dispel/Purge). |
ANvc |
s_volcano.c |
CAbilityVolcano channel. DataB waves every DataC seconds, DataE full damage inside Area/2, DataF half factor outside, buildings × DataD, stun Bstu for Dur/HeroDur, UnitID doodad, tree/debris via G_DestructableApplyDamage. DataA Rock Ring Count is presentation-only. |
ANsy, ANs1, ANs2, ANs3 |
s_pocket_factory.c |
CAbilityPocketFactory. UnitID factory, DataA interval, DataB Clockwerk via S_SpellDataId, DataC goblin life, DataD offset, DataE leash. ANfy is not implemented. Clockwerk death blast is Asdg/Asd2/Asd3, not ANsy. |
Asds, Asdg, Asd2, Asd3 |
s_self_destruct.c |
CAbilitySelfDestruct. DataF explodes on death; DataA/B full radius/damage, DataC/D partial, DataE building factor. Kaboom cast/autocast not implemented. |
ANin |
s_summon.c |
CAbilityInferno. Point-target delayed landing: DataA damage, DataB summon life, DataC impact delay, Dur/HeroDur Bstu stun, UnitID summon. See inferno.md. |
ANrc, ANr3 |
s_summon.c |
CAbilityRainOfChaos. Not channeled. DataA Inferno abilCode, DataB landing count, Dur interval, Area scatter. Each landing calls S_InfernoLand. |
ANdp |
s_dark_portal.c |
CAbilityDarkPortal. Point-target, not Mass Teleport. DataA unitList, DataB/C min/max count, Dur exit interval. Permanent troops (no owner/BTLF). See dark-portal.md. |
AIda |
s_item.c |
Scroll of Protection item-defense AOE: applies authored Bdef duration/area/armor bonus to allowed friendly targets and consumes the successful charged use. |
| Heavy/system abilities | s_ability_stubs.c |
Registered explicit stubs for passive autocast, cargo, mine, shop, harvest variants, item passives, and stat/XP item families. |
Evidence-backed additions
ANto (Tornado) is registered as a CAbilityWhirlwind channel and reuses the
existing whirlwind thinker. ROC and TFT ability_audit rows both author a
40-second no-target ability with summon unit ntor and buff BNto; the local
thinker therefore follows the caster like AOww while retaining the normal
channel lifetime and periodic area-status path.
The selected neutral-hero contracts now also cover ANms (Mana Shield) as an
authored-BNms no-target toggle at the central damage boundary, AHre (Resurrection) through nearby ordinary friendly-corpse
revival, ANbf (Breath of Fire) through point-area damage, ANdb (Drunken
Brawler) through the existing critical/evasion hooks, ANdh (Drunken Haze) and
ANdo (Doom) through timed target buffs, ANht (Howl of Terror) through its
authored area buff, and ANca (Cleaving Attack) through the attack-hit hook.
The current selected-block implementation also covers AHfa (Searing Arrows)
through the missile attack hook, AEar (Trueshot Aura) through the ranged
attack bonus hook, AOre (Reincarnation) through the unit death/revival
lifecycle, AOhw (Healing Wave), AOhx (Hex), AOvd (Big Bad Voodoo), AEsv
(Vengeance), and ANab (Acid Bomb). AOwd (Serpent Ward) remains unresolved:
the ROC and TFT AbilityData archives contain no AOwd row, so no authoritative
summoned unit or level data exists for a faithful registration.
a_train exists in s_train.c, but training is currently handled by the
generic Button command path rather than by a registered ability code.
Ablo (Bloodlust, CAbilityBloodlust/AAat), Afae (Faerie Fire,
CAbilityFaerieFire/AAat), Arej (Rejuvenation,
CAbilityRejuvination/AAsm), and Aroa (Roar, CAbilityRoar/AAsp) share
one status-execution path in s_melee_spells.c. ROC and TFT ability_audit
rows match for all four. Bloodlust contributes DataA to the attack-speed
divisor and DataB to move speed; Faerie Fire subtracts DataA armor in
G_UnitArmorValue; Roar scales attack damage by DataA; Rejuvenation heals
DataA/Dur per second through the HP-regen block. Bloodlust and Faerie Fire
expose the retail right-click autocast policy; Rejuvenation and Roar do not.
Faerie Fire vision of the target is not yet implemented.
Afzy (Frenzy, CAbilityFrenzy/Ablo) and Auhf (Unholy Frenzy,
CAbilityUnholyFrenzy/AAsm) extend the Bloodlust execution family. Frenzy
adds a DataA attack-speed bonus and DataB armor reduction; Unholy Frenzy
adds a DataA attack-speed bonus and drains DataB HP/sec from the carrier
through the physics tick. Frenzy exposes the autocast policy like Bloodlust;
Unholy Frenzy does not (parent AAsm). Acrs (Curse, CAbilityCurse/AAat)
applies Bcrs to an enemy unit; S_CurseMissChance returns authored DataA
and is checked against the attacker in S_ResolveAttackHit before damage
is applied. All three abilities share the melee_status_execute path.
Reference Parity List
| Code | Reference behavior | OpenWarcraft3 status | Notes |
|---|---|---|---|
AHhb |
Holy Light | Partial | Target selection (including selected-unit multiselect portrait targeting without subgroup-focus changes), range, mana, cooldown, target masks, undead-only enemy damage, healing, and target art exist. Full-health friendly casts are rejected before commitment. Needs richer dispel/damage typing and retail-complete invalid-target feedback. |
AHds |
Divine Shield | Partial | No-target timed invulnerability and the authored timed buff exist. A general overlapping invulnerability-source model remains. |
AHad |
Devotion Aura | Partial | Learned aliases use authored Area/DataA/DataB/Targets Allowed; flat armor and Had2 percent-of-authored-Defense-Base modes feed strongest-source combat/HUD values. The HUD renders the winning BuffID virtually and recipients reconcile target art. |
AHre |
Resurrection | Partial | Empty-cast rejection, friendly raisable-corpse revival, higher-level-then-nearest corpse selection, original ownership, corpse-state cleanup, authored DataB/Hre2 raised-unit invulnerability, and caster/target art exist. |
AUdc |
Death Coil | Partial | Self/full-health-friendly validation, homing missile presentation, target-incarnation cancellation, and impact-time friendly-Undead heal/enemy-living damage exist; enemy impact art requires damage to apply. Richer damage typing remains. |
AUdp |
Death Pact | Partial | Friendly Undead non-Hero/resource validation, current-life DataA/DataB conversion, DataC/DataD fixed-value conversion (including DataC's target-mana gate), DataE leave-target-alive, direct sacrifice (including authored invulnerable targets), and non-raisable/no-decay corpse semantics exist. Richer localized command errors remain. |
AUau |
Unholy Aura | Partial | Learned aliases use authored Area/DataA/DataB/DataC/Targets Allowed in strongest-source movement and HP-regeneration consumers; DataC selects max-life-percent vs flat regeneration. The winning BuffID is rendered virtually in the HUD and recipient target art is reconciled with aura membership. |
AUan / AUa2 |
Animate Dead | Partial | Empty-cast rejection, higher-level-before-lower-level corpse selection, corpse-state cleanup, caster ownership, full life, no food reactivation, in-place ability ownership preservation, authored DataB/Hre2 raised-unit invulnerability, non-raisable summon state, non-dispellable timed life, immunity to dispel-style summoned-unit damage, and authored caster/target art exist. Modern AUa2 is registered to the ability-preserving path. Classic random equal-level corpse selection, Uan3, and legacy ability-stripping differences remain. |
Acan |
Cannibalize | Partial | DataB nearest corpse search (including holder-directed approach for stored Meat Wagon corpses), authored corpse target filtering, exclusive reservation, continuous DataA healing, full-health/duration/interruption completion, corpse consumption, and Cantfindcorpse exist. Group-order policy and exact presentation remain. |
Agyd |
Create Corpse | Partial | Cool interval, DataA cap, DataB/Gyd2 spawn radius, DataC/Gyd3 nearby-corpse radius, UnitID generation, holder-relative stored-corpse counting, shared corpse lifetime, and saveable producer state exist. Exact random/grave-marker placement remains. |
Arai, ACrd, AIrd |
Raise Dead | Partial | Lower-rank-before-distance corpse search, CommandStrings failure, two authored summon groups, timed life/authored buff, summon identity/effects, autocast/item alias, holder-relative Meat Wagon cargo, and Raiu/UnitID 25-per-player oldest-first limit enforcement exist. Exact presentation remains. |
AHwe |
Summon Water Elemental | Partial | No-target summon, level unit id, mana/cooldown, ownership, and timed life exist. Needs better placement/art/order polish. |
AHbz |
Blizzard | Partial | Point targeting and periodic enemy area damage exist. Needs shard visuals, channel cancellation details, building reduction, and max-damage rules. |
AHtb |
Thunder Bolt | Partial | Target selection, projectile, damage, stun, range, mana, cooldown, and target masks exist. Needs better cast animation timing. |
ANfb |
Firebolt via Thunder Bolt type | Partial | Shares Thunder Bolt implementation with Fire Bolt data/art. Needs better cast animation timing. |
Apxf |
Phoenix Fire | Stub | Registered passive stub. Needs autocast/projectile aura behavior. |
AOsf |
Feral Spirit | Partial | Warsmash-style recast replacement, single spawn point in front of the caster using authored Area, level unit id/count, ownership, timed life, summon events, and SpecialArt presentation exist. Feral Spirit wolves also use the authored buff EffectArt (falling back to unit SpecialArt) and disappear without the regular Death animation/sound/corpse on expiry, recast, or combat death, following Warsmash’s exploding-timed-life policy. Summoned-unit classification is not yet exposed as a general WC3 unit-type flag. |
AOmi |
Mirror Image | Partial | No-target cast, mana/cooldown, data-defined image count/duration, illusion identity, summon event context, and campaign-script discovery exist. Needs retail damage multipliers, dispel/image shuffle, and richer visual behavior. |
Abun |
Burrow cargo hold | Partial | Per-holder capacity/target/range lookup, hidden+paused cargo state, death ejection, empty attack gating, Warsmash cooldown scaling, footprint-aware boarding range, and Battle Stations/Smart boarding exist. While occupied, the Burrow portrait remains on its dedicated layer and capacity-driven clickable cargo slots replace only the ordinary stat subsection; world hover also renders the shared yellow segmented cargo-occupancy bar. Remaining work is retail verification of exact segment/health/mana decoration and other presentation details. |
Abtl |
Battle Stations | Partial | OpenRealm uses its data-driven AoE, busy-unit flag, and allowed unit type to choose the nearest eligible workers up to remaining cargo capacity; selected workers path to the Burrow and load on arrival. The bundled Warsmash source defines the order/error keys but has no Abtl implementation, so this auto-call flow is retail/data-derived rather than source-confirmed Warsmash behavior. Needs localized no-Peons command feedback and broader custom-map validation. |
Astd |
Stand Down | Partial | Occupied Burrows synthesize the stock Stand Down command even when the unit ability list omits Astd; empty Burrows hide it. Activation first applies normal Stop semantics so any persistent Burrow attack/order is retired, then unloads all occupants through the shared unstuck/unpause path. Needs explicit reference-style remembered-resource Back-to-Work state and remaining presentation parity. |
AEim |
Immolation | Stub | Toggle status exists; needs mana drain, periodic area damage, and caster buff art/rules. |
Aenc |
Entangled mine cargo hold | Partial | Reuses generic cargo capacity/Smart boarding, hides+pauses loaded Wisps, preserves a rallied/Smart-ordered Wisp's boarding intent while the mine is incomplete, automatically retries loading after construction, and drives first-through-fifth occupancy animation tags. Needs remaining retail presentation/target-error verification. |
Aent |
Entangle Gold Mine | Implemented | Validates an ordinary live Gold Mine with footprint-aware building range, supports entangle/autoentangle and instant variants, lets Blizzard melee entangleinstant create a completed starting overlay, auto-entangles an eligible nearby mine when Root completes, reports Targetgoldmine for invalid mine targets, owns persistent caster art/state, and hides/marks the caster ability permanent until overlay teardown restores it. |
Aegm |
Entangled Mine | Partial | Uses Aenc cargo occupancy, Warsmash-style round-robin income slots, the parent mine's finite gold pool, direct player income, depletion death, Wisp ejection, and parent restoration. Needs remaining presentation parity. |
Aeat |
Eat Tree | Partial | Tree target, self-heal, mana/cooldown, and tree removal exist. Needs rip/eat timing and buff art. |
Ambt |
Moon Well | Partial | Manual friendly replenish restores life first then mana using DataB/DataA; nearest-valid autocast honors DataC and authored Area only (stock Area=400, Rng=99999); DataE gates natural mana regeneration to night; persistent EffectArt height follows DataD times mana fraction. Remaining work is retail presentation verification. |
Apos, ACps |
Possession | Done | Instant takeover + caster death; DataA max-level; targs ground/nonhero/enemy/organic/neutral. |
Aps2 |
Possession (Channeling) | Done | TFT channel; Bpos/Bpoc, DataB amp, DataC/DataD victim protections; abort strips buffs. |
ANch |
Charm | Partial | Target ownership transfer, range, mana/cooldown, and max-level gate exist. Needs full target restrictions/order cleanup. |
AIpm |
Item Place Goblin Land Mine | Partial | Authored UnitID point summon, ownership/summon lifecycle, and post-success charged-item consumption are wired. Placement/presentation edge cases beyond the shared point-spell validator remain. See Land Mines. |
Amin |
Mine - exploding | Partial | DataA arming, DataB invisibility transition, Cast Range enemy-ground trigger, walk-over collision, True Sight integration, rooted-Ancient/mobile-uprooted distinction, normal self-death, Death Spell, and renderer SPN child-model presentation are wired. Broader unusual target edge cases remain. See Land Mines. |
Amnx / Adda |
AOE Damage Upon Death | Partial | DataA/B full ring, DataC/D partial ring, authored unit target masks, Duration-delayed resolution at the death position, and authored destructible target classes are wired. Mine explosion presentation is model-driven through Death Spell/SPN; broader alliance/target-mask edge cases remain. See Land Mines. |
AIco |
Item command using Charm behavior | Partial | Shares Charm handler; inventory alias-to-base dispatch is wired. |
AHca |
Cold Arrows | TODO | Needs autocast/toggle projectile modifier and slow buff. |
Afzy |
Frenzy | Partial | Autocast unit-target timed status, attack-speed and armor consumers wired. Aliased creep variants resolve through SLK. Art/sound effects and exact retail target mask remain. |
Auhf |
Unholy Frenzy | Partial | Friendly unit-target timed status; attack-speed bonus and life drain per second are wired. Vision of Faerie Fire is analogous but here the drain carries the risk. Aliased creep/item variants resolve through SLK. Art/sound effects remain. |
Acrs |
Curse | Partial | Autocast enemy unit-target timed status; miss-chance consumer checked before attack damage. Vision reveal of cursed targets is not yet implemented. |
Acri, ACcr |
Cripple | Partial | Enemy unit-target timed status; all three reduction consumers wired. Art/sound and any additional dispel interactions remain. |
ANso |
Soul Burn | Done | Enemy unit-target BNso; DataA drain, DataC attack reduction, and cast silence via S_UnitIsSilenced (also covers BNsi). |
Atau |
Taunt | Partial | No-target AOE re-targets all alive enemies in Area to attack the caster. No persistent buff. |
Aens, ANen |
Ensnare | Done | Air/ground buff split, move lock, DataA/B gradual land/rise, DataC melee range. |
Aprg, Apg2, AIlp |
Purge | Partial | Shared CAbilityPurge; dispel (skips S_StatusIsUndispellable), Bprg slow from casting-row DataA, summoned DataC damage except Animate Dead dispel-immune summons, Apg2 DataD/DataE immobilize. Gradual recovery and ACpu remain. |
ACtb |
Hurl Boulder | Partial | Shares CAbilityThunderBolt; projectile stun and authored damage use own SLK row. Art remains. |
Adis |
Dispel Magic | Partial | Area timed-status dispel and DataB summoned damage via CAbilityDispelMagic. Honors S_StatusIsUndispellable and skips summoned-unit damage for Animate Dead aliases. Tree targs / Adcn+Adsm aliases remain. |
Adch |
Disenchant | Partial | Shares CAbilityDispelMagic; DataB summoned damage from own row. Enemy-only targs filter remains. |
Advm |
Devour Magic | Partial | Shares CAbilityDispelMagic; per-buff DataA/DataB heals and DataE summoned damage. DataF and ACde alias remain. |
Asps |
Spell Steal | Partial | Transfers explicitly classified Inner Fire, Bloodlust, and Faerie Fire statuses after destination allocation succeeds. Other buff families remain unsupported until their callback, periodic, source, and presentation restoration is safe. |
ANfl |
Forked Lightning | Partial | Unit-target bounce spell; starts at the selected unit, applies constant authored DataA damage to up to DataB alive enemy targets, and selects subsequent unvisited targets within Area. Projectile presentation and exact retail target ordering remain. The test fixture marks synthetic targets with SVF_MONSTER. |
Agld |
Gold Mine | Partial | Per-mine Agld-derived capacity/duration/max-gold, finite depletion, waiting workers, inside-miner protection, partial final trips, WORK occupancy animation, and shared Haunted/Entangled parent-resource ownership are implemented. Remaining gaps are mostly feedback/presentation parity. |
Agl2 |
Overlayed Gold Mine | Partial | Shared parent-mine relationship keeps the underlying Agld entity as the sole finite resource pool, hides/pauses it while overlaid, and restores it on overlay death/removal. Exact visual/effect parity remains. |
Abgm |
Blighted Gold Mine | Partial | Build-on-mine overlays retain the parent resource pool; fixed Acolyte ring slots, miner-count-dependent direct income, teardown, finite-gold deduction, and Warsmash-style persistent EffectArt at each ring slot are implemented. Exact retail effect/model presentation beyond those authored effects remains. |
Abli |
Blight | Partial | Passive Warsmash-style DataA create/remove, DataB expansion, Area cap, and Duration cadence mutate the authoritative WC3 game-owned Blight field. Placement, uhrt=blight, JASS queries/mutations, save/load, runtime terrain rendering, client preview sync, and Blighted trees consume the same state. Remaining is retail visual verification of ground-texture edge cases (see Blight). |
Auns |
Unsummon Building | Partial | Unit-target channel now applies DataB demolition HP/sec, progressive DataA cost recovery proportional to HP actually removed, temporary Buns spell immunity, and the data-driven UnderConstruction rejection before mana spend. Cancellation retains partial damage/refund and strips immunity. Remaining: exact work/effect presentation, ROC debris, and patch-1.17 accumulated cost for upgraded structures (see Unsummon). |
Asac, Alam |
Sacrifice | Partial | Both Pit->Acolyte and Acolyte->Pit endpoints share CAbilitySacrifice; an accepted pair queues fixed ushd production, hides/pauses the worker, uses Shade build time without extra food reservation, consumes the Acolyte on completion, and restores it on cancel. Remaining: exact effects/animation and dedicated command-error keys (see Sacrifice). |
Atru |
True Sight | Done | Registered as a passive detector and resolves its own authored Rng through the shared viewer-local True Sight path used by other detector abilities. |
Aaha |
Acolyte Harvest | Partial | Gather/Smart orders walk to an owned completed Haunted Mine, claim the nearest free authored ring slot, remain visible in Stand Work, unregister on retask/death/removal, and use Warcraft CommandStrings keys for wrong-owner/wrong-target/full-ring feedback. Remaining gaps are minor presentation/edge-case parity. |
Artn |
Return Resources | Partial | Drop-off eligibility is ability-driven (Argd/Arlm/Argl plus Artn-derived data), with nearest compatible selection, destroyed-target retargeting, explicit Smart-click return, and no-target return through the worker Harvest command; carried-resource state still lives in the harvest state machines. |
Ahar |
Harvest | Partial | Human worker harvest/return gameplay exists, including capacity clamping and same-forest resume after a dead remembered tree, but not as the same split data model as the ability data; command-card art/text does not yet model the carried-state presentation separately. |
Awrp |
Way Gate | Partial | Awrp-derived aliases read authored DataA/DataB as the rectangular entry area; CAbilityWarp owns target-order validation, approach/cleanup, and traversal. All five Waygate* JASS natives, active alternate presentation, static-pathing entrance selection, unstuck relocation, generation guarding, Shift continuation, and save/load are implemented. Ordinary Move/Attack-Move pathfinding does not yet discover portal routes automatically. See Way Gates. |
Awha |
Wisp Harvest | Implemented | Persistent direct DataA lumber income at the attached tree, authored Rng reacquisition radius and Dur interval (stock 900/8), one-Wisp-per-tree reservation, free-tree retargeting, Smart orders, TargetArt at DataC height, and authored EffectSoundLooped; missing required tuning rejects orders instead of borrowing Harvest defaults. No carry/drop-off cycle or tree damage. |
Ahrl |
Harvest Lumber | Partial | Shares the lumber harvest/return state machine with Ahar, but remains lumber-only: Smart, the Harvest command, and autoharvestlumber target trees; DataA/DataB/Rng/Dur are resolved from the worker's actual Ahrl (including derived aliases), and gold mining is rejected. Remaining parity is mostly exact target-error/presentation behavior and Undead tree-blight marking. |
ANcl |
Channel test | Stub | Opens cancel mode as a generic channel scaffold. |
AUcs |
Carrion Swarm dummy | Partial | Simple point-area enemy damage exists. Needs missile/line travel and art. |
AInv |
Inventory | Partial | Inventory storage and item use exist, but no AInv ability type/capacity/drop rules. |
Arep |
Human Repair | Partial | Entity targeting, Smart/Shift orders, completed structure and authored mechanical-unit Repair, Friend + Ancient/Non-Ancient target subset, DataA/DataB costs, floating-target DataE range, owner-only Human DataC/DataD power building, canonical numeric Repair toggle IDs, and nearest-valid Auto Repair are implemented. Complete generic target masks and destructible Repair remain. |
Aren |
Repair | Partial | Shares completed structure/mechanical Repair, Friend/classification target subset, DataA/DataB costs, floating-target DataE range, Shift target order, numeric Repair toggle IDs, and nearest-valid Auto Repair; rejects construction. Complete generic target masks and destructibles remain. |
Arst |
Repair | Partial | Shares completed structure/mechanical Repair, Friend/classification target subset, DataA/DataB costs, floating-target DataE range, Shift target order, numeric Repair toggle IDs, and nearest-valid Auto Repair; rejects construction. Its stock-style target row can admit Ancient targets because it lacks nonancient. Complete generic target masks and destructibles remain. |
Avul |
Invulnerable | Partial | Units with Avul spawn with damage immunity; damage guard is tested. Needs targetability/UI status polish. |
Apit |
Shop Purchase Item | Partial | Sellitems item buttons, authoritative item purchase, local-player resource charging, inventory handoff, shared item stock/restock, and pawnable sell-back are wired through the neutral-shop subsystem. The Apit ability procedure itself remains a marker; power-up acquisition and JASS stock mutation remain. |
Aneu |
Neutral Building | Partial | Neutral item shops expose a command card without granting control, use Aneu/Aall DataA as activation radius, deterministically choose a nearby owned Hero/inventory unit as patron, and present that patron's inventory. Explicit neutralinteract selection button/indicator and persistent per-player patron state remain. |
Aall |
Shop Sharing | TODO | Allied/shared neutral-building policy is not implemented; current patron resolution is intentionally local-player-owned only. |
Acoi |
Couple Instant | TODO | Test/special ability; low priority unless map data requires it. |
AIhe |
Item Heal | Partial | Inventory dispatch, selected-unit heal, target art and synchronous charge/consume rules exist. Shared item cooldown groups remain. |
AIma |
Item Mana Regain | Partial | Inventory dispatch, selected-unit mana restore, target art and synchronous charge/consume rules exist. Shared item cooldown groups remain. |
AIso |
Item Soul Theft / Soul Trap | Partial | Retail CAbilitySoulTrap uses the shared unit-target spell pipeline and authored target masks; it preserves the originating item through approach, publishes successful use-item events, traps the same target edict without death, binds the filled soul, and reveals the carrier to the trapped unit's owner. Custom target-mask parity remains. |
Asou |
Item Soul Possession | Partial | CAbilitySoulTrapped owns the persistent carrier/target relationship, carrier-death release at the death position, carrier-removal cleanup, and target-removal item cleanup. Unusual custom targets and subsystem-specific timer/building behavior remain unverified. |
AIda |
Item Defense AOE | Partial | Authored area/duration/target mask applies Bdef; live status contributes its authored armor bonus to combat/HUD. Persistent buff-world-art ownership and shared item cooldown groups remain. |
AIat |
Item Attack Bonus | Partial | Passive item bonus updates temporary Attack 1/2 damage and HUD modifier; broader stacking/modifier framework remains. |
AIab |
Item Stat Bonus | TODO | Needs hero stat modifier system. |
AIim |
Permanent Intelligence Gain | TODO | Needs permanent hero stat updates. |
AIsm |
Permanent Strength Gain | TODO | Needs permanent hero stat updates. |
AIam |
Permanent Agility Gain | TODO | Needs permanent hero stat updates. |
AIxm |
Permanent Multi-stat Gain | TODO | Needs permanent hero stat updates. |
AIde |
Item Defense Bonus | Partial | Passive item armor modifier applies on inventory acquisition and reverses on removal, using the shared temporary armor bonus preserved across Hero Agility recomputation; this matches Warsmash Ring-of-Protection-style add/remove semantics. Broader armor modifier framework remains. |
AIml |
Item Life Bonus | TODO | Needs max-health modifier system. |
AImm |
Item Mana Bonus | TODO | Needs max-mana modifier system. |
AIfs |
Figurine Summon | TODO | Needs item summon behavior. |
AImi |
Permanent Life Gain | Partial | Selected-unit max-health/current-health gain plus synchronous charge/consume rules exist. Shared item cooldown groups remain. |
AIem |
Experience Gain | Implemented | Grants Data A XP through the shared Hero progression path and plays the target effect. |
AIlm |
Level Gain | Implemented | Converts Data A level gain to the target XP threshold and uses the shared Hero progression path. |
Acar |
Cargo Hold | Partial | Per-holder capacity, real-unit cargo storage, hidden+paused occupants, single-passenger cargo-slot unload, timed Unload All spacing from the hold's authored Dur, death ejection, loaded-state JASS queries, selected-unit cargo slots, and shared world-hover segmented occupancy presentation exist. Needs broader mobile walk-into-range compatibility and exact retail segment styling verification. |
Amel, Amed, Amtc/Sch2 |
Meat Wagon corpse cargo | Partial | Data-driven capacity, real corpse-edict storage, decay suspension, holder-relative corpse position, corpse-only Amtc gating that rejects living-unit Load/Smart boarding, Get Corpse approach plus acquisition-range autocast, authored target filtering without a hard-coded corpse-owner restriction, Drop All, death ejection, Exhume integration, stored-corpse Raise Dead/Cannibalize consumption, and segmented hover occupancy exist. Exact spill/unload placement/facing and flesh-phase unload semantics remain. |
Aloa |
Load | Partial | Same-owner, capacity, target-mask, allowed-unit-type, already-loaded, and footprint-aware range validation feed real cargo state. Smart boarding now walks compatible units into range; explicit mobile transport targeting still needs broader compatibility work and command errors. |
Adro |
Drop | Partial | Unload All now ejects the first occupant immediately and then one occupant per Cargo Hold Dur until empty, using an active ability move so Stop/Move cancel it and pause/stun suspend it; save/load resumes the remaining sequence. See shared transport unloading. The current selected point is still not used for transport movement/placement, so exact authored point semantics remain. |
Adri |
Drop Instant | Partial | No-target Unload All Instant now ejects every occupant immediately through the shared cargo-removal path. Exact reference presentation/sound semantics remain. |
Aroo, Aro1, Aro2 |
Root/Uproot | Partial | Current handler is still a legacy no_pathing/movetype toggle. Verified behavior requires rooted/uprooted weapon-set bits, rooted turning, uprooted defense, point-target reroot, dynamic structure/pathing state, animation transitions, and rooted/uprooted ability-set swaps. |
Suggested Port Order
- Finish the common spell plumbing: ability level data, mana/cooldown checks, target filters, point/unit/no-target command flows, and buff/status storage.
- Complete one targeted spell end to end, preferably
AHtbThunder Bolt, then reuse that path forANfb. - Finish
AHhbretail parity around the existing target validation/healing path: preserve selected-unit portrait targeting, add retail-complete invalid-target feedback when its authoritative error mapping is known, and complete richer damage/dispel typing. - Add no-target summon spells (
AHwe,AOsf) once timed-life units are available. - Finish Repair's remaining generic target categories and destructible behavior, expand generic autocast beyond Repair's nearest-valid policy, and then generalize the remaining Wisp harvest variant (
Awha). - Defer cargo, shops, inventory item modifiers, root/entangle mine, and passive autocast abilities until the underlying status, item, and transform systems exist.
Beastmaster/Rexxar beast summons (ANsg, ANsq, ANsw, Arsg, Arsq) share Feral Spirit's magical no-blood death presentation on combat death and timed expiry; regular summoned units retain normal death handling.