/* we can always do that 'in place', now pointers to these rights are passed to ApplyMove */
if(gameInfo.variant == VariantBerolina) berolina = EP_BEROLIN_A;
- oldEP = (signed char)board[EP_STATUS]; epRank = board[EP_RANK]; epFile = board[EP_FILE]; lastFile = board[LAST_FILE],lastRank = board[LAST_RANK];
+ oldEP = (signed char)board[EP_STATUS]; epRank = board[EP_RANK]; epFile = board[EP_FILE]; lastFile = board[LAST_TO] & 255,lastRank = board[LAST_TO] >> 8;
board[EP_STATUS] = EP_NONE;
- board[EP_FILE] = board[EP_RANK] = board[LAST_FILE] = board[LAST_RANK] = 100;
+ board[EP_FILE] = board[EP_RANK] = 100, board[LAST_TO] = 0x4040;
if (fromY == DROP_RANK) {
/* must be first */
if(toX<BOARD_RGHT-1 && board[toY][toX+1] == BlackPawn &&
gameInfo.variant != VariantBerolina || toX > fromX)
board[EP_STATUS] = toX;
- board[LAST_FILE] = toX; board[LAST_RANK] = toY;
+ board[LAST_TO] = toX + 256*toY;
}
} else
if( pawn == BlackPawn ) {
if(toX<BOARD_RGHT-1 && board[toY][toX+1] == WhitePawn &&
gameInfo.variant != VariantBerolina || toX > fromX)
board[EP_STATUS] = toX;
- board[LAST_FILE] = toX; board[LAST_RANK] = toY;
+ board[LAST_TO] = toX + 256*toY;
}
}
#define BOARD_RGHT (gameInfo.boardWidth + gameInfo.holdingsWidth)
#define CASTLING (BOARD_RANKS-1) /* [HGM] hide in upper rank */
#define VIRGIN (BOARD_RANKS-2) /* [HGM] pieces not moved */
-#define LAST_RANK CASTLING][(BOARD_FILES-8) /* [HGM] in upper rank */
-#define LAST_FILE CASTLING][(BOARD_FILES-7) /* [HGM] in upper rank */
+#define LAST_TO CASTLING][(BOARD_FILES-7) /* [HGM] in upper rank */
#define TOUCHED_W CASTLING][(BOARD_FILES-6) /* [HGM] in upper rank */
#define TOUCHED_B CASTLING][(BOARD_FILES-5) /* [HGM] in upper rank */
#define EP_RANK CASTLING][(BOARD_FILES-4) /* [HGM] in upper rank */
rf, ff, rf + 1, ff + s, closure);
}
if (rf >= BOARD_HEIGHT+1>>1) {// [HGM] grand: 4th & 5th rank on 10-board
- int victimFile = (board[LAST_FILE] == 100 ? ff + s : board[LAST_FILE]);
+ int victimFile = (board[LAST_TO] & 0x40 ? ff + s : board[LAST_TO] & 255);
if (ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
(board[EP_FILE] == ff + s || epfile == EP_UNKNOWN) && rf < BOARD_HEIGHT-3 &&
(board[rf][victimFile] == BlackPawn || board[rf][victimFile] == BlackLance) &&
rf, ff, rf - 1, ff + s, closure);
}
if (rf < BOARD_HEIGHT>>1) {
- int victimFile = (board[LAST_FILE] == 100 ? ff + s : board[LAST_FILE]);
+ int victimFile = (board[LAST_TO] & 0x40 ? ff + s : board[LAST_TO] & 255);
if (ff + s >= BOARD_LEFT && ff + s < BOARD_RGHT &&
(board[EP_FILE] == ff + s || epfile == EP_UNKNOWN) && rf > 2 &&
(board[rf][victimFile] == WhitePawn || board[rf][victimFile] == WhiteLance) &&