VectorCopy (traceendpos, ent->fields.server->origin);
if (relink)
- SV_LinkEdict (ent, true);
+ {
+ SV_LinkEdict(ent);
+ SV_LinkEdict_TouchAreaGrid(ent);
+ }
return true;
}
{
VectorAdd (ent->fields.server->origin, move, ent->fields.server->origin);
if (relink)
- SV_LinkEdict (ent, true);
+ {
+ SV_LinkEdict(ent);
+ SV_LinkEdict_TouchAreaGrid(ent);
+ }
ent->fields.server->flags = (int)ent->fields.server->flags & ~FL_ONGROUND;
return true;
}
{ // entity had floor mostly pulled out from underneath it
// and is trying to correct
if (relink)
- SV_LinkEdict (ent, true);
+ {
+ SV_LinkEdict(ent);
+ SV_LinkEdict_TouchAreaGrid(ent);
+ }
return true;
}
VectorCopy (oldorg, ent->fields.server->origin);
if ( (int)ent->fields.server->flags & FL_PARTIALGROUND )
ent->fields.server->flags = (int)ent->fields.server->flags & ~FL_PARTIALGROUND;
+// gameplayfix: check if reached pretty steep plane and bail
+ if ( ! ( (int)ent->fields.server->flags & (FL_SWIM | FL_FLY) ) && sv_gameplayfix_nostepmoveonsteepslopes.integer )
+ {
+ if (trace.plane.normal[ 2 ] < 0.5)
+ {
+ VectorCopy (oldorg, ent->fields.server->origin);
+ return false;
+ }
+ }
+
ent->fields.server->groundentity = PRVM_EDICT_TO_PROG(trace.ent);
// the move is ok
if (relink)
- SV_LinkEdict (ent, true);
+ {
+ SV_LinkEdict(ent);
+ SV_LinkEdict_TouchAreaGrid(ent);
+ }
return true;
}
{ // not turned far enough, so don't take the step
VectorCopy (oldorigin, ent->fields.server->origin);
}
- SV_LinkEdict (ent, true);
+ SV_LinkEdict(ent);
+ SV_LinkEdict_TouchAreaGrid(ent);
return true;
}
- SV_LinkEdict (ent, true);
+ SV_LinkEdict(ent);
+ SV_LinkEdict_TouchAreaGrid(ent);
return false;
}