const coords = Object.keys(this.ispawn);
if (coords.length == 0)
return "-";
- return coords.map(C.CoordsToSquare).join(",");
+ return coords.join(",");
}
// Set flags from fen (castle: white a,h then black a,h)
}
else
this.r_pieces = { 'w': {}, 'b': {} };
- let chessboard =
- document.getElementById(this.containerId).querySelector(".chessboard");
+ let container = document.getElementById(this.containerId);
if (!r)
- r = chessboard.getBoundingClientRect();
+ r = container.querySelector(".chessboard").getBoundingClientRect();
for (let c of colors) {
if (!this.reserve[c])
continue;
// NOTE: +1 fix display bug on Firefox at least
rcontainer.style.width = (nbR * sqResSize + 1) + "px";
rcontainer.style.height = sqResSize + "px";
- chessboard.appendChild(rcontainer);
+ container.appendChild(rcontainer);
for (let p of Object.keys(this.reserve[c])) {
if (this.reserve[c][p] == 0)
continue;
startPiece.style.opacity = "1";
const offset = getOffset(e);
const landingElt = document.elementFromPoint(offset.x, offset.y);
- const sq = this.idToCoords(landingElt.id);
+ const sq = landingElt ? this.idToCoords(landingElt.id) : undefined;
if (sq) {
const [i, j] = sq;
// NOTE: clearly suboptimal, but much easier, and not a big deal.
this.options["crazyhouse"] &&
(!this.options["rifle"] || !move.capture)
) {
+ const destSquare = C.CoordsToSquare(move.end);
if (this.ispawn[initSquare]) {
delete this.ispawn[initSquare];
- this.ispawn[C.CoordsToSquare(move.end)] = true;
+ this.ispawn[destSquare] = true;
}
else if (
move.vanish[0].p == "p" &&
move.appear[0].p != "p"
) {
- this.ispawn[C.CoordsToSquare(move.end)] = true;
+ this.ispawn[destSquare] = true;
+ }
+ else if (
+ this.ispawn[destSquare] &&
+ this.getColor(move.end.x, move.end.y) != move.vanish[0].c
+ ) {
+ move.vanish[1].p = "p";
+ delete this.ispawn[destSquare];
}
}
}
(this.options["progressive"] && this.subTurn <= this.movesCount)
) {
const oppKingPos = this.searchKingPos(oppCol);
- if (oppKingPos[0] >= 0 && !this.underCheck(oppKingPos, color)) {
+ if (
+ oppKingPos[0] >= 0 &&
+ (
+ this.options["taking"] ||
+ !this.underCheck(oppKingPos, color)
+ )
+ ) {
this.subTurn++;
return;
}
playVisual(move, r) {
move.vanish.forEach(v => {
if (!this.enlightened || this.enlightened[v.x][v.y]) {
- this.g_pieces[v.x][v.y].remove();
+ // TODO: next "if" shouldn't be required
+ if (this.g_pieces[v.x][v.y])
+ this.g_pieces[v.x][v.y].remove();
this.g_pieces[v.x][v.y] = null;
}
});
const dropMove = (typeof i1 == "string");
const startArray = (dropMove ? this.r_pieces : this.g_pieces);
let startPiece = startArray[i1][j1];
+ // TODO: next "if" shouldn't be required
+ if (!startPiece) {
+ callback();
+ return;
+ }
let chessboard =
document.getElementById(this.containerId).querySelector(".chessboard");
const clonePiece = (