Fix bug in Berolina e.p. capture
authorH.G. Muller <h.g.muller@hccnet.nl>
Tue, 12 Feb 2013 15:03:36 +0000 (16:03 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Tue, 12 Feb 2013 15:06:49 +0000 (16:06 +0100)
A move to the e.p. square in Berolina is not always an attempt to
capture e.p., but can also be a normal non-capture. The latter were
refused, however, because the capture square was always shifted for
Pawn moves to the e.p. square. Now it is only done when the move
has capture rights associated with it.

fairymax.c

index 792ceeb..20b63dd 100644 (file)
@@ -187,7 +187,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
       }\r
 #endif\r
       m=E<16|(E^112)<16&&flag&1&y-E<2&E-y<2?I:m;      /* bad castling  */\r
-      if(p<3&y==E)H=z&127;                     /* shift capt.sqr. H if e.p.*/\r
+      if(p<3&y==E&flag)H=z&127;                /* shift capt.sqr. H if e.p.*/\r
       t=b[H];\r
       if(flag&1+!t)                            /* mode (capt/nonc) allowed?*/\r
       {if(t&&(t&16)==k)break;                  /* capture own              */\r