Fix promotion bonus
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 13 Feb 2013 22:22:03 +0000 (23:22 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Thu, 14 Feb 2013 10:40:55 +0000 (11:40 +0100)
In its search Fairy-Max always promotes to 'Queen' and gives itself 768 cP
bonus for that. (Which is about right for the original micro-Max Q=851
and P=74.) The opponent can do under-promotion to a piece of wildly
different value, though, and this was not corrected. It is now corrected
at game level (which is the only place it can happen).

changelog
fairymax.c

index 6431c94..081204f 100644 (file)
--- a/changelog
+++ b/changelog
           * Fix bug in Berolina e.p. capture that is actually non-capture
           * 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
           In addition it prints msec-accurate timing info.
 
index bdb76e4..b236e4d 100644 (file)
@@ -232,8 +232,9 @@ int k,q,l,e,ev,E,z,n;    /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
         if(z&S&&K-I)                           /* move pending: check legal*/\r
         {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
-           pl[u&31]--,pl[prom&31]++,Z+=PromPiece;/*piece & invalidate hash */\r
+          if(b[y]-u&15)prom=b[y]-=PromPiece,   /* (under-)promotion:       */\r
+           Q-=abs(w[prom&=31])-w[p]-6*S,       /*  correct piece & score & */\r
+           pl[u&31]--,pl[prom]++,Z+=PromPiece; /*  count & 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