Limit duple-check rule to piece types above 7
authorH.G. Muller <h.g.muller@hccnet.nl>
Tue, 2 Nov 2010 10:22:45 +0000 (11:22 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Tue, 2 Nov 2010 10:22:45 +0000 (11:22 +0100)
This to allow implementation of normal extinction variants.
The definition of Spartan Chess had to be adapted to maintain the
duple-check rule there, moving the King definition to the end.
The piece ordering was further changed so that the black pieces now
also are ordered low to high, which gives better move ordering in QS,
as Fairy-Max' idea of MVV/LVA orders attacker on piece-type number,
rather than the defined value.

data/fmax.ini
fairymax.c

index 83f2a30..26c1f56 100644 (file)
@@ -179,11 +179,11 @@ others cannot be indicated at all, but they could still occur in the
 initial setup (where you specify them by number, not letter).\r
 \r
 Pieces with negative values are considered royal. If one side has more than\r
-one royal piece of the same type, he loses if the _last_ one is captured,\r
-with the special rule that he is not allowed to leave more than one of\r
-them under attack. This means the 'spare' royal pieces can be sacrificed,\r
-and the exchange value assumed for them will be the absolute value of what\r
-you define for them.\r
+one royal piece of the same type, he loses if the _last_ one is captured.\r
+For royal piece types larger than 7 there is the special rule that it is not\r
+allowed to leave more than one of them under attack. This means the 'spare'\r
+royal pieces can be sacrificed, and the exchange value assumed for them will\r
+be the absolute value of what you define for them.\r
 \r
 NOTE: piece value 181 for piece 7 is reserved for Makruk, and enables\r
 promotion on the 6th rank. Do not use it in other variants.\r
@@ -471,18 +471,18 @@ m:640 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7 1,7 16,7 -1,7 -16,7 2,7 -2,7 3
 // Spartan Chess, where black has a different army from white's orthodox FIDE, with two kings\r
 Game: fairy/Spartan\r
 8x8\r
-6 4 5 7 3 5 4 6\r
-11 9 3 10 10 3 8 11\r
+6 4 5 7 11 5 4 6\r
+3 9 11 8 8 11 10 3\r
 p:74 -16,64 -16,6 -15,5 -17,5 \r
 h:74  15,E4  17,E4 16,5 15,6 17,6\r
-k:-400 1,34 -1,34 1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7\r
+l:270 15,7 17,7 -15,7 -17,7 30,7 34,7 -30,7 -34,7 1,6 -1,6\r
 n:259 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
 b:296 15,3 17,3 -15,3 -17,3\r
 R:444 1,3 16,3 -1,3 -16,3\r
 Q:851 1,3 16,3 15,3 17,3 -1,3 -16,3 -15,3 -17,3\r
-w:790 15,3 17,3 -15,3 -17,3 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
-G:814 1,3 16,3 -1,3 -16,3 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
-l:270 15,7 17,7 -15,7 -17,7 30,7 34,7 -30,7 -34,7 1,6 -1,6\r
 c:250 1,7 16,7 -1,7 -16,7 2,7 -2,7 32,7 -32,7\r
+G:814 1,3 16,3 -1,3 -16,3 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
+w:790 15,3 17,3 -15,3 -17,3 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
+k:-400 1,34 -1,34 1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7\r
 \r
 // End of game file\r
index 5b2e98a..0c1fc81 100644 (file)
@@ -181,7 +181,8 @@ int k,q,l,e,E,z,n;      /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/
       if(flag&1+!t)                            /* mode (capt/nonc) allowed?*/\r
       {if(t&&(t&16)==k)break;                  /* capture own              */\r
        i=w[t&15]+((t&192)>>sh);                /* value of capt. piece t   */\r
-       if(i<0&&(pl[t&31]<2||kk!=H&kk!=S||(kk=H,i=-i,0)))m=I,d=98;/* K capture, duple check */\r
+       if(i<0&&(pl[t&31]<2||                   /* K capture, (of last K),  */\r
+        t>>3&kk!=H&kk!=S||(kk=H,i=-i,0)))m=I,d=98;/* or duple check: cutoff*/\r
        if(m>=l&d>1)goto C;                     /* abort on fail high       */\r
        v=d-1?e:i-p;                            /*** MVV/LVA scoring if d=1**/\r
        if(d-!t>1)                              /*** all captures if d=2  ***/\r