From 523da5d5adeb4abd8b165158485314d0e7de9cf4 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Thu, 13 Dec 2018 22:17:18 +0100
Subject: [PATCH] Fix bugs in Ultima

---
 public/javascripts/components/game.js |  4 ++--
 public/javascripts/variants/Ultima.js | 31 +++++++++++++++++----------
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/public/javascripts/components/game.js b/public/javascripts/components/game.js
index 202f542a..deccd5da 100644
--- a/public/javascripts/components/game.js
+++ b/public/javascripts/components/game.js
@@ -1014,7 +1014,7 @@ Vue.component('my-game', {
 			this.endGame(this.mycolor=="w"?"0-1":"1-0");
 		},
 		newGame: function(mode, fenInit, color, oppId, moves, continuation) {
-			const fen = "3N1K2/2n2q2/P1R1kPnN/p3b1p1/b7/5Q2/4r3/8 0000";//fenInit || VariantRules.GenRandInitFen();
+			const fen = fenInit || VariantRules.GenRandInitFen();
 			console.log(fen); //DEBUG
 			if (mode=="human" && !oppId)
 			{
@@ -1072,7 +1072,7 @@ Vue.component('my-game', {
 			}
 			else if (mode == "computer")
 			{
-				this.mycolor = "w";//Math.random() < 0.5 ? 'w' : 'b';
+				this.mycolor = Math.random() < 0.5 ? 'w' : 'b';
 				if (this.mycolor == 'b')
 					setTimeout(this.playComputerMove, 500);
 			}
diff --git a/public/javascripts/variants/Ultima.js b/public/javascripts/variants/Ultima.js
index 229910c2..6883c6f0 100644
--- a/public/javascripts/variants/Ultima.js
+++ b/public/javascripts/variants/Ultima.js
@@ -189,8 +189,8 @@ class UltimaRules extends ChessRules
 			// Check piece-king rectangle (if any) corners for enemy pieces
 			if (m.end.x == kp[0] || m.end.y == kp[1])
 				return; //"flat rectangle"
-			const corner1 = [Math.max(m.end.x,kp[0]), Math.min(m.end.y,kp[1])];
-			const corner2 = [Math.min(m.end.x,kp[0]), Math.max(m.end.y,kp[1])];
+			const corner1 = [m.end.x, kp[1]];
+			const corner2 = [kp[0], m.end.y];
 			for (let [i,j] of [corner1,corner2])
 			{
 				if (this.board[i][j] != VariantRules.EMPTY && this.getColor(i,j) == oppCol)
@@ -480,16 +480,25 @@ class UltimaRules extends ChessRules
 			{
 				// Try in opposite direction:
 				let [i,j] = [x-step[0],y-step[1]];
-				while (i>=0 && i<sizeX && j>=0 && j<sizeY && this.board[i][j] == V.EMPTY)
+				while (i>=0 && i<sizeX && j>=0 && j<sizeY)
 				{
-					i -= step[0];
-					j -= step[1];
-				}
-				if (i>=0 && i<sizeX && j>=0 && j<sizeY && colors.includes(this.getColor(i,j))
-					&& this.getPiece(i,j) == V.KNIGHT)
-				{
-					if (!this.isImmobilized([i,j]))
-						return true;
+					while (i>=0 && i<sizeX && j>=0 && j<sizeY && this.board[i][j] == V.EMPTY)
+					{
+						i -= step[0];
+						j -= step[1];
+					}
+					if (i>=0 && i<sizeX && j>=0 && j<sizeY)
+					{
+						if (colors.includes(this.getColor(i,j)))
+						{
+							if (this.getPiece(i,j) == V.KNIGHT && !this.isImmobilized([i,j]))
+								return true;
+							continue outerLoop;
+						}
+						// [else] Our color, could be captured
+						i -= step[0];
+						j -= step[1];
+					}
 				}
 			}
 		}
-- 
2.44.0