Sashité for Developers
  1. Sashité for Developers
  2. Specifications
  3. PAN
  4. 1.0.0

Portable Action Notation (PAN) Specification


Overview

Portable Action Notation (PAN) is a human-readable string format for representing atomic actions in abstract strategy board games. PAN provides an intuitive operator-based syntax to describe how pieces move, capture, transform, and interact on game boards.

Key Features

Quick Examples

e2-e4       # Move to empty square
d1+f3       # Capture at destination
e1~g1       # Castling (with side effects)
P*e5        # Drop piece from reserve
e7-e8=Q     # Move with promotion
...         # Pass turn

Terminology

For complete definitions of terms used in this document, see the Glossary.

Key terms:


Dependencies

PAN integrates two Sashité specifications:


Format Structure

Basic Syntax

A PAN string follows this general pattern:

[piece][operator][position][transformation]

Components vary by action type:

Component Description Examples
Piece EPIN identifier (optional) P, +R, k'
Operator Action type indicator -, +, ~, *, ., =
Position CELL coordinate(s) e4, h8
Transformation Final piece state =Q, =+S

Operator Reference

Operator Name Primary Use Visual Mnemonic
- Dash Move to empty square Path between points
+ Plus Capture at destination Addition/taking
~ Tilde Special move with effects Wave/complexity
* Asterisk Drop to empty square Placement marker
. Period Drop with capture Point of impact
= Equals Transform piece State change

Action Categories

1. Pass Action

Syntax: ...

The simplest action - voluntarily ending your turn without moving.

...

Effects:

Common in: Go


2. Movement Actions

Actions that relocate a piece from one square to another.

Move to Empty Square (-)

Syntax: <source>-<destination>[=<piece>]

Standard piece movement to an unoccupied square.

e2-e4        # Simple move
e7-e8=Q      # Move with promotion

Effects:

Capture at Destination (+)

Syntax: <source>+<destination>[=<piece>]

Movement that captures the piece at the destination.

d1+f3        # Queen captures at f3
b7+a8=R      # Pawn captures and promotes

Effects:

Special Movement (~)

Syntax: <source>~<destination>[=<piece>]

Movement that triggers implicit rule-based effects.

e1~g1        # Castling (rook moves implicitly)
e5~f6        # En passant (pawn at f5 captured implicitly)

Effects:

Design note: The ~ operator signals that this action has effects beyond simple movement. The exact effects depend on game rules and context.


3. Capture Actions

Actions that remove pieces without the capturer moving.

Static Capture (+)

Syntax: +<square>

Removes a piece without any movement.

+d4          # Remove piece at d4

Effects:


4. Drop Actions

Actions that place pieces from reserves onto the board.

Drop to Empty Square (*)

Syntax: [<piece>]*<destination>[=<piece>]

Places a reserve piece on an empty square.

P*e5         # Drop pawn at e5
*d4          # Drop (piece type clear from context)
S*c3=+S      # Drop silver with immediate promotion

Effects:

Drop with Capture (.)

Syntax: [<piece>].<destination>[=<piece>]

Places a piece while capturing the occupant.

L.b4         # Drop lance, capturing at b4

Effects:


5. In-Place Transformations

Actions that modify a piece without moving it.

Modification (=)

Syntax: <square>=<piece>

Changes a piece’s attributes at its current location.

e4=+P        # Enhance piece at e4
c3=k'        # Change style at c3

Effects:


Grammar Specification

EBNF Grammar

pan = pass
    | movement
    | static-capture
    | drop
    | modification

pass = "..."

movement = move-quiet | move-capture | move-special

move-quiet   = square "-" square [transformation]
move-capture = square "+" square [transformation]
move-special = square "~" square [transformation]

static-capture = "+" square

drop = drop-quiet | drop-capture
drop-quiet   = [piece] "*" square [transformation]
drop-capture = [piece] "." square [transformation]

modification = square "=" piece

transformation = "=" piece

square = cell     (* Per CELL specification *)
piece  = epin     (* Per EPIN specification *)

Validation Rules

Syntactic Validation

  1. Format compliance: Must match grammar specification
  2. Component validity:
    • Coordinates must be valid CELL format
    • Pieces must be valid EPIN format
    • Operators must be recognized symbols

Semantic Guidelines

  1. Meaningful actions: Should represent observable state changes
  2. Operator semantics:
    • Use - for moves to empty squares
    • Use + for captures
    • Use ~ for moves with implicit effects
  3. Distinct positions: Source and destination should differ for movements
  4. Transformation changes: Modified pieces should differ from original

Context Dependencies

Some validations require game context:


Design Philosophy

Principle of Least Surprise

Operators were chosen for intuitive visual associations:

Separation of Concerns

PAN describes what happens (the action), not:

This separation allows PAN to work with any rule system while maintaining consistent notation.

Progressive Disclosure

The notation supports both simple and complex usage:


Limitations and Scope

Well-Suited For

Not Designed For

For these cases, consider alternative notations or extensions.


Examples

See PAN Examples for comprehensive usage patterns across different game types.


Reference Implementations

Ruby