← Home

Rules

How Wolf, Animals, Greenies, and Birdies are scored

Wolf

Rotation

The Wolf for each hole is determined by tee order:

wolfTeeOrder = (holeNumber - 1) % 4

H1 → teeOrder 0, H2 → teeOrder 1, H3 → teeOrder 2, H4 → teeOrder 3, H5 → teeOrder 0, ...

The Wolf is the first player to tee off on that hole.

2v2: Wolf picks a partner

The Wolf selects one of the other three players as a partner before or during the hole.

  • Wolf team: Wolf's strokes + Partner's strokes (combined)
  • Other team: sum of the remaining two players' strokes (combined)
  • Wolf team lower: wolf_wins → +1 Wolf point to Wolf and Partner each
  • Other team lower: others_win → +1 Wolf point to each of the two non-Wolf, non-Partner players
  • Equal totals: push → 0 points to all four players on this hole, but banks a carry point for the next decided hole — see Push carryover below

Lone Wolf

The Wolf plays alone against all three opponents (wolfPartner === null).

  • The Wolf must strictly beat all three opponents (Wolf's strokes < every opponent's strokes)
  • Wolf strictly beats all three: wolf_wins → +3 Wolf points to Wolf
  • Any opponent ties or beats Wolf: others_win → +1 Wolf point to each of the three opponents
  • There is no push in Lone Wolf — a tie on the lowest score goes to the opponents

Release note (v0.8.0, pre-docs/RELEASE_NOTES.md history): "A tie with the best opposing score now counts as a loss for the Wolf — they have to strictly beat all three opponents to win."

Push carryover

A push doesn't just award 0 points on that hole — it banks a carry point that pays out on the next decided hole.

  • Every pushed hole adds +1 to a running carry bank.
  • Consecutive pushes stack: two pushes in a row bank +2, three in a row bank +3, and so on.
  • The full bank pays out to each winner of the next hole that resolves wolf_wins or others_win — never split between them. A 2v2 win pays the bank to both Wolf-team winners; a 3-opponent others_win (a Lone Wolf loss) pays the bank to all three opponents; a Lone Wolf win pays the bank to the Wolf alone.
  • After paying out, the bank resets to 0.
  • A push can only originate from a 2v2 hole — Lone Wolf has no push result (see above) — so carry always originates from 2v2, though a Lone Wolf hole can still be the decided hole that collects an existing bank.
  • If the round ends on an unpaid push (a bank with no further hole played to pay it out), that carry simply evaporates.

Skip score

If a player skips a hole, their score is treated as 12 strokes for all Wolf (and Animals, Greenies) calculation purposes. The UI displays "Skip" but the engine receives strokes=12.

Animals

Four independent categories, each running its own pot:

CategoryUI label
waterFrog (Water)
sandCamel (Sand)
three_puttSnake (3-Putt)
treeSquirrel (Tree)

Pot mechanics

From the code:

  • Each animalEvent record has an occurrences integer (≥ 1) and a lastPlayerId.
  • For each category, walk hole records in ascending order. Each event adds occurrences to potTotal and sets currentHolderId = lastPlayerId.
  • The final holder at round end owes the full accumulated pot for that category.
  • If the same category is triggered on multiple holes, the holder simply transfers to whoever triggered it last.

Animals settlement

For each category with potTotal > 0:

  • Holder pays potTotal × animalsRate to each of the three other players
  • Holder net: −(potTotal × animalsRate × 3)
  • Each other player net: +(potTotal × animalsRate)

Greenies

Only applies to holes flagged as par-3 (isPar3: true) during scoring.

  • One winner per par-3 hole (or no winner if none is selected)
  • Winner: receives rate × 3 (collects from all three others). Default rate $5/greenie, editable per round.
  • Each non-winner: pays rate
  • No winner selected: zero movement for all players on that hole

Greenie Birdie toggle

An optional per-greenie bonus, layered on top of the greenie payout above. Default rate $5/bonus, editable per round.

  • Each greenie hole with a winner can independently be flagged birdie: true. The flag is inert without a winner — it never creates a payout on its own.
  • When flagged, the per-opponent rate for that hole becomes greenieRate + greenieBirdieRate instead of just greenieRate. The winner still collects 3 × that combined rate; each opponent still pays it once.
  • Zero coupling to First/Last Birdie: this toggle only affects the greenie payout on that hole. Whether the same shot also counts toward First/Last Birdie sequencing (see below) is entirely independent — the two games stack on the same physical birdie without interacting.

First/Last Birdie

Only active when firstLastBirdieEnabled is set on the round.

How birdies are recorded

Players who birdie a hole are entered in hole-out order (the position field, 0-based). This order determines which birdie is "first" or "last" within the same hole.

Sequence determination

All birdies across the round are sorted: holeNumber ascending, then position ascending within the same hole.

  • First birdie: the earliest birdie in the sorted sequence (earliest hole, earliest hole-out position within that hole)
  • Last birdie: the latest birdie in the sorted sequence

Payouts

Two independent bets, default rate $5/birdie, editable per round:

  1. First-birdie bet: winner receives rate × 3; each of the 3 non-winners pays rate
  2. Last-birdie bet: winner receives rate × 3; each of the 3 non-winners pays rate

Single-birdie edge case: if only one birdie occurs all round, that player wins both bets. betsPlayed = 2; they collect rate × 3 × 2.

Hole-in-One

Derived entirely from strokes on saved holes — there's no dedicated input or event table.

  • Any score of strokes === 1 on a saved hole counts as an ace, except a skipped score (isSkip: true, stored internally as strokes: 12) — a skip never counts as an ace, regardless of the stored strokes value.
  • Each ace pays independently: the ace collects rate × 3 (rate from each of the 3 opponents). Default rate $100/opponent ($300 total to the ace), editable per round.
  • Multiple aces in a round — the same player twice, or different players on different holes — each resolve as their own complete payout. Nothing is shared or capped across aces.