Untitled Game
untitled_game_8360 Draft
Studio
Docs / Tutorials / Build Golf
Tutorial

Build Golf

Recreate the complete playable Golf card game using normal Handlimit authoring tools.

This tutorial checks the current game as you work. Build every item through normal Handlimit authoring; common-piece tools only automate repetitive setup.

0/9
steps complete
0%
Common Pieces

Standard 52-card deck

Creates the Playing Card type and all 52 normal cards with suit, face-value, rank-value, and score-value attributes. Running it again updates those cards instead of creating duplicates; unrelated pieces are left alone.

Walkthrough

Build it in order

Open a step → follow the checklist → return here
○ 1. Game basics Set Golf up as a 2–6 player game. The Rules section will define the nine-round structure. 0/3 ⌄
What to create
  • ›Players: 2–6
  • ›Description: Nine-round card game where players minimize the score of a 3×2 tableau.
Current game
○ 2-player minimum
○ 6-player maximum
○ Game description
Exact settings
Minimum players: 2
Maximum players: 6
Description: Nine-round card game where players minimize the score of a 3×2 tableau.
Ruleset rounds: 9
Turn order: Clockwise
○ 2. Scoring stats Create the three player stats used to track round reveals and Golf scoring. 0/3 ⌄
What to create
  • ›Total Score → total_score — All Players — default 0
  • ›Round Score → round_score — All Players — default 0
  • ›Round Reveals → round_reveals — All Players — default 0
Current game
○ total_score
○ round_score
○ round_reveals
NameAuto KeyScopeDefault
Total Scoretotal_scoreAll Players0
Round Scoreround_scoreAll Players0
Round Revealsround_revealsAll Players0
○ 3. Standard playing-card deck Golf uses a normal 52-card deck. You can create it manually, or use the Common Pieces tool below to generate the Piece Type and all 52 cards at once. 0/4 ⌄
What to create
  • ›Playing Card → playing_card
  • ›Suits: spades, hearts, diamonds, clubs
  • ›Ranks: A, 2–10, J, Q, K
  • ›Golf scoring: A=1, 2=-2, J/Q=10, K=0; number cards use face value.
  • ›Matching vertical ranks score zero during round scoring.
Current game
○ Playing Card piece type
○ 52 standard playing cards
○ Suit, face value and score attributes
○ Golf score values
Playing Card type
Name: Playing Card
Auto Key: playing_card
Base type: Card
Playtest renderer: Playing Card
Back label: GOLF
Attributes: suit, face_value, rank_value, score_value.
Golf values: A=1, 2=-2, 3–10=face value, J=10, Q=10, K=0.
Open Standard playing-card deck Or use the Standard Deck tool above for the repetitive card setup.
○ 4. Effects Effects are the reusable operations that build the deck, move cards, reveal cards, score a tableau, and determine the winner. 0/16 ⌄
What to create
  • ›Each Effect name naturally generates the key shown in the reference table.
  • ›Round setup: build deck, shuffle, reset counters, deal six, start discard, choose first player.
  • ›Player play: reveal, draw, take discard, replace, discard.
  • ›Scoring: reveal all, score 3 columns, rank the lowest total score.
Current game
○ build_standard_deck
○ shuffle_deck
○ reset_initial_reveals
○ reset_round_score
○ deal_six_cards
○ start_discard_pile
○ choose_first_player
○ reveal_tableau_card
○ count_initial_reveal
○ draw_top_deck_card
○ take_top_discard
○ discard_drawn_card
○ replace_tableau_card
○ reveal_all_tableaus
○ score_tableau_columns
○ rank_lowest_score
NameAuto KeyOperationRuntime settings
Build Standard Deckbuild_standard_deckSeed Piece Typeplaying_card → deck; clear existing; face down
Shuffle Deckshuffle_deckShuffle Zonedeck; Global
Reset Initial Revealsreset_initial_revealsSet Statround_reveals = 0; All Players
Reset Round Scorereset_round_scoreSet Statround_score = 0; All Players
Deal Six Cardsdeal_six_cardsDeal Piecesdeck → tableau; 6 per player; 3 columns; face down
Start Discard Pilestart_discard_pileMove Top Piecedeck → discard; Global → Global; face up
Choose First Playerchoose_first_playerChoose Random Active PlayerNo additional fields
Reveal Tableau Cardreveal_tableau_cardReveal Pieceinput piece_id; tableau; owner Actor
Count Initial Revealcount_initial_revealAdd Statround_reveals + 1; Actor
Draw Top Deck Carddraw_top_deck_cardMove Top Piecedeck → drawn; Global → Actor; face up
Take Top Discardtake_top_discardMove Top Piecediscard → drawn; Global → Actor; face up
Discard Drawn Carddiscard_drawn_cardMove Piece From Zonedrawn → discard; Actor → Global; face up
Replace Tableau Cardreplace_tableau_cardReplace Pieceinput piece_id; drawn replaces tableau target; replaced card → discard
Reveal All Tableausreveal_all_tableausReveal Alltableau; All Players
Score Tableau Columnsscore_tableau_columnsScore Gridtableau; 3 columns; value=score_value; match=face_value; matching score=0; round_score + total_score
Rank Lowest Scorerank_lowest_scoreRank Playerstotal_score; Lowest wins
○ 5. Actions Combine Effects into the player and system actions that are legal during each Window. 0/8 ⌄
What to create
  • ›System: Prepare Round, Score Round, Determine Winner.
  • ›Player: Reveal Card, Draw From Deck, Draw From Discard, Replace Tableau Card, Discard Drawn Card.
  • ›Leave generated keys alone; they should match the snake_case values in the reference table.
Current game
○ prepare_round
○ reveal_card
○ draw_from_deck
○ draw_from_discard
○ replace_tableau_card
○ discard_drawn_card
○ score_round
○ determine_winner
NameAuto KeyPlaytest UIEffects in orderRequirements
Prepare Roundprepare_roundSystembuild_standard_deck → shuffle_deck → reset_initial_reveals → reset_round_score → deal_six_cards → start_discard_pile → choose_first_playerNone
Reveal Cardreveal_cardPiece: tableaureveal_tableau_card → count_initial_revealActor round_reveals < 2; selected tableau card belongs to Actor and is face down
Draw From Deckdraw_from_deckZone: deckdraw_top_deck_cardGlobal deck count > 0
Draw From Discarddraw_from_discardZone: discardtake_top_discardGlobal discard count > 0
Replace Tableau Cardreplace_tableau_cardPiece: tableaureplace_tableau_cardActor drawn count > 0; selected tableau card belongs to Actor
Discard Drawn Carddiscard_drawn_cardButtondiscard_drawn_cardActor drawn count > 0
Score Roundscore_roundSystemreveal_all_tableaus → score_tableau_columnsNone
Determine Winnerdetermine_winnerSystemrank_lowest_scoreNone
○ 6. Phases and Windows Build the game hierarchy in Rules: Phases define the major game flow, and each Phase owns a sequential Window chain. 0/13 ⌄
What to create
  • ›Setup: Prepare Round → Reveal Two Cards
  • ›Player Turn: Draw a Card → Keep or Discard
  • ›Scoring: Score Round → Round Complete
  • ›Game End: Game Complete
  • ›Use the automatically generated Window keys from those names.
Current game
○ 9 rounds
○ Clockwise turns
○ Window: prepare_round
○ Window: reveal_two_cards
○ Window: draw_a_card
○ Window: keep_or_discard
○ Window: score_round
○ Window: round_complete
○ Window: game_complete
○ Phase: setup
○ Phase: player_turn
○ Phase: scoring
○ Phase: game_end
NameAuto KeyTargetCapabilityAllowed Actions
Prepare Roundprepare_roundGameAutomatic—
Reveal Two Cardsreveal_two_cardsAll PlayersTake Actionreveal_card
Draw a Carddraw_a_cardActive PlayerTake Actiondraw_from_deck, draw_from_discard
Keep or Discardkeep_or_discardActive PlayerTake Actionreplace_tableau_card, discard_drawn_card
Score Roundscore_roundGameAutomatic—
Round Completeround_completeGameConfirmation—
Game Completegame_completeGameAutomatic—
Setup setup
prepare_round → reveal_two_cards
Player Turn player_turn
draw_a_card → keep_or_discard
Scoring scoring
score_round → round_complete
Game End game_end
game_complete
○ 7. Playable zones Define where runtime card instances live. These zones are what the tabletop renderer displays and what Effects move cards between. 0/4 ⌄
What to create
  • ›Deck → deck — Global Stack — Hidden
  • ›Discard → discard — Global Stack — Public
  • ›Tableau → tableau — Per Player Grid — Mixed — 2 rows × 3 columns
  • ›Drawn → drawn — Per Player Slot — Owner
Current game
○ deck
○ discard
○ tableau
○ drawn
NameAuto KeyScopeKindVisibilityLayout
DeckdeckGlobalStackHidden—
DiscarddiscardGlobalStackPublic—
TableautableauPer PlayerGridMixed2 × 3
DrawndrawnPer PlayerSlotOwner—
○ 8. Game progression Connect the Phase and Window routes so the node graph explains the whole game just by following its arrows. 0/8 ⌄
What to create
  • ›Start → Setup → Player Turn.
  • ›Player Turn → Scoring when the deck is empty or a tableau is fully revealed.
  • ›Otherwise Player Turn loops to itself and rotates the active player.
  • ›Scoring → Game End when Round ≥ 9; otherwise → Setup and increment the round.
  • ›Game End → End.
Current game
○ Game starts in Setup
○ Setup first Window is prepare_round
○ Player Turn first Window is draw_a_card
○ Scoring first Window is score_round
○ Game End first Window is game_complete
○ Player Turn has a route to Scoring
○ Scoring has a route to Game End
○ Scoring has a next-round route to Setup
START → Setup → Player Turn → Scoring → Game End → END
Setup: first Window prepare_round. Prepare Round runs automatically, then Reveal Two Cards completes when all players have round_reveals ≥ 2.
Player Turn: draw_a_card → keep_or_discard. Phase route to Scoring when deck count ≤ 0. Add another route to Scoring when any player's entire tableau.face_up = true. Otherwise loop Player Turn to itself with Next player.
Scoring: score_round → round_complete. When Round ≥ 9, route to Game End. Otherwise route to Setup with Next round.
Game End: first Window game_complete; entry action determine_winner; finish the game.
○ 9. Playtest the finished game Run through all nine rounds and verify that the authored definition behaves like Golf from setup through winner selection. 0/1 ⌄
What to create
  • ›Each player receives six face-down cards in a 3×2 tableau.
  • ›Each player reveals exactly two starting cards.
  • ›Players draw from deck/discard, then replace a tableau card or discard the drawn card.
  • ›Rounds score automatically when the deck empties or a tableau is fully revealed.
  • ›After round 9, the lowest total score wins; ties are supported.
Current game
○ Playable definition has cards, rules and a start Phase
Expected loop: fresh deck → deal six → reveal two each → draw from deck/discard → replace/discard → next player → score when a tableau is open or deck is empty → confirm score → next round → lowest total wins after round 9.

How the finished game should read

START → Setup → Player Turn → Scoring → Game End → END
            ↖ otherwise + next player ↙
Scoring → Game End when Round ≥ 9
Scoring → Setup otherwise + next round

Inside each Phase, follow the Window chain from its blue Window connector. Select a Window to define when it completes; select a When… route to define why the game takes that branch.