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] 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