Skip to content

Tournament data

This is the reference for everything a script can point at. The { } Script explorer in any script editor shows the same list with each value’s current value alongside, which is usually quicker than reading this page — but this page has the whole picture in one place.

Values are read-only. A script can look at the tournament; it can’t change it.

ValueDescription
isTimerRunningIs the timer running?
isTimerPausedIs the timer paused?
levelIndexThe current level’s position in the list — breaks count, so a break between level 4 and level 5 makes the latter index 5
secondsLeftInLevelSeconds remaining in the current level
secondsUntilNextBreakSeconds until the next break, or 0 if none is scheduled
currentLevelThe current level
nextLevelThe next level, or nothing if this is the last
levelsEvery level in the structure
blindLevelNumberThe current blind level, ignoring breaks. 0 before the first one; during a break, the level that just finished
blindLevelCountHow many blind levels there are, not counting breaks
isBlindsLevelIs the current level a blind level?
isBreakLevelIs the current level a break, after the first blind level?
isPregameLevelIs the current level before the first blind level?
dtThe current time, in milliseconds
ValueDescription
isPregameThe tournament hasn’t started
isInGameIt has started but hasn’t finished
isPostgameIt has finished

isPregame is about the tournament; isPregameLevel is about the level you’re looking at. They differ when you scroll the timer back to an earlier level mid-game.

ValueDescription
playersEvery player
playersActivePlayers still in
playersEliminatedPlayers knocked out or removed, in finishing order
playersWithPayoutsPlayers who have finished in the money
currentPlayerCountHow many players are still in
totalPlayerCountHow many actually played — bought in and were seated
expectedPlayerCountThe larger of the buy-in count and your expected player count
tablesEvery open or occupied table
tablesOutOfBalanceThresholdThe seat difference at which tables count as unbalanced
ValueDescription
totalCollectedBuy-ins + addons + rebuys
netPrizetotalCollected plus the payout adjustment
totalBuyIns, totalAddons, totalRebuysCounts
totalBuyInsCollected, totalAddonsCollected, totalRebuysCollectedMoney from each
totalBuyInChips, totalAddonChips, totalRebuyChipsChips from each
totalChipsInPlayBuy-in + addon + rebuy chips
expectedChipsInPlayProjected total, given expected players
averageChipsPerPlayerChips in play divided by players remaining
activeBigBlindThe current big blind, or the next one if this level has none
estimatedLastBigBlindWhere the blinds are projected to end
estimatedSecondsUntilEndProjected time remaining, or nothing if it can’t be estimated
ValueDescription
payoutsThe payout amounts, largest first
payoutsToShowHow many places to display — it shrinks as places are filled in by name
playersWithPayoutsPlayers who have finished in the money
eliminationsUntilBubbleBurstKnockouts left before the money
chopsAny chops that have been agreed
payoutCount, payoutPercentages, payoutRoundTo, payoutAdjustmentThe configured settings
ValueDescription
hasHighHandHas a high hand been recorded?
highHandThe hand, as a number you decode with pokerHandToCards
highHandPlayerThe player who made it

Decoding takes two steps — turn the number into cards, then ask the cards for what you want:

Applied toPropertyResult
highHandpokerHandToCardsThe five cards
the cardspokerCardsToHandNameFull House
the cardspokerCardsToTextA♠ A♥ A♦ K♠ K♥
the cardspokerCardsToValueA number, for comparing hands
{{ cards = highHand.pokerHandToCards; highHandPlayer.shortName + " — " + cards.pokerCardsToHandName + " " + cards.pokerCardsToText }}

Fed by the counts players report themselves — see Player profile updates.

ValueDescription
hasChipLeaderHas any active player reported a count?
chipLeaderPlayerThe active player with the most chips
chipLeaderChipsTheir latest reported count
chipLeaderDtWhen it was reported, in milliseconds

Everything on the Setup screen is readable too. The most useful:

ValueDescription
titleThe tournament’s name
startingChipsStarting stack
buyInCost, addonCost, rebuyCostConfigured costs
addonsAllowed, rebuysAllowedWhether each is permitted
useBountyChips, bountyChipCostBounty settings
anteType0 none, 1 standard, 2 big-blind ante
initialBigBlind, blindGrowthRateBlind structure inputs
levelMinutes, breakMinutes, levelsPerBreak, pregameMinutesTiming
pauseAfterLevel, pauseAfterBreakAutomatic pauses
defaultSeatsPerTable, minPlayersForConsolidationTable settings
chipsThe chip set
logThe tournament log
PropertyDescription
name, shortName, initialsHow the player is displayed
idThe player’s number
isActiveStill in the tournament?
tableId, seatWhere they’re sitting, if they are
place, placeCountFinishing place, and how many share it
payoutTheir prize, or 0
totalWinningsPrize plus bounty winnings, including a bounty chip still held
currentChipsLatest reported stack, or 0
currentChipsDtWhen it was reported
totalChipsChips received from buy-in, addons, and rebuys
totalPaidMoney paid in
totalEliminatedPlayers knocked out — a fraction when a pot was split
timesEliminatedHow many times they were knocked out, for re-entry tournaments
hasBountyChip, bountyChipValueTheir bounty chip, if any
bountyChipsWon, bountyChipWinnings, totalBountyPaidBounty totals
msActive, msSeatedTime in the tournament and at a table, excluding breaks and pauses
PropertyDescription
name, colorOptional label and color
seatsHow many seats
isOpenAccepting players?
closeOrder0 first, 1 any, 2 last
playersThe players seated here, in seat order
PropertyDescription
title, subtitleThe level’s labels
smallBlind, bigBlind, anteBlinds for this level
minutesIts length
isBreakLevel, isBlindLevel, isPregameLevelWhat kind of level it is
pauseAfterPause the timer when it ends?

place, totalPayout, type, players, stacks, percents, payouts.

value, count, image, svgId, plus whatever parameters the chip’s artwork defines.

log.entries is every entry in the tournament log, oldest first. Each entry has:

PropertyDescription
type"buyIn", "knockout", "seating", "blindsChanged", and so on — or your own name, for a custom entry
dtWhen it happened, in milliseconds
status"enabled" when the entry counts
createdByWho recorded it

Beyond those four, the properties depend on the type — cost, chips, and players on a buy-in; players and byPlayers on a knockout; table and seats on a seating entry; bigBlind, smallBlind, ante, and level on a blinds change. A custom log entry exposes one property per field you defined, named by the field’s label.

players and byPlayers hold player numbers, not players. Turn them into something useful with the helpers below.

MethodResult
.toPlayer()The player with that number
.toPlayerName()Their full name
.toPlayerShortName()Their short name
.toPlayerInitials()Their initials
.toTable()The table with that number
{{ e = log.entries.last; e.players.map(func(p) { p.toPlayerName() }).join(", ", ", and ") }}

Alert conditions and TTS text get three extras, which is what makes them fire once rather than every second:

ValueDescription
previousThe whole tournament as it was one second ago — previous.levelIndex, previous.secondsLeftInLevel, and so on
handTimerThe hand timer: isRunning, seconds, defaultSeconds
previousHandTimerThe hand timer a second ago

See Alerts for why previous matters.

The points formula is evaluated once per player, and gets playerId — that player’s number. Turn it into a player with playerId.toPlayer().

A payout script runs before payouts exist, so it deliberately can’t see payouts or playersWithPayouts — referencing them is an error rather than a silent zero. It gets a focused set instead:

netPrize, totalCollected, totalBuyIns, totalAddons, totalRebuys, totalPlayerCount, currentPlayerCount, expectedPlayerCount, payoutCount, payoutRoundTo, buyInCost, addonCost, rebuyCost

plus one function of its own:

FunctionResult
defaultPayoutPercentages(count)The app’s default split for that many places — defaultPayoutPercentages(3) gives [0.5, 0.3, 0.2]