Use returned depth in hash table
[hachu.git] / hachu.c
diff --git a/hachu.c b/hachu.c
index 9b98aa7..f058616 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -1796,7 +1796,12 @@ if(PATH) /*pboard(board),pmap(attacks, BLACK),*/printf("search(%d) {%d,%d} eval=
     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
+    } else if(p[king + 2].pos != ABSENT) {\r
+      if(tsume && tsume & stm+1) {\r
+       retDep = 60; return INF; // we win when not in check\r
+      }\r
+      k = ABSENT; // two kings is no king...\r
+    }\r
     if( k != ABSENT) { // check is possible\r
       if(!attacks[2*k + xstm]) {\r
        if(tsume && tsume & stm+1) {\r
@@ -2022,6 +2027,7 @@ if(flag & depth >= 0) printf("%2d:%d found %d/%d %08x %s\n", depth, iterDep, cur
 \r
 if(flag & depth >= 0) printf("%2d:%d made %d/%d %s\n", depth, iterDep, curMove, msp, MoveToText(moveStack[curMove], 0));\r
       for(i=2; i<=cnt50; i+=2) if(repStack[level-i+200] == hashKeyH) {\r
+       retDep = iterDep;\r
        if(repDraws) { score = 0; goto repetition; }\r
        if(!allowRep) {\r
          moveStack[curMove] = 0;         // erase forbidden move\r
@@ -2141,7 +2147,7 @@ if(PATH) printf("%d:%2d:%d %3d %6x %-10s %6d %6d  (%d)\n", level, depth, iterDep
 #ifdef HASH\r
     // hash store\r
     hashTable[index].lock[hit]  = hashKeyH;\r
-    hashTable[index].depth[hit] = iterDep;\r
+    hashTable[index].depth[hit] = resDep;\r
     hashTable[index].score[hit] = bestScore;\r
     hashTable[index].flag[hit]  = (bestScore < beta) * H_UPPER;\r
     if(bestScore > alpha) {\r