]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/ecs/systems/physics.qc
Allow admins to change the announcer and CTF flag models without affecting purity
[xonotic/xonotic-data.pk3dir.git] / qcsrc / ecs / systems / physics.qc
index a5af98d2ce9ac5ce8ee5a5d2c9abffa10f35da95..1155c09f274c3e122b0f118fba293adcefc33fff 100644 (file)
@@ -33,7 +33,12 @@ void sys_phys_update(entity this, float dt)
        if (IS_SVQC) {
                if (this.move_movetype == MOVETYPE_NONE) { return; }
                // when we get here, disableclientprediction cannot be 2
-               this.disableclientprediction = (this.move_qcphysics) ? -1 : 0;
+               if(this.move_movetype == MOVETYPE_FOLLOW) // not compatible with prediction
+                       this.disableclientprediction = 1;
+               else if(this.move_qcphysics)
+                       this.disableclientprediction = -1;
+               else
+                       this.disableclientprediction = 0;
        }
 
        viewloc_PlayerPhysics(this);
@@ -42,7 +47,7 @@ void sys_phys_update(entity this, float dt)
 
        PM_check_blocked(this);
 
-       float maxspeed_mod = (!this.in_swamp) ? 1 : this.swamp_slowdown;  // cvar("g_balance_swamp_moverate");
+       float maxspeed_mod = 1;
 
 // conveyors: first fix velocity
        if (this.conveyor.active) { this.velocity -= this.conveyor.movedir; }
@@ -85,13 +90,8 @@ void sys_phys_update(entity this, float dt)
        if (this.flags & FL_WATERJUMP) {
                this.velocity_x = this.movedir.x;
                this.velocity_y = this.movedir.y;
-               if (this.waterlevel == WATERLEVEL_NONE
-                   || time > PHYS_TELEPORT_TIME(this)
-                   || PHYS_WATERJUMP_TIME(this) <= 0
-                  ) {
+               if (this.waterlevel == WATERLEVEL_NONE) {
                        this.flags &= ~FL_WATERJUMP;
-                       PHYS_TELEPORT_TIME(this) = 0;
-                       PHYS_WATERJUMP_TIME(this) = 0;
                }
        } else if (MUTATOR_CALLHOOK(PM_Physics, this, maxspeed_mod, dt)) {
                // handled
@@ -126,7 +126,7 @@ void sys_phys_update(entity this, float dt)
                this.com_phys_gravity = '0 0 0';
        } else if (ITEMS_STAT(this) & IT_USING_JETPACK) {
                PM_jetpack(this, maxspeed_mod, dt);
-       } else if (IS_ONGROUND(this)) {
+       } else if (IS_ONGROUND(this) && (!IS_ONSLICK(this) || !PHYS_SLICK_APPLYGRAVITY(this))) {
                if (!WAS_ONGROUND(this)) {
                        emit(phys_land, this);
                        if (this.lastground < time - 0.3) {
@@ -191,7 +191,7 @@ void sys_phys_simulate(entity this, float dt)
        if (this.com_phys_water) {
                // water jump only in certain situations
                // this mimics quakeworld code
-               if (this.com_in_jump && this.waterlevel == WATERLEVEL_SWIMMING && this.velocity_z >= -180 && !this.viewloc) {
+               if (this.com_in_jump && this.waterlevel == WATERLEVEL_SWIMMING && this.velocity_z >= -180 && !this.viewloc && !PHYS_FROZEN(this)) {
                        vector yawangles = '0 1 0' * this.v_angle.y;
                        vector forward, right, up;
                        MAKE_VECTORS(yawangles, forward, right, up);
@@ -217,7 +217,7 @@ void sys_phys_simulate(entity this, float dt)
        vector wishvel = forward * PHYS_CS(this).movement.x
            + right * PHYS_CS(this).movement.y
            + '0 0 1' * PHYS_CS(this).movement.z * (this.com_phys_vel_2d ? 0 : 1);
-       if (this.com_phys_water) {
+       if (this.com_phys_water && !PHYS_FROZEN(this)) {
                if (PHYS_INPUT_BUTTON_CROUCH(this)) {
                        wishvel.z = -PHYS_MAXSPEED(this);
                }
@@ -256,8 +256,7 @@ void sys_phys_simulate(entity this, float dt)
        float wishspeed = min(vlen(wishvel), this.com_phys_vel_max);
 
        if (this.com_phys_air) {
-               if ((IS_SVQC && time >= PHYS_TELEPORT_TIME(this))
-                   ||  (IS_CSQC && PHYS_WATERJUMP_TIME(this) <= 0)) {
+               if (!(this.flags & FL_WATERJUMP)) {
                        // apply air speed limit
                        float airaccelqw = PHYS_AIRACCEL_QW(this);
                        float wishspeed0 = wishspeed;
@@ -318,7 +317,7 @@ void sys_phys_simulate(entity this, float dt)
                if (this.com_phys_water) {
                        wishspeed *= 0.7;
 
-                       //      if (PHYS_WATERJUMP_TIME(this) <= 0) // TODO: use
+                       //      if (!(this.flags & FL_WATERJUMP)) // TODO: use
                        {
                                // water friction
                                float f = 1 - dt * PHYS_FRICTION(this);
@@ -332,7 +331,7 @@ void sys_phys_simulate(entity this, float dt)
                                }
 
                                // holding jump button swims upward slowly
-                               if (this.com_in_jump && !this.viewloc) {
+                               if (this.com_in_jump && !this.viewloc && !PHYS_FROZEN(this)) {
                                        // was:
                                        // lava: 50
                                        // slime: 80
@@ -402,7 +401,7 @@ void sys_phys_simulate(entity this, float dt)
                        return;
                }
 
-               if (IS_CSQC ? PHYS_WATERJUMP_TIME(this) <= 0 : time >= PHYS_TELEPORT_TIME(this)) {
+               if (!(this.flags & FL_WATERJUMP)) {
                        PM_Accelerate(this, dt, wishdir, wishspeed, wishspeed, this.com_phys_acc_rate, 1, 0, 0, 0);
                }
        }