X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmutators%2Fmutator%2Fmultijump%2Fmultijump.qc;h=43be345c1e41f23d2a1e74583212cd1ef6dbd362;hb=692cb758fe8f25fa078bfd5885333ee031885600;hp=10214591e5e62d8a796d25309b3f245df3a99616;hpb=de98b80015b25011f5ff98a62cf8756f514330f1;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mutators/mutator/multijump/multijump.qc b/qcsrc/common/mutators/mutator/multijump/multijump.qc index 10214591e..43be345c1 100644 --- a/qcsrc/common/mutators/mutator/multijump/multijump.qc +++ b/qcsrc/common/mutators/mutator/multijump/multijump.qc @@ -1,97 +1,42 @@ #ifdef IMPLEMENTATION #ifdef SVQC - #include "../../../../server/antilag.qh" + #include #endif -#include "../../../physics.qh" +#include #if defined(SVQC) -void multijump_AddStats(); - -REGISTER_MUTATOR(multijump, cvar("g_multijump")) -{ - MUTATOR_ONADD - { - multijump_AddStats(); - } - return false; -} +REGISTER_MUTATOR(multijump, cvar("g_multijump")); #elif defined(CSQC) REGISTER_MUTATOR(multijump, true); #endif -.int multijump_count; +#define PHYS_MULTIJUMP STAT(MULTIJUMP, self) +#define PHYS_MULTIJUMP_SPEED STAT(MULTIJUMP_SPEED, self) +#define PHYS_MULTIJUMP_ADD STAT(MULTIJUMP_ADD, self) +#define PHYS_MULTIJUMP_MAXSPEED STAT(MULTIJUMP_MAXSPEED, self) +#define PHYS_MULTIJUMP_DODGING STAT(MULTIJUMP_DODGING, self) +#define PHYS_MULTIJUMP_COUNT(s) STAT(MULTIJUMP_COUNT, s) + .bool multijump_ready; -.bool cvar_cl_multijump; #ifdef CSQC +bool autocvar_cl_multijump = false; -#define PHYS_MULTIJUMP getstati(STAT_MULTIJUMP) -#define PHYS_MULTIJUMP_SPEED getstatf(STAT_MULTIJUMP_SPEED) -#define PHYS_MULTIJUMP_ADD getstati(STAT_MULTIJUMP_ADD) -#define PHYS_MULTIJUMP_MAXSPEED getstatf(STAT_MULTIJUMP_MAXSPEED) -#define PHYS_MULTIJUMP_DODGING getstati(STAT_MULTIJUMP_DODGING) - + #define PHYS_MULTIJUMP_CLIENT(s) autocvar_cl_multijump #elif defined(SVQC) +.bool cvar_cl_multijump; -int autocvar_g_multijump; -float autocvar_g_multijump_add; -float autocvar_g_multijump_speed; -float autocvar_g_multijump_maxspeed; -float autocvar_g_multijump_dodging = 1; - -#define PHYS_MULTIJUMP autocvar_g_multijump -#define PHYS_MULTIJUMP_SPEED autocvar_g_multijump_speed -#define PHYS_MULTIJUMP_ADD autocvar_g_multijump_add -#define PHYS_MULTIJUMP_MAXSPEED autocvar_g_multijump_maxspeed -#define PHYS_MULTIJUMP_DODGING autocvar_g_multijump_dodging - -.float stat_multijump; -.float stat_multijump_speed; -.float stat_multijump_add; -.float stat_multijump_maxspeed; -.float stat_multijump_dodging; - -void multijump_UpdateStats(entity this) -{ - this.stat_multijump = PHYS_MULTIJUMP; - this.stat_multijump_speed = PHYS_MULTIJUMP_SPEED; - this.stat_multijump_add = PHYS_MULTIJUMP_ADD; - this.stat_multijump_maxspeed = PHYS_MULTIJUMP_MAXSPEED; - this.stat_multijump_dodging = PHYS_MULTIJUMP_DODGING; -} - -void multijump_AddStats() -{ - addstat(STAT_MULTIJUMP, AS_INT, stat_multijump); - addstat(STAT_MULTIJUMP_SPEED, AS_FLOAT, stat_multijump_speed); - addstat(STAT_MULTIJUMP_ADD, AS_INT, stat_multijump_add); - addstat(STAT_MULTIJUMP_MAXSPEED, AS_FLOAT, stat_multijump_maxspeed); - addstat(STAT_MULTIJUMP_DODGING, AS_INT, stat_multijump_dodging); -} - + #define PHYS_MULTIJUMP_CLIENT(s) (s).cvar_cl_multijump #endif -void PM_multijump(entity this) -{ - if(!PHYS_MULTIJUMP) { return; } - - if(IS_ONGROUND(this)) - this.multijump_count = 0; -} - bool PM_multijump_checkjump(entity this) { if(!PHYS_MULTIJUMP) { return false; } -#ifdef SVQC - bool client_multijump = this.cvar_cl_multijump; -#elif defined(CSQC) - bool client_multijump = cvar("cl_multijump"); - - if(cvar("cl_multijump") > 1) + int client_multijump = PHYS_MULTIJUMP_CLIENT(this); + if(client_multijump > 1) return false; // nope -#endif if (!IS_JUMP_HELD(this) && !IS_ONGROUND(this) && client_multijump) // jump button pressed this frame and we are in midair this.multijump_ready = true; // this is necessary to check that we released the jump button and pressed it again @@ -100,17 +45,13 @@ bool PM_multijump_checkjump(entity this) int phys_multijump = PHYS_MULTIJUMP; -#ifdef CSQC - phys_multijump = (PHYS_MULTIJUMP) ? -1 : 0; -#endif - - if(!player_multijump && this.multijump_ready && (this.multijump_count < phys_multijump || phys_multijump == -1) && this.velocity_z > PHYS_MULTIJUMP_SPEED && (!PHYS_MULTIJUMP_MAXSPEED || vlen(this.velocity) <= PHYS_MULTIJUMP_MAXSPEED)) + if(!player_multijump && this.multijump_ready && (PHYS_MULTIJUMP_COUNT(this) < phys_multijump || phys_multijump == -1) && this.velocity_z > PHYS_MULTIJUMP_SPEED && (!PHYS_MULTIJUMP_MAXSPEED || vlen(this.velocity) <= PHYS_MULTIJUMP_MAXSPEED)) { if (PHYS_MULTIJUMP) { if (!PHYS_MULTIJUMP_ADD) // in this case we make the z velocity == jumpvelocity { - if (this.velocity_z < PHYS_JUMPVELOCITY) + if (this.velocity_z < PHYS_JUMPVELOCITY(this)) { player_multijump = true; this.velocity_z = 0; @@ -158,10 +99,13 @@ bool PM_multijump_checkjump(entity this) MUTATOR_HOOKFUNCTION(multijump, PlayerPhysics) { -#ifdef SVQC - multijump_UpdateStats(self); +#ifdef CSQC + self.multijump_count = PHYS_MULTIJUMP_COUNT(self); #endif - PM_multijump(self); + if(!PHYS_MULTIJUMP) { return; } + + if(IS_ONGROUND(self)) + self.multijump_count = 0; return false; }