this.compWorker.onmessage = e => {
let compMove = e.data;
// Small delay for the bot to appear "more human"
- const delay = Math.max(500 - (Date.now() - this.timeStart), 0);
+ const minDelay = this.gameInfo.mode == "versus" ? 500 : 1000;
+ const delay = Math.max(minDelay - (Date.now() - this.timeStart), 0);
let self = this;
setTimeout(() => {
if (this.currentUrl != document.location.href) return; //page change
label.modal-close(for="modalContact")
fieldset
label(for="userEmail") {{ st.tr["Email"] }}
- input#userEmail(type="email")
+ input#userEmail(type="email" :value="st.user.email")
fieldset
label(for="mailSubject") {{ st.tr["Subject"] }}
input#mailSubject(type="text")
return false;
}
- canTake(sq1, sq2) {
- return false; //Captures handled differently
- }
-
getCheckSquares() {
// No notion of check
return [];
getPotentialMovesFrom([x, y]) {
let moves = super.getPotentialMovesFrom([x, y]);
+ // Remove standard captures (without removing castling):
+ moves = moves.filter(m => {
+ return m.vanish.length == 1 || m.appear.length == 2;
+ });
// Augment moves with "mate-captures":
// TODO: this is coded in a highly inefficient way...
) {
const oppPiece = this.getPiece(i, j);
if (oppPiece == V.IMMOBILIZER) {
- // Moving is impossible only if this immobilizer is not neutralized
+ // Moving is possible only if this immobilizer is neutralized
for (let step2 of adjacentSteps) {
const [i2, j2] = [i + step2[0], j + step2[1]];
if (i2 == x && j2 == y) continue; //skip initial piece!
}
isAttackedByBishop([x, y], colors) {
- // We cheat a little here: since this function is used exclusively for king,
- // it's enough to check the immediate surrounding of the square.
+ // We cheat a little here: since this function is used exclusively for
+ // the king, it's enough to check the immediate surrounding of the square.
const adjacentSteps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
for (let step of adjacentSteps) {
const [i, j] = [x + step[0], y + step[1]];
return false;
}
+ isAttackedByKing([x, y], colors) {
+ const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
+ for (let step of steps) {
+ let rx = x + step[0],
+ ry = y + step[1];
+ if (
+ V.OnBoard(rx, ry) &&
+ this.getPiece(rx, ry) === V.KING &&
+ colors.includes(this.getColor(rx, ry)) &&
+ !this.isImmobilized([rx, ry])
+ ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
static get VALUES() {
return {
p: 1,
// Potential promotions:
const finalPieces = piece == V.PAWN && x + step[0] == lastRank
? [V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN]
- : [V.PAWN];
+ : [piece];
for (let p of finalPieces) {
moves.push(
this.getBasicMove([x,y], [x+step[0],y+step[1]], {