currentmusic(LEVEL_MUSIC)
{
song_title = "chipdisko.ogg";
- player = new Player(&player_status);
+ player = new Player(player_status);
add_object(player);
#ifdef USE_GRID
}
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();
}
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<float> (r) / 255.0f;
+ bkgd_top.green = static_cast<float> (g) / 255.0f;
+ bkgd_top.blue = static_cast<float> (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<float> (r) / 255.0f;
+ bkgd_bottom.green = static_cast<float> (g) / 255.0f;
+ bkgd_bottom.blue = static_cast<float> (b) / 255.0f;
if(backgroundimage != "") {
Background* background = new Background;
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);
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
add_object(new SequenceTrigger(pos, sequence));
solids->change(x, y, 0);
}
- }
+ }
}
}
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;
}
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;
}
}
// did we collide at all?
- if(hit.time < 0)
+ if(hit.tileflags == 0)
return;
// call collision function
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);