};
}
+ static GetColorClass(c) {
+ if (c == 'c')
+ return "checkered";
+ return C.GetColorClass(c);
+ }
+
static board2fen(b) {
const checkered_codes = {
p: "s",
return super.fen2board(f);
}
+ genRandInitBaseFen() {
+ let res = super.genRandInitBaseFen();
+ res.o.flags += "1".repeat(16); //pawns flags
+ return res;
+ }
+
getPartFen(o) {
return Object.assign(
{
return false; //forbidden 2-squares jumps
}
if (
- this.board[m.end.x][m.end.y] == V.EMPTY &&
+ this.board[m.end.x][m.end.y] == "" &&
m.vanish.length == 2 &&
this.getColor(m.start.x, m.start.y) == "c"
) {
filterValid(moves) {
const color = this.turn;
- if (stage == 2 && this.sideCheckered == color)
+ if (this.stage == 2 && this.sideCheckered == color)
// Checkered cannot be under check (no king)
return moves;
let kingPos = super.searchKingPos(color);
return moves.filter(m => {
this.playOnBoard(m);
let res = true;
- if (stage == 1)
+ if (this.stage == 1)
res = !this.oppositeMoves(this.cmove, m);
if (res && m.appear.length > 0)
res = !this.underCheck(kingPos, oppCols);
underCheck(square_s, oppCols) {
if (this.stage == 2 && oppCol != this.sideCheckered)
return false; //checkered pieces is me, I'm not under check
- return super.underAttack(square_s, oppCols);
+ return square_s.some(sq => super.underAttack(sq, oppCols));
}
prePlay(move) {
super.prePlay(move);
if (
[1, 6].includes(move.start.x) &&
- move.vanish[0].p == V.PAWN &&
+ move.vanish[0].p == 'p' &&
Math.abs(move.end.x - move.start.x) == 2
) {
// This move turns off a 2-squares pawn flag