import { ChessRules, PiPo, Move } from "@/base_rules";
+import { SuicideRules } from "@/variants/Suicide";
export class SuctionRules extends ChessRules {
+ static get PawnSpecs() {
+ return Object.assign(
+ {},
+ ChessRules.PawnSpecs,
+ // No promotions:
+ { promotions: [V.PAWN] }
+ );
+ }
+
static get HasFlags() {
return false;
}
static IsGoodFen(fen) {
if (!ChessRules.IsGoodFen(fen)) return false;
const fenParts = fen.split(" ");
- if (fenParts.length != 6) return false;
- if (fenParts[5] != "-" && !fenParts[5].match(/^([a-h][1-8]){2}$/))
+ if (fenParts.length != 5) return false;
+ if (fenParts[4] != "-" && !fenParts[4].match(/^([a-h][1-8]){2}$/))
return false;
return true;
}
Math.abs(epSquare.y - y) == 1
) {
let enpassantMove = this.getBasicMove([x, y], [epSquare.x, epSquare.y]);
- const oppCol = V.GetOppCol(color);
+ const oppCol = V.GetOppCol(this.turn);
enpassantMove.vanish.push({
x: x,
y: epSquare.y,
// Does m2 un-do m1 ? (to disallow undoing captures)
oppositeMoves(m1, m2) {
return (
- m1 &&
+ !!m1 &&
m2.vanish.length == 2 &&
m1.start.x == m2.start.x &&
m1.end.x == m2.end.x &&
filterValid(moves) {
if (moves.length == 0) return [];
- const color = this.turn;
return moves.filter(m => {
const L = this.cmoves.length; //at least 1: init from FEN
return !this.oppositeMoves(this.cmoves[L - 1], m);
static GenRandInitFen(randomness) {
// Add empty cmove:
- return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "- -";
+ return SuicideRules.GenRandInitFen(randomness) + " -";
}
- getFen() {
+ getCmoveFen() {
const L = this.cmoves.length;
- const cmoveFen = !this.cmoves[L - 1]
- ? "-"
- : ChessRules.CoordsToSquare(this.cmoves[L - 1].start) +
- ChessRules.CoordsToSquare(this.cmoves[L - 1].end);
- return super.getFen() + " " + cmoveFen;
+ return (
+ !this.cmoves[L - 1]
+ ? "-"
+ : ChessRules.CoordsToSquare(this.cmoves[L - 1].start) +
+ ChessRules.CoordsToSquare(this.cmoves[L - 1].end)
+ );
+ }
+
+ getFen() {
+ return super.getFen() + " " + this.getCmoveFen();
+ }
+
+ getFenForRepeat() {
+ return super.getFenForRepeat() + "_" + this.getCmoveFen();
}
postPlay(move) {