Replace the per-part lift with a local Y-axis tilt that fans the stack, and add zStart/zEnd to ramp the stack's height across the curve so it arches in 3D. Update the poker deck and docs accordingly.
142 lines
3.5 KiB
Markdown
142 lines
3.5 KiB
Markdown
# 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:
|
||
curve: M 0 0 C 20 -20 40 -20 60 0
|
||
limit: 0
|
||
align: center
|
||
tilt: 0.015
|
||
zStart: 0
|
||
zEnd: 10
|
||
- 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
|
||
```
|