X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_physics.qc;h=83b2abd4f708afca64ecdf29a76604680312a671;hp=70e702505cd2d5d9c482d968552b8f377619e4b9;hb=992529cda6e328df91113b580eae2f1b3ef0cdfd;hpb=af161ee97e193b82c3de4da4a98bfa214b6d7e34 diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index 70e702505c..83b2abd4f7 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -33,6 +33,10 @@ float sv_airspeedlimit_nonqw; .float wasFlying; .float spectatorspeed; +.float multijump_count; +.float multijump_delay; +.float multijump_ready; + /* ============= PlayerJump @@ -66,9 +70,33 @@ void PlayerJump (void) return; } - if (!doublejump) - if (!(self.flags & FL_ONGROUND)) - return; + if (cvar("g_multijump")) + { + if ((self.flags & FL_JUMPRELEASED) && !(self.flags & FL_ONGROUND)) + self.multijump_ready = TRUE; // this is necessary to check that we released the jump button and pressed it again + else if (self.flags & FL_ONGROUND) + { + if (cvar("g_multijump") > 0) + self.multijump_count = 0; + else + self.multijump_count = -2; // the cvar value for infinite jumps is -1, so this needs to be smaller + self.multijump_ready = FALSE; + } + } + + if(self.multijump_ready && time > self.multijump_delay && self.multijump_count < cvar("g_multijump") && self.velocity_z > cvar("g_multijump_speed")) + { + if (cvar("g_multijump") > 0) + { + if (cvar("g_multijump_add") == 0) // in this case we make the z velocity == jumpvelocity + self.velocity_z = 0; + self.multijump_count += 1; + } + self.multijump_ready = FALSE; // require releasing and pressing the jump button again for the next jump + } + else if (!doublejump) + if (!(self.flags & FL_ONGROUND)) + return; if(!sv_pogostick) if (!(self.flags & FL_JUMPRELEASED)) @@ -147,6 +175,9 @@ void PlayerJump (void) self.flags &~= FL_ONGROUND; self.flags &~= FL_JUMPRELEASED; + if (cvar("g_multijump")) + self.multijump_delay = time + cvar("g_multijump_delay"); + if (self.crouch) setanim(self, self.anim_duckjump, FALSE, TRUE, TRUE); else