- wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints\r
- wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache\r
\r
- - EXPECT=757e5413dab5085242502ca47740b83c\r
+ - EXPECT=4c834aa9b5950ffe25deec1880f21641\r
- HASH=$(${ENGINE} +timestamps 1 +exec serverbench.cfg\r
| tee /dev/stderr\r
| sed -e 's,^\[[^]]*\] ,,'\r
return 0;
int blockedflag = 0;
- int i, j, numplanes = 0;
+ int numplanes = 0;
float time_left = dt, grav = 0;
vector push;
vector primal_velocity, original_velocity;
vector restore_velocity = this.velocity;
- for(i = 0; i < MAX_CLIP_PLANES; ++i)
- planes[i] = '0 0 0';
+ for(int j = 0; j < MAX_CLIP_PLANES; ++j)
+ planes[j] = '0 0 0';
if(applygravity)
{
break;
push = this.velocity * time_left;
- if(!_Movetype_PushEntity(this, push, true, false))
+ if(!_Movetype_PushEntity(this, push, false))
{
// we got teleported by a touch function
// let's abort the move
{
// step - handle it immediately
vector org = this.origin;
- vector steppush = '0 0 1' * stepheight;
+ vector steppush = vec3(0, 0, stepheight);
push = this.velocity * time_left;
- if(!_Movetype_PushEntity(this, steppush, true, false))
+ if(!_Movetype_PushEntity(this, steppush, false))
{
blockedflag |= 8;
break;
}
- if(!_Movetype_PushEntity(this, push, true, false))
+ if(!_Movetype_PushEntity(this, push, false))
{
blockedflag |= 8;
break;
}
float trace2_fraction = trace_fraction;
steppush = vec3(0, 0, org.z - this.origin_z);
- if(!_Movetype_PushEntity(this, steppush, true, false))
+ if(!_Movetype_PushEntity(this, steppush, false))
{
blockedflag |= 8;
break;
// modify original_velocity so it parallels all of the clip planes
vector new_velocity = '0 0 0';
- for (i = 0;i < numplanes;i++)
+ int plane;
+ for (plane = 0;plane < numplanes;plane++)
{
- new_velocity = _Movetype_ClipVelocity(original_velocity, planes[i], 1);
- for (j = 0;j < numplanes;j++)
+ int newplane;
+ new_velocity = _Movetype_ClipVelocity(original_velocity, planes[plane], 1);
+ for (newplane = 0;newplane < numplanes;newplane++)
{
- if(j != i)
+ if(newplane != plane)
{
// not ok
- if((new_velocity * planes[j]) < 0)
+ if((new_velocity * planes[newplane]) < 0)
break;
}
}
- if(j == numplanes)
+ if(newplane == numplanes)
break;
}
- if(i != numplanes)
+ if(plane != numplanes)
{
// go along this plane
this.velocity = new_velocity;
}
vector dir = cross(planes[0], planes[1]);
// LordHavoc: thanks to taniwha of QuakeForge for pointing out this fix for slowed falling in corners
- float ilength = sqrt((dir * dir));
- if(ilength)
- ilength = 1.0 / ilength;
- dir.x *= ilength;
- dir.y *= ilength;
- dir.z *= ilength;
+ dir = normalize(dir);
float d = (dir * this.velocity);
this.velocity = dir * d;
}
tracebox(this.origin, this.mins, this.maxs, end, type, this);
}
-bool _Movetype_PushEntity(entity this, vector push, bool failonstartsolid, bool dolink) // SV_PushEntity
+bool _Movetype_PushEntity(entity this, vector push, bool dolink) // SV_PushEntity
{
_Movetype_PushEntityTrace(this, push);
// NOTE: this is a workaround for the QC's lack of a worldstartsolid trace parameter
- if(trace_startsolid && failonstartsolid)
+ if(trace_startsolid)
{
int oldtype = this.move_nomonsters;
this.move_nomonsters = MOVE_WORLDONLY;
void _Movetype_LinkEdict(entity this, float touch_triggers);
vector _Movetype_ClipVelocity(vector vel, vector norm, float f);
void _Movetype_PushEntityTrace(entity this, vector push);
-bool _Movetype_PushEntity(entity this, vector push, float failonstartsolid, bool dolink);
+bool _Movetype_PushEntity(entity this, vector push, bool dolink);
void Movetype_Physics_NoMatchTicrate(entity this, float movedt, bool isclient);
void Movetype_Physics_MatchTicrate(entity this, float tr, bool sloppy);
// try moving the contacted entity
int savesolid = this.solid;
this.solid = SOLID_NOT;
- if(!_Movetype_PushEntity(check, move, true, true))
+ if(!_Movetype_PushEntity(check, move, true))
{
// entity "check" got teleported
check.angles_y += trace_fraction * moveangle.y;
if(_Movetype_NudgeOutOfSolid_PivotIsKnownGood(check, pivot))
{
// hack to invoke all necessary movement triggers
- _Movetype_PushEntity(check, '0 0 0', true, true);
+ _Movetype_PushEntity(check, '0 0 0', true);
// we could fix it or entity "check" was telported
continue;
}
for (int bump = 0; bump < MAX_CLIP_PLANES && movetime > 0; bump++)
{
vector move = this.velocity * movetime;
- if(!_Movetype_PushEntity(this, move, true, true))
+ if(!_Movetype_PushEntity(this, move, true))
return;
if (wasfreed(this))
return;
trace_fraction = oldtrace_fraction;
trace_plane_normal = oldtrace_plane_normal;
trace_ent = oldtrace_ent;
- if(!_Movetype_PushEntity(this, move, true, true))
+ if(!_Movetype_PushEntity(this, move, true))
return;
if (wasfreed(this))
return;
vector upmove = this.origin + '0 0 1';
vector downmove = this.origin - '0 0 1';
int type;
- if (this.move_movetype == MOVETYPE_FLYMISSILE)
+ if (this.move_nomonsters)
+ type = max(0, this.move_nomonsters);
+ else if (this.move_movetype == MOVETYPE_FLYMISSILE)
type = MOVE_MISSILE;
else if (this.move_movetype == MOVETYPE_FLY_WORLDONLY)
type = MOVE_WORLDONLY;
else if (this.solid == SOLID_TRIGGER || this.solid == SOLID_NOT)
type = MOVE_NOMONSTERS;
- else type = MOVE_NORMAL;
+ else
+ type = MOVE_NORMAL;
tracebox(upmove, this.mins, this.maxs, downmove, type, this);
if (trace_fraction < 1 && trace_plane_normal.z > 0.7)
{
// move up
vector upmove = '0 0 1' * PHYS_STEPHEIGHT(this);
- if(!_Movetype_PushEntity(this, upmove, true, true))
+ if(!_Movetype_PushEntity(this, upmove, 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;
- if(!_Movetype_PushEntity(this, downmove, true, true))
+ if(!_Movetype_PushEntity(this, downmove, true))
{
// we got teleported when downstepping... must abort the move
return;
// setanim(this, this.anim_duck, false, true, true); // this anim is BROKEN anyway
}
} else if (IS_DUCKED(this)) {
- tracebox(this.origin, STAT(PL_MIN, this), STAT(PL_MAX, this), this.origin, false, this);
+ tracebox(this.origin, STAT(PL_MIN, this), STAT(PL_MAX, this), this.origin, MOVE_NORMAL, this);
if (!trace_startsolid) {
UNSET_DUCKED(this);
this.view_ofs = STAT(PL_VIEW_OFS, this);