diff options
Diffstat (limited to 'internal/casino/craps_variants.go')
| -rw-r--r-- | internal/casino/craps_variants.go | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/internal/casino/craps_variants.go b/internal/casino/craps_variants.go index e64fd0f..a3c078f 100644 --- a/internal/casino/craps_variants.go +++ b/internal/casino/craps_variants.go @@ -1,6 +1,9 @@ package casino -import "fmt" +import ( + "fmt" + "strings" +) // Variants are explicit house editions; regional games with the same names // need not use these rules. Random sources never affect wallet/queue handling. @@ -169,7 +172,7 @@ func (c CrapsConfig) variantRulesText() string { rules := "" switch c.variant() { case "simplified": - rules = "Pass only, one roll of two dice. Net payouts: 2 pays 3:1; 3/4 pay 1:1; 10/11 pay 2:1; 12 pays 5:1. Totals 5/6/7/8/9 lose. Winning bets also return their stake. No point, odds, come, place, side bets or multi-roll wagers. House edge: 1/36 (approximately 2.78%). A loss passes the dice." + rules = "Pass only, one roll of two dice. Payouts: 2 pays 3:1; 3/4 pay 1:1; 10/11 pay 2:1; 12 pays 5:1. Totals 5/6/7/8/9 lose. Winning bets also return their stake. No point, odds, come, place, side bets or multi-roll wagers. The dice roll automatically 3 seconds after the first bet; there is no manual roll. House edge: 1/36 (approximately 2.78%). A loss passes the dice." case "high_point": rules = "Pass only, 1:1. Come-out 2/3 roll again, 11/12 win; 4-10 establish a point. The very next roll wins only if HIGHER than the point; equal/lower loses. Loss passes the dice." case "die_rich": @@ -188,5 +191,23 @@ func (c CrapsConfig) variantRulesText() string { if c.variant() == "new_york" { rules += "\nPass come-out 7/11 wins, 2/3/12 loses; 4/5/6/8/9/10 establish a point. Make it before 7 to win, all 1:1. Don't pass is opposite, except come-out 12 pushes. Line bets only on come-out. Making a point retains the shooter; seven-out rotates." } - return fmt.Sprintf("%s — house rules\n%s\nBet: bet <amount> on pass; table rules is authoritative for this edition.\nFree odds: %d (0 = 3-4-5x on ordinary points, don't 6x laid). No odds on Simplified, High Point or Die Rich.\nEach wager obeys table limits and exact payout units. Wins return stake and remove the bet.\nPass/come contracts cannot be removed; optional bets/odds can: unbet <target> / unbet all.\nSolo roll anytime; multiplayer waits 10 seconds, then dealer rolls after 60 seconds.\nBets stay open until the roll. autoroll repeats every 3 seconds, respecting the betting window.\nstop cancels autoroll; manual stop/sitout waits for live bets. Disconnect forfeits; shutdown refunds.", c.title(), rules, c.Odds) + cadence := "Solo roll anytime; multiplayer waits 10 seconds, then dealer rolls after 60 seconds." + autoroll := "Bets stay open until the roll. autoroll repeats every 3 seconds, respecting the betting window." + betLine := "Bet: bet <amount> on pass; table rules is authoritative for this edition." + stopLine := "stop cancels autoroll; manual stop/sitout waits for live bets." + if c.variant() == "simplified" { + betLine = "Bet: bet <amount> — always on pass; bare bet rebets your last wager." + cadence = "The dice roll automatically 3 seconds after the first bet." + autoroll = "" + stopLine = "stop/sitout waits for live bets." + } + lines := []string{c.title() + " — house rules", rules, betLine, + fmt.Sprintf("Free odds: %d (0 = 3-4-5x on ordinary points, don't 6x laid). No odds on Simplified, High Point or Die Rich.", c.Odds), + "Each wager obeys table limits and exact payout units. Wins return stake and remove the bet.", + "Pass/come contracts cannot be removed; optional bets/odds can: unbet <target> / unbet all.", + cadence, stopLine + " Disconnect forfeits; shutdown refunds."} + if autoroll != "" { + lines = append(lines[:7], append([]string{autoroll}, lines[7:]...)...) + } + return strings.Join(lines, "\n") } |
