Adopt new method for indicating promotion-zone depth
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 20 May 2013 10:15:11 +0000 (12:15 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 20 May 2013 10:23:10 +0000 (12:23 +0200)
Fairy-Max normally promotes Pawns only on last rank. For Makruk, whih needs
6th rank, a kludge was used by trikkering on value 181 of the promotion
piece. Now a suffix =N to the board-size spec is used in stead, where N
indicates the deviant zone depth. For now we always assume N=3 when this
suffix is present (as the IA would not know how to do other zone depth
than 1 or 3).

data/fmax.ini
fairymax.c

index 5ecb18a..93e7f74 100644 (file)
@@ -326,7 +326,7 @@ R:630 1,3 16,3 -1,3 -16,3
 \r
 // Thai Chess. Note: value m = 181 controls promotion at 6th!\r
 Game: makruk\r
-8x8\r
+8x8=3\r
 12 11 8 7 3 8 11 12\r
 12 11 9 3 7 9 11 12\r
 p:100 -16,6 -15,5 -17,5 \r
@@ -344,7 +344,7 @@ R:630 1,3 16,3 -1,3 -16,3
 \r
 // Cambodian Chess. Like Makruk, but with extra initial King and Met moves\r
 Game: cambodian\r
-8x8\r
+8x8=3\r
 13 12 8 3 7 8 12 13\r
 13 12 9 7 4 9 12 13\r
 p:100 -16,6 -15,5 -17,5 \r
index 560f64d..94edc78 100644 (file)
@@ -498,6 +498,7 @@ void LoadGame(char *name)
         /* We have found variant, or if none specified, are at beginning of file */\r
         if(fscanf(f, "%dx%d", &BW, &BH)!=2 || BW>12 || BH!=8)\r
         { printf("telluser unsupported board size %dx%d\n",BW,BH); exit(0); }\r
+        makruk = 0; if(fscanf(f, "=%d", &i)) makruk=64; // new method to indicate deviant zone depth (for now assumes 3)\r
 \r
         for(i=0; i<BW; i++) fscanf(f, "%d", oo+i);\r
         for(i=0; i<BW; i++) fscanf(f, "%d", oo+i+16);\r
@@ -521,7 +522,6 @@ void LoadGame(char *name)
 \r
         fclose(f);\r
        sh = w[7] < 250 ? 3 : 0;\r
-       makruk = w[7]==181 ? 64 : 0; // w[7] is used as kludge to enable makruk promotions\r
         if(name == selectedFairy) {\r
             printf(ptc == 1 ? "setup " : "setup (%s) ", pieceToChar); // setup board in GUI\r
             for(i=0; i<BW; i++) printf("%c", piecename[oo[i+16]]+'`'); printf("/");\r