X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fphysics%2Fplayer.qc;h=91073a88e48bd79e0b949120b38857e1243d8e9b;hp=5dce802a0461681336a592736bcad9a5248efd8c;hb=7840c370615d4f2210b9d20fc35c586c8808a2f6;hpb=28e15b0c98e4fabee5de164dd09d331335fa3038 diff --git a/qcsrc/common/physics/player.qc b/qcsrc/common/physics/player.qc index 5dce802a04..91073a88e4 100644 --- a/qcsrc/common/physics/player.qc +++ b/qcsrc/common/physics/player.qc @@ -40,7 +40,7 @@ void Physics_UpdateStats(entity this) STAT(MOVEVARS_HIGHSPEED, this) = autocvar_g_movement_highspeed; MUTATOR_CALLHOOK(PlayerPhysics_UpdateStats, this); - float maxspd_mod = PHYS_HIGHSPEED(this); + float maxspd_mod = PHYS_HIGHSPEED(this) * ((this.swampslug.active) ? this.swampslug.swamp_slowdown : 1); STAT(MOVEVARS_MAXSPEED, this) = Physics_ClientOption(this, "maxspeed", autocvar_sv_maxspeed) * maxspd_mod; // also slow walking if (autocvar_g_movement_highspeed_q3_compat) { STAT(MOVEVARS_AIRACCEL_QW, this) = Physics_ClientOption(this, "airaccel_qw", autocvar_sv_airaccel_qw); @@ -163,11 +163,8 @@ void PM_ClientMovement_UpdateStatus(entity this) setsize(this, STAT(PL_MIN, this), STAT(PL_MAX, this)); } } -#ifdef CSQC - if (IS_ONGROUND(this) || this.velocity.z <= 0 || PHYS_WATERJUMP_TIME(this) <= 0) - PHYS_WATERJUMP_TIME(this) = 0; -#endif + _Movetype_CheckWater(this); // needs to be run on the client, might as well use the latest on the server too! } void CPM_PM_Aircontrol(entity this, float dt, vector wishdir, float wishspeed) @@ -453,11 +450,6 @@ void CheckWaterJump(entity this) this.velocity_z = 225; this.flags |= FL_WATERJUMP; SET_JUMP_HELD(this); - #ifdef SVQC - PHYS_TELEPORT_TIME(this) = time + 2; // safety net - #elif defined(CSQC) - PHYS_WATERJUMP_TIME(this) = 2; - #endif } } } @@ -616,27 +608,15 @@ void PM_check_frozen(entity this) { if (!PHYS_FROZEN(this)) return; - if (PHYS_DODGING_FROZEN(this) -#ifdef SVQC - && IS_REAL_CLIENT(this) -#endif - ) + if (PHYS_DODGING_FROZEN(this) && IS_CLIENT(this)) { - PHYS_CS(this).movement_x = bound(-5, PHYS_CS(this).movement.x, 5); - PHYS_CS(this).movement_y = bound(-5, PHYS_CS(this).movement.y, 5); - PHYS_CS(this).movement_z = bound(-5, PHYS_CS(this).movement.z, 5); + // bind movement to a very slow speed so dodging can use .movement for directional calculations + PHYS_CS(this).movement_x = bound(-2, PHYS_CS(this).movement.x, 2); + PHYS_CS(this).movement_y = bound(-2, PHYS_CS(this).movement.y, 2); + PHYS_CS(this).movement_z = bound(-2, PHYS_CS(this).movement.z, 2); } else PHYS_CS(this).movement = '0 0 0'; - - vector midpoint = ((this.absmin + this.absmax) * 0.5); - if (pointcontents(midpoint) == CONTENT_WATER) - { - this.velocity = this.velocity * 0.5; - - if (pointcontents(midpoint + '0 0 16') == CONTENT_WATER) - this.velocity_z = 200; - } } void PM_check_hitground(entity this)