Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1.       if (rootKnoop && zetNummer > 1 && Threads.tactischeModus && diepte >= 12 * PLY && abs(alfa) < WINST_WAARDE
  2.           && diepte > mijnThread->vorigeTactischeDiepte)
  3.       {
  4.           mijnThread->tactischeModusGebruikt = true;
  5.  
  6.           bool tactische_zet = slagOfPromotie || geeftSchaak;
  7.           if (!tactische_zet)
  8.           {
  9.               Waarde alfa_dreiging = alfa + 5 * WAARDE_PION / 4;
  10.  
  11.               st++;
  12.               st->mp_eindeLijst = (st - 1)->mp_eindeLijst;
  13.               pos.speel_null_zet();
  14.               (st + 1)->doeGeenVroegePruning = true;
  15.               waarde = search<NonPV>(pos, alfa_dreiging, alfa_dreiging + WAARDE_1, 6 * PLY, false);
  16.               (st + 1)->doeGeenVroegePruning = false;
  17.               pos.neem_null_terug();
  18.               st--;
  19.  
  20.               tactische_zet = (waarde > alfa_dreiging);
  21.           }
  22.  
  23.           if (tactische_zet)
  24.           {
  25.               Diepte diepte_red = diepte - diepte / 8;
  26.               waarde = mijnThread->rootZetten[mijnThread->rootZetten.find(zet)].startWaarde;
  27.  
  28.               Waarde score_offset = 8 * (alfa - waarde) / (diepte / PLY + 16);
  29.               do
  30.               {
  31.                   if (Signals.stop.load(std::memory_order_relaxed))
  32.                       return WAARDE_0;
  33.  
  34.                   Waarde alfa_red = waarde + score_offset;
  35.                   if (alfa_red >= alfa && diepte_red <= diepte)
  36.                       break;
  37.                   if (alfa_red >= alfa || diepte_red >= diepte + diepte / 8)
  38.                       alfa_red = alfa;
  39.  
  40.                   (st + 1)->doeGeenVroegePruning = true;
  41.                   waarde = -search<NonPV>(pos, -alfa_red - WAARDE_1, -alfa_red, diepte_red, true);
  42.                   (st + 1)->doeGeenVroegePruning = false;
  43.  
  44.                   if (waarde <= alfa_red)
  45.                       break;
  46.                   if (waarde > alfa && diepte_red >= diepte)
  47.                   {
  48.                       (st + 1)->pv = pv;
  49.                       (st + 1)->pv[0] = GEEN_ZET;
  50.                       waarde = -search<PV>(pos, -beta, -alfa, diepte_red, false);
  51.                       goto einde_zet;
  52.                   }
  53.                   diepte_red += PLY;
  54.               } while (true);
  55.           }