X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fbase_rules.js;h=177fc9b606836a99a390b724fa77d444bb297cc0;hb=c7550017d88ff6eb32e2c76a271a7f9edc4a3bf6;hp=e142839997a1572b5ec441126cb3d71ef0ab8989;hpb=57d9b2c4f08948bd5a5fc4a01a0b62d4c80523e2;p=vchess.git diff --git a/client/src/base_rules.js b/client/src/base_rules.js index e1428399..177fc9b6 100644 --- a/client/src/base_rules.js +++ b/client/src/base_rules.js @@ -197,8 +197,8 @@ export const ChessRules = class ChessRules { } // Path to promotion pieces (usually the same) - getPPpath(b) { - return this.getPpath(b); + getPPpath(m) { + return this.getPpath(m.appear[0].c + m.appear[0].p); } // Aggregates flags into one object @@ -224,9 +224,11 @@ export const ChessRules = class ChessRules { const s = move.start, e = move.end; if ( - Math.abs(s.x - e.x) == 2 && s.y == e.y && - (move.appear.length > 0 && move.appear[0].p == V.PAWN) + Math.abs(s.x - e.x) == 2 && + // Next conditions for variants like Atomic or Rifle, Recycle... + (move.appear.length > 0 && move.appear[0].p == V.PAWN) && + (move.vanish.length > 0 && move.vanish[0].p == V.PAWN) ) { return { x: (s.x + e.x) / 2, @@ -941,6 +943,7 @@ export const ChessRules = class ChessRules { } // Stop at the first move found + // TODO: not really, it explores all moves from a square but one would suffice. atLeastOneMove() { const color = this.turn; for (let i = 0; i < V.size.x; i++) { @@ -1091,7 +1094,7 @@ export const ChessRules = class ChessRules { const c = V.GetOppCol(this.turn); const firstRank = (c == "w" ? V.size.x - 1 : 0); // Update castling flags if rooks are moved - const oppCol = V.GetOppCol(c); + const oppCol = this.turn; const oppFirstRank = V.size.x - 1 - firstRank; if (piece == V.KING && move.appear.length > 0) this.castleFlags[c] = [V.size.y, V.size.y];