RaidKit · In-game addon
BrokenDice
A host-only dice pit for your raid: five games, a trash-talk announcer, permanent boards, and a debt ledger that nets itself.
One person: the host · In the host's WoW client, watching party and raid chat · Nothing. They type 1 to enter, /roll to play, and STAY in Twenty-One, all in normal party or raid chatVersion 0.10.0 loads, opens games and passes its test suite on the Anniversary client, but has not yet run a full live group night: whisper delivery, STAY capture from other clients, raid-icon rendering and chat throttling under a burst are still unconfirmed.
Overview
Gold gambling on raid night usually means someone shouting a roll range in chat, half the group forgetting who owes what, and an argument the first time two people tie. BrokenDice (the addon calls itself "The Pit") gives that job to one person. The host installs it; everyone else plays with nothing but native chat. Players type 1 in party or raid chat to enter, use /roll to play, and type STAY to hold a hand in Twenty-One.
The addon watches the real system roll messages, so a roll pasted into chat never counts. It enforces one set of house rules across every game: every tie is settled by a death roll, a player who enters but never rolls takes a recorded loss but never pays, and fewer than two entrants cancels the game. When a round ends it announces the winner, the payer, and the exact gold owed, then writes the result to permanent per-character stats and to a debt ledger that survives between sessions and nets cross-debts automatically.
Five games ship: High/Low, Zolana's Revenge (High/Low inverted), Fusion Roulette (a progressive jackpot), Death Roll (with an automatic bracket for three or more players), and Twenty-One. Around them sits an announcer with categorized phrase pools, countdown pings, roll commentary, a one-shot prophecy, and personal lines keyed to specific characters on the author's roster. Those personal lines are guild-specific; other guilds will want to rewrite Phrases.lua before using it.
BrokenDice has no library dependencies and no runtime connection to any other addon. Everything it records lives in its own saved variables table, BrokenDiceDB, in the host's WTF folder. The .toc lists the author as Cheechmarín, the host's own character.
What it does, in detail
How a round works
The host opens a game from the Host tab or a slash command such as /bd hl 100. The addon detects whether you are in a raid or a party, pins all announcements for this game to that channel, posts the game's rules line and a randomly picked opener, and starts the join window (30, 60, or 90 seconds; 60 by default). The join window you last picked on the Host tab is saved, so a game opened by slash command uses that same length. Countdown pings go out at 30, 10, and 5 seconds remaining (a 30-second window only pings at 10 and 5). With a window of 45 seconds or longer, at 15 seconds before lock there is a 50 percent chance the pit calls out one random group member who has not entered yet. Players type 1 in party or raid chat to enter; the Host tab shows the live roster.
When the window closes, or when you click Lock Now, entries lock. Fewer than two entrants cancels the game. Otherwise the pit announces the lock, fires any matchup lines for pairs who both entered, may issue a prophecy naming the entrant with the best win rate (only if someone has at least three decided games), and starts the mode's roll phase. Rolls are read from the client's own system roll message, so only genuine /roll results count; a non-entrant's roll is ignored silently, and an entrant's invalid roll (wrong range, rolling twice, rolling before lock) gets a whisper explaining why.
At payout the pit announces the winner, the payer, and the amount, plays win and loss lines, judges the prophecy once, records wins and losses to per-character stats, adds the debt to the ledger, and bumps tonight's session tally. Nothing from a canceled game is recorded.
The five games
High/Low (/bd hl <stake>): everyone rolls 1 to the stake once, within 60 seconds. The highest roll wins and the lowest roll pays the difference between the two rolls; everyone in the middle is safe and simply gets a game recorded. Zolana's Revenge (/bd revenge <stake>) is the same game inverted: the lowest roll wins and the highest pays the difference. The addon's own tooltip describes it as named for the guild's legendarily unlucky member, and the shipped announcer carries special entry and win lines keyed to that name; like the other personal lines, that is guild-specific content.
Fusion Roulette (/bd roulette <ante> [trigger]): every entrant antes each round and rolls 1-100. Rolling the trigger or higher (default 90, valid 2-100) takes the pot. If nobody hits, the pot carries and everyone antes again; if several players hit in the same round, they death-roll for the whole pot. In round one there is a 60 percent chance of a line about the absent legend the game is named for, and from round two on, once the pot reaches three times one round's total ante, there is a 70 percent chance of a pot alert. The pot equals ante times entrants times rounds, and each loser owes the winner ante times rounds. A player who never rolled in any round owes nothing, so the announced "Each player owes" line is the number to trust, not the displayed pot.
Death Roll (/bd dr <wager>): two players alternate /roll 1-(previous roll), starting at 1 to the wager; whoever rolls 1 pays the full wager. With three or more entrants the addon shuffles them into a single-elimination bracket with byes, pays each match out individually, and announces a champion. If the host forfeits a stalled player in a Death Roll match, that player is treated as having rolled the 1 and pays the full wager. Twenty-One (/bd 21 <wager>): each player rolls 1-11 to hit and types STAY to hold. After every hit that does not end the hand, the pit whispers the player their running total ("You're at N. Roll 1-11 to hit, type STAY to hold."); typing STAY before rolling at all is refused by whisper. Closest to 21 without busting wins the wager from every other player, busted players included. Exactly 21 auto-stays; 25 seconds of inactivity auto-stays a partial hand (35 seconds for the first roll); a player with no roll at all is treated as absent. If everyone busts, the round is a wash.
House rules the addon enforces
Every tie goes to a death roll. On the winning side, tied players roll down from 1-100; rolling a 1 eliminates you, the range resets, and the last player standing wins. On the paying side, the first tied player to roll a 1 pays and the rest are safe. The amount owed always uses the original roll spread, so the tiebreak decides who, never how much. If everyone rolls the same number, the round is a wash with nothing owed.
A player who enters and never rolls is announced as absent, takes a loss on their record, and never pays. If everyone but one player goes quiet, that player gets a recorded win for zero gold. The host's controls each work in one phase: Lock Now (or /bd lock) only while the join window is open; Resolve Now (or /bd resolve) only during a roll phase and never during a death roll; /bd forfeit <name> only during a death roll and only for a player still in it; Cancel (or /bd cancel) at any point. Forfeiting is not always harmless: in a winner-side tie it just knocks the player out, but in the Death Roll game or a paying-side tie the forfeited player becomes the payer, for the full wager or the tie's original spread. During a death roll the pit whispers the current roller every 30 seconds and, every second nudge, posts a public reminder that the host can forfeit them.
Stakes must be whole numbers between 2 and 1,000,000 (Fusion Roulette and Twenty-One accept 1). The roulette trigger must be between 2 and 100. You must be in a party or raid to open a game unless test mode is on.
The announcer
Everything the pit says lives in Phrases.lua as categorized pools: openers, countdowns, lock, entries, roll reactions, payouts, ties, absent players, washes, cancel, nags, and the whispers sent for invalid rolls. For pools with three or more lines the picker never repeats either of the last two; pools with one or two lines (several shipped pools are that short) are picked at random and can repeat back to back. Openers are weighted: a generic line half the time, otherwise a line about a random group member, a line about the guild's unlucky member, or a line about an absent legend. Tokens such as {player}, {amount}, {pot}, and {creditor} are substituted; raid-target icons written as {skull}, {star}, {triangle}, {moon}, {diamond}, {circle}, {square}, and {cross} pass through so the client renders them as icons.
When someone joins, the pit fires at most one reaction, chosen in priority order: a mode-specific special line, that character's personal entry line, a contextual line (first-timer, three-game win or loss streak, reigning winner, last payer), or a generic line. The generic line is throttled: it fires for the first joiner and then every Nth joiner after that (N is the entry throttle, default 3, so joiners 1, 4, and 7), and because of how the check is written a throttle of 1 turns the generic line off entirely. Roll commentary only applies to roll ranges of 10 or more: maximum rolls and 1s always get a line, and rolls within 5 percent of the top or bottom of the range react 40 percent of the time. The dead-center reaction only exists for ranges of 50 or more. Personal lines are keyed to exact in-game character names on the author's roster; they are guild-specific content, and a key that does not match a real name never fires and never errors.
Stats, boards, and the debt ledger
Each character accumulates wins, losses, games played, gold won and lost, biggest single win, current and best win streak, current loss streak, a per-mode breakdown, and first-seen and last-seen timestamps. Stats are stored forever in the host's saved variables. The Boards tab shows an overall board (net gold, with per-mode win counts) and one board per mode, ten rows per page; each row shows the rank, the name with any linked alts in gray after it, the W-L record, and net gold in the accent color when positive or red when negative. Below the rows sit three superlatives: biggest single win, longest win streak, and most generous (most gold lost). Pit Royalty (top three winners) and the Hall of Generosity (top three losers) can be posted to the group from the Boards tab or with /bd top3 win and /bd top3 lose.
The debt ledger records who owes whom after every payout and persists between sessions. New debts net against reverse debts first: if A owes B 100 and B later loses 60 to A, the ledger shows A owes B 40; if B loses 60 more, the entry flips to B owes A 20. Same-direction debts merge into one row. Each row shows how many days the debt has been outstanding. Mark Paid clears a row from the Ledger tab (or /bd paid <debtor> <creditor>), /bd debts prints the whole ledger locally with each debt's age, and Nag All Debtors (or /bd nag) whispers every debtor one of three reminder lines naming the creditor and the amount; only one of the three also states how many days the debt has been outstanding.
Alt linking (/bd link <alt> <main>, or the Settings tab) merges an alt's rows into a main for display only. Raw stats stay per character on disk, so unlinking is lossless. Chains resolve to the final main and loops are rejected. Tonight's session (rounds, gold moved, biggest pot, top earner, most generous) survives /reload and resets only when you click Reset Session or type /bd session reset; it can be posted to the group as The Pit Report.
Test mode and chat safety
Test mode (/bd test on, or the switch on the Settings tab) sends every announcement and whisper to your own chat frame instead of the group, so you can run a whole game against yourself. It is saved between sessions, so remember to turn it off. Whispers addressed to yourself always print locally, even in live mode. A game opened in test mode has its channel pinned to the local echo, so it stays local even if you toggle test mode off while it is running.
Rolls are matched against a pattern built at runtime from the client's own RANDOM_ROLL_RESULT string rather than a hardcoded English line, so roll detection works on any client locale. All outgoing chat runs through one paced queue with 0.35 seconds between messages, so a burst of openers, reactions, and payouts never trips the server throttle or arrives out of order. Every message is scrubbed of the | character (WoW's chat escape, which once wedged the entire queue in 0.9.0) and every send is wrapped so one bad line cannot stop the rest.
What is not built
Participants who also install the addon get nothing extra today: no window, no roster view. An addon-message sync layer that would give them a live client-side view is the biggest planned feature and has not been started. A "Degenerate of the Night" single-callout announcement was designed but never wired. Active game state is not saved: if the host reloads or disconnects mid-round, that round is lost, though stats, ledger, and session are safe.
Ideas that have been floated but not committed to include whisper-to-join for shy pugs, per-player wagers, date-range leaderboard filters, a minimap button, and an in-game phrase editor. For now, custom lines mean editing Phrases.lua.
Functions
Features
- Host-only, chat-native play
- Only the host installs the addon. Players type 1 in party or raid chat to enter, /roll to play, and STAY to hold in Twenty-One. Nothing to install for participants.
- High/Low
- /bd hl <stake>. Everyone rolls 1 to the stake once. Highest wins, lowest pays the difference between the two rolls; middle rolls are safe.
- Zolana's Revenge
- /bd revenge <stake>. High/Low inverted: lowest roll wins, highest pays the difference. The addon's tooltip calls it named for the guild's legendarily unlucky member; the shipped announcer has special entry and win lines keyed to that name, which is guild-specific content.
- Fusion Roulette
- /bd roulette <ante> [trigger]. Progressive jackpot. Everyone antes each round and rolls 1-100; the trigger or higher (default 90) takes the pot, no hit carries the pot to another round, and multiple hits death-roll for the whole pot. A legend line may open round one and a pot alert may fire once the pot reaches three rounds' worth of ante.
- Death Roll with automatic bracket
- /bd dr <wager>. Two players alternate /roll 1-(previous roll); whoever rolls 1 pays the wager, and so does a player the host forfeits. Three or more entrants get a shuffled single-elimination bracket with byes, per-match payouts, and a champion announcement.
- Twenty-One
- /bd 21 <wager>. Roll 1-11 to hit, type STAY to hold. The pit whispers each player their running total after every hit and refuses a STAY with no rolls. Closest to 21 without busting wins the wager from every other player, busted players included. Exact 21 auto-stays; 25 seconds of inactivity auto-stays a partial hand.
- One set of house rules
- Every tie is settled by death roll, payment always uses the original roll spread, everyone rolling the same number is a wash, entrants who never roll take a loss but never pay (a player forfeited by the host in a Death Roll match or a paying-side tie does pay), and fewer than two entrants cancels the game.
- Real rolls only
- Rolls are matched against a pattern built from the client's own RANDOM_ROLL_RESULT system message, so pasted fakes in chat never register and detection works on any client locale. Invalid rolls from entrants get a whisper explaining why; rolls from non-entrants are ignored silently.
- Join window with countdown
- 30, 60, or 90 second join windows chosen on the Host tab and remembered for slash-opened games, with pings at 30, 10, and 5 seconds remaining and, on windows of 45 seconds or more, a 50 percent chance of calling out someone who has not entered at 15 seconds before lock. Lock early during the join window, force-resolve during a roll phase, forfeit a stalled death-roll turn, or cancel at any time.
- Announcer with pools, matchups, and prophecy
- Categorized phrase pools with a no-repeat picker for pools of three or more lines, weighted openers, roll commentary, matchup lines for pairs who both enter and head-to-head lines when one beats the other, group lines when every member of a set enters, and a one-shot prophecy issued at lock and judged at payout. Raid icons like {skull} and {star} render in chat.
- Permanent stats and leaderboards
- Per-character wins, losses, games, gold won and lost, biggest win, streaks, per-mode breakdowns, and first- and last-seen timestamps kept forever. Overall and per-mode boards, ten rows per page with W-L records, linked alts in gray, and net gold colored by sign, plus biggest win, longest streak, and most generous superlatives.
- Top-3 announcements
- Post Pit Royalty (top three winners) or the Hall of Generosity (top three losers) to the group from the Boards tab or /bd top3.
- Debt ledger with automatic netting
- Every payout writes a who-owes-whom entry that persists between sessions. Reverse debts net (shrink, cancel, or flip), same-direction debts merge, each row shows its age in days. Mark Paid per row, print locally, or nag every debtor by whisper.
- Session tally and The Pit Report
- Tonight's rounds, gold moved, biggest pot, top earner, and most generous, kept across /reload until you reset it. Post it to the group as The Pit Report.
- Alt linking
- /bd link <alt> <main> merges an alt into one leaderboard identity at display time. Raw stats stay per character, so unlinking loses nothing. Chains resolve and loops are rejected.
- Four-tab window
- /bd opens a movable, Esc-closable window with Host, Boards, Ledger, and Settings tabs. Mode buttons carry their rules as tooltips and nearly every control has a hover tooltip (the Boards paging buttons and the Settings alt-name boxes do not). The Host tab's live status card shows the current death-roll roller and range, the roulette pot, round, and trigger, and up to 14 roster rows with each player's state (entered, rolled N, waiting, Twenty-One totals, STAYED, BUSTED, no-show). Names are class-colored when the player is in your group.
- Test mode
- /bd test on echoes every announcement and whisper to your own chat frame so you can rehearse a full game solo before raid night. A game opened in test mode stays local until it ends.
- Paced, sanitized chat output
- One outgoing queue with 0.35 seconds between messages, announcements pinned to the channel detected at game open, pipe characters scrubbed, and every send wrapped so a bad line never stalls the queue.
- No dependencies
- No Ace3, no LibStub, no external libraries. The addon folder is the whole install.
Slash commands
| Command | What it does |
|---|---|
| /bd | Toggle the window (Host, Boards, Ledger, Settings). /brokendice does the same. |
| /bd help | Print the command list in your chat frame. The list leaves out /bd debts and /bd session reset; both still work. |
| /bd hl 100 | Open a High/Low game with a 100g stake (rolls are 1-100). /bd highlow 100 is the same. The join window is whatever you last picked on the Host tab (60s until you change it). |
| /bd revenge 100 | Open a Zolana's Revenge game with a 100g stake. /bd zr 100 is the same. |
| /bd roulette 20 90 | Open Fusion Roulette with a 20g ante per round and a trigger of 90. The trigger is optional (default 90, valid 2-100). /bd fr 20 is the same. |
| /bd dr 200 | Open a Death Roll for a 200g wager per match; three or more entrants get a bracket. /bd deathroll 200 is the same. |
| /bd 21 50 | Open a Twenty-One game for a 50g wager. |
| /bd lock | Close the join window now and start the roll phase. Only works while the join window is open. |
| /bd resolve | End the roll phase now. Entrants who never rolled take a loss but never pay. Only works during a roll phase and is refused during a death roll; use forfeit instead. |
| /bd cancel | Abort the current game at any point. Nothing is recorded. |
| /bd forfeit Name | Forfeit a stalled death-roll turn for that player; only works during a death roll and only for a player still in it. In a winner-side tie this eliminates them. In the Death Roll game or a paying-side tie it makes them the payer of the full wager or the tie's original spread. |
| /bd top3 win | Post Pit Royalty, the top three net winners, to the group. |
| /bd top3 lose | Post the Hall of Generosity, the top three net losers, to the group. /bd top3 losers also works. |
| /bd summary | Post tonight's Pit Report (rounds, gold moved, biggest pot, top earner, most generous) to the group. /bd session does the same. |
| /bd session reset | Start a fresh session tally. Stats and the debt ledger are untouched. Not listed by /bd help, but it works. |
| /bd debts | Print the full debt ledger locally, with each debt's age in days. Not listed by /bd help, but it works. |
| /bd nag | Whisper every debtor a reminder naming the creditor and the amount. One of the three reminder lines also includes how many days the debt has been outstanding; the other two do not. |
| /bd paid Debtor Creditor | Clear the debt from Debtor to Creditor from the ledger. |
| /bd link Altname Mainname | Count the alt toward the main on the leaderboard. Display only; raw stats stay per character. |
| /bd unlink Altname | Undo an alt link. No data is lost. |
| /bd test on | Turn on test mode: announcements and whispers print to your chat frame instead of going to the group. /bd test off turns it off; /bd test with no argument flips it. A game already open in test mode stays local until it ends. |
Settings
- Join window (Host tab: 30s / 60s / 90s; default 60)
- How long players have to type 1 in party or raid chat to enter. The choice is saved, so games opened by slash command use the last window you picked, even after logging out. Pings fire at 30, 10, and 5 seconds remaining, so a 30-second window only pings twice. With 60s or 90s, at 15 seconds before lock there is a 50 percent chance the pit calls out one random group member who has not entered. Fewer than two entrants cancels the game.
- Stake (Host tab edit box; default 100)
- Gold at risk. High/Low and Revenge roll 1 to the stake; Roulette antes it every round; Death Roll and Twenty-One wager it. Whole numbers from 2 to 1,000,000; Roulette and Twenty-One accept 1.
- Trigger (Host tab edit box, Roulette only; default 90)
- Rolling this number or higher on a 1-100 roll takes the Roulette pot. Valid range 2-100.
- Flavor line chance % (Settings tab slider, 0-100 in steps of 5; default 40)
- How often a character's personal line fires on entry, win, or loss, and how often a contextual entry line (first-timer, streak, reigning winner, last payer) is considered. Mode specials always fire regardless.
- Prophecy chance % (Settings tab slider, 0-100 in steps of 5; default 50)
- How often the pit issues a prophecy when entries lock. It names the entrant with the best win rate among those with three or more decided games and judges itself once at payout.
- Generic entry line every Nth join (Settings tab slider, 1-5; default 3)
- Throttles the generic reaction for joiners who get no special, personal, or contextual line. It fires for the first such joiner and then every Nth after that (at 3: joiners 1, 4, 7), which keeps a busy join window from spamming. Setting it to 1 does not fire on every joiner; because of how the check is written, 1 turns the generic line off entirely.
- Test mode (Settings tab switch, or /bd test on and /bd test off; default off)
- On: every announcement and whisper prints to your own chat frame so you can run a game solo, and a game opened this way stays local until it ends. Off: live, announcements go to the raid or party channel detected when the game opens. Saved between sessions.
- Merge alts on the leaderboard (Settings tab: alt "counts as" main, Link and Unlink alt)
- Merges the alt's rows into the main on the boards. Display only; raw stats stay per character, so Unlink is lossless. Active links are listed under the fields.
- Advanced defaults in saved variables (no UI): matchupChance 1.00, reactionChance 0.40, rollTime 60, turnTime21 25, turnTimeDR 30, rouletteTrigger 90, chatGap 0.35
- Matchup lines always fire; roll commentary fires 40 percent of the time for rolls within 5 percent of the top or bottom of a range of 10 or more, and for dead-center rolls in ranges of 50 or more (maximum rolls and 1s always react); 60-second roll phase in High/Low, Revenge, and Roulette; 25 seconds of inactivity auto-stays a Twenty-One hand; 30 seconds before a death-roll turn nudge; 0.35 seconds between queued chat messages. Change them by editing BrokenDiceDB in your saved variables or the defaults in Core.lua.
- Custom phrases (edit Phrases.lua)
- Add lines to any pool, add per-character entries keyed to exact in-game names (accents included), and add matchups. Tokens such as {player}, {amount}, {pot}, and {creditor} are substituted; raid icons {skull} {star} {triangle} {moon} {diamond} {circle} {square} {cross} pass through and render. Never put a | character in a line, and do not use emoji, which render as boxes in WoW.
How-to guides
01First raid night with BrokenDice
You are the host. Everyone else needs nothing installed. This walks one High/Low round from open to payout with real players.
- 1Before the raid, type /bd test off so announcements go to the group and not just to you. Test mode is saved between sessions, so check this every night.
- 2Get into the raid (or party). Announcements are pinned to whichever channel the addon detects when the game opens, so open games after the group is formed.
- 3Tell the raid the rules once: type 1 in raid chat to enter, wait for the roll call, then /roll 1-<stake> exactly once. Ties are settled by death roll and anyone who enters but never rolls takes a loss but pays nothing.
- 4Type /bd hl 100, or open /bd, click High/Low on the Host tab, set Stake to 100, pick a 60s join window, and click OPEN GAME. The pit posts the rules line and an opener, then pings at 30, 10, and 5 seconds; at 15 seconds left it may call out someone who has not entered. The join window you pick here is remembered for later slash-opened games.
- 5Watch the roster on the Host tab as people type 1. If everyone who wants in has joined, click Lock Now or type /bd lock. Fewer than two entrants cancels automatically.
- 6Players /roll 1-100. Anyone who rolls the wrong range or rolls twice gets a whisper telling them why. If someone goes quiet, wait out the 60-second roll timer or click Resolve Now; they take a recorded loss and pay nothing.
- 7If the top or bottom rolls tie, the pit runs a death roll between the tied players and whispers each one when it is their turn. If a turn stalls, the pit nudges them every 30 seconds; type /bd forfeit Name to remove a player who has walked away. In a tie for the win that only eliminates them; in a tie for who pays, the forfeited player becomes the payer.
- 8The pit announces the winner, the payer, and the amount (the difference between the highest and lowest rolls). That debt is now on the Ledger tab. Open another game whenever you like; one game runs at a time.
- 9At the end of the night type /bd summary to post The Pit Report, then /bd nag to whisper every debtor a reminder of what they owe and to whom.
02Rehearse solo with test mode
Run a whole game against yourself before raid night so the flow, timing, and phrase lines hold no surprises.
- 1Type /bd test on, or open /bd, go to Settings, and turn on the Test mode switch. You do not need to be in a group.
- 2Type /bd hl 100. The opener, countdown pings, and every later announcement print to your chat frame with a [BD] prefix instead of going to chat. A game opened in test mode stays local even if you turn test mode off before it ends.
- 3Type 1 in party or raid chat if you are grouped, or watch the join window expire; with fewer than two entrants the pit cancels, which is itself worth seeing once.
- 4To see a full roll phase, group with one friend, keep test mode on, and both type 1, then /roll 1-100 when the pit calls for rolls. Your announcements still stay local; whispers to yourself also print locally.
- 5Try /bd cancel mid-game and confirm nothing lands on the Boards or Ledger tabs.
- 6Type /bd test off when you are done. If the pit seems silent on raid night, this switch is the first thing to check.
03Host each of the five games
What to type, what players do, and who pays, for each mode.
- 1High/Low: /bd hl 100. Players /roll 1-100 once within 60 seconds. Highest wins, lowest pays the difference, middle rolls are safe.
- 2Zolana's Revenge: /bd revenge 100. Same as High/Low but the lowest roll wins and the highest pays the difference.
- 3Fusion Roulette: /bd roulette 20 90 (the trigger is optional; 90 is the default). Every entrant antes 20g per round and rolls 1-100. A 90 or higher takes the pot; no hit means the pot carries and everyone antes again; several hits in one round death-roll for the pot. Expect a legend line in round one most of the time and a pot alert once the pot reaches three rounds' worth of ante. Each loser owes the winner ante times rounds, and a player who never rolled in any round owes nothing.
- 4Death Roll: /bd dr 200. With two entrants the pit runs one match: the first player rolls 1-200, the next rolls 1-(that result), and so on until someone rolls 1 and pays 200g. With three or more entrants it shuffles a bracket with byes, pays each match individually, and announces a champion. Use /bd forfeit Name if a turn stalls; the forfeited player is treated as having rolled the 1 and pays the full 200g. /bd resolve is refused during a death roll.
- 5Twenty-One: /bd 21 50. Each player rolls 1-11 to hit and types STAY (any casing) to hold. After each hit the pit whispers the player their total; STAY before any roll is refused by whisper. Exactly 21 auto-stays, over 21 busts, and 25 seconds of silence auto-stays a partial hand (35 seconds for the first roll). Closest to 21 wins 50g from every other player who stayed or busted. Everyone busting is a wash.
- 6In every mode, hover a mode button on the Host tab to read its rules, and remember that the stake must be a whole number between 2 and 1,000,000 (1 is allowed for Roulette and Twenty-One).
04Settle up with the debt ledger
The debt ledger is the addon's record of who owes whom. It persists between sessions and nets itself.
- 1Open /bd and click Ledger, or type /bd debts. Each row reads debtor owes creditor amount, with the debt's age in days. The tab shows the first seven rows; /bd debts prints all of them.
- 2Debts net automatically. If A owes B 100 and B later loses 60 to A, the row becomes A owes B 40. If B loses 60 more, it flips to B owes A 20. Two debts in the same direction merge into one row.
- 3When someone hands over the gold, click Mark Paid on that row, or type /bd paid Debtor Creditor. The row disappears.
- 4Click Nag All Debtors or type /bd nag to whisper every debtor a reminder naming the creditor and the amount. The pit picks one of three reminder lines per debtor, and only one of the three mentions how many days the debt has been outstanding.
- 5At the end of the night click Announce Session Report or type /bd summary to post The Pit Report: rounds, gold moved, biggest pot, top earner, and most generous. Click Reset Session or type /bd session reset to start a fresh tally next time; stats and the ledger are untouched.
05Leaderboards, top-3 posts, and alts
Stats are permanent and per character. Boards and announcements read from them; alt links only change how they display.
- 1Open /bd and click Boards. Overall shows net gold across every mode with per-mode win counts; HL, ZR, FR, DR, and 21 filter to one game. Each row shows rank, name, linked alts in gray as (+alt, alt), the W-L record, and net gold in the accent color when positive or red when negative. Click < Prev and Next > to page ten rows at a time.
- 2Below the rows, the superlatives show biggest single win, longest win streak, and most generous (most gold lost).
- 3Click Announce Top 3 Winners or Announce Top 3 Losers, or type /bd top3 win or /bd top3 lose, to post Pit Royalty or the Hall of Generosity to the group with star and moon icons.
- 4When a regular switches characters, go to Settings, type the alt name in the first box and the main name after "counts as", and click Link, or type /bd link Altname Mainname. The alt's rows merge into the main on the boards. Linking to a name that is itself linked resolves to the final main; a link that would form a loop is refused.
- 5To undo it, click Unlink alt with the alt name in the box, or type /bd unlink Altname. Raw stats were never merged on disk, so nothing is lost.
- 6Note that a merged identity's longest streak is the longest streak of any one of its characters, not a combined streak.
06Rewrite the announcer for your own guild
The shipped personal lines are written for the author's roster. Everything the pit says lives in one file, so replacing them is an edit, not a rebuild.
- 1Open Interface/AddOns/BrokenDice/Phrases.lua in a text editor. The header lists every token you can use: {player} {winner} {loser} {amount} {pot} {stake} {count} {roll} {max} {total} {streak} {random_player} {trigger} {seconds} {rounds} {gold} {days} {creditor} {player1} {player2}.
- 2Add or replace lines in any pool under P.pools (openers, countdowns, lock, entry, payout, tie, afk, wash, cancel, nag, and the w_ whisper pools). Any list length works. Give a pool at least three lines if you want variety: the picker only avoids repeating the last two lines in pools of three or more, and a one- or two-line pool can play the same line twice in a row.
- 3Add a P.players entry for a guildmate with entry, win, loss, and afk lists. The key must be the character's exact in-game name, accents included. A wrong key never fires and never errors, so check spelling against the roster, not against Discord names.
- 4Add a matchup for a pair who play together often, with both lines (fire when both enter) and versus lines (fire when one beats the other head-to-head). A groupset covers three or more names but only has an all list, which fires when every member has entered; there is no head-to-head line for groups.
- 5Raid icons {skull} {star} {triangle} {moon} {diamond} {circle} {square} {cross} pass through and render in chat. Never put a | character in a line; it is WoW's chat escape and the addon scrubs it to / as a safety net. Emoji render as boxes in WoW, so leave them out.
- 6Type /reload, turn on /bd test on, open a game, and read your lines back in your chat frame. Use the Flavor line chance and Prophecy chance sliders on the Settings tab to tune how often they fire, then /bd test off.
Good to know
- Host-only by design: participants get no window and no addon messages, only chat. A sync layer for players who also install it is planned, not built.
- Active game state is not saved. If the host reloads or disconnects mid-round, that round is lost; stats, the debt ledger, and the session tally are safe.
- Test mode is saved between sessions. If the pit is silent on raid night, type /bd test off. A game that was opened while test mode was on stays local until it ends, even after you turn test mode off.
- Only real /roll system messages count. Typed or pasted roll text is ignored, and rolls from players who never typed 1 are ignored silently with no whisper.
- Announcements are pinned to the channel detected when the game opened. Converting a party to a raid mid-game does not reroute them.
- Forfeiting is not always just an elimination. In the Death Roll game or a paying-side tie, /bd forfeit Name makes that player the payer of the full wager or the tie's original spread.
- The host controls are phase-specific: /bd lock only during the join window, /bd resolve only during a roll phase and never during a death roll, /bd forfeit only during a death roll. Only /bd cancel works at any point.
- Setting the entry-throttle slider to 1 silences the generic entry line completely rather than firing it for every joiner. Leave it at 2 or higher if you want generic lines.
- Personal announcer lines are keyed to exact in-game names on the author's roster and are guild-specific. Rewrite Phrases.lua before using the addon with another guild; a mismatched key never fires and never errors.
- Never put a | character in a custom phrase line. It is WoW's chat escape; in 0.9.0 it wedged the whole outgoing queue. Since 0.9.1 it is scrubbed automatically, but keep it out anyway. Emoji render as boxes.
- In Fusion Roulette a player who never rolled in any round owes nothing, so the announced pot can exceed the gold that actually moves. The "Each player owes" line is the authoritative math.
- A merged alt's longest streak is the best streak of any single character, not a true combined streak.
- The Ledger tab shows only the first seven debts. Type /bd debts to see the full list. Two of the three nag lines do not mention the debt's age.
- /bd help does not list /bd debts or /bd session reset, but both commands work.
- Stake must be 2 to 1,000,000 (Roulette and Twenty-One allow 1); the roulette trigger must be 2 to 100. Fewer than two entrants cancels the game.
- The pit whispers other players for invalid rolls, turn prompts, running Twenty-One totals, and nags. Whisper delivery to other real clients, STAY capture from other clients, raid-icon rendering in addon-sent lines, chat-throttle behavior under a burst of 20 or more messages, and cross-realm pug names in a real raid have not yet been confirmed on a live group night.
- Interface 20505 will need bumping as the Anniversary client patches; tick Load out of date AddOns in the meantime.
- The repository's top-level README and MIGRATION.md still say v0.9.1; the .toc, Core.lua, and CHANGELOG say 0.10.0.
Visuals


Requirements & credits
Requirements
- World of Warcraft TBC Classic Anniversary client (2.5.5, Interface 20505)
- Installed only on the host's client; participants need nothing
- A party or raid to open a live game (test mode works solo)
- No other addons or libraries
- For development only: Lua 5.1 and luac 5.1 to run the headless test suite
Credits
- Blizzard Entertainment — World of Warcraft is a trademark of Blizzard Entertainment. RaidKit is not affiliated with Blizzard.
Download & install
Install BrokenDice v0.10.0
Download not published yetFolder: Interface/AddOns/BrokenDice · Interface 20505
- 1There is no packaged download for the current version, 0.10.0. A BrokenDice-v0.9.1.zip was delivered earlier (the 0.9.0 zip is obsolete because of the pipe crash; discard any copy). The addon is the BrokenDice folder (BrokenDice.toc plus seven Lua files) from the author's source tree, and the project notes say a release is made by zipping that folder only. No download page or addon-site listing exists.
- 2Once you have the folder, copy it into Interface/AddOns/ of your TBC Classic Anniversary client. The folder must be named exactly BrokenDice, and the .toc must sit directly inside it.
- 3Restart the client, or type /reload if it was already running.
- 4On login you should see "BrokenDice: v0.10.0 loaded. Type /bd to open the pit." in your chat frame.
- 5Type /bd to open the window, or /bd help for the command list. Type /bd test on and /bd hl 100 for a two-minute solo check, then /bd test off.
- 6If a later client patch flags the addon as out of date, tick Load out of date AddOns on the addon list, or edit the ## Interface line in BrokenDice.toc.
- 7Nobody else in the raid needs to install anything.
Changelog
- 2026-09-09
- UIKit.lua copy re-synced to kit 1.4.0 (adds UIKit.EditBox, built for GrudgeList). No BrokenDice behavior change; test suites green.
- v0.10.02026-09-02
- Window rebuilt on the shared UIKit toolkit with a title block, version tag, close button, Esc-to-close, and Host / Boards / Ledger / Settings as a tab bar.
- Host tab: modes and join window as button groups, OPEN GAME as the primary action, Cancel in the danger style, live status and roster on a card, rules tooltips on every mode button.
- Boards, Ledger, and Settings re-skinned; net gold in accent or red by sign; the three Settings sliders became kit sliders and test mode became a switch.
- Names are class-colored when the player is in your group. Hover tooltips added across the window; the changelog says every control, but the Boards paging buttons and the Settings alt-name boxes have none.
- Test harness: shared widget mock replaces the inline one; the 9-step UI smoke suite drives the new window.
- v0.9.22026-09-01
- Roster refresh for the phrase table: new per-character entries, a new matchup, and spelling aliases, with keys verified against real in-game names recorded from actual raids rather than Discord handles.
- Departed members kept as inert entries; nothing removed. Content only, no logic changes.