From: Christoph Sommer Date: Mon, 8 Jan 2007 21:56:21 +0000 (+0000) Subject: Improve loading of old levels: Don't quit when background is missing, ignore music... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=d230ce6c64a83daa0b69af8f5f097985cc65d1b3;p=supertux.git Improve loading of old levels: Don't quit when background is missing, ignore music, fill empty space at bottom with black tiles SVN-Revision: 4536 --- diff --git a/src/object/tilemap.cpp b/src/object/tilemap.cpp index 86d66e5f4..c923d5dea 100644 --- a/src/object/tilemap.cpp +++ b/src/object/tilemap.cpp @@ -257,7 +257,7 @@ TileMap::set(int newwidth, int newheight, const std::vector&newt, } void -TileMap::resize(int new_width, int new_height) +TileMap::resize(int new_width, int new_height, int fill_id) { if(new_width < width) { // remap tiles for new width @@ -268,14 +268,14 @@ TileMap::resize(int new_width, int new_height) } } - tiles.resize(new_width * new_height); + tiles.resize(new_width * new_height, fill_id); if(new_width > width) { // remap tiles for(int y = std::min(height, new_height)-1; y >= 0; --y) { for(int x = new_width-1; x >= 0; --x) { if(x >= width) { - tiles[y * new_width + x] = 0; + tiles[y * new_width + x] = fill_id; continue; } diff --git a/src/object/tilemap.hpp b/src/object/tilemap.hpp index 5fc73bbbb..73c0f5722 100644 --- a/src/object/tilemap.hpp +++ b/src/object/tilemap.hpp @@ -74,7 +74,7 @@ public: /** resizes the tilemap to a new width and height (tries to not destroy the * existing map) */ - void resize(int newwidth, int newheight); + void resize(int newwidth, int newheight, int fill_id = 0); size_t get_width() const { return width; } diff --git a/src/sector.cpp b/src/sector.cpp index 43804725a..7ec772099 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include "sector.hpp" #include "object/player.hpp" @@ -226,8 +227,17 @@ Sector::parse_old_format(const lisp::Lisp& reader) reader.get("gravity", gravity); std::string backgroundimage; - reader.get("background", backgroundimage); - if (backgroundimage == "arctis2.jpg") backgroundimage = "arctis.jpg"; + if (reader.get("background", backgroundimage)) { + if (backgroundimage == "arctis.png") backgroundimage = "arctis.jpg"; + if (backgroundimage == "arctis2.jpg") backgroundimage = "arctis.jpg"; + if (backgroundimage == "ocean.png") backgroundimage = "ocean.jpg"; + backgroundimage = "images/background/" + backgroundimage; + if (!PHYSFS_exists(backgroundimage.c_str())) { + log_warning << "Background image \"" << backgroundimage << "\" not found. Ignoring." << std::endl; + backgroundimage = ""; + } + } + float bgspeed = .5; reader.get("bkgd_speed", bgspeed); bgspeed /= 100; @@ -250,8 +260,7 @@ Sector::parse_old_format(const lisp::Lisp& reader) if(backgroundimage != "") { Background* background = new Background(); - background->set_image( - std::string("images/background/") + backgroundimage, bgspeed); + background->set_image(backgroundimage, bgspeed); add_object(background); } else { Gradient* gradient = new Gradient(); @@ -278,7 +287,10 @@ Sector::parse_old_format(const lisp::Lisp& reader) spawnpoints.push_back(spawn); music = "chipdisko.ogg"; + // skip reading music filename. It's all .ogg now, anyway + /* reader.get("music", music); + */ music = "music/" + music; int width = 30, height = 15; @@ -299,18 +311,24 @@ Sector::parse_old_format(const lisp::Lisp& reader) } } + if (height < 19) tilemap->resize(width, 19); add_object(tilemap); } if(reader.get_vector("background-tm", tiles)) { TileMap* tilemap = new TileMap(); tilemap->set(width, height, tiles, LAYER_BACKGROUNDTILES, false); + if (height < 19) tilemap->resize(width, 19); add_object(tilemap); } if(reader.get_vector("foreground-tm", tiles)) { TileMap* tilemap = new TileMap(); tilemap->set(width, height, tiles, LAYER_FOREGROUNDTILES, false); + + // fill additional space in foreground with tiles of ID 2035 (lightmap/black) + if (height < 19) tilemap->resize(width, 19, 2035); + add_object(tilemap); }