X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fphysics.qc;h=a49f79df833d9d1652cae099adada98937d134a7;hb=c741e6b3f012aa525f23e1df30d1d933b383fbc5;hp=b3db77143b375f4bdb315e22a1a3c0d057aecd38;hpb=18302817d7f0cb0ba74398200da5e400ffc1b9a4;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/physics.qc b/qcsrc/common/physics.qc index b3db77143..a49f79df8 100644 --- a/qcsrc/common/physics.qc +++ b/qcsrc/common/physics.qc @@ -1,6 +1,5 @@ #include "physics.qh" -#include "triggers/trigger/swamp.qh" -#include "triggers/trigger/jumppads.qh" +#include "triggers/include.qh" #include "viewloc.qh" #ifdef SVQC @@ -11,29 +10,22 @@ // client side physics bool Physics_Valid(string thecvar) { - if(!autocvar_g_physics_clientselect) { return false; } - - string l = strcat(" ", autocvar_g_physics_clientselect_options, " "); - - if(strstrofs(l, strcat(" ", thecvar, " "), 0) >= 0) - return true; - - return false; + return autocvar_g_physics_clientselect && strhasword(autocvar_g_physics_clientselect_options, thecvar); } float Physics_ClientOption(entity pl, string option) { if(Physics_Valid(pl.cvar_cl_physics)) { - string var = sprintf("g_physics_%s_%s", pl.cvar_cl_physics, option); - if(cvar_type(var) & CVAR_TYPEFLAG_EXISTS) - return cvar(var); + string s = sprintf("g_physics_%s_%s", pl.cvar_cl_physics, option); + if(cvar_type(s) & CVAR_TYPEFLAG_EXISTS) + return cvar(s); } if(autocvar_g_physics_clientselect && autocvar_g_physics_clientselect_default) { - string var = sprintf("g_physics_%s_%s", autocvar_g_physics_clientselect_default, option); - if(cvar_type(var) & CVAR_TYPEFLAG_EXISTS) - return cvar(var); + string s = sprintf("g_physics_%s_%s", autocvar_g_physics_clientselect_default, option); + if(cvar_type(s) & CVAR_TYPEFLAG_EXISTS) + return cvar(s); } return cvar(strcat("sv_", option)); } @@ -78,7 +70,8 @@ void Physics_AddStats() addstat(STAT_JETPACK_MAXSPEED_SIDE, AS_FLOAT, stat_jetpack_maxspeed_side); // hack to fix track_canjump - addstat(STAT_MOVEVARS_TRACK_CANJUMP, AS_INT, cvar_cl_movement_track_canjump); + addstat(STAT_MOVEVARS_CL_TRACK_CANJUMP, AS_INT, cvar_cl_movement_track_canjump); + addstat(STAT_MOVEVARS_TRACK_CANJUMP, AS_INT, stat_sv_track_canjump); // double jump addstat(STAT_DOUBLEJUMP, AS_INT, stat_doublejump); @@ -175,6 +168,8 @@ void Physics_UpdateStats(float maxspd_mod) self.stat_sv_airstopaccelerate = Physics_ClientOption(self, "airstopaccelerate"); self.stat_sv_jumpvelocity = Physics_ClientOption(self, "jumpvelocity"); + self.stat_sv_track_canjump = Physics_ClientOption(self, "track_canjump"); + self.stat_gameplayfix_upvelocityclearsonground = UPWARD_VELOCITY_CLEARS_ONGROUND; } #endif @@ -540,7 +535,7 @@ When you press the jump key returns true if handled ============= */ -bool PlayerJump (void) +bool PlayerJump () {SELFPARAM(); if (PHYS_FROZEN(self)) return true; // no jumping in freezetag when frozen @@ -591,7 +586,11 @@ bool PlayerJump (void) if (!IS_ONGROUND(self)) return IS_JUMP_HELD(self); - if (PHYS_TRACK_CANJUMP(self)) + bool track_jump = PHYS_CL_TRACK_CANJUMP(self); + if(PHYS_TRACK_CANJUMP(self)) + track_jump = true; + + if (track_jump) if (IS_JUMP_HELD(self)) return true; @@ -976,17 +975,6 @@ void SpecialCommand() #endif } -void PM_check_race_movetime(void) -{SELFPARAM(); -#ifdef SVQC - self.race_movetime_frac += PHYS_INPUT_TIMELENGTH; - float f = floor(self.race_movetime_frac); - self.race_movetime_frac -= f; - self.race_movetime_count += f; - self.race_movetime = self.race_movetime_frac + self.race_movetime_count; -#endif -} - float PM_check_specialcommand(float buttons) {SELFPARAM(); #ifdef SVQC @@ -1024,7 +1012,7 @@ float PM_check_specialcommand(float buttons) return false; } -void PM_check_nickspam(void) +void PM_check_nickspam() {SELFPARAM(); #ifdef SVQC if (time >= self.nickspamtime) @@ -1069,7 +1057,7 @@ void PM_check_punch() #endif } -void PM_check_spider(void) +void PM_check_spider() {SELFPARAM(); #ifdef SVQC if (time >= self.spider_slowness) @@ -1082,7 +1070,7 @@ void PM_check_spider(void) } // predict frozen movement, as frozen players CAN move in some cases -void PM_check_frozen(void) +void PM_check_frozen() {SELFPARAM(); if (!PHYS_FROZEN(self)) return; @@ -1127,16 +1115,16 @@ void PM_check_hitground() if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)) { if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS) - GlobalSound(globalsound_metalfall, CH_PLAYER, VOICETYPE_PLAYERSOUND); + GlobalSound(GS_FALL_METAL, CH_PLAYER, VOICETYPE_PLAYERSOUND); else - GlobalSound(globalsound_fall, CH_PLAYER, VOICETYPE_PLAYERSOUND); + GlobalSound(GS_FALL, CH_PLAYER, VOICETYPE_PLAYERSOUND); } } } #endif } -void PM_check_blocked(void) +void PM_check_blocked() {SELFPARAM(); #ifdef SVQC if (!self.player_blocked) @@ -1146,41 +1134,7 @@ void PM_check_blocked(void) #endif } -#ifdef SVQC -float speedaward_lastsent; -float speedaward_lastupdate; -#endif -void PM_check_race(void) -{SELFPARAM(); -#ifdef SVQC - if(!(g_cts || g_race)) - return; - if (vlen(self.velocity - self.velocity_z * '0 0 1') > speedaward_speed) - { - speedaward_speed = vlen(self.velocity - self.velocity_z * '0 0 1'); - speedaward_holder = self.netname; - speedaward_uid = self.crypto_idfp; - speedaward_lastupdate = time; - } - if (speedaward_speed > speedaward_lastsent && time - speedaward_lastupdate > 1) - { - string rr = (g_cts) ? CTS_RECORD : RACE_RECORD; - race_send_speedaward(MSG_ALL); - speedaward_lastsent = speedaward_speed; - if (speedaward_speed > speedaward_alltimebest && speedaward_uid != "") - { - speedaward_alltimebest = speedaward_speed; - speedaward_alltimebest_holder = speedaward_holder; - speedaward_alltimebest_uid = speedaward_uid; - db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed"), ftos(speedaward_alltimebest)); - db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp"), speedaward_alltimebest_uid); - race_send_speedaward_alltimebest(MSG_ALL); - } - } -#endif -} - -void PM_check_vortex(void) +void PM_check_vortex() {SELFPARAM(); #ifdef SVQC // WEAPONTODO @@ -1676,7 +1630,6 @@ void PM_Main() return; #endif - PM_check_race_movetime(); #ifdef SVQC anticheat_physics(); #endif @@ -1709,17 +1662,7 @@ void PM_Main() if (IS_PLAYER(self)) #endif { -#ifdef SVQC - if (self.race_penalty) - if (time > self.race_penalty) - self.race_penalty = 0; -#endif - bool not_allowed_to_move = false; -#ifdef SVQC - if (self.race_penalty) - not_allowed_to_move = true; -#endif #ifdef SVQC if (time < game_starttime) not_allowed_to_move = true; @@ -1876,7 +1819,7 @@ void PM_Main() RaceCarPhysics(); #endif - else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS_STAT(self) & BUFF_FLIGHT.m_itemid)) + else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || MUTATOR_CALLHOOK(IsFlying, self)) PM_fly(maxspeed_mod); else if (self.waterlevel >= WATERLEVEL_SWIMMING) @@ -1894,10 +1837,6 @@ void PM_Main() else PM_air(buttons_prev, maxspeed_mod); -#ifdef SVQC - if (!IS_OBSERVER(self)) - PM_check_race(); -#endif PM_check_vortex(); :end @@ -1919,9 +1858,9 @@ void PM_Main() } #ifdef SVQC -void SV_PlayerPhysics(void) +void SV_PlayerPhysics() #elif defined(CSQC) -void CSQC_ClientMovement_PlayerMove_Frame(void) +void CSQC_ClientMovement_PlayerMove_Frame() #endif {SELFPARAM(); PM_Main();