of[256],\r
od[16]; /* 1st dir. in o[] per piece*/\r
\r
-signed char L,pl[32],\r
+signed char L,pl[32],pb[32],\r
b[513], /* board: 16x8+dummy, + PST */\r
T[4104], /* hash translation table */\r
centr[32],\r
v+=centr[p]?b[x+257]-b[y+257]:0; /* center positional pts. */\r
if(!(G&S))b[FF]=b[G],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
+ i+=-((pl[t&31]-=!!t)&1)&pb[t&31];/* update piece count, pair bonus */\r
v-=w[p]>0|R<EG?0:20; /*** freeze K in mid-game ***/\r
if(p<3) /* pawns: */\r
{v-=9*((x-2&M||b[x-2]-u)+ /* structure, undefended */\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
+ Q += (pl[i]>>1)*pb[i] -(pl[i+16]>>1)*pb[i];\r
if(w[oo[i]] < 0) k = w[oo[i]];\r
}\r
R -= 2*(-k/FAC);\r
blacktype[c&31]=i; piecename[i]=c&31;\r
if(piecetype[c&31]==0) piecetype[c&31]=i; // only first\r
succession |= w[i] < -4; // expendable royalty; assume we can promote to it\r
+ } else {\r
+ if(!o[j]) pb[i] = pb[i+16] = of[j--]; // hand-set pair bonus\r
}\r
j++; o[j]=0;\r
/* printf("# c='%c' i=%d od[i]=%d j=%d (%3d,%8x)\n",c?c:' ',i,od[i],j,o[j-1],of[j-1]); /**/\r
case 0: // undefined piece, ignore\r
break;\r
}\r
- pl[BLACK+WHITE-color]++;pl[p+color]++;\r
+ pl[BLACK+WHITE-color]++; if(pl[p+color]++&1) Q+=pb[p];\r
if(w[p+color] == -1)pl[p+color]=1; // fake we have one if value = -1, to thwart extinction condition\r
continue;\r
}\r