X-Git-Url: https://git.auder.net/variants/Dynamo/style.css?a=blobdiff_plain;f=base_rules.js;h=0f89cc429b8c97da44272d3add07813c90df776f;hb=d01282a527e60af95f2a71deee1fbac9c0dd26be;hp=ae2ca80dfa1405239f46806b8124dcea0e9f7d13;hpb=3ca478329f818efdfe2e03ce72c0effa6a8b0c0b;p=xogo.git diff --git a/base_rules.js b/base_rules.js index ae2ca80..0f89cc4 100644 --- a/base_rules.js +++ b/base_rules.js @@ -235,7 +235,7 @@ export default class ChessRules { randomness: this.options["randomness"], between: [{p1: 'k', p2: 'r'}], diffCol: ['b'], - flags: ['r', 'k'] + flags: ['r'] } ); return { @@ -579,11 +579,18 @@ export default class ChessRules { // Get SVG board (background, no pieces) getSvgChessboard() { - const flipped = this.flippedBoard; let board = ` `; + board += this.getBaseSvgChessboard(); + board += ""; + return board; + } + + getBaseSvgChessboard() { + let board = ""; + const flipped = this.flippedBoard; for (let i=0; i < this.size.x; i++) { for (let j=0; j < this.size.y; j++) { if (!this.onBoard(i, j)) @@ -605,7 +612,6 @@ export default class ChessRules { />`; } } - board += ""; return board; } @@ -642,7 +648,13 @@ export default class ChessRules { else this[arrName] = ArrayFun.init(this.size.x, this.size.y, null); if (arrName == "d_pieces") - this.marks.forEach(([i, j]) => addPiece(i, j, arrName, "mark")); + this.marks.forEach((m) => { + const formattedSquare = + (this.size.x - parseInt(m.substring(1), 10)).toString(36) + + (m.charCodeAt(0) - 97).toString(36); + const mCoords = V.SquareToCoords(formattedSquare); + addPiece(mCoords.x, mCoords.y, arrName, "mark"); + }); }; if (this.marks) conditionalReset("d_pieces"); @@ -1792,7 +1804,10 @@ export default class ChessRules { continue outerLoop; const oldIJ = [i, j]; [i, j] = this.increment([i, j], step); - if (Math.abs(j - oldIJ[1]) > 1 || Math.abs(i - oldIJ[0]) > 1) { + if ( + Math.abs(i - oldIJ[0]) != Math.abs(step[0]) || + Math.abs(j - oldIJ[1]) != Math.abs(step[1]) + ) { // Boundary between segments (cylinder or circular mode) segments.push([[segStart[0], segStart[1]], oldIJ]); segStart = [i, j]; @@ -2247,7 +2262,7 @@ export default class ChessRules { } // Update castling flags if start or arrive from/at rook/king locations move.appear.concat(move.vanish).forEach(psq => { - if ((!!king && psq.p == king) || this.isKing(0, 0, psq.p)) + if ((king && psq.p == king) || (!king && this.isKing(0, 0, psq.p))) castleFlags[psq.c] = [this.size.y, this.size.y]; // NOTE: not "else if" because king can capture enemy rook... let c = ""; @@ -2332,10 +2347,11 @@ export default class ChessRules { if (this.options["teleport"]) { if ( this.subTurnTeleport == 1 && - move.vanish.length > move.appear.length && + move.vanish.length == 2 && + move.appear.length == 1 && move.vanish[1].c == this.turn ) { - const v = move.vanish[move.vanish.length - 1]; + const v = move.vanish[1]; this.captured = {x: v.x, y: v.y, c: v.c, p: v.p}; this.subTurnTeleport = 2; return;