From 821b1cb4e9c12726a43a685fe592f1b2ff9e2a9e Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Tue, 18 May 2004 16:43:37 +0000 Subject: [PATCH] fixed butt jump to work even when up-key is not pressed, added a little jump after breaking a brick. The thing still has problems with breaking the correct fix, as the used position is not the actual one, but the target position for the next frame, so you can break some bricks that aren't reachable normally SVN-Revision: 1251 --- src/player.cpp | 53 ++++++++++++++++++++++------------------------------- src/world.cpp | 7 ++++++- src/world.h | 2 +- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/src/player.cpp b/src/player.cpp index e0fd00397..e522782f4 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -390,32 +390,27 @@ void Player::handle_vertical_input() { // Press jump key - if(input.up == DOWN && can_jump) + if(input.up == DOWN && can_jump && on_ground()) { - if (on_ground()) - { - // jump higher if we are running - if (fabs(physic.get_velocity_x()) > MAX_WALK_XM) - physic.set_velocity_y(5.8); - else - physic.set_velocity_y(5.2); + // jump higher if we are running + if (fabs(physic.get_velocity_x()) > MAX_WALK_XM) + physic.set_velocity_y(5.8); + else + physic.set_velocity_y(5.2); - --base.y; - jumping = true; - can_jump = false; - if (size == SMALL) - play_sound(sounds[SND_JUMP], SOUND_CENTER_SPEAKER); - else - play_sound(sounds[SND_BIGJUMP], SOUND_CENTER_SPEAKER); - } + --base.y; + jumping = true; + can_jump = false; + if (size == SMALL) + play_sound(sounds[SND_JUMP], SOUND_CENTER_SPEAKER); + else + play_sound(sounds[SND_BIGJUMP], SOUND_CENTER_SPEAKER); } // Let go of jump key - else if(input.up == UP && jumping) + else if(input.up == UP && jumping && physic.get_velocity_y() > 0) { jumping = false; - if(physic.get_velocity_y() > 0) { - physic.set_velocity_y(0); - } + physic.set_velocity_y(0); } if (input.down == DOWN && !on_ground() && !duck) @@ -424,15 +419,15 @@ Player::handle_vertical_input() butt_jump = false; if (input.down == DOWN && butt_jump && on_ground()) { - if (isbrick(base.x, base.y + base.height)) - World::current()->trybreakbrick(base.x, base.y + base.height, false); - if (isbrick(base.x + base.width, base.y + base.height)) - World::current()->trybreakbrick(base.x + base.width, base.y + base.height, false); - + if(World::current()->trybreakbrick(base.x, base.y + base.height, false) + || World::current()->trybreakbrick( + base.x + base.width, base.y + base.height, false)) { + // make tux jumping a little bit again after breaking the bricks + physic.set_velocity_y(2); + } butt_jump = false; } - if ( (issolid(base.x + base.width / 2, base.y + base.height + 64) || issolid(base.x + 1, base.y + base.height + 64) || issolid(base.x + base.width - 1, base.y + base.height + 64)) @@ -457,13 +452,9 @@ Player::handle_input() if (on_ground() && input.up == UP) can_jump = true; - if (input.up == DOWN || (input.up == UP && jumping)) - { - handle_vertical_input(); - } + handle_vertical_input(); /* Shoot! */ - if (input.fire == DOWN && input.old_fire == UP && got_power != NONE_POWER) { World::current()->add_bullet(base.x, base.y, physic.get_velocity_x(), dir); diff --git a/src/world.cpp b/src/world.cpp index f0dbf04cb..2eca737b5 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -643,7 +643,7 @@ World::get_music_type() } /* Break a brick: */ -void +bool World::trybreakbrick(float x, float y, bool small) { Level* plevel = get_level(); @@ -677,6 +677,7 @@ World::trybreakbrick(float x, float y, bool small) play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); player_status.score = player_status.score + SCORE_DISTRO; player_status.distros++; + return true; } else if (!small) { @@ -691,8 +692,12 @@ World::trybreakbrick(float x, float y, bool small) /* Get some score: */ play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER); player_status.score = player_status.score + SCORE_BRICK; + + return true; } } + + return false; } /* Empty a box: */ diff --git a/src/world.h b/src/world.h index b2ce9c7bb..168059a64 100644 --- a/src/world.h +++ b/src/world.h @@ -111,7 +111,7 @@ public: void trygrabdistro(float x, float y, int bounciness); /** Try to break the brick at the given coordinates */ - void trybreakbrick(float x, float y, bool small); + bool trybreakbrick(float x, float y, bool small); /** Try to get the content out of a bonus box, thus emptying it */ void tryemptybox(float x, float y, Direction col_side); -- 2.11.0