var i, flag;
if (white_frc_columns !== null) {
for (i = 0; i < white_frc_columns.length; ++i) {
- var sq = SQUARES.a1 + (white_frc_columns[0].charCodeAt(0) - "A".charCodeAt(0));
+ var sq = SQUARES.a1 + (white_frc_columns[i].charCodeAt(0) - "A".charCodeAt(0));
flag = sq < kings[WHITE] ? BITS.QSIDE_CASTLE : BITS.KSIDE_CASTLE;
castling.w |= flag;
rooks[WHITE].push({square: sq, flag: flag});
var black_frc_columns = tokens[2].match(/[a-h]/g);
if (black_frc_columns !== null) {
for (i = 0; i < black_frc_columns.length; ++i) {
- var sq = SQUARES.a1 + (black_frc_columns[0].charCodeAt(0) - "A".charCodeAt(0));
+ var sq = SQUARES.a8 + (black_frc_columns[i].charCodeAt(0) - "a".charCodeAt(0));
flag = sq < kings[BLACK] ? BITS.QSIDE_CASTLE : BITS.KSIDE_CASTLE;
castling.b |= flag;
rooks[BLACK].push({square: sq, flag: flag});
function make_move(move) {
var us = turn;
var them = swap_color(us);
- var old_to = board[move.to];
push(move);
board[move.to] = board[move.from];
- board[move.from] = null;
+ if (move.from != move.to) {
+ board[move.from] = null;
+ }
/* if ep capture, remove the captured pawn */
if (move.flags & BITS.EP_CAPTURE) {
if (move.flags & BITS.KSIDE_CASTLE) {
var castling_to = move.to - 1;
var castling_from = move.rook_sq;
- board[castling_to] = old_to===null ? board[castling_from] : old_to;
- if(castling_from !== move.to)
+ board[castling_to] = {type: ROOK, color: us};
+ if(castling_from !== move.to && castling_from !== castling_to)
board[castling_from] = null;
} else if (move.flags & BITS.QSIDE_CASTLE) {
var castling_to = move.to + 1;
var castling_from = move.rook_sq;
- board[castling_to] = old_to===null ? board[castling_from] : old_to;
- if(castling_from !== move.to)
+ board[castling_to] = {type: ROOK, color: us};
+ if(castling_from !== move.to && castling_from !== castling_to)
board[castling_from] = null;
}
var us = turn;
var them = swap_color(turn);
- var old_from = board[move.from];
-
- board[move.from] = board[move.to];
- board[move.from].type = move.piece; // to undo any promotions
- board[move.to] = null;
+ if (move.from != move.to) {
+ board[move.from] = board[move.to];
+ board[move.from].type = move.piece; // to undo any promotions
+ board[move.to] = null;
+ }
if (move.flags & BITS.CAPTURE) {
board[move.to] = {type: move.captured, color: them};
castling_from = move.to + 1;
}
- board[castling_to] = old_from===null ? board[castling_from] : old_from;
- if(castling_from !== move.from)
+ board[castling_to] = {type: ROOK, color: us};
+ if(castling_from !== move.from && castling_from !== castling_to)
board[castling_from] = null;
}