diff options
Diffstat (limited to 'src/game/client/mapres_tilemap.cpp')
| -rw-r--r-- | src/game/client/mapres_tilemap.cpp | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/src/game/client/mapres_tilemap.cpp b/src/game/client/mapres_tilemap.cpp index dfc7a7f8..6038e67c 100644 --- a/src/game/client/mapres_tilemap.cpp +++ b/src/game/client/mapres_tilemap.cpp @@ -15,6 +15,10 @@ void tilemap_render(float scale, int fg) if(!map_is_loaded()) return; + + float screen_x0, screen_y0, screen_x1, screen_y1; + gfx_getscreen(&screen_x0, &screen_y0, &screen_x1, &screen_y1); + // fetch indecies int start, num; map_get_type(MAPRES_TILEMAP, &start, &num); @@ -40,23 +44,35 @@ void tilemap_render(float scale, int fg) gfx_texture_set(img_get(tmap->image)); gfx_quads_begin(); - int c = 0; float frac = (1.0f/1024.0f);//2.0f; //2.0f; float texsize = 1024.0f; float nudge = 0.5f/texsize; - for(int y = 0; y < tmap->height; y++) - for(int x = 0; x < tmap->width; x++, c++) + + int startx = (int)(screen_x0/scale) - 1; + int endx = (int)(screen_x1/scale) + 1; + int starty = (int)(screen_y0/scale) - 1; + int endy = (int)(screen_y1/scale) + 1; + for(int y = starty; y < endy; y++) + for(int x = startx; x < endx; x++) { + int mx = x; + int my = y; + if(mx<0) mx = 0; + if(mx>=tmap->width) mx = tmap->width-1; + if(my<0) my = 0; + if(my>=tmap->height) my = tmap->height-1; + + int c = mx + my*tmap->width; + unsigned char d = data[c*2]; if(d) { - /* - gfx_quads_setsubset( - (d%16)/16.0f*s+frac, - (d/16)/16.0f*s+frac, - ((d%16)/16.0f+1.0f/16.0f)*s-frac, - ((d/16)/16.0f+1.0f/16.0f)*s-frac); - */ + //gfx_quads_setsubset( + // (d%16)/16.0f*s+frac, + // (d/16)/16.0f*s+frac, + // ((d%16)/16.0f+1.0f/16.0f)*s-frac, + // ((d/16)/16.0f+1.0f/16.0f)*s-frac); + int tx = d%16; int ty = d/16; int px0 = tx*(1024/16); |