Sashité for Developers
  1. Sashité for Developers
  2. Specifications
  3. PCN
  4. 1.0.0
  5. Examples
  6. 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

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:

  1. 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
  2. The FEEN style-turn encodes both variants
    • First letter (uppercase): first player’s variant
    • Second letter (lowercase): second player’s variant
  3. PMN notation is consistent
    • The same operators (-, +, *, ~, =) work across all variants
    • Coordinate systems follow CELL specification

See Also