if (c == 'b') {
// Check if white sentry is on the same color as ours.
// If yes: swap bishop and sentry positions.
- if ((pieces['w'].indexOf('s') - sentryPos) % 2 == 0)
+ // NOTE: test % 2 == 1 because there are 7 slashes.
+ if ((pieces['w'].indexOf('s') - sentryPos) % 2 == 1)
[bishopPos, sentryPos] = [sentryPos, bishopPos];
}
positions.splice(Math.max(randIndex, randIndex_tmp), 1);
super.isAttacked(sq, color) ||
this.isAttackedByLancer(sq, color) ||
this.isAttackedBySentry(sq, color)
+ // The jailer doesn't capture.
);
}
// Helper to check sentries attacks:
selfAttack([x1, y1], [x2, y2]) {
const color = this.getColor(x1, y1);
+ const oppCol = V.GetOppCol(color);
const sliderAttack = (allowedSteps, lancer) => {
const deltaX = x2 - x1,
absDeltaX = Math.abs(deltaX);
if (
// NOTE: no need to check OnBoard in this special case
(!lancer && this.board[sq[0]][sq[1]] != V.EMPTY) ||
- (!!lancer && this.getColor(sq[0], sq[1]) != color)
+ (!!lancer && this.getColor(sq[0], sq[1]) == oppCol)
) {
return false;
}
if (Object.keys(V.LANCER_DIRNAMES).includes(move.vanish[0].p))
// Lancer: add direction info
notation += "=" + V.LANCER_DIRNAMES[move.appear[0].p];
+ else if (
+ move.vanish[0].p == V.PAWN &&
+ Object.keys(V.LANCER_DIRNAMES).includes(move.appear[0].p)
+ ) {
+ // Fix promotions in lancer:
+ notation = notation.slice(0, -1) + "L:" + V.LANCER_DIRNAMES[move.appear[0].p];
+ }
return notation;
}
};