- Sashité for Developers
- Specifications
- PCN
- 1.0.0
- Examples
- Game Outcomes
Game Outcomes (PCN v1.0.0)
This page shows PCN documents with various game termination scenarios and results.
All examples are shown in both TOML and JSON formats.
Quick Reference
Result Values
| Value | Description |
|---|---|
"1-0" |
First player wins |
"0-1" |
Second player wins |
"1/2-1/2" |
Draw |
Termination Sources
| Source | Examples |
|---|---|
| Position-based | Checkmate, stalemate, insufficient material |
| Agreement | Draw offer accepted by both players |
| Time | Clock runs out, per-ply limit exceeded |
| Resignation | Player concedes |
1. Game In Progress (No Outcome)
A game without an outcome section is considered in progress.
TOML
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 5000
[[plies]]
pmn = "e7-e5"
elapsed_ms = 6000
JSON
{
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 5000 },
{ "pmn": "e7-e5", "elapsed_ms": 6000 }
]
}
2. Checkmate
A game ending in checkmate, indicated by mate: true on the final ply.
TOML
[meta]
name = "Scholar's Mate"
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "e2-e4"
[[plies]]
pmn = "e7-e5"
[[plies]]
pmn = "f1-c4"
[[plies]]
pmn = "b8-c6"
[[plies]]
pmn = "d1-h5"
[[plies]]
pmn = "g8-f6"
assessment = "blunder"
[[plies]]
pmn = "h5+f7"
check = true
mate = true
[outcome]
result = "1-0"
JSON
{
"meta": {
"name": "Scholar's Mate"
},
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "e2-e4" },
{ "pmn": "e7-e5" },
{ "pmn": "f1-c4" },
{ "pmn": "b8-c6" },
{ "pmn": "d1-h5" },
{ "pmn": "g8-f6", "assessment": "blunder" },
{ "pmn": "h5+f7", "check": true, "mate": true }
],
"outcome": {
"result": "1-0"
}
}
3. Resignation
A game ending by resignation. The result indicates who won.
TOML
[meta]
event = "Club Match"
[sides.first]
name = "Alice"
variant = "Chess"
[sides.second]
name = "Bob"
variant = "Chess"
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 12400
[[plies]]
pmn = "c7-c5"
elapsed_ms = 9100
[[plies]]
pmn = "g1-f3"
elapsed_ms = 3000
comment = "Black resigns"
[outcome]
result = "1-0"
JSON
{
"meta": {
"event": "Club Match"
},
"sides": {
"first": { "name": "Alice", "variant": "Chess" },
"second": { "name": "Bob", "variant": "Chess" }
},
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 12400 },
{ "pmn": "c7-c5", "elapsed_ms": 9100 },
{ "pmn": "g1-f3", "elapsed_ms": 3000, "comment": "Black resigns" }
],
"outcome": {
"result": "1-0"
}
}
4. Draw by Agreement
Both players agree to a draw using draw_offer: true.
TOML
[meta]
name = "Friendly Game"
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 500
[[plies]]
pmn = "e7-e5"
elapsed_ms = 600
draw_offer = true
comment = "Black offers a draw"
[[plies]]
pmn = "g1-f3"
elapsed_ms = 300
draw_offer = true
comment = "White accepts"
[outcome]
result = "1/2-1/2"
JSON
{
"meta": {
"name": "Friendly Game"
},
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 500 },
{
"pmn": "e7-e5",
"elapsed_ms": 600,
"draw_offer": true,
"comment": "Black offers a draw"
},
{
"pmn": "g1-f3",
"elapsed_ms": 300,
"draw_offer": true,
"comment": "White accepts"
}
],
"outcome": {
"result": "1/2-1/2"
}
}
5. Time Forfeit — Bank Exhausted
A player runs out of time in a Fischer time control game.
TOML
[meta]
event = "Blitz Arena"
[[periods]]
duration_ms = 60000
increment_ms = 2000
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 7000
[[plies]]
pmn = "e7-e5"
elapsed_ms = 12000
[[plies]]
pmn = "g1-f3"
elapsed_ms = 30500
[[plies]]
pmn = "b8-c6"
elapsed_ms = 22400
[[plies]]
pmn = "f1-c4"
elapsed_ms = 40100
comment = "White runs out of time"
[outcome]
result = "0-1"
JSON
{
"meta": {
"event": "Blitz Arena"
},
"periods": [
{ "duration_ms": 60000, "increment_ms": 2000 }
],
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 7000 },
{ "pmn": "e7-e5", "elapsed_ms": 12000 },
{ "pmn": "g1-f3", "elapsed_ms": 30500 },
{ "pmn": "b8-c6", "elapsed_ms": 22400 },
{ "pmn": "f1-c4", "elapsed_ms": 40100, "comment": "White runs out of time" }
],
"outcome": {
"result": "0-1"
}
}
Time calculation (White):
- After ply 1: 60000 − 7000 + 2000 = 55000
- After ply 3: 55000 − 30500 + 2000 = 26500
- After ply 5: 26500 − 40100 + 2000 = −11600 (negative = time forfeit)
6. Time Forfeit — Per-Ply Violation
A player exceeds the per-ply time limit in byōyomi.
TOML
[[periods]]
duration_ms = 5000
plies = 1
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 3000
[[plies]]
pmn = "e7-e5"
elapsed_ms = 6200
comment = "Black exceeds 5 second limit"
[outcome]
result = "1-0"
JSON
{
"periods": [
{ "duration_ms": 5000, "plies": 1 }
],
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 3000 },
{ "pmn": "e7-e5", "elapsed_ms": 6200, "comment": "Black exceeds 5 second limit" }
],
"outcome": {
"result": "1-0"
}
}
Rule: For plies = 1, each ply must complete within duration_ms. Here 6200 > 5000.
7. Stalemate
A position where the player to move has no legal moves but is not in check.
TOML
[meta]
name = "Stalemate Example"
[setup]
feen = "7k^/5Q2/6K^1/8/8/8/8/8 / c/C"
[outcome]
result = "1/2-1/2"
JSON
{
"meta": {
"name": "Stalemate Example"
},
"setup": {
"feen": "7k^/5Q2/6K^1/8/8/8/8/8 / c/C"
},
"outcome": {
"result": "1/2-1/2"
}
}
Note: Black to move, but has no legal moves and is not in check.
8. Insufficient Material
A position where neither player can checkmate.
TOML
[meta]
name = "King vs King"
[setup]
feen = "8/8/4k^3/8/8/4K^3/8/8 / C/c"
[outcome]
result = "1/2-1/2"
JSON
{
"meta": {
"name": "King vs King"
},
"setup": {
"feen": "8/8/4k^3/8/8/4K^3/8/8 / C/c"
},
"outcome": {
"result": "1/2-1/2"
}
}
9. Threefold Repetition
A game drawn by position repetition.
TOML
[meta]
name = "Threefold Repetition"
comment = "Position repeated three times"
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[[plies]]
pmn = "g1-f3"
[[plies]]
pmn = "g8-f6"
[[plies]]
pmn = "f3-g1"
[[plies]]
pmn = "f6-g8"
[[plies]]
pmn = "g1-f3"
[[plies]]
pmn = "g8-f6"
[[plies]]
pmn = "f3-g1"
[[plies]]
pmn = "f6-g8"
comment = "Third repetition of initial position"
[outcome]
result = "1/2-1/2"
JSON
{
"meta": {
"name": "Threefold Repetition",
"comment": "Position repeated three times"
},
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"plies": [
{ "pmn": "g1-f3" },
{ "pmn": "g8-f6" },
{ "pmn": "f3-g1" },
{ "pmn": "f6-g8" },
{ "pmn": "g1-f3" },
{ "pmn": "g8-f6" },
{ "pmn": "f3-g1" },
{ "pmn": "f6-g8", "comment": "Third repetition of initial position" }
],
"outcome": {
"result": "1/2-1/2"
}
}
10. Fifty-Move Rule
A game drawn by the fifty-move rule.
TOML
[meta]
name = "Fifty-Move Rule"
comment = "50 moves without pawn move or capture"
[setup]
feen = "8/8/4k^3/8/8/4K^3/3R4/8 / C/c"
# ... (100 plies of shuffling pieces)
[outcome]
result = "1/2-1/2"
JSON
{
"meta": {
"name": "Fifty-Move Rule",
"comment": "50 moves without pawn move or capture"
},
"setup": {
"feen": "8/8/4k^3/8/8/4K^3/3R4/8 / C/c"
},
"plies": [],
"outcome": {
"result": "1/2-1/2"
}
}
Note: The actual 100 plies would be recorded; abbreviated here for clarity.
11. Forfeit / No-Show
A game where a player forfeits without playing.
TOML
[meta]
event = "Tournament Round 3"
comment = "Black did not appear"
[sides.first]
name = "Alice"
[sides.second]
name = "Bob"
[setup]
feen = "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
[outcome]
result = "1-0"
JSON
{
"meta": {
"event": "Tournament Round 3",
"comment": "Black did not appear"
},
"sides": {
"first": { "name": "Alice" },
"second": { "name": "Bob" }
},
"setup": {
"feen": "+rnbq+k^bn+r/+p+p+p+p+p+p+p+p/8/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/c"
},
"outcome": {
"result": "1-0"
}
}
Outcome Semantics
PCN records the result but not the specific termination reason. The termination reason can be:
- Inferred from the position — checkmate, stalemate, insufficient material
- Inferred from time control — compare
elapsed_msvalues againstperiods - Recorded in comments — resignation reason, forfeit explanation
- Recorded in ply flags —
check,mate,draw_offer
This separation allows PCN to remain rule-agnostic while still capturing complete game information.
See Also
- Minimal Documents — Basic structure examples
- Time Control Systems — Timing configurations
- Complete Game Records — Full-featured examples
