Fix double-capture of royal pair
[hachu.git] / hachu.c
diff --git a/hachu.c b/hachu.c
index 641de3b..869a9b8 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -12,7 +12,7 @@
 \r
 #define VERSION "0.19"\r
 \r
-//define PATH level==0/* || path[0] == 0x1103a &&  (level==1 || path[1] == 0x6f0f6 && (level == 2 /*|| path[2] == 0x8710f && (level == 3 /*|| path[3] == 0x3e865 && (level == 4 || path[4] == 0x4b865 && (level == 5)))))*/\r
+//define PATH level==0 || path[0] == 0x590cb &&  (level==1 || path[1] == 0x4c0c9 && (level == 2 || path[2] == 0x8598ca && (level == 3 /*|| path[3] == 0x3e865 && (level == 4 || path[4] == 0x4b865 && (level == 5))*/)))\r
 #define PATH 0\r
 \r
 #define HASH\r
@@ -1787,8 +1787,10 @@ if(PATH) /*pboard(board),pmap(attacks, BLACK),*/printf("search(%d) {%d,%d} eval=
   // in-check test and TSUME filter\r
   {\r
     k = p[king=royal[stm]].pos;\r
-    if( k == ABSENT) k = p[king + 2].pos;\r
-    else if(p[king + 2].pos != ABSENT) k = ABSENT; // two kings is no king...\r
+    if( k == ABSENT) {\r
+      if((k = p[king + 2].pos) == ABSENT && (!tsume || tsume & stm+1))\r
+        return -INF;   // lose when no King (in tsume only for side to be mated)\r
+    } else if(p[king + 2].pos != ABSENT) k = ABSENT; // two kings is no king...\r
     if( k != ABSENT) { // check is possible\r
       if(!attacks[2*k + xstm]) {\r
        if(tsume && tsume & stm+1) {\r