Option to not reload by weapswitch and not fallback to other weaps from the impulse
See merge request xonotic/xonotic-data.pk3dir!616
- wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
- wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
- make
- - EXPECT=538cd6a692f22150ac60d9902eddc75b
+ - EXPECT=bb534e81ce09934ceadfd952a8ecd016
- HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
| tee /dev/stderr
| grep '^:'
n.alpha = Nades_from(STAT(NADE_BONUS_TYPE, n)).m_alpha;
setmodel(fn, MDL_NADE_VIEW);
- setattachment(fn, player.(weaponentity), "");
+ //setattachment(fn, player.(weaponentity), "");
+ fn.viewmodelforclient = player;
fn.realowner = fn.owner = player;
fn.colormod = Nades_from(STAT(NADE_BONUS_TYPE, n)).m_color;
fn.colormap = player.colormap;
vector planes[MAX_CLIP_PLANES];
int _Movetype_FlyMove(entity this, float dt, bool applygravity, vector stepnormal, float stepheight) // SV_FlyMove
{
+ if(dt <= 0)
+ return 0;
+
int blocked = 0;
int i, j, numplanes = 0;
float time_left = dt, grav = 0;
vector push;
- vector primal_velocity, original_velocity, restore_velocity;
+ vector primal_velocity, original_velocity;
+ vector restore_velocity = this.velocity;
for(i = 0; i < MAX_CLIP_PLANES; ++i)
planes[i] = '0 0 0';
}
}
- original_velocity = primal_velocity = restore_velocity = this.velocity;
+ original_velocity = primal_velocity = this.velocity;
for(int bumpcount = 0;bumpcount < MAX_CLIP_PLANES;bumpcount++)
{
break;
push = this.velocity * time_left;
- _Movetype_PushEntity(this, push, true);
- if(trace_startsolid)
+ if(!_Movetype_PushEntity(this, push, true, false))
{
// we got teleported by a touch function
// let's abort the move
vector org = this.origin;
vector steppush = '0 0 1' * stepheight;
- _Movetype_PushEntity(this, steppush, true);
- if(trace_startsolid)
+ if(!_Movetype_PushEntity(this, steppush, true, false))
{
blocked |= 8;
break;
}
- _Movetype_PushEntity(this, push, true);
- if(trace_startsolid)
+ if(!_Movetype_PushEntity(this, push, true, false))
{
blocked |= 8;
break;
}
float trace2_fraction = trace_fraction;
- steppush = '0 0 1' * (org.z - this.origin_z);
- _Movetype_PushEntity(this, steppush, true);
- if(trace_startsolid)
+ steppush = vec3(0, 0, org.z - this.origin_z);
+ if(!_Movetype_PushEntity(this, steppush, true, false))
{
blocked |= 8;
break;
tracebox(this.origin, this.mins, this.maxs, end, type, this);
}
-float _Movetype_PushEntity(entity this, vector push, bool failonstartsolid) // SV_PushEntity
+bool _Movetype_PushEntity(entity this, vector push, bool failonstartsolid, bool dolink) // SV_PushEntity
{
_Movetype_PushEntityTrace(this, push);
if(trace_startsolid && failonstartsolid)
- return trace_fraction;
+ {
+ int oldtype = this.move_nomonsters;
+ this.move_nomonsters = MOVE_NOMONSTERS;
+ _Movetype_PushEntityTrace(this, push);
+ this.move_nomonsters = oldtype;
+ if(trace_startsolid)
+ return true;
+ }
this.origin = trace_endpos;
+ vector last_origin = this.origin;
+
+ if(dolink)
+ _Movetype_LinkEdict(this, true);
+
if(trace_fraction < 1)
if(this.solid >= SOLID_TRIGGER && (!IS_ONGROUND(this) || (this.groundentity != trace_ent)))
_Movetype_Impact(this, trace_ent);
- return trace_fraction;
+ return (this.origin == last_origin); // false if teleported by touch
}
void _Movetype_LinkEdict(entity this, float touch_triggers);
vector _Movetype_ClipVelocity(vector vel, vector norm, float f);
void _Movetype_PushEntityTrace(entity this, vector push);
-float _Movetype_PushEntity(entity this, vector push, float failonstartsolid);
+bool _Movetype_PushEntity(entity this, vector push, float failonstartsolid, bool dolink);
void Movetype_Physics_NoMatchTicrate(entity this, float movedt, bool isclient);
void Movetype_Physics_MatchTicrate(entity this, float tr, bool sloppy);
for (int bump = 0; bump < MAX_CLIP_PLANES && movetime > 0; ++bump)
{
vector move = this.velocity * movetime;
- _Movetype_PushEntity(this, move, true);
+ _Movetype_PushEntity(this, move, true, false);
if (wasfreed(this))
return;
if (trace_startsolid)
{
_Movetype_UnstickEntity(this);
- _Movetype_PushEntity(this, move, false);
+ _Movetype_PushEntity(this, move, false, false);
if (wasfreed(this))
return;
}
// move up
vector upmove = '0 0 1' * PHYS_STEPHEIGHT(this);
- _Movetype_PushEntity(this, upmove, true);
- if(wasfreed(this))
- return;
- if(trace_startsolid)
+ if(!_Movetype_PushEntity(this, upmove, true, true))
{
// we got teleported when upstepping... must abort the move
return;
// move down
vector downmove = '0 0 0';
downmove.z = -PHYS_STEPHEIGHT(this) + start_velocity.z * dt;
- _Movetype_PushEntity(this, downmove, true);
- if(wasfreed(this))
- return;
-
- if(trace_startsolid)
+ if(!_Movetype_PushEntity(this, downmove, true, true))
{
// we got teleported when downstepping... must abort the move
return;
if (IS_REAL_CLIENT(this))
sv_notice_join(this);
- this.move_qcphysics = false;
+ this.move_qcphysics = true;
// update physics stats (players can spawn before physics runs)
Physics_UpdateStats(this);
{
this.viewmodelforclient = this.owner;
if (IS_SPEC(client) && client.enemy == this.owner) this.viewmodelforclient = client;
- return true;
+ return false;
}
vector CL_Weapon_GetShotOrg(int wpn)
sv_gameplayfix_delayprojectiles 0
sv_gameplayfix_q2airaccelerate 1
sv_gameplayfix_stepmultipletimes 1
+sv_gameplayfix_stepdown 2
// delay for "kill" to prevent abuse
set g_balance_kill_delay 2