From 55eb331d0a9262baafcae5a42258a44d00f38da4 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Fri, 23 Nov 2018 14:20:31 +0100
Subject: [PATCH] Alice almost fixed

---
 public/javascripts/base_rules.js      |  3 ---
 public/javascripts/components/game.js |  4 ++--
 public/javascripts/variants/Alice.js  | 20 +++++++++++++++-----
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/public/javascripts/base_rules.js b/public/javascripts/base_rules.js
index cb426f3f..346eff0d 100644
--- a/public/javascripts/base_rules.js
+++ b/public/javascripts/base_rules.js
@@ -699,8 +699,6 @@ class ChessRules
 
 	play(move, ingame)
 	{
-		console.log("play " + this.getNotation(move));
-		console.log(JSON.stringify(move));
 		if (!!ingame)
 			move.notation = this.getNotation(move);
 
@@ -718,7 +716,6 @@ class ChessRules
 		this.moves.pop();
 		this.unupdateVariables(move);
 		this.parseFlags(JSON.parse(move.flags));
-		console.log("undo " + this.getNotation(move));
 	}
 
 	//////////////
diff --git a/public/javascripts/components/game.js b/public/javascripts/components/game.js
index ca8a6bff..397ba521 100644
--- a/public/javascripts/components/game.js
+++ b/public/javascripts/components/game.js
@@ -574,7 +574,7 @@ Vue.component('my-game', {
 			this.newGame("computer");
 		},
 		newGame: function(mode, fenInit, color, oppId, moves, continuation) {
-			const fen = "pppppppp/rnbqkbnr/8/8/8/8/PPPPPPPP/ROBQKBOR 1111"; //fenInit || VariantRules.GenRandInitFen();
+			const fen = fenInit || VariantRules.GenRandInitFen();
 			console.log(fen); //DEBUG
 			this.score = "*";
 			if (mode=="human" && !oppId)
@@ -672,7 +672,7 @@ Vue.component('my-game', {
 				this.selectedPiece.style.display = "inline-block";
 				this.selectedPiece.style.zIndex = 3000;
 				let startSquare = this.getSquareFromId(e.target.parentNode.id);
-				this.possibleMoves = true//this.mode!="idle" && this.vr.canIplay(this.mycolor,startSquare)
+				this.possibleMoves = this.mode!="idle" && this.vr.canIplay(this.mycolor,startSquare)
 					? this.vr.getPossibleMovesFrom(startSquare)
 					: [];
 				e.target.parentNode.appendChild(this.selectedPiece);
diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js
index 1e1ce46d..4d105069 100644
--- a/public/javascripts/variants/Alice.js
+++ b/public/javascripts/variants/Alice.js
@@ -50,10 +50,8 @@ class AliceRules extends ChessRules
 		return sideBoard;
 	}
 
-	// TODO: castle & enPassant https://www.chessvariants.com/other.dir/alice.html
-	// TODO: enPassant seulement si l'on est du même coté que le coté de départ du pion adverse
-	// (en passant en sortant du monde... : il faut donc ajouter des coups non trouvés)
-	// castle: check that all destination squares are not occupied
+	// NOTE: castle & enPassant https://www.chessvariants.com/other.dir/alice.html
+	// --> Should be OK as is.
 	getPotentialMovesFrom([x,y])
 	{
 		let sideBoard = this.getBoardOfPiece([x,y]);
@@ -67,8 +65,20 @@ class AliceRules extends ChessRules
 		// Finally filter impossible moves
 		const mirrorSide = (Object.keys(VariantRules.ALICE_CODES).includes(this.getPiece(x,y)) ? 1 : 2);
 		return moves.filter(m => {
-			if (this.board[m.end.x][m.end.y] != VariantRules.EMPTY)
+			if (m.appear.length == 2) //castle
 			{
+				// If appear[i] not in vanish array, then must be empty square on other board
+				m.appear.forEach(psq => {
+					if (this.board[psq.x][psq.y] != VariantRules.EMPTY &&
+						![m.vanish[0].y,m.vanish[1].y].includes(psq.y))
+					{
+						return false;
+					}
+				});
+			}
+			else if (this.board[m.end.x][m.end.y] != VariantRules.EMPTY)
+			{
+				// Attempt to capture
 				const piece = this.getPiece(m.end.x,m.end.y);
 				if ((mirrorSide==1 && Object.keys(VariantRules.ALICE_PIECES).includes(piece))
 					|| (mirrorSide==2 && Object.keys(VariantRules.ALICE_CODES).includes(piece)))
-- 
2.44.0