File Details
v1.1.0
- R
- Mar 2, 2026
- 6.38 MB
- 11
- 12.0.1
- Retail
File Name
VoidstormGamba-v1.1.0.zip
Supported Versions
- 12.0.1
VoidstormGamba
v1.1.0 (2026-03-02)
- fix: GAME_RESULTS handler signatures in Social modules, nil guard in MirrorUpdateTurn
ChallengeSystem, GuildLeague, and SpectatorMode all used (event, data)
instead of (results, game) for GAME_RESULTS handlers, making them
silently non-functional. SpectatorMode also listened for a non-existent
GAME_STATE_UPDATE event instead of GAME_STATE_CHANGED.
Added nil guard on game.deathroll in MirrorUpdateTurn for robustness. - feat: cross-realm support, whisper fallback, UI fixes, stats top-10
Cross-realm:- Class color communication via addon messages
- Class cache fallback in PlayerRow, CelebrationPopup, WinnerOverlay
- Self-class detection via UnitClass("player") for host
Whisper fallback: - Non-party players receive addon messages via whisper
- Suppress SendChatMessage to PARTY/RAID when not in group
- Guard in GameEngine, PokerComm, Tournament
UI: - Invite button sends on click (not just Enter)
- Player-Realm placeholder in invite input
- Help menu info buttons with detailed section popups
- Feed hidden by default, stray character fix, scrollbar cleanup
- Simple mode host roll/leave button overlap fix
- Stats tab record cards open top-10 leaderboard detail view
Fixes: - SHA256 bit.ror fallback for all WoW versions
- Lua function ordering fix in Comm.lua (NeedsWhisperFallback)
- Side bets, history tab, mode-specific fixes
- feat: add economy, social, and spectator modules
Integrates bet limits, audit logging, anti-cheat detection,
guild leagues, 1v1 challenges, spectator mode, and their UI
panels. Adds OnComm callback system for module comm routing. - fix: prevent blank Active Game tab after game creation
- Wrap Build() in pcall so errors surface in chat instead of being
silently swallowed by WoW's C_Timer error handler - Manage feedPanel visibility in UpdateState (show only when a game
is active) - Add delayed UpdateState calls after tab transitions and game
creation to handle crossfade animation timing
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- Wrap Build() in pcall so errors surface in chat instead of being
- feat: unlock Settings tab during games, lock Create Game instead
- Settings tab is no longer disabled during active games/tournaments
- Create Game tab is now disabled instead (prevents creating while
game is in progress) - Active Game tab label turns gold when a game is ongoing, resets
to white on session end (in addition to existing status dots)
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- feat: add event feed to ActiveGameTab (host window)
Adds an always-visible collapsible event feed panel at the bottom of
the host's advanced game window, matching the compact window's feed.
Shows join/leave, rolls (with deathroll max), eliminations, and game
results. Buttons re-anchor to feedPanel:TOP so they move when the
feed expands. Feed persists after session end, clears on new game.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - fix: keep event feed visible after session ends, clear on new game
Moved ClearFeed() from SESSION_END to GAME_CREATED so players can
review roll results and outcomes after a game finishes. Feed is
cleared when the next game is created instead.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - fix: prevent duplicate ROLL_RECORDED on mirrors and anchor buttons above feed panel
- GameEngine.MirrorRecordRoll now guards against already-rolled players,
preventing a second ROLL_RECORDED fire when both CHAT_MSG_SYSTEM and
ROLL_UPDATE arrive for the same roll. - CompactGameWindow: re-anchor rollBtn, joinBtn, leaveBtn, historyBtn
to feedPanel:TOP instead of fixed offsets from frame bottom. Buttons
now automatically move up when feed panel expands, preventing overlap.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- GameEngine.MirrorRecordRoll now guards against already-rolled players,
- fix: guard nil mode stats fields and add missing modes to StatsTab popup
ShowPlayerPopup crashed on goldWon/goldLost/wins/losses being nil for
mode entries that exist with games > 0. Added nil guards with fallback
to 0. Also added Blackjack and Double or Nothing to per-mode breakdown.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - fix: remove Bindings.xml from .toc to prevent double-load warning
WoW auto-loads Bindings.xml from addon directories. Listing it in
the .toc caused a second parse as regular UI XML, where the <Binding>
element's 'name' attribute is unrecognized.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - fix: use shared animation helpers and correct keybind roll range
- Replace inline resultBox._fadeIn and resultMedallion._popAnim with
Anim.CreateFadeIn and Anim.CreateMedallionPop in both ActiveGameTab
and CompactGameWindow - Fix Keybinds.lua to use Engine.GetExpectedRollRange() instead of
non-existent g.rollMin/g.rollMax fields
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- Replace inline resultBox._fadeIn and resultMedallion._popAnim with
- fix: hoist countdownThump to file scope for event handler access
The variable was declared local inside Build() but referenced from
a file-level COUNTDOWN_TICK event handler, causing the countdown
pulse animation to silently never fire.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - fix: cache crossfade AnimationGroups and reorder .toc for EmoteData
- Fix animation group leak in SwitchTab by caching fadeOut/fadeIn
AnimationGroups on the frame instead of creating new ones each call - Move EmoteData.lua before EmoteSystem.lua in .toc to eliminate
fragile load-order dependency - Include user's SettingsTab changes (remove unused Row Density
dropdown, add Tab Crossfade checkbox)
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- Fix animation group leak in SwitchTab by caching fadeOut/fadeIn
- fix: add Tab Crossfade checkbox and remove unused Row Density dropdown
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: add semantic color-coded status dots to tab strip
Extend CreateTab with SetDotColor for dynamic dot colors. Add
GAME_STATE_CHANGED and TOURNAMENT_STATE_CHANGED handlers that show
gold dots when it's your turn, green for active games, cyan for
tournament states.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: always-visible event feed in compact game window
Move feed panel inside the frame as a 60px bottom section (expandable
to 150px). Remove old title bar toggle. Persist expand state.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: always-visible event feed in compact game window
Move the event feed panel from a hidden overlay below the frame to an
always-visible section at the bottom inside the frame. Increase frame
height from 300 to 360 to accommodate the feed. Add expand/collapse
toggle (60px collapsed, 150px expanded) with persistent state. Remove
the old feed toggle button from the title bar and the feedVisible guard.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: auto-register widget frames for theme hot-swap
Add Theme.Register calls to CreatePanel, CreateInnerPanel, CreateButton,
CreateEditBox, and CreateDropdown so Theme.Apply() re-applies colors
instantly without ReloadUI.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: adaptive player row density (normal/compact/auto)
Add PlayerRow.GetDensityConfig() for adaptive row sizing and
a Row Density dropdown in the Display settings section.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: theme hot-swap without ReloadUI via Theme.Set and Theme.Apply
Add frame registry (Theme.Register), Theme.Apply for propagating theme
changes to registered frames, and Theme.Set for switching themes
in-place. Replace the "Reload UI" button in SettingsTab with a direct
call to Theme.Set so theme changes take effect immediately.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: add collapsible sections to Settings tab
Add Layout.CollapsibleSection widget and integrate it into SettingsTab.
Each settings section (Gameplay, Payments, Chat, Display, Data & Debug,
Sound) now has a clickable header that toggles section visibility.
Collapse state is persisted in VSG.db.settings.collapsedSections.
Key fixes over the prior incomplete attempt:- VStack parented to sec (not body) so Row children hide correctly
- HintLbl now parents font strings to the row frame, not content
- SetCollapsed call fixed (was passing nil as value)
- Sections default to expanded
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- refactor: remove animation backward-compat comment from Widgets.lua
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: convert remaining SettingsTab sections to use MakeSection helper
Convert DISPLAY, DATA & DEBUG, and SOUND sections to use the
MakeSection/Finalize pattern, matching GAMEPLAY, PAYMENTS, and
CHAT & NOTIFICATIONS which were already converted.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: fix Layout.VStack gap assignments in SettingsTab
Move gap values to the correct elements (the element that follows the
gap, not the one that precedes it), add trailing spacer rows between
sections, and add optional gapBefore parameter to MakeCheckbox helper.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: remove Widgets.lua backward-compat aliases, fix last consumer
All animation consumers now use VSG.Animations directly.
CelebrationPopup.lua was the last holdout using W.CreateSpriteAnimation.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: use Layout.VStack in SettingsTab for section-based layout
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: use Layout.VStack in CreateGameTab for dynamic positioning
Replace manual y-cursor tracking with VStack layout manager. Each
logical row is wrapped in a container frame added to the stack.
ApplyModeSelection calls stack:Recalculate() so the action area
repositions automatically when the poker options panel shows/hides.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: rewrite CompactGameWindow to use shared PlayerRow, EmoteSystem, Animations, GuidePanel
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - refactor: rewrite ActiveGameTab to use shared PlayerRow, EmoteSystem, Animations, GuidePanel
Replace ~540 lines of inline code with calls to the shared modules
extracted in Phase 1:- PlayerRow pool replaces local GetRow, FindRowByName, SetActiveGlow,
ClearActiveGlow, GetClassColor, GetWinStreak, ShowPlayerTooltip - EmoteSystem replaces inline emote picker, bubble pool, and cooldown
- GuidePanel replaces inline guide panel construction and ShowGuide
- Animations module replaces W.AttachWinGlow, W.AttachLoseFlash,
W.ShakeFrame, W.CreateSpriteAnimation, and local AnimateRollReveal
All host-specific logic (kick/select/lobby mode, lottery %, autoContinue,
invite, result box, session history) is preserved unchanged.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- PlayerRow pool replaces local GetRow, FindRowByName, SetActiveGlow,
- feat: extract guide panel into shared UI/GuidePanel.lua
Shared button, panel, and show logic for both ActiveGameTab and
CompactGameWindow guide overlays.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: extract player row management into shared UI/PlayerRow.lua
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - feat: extract emote system into shared UI/EmoteSystem.lua
Factory-pattern module supporting multiple independent instances
(one per window). Each instance owns its own picker grid, bubble
pool, button, and cooldown state.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - Add UI/Layout.lua with VStack and HStack layout helpers
Introduces vertical and horizontal layout containers that replace
manual y-cursor positioning (y = y - CTL_H - ROW_GAP) used throughout
the UI code. Both containers skip hidden children, support per-item
gap/size overrides, and honour a _forceLayout flag.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - Extract animation helpers from Widgets.lua into new UI/Animations.lua module
Move 6 animation functions (AttachPulse, ShakeFrame, AttachWinGlow,
AttachLoseFlash, CreateActionBubble, CreateSpriteAnimation) from
Widgets.lua into a dedicated Animations module (VSG.Animations).
Add 4 new shared animation factories extracted from inline code in
ActiveGameTab.lua and CompactGameWindow.lua: AnimateRollReveal,
CreateRollFlash, CreateFadeIn, and CreateMedallionPop.
Backward-compat aliases in Widgets.lua ensure existing callers
(W.AttachPulse, etc.) continue to work without changes.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - Add Blackjack and Double or Nothing modes, bounty UI, side bet display, and settings reorganization
New modes: Blackjack (hit/stand/bust mechanics) and Double or Nothing (risk-reward
escalation). UI: bounty % dropdown for Elimination mode, lottery ticket win-chance
percentages in player rows, spectator label shows side bet count and details in tooltip,
preset dropdown simplified (removed color dots, ASCII arrows). Settings tab fully
reorganized with Gameplay section first, streamlined Visual/Chat sections. Achievement
unlock sound added to all sound packs.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - Add security hardening, bounty system, side bets, SHA256 signing, and tournament draw handling
Security: reject ROLL_FWD forgeries, validate TOURNAMENT_JOIN/CANCEL senders, require
pending invite for GAME_INVITE_ACCEPT with 120s expiry, prevent duplicate OE picks.
Engine: elimination bounty system (configurable % of buy-in to eliminator with ledger
tracking), Blackjack/DoubleOrNothing mode constants, nil guard on results.summary.
Infrastructure: SHA256 HMAC signing (replaces djb2), SideBets module, Poker DC detection
via FindUnitForName. Tournament: draw rematches up to 3x with coin-flip tiebreaker.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com - Fix locale-dependent trade detection, ForceEnd return value bug, number formatting, and nil guard
- Add achievements system, data backup/restore, streak badges, and big win celebration
- Add 24 achievements with toast notifications and stats tab display
- Add full data backup (JSON export) and restore (JSON import) in settings
- Add streak badges (3W/3L) to compact game window player rows
- Add big win celebration popup for wins >= 5,000g
- Add BIG_WIN sound event to all sound packs
- Add slash commands, preset management, history filters, and whisper invites
- Expand /vsg slash commands: start, begin, stop, stats, mute, preset, presets, invite, history, refresh, debug, reset, help
- Improve preset UI: reorder, rename, mode-colored dots, 20 max
- Add minimap right-click preset quick-launch menu
- Add date range filter to history tab (Today/This Week/This Month)
- Add whisper-based game invite system with accept/decline popup
- Add invite button to active game tab for hosts
- new: changes to poker