int Threshold = 800;\r
int Score;\r
int makruk;\r
-int prom, pm, gating, succession;\r
+int prom, pm, gating, succession, hill;\r
char piecename[32], piecetype[32], blacktype[32];\r
char selectedFairy[80];\r
char *inifile = INI_FILE;\r
do{u=b[x]; /* scan board looking for */\r
if(u&&(u&16)==k) /* own piece (inefficient!)*/\r
{r=p=u&15; /* p = piece type (set r>0) */\r
+ if(hill&&w[p]<0&b[385+x])m=I,d=98; /* King on the hill: we won */\r
j=od[p]; /* first step vector f.piece*/\r
W(r=o[++j]) /* loop over directions o[] */\r
{A: /* resume normal after best */\r
v=d-1?e:i-p; /*** MVV/LVA scoring if d=1**/\r
if(d-!t>1) /*** all captures if d=2 ***/\r
{v=gt=0;G: /* retry move with gating */\r
- v+=centr[p]?b[x+257]-b[y+257]:0; /* center positional pts. */\r
+ v+=centr[p]*(b[x+257]-b[y+257]); /* center positional pts. */\r
if(G-S)b[FF]=(rk=b[G])|32,v+=50; /* castling: put R & score */\r
b[G]=b[H]=0;b[x]=gt;b[y]=u|32; /* do move, set non-virgin */\r
pl[t&31]-=!!t; /* updat victim piece count */\r
}\r
differs: ;\r
}\r
-\r
-\r
-\r
-\r
-\r
K=I;\r
cnt = D(s,-I,I,Q,O,LL|4*S,3);\r
#ifdef SHATRANJ\r
pl[oo[K+16]+16]++;pl[oo[K]]++;pl[18]++;pl[1]++;\r
if(w[oo[K+16]+16] == -1)pl[oo[K+16]+16]=1;\r
if(w[oo[K]] == -1)pl[oo[K]]=1;\r
- L=8;W(L--)b[16*L+K+257]=(K-BW/2)*(K-BW/2)+(L-3.5)*(L-3.5); /* center-pts table */\r
+ L=8;W(L--)b[16*L+K+257]=(K-BW/2+hill/2.)*(K-BW/2+hill/2.)+(L-3.5)*(L-3.5); /* center-pts table */\r
} /*(in unused half b[])*/\r
+ b[385+16*3+BW/2]=b[385+16*4+BW/2]=b[385+16*3+BW/2-1]=b[385+16*4+BW/2-1]=1; /* hill */\r
for(i=0; i<BW; i++) {\r
R += abs(w[oo[i]])/FAC + abs(w[oo[i+16]])/FAC;\r
Q += abs(w[oo[i]]) - abs(w[oo[i+16]]) + w[1] - w[2];\r
c=0; if(i>15 || j>255) break;\r
}\r
\r
- sh = w[7] < 250 ? 3 : 0;\r
+ sh = w[7] < 250 ? 3 : 0; hill = (w[3] == -2);\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=2+!!makruk; i<BH-2-!!makruk; i++) printf("%d/", BW);\r
for(i=0; i<BW; i++) printf("%c", piecename[1]+'@'); printf("/");\r
if(makruk) printf("8/");\r
- for(i=0; i<BW; i++) printf("%c", piecename[oo[i]]+'@'); printf(" w KQkq - 0 1\n");\r
+ for(i=0; i<BW; i++) printf("%c", oo[i] ? piecename[oo[i]]+'@' : '1'); printf(" w KQkq - 0 1\n");\r
}\r
while(fscanf(f, " # %[^\n]", pieceToChar)) printf("piece %s\n", pieceToChar);\r
fclose(f);\r
if(tlim>TimeLeft/15) tlim = TimeLeft/15;\r
PromPiece = 0; /* Always promote to Queen ourselves */\r
N=0;K=I;\r
+ if(hill) centr[3] = R>20 ? 1 : 22-R;\r
if (D(Side,-I,I,Q,O,LL|S,3)==I) {\r
Side ^= BLACK^WHITE;\r
m = GetTickCount() - Ticks;\r