X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FMakpong.js;fp=client%2Fsrc%2Fvariants%2FMakpong.js;h=885de3efd472556f65fa095d5e3b814989170e9a;hp=057666513343a3ca6fea9bc6f62ddd61969dd4d0;hb=f5cd0fb81ec9bd790d812c9ad02587e50427fcdf;hpb=7dd295eca32113398e4dd57eb0398a4f0531864d diff --git a/client/src/variants/Makpong.js b/client/src/variants/Makpong.js index 05766651..885de3ef 100644 --- a/client/src/variants/Makpong.js +++ b/client/src/variants/Makpong.js @@ -4,11 +4,47 @@ export class MakpongRules extends MakrukRules { filterValid(moves) { const color = this.turn; - if (this.underCheck(color)) { - // Filter out all moves involving king - return super.filterValid(moves.filter(m => m.vanish[0].p != V.KING)); - } - return super.filterValid(moves); + if (!this.underCheck(color)) return super.filterValid(moves); + // Filter out all moves involving king, except for capturing a + // potential attacker. + const pawnAttack = (color == 'w' ? -1 : 1); + return super.filterValid(moves.filter(m => { + const p = (m.vanish.length == 2 ? m.vanish[1].p : null); + return ( + m.vanish[0].p != V.KING || + ( + m.vanish.length == 2 && + ( + ( + p == V.PAWN && + m.end.x - m.start.x == pawnAttack && + Math.abs(m.end.y - m.start.y) == 1 + ) + || + ( + p == V.ROOK && + (m.end.x == m.start.x || m.end.y == m.start.y) + ) + || + ( + [V.PROMOTED, V.QUEEN].includes(p) && + m.end.x != m.start.x && m.end.y != m.start.y + ) + || + ( + p == V.BISHOP && + ( + m.end.x - m.start.x == pawnAttack || + ( + m.end.x - m.start.x == -pawnAttack && + Math.abs(m.end.y - m.start.y) == 1 + ) + ) + ) + ) + ) + ); + })); } };