]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/walljump/walljump.qc
take3: format 903 files
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / walljump / walljump.qc
index c462a7e2b7c869398e733019a107f69049d16472..c633f385b803b7d5c79b393e6b0ca92ef50b0bcc 100644 (file)
@@ -7,19 +7,21 @@ REGISTER_MUTATOR(walljump, true);
 REGISTER_MUTATOR(walljump, autocvar_g_walljump);
 #endif
 
-#define PHYS_WALLJUMP(s)                                               STAT(WALLJUMP, s)
-#define PHYS_WALLJUMP_VELOCITY_Z_FACTOR(s)             STAT(WALLJUMP_VELOCITY_Z_FACTOR, s)
-#define PHYS_WALLJUMP_VELOCITY_XY_FACTOR(s)    STAT(WALLJUMP_VELOCITY_XY_FACTOR, s)
-#define PHYS_WALLJUMP_DELAY(s)                                         STAT(WALLJUMP_DELAY, s)
-#define PHYS_WALLJUMP_FORCE(s)                                         STAT(WALLJUMP_FORCE, s)
+#define PHYS_WALLJUMP(s) STAT(WALLJUMP, s)
+#define PHYS_WALLJUMP_VELOCITY_Z_FACTOR(s) STAT(WALLJUMP_VELOCITY_Z_FACTOR, s)
+#define PHYS_WALLJUMP_VELOCITY_XY_FACTOR(s) STAT(WALLJUMP_VELOCITY_XY_FACTOR, s)
+#define PHYS_WALLJUMP_DELAY(s) STAT(WALLJUMP_DELAY, s)
+#define PHYS_WALLJUMP_FORCE(s) STAT(WALLJUMP_FORCE, s)
 
 vector PlayerTouchWall(entity this)
 {
 #define TRACE(newvec) \
-       tracebox (start, this.mins, this.maxs, (newvec), true, this); \
-       if (trace_fraction < 1 && vdist(this.origin - trace_endpos, <, dist) && trace_plane_normal_z < max_normal) \
-       if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) \
-               return trace_plane_normal;
+       tracebox(start, this.mins, this.maxs, (newvec), true, this); \
+       if (trace_fraction < 1 && vdist(this.origin - trace_endpos, <, dist) && trace_plane_normal_z < max_normal) { \
+               if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) { \
+                       return trace_plane_normal; \
+               } \
+       }
 
        float dist = 10, max_normal = 0.2, scaler = 100;
        vector start = this.origin;
@@ -35,37 +37,41 @@ MUTATOR_HOOKFUNCTION(walljump, PlayerJump)
 {
        entity player = M_ARGV(0, entity);
 
-       if(PHYS_WALLJUMP(player))
-       if(time - STAT(LASTWJ, player) > PHYS_WALLJUMP_DELAY(player)) // can't do this on client, as it's too stupid to obey counters
-       if(!IS_ONGROUND(player))
-       if(player.move_movetype != MOVETYPE_NONE && player.move_movetype != MOVETYPE_FOLLOW && player.move_movetype != MOVETYPE_FLY && player.move_movetype != MOVETYPE_NOCLIP)
-       if(!IS_JUMP_HELD(player))
-       if(!STAT(FROZEN, player))
-       if(!IS_DEAD(player))
-       {
-               vector plane_normal = PlayerTouchWall(player);
+       if (PHYS_WALLJUMP(player)) {
+               if (time - STAT(LASTWJ, player) > PHYS_WALLJUMP_DELAY(player)) { // can't do this on client, as it's too stupid to obey counters
+                       if (!IS_ONGROUND(player)) {
+                               if (player.move_movetype != MOVETYPE_NONE && player.move_movetype != MOVETYPE_FOLLOW && player.move_movetype != MOVETYPE_FLY && player.move_movetype != MOVETYPE_NOCLIP) {
+                                       if (!IS_JUMP_HELD(player)) {
+                                               if (!STAT(FROZEN, player)) {
+                                                       if (!IS_DEAD(player)) {
+                                                               vector plane_normal = PlayerTouchWall(player);
 
-               if(plane_normal != '0 0 0')
-               {
-                       float wj_force = PHYS_WALLJUMP_FORCE(player);
-                       float wj_xy_factor = PHYS_WALLJUMP_VELOCITY_XY_FACTOR(player);
-                       float wj_z_factor = PHYS_WALLJUMP_VELOCITY_Z_FACTOR(player);
-                       player.velocity_x += plane_normal_x * wj_force;
-                       player.velocity_x /= wj_xy_factor;
-                       player.velocity_y += plane_normal_y * wj_force;
-                       player.velocity_y /= wj_xy_factor;
-                       player.velocity_z = PHYS_JUMPVELOCITY(player) * wj_z_factor;
-                       if(PHYS_INPUT_BUTTON_CROUCH(player)) player.velocity_z *= -1;
+                                                               if (plane_normal != '0 0 0') {
+                                                                       float wj_force = PHYS_WALLJUMP_FORCE(player);
+                                                                       float wj_xy_factor = PHYS_WALLJUMP_VELOCITY_XY_FACTOR(player);
+                                                                       float wj_z_factor = PHYS_WALLJUMP_VELOCITY_Z_FACTOR(player);
+                                                                       player.velocity_x += plane_normal_x * wj_force;
+                                                                       player.velocity_x /= wj_xy_factor;
+                                                                       player.velocity_y += plane_normal_y * wj_force;
+                                                                       player.velocity_y /= wj_xy_factor;
+                                                                       player.velocity_z = PHYS_JUMPVELOCITY(player) * wj_z_factor;
+                                                                       if (PHYS_INPUT_BUTTON_CROUCH(player)) { player.velocity_z *= -1; }
 
 #ifdef SVQC
-                       STAT(LASTWJ, player) = time;
-                       player.oldvelocity = player.velocity;
-                       Send_Effect(EFFECT_SMOKE_RING, trace_endpos, plane_normal, 5);
-                       PlayerSound(player, playersound_jump, CH_PLAYER, VOL_BASE, VOICETYPE_PLAYERSOUND);
-                       animdecide_setaction(player, ANIMACTION_JUMP, true);
+                                                                       STAT(LASTWJ, player) = time;
+                                                                       player.oldvelocity = player.velocity;
+                                                                       Send_Effect(EFFECT_SMOKE_RING, trace_endpos, plane_normal, 5);
+                                                                       PlayerSound(player, playersound_jump, CH_PLAYER, VOL_BASE, VOICETYPE_PLAYERSOUND);
+                                                                       animdecide_setaction(player, ANIMACTION_JUMP, true);
 #endif
 
-                       M_ARGV(2, bool) = true; // multijump
+                                                                       M_ARGV(2, bool) = true; // multijump
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
                }
        }
 }