10#define PHYS_WALLJUMP(s) STAT(WALLJUMP, s)
11#define PHYS_WALLJUMP_VELOCITY_Z_FACTOR(s) STAT(WALLJUMP_VELOCITY_Z_FACTOR, s)
12#define PHYS_WALLJUMP_VELOCITY_XY_FACTOR(s) STAT(WALLJUMP_VELOCITY_XY_FACTOR, s)
13#define PHYS_WALLJUMP_DELAY(s) STAT(WALLJUMP_DELAY, s)
14#define PHYS_WALLJUMP_FORCE(s) STAT(WALLJUMP_FORCE, s)
18#define TRACE(newvec) \
19 tracebox (start, this.mins, this.maxs, (newvec), true, this); \
20 if (trace_fraction < 1 && vdist(this.origin - trace_endpos, <, dist) && trace_plane_normal_z < max_normal) \
21 if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) \
22 return trace_plane_normal;
24 float dist = 10, max_normal = 0.2, scaler = 100;
26 vector forward, right, _up;
28 TRACE(start + forward * scaler)
29 TRACE(start - forward * scaler)
30 TRACE(start + right * scaler)
31 TRACE(start - right * scaler)
50 if(plane_normal !=
'0 0 0')
55 player.velocity_x += plane_normal_x * wj_force;
56 player.velocity_x /= wj_xy_factor;
57 player.velocity_y += plane_normal_y * wj_force;
58 player.velocity_y /= wj_xy_factor;
64 player.oldvelocity = player.velocity;
81 PAR(_(
"%s is a mutator that enables jumping off walls for added mobility. "
82 "To do a wall jump, tap %s when against a wall."),
COLORED_NAME(
this),
strcat(
"^3", _(
"jump"),
"^7"));
83 PAR(_(
"This mutator adds a bit of versatility, allowing for more dynamic and unpredictable movement."));
void animdecide_setaction(entity e, float action, float restart)
const int ANIMACTION_JUMP
#define REGISTER_MUTATOR(...)
#define MUTATOR_HOOKFUNCTION(...)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define COLORED_NAME(this)
bool PlayerJump(entity this)
#define PHYS_INPUT_BUTTON_CROUCH(s)
#define PHYS_JUMPVELOCITY(s)
#define MAKE_VECTORS(angles, forward, right, up)
Same as the makevectors builtin but uses the provided locals instead of the v_* globals.
void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt)
#define PlayerSound(this, def, chan, vol, voicetype)
const int VOICETYPE_PLAYERSOUND
const int MOVETYPE_FOLLOW
const int MOVETYPE_NOCLIP
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
#define METHOD(cname, name, prototype)
bool StatusEffects_active(StatusEffect this, entity actor)
#define PAR(...)
Adds an individually translatable paragraph to PAGE_TEXT without having to deal with strcat and sprin...
#define PHYS_WALLJUMP_FORCE(s)
vector PlayerTouchWall(entity this)
#define PHYS_WALLJUMP_VELOCITY_Z_FACTOR(s)
#define PHYS_WALLJUMP_DELAY(s)
#define PHYS_WALLJUMP_VELOCITY_XY_FACTOR(s)