Files
tts-workshop/games/carcassonne/carcassonne.md
T
hypercross dc721d5c2d refactor(games): use ordered setup placements
Convert poker and carcassonne setups to the ordered placement list. Deal the deck/draw first, then move the flop cards and opening tiles out onto their paths.
2026-08-10 11:27:53 +08:00

4.2 KiB
Raw Blame History

Carcassonne

The base game's 24 landscape tiles, laid out on a table with a draw pile and a grid of placed tiles. Each tile is a single 110×110 image (AX), sized to a standard 45×45 mm square.

role: package
id: carcassonne
title: Carcassonne
designer: Klaus-Jürgen Wrede
publisher: Hans im Glück
players: 5
language: en
include: ['./**/*.yaml']

Parts

One tile part per distinct tile type (AX). All tiles share the same square face image and a uniform size; the $variants CSV expands them into the 24 tile parts.

role: part
type: tile
face: ./20AE_Base_Game_C2_Tile_A.png
size: [45, 45, 3]
fillet: 1
$variants: ./tiles.csv
id,face
string,string
a,./20AE_Base_Game_C2_Tile_A.png
b,./20AE_Base_Game_C2_Tile_B.png
c,./20AE_Base_Game_C2_Tile_C.png
d,./20AE_Base_Game_C2_Tile_D.png
e,./20AE_Base_Game_C2_Tile_E.png
f,./20AE_Base_Game_C2_Tile_F.png
g,./20AE_Base_Game_C2_Tile_G.png
h,./20AE_Base_Game_C2_Tile_H.png
i,./20AE_Base_Game_C2_Tile_I.png
j,./20AE_Base_Game_C2_Tile_J.png
k,./20AE_Base_Game_C2_Tile_K.png
l,./20AE_Base_Game_C2_Tile_L.png
m,./20AE_Base_Game_C2_Tile_M.png
n,./20AE_Base_Game_C2_Tile_N.png
o,./20AE_Base_Game_C2_Tile_O.png
p,./20AE_Base_Game_C2_Tile_P.png
q,./20AE_Base_Game_C2_Tile_Q.png
r,./20AE_Base_Game_C2_Tile_R.png
s,./20AE_Base_Game_C2_Tile_S.png
t,./20AE_Base_Game_C2_Tile_T.png
u,./20AE_Base_Game_C2_Tile_U.png
v,./20AE_Base_Game_C2_Tile_V.png
w,./20AE_Base_Game_C2_Tile_W.png
x,./20AE_Base_Game_C2_Tile_X.png

Board

A table with a draw pile on the left and an 11×11 grid of placed tiles in the middle. The grid routes each tile to its col,row cell, spaced 45 mm apart so tiles sit edge to edge.

type: board
id: board
role: surface
size: [600, 600]
layout:
  - route: /draw
    x: -280
    y: 0
    rotation: 0
    stacking:
      align: center
      zStart: 0
      curve: M -50 -200 C 50 -150 450 -150 550 -200
  - route: /grid/:col/:row
    candidates:
      $variants: ./grid.csv
col,row,x,y,rotation
string,string,number,number,number
0,0,-225,-225,0
0,1,-225,-180,0
0,2,-225,-135,0
0,3,-225,-90,0
0,4,-225,-45,0
0,5,-225,0,0
0,6,-225,45,0
0,7,-225,90,0
0,8,-225,135,0
0,9,-225,180,0
0,10,-225,225,0
1,0,-180,-225,0
1,1,-180,-180,0
1,2,-180,-135,0
1,3,-180,-90,0
1,4,-180,-45,0
1,5,-180,0,0
1,6,-180,45,0
1,7,-180,90,0
1,8,-180,135,0
1,9,-180,180,0
1,10,-180,225,0
2,0,-135,-225,0
2,1,-135,-180,0
2,2,-135,-135,0
2,3,-135,-90,0
2,4,-135,-45,0
2,5,-135,0,0
2,6,-135,45,0
2,7,-135,90,0
2,8,-135,135,0
2,9,-135,180,0
2,10,-135,225,0
3,0,-90,-225,0
3,1,-90,-180,0
3,2,-90,-135,0
3,3,-90,-90,0
3,4,-90,-45,0
3,5,-90,0,0
3,6,-90,45,0
3,7,-90,90,0
3,8,-90,135,0
3,9,-90,180,0
3,10,-90,225,0
4,0,-45,-225,0
4,1,-45,-180,0
4,2,-45,-135,0
4,3,-45,-90,0
4,4,-45,-45,0
4,5,-45,0,0
4,6,-45,45,0
4,7,-45,90,0
4,8,-45,135,0
4,9,-45,180,0
4,10,-45,225,0
5,0,0,-225,0
5,1,0,-180,0
5,2,0,-135,0
5,3,0,-90,0
5,4,0,-45,0
5,5,0,0,0
5,6,0,45,0
5,7,0,90,0
5,8,0,135,0
5,9,0,180,0
5,10,0,225,0
6,0,45,-225,0
6,1,45,-180,0
6,2,45,-135,0
6,3,45,-90,0
6,4,45,-45,0
6,5,45,0,0
6,6,45,45,0
6,7,45,90,0
6,8,45,135,0
6,9,45,180,0
6,10,45,225,0
7,0,90,-225,0
7,1,90,-180,0
7,2,90,-135,0
7,3,90,-90,0
7,4,90,-45,0
7,5,90,0,0
7,6,90,45,0
7,7,90,90,0
7,8,90,135,0
7,9,90,180,0
7,10,90,225,0
8,0,135,-225,0
8,1,135,-180,0
8,2,135,-135,0
8,3,135,-90,0
8,4,135,-45,0
8,5,135,0,0
8,6,135,45,0
8,7,135,90,0
8,8,135,135,0
8,9,135,180,0
8,10,135,225,0
9,0,180,-225,0
9,1,180,-180,0
9,2,180,-135,0
9,3,180,-90,0
9,4,180,-45,0
9,5,180,0,0
9,6,180,45,0
9,7,180,90,0
9,8,180,135,0
9,9,180,180,0
9,10,180,225,0
10,0,225,-225,0
10,1,225,-180,0
10,2,225,-135,0
10,3,225,-90,0
10,4,225,-45,0
10,5,225,0,0
10,6,225,45,0
10,7,225,90,0
10,8,225,135,0
10,9,225,180,0
10,10,225,225,0

Setup

Start with the full tile supply on the draw pile (carcassonne:tile expands to every tile of that type), then seed the grid with a few opening tiles.

role: setup
type: game
id: main
surfaces:
  - board#board
setup:
  - path: /draw
    parts: carcassonne:tile
  - path: /grid/5/5
    parts: carcassonne:tile#a
  - path: /grid/5/6
    parts: carcassonne:tile#b
  - path: /grid/6/5
    parts: carcassonne:tile#c