The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
kings_rook

The rook home position on the king's side.

queens_rook

The rook home position on the queen's side.

Vectors

vectors may be added, subtracted, and multiplied by a constant.

ahead

The space immediately `ahead', meaning away from the home row of the color.

Compound predicates

white_passant

(enemy(left) and pawn(left) and last(left + [0, 2], left)) or (enemy(right) and pawn(right) and last(right + [0, 2], right))

black_passant

(enemy(left) and pawn(left) and last(left - [0, 2], left)) or (enemy(right) and pawn(right) and last(right - [0, 2], right))

passant

(white and white_passant) or (black and black_passant)

The default action is for the piece to move to the destination and the enemy piece at that location to be removed. For specialty moves, these can be overridden.

It is assumed that any moves generated by these rules that produce off-board result positions are rejected.

Actions

mutate

After the move, mutat to the designated piece (used for pawn promotion in standard chess).

Formalized Plies

Pawns:

    [ahead]         if empty;
    [ahead * 2]     if empty and clear and home;
    [ahead + left]  if enemy or passant;
    [ahead + right] if enemy or passant.

Rooks:

    [0, ?]   if clear and not friend;
    [?, 0]   if clear and not friend.

Knights:

    [+1, +2] if not friend;
    [+1, -2] if not friend;
    [-1, +2] if not friend;
    [-1, -2] if not friend;
    [+2, +1] if not friend;
    [+2, -1] if not friend;
    [-2, +1] if not friend;
    [-2, -1] if not friend.

Bishops:

    [?,  ?]  if clear and not friend;
    [?, -?]  if clear and not friend.

Queens:

    [0, ?]   if clear and not friend;
    [?, 0]   if clear and not friend.
    [?, ?]   if clear and not friend;
    [?, -?]  if clear and not friend.

Kings:

    [-1, -1] if not friend and not threat;
    [-1,  0] if not friend and not threat;
    [-1, +1] if not friend and not threat;
    [ 0, -1] if not friend and not threat;
    [ 0, +1] if not friend and not threat;
    [+1, -1] if not friend and not threat;
    [+1,  0] if not friend and not threat;
    [+1, +1] if not friend and not threat;
    [king * 2]  if home and home[kings_rook] and clear[king, kings_rook];
    [queen * 3] if home and home[queens_rook] and clear[king, queens_rook];

We still need notations for the rook movements during castling.

Globally: not threat[king];

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 405:

'=item' outside of any '=over'

Around line 427:

You forgot a '=back' before '=head2'