return;
}
+ /* COLLISION_NORMAL */
switch (c_object)
{
case CO_BULLET:
case CO_BADGUY:
pbad_c = (BadGuy*) p_c_object;
+
+ /* If we're a kicked mriceblock, kill any badguys we hit */
if(kind == BAD_LAPTOP && mode == KICK &&
pbad_c->kind != BAD_FLAME && pbad_c->kind != BAD_BOMB)
{
- /* We're in kick mode, kill the other guy
- and yourself(wuahaha) : */
pbad_c->kill_me();
- kill_me();
}
/* Kill badguys that run into exploding bomb */
{
pbad_c->kill_me();
}
+
+ /* When enemies run into eachother, make them change directions */
+ else
+ {
+ // Jumpy is an exception
+ if (pbad_c->kind == BAD_MONEY)
+ break;
+ if (dir == LEFT)
+ dir = RIGHT;
+ else if (dir == RIGHT)
+ dir = LEFT;
+
+ physic.inverse_velocity_x();
+ }
break;
+
+ case CO_PLAYER:
+ Player* player = static_cast<Player*>(p_c_object);
+ /* Get kicked if were flat */
+ if (mode == FLAT && !dying)
+ {
+ play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER);
+
+ // Hit from left side
+ if (player->base.x < base.x) {
+ physic.set_velocity(5, physic.get_velocity_y());
+ dir = RIGHT;
+ }
+ // Hit from right side
+ else {
+ physic.set_velocity(-5, physic.get_velocity_y());
+ dir = LEFT;
+ }
+
+ mode = KICK;
+ set_sprite(img_laptop_flat_left, img_laptop_flat_right, 1);
+ }
+ break;
+
}
}
{
case CO_BADGUY:
pbad_c = (BadGuy*) p_c_object;
- /* Hurt the player if he just touched it: */
+ /* Hurt player if he touches a badguy */
if (!pbad_c->dying && !dying &&
!safe_timer.started() &&
pbad_c->mode != HELD)
pbad_c->mode = HELD;
pbad_c->base.y-=8;
}
+ else if (pbad_c->mode == FLAT)
+ {
+ // Don't get hurt if we're kicking a flat badguy!
+ }
else if (pbad_c->mode == KICK)
{
- if (base.y < pbad_c->base.y - 16)
+ /* Hurt if you get hit by kicked laptop: */
+ if (!invincible_timer.started())
{
- /* Step on (stop being kicked) */
-
- pbad_c->mode = FLAT;
- play_sound(sounds[SND_STOMP], SOUND_CENTER_SPEAKER);
+ kill(SHRINK);
}
else
{
- /* Hurt if you get hit by kicked laptop: */
- if (!invincible_timer.started())
- {
- kill(SHRINK);
- }
- else
- {
- pbad_c->dying = DYING_FALLING;
- play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
- World::current()->add_score(pbad_c->base.x - scroll_x,
- pbad_c->base.y,
- 25 * player_status.score_multiplier);
- }
+ pbad_c->dying = DYING_FALLING;
+ play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
+ World::current()->add_score(pbad_c->base.x - scroll_x,
+ pbad_c->base.y,
+ 25 * player_status.score_multiplier);
}
}
else
else
{
tux.collision(&bad_guys[i], CO_BADGUY);
+ bad_guys[i].collision(&tux, CO_PLAYER, COLLISION_NORMAL);
}
}
}