return V.CanFlip;
}
+ // Some variants require turn indicator
+ // (generally when analysis or flip is diabled)
+ static get ShowTurn() {
+ return !V.CanAnalyze || V.ShowMoves != "all" || !V.CanFlip;
+ }
+ get showTurn() {
+ return V.ShowTurn;
+ }
+
static get IMAGE_EXTENSION() {
// All pieces should be in the SVG format
return ".svg";
return V.CoordToColumn(coords.y) + (V.size.x - coords.x);
}
- // Path to pieces
+ // Path to pieces (standard ones in pieces/ folder)
getPpath(b) {
- return b; //usual pieces in pieces/ folder
+ return b;
}
// Path to promotion pieces (usually the same)
enpassantMove.vanish.push({
x: x,
y: epSquare.y,
+ // Captured piece is usually a pawn, but next line seems harmless
p: this.getPiece(x, epSquare.y),
c: this.getColor(x, epSquare.y)
});
) {
const flagIdx = (move.start.y == this.castleFlags[c][0] ? 0 : 1);
this.castleFlags[c][flagIdx] = V.size.y;
- } else if (
+ }
+ // NOTE: not "else if" because a rook could take an opposing rook
+ if (
move.end.x == oppFirstRank && //we took opponent rook?
this.castleFlags[oppCol].includes(move.end.y)
) {
}
let candidates = [0];
- for (let j = 1; j < moves1.length && moves1[j].eval == moves1[0].eval; j++)
- candidates.push(j);
+ for (let i = 1; i < moves1.length && moves1[i].eval == moves1[0].eval; i++)
+ candidates.push(i);
return moves1[candidates[randInt(candidates.length)]];
}