incheck: [],
pgnTxt: "",
hints: (!localStorage["hints"] ? true : localStorage["hints"] === "1"),
- color: localStorage["color"] || "lichess", //lichess, chesscom or chesstempo
+ bcolor: localStorage["bcolor"] || "lichess", //lichess, chesscom or chesstempo
// sound level: 0 = no sound, 1 = sound only on newgame, 2 = always
sound: parseInt(localStorage["sound"] || "2"),
// Web worker to play computer moves without freezing interface:
);
// Create board element (+ reserves if needed by variant or mode)
const lm = this.vr.lastMove;
- const showLight = this.hints &&
+ const showLight = this.hints && variant!="Dark" &&
(!["idle","chat"].includes(this.mode) || this.cursor==this.vr.moves.length);
const gameDiv = h('div',
{
let cj = (this.mycolor=='w' ? j : sizeY-j-1);
let elems = [];
if (this.vr.board[ci][cj] != VariantRules.EMPTY && (variant!="Dark"
- || this.score!="*" || this.vr.isEnlightened(ci,cj,this.mycolor)))
+ || this.score!="*" || this.vr.enlightened[this.mycolor][ci][cj]))
{
elems.push(
h(
['board'+sizeY]: true,
'light-square': (i+j)%2==0,
'dark-square': (i+j)%2==1,
- [this.color]: true,
+ [this.bcolor]: true,
'in-shadow': variant=="Dark" && this.score=="*"
- && !this.vr.isEnlightened(ci,cj,this.mycolor),
+ && !this.vr.enlightened[this.mycolor][ci][cj],
'highlight': showLight && !!lm && _.isMatch(lm.end, {x:ci,y:cj}),
'incheck': showLight && incheckSq[ci][cj],
},
h("select",
{
attrs: { "id": "selectColor" },
- on: { "change": this.setColor },
+ on: { "change": this.setBoardColor },
},
[
h("option",
this.newGame("human", data.fen, data.color, data.oppid);
break;
case "newmove": //..he played!
- this.play(data.move, "animate");
+ this.play(data.move, (variant!="Dark" ? "animate" : null));
break;
case "pong": //received if we sent a ping (game still alive on our side)
if (this.gameId != data.gameId)
this.hints = !this.hints;
localStorage["hints"] = (this.hints ? "1" : "0");
},
- setColor: function(e) {
- this.color = e.target.options[e.target.selectedIndex].value;
- localStorage["color"] = this.color;
+ setBoardColor: function(e) {
+ this.bcolor = e.target.options[e.target.selectedIndex].value;
+ localStorage["bcolor"] = this.bcolor;
},
setSound: function(e) {
this.sound = parseInt(e.target.options[e.target.selectedIndex].value);
this.endGame(this.mycolor=="w"?"0-1":"1-0");
},
newGame: function(mode, fenInit, color, oppId) {
- let fen = fenInit || VariantRules.GenRandInitFen();
+ const fen = fenInit || VariantRules.GenRandInitFen();
console.log(fen); //DEBUG
if (mode=="human" && !oppId)
{
if (this.mycolor != this.vr.turn)
this.playComputerMove();
}
- //else: against a (IRL) friend or problem solving: nothing more to do
+ else if (mode == "friend")
+ this.mycolor = "w"; //convention...
+ //else: problem solving: nothing more to do
},
continueGame: function(mode) {
this.mode = mode;
const score = localStorage.getItem(prefix+"score"); //set in "endGame()"
this.fenStart = localStorage.getItem(prefix+"fenStart");
this.vr = new VariantRules(fen, moves);
+ this.incheck = this.vr.getCheckSquares(this.vr.turn);
if (mode == "human")
{
this.gameId = localStorage.getItem("gameId");
if (this.mycolor != this.vr.turn)
this.playComputerMove();
}
- if (moves.length > 0)
- {
- const lastMove = moves[moves.length-1];
- this.vr.undo(lastMove);
- this.incheck = this.vr.getCheckSquares(lastMove);
- this.vr.play(lastMove, "ingame");
- }
if (score != "*")
{
// Small delay required when continuation run faster than drawing page
if (this.vr.canIplay(color,startSquare))
this.possibleMoves = this.vr.getPossibleMovesFrom(startSquare);
}
+ console.log(this.possibleMoves);
// Next line add moving piece just after current image
// (required for Crazyhouse reserve)
e.target.parentNode.insertBefore(this.selectedPiece, e.target.nextSibling);
// TODO: robustify this...
if (this.mode == "human" && !!move.computer)
return;
- this.incheck = this.vr.getCheckSquares(move); //is opponent in check?
this.vr.play(move, "ingame");
+ // Is opponent in check?
+ this.incheck = this.vr.getCheckSquares(this.vr.turn);
if (this.sound == 2)
new Audio("/sounds/move.mp3").play().catch(err => {});
if (this.mode == "computer")
this.vr.undo(lm);
if (this.sound == 2)
new Audio("/sounds/undo.mp3").play().catch(err => {});
- const lmBefore = this.vr.lastMove;
- if (!!lmBefore)
- {
- this.vr.undo(lmBefore);
- this.incheck = this.vr.getCheckSquares(lmBefore);
- this.vr.play(lmBefore, "ingame");
- }
- else
- this.incheck = [];
+ this.incheck = this.vr.getCheckSquares(this.vr.turn);
}
},
},