- trace.hittexture = NULL; // to make sure
- // TODO change this trace to be stopped by anything "visible" (i.e. with a drawsurface), but not stuff like weapclip
- // probably needs adding a new SUPERCONTENTS type
- trace = CL_TraceLine(org, dest, MOVE_NORMAL, NULL, SUPERCONTENTS_SOLID, collision_extendmovelength.value, true, false, NULL, true, true);
- if(trace.hittexture)
- strlcpy(texstring, trace.hittexture->name, sizeof(texstring));
+ // clear the traces as we may or may not fill them out, and mark them with an invalid fraction so we know if we did
+ memset(&svtrace, 0, sizeof(svtrace));
+ memset(&cltrace, 0, sizeof(cltrace));
+ svtrace.fraction = 2.0;
+ cltrace.fraction = 2.0;
+ // ray hits models (even animated ones) and ignores translucent materials
+ if (SVVM_prog != NULL)
+ svtrace = SV_TraceLine(org, dest, MOVE_HITMODEL, NULL, SUPERCONTENTS_SOLID, 0, MATERIALFLAGMASK_TRANSLUCENT, collision_extendmovelength.value);
+ cltrace = CL_TraceLine(org, dest, MOVE_HITMODEL, NULL, SUPERCONTENTS_SOLID, 0, MATERIALFLAGMASK_TRANSLUCENT, collision_extendmovelength.value, true, false, &hitnetentity, true, true);
+ if (cltrace.hittexture)
+ strlcpy(texstring, cltrace.hittexture->name, sizeof(texstring));