X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=moves.c;h=91f0072a2ff7362ce30bccc481176241778d2102;hb=7cd0052b1919644b72b23993328bfc542a8525d3;hp=6a747a276705ae16d89898290a2a9329ce6fa5d4;hpb=a6e61c9b9dac10313dedc401f47d82038753189f;p=xboard.git diff --git a/moves.c b/moves.c index 6a747a2..91f0072 100644 --- a/moves.c +++ b/moves.c @@ -986,6 +986,14 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure, case WhiteWazir: case BlackWazir: + if(gameInfo.variant == VariantXiangqi) { + int palace = (piece == WhiteWazir ? 1 : BOARD_HEIGHT-2); // Palace center + if(ff <= BOARD_WIDTH/2 && !SameColor(board[rf][ff+1], piece)) callback(board, flags, NormalMove, rf, ff, rf, ff+1, closure); + if(ff >= BOARD_WIDTH/2 && !SameColor(board[rf][ff-1], piece)) callback(board, flags, NormalMove, rf, ff, rf, ff-1, closure); + if(rf >= palace && !SameColor(board[rf-1][ff], piece)) callback(board, flags, NormalMove, rf, ff, rf-1, ff, closure); + if(rf <= palace && !SameColor(board[rf+1][ff], piece)) callback(board, flags, NormalMove, rf, ff, rf+1, ff, closure); + break; + } Wazir(board, flags, rf, ff, callback, closure); break;