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=05f8676f26a7cd45450d45c2b251f867acb34248;hb=992529cda6e328df91113b580eae2f1b3ef0cdfd;hpb=15af05c40b8443f0f6da1991a83c1f7b12ece258;ds=sidebyside diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index 05f8676f2..83b2abd4f 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 @@ -1205,7 +1236,13 @@ void SV_PlayerPhysics() // CPM if(sv_airstopaccelerate) - airaccel = airaccel + (sv_airstopaccelerate*maxspd_mod - airaccel) * max(0, -(normalize(self.velocity) * wishdir)); + { + vector curdir; + curdir = self.velocity; + curdir_z = 0; + curdir = normalize(curdir); + airaccel = airaccel + (sv_airstopaccelerate*maxspd_mod - airaccel) * max(0, -(curdir * wishdir)); + } // note that for straight forward jumping: // step = accel * frametime * wishspeed0; // accel = bound(0, wishspeed - vel_xy_current, step) * accelqw + step * (1 - accelqw);