}
void
-BadGuy::action_mriceblock(float frame_ratio)
+BadGuy::action_mriceblock(double frame_ratio)
{
Player& tux = *World::current()->get_tux();
if (dir == LEFT)
{
dir = RIGHT;
- physic.set_velocity_x(fabs(physic.get_velocity_x()));
+ physic.set_velocity_x(fabsf(physic.get_velocity_x()));
}
else
{
dir = LEFT;
- physic.set_velocity_x(-fabs(physic.get_velocity_x()));
+ physic.set_velocity_x(-fabsf(physic.get_velocity_x()));
}
}
}
}
void
-BadGuy::action_jumpy(float frame_ratio)
+BadGuy::action_jumpy(double frame_ratio)
{
- if (fabsf(physic.get_velocity_y()) < 2.5f)
+ const float vy = physic.get_velocity_y();
+
+ // XXX: These tests *should* use location from ground, not velocity
+ if (fabsf(vy) > 5.6f)
+ set_sprite(img_jumpy_left_down, img_jumpy_left_down);
+ else if (fabsf(vy) > 5.3f)
set_sprite(img_jumpy_left_middle, img_jumpy_left_middle);
- else if (physic.get_velocity_y() < 0)
+ else
set_sprite(img_jumpy_left_up, img_jumpy_left_up);
- else
- set_sprite(img_jumpy_left_down, img_jumpy_left_down);
Player& tux = *World::current()->get_tux();
}
void
-BadGuy::action_mrbomb(float frame_ratio)
+BadGuy::action_mrbomb(double frame_ratio)
{
if (dying == DYING_NOT)
check_horizontal_bump(true);
}
void
-BadGuy::action_bomb(float frame_ratio)
+BadGuy::action_bomb(double frame_ratio)
{
static const int TICKINGTIME = 1000;
static const int EXPLODETIME = 1000;
}
void
-BadGuy::action_stalactite(float frame_ratio)
+BadGuy::action_stalactite(double frame_ratio)
{
Player& tux = *World::current()->get_tux();
}
void
-BadGuy::action_flame(float frame_ratio)
+BadGuy::action_flame(double frame_ratio)
{
static const float radius = 100;
static const float speed = 0.02;
}
void
-BadGuy::action_fish(float frame_ratio)
+BadGuy::action_fish(double frame_ratio)
{
static const float JUMPV = 6;
static const int WAITTIME = 1000;
}
void
-BadGuy::action_bouncingsnowball(float frame_ratio)
+BadGuy::action_bouncingsnowball(double frame_ratio)
{
static const float JUMPV = 4.5;
}
void
-BadGuy::action_flyingsnowball(float frame_ratio)
+BadGuy::action_flyingsnowball(double frame_ratio)
{
static const float FLYINGSPEED = 1;
static const int DIRCHANGETIME = 1000;
}
void
-BadGuy::action_spiky(float frame_ratio)
+BadGuy::action_spiky(double frame_ratio)
{
if (dying == DYING_NOT)
check_horizontal_bump();
}
void
-BadGuy::action_snowball(float frame_ratio)
+BadGuy::action_snowball(double frame_ratio)
{
if (dying == DYING_NOT)
check_horizontal_bump();
}
void
-BadGuy::action(float frame_ratio)
+BadGuy::action(double frame_ratio)
{
// Remove if it's far off the screen:
if (base.x < scroll_x - OFFSCREEN_DISTANCE)
case BAD_SNOWBALL:
action_snowball(frame_ratio);
break;
+ default:
+ break;
}
}
}
Sprite* sprite = (dir == LEFT) ? sprite_left : sprite_right;
- sprite->draw(base.x - scroll_x, base.y);
+ sprite->draw(base.x, base.y);
if (debug_mode)
- fillrect(base.x - scroll_x, base.y, base.width, base.height, 75,0,75, 150);
+ fillrect(base.x - scroll_x, base.y - scroll_y, base.width, base.height, 75,0,75, 150);
}
void
{
make_player_jump(player);
- World::current()->add_score(base.x - scroll_x,
+ World::current()->add_score(base.x,
base.y, 50 * player_status.score_multiplier);
play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER);
player_status.score_multiplier++;
World::current()->add_bad_guy(base.x, base.y, BAD_BOMB);
make_player_jump(player);
- World::current()->add_score(base.x - scroll_x, base.y, 50 * player_status.score_multiplier);
+ World::current()->add_score(base.x, base.y, 50 * player_status.score_multiplier);
play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER);
player_status.score_multiplier++;
remove_me();
make_player_jump(player);
- World::current()->add_score(base.x - scroll_x, base.y, 25 * player_status.score_multiplier);
+ World::current()->add_score(base.x, base.y, 25 * player_status.score_multiplier);
player_status.score_multiplier++;
// simply remove the fish...
physic.enable_gravity(true);
/* Gain some points: */
- World::current()->add_score(base.x - scroll_x, base.y,
+ World::current()->add_score(base.x, base.y,
score * player_status.score_multiplier);
/* Play death sound: */
play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
}
+void BadGuy::explode(BadGuy *badguy)
+{
+World::current()->add_bad_guy(badguy->base.x, badguy->base.y, BAD_BOMB);
+badguy->remove_me();
+}
+
void
BadGuy::collision(void *p_c_object, int c_object, CollisionType type)
{
if (pbad_c->kind == BAD_MRBOMB)
{
// mrbomb transforms into a bomb now
- World::current()->add_bad_guy(pbad_c->base.x, pbad_c->base.y,
- BAD_BOMB);
- pbad_c->remove_me();
+ explode(pbad_c);
return;
}
else if (pbad_c->kind != BAD_MRBOMB)
/* Kill any badguys that get hit by stalactite */
else if (kind == BAD_STALACTITE && dying == DYING_NOT)
{
- pbad_c->kill_me(50);
+ if (pbad_c->kind == BAD_MRBOMB)
+ {
+ // mrbomb transforms into a bomb now
+ explode(pbad_c);
+ return;
+ }
+ else
+ pbad_c->kill_me(50);
}
/* When enemies run into eachother, make them change directions */
if (pbad_c->dir == LEFT)
{
dir = RIGHT;
- physic.set_velocity(fabs(physic.get_velocity_x()), 2);
+ physic.set_velocity(fabsf(physic.get_velocity_x()), 2);
}
else if (pbad_c->dir == RIGHT)
{
dir = LEFT;
- physic.set_velocity(-fabs(physic.get_velocity_x()), 2);
+ physic.set_velocity(-fabsf(physic.get_velocity_x()), 2);
}
if (dir == LEFT)
{
dir = RIGHT;
- physic.set_velocity_x(fabs(physic.get_velocity_x()));
+ physic.set_velocity_x(fabsf(physic.get_velocity_x()));
}
else if (dir == RIGHT)
{
dir = LEFT;
- physic.set_velocity_x(-fabs(physic.get_velocity_x()));
+ physic.set_velocity_x(-fabsf(physic.get_velocity_x()));
}
}
}
}
+
//---------------------------------------------------------------------------
void load_badguy_gfx()