: 0;
STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw) * maxspd_mod;
}
- bool q3dfcompat = autocvar_sv_q3defragcompat && autocvar_sv_q3defragcompat_changehitbox; // NOTE: these hitboxes are off by 1 due to engine differences
- STAT(PL_MIN, this) = (q3dfcompat) ? '-15 -15 -20' : autocvar_sv_player_mins;
- STAT(PL_MAX, this) = (q3dfcompat) ? '15 15 36' : autocvar_sv_player_maxs;
- STAT(PL_VIEW_OFS, this) = (q3dfcompat) ? '0 0 26' : autocvar_sv_player_viewoffset;
- STAT(PL_CROUCH_MIN, this) = (q3dfcompat) ? '-15 -15 -20' : autocvar_sv_player_crouch_mins;
- STAT(PL_CROUCH_MAX, this) = (q3dfcompat) ? '15 15 20' : autocvar_sv_player_crouch_maxs;
- STAT(PL_CROUCH_VIEW_OFS, this) = (q3dfcompat) ? '0 0 12' : autocvar_sv_player_crouch_viewoffset;
+ bool q3hb = q3compat && autocvar_sv_q3compat_changehitbox; // NOTE: these hitboxes are off by 1 due to engine differences
+ STAT(PL_MIN, this) = (q3hb) ? '-15 -15 -20' : autocvar_sv_player_mins;
+ STAT(PL_MAX, this) = (q3hb) ? '15 15 36' : autocvar_sv_player_maxs;
+ STAT(PL_VIEW_OFS, this) = (q3hb) ? '0 0 30' : autocvar_sv_player_viewoffset;
+ STAT(PL_CROUCH_MIN, this) = (q3hb) ? '-15 -15 -20' : autocvar_sv_player_crouch_mins;
+ STAT(PL_CROUCH_MAX, this) = (q3hb) ? '15 15 20' : autocvar_sv_player_crouch_maxs;
+ STAT(PL_CROUCH_VIEW_OFS, this) = (q3hb) ? '0 0 16' : autocvar_sv_player_crouch_viewoffset;
// old stats
// fix some new settings
if (PHYS_FROZEN(this))
return true; // no jumping in freezetag when frozen
+ if(PHYS_INPUT_BUTTON_CHAT(this) || PHYS_INPUT_BUTTON_MINIGAME(this))
+ return true; // no jumping while typing
+
#ifdef SVQC
if (this.player_blocked)
return true; // no jumping while blocked
bool playerjump = PlayerJump(this); // required
bool air_jump = !playerjump || M_ARGV(2, bool);
- bool activate = JETPACK_JUMP(this) && air_jump && PHYS_INPUT_BUTTON_JUMP(this) || PHYS_INPUT_BUTTON_JETPACK(this);
+ bool activate = (JETPACK_JUMP(this) && air_jump && PHYS_INPUT_BUTTON_JUMP(this)) || PHYS_INPUT_BUTTON_JETPACK(this);
bool has_fuel = !PHYS_JETPACK_FUEL(this) || PHYS_AMMO_FUEL(this) || (ITEMS_STAT(this) & IT_UNLIMITED_AMMO);
if (!(ITEMS_STAT(this) & ITEM_Jetpack.m_itemid)) { }
{
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)
void PM_check_blocked(entity this)
{
+ if(PHYS_INPUT_BUTTON_CHAT(this) || PHYS_INPUT_BUTTON_MINIGAME(this))
+ PHYS_CS(this).movement = '0 0 0';
#ifdef SVQC
if (!this.player_blocked)
return;