Give reason when Lion captures are rejected as illegal
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 18 Jan 2013 16:18:40 +0000 (17:18 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Fri, 18 Jan 2013 16:18:40 +0000 (17:18 +0100)
hachu.c

diff --git a/hachu.c b/hachu.c
index 6de0d39..7fd6fb8 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -1665,7 +1665,11 @@ MapFromScratch(attacks); // for as long as incremental update does not work.
          if(promoSuppress & PROMOTE) score = -INF; // non-Lion captures Lion after opponent did same\r
          defer |= PROMOTE;                         // if we started, flag  he cannot do it in reply\r
        }\r
-        if(score == -INF) { moveStack[curMove] = 0; goto abortMove; } // zap illegal moves\r
+        if(score == -INF) {\r
+          if(level == 1) repeatMove[repCnt++] = move & 0xFFFFFF | (p[tb.piece].value == 10*LVAL ? 3<<24 : 1 << 24);\r
+          moveStack[curMove] = 0; // zap illegal moves\r
+          goto abortMove;\r
+        }\r
       }\r
 #if 1\r
       score = -Search(-beta, -iterAlpha, -difEval - tb.booty, replyDep, promoSuppress & ~PROMOTE, defer);\r
@@ -1954,7 +1958,8 @@ printf("# deferral of %d\n", deferred);
       for(i=retFirst; i<retMSP; i++) printf("# %d. %08x %08x %s\n", i-50, moveStack[i], ret, MoveToText(moveStack[i], 0));\r
       reason = NULL;\r
       for(i=0; i<repCnt; i++) {if((repeatMove[i] & 0xFFFFFF) == ret) {\r
-        reason = "Repeats earlier position";\r
+        if(repeatMove[i] & 1<<24) reason = (repeatMove[i] & 1<<25 ? "Distant capture of protected Lion" : "Counterstrike against Lion");\r
+        else reason = "Repeats earlier position";\r
         break;\r
       }\r
  printf("# %d. %08x %08x %s\n", i, repeatMove[i], ret, MoveToText(repeatMove[i], 0));\r