X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FEightpieces.js;h=42df93e3da04233415da1ed7e88150fc561d05d8;hb=7e476ce4b299c0a35529b80c730a452992453cc6;hp=81d69d813674a56e7e9cc1a6f97513b8f3b17868;hpb=a68362420a3a92099dfaacea10f6cbd579161183;p=vchess.git diff --git a/client/src/variants/Eightpieces.js b/client/src/variants/Eightpieces.js index 81d69d81..42df93e3 100644 --- a/client/src/variants/Eightpieces.js +++ b/client/src/variants/Eightpieces.js @@ -175,7 +175,8 @@ export class EightpiecesRules extends ChessRules { 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); @@ -761,6 +762,7 @@ export class EightpiecesRules extends ChessRules { super.isAttacked(sq, color) || this.isAttackedByLancer(sq, color) || this.isAttackedBySentry(sq, color) + // The jailer doesn't capture. ); } @@ -836,6 +838,7 @@ export class EightpiecesRules extends ChessRules { // 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); @@ -854,7 +857,7 @@ export class EightpiecesRules extends ChessRules { 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; } @@ -1028,6 +1031,13 @@ export class EightpiecesRules extends ChessRules { 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; } };