From 3fa426b632d92a65843038a161677069de5db27e Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Thu, 27 Dec 2018 01:22:52 +0100
Subject: [PATCH] Add traces to understand what happens in MarseilleChess about
 turn/subturn

---
 public/javascripts/components/game.js    |  7 ++-
 public/javascripts/playCompMove.js       |  3 ++
 public/javascripts/variants/Marseille.js | 68 +++++++++++++++++++++++-
 3 files changed, 74 insertions(+), 4 deletions(-)

diff --git a/public/javascripts/components/game.js b/public/javascripts/components/game.js
index 4c369e4c..3f3b5556 100644
--- a/public/javascripts/components/game.js
+++ b/public/javascripts/components/game.js
@@ -1312,7 +1312,7 @@ Vue.component('my-game', {
 			this.endGame(this.mycolor=="w"?"0-1":"1-0");
 		},
 		newGame: function(mode, fenInit, color, oppId) {
-			const fen = fenInit || VariantRules.GenRandInitFen();
+			const fen = "nrqkbrnb/pppppppp/8/8/8/8/PPPPPPPP/RKQBNRBN w 1111 -";//fenInit || VariantRules.GenRandInitFen();
 			console.log(fen); //DEBUG
 			if (mode=="human" && !oppId)
 			{
@@ -1391,7 +1391,7 @@ Vue.component('my-game', {
 			else if (mode == "computer")
 			{
 				this.compWorker.postMessage(["init",this.vr.getFen()]);
-				this.mycolor = (Math.random() < 0.5 ? 'w' : 'b');
+				this.mycolor = "w";//(Math.random() < 0.5 ? 'w' : 'b');
 				if (this.mycolor != this.vr.turn)
 					this.playComputerMove();
 			}
@@ -1622,7 +1622,10 @@ Vue.component('my-game', {
 			if (["human","computer","friend"].includes(this.mode))
 				this.updateStorage(); //after our moves and opponent moves
 			if (this.mode == "computer" && this.vr.turn != this.mycolor && this.score == "*")
+			{
+				console.log(this.vr.moves.length + " " + this.vr.turn + " " + this.mycolor);
 				this.playComputerMove();
+			}
 		},
 		undo: function() {
 			// Navigate after game is over
diff --git a/public/javascripts/playCompMove.js b/public/javascripts/playCompMove.js
index fc69ce24..f4aeaacb 100644
--- a/public/javascripts/playCompMove.js
+++ b/public/javascripts/playCompMove.js
@@ -19,6 +19,9 @@ onmessage = function(e)
 			self.vr.play(e.data[1]);
 			break;
 		case "askmove":
+
+console.log("IN playCompMove " + self.vr.moves.length + " " + self.vr.turn);
+
 			const compMove = self.vr.getComputerMove();
 			postMessage(compMove);
 			break;
diff --git a/public/javascripts/variants/Marseille.js b/public/javascripts/variants/Marseille.js
index 618e8330..0d228b0c 100644
--- a/public/javascripts/variants/Marseille.js
+++ b/public/javascripts/variants/Marseille.js
@@ -233,7 +233,9 @@ class MarseilleRules extends ChessRules
 		const maxeval = V.INFINITY;
 		const color = this.turn;
 		const oppCol = this.getOppCol(this.turn);
-
+//if (this.moves.length == 25)
+//	debugger;
+console.log("turn before " + this.turn + " " + this.subTurn);
 		// Search best (half) move for opponent turn
 		const getBestMoveEval = () => {
 			let moves = this.getAllValidMoves();
@@ -271,11 +273,16 @@ class MarseilleRules extends ChessRules
 		};
 
 		let moves11 = this.getAllValidMoves();
+console.log("turn after " + this.turn + " " + this.subTurn);
+
+if (this.moves.length == 25)
+	debugger;
+
+
 		let doubleMoves = [];
 		// Rank moves using a min-max at depth 2
 		for (let i=0; i<moves11.length; i++)
 		{
-			moves11[i].eval = (color=="w" ? -1 : 1) * maxeval;
 			this.play(moves11[i]);
 			if (this.turn != color)
 			{
@@ -292,10 +299,66 @@ class MarseilleRules extends ChessRules
 						moves:[moves11[i],moves12[j]],
 						eval:getBestMoveEval()});
 					this.undo(moves12[j]);
+			console.log("------ after undo of " + this.getNotation(moves12[j]) + " " + this.turn + " " + this.subTurn);
 				}
 			}
 			this.undo(moves11[i]);
+
+			console.log("after undo of " + this.getNotation(moves11[i]) + " " + this.turn + " " + this.subTurn);
+
+		}
+console.log("turn interm " + this.turn + " " + this.subTurn);
+
+		for (let i=0; i<doubleMoves.length; i++)
+		{
+			if (doubleMoves[i].moves.length == 2)
+			{
+				if (this.moves.length == 1
+					&& this.getNotation(doubleMoves[i].moves[0])=="a5"
+					&& this.getNotation(doubleMoves[i].moves[1])=="h6")
+				{
+					return doubleMoves[i].moves;
+				}
+				if (this.moves.length == 5
+					&& this.getNotation(doubleMoves[i].moves[0])=="c6"
+					&& this.getNotation(doubleMoves[i].moves[1])=="Kc7")
+				{
+					return doubleMoves[i].moves;
+				}
+				if (this.moves.length == 9
+					&& this.getNotation(doubleMoves[i].moves[0])=="d6"
+					&& this.getNotation(doubleMoves[i].moves[1])=="dxe5")
+				{
+					return doubleMoves[i].moves;
+				}
+				if (this.moves.length == 13
+					&& this.getNotation(doubleMoves[i].moves[0])=="fxe6"
+					&& this.getNotation(doubleMoves[i].moves[1])=="Rxf1")
+				{
+					return doubleMoves[i].moves;
+				}
+				if (this.moves.length == 17
+					&& this.getNotation(doubleMoves[i].moves[0])=="Nb6"
+					&& this.getNotation(doubleMoves[i].moves[1])=="Bg6")
+				{
+					return doubleMoves[i].moves;
+				}
+				if (this.moves.length == 21
+					&& this.getNotation(doubleMoves[i].moves[0])=="Bxe4"
+					&& this.getNotation(doubleMoves[i].moves[1])=="Nxd3") //Bxd3
+				{
+					return doubleMoves[i].moves;
+				}
+				if (this.moves.length == 25
+					&& this.getNotation(doubleMoves[i].moves[0])=="Na4"
+					&& this.getNotation(doubleMoves[i].moves[1])=="xb6") //Nxb6
+				{
+					debugger;
+					return doubleMoves[i].moves;
+				}
+			}
 		}
+console.log("turn intermBIS " + this.turn + " " + this.subTurn);
 
 		doubleMoves.sort( (a,b) => {
 			return (color=="w" ? 1 : -1) * (b.eval - a.eval); });
@@ -306,6 +369,7 @@ class MarseilleRules extends ChessRules
 		{
 			candidates.push(i);
 		}
+console.log("turn END " + this.turn + " " + this.subTurn);
 
 		const selected = doubleMoves[_.sample(candidates, 1)].moves;
 		if (selected.length == 1)
-- 
2.44.0