Add Cambodian Chess
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 1 Oct 2011 21:04:13 +0000 (23:04 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Fri, 7 Oct 2011 16:04:46 +0000 (18:04 +0200)
The extra moves of virgin K and M had to be exempted from the castling
test, for which the 128-bit in th eflags is used. This bit also indicates
the intermediate square is a dummy, (which makes the move a jump), and
is thus never set on genuine castlings.

data/fmax.ini
fairymax.c

index d38fe36..a1d6644 100644 (file)
@@ -304,6 +304,25 @@ b:300 15,7 17,7 -15,7 -17,7 16,7
 n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
 R:630 1,3 16,3 -1,3 -16,3\r
 \r
+// Cambodian Chess. Like Makruk, but with extra initial King and Met moves\r
+Game: fairy/Cambodian # PN.R.M....SKpn.r.m....sk\r
+8x8\r
+13 12 8 3 7 8 12 13\r
+13 12 9 7 4 9 12 13\r
+p:100 -16,6 -15,5 -17,5 \r
+p:100 16,6 15,5 17,5\r
+k:-1  1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7 -16,10F4 -16,1F0F4 -1,100F4 1,FFFF00F4\r
+k:-1  1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7 16,10F4 16,1F0F4 1,100F4 -1,FFFF00F4\r
+f:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
+q:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
+m:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
+s:300 15,7 17,7 -15,7 -17,7 -16,7\r
+s:300 15,7 17,7 -15,7 -17,7 16,7\r
+b:300 15,7 17,7 -15,7 -17,7 -16,7\r
+b:300 15,7 17,7 -15,7 -17,7 16,7\r
+n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
+R:630 1,3 16,3 -1,3 -16,3\r
+\r
 // Medieval intermediate between Shatranj and FIDE Chess\r
 Game: courier\r
 12x8\r
index 30396a2..98ff2cf 100644 (file)
@@ -255,7 +255,7 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
       }\r
       s=t;v=r^flag>>12;                        /* calc. alternated vector  */\r
       if(flag&15^4|u&32||                      /* no double or moved before*/\r
-         p>2&&                                 /* no P & no lateral K move,*/\r
+         p>2&!(flag&S)&&                       /* no P & no virgin jump,   */\r
          ((b[G=r<0?x&~15:BW-1|x&112]^32)<33    /* no virgin R in corner G, */\r
          ||b[G^1]|b[G^2]|b[FF=y+v-r])          /* no 2 empty sq. next to R */\r
         )t+=flag&4;                            /* fake capt. for nonsliding*/\r
@@ -382,7 +382,7 @@ InitGame()
  for(i=0;i<16*BH;i++)b[i]=0;\r
  for(i=0;i<32;i++)pl[i]=0;\r
  K=BW;W(K--)\r
- {b[K]=oo[K+16]+16;b[K+112]=oo[K];b[K+16]=18;b[K+96]=1; /* initial board setup*/\r
+ {b[K]=oo[K+16]+16;b[K+112]=oo[K];b[K+16+16*!!makruk]=18;b[K+96-16*!!makruk]=1; /* initial board setup*/\r
   pl[oo[K+16]+16]++;pl[oo[K]]++;pl[18]++;pl[1]++;\r
   if(w[oo[K+16]+16] == -1)pl[oo[K+16]+16]=1;\r
   if(w[oo[K]] == -1)pl[oo[K]]=1;\r