X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=moves.c;h=e20d2e40ad582a7619d1719e77c6f9e388e9690a;hb=38d1b8471964ebf9d4da576d74a452dc3a12b057;hp=52b609c0899c596b770fa3a730bd84358fea8479;hpb=ef62f9528016f12b917f859f7021311445172458;p=xboard.git diff --git a/moves.c b/moves.c index 52b609c..e20d2e4 100644 --- a/moves.c +++ b/moves.c @@ -5,7 +5,7 @@ * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, - * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. + * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * @@ -1224,6 +1224,7 @@ GenLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure, Ches if(ff <= BOARD_LEFT+2) { left = ff+1; right = BOARD_LEFT+3; } for(k=left; k<=right && ft != NoRights; k++) /* first test if blocked */ if(k != ft && board[0][k] != EmptySquare) ft = NoRights; + if(ft == 0 && ff != 1 && board[0][1] != EmptySquare) ft = NoRights; /* Rook can be blocked on b1 */ if(ff > BOARD_LEFT+2) for(k=left+1; k<=right && ft != NoRights; k++) /* then if not checked */ if(!ignoreCheck && CheckTest(board, flags, 0, ff, 0, k, FALSE)) ft = NoRights; @@ -1250,6 +1251,7 @@ GenLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure, Ches if(ff <= BOARD_LEFT+2) { left = ff+1; right = BOARD_LEFT+3; } for(k=left; k<=right && ft != NoRights; k++) /* first test if blocked */ if(k != ft && board[BOARD_HEIGHT-1][k] != EmptySquare) ft = NoRights; + if(ft == 0 && ff != 1 && board[BOARD_HEIGHT-1][1] != EmptySquare) ft = NoRights; /* Rook can be blocked on b8 */ if(ff > BOARD_LEFT+2) for(k=left+1; k<=right && ft != NoRights; k++) /* then if not checked */ if(!ignoreCheck && CheckTest(board, flags, BOARD_HEIGHT-1, ff, BOARD_HEIGHT-1, k, FALSE)) ft = NoRights; @@ -1454,8 +1456,8 @@ LegalityTest (Board board, int flags, int rf, int ff, int rt, int ft, int promoC /* [HGM] Cobra and Falcon are wildcard pieces; consider all their moves legal */ /* (perhaps we should disallow moves that obviously leave us in check?) */ - if(piece == WhiteFalcon || piece == BlackFalcon || - piece == WhiteCobra || piece == BlackCobra) + if((piece == WhiteFalcon || piece == BlackFalcon || + piece == WhiteCobra || piece == BlackCobra) && gameInfo.variant != VariantChu) return CheckTest(board, flags, rf, ff, rt, ft, FALSE) ? IllegalMove : NormalMove; cl.rf = rf;