1.1 --- a/src/chess/pawn.c Thu Apr 17 12:16:14 2014 +0200 1.2 +++ b/src/chess/pawn.c Wed May 28 15:47:57 2014 +0200 1.3 @@ -71,28 +71,10 @@ 1.4 } 1.5 1.6 _Bool pawn_isblocked(GameState *gamestate, Move *move) { 1.7 - return mdst(gamestate->board, move) && !move->capture; 1.8 + if (move->torow == move->fromrow + 1 || move->torow == move->fromrow - 1) { 1.9 + return mdst(gamestate->board, move) && !move->capture; 1.10 + } else { 1.11 + return mdst(gamestate->board, move) || 1.12 + gamestate->board[(move->fromrow+move->torow)/2][move->tofile]; 1.13 + } 1.14 } 1.15 - 1.16 -int pawn_getlocation(GameState *gamestate, Move *move) { 1.17 - int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); 1.18 - 1.19 - if (move->fromfile == POS_UNSPECIFIED) { 1.20 - move->fromfile = move->tofile; 1.21 - } 1.22 - move->fromrow = move->torow + d; 1.23 - if (move->fromrow > 6) { 1.24 - return INVALID_POSITION; 1.25 - } else { 1.26 - /* advanced first move */ 1.27 - if (move->fromrow == (d < 0 ? 2 : 5) && 1.28 - msrc(gamestate->board,move) != move->piece) { 1.29 - 1.30 - move->fromrow += d; 1.31 - if (move->fromrow > 6) { 1.32 - return INVALID_POSITION; 1.33 - } 1.34 - } 1.35 - } 1.36 - return VALID_MOVE_SYNTAX; 1.37 -}