Fix crash in double-push, and make it subject to chessFlag
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 24 Feb 2013 10:47:08 +0000 (11:47 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 21 Oct 2013 08:40:23 +0000 (10:40 +0200)
Passed squares in NewNonCapt are used as array index, and should not
be mutilated with flags! As the M (=non-capt only) move type is now
also used in Shatranj, make the double-push subject to a new chessFlag.

hachu.c

diff --git a/hachu.c b/hachu.c
index 9bc797c..173aae9 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -92,8 +92,8 @@ typedef struct {
 } UndoInfo;\r
 \r
 char *array, fenArray[4000], *reason;\r
-int bWidth, bHeight, bsize, zone, currentVariant;\r
-int stm, xstm, hashKeyH, hashKeyL, framePtr, msp, nonCapts, rootEval, retMSP, retFirst, retDep, pvPtr, level, cnt50, chuFlag=1, tenFlag, mobilityScore;\r
+int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag;\r
+int stm, xstm, hashKeyH, hashKeyL, framePtr, msp, nonCapts, rootEval, retMSP, retFirst, retDep, pvPtr, level, cnt50, mobilityScore;\r
 int nodes, startTime, tlim1, tlim2, repCnt, comp;\r
 Move retMove, moveStack[10000], path[100], repStack[300], pv[1000], repeatMove[300];\r
 \r
@@ -760,6 +760,7 @@ Init (int var)
   bsize = bWidth*bHeight;\r
   chuFlag = (currentVariant == V_CHU);\r
   tenFlag = (currentVariant == V_TENJIKU);\r
+  chessFlag = (currentVariant == V_CHESS);\r
 \r
   for(i= -1; i<9; i++) { // board steps in linear coordinates\r
     kStep[i] = STEP(direction[i&7].x,   direction[i&7].y);       // King\r
@@ -945,8 +946,8 @@ GenNonCapts (int promoSuppress)
          }\r
        } else\r
        if(r == M) { // FIDE Pawn; check double-move\r
-         if(!NewNonCapture(x, x+v, pFlag) && promoBoard[x-v])\r
-           NewNonCapture(x, x+2*v+DEFER, pFlag); // use promoSuppress flag as e.p. flag\r
+         if(!NewNonCapture(x, x+v, pFlag) && chessFlag && promoBoard[x-v])\r
+           NewNonCapture(x, x+2*v, pFlag), moveStack[msp-1] |= DEFER; // use promoSuppress flag as e.p. flag\r
        }\r
        continue;\r
       }\r