From 0aea326dcaeb30e0a32d27c6c59aed0b60606cf4 Mon Sep 17 00:00:00 2001 From: Magnus Auvinen Date: Sun, 9 Dec 2007 09:48:53 +0000 Subject: added double jump --- src/game/game.cpp | 25 +++++++++++++++++++------ src/game/game_protocol.h | 4 +++- 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'src/game') diff --git a/src/game/game.cpp b/src/game/game.cpp index 45ced41b..4969a0f8 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -136,17 +136,29 @@ void player_core::tick() MACRO_CHECK_VELOCITY // handle jumping + // 1 bit = to keep track if a jump has been made on this input + // 2 bit = to keep track if a air-jump has been made + if(grounded) + jumped &= ~2; + if(input.jump) { - if(!jumped && grounded) + if(!(jumped&1)) { - //create_sound(pos, SOUND_PLAYER_JUMP); - vel.y = -ground_jump_speed; - jumped++; + if(grounded) + { + vel.y = -ground_jump_speed; + jumped |= 1; + } + else if(!(jumped&2)) + { + vel.y = -ground_air_speed; + jumped |= 3; + } } } else - jumped = 0; + jumped &= ~1; MACRO_CHECK_VELOCITY @@ -322,6 +334,7 @@ void player_core::write(obj_player_core *obj_core) obj_core->hook_dx = (int)(hook_dir.x*256.0f); obj_core->hook_dy = (int)(hook_dir.y*256.0f); obj_core->hooked_player = hooked_player; + obj_core->jumped = jumped; float a = 0; if(input.target_x == 0) @@ -347,7 +360,7 @@ void player_core::read(const obj_player_core *obj_core) hook_dir.x = obj_core->hook_dx/256.0f; hook_dir.y = obj_core->hook_dy/256.0f; hooked_player = obj_core->hooked_player; - jumped = 0; + jumped = obj_core->jumped; } void player_core::quantize() diff --git a/src/game/game_protocol.h b/src/game/game_protocol.h index 5e536bba..b89eb239 100644 --- a/src/game/game_protocol.h +++ b/src/game/game_protocol.h @@ -5,7 +5,8 @@ const float ground_control_speed = 7.0f; const float ground_control_accel = 2.0f; const float ground_friction = 0.5f; -const float ground_jump_speed = 13.5f; +const float ground_jump_speed = 12.6f; +const float ground_air_speed = 11.5f; const float air_control_speed = 5.0f; const float air_control_accel = 1.5f; const float air_friction = 0.95f; @@ -174,6 +175,7 @@ struct obj_player_core int x, y; int vx, vy; int angle; + int jumped; int hooked_player; int hook_state; -- cgit 1.4.1