X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=fairymax.c;h=46b3890cdafdbb0c39b4149e15d7cc401e942ec8;hb=pairomax;hp=b236e4d54bb18ab4d20c1f49ad0c2cfd7c372e4e;hpb=319c6cd9990e350a23689b30053b25660c2c3d8f;p=fairymax.git diff --git a/fairymax.c b/fairymax.c index b236e4d..46b3890 100644 --- a/fairymax.c +++ b/fairymax.c @@ -163,7 +163,7 @@ int k,q,l,e,ev,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ (K=X,L=Y&~S,Score=m,d=3))) /* time's up: go do best */ {x=B=X; /* start scan at prev. best */ h=Y&S; /* request try noncastl. 1st*/ - P=d>2&&l+I?D(16-k,-l,1-l,-e,-ev,2*S,2*S,d-3):I; /* search null move */ + 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 */ m=-P beta unconsidered:static eval */ SHAMAX( if(pl[k]<=1&pl[16-k]>1)m=I-1; ) /* bare king loses */ N++; /* node count (for timing) */ @@ -219,7 +219,7 @@ int k,q,l,e,ev,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ re=v>>Fac(v>>15&16^k); /* Reduce eval if drawish for leading side */ if(z&S)V=m-margin>q?m-margin:q; /* multiPV */ C=d-1-(d>5&p>2&!t&!h); /* nw depth, reduce non-cpt.*/ - C=R0?C:d; /* extend 1 ply if in-check */ do s=C>2|re>V?-D(16-k,-l,-V,/*** futility, recursive eval. of reply */ -v,-re,F,y&255,C):re; @@ -300,7 +300,7 @@ Fac(int k) h=pl[k]-pl[17-k]-pl[18-k]; /* his pieces (incl. King) */ if(h<2)r=0; /* bare K easy even w.o. P */ j=h-n; /* defenders after sac for P*/ - if(j<3&&j--){ /* can sac, <= 1 piece left */ + if(j<3&&j-->0){ /* can sac, <= 1 piece left */ i=18-k;W(!pl[++i]); /* get lowest piece */ e=abs(w[i--])*n; /* sac for Pawn (if any) */ W(h>1)h-=pl[++i],e-=pl[i]*w[i]; /* total value his remaining*/ @@ -491,7 +491,7 @@ void PrintOptions() void LoadGame(char *name) { - int i, j, ptc, count=0; char c, buf[80], pieceToChar[80]; + int i, j, ptc, count=0; char c, buf[80], pieceToChar[80], parent[80]; static int currentVariant; FILE *f; @@ -509,7 +509,7 @@ void LoadGame(char *name) if(!strcmp(name, "makruk") && Cambodian) name = "cambodian"; else if(!strcmp(name, "fairy")) name = selectedFairy; gating = !strcmp(name, "seirawan"); - while((ptc=fscanf(f, "Game: %s # %s", buf, pieceToChar))==0 || strcmp(name, buf) ) { + while((ptc=fscanf(f, "Game: %s # %s %s", buf, pieceToChar, parent))==0 || strcmp(name, buf) ) { while((c = fgetc(f)) != EOF && c != '\n'); count++; if(c == EOF) { @@ -552,8 +552,9 @@ void LoadGame(char *name) fclose(f); sh = w[7] < 250 ? 3 : 0; makruk = w[7]==181 ? 64 : 0; // w[7] is used as kludge to enable makruk promotions - if(name == selectedFairy) { - printf(ptc == 1 ? "setup " : "setup (%s) ", pieceToChar); // setup board in GUI + if(ptc > 1) { // setup board in GUI, by sending it pieceToCharTable and FEN + if(ptc == 2) printf("setup (%s) ", pieceToChar); + else printf("setup (%s) %dx%d+0_%s", pieceToChar, BW, BH, parent); for(i=0; iK = 0; + if(sscanf(line+7, "Clear Hash%c", &c) == 1) for(i=0; i<=U; i++) A[i].K = 0; if(sscanf(line+7, "MultiVariation Margin=%d", &margin) == 1) continue; if(sscanf(line+7, "Variant fairy selects=%s", selectedFairy+6) == 1) continue; if(sscanf(line+7, "Cambodian Makruk rules=%d", &Cambodian) == 1) continue;