X-Git-Url: https://git.auder.net/game/%22%20%20%20data.gameInfo.gameId%20%20%20%22?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FPandemonium.js;h=af87b270c2f9c83c2a213b3b2da9e4eb8eb67b18;hb=b2511e7ed206464ec369920277f474289c33ec66;hp=34dc77e1885687686da6a16be2b83391f86fdb41;hpb=723262f9b77ed0f916e5b9fcbfbae5ddfe94925c;p=vchess.git diff --git a/client/src/variants/Pandemonium.js b/client/src/variants/Pandemonium.js index 34dc77e1..af87b270 100644 --- a/client/src/variants/Pandemonium.js +++ b/client/src/variants/Pandemonium.js @@ -223,6 +223,7 @@ export class PandemoniumRules extends ChessRules { getReserveMoves([x, y]) { const color = this.turn; + const oppCol = V.GetOppCol(color); const p = V.RESERVE_PIECES[y]; if (this.reserve[color][p] == 0) return []; const bounds = (p == V.PAWN ? [1, V.size.x - 1] : [0, V.size.x]); @@ -287,8 +288,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({ @@ -537,7 +542,7 @@ export class PandemoniumRules extends ChessRules { const steps = V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]); return ( - super.isAttackedBySlideNJump(sq, color, steps, V.SCEPTER, "oneStep") + super.isAttackedBySlideNJump(sq, color, V.SCEPTER, steps, "oneStep") ); } @@ -545,7 +550,7 @@ export class PandemoniumRules extends ChessRules { return ( super.isAttackedBySlideNJump(sq, color, V.steps[V.BISHOP], V.HORSE) || super.isAttackedBySlideNJump( - sq, color, V.steps[V.ROOK], V.HORSE, "oneStep") + sq, color, V.HORSE, V.steps[V.ROOK], "oneStep") ); } @@ -553,7 +558,7 @@ export class PandemoniumRules extends ChessRules { return ( super.isAttackedBySlideNJump(sq, color, V.steps[V.ROOK], V.DRAGON) || super.isAttackedBySlideNJump( - sq, color, V.steps[V.BISHOP], V.DRAGON, "oneStep") + sq, color, V.DRAGON, V.steps[V.BISHOP], "oneStep") ); } @@ -585,11 +590,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); } @@ -642,7 +649,7 @@ export class PandemoniumRules extends ChessRules { } updateCastleFlags(move, piece) { - if (move.appear.length == 2) { + if (piece == V.KING && move.appear.length == 2) { // Castling (only move which disable flags) this.castleFlags[move.appear[0].c][0] = 10; this.castleFlags[move.appear[0].c][1] = 10; @@ -656,7 +663,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 +686,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)]--; } @@ -716,7 +723,10 @@ export class PandemoniumRules extends ChessRules { static get VALUES() { return Object.assign( + {}, + ChessRules.VALUES, { + n: 2.5, //knight is weaker g: 9, s: 5, h: 6, @@ -725,8 +735,7 @@ export class PandemoniumRules extends ChessRules { w: 9, m: 8, a: 9 - }, - ChessRules.VALUES + } ); }