Fix check extension
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 16 Feb 2013 16:55:38 +0000 (17:55 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 16 Feb 2013 17:00:44 +0000 (18:00 +0100)
Check extension in micro-Max was not be awarded when a piece other than King
captured the checker. In the code this was still tested assuming the piece
number of the King would always be 3, while in Fairy-Max every piece can be
Royal, based on the sign of its piece value w[]. In many game definitions
piece 3 was actually not a King at all.

changelog
fairymax.c

index 081204f..0586846 100644 (file)
--- a/changelog
+++ b/changelog
           * Spurious result claims after under-promotion
           * False mate claims in Spartan when promotion to K was possible
           * Fix bug in Berolina e.p. capture that is actually non-capture
+          * Fix conditions for check extension on capture of checker
           * Fix Clear Hash option, which did not work at all
           * Fix addition of 6th & 7th-rank Pawn bonus when setting up position
           * set promotion bonus on (under-)promotion to true piece value
index b236e4d..b5f0545 100644 (file)
@@ -219,7 +219,7 @@ int k,q,l,e,ev,E,z,n;    /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
         re=v>>Fac(v>>15&16^k);  /* Reduce eval if drawish for leading side */\r
         if(z&S)V=m-margin>q?m-margin:q;        /* multiPV                  */\r
         C=d-1-(d>5&p>2&!t&!h);                 /* nw depth, reduce non-cpt.*/\r
-        C=R<EG|P-I|d<3||t&&p-3?C:d;            /* extend 1 ply if in-check */\r
+        C=R<EG|P-I|d<3||t&&w[p]>0?C:d;         /* extend 1 ply if in-check */\r
         do\r
          s=C>2|re>V?-D(16-k,-l,-V,/*** futility, recursive eval. of reply */\r
                                   -v,-re,F,y&255,C):re;\r
@@ -300,7 +300,7 @@ Fac(int k)
    h=pl[k]-pl[17-k]-pl[18-k];                  /* his pieces (incl. King)  */\r
    if(h<2)r=0;                                 /* bare K easy even w.o. P  */\r
    j=h-n;                                      /* defenders after sac for P*/\r
-   if(j<3&&j--){                               /* can sac, <= 1 piece left */\r
+   if(j<3&&j-->0){                             /* can sac, <= 1 piece left */\r
     i=18-k;W(!pl[++i]);                        /* get lowest piece         */\r
     e=abs(w[i--])*n;                           /* sac for Pawn (if any)    */\r
     W(h>1)h-=pl[++i],e-=pl[i]*w[i];            /* total value his remaining*/\r