int allsolid;
// if true, the initial point was in solid (see hitsupercontentsmask)
int startsolid;
+ // this is set to true in world.c if startsolid was set in a trace against a SOLID_BSP entity, in other words this is true if the entity is stuck in a door or wall, but not if stuck in another normal entity
+ int bmodelstartsolid;
// if true, the trace passed through empty somewhere
// (set only by Q1BSP tracing)
int inopen;
trace = SV_PushEntity (ent, move);
if (ent->priv.server->free)
return;
- if (trace.startsolid)
+ if (trace.bmodelstartsolid)
{
// try to unstick the entity
SV_UnstickEntity(ent);
// clip to world
cliptrace = SV_ClipMoveToWorld(clipstart, clipmins, clipmaxs, clipend, type, hitsupercontentsmask);
+ cliptrace.startsolid = cliptrace.bmodelstartsolid;
if (cliptrace.startsolid || cliptrace.fraction < 1)
cliptrace.ent = prog->edicts;
if (type == MOVE_WORLDONLY)
cliptrace.allsolid = true;
if (trace.startsolid)
{
+ if (touch->fields.server->solid == SOLID_BSP)
+ cliptrace.bmodelstartsolid = true;
cliptrace.startsolid = true;
if (cliptrace.realfraction == 1)
cliptrace.ent = touch;
// clip to world
cliptrace = CSSV_ClipMoveToEntity(prog->edicts, clipstart, clipmins, clipmaxs, clipend, type, hitsupercontentsmask);
+ cliptrace.bmodelstartsolid = cliptrace.startsolid;
if (cliptrace.startsolid || cliptrace.fraction < 1)
cliptrace.ent = prog->edicts;
if (type == MOVE_WORLDONLY)
cliptrace.allsolid = true;
if (trace.startsolid)
{
+ if (touch->fields.client->solid == SOLID_BSP)
+ cliptrace.bmodelstartsolid = true;
cliptrace.startsolid = true;
if (cliptrace.realfraction == 1)
cliptrace.ent = touch;