X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=variants%2FChakart%2Fclass.js;h=c527b8c23d582b77d6c81e227a32e49e299c0dfb;hb=fe234391b05ffef5e3236e82ca1391adcb784b45;hp=c987649711ec308da2cafa024429f22d51ded5e8;hpb=cc9fe4f154ec244cbec468d1a3b5845e56cb378d;p=xogo.git diff --git a/variants/Chakart/class.js b/variants/Chakart/class.js index c987649..c527b8c 100644 --- a/variants/Chakart/class.js +++ b/variants/Chakart/class.js @@ -117,7 +117,7 @@ export default class ChakartRules extends ChessRules { genRandInitFen(seed) { const gr = new GiveawayRules( - {mode: "suicide", options: {}, genFenOnly: true}); + {mode: "suicide", options: this.options, genFenOnly: true}); // Add Peach + mario flags return gr.genRandInitFen(seed).slice(0, -17) + '{"flags":"1111"}'; } @@ -306,7 +306,7 @@ export default class ChakartRules extends ChessRules { moves.push(this.getBasicMove([x, y], [x + shiftX, y + shiftY])); } } - this.pawnPostProcess(moves, color, oppCol); + super.pawnPostProcess(moves, color, oppCol); // Add mushroom on before-last square moves.forEach(m => { let revStep = [m.start.x - m.end.x, m.start.y - m.end.y]; @@ -389,6 +389,22 @@ export default class ChakartRules extends ChessRules { } play(move) { + const color = this.turn; + const oppCol = C.GetOppCol(color); + if ( + move.appear.length > 0 && + move.appear[0].p == 'p' && + ( + (color == 'w' && move.end.x == 0) || + (color == 'b' && move.end.x == this.size.x - 1) + ) + ) { + // "Forgotten" promotion, which occurred after some effect + let moves = [move]; + super.pawnPostProcess(moves, color, oppCol); + super.showChoices(moves); + return false; + } if (!move.nextComputed) { // Set potential random effects, so that play() is deterministic // from opponent viewpoint: @@ -441,8 +457,6 @@ export default class ChakartRules extends ChessRules { move.nextComputed = true; } this.egg = move.egg; - const color = this.turn; - const oppCol = C.GetOppCol(color); if (move.egg == "toadette") { this.reserve = { w: {}, b: {} }; // Randomly select a piece in pawnPromotions @@ -510,6 +524,7 @@ export default class ChakartRules extends ChessRules { this.displayBonus(move); this.playOnBoard(move); this.nextMove = move.next; + return true; } // Helper to set and apply banana/bomb effect @@ -625,7 +640,7 @@ export default class ChakartRules extends ChessRules { } getMushroomEffect(move) { - if (move.koopa) + if (move.koopa || typeof move.start.x == "string") return null; let step = [move.end.x - move.start.x, move.end.y - move.start.y]; if ([0, 1].some(i => Math.abs(step[i]) >= 2 && Math.abs(step[1-i]) != 1)) { @@ -637,24 +652,11 @@ export default class ChakartRules extends ChessRules { const afterSquare = [nextSquare[0] + step[0], nextSquare[1] + step[1]]; let nextMove = null; - this.playOnBoard(move); //HACK for getBasicMove() below - if ( - this.onBoard(nextSquare[0], nextSquare[1]) && - ['k', 'p', 'n'].includes(move.vanish[0].p) && - !['w', 'b'].includes(this.getColor(nextSquare[0], nextSquare[1])) - ) { - // Speed up non-sliders + if (this.onBoard(nextSquare[0], nextSquare[1])) { + this.playOnBoard(move); //HACK for getBasicMove() nextMove = this.getBasicMove([move.end.x, move.end.y], nextSquare); + this.undoOnBoard(move); } - else if ( - this.onBoard(afterSquare[0], afterSquare[1]) && - this.board[nextSquare[0]][nextSquare[1]] != "" && - this.getColor(nextSquare[0], nextSquare[1]) != 'a' && - this.getColor(afterSquare[0], afterSquare[1]) != this.turn - ) { - nextMove = this.getBasicMove([move.end.x, move.end.y], afterSquare); - } - this.undoOnBoard(move); return nextMove; } @@ -687,9 +689,10 @@ export default class ChakartRules extends ChessRules { } playPlusVisual(move, r) { - this.moveStack.push(move); const nextLines = () => { - this.play(move); + if (!this.play(move)) + return; + this.moveStack.push(move); this.playVisual(move, r); if (this.nextMove) this.playPlusVisual(this.nextMove, r); @@ -698,7 +701,7 @@ export default class ChakartRules extends ChessRules { this.moveStack = []; } }; - if (this.moveStack.length == 1) + if (this.moveStack.length == 0) nextLines(); else this.animate(move, nextLines);