X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fsector.cpp;h=2464ccc833ac2e9460db4357cfed32e39c20be38;hb=cde3a617070bee8af4ddcf58122cf6a65b97d874;hp=cb20718a8b4ef5cf284feae7d7599387b5906764;hpb=bf769796df5b8899eadaff544409f0ee20882530;p=supertux.git diff --git a/src/sector.cpp b/src/sector.cpp index cb20718a8..2464ccc83 100644 --- a/src/sector.cpp +++ b/src/sector.cpp @@ -56,7 +56,6 @@ #include "object/bullet.hpp" #include "object/text_object.hpp" #include "badguy/jumpy.hpp" -#include "badguy/spike.hpp" #include "trigger/sequence_trigger.hpp" #include "player_status.hpp" #include "scripting/script_interpreter.hpp" @@ -73,7 +72,7 @@ Sector::Sector() currentmusic(LEVEL_MUSIC) { song_title = "chipdisko.ogg"; - player = new Player(&player_status); + player = new Player(player_status); add_object(player); #ifdef USE_GRID @@ -171,14 +170,16 @@ Sector::parse(const lisp::Lisp& sector) } update_game_objects(); + + if(!solids) + throw std::runtime_error("sector does not contain a solid tile layer."); + fix_old_tiles(); if(!camera) { std::cerr << "sector '" << name << "' does not contain a camera.\n"; update_game_objects(); add_object(new Camera(this)); } - if(!solids) - throw std::runtime_error("sector does not contain a solid tile layer."); update_game_objects(); } @@ -202,16 +203,16 @@ Sector::parse_old_format(const lisp::Lisp& reader) reader.get("bkgd_red_top", r); reader.get("bkgd_green_top", g); reader.get("bkgd_blue_top", b); - bkgd_top.red = r; - bkgd_top.green = g; - bkgd_top.blue = b; + bkgd_top.red = static_cast (r) / 255.0f; + bkgd_top.green = static_cast (g) / 255.0f; + bkgd_top.blue = static_cast (b) / 255.0f; reader.get("bkgd_red_bottom", r); reader.get("bkgd_green_bottom", g); reader.get("bkgd_blue_bottom", b); - bkgd_bottom.red = r; - bkgd_bottom.green = g; - bkgd_bottom.blue = b; + bkgd_bottom.red = static_cast (r) / 255.0f; + bkgd_bottom.green = static_cast (g) / 255.0f; + bkgd_bottom.blue = static_cast (b) / 255.0f; if(backgroundimage != "") { Background* background = new Background; @@ -244,7 +245,7 @@ Sector::parse_old_format(const lisp::Lisp& reader) song_title = "chipdisko.ogg"; reader.get("music", song_title); - int width, height = 15; + int width = 30, height = 15; reader.get("width", width); reader.get("height", height); @@ -307,10 +308,12 @@ Sector::parse_old_format(const lisp::Lisp& reader) add_object(camera); update_game_objects(); + + if(solids == 0) + throw std::runtime_error("sector does not contain a solid tile layer."); + fix_old_tiles(); update_game_objects(); - if(solids == 0) - throw std::runtime_error("sector does not contain a solid tile layer."); } void @@ -339,7 +342,7 @@ Sector::fix_old_tiles() add_object(new SequenceTrigger(pos, sequence)); solids->change(x, y, 0); } - } + } } } @@ -630,7 +633,7 @@ Sector::collision_tilemap(MovingObject* object, int depth) if(Collision::rectangle_aatriangle(temphit, dest, object->movement, triangle)) { hit.tileflags |= tile->getAttributes(); - if(temphit.time > hit.time) { + if(temphit.time > hit.time && (tile->getAttributes() & Tile::SOLID)) { temphit.tileflags = hit.tileflags; hit = temphit; } @@ -640,7 +643,7 @@ Sector::collision_tilemap(MovingObject* object, int depth) if(Collision::rectangle_rectangle(temphit, dest, object->movement, rect)) { hit.tileflags |= tile->getAttributes(); - if(temphit.time > hit.time) { + if(temphit.time > hit.time && (tile->getAttributes() & Tile::SOLID)) { temphit.tileflags = hit.tileflags; hit = temphit; } @@ -650,7 +653,7 @@ Sector::collision_tilemap(MovingObject* object, int depth) } // did we collide at all? - if(hit.time < 0) + if(hit.tileflags == 0) return; // call collision function @@ -751,11 +754,11 @@ Sector::add_bullet(const Vector& pos, float xm, Direction dir) static const size_t MAX_ICE_BULLETS = 1; Bullet* new_bullet = 0; - if(player_status.bonus == FIRE_BONUS) { + if(player_status->bonus == FIRE_BONUS) { if(bullets.size() > MAX_FIRE_BULLETS-1) return false; new_bullet = new Bullet(pos, xm, dir, FIRE_BULLET); - } else if(player_status.bonus == ICE_BONUS) { + } else if(player_status->bonus == ICE_BONUS) { if(bullets.size() > MAX_ICE_BULLETS-1) return false; new_bullet = new Bullet(pos, xm, dir, ICE_BULLET);