- Sashité for Developers
- Specifications
- PCN
- 1.0.0
- Examples
- Traditional Games
Traditional Games (PCN v1.0.0)
This page presents PCN documents for well-known abstract board games using:
- FEEN setups,
- PAN action tuples
["<PAN>", <seconds: float ≥ 0.0>], - Optional per-player period-based time control under
sides.{first|second}.periods.
Note — PCN is rule-agnostic: legality is validated by the engine/viewer against the acting side’s SNN style.
1) Western Chess — No Time Control (In Progress)
A small, valid record without time control. Seconds are recorded but clocks are unlimited.
{
"sides": {
"first": { "style": "CHESS", "name": "White" },
"second": { "style": "chess", "name": "Black" }
},
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["e2-e4", 2.3],
["e7-e5", 3.1],
["g1-f3", 4.0],
["b8-c6", 2.2]
],
"status": "in_progress"
}
2) Western Chess — Blitz Fischer 5+3 (Symmetric)
Both sides use a bank with increment (moves=null, inc=3).
{
"meta": { "event": "Blitz Night", "started_at": "2025-01-27T19:00:00Z" },
"sides": {
"first": { "style": "CHESS", "name": "Alice", "periods": [ { "time": 300, "inc": 3 } ] },
"second": { "style": "chess", "name": "Bob", "periods": [ { "time": 300, "inc": 3 } ] }
},
"setup": "+rnbq+kbn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/c",
"moves": [
["e2-e4", 8.0], ["e7-e5", 12.0],
["g1-f3", 15.0], ["b8-c6", 5.0],
["f1-c4", 9.5], ["f8-c5", 7.2]
],
"status": "in_progress"
}
Reminder: The increment is applied at the end of each move, using the period active at move start.
3) Japanese Shōgi — Main Time → Byōyomi (10′ → 30s/move)
Bank then per-move cap (moves=1), which repeats naturally.
{
"meta": { "event": "Meijin Qualifier", "round": 1 },
"sides": {
"first": { "style": "SHOGI", "name": "Sente", "periods": [ { "time": 600 }, { "time": 30, "moves": 1 } ] },
"second": { "style": "shogi", "name": "Gote", "periods": [ { "time": 600 }, { "time": 30, "moves": 1 } ] }
},
"setup": "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL / S/s",
"moves": [
["7g-7f", 5.2],
["3c-3d", 8.0],
["2b-3c", 28.4],
["8d-8e", 4.1],
["P*5e", 3.0]
],
"status": "in_progress"
}
Per-move rule: each byōyomi move must satisfy seconds ≤ 30; otherwise the outcome is "time_limit".
4) Makruk (Thai Chess) — Pure Bank (No Increment)
Simple main-time example with no increment.
{
"sides": {
"first": { "style": "CHESS", "name": "West" }, // using CHESS lettering for the white side
"second": { "style": "makruk", "name": "Thai" } // makruk rules on the black side
},
"setup": "rnsmksnr/8/pppppppp/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+KBN+R / C/m",
"moves": [
["e2-e4", 6.0],
["d6-d5", 10.0]
],
"status": "in_progress"
}
Cross-style is supported; legality is determined by the acting side’s SNN style.
Implementation Notes
- Move tuples: always
[string PAN, number seconds≥0.0]. Use floats (e.g.,0.0,3.2). -
Active player:
side0 = FEEN.active(setup) active = (moves.length % 2 == 0) ? side0 : opposite(side0) -
Time control per player (
sides.{first|second}.periods):moves = null→ bank (Fischer ifinc > 0)moves = 1→ per-move cap (byōyomi)moves ≥ 2→ quota (Canadian); when quota hits 0, transition if a next period exists, else reset and stay
- Bank overshoot: if bank
≤ 0and a next period exists, the next period applies to the next move; if no next period and bank< 0, the game should end withstatus = "time_limit".
For end-to-end documents, see Complete Game Records. For timing semantics & variants, see Time Control. For special actions (castling, drops, promotion), see Special Moves.
