RoC Aura Registrations And Devotion Aura Mapping
Finding
RoC 1.0's AbilityData.slk schema has no BuffID column. That absence led to
the initial assumption that AHad recipients must use the ability's
TargetArt, the same ground-pattern model used by the caster. Static analysis
of the original RoC gameplay DLL shows that assumption is wrong for Devotion
Aura: the executable associates AHad with buff class BHad, whose profile
selects the separate recipient glow model.
The proven RoC behavior is therefore a source pattern on the caster and the
BHad glow on eligible recipients. The relationship is encoded in engine
behavior rather than in the RoC ability data row. This investigation followed
the AHad path specifically; the registration inventory below is not evidence
that every aura's ability-to-buff relationship has been traced.
Finding The RoC Gameplay DLL
The RoC installation image is
data/war3cds/Warcraft 3 Reign of Chaos/Setup.mpq. Its installer manifest
SetupDat/inst_files.ins identifies the gameplay payload as
Files100/Game.dll. To locate the entry in the MPQ, use the repository's
listfile-assisted scanner and the recovered filename list:
python3 tools/list_setup_mpq.py \
'data/war3cds/Warcraft 3 Reign of Chaos/Setup.mpq' \
tools/WarcraftIIIFileListZezulaLadik.txt
The listed internal path is Files100\\Game.dll (MPQ paths use backslashes).
Extract that entry with mpqtool and analyze the extracted PE statically. The
RoC payload examined here was 7,725,118 bytes, SHA-256
9970c5af4ff4821f8d593249e06af803d8132bef4c7d015d6a1423223c51a378.
These details identify the evidence precisely; the original game was not
launched.
Static Analysis Method
The PE was inspected with radare2 and Ghidra. First, RTTI class names and rawcodes were searched to find registration call sites and class constructors. The registration helper's call arguments were decoded into virtual address, rawcode, class name, and declared parent. The executable contains 717 calls to that helper; the inventory below includes the 27 aura-related ability and buff classes.
Then the AHad registration and nearby class methods were followed in Ghidra.
Targeted decompilation was used for those methods; full automatic analysis was
not needed. No PDB was available. The important distinction is that RTTI
registration establishes which classes exist, while the AHad method trace
establishes the ability-to-buff lookup. A class's declared parent is not that
lookup relationship.
Aura Class Registration Inventory
Addresses are virtual addresses in the extracted Files100\\Game.dll. The
rawcode and class names are executable strings. parent is the registered
RTTI parent, not a linked ability or buff unless independently shown.
| Registration VA | Rawcode | Registered class | Parent |
|---|---|---|---|
0x6f2fa919 |
aura |
CAbilityAura |
ABon |
0x6f3c0ca9 |
BAUR |
CBuffAura |
buff |
0x6f2fbfb9 |
AHab |
CAbilityAuraBrilliance |
aura |
0x6f2fba09 |
BHab |
CBuffAuraBrilliance |
BAUR |
0x6f2fcb19 |
AOac |
CAbilityAuraCommand |
aura |
0x6f2fc6a9 |
BOac |
CBuffAuraCommand |
BAUR |
0x6f2fcf29 |
Aakb |
CAbilityAuraKotoBeast |
aura |
0x6f2fcd89 |
Bakb |
CBuffAuraKotoBeast |
BOac |
0x6f2fd8e9 |
AHad |
CAbilityAuraDevotion |
aura |
0x6f2fd6f9 |
BHad |
CBuffAuraDevotion |
BAUR |
0x6f2fdc89 |
AOae |
CAbilityAuraEndurance |
aura |
0x6f2fdef9 |
BOae |
CBuffAuraEndurance |
BAUR |
0x6f2fe859 |
Aapl |
CAbilityAuraPlague |
aura |
0x6f2fecb9 |
Bapl |
CBuffAuraPlague |
BlDT |
0x6f2ffba9 |
Aoar |
CAbilityAuraRegenLife |
aura |
0x6f2ff429 |
Boar |
CBuffAuraRegenLife |
BAUR |
0x6f2ffe39 |
Aarm |
CAbilityAuraRegenMana |
aura |
0x6f2ff7e9 |
Barm |
CBuffAuraRegenMana |
BAUR |
0x6f301639 |
Aasp |
CAbilityAuraSpell |
AAsp |
0x6f3019e9 |
AEah |
CAbilityAuraThorns |
aura |
0x6f301829 |
BEah |
CBuffAuraThorns |
BAUR |
0x6f301ec9 |
AEar |
CAbilityAuraTrueshot |
aura |
0x6f301d29 |
BEar |
CBuffAuraTrueshot |
BOac |
0x6f3026d9 |
AUau |
CAbilityAuraUnholy |
aura |
0x6f302189 |
BUau |
CBuffAuraUnholy |
BAUR |
0x6f303009 |
AUav |
CAbilityAuraVampiric |
aura |
0x6f302e59 |
BUav |
CBuffAuraVampiric |
BAUR |
Aasp has no corresponding CBuffAuraSpell registration in this set. The
unusual parents for Bakb, Bapl, and BEar are preserved as registered;
they should not be interpreted as data-level BuffID edges.
Traced Devotion Relationship
The relevant executable evidence is:
| Address | Directly observed behavior |
|---|---|
0x6f2fd8e9 |
Registers rawcode AHad as CAbilityAuraDevotion. |
0x6f2fd6f9 |
Registers rawcode BHad as CBuffAuraDevotion. |
0x6f2fd9f0 |
CAbilityAuraDevotion method returns the AHad identifier. |
0x6f2fda10 |
CAbilityAuraDevotion method returns the BHad identifier. |
0x6f2fda20 |
Uses BHad as a lookup key and sends the resolved result through aura handling. |
Together, these method references show an engine-side AHad→BHad relation.
The class registrations alone would not establish that. The trace is specific
to the original RoC DLL and Devotion Aura.
Data Profile Cross-Check
In RoC War3.mpq, Units/HumanAbilityFunc.txt contains:
| Rawcode | Field | Value |
|---|---|---|
[AHad] |
Targetart |
Abilities\\Spells\\Human\\DevotionAura\\DevotionAura.mdl |
[AHad] |
Targetattach |
origin |
[BHad] |
Targetart |
Abilities\\Spells\\Other\\GeneralAuraTarget\\GeneralAuraTarget.mdl |
[BHad] |
Targetattach |
origin |
The BHad profile and its recipient model are present in RoC, not merely
introduced by TFT. In the later TFT data, AbilityData.slk explicitly assigns
AHad.BuffID = BHad at each rank. The RoC AbilityData.slk does not expose a
BuffID column, while its ability profile already contains AHad and BHad
art definitions. This combination explains how RoC could have distinct source
and recipient visuals without storing the relationship in that SLK field.
Limits And Interpretation
This is static evidence of the RoC executable's class registration and the
Devotion lookup path. It supports an implicit/hardcoded mapping (hypothesis C)
for AHad→BHad; it contradicts the claim that the RoC data schema's missing
BuffID proves identical caster and recipient visuals. The matching profile
art paths support the intended visual roles, but this investigation did not
observe the original executable rendering a live aura. Runtime observation
would be needed to confirm the final visual result, including any renderer
conditions not represented in the inspected path.
The analysis did not trace the other aura class methods or exhaustively
inventory every executable mapping. Do not infer their relationships from
matching names, RTTI parents, or registration order. For OpenRealm, resolve RoC
Devotion recipients through BHad just as TFT's explicit BuffID does, while
keeping the mapping version-aware and avoiding an unverified universal rule.
See Aura Targets And Overlays for the current engine presentation lifecycle and regression coverage.