From 58bbc6e831d3989c22e6e6ce1e869224355b9f0e Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Sat, 1 Oct 2011 23:04:13 +0200 Subject: [PATCH] Add Cambodian Chess 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 | 19 +++++++++++++++++++ fairymax.c | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/data/fmax.ini b/data/fmax.ini index d38fe36..a1d6644 100644 --- a/data/fmax.ini +++ b/data/fmax.ini @@ -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:630 1,3 16,3 -1,3 -16,3 +// Cambodian Chess. Like Makruk, but with extra initial King and Met moves +Game: fairy/Cambodian # PN.R.M....SKpn.r.m....sk +8x8 +13 12 8 3 7 8 12 13 +13 12 9 7 4 9 12 13 +p:100 -16,6 -15,5 -17,5 +p:100 16,6 15,5 17,5 +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 +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 +f:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4 +q:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4 +m:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4 +s:300 15,7 17,7 -15,7 -17,7 -16,7 +s:300 15,7 17,7 -15,7 -17,7 16,7 +b:300 15,7 17,7 -15,7 -17,7 -16,7 +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:630 1,3 16,3 -1,3 -16,3 + // Medieval intermediate between Shatranj and FIDE Chess Game: courier 12x8 diff --git a/fairymax.c b/fairymax.c index 30396a2..98ff2cf 100644 --- a/fairymax.c +++ b/fairymax.c @@ -255,7 +255,7 @@ int k,q,l,e,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ } s=t;v=r^flag>>12; /* calc. alternated vector */ if(flag&15^4|u&32|| /* no double or moved before*/ - p>2&& /* no P & no lateral K move,*/ + p>2&!(flag&S)&& /* no P & no virgin jump, */ ((b[G=r<0?x&~15:BW-1|x&112]^32)<33 /* no virgin R in corner G, */ ||b[G^1]|b[G^2]|b[FF=y+v-r]) /* no 2 empty sq. next to R */ )t+=flag&4; /* fake capt. for nonsliding*/ @@ -382,7 +382,7 @@ InitGame() for(i=0;i<16*BH;i++)b[i]=0; for(i=0;i<32;i++)pl[i]=0; K=BW;W(K--) - {b[K]=oo[K+16]+16;b[K+112]=oo[K];b[K+16]=18;b[K+96]=1; /* initial board setup*/ + {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*/ pl[oo[K+16]+16]++;pl[oo[K]]++;pl[18]++;pl[1]++; if(w[oo[K+16]+16] == -1)pl[oo[K+16]+16]=1; if(w[oo[K]] == -1)pl[oo[K]]=1; -- 1.7.0.4