From: H.G. Muller Date: Mon, 11 Feb 2013 21:12:49 +0000 (+0100) Subject: Keep track of piece pairs, with configurable bonus X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=6a1bd09c5d3c876e4dfa565438a5d3d549fdd2f1;p=fairymax.git Keep track of piece pairs, with configurable bonus A new array bp[] is added, indexed by piece type, to store the pair bonuses for each piece type. The bonus is awarded on capture when the piece count kept in pl[] for that type becomes odd. The value can be specified as the 'move rights' of a step vector 0, appended to the piece description. --- diff --git a/fairymax.c b/fairymax.c index 6ae3170..9782ba4 100644 --- a/fairymax.c +++ b/fairymax.c @@ -130,7 +130,7 @@ oo[32], /* initial piece setup */ of[256], od[16]; /* 1st dir. in o[] per piece*/ -signed char L,pl[32], +signed char L,pl[32],pb[32], b[513], /* board: 16x8+dummy, + PST */ T[4104], /* hash translation table */ centr[32], @@ -201,7 +201,7 @@ int k,q,l,e,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ v+=centr[p]?b[x+257]-b[y+257]:0; /* center positional pts. */ if(!(G&S))b[FF]=b[G],v+=50; /* castling: put R & score */ b[G]=b[H]=0;b[x]=gt;b[y]=u|32; /* do move, set non-virgin */ - pl[t&31]-=!!t; /* updat victim piece count */ + i+=-((pl[t&31]-=!!t)&1)&pb[t&31];/* update piece count, pair bonus */ v-=w[p]>0|R>1)*pb[i] -(pl[i+16]>>1)*pb[i]; if(w[oo[i]] < 0) k = w[oo[i]]; } R -= 2*(-k/FAC); @@ -512,6 +513,8 @@ void LoadGame(char *name) blacktype[c&31]=i; piecename[i]=c&31; if(piecetype[c&31]==0) piecetype[c&31]=i; // only first succession |= w[i] < -4; // expendable royalty; assume we can promote to it + } else { + if(!o[j]) pb[i] = pb[i+16] = of[j--]; // hand-set pair bonus } j++; o[j]=0; /* 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]); /**/ @@ -857,7 +860,7 @@ int main(int argc, char **argv) case 0: // undefined piece, ignore break; } - pl[BLACK+WHITE-color]++;pl[p+color]++; + pl[BLACK+WHITE-color]++; if(pl[p+color]++&1) Q+=pb[p]; if(w[p+color] == -1)pl[p+color]=1; // fake we have one if value = -1, to thwart extinction condition continue; }