promotional bannermobile promotional banner

xCT+ Combat Text for Classic

xCT+ is a replacement for Blizzard’s scrolling combat text. This is a fork to work with Classic Flavors.
Back to Files

v4.7.4

File namexCT_-v4.7.4.zip
Uploader
paradosiparadosi
Uploaded
Sep 2, 2026
Downloads
197
Size
804.4 KB
Flavors
ClassicClassic TBC
File ID
8793961
Type
R
Release
Supported game versions
  • 2.5.5
  • 1.15.8

What's new

xCT+ Classic

v4.7.4 (2026-09-02)

Full Changelog Previous Releases

  • v4.7.4: Fix seven bugs, remove dead code, add static analysis
    Seven user-visible bugs, none previously caught because no static
    analysis had ever run against this addon.
    Bug fixes:
    • compat.lua installed byte-based string.utf8* stubs and loads before
      libs/, so libs/UTF8 (which only fills empty slots) was skipped
      entirely. Every utf8.sub was a raw byte slice, corrupting the first
      character of the localized Stole/Killed/Dispelled labels on all
      non-ASCII locales -- a zhCN locale ships with the addon.
    • The Proc Name filter input referenced an undefined setProc. AceConfig
      accepts a nil setter and silently ignores it, so typing a proc name
      appeared to work but wrote nothing. Now uses setSpell.
    • Outgoing "Show Overhealing" was gated on the incoming Healing frame's
      enableOverHeal; its own toggle was never read.
    • Outgoing "Show Absorbs" was gated on enableOutAbsorbs ("absorbs you
      apply") rather than enableAbsorbs, written for exactly this case.
    • "Merge Ranged Attacks" was bypassed: auto shot merged under "Merge
      Melee Swings". Each toggle now governs its own attack type.
    • "Show Periodic Energy Gains" lost its gate when periodic energize was
      folded into SpellEnergize. Re-gated on the SPELL_PERIODIC prefix.
    • KILLCOMMAND_ID was 83381, the Cataclysm-era pet damage spell, absent
      on TBC and Era, so the option never fired and pet Kill Command damage
      was labelled as auto attack. Corrected to 34026, matching the id
      already used one line above to resolve the spell name.
      All re-wired settings default to true, matching the toggle that was
      wrongly governing them, so a default profile is unchanged.
      Also: the C_AddOns shim omitted EnableAddOn/IsAddOnLoaded/LoadAddOn,
      which libs/LibSink-2.0 upvalues at load.
      Performance:
    • The per-frame alpha worker ran an OnUpdate over every frame from load
      forever, though the default profile leaves all frames opaque and the
      loop produced nothing. Now armed only while a frame uses custom alpha.
      Cleanup (-192/+106):
    • Removed the never-called table pool, the unreachable battle-pet loot
      branch (also the only unguarded C_PetJournal call), five orphaned
      accessors, eight unused option helpers, CLASS_LOOKUP, the never-read
      PLAYER_NAME block, addon.IsTBC, duplicate width keys and dead stores.
    • Deleted config/merge_race.lua and config/merge_item.lua (payload
      entirely commented out, referencing retail-only races and items) and
      media/colors.lua (no content, and never listed in media/include.xml,
      so it shipped without ever being loaded).
    • SCHOOL_MASK_* moved from config/profile.lua to compat.lua and now
      fills gaps instead of overwriting Blizzard's globals.
      Added .luacheckrc describing the addon's WoW API surface. Static
      analysis: 434 warnings -> 39, with zero undefined globals. The rest is
      mixed tab/space indentation, deliberately left rather than churn 14k
      lines.
      Not yet verified in game.
      Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01AWwEY7j7phYrfcxJZsQDVb

This mod has no additional files