Forbid promotion to pieces with value ending in 3
[fairymax.git] / fairymax.c
index 007e542..9589df7 100644 (file)
@@ -276,7 +276,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
         )t+=flag&4;                            /* fake capt. for nonsliding*/\r
       else if(flag&64)t=flag&128?0:t,flag&=63;else F=y; /* enable e.p.     */\r
       if(s&&flag&8&&!(y=rg&1?y-r:y,t=0)        /* hoppers go to next phase */\r
-         ||!(flag&S)&&--rg<0)                  /* zig-zag piece? (w. delay)*/\r
+         ||!(flag&S)&&!rg--)                   /* zig-zag piece? (w. delay)*/\r
        r=v,flag^=flag>>4&15;                   /* alternate vector & mode  */\r
      }W(!t);                                   /* if not capt. continue ray*/\r
    }}\r
@@ -896,7 +896,7 @@ printf("# promo = %d (%c) GT = %d\n", prom, prom + '`', GT);
                 GT = (Side == WHITE ? piecetype : blacktype)[line[4]&31];\r
                 if(GT) PromPiece = (Side == WHITE ? 7 : 7+pm) - GT, GT |= 32 + Side;\r
                 {char *c=line; K=c[0]-16*c[1]+799;L=c[2]-16*c[3]+799; }\r
-                if(w[GT&15] == -1) L = S; // spoil move for promotion to King\r
+                if(w[GT&15] == -1 || w[GT&15]%10 == 3) L = S; // spoil move for promotion to King (or when marked non-promoting)\r
                 if (m & line[1] != '@')\r
                         /* doesn't have move syntax */\r
                        printf("Error (unknown command): %s\n", command);\r