X-Git-Url: http://winboard.nl/cgi-bin?p=capablanca.git;a=blobdiff_plain;f=lasker-2.2.3%2Fsrc%2Fmovecheck.c;h=1f6d69b57d6e58354c12b8d00e2f58831279cecb;hp=c0dd853effa9629da1f31b236b18ffc5b9119b5b;hb=b0878c4bb13c5ba03f6defe11f903fa07247b718;hpb=2255d9155bc3e24104ce7a30edeff78fd6b4d53e diff --git a/lasker-2.2.3/src/movecheck.c b/lasker-2.2.3/src/movecheck.c index c0dd853..1f6d69b 100644 --- a/lasker-2.2.3/src/movecheck.c +++ b/lasker-2.2.3/src/movecheck.c @@ -1303,6 +1303,21 @@ int legal_move(struct game_state_t * gs, return 0; if (gs->board[tFile][tRank] != NOPIECE) return 0; + if (gs->promoType == 3) { // Shogi + int r; + switch(move_piece) { + case PAWN: // check for own Pawn in same file + for(r=0; rranks; r++) if(gs->board[tFile][r] == (gs->onMove|PAWN)) return 0; + case LANCE: // Pawns and Lances not on last rank + if(gs->onMove == WHITE && tRank >= gs->ranks-1) return 0; + if(gs->onMove == BLACK && tRank < 1) return 0; + break; + case HONORABLEHORSE: // Knights at least two ranks from edge + if(gs->onMove == WHITE && tRank >= gs->ranks-2) return 0; + if(gs->onMove == BLACK && tRank < 2) return 0; + default: ; + } + } else if (move_piece == PAWN && (tRank == 0 || tRank == gs->ranks-1)) return 0; return 1;