int k,q,l,e,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/\r
{ /* e=score, z=prev.dest; J,Z=hashkeys; return score*/\r
int j,r,m,v,d,h,i,F,G,P,V,f=J,g=Z,C,s,flag,FF,*ps=sp,kk=S;\r
- signed char t,p,u,x,y,X,Y,H,B,gt;\r
+ signed char t,p,u,x,y,X,Y,H,B,gt,rg;\r
struct _*a=A+(J+(k+S)*E&U); /* lookup pos. in hash table*/\r
*sp++=0;\r
q-=q<e;l-=l<=e; /* adj. window: delay bonus */\r
W(r=o[++j]) /* loop over directions o[] */\r
{A: /* resume normal after best */\r
flag=h?3:of[j]; /* move modes (for fairies) */\r
- y=x;F=FF=G=S; /* (x,y)=move, (F,G)=castl.R*/\r
+ y=x;F=FF=G=S;rg=flag>>10&3; /* (x,y)=move, (F,G)=castl.R*/\r
do{ /* y traverses ray, or: */\r
H=y=h?Y^h:y+r; /* sneak in prev. best move */\r
if(flag&1<<8)H=y=(y&15)>13?y+BW:(y&15)>=BW?y-BW:y; /* cylinder board */\r
{if(v+I&&x==K&y==L>==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: */\r
- Q-=abs(w[prom&=15])-w[p]-6*S, /* correct piece & score & */\r
+ Q-=abs(w[prom&=15])-w[p]-(6*S>>sh), /* correct piece & score & */\r
Z+=PromPiece; /* invalidate hash */\r
a->D=99;a->V=0; /* lock game in hash as draw*/\r
R-=i/FAC; /*** total captd material ***/\r
)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)t=0,flag^=flag>>4&15; /* hoppers go to next phase */\r
- if(!(flag&S)) /* zig-zag piece? */\r
+ if(--rg<0&!(flag&S)) /* 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