- Sashité for Developers
- Specifications
- PCN
- 1.0.0
- Examples
- Cross-Variant Games
Cross-Variant Games (PCN v1.0.0)
This page demonstrates cross-variant games where players use different rule systems within a single PCN document.
All examples are shown in both TOML and JSON formats.
Quick Reference
How Cross-Variant Works
- Each player’s
variantproperty specifies their rule system - The FEEN
setupencodes the style-turn pair (e.g.,C/mfor Chess vs Makruk) - Each ply is validated against the acting player’s variant
- PMN notation remains consistent across variants
Variant Examples
| Variant | Description |
|---|---|
Chess |
Western/International Chess |
Shogi |
Japanese Chess |
Xiangqi |
Chinese Chess |
Makruk |
Thai Chess |
1. Chess vs Makruk — Basic
Different variants per player, no time control.
TOML
[meta]
name = "East Meets West"
comment = "Cross-variant exhibition"
[sides.first]
name = "Western Champion"
variant = "Chess"
[sides.second]
name = "Thai Champion"
variant = "Makruk"
[setup]
feen = "rnsmk^snr/8/pppppppp/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/m"
[[plies]]
pmn = "e2-e4"
[[plies]]
pmn = "d6-d5"
[[plies]]
pmn = "e4+d5"
[[plies]]
pmn = "e6+d5"
JSON
{
"meta": {
"name": "East Meets West",
"comment": "Cross-variant exhibition"
},
"sides": {
"first": {
"name": "Western Champion",
"variant": "Chess"
},
"second": {
"name": "Thai Champion",
"variant": "Makruk"
}
},
"setup": {
"feen": "rnsmk^snr/8/pppppppp/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/m"
},
"plies": [
{ "pmn": "e2-e4" },
{ "pmn": "d6-d5" },
{ "pmn": "e4+d5" },
{ "pmn": "e6+d5" }
]
}
Note: The FEEN style-turn C/m indicates first player uses Chess (C), second uses Makruk (m).
2. Chess vs Shōgi — With Drops
Chess player vs Shōgi player, demonstrating shōgi drops.
TOML
[meta]
name = "Hybrid Match"
event = "Cross-Variant Championship"
[sides.first]
name = "Chess Master"
variant = "Chess"
[sides.second]
name = "Shogi Master"
variant = "Shogi"
[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 P/ C/s"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 5000
[[plies]]
pmn = "P*e5"
elapsed_ms = 3000
comment = "Shogi player drops a pawn"
[[plies]]
pmn = "d2-d4"
elapsed_ms = 8000
[[plies]]
pmn = "e5+d4"
elapsed_ms = 4000
JSON
{
"meta": {
"name": "Hybrid Match",
"event": "Cross-Variant Championship"
},
"sides": {
"first": {
"name": "Chess Master",
"variant": "Chess"
},
"second": {
"name": "Shogi Master",
"variant": "Shogi"
}
},
"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 P/ C/s"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 5000 },
{ "pmn": "P*e5", "elapsed_ms": 3000, "comment": "Shogi player drops a pawn" },
{ "pmn": "d2-d4", "elapsed_ms": 8000 },
{ "pmn": "e5+d4", "elapsed_ms": 4000 }
]
}
Note: The drop notation (P*e5) is valid for the Shōgi player but would be illegal for the Chess player.
3. Chess vs Xiangqi
Chess player vs Xiangqi player.
TOML
[sides.first]
name = "Western Player"
variant = "Chess"
[sides.second]
name = "Chinese Player"
variant = "Xiangqi"
[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/x"
[[plies]]
pmn = "e2-e4"
[[plies]]
pmn = "c7-c6"
[[plies]]
pmn = "d2-d4"
[[plies]]
pmn = "d7-d5"
JSON
{
"sides": {
"first": {
"name": "Western Player",
"variant": "Chess"
},
"second": {
"name": "Chinese Player",
"variant": "Xiangqi"
}
},
"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/x"
},
"plies": [
{ "pmn": "e2-e4" },
{ "pmn": "c7-c6" },
{ "pmn": "d2-d4" },
{ "pmn": "d7-d5" }
]
}
4. Cross-Variant with Time Control
A cross-variant game with Fischer time control.
TOML
[meta]
event = "Exhibition Match"
started_at = 2025-01-27T15:00:00Z
[[periods]]
duration_ms = 600000
increment_ms = 5000
[sides.first]
name = "Grandmaster"
variant = "Chess"
elo = 2650
[sides.second]
name = "Professional"
variant = "Shogi"
elo = 2500
[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/s"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 5000
[[plies]]
pmn = "d7-d5"
elapsed_ms = 8000
[[plies]]
pmn = "e4+d5"
elapsed_ms = 3000
[[plies]]
pmn = "P*d5"
elapsed_ms = 4000
comment = "Drops the captured pawn back"
[outcome]
result = "1/2-1/2"
JSON
{
"meta": {
"event": "Exhibition Match",
"started_at": "2025-01-27T15:00:00Z"
},
"periods": [
{ "duration_ms": 600000, "increment_ms": 5000 }
],
"sides": {
"first": {
"name": "Grandmaster",
"variant": "Chess",
"elo": 2650
},
"second": {
"name": "Professional",
"variant": "Shogi",
"elo": 2500
}
},
"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/s"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 5000 },
{ "pmn": "d7-d5", "elapsed_ms": 8000 },
{ "pmn": "e4+d5", "elapsed_ms": 3000 },
{ "pmn": "P*d5", "elapsed_ms": 4000, "comment": "Drops the captured pawn back" }
],
"outcome": {
"result": "1/2-1/2"
}
}
5. Handicap Match — Different Time Budgets
Cross-variant with time handicap (stronger player gets less time).
TOML
[meta]
name = "Handicap Match"
comment = "Expert gets 5 minutes, beginner gets 15 minutes"
[[periods]]
duration_ms = 300000
[sides.first]
name = "Expert"
variant = "Chess"
[sides.second]
name = "Beginner"
variant = "Makruk"
[setup]
feen = "rnsmk^snr/8/pppppppp/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/m"
[[plies]]
pmn = "e2-e4"
elapsed_ms = 9000
[[plies]]
pmn = "d6-d5"
elapsed_ms = 21000
[[plies]]
pmn = "e4+d5"
elapsed_ms = 5000
[outcome]
result = "1-0"
JSON
{
"meta": {
"name": "Handicap Match",
"comment": "Expert gets 5 minutes, beginner gets 15 minutes"
},
"periods": [
{ "duration_ms": 300000 }
],
"sides": {
"first": {
"name": "Expert",
"variant": "Chess"
},
"second": {
"name": "Beginner",
"variant": "Makruk"
}
},
"setup": {
"feen": "rnsmk^snr/8/pppppppp/8/8/8/+P+P+P+P+P+P+P+P/+RNBQ+K^BN+R / C/m"
},
"plies": [
{ "pmn": "e2-e4", "elapsed_ms": 9000 },
{ "pmn": "d6-d5", "elapsed_ms": 21000 },
{ "pmn": "e4+d5", "elapsed_ms": 5000 }
],
"outcome": {
"result": "1-0"
}
}
Note: For asymmetric time controls, the implementation would need to track each player’s remaining time separately based on ply alternation.
6. Shōgi vs Makruk
Two Asian chess variants facing each other.
TOML
[meta]
name = "Asian Chess Battle"
[sides.first]
name = "Japanese Player"
variant = "Shogi"
[sides.second]
name = "Thai Player"
variant = "Makruk"
[setup]
feen = "lnsgk^gsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGK^GSNL / S/m"
[[plies]]
pmn = "7g-7f"
[[plies]]
pmn = "d6-d5"
[[plies]]
pmn = "2g-2f"
[[plies]]
pmn = "c6-c5"
JSON
{
"meta": {
"name": "Asian Chess Battle"
},
"sides": {
"first": {
"name": "Japanese Player",
"variant": "Shogi"
},
"second": {
"name": "Thai Player",
"variant": "Makruk"
}
},
"setup": {
"feen": "lnsgk^gsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGK^GSNL / S/m"
},
"plies": [
{ "pmn": "7g-7f" },
{ "pmn": "d6-d5" },
{ "pmn": "2g-2f" },
{ "pmn": "c6-c5" }
]
}
Validation Rules
In cross-variant games:
- Each ply is validated against the acting player’s variant
- Drops (
*) are valid for Shōgi but not for Chess - Piece movements follow each variant’s rules
- Drops (
- The FEEN style-turn encodes both variants
- First letter (uppercase): first player’s variant
- Second letter (lowercase): second player’s variant
- PMN notation is consistent
- The same operators (
-,+,*,~,=) work across all variants - Coordinate systems follow CELL specification
- The same operators (
See Also
- Traditional Games — Single-variant examples
- Special Moves — PMN operators for drops, promotions
- Complete Game Records — Full-featured examples
