Garry's Mod Wiki


  table ENTITY:TestCollision( Vector startpos, Vector delta, boolean isbox, Vector extents, number mask )


Allows you to override trace result when a trace hits the entitys Bounding Box.

Your entity must have Entity:EnableCustomCollisions enabled for this hook to work.
This hook is called for anim type only.


1 Vector startpos
Start position of the trace.
2 Vector delta
Offset from startpos to the endpos of the trace.
3 boolean isbox
Is the trace a hull trace?
4 Vector extents
Size of the hull trace?
5 number mask
The CONTENTS enum mask.


1 table
Returning a table will allow you to override trace results. Table should contain the following keys, all optional:
  • Vector HitPos - The new hitpos of the trace.
  • number Fraction - A number from 0 to 1, describing how far the trace went from its origin point, 1 = did not hit.
  • Vector Normal - A unit vector (length=1) describing the direction perpendicular to the hit surface.

Returning true will allow "normal" collisions to happen for SOLID_VPHYSICS and SOLID_BBOX entities.
Returning nothing or false allows the trace to ignore the entity completely.


Example taken from lua/entities/widget_base.lua

function ENT:TestCollision( startpos, delta, isbox, extents ) if ( isbox ) then return end if ( !widgets.Tracing ) then return end -- TODO. Actually trace against our cube! return { HitPos = self:GetPos(), Fraction = 0.5 * self:GetPriority() } end


Allows players to shoot through the entity, but still stand on it and use the Physics Gun on it, etc.

local sent_contents = CONTENTS_GRATE function ENT:TestCollision( startpos, delta, isbox, extents, mask ) if mask, sent_contents ) ~= 0 then return true end end