]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/physics/player.qc
Move resurfacing (when frozen) code to sys_phys_simulate
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / physics / player.qc
index 5dce802a0461681336a592736bcad9a5248efd8c..91073a88e48bd79e0b949120b38857e1243d8e9b 100644 (file)
@@ -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)