X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fphysics%2Fplayer.qc;h=acef8c97ad183273d5e944e5c119838bc4d6eb54;hb=3fc2359b7933352424af07db8f84cbb9342e934f;hp=2f4ebb1ff002c9c37278901d70a4838bb0e043e1;hpb=5453f53da1df88742c11c71e4dc5b9c3e3d24c62;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/physics/player.qc b/qcsrc/common/physics/player.qc index 2f4ebb1ff..acef8c97a 100644 --- a/qcsrc/common/physics/player.qc +++ b/qcsrc/common/physics/player.qc @@ -10,19 +10,23 @@ // client side physics bool Physics_Valid(string thecvar) { - return autocvar_g_physics_clientselect && thecvar != "" && thecvar && thecvar != "default" && strhasword(autocvar_g_physics_clientselect_options, thecvar); + return thecvar != "" && thecvar && thecvar != "default" && strhasword(autocvar_g_physics_clientselect_options, thecvar); } float Physics_ClientOption(entity this, string option, float defaultval) { + if(!autocvar_g_physics_clientselect) + return defaultval; + if(IS_REAL_CLIENT(this) && Physics_Valid(CS(this).cvar_cl_physics)) { string s = strcat("g_physics_", CS(this).cvar_cl_physics, "_", option); if(cvar_type(s) & CVAR_TYPEFLAG_EXISTS) return cvar(s); } - if(autocvar_g_physics_clientselect && autocvar_g_physics_clientselect_default && autocvar_g_physics_clientselect_default != "") + if(autocvar_g_physics_clientselect_default && autocvar_g_physics_clientselect_default != "" && autocvar_g_physics_clientselect_default != "default") { + // NOTE: not using Physics_Valid here, so the default can be forced to something normally unavailable string s = strcat("g_physics_", autocvar_g_physics_clientselect_default, "_", option); if(cvar_type(s) & CVAR_TYPEFLAG_EXISTS) return cvar(s); @@ -45,12 +49,13 @@ void Physics_UpdateStats(entity this) STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw) * maxspd_mod; STAT(MOVEVARS_MAXSPEED, this) = Physics_ClientOption(this, "maxspeed", autocvar_sv_maxspeed) * maxspd_mod; // also slow walking - STAT(PL_MIN, this) = autocvar_sv_player_mins; - STAT(PL_MAX, this) = autocvar_sv_player_maxs; - STAT(PL_VIEW_OFS, this) = autocvar_sv_player_viewoffset; - STAT(PL_CROUCH_MIN, this) = autocvar_sv_player_crouch_mins; - STAT(PL_CROUCH_MAX, this) = autocvar_sv_player_crouch_maxs; - STAT(PL_CROUCH_VIEW_OFS, this) = autocvar_sv_player_crouch_viewoffset; + bool vq3compat = autocvar_sv_vq3compat && autocvar_sv_vq3compat_changehitbox; // NOTE: these hitboxes are off by 1 due to engine differences + STAT(PL_MIN, this) = (vq3compat) ? '-15 -15 -24' : autocvar_sv_player_mins; + STAT(PL_MAX, this) = (vq3compat) ? '15 15 32' : autocvar_sv_player_maxs; + STAT(PL_VIEW_OFS, this) = (vq3compat) ? '0 0 26' : autocvar_sv_player_viewoffset; + STAT(PL_CROUCH_MIN, this) = (vq3compat) ? '-15 -15 -24' : autocvar_sv_player_crouch_mins; + STAT(PL_CROUCH_MAX, this) = (vq3compat) ? '15 15 16' : autocvar_sv_player_crouch_maxs; + STAT(PL_CROUCH_VIEW_OFS, this) = (vq3compat) ? '0 0 12' : autocvar_sv_player_crouch_viewoffset; // old stats // fix some new settings @@ -119,13 +124,15 @@ void PM_ClientMovement_UpdateStatus(entity this) } } bool do_crouch = PHYS_INPUT_BUTTON_CROUCH(this); + if(this.viewloc && !(this.viewloc.spawnflags & VIEWLOC_FREEMOVE) && PHYS_CS(this).movement.x < 0) + do_crouch = true; if (have_hook) { do_crouch = false; //} else if (this.waterlevel >= WATERLEVEL_SWIMMING) { //do_crouch = false; } else if (PHYS_INVEHICLE(this)) { do_crouch = false; - } else if (STAT(FROZEN, this)) { + } else if (STAT(FROZEN, this) || IS_DEAD(this)) { do_crouch = false; } @@ -792,7 +799,7 @@ void PM_jetpack(entity this, float maxspd_mod, float dt) #ifdef SVQC if (!(ITEMS_STAT(this) & IT_UNLIMITED_WEAPON_AMMO)) - TakeResource(this, RESOURCE_FUEL, PHYS_JETPACK_FUEL(this) * dt * fvel * f); + TakeResource(this, RES_FUEL, PHYS_JETPACK_FUEL(this) * dt * fvel * f); ITEMS_STAT(this) |= IT_USING_JETPACK; @@ -809,7 +816,8 @@ bool IsFlying(entity this) return false; if(this.waterlevel >= WATERLEVEL_SWIMMING) return false; - traceline(this.origin, this.origin - '0 0 48', MOVE_NORMAL, this); + tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 24', MOVE_NORMAL, this); + //traceline(this.origin, this.origin - '0 0 48', MOVE_NORMAL, this); if(trace_fraction < 1) return false; return true;