- // Stop at the first capture found
- atLeastOneCapture(color) {
- color = color || this.turn;
- const oppCol = C.GetOppCol(color);
- for (let i = 0; i < this.size.x; i++) {
- for (let j = 0; j < this.size.y; j++) {
- if (this.board[i][j] != "" && this.getColor(i, j) == color) {
- const allSpecs = this.pieces(color, i, j)
- let specs = allSpecs[this.getPieceType(i, j)];
- const attacks = specs.attack || specs.moves;
- for (let a of attacks) {
- outerLoop: for (let step of a.steps) {
- let [ii, jj] = [i + step[0], this.getY(j + step[1])];
- let stepCounter = 1;
- while (this.onBoard(ii, jj) && this.board[ii][jj] == "") {
- if (a.range <= stepCounter++)
- continue outerLoop;
- ii += step[0];
- jj = this.getY(jj + step[1]);
- }
- if (
- this.onBoard(ii, jj) &&
- this.getColor(ii, jj) == oppCol &&
- this.filterValid(
- [this.getBasicMove([i, j], [ii, jj])]
- ).length >= 1
- ) {
- return true;
- }
- }
- }
+ getSegments(curSeg, segStart, segEnd) {
+ if (curSeg.length == 0)
+ return undefined;
+ let segments = JSON.parse(JSON.stringify(curSeg)); //not altering
+ segments.push([[segStart[0], segStart[1]], [segEnd[0], segEnd[1]]]);
+ return segments;
+ }
+
+ getStepSpec(color, x, y, piece) {
+ return this.pieces(color, x, y)[piece || this.getPieceType(x, y)];
+ }
+
+ // Can thing on square1 capture thing on square2?
+ canTake([x1, y1], [x2, y2]) {
+ return this.getColor(x1, y1) !== this.getColor(x2, y2);
+ }
+
+ canStepOver(i, j, p) {
+ // In some variants, objects on boards don't stop movement (Chakart)
+ return this.board[i][j] == "";
+ }
+
+ canDrop([c, p], [i, j]) {
+ return (
+ this.board[i][j] == "" &&
+ (!this.enlightened || this.enlightened[i][j]) &&
+ (
+ p != "p" ||
+ (c == 'w' && i < this.size.x - 1) ||
+ (c == 'b' && i > 0)
+ )
+ );
+ }
+
+ // For Madrasi:
+ // (redefined in Baroque etc, where Madrasi condition doesn't make sense)
+ isImmobilized([x, y]) {
+ if (!this.options["madrasi"])
+ return false;
+ const color = this.getColor(x, y);
+ const oppCol = C.GetOppCol(color);
+ const piece = this.getPieceType(x, y);
+ const stepSpec = this.getStepSpec(color, x, y, piece);
+ const attacks = stepSpec.attack || stepSpec.moves;
+ for (let a of attacks) {
+ outerLoop: for (let step of a.steps) {
+ let [i, j] = [x + step[0], y + step[1]];
+ let stepCounter = 1;
+ while (this.onBoard(i, j) && this.board[i][j] == "") {
+ if (a.range <= stepCounter++)
+ continue outerLoop;
+ i += step[0];
+ j = this.getY(j + step[1]);
+ }
+ if (
+ this.onBoard(i, j) &&
+ this.getColor(i, j) == oppCol &&
+ this.getPieceType(i, j) == piece
+ ) {
+ return true;