X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fphysics%2Fplayer.qc;h=a66d828cc989c308b5b3f7f2d953e915b7116120;hp=f5c0e0316e3340bb995e04577ad9719375c063b8;hb=fde04a29ed6f249c904737ae21ff44f400f1f453;hpb=29fae4d9d59e5ec8afbdd6ef0ebcc5dcdc1bfa3f diff --git a/qcsrc/common/physics/player.qc b/qcsrc/common/physics/player.qc index f5c0e0316..a66d828cc 100644 --- a/qcsrc/common/physics/player.qc +++ b/qcsrc/common/physics/player.qc @@ -39,6 +39,13 @@ void Physics_UpdateStats(entity this, float maxspd_mod) 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; + // old stats // fix some new settings STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, this) = Physics_ClientOption(this, "airaccel_qw_stretchfactor", autocvar_sv_airaccel_qw_stretchfactor); @@ -49,6 +56,7 @@ void Physics_UpdateStats(entity this, float maxspd_mod) STAT(MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, this) = Physics_ClientOption(this, "airaccel_sideways_friction", autocvar_sv_airaccel_sideways_friction); STAT(MOVEVARS_AIRCONTROL, this) = Physics_ClientOption(this, "aircontrol", autocvar_sv_aircontrol); STAT(MOVEVARS_AIRCONTROL_POWER, this) = Physics_ClientOption(this, "aircontrol_power", autocvar_sv_aircontrol_power); + STAT(MOVEVARS_AIRCONTROL_BACKWARDS, this) = Physics_ClientOption(this, "aircontrol_backwards", autocvar_sv_aircontrol_backwards); STAT(MOVEVARS_AIRCONTROL_PENALTY, this) = Physics_ClientOption(this, "aircontrol_penalty", autocvar_sv_aircontrol_penalty); STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, this) = Physics_ClientOption(this, "warsowbunny_airforwardaccel", autocvar_sv_warsowbunny_airforwardaccel); STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, this) = Physics_ClientOption(this, "warsowbunny_topspeed", autocvar_sv_warsowbunny_topspeed); @@ -88,8 +96,15 @@ void PM_ClientMovement_UpdateStatus(entity this) // set crouched bool do_crouch = PHYS_INPUT_BUTTON_CROUCH(this); - if(this.hook && !wasfreed(this.hook)) - do_crouch = false; + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + entity wep = viewmodels[slot]; + if(wep.hook && !wasfreed(wep.hook)) + { + do_crouch = false; + break; // don't bother checking the others + } + } if(this.waterlevel >= WATERLEVEL_SWIMMING) do_crouch = false; if(hud != HUD_NORMAL) @@ -119,7 +134,11 @@ void PM_ClientMovement_UpdateStatus(entity this) void CPM_PM_Aircontrol(entity this, float dt, vector wishdir, float wishspeed) { - float k = 32 * (2 * IsMoveInDirection(this.movement, 0) - 1); + float movity = IsMoveInDirection(this.movement, 0); + if(PHYS_AIRCONTROL_BACKWARDS(this)) + movity += IsMoveInDirection(this.movement, 180); + + float k = 32 * (2 * movity - 1); if (k <= 0) return; @@ -295,7 +314,7 @@ bool PlayerJump(entity this) } if (!doublejump) - if (!IS_ONGROUND(this)) + if (!IS_ONGROUND(this) && !IS_ONSLICK(this)) return IS_JUMP_HELD(this); bool track_jump = PHYS_CL_TRACK_CANJUMP(this); @@ -332,7 +351,7 @@ bool PlayerJump(entity this) } } - if (!WAS_ONGROUND(this)) + if (!WAS_ONGROUND(this) && !WAS_ONSLICK(this)) { #ifdef SVQC if(autocvar_speedmeter) @@ -354,6 +373,7 @@ bool PlayerJump(entity this) this.velocity_z += mjumpheight; UNSET_ONGROUND(this); + UNSET_ONSLICK(this); SET_JUMP_HELD(this); #ifdef SVQC @@ -468,15 +488,15 @@ float racecar_angle(float forward, float down) return ret * angle_mult; } +#ifdef SVQC string specialcommand = "xwxwxsxsxaxdxaxdx1x "; .float specialcommand_pos; void SpecialCommand(entity this) { -#ifdef SVQC if (!CheatImpulse(this, CHIMPULSE_GIVE_ALL.impulse)) LOG_INFO("A hollow voice says \"Plugh\".\n"); -#endif } +#endif bool PM_check_specialcommand(entity this, int buttons) { @@ -595,7 +615,12 @@ void PM_check_hitground(entity this) this.wasFlying = false; if (this.waterlevel >= WATERLEVEL_SWIMMING) return; if (time < this.ladder_time) return; - if (this.hook) return; + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + if(this.(weaponentity).hook) + return; + } this.nextstep = time + 0.3 + random() * 0.1; trace_dphitq3surfaceflags = 0; tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this); @@ -629,6 +654,24 @@ void PM_Footsteps(entity this) #endif } +void PM_check_slick(entity this) +{ + if(!IS_ONGROUND(this)) + return; + + if(!PHYS_SLICK_APPLYGRAVITY(this)) + return; + + tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this); + if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK) + { + UNSET_ONGROUND(this); + SET_ONSLICK(this); + } + else + UNSET_ONSLICK(this); +} + void PM_check_blocked(entity this) { #ifdef SVQC @@ -639,8 +682,6 @@ void PM_check_blocked(entity this) #endif } -.vector oldmovement; - void PM_jetpack(entity this, float maxspd_mod, float dt) { //makevectors(this.v_angle.y * '0 1 0');