by Spike » Tue Nov 07, 2017 4:13 pm
tracebox doesn't normally consider the solidity of the moving entity. if its non-solid then why the hell is it trying to collide...
triggers are non-solid (or rather, one-way). they're kinda evil. don't use them for anything but triggers.
instead of move_hitmodel on the mover's traces, you can use solid_bsp on the impactee. just make sure its movetype_none otherwise things get weird (tracebox traces a box[or possibly a capsule], not complex trisoup). for hitmodel/equivelent to work you must make sure the absbox of the trisoup covers the entire thing, otherwise it might not be noticed until its too late (this may be a problem without solid_bsp, especially when things are rotated).
make sure you use setorigin and NOT directly hacking .origin. Yes, there are cases where you can directly change the origin, but without a setorigin afterwards the engine's collision structures will not be updated. so make sure you do it before control returns to the engine or another (moving) ent.
note that the engine ignores collisions where one ent is the owner of the other (both ways. otherwise rockets would blow up in your face).
you can also ignore collisions using dimension_solid/hit.
there's also rules about solid_corpse which are kinda annoying to work with.
Additionally you can mess around with .hitcontentsmaski and fancy brushcontents flags (solid water? you got it!).
MOVE_TRIGGERS and MOVE_EVERYTHING are hacks. FL_FINDABLE_NONSOLID is required to allow MOVE_EVERYTHING to hit nonsolid/trigger entities. otherwise it simply bypasses the engine's collision structures (which makes it slow, so why bother?). this flag also applies to findradius. MOVE_TRIGGER is annoying whener there's a trigger_multiple etc in the way.
.