SuperSwingTimer v0.2.2
What's new
v0.2.2 - 2026-09-13
Recent Changes (2026-09-13)
| Area | Change |
|---|---|
| Power bar — wiring | Shared updater is no longer cleared at init, and every class's own delegate now runs from its own OnUpdate hook (Warrior gained ns.UpdateWarriorRageBar) |
| Power bar — stack position & size | New ns.UpdatePowerBarAnchor() keeps the resource bar as the bottom-most bar of the swing stack with the swing bars' width and its fixed 10px height (global-scale aware); runs on bar creation, equipment changes, size changes, and position restores |
| Hunter cast display | Stored Steady Shot / Aimed Shot / Volley display clears at cast landing, so the end-of-cycle tail shows "Auto Shot" instead of a stale "Steady Shot" |
| Hunter ranged keep-alive | Melee only counts as active while the target is actually in melee range — no more MH-bar flash or ranged-bar reset/jump after cycles for hunters who meleed earlier in the fight |
| Hunter colors | The Cast Bar swatch always owns the cast-bar fill; Auto Shot Safe/Late now paint only the window zones (ranged bar end zone + cast-bar zone overlay) |
Fixed (2026-09-13 post-test pass)
- Power bar never rendered — shared updater deleted at init (
SuperSwingTimer_ClassMods.lua):InitClassMods()nil-clearedns.UpdatePlayerPowerBar/ns.UpdateWarriorRageBar, but those are the shared, class-agnostic implementations assigned at file scope — every per-class delegate (ns.UpdateRoguePowerBar,ns.UpdatePaladinPowerBar,ns.UpdateShamanPowerBar,ns.UpdateDruidPowerBar,ns.UpdateHunterPowerBarare thin wrappers that call through the shared one) and the Warrior event paths depend on them, and nothing re-assigned them. All guardedif ns.UpdatePlayerPowerBar thencall sites became no-ops, so no class ever rendered its power bar. The shared names are no longer nil-cleared; the per-class delegate nil-clears remain (each class's ownSetup*()re-registers only its own delegate — "each class loads only its own stuff"). Every class's own delegate is now also invoked from that class's own OnUpdate hook — Warrior gained its ownns.UpdateWarriorRageBardelegate for this — so the resource bar updates through the class-local wiring for all 6 classes. - Power bar stack position and size (
SuperSwingTimer_ClassMods.lua/SuperSwingTimer_UI.lua): new shared helperns.UpdatePowerBarAnchor()keeps the resource bar re-anchored as the very bottom bar of the stack and re-sized to match the swing bars' width with its fixed 10px resource height (global-scale aware). It runs on bar creation, equipment changes, size changes, and position restores, and replaces three copies of the duplicated inline anchor/size blocks (init hook,ApplyBarSize,RestoreAllBarPositions). - Hunter bar kept showing "Steady Shot" over the Auto Shot window (
SuperSwingTimer_State.lua):HandleSpellcastSucceededre-seeded the stored cast display for real casts andGetHunterStoredCastDurationforced theGetSpellInfobase cast time (1.5s), so after a hasted Steady/Aimed cast the stored display outlived the actual cast end and shadowed the Auto Shot hidden window. Real casts (Steady Shot / Aimed Shot / Volley) now clear the stored display at landing; instant Multi-Shot keeps its seeded short helper window. - MH bar flash + ranged bar jump after each Auto Shot (
SuperSwingTimer_UI.lua):ShouldKeepHunterRangedTimerActive()treated the stale MH timer state (stays"swinging"for the rest of combat after any melee swing) as active melee, so the ranged timer was hard-reset at each cycle end for hunters who meleed earlier — flashing the MH bar on and resetting/relatching the ranged bar until the next Auto Shot event arrived. The melee shortcut now applies only when the target is actually in melee range (ns.IsHunterTargetInMeleeRange() == true). - Hunter cast bar color and ranged zone were the same setting (
SuperSwingTimer_UI.lua/SuperSwingTimer_Config.lua): the Auto Shot Safe/Late colors repainted the ENTIRE cast bar fill during every cast and Auto Shot window (in addition to the ranged bar end zone), so "Cast Bar" appeared to do nothing and the window colors acted as the bar color. The cast bar fill now always uses the Cast Bar color and the safe/unsafe feedback is drawn as aclipZoneOverlayzone above the fill using the existing Auto Shot Safe/Late colors (same coverage as before). The ranged bar end zone is unchanged. No new settings, no DB migration, no version bump.
Added
Unified Multi-Class Resource/Power Bar (
SuperSwingTimer_ClassMods.lua&SuperSwingTimer_UI.lua):- Fully implemented live power tracking for all 6 physical classes:
- Warrior: Rage (0–100) with Execute range icon alert with active glow when target health is <= 20%.
- Rogue: Energy (0–UnitPowerMax).
- Druid: Dynamic shapeshift adaptation — automatically transitions between Bear Form (Rage), Cat Form (Energy), and Caster/Travel/Tree/Moonkin (Mana).
- Paladin: Mana (0–UnitPowerMax, displayed as
current/max). - Shaman: Mana (0–UnitPowerMax, displayed as
current/max). - Hunter: Mana (0–UnitPowerMax, displayed as
current/max).
- Standardized Power Bar height to 10px (
ns.POWER_BAR_HEIGHT = 10), matching UI scale and improving readability. - Integrated Blizzard's
PowerBarColortable mapping with fallback to per-class customizable DB color swatches. - Connected event-driven reactive power updates on
UNIT_POWER_UPDATE,UNIT_POWER_FREQUENT,UNIT_DISPLAYPOWER, andUNIT_MAXPOWER. - Anchored cleanly beneath off-hand or main-hand bars for melee classes, and beneath the Auto Shot cast bar for Hunters.
- Added power bar preview and smooth resource cycle animation to
/ssttest. - Added per-class Resource/Power Bar toggle in Quick Controls and Options panel.
- Fully implemented live power tracking for all 6 physical classes:
Hunter Auto Shot Cast Bar Enlarge (
SuperSwingTimer_UI.lua&SuperSwingTimer_Constants.lua):- Enlarged default Hunter Auto Shot cast bar height from 10/13px to 15px (matching standard main-hand/ranged bar height).
- Adjusted typography and latency markers for clean vertical alignment in the taller frame.
Buff Icon Timer Centering & Stack Counter Overlay (
SuperSwingTimer_ClassMods.lua):- Re-anchored buff countdown timer text centered directly above the icon (
"BOTTOM", icon, "TOP", 0, 2, centered horizontal justification, 12pt outline), keeping the icon face completely clear and unobstructed. - Added dedicated stack count text overlaid on the icon face (
"BOTTOMRIGHT", icon, "BOTTOMRIGHT", -1, 1, right-justified, 11pt outline, white text). Stacks are the only text rendered overtop the icon face. - Formatted stacks to display when
stacks > 1, as well as whenstacks == 1for special stacking auras such as Maelstrom Weapon (408505/MSW) and Paladin Reckoning. - Fully implemented and standardized across all 6 physical class modules: Warrior, Paladin, Shaman, Druid, Hunter, and Rogue.
- Replaced
icon.durationTextinside the icon with clean child frame show/hide management on aura expiration.
- Re-anchored buff countdown timer text centered directly above the icon (
Shaman Spell-Weaving Real-Time Breakpoint & Spark Overlay (
SuperSwingTimer_Weaving.lua&SuperSwingTimer_ClassMods.lua):- Dynamic Real-Time Breakpoint Scaling: Breakpoint location for Lightning Bolt (and other tracked weave spells) dynamically adjusts in real time based on live cast duration.
- Haste & Season of Discovery Maelstrom Scaling: Automatically queries live spell cast time via
GetSpellInfo(spellId), applying active spell haste buffs (Bloodlust/Heroism 30%, Berserking, Drums of Battle) and Season of Discovery Maelstrom Weapon stack reductions (20% per stack down to 0s instant cast at 5 stacks), as well as Nature's Swiftness, Elemental Mastery, and Power Surge procs. - Fixed Breakpoint Target Icons: Cutoff marker icons (
ns.weaveTriangleTopandns.weaveTriangleBottom) remain anchored at the exact breakpoint location on the swing bar, giving the player a reliable target cutoff before which they must initiate the cast to weave cleanly between swings without clipping. - Over-Bar Cast Spark Overlay: Weave spark (
ns.weaveSparkandns.weaveSparkOH) renders cleanly overtop of the main-hand bar only while actively casting (isCasting == true), animating smoothly across the bar over the cast's duration. - Safe vs. Clipped Spark Visual Feedback:
- Shaman Class Color (
#0070DE/{ r = 0.0, g = 0.44, b = 0.87 }): Rendered when the cast was started before the swing passed the breakpoint (clean weave, no swing clip). - Bright Red (
#FF2626/{ r = 1.0, g = 0.15, b = 0.15 }): Rendered when the cast was started after the swing passed the breakpoint (clipped weave, delaying the main-hand swing).
- Shaman Class Color (
Fixed
Warrior Rampage Duplicate Buff Icon (
SuperSwingTimer_ClassMods.lua):- Fixed an issue where the Warrior Rampage buff displayed twice in the buff icon stack when both Classic/TBC and SoD entries were registered.
- Implemented
MergeTrackedSpellsandseenAurasdeduplication across all class buff tracking systems to prevent duplicate buff/CD icons.
CurseForge Bug 1: Non-Localized Font Path & Escape Errors (
ClassMods.lua):- Eliminated hardcoded
Fonts\\FRIZQT__.TTFand excessive backslash escapes (Fonts\\\\FRIZQT__.TTF) that broke on non-English clients (ruRU, koKR, zhCN, zhTW). - Implemented dynamic
ns.GetDefaultFont()resolver querying Blizzard's client-localizedSTANDARD_TEXT_FONTglobal with safe fallback across all 11 files.
- Eliminated hardcoded
CurseForge Bug 2:
Texture:SetPoint(): Invalid region point Height(ClassMods.lua):- Re-architected glow border edge builder
CreateGlowBorderFrames()from fragile positional array slicing to 4 explicit named border textures (top,bottom,left,right), preventing dimension strings ("Height") from ever being passed toSetPoint().
- Re-architected glow border edge builder
Debuff Bar Icon Overlapping & Alignment (
ClassMods.lua):- Re-anchored all debuff bar icons (Paladin Judgement/SoV, Warrior Shield Block/Rend/Thunder Clap/Demo Shout/Sunder Armor, Shaman Flame Shock, Druid Mangle/Rip/Rake, Hunter Traps & Stings, Rogue Rupture/Expose Armor) cleanly to the outside left (
RIGHT,bar,LEFT, -2, 0) withSetTexCoord(0.07, 0.93, 0.07, 0.93). - Debuff status bars remain 100% aligned with the swing bars without icon occlusion or text clipping.
- Re-anchored all debuff bar icons (Paladin Judgement/SoV, Warrior Shield Block/Rend/Thunder Clap/Demo Shout/Sunder Armor, Shaman Flame Shock, Druid Mangle/Rip/Rake, Hunter Traps & Stings, Rogue Rupture/Expose Armor) cleanly to the outside left (
SuperSwingTimer_UI.lua Line 1077 Linter Warning:
- Fixed
Cannot assign boolean|nil to parameter booleanby updatingUpdateHunterCastLatencyVisualsignature and call-site to explicit boolean coercion(...) == true.
- Fixed
Blizzard API Table Lookup in
GetPowerBarColor(SuperSwingTimer_ClassMods.lua):- Fixed native color lookup: Blizzard Classic FrameXML returns a color table
{ r, g, b }rather than tuple arguments.
- Fixed native color lookup: Blizzard Classic FrameXML returns a color table
Rogue Power Bar Recursion & Linter Warning (
SuperSwingTimer_ClassMods.lua):- Resolved self-recursive call in
UpdateRoguePowerBarand fixed theunused variable colorRefwarning inluacheck.
- Resolved self-recursive call in
Stale Class Initializers (
SuperSwingTimer_ClassMods.lua):- Nil-cleared all per-class power bar function references during
InitClassMods()to prevent cross-class contamination.
- Nil-cleared all per-class power bar function references during
Changed
- Architecture Consolidation (
SuperSwingTimer_ClassMods.lua,UI.lua,Config.lua):- Consolidated duplicate frame creation and legacy
ns.warriorRageBarchecks into a single canonicalns.playerPowerBar(SuperSwingTimerPlayerPowerBar) constructed during class initialization. - Preserved backward-compatible alias
ns.warriorRageBar = ns.playerPowerBarfor external macros and test hooks.
- Consolidated duplicate frame creation and legacy
- Version Sync:
SuperSwingTimer.tocupdated tov0.2.2. - SavedVariables DB Migration v62 (
SuperSwingTimer.lua):- Bumped
ns.DB_CURRENT_VERSIONto 62. - Automatically seeds
showPowerBar, enhanced Hunter cast bar height, and per-class resource colors for existing profiles.
- Bumped
This mod has no additional files

