COA_SANCTIFY 524968 Sun Cleric (Magic, Poison, Disease)
The active Sun Cleric multi-type dispel; previously
the only SUNCLERIC reference in Decursive was the
empty {} placeholder in Dcr_opt.lua's per-class
skip list. Now wired into the CoA customSpells
table so Decursive recognises it as a dispel cast.
COA_MENDING_TOUCH 524971 Primalist passive
Talent that turns Soothing Touch into a Poison /
Disease dispel and adds a 4% max-HP self-heal to
Neutralizing Touch's Magic dispels. Registering
the ID lets Decursive surface it in spell
lookups; the active dispels themselves are
separate IDs (not yet registered).
Re-sync after coa-ace3 9583952 backported WoWUIDev/Ace3 PR #10 which fixes
the AceDB-3.0 simple-value defaults metatable: previously falsy defaults
like ["*"] = false read back as nil because of `k2~=nil and v or nil`
short-circuiting. Now they round-trip correctly.
Re-sync after coa-ace3 3ec2009 added two CoA-compat patches:
- AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua: parent
falls back to UIParent when InterfaceOptionsFramePanelContainer is nil
- AceConfig-3.0/AceConfigDialog-3.0: Settings.* block guarded with
fallback to InterfaceOptions_AddCategory on WotLK-era clients
Without these, every addon registering a Blizzard Interface Options
panel via AceConfigDialog errors on load on the CoA client.
Re-sync after coa-ace3 d422ad3 which converted 42 numeric FileDataIDs in
Set*Texture() calls back to string paths. Upstream Ace3 uses FDIDs which
silently fail on WoW 3.3.5 / CoA, rendering color swatches, checkboxes
and window chrome as solid-red placeholders.
Ascension has been shipping auras whose UnitAura()-returned icon path
is nil or unresolvable on the local client. Decursive's LiveList fed
it straight into Texture:SetTexture(), and on the 3.3.5 engine that
crashes the renderer downstream — #132 ACCESS_VIOLATION near
Ascension.exe text + null+offset (texture-loader struct left
half-initialized). Confirmed across multiple recent DLL hashes
(0baf62b, 6a3088c, 7bba9c8, 502ca3c), recurring fault @ 0x00749EEB.
Fix: when Debuff.Texture isn't a non-empty string, fall back to
INV_Misc_QuestionMark and log the offender once (via AddDebugText so
it lands in Logs/Trace.txt) for future identification of the bad aura.
Bumped toc to Asc-1.1.3-coa.
Also corrects Antivenom/Blight Antidote dispel types to DC.POISON-only,
matching the DBC/runtime mismatch documented in memory — curse-dispel in
DBC doesn't fire server-side for Venomancer.
CoA characters were crashing on load with table-index-is-nil at
Dcr_opt.lua:292 (DebuffsToIgnore[DS["Phase Shift"]]), then cascading
into self.db being nil at DCR_init.lua:724 and ScanTime nil arithmetic
at Dcr_LiveList.lua:389.
Root cause: D:GetSpellsTranslations populates DC.DS by iterating the
class-specific Spells table. The IsCustomClass branch added in
32324ff only filled COA_* dispel spells, but Dcr_opt.lua DebuffsToIgnore
/ BuffDebuff and DCR_init.lua SpellsToUse reference DS["Phase Shift"]
/ "SPELL_CURE_POISON" / etc. unconditionally - keys that only existed
in the heroSpells / defaultSpells branches.
Merged the IsDefaultClass and IsCustomClass branches so both share the
same defaultSpells base table; the CoA-specific dispels remain a
nested IsCustomClass-gated extension. CoA realm shares world content
with the default realm so the prefixed IDs apply; _LOST SPELL_ fallback
in GetSpellsTranslations handles any that don't resolve.
Closes the deferred UI piece from 32324ff. The 11 vanilla class buttons
in Dcr_lists.xml stay hardcoded so this fork keeps working on stock
clients with no CoA extras (DC.ClassNumToUName produces 0 entries at
idx >= 22 there, builder returns early).
D:BuildPopulateExtraClassButtons(frame) walks DC.ClassNumToUName for
keys 22+, sorted, and creates one GameMenuButtonTemplate per class:
- First extra fills row 6's empty right column (beside Hero)
- Remaining alternate left/right, chained off Hero / Deathknight
- Frame grows by ceil((n-1)/2) * 20 px so the existing BOTTOM-anchored
Close button slides down with it
Idempotent via frame.coa_extras_built.
Wired from DecursivePopulateListFrame OnShow with a Dcr.BuildPopulateExtraClassButtons
nil-guard so an out-of-order load doesn't break the frame.
Bumped toc to Asc-1.1.1-coa.
Three gaps closed for CoA custom-class players:
1. DCR_init.lua C_Player:IsCustomClass() branches were stubs printing
"CoA is not currently supported". Filled both branches (SpellsToUse +
Spells dictionary) with 11 dispel spell IDs covering 10 CoA classes
(Chronomancer, Cultist, Templar, Venomancer, Pyromancer, Ranger,
Bloodmage, Runemaster, Starcaller, Witch Hunter). The other 11 CoA
classes have no dedicated player-cast dispel in coa-db.
2. Dcr_Raid.lua ClassNumTo{LName,UName} were hardcoded to indices
11..21 (vanilla 10 + HERO). Append every additional CLASS_SORT_ORDER
token starting at 22 — append-only so existing DecursiveDB skip /
priority numeric keys stay valid. CoA-class units in raids now get
priority/skip lookups instead of silent nil-guarded no-ops.
3. Bumped toc Version to Asc-1.1.0-coa.
Spell IDs sourced from coa-db (mind_of_ascension_talent + class_spell)
filtered to effect_id=38 (DISPEL) with misc_value in {1,2,3,4} (Magic,
Curse, Disease, Poison).
PopulateListFrame XML buttons (Dcr_lists.xml) for the 21 CoA classes
deferred — needs UI rework (frame is already near-full at 11 buttons).
Skip/priority lists still work without these populate-by-class
shortcuts.
* Added OG9 spell ids
* minor formatting
* removed old "disable" code for some players original author didn't like
* ascension version change
* missed a call to chjeckplayer