X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FOmega.js;h=1fde5821e15901fbb101f222bc1f13e17bdf3ac4;hb=e50a802531b99829c533f22ecd21e359e7e1e049;hp=3310dd5ed2e265a3be5308cf89f7a8079ad707a4;hpb=c0b036aaf5a2a8e477c955623df2a8e5ce826151;p=vchess.git diff --git a/client/src/variants/Omega.js b/client/src/variants/Omega.js index 3310dd5e..1fde5821 100644 --- a/client/src/variants/Omega.js +++ b/client/src/variants/Omega.js @@ -36,6 +36,7 @@ export class OmegaRules extends ChessRules { return ([V.CHAMPION, V.WIZARD].includes(b[1]) ? "Omega/" : "") + b; } + // TODO: the wall position should be checked too static IsGoodPosition(position) { if (position.length == 0) return false; const rows = position.split("/"); @@ -47,7 +48,7 @@ export class OmegaRules extends ChessRules { if (['K','k'].includes(row[i])) kings[row[i]]++; if (['x'].concat(V.PIECES).includes(row[i].toLowerCase())) sumElts++; else { - const num = parseInt(row[i]); + const num = parseInt(row[i], 10); if (isNaN(num)) return false; sumElts += num; } @@ -161,21 +162,19 @@ export class OmegaRules extends ChessRules { // The second bishop must be on a square of different color let randIndex_tmp = 2 * randInt(5) + 1; const bishop2Pos = positions[randIndex_tmp]; - positions.splice(Math.max(randIndex, randIndex_tmp), 1); - positions.splice(Math.min(randIndex, randIndex_tmp), 1); // Get random squares for champions - randIndex = 2 * randInt(4); - let bishopSameColorPos = (bishop1Pos % 2 == 0 ? bishop1Pos : bishop2Pos); - if (randIndex >= bishopSameColorPos) randIndex += 2; - const champion1Pos = positions[randIndex]; + let randIndexC = 2 * randInt(4); + if (randIndexC >= bishop1Pos) randIndexC += 2; + const champion1Pos = positions[randIndexC]; // The second champion must be on a square of different color - randIndex_tmp = 2 * randInt(4) + 1; - bishopSameColorPos = (bishop1Pos % 2 == 0 ? bishop1Pos : bishop2Pos); - if (randIndex_tmp >= bishopSameColorPos) randIndex_tmp += 2; - const champion2Pos = positions[randIndex_tmp]; - positions.splice(Math.max(randIndex, randIndex_tmp), 1); - positions.splice(Math.min(randIndex, randIndex_tmp), 1); + let randIndex_tmpC = 2 * randInt(4) + 1; + if (randIndex_tmpC >= bishop2Pos) randIndex_tmpC += 2; + const champion2Pos = positions[randIndex_tmpC]; + + let usedIndices = [randIndex, randIndex_tmp, randIndexC, randIndex_tmpC]; + usedIndices.sort(); + for (let i = 3; i >= 0; i--) positions.splice(usedIndices[i], 1); // Get random squares for other pieces randIndex = randInt(6); @@ -204,7 +203,7 @@ export class OmegaRules extends ChessRules { pieces[c][knight2Pos] = "n"; pieces[c][rook2Pos] = "r"; pieces[c][champion2Pos] = "c"; - flags += V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos); + flags += V.CoordToColumn(rook1Pos+1) + V.CoordToColumn(rook2Pos+1); } // Add turn + flags + enpassant return ( @@ -228,6 +227,15 @@ export class OmegaRules extends ChessRules { return res.slice(0, -1); //remove last comma } + canTake([x1, y1], [x2, y2]) { + return ( + // Cannot take wall :) + // NOTE: this check is useful only for pawns where OnBoard() isn't used + this.board[x2][y2] != V.NOTHING && + this.getColor(x1, y1) !== this.getColor(x2, y2) + ); + } + // En-passant after 2-sq or 3-sq jumps getEpSquare(moveOrSquare) { if (!moveOrSquare) return undefined; @@ -274,7 +282,7 @@ export class OmegaRules extends ChessRules { } } - getEnpassanCaptures([x, y], shiftX) { + getEnpassantCaptures([x, y], shiftX) { const Lep = this.epSquares.length; const epSquare = this.epSquares[Lep - 1]; let moves = [];