From be0ae08e0a51701a0c08b868ba31fb4b4ebbe9e5 Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Wed, 27 May 2026 09:59:52 -0600 Subject: [PATCH 1/5] rename halfmove to fmr. --- src/board.rs | 18 +++++++++--------- src/board/makemove.rs | 6 +++--- src/board/parser.rs | 4 ++-- src/evaluation.rs | 2 +- src/search.rs | 12 ++++++------ src/tb.rs | 4 ++-- src/types/zobrist.rs | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/board.rs b/src/board.rs index 77f282e10..0027588f6 100644 --- a/src/board.rs +++ b/src/board.rs @@ -27,7 +27,7 @@ struct InternalState { keys: Keys, en_passant: Square, castling: Castling, - halfmove_clock: u8, + fmr_clock: u8, material: i32, plies_from_null: usize, repetition: i32, @@ -73,15 +73,15 @@ impl Board { self.fullmove_number } - pub fn halfmove_clock_bucket(&self) -> usize { - (self.halfmove_clock().saturating_sub(8) as usize / 8).min(15) + pub fn fmr_clock_bucket(&self) -> usize { + (self.fmr_clock().saturating_sub(8) as usize / 8).min(15) } pub fn hash(&self) -> u64 { // To mitigate Graph History Interaction (GHI) problems, the hash key is changed // every 8 plies to distinguish between positions that would otherwise appear // identical to the transposition table. - self.state.keys.full() ^ ZOBRIST.halfmove_clock[self.halfmove_clock_bucket()] + self.state.keys.full() ^ ZOBRIST.fmr_clock[self.fmr_clock_bucket()] } pub const fn pawn_key(&self) -> u64 { @@ -133,8 +133,8 @@ impl Board { self.state.castling } - pub const fn halfmove_clock(&self) -> u8 { - self.state.halfmove_clock + pub const fn fmr_clock(&self) -> u8 { + self.state.fmr_clock } pub const fn material(&self) -> i32 { @@ -258,12 +258,12 @@ impl Board { } pub fn has_repeated(&self) -> bool { - let end = self.state.plies_from_null.min(self.state.halfmove_clock as usize); + let end = self.state.plies_from_null.min(self.state.fmr_clock as usize); self.state_stack.iter().rev().take(end.saturating_sub(3)).any(|s| s.repetition != 0) } pub fn draw_by_fifty_move_rule(&self) -> bool { - self.halfmove_clock() >= 100 && (!self.in_check() || self.has_legal_moves()) + self.fmr_clock() >= 100 && (!self.in_check() || self.has_legal_moves()) } /// Checks if the position is a known draw by material, fifty-move or repetition. @@ -278,7 +278,7 @@ impl Board { /// /// pub fn upcoming_repetition(&self, ply: usize) -> bool { - let half_moves = self.state.plies_from_null.min(self.state.halfmove_clock as usize); + let half_moves = self.state.plies_from_null.min(self.state.fmr_clock as usize); if half_moves < 3 { return false; } diff --git a/src/board/makemove.rs b/src/board/makemove.rs index 2dabb1c4c..7165f146e 100644 --- a/src/board/makemove.rs +++ b/src/board/makemove.rs @@ -49,9 +49,9 @@ impl Board { self.state.plies_from_null += 1; if mv.kind() == MoveKind::Capture || piece.piece_type() == PieceType::Pawn { - self.state.halfmove_clock = 0; + self.state.fmr_clock = 0; } else { - self.state.halfmove_clock += 1; + self.state.fmr_clock += 1; } if mv.is_castling() { @@ -129,7 +129,7 @@ impl Board { self.state.repetition = 0; - let end = self.state.plies_from_null.min(self.halfmove_clock() as usize); + let end = self.state.plies_from_null.min(self.fmr_clock() as usize); if end >= 4 { let mut idx = self.state_stack.len() as isize - 4; diff --git a/src/board/parser.rs b/src/board/parser.rs index 816645fa8..5ba9f3908 100644 --- a/src/board/parser.rs +++ b/src/board/parser.rs @@ -54,7 +54,7 @@ impl Board { board.set_castling(parts.next().unwrap()); board.state.en_passant = parts.next().unwrap_or_default().try_into().unwrap_or_default(); - board.state.halfmove_clock = parts.next().unwrap_or_default().parse().unwrap_or_default(); + board.state.fmr_clock = parts.next().unwrap_or_default().parse().unwrap_or_default(); board.fullmove_number = parts.next().unwrap_or_default().parse().unwrap_or_default(); board.update_threats(); @@ -150,7 +150,7 @@ impl Board { fen.push(' '); fen.push_str(&self.state.en_passant.to_string()); fen.push(' '); - fen.push_str(&self.state.halfmove_clock.to_string()); + fen.push_str(&self.state.fmr_clock.to_string()); fen.push(' '); fen.push_str(&self.fullmove_number.to_string()); fen diff --git a/src/evaluation.rs b/src/evaluation.rs index 149744cce..9d170de73 100644 --- a/src/evaluation.rs +++ b/src/evaluation.rs @@ -5,7 +5,7 @@ pub fn correct_eval(td: &ThreadData, raw_eval: i32, correction_value: i32) -> i3 + td.optimism[td.board.side_to_move()] * (1543 + td.board.material())) / 26663; - eval = eval * (200 - td.board.halfmove_clock() as i32) / 200; + eval = eval * (200 - td.board.fmr_clock() as i32) / 200; eval += correction_value; diff --git a/src/search.rs b/src/search.rs index a5afa8d9f..bb7458c48 100644 --- a/src/search.rs +++ b/src/search.rs @@ -329,7 +329,7 @@ fn search( let mut depth = depth.min(MAX_PLY as i32 - 1); let hash = td.board.hash(); - let entry = td.shared.tt.read(hash, td.board.halfmove_clock(), ply); + let entry = td.shared.tt.read(hash, td.board.fmr_clock(), ply); let mut tt_depth = 0; let mut tt_move = Move::NULL; @@ -365,7 +365,7 @@ fn search( update_continuation_histories(td, ply, td.board.moved_piece(tt_move), tt_move.to(), cont_bonus); } - if td.board.halfmove_clock() < 90 { + if td.board.fmr_clock() < 90 { return tt_score; } } @@ -376,7 +376,7 @@ fn search( if !NODE::ROOT && !excluded && !td.shared.stop_probing_tb.load(Ordering::Relaxed) - && td.board.halfmove_clock() == 0 + && td.board.fmr_clock() == 0 && td.board.castling().raw() == 0 && td.board.occupancies().popcount() <= tb::size() && let Some(outcome) = tb::probe(&td.board) @@ -1169,7 +1169,7 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: } let hash = td.board.hash(); - let entry = td.shared.tt.read(hash, td.board.halfmove_clock(), ply); + let entry = td.shared.tt.read(hash, td.board.fmr_clock(), ply); let mut tt_score = Score::NONE; let mut tt_bound = Bound::None; @@ -1321,7 +1321,7 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: fn eval_correction(td: &ThreadData, ply: isize) -> i32 { let stm = td.board.side_to_move(); - let bucket = td.board.halfmove_clock_bucket(); + let bucket = td.board.fmr_clock_bucket(); let corrhist = td.corrhist(); (corrhist.pawn.get(stm, td.board.pawn_key(), bucket) @@ -1342,7 +1342,7 @@ fn eval_correction(td: &ThreadData, ply: isize) -> i32 { fn update_correction_histories(td: &mut ThreadData, depth: i32, diff: i32, ply: isize) { let stm = td.board.side_to_move(); - let bucket = td.board.halfmove_clock_bucket(); + let bucket = td.board.fmr_clock_bucket(); let corrhist = td.corrhist(); let bonus = (146 * depth * diff / 128).clamp(-4449, 2659); diff --git a/src/tb.rs b/src/tb.rs index 91d08b4f3..b822e7d6e 100644 --- a/src/tb.rs +++ b/src/tb.rs @@ -113,7 +113,7 @@ pub fn rank_rootmoves(td: &mut ThreadData) { td.board.pieces(PieceType::Bishop).0, td.board.pieces(PieceType::Knight).0, td.board.pieces(PieceType::Pawn).0, - td.board.halfmove_clock() as u32, + td.board.fmr_clock() as u32, 0, ep_square, td.board.side_to_move() == Color::White, @@ -140,7 +140,7 @@ pub fn rank_rootmoves(td: &mut ThreadData) { td.board.pieces(PieceType::Bishop).0, td.board.pieces(PieceType::Knight).0, td.board.pieces(PieceType::Pawn).0, - td.board.halfmove_clock() as u32, + td.board.fmr_clock() as u32, 0, ep_square, td.board.side_to_move() == Color::White, diff --git a/src/types/zobrist.rs b/src/types/zobrist.rs index 0cf3f58bf..908db5c51 100644 --- a/src/types/zobrist.rs +++ b/src/types/zobrist.rs @@ -6,7 +6,7 @@ pub struct Zobrist { pub en_passant: [u64; 64], pub castling: [u64; 16], pub side: u64, - pub halfmove_clock: [u64; 16], + pub fmr_clock: [u64; 16], } pub const ZOBRIST: Zobrist = { From 5223d72618d85af15ff3ebbf3e0ed5258f82eeb6 Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Wed, 27 May 2026 10:07:33 -0600 Subject: [PATCH 2/5] change to half moves. --- src/board.rs | 18 +++++++++--------- src/board/makemove.rs | 4 ++-- src/board/parser.rs | 5 +++-- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/board.rs b/src/board.rs index 0027588f6..b90427737 100644 --- a/src/board.rs +++ b/src/board.rs @@ -48,7 +48,7 @@ pub struct Board { mailbox: [Piece; Square::NUM], state: InternalState, state_stack: Vec, - fullmove_number: usize, + halfmove_number: usize, castling_rights: [u8; Square::NUM], castling_path: [Bitboard; 16], castling_threat: [Bitboard; 16], @@ -70,7 +70,7 @@ impl Board { } pub const fn fullmove_number(&self) -> usize { - self.fullmove_number + self.halfmove_number / 2 } pub fn fmr_clock_bucket(&self) -> usize { @@ -193,13 +193,13 @@ impl Board { self.mailbox[mv.from()] } - pub const fn advance_fullmove_counter(&mut self) { - self.fullmove_number += self.side_to_move() as usize; - } + //pub const fn advance_fullmove_counter(&mut self) { + //self.fullmove_number += self.side_to_move() as usize; + //} - pub const fn retreat_fullmove_counter(&mut self) { - self.fullmove_number -= self.side_to_move() as usize; - } + //pub const fn retreat_fullmove_counter(&mut self) { + //self.fullmove_number -= self.side_to_move() as usize; + //} pub const fn set_frc(&mut self, frc: bool) { self.frc = frc; @@ -564,7 +564,7 @@ impl Default for Board { colors: [Bitboard::default(); Color::NUM], mailbox: [Piece::None; Square::NUM], state_stack: Vec::with_capacity(2048), - fullmove_number: 0, + halfmove_number: 0, castling_rights: [0b1111; Square::NUM], castling_path: [Bitboard::default(); 16], castling_threat: [Bitboard::default(); 16], diff --git a/src/board/makemove.rs b/src/board/makemove.rs index 7165f146e..fbcf2d629 100644 --- a/src/board/makemove.rs +++ b/src/board/makemove.rs @@ -118,7 +118,7 @@ impl Board { _ => (), } - self.advance_fullmove_counter(); + self.halfmove_number += 1; self.side_to_move = !self.side_to_move; self.state.castling.raw &= self.castling_rights[from] & self.castling_rights[to]; @@ -152,7 +152,7 @@ impl Board { pub fn undo_move(&mut self, mv: Move) { self.side_to_move = !self.side_to_move; - self.retreat_fullmove_counter(); + self.halfmove_number -= 1; let from = mv.from(); let to = mv.to(); diff --git a/src/board/parser.rs b/src/board/parser.rs index 5ba9f3908..e0c0c4fcf 100644 --- a/src/board/parser.rs +++ b/src/board/parser.rs @@ -55,7 +55,8 @@ impl Board { board.state.en_passant = parts.next().unwrap_or_default().try_into().unwrap_or_default(); board.state.fmr_clock = parts.next().unwrap_or_default().parse().unwrap_or_default(); - board.fullmove_number = parts.next().unwrap_or_default().parse().unwrap_or_default(); + let fullmove_number: usize = parts.next().unwrap_or_default().parse().unwrap_or_default(); + board.halfmove_number = (2 * fullmove_number) + board.side_to_move() as usize; board.update_threats(); board.update_hash_keys(); @@ -152,7 +153,7 @@ impl Board { fen.push(' '); fen.push_str(&self.state.fmr_clock.to_string()); fen.push(' '); - fen.push_str(&self.fullmove_number.to_string()); + fen.push_str(&self.fullmove_number().to_string()); fen } From 9bc830d7af86756da22c75132a96f5116b848ef3 Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Wed, 27 May 2026 10:27:37 -0600 Subject: [PATCH 3/5] works. --- src/board.rs | 25 +++++++++++-------------- src/board/makemove.rs | 10 ++++------ src/board/parser.rs | 10 +++++++--- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/board.rs b/src/board.rs index b90427737..0607688f6 100644 --- a/src/board.rs +++ b/src/board.rs @@ -42,7 +42,6 @@ struct InternalState { #[derive(Clone)] pub struct Board { - side_to_move: Color, pieces: [Bitboard; PieceType::NUM], colors: [Bitboard; Color::NUM], mailbox: [Piece; Square::NUM], @@ -65,14 +64,21 @@ impl Board { self.frc } - pub const fn side_to_move(&self) -> Color { - self.side_to_move - } - pub const fn fullmove_number(&self) -> usize { self.halfmove_number / 2 } + pub fn side_to_move(&self) -> Color { + //let color1 = self.side_to_move; + //let color2 = Color::new((self.halfmove_number & 1) as u8); + + //if color1 != color2 { + //println!("DIFF!"); + //} + + Color::new((self.halfmove_number & 1) as u8) + } + pub fn fmr_clock_bucket(&self) -> usize { (self.fmr_clock().saturating_sub(8) as usize / 8).min(15) } @@ -193,14 +199,6 @@ impl Board { self.mailbox[mv.from()] } - //pub const fn advance_fullmove_counter(&mut self) { - //self.fullmove_number += self.side_to_move() as usize; - //} - - //pub const fn retreat_fullmove_counter(&mut self) { - //self.fullmove_number -= self.side_to_move() as usize; - //} - pub const fn set_frc(&mut self, frc: bool) { self.frc = frc; } @@ -558,7 +556,6 @@ impl Board { impl Default for Board { fn default() -> Self { Self { - side_to_move: Color::White, state: InternalState::default(), pieces: [Bitboard::default(); PieceType::NUM], colors: [Bitboard::default(); Color::NUM], diff --git a/src/board/makemove.rs b/src/board/makemove.rs index fbcf2d629..424ff40c5 100644 --- a/src/board/makemove.rs +++ b/src/board/makemove.rs @@ -3,7 +3,7 @@ use crate::types::{Move, MoveKind, Piece, PieceType, Square}; impl Board { pub fn make_null_move(&mut self) { - self.side_to_move = !self.side_to_move; + self.halfmove_number += 1; self.state_stack.push(self.state); self.state.keys.toggle_side(); @@ -21,7 +21,7 @@ impl Board { } pub fn undo_null_move(&mut self) { - self.side_to_move = !self.side_to_move(); + self.halfmove_number -= 1; self.state = self.state_stack.pop().unwrap(); } @@ -32,7 +32,7 @@ impl Board { let from = mv.from(); let to = mv.to(); let piece = self.piece_on(from); - let stm = self.side_to_move; + let stm = self.side_to_move(); self.state_stack.push(self.state); @@ -119,7 +119,6 @@ impl Board { } self.halfmove_number += 1; - self.side_to_move = !self.side_to_move; self.state.castling.raw &= self.castling_rights[from] & self.castling_rights[to]; self.state.keys.toggle_castling(self.state.castling); @@ -151,13 +150,12 @@ impl Board { } pub fn undo_move(&mut self, mv: Move) { - self.side_to_move = !self.side_to_move; self.halfmove_number -= 1; let from = mv.from(); let to = mv.to(); let mover = self.remove_piece(to); - let stm = self.side_to_move; + let stm = self.side_to_move(); if mv.is_castling() { let (rook_from, rook_to) = self.get_castling_rook(to); diff --git a/src/board/parser.rs b/src/board/parser.rs index e0c0c4fcf..e5a8c221b 100644 --- a/src/board/parser.rs +++ b/src/board/parser.rs @@ -45,7 +45,7 @@ impl Board { } } - board.side_to_move = match parts.next() { + let side_to_move = match parts.next() { Some("w") => Color::White, Some("b") => Color::Black, _ => return Err(ParseFenError::InvalidActiveColor), @@ -56,7 +56,11 @@ impl Board { board.state.en_passant = parts.next().unwrap_or_default().try_into().unwrap_or_default(); board.state.fmr_clock = parts.next().unwrap_or_default().parse().unwrap_or_default(); let fullmove_number: usize = parts.next().unwrap_or_default().parse().unwrap_or_default(); - board.halfmove_number = (2 * fullmove_number) + board.side_to_move() as usize; + board.halfmove_number = (2 * fullmove_number) + side_to_move as usize; + + if Color::new((board.halfmove_number & 1) as u8) != board.side_to_move() { + println!("BAD PARSE."); + } board.update_threats(); board.update_hash_keys(); @@ -145,7 +149,7 @@ impl Board { } fen.push(' '); - fen.push_str(&self.side_to_move.to_string()); + fen.push_str(&self.side_to_move().to_string()); fen.push(' '); fen.push_str(&self.state.castling.to_string(self)); fen.push(' '); From aed5c1eafca76c7326700a9f466d3273b4e79e7c Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Wed, 27 May 2026 10:38:05 -0600 Subject: [PATCH 4/5] cleanup bench 2756239 --- src/board.rs | 7 ------- src/board/parser.rs | 4 ---- 2 files changed, 11 deletions(-) diff --git a/src/board.rs b/src/board.rs index 0607688f6..84be858d4 100644 --- a/src/board.rs +++ b/src/board.rs @@ -69,13 +69,6 @@ impl Board { } pub fn side_to_move(&self) -> Color { - //let color1 = self.side_to_move; - //let color2 = Color::new((self.halfmove_number & 1) as u8); - - //if color1 != color2 { - //println!("DIFF!"); - //} - Color::new((self.halfmove_number & 1) as u8) } diff --git a/src/board/parser.rs b/src/board/parser.rs index e5a8c221b..4134ce5b0 100644 --- a/src/board/parser.rs +++ b/src/board/parser.rs @@ -58,10 +58,6 @@ impl Board { let fullmove_number: usize = parts.next().unwrap_or_default().parse().unwrap_or_default(); board.halfmove_number = (2 * fullmove_number) + side_to_move as usize; - if Color::new((board.halfmove_number & 1) as u8) != board.side_to_move() { - println!("BAD PARSE."); - } - board.update_threats(); board.update_hash_keys(); board.validate_en_passant(); From 5b47a9e7cdf049d9874e0e85b41da55bae5a0bec Mon Sep 17 00:00:00 2001 From: Michael Whiteley Date: Wed, 27 May 2026 14:22:39 -0600 Subject: [PATCH 5/5] rename fmr_clock to fiftymove_clock. bench 2756239 --- src/board.rs | 18 +++++++++--------- src/board/makemove.rs | 6 +++--- src/board/parser.rs | 4 ++-- src/evaluation.rs | 2 +- src/search.rs | 12 ++++++------ src/tb.rs | 4 ++-- src/types/zobrist.rs | 2 +- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/board.rs b/src/board.rs index 84be858d4..f8f795f7d 100644 --- a/src/board.rs +++ b/src/board.rs @@ -27,7 +27,7 @@ struct InternalState { keys: Keys, en_passant: Square, castling: Castling, - fmr_clock: u8, + fiftymove_clock: u8, material: i32, plies_from_null: usize, repetition: i32, @@ -72,15 +72,15 @@ impl Board { Color::new((self.halfmove_number & 1) as u8) } - pub fn fmr_clock_bucket(&self) -> usize { - (self.fmr_clock().saturating_sub(8) as usize / 8).min(15) + pub fn fiftymove_clock_bucket(&self) -> usize { + (self.fiftymove_clock().saturating_sub(8) as usize / 8).min(15) } pub fn hash(&self) -> u64 { // To mitigate Graph History Interaction (GHI) problems, the hash key is changed // every 8 plies to distinguish between positions that would otherwise appear // identical to the transposition table. - self.state.keys.full() ^ ZOBRIST.fmr_clock[self.fmr_clock_bucket()] + self.state.keys.full() ^ ZOBRIST.fiftymove_clock[self.fiftymove_clock_bucket()] } pub const fn pawn_key(&self) -> u64 { @@ -132,8 +132,8 @@ impl Board { self.state.castling } - pub const fn fmr_clock(&self) -> u8 { - self.state.fmr_clock + pub const fn fiftymove_clock(&self) -> u8 { + self.state.fiftymove_clock } pub const fn material(&self) -> i32 { @@ -249,12 +249,12 @@ impl Board { } pub fn has_repeated(&self) -> bool { - let end = self.state.plies_from_null.min(self.state.fmr_clock as usize); + let end = self.state.plies_from_null.min(self.state.fiftymove_clock as usize); self.state_stack.iter().rev().take(end.saturating_sub(3)).any(|s| s.repetition != 0) } pub fn draw_by_fifty_move_rule(&self) -> bool { - self.fmr_clock() >= 100 && (!self.in_check() || self.has_legal_moves()) + self.fiftymove_clock() >= 100 && (!self.in_check() || self.has_legal_moves()) } /// Checks if the position is a known draw by material, fifty-move or repetition. @@ -269,7 +269,7 @@ impl Board { /// /// pub fn upcoming_repetition(&self, ply: usize) -> bool { - let half_moves = self.state.plies_from_null.min(self.state.fmr_clock as usize); + let half_moves = self.state.plies_from_null.min(self.state.fiftymove_clock as usize); if half_moves < 3 { return false; } diff --git a/src/board/makemove.rs b/src/board/makemove.rs index f236e2bab..8401e2392 100644 --- a/src/board/makemove.rs +++ b/src/board/makemove.rs @@ -49,9 +49,9 @@ impl Board { self.state.plies_from_null += 1; if mv.kind() == MoveKind::Capture || piece.piece_type() == PieceType::Pawn { - self.state.fmr_clock = 0; + self.state.fiftymove_clock = 0; } else { - self.state.fmr_clock += 1; + self.state.fiftymove_clock += 1; } if mv.is_castling() { @@ -123,7 +123,7 @@ impl Board { self.state.repetition = 0; - let end = self.state.plies_from_null.min(self.fmr_clock() as usize); + let end = self.state.plies_from_null.min(self.fiftymove_clock() as usize); if end >= 4 { let mut idx = self.state_stack.len() as isize - 4; diff --git a/src/board/parser.rs b/src/board/parser.rs index 4134ce5b0..ff6b4ac30 100644 --- a/src/board/parser.rs +++ b/src/board/parser.rs @@ -54,7 +54,7 @@ impl Board { board.set_castling(parts.next().unwrap()); board.state.en_passant = parts.next().unwrap_or_default().try_into().unwrap_or_default(); - board.state.fmr_clock = parts.next().unwrap_or_default().parse().unwrap_or_default(); + board.state.fiftymove_clock = parts.next().unwrap_or_default().parse().unwrap_or_default(); let fullmove_number: usize = parts.next().unwrap_or_default().parse().unwrap_or_default(); board.halfmove_number = (2 * fullmove_number) + side_to_move as usize; @@ -151,7 +151,7 @@ impl Board { fen.push(' '); fen.push_str(&self.state.en_passant.to_string()); fen.push(' '); - fen.push_str(&self.state.fmr_clock.to_string()); + fen.push_str(&self.state.fiftymove_clock.to_string()); fen.push(' '); fen.push_str(&self.fullmove_number().to_string()); fen diff --git a/src/evaluation.rs b/src/evaluation.rs index 9d170de73..75e14683e 100644 --- a/src/evaluation.rs +++ b/src/evaluation.rs @@ -5,7 +5,7 @@ pub fn correct_eval(td: &ThreadData, raw_eval: i32, correction_value: i32) -> i3 + td.optimism[td.board.side_to_move()] * (1543 + td.board.material())) / 26663; - eval = eval * (200 - td.board.fmr_clock() as i32) / 200; + eval = eval * (200 - td.board.fiftymove_clock() as i32) / 200; eval += correction_value; diff --git a/src/search.rs b/src/search.rs index bb7458c48..9ce8e559f 100644 --- a/src/search.rs +++ b/src/search.rs @@ -329,7 +329,7 @@ fn search( let mut depth = depth.min(MAX_PLY as i32 - 1); let hash = td.board.hash(); - let entry = td.shared.tt.read(hash, td.board.fmr_clock(), ply); + let entry = td.shared.tt.read(hash, td.board.fiftymove_clock(), ply); let mut tt_depth = 0; let mut tt_move = Move::NULL; @@ -365,7 +365,7 @@ fn search( update_continuation_histories(td, ply, td.board.moved_piece(tt_move), tt_move.to(), cont_bonus); } - if td.board.fmr_clock() < 90 { + if td.board.fiftymove_clock() < 90 { return tt_score; } } @@ -376,7 +376,7 @@ fn search( if !NODE::ROOT && !excluded && !td.shared.stop_probing_tb.load(Ordering::Relaxed) - && td.board.fmr_clock() == 0 + && td.board.fiftymove_clock() == 0 && td.board.castling().raw() == 0 && td.board.occupancies().popcount() <= tb::size() && let Some(outcome) = tb::probe(&td.board) @@ -1169,7 +1169,7 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: } let hash = td.board.hash(); - let entry = td.shared.tt.read(hash, td.board.fmr_clock(), ply); + let entry = td.shared.tt.read(hash, td.board.fiftymove_clock(), ply); let mut tt_score = Score::NONE; let mut tt_bound = Bound::None; @@ -1321,7 +1321,7 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: fn eval_correction(td: &ThreadData, ply: isize) -> i32 { let stm = td.board.side_to_move(); - let bucket = td.board.fmr_clock_bucket(); + let bucket = td.board.fiftymove_clock_bucket(); let corrhist = td.corrhist(); (corrhist.pawn.get(stm, td.board.pawn_key(), bucket) @@ -1342,7 +1342,7 @@ fn eval_correction(td: &ThreadData, ply: isize) -> i32 { fn update_correction_histories(td: &mut ThreadData, depth: i32, diff: i32, ply: isize) { let stm = td.board.side_to_move(); - let bucket = td.board.fmr_clock_bucket(); + let bucket = td.board.fiftymove_clock_bucket(); let corrhist = td.corrhist(); let bonus = (146 * depth * diff / 128).clamp(-4449, 2659); diff --git a/src/tb.rs b/src/tb.rs index b822e7d6e..f27b04465 100644 --- a/src/tb.rs +++ b/src/tb.rs @@ -113,7 +113,7 @@ pub fn rank_rootmoves(td: &mut ThreadData) { td.board.pieces(PieceType::Bishop).0, td.board.pieces(PieceType::Knight).0, td.board.pieces(PieceType::Pawn).0, - td.board.fmr_clock() as u32, + td.board.fiftymove_clock() as u32, 0, ep_square, td.board.side_to_move() == Color::White, @@ -140,7 +140,7 @@ pub fn rank_rootmoves(td: &mut ThreadData) { td.board.pieces(PieceType::Bishop).0, td.board.pieces(PieceType::Knight).0, td.board.pieces(PieceType::Pawn).0, - td.board.fmr_clock() as u32, + td.board.fiftymove_clock() as u32, 0, ep_square, td.board.side_to_move() == Color::White, diff --git a/src/types/zobrist.rs b/src/types/zobrist.rs index 908db5c51..a29948caf 100644 --- a/src/types/zobrist.rs +++ b/src/types/zobrist.rs @@ -6,7 +6,7 @@ pub struct Zobrist { pub en_passant: [u64; 64], pub castling: [u64; 16], pub side: u64, - pub fmr_clock: [u64; 16], + pub fiftymove_clock: [u64; 16], } pub const ZOBRIST: Zobrist = {