src/rules/pawn.c

changeset 18
6008840b859e
parent 16
a298c6637c30
     1.1 --- a/src/rules/pawn.c	Sat Mar 29 14:46:33 2014 +0100
     1.2 +++ b/src/rules/pawn.c	Sat Mar 29 16:53:58 2014 +0100
     1.3 @@ -32,6 +32,22 @@
     1.4  
     1.5  _Bool pawn_chkrules(Board board, Move *move) {
     1.6      int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1);
     1.7 +    
     1.8 +    if (move->torow == (d < 0 ? 7 : 0)) {
     1.9 +        if (move->promotion) {
    1.10 +            uint8_t promopiece = move->promotion & PIECE_MASK;
    1.11 +            if (!promopiece || promopiece == PAWN || promopiece == KING) {
    1.12 +                return FALSE;
    1.13 +            }
    1.14 +        } else {
    1.15 +            return FALSE;
    1.16 +        }
    1.17 +    } else {
    1.18 +        if (move->promotion) {
    1.19 +            return FALSE;
    1.20 +        }
    1.21 +    }
    1.22 +    
    1.23      if (move->capture) {
    1.24          if (move->fromrow == move->torow + d && (
    1.25              move->fromfile == move->tofile + 1 ||

mercurial