Index: src/vehicle.cpp =================================================================== --- src/vehicle.cpp (revision 10150) +++ src/vehicle.cpp (working copy) @@ -889,18 +889,28 @@ const int b = dpi->top + dpi->height; /* The hash area to scan */ - const int xl = GB(l - 70, 7, 6); - const int xu = GB(r, 7, 6); - const int yl = GB(t - 70, 6, 6) << 6; - const int yu = GB(b, 6, 6) << 6; + int xl, xu, yl, yu; - int x; - int y; + if (dpi->width + 70 < 1<<13) { + xl = GB(l - 70, 7, 6); + xu = GB(r, 7, 6); + } else { + xl = 0; /* scan whole hash row */ + xu = 0x3F; + } - for (y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) { - for (x = xl;; x = (x + 1) & 0x3F) { - const Vehicle *v = _vehicle_position_hash[(x + y) & 0xFFFF]; + if (dpi->height + 70 < 1<<12) { + yl = GB(t - 70, 6, 6) << 6; + yu = GB(b, 6, 6) << 6; + } else { + yl = 0; /* scan whole column */ + yu = 0x3F << 6; + } + for (int y = yl;; y = (y + (1 << 6)) & (0x3F << 6)) { + for (int x = xl;; x = (x + 1) & 0x3F) { + const Vehicle *v = _vehicle_position_hash[x + y]; /* already masked & 0xFFF */ + while (v != NULL) { if (!(v->vehstatus & VS_HIDDEN) && l <= v->right_coord &&