#define R 37 /* jump capture */\r
#define N -1 /* Knight */\r
#define J -2 /* jump */\r
-#define D -3 /* linear double move */\r
-#define T -4 /* linear triple move */\r
-#define L -5 /* true Lion move */\r
-#define F -6 /* Lion + 3-step */\r
-#define S -7 /* Lion + range */\r
+#define I -3 /* jump + step */\r
+#define D -4 /* linear double move */\r
+#define T -5 /* linear triple move */\r
+#define L -6 /* true Lion move */\r
+#define F -7 /* Lion + 3-step */\r
+#define S -8 /* Lion + range */\r
#define H -9 /* hook move */\r
#define C -10 /* capture only */\r
#define M -11 /* non-capture only */\r
} else\r
if(r >= S) { // in any case, do a jump of 2\r
int occup = NewNonCapture(x, x + 2*v, pFlag);\r
- if(r < J) { // Lion power, also single step\r
+ if(r < I) { // Lion power, also single step\r
if(!NewNonCapture(x, x + v, pFlag)) nullMove = x; else occup = 1;\r
if(r <= L) { // true Lion, also Knight jump\r
if(!occup & r < L) for(y=x+2*v; !NewNonCapture(x, y+=v, pFlag) && r == S; ); // BS and FF moves\r
v = nStep[j];\r
NewNonCapture(x, x + v, pFlag);\r
}\r
- }\r
+ } else if(r == I) NewNonCapture(x, x + v, pFlag); // also do step\r
} else\r
if(r == M) { // FIDE Pawn; check double-move\r
if(!NewNonCapture(x, x+v, pFlag) && chessFlag && promoBoard[x-v] & LAST_RANK)\r
if(r < J) { // Lion power, also single step\r
if(board[x + v] != EMPTY && board[x + v] != EDGE)\r
map[2*(x + v) + start] += one[j];\r
+ if(r < I) {\r
if(r == T) { // Lion Dog, also jump of 3\r
if(board[x + 3*v] != EMPTY && board[x + 3*v] != EDGE)\r
map[2*(x + 3*v) + start] += one[j];\r
if(board[x + v] != EMPTY && board[x + v] != EDGE)\r
map[2*(x + v) + start] += one[8];\r
}\r
+ }\r
}\r
} else\r
if(r == C) { // FIDE Pawn diagonal\r
int i;\r
for(i=0; i<2*bsize; i++) map[i] = 0;\r
mobilityScore = MapOneColor(1, last[WHITE], map);\r
+\r
mobilityScore -= MapOneColor(0, last[BLACK], map);\r
}\r
\r
break;\r
case J: // plain jump (as in KY, PH)\r
if(d != 2) break;\r
+ case I: // jump + step (as in Wa TF)\r
+ if(d > 2) break;\r
NewCapture(x, sqr + victimValue - SORTKEY(attacker), p[attacker].promoFlag);\r
att -= one[i];\r
break;\r
for(i=BH-1; i>=0; i--) {\r
for(j=0; j<BH; j++) printf("%3x", b[BW*i+j]);\r
printf("\n");\r
+\r
}\r
}\r
\r