From 6bb0ca7a95818cda8b6a08b8815359203af4d84b Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Mon, 1 Nov 2010 12:41:36 +0100 Subject: [PATCH] Implement e.p.-less initial double-moves The leaper bit in the secondary rights (in combination with primary rights = 4, the double-push code) is used to indicate the e.p. square should not be set. In this case the secondary hopper bit indicates if the double push can even be made if the intermediate square is occupied (to make it a rank-dependent leaper move rather than a true double- push). In al cases these secondary bits are cleared. --- fairymax.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/fairymax.c b/fairymax.c index d02f86a..3b2db59 100644 --- a/fairymax.c +++ b/fairymax.c @@ -248,7 +248,7 @@ int k,q,l,e,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ ((b[G=r<0?x&~15:BW-1|x&112]^32)<33 /* no virgin R in corner G, */ ||b[G^1]|b[G^2]|b[FF=y+v-r]) /* no 2 empty sq. next to R */ )t+=flag&4; /* fake capt. for nonsliding*/ - else F=y; /* enable e.p. */ + else if(flag&64)t=flag&128?0:t,flag&=63;else F=y; /* enable e.p. */ if(s&&flag&8)t=0,flag^=flag>>4&15; /* hoppers go to next phase */ if(!(flag&S)) /* zig-zag piece? */ r=v,flag^=flag>>4&15; /* alternate vector & mode */ -- 1.7.0.4