Keep track of total piece count always
[fairymax.git] / fairymax.c
index 9782ba4..6c4ea12 100644 (file)
@@ -214,7 +214,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
          i+=V;                                 /* promotion / passer bonus */\r
         } if(z&S && GamePtr<6) v+=(rand()>>10&31)-16;\r
         J+=J(0);Z+=J(4)+G-S;\r
-        SHAMAX( pl[k]-=!!t; )                  /* count pieces per side    */\r
+        pl[k]-=!!t;                            /* count pieces per side    */\r
         v+=e+i;V=m>q?m:q;                      /*** new eval & alpha    ****/\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
@@ -232,7 +232,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
         {if(v+I&&x==K&y==L&gt==GT)             /*   if move found          */\r
          {Q=-e-i;O=F;LL=L;prom=gt;\r
           if(b[y]-u&15)prom=b[y]-=PromPiece,   /* under-promotion, correct */\r
-                       Z+=PromPiece;           /*  piece & invalidate hash */\r
+           pl[u&31]--,pl[prom&31]++,Z+=PromPiece;/*piece & invalidate hash */\r
           a->D=99;a->V=0;                      /* lock game in hash as draw*/\r
           R-=i/FAC;                            /*** total captd material ***/\r
           Fifty = t|p<3?0:Fifty+1;\r
@@ -240,7 +240,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
                      return l;}                /*   & not in check, signal */\r
          v=m;                                  /* (prevent fail-lows on    */\r
         }                                      /*   K-capt. replies)       */\r
-        SHAMAX( pl[k]+=!!t; ) pl[t&31]+=!!t;\r
+        pl[k]+=!!t;pl[t&31]+=!!t;\r
         b[G]=b[FF];b[FF]=b[y]=0;b[x]=u;b[H]=t; /* undo move,G can be dummy */\r
        }                                       /*          if non-castling */\r
        if(z&S&&K==I&d>2&v>V&v<l){int *p=ps;char X,Y;\r
@@ -889,7 +889,6 @@ int main(int argc, char **argv)
                 else { int i=-1;\r
                     if(b[L] && (b[L]&16) == Side && w[b[L]&15] < 0) // capture own King: castling\r
                     { i=K; K = L; L = i>L ? i-1 : i+2; }\r
-                   if(w[GT&15] < -1) pl[GT&31]++, J+=89729; // promotion to royal piece\r
                     if((b[K]&15) < 3) GT = 0; // Pawn => true promotion rather than gating\r
                     if(D(Side,-I,I,Q,O,LL|S,3)!=I) {\r
                         /* did have move syntax, but illegal move */\r