c_move zu benutzen UND traces zu machen ist wie mein Vorposter schon sagt völliger Overkill. Eine Entity zu benutzen ist allerdings keine schlechte Idee, das macht Tracer Effekte und ähnliches weitaus einfacher.
Wie ich es schon öfter gemacht habe (auch in Systemen mit simulierter Ballistik und Oberflächenpenetration):

1) Eine Projektil Entity erzeugen. Diese ist passierbar, in der Regel unsichtbar und nicht allzu groß (die Größe ist aber unglaublich egal)
2) In jedem Frame die neue Position des Projektils anhand der Ballistik berechnen
3) Einen trace zwischen der berechneten Position und der aktuellen Entity Position machen.
4) Wenn der trace nichts trifft, das Projektil auf die neue Position bewegen. NICHT mit c_move allerdings, sondern einfach mit Vektorfunktionen (vec_set, etc). Trifft der trace ein Hindernis, so hat man etwas getroffen und verfährt wie man möchte.