Update piece counts on all (game-level) promotions
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 11 Feb 2013 21:20:45 +0000 (22:20 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Wed, 13 Feb 2013 22:14:09 +0000 (23:14 +0100)
The piece count was only updated for entered moves in case of promotion
to royalty (which only occurs in Spartan, as underpromotion, so Fairy-Max
would never do it by itself). This is now moved to the 'first-floor exit',
where it is done for any game move and any piece type, so that piece count
pl[] are completely reliable in the root. (Preparing their use for
determination of mating potential.)

fairymax.c

index 9782ba4..ec6c6ca 100644 (file)
@@ -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
@@ -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