Wolf
Rotation
The Wolf for each hole is determined by tee order:
wolfTeeOrder = (holeNumber - 1) % 4H1 → 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_winsorothers_win— never split between them. A 2v2 win pays the bank to both Wolf-team winners; a 3-opponentothers_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:
| Category | UI label |
|---|---|
water | Frog (Water) |
sand | Camel (Sand) |
three_putt | Snake (3-Putt) |
tree | Squirrel (Tree) |
Pot mechanics
From the code:
- Each
animalEventrecord has anoccurrencesinteger (≥ 1) and alastPlayerId. - For each category, walk hole records in ascending order. Each event adds
occurrencestopotTotaland setscurrentHolderId = 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 × animalsRateto 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 + greenieBirdieRateinstead of justgreenieRate. The winner still collects3 ×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:
- First-birdie bet: winner receives
rate × 3; each of the 3 non-winners paysrate - Last-birdie bet: winner receives
rate × 3; each of the 3 non-winners paysrate
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 === 1on a saved hole counts as an ace, except a skipped score (isSkip: true, stored internally asstrokes: 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.