X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FClorange.js;h=d4ec1ef375b633b00d94d78f53db11f22c61ef01;hb=7721a36a50b840b1dfe4cfaf5ed7abcbf525ffd5;hp=4c54e941ea2bf48f2feb33e4fe734f9b51fda073;hpb=e50a802531b99829c533f22ecd21e359e7e1e049;p=vchess.git diff --git a/client/src/variants/Clorange.js b/client/src/variants/Clorange.js index 4c54e941..d4ec1ef3 100644 --- a/client/src/variants/Clorange.js +++ b/client/src/variants/Clorange.js @@ -2,6 +2,7 @@ import { ChessRules, PiPo, Move } from "@/base_rules"; import { ArrayFun } from "@/utils/array"; export class ClorangeRules extends ChessRules { + static IsGoodFen(fen) { if (!ChessRules.IsGoodFen(fen)) return false; const fenParsed = V.ParseFen(fen); @@ -168,7 +169,7 @@ export class ClorangeRules extends ChessRules { return this.getReserveMoves([x, y]); // Standard moves switch (this.getPiece(x, y)) { - case 's': return super.getPotentialPawnMoves([x, y]); + case 's': return this.getPotentialPawnMoves([x, y]); case 'u': return super.getPotentialRookMoves([x, y]); case 'o': return super.getPotentialKnightMoves([x, y]); case 'c': return super.getPotentialBishopMoves([x, y]); @@ -180,13 +181,17 @@ export class ClorangeRules extends ChessRules { getPotentialPawnMoves(sq) { let moves = super.getPotentialPawnMoves(sq); - moves.forEach(m => { - if (m.vanish[0].p == 's' && m.appear[0].p != 's') { - // Promotion pieces should be non-violent as well: - const pIdx = ChessRules.PIECES.findIndex(p => p == m.appear[0].p) - m.appear[0].p = V.NON_VIOLENT[pIdx]; - } - }); + if (moves.length > 0 && moves[0].vanish[0].p == 's') { + // Remove captures for non-violent pawns: + moves = moves.filter(m => m.vanish.length == 1); + moves.forEach(m => { + if (m.appear[0].p != 's') { + // Promotion pieces should be non-violent as well: + const pIdx = ChessRules.PIECES.findIndex(p => p == m.appear[0].p) + m.appear[0].p = V.NON_VIOLENT[pIdx]; + } + }); + } return moves; } @@ -310,4 +315,5 @@ export class ClorangeRules extends ChessRules { move.appear[0].p != V.PAWN ? move.appear[0].p.toUpperCase() : ""; return piece + "@" + V.CoordsToSquare(move.end); } + };