From d29977975e0fff5644ea94df53e9d527a00a2ea3 Mon Sep 17 00:00:00 2001 From: Florian Paul Schmidt Date: Fri, 19 Mar 2010 23:56:39 +0100 Subject: [PATCH] - almost working --- defaultXonotic.cfg | 1 + qcsrc/server/mutators/mutator_dodging.qc | 53 ++++++++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 8a68ebcda..236dc0dc1 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -518,6 +518,7 @@ seta cl_dodging_timeout 0 set sv_dodging_delay 0.5 set sv_dodging_up_speed 200 set sv_dodging_horiz_speed 500 +set sv_dodging_ramp_time 0.2 set leadlimit 0 diff --git a/qcsrc/server/mutators/mutator_dodging.qc b/qcsrc/server/mutators/mutator_dodging.qc index 282ef4be2..46ca34fd8 100644 --- a/qcsrc/server/mutators/mutator_dodging.qc +++ b/qcsrc/server/mutators/mutator_dodging.qc @@ -1,22 +1,30 @@ + +// these are used to store the last key press time for each of the keys.. .float last_FORWARD_KEY_time; .float last_BACKWARD_KEY_time; .float last_LEFT_KEY_time; .float last_RIGHT_KEY_time; +// these store the movement direction at the time of the dodge action happening. +.float dodging_direction_x; +.float dodging_direction_y; + // this indicates the last time a dodge was executed. used to check if another one is allowed // and to ramp up the dodge acceleration in the physics hook. -.float last_dodge_time; +.float last_dodging_time; // set to 1 to indicate dodging has started.. reset by physics hook after dodge has been done.. -.float dodge_action; +.float dodging_action; void dodging_Initialize() { self.last_FORWARD_KEY_time = 0; self.last_BACKWARD_KEY_time = 0; self.last_RIGHT_KEY_time = 0; self.last_LEFT_KEY_time = 0; - self.last_dodge_time = 0; - self.dodge_action = 0; + self.last_dodging_time = 0; + self.dodging_action = 0; + self.dodging_direction_x = 0; + self.dodging_direction_y = 0; } MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) { @@ -24,7 +32,15 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) { if (g_dodging == 0) return 0; - + // ramp up dodging speed by adding some velocity each frame.. + if (self.dodging_action == 1) { + self.velocity = self.velocity + self.dodging_direction_y * (cvar("sv_dodging_horiz_speed") * v_right) + self.dodging_direction_x * (cvar("sv_dodging_horiz_speed") * v_forward) + (cvar("sv_dodging_up_speed") * v_up);//'100 0 50'; + self.dodging_action = 0; + } + + // are we done with the dodging ramp yet? + if((self.dodging_action == 1) && ((time - self.last_dodging_time) > cvar("sv_dodging_ramp_time"))) + self.dodging_action = 0; return 0; } @@ -41,16 +57,35 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) { if ( ((time - self.last_FORWARD_KEY_time) < self.cvar_cl_dodging_timeout) && (self.lastflags & FL_ONGROUND) && - ((time - self.last_dodge_time) > cvar("sv_dodging_delay")) + ((time - self.last_dodging_time) > cvar("sv_dodging_delay")) ) { // are we allowed to dodge? - self.dodge_action = 1; - // self.velocity = self.velocity + (cvar("sv_dodging_horiz_speed") * v_forward) + (cvar("sv_dodging_up_speed") * v_up);//'100 0 50'; - self.last_dodge_time = time; + self.dodging_action = 1; + self.dodging_direction_x = self.movement_x; + self.dodging_direction_y = self.movement_y; + + + self.last_dodging_time = time; } self.last_FORWARD_KEY_time = time; } } + if (self.movement_x < 0) // get if movement keys are pressed + { // forward key pressed + if (!(self.pressedkeys & KEY_BACKWARD)) { // is this a state change? + if ( + ((time - self.last_BACKWARD_KEY_time) < self.cvar_cl_dodging_timeout) && + (self.lastflags & FL_ONGROUND) && + ((time - self.last_dodging_time) > cvar("sv_dodging_delay")) + ) { // are we allowed to dodge? + self.dodging_action = 1; + // self.velocity = self.velocity + (cvar("sv_dodging_horiz_speed") * v_forward) + (cvar("sv_dodging_up_speed") * v_up);//'100 0 50'; + self.last_dodging_time = time; + } + self.last_BACKWARD_KEY_time = time; + } + } + return 0; } -- 2.39.2