From 919d46f4dc58a127596d4b8a6b29409fcbf128b9 Mon Sep 17 00:00:00 2001 From: Ricardo Cruz Date: Sun, 18 Apr 2004 11:09:55 +0000 Subject: [PATCH] =?utf8?q?Patch=20by=20Ryan:=20=EF=BF=BD=20Here's=20a=20pa?= =?utf8?q?tch=20that=20makes=20a=20few=20changes=20that=20makes=20ST=20mor?= =?utf8?q?e=20like=20SMB.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Changes include: * Kicked mriceblocks (laptops) don't die after hitting a single enemy, they keep going to kill more badguys (or Tux if you're not careful) * You can now kick mriceblocks (laptops) by running into their sides. Before you had to jump on them to "kick" them and if you walked into their sides you would die (or shrink). * When badguys walk into one another they turn around instead of walking through eachother. � SVN-Revision: 550 --- src/badguy.cpp | 44 +++++++++++++++++++++++++++++++++++++++++--- src/player.cpp | 32 +++++++++++++------------------- src/world.cpp | 1 + 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/src/badguy.cpp b/src/badguy.cpp index 2f7940530..91ca082a8 100644 --- a/src/badguy.cpp +++ b/src/badguy.cpp @@ -957,6 +957,7 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) return; } + /* COLLISION_NORMAL */ switch (c_object) { case CO_BULLET: @@ -965,13 +966,12 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) 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 */ @@ -993,8 +993,46 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) { 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(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; + } } diff --git a/src/player.cpp b/src/player.cpp index b9a61cd32..f95f16375 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -726,8 +726,8 @@ Player::collision(void* p_c_object, int c_object) { 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) @@ -737,30 +737,24 @@ Player::collision(void* p_c_object, int c_object) 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 diff --git a/src/world.cpp b/src/world.cpp index 101725332..1be985ed9 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -315,6 +315,7 @@ World::collision_handler() else { tux.collision(&bad_guys[i], CO_BADGUY); + bad_guys[i].collision(&tux, CO_PLAYER, COLLISION_NORMAL); } } } -- 2.11.0