#include <iostream>
#include <cmath>
-#include "globals.h"
+#include "app/globals.h"
#include "defines.h"
+#include "special/sprite_manager.h"
+#include "utils/lispwriter.h"
#include "badguy.h"
#include "tile.h"
#include "resources.h"
-#include "sprite_manager.h"
#include "camera.h"
-#include "lispwriter.h"
#include "level.h"
#include "sector.h"
#include "tilemap.h"
timer.init(true);
// if we're in a solid tile at start correct that now
+ if(Sector::current()) {
if(kind != BAD_FLAME && kind != BAD_FISH && collision_object_map(base))
{
std::cout << "Warning: badguy started in wall: kind: " << badguykind_to_string(kind)
--base.y;
}
- if(Sector::current() && Sector::current()->camera) {
+ if(Sector::current()->camera) {
Vector scroll = Sector::current()->camera->get_translation();
if(start_position.x > scroll.x - X_OFFSCREEN_DISTANCE &&
start_position.y < scroll.y + screen->h + Y_OFFSCREEN_DISTANCE) {
activate(LEFT);
}
- } else {
+ } } else {
if(start_position.x > 0 && start_position.x <= screen->w
&& start_position.y > 0 && start_position.y <= screen->h)
activate(LEFT);
if (mode != HELD)
{
// move
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if (dying != DYING_FALLING)
collision_swept_object_map(&old_base,&base);
}
tux.kick_timer.start(KICKING_TIME);
set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
physic.set_velocity_x((dir == LEFT) ? -3.5 : 3.5);
- sound_manager->play_sound(sounds[SND_KICK], this);
+ SoundManager::get()->play_sound(IDToSound(SND_KICK), this, Sector::current()->player->get_pos());
}
}
check_horizontal_bump();
if(mode == KICK && changed != dir)
{
- sound_manager->play_sound(sounds[SND_RICOCHET], get_pos());
+ SoundManager::get()->play_sound(IDToSound(SND_RICOCHET), get_pos(), Sector::current()->player->get_pos());
}
}
dir = LEFT;
// move
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if(dying == DYING_NOT)
collision_swept_object_map(&old_base, &base);
}
fall();
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if (dying != DYING_FALLING)
collision_swept_object_map(&old_base,&base);
}
dying = DYING_NOT; // now the bomb hurts
timer.start(EXPLODETIME);
- sound_manager->play_sound(sounds[SND_EXPLODE], this);
+ SoundManager::get()->play_sound(IDToSound(SND_EXPLODE), this, Sector::current()->player->get_pos());
} else if(mode == BOMB_EXPLODE) {
remove_me();
return;
}
// move
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
collision_swept_object_map(&old_base,&base);
}
}
// move
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if(dying == DYING_SQUISHED && !timer.check())
remove_me();
physic.enable_gravity(true);
}
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if(dying == DYING_NOT)
collision_swept_object_map(&old_base, &base);
// check for right/left collisions
check_horizontal_bump();
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if(dying == DYING_NOT)
collision_swept_object_map(&old_base, &base);
if(dying != DYING_NOT)
physic.enable_gravity(true);
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if(dying == DYING_NOT || dying == DYING_SQUISHED)
collision_swept_object_map(&old_base, &base);
}
#endif
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if (dying != DYING_FALLING)
collision_swept_object_map(&old_base,&base);
}
fall();
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if (dying != DYING_FALLING)
collision_swept_object_map(&old_base,&base);
physic.set_velocity(dirsign * WINGLING_FLY_SPEED, 0);
}
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
// Handle dying timer:
}
- physic.apply(elapsed_time, base.x, base.y);
+ physic.apply(elapsed_time, base.x, base.y, Sector::current()->gravity);
if (dying != DYING_FALLING)
collision_swept_object_map(&old_base,&base);
void
BadGuy::squish_me(Player* player)
{
- player->bounce();
+ player->bounce(this);
Sector::current()->add_score(Vector(base.x, base.y),
50 * player_status.score_multiplier);
- sound_manager->play_sound(sounds[SND_SQUISH], get_pos());
+ SoundManager::get()->play_sound(IDToSound(SND_SQUISH), get_pos(), Sector::current()->player->get_pos());
player_status.score_multiplier++;
dying = DYING_SQUISHED;
// mrbomb transforms into a bomb now
explode(false);
- player->bounce();
+ player->bounce(this);
Sector::current()->add_score(Vector(base.x, base.y),
50 * player_status.score_multiplier);
- sound_manager->play_sound(sounds[SND_SQUISH], get_pos());
+ SoundManager::get()->play_sound(IDToSound(SND_SQUISH), get_pos(), Sector::current()->player->get_pos());
player_status.score_multiplier++;
return;
if (mode == NORMAL || mode == KICK)
{
/* Flatten! */
- sound_manager->play_sound(sounds[SND_STOMP], get_pos());
+ SoundManager::get()->play_sound(IDToSound(SND_STOMP), get_pos(), Sector::current()->player->get_pos());
mode = FLAT;
set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
physic.set_velocity_x(0);
timer.start(4000);
} else if (mode == FLAT) {
/* Kick! */
- sound_manager->play_sound(sounds[SND_KICK], this);
+ SoundManager::get()->play_sound(IDToSound(SND_KICK), this, Sector::current()->player->get_pos());
if (player->base.x < base.x + (base.width/2)) {
physic.set_velocity_x(5);
set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
}
- player->bounce();
+ player->bounce(this);
player_status.score_multiplier++;
if(physic.get_velocity_y() >= 0)
return;
- player->bounce();
+ player->bounce(this);
Sector::current()->add_score(Vector(base.x, base.y),
25 * player_status.score_multiplier);
physic.set_velocity_x(physic.get_velocity_x() * 2.0f);
// XXX magic number: 66 is BGM_BIG height
- player->bounce();
+ player->bounce(this);
base.y += 66 - base.height;
Sector::current()->add_score(Vector(base.x, base.y),
score * player_status.score_multiplier);
/* Play death sound: */
- sound_manager->play_sound(sounds[SND_FALL], this);
+ SoundManager::get()->play_sound(IDToSound(SND_FALL), this, Sector::current()->player->get_pos());
}
void
dir = RIGHT;
physic.set_velocity_x(fabsf(physic.get_velocity_x()));
- // in case badguys get "jammed"
- if (physic.get_velocity_x() != 0)
- base.x = pbad_c->base.x + pbad_c->base.width;
+ // Put bad guys a part (or they get jammed)
+ // only needed to do to one of them
+ base.x = pbad_c->base.x + pbad_c->base.width + 1;
}
else if (dir == RIGHT)
{
/* Get kicked if were flat */
if (mode == FLAT && !dying)
{
- sound_manager->play_sound(sounds[SND_KICK], this);
+ SoundManager::get()->play_sound(IDToSound(SND_KICK), this, Sector::current()->player->get_pos());
// Hit from left side
if (player->base.x < base.x) {