diff options
Diffstat (limited to 'src/move.c')
| -rwxr-xr-x | src/move.c | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -62,6 +62,8 @@ Return value: ASSERT(IS_VALID_COLOR(c)); ASSERT(pos->cNonPawns[c][uIndex] == cFrom); pos->cNonPawns[c][uIndex] = cTo; + pos->bbPieces[c][PIECE_TYPE(p)] &= ~COOR_TO_BB(cFrom); + pos->bbPieces[c][PIECE_TYPE(p)] |= COOR_TO_BB(cTo); pos->u64NonPawnSig ^= g_u64SigSeeds[cFrom][PIECE_TYPE(p)][c]; pos->u64NonPawnSig ^= g_u64SigSeeds[cTo][PIECE_TYPE(p)][c]; #ifdef DEBUG @@ -171,6 +173,8 @@ Return value: ASSERT(IS_VALID_COLOR(c)); ASSERT(pos->cNonPawns[c][uIndex] == cFrom); pos->cNonPawns[c][uIndex] = cTo; + pos->bbPieces[c][PIECE_TYPE(p)] &= ~COOR_TO_BB(cFrom); + pos->bbPieces[c][PIECE_TYPE(p)] |= COOR_TO_BB(cTo); pos->rgSquare[cTo].pPiece = p; pos->rgSquare[cTo].uIndex = uIndex; #ifdef DEBUG @@ -345,11 +349,12 @@ Return value: pos->u64NonPawnSig ^= g_u64SigSeeds[cSquare][u][color]; pos->uNonPawnCount[color][u]--; ASSERT(pos->uNonPawnCount[color][u] <= 9); + pos->bbPieces[color][u] &= ~COOR_TO_BB(cSquare); pos->uWhiteSqBishopCount[color] -= (IS_BISHOP(pLifted) & IS_SQUARE_WHITE(cSquare)); ASSERT(pos->uWhiteSqBishopCount[color] <= 9); } - + #ifdef DEBUG VerifyPositionConsistency(pos, FALSE); #endif @@ -477,11 +482,12 @@ Return value: ASSERT((u >= KNIGHT) && (u < KING)); pos->uNonPawnCount[color][u]--; ASSERT(pos->uNonPawnCount[color][u] <= 9); - pos->uWhiteSqBishopCount[color] -= (IS_BISHOP(pLifted) & + pos->bbPieces[color][u] &= ~COOR_TO_BB(cSquare); + pos->uWhiteSqBishopCount[color] -= (IS_BISHOP(pLifted) & IS_SQUARE_WHITE(cSquare)); ASSERT(pos->uWhiteSqBishopCount[color] <= 9); } - + return(pLifted); } @@ -556,7 +562,8 @@ Return value: pos->u64NonPawnSig ^= g_u64SigSeeds[cSquare][u][color]; pos->uNonPawnCount[color][u]++; ASSERT(pos->uNonPawnCount[color][u] <= 10); - + pos->bbPieces[color][u] |= COOR_TO_BB(cSquare); + pos->uWhiteSqBishopCount[color] += (IS_BISHOP(pPiece) & IS_SQUARE_WHITE(cSquare)); ASSERT(pos->uWhiteSqBishopCount[color] <= 10); @@ -564,17 +571,17 @@ Return value: // // Place the piece on the board - // + // pos->rgSquare[cSquare].pPiece = pPiece; pos->rgSquare[cSquare].uIndex = uIndex; - + #ifdef DEBUG VerifyPositionConsistency(pos, FALSE); #endif } -void +void PlacePieceWithoutSigs(POSITION *pos, COOR cSquare, PIECE pPiece) /** @@ -645,7 +652,8 @@ Return value: ASSERT((u >= KNIGHT) && (u < KING)); pos->uNonPawnCount[color][u]++; ASSERT(pos->uNonPawnCount[color][u] <= 10); - + pos->bbPieces[color][u] |= COOR_TO_BB(cSquare); + pos->uWhiteSqBishopCount[color] += (IS_BISHOP(pPiece) & IS_SQUARE_WHITE(cSquare)); ASSERT(pos->uWhiteSqBishopCount[color] <= 10); |
