int makruk;\r
int prom;\r
char piecename[32], piecetype[32], blacktype[32];\r
+char selectedFairy[80];\r
char *inifile = INI_FILE;\r
\r
int Ticks, tlim, Setup, SetupQ;\r
\r
int GameHistory[1024];\r
-char HistoryBoards[1024][STATE], setupPosition[131];\r
+char HistoryBoards[1024][STATE], setupPosition[162];\r
int GamePtr, HistPtr;\r
\r
#define W while\r
of[256],\r
od[16]; /* 1st dir. in o[] per piece*/\r
\r
-signed char L,pl[17],\r
+signed char L,pl[32],\r
b[513], /* board: 16x8+dummy, + PST */\r
T[4104], /* hash translation table */\r
centr[32],\r
((b[G=r<0?x&~15:BW-1|x&112]^32)<33 /* no virgin R in corner G, */\r
||b[G^1]|b[G^2]|b[FF=y+v-r]) /* no 2 empty sq. next to R */\r
)t+=flag&4; /* fake capt. for nonsliding*/\r
- else F=y; /* enable e.p. */\r
+ else if(flag&64)t=flag&128?0:t,flag&=63;else F=y; /* enable e.p. */\r
if(s&&flag&8)t=0,flag^=flag>>4&15; /* hoppers go to next phase */\r
if(!(flag&S)) /* zig-zag piece? */\r
r=v,flag^=flag>>4&15; /* alternate vector & mode */\r
HistoryBoards[s][BW*i+j] = b[16*i+j]|64*(16*i+j==O);\r
}\r
\r
-void PrintVariants()\r
+void PrintVariants(int combo)\r
{\r
- int i, j, count=0; char c, buf[80];\r
+ int i, j, count=0, total=0; char c, buf[80];\r
FILE *f;\r
\r
f = fopen(INI_FILE, "r");\r
while(fscanf(f, "Game: %s", buf) != 1 && c != EOF) \r
while((c = fgetc(f)) != EOF && c != '\n');\r
if(c == EOF) break;\r
- if(count++) printf(",");\r
- printf("%s", buf);\r
+ total++;\r
+ if(combo == (strstr(buf, "fairy/") != buf)) continue;\r
+ if(combo && count == 0) strcpy(selectedFairy, buf);\r
+ if(count++) printf(combo ? " /// " : ",");\r
+ printf("%s", combo ? buf+6 : buf);\r
} while(c != EOF);\r
\r
fclose(f);\r
+ if(!combo && total != count) printf("%sfairy", count ? "," : "");\r
}\r
\r
void PrintOptions()\r
printf("feature option=\"Resign Threshold -spin %d 200 1200\"\n", Threshold);\r
printf("feature option=\"Ini File -file %s\"\n", inifile);\r
printf("feature option=\"Multi-PV Margin -spin %d 0 1000\"\n", margin);\r
- printf("feature option=\"Playing Style ;-) -combo Brilliant /// *Brave /// Beautiful\"\n");\r
+ printf("feature option=\"Variant fairy selects -combo "); PrintVariants(1); printf("\"\n");\r
printf("feature option=\"Dummy Slider Example -slider 20 0 100\"\n");\r
- printf("feature option=\"Dummy String Example -file happy birthday!\"\n");\r
+ printf("feature option=\"Dummy String Example -string happy birthday!\"\n");\r
printf("feature option=\"Dummy Path Example -path .\"\n");\r
printf("feature option=\"Clear Hash -button\"\n");\r
printf("feature done=1\n");\r
\r
if(name != NULL)\r
{ /* search for game name in definition file */\r
+ if(!strcmp(name, "fairy")) name = selectedFairy;\r
while(fscanf(f, "Game: %s", buf)!=1 || strcmp(name, buf) ) {\r
while((c = fgetc(f)) != EOF && c != '\n');\r
count++;\r
printf("feature memory=1\n");\r
printf("feature setboard=0 ping=1 done=0\n");\r
printf("feature variants=\"");\r
- PrintVariants();\r
+ PrintVariants(0);\r
printf("\"\n");\r
PrintOptions();\r
continue;\r
}\r
if(sscanf(line+7, "Clear Hash") == 1) for(i=0; i<U; i++) A->K = 0;\r
if(sscanf(line+7, "MultiVariation Margin=%d", &margin) == 1) continue;\r
+ if(sscanf(line+7, "Variant fairy selects=%s", selectedFairy+6) == 1) continue;\r
continue;\r
}\r
if (!strcmp(command, "go")) {\r
InitGame();\r
if(Setup) {\r
for(i=0; i<128; i++) b[i] = setupPosition[i];\r
+ for(i=0; i<32; i++) pl[i] = setupPosition[i+130];\r
Side = setupPosition[128]; Q = SetupQ;\r
- pl[WHITE] = setupPosition[129];\r
- pl[BLACK] = setupPosition[130];\r
+ R = setupPosition[129];\r
}\r
for(i=0; i<=U; i++) A[i].D = A[i].K = 0; // clear hash table\r
for(nr=0; nr<GamePtr; nr++) {\r
GamePtr = HistPtr = 0; Setup = 1; SetupQ = Q; // start anew\r
for(i=0; i<128; i++) setupPosition[i] = b[i]; // remember position\r
setupPosition[128] = Side;\r
- setupPosition[129] = pl[WHITE];\r
- setupPosition[130] = pl[BLACK];\r
+ setupPosition[129] = R;\r
+ for(i=0; i<32; i++) setupPosition[i+130] = pl[i];\r
continue;\r
}\r
/* command not recognized, assume input move */\r