|
@@ -354,9 +354,10 @@ void chessy::generateCastling(const ChessGame& cg, std::vector<Move>& moves)
|
|
Bitboard allOccupied = b.getOccupied();
|
|
Bitboard allOccupied = b.getOccupied();
|
|
if (cg.getCanCastleKingSide(side)) {
|
|
if (cg.getCanCastleKingSide(side)) {
|
|
Bitboard target = king.bits >> 2; // move king to the right
|
|
Bitboard target = king.bits >> 2; // move king to the right
|
|
- Bitboard rook = king.bits << 3;
|
|
|
|
|
|
+ Bitboard rook = king.bits >> 3;
|
|
Bitboard rookTarget = king.bits >> 1;
|
|
Bitboard rookTarget = king.bits >> 1;
|
|
- if (!(target & allOccupied) &&
|
|
|
|
|
|
+ if ((rook & b.getRooks<side>()) &&
|
|
|
|
+ !(target & allOccupied) &&
|
|
!(rookTarget & allOccupied)) {
|
|
!(rookTarget & allOccupied)) {
|
|
moves.emplace_back(king.getLeastSignificantBit(),
|
|
moves.emplace_back(king.getLeastSignificantBit(),
|
|
target.getLeastSignificantBit(), true);
|
|
target.getLeastSignificantBit(), true);
|
|
@@ -364,9 +365,10 @@ void chessy::generateCastling(const ChessGame& cg, std::vector<Move>& moves)
|
|
}
|
|
}
|
|
if (cg.getCanCastleQueenSide(side)) {
|
|
if (cg.getCanCastleQueenSide(side)) {
|
|
Bitboard target = king.bits << 2; // move king to the left
|
|
Bitboard target = king.bits << 2; // move king to the left
|
|
- Bitboard rook = king.bits >> 3;
|
|
|
|
|
|
+ Bitboard rook = king.bits << 4;
|
|
Bitboard rookTarget = king.bits << 1;
|
|
Bitboard rookTarget = king.bits << 1;
|
|
- if (!(target & allOccupied) &&
|
|
|
|
|
|
+ if ((rook & b.getRooks<side>()) &&
|
|
|
|
+ !(target & allOccupied) &&
|
|
!(rookTarget & allOccupied)) {
|
|
!(rookTarget & allOccupied)) {
|
|
moves.emplace_back(king.getLeastSignificantBit(),
|
|
moves.emplace_back(king.getLeastSignificantBit(),
|
|
target.getLeastSignificantBit(), true);
|
|
target.getLeastSignificantBit(), true);
|