- if ((f & gtthan[i].f) &&
- !check_gt(grid, state, x, y, gtthan[i].dx, gtthan[i].dy)) {
- if (me) GRID(state, flags, x, y) |= gtthan[i].fe;
- ret = 0;
+ int dx = adjthan[i].dx, dy = adjthan[i].dy, n, dn;
+
+ if (x+dx < 0 || x+dx >= o || y+dy < 0 || y+dy >= o)
+ continue;
+
+ n = CHECKG(x, y);
+ dn = CHECKG(x+dx, y+dy);
+
+ assert (n != 0);
+ if (dn == 0) continue;
+
+ if (state->adjacent) {
+ int gd = abs(n-dn);
+
+ if ((f & adjthan[i].f) && (gd != 1)) {
+ debug(("check_adj error (%d,%d):%d should be | (%d,%d):%d",
+ x, y, n, x+dx, y+dy, dn));
+ if (me) GRID(state, flags, x, y) |= adjthan[i].fe;
+ ret = 0;
+ }
+ if (!(f & adjthan[i].f) && (gd == 1)) {
+ debug(("check_adj error (%d,%d):%d should not be | (%d,%d):%d",
+ x, y, n, x+dx, y+dy, dn));
+ if (me) GRID(state, flags, x, y) |= adjthan[i].fe;
+ ret = 0;
+ }
+
+ } else {
+ if ((f & adjthan[i].f) && (n <= dn)) {
+ debug(("check_adj error (%d,%d):%d not > (%d,%d):%d",
+ x, y, n, x+dx, y+dy, dn));
+ if (me) GRID(state, flags, x, y) |= adjthan[i].fe;
+ ret = 0;
+ }