From: mmlosh Date: Wed, 13 Jan 2010 18:46:25 +0000 (+0000) Subject: Fix for bug 544 and it's duplicates. X-Git-Url: https://git.octo.it/?p=supertux.git;a=commitdiff_plain;h=fab59b9507bfb5bdd469869dbcf5730bbc54af36 Fix for bug 544 and it's duplicates. There are some minor chagnes to the patch to make it more readable, but the credit still belongs to octo git-svn-id: http://supertux.lethargik.org/svn/supertux/trunk/supertux@6254 837edb03-e0f3-0310-88ca-d4d4e8b29345 --- diff --git a/src/object/tilemap.cpp b/src/object/tilemap.cpp index 1c5466e25..d916e055c 100644 --- a/src/object/tilemap.cpp +++ b/src/object/tilemap.cpp @@ -209,6 +209,8 @@ TileMap::draw(DrawingContext& context) int tsx = int((context.get_translation().x - x_offset) / 32); // tilestartindex x int tsy = int((context.get_translation().y - y_offset) / 32); // tilestartindex y + tsx = std::max(tsx, 0); + tsy = std::max(tsy, 0); float start_x = tsx * 32 + x_offset; float start_y = tsy * 32 + y_offset; float end_x = start_x + SCREEN_WIDTH + 32; @@ -216,14 +218,19 @@ TileMap::draw(DrawingContext& context) Vector pos; int tx, ty; + for(pos.x = start_x, tx = tsx; (pos.x < end_x) && (tx < width); pos.x += 32, ++tx) { for(pos.y = start_y, ty = tsy; (pos.y < end_y) && (ty < height); pos.y += 32, ++ty) { - if (tiles[ty*width + tx] == 0) continue; - const Tile* tile = tileset->get(tiles[ty*width + tx]); + int index = ty*width + tx; + assert (index >= 0); + assert (index < (width * height)); + + if (tiles[index] == 0) continue; + const Tile* tile = tileset->get(tiles[index]); assert(tile != 0); tile->draw(context, pos, z_pos); - } - } + } /* for (pos y) */ + } /* for (pos x) */ if(draw_target != DrawingContext::NORMAL) { context.pop_target();