diff --git a/src/search.rs b/src/search.rs index 83373a28d..fbc22f930 100644 --- a/src/search.rs +++ b/src/search.rs @@ -1191,6 +1191,7 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: } } + let stm = td.board.side_to_move(); let in_check = td.board.in_check(); if NODE::PV { @@ -1294,6 +1295,12 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: while let Some(mv) = move_picker.next::(td, skip_quiets(best_score), ply) { move_count += 1; + let history = if mv.is_quiet() { + td.quiet_history.get(td.board.all_threats(), stm, mv) + td.conthist(ply, 1, mv) + td.conthist(ply, 2, mv) + } else { + td.noisy_history.get(td.board.all_threats(), td.board.moved_piece(mv), mv.to(), td.board.type_on(mv.to())) + }; + if !is_loss(best_score) { // Late Move Pruning (LMP) if move_count >= 3 && !td.board.is_direct_check(mv) { @@ -1301,7 +1308,9 @@ fn qsearch(td: &mut ThreadData, mut alpha: i32, beta: i32, ply: } // Static Exchange Evaluation Pruning (SEE Pruning) - if is_valid(eval) && !td.board.see(mv, (alpha - eval) / 8 - correction_value.abs().min(68) - 74) { + if is_valid(eval) + && !td.board.see(mv, (alpha - eval) / 8 - correction_value.abs().min(68) - 74 - history / 48) + { continue; } }