- for(int i = 1; i < h; ++i)
- {
- if(issolid(pbase->x + i*16,pbase->y + 1))
+bool collision_object_map(const base_type& base)
+{
+ const TileMap& tilemap = *Sector::current()->solids;
+
+ // we make the collision rectangle 1 pixel smaller
+ int starttilex = int(base.x+1) / 32;
+ int starttiley = int(base.y+1) / 32;
+ int max_x = int(base.x + base.width);
+ int max_y = int(base.y + base.height);
+
+ for(int x = starttilex; x*32 < max_x; ++x) {
+ for(int y = starttiley; y*32 < max_y; ++y) {
+ const Tile* tile = tilemap.get_tile(x, y);
+ if(tile && tile->attributes & Tile::SOLID)