diff -r 4dcfb4c58b6d -r d726e4b46c33 src/chess/pawn.c --- a/src/chess/pawn.c Thu Apr 17 12:16:14 2014 +0200 +++ b/src/chess/pawn.c Wed May 28 15:47:57 2014 +0200 @@ -71,28 +71,10 @@ } _Bool pawn_isblocked(GameState *gamestate, Move *move) { - return mdst(gamestate->board, move) && !move->capture; + if (move->torow == move->fromrow + 1 || move->torow == move->fromrow - 1) { + return mdst(gamestate->board, move) && !move->capture; + } else { + return mdst(gamestate->board, move) || + gamestate->board[(move->fromrow+move->torow)/2][move->tofile]; + } } - -int pawn_getlocation(GameState *gamestate, Move *move) { - int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); - - if (move->fromfile == POS_UNSPECIFIED) { - move->fromfile = move->tofile; - } - move->fromrow = move->torow + d; - if (move->fromrow > 6) { - return INVALID_POSITION; - } else { - /* advanced first move */ - if (move->fromrow == (d < 0 ? 2 : 5) && - msrc(gamestate->board,move) != move->piece) { - - move->fromrow += d; - if (move->fromrow > 6) { - return INVALID_POSITION; - } - } - } - return VALID_MOVE_SYNTAX; -}