Initial pass at Golden Pack.

This commit is contained in:
Greyson Parrelli
2026-07-24 07:47:05 -04:00
parent e74f983470
commit dd395f4bbf
27 changed files with 2770 additions and 150 deletions
+27
View File
@@ -29,6 +29,9 @@ export interface PlayerView {
isBot?: boolean
deckSize: number
petCount: number
avocados?: number // set-aside Avocado tokens (Golden pack)
firstBuyFree?: boolean // Manta Ray: next buy is free (self only)
buysThisRound?: number // Blue-Ringed Octopus counter (self only)
deck?: Card[]
}
@@ -38,6 +41,23 @@ export interface PendingTrade {
options: [Card, Card]
}
// Cockatoo (Golden pack): the buyer must reveal one of their pets.
export interface PendingReveal {
playerId: string
source: string
options?: string[] // eligible pet card ids (buyer only)
}
// Nurse Shark (Golden pack): a mid-battle Trumpet-spend choice.
export interface PendingBattleDecision {
seat: number
kind: string
petName: string
min: number
max: number
trumpets: number
}
export interface BattleEvent {
type:
| 'prep'
@@ -53,6 +73,8 @@ export interface BattleEvent {
| 'heal'
| 'setaside'
| 'release'
| 'trumpet' // a side gains (+) or spends/loses (-) Trumpets (Golden pack)
| 'prevent' // a Cone Snail shaves damage off a hit (Golden pack)
seat?: number
target?: number
card?: Card
@@ -117,6 +139,8 @@ export interface GameView {
deckCounts: number[]
players: PlayerView[]
pending?: PendingTrade
pendingReveal?: PendingReveal
pendingBattle?: PendingBattleDecision
battle?: BattleResult
winnerSeat: number
log?: LogEntry[]
@@ -129,9 +153,12 @@ export type ClientMessage =
| { type: 'removePlayer'; target: string }
| { type: 'start' }
| { type: 'buy'; row: number }
| { type: 'buyAvocado'; row: number }
| { type: 'sell'; cards: string[] }
| { type: 'trade'; cards: string[] }
| { type: 'tradeChoose'; pick: number }
| { type: 'revealChoose'; card: string }
| { type: 'battleChoose'; value: number }
| { type: 'pass' }
| { type: 'arrange'; order: string[] }
| { type: 'ready' }