Implement e.p.-less initial double-moves
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 1 Nov 2010 11:41:36 +0000 (12:41 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 1 Nov 2010 11:41:36 +0000 (12:41 +0100)
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

index d02f86a..3b2db59 100644 (file)
@@ -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, */\r
          ||b[G^1]|b[G^2]|b[FF=y+v-r])          /* no 2 empty sq. next to R */\r
         )t+=flag&4;                            /* fake capt. for nonsliding*/\r
-      else F=y;                                /* enable e.p.              */\r
+      else if(flag&64)t=flag&128?0:t,flag&=63;else F=y; /* enable e.p.     */\r
       if(s&&flag&8)t=0,flag^=flag>>4&15;       /* hoppers go to next phase */\r
       if(!(flag&S))                            /* zig-zag piece?           */\r
        r=v,flag^=flag>>4&15;                   /* alternate vector & mode  */\r