#include "physics.qh"
#include "triggers/trigger/swamp.qh"
#include "triggers/trigger/jumppads.qh"
+#include "viewloc.qh"
#ifdef SVQC
#include "../server/miscfunctions.qh"
+#include "triggers/trigger/viewloc.qh"
// client side physics
bool Physics_Valid(string thecvar)
addstat(STAT_DOUBLEJUMP, AS_INT, stat_doublejump);
// jump speed caps
- addstat(STAT_MOVEVARS_JUMPSPEEDCAP_MIN, AS_FLOAT, stat_jumpspeedcap_min);
- addstat(STAT_MOVEVARS_JUMPSPEEDCAP_MIN, AS_FLOAT, stat_jumpspeedcap_min);
addstat(STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, AS_INT, stat_jumpspeedcap_disable_onramps);
// hacks
self.stat_jetpack_maxspeed_up = PHYS_JETPACK_MAXSPEED_UP;
self.stat_jetpack_fuel = PHYS_JETPACK_FUEL;
- self.stat_jumpspeedcap_min = PHYS_JUMPSPEEDCAP_MIN;
- self.stat_jumpspeedcap_max = PHYS_JUMPSPEEDCAP_MAX;
self.stat_jumpspeedcap_disable_onramps = PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS;
self.stat_sv_friction_on_land = PHYS_FRICTION_ONLAND;
bool doublejump = false;
float mjumpheight = PHYS_JUMPVELOCITY;
- player_multijump = doublejump;
- player_jumpheight = mjumpheight;
#ifdef SVQC
- if (MUTATOR_CALLHOOK(PlayerJump))
+ if (MUTATOR_CALLHOOK(PlayerJump, doublejump, mjumpheight))
#elif defined(CSQC)
- if(PM_multijump_checkjump())
+ player_multijump = doublejump;
+ player_jumpheight = mjumpheight;
+ if (PM_multijump_checkjump())
#endif
return true;
// velocity bounds. Final velocity is bound between (jumpheight *
// min + jumpheight) and (jumpheight * max + jumpheight);
- if(PHYS_JUMPSPEEDCAP_MIN)
+ if(PHYS_JUMPSPEEDCAP_MIN != "")
{
- float minjumpspeed = mjumpheight * PHYS_JUMPSPEEDCAP_MIN;
+ float minjumpspeed = mjumpheight * stof(PHYS_JUMPSPEEDCAP_MIN);
if (self.velocity_z < minjumpspeed)
mjumpheight += minjumpspeed - self.velocity_z;
}
- if(PHYS_JUMPSPEEDCAP_MAX)
+ if(PHYS_JUMPSPEEDCAP_MAX != "")
{
// don't do jump speedcaps on ramps to preserve old xonotic ramjump style
tracebox(self.origin + '0 0 0.01', self.mins, self.maxs, self.origin - '0 0 0.01', MOVE_NORMAL, self);
if (!(trace_fraction < 1 && trace_plane_normal_z < 0.98 && PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS))
{
- float maxjumpspeed = mjumpheight * PHYS_JUMPSPEEDCAP_MAX;
+ float maxjumpspeed = mjumpheight * stof(PHYS_JUMPSPEEDCAP_MAX);
if (self.velocity_z > maxjumpspeed)
mjumpheight -= self.velocity_z - maxjumpspeed;
float activate = JETPACK_JUMP(self) && air_jump && PHYS_INPUT_BUTTON_JUMP(self) || PHYS_INPUT_BUTTON_JETPACK(self);
float has_fuel = !PHYS_JETPACK_FUEL || PHYS_AMMO_FUEL(self) || ITEMS_STAT(self) & IT_UNLIMITED_WEAPON_AMMO;
- if (!(ITEMS_STAT(self) & IT_JETPACK)) { }
+ if (!(ITEMS_STAT(self) & ITEM_Jetpack.m_itemid)) { }
else if (self.jetpack_stopped) { }
else if (!has_fuel)
{
#ifdef SVQC
// WEAPONTODO
float xyspeed = vlen(vec2(self.velocity));
- if (self.weapon == WEP_VORTEX && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed))
+ if (self.weapon == WEP_VORTEX.m_id && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed))
{
// add a maximum of charge_velocity_rate when going fast (f = 1), gradually increasing from minspeed (f = 0) to maxspeed
xyspeed = min(xyspeed, WEP_CVAR(vortex, charge_maxspeed));
self.disableclientprediction = 0;
#endif
+ viewloc_PlayerPhysics();
+
PM_check_spider();
PM_check_frozen();
stuffcmd(self, strcat("cl_sidespeed ", temps, "\n"));
stuffcmd(self, strcat("cl_upspeed ", temps, "\n"));
}
+
+ if(self.stat_jumpspeedcap_min != PHYS_JUMPSPEEDCAP_MIN)
+ {
+ self.stat_jumpspeedcap_min = PHYS_JUMPSPEEDCAP_MIN;
+ stuffcmd(self, strcat("cl_jumpspeedcap_min ", PHYS_JUMPSPEEDCAP_MIN, "\n"));
+ }
+ if(self.stat_jumpspeedcap_max != PHYS_JUMPSPEEDCAP_MAX)
+ {
+ self.stat_jumpspeedcap_min = PHYS_JUMPSPEEDCAP_MAX;
+ stuffcmd(self, strcat("cl_jumpspeedcap_max ", PHYS_JUMPSPEEDCAP_MAX, "\n"));
+ }
#endif
if(PHYS_DEAD(self))
RaceCarPhysics();
#endif
- else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS(self) & BUFF_FLIGHT))
+ else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS_STAT(self) & BUFF_FLIGHT.m_itemid))
PM_fly(maxspeed_mod);
else if (self.waterlevel >= WATERLEVEL_SWIMMING)