projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
A few small fixes + add Monster variant
[vchess.git]
/
client
/
src
/
base_rules.js
diff --git
a/client/src/base_rules.js
b/client/src/base_rules.js
index
d1348e7
..
22f57d5
100644
(file)
--- a/
client/src/base_rules.js
+++ b/
client/src/base_rules.js
@@
-86,6
+86,11
@@
export const ChessRules = class ChessRules {
return V.CanFlip;
}
return V.CanFlip;
}
+ // Some variants use click infos:
+ doClick() {
+ return null;
+ }
+
static get IMAGE_EXTENSION() {
// All pieces should be in the SVG format
return ".svg";
static get IMAGE_EXTENSION() {
// All pieces should be in the SVG format
return ".svg";
@@
-846,18
+851,20
@@
export const ChessRules = class ChessRules {
// NOTE: in some variants this is not a rook
const rookPos = this.castleFlags[c][castleSide];
// NOTE: in some variants this is not a rook
const rookPos = this.castleFlags[c][castleSide];
- const castlingPiece = this.getPiece(x, rookPos);
- if (this.getColor(x, rookPos) != c)
- // Rook is here but changed color (see Benedict)
+ if (this.board[x][rookPos] == V.EMPTY || this.getColor(x, rookPos) != c)
+ // Rook is not here, or changed color (see Benedict)
continue;
// Nothing on the path of the king ? (and no checks)
continue;
// Nothing on the path of the king ? (and no checks)
+ const castlingPiece = this.getPiece(x, rookPos);
const finDist = finalSquares[castleSide][0] - y;
let step = finDist / Math.max(1, Math.abs(finDist));
i = y;
do {
if (
const finDist = finalSquares[castleSide][0] - y;
let step = finDist / Math.max(1, Math.abs(finDist));
i = y;
do {
if (
- (!castleInCheck && this.isAttacked([x, i], oppCol)) ||
+ // NOTE: "castling" arg is used by some variants (Monster),
+ // where "isAttacked" is overloaded in an infinite-recursive way.
+ (!castleInCheck && this.isAttacked([x, i], oppCol, "castling")) ||
(this.board[x][i] != V.EMPTY &&
// NOTE: next check is enough, because of chessboard constraints
(this.getColor(x, i) != c ||
(this.board[x][i] != V.EMPTY &&
// NOTE: next check is enough, because of chessboard constraints
(this.getColor(x, i) != c ||
@@
-877,9
+884,12
@@
export const ChessRules = class ChessRules {
// Nothing on final squares, except maybe king and castling rook?
for (i = 0; i < 2; i++) {
if (
// Nothing on final squares, except maybe king and castling rook?
for (i = 0; i < 2; i++) {
if (
+ finalSquares[castleSide][i] != rookPos &&
this.board[x][finalSquares[castleSide][i]] != V.EMPTY &&
this.board[x][finalSquares[castleSide][i]] != V.EMPTY &&
- this.getPiece(x, finalSquares[castleSide][i]) != V.KING &&
- finalSquares[castleSide][i] != rookPos
+ (
+ this.getPiece(x, finalSquares[castleSide][i]) != V.KING ||
+ this.getColor(x, finalSquares[castleSide][i]) != c
+ )
) {
continue castlingCheck;
}
) {
continue castlingCheck;
}
@@
-937,9
+947,7
@@
export const ChessRules = class ChessRules {
});
}
});
}
- // Search for all valid moves considering current turn
- // (for engine and game end)
- getAllValidMoves() {
+ getAllPotentialMoves() {
const color = this.turn;
let potentialMoves = [];
for (let i = 0; i < V.size.x; i++) {
const color = this.turn;
let potentialMoves = [];
for (let i = 0; i < V.size.x; i++) {
@@
-952,7
+960,13
@@
export const ChessRules = class ChessRules {
}
}
}
}
}
}
- return this.filterValid(potentialMoves);
+ return potentialMoves;
+ }
+
+ // Search for all valid moves considering current turn
+ // (for engine and game end)
+ getAllValidMoves() {
+ return this.filterValid(this.getAllPotentialMoves());
}
// Stop at the first move found
}
// Stop at the first move found