Implement option for using Okazaki rule
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 3 Apr 2014 18:51:13 +0000 (20:51 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 3 Apr 2014 18:51:13 +0000 (20:51 +0200)
With this rule counterstrike against an unprotected Lion is allowed.

hachu.c

diff --git a/hachu.c b/hachu.c
index 3bffac4..6d3e17f 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -140,7 +140,8 @@ typedef struct {
 } UndoInfo;\r
 \r
 char *array, fenArray[4000], startPos[4000], *reason, checkStack[300];\r
-int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag, repDraws, stalemate, tsume, pvCuts, allowRep, entryProm, pVal;\r
+int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag, repDraws, stalemate;\r
+int tsume, pvCuts, allowRep, entryProm, okazaki, pVal;\r
 int stm, xstm, hashKeyH=1, hashKeyL=1, framePtr, msp, nonCapts, rootEval, filling, promoDelta;\r
 int retMSP, retFirst, retDep, pvPtr, level, cnt50, mobilityScore;\r
 int ll, lr, ul, ur; // corner squares\r
@@ -1963,7 +1964,9 @@ MapFromScratch(attacks); // for as long as incremental update does not work.
          if(dist[tb.from-tb.to] != 1 && attacks[2*tb.to + stm] && p[tb.epVictim[0]].value <= 50)\r
            score = -INF;                           // our Lion is indeed made vulnerable and can be recaptured\r
        } else {                                    // other x Ln\r
-         if(promoSuppress & PROMOTE) score = -INF; // non-Lion captures Lion after opponent did same\r
+         if(promoSuppress & PROMOTE) {             // non-Lion captures Lion after opponent did same\r
+           if(!okazaki || attacks[2*tb.to + stm]) score = -INF;\r
+         }\r
          defer |= PROMOTE;                         // if we started, flag  he cannot do it in reply\r
        }\r
         if(score == -INF) {\r
@@ -2642,6 +2645,7 @@ pboard(board);
           printf("feature option=\"Full analysis PV -check 1\"\n"); // example of an engine-defined option\r
           printf("feature option=\"Allow repeats -check 0\"\n");\r
           printf("feature option=\"Promote on entry -check 0\"\n");\r
+          printf("feature option=\"Okazaki rule -check 0\"\n");\r
           printf("feature option=\"Resign -check 0\"\n");           // \r
           printf("feature option=\"Contempt -spin 0 -200 200\"\n"); // and another one\r
           printf("feature option=\"Tsume -combo no /// Sente mates /// Gote mates\"\n");\r
@@ -2653,6 +2657,7 @@ pboard(board);
           if(sscanf(inBuf+7, "Allow repeats=%d", &allowRep)  == 1) continue;\r
           if(sscanf(inBuf+7, "Resign=%d",   &resign)         == 1) continue;\r
           if(sscanf(inBuf+7, "Contempt=%d", &contemptFactor) == 1) continue;\r
+          if(sscanf(inBuf+7, "Okazaki rule=%d", &okazaki)    == 1) continue;\r
           if(sscanf(inBuf+7, "Promote on entry=%d", &entryProm) == 1) continue;\r
           if(sscanf(inBuf+7, "Tsume=%s", command) == 1) {\r
            if(!strcmp(command, "no"))    tsume = 0; else\r