File Details
Chairface's Casino v1.3.0
- R
- Jan 4, 2026
- 27.73 MB
- 18
- 5.5.3+38
- Classic + 2
File Name
Chairfaces_Casino_v1.3.0.zip
Supported Versions
- 5.5.3
- 5.5.2
- 5.5.1
- 5.5.0
- 4.4.2
- 4.4.1
- 4.4.0
- 3.4.5
- 3.4.4
- 3.4.3
- 3.4.2
- 3.4.1
- 3.4.0
- 2.5.5
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 1.15.8
- 1.15.7
- 1.15.6
- 1.15.5
- 1.15.4
- 1.15.3
- 1.15.2
- 1.15.1
- 1.15.0
- 1.14.4
- 1.14.3
- 1.14.2
- 1.14.1
- 1.14.0
- 1.13.7
- 1.13.6
- 1.13.5
- 1.13.4
- 1.13.3
- 1.13.2
- 1.13.0
Chairface's Casino v1.2.0 (Updated)
/hilo Command Updated
New syntax: /hilo <max> [timer]
max = maximum roll value (required, minimum 2)
timer = join window in seconds (optional, 20-120, default 60)
Examples:
/hilo 1000 - Max roll 1000, 60 second join window
/hilo 1000 30 - Max roll 1000, 30 second join window
/hilo 500 120 - Max roll 500, 2 minute join window
Updated in:
/hilo command handler
/cc help output
Help panel default content
CurseForge description
Chairface's Casino v1.2.1
Bug Fixes:
Fixed Blackjack LOG button crash (outcome value type error)
Fixed 5 Card Stud LOG button not being clickable
Chairface's Casino v1.2.2
Changes:
Unified log window style across all 3 games
All logs now use the same visual style (poker style):
320x350 size
Dark background with gold border
Gold title bar with game name
Scrollable content area
11pt font with 2px spacing
Added LOG button to High-Lo
Button appears next to Reset button
Shows game history with all player rolls, winner/loser, and settlement amount
Log windows now close when their game window closes
Blackjack: logPanel closes with mainFrame
5 Card Stud: logFrame closes with mainFrame
High-Lo: logFrame closes with container
Bug fixes:
Fixed Blackjack log crash (outcome value was number, not string)
Fixed 5 Card Stud LOG button not being clickable (was disabled with all other buttons)
High-Lo game history tracking
Saves last 5 games
Shows all player rolls sorted by roll value
Highlights winner (green) and loser (red)
Shows settlement details
Chairface's Casino v1.2.3
Changes:
Log windows now use DIALOG strata - Will always appear on top of all game window elements
Fixed log windows closing with game windows
Blackjack: Close/Back buttons now properly call UI:Hide() which closes the log panel
5 Card Stud: Close/Back buttons now properly call Poker:Hide() which closes the log frame
High-Lo: Already worked correctly
Persistent game history
All 3 games now save their history to SavedVariables
History is encoded using XOR + Base64 obfuscation to discourage casual editing
Uses AceSerializer for reliable serialization
History loads automatically on login
Stored in ChairfacesCasinoSaved.blackjackHistory, pokerHistory, and hiloHistory
Chairface's Casino v1.2.3
Changes:
Log windows now use DIALOG strata - Will always appear on top of all game window elements
Fixed log windows closing with game windows
Blackjack: Close/Back buttons now properly call UI:Hide() which closes the log panel
5 Card Stud: Close/Back buttons now properly call Poker:Hide() which closes the log frame
High-Lo: Already worked correctly
Persistent game history
All 3 games now save their history to SavedVariables
History is encoded using XOR + Base64 obfuscation to discourage casual editing
Uses AceSerializer for reliable serialization
History loads automatically on login
Stored in ChairfacesCasinoSaved.blackjackHistory, pokerHistory, and hiloHistory
Chairface's Casino v1.2.5
Changes:
Silent game discovery when joining a group
When you join a party or raid, the addon now automatically broadcasts a discovery request
If there are active casino games, hosts will respond and you'll be synced in like normal
1 second delay after joining to let things settle
Help panel improvements
Added "< Back" button that appears when viewing game-specific help
Clicking Back returns to the main help page with commands and tips
Main help page now scrolls properly (scroll height fixed on initial display)
Back button hidden on main page, shown on game help pages
Lobby/Help closing when opening games
Opening any game window (Blackjack, Poker, High-Lo) now closes both the lobby AND help panel
Help panel no longer re-opens the lobby when closed by game launch
HideHelp(dontShowLobby) parameter added for this purpose
Chairface's Casino v1.2.6
Changes:
Fixed group join sync detection:
Now uses GROUP_JOINED event which fires reliably when joining a party/raid
Moved group join detection from Multiplayer.lua to StateSync.lua for centralized handling
Uses same flow as login (AM_I_PLAYING) so hosts push the sync data
Fixed duplicate sync messages:
Added 5-second cooldown tracking for each game (SS.lastSyncReceived)
YOU_ARE_PLAYING handler checks cooldown before printing notification
HandleFullState checks cooldown before processing/applying sync data
Duplicate syncs within the cooldown window are silently ignored
The flow is now:
On group join OR login/reload → send AM_I_PLAYING
Hosts respond with YOU_ARE_PLAYING + push sync data
Client receives notification (with cooldown check) then sync data (with cooldown check)
Only one "Found active game" and one "Sync successful" message per 5 seconds
Fixed - removed the duplicate end on line 96 of StateSync.lua.
Fixed. The problem was using one shared cooldown for both the notification message AND the actual state data. Now there are two separate cooldowns:
lastSyncNotification - prevents duplicate "Found active game" messages
lastSyncApplied - prevents duplicate state application/success messages
This way the notification can be shown, then the actual state data can arrive 0.5s later and be properly applied.
Chairface's Casino v1.2.7
Changes:
H17/S17 Dealer Rule
Host can now choose H17 (Hit Soft 17) or S17 (Stand Soft 17) in the host panel
H17: Dealer hits on soft 17 (Ace + 6) - slightly favors house
S17: Dealer stands on soft 17 - better for players
Rule is shown in table announcement messages (e.g., "Ante: 10g | H17")
Dealer automatically follows the selected rule - no manual choices needed
Blackjack help updated to explain the rule
pokeChance encrypted
The debug poke chance setting is now stored encrypted in ChairfacesCasinoSaved
Uses the same XOR + Base64 + compression encoding as game history
Old unencrypted values are automatically migrated
Log persistence verification
All 3 games already save to persistent storage at settlement time
Verified: Blackjack calls SaveHistoryToDB() in SaveGameToHistory() which is called from SettleHands()
Verified: Poker calls SaveGameToHistory() from multiplayer at settlement
Verified: HiLo calls SaveToHistory() from FinalizeSettlement() which saves to DB
Host panel size increased to accommodate new H17/S17 option (490px height)
Chairface's Casino v1.2.8
Changes:
Fixed dealer to be fully automatic:
Dealer now ALWAYS plays automatically following H17/S17 rules
No manual HIT/STAND buttons during dealer turn - it's all automatic
Removed the obsolete "AUTO" button and toggle
Status bar now shows: "Dealer has 16 (soft) - must hit (H17)" or "Dealer stands at 17 (S17)"
How H17/S17 works:
H17 (Hit Soft 17): Dealer automatically hits any hand below 17, AND hits on soft 17 (Ace+6). Stands on hard 17+ or soft 18+.
S17 (Stand Soft 17): Dealer automatically hits below 17, but stands on ALL 17s including soft 17.
The dealer has no choice in blackjack - the rules completely dictate their play. The host only selects WHICH rule set to use before the game starts.
Chairface's Casino v1.2.9
Changes:
Restored manual dealer pacing controls:
Host can click HIT to draw dealer cards one at a time (for chatting/pacing)
AUTO button toggles between automatic and manual dealer play
When AUTO is ON: Dealer plays automatically
When AUTO is OFF: Host clicks HIT for each dealer card
Important: The dealer still cannot STAND early - the H17/S17 rules dictate when dealer must hit vs stand. The HIT button only controls pacing, not the actual decision. The dealer will automatically stop when the rules say to stop.
Status bar updates:
Auto mode: "Dealer has 16 (soft) - drawing... (H17)"
Manual mode: "Dealer has 16 (soft) - click HIT (H17)"
Done: "Dealer stands at 17 (S17)"
Chairface's Casino v1.2.10
Changes:
Fixed S17 button selection display
Bug: HS:Get() used or operator which treated false as falsy and returned the default true
Fix: Now uses explicit nil check so boolean false is preserved correctly
Improved game log header visibility
Changed from: |cffffd700=== Game 1 ===|r
Changed to: Empty line, then |cffffffff=============== GAME 1 ===============|r, then empty line
All caps, white text, longer separator line, with line breaks above and below
Chairface's Casino v1.2.11
Changes:
Added H17/S17 to table info bar:
Now displays: Host: Playtester | Ante: 500g with 5x multiplier | H17 | Remaining Cards: 48
Updated in 3 locations:
Main display update
Shuffle animation info update
Card deal animation info update
Chairface's Casino v1.2.12
Changes:
Fixed Trixie shuffle animation:
Now shows 3 different shuffle poses for 3 shuffle sounds (was only 2)
Sequence:
First shuffle sound + pose change
Second shuffle sound + pose change
Third shuffle sound + pose change
Randomly selects from 6 available shuffle poses (shuf1 through shuf6) with no repeats
Chairface's Casino v1.2.13
Changes:
Replaced animated Queen of Hearts with Illidan Ace of Spades
New animated card: 50 frames at 320x478, converted to vertical sprite sheet TGA
Continuous smooth animation at ~20fps
Size: 128x191 pixels on screen (maintaining aspect ratio)
Added Trixie to Lobby
Trixie now appears on the right side of the lobby window
Her left border touches the window's right border
Height scaled to match lobby window height (450px)
Width maintains proper aspect ratio (896:1152)
Clickable for easter egg poke sound
Unified "Show Trixie" checkbox in Settings
Moved from High-Lo to the Settings panel
Now controls both Lobby Trixie AND High-Lo Trixie
Both use the same visibility setting
Located between "Hide minimap icon" and "Window Scale"
Chairface's Casino v1.2.14
Changes:
Illidan card animation: 50 frames at 133x200 pixels (~5MB, down from 30MB)
Smooth animation at ~20fps
All previous fixes from v1.3.14 included (Trixie parenting, crash fix, etc.)
Chairface's Casino v1.2.15
Changes:
Illidan card scaled to match casino logo
Now 200px wide (same as logo)
Height scaled proportionally (~300px)
Positioned closer to logo (-20 gap instead of -40)
Fixed Illidan Y-axis flip
Texture coords swapped to flip vertically
Card now displays right-side up
Fixed Trixie visibility bugs
Lobby Trixie only shows when lobby is actually visible
High-Lo and Lobby now use same setting (showLobbyTrixie)
Toggling in settings properly updates both instantly
Fixed initial load state for High-Lo Trixie
Chairface's Casino v1.2.16
Changes:
Illidan animation now has 5-second pause between plays
Lobby height increased from 450px to 550px to fit text below Illidan
Chairface's Casino v1.2.17
Changes:
New animated logo replaces old casino sign
48 frames at 200x113 pixels (~4.2MB sprite sheet)
Plays at ~20fps
15-second pause between plays
Width matches Illidan card (200px)
Illidan animation - 5-second pause between plays (from previous version)
Lobby height - 550px (from previous version)
Chairface's Casino v1.2.18
Changes:
Fixed logo Y-axis flip - now displays right-side up
Removed "CHAIRFACE'S" text from top left of lobby
Logo now positioned at top of left panel directly
Chairface's Casino v1.2.19
Changes:
Replaced logo sprite sheet with your provided version (1.6MB, RLE compressed)
Fixed Y-axis orientation - using normal coordinates now
Chairface's Casino v1.2.20
Changes:
Logo animation now loops continuously - no pauses between plays
Chairface's Casino v1.2.21
Changes:
Added alternate card deck system
New "Card Deck" selector in Settings (replaces "Card Face (coming soon)")
Two deck styles available:
Classic - Original card designs
Warcraft - Alternate designs (starting with Illidan Ace of Spades)
Navigate with < > buttons and click "Select" to apply
Created cards_alt folder with duplicate of all card textures
Ace of Spades replaced with Illidan artwork (64x128 static image from animation)
Ready for you to replace other cards as you create them
Technical:
Cards.lua now has cardDeckStyle ("classic" or "warcraft")
GetCardTexture() uses appropriate path based on deck style
Setting saved to BJ.db.settings.cardDeck
Chairface's Casino v1.2.22
Changes:
Fixed logo Y-flip - Logo animation now displays correctly in lobby
Animated Illidan Ace of Spades in-game
When using "Warcraft" deck, the Ace of Spades is fully animated (50 frames @ 20fps)
Animation plays continuously while the card is visible
Created 64x6400 sprite sheet (64x128 per frame × 50 frames)
Animated preview in Settings
Card Deck preview shows animated Illidan when "Warcraft" deck is selected
Classic deck shows static card as before
Technical:
Cards.animatedCards table defines which cards have animations
Shared animation ticker efficiently handles multiple animated cards
Animation properly stops when cards are released/hidden
Files: cards_alt/A_spades_anim.tga (animated), cards_alt/A_spades.tga (static fallback)
Chairface's Casino v1.2.23
Fix:
Card deck/back settings now initialize immediately - Both InitializeCardBack and InitializeCardDeck now fall back to ChairfacesCasinoDB directly if BJ.db isn't set yet, ensuring saved settings load correctly on first login.
Chairfaces casino v1.2.23ZIP Downloadthe settings window needs to be loinnger to that the bottom of the window is below the dext coming soon with a small gap.11:16 PMFind settings panel sizebashgrep -n "SetSize.*440\|SetSize.*380\|SETTINGS" "/home/claude/Chairfaces Casino/UI/Lobby.lua" | head -10Output690: intro:SetSize(450, 380)
858: frame:SetSize(440, 380) -- Wider but shorter
View settings panel layout to find bottom elementsShow working fileLet me find the dice section (which has "coming soon") to see where th
Chairface's Casino v1.2.24
Fix:
Settings window height increased from 380px to 420px - now has proper spacing below the "Dice (coming soon)" text at the bottom of the left column.
Chairface's Casino v1.2.25
Changes:
Added tall Trixie to Help window - Same as lobby and High-Lo
Positioned on the right side of the help panel
Same height scaling (matches window height)
Clickable for easter egg poke sound
Removed old small Trixie from inside the help panel
Removed the 100x100 square image
Removed the speech bubble text
Game buttons now positioned at top-left
Unified Trixie toggle - "Show Trixie" checkbox in settings now controls:
Lobby Trixie
Help Trixie
High-Lo Trixie
Chairface's Casino v1.2.26
Change:
Logo animation 30% slower - Frame time increased from 0.05s to 0.065s (~15fps instead of ~20fps)
Chairface's Casino v1.2.27
Changes:
Trixie frame size changed to 160x240 in both Blackjack and Poker (was 160x160)
Images will be stretched for now until new images are provided
No scale changes - ready for new image series
5 Card Stud window height increased from 580px to 660px to accommodate the taller Trixie frame
Chairface's Casino v1.2.28
Changes:
New logo animation - Replaced with new neon "Chairface's Casino" sign
80 frames (was 48)
Resized to 200x113 to match display size
Sprite sheet: 200x9040 pixels (~6.9MB)
Chairface's Casino v1.2.30
Changes:
Removed old files:
casino_sign_frames.tga
cardwink* files
Replaced sprite sheets:
logo_frames.tga - new version (200x9040, 3.4MB)
illidan_card_frames.tga - new version (133x10000, 5MB)
Regenerated card sprites from new Illidan:
cards_alt/A_spades_anim.tga - 64x6400 (50 frames at 64x128)
cards_alt/A_spades.tga - 64x128 (static first frame)
Chairface's Casino v1.2.31
Changes:
Removed Illidan card animation from lobby
Logo scaled 3x and centered
Now 600x339 pixels (was 200x113)
Centered in left panel
Lobby window expanded
Width: 550px → 950px
Left panel: 200px → 620px (to fit 600px logo)
Chairface's Casino v1.2.32
Changes:
New lobby layout:
Logo centered at top (312x176 pixels - 25% wider than game buttons)
Game selection buttons centered below logo
Removed left panel / Illidan card
Lobby size reverted to 550x550
Chairface's Casino v1.2.33
Changes:
Lobby height increased from 550px to 580px
"More games coming soon!" repositioned
Now positioned below the Settings/Help/Sync button row
Uses same -15px gap as game buttons
Version text positioned below that with -10px gap
Chairface's Casino v1.2.34
Changes:
Logo moved to top - Top of logo now touches the top border of the lobby window
Lobby width reduced - Now 352px (logo width 312px + 20px padding on each side)
Version text moved to bottom right - Positioned at BOTTOMRIGHT with 10px/8px offset
Close button unchanged - Remains in upper right corner
Chairface's Casino v1.2.35
Change:
Logo moved down 2px - Now sits just below the golden border without overlapping it
Chairface's Casino v1.2.36
Fix:
SFX and Voice button hover colors now respect ON/OFF state
When ON: Hover brightens to a lighter green, returns to normal green on leave
When OFF: Hover brightens to gray, returns to dark gray on leave
Previously the hover handlers always used gray colors regardless of state
Chairface's Casino v1.2.37
Changes:
New "Dark" card deck added - 52 cards with dark/black styling
Located in Textures/cards_dark/
All cards converted from 655x930 PNG to 64x128 TGA
Card deck order updated:
1st: Classic (original)
2nd: Dark (new)
3rd: Warcraft (with animated Illidan Ace of Spades)
Cards.lua updated:
Added TEXTURE_PATH_DARK constant
Added deckStyles and deckStyleNames arrays for UI navigation
Updated GetCardTexture() to support three deck styles
Updated SetCardDeck() validation for "dark" style
Chairface's Casino v1.2.38
Fix:
Dark card set flipped vertically - All 52 cards now display right-side up
Chairface's Casino v1.2.39
New Feature: Background Ambiance Music
Added ambiance.ogg - ~2 minute casino ambiance loop (converted from MP3)
New "MUSIC" toggle button in Settings menu
Positioned below SFX and VOICE buttons
Defaults to OFF
Persistent setting saved to SavedVariables
Looping playback - Automatically restarts every ~2 minutes while enabled
Chairface's Casino v1.2.40
Fix:
Fixed settings panel overlap - "Hide minimap icon" checkbox moved below the Minimap Icon slider
All elements below repositioned to prevent overlapping:
Hide minimap checkbox: -172 → -200
Show Trixie checkbox: -216 → -228
Window Scale slider: -244 → -256
Meet Trixie button: -294 → -306
Settings panel height increased: 450px → 470px
Chairface's Casino v1.2.40
Fix:
Fixed settings panel overlap - "Hide minimap icon" checkbox moved below the Minimap Icon slider
All elements below repositioned to prevent overlapping:
Hide minimap checkbox: -172 → -200
Show Trixie checkbox: -216 → -228
Window Scale slider: -244 → -256
Meet Trixie button: -294 → -306
Settings panel height increased: 450px → 470px
Chairface's Casino v1.2.42
Fix:
Changed audio channel from "Music" to "SFX" - addons can only play sounds on SFX/Ambience channels, not Music
The chunked system with activity-based focus recovery is still in place.
Chairface's Casino v1.2.44
Fix:
Activity-based resume now checks window state - The movement/activity events will only trigger music resume if:
Music setting is ON (ambianceEnabled = true)
At least one casino window is open
Sound isn't already playing
New IsAnyCasinoWindowOpen() helper function - Centralized check used by both CheckAmbianceState() and the activity frame event handler
ResumeAmbiance() now also checks windows - Won't resume if all windows are closed
Chairface's Casino v1.2.45
Fix:
Added window checks at multiple points to prevent music from playing when all windows are closed:
PlayAmbianceChunk() start - Now checks IsAnyCasinoWindowOpen() before playing any chunk
Timer callback in PlayAmbianceChunk() - Now checks both ambianceEnabled AND IsAnyCasinoWindowOpen() before playing the next chunk. If conditions aren't met, calls StopAmbiance() to clean up
This ensures music won't resume from:
The chunk loop timer firing after windows close
Activity events when windows are closed
Any other code path that calls PlayAmbianceChunk
Chairface's Casino v1.2.46
Enhancement:
Added MODIFIER_STATE_CHANGED event to the activity detection for music resume. This event fires whenever Shift, Ctrl, or Alt is pressed or released, which only happens when the game window has focus.
Activity events now include:
PLAYER_STARTED_MOVING
PLAYER_STOPPED_MOVING
PLAYER_TARGET_CHANGED
SPELL_UPDATE_COOLDOWN
MODIFIER_STATE_CHANGED ← New
This gives a more reliable focus detection since pressing any modifier key (common when using keybinds) will trigger the resume check.
Chairface's Casino v1.2.47
Enhancement:
Added mouse button events to activity detection:
GLOBAL_MOUSE_DOWN - Fires on any mouse button press
GLOBAL_MOUSE_UP - Fires on any mouse button release
Activity events now include:
PLAYER_STARTED_MOVING
PLAYER_STOPPED_MOVING
PLAYER_TARGET_CHANGED
SPELL_UPDATE_COOLDOWN
MODIFIER_STATE_CHANGED
GLOBAL_MOUSE_DOWN ← New
GLOBAL_MOUSE_UP ← New
Note: Used GLOBAL_MOUSE_DOWN/GLOBAL_MOUSE_UP instead of PLAYER_MOUSE_DOWN/PLAYER_MOUSE_UP as these are the correct WoW API event names.
Chairface's Casino v1.2.49
Changed Focus Detection Method
Replaced the event-based activity detection with OnUpdate time gap detection:
How it works:
OnUpdate runs every frame while WoW has focus
When WoW loses focus, OnUpdate stops ticking
When focus returns, GetTime() jumps forward
If elapsed time since last update > 1 second, the game was likely unfocused
When this gap is detected, music is resumed
Benefits:
More reliable than event-based detection
Directly detects the moment focus returns
No dependency on player actions (moving, clicking, etc.)
Simpler code with single mechanism
Removed:
All the event registrations (PLAYER_STARTED_MOVING, MODIFIER_STATE_CHANGED, GLOBAL_MOUSE_DOWN, etc.)
Debounce logic (no longer needed)
Chairface's Casino v1.2.50
Fix: Prevent music from restarting when switching windows
Added ambianceRunning flag to track if the ambiance system is actively running:
StartAmbiance() - Now checks if self.ambianceRunning then return end to prevent restart if already running
StopAmbiance() - Sets self.ambianceRunning = false when stopping
CheckAmbianceState() - Now checks if not self.ambianceRunning instead of checking the sound handle
The sound handle was unreliable because it could be temporarily nil between chunks. The ambianceRunning flag provides a clear state indicator that persists across chunk transitions.
Chairface's Casino v1.2.51
Fix: Music restarting when switching between windows
The issue was a race condition:
When opening a new game window (e.g., Poker), it first hides other windows (e.g., Lobby)
The hidden window's CheckAmbianceState() saw no windows open and stopped the music
Then the new window opened and restarted the music from the beginning
Solution: Added C_Timer.After(0.1, ...) delay to all Hide-triggered CheckAmbianceState() calls:
Lobby OnHide hook
Blackjack UI:Hide()
Poker Poker:Hide()
HiLo HiLo:Hide()
Settings ToggleSettings() hide branch
The 0.1 second delay allows the new window to open before checking if any windows are visible. If a new window is now open, the music continues without interruption.
Chairface's Casino v1.2.52
Centralized Ambiance Controller
Created a new centralized system in Lobby.lua:
Lobby:OnCasinoWindowChanged() - Called by all window Show/Hide functions
Uses C_Timer.After(0, ...) debouncing to process only once per frame
Multiple rapid show/hide calls (like when switching windows) collapse into a single state check
Lobby:UpdateAmbianceState() - Internal function that actually manages the audio
Only starts if ambianceEnabled AND windows open AND NOT already running
Only stops if no windows open AND currently running
Does nothing if state is already correct (prevents restart)
All windows now call the centralized function:
Lobby OnShow/OnHide
Settings Show/Hide
Blackjack Show/Hide
Poker Show/Hide
HiLo Show/Hide
The debounce with C_Timer.After(0, ...) ensures that when Window A hides and Window B shows in the same frame, only one state check happens after both operations complete.
Chairface's Casino v1.2.53
Fixes:
Changed debounce method - Now uses C_Timer.NewTimer(0.05, ...) with cancellation instead of C_Timer.After(0, ...). Each new call cancels the previous pending timer, ensuring only one state check happens after all show/hide operations complete.
Fixed ToggleAmbiance - Now calls UpdateAmbianceState() instead of directly calling StartAmbiance()/StopAmbiance(). This ensures the window check is performed even when manually toggling the setting.
The flow is now:
Window shows/hides → calls OnCasinoWindowChanged()
Previous pending timer cancelled, new 0.05s timer scheduled
After 0.05s, UpdateAmbianceState() runs
Checks if windows are open AND if music should be playing
Only starts if not already running, only stops if running
Chairface's Casino v1.2.54
Fixes:
Music not stopping when windows close - Added ambianceRunning check to:
PlayAmbianceChunk() - Now returns early if not running
ResumeAmbiance() - Now returns early if not running
Timer callback - Now checks Lobby.ambianceRunning before playing next chunk (using Lobby. instead of self. to ensure proper reference in callback)
Help & Rules window width - Now uses separate HELP_WIDTH = 525px instead of LOBBY_WIDTH = 352px
Button frame: 15px left margin + 120px width
Gap: 10px
Content frame: 360px
Right padding: 20px
Total: 525px
Chairface's Casino v1.2.55
New Trixie Layout for Blackjack
Dimensions:
New Trixie image: 912x1120 pixels (aspect ratio 0.814)
Trixie height: Window height (520) - 100px margins = 420px
Trixie width: 420 × 0.814 = 342px
Layout changes:
Trixie moved to left side of window with 50px top/bottom margins
Window width expanded: 920 (play area) + 342 (Trixie) + 20 (padding) = 1282px
Play area (dealer, status bar, players) offset to the right
New trix_shuf.png added as placeholder/default image
Constants added:
luaTRIXIE_MARGIN = 50
TRIXIE_ASPECT = 912 / 1120
TRIXIE_HEIGHT = 420
TRIXIE_WIDTH = 342
PLAY_AREA_OFFSET = 352
Chairface's Casino v1.2.56
New Wait Animations
Removed:
All old wait images (trix_wait1-5.tga, trix_waiting.tga, trix_yawn.tga)
All old .tga files
Added:
30 new wait images: trix_wait1.png through trix_wait30.png
New 912x1120 format
Code updates:
SetRandomWait() - Now randomly selects from wait1-wait30
SetRandomDeal() - Placeholder using wait images until deal images provided
SetRandomShuffle() - Uses single trix_shuf for now
SetRandomCheer() - Placeholder using wait images until cheer images provided
Default texture changed to trix_wait1
Current dealer textures:
trix_shuf.png (shuffle placeholder)
trix_wait1.png through trix_wait30.png (30 wait states)
Chairface's Casino v1.2.57
New Trixie Animations Added
Deal (8 images): trix_deal1.png - trix_deal8.png
SetRandomDeal() - Randomly selects from 8 deal poses
Lose (12 images): trix_lose1.png - trix_lose12.png
SetRandomLose() - NEW function for when dealer wins/player loses
Shuffle (12 images): trix_shuf1.png - trix_shuf12.png
SetRandomShuffle() - Randomly selects from 12 shuffle poses
Current dealer texture inventory:
30 wait images (wait1-wait30)
8 deal images (deal1-deal8)
12 lose images (lose1-lose12)
12 shuffle images (shuf1-shuf12)
Total: 62 images
Still needed:
Cheer/Win images (currently using deal as placeholder)
Chairface's Casino v1.2.58
New Trixie Animations Added
Win (9 images): trix_win1.png - trix_win9.png
SetRandomCheer() - Now uses win images for player victories
Love (10 images): trix_love1.png - trix_love10.png
SetRandomLove() - NEW rare special affection poses
SetRandomWinOrLove() - NEW helper that shows love 10% of the time, win 90%
Complete Trixie Texture Inventory (81 images)
CategoryCountFilesWait30wait1-wait30Deal8deal1-deal8Shuffle12shuf1-shuf12Lose12lose1-lose12Win9win1-win9Love10love1-love10
New Functions
SetRandomLove() - Shows rare love pose
SetRandomWinOrLove() - 10% chance love, 90% chance win (for special moments like blackjack)
4 steps
Create v1.2.59 zip
Presented file
Chairface's Casino v1.2.59
Fixes:
Converted all PNG to TGA - WoW requires TGA format for textures
Alpha channel preserved - Used ImageMagick convert with -compress none for uncompressed TGA with alpha
Updated Trixie dimensions - Now matches actual image size (649x1164, aspect ratio 0.558)
Trixie height: 420px
Trixie width: ~234px
Removed .png extension from texture paths - WoW auto-detects TGA
81 TGA textures:
30 wait (wait1-wait30)
8 deal (deal1-deal8)
12 shuffle (shuf1-shuf12)
12 lose (lose1-lose12)
9 win (win1-win9)
10 love (love1-love10)
Chairface's Casino v1.2.60
Fixed Y-axis flip on all 81 TGA textures using -flip flag. TGA format uses bottom-left origin while PNG uses top-left, so vertical flip is required for correct display in WoW.
Chairface's Casino v1.2.61
Re-converted all 81 images from original PNGs with -flip applied during the PNG→TGA conversion (not after). Used convert $src -flip TGA:"$dst" to ensure proper TGA format with vertical flip in one step.
Chairface's Casino v1.2.62
Re-converted all 81 Trixie images with RLE compression:
convert $src -flip -compress RLE TGA:"$dst"
RLE (Run-Length Encoding) compression reduces file size while maintaining compatibility with WoW's texture loader.
Chairface's Casino v1.2.63
Fixes:
Trixie going green - Fixed all invalid SetTrixieState() calls that referenced old texture names that no longer exist:
"waiting" → SetTrixieWait() (random wait1-30)
"cheer" → SetTrixieCheer() (random win1-9)
"pout" / "bust" → SetTrixieLose() (random lose1-12)
"wink" → SetTrixieWait() (no longer exists)
Added new helper functions:
UI:SetTrixieLose() - Random lose pose
UI:SetTrixieLove() - Random love pose (for future use)
TGA conversion - All 81 textures now use RLE compression with proper Y-flip
Chairface's Casino v1.2.64
Changes:
Trixie lowered 20px - Now positioned at -(TRIXIE_MARGIN + 20) instead of just -TRIXIE_MARGIN
Randomized initial wait image - On load, picks a random wait image (1-30) instead of always starting with wait1
Buttons centered in play area - The action buttons (HIT, STAND, DEAL, etc.) are now centered horizontally within the play area using PLAY_AREA_OFFSET / 2 offset, matching the dealer area, status bar, and player area alignment
Chairface's Casino v1.2.65
Changes:
Fixed Trixie proportions - Images now properly scaled to 300x538 (maintaining exact 0.558 aspect ratio), no more horizontal squishing
Drastically reduced file size:
Dealer textures: 179MB → 33MB (81% reduction)
Total addon zip: ~39MB (down from much larger)
Individual TGA files: ~400KB each (down from ~2.6MB)
Adjusted Trixie positioning:
Reduced top margin from 50px to 30px
Height calculated to fit properly: FRAME_HEIGHT - (MARGIN * 2) - 20
Width calculated proportionally from height
The images are resized to 300x538 which is ~28% larger than display size (234x420), providing good quality while dramatically reducing file size. RLE compression is preserved for WoW compatibility.
Chairface's Casino v1.2.66
Changes:
Properly proportional Trixie images - Each image scaled to 350px height with width proportional to its original aspect ratio (no stretching/squishing)
Widths vary from ~155px to ~285px depending on the pose
Original varying widths preserved (512-912px originals → proportionally scaled)
Further reduced file size:
Dealer textures: 16MB (down from 33MB, originally 179MB)
Total addon zip: 27MB
Fixed frame dimensions:
TRIXIE_HEIGHT = 350 (matches image height)
TRIXIE_WIDTH = 285 (max width for
Chairface's Casino v1.2.67
Changes:
Trixie positioning restructured:
Left padding: 10px from window edge to Trixie's left border
Right padding: 10px from Trixie's right border to play area (status bar)
Vertically centered in game window: (FRAME_HEIGHT - TRIXIE_HEIGHT) / 2 = 85px from top/bottom
Layout calculation:
PLAY_AREA_OFFSET = 10 + 285 + 10 = 305px (where play area starts)
FRAME_WIDTH = 305 + 920 = 1225px
Trixie is now properly positioned with her right edge 10px from the status bar's left edge, and centered vertically in the 520px tall window.
Chairface's Casino v1.2.68
Changes:
All Trixie images now consistent 274x350
Scaled from 912x1165 canvas size (0.30 scale factor)
All 81 images are exactly the same dimensions
No more varying widths
Updated code dimensions:
TRIXIE_WIDTH = 274
TRIXIE_HEIGHT = 350
PLAY_AREA_OFFSET = 10 + 274 + 10 = 294px
FRAME_WIDTH = 294 + 920 = 1214px
File sizes:
Dealer textures: 20MB
Total addon zip: 29MB
Chairface's Casino v1.2.69
New Settings - Separate Trixie Visibility Controls
Added three separate checkboxes in Settings to control Trixie visibility per game:
Lobby / Hi-Lo - Controls Trixie in the casino lobby and Hi-Lo game
Blackjack - Controls Trixie in the Blackjack window (window resizes when hidden)
5 Card Stud - Controls Trixie in the Poker window (window resizes when hidden)
Implementation Details
Blackjack:
UI:ShouldShowTrixie() - Checks blackjackShowTrixie setting
UI:SetTrixieVisibility(show) - Toggles Trixie and resizes window
UI:UpdateFrameDimensions() - Recalculates layout based on visibility
UI:RepositionPlayAreaElements() - Repositions dealer, player, and button areas
Window width: 1214px with Trixie, 940px without
Poker:
Poker:ShouldShowTrixie() - Checks pokerShowTrixie setting
Poker:SetTrixieVisibility(show) - Toggles Trixie and resizes window
Window width: 970px with Trixie, smaller without
Settings saved to: ChairfacesCasinoDB.settings.blackjackShowTrixie and ChairfacesCasinoDB.settings.pokerShowTrixie
Converted trixie_tall.png to proper TGA format (274x350) and saved as both:
trixie_tall.tga (for backwards compatibility)
trix_wait31.tga (added to wait pool)
All Trixie displays now randomize from 31 wait images:
Lobby - Random pose on open, changes each time lobby is shown
Help window - Random pose, changes each time help is shown
Hi-Lo - Random pose, changes each time game is shown
Blackjack - Random pose (was 30, now 31)
Trixie Intro - Random pose
Updated aspect ratio from 896/1152 to 274/350 for Lobby and Hi-Lo Trixie frames
Total dealer textures: 83 files (31 wait, 8 deal, 12 shuffle, 12 lose, 9 win, 10 love, plus trixie_tall.tga)
Chairface's Casino v1.2.72
Changes:
Settings - Show Trixie section now has 4 separate checkboxes:
☑ Lobby
☑ High-Lo
☑ Blackjack
☑ 5 Card Stud
Each checkbox controls Trixie visibility independently for that game/screen. The High-Lo checkbox now uses the hiloShowTrixie setting (which was already defined in Core.lua defaults).
Chairface's Casino v1.2.73
Fixed: High-Lo UpdateTrixieVisibility() was still checking showLobbyTrixie instead of hiloShowTrixie. Now correctly uses the High-Lo specific setting.
Chairface's Casino v1.2.74
Fixed: There was a second place in ResizeFrame() that was also checking showLobbyTrixie instead of hiloShowTrixie. Both locations now correctly use the High-Lo specific setting.
Chairface's Casino v1.2.75
High-Lo Trixie Changes:
Fixed size: Trixie is now always 274x350 pixels (matching blackjack dealer images)
No scaling: She no longer stretches/shrinks with the window height
Vertically centered: Positioned at vertical center of the High-Lo window using SetPoint("LEFT", frame, "RIGHT", 0, 0) which centers by default
Chairface's Casino v1.2.76
Fixed: Removed the remaining GetTrixieWidth() call in CreateFrame() - now uses the constant TRIXIE_WIDTH instead.
Chairface's Casino v1.2.77
5 Card Stud Trixie Overhaul:
Layout Changes (matching Blackjack):
Trixie dimensions: 274x350 (same as Blackjack)
Frame width with Trixie: 1214px
Frame width without Trixie: 940px
Frame height: 520px
Trixie positioned on left, centered vertically
Play area offset: 294px when Trixie visible
New Trixie Functions:
SetTrixieWait() - Random from 31 wait poses
SetTrixieDeal() - Random from 8 deal poses
SetTrixieShuffle() - Random from 12 shuffle poses
SetTrixieCheer() - Random from 9 win poses
SetTrixieLose() - Random from 12 lose poses
SetTrixieLove() - Random from 10 love poses
SetTrixieVisibility(show) - Toggle with window resize
RepositionPlayAreaElements() - Reposition on visibility change
Updated State Calls:
"waiting" → SetTrixieWait()
"deal" → SetTrixieDeal()
"wink" → SetTrixieCheer() (wink no longer exists)
"cheer" → SetTrixieCheer()
"pout" / "bust" → SetTrixieLose()
Chairface's Casino v1.2.78
5 Card Stud Trixie Positioning Fix:
Changed Trixie positioning from vertically centered to bottom-anchored above the status bar:
Position: BOTTOMLEFT with 90px offset from window bottom
This places Trixie's bottom edge ~10px above the status bar top
Status bar location: ~77px from bottom (buttons 15 + button height 32 + gap 5 + status bar 25)
Chairface's Casino v1.2.80
Moved Trixie up by 13px (half status bar height) - offset changed from 82 to 95. Her bottom edge should now align with the top of the status bar.
Chairface's Casino v1.2.81
Trixie Debug Mode
Added a debug mode to cycle through all 82 Trixie animation images with filename labels:
Slash Commands (requires debug mode /cc db):
/cc trix or /cc trixie - Toggle Trixie debug mode
/cc trix next or /cc trix > - Next image
/cc trix prev or /cc trix < - Previous image
/cc trix goto 25 - Jump to specific index
Test Bar Buttons (in all 3 games when debug mode active):
Pink TRIX button - Toggle debug mode (shows TRIX* when active)
< button - Previous image
> button - Next image
Features:
Shows current image filename centered on Trixie in black text
Shows index (e.g., "trix_wait15 (15/82)")
Updates all visible Trixie frames simultaneously (Blackjack, Poker, High-Lo, Lobby, Help)
White shadow on text for readability
Image Order (82 total):
trix_wait1-31 (31 wait poses)
trix_deal1-8 (8 deal poses)
trix_shuf1-12 (12 shuffle poses)
trix_lose1-12 (12 lose poses)
trix_win1-9 (9 win poses)
trix_love1-10 (10 love poses)
Chairface's Casino v1.2.82
Changes:
Trixie Debug Buttons:
Removed Trixie buttons from all test bars (Blackjack, Poker, High-Lo)
Debug buttons now appear directly ON the Trixie image at the bottom center when debug mode is active
Buttons: < (prev), OFF (toggle off), > (next)
Pink theme buttons with semi-transparent background
Test Bar Simplification:
All test bars are now single-row (smaller height)
Only game-specific controls remain
High-Lo Fix:
Test bar no longer overlaps HOST/LOG buttons
Single row test bar with just +TEST, -TEST, ROLL, CLEAR
Note about distorted images:
The following images need to be reconverted from source PNGs with proper aspect ratio preservation (currently forced to 274x350 which distorts them):
trix_wait6, wait8, wait10, wait12, wait18, wait19
trix_lose4
trix_win3
trix_love2
Please upload the original PNG source files for these images and I'll reconvert them properly using -resize 274x350 (without the ! which forces exact dimensions).
Chairface's Casino v1.2.83
Fixed Distorted Images:
Re-converted 9 images with proper aspect ratio preservation:
ImageOriginal SizeScaled SizeResulttrix_wait6583x1165175x349Centered in 274x350trix_wait8574x1165172x349Centered in 274x350trix_wait10512x1165153x349Centered in 274x350trix_wait12517x1165155x349Centered in 274x350trix_wait18516x1165155x349Centered in 274x350trix_wait19630x1165189x349Centered in 274x350trix_lose4578x1165173x349Centered in 274x350trix_win3584x1165175x349Centered in 274x350trix_love2585x1165175x349Centered in 274x350
Images are now scaled proportionally to fit within 274x350 while maintaining their original aspect ratio, then centered on a transparent canvas.
Chairface's Casino v1.2.84
Fixed the Trixie debug buttons visibility by:
Setting SetFrameStrata("HIGH") on the button container
Setting SetFrameLevel(frame:GetFrameLevel() + 10) to ensure buttons render above the texture
The buttons should now appear at the bottom of the Trixie image when debug mode is active.
Chairface's Casino v1.2.85
Changes:
Blackjack Layout Restructured (to match Poker):
Status bar moved to bottom, positioned above the button area (same as Poker)
Player area now anchors from bottom above status bar
Status bar width now resizes when Trixie visibility changes
Trixie is now bottom-anchored at offset 95px (same as Poker) instead of vertically centered
Button area positioned at 15px from bottom (was 5px)
Trixie Debug Buttons Fix:
Button container now parented to the main game window instead of the Trixie frame (which is a Button type)
Uses SetFrameStrata("DIALOG") and SetFrameLevel(100) to ensure visibility
Added semi-transparent backdrop to button container for visibility
Buttons positioned at bottom of Trixie image, 10px up
Usage:
Enable debug mode: /cc db
Open any game window with Trixie visible
Toggle Trixie debug: /cc trix
Use < OFF > buttons on Trixie or /cc trix prev /cc trix next
Chairface's Casino v1.2.86
Changes:
Settings Panel:
"Meet Trixie!" button renamed to "Replay Intro"
Poke setting moved below Replay Intro button (at y=-420)
Trixie Debug Simplified:
Trixie debug now auto-enables when debug mode is enabled (/cc db)
Trixie debug auto-disables when debug mode is disabled
Removed /cc trix commands - no longer needed
OFF button on Trixie now turns off all debug mode (not just Trixie debug)
Debug display refreshes when any game window is shown
Usage:
/cc db - Enables debug mode AND Trixie debug together
Open any game - Trixie debug overlay appears with < OFF > buttons
Use < > to cycle through all 82 Trixie images
Press OFF or /cc db again to disable all debug
Chairface's Casino v1.2.87
Changes:
Blackjack Layout:
Button area, status bar, and HOST/JOIN button now center horizontally in the play area (offset by PLAY_AREA_OFFSET / 2)
Trixie now moves up when debug mode is enabled (offset 125px vs 95px) to match the button area shift
Button area positioned at 15px from bottom (45px in test mode)
Trixie Debug Buttons - Added to Test Bars:
Blackjack: T< and T> buttons added (pink) after AUTO button
Poker: T< and T> buttons added (pink) after AUTO button
High-Lo: T< and T> buttons added (pink) after CLEAR button
Simplified:
Removed buttons from Trixie image itself - now just shows the filename label
All Trixie cycling done via test bar buttons
Test Bar Button Layout:
GameButtonsBlackjack+PLAYER, -PLAYER, DEAL, CLEAR, HIT, STAND, DBL, SPLIT, AUTO, T<, T>Poker+PLAYER, -PLAYER, CLEAR, DEAL, AUTO, T<, T>High-Lo+TEST, -TEST, ROLL, CLEAR, T<, T>
2 steps
Create v1.2.88 zip
Presented file
Chairface's Casino v1.2.88
Changes:
Blackjack Layout - Test Bar Outside Window:
Test mode bar now positioned BELOW the main window (5px gap), like Poker
Game window no longer resizes when debug mode is toggled
Window stays fixed at 520px height
UI Elements Centered in Play Area:
HOST/JOIN button centered in dealer area (offset by PLAY_AREA_OFFSET / 2)
Primary button bar centered in play area at BOTTOM +15px
Status bar centered above buttons (anchored to button area)
When Trixie is shown, elements shift right to center in the play area
When Trixie is hidden, elements recenter to the smaller window
Trixie Position:
Fixed bottom offset of 95px (no test mode shift needed since window doesn't resize)
Chairface's Casino v1.2.90
Changes:
Test Bar Width Fix (Blackjack & 5 Card Stud):
Test bar now resizes dynamically when Trixie visibility changes
UpdateTestModeLayout and RepositionPlayAreaElements both update testModeBar:SetSize(FRAME_WIDTH - 20, height)
Test bar width now matches the current game window width
5 Card Stud Player Area - Right Aligned:
Player area clip frame now anchored to BOTTOMRIGHT of window (15px from right edge)
Stays fixed to right edge regardless of Trixie visibility
Other elements (HOST/JOIN, buttons, status bar, dealer area) remain centered in the play area using PLAY_AREA_OFFSET / 2
Layout Summary:
ElementAlignmentPlayer areaRight-aligned (15px from right edge)Dealer areaCentered in play areaHOST/JOIN buttonCentered in dealer areaStatus barCentered above buttonsButton areaCentered in play areaTest barFull width below window
Chairface's Casino v1.2.91
Changes:
Blackjack - Divider Line:
Added a 2px horizontal line between dealer and player areas
Brown/gold color (0.4, 0.3, 0.15) to match the table theme
Width: PLAY_AREA_WIDTH - 40
Positioned 10px below dealer area
5 Card Stud - Elements Aligned with Pot:
All these elements now use PLAY_AREA_OFFSET / 2 horizontal offset to align with the pot window:
ElementPositionHOST/JOIN buttonCENTER, mainFrame, "CENTER", PLAY_AREA_OFFSET / 2, 0Button areaBOTTOM, mainFrame, "BOTTOM", PLAY_AREA_OFFSET / 2, 15Status barWidth: PLAY_AREA_WIDTH - 100, anchored above buttonsDealer areaAlready was PLAY_AREA_OFFSET / 2Player areaRight-aligned (unchanged)
When Trixie is hidden:
All elements shift left as PLAY_AREA_OFFSET becomes 10px instead of 294px
Elements remain centered in the narrower window
Chairface's Casino v1.2.92
Changes:
Blackjack Status Bar:
Width now uses PLAY_AREA_WIDTH - 100 instead of FRAME_WIDTH - 100
Properly centers in the play area when Trixie is visible
Blackjack Divider Line:
Reduced width from PLAY_AREA_WIDTH - 40 to 300px (matches dealer card area)
Positioned 5px below dealer area (below dealer score)
Centers in play area using PLAY_AREA_OFFSET / 2
Repositions correctly when Trixie visibility toggles
Blackjack Frame Height:
Increased from 520px to 540px to accommodate divider line spacing
Chairface's Casino v1.2.93
Changes:
Blackjack Divider Line Fix:
Removed the extra PLAY_AREA_OFFSET / 2 offset that was doubling the position
Divider is now anchored directly to dealer area bottom with offset (0, -15)
Properly centers below dealer score regardless of Trixie visibility
Blackjack Trixie Animation Fix:
Previously only showed Trixie cheer when LOCAL player got blackjack
Now shows Trixie cheer when ANY player gets blackjack
Local player blackjack still triggers voice lines and win sound
Other players' blackjacks just trigger Trixie visual animation
Chairface's Casino v1.2.94
Changes:
Trixie Blackjack Behavior:
Trixie only cheers when the LOCAL player gets blackjack
When other players get blackjack, Trixie shows a waiting animation instead
Each client's Trixie is focused on their local player's outcome
Chairfaces_Casino_v1.2.
Chairface's Casino v1.2.96
Removed the divider line between dealer and player areas. Frame height remains at 540px to maintain the same spacing.
Chairface's Casino v1.2.97
Changes:
Trixie Debug Mode Fix:
When Trixie debug mode is active (BJ.TestMode.trixieDebugActive), the game's SetState calls no longer change the actual texture
This prevents the game from overwriting the debug-controlled texture with a partial/blank state
The currentState is still tracked so the debug label updates correctly
Debug mode now maintains full control of which texture is displayed
The issue was that when debug mode was ON, the game calling SetTrixieWait() would set a new texture path, but this could interfere with the debug system's texture control, causing blank/corrupted display.
Chairface's Casino v1.2.98
Reverted - game now always changes Trixie texture when SetState is called, even in debug mode. The debug T< and T> buttons will cycle through images, but game events will update Trixie normally.
Chairface's Casino v1.2.99
Changes:
Trixie Texture Refresh on Blackjack:
Added explicit texture refresh call after setting Trixie state
Forces the texture to re-apply by calling SetTexture(GetTexture())
Applied to both the cheer state (local player blackjack) and wait state (other player blackjack)
Should ensure Trixie image is visible before the blackjack animation plays
Chairface's Casino v1.2.100
Changes:
Trixie Debug Label:
Debug label now shows the actual image filename being displayed (e.g., "trix_wait1", "trix_deal3", "trix_win2")
Label updates in real-time whenever the game changes Trixie's state
Removed the index counter from the label (was showing "(1/82)")
Tracks currentImageName on the frame for reference
Chairface's Casino v1.2.101
Changes:
Trixie Animation No-Repeat Fix:
All random state functions now track their last used image and avoid repeats
Fixed broken repeat logic in deal/shuffle (removed or true that negated the check)
Added no-repeat tracking for:
Wait states (31 images) - lastWaitState
Deal states (8 images) - lastDealState
Shuffle states (12 images) - lastShufState
Lose states (12 images) - lastLoseState
Win/Cheer states (9 images) - lastWinState
Love states (10 images) - lastLoveState
Chairface's Casino v1.2.102
Changes:
Test Bar TRIX Visibility Toggle:
Added a "TRIX" button to each game's test bar that toggles Trixie visibility:
Blackjack: TRIX button between AUTO and <Trix
5 Card Stud: TRIX button between AUTO and <Trix
High-Lo: TRIX button between CLEAR and <Trix
Button Behavior:
Green when Trixie is visible
Red/brown when Trixie is hidden
Immediately updates the game window layout when clicked
Uses the same visibility setting as the Settings window checkbox
Chairface's Casino v1.2.103
Changes:
Removed Animations:
Removed fire_frames.tga texture file
Removed confetti_frames.tga texture file
Removed PlayConfettiEffect() function
Removed PlayWinEffect() function (blackjack fire and charlie confetti effects)
Removed Blackjack Pause:
Dealing no longer pauses for 1.5 seconds when a blackjack is detected
Cards continue dealing at normal speed through blackjacks
Audio Preserved:
Win sound still plays for blackjack
Trixie blackjack voice still plays
Win sound still plays for 5-card charlie
Trixie woohoo voice still plays for local player charlie
Trixie cheer/lose reactions still trigger appropriately
Chairface's Casino v1.2.104
Changes:
Blackjack Ledger Colors Flip for Host:
When the local player is the host, ledger colors are inverted:
"Owe Host" column is now green (players owing = good for host)
"Host Owes" column is now red (host owing = bad for host)
Non-host players see original colors (red for owing, green for being owed)
Refresh Button Added to All Games:
Added "R" button in title bar (between Back and Close)
Clicking refreshes the window (closes and reopens)
Tooltip shows "Refresh Window"
Available in: Blackjack, 5 Card Stud, High-Lo
Blackjack Trixie Behavior for Local Player Only:
Trixie cheer animation only triggers for LOCAL player's blackjack
Audio callouts (win sound, blackjack voice) only play for local player
Trixie holds cheer pose for 2 seconds before returning to wait state
Other players getting blackjack: no Trixie reaction, no audio on your client
Chairface's Casino v1.2.105
Fix:
Added missing ShouldShowTrixie() and SetTrixieVisibility() methods to High-Lo
This fixes the error when opening High-Lo or clicking the TRIX toggle button
Chairface's Casino v1.2.106
Changed refresh button label from "R" to "↻" (U+21BB - clockwise open circle arrow) in all three games.
Chairface's Casino v1.2.107
Changed refresh button to use "⟲" (U+27F2 - anticlockwise gapped circle arrow).
Chairface's Casino v1.2.108
Added refresh_icon.tga texture (32x32) from your uploaded image
Updated all three game refresh buttons to use the texture instead of Unicode text
Button brightens on hover with vertex color change
Chairface's Casino v1.2.109
Changes:
Extended blackjack Trixie cheer duration from 2 seconds to 3 seconds
5 Card Stud raise input now shows 0 (instead of 1) when player cannot raise
Chairface's Casino v1.2.110
Fix:
Added guard to High-Lo UpdateDisplay() to prevent nil error when state sync happens before the frame is initialized
The sync now completes without error even if the HiLo window hasn't been opened yet
Chairface's Casino v1.2.111
High-Lo Trixie Reactions (Local Player Only):
Game Phases:
Idle: Wait animation
Lobby: Shuffle/anticipation if joined, wait if not joined
Rolling: Shuffle while waiting to roll, wait after rolling
Tiebreaker: Shuffle (excitement)
Settlement:
Win: Cheer (or Love for wins ≥50g)
Lose: Lose/sad animation
Spectating: Wait
Immediate Roll Feedback:
When local player rolls:
Roll ≥80% of max: Cheer (great roll!)
Roll ≤20% of max: Lose (bad roll...)
Middle rolls: Wait (neutral)
Features:
No-repeat logic for all Trixie states (won't show same image twice in a row)
Updates automatically with game state changes
Only affects local player's Trixie view
Chairface's Casino v1.2.112
Changes:
Removed deal/shuffle animations from High-Lo Trixie (no cards in High-Lo)
Simplified Trixie states to: Wait, Cheer, Lose, Love only
High-Lo Trixie Reactions:
All game phases (Idle, Lobby, Rolling, Tiebreaker): Wait animation
Settlement - Win: Cheer (or Love for wins ≥50g)
Settlement - Lose: Lose/sad animation
Immediate roll feedback: Cheer for high rolls (≥80%), Lose for low rolls (≤20%), Wait for middle rolls
Chairface's Casino v1.2.113
New Audio Clips Added:
Bad/Lose Pool (PlayTrixieBustVoice) - now 5 clips:
trix_bust.ogg (existing)
trix_bust2.ogg (existing)
trix_bad1.ogg (oof)
trix_bad2.ogg (ouch)
trix_bad3.ogg (yikes)
Cheer/Win Pool (PlayTrixieWoohooVoice) - now 7 clips:
trix_woohoo.ogg (existing)
trix_cheer1.ogg (greatjob)
trix_cheer2.ogg (winner)
trix_cheer3.ogg (woooo)
trix_cheer4.ogg (yeah1)
trix_cheer5.ogg (yeah2)
trix_cheer6.ogg (yeah3)
All audio files converted from MP3 to OGG format for WoW compatibility. Voice clips are randomly selected from their respective pools when triggered.
Chairface's Casino v1.2.114
Audio Functions:
PlayTrixieBustVoice() - Blackjack bust ONLY (context-specific):
trix_bust.ogg, trix_bust2.ogg (bust-specific clips)
trix_bad1-3.ogg (oof, ouch, yikes)
PlayTrixieBadVoice() - Generic bad events (NEW):
trix_bad1.ogg (oof)
trix_bad2.ogg (ouch)
trix_bad3.ogg (yikes)
PlayTrixieWoohooVoice() - All wins/good events:
trix_woohoo.ogg + trix_cheer1-6.ogg
Audio Triggers by Game:
Blackjack:
Player busts → PlayTrixieBustVoice ✓
Someone else busts → PlayTrixieWoohooVoice ✓
Player gets 5-card charlie → PlayTrixieWoohooVoice ✓
Someone else gets charlie → PlayTrixieBadVoice ✓ (NEW)
Settlement win → PlayTrixieWoohooVoice ✓
Settlement loss → PlayTrixieBadVoice ✓ (NEW)
5 Card Stud:
Win → PlayTrixieWoohooVoice ✓
Loss → PlayTrixieBadVoice ✓
High-Lo:
Win → PlayWinSound + PlayTrixieWoohooVoice ✓ (NEW)
Loss → PlayTrixieBadVoice ✓ (NEW)
Chairface's Casino v1.2.115
Changes:
Blackjack - Host vs Player Trixie reactions:
Player busts:
Local player → Trixie sad + bust voice
Host/dealer → Trixie cheers + woohoo voice (player demise)
Other players → Trixie neutral (wait)
5-card charlie:
Local player → Win sound + Trixie cheers + woohoo voice
Host/dealer → Trixie sad + bad voice (player wins)
Other players → Trixie neutral (wait)
High-Lo - Overtaken detection:
If local player had a high roll (≥75% of max) and was leading, then another player beats them → Trixie sad + bad voice
Example: You roll 95 on /roll 100, feeling great, then someone rolls 97 → "Oof!"
Win sound usage (only on actual wins):
Local player blackjack during deal ✓
Local player 5-card charlie ✓
High-Lo settlement win ✓
Poker settlement win ✓
Casino intro fanfare ✓
Chairface's Casino v1.2.117
Fixed lobby Trixie to use the same 274x350 size as all the games instead of scaling to the lobby height (was 550px tall, now 350px).
Chairface's Casino v1.2.118
Removed Background Music System:
Deleted Files:
ambiance_0.ogg through ambiance_7.ogg (8 files, ~1.3MB total)
Removed Code:
OnCasinoWindowChanged() function and all calls to it
UpdateAmbianceState() function
CheckAmbianceState() function
StartAmbiance() function
StopAmbiance() function
PlayAmbianceChunk() function
ResumeAmbiance() function
IsAnyCasinoWindowOpen() function
ToggleAmbiance() function
All ambiance state variables (ambianceEnabled, ambianceRunning, ambianceChunks, etc.)
Music button from Settings panel
ambianceEnabled from saved settings
Remaining Audio:
SFX toggle (chips, cards, shuffle, fanfare, bust sounds)
Voice toggle (Trixie voices: intro, blackjack, bust, bad, cheer, woohoo, poke)
Chairface's Casino v1.2.119
Changes:
1. Window Scale Slider Fix (Blackjack & High-Lo)
Fixed ApplyWindowScale() to use correct frame names:
Blackjack: BJ.UI.mainFrame (was incorrectly BJ.UI.frame)
High-Lo: BJ.UI.HiLo.container (was incorrectly BJ.UI.HiLo.mainFrame)
Fixed the scale slider callback to apply to the same correct frames
Added lobby Trixie to scale list
2. High-Lo Tiebreaker Debug
Added detailed debug output to trace tiebreaker resolution
Debug shows phase transitions, roll values, and winner determination
Will help diagnose if tiebreaker still doesn't transition to settlement
3. Host Recovery System
Blackjack:
Added DetermineNewHost() - finds first online player in game order
Added TakeoverAsHost() - promotes player to host and broadcasts takeover
Added HOST_TAKEOVER sync message handling
When host disconnects, first online player automatically takes over after 2 second delay
New host broadcasts full state sync to align all clients
High-Lo:
Added CheckHostConnection() - monitors host status via GROUP_ROSTER_UPDATE
Added DetermineNewHost() and TakeoverAsHost() similar to Blackjack
Added HandleHostTakeover() message handler
Registers for GROUP_ROSTER_UPDATE event to detect host disconnect
The tiebreaker issue may need further testing with debug mode enabled (/cc db) to see the debug output and identify where it's getting stuck.
Chairface's Casino v1.2.120
Changes:
1. Window Scale Slider Fix
Blackjack and High-Lo now properly scale with the settings slider
Fixed frame name references (mainFrame for Blackjack, container for High-Lo)
2. High-Lo Tiebreaker Debug
Added detailed debug output to trace tiebreaker resolution (enable with /cc db)
3. Host Recovery System (Redesigned)
The new system is a grace period for host reconnection, not a takeover:
When host disconnects:
Game immediately PAUSES - no actions allowed
First online player becomes temporary host (only has reset ability)
2-minute countdown starts
Status bar shows countdown: "PAUSED - Host has X:XX to return"
If original host returns within 2 minutes:
They automatically get host back
Game resumes where it left off
Full state sync to ensure alignment
If 2 minutes expire:
Game is VOIDED - no gold changes hands
Everyone's game state resets
Message: "Game VOIDED: Host did not return in time"
Temporary host can:
Click "VOID GAME" button to end early (with confirmation dialog)
Cannot take any game actions (hit, stand, deal, etc.)
Messages broadcast:
HOST_RECOVERY_START - Notifies all players of pause
HOST_RECOVERY_TICK - Updates remaining time every 30 seconds
HOST_RESTORED - Host is back, resume game
GAME_VOIDED - Game cancelled, reset everyone
This applies to both Blackjack and High-Lo.
Chairface's Casino v1.2.121
Changes:
Host Recovery System - All 3 Games
The host recovery grace period system now works for Blackjack, High-Lo, and 5 Card Stud.
How it works:
When host disconnects:
Game immediately PAUSES for all players
First online player becomes temporary host (can only void game)
2-minute countdown starts
Status shows: "PAUSED - [host] has X:XX to return"
All player actions are blocked during recovery:
Blackjack: Hit, Stand, Double, Split all blocked
High-Lo: Roll button blocked
5 Card Stud: Fold, Check, Call, Raise all blocked
Players see: "Game is paused - waiting for host to return"
If host returns within 2 minutes:
They automatically get host back
Game resumes exactly where it left off
Full state sync ensures alignment
If 2 minutes expire:
Game is VOIDED - no gold changes hands
Everyone's state resets
Message: "VOIDED: Host did not return in time"
Temporary host can:
Click reset button to void game early (with confirmation)
Cannot take any game actions
Files Modified:
Multiplayer.lua - Blackjack recovery + action blocking
HiLoMultiplayer.lua - High-Lo recovery system
PokerMultiplayer.lua - 5 Card Stud recovery system
UI/MainFrame.lua - Blackjack recovery UI handlers
UI/HiLoFrame.lua - High-Lo recovery UI handlers + roll blocking
UI/PokerFrame.lua - 5 Card Stud recovery UI handlers
Chairface's Casino v1.2.122
Changes:
Fixed Host Disconnect Detection:
Added UNIT_CONNECTION event - This event fires when a player's connection status changes (disconnect/reconnect), in addition to GROUP_ROSTER_UPDATE which only fires when someone leaves the group entirely.
Added debug output - Enable with /cc db to see detailed debug messages showing:
When roster/connection events fire
Whether host is in group
Whether host is online
Current disconnect state
When recovery starts/ends
Fixed orphaned code - Removed broken player disconnect check code that was outside any function in Blackjack multiplayer.
Important testing note: The host disconnect detection only works on non-host players. If you ARE the host and disconnect, the other players will see the disconnect and start recovery. You won't see anything yourself because you disconnected.
To test properly:
Player A hosts a game
Player B joins the game
Player A disconnects (alt-F4, /logout, etc.)
Player B should see "Host disconnected!" and recovery mode starts
Player A reconnects within 2 minutes
Player B should see "Host returned! Resuming."
Or test with 3+ players where Player C observes while Player A (host) disconnects.
v1.2.123 - Debug version with always-on trace output for Blackjack host recovery.
When you test:
Have Client A host a blackjack game
Have Clients B and C join
Have Client A disconnect
On Clients B and C, you should see gray [Debug] messages in chat showing:
"Roster update - host: [name], phase: [phase]"
Whether it's skipping and why
hostInGroup value
hostOnline value
etc.
v1.2.124 - Fixed the syntax error (extra end).
v1.2.127
Changes:
1. Fixed Host Return Sync
When the original host reconnects, they now properly reclaim host status
Added 1 second delay before state sync to ensure all clients know host is back
Host updates their own UI after reconnecting
2. Added Recovery Popup Window
When host disconnects, a popup window appears for all players showing:
"HOST DISCONNECTED" title
Host's name
Countdown timer (2:00 → 0:00)
"Game paused - waiting for host to return"
"Void Game" button (only for temporary host)
Timer turns red when under 30 seconds
Popup auto-closes when:
Host returns (game resumes)
Timer expires (game voided)
Temp host clicks "Void Game"
Window is draggable
3. Removed Debug Messages
Removed the gray [Debug] spam from roster updates
v1.2.128
Changes:
Self-Detection for Returning Host
Now when the original host reconnects, their own client detects they are the originalHost and triggers the restore directly:
lua-- Check if WE are the original host who just reconnected
if MP.originalHost == myName and MP.hostDisconnected then
BJ:Print("You have reconnected as host. Restoring game...")
MP:RestoreOriginalHost()
return
end
This works because:
When host disconnects, originalHost is set to their name on all clients (via broadcast)
When host reconnects, GROUP_ROSTER_UPDATE fires on their client
Their client sees originalHost == myName and hostDisconnected == true
They call RestoreOriginalHost() which broadcasts sync and updates everyone
Applied to all 3 games: Blackjack, High-Lo, and 5 Card Stud.
v1.2.129
Changes:
Login/Reload State Recovery
When a player logs in or does /reload, their client now:
Registers PLAYER_ENTERING_WORLD event - fires on login and reload
After 2 second delay (to ensure group info is loaded), sends REQUEST_STATE message
Host or temp host responds with either:
RECOVERY_STATE - if game is paused waiting for host
Full state sync via StateSync - if game is active normally
If returning host logs in during recovery:
Their client receives RECOVERY_STATE
Detects they are the originalHost
Automatically calls RestoreOriginalHost()
Broadcasts sync to all players
If regular player reloads during recovery:
Receives RECOVERY_STATE
Shows recovery popup with remaining time
UI shows paused state
Applied to all 3 games: Blackjack, High-Lo, 5 Card Stud.
v1.2.130
Fix:
The issue was that PLAYER_ENTERING_WORLD fires before PLAYER_LOGIN, so by the time our Initialize() was called (on PLAYER_LOGIN), the event had already fired and we missed it.
Solution: Instead of registering for the event, we now directly call OnPlayerEnteringWorld() with a 3 second delay at the end of Initialize():
lua-- Check for active games after a delay (handles login/reload)
C_Timer.After(3.0, function()
MP:OnPlayerEnteringWorld()
end)
This ensures:
Initialize completes first
AceComm is registered
Group info is available
Then we send the REQUEST_STATE message
Applied to all 3 games.
v1.2.131
Changes:
Fixed Login/Reload State Sync
The existing StateSync system already handles login/reload sync via PLAYER_ENTERING_WORLD. The issue was:
Removed the duplicate REQUEST_STATE system from individual multiplayer files
Added visible debug message: [Casino] Checking for active games... when entering world in a group
Updated StateSync to handle recovery mode properly
StateSync Recovery Mode Support:
CheckIfPlayerInGame() now also checks:
If we're the temp host (temporaryHost == myName)
If game is in recovery mode (hostDisconnected and originalHost set)
When in recovery mode, sends special message with recovery info:
YOU_ARE_PLAYING|blackjack|recovery|origHost|tempHost|remainingTime
YOU_ARE_PLAYING Handler:
Now handles both normal sync and recovery state:
If isRecovery flag is set, restores recovery state for the appropriate game
Shows recovery popup with remaining time
If the returning player IS the original host, auto-restores them
This should now properly sync players who login/reload during a recovery pause.
v1.2.132 - Debug version
When the host logs back in, look at the temp host's chat for debug messages like:
[Debug] CheckIfPlayerInGame for <hostName>
[Debug] BJ: isHost=..., tempHost=..., check=...
[Debug] BJ phase=..., hostDisconnected=...
[Debug] Sending RECOVERY state to <hostName>
This will show us where the response is failing - whether:
The temp host isn't detecting they should respond
The phase check is failing
The recovery state isn't being sent
v1.2.133
Changes:
1. Fixed Host Reconnect Sync
When temp host detects the original host is back, they now broadcast full state sync (not just HOST_RESTORED message)
The returning host no longer tries to broadcast sync themselves - they wait to receive it from temp host
This fixes the race condition where the restore message was sent before the returning host had any state
2. Countdown on All Clients
Non-temp-host clients now start their own local countdown timer when they receive HOST_RECOVERY_START
This gives smooth 1-second countdown updates on all clients
Temp host broadcasts tick updates every 5 seconds to keep clients in sync
Local timers are cancelled when recovery ends
3. Removed Debug Output
The flow is now:
Host disconnects → Temp host starts countdown, broadcasts HOST_RECOVERY_START
All clients show popup with countdown (each running local timer)
Host reconnects → Temp host detects via UNIT_CONNECTION
Temp host broadcasts HOST_RESTORED + sends full state sync
All clients close popup and resume
v1.2.135
Changes:
Host Reconnect via AM_I_PLAYING
The flow is now officially:
Host disconnects → All clients enter recovery mode with popup + local countdown
Host reconnects → Their client sends AM_I_PLAYING after 2 second delay
Temp host receives it in CheckIfPlayerInGame():
If playerName == originalHost → Trigger full restore immediately
Otherwise → Send recovery state info to the player
Temp host calls RestoreOriginalHost() which:
Broadcasts HOST_RESTORED to all clients
Sends full state sync
All clients receive broadcast and close popup
This makes the "checking for existing games" message the trigger for restore, which matches what you observed actually working.
v1.2.136 - Debug version
When the host logs back in, look at the temp host's chat for debug messages:
[Debug] CheckIfPlayerInGame: <hostName> is asking - confirms the temp host received the request
[Debug] BJ check: isHost=..., tempHost=..., me=..., pass=... - shows if temp host check passes
[Debug] BJ phase=..., hostDisconnected=..., originalHost=... - shows recovery state
[Debug] In recovery mode. Asking player=..., originalHost=... - shows the name comparison
This will tell us:
Is the temp host receiving the AM_I_PLAYING at all?
Is the BJ check passing (is temporaryHost set correctly)?
Is the phase correct (not idle)?
Is hostDisconnected and originalHost set?
Are the names matching for the restore?
v1.2.137 - More debug
When the host disconnects, look at the temp host's chat for:
[Debug] StartHostRecovery called by <name> - who detected the disconnect
[Debug] DetermineTemporaryHost returned: <name> - who was chosen as temp host
[Debug] I am temp host, setting MP.temporaryHost = <name> - confirms they set it
OR
[Debug] Someone else is temp host: <name> - they weren't chosen as temp host
This will tell us if MP.temporaryHost is being set correctly when recovery starts.
v1.2.139 - Added missing BroadcastFullState function to StateSync.
The function was being called but didn't exist. Now it:
Builds the full state for the game
Serializes and compresses it
Broadcasts to the group (PARTY or RAID channel)
v1.2.140
Fix: Shoe regeneration on state sync
The issue was that when the host reconnects and receives the state sync:
Their shoe was empty (fresh login)
They received game state but NOT the shoe
Tried to deal → "Shoe exhausted!"
Solution:
BuildBlackjackState now includes cardIndex in the sync
ApplyBlackjackState now:
Checks if shoe is empty
If empty, regenerates from the synced seed using CreateShoe()
Sets cardIndex from the sync so we're at the right position in the shoe
Since the shoe is seeded, regenerating from the same seed produces the same shuffle, so the cardIndex will point to the correct next card.
v1.2.141 - Debug version for non-temp-host clients
Added cyan [Recovery] debug messages to trace the flow on non-temp-host clients:
When host disconnects, look for:
[Recovery] Received HOST_RECOVERY_START: tempHost=X, origHost=Y
[Recovery] I am NOT temp host, showing popup and starting timer
[Recovery] Starting local countdown timer
When host returns, look for:
[Recovery] Received HOST_RESTORED for X
[Recovery] Timer stopped - recovery ended
This will tell us:
Is the non-temp-host client receiving HOST_RECOVERY_START?
Is it correctly identifying itself as NOT the temp host?
Is the local timer actually starting?
Is HOST_RESTORED being received?
v1.2.142
Fixes:
1. Non-temp-host clients now start their own local timer
Fixed StartHostRecovery() - non-temp-host clients now call StartLocalRecoveryCountdown()
Previously they only showed the popup but didn't start the countdown timer
2. Recovery cleanup on state sync
Added recovery state cleanup to ApplyBlackjackState()
When ANY client receives a full state sync while in recovery mode, they:
Cancel their local timer
Close the recovery popup
Clear all recovery state flags
Call OnHostRestored()
This ensures even if HOST_RESTORED message is missed, the state sync will still clean up
3. Removed debug messages
The key insight was that each client independently detects the host disconnect via OnRosterUpdate and calls StartHostRecovery() themselves - they don't wait for a broadcast. So each client needs to start their own timer.
v1.2.143 - Debug version for cardIndex sync
Look at the temp host's chat when they send the sync:
[Sync] Building state: cardIndex=X, remaining=Y, shoeSize=Z
Look at the returning host's chat when they receive the sync:
[Sync] Regenerating shoe from seed...
[Sync] After CreateShoe: cardIndex=1, shoeSize=52
[Sync] Received: cardIndex=X, cardsRemaining=Y
[Sync] Applied cardIndex=X, now remaining=Y
This will tell us:
Is the temp host sending the correct cardIndex?
Is the returning host receiving it?
Is it being applied correctly after shoe regeneration?
v1.2.144 - Fixed syntax error (extra end on line 864)
v1.2.145
Fix: Temp host card remaining sync
The issue was:
Temp host has isHost = true but doesn't have the real shoe state
They only have syncedCardsRemaining = 46 from when they were a regular client
But their cardIndex = 1 (never updated since they never dealt cards)
BuildBlackjackState was using cardIndex which gave wrong value
Solution:
BuildBlackjackState now intelligently determines the correct values:
If cardIndex > 1 - we have real shoe state, use it
Else if syncedCardsRemaining exists - we're a temp host/client, use synced value and calculate cardIndex from it
Fallback to old behavior
This ensures the temp host sends the correct cardIndex = 7 (52 - 46 + 1) and cardsRemaining = 46.
v1.2.146
Changed all the gray [Sync] debug messages from BJ:Print() to BJ:Debug() so they only show when debug mode is enabled via /cc debug.
v1.2.147
New Feature: Table Felt Background
Added tablefelt_bg.tga (1024x571, ~550KB) as the background for all three games:
Blackjack
High-Lo
5 Card Stud
How it works:
The texture is larger than any game window
Each window crops from the CENTER of the texture
When the window resizes (e.g., Trixie visibility toggle), the texture coordinates update so the pattern stays centered and doesn't shift
This creates a consistent felt background that feels like a real casino table
Implementation:
Created UpdateFeltTexCoords() function on each main frame
Calculates UV coordinates to show the center portion of the texture based on current window size
Called when Trixie visibility changes or window resizes
v1.2.148
Fixed the felt background for Blackjack:
Upgraded texture to 1280x720 (was 1024x571) so it's larger than Blackjack's 1214px width
Updated all three games to use the new texture dimensions
The texture will now properly cover Blackjack's full window without stretching
v1.2.149
Fixed High-Lo felt background:
Felt texture now starts 55px from the top (below title and status text)
Title area has dark background (0.08, 0.08, 0.12, 0.97)
Felt covers from below status text down to the bottom of the frame
Texture coordinates updated to account for the smaller visible area
v1.2.150
Added shoe seed to the game info header for transparency:
Blackjack:
Host: PlayerName | Ante: 5g with 10x multiplier | S17 | Remaining Cards: 46 | Seed: 1767494575
5 Card Stud:
Host: PlayerName | Ante: 5g | Max Raise: 100g | Remaining Cards: 46 | Seed: 1767494575
This allows players to verify the shuffle is fair - the same seed will always produce the same card order.
v1.2.151
Updated dealer name styling to match player names:
Font: FRIZQT__.TTF (same as players)
Style: OUTLINE (same as players)
Size: 14pt (smaller than player's 18pt, appropriate for dealer label)
Previously it used GameFontNormalLarge with a dimmed white color - now it matches the player styling but at a smaller size.
v1.2.152 - Debug version
Added debug output to the HIT sync handler. Enable debug with /cc debug and when player 2 hits, look for messages like:
HIT sync: player=PlayerName, busted=false, newActiveHand=1, newCurrentPlayerIdx=2, oldCurrentIdx=2
HIT sync: Updated currentPlayerIndex to 2
UpdateButtons: phase=PLAYER_TURN, myName=Player2, currentPlayer=Player2, currentIdx=2, isMyTurn=true, isDealingAnim=false
This will tell us:
What newCurrentPlayerIdx is being sent by the host
Whether it matches the oldCurrentIdx
Whether isMyTurn correctly evaluates to true after the hit
v1.2.153 - Debug version with visible output
Now when any player hits, you should see gray messages in chat (no debug mode needed):
[HIT sync] player=PlayerName, newIdx=2, oldIdx=2
[HIT sync] Set currentPlayerIndex=2
This will tell us:
If the HIT sync is being received at all
What the newCurrentPlayerIdx value is
Whether it's updating currentPlayerIndex
If you don't see these messages on the 2nd player's client when they hit, then the sync message isn't reaching them at all.
v1.2.155 - More visible debug
Now when Player 1 hits to 21, watch for these messages on Player 2's client:
[HIT sync] player=Player1, status=21, newIdx=2, oldIdx=1
[HIT sync] Set currentPlayerIndex=2
[UpdateButtons] phase=PLAYER_TURN, me=Player2, current=Player2, idx=2, isMyTurn=true, isDealingAnim=false
If isMyTurn=true but buttons are still grayed, then something else is wrong.
If current=nil or isMyTurn=false, that tells us where the problem is.
If isDealingAnim=true, that's blocking the buttons.
v1.2.156
Bug Fix: Empty field parsing in message deserialization
Root cause: The deserialize function used string.gmatch(msg, "[^|]+") which skips empty fields between delimiters.
When a player hits without busting or hitting 21:
Message: SYNC_STATE|HIT|version|player|rank|suit|handIndex||newActiveHand|currentPlayerIndex
The empty bustStatus field (||) was being skipped
All subsequent fields shifted by 1
currentPlayerIndex was parsed as nil
Player's turn never advanced properly
Fix: Rewrote deserialize to properly preserve empty fields by manually splitting on the delimiter character, ensuring each field (even empty ones) is captured in the correct index.
v1.2.157
Fix: Seed now persists in header during play
Issue: The seed would disappear from the header info during play because:
StartRound() only stored the seed when calling CreateShoe()
If the shoe didn't need reshuffling (same host continuing), CreateShoe() wasn't called
ResetForNewHand() preserves the seed, but on non-host clients receiving TABLE_OPEN, the seed wasn't being stored unless a reshuffle occurred
Fix: Added explicit self.seed = seed in StartRound() to always store the seed when provided, regardless of whether a reshuffle occurs. The seed will now persist in the header until a full Reset() is called (new match or reset button).
v1.2.158
Fix: Seed now shows during and after shuffle
The shuffle animation had two places where the info text was manually built without including the seed:
During shuffle - Now shows: Host: X | Ante: 5g with 10x multiplier | H17 | Shuffling... | Seed: 123456
After shuffle completes - Now shows: Host: X | Ante: 5g with 10x multiplier | H17 | Remaining Cards: 52 | Seed: 123456
Both places now include the seed in the header info.
v1.2.159
Fix: Seed now persists across all phases
Created a helper function UI:BuildInfoText(shufflingText) that consistently builds the info text header with:
Host name
Ante and multiplier
H17/S17 rule
Remaining cards (or shuffling text)
Seed (always included when available)
Updated all places that set the info text to use this helper:
UpdateDisplay() - main display update
During shuffle animation
After shuffle completes
After deal animation completes (new - this was missing before)
The seed will now stay visible through:
Table open
Shuffling
Dealing animation
Player turns
Dealer turn
Settlement
Until a new seed is generated (next shuffle/reset).
v1.2.160
Changes:
1. 5 Card Stud - Status bar position
Moved status bar closer to action buttons (offset reduced from 5 to 2 pixels above buttons)
Status bar is now just below the player area
2. Sync check excludes concluded games
All three games (Blackjack, Poker, High-Lo) now exclude "settlement" phase from sync checks
Login/reload sync will only detect and restore actively running games, not games that have already concluded
3. 5 Card Stud - Host recovery improvements
Updated RestoreOriginalHost() to match Blackjack's improved pattern:
Added restoringHost flag to prevent double-restore race conditions
Cancel local recovery timer
Close recovery popup
Temp host sends sync to returning host (not the returning host broadcasting)
Returning host waits for sync instead of trying to broadcast
Added PM:CloseRecoveryPopup() function
Updated VoidGame() to cancel local timer and close popup
v1.2.161
5 Card Stud Host Recovery - Full Implementation
Added missing functionality to match Blackjack's recovery system:
1. Recovery Popup for all players:
Added PM:ShowRecoveryPopup() - creates the "HOST DISCONNECTED" popup with countdown timer
Added PM:UpdateRecoveryPopupTimer() - updates the popup countdown display
Popup shows for temp host (with "Void Game" button) AND regular players
2. Local countdown for non-temp-host clients:
Added PM:StartLocalRecoveryCountdown() - runs UI countdown locally without being the authoritative timer
Non-temp-host clients now get the popup and countdown when they receive HOST_RECOVERY_START broadcast
3. Proper cleanup on HOST_RESTORED:
Cancel local recovery timer
Close recovery popup
Clear all recovery state flags
4. Set hostDisconnected flag:
StartHostRecovery() now sets PM.hostDisconnected = true immediately
The flow now works like Blackjack:
Host disconnects → Temp host is selected
Temp host: Shows popup, starts authoritative countdown, broadcasts HOST_RECOVERY_START
Other clients: Receive broadcast, show popup, start local countdown
Host returns → Temp host broadcasts HOST_RESTORED
All clients: Cancel timers, close popup, resume game
v1.2.162
Changes:
1. Host disconnect popup - Only during active phases
Blackjack: Now skips host recovery for both idle AND settlement phases
Poker: Now skips host recovery for both idle AND settlement phases
Host disconnect popup won't appear when game is concluded
2. Seed sync improvements
Blackjack: Added dealerHitsSoft17 to state sync (was missing, could cause H17/S17 display issues)
Poker: Added seed to BuildPokerState() and ApplyPokerState()
Poker: Added explicit UpdateInfoText() calls after state sync to ensure header is updated
3. Poker host recovery - Full implementation
Added ShowRecoveryPopup() and UpdateRecoveryPopupTimer() to Poker
Added StartLocalRecoveryCountdown() for non-temp-host clients
Non-temp-host clients now get the popup and local countdown when they receive HOST_RECOVERY_START
HOST_RESTORED handler now cancels local timer and closes popup
Set hostDisconnected = true in StartHostRecovery()
The seed should now be properly synced and displayed after login/reload for both Blackjack and Poker. If it's still not showing, please let me know and I can add debug output to trace the issue.
v1.2.163
5 Card Stud Card Count Sync Fixes
1. State sync now includes card index:
BuildPokerState() now includes cardIndex and cardsRemaining
ApplyPokerState() now:
Regenerates deck from seed when host reconnects
Applies cardIndex after deck regeneration
Stores syncedCardsRemaining for non-host clients
2. DEAL_CARD message now includes remaining cards:
Both places where MSG.DEAL_CARD is sent now include PS:GetRemainingCards() as the 7th parameter
HandleDealCard() now reads and stores cardsRemaining to PS.syncedCardsRemaining
Also calls UpdateInfoText() after each card to update the display
3. GetRemainingCards() updated:
Now checks syncedCardsRemaining for non-host clients (like Blackjack does)
Host uses actual deck calculation
4. Reset clears synced value:
PS:Reset() now clears syncedCardsRemaining
This should fix:
Host returning from reload now has correct deck/cardIndex
Clients now see remaining cards decrease as cards are dealt
v1.2.164
Fix: 5 Card Stud returning host card index
Problem: When the host returned from disconnect, the deck was reset to 52 cards because:
Temp host doesn't have a real deck, only syncedCardsRemaining
Temp host's cardIndex was 1 (default)
When sending state sync, it sent wrong cardIndex
Returning host regenerated deck then applied wrong cardIndex
Fixes in BuildPokerState():
Now checks if we have a real deck (cardIndex > 1) or just synced data
If we only have syncedCardsRemaining (temp host/client), calculates correct cardIndex as 52 - syncedCardsRemaining + 1
Fixes in ApplyPokerState():
Stores syncedCardsRemaining FIRST before deck operations
Only regenerates deck if we're the returning host (not temp host)
After deck regeneration, applies cardIndex properly
Falls back to calculating cardIndex from cardsRemaining if needed
The flow now:
Original host has deck with seed 12345, cardIndex=15 (37 cards remaining)
Host disconnects, temp host receives state with cardsRemaining=37
Temp host sends sync with calculated cardIndex=16 (52-37+1), cardsRemaining=37
Returning host receives, regenerates deck from seed 12345, sets cardIndex=16
Deck is now in correct position
v1.2.165
Added: Game start notification sound
Added RobotBlip.ogg to Sounds folder
Added Lobby:PlayGameStartSound() function
Sound plays on all clients when receiving TABLE_OPEN message for:
Blackjack - when host opens a table
5 Card Stud - when host opens a table
High-Lo - when host opens a table
The sound notifies party/raid members that a game has started and they can join.
v1.2.166 - Replaced RobotBlip.ogg with chips.ogg for game start notification sound.
v1.2.167
Changed the sound call to use PlaySoundFile() directly instead of going through BJ.UI.Lobby. The Lobby module might not be fully initialized when the HandleTableOpen messages are received, so calling the WoW API directly ensures the sound plays.
v1.2.168
Added dice.mp3 for High-Lo start notification
High-Lo now plays dice sound instead of chips when a table opens
Blackjack and 5 Card Stud still use chips.ogg
v1.2.169
High-Lo Host Recovery Simplified
Changed High-Lo to use immediate host transfer instead of the 2-minute recovery system:
When host disconnects:
A new host is immediately selected (next player in order who is online)
New host becomes the permanent host (not temporary)
HOST_TRANSFER message is broadcast to all clients
Game continues without pause
When original host returns:
They simply rejoin as a regular player
No special restore process needed
Changes:
StartHostRecovery() - Now does immediate host transfer, no countdown
Removed StartRecoveryCountdown() - Not needed
Removed RestoreOriginalHost() - Not needed
Added HandleHostTransfer() - New handler for permanent host changes
Updated StateSync to not use recovery mode for High-Lo
Fixed UpdatePlayerList() to guard against uninitialized playerRows
This makes sense for High-Lo since there's no complex deck/shoe state to maintain - any player can become host and continue the game.
v1.2.170
High-Lo Settlement Display Improvements
Added semi-transparent background:
Dark background with subtle gold border appears behind settlement text
Auto-sizes to fit the text height
Hidden during other phases (idle, lobby, rolling)
Enhanced payout line visibility:
Changed from: Apptester pays Gametester 27g
Changed to: >>> Apptester pays Gametester 27g <<<
Added green arrow markers and white player names to make the final payout line stand out
Gold amount remains highlighted in green
The settlement block now looks like:
Gametester (61) wins
Apptester (34) loses
61 - 34 = 27g
>>> Apptester pays Gametester 27g <
v1.2.171
High-Lo Player Disconnect Timer System
New Features:
Disconnect Detection (Host Only):
Host monitors all players for disconnects or leaving the group
When a player disconnects/leaves, a 60-second timer starts
Timer is broadcast to all clients via PLAYER_DISCONNECT message
Visual Timer in Player List:
Red countdown timer appears right-aligned in the player's row
Shows remaining seconds (e.g., 45s)
Timer updates every second
Reconnection:
If player returns within 60 seconds, timer is cleared
PLAYER_RECONNECT message broadcast to update all clients
Timeout Removal:
After 60 seconds, player is automatically removed from the game
PLAYER_REMOVED message broadcast to all clients
Chat message announces removal
Game End Check:
After removing a player, checks if game should end
If fewer than 2 players remain during rolling/tiebreaker, game is voided
Lobby phase just waits for more players
Cleanup:
Disconnect tracking cleared when game is voided or ends
Timer stopped when no more disconnected players
Messages Added:
PLAYER_DISCONNECT - Notifies clients a player disconnected
PLAYER_RECONNECT - Notifies clients a player reconnected
PLAYER_REMOVED - Notifies clients a player was removed (timeout)
v1.2.173
Settlement background is now 100% opaque black
Settlement text is parented to the background frame so it renders above it
Subtle gold border for visibility
v1.2.174
Rolls in High-Lo now play the dice.mp3 sound effect
Both regular rolling phase rolls and tiebreaker rolls trigger the sound
v1.2.175
Fixed all High-Lo roll sounds to use dice.mp3:
HiLoMultiplayer.lua - HandlePlayerRolled (synced rolls from other clients)
HiLoFrame.lua - OnChatMessage rolling phase (local roll detection)
HiLoFrame.lua - OnChatMessage tiebreaker phase (already fixed in v1.2.174)
v1.3.0 🎉
Trixie intro will play again for all users on first launch
Updated intro version check from "1.1.1" to "1.3"
Anyone who hasn't seen the 1.3 intro will get the full Trixie welcome with voice line