From a1482d11f21709ac83d40fd6425f50b745c9bc8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:38:48 +0100 Subject: [PATCH 1/9] added file and module structure for bitboard::attacks.rs --- engine/src/bitboard.rs | 1 + engine/src/bitboard/attacks.rs | 0 2 files changed, 1 insertion(+) create mode 100644 engine/src/bitboard/attacks.rs diff --git a/engine/src/bitboard.rs b/engine/src/bitboard.rs index 5c9b419..504ae04 100644 --- a/engine/src/bitboard.rs +++ b/engine/src/bitboard.rs @@ -2,5 +2,6 @@ mod attackmaps; mod utils; mod legality; mod checkinfo; +mod attacks; pub mod board; \ No newline at end of file diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs new file mode 100644 index 0000000..e69de29 From 8ecbeb9c41a4e1f01f40ab17a1574473e841f02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:40:40 +0100 Subject: [PATCH 2/9] implemented pseudo-move generation for pawn moves --- engine/src/bitboard/attacks.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index e69de29..83c6a15 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -0,0 +1,29 @@ +use super::board::Board; + +impl Board { + + const RANK_2: u64 = 0x0000_0000_0000_FF00; + const RANK_7: u64 = 0x00FF_0000_0000_0000; + + pub fn get_pseudo_pawn_moves(&self, sq: u32) -> u64 { + let pawn: u64 = 1 << sq; + let mut move_mask: u64 = 0u64; + let move_offset: i8 = 8 - 16 * self.side_to_move as i8; + + let next_sq: u64 = if move_offset > 0 {pawn << move_offset} else {pawn >> -move_offset}; + if (self.occupancy[2] & next_sq) == 0 { + move_mask |= next_sq; + + if (self.side_to_move == 0 && pawn & Self::RANK_2 != 0) + || (self.side_to_move == 1 && pawn & Self::RANK_7 != 0) { + + let next_sq: u64 = if move_offset > 0 {next_sq << move_offset} else {next_sq >> -move_offset}; + if (self.occupancy[2] & next_sq) == 0 { + move_mask |= next_sq; + } + } + } + + return move_mask; + } +} \ No newline at end of file From 274897a070ee95dae87707a127ac6e73fc008333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:41:40 +0100 Subject: [PATCH 3/9] implemented pseudo-move generation for knights --- engine/src/bitboard/attacks.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 83c6a15..589d257 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -1,4 +1,5 @@ use super::board::Board; +use super::attackmaps::*; impl Board { @@ -26,4 +27,8 @@ impl Board { return move_mask; } + #[inline] + pub fn get_pseudo_knight_moves(&self, sq: u32) -> u64 { + return KNIGHT_ATTACK_MAP[sq as usize]; + } } \ No newline at end of file From f8ab14a026b32d918b35db5f76c714038ed27b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:42:41 +0100 Subject: [PATCH 4/9] implemented pseudo-move generation for kings --- engine/src/bitboard/attacks.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 589d257..3c2cf91 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -31,4 +31,9 @@ impl Board { pub fn get_pseudo_knight_moves(&self, sq: u32) -> u64 { return KNIGHT_ATTACK_MAP[sq as usize]; } + #[inline] + pub fn get_pseudo_king_moves(&self, sq: u32) -> u64 { + return KING_ATTACK_MAP[sq as usize]; + } + } \ No newline at end of file From eab795b6dff42fdcf302271342070f1c75737959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:43:37 +0100 Subject: [PATCH 5/9] implemented pseudo-move generation for pawn captures --- engine/src/bitboard/attacks.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 3c2cf91..d4f711e 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -35,5 +35,13 @@ impl Board { pub fn get_pseudo_king_moves(&self, sq: u32) -> u64 { return KING_ATTACK_MAP[sq as usize]; } + #[inline] + pub fn get_pseudo_pawn_captures(&self, sq: u32) -> u64 { + return PAWN_ATTACK_MAP[sq as usize][self.side_to_move as usize]; + } + #[inline] + pub fn get_pseudo_opponent_pawn_captures(&self, sq: u32) -> u64 { + return PAWN_ATTACK_MAP[sq as usize][1 - self.side_to_move as usize]; + } } \ No newline at end of file From c9246d134273ab25f591fae6c2373d0b8e0f5763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:45:01 +0100 Subject: [PATCH 6/9] added helper function: get_raycast_from_square_in_direction --- engine/src/bitboard/attacks.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index d4f711e..6de2083 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -44,4 +44,19 @@ impl Board { return PAWN_ATTACK_MAP[sq as usize][1 - self.side_to_move as usize]; } +} + +#[inline(always)] +pub fn get_raycast_from_square_in_direction(occupancy: u64, sq: usize, dir: usize) -> u64 { + let is_up: bool = dir / 4 == 0; + let mut ray: u64 = RAY_TABLE[sq][dir]; + let blockers: u64 = occupancy & ray; + + if blockers != 0 { + let first_blocker: u32 = if is_up { blockers.trailing_zeros() } else { 63 - blockers.leading_zeros() }; + + ray &= !RAY_TABLE[first_blocker as usize][dir]; + } + + return ray; } \ No newline at end of file From 7c58f0d508cdaa1ec389233c0ab6b5d7d0b6d9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:46:11 +0100 Subject: [PATCH 7/9] implemented pseudo-move generation for bishops --- engine/src/bitboard/attacks.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 6de2083..0938d0c 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -43,7 +43,19 @@ impl Board { pub fn get_pseudo_opponent_pawn_captures(&self, sq: u32) -> u64 { return PAWN_ATTACK_MAP[sq as usize][1 - self.side_to_move as usize]; } + #[inline] + pub fn get_pseudo_bishop_moves(&self, sq: u32) -> u64 { + let mut moves = 0u64; + let sq = sq as usize; + let occupancy = self.occupancy[2]; + moves |= get_raycast_from_square_in_direction(occupancy, sq, 1); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 3); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 5); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 7); + return moves; + } + } #[inline(always)] From 4de505bc21b1e040e340162b4fd9b08c91743d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:47:03 +0100 Subject: [PATCH 8/9] implemented pseudo-move generation for rooks --- engine/src/bitboard/attacks.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 0938d0c..f748cb3 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -55,7 +55,18 @@ impl Board { return moves; } - + #[inline] + pub fn get_pseudo_rook_moves(&self, sq: u32) -> u64 { + let mut moves: u64 = 0u64; + let occupancy = self.occupancy[2]; + let sq = sq as usize; + moves |= get_raycast_from_square_in_direction(occupancy, sq, 0); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 2); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 4); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 6); + + return moves; + } } #[inline(always)] From 659413ca31f03c71cc5b6fb03282214469897b88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:47:46 +0100 Subject: [PATCH 9/9] implemented pseudo-move generation for queens --- engine/src/bitboard/attacks.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index f748cb3..a348d96 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -67,6 +67,10 @@ impl Board { return moves; } + #[inline(always)] + pub fn get_pseudo_queen_moves(&self, sq: u32) -> u64 { + return self.get_pseudo_bishop_moves(sq) | self.get_pseudo_rook_moves(sq); + } } #[inline(always)]