(K=X,L=Y&~S,Score=m,d=3))) /* time's up: go do best */\r
{x=B=X; /* start scan at prev. best */\r
h=Y&S; /* request try noncastl. 1st*/\r
- P=d>2&&l+I?D(16-k,-l,1-l,-e,-ev,2*S,2*S,d-3):I; /* search null move */\r
+ P=n>2&d>1&&l+I?D(16-k,-l,1-l,-e,-ev,2*S,2*S,d-3):I; /* search null move */\r
m=-P<l|R<5?d-2?-I:ev:-P; /*** prune if > beta unconsidered:static eval */\r
SHAMAX( if(pl[k]<=1&pl[16-k]>1)m=I-1; ) /* bare king loses */\r
N++; /* node count (for timing) */\r
re=v>>Fac(v>>15&16^k); /* Reduce eval if drawish for leading side */\r
if(z&S)V=m-margin>q?m-margin:q; /* multiPV */\r
C=d-1-(d>5&p>2&!t&!h); /* nw depth, reduce non-cpt.*/\r
- C=R<EG|P-I|d<3||t&&p-3?C:d; /* extend 1 ply if in-check */\r
+ C=R<EG|P-I|d<3||t&&w[p]>0?C:d; /* extend 1 ply if in-check */\r
do\r
s=C>2|re>V?-D(16-k,-l,-V,/*** futility, recursive eval. of reply */\r
-v,-re,F,y&255,C):re;\r
h=pl[k]-pl[17-k]-pl[18-k]; /* his pieces (incl. King) */\r
if(h<2)r=0; /* bare K easy even w.o. P */\r
j=h-n; /* defenders after sac for P*/\r
- if(j<3&&j--){ /* can sac, <= 1 piece left */\r
+ if(j<3&&j-->0){ /* can sac, <= 1 piece left */\r
i=18-k;W(!pl[++i]); /* get lowest piece */\r
e=abs(w[i--])*n; /* sac for Pawn (if any) */\r
W(h>1)h-=pl[++i],e-=pl[i]*w[i]; /* total value his remaining*/\r
\r
void LoadGame(char *name)\r
{\r
- int i, j, ptc, count=0; char c, buf[80], pieceToChar[80];\r
+ int i, j, ptc, count=0; char c, buf[80], pieceToChar[80], parent[80];\r
static int currentVariant;\r
FILE *f;\r
\r
if(!strcmp(name, "makruk") && Cambodian) name = "cambodian"; else\r
if(!strcmp(name, "fairy")) name = selectedFairy;\r
gating = !strcmp(name, "seirawan");\r
- while((ptc=fscanf(f, "Game: %s # %s", buf, pieceToChar))==0 || strcmp(name, buf) ) {\r
+ while((ptc=fscanf(f, "Game: %s # %s %s", buf, pieceToChar, parent))==0 || strcmp(name, buf) ) {\r
while((c = fgetc(f)) != EOF && c != '\n');\r
count++;\r
if(c == EOF) {\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
+ if(ptc > 1) { // setup board in GUI, by sending it pieceToCharTable and FEN\r
+ if(ptc == 2) printf("setup (%s) ", pieceToChar);\r
+ else printf("setup (%s) %dx%d+0_%s", pieceToChar, BW, BH, parent);\r
for(i=0; i<BW; i++) printf("%c", piecename[oo[i+16]]+'`'); printf("/");\r
for(i=0; i<BW; i++) printf("%c", piecename[2]+'`'); printf("/");\r
for(i=2; i<BH-2; i++) printf("%d/", BW);\r
if(sscanf(line+7, "Ini File=%s", filename) == 1) {\r
inifile = filename; continue;\r
}\r
- if(sscanf(line+7, "Clear Hash%c", &c) == 1) for(i=0; i<=U; i++) A->K = 0;\r
+ if(sscanf(line+7, "Clear Hash%c", &c) == 1) for(i=0; i<=U; i++) A[i].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
if(sscanf(line+7, "Cambodian Makruk rules=%d", &Cambodian) == 1) continue;\r