38 Commits

Author SHA1 Message Date
florian.berthold ffd20d9c74 fix(dispels): map Witch Doctor Hexbreak (806240) as single-target Curse cure
release / release (push) Successful in 3s
Witch Doctor only had Cleansing Idol (504840, AoE Disease/Poison) registered,
so curses were never flagged or curable. Add Hexbreak (806240) as the
single-target Curse remover (IsBest=1, 40yd instant). DBC dispel-type reads
"Magic" but name+description+gameplay are Curse (cf. Soothing Touch).
Asc-1.1.8-coa.3
2026-05-31 14:45:24 +02:00
florian.berthold af24c1de66 ci(release): hide auto-generated source archives (hide_archive_links) 2026-05-29 20:51:11 +02:00
florian.berthold 9adfb1e1bd fix(libs): pcall AceGUI OnGamePadButtonDown (3.3.5 has no gamepad script type)
release / release (push) Successful in 3s
Asc-1.1.8-coa.2
2026-05-29 20:23:33 +02:00
florian.berthold 6a686f9a2d fix: reset Bleed cure state in Configure + map CureBleed checkbox; port icon/border textures .tga->BLP 2026-05-29 10:43:54 +02:00
florian.berthold f87b41960d refactor(bleed): pack BleedIDs as comma-string (~16/line) for clean diffs
release / release (push) Successful in 3s
Previous per-ID-per-line form (1502 lines / 53 KB) made every regen show
as a 1500-line block diff. Pack the IDs into a comma-separated string at
~16 entries per line (94 packed lines / 11.5 KB) and parse once at load.
Future regenerations only churn the chunks where IDs actually change.

No behaviour change: still produces a {[spellId]=true} hash for O(1)
lookup in Decursive.lua:GetUnitDebuff.
Asc-1.1.8-coa.1
2026-05-27 20:37:52 +02:00
florian.berthold d3baa86185 feat(bleed): add DC.BLEED synthetic dispel type, wire Cauterize, bump 1.1.8
UnitAura returns "" for the dispel type on bleeds (mechanic 15 is not a
Blizzard dispel category). New Dcr_BleedIDs.lua ships 1491 bleed-aura
spell IDs auto-generated from coa-db Postgres (effect=APPLY_AURA,
aura=PERIODIC_DAMAGE, mechanic=BLEED). GetUnitDebuff now pulls spellId
and re-tags untyped debuffs as "Bleed" when the ID is in that set.

DC.BLEED = 128, registered in TypeNames / TypeColors (dark red AA1111
to read distinct from CHARMED's bright red), CureOrder default 7,
AuthorizedKeys/Values, options-UI checkbox, and all eight locales.

Cauterize (560749) now lists DC.BLEED alongside MAGIC + POISON so the
Pyromancer cleanse covers what the spell actually does in-game.

Regenerate Dcr_BleedIDs.lua with the SQL header inside the file.
2026-05-27 19:08:09 +02:00
florian.berthold ded56c9dc9 fix(Pyromancer): register Cauterize (Magic/Poison), bump 1.1.7
Cauterize (560749) clears Magic + Poison via a dummy script effect and
removes 1 bleed via Dispel Mechanic. Decursive has no bleed type so
only the magic/poison part is wired; bleed dispel is silently dropped.
2026-05-27 18:59:29 +02:00
florian.berthold 0206974be4 ci: respect GITHUB_REPOSITORY for bundle name + tolerate per-asset upload failures
release / release (push) Successful in 2s
- build_zip.sh: derive <repo>-all.zip name from $GITHUB_REPOSITORY when
  set (in Gitea Actions the toplevel basename is the worker dir, not
  the repo). Falls back to git toplevel for local invocations.
- release.yml: skip assets above MAX_BYTES (200 MiB Gitea ceiling) and
  continue on individual upload failures. Job only fails if ZERO assets
  uploaded. Previously one oversized zip would block the whole release.
Asc-1.1.6-coa.1
2026-05-25 12:15:02 +02:00
florian.berthold 99f71dfed1 ci: tolerate 404 on release-tag existence check (set -e safety)
release / release (push) Successful in 3s
2026-05-25 11:57:38 +02:00
florian.berthold 4c12f339e1 ci: replace release-action with curl (no go/action dep, fewer moving parts)
release / release (push) Failing after 3s
2026-05-25 11:56:54 +02:00
florian.berthold ce1a2fff40 ci: point release-action at gitea.com (github mirror doesn't exist)
release / release (push) Failing after 4s
2026-05-25 11:55:57 +02:00
florian.berthold 963c23ba7b ci: use per-job auto GITHUB_TOKEN (Gitea reserves GITEA_TOKEN)
release / release (push) Failing after 2s
2026-05-25 11:51:44 +02:00
florian.berthold b96dec752a ci: add .gitea/workflows/release.yml (tag -> per-addon zip release) 2026-05-25 11:13:41 +02:00
florian.berthold 88103cc4fa ci: add tools/build_zip.sh (git-archive per addon folder) 2026-05-25 11:13:41 +02:00
florian.berthold fcf7576f36 chore: remove .github/ (upstream templates, not relevant on Gitea) 2026-05-25 11:02:46 +02:00
florian.berthold 64da3ca6dd fix(Witch Doctor/Tinker): swap Aroy NPC totems for actual class dispels, bump 1.1.6
The previous 1.1.5 commit added 'Aroy Cleansing Totem' (608170) and
'Aroy Tremor Totem' (608143) — both wrong. 'Aroy' is an NPC prefix
(npc 75001/75002 'Aroy Grappling Hook'), not a player-castable totem,
and neither id appears on /class/witch-doctor or /class/tinker.

Replaced with the real player-cast spells:

  COA_CLEANSING_IDOL     504840   Witch Doctor              Disease + Poison
                         AoE — drops an idol that pulses 1 disease and
                         1 poison effect off allies within 30 yds every
                         3 sec for 1 min. IsBest=0 (AoE, can't direct-
                         target via click).

  COA_NANOBOT_CLEANSER   502537   Tinker (Invention)        Disease + Poison
                         Single-target 40yd channel — sends nanobots to
                         one ally and removes 1 disease + 1 poison every
                         3 sec for 15 sec. IsBest=1 (Decursive can
                         direct-target via click).

Neither class has a Fear/Charm/Sleep dispel, so the Tremor Totem entry
is dropped entirely.

Bumps .toc Version: Asc-1.1.5-coa → Asc-1.1.6-coa.
2026-05-25 00:58:45 +02:00
florian.berthold b959c345ea fix(Witchdoctor/Tinker): register Aroy Cleansing + Tremor totems, bump 1.1.5
CoA's totem-using custom classes (Witchdoctor, Tinker) share the Aroy
totem family. Registers the two dispel-shaped ones:

  COA_CLEANSING_TOTEM  608170  Disease + Poison
                       Aroy Cleansing Totem — drops a totem that removes
                       1 Disease + 1 Poison effect from party members in
                       30 yd range. Vanilla Cleansing Totem pattern.

  COA_TREMOR_TOTEM     608143  Charm
                       Aroy Tremor Totem — removes Fear, Charm and Sleep
                       effects from party members. Routes to DC.CHARMED
                       (the type Decursive uses for Polymorph/Cyclone/Hex
                       breakouts) so it's recognised, even though click-
                       to-cleanse can't direct-target via an AoE totem.
                       IsBest = 0 on both — Decursive's click-cleanse
                       flow can't reasonably auto-drop a totem, but the
                       caster having the spell needs to be visible in
                       spell-lookup so the addon doesn't report missing
                       coverage.

Bumps .toc Version: Asc-1.1.4-coa → Asc-1.1.5-coa.
2026-05-24 23:53:25 +02:00
florian.berthold d2303d40be fix(Primalist): register & route Soothing Touch (Poison/Disease), bump 1.1.4
Primalist couldn't click-dispel via Decursive because only the
Mending Touch passive (524971) was registered — none of the actives.
Adds both Soothing Touch variants the same way Venomancer's two
Antivenom variants are split:

  COA_SOOTHING_TOUCH       801439   Primalist       (Poison, Disease)
  COA_SOOTHING_TOUCH_MOA   520841   Primalist MoA   (Poison, Disease)

DBC type on 520841 reports 'Magic' but the description says 'removing
1 poison and disease effect' — per our earlier CoA dispel-type lesson,
trust the gameplay over the DBC misc_value.

Neutralizing Touch (572307) is intentionally not added — it's an
enemy-purge (removes Magic buffs from foes), not a friendly-cleanse,
so it doesn't fit Decursive's click-on-raid-member flow.

Bumps .toc Version: Asc-1.1.3-coa → Asc-1.1.4-coa.
2026-05-24 23:39:37 +02:00
florian.berthold b8154b3fec fix(Sun Cleric): wire Sanctify into DC.SpellsToUse, bump Asc-1.1.3-coa
The previous commit registered COA_SANCTIFY in customSpells but didn't
add an entry to DC.SpellsToUse, which is what actually routes a class
to its dispel. Without that, Decursive knows the spell exists but
doesn't know it cleanses Magic/Disease/Poison — Sun Clerics couldn't
click-dispel anything. Adds the routing entry with IsBest=1.

Also bumps the .toc version: Asc-1.1.2-coa → Asc-1.1.3-coa.
2026-05-24 23:35:21 +02:00
florian.berthold d37e75aa7f fix(dispels): register Sun Cleric Sanctify + Primalist Mending Touch
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).
2026-05-24 23:22:21 +02:00
florian.berthold ab4182c7cb fix(libs): pick up coa-ace3 9583952 (AceDB falsy-defaults PR #10 backport)
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.
2026-05-24 19:31:42 +02:00
florian.berthold fd8d614a25 fix(libs): pick up coa-ace3 3ec2009 (BlizOptionsGroup + Settings.* CoA-compat)
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.
2026-05-24 17:41:27 +02:00
florian.berthold 51bc331aa8 fix(libs): pick up coa-ace3 d422ad3 (FileDataID → string paths)
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.
2026-05-23 14:03:41 +02:00
florian.berthold 4124393b7c chore(libs): sync Ace3 to coa-ace3 (WoWUIDev master @ 52e5f2c)
Bring every embedded Ace3 / CallbackHandler / LibStub copy in line with the
canonical Exiles/coa-ace3 bundle so LibStub resolution is predictable across
all Exiles forks regardless of which addons are enabled.

Libraries updated in this fork:
  AceAddon-3.0           13  (5 → 13)
  AceComm-3.0            14  (6 → 14)
  AceConfig-3.0          3  (2 → 3)
  AceConfigCmd-3.0       14  (12 → 14)
  AceConfigDialog-3.0    92  (49 → 92)
  AceConfigRegistry-3.0  22  (12 → 22)
  AceConsole-3.0         7
  AceDB-3.0              33  (21 → 33)
  AceDBOptions-3.0       15  (12 → 15)
  AceEvent-3.0           4  (3 → 4)
  AceGUI-3.0             41  (33 → 41)
  AceHook-3.0            9  (5 → 9)
  AceLocale-3.0          6  (2 → 6)
  AceTimer-3.0           17  (5 → 17)
  CallbackHandler-1.0    8  (6 → 8)
  LibStub                2
2026-05-23 13:42:16 +02:00
florian.berthold c6e168dfe0 Revert "coa: sanitize debuff icon path before SetTexture"
This reverts commit 8ac1651db0.
2026-05-20 10:13:38 +02:00
florian.berthold 8ac1651db0 coa: sanitize debuff icon path before SetTexture
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.
2026-05-20 00:34:21 +02:00
florian.berthold 4e2a0503b7 coa: rename COA_CONTINUUM_RESTORATION → COA_ROLL_BACK to match actual spell name 2026-05-14 02:09:52 +02:00
florian.berthold c7c133a411 coa: Chronomancer Roll Back dispels all harmful types (Magic/Curse/Disease/Poison)
Roll Back (804490) clears any harmful effect at runtime — map all four
Decursive types rather than Magic-only.
2026-05-14 01:51:29 +02:00
florian.berthold 5ebcc60223 coa: fix Chronomancer spell ID for Continuum Restoration (804490, was 801271)
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.
2026-05-14 01:28:55 +02:00
florian.berthold 3869a067c6 coa: extend default-realm spell IDs to CustomClass branch
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.
2026-05-10 22:15:18 +02:00
florian.berthold 26abb6d513 coa: dynamic PopulateListFrame buttons for 21 CoA custom classes
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.
2026-05-10 22:06:53 +02:00
florian.berthold 32324ff732 coa: register dispel spells for 21 CoA custom classes
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.
2026-05-10 05:31:59 +02:00
florian.berthold 28f87cf432 ci: preserve upstream line endings (CRLF) for clean upstream diffs 2026-05-08 04:03:00 +02:00
Jeremy P 8d647691b8 Added OG9 spell IDs and removed old disable check code (#4)
* 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
2025-11-09 10:38:34 -07:00
Anch 11e6d69786 SPELL_PURIFY (#1)
-added dispel magic to SPELL_PURIFY
2022-11-01 09:17:39 -07:00
Andrew6810 8817327813 Fix decursive for new classes 2022-10-28 04:46:07 -07:00
Andrew6810 6988cc52f5 init 2022-10-21 06:52:48 -07:00
Andrew 4ceaf3a125 Initial commit 2022-10-21 06:51:19 -07:00