- if ((d2 = sq->file->dir) == 0 || sp == sq)
- continue;
- r2 = sq->file->row;
- c2 = sq->file->col;
- sq->file->dir = dir[l];
- sq->file->row = row[l];
- sq->file->col = col[l];
- if (grappled2(sp, sq)
- && push(sp, sq) && range(sp, sq) > 1) {
- Write(W_SHIPROW, sq, 0,
- sp->file->row - 1, 0, 0, 0);
- if (sp->file->dir == 1
- || sp->file->dir == 5) /* XXX */
- Write(W_SHIPCOL, sq, 0,
- sp->file->col - 1,
- 0, 0, 0);
- else
- Write(W_SHIPCOL, sq, 0,
- sp->file->col, 0, 0, 0);
- Write(W_SHIPDIR, sq, 0,
- sp->file->dir, 0, 0, 0);
- }
- if (!range(sp, sq) && !fouled2(sp, sq)
- && push(sp, sq)) {
+ char snap = 0;
+
+ if (sp == sq)
+ goto cont2;
+ if (sq->file->dir == 0)
+ goto cont2;
+ if (!push(sp, sq))
+ goto cont2;
+ if (snagged2(sp, sq) && range(sp, sq) > 1)
+ snap++;
+ if (!range(sp, sq) && !fouled2(sp, sq)) {