void\r
Connect (int sqr, int piece, int dir)\r
{ // scan to both sides along ray to elongate attacks from there, and remove our own attacks on there, if needed\r
- int x, step = kStep[dir], r1 = p[piece].range[dir], r2 = p[piece].range[dir+4], piece1, piece2;\r
+ int x, step = kStep[dir], r1 = p[piece].range[dir], r2 = p[piece].range[dir+4], r3, r4, piece1, piece2;\r
int d1, d2, r, y, c;\r
\r
if((attacks[2*sqr] + attacks[2*sqr+1]) & attackMask[dir]) { // there are incoming attack(s) from 'behind'\r
d2 = dist[y-sqr]; piece2 = board[y];\r
attacks[2*y+stm] -= -(d2 <= r1) & one[dir]; // remove our attack on it if in-range\r
// we have two pieces now shooting at each other. See how far they get.\r
- if(d1 + d2 <= (r1 = p[piece1].range[dir])) { // 1 hits 2\r
+ if(d1 + d2 <= (r3 = p[piece1].range[dir])) { // 1 hits 2\r
attacks[2*y + (piece1 & WHITE)] += one[dir]; // count attack\r
UPDATE_MOBILITY(piece1, d2);\r
- } else UPDATE_MOBILITY(piece1, r1 - d1); // does not connect, but could still gain mobility\r
- if(d1 + d2 <= (r2 = p[piece2].range[dir+4])) { // 2 hits 1\r
+ } else UPDATE_MOBILITY(piece1, r3 - d1); // does not connect, but could still gain mobility\r
+ if(d1 + d2 <= (r4 = p[piece2].range[dir+4])) { // 2 hits 1\r
attacks[2*x + (piece2 & WHITE)] += one[dir+4]; // count attack\r
UPDATE_MOBILITY(piece2, d1);\r
- } else UPDATE_MOBILITY(piece2, r2 - d2); // does not connect, but could still gain mobility\r
+ } else UPDATE_MOBILITY(piece2, r4 - d2); // does not connect, but could still gain mobility\r
// if r1 or r2<0, moves typically jump, and thus cannot be unblocked. Exceptions are FF and BS distant moves.\r
// test for d1+d2 > 2 && rN == F && d== 3 or rN == S\r
+ if(d1 <= 2) { // could be jump interactions\r
+ if(d1 == 2) {\r
+ if(r2 <= J) attacks[2*x + stm] -= one[dir+4];\r
+ if(r1 <= J) attacks[2*y + stm] -= one[dir];\r
+ } else { // d1 == 1\r
+ if(r2 < J) attacks[2*x + stm] -= one[dir+4];\r
+ if(r1 < J) attacks[2*y + stm] -= one[dir];\r
+ if(board[x-step] != EMPTY && board[x-step] != EDGE)\r
+ attacks[2*(x-step) + stm] -= one[dir+4];\r
+ }\r
+ }\r
\r
} else { // we were only attacked from behind\r
\r