Releases: aaskjer/Blackjack-Game
Release list
v16.1.1
Hotfix for the overlay
- OBS overlay now shows the next running game with a prioritization
| Priority | Source |
|---|---|
| 1 | Live house table |
| 2 | Live duel |
| 3 | Pending duel challenge |
| 4 | Live solo hand |
Together against the house!
🏠 House Mode
A dealer on one side and up to 6 chatters on the other, all playing the same shoe.
Broadcaster/Moderator opens a table and picks a rule set, players take a seat with their own bet during
a join window, everyone plays in seat order, then the dealer plays once and every seat is
settled against that single hand. The table opener can join like anyone else if they also want to play.
House Mode is played for real currency only. While Free Game is on, the table refuses to
open rather than quietly taking points from a channel that thought it was playing for fun.
Commands
| Command | Description |
|---|---|
!house [rules] |
Opens a table. The rule set can be named directly to skip the menu, e.g. !house vegas. |
join <bet> |
Takes a seat while the join window is open. Accepts the same bet shortcuts as !blackjack (all, half, max, 1.5k, 50%, …). |
deal |
Deals immediately instead of waiting out the join window. |
hit / stand |
Play your hand when it's your turn. |
double / split |
Same as a normal game, subject to the table's rule set. |
insurance / surrender |
Only where the table's rule set offers them. |
repeat |
Reposts the table — the dealer's upcard, every seat's hand, and whose turn it is. |
Rule sets
| Set | Shoe | Notable |
|---|---|---|
| Vegas Strip | 4 decks | Dealer peeks, insurance, double after split, up to 4 hands |
| Atlantic City | 8 decks | As Vegas Strip, plus late surrender |
| European | 2 decks | No peek, no insurance, no surrender, double on 9/10/11 only, 2 hands max |
Untick a set in the GUI to keep it out of the menu. With exactly one left ticked it's used automatically
and nobody is asked to pick.
Added
- House Mode rendering in the OBS overlay
- House join-window lobby in the overlay: per-seat chips with player name and bet, dashed placeholders for open seats.
- Semi-circular seat arc for House Mode in the overlay, with the dealer centred
- Card tilt along the arc for House Mode seats (labels stay upright)
STANDbadge in the overlay for duel and house hands played out and still under 21Cards In Chatdropdown on the General tab —Cards + Numbers,Cards Only,Numbers Only. Applied to solo, duel and houseResult Hold (sec)setting on the Overlay tab (default 8, minimum 1), replacing the hardcoded fade delay. Longer period to see who won and who lost.Sudden Death Both Bustedmessage and GUI field- Diagnostic log entry when a duel accept/decline arrives with no user attached
- Name wrapping and length-based shrinking for duel seat names and solo/house hand labels
Changed
- Dealer zone centred in single-player mode
- Default game-over fade raised from 6s to 8s
- Overlay HTML created directly in the folder when the OBS Auto-Setup button is pressed instead on the first command use after OBS Auto-Setup button was pressed.
Removed
Moderators Only Can Open A Tablesetting and GUI checkbox. It's handled directly from the commands tab in streamer.bot.MsgHouseModOnlymessageIsModeratorOrBroadcaster()and all call sites- Moderator exemption from the Max Games/Hour limit
- Duplicate seat-level outcome badge in duel overlay for single-hand seats
Fixed
- Sudden death no longer loops on a double bust, doubling stakes to the round limit (thx MrSharkey for pointing it out)
Tied at {value}no longer reports only the challenger's total- Stray
you have nothing to accept or declineaddressed to an empty name - Long player names no longer overflow and clip off the overlay canvas
- Overlay file is recreated if deleted mid-session instead of staying gone until restart
Major Overhaul
Big major update!
The first release in a long time. Alongside the classic single-player game, completely reworked codebase and many other things, this are the three major features:
PvP Duel Mode
Full self creating OBS browser-source overlay
Persistent leaderboard
Chatters can now play against each other, fully supported in chat and in the OBS overlay
No more importing the overlay yourself with SourceCopy or other tinkering, everything you need is in the GUI
The old Stats system has worn off, the new Leaderboard is now fully persistent and tracks all important things
⚔️Duel System
- Both players are dealt two cards face up from a single shared deck.
- The challenger acts first, then the opponent, then a showdown.
- Bust loses immediately. A natural blackjack beats a made 21 and stands
automatically, so a player holding one is never asked to act. - Equal totals push and both stakes are refunded.
- Both stakes are held from the moment the challenge is made and are refunded on
decline, timeout, or a push.
Raises need the opponent's agreement
Splitting and doubling down increase the stakes for both players, so they can't be
one-sided. The opponent gets an accept/decline prompt, and declining refuses the raise
only — it never ends the duel.
- Each split hand plays for its own equally funded side pot.
- If one player has fewer hands, their single hand defends every pot.
- A split that doesn't increase the pot count needs no agreement and happens instantly.
Sudden Death (optional, off by default)
When enabled, a tied duel offers double-or-nothing instead of simply refunding. Both
players must accept, both stake another bet, and each draws one more card. Any decline,
timeout, or shortfall refunds everything. Repeats up to a configurable round limit.
| Command | Description |
|---|---|
!bjduel @user <bet> |
Challenge a chatter. Accepts the same bet shortcuts as !blackjack (all, half, max, 1.5k, 50%, …). Order doesn't matter — !duel 500 @user works too. |
accept |
Accept whichever prompt is currently waiting on you. |
decline |
Decline whichever prompt is currently waiting on you. |
hit / stand |
Play your hand, same as a normal game. |
double / split |
Request a raise (see below). |
quit |
Forfeit the duel — your opponent takes the whole pot. (Moderators only) |
Also included
- Configurable timeouts for accepting a challenge, taking a turn, and answering a raise.
- Full Free Game support — duels work as pure bragging rights with no points involved.
- Blocked groups, the Addicted List, cooldowns, and Max Games/Hour all apply to duels.
- A dedicated ⚔️ Duel settings tab and a ⚔️ Duel Messages tab with ~50
customisable chat messages.
📺 OBS Overlay (new)
A self-contained browser source that renders the game live on stream. It is installed
automatically into the overlay folder — no manual file copying.
Setup: add a Browser Source in OBS pointing at blackjack_overlay.html. The
background is transparent, so it layers over any scene.
Renders
- Dealer and player hands with real card faces, suits, and colours.
- Deal-in animations, an animated highlight on the hand currently in play, hand values,
bet amounts, insurance indicator, and outcome badges (win / lose / push / bust /
blackjack / 5-card charlie / triple 7s). - Duels: the two players face each other with a VS badge and the live pot between
them. Split hands stack per side pot, and each seat gets a win / lose / push result. - Prompt cards with an animated countdown ring for a pending challenge, a split or
double raise, and a sudden-death offer. The card counts down on its own and hides
itself when the timer expires, so the overlay never sits on a dead prompt. - Fades out a few seconds after a round ends.
Customisable from the OBS Overlay tab
Scale, font scale, card red/black colours, background colour and opacity, dealer name,
and toggles for hand values, bet amounts, outcome badges, insurance display, animations,
and hiding the overlay entirely during Free Game.
Automatic updates — the overlay file is version-stamped. When a newer version ships,
it is written out automatically and your previous file is preserved as a .bak backup
instead of being silently overwritten.
🏆 Leaderboard & Statistics (new / reworked)
Stats are no longer stored in a file. Every tracked value is written to a persisted
Streamer.bot user variable named bjg_* — 44 of them, covering games, wins, losses,
blackjacks, busts, streaks, double downs, splits, surrenders, insurance, and a complete
separate set of duel records.
This means any other Streamer.bot action can read a player's stats directly — for
example bjg_duelsWon or bjg_netProfit — without involving this game at all.
Stats commands now live in their own action (Blackjack Game - Stats), so the
leaderboard can be extended without touching the game.
!allstats leaderboard
- Ranked on combined lifetime net — dealer-game profit plus duel winnings — so
players who only ever duel are included. - 🥇 🥈 🥉 medals for the top three (toggleable), numbers below that.
- Configurable size, 1–10 places.
- Optionally hide the broadcaster and the bot account, matched by user id so a
name change can't put them back on the board. - Its own Use Bot / Send As Action toggles, independent of the general message settings.
Leaderboard resets
- A Reset Now button in the settings window, with a confirmation dialog spelling out
exactly what will be cleared. - Automatic weekly or monthly resets for running seasons.
- Two scopes: leaderboard totals only (keeps games played, blackjacks, streaks and
duel records intact) or all stats. - Enabling automatic resets never wipes anything immediately — the current period is
recorded first and the reset happens at the next boundary.
!stats now also reports your duel record, duel blackjacks, duel busts, forfeits,
and a combined total net matching the leaderboard ranking.
Migration — an existing CBJG-PlayerStats.json is imported into user variables
automatically on first run. The old file is left on disk as a backup and is never read
again. No history is lost.
🎨 Settings Window
- New ⚔️ Duel tab — rules, betting limits, timeouts, raise behaviour, sudden death.
- New ⚔️ Duel Messages tab — every duel chat message, grouped by phase.
- New 🏆 Leaderboard tab — appearance, who appears, message delivery, and resets.
- Explanatory tooltips throughout, including placeholder lists for every message.
🆓 Free Game Mode
Free Game now has its own dedicated messages rather than reusing the ones written for
real currency. Wins, blackjack wins, losses, quitting, and the duel challenge / expiry /
sudden-death lines all have Free Game variants, so nothing refers to points that were
never wagered.
🗑️ Removed
- Maximum Payout and Show Payout Cap Message, along with the payout-capped
message. These predated the current payout model and no longer served a purpose.
Version 14
Update v4
- Reworked entire Codebase to implement finally a GUI.
- Function
AwardPointswhich decided if players win anything even if they spended points got reworked and now handles if the entire game is aFreeGame - Some features have been reworked:
- The Tie logic got a little rework, you can now decide if the Dealer only picks one card only and end it's turn (default) or if the Dealer plays till it's finished
- Blackjack Payout is now a Dropdown Menu with common preset payout ratios.
MaxBet&MinBetare not unlimited anymore.
- Cooldown for commands now directly editable in the GUI including messages.
- Many Messages are now editable directly in the GUI. - WIP!
- Many functions got revised and there shouldn't be no dead ends anymore (sometimes split stopped after first hand for no apparent reason)
- As other scripts of mine, it now supports StreamUP - Currency Core.
- Renamed the Game from
Classic Blackjack GametoChat Blackjack Gamebecause it's not that classic in terms of game mechanics.
WIP & Known issues:
- Not all messages available in the GUI yet - Coming with next updates.
- OBS Overlay still didn't got much love and won't create itself in OBS automatically.
- Due to the nature of the script, Kick and Trovo may have some issues with messages because of rate limitation. Sadly, not much i can do about.
V13
Update v10
- Base preparation of the code for future enhancements and play-styles
- General - Settings renamed to
Chat Appearance- New argument:
showCapMessageif you want to show an additional message why the output might missmatch the bet amount. - New argument:
showAceMsgmainly just "QoL" - if enabled, shows the "Ace was reduced to..." message - New argument:
numberSeparator- if enabled, you can set a separator like.to make long numbers better readable.
- New argument:
- New Group:
Game SettingsdealerStandsOn- now you can decide when the dealer stops drawing to make the dealer either more aggressive or conservatively (was hardcoded to 17 before)blackjackPayout- Bonus multiplier for a natural blackjack which was hardcoded to a rnd 0.5 - 1.5 beforemaxGamesPerHour- To tackle the hardcore addicts in your viewerlist, set a number of rounds a user can play in 1 hour.numDecks- you can go wild and make a really big deck to draw from (mainly a future feature, already because it's a base function and was hardcoded to 1)- WIP -
reshuffleAt- percentage that sets when to reshuffle the deck (mainly a future feature but was added for testing purposes)
- New arguments for
Points SettingsgroupminBet- Minimum bet for individual bets now must be at least1maxBet- Maximum bet amount now can be anything you want. (0 = no max)maxPayout- If you really hate your viewers and don't want to let them get rich. Sets max. payout regardless of betamount.
- Users now can use additional fixed bets like: all, half, quarter, double (double of defaultbet), max (= maxBet) or random (deducted points get announced)
- Probably more which i have forgot.
OBS overlay still got not much love :Sadge~1: i promiss to deep dive into it when i have more freetime.
please let me know if anything isn't working as expected.
Update v11
Originally, i didn't wanted to push an update before i implemented a GUI and did some other things, but i want to know if you guys are satisfied with this and more people testing is more people finding bugs/things 😄
- Stats are now accessible but not fully implemented, somehow i forgot to bind a command to it, but now you can see some of your stats. This feature is WIP.
- Updates some arguments.
- Message handling to show once what commands are available after a game starts got optimized.
- Updated some messages.
- Removed unused lines.
- Added new commands:
- split
- double
With split you can split up your hand in two if you have two identical cards for more luck.
With double you can test your luck and double your hand at once, also work with split hands.
credits to: @sab016
Also i'm playing around with the idea to add a PvP mode where two users can play against each other as an option