Allow e.p. capture as check evasion
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 6 Feb 2017 18:24:38 +0000 (19:24 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 6 Feb 2017 18:24:38 +0000 (19:24 +0100)
The routine NonEvade, which vets move when in check before making them,
now recognizes e.p. captures (i.e. diagonal Pawn moves to an empty square)
when a Pawn is checking as a valid evasion.

dropper.c

index f2bf201..ae671ce 100644 (file)
--- a/dropper.c
+++ b/dropper.c
@@ -990,6 +990,7 @@ NonEvade (StackFrame *f)
        if(f->toSqr == f->checker) return 0;  // captures only checker: OK
        d = dist[f->checker - f->toSqr];
        if(d && deltaVec[f->toSqr - f->checker] == f->checkDir && d < f->checkDist) return 0; // interposes: OK
+       if(f->fromPiece + board[f->checker] == COLOR && f->toSqr - f->fromSqr & 1) return (board[f->toSqr] != 0);
        return 1;
     }
     // king move