X-Git-Url: https://git.auder.net/js/rpsls.js?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FPandemonium.js;h=f4ae3c44a55ae47d3f4446e74cd0d42f660e8963;hb=7721a36a50b840b1dfe4cfaf5ed7abcbf525ffd5;hp=34dc77e1885687686da6a16be2b83391f86fdb41;hpb=723262f9b77ed0f916e5b9fcbfbae5ddfe94925c;p=vchess.git diff --git a/client/src/variants/Pandemonium.js b/client/src/variants/Pandemonium.js index 34dc77e1..f4ae3c44 100644 --- a/client/src/variants/Pandemonium.js +++ b/client/src/variants/Pandemonium.js @@ -287,8 +287,12 @@ export class PandemoniumRules extends ChessRules { const firstRank = (this.movesCount == 0 ? 9 : 0); // TODO: initDestFile currently hardcoded for deterministic setup const initDestFile = new Map([[1, 2], [8, 7]]); - // Only option is knight / bishop swap: - if (x == firstRank && !!initDestFile.get(y)) { + // Only option is knight --> bishop swap: + if ( + x == firstRank && + !!initDestFile.get(y) && + this.getPiece(x, y) == V.KNIGHT + ) { const destFile = initDestFile.get(y); return [ new Move({ @@ -585,11 +589,13 @@ export class PandemoniumRules extends ChessRules { getAllValidMoves() { let moves = super.getAllPotentialMoves(); - const color = this.turn; - for (let i = 0; i < V.RESERVE_PIECES.length; i++) { - moves = moves.concat( - this.getReserveMoves([V.size.x + (color == "w" ? 0 : 1), i]) - ); + if (this.movesCount >= 2) { + const color = this.turn; + for (let i = 0; i < V.RESERVE_PIECES.length; i++) { + moves = moves.concat( + this.getReserveMoves([V.size.x + (color == "w" ? 0 : 1), i]) + ); + } } return this.filterValid(moves); } @@ -656,7 +662,7 @@ export class PandemoniumRules extends ChessRules { if (move.vanish.length == 0) // Drop unpromoted piece: this.reserve[color][move.appear[0].p]--; - else if (move.vanish.length == 2) + else if (move.vanish.length == 2 && move.appear.length == 1) // May capture a promoted piece: this.reserve[color][V.MayDecode(move.vanish[1].p)]++; } @@ -679,7 +685,7 @@ export class PandemoniumRules extends ChessRules { const color = move.appear[0].c; if (move.vanish.length == 0) this.reserve[color][move.appear[0].p]++; - else if (move.vanish.length == 2) + else if (move.vanish.length == 2 && move.appear.length == 1) this.reserve[color][V.MayDecode(move.vanish[1].p)]--; }