projects
/
vchess.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix Football: no pass move if not touching the ball
[vchess.git]
/
client
/
src
/
variants
/
Otage.js
diff --git
a/client/src/variants/Otage.js
b/client/src/variants/Otage.js
index
3e35767
..
2a8891f
100644
(file)
--- a/
client/src/variants/Otage.js
+++ b/
client/src/variants/Otage.js
@@
-36,7
+36,7
@@
export class OtageRules extends ChessRules {
x: ['b', 'k'],
y: ['q', 'q'],
z: ['q', 'k'],
x: ['b', 'k'],
y: ['q', 'q'],
z: ['q', 'k'],
- '
_
': ['k', 'k']
+ '
@
': ['k', 'k']
};
}
};
}
@@
-61,7
+61,7
@@
export class OtageRules extends ChessRules {
for (let i = 0; i < row.length; i++) {
const lowR = row[i].toLowerCase();
const readNext = !(ChessRules.PIECES.includes(lowR));
for (let i = 0; i < row.length; i++) {
const lowR = row[i].toLowerCase();
const readNext = !(ChessRules.PIECES.includes(lowR));
- if (!!(lowR.match(/[a-z
_
]/))) {
+ if (!!(lowR.match(/[a-z
@
]/))) {
sumElts++;
if (lowR == 'k') kings[row[i]]++;
else if (readNext) {
sumElts++;
if (lowR == 'k') kings[row[i]]++;
else if (readNext) {
@@
-146,7
+146,7
@@
export class OtageRules extends ChessRules {
const c = fenRows[i].charAt(j);
const lowR = c.toLowerCase();
const readNext = !(ChessRules.PIECES.includes(lowR));
const c = fenRows[i].charAt(j);
const lowR = c.toLowerCase();
const readNext = !(ChessRules.PIECES.includes(lowR));
- if (!!(lowR.match(/[a-z
_
]/))) {
+ if (!!(lowR.match(/[a-z
@
]/))) {
if (lowR == 'k') this.kingPos[c == 'k' ? 'b' : 'w'] = [i, k];
else if (readNext) {
const up = this.getUnionPieces(fenRows[i][++j], lowR);
if (lowR == 'k') this.kingPos[c == 'k' ? 'b' : 'w'] = [i, k];
else if (readNext) {
const up = this.getUnionPieces(fenRows[i][++j], lowR);
@@
-255,7
+255,14
@@
export class OtageRules extends ChessRules {
// Transformation computed without taking union into account
const up = this.getUnionPieces(initColor, initPiece);
let args = [tr.p, up[oppCol]];
// Transformation computed without taking union into account
const up = this.getUnionPieces(initColor, initPiece);
let args = [tr.p, up[oppCol]];
- if (['a', 'v'].includes(initColor)) args = args.reverse();
+ if (
+ ['a', 'v'].includes(initColor) ||
+ // HACK: "ba" piece = two pawns, black controling.
+ // If promoting, must artificially imagine color was 'a':
+ (initPiece == 'a' && initColor == 'b')
+ ) {
+ args = args.reverse();
+ }
const capturer = (['a', 'b'].includes(initColor) ? 'b' : 'w');
const cp = this.getUnionCode(args[0], args[1], capturer);
tr.c = cp.c;
const capturer = (['a', 'b'].includes(initColor) ? 'b' : 'w');
const cp = this.getUnionCode(args[0], args[1], capturer);
tr.c = cp.c;
@@
-646,11
+653,19
@@
export class OtageRules extends ChessRules {
if (!m.end.released) return true;
// Check for repetitions:
V.PlayOnBoard(this.board, m);
if (!m.end.released) return true;
// Check for repetitions:
V.PlayOnBoard(this.board, m);
- const newState = { piece: m.end.released, position: this.getBaseFen() };
+ const newState = {
+ piece: m.end.released,
+ square: { x: m.end.x, y: m.end.y },
+ position: this.getBaseFen()
+ };
const repet =
this.repetitions.some(r => {
return (
r.piece == newState.piece &&
const repet =
this.repetitions.some(r => {
return (
r.piece == newState.piece &&
+ (
+ r.square.x == newState.square.x &&
+ r.square.y == newState.square.y
+ ) &&
r.position == newState.position
);
});
r.position == newState.position
);
});
@@
-724,6
+739,7
@@
export class OtageRules extends ChessRules {
this.repetitions.push(
{
piece: move.end.released,
this.repetitions.push(
{
piece: move.end.released,
+ square: { x: move.end.x, y: move.end.y },
position: this.getBaseFen()
}
);
position: this.getBaseFen()
}
);
@@
-739,7
+755,7
@@
export class OtageRules extends ChessRules {
this.turn = V.GetOppCol(this.turn);
this.movesCount--;
}
this.turn = V.GetOppCol(this.turn);
this.movesCount--;
}
- if (!!move.end.releasd) this.repetitions.pop();
+ if (!!move.end.releas
e
d) this.repetitions.pop();
this.postUndo(move);
}
this.postUndo(move);
}