// Transformation computed without taking union into account
const up = this.getUnionPieces(initColor, initPiece);
let args = [tr.p, up[oppCol]];
- if (['a', 'v'].includes(initColor)) args = args.reverse();
+ if (
+ ['a', 'v'].includes(initColor) ||
+ // HACK: "ba" piece = two pawns, black controling.
+ // If promoting, must artificially imagine color was 'a':
+ (initPiece == 'a' && initColor == 'b')
+ ) {
+ args = args.reverse();
+ }
const capturer = (['a', 'b'].includes(initColor) ? 'b' : 'w');
const cp = this.getUnionCode(args[0], args[1], capturer);
tr.c = cp.c;
if (!m.end.released) return true;
// Check for repetitions:
V.PlayOnBoard(this.board, m);
- const newState = { piece: m.end.released, position: this.getBaseFen() };
+ const newState = {
+ piece: m.end.released,
+ square: { x: m.end.x, y: m.end.y },
+ position: this.getBaseFen()
+ };
const repet =
this.repetitions.some(r => {
return (
r.piece == newState.piece &&
+ (
+ r.square.x == newState.square.x &&
+ r.square.y == newState.square.y
+ ) &&
r.position == newState.position
);
});
this.repetitions.push(
{
piece: move.end.released,
+ square: { x: move.end.x, y: move.end.y },
position: this.getBaseFen()
}
);