Implement limited-range sliders
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 20 Feb 2013 16:06:37 +0000 (17:06 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Wed, 20 Feb 2013 16:06:37 +0000 (17:06 +0100)
bit 10 & 11 of the flags word were still unused, and are now used to
specify how many steps the first toggling of the move rights should
be postponed on non-hopper moves.

fairymax.c

index 769da7f..c893b37 100644 (file)
@@ -149,7 +149,7 @@ D(k,q,l,e,E,z,n)        /* recursive minimax search, k=moving side, n=depth*/
 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
@@ -174,7 +174,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
     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
@@ -273,7 +273,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)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