Tut mir leid, wenn ich jetzt nicht so konstruktiv klinge, aber der Code ist mir ein Rätsel: darin sind 3 Traces nach unten enthalten, wo für die eine Figur nur ein einziger nötig wäre. Jeder davon wieder etwas anders. Außerdem enthält die Funktion environmental_forces überhaupt keine Umwelteinflüsse.
Und von der "if (c_trace(my.x,vector(my.x,my.y,my.z-5000),IGNORE_ME | IGNORE_PASSABLE | GLIDE) > 0)" sieht man nicht, was sie für Folgen hat...

Kennst Du den Movement und Gravity Code aus dem Manual? Er müsste unter dem Stichpunkt "c_move" enthalten sein und sehr gut. Allerdings müsste man einen Sprungmodus erst noch einbauen, wenn man den braucht.