Fix setting up of variants normal and lion
[hachu.git] / hachu.c
diff --git a/hachu.c b/hachu.c
index e660aa9..3b7a4a3 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -140,7 +140,7 @@ 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, tsume, pvCuts, allowRep, entryProm;\r
+int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag, repDraws, stalemate, tsume, pvCuts, allowRep, entryProm;\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
@@ -369,23 +369,23 @@ PieceDesc taikyokuPieces[] = {
 };\r
 \r
 PieceDesc chessPieces[] = {\r
-  {"Q", "",  950, { X,X,X,X,X,X,X,X } },\r
+  {"FK", "", 950, { X,X,X,X,X,X,X,X } },\r
   {"R", "",  500, { X,0,X,0,X,0,X,0 } },\r
   {"B", "",  320, { 0,X,0,X,0,X,0,X } },\r
   {"N", "",  300, { N,N,N,N,N,N,N,N } },\r
   {"K", "",  280, { 1,1,1,1,1,1,1,1 } },\r
-  {"P", "Q",  80, { M,C,0,0,0,0,0,C } },\r
+  {"P", "FK", 80, { M,C,0,0,0,0,0,C } },\r
   { NULL }  // sentinel\r
 };\r
 \r
 PieceDesc lionPieces[] = {\r
   {"LN","", LVAL, { L,L,L,L,L,L,L,L } },\r
-  {"Q", "",  600, { X,X,X,X,X,X,X,X } },\r
+  {"FK", "", 600, { X,X,X,X,X,X,X,X } },\r
   {"R", "",  300, { X,0,X,0,X,0,X,0 } },\r
   {"K", "",  280, { 1,1,1,1,1,1,1,1 } },\r
   {"B", "",  190, { 0,X,0,X,0,X,0,X } },\r
   {"N", "",  180, { N,N,N,N,N,N,N,N } },\r
-  {"P", "Q",  50, { M,C,0,0,0,0,0,C } },\r
+  {"P", "FK", 50, { M,C,0,0,0,0,0,C } },\r
   { NULL }  // sentinel\r
 };\r
 \r
@@ -421,8 +421,8 @@ char tenArray[] = "LN:FLICSGK:DEGSCI:FLNL/:RV.:CS:CS.:BT:KN:LN:FK:PH:BT.:CS:CS.:
                  "....d......d..../pppppppppppppppp/:sm:vmr:hf:se:bg:rg:vg:gg:rg:bg:se:hfr:vm:sm/"\r
                  ":ss:vsb:dh:dk:wb:fi:fe:lh:fi:wb:dk:dhb:vs:ss/:rv.:cs:cs.:bt:ph:fk:ln:kn:bt.:cs:cs.:rv/ln:flicsg:dekgsci:flnl";\r
 char shoArray[] = "LNSGKGSNL/.B..:DE..R./PPPPPPPPP/........./........./........./ppppppppp/.r..:de..b./lnsgkgsnl";\r
-char chessArray[] = "RNBQKBNR/PPPPPPPP/......../......../......../......../pppppppp/rnbqkbnr";\r
-char lionArray[]  = "R:LNBQKBNR/PPPPPPPP/......../......../......../......../pppppppp/r:lnbqkbnr";\r
+char chessArray[] = "RNB:FKKBNR/PPPPPPPP/......../......../......../......../pppppppp/rnb:fkkbnr";\r
+char lionArray[]  = "R:LNB:FKKBNR/PPPPPPPP/......../......../......../......../pppppppp/r:lnb:fkkbnr";\r
 char shatArray[]= "RNBK:FKBNR/PPPPPPPP/......../......../......../......../pppppppp/rnbk:fkbnr";\r
 char thaiArray[]= "RNSK:SMSNR/......../PPPPPPPP/......../......../pppppppp/......../rnsk:smsnr";\r
 \r
@@ -898,7 +898,8 @@ Init (int var)
   chuFlag = (currentVariant == V_CHU || currentVariant == V_LION);\r
   tenFlag = (currentVariant == V_TENJIKU);\r
   chessFlag = (currentVariant == V_CHESS || currentVariant == V_LION);\r
-  repDraws  = (currentVariant == V_CHESS || currentVariant == V_SHATRANJ || currentVariant == V_MAKRUK || currentVariant == V_LION);\r
+  stalemate = (currentVariant == V_CHESS || currentVariant == V_MAKRUK || currentVariant == V_LION);\r
+  repDraws  = (stalemate || currentVariant == V_SHATRANJ);\r
   ll = 0; lr = bHeight - 1; ul = (bHeight - 1)*bWidth; ur = ul + bHeight - 1;\r
 \r
   for(i= -1; i<9; i++) { // board steps in linear coordinates\r
@@ -2042,6 +2043,7 @@ if(PATH) printf("%d:%2d:%d %3d %6x %-10s %6d %6d  (%d)\n", level, depth, iterDep
     if(lmr && bestScore <= alpha && iterDep == depth)\r
       depth++, lmr--; // self-deepen on fail-low reply to late move by lowering reduction\r
 #endif\r
+    if(stalemate && bestScore == -INF && !inCheck) bestScore = 0; // stalemate\r
 #ifdef HASH\r
     // hash store\r
     hashTable[index].lock[hit]  = hashKeyH;\r