Files
tts-workshop/games/poker/poker.md
T
hypercross 8d0e393100 feat(tabletop): let candidates inherit and override route stacking
Candidates now carry their own stacking strategy, inheriting the route's
when absent, so the default tilt applies consistently. Drop the now
redundant explicit tilt from the poker deck.
2026-08-10 00:27:01 +08:00

140 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Poker
A standard 52-card poker deck, laid out on a table with a draw pile and
community-card slots. Exercises the bgm loader's `$variants` expansion to
generate a full deck from a single part definition.
```yaml file=poker.yaml
role: package
id: poker
title: Poker
designer: Public Domain
players: 9
language: en
```
## Parts
A single `card` part expanded into 52 cards by the `$variants` CSV. Each row
picks a cell from the `13×4` face sheet (`cards-13x4.jpg`) — 13 ranks across,
4 suits down. All cards share the same back from the `4×1` back sheet
(`back-4x1.png`).
```yaml file=cards.yaml
role: part
type: card
face: ./cards-13x4.jpg
back: ./back-4x1.png
size: [63, 88, 0.3]
fillet: 2
$variants: ./cards.csv
```
```csv file=cards.csv
id,rank,suit,faceCrop,backCrop
string,string,string,[number;number;number;number],[number;number;number;number]
2s,2,spades,[0;0;13;4],[0;0;4;1]
3s,3,spades,[1;0;13;4],[0;0;4;1]
4s,4,spades,[2;0;13;4],[0;0;4;1]
5s,5,spades,[3;0;13;4],[0;0;4;1]
6s,6,spades,[4;0;13;4],[0;0;4;1]
7s,7,spades,[5;0;13;4],[0;0;4;1]
8s,8,spades,[6;0;13;4],[0;0;4;1]
9s,9,spades,[7;0;13;4],[0;0;4;1]
10s,10,spades,[8;0;13;4],[0;0;4;1]
js,J,spades,[9;0;13;4],[0;0;4;1]
qs,Q,spades,[10;0;13;4],[0;0;4;1]
ks,K,spades,[11;0;13;4],[0;0;4;1]
as,A,spades,[12;0;13;4],[0;0;4;1]
2h,2,hearts,[0;1;13;4],[0;0;4;1]
3h,3,hearts,[1;1;13;4],[0;0;4;1]
4h,4,hearts,[2;1;13;4],[0;0;4;1]
5h,5,hearts,[3;1;13;4],[0;0;4;1]
6h,6,hearts,[4;1;13;4],[0;0;4;1]
7h,7,hearts,[5;1;13;4],[0;0;4;1]
8h,8,hearts,[6;1;13;4],[0;0;4;1]
9h,9,hearts,[7;1;13;4],[0;0;4;1]
10h,10,hearts,[8;1;13;4],[0;0;4;1]
jh,J,hearts,[9;1;13;4],[0;0;4;1]
qh,Q,hearts,[10;1;13;4],[0;0;4;1]
kh,K,hearts,[11;1;13;4],[0;0;4;1]
ah,A,hearts,[12;1;13;4],[0;0;4;1]
2d,2,diamonds,[0;2;13;4],[0;0;4;1]
3d,3,diamonds,[1;2;13;4],[0;0;4;1]
4d,4,diamonds,[2;2;13;4],[0;0;4;1]
5d,5,diamonds,[3;2;13;4],[0;0;4;1]
6d,6,diamonds,[4;2;13;4],[0;0;4;1]
7d,7,diamonds,[5;2;13;4],[0;0;4;1]
8d,8,diamonds,[6;2;13;4],[0;0;4;1]
9d,9,diamonds,[7;2;13;4],[0;0;4;1]
10d,10,diamonds,[8;2;13;4],[0;0;4;1]
jd,J,diamonds,[9;2;13;4],[0;0;4;1]
qd,Q,diamonds,[10;2;13;4],[0;0;4;1]
kd,K,diamonds,[11;2;13;4],[0;0;4;1]
ad,A,diamonds,[12;2;13;4],[0;0;4;1]
2c,2,clubs,[0;3;13;4],[0;0;4;1]
3c,3,clubs,[1;3;13;4],[0;0;4;1]
4c,4,clubs,[2;3;13;4],[0;0;4;1]
5c,5,clubs,[3;3;13;4],[0;0;4;1]
6c,6,clubs,[4;3;13;4],[0;0;4;1]
7c,7,clubs,[5;3;13;4],[0;0;4;1]
8c,8,clubs,[6;3;13;4],[0;0;4;1]
9c,9,clubs,[7;3;13;4],[0;0;4;1]
10c,10,clubs,[8;3;13;4],[0;0;4;1]
jc,J,clubs,[9;3;13;4],[0;0;4;1]
qc,Q,clubs,[10;3;13;4],[0;0;4;1]
kc,K,clubs,[11;3;13;4],[0;0;4;1]
ac,A,clubs,[12;3;13;4],[0;0;4;1]
```
## Board
A table with a draw pile on the left and five community-card slots across the
middle. The deck pile fans its stacked cards along a curve.
```yaml file=board.yaml
type: board
id: poker
role: surface
size: [600, 400]
layout:
- route: /deck
x: -250
y: 0
rotation: 0
stacking:
align: center
zStart: 0
#zEnd: 100
curve: M -50 -200 C 50 -150 450 -150 550 -200
- route: /community/:slot
candidates:
$variants: ./community.csv
```
```csv file=community.csv
slot,x,y,rotation
string,number,number,number
0,-100,0,0
1,-50,0,0
2,0,0,0
3,50,0,0
4,100,0,0
```
## Setup
Deal the whole deck onto the draw pile (`poker:card` expands to every card of
that type), then flip a flop onto the community slots.
```yaml file=main.yaml
role: setup
type: game
id: main
setup:
/deck: poker:card
/community/0: poker:card#as
/community/1: poker:card#kh
/community/2: poker:card#7d
```