I'll check out the newest demo, it's becoming an exciting project.
As for the collision, you could do something like this.
for object=staring number to end number
Collision(OX#,OY#,OZ#,x#,y#,z#,10,object)
next object
rem collision function
function Collision(X1#,Y1#,Z1#,X2#,Y2#,Z2#,Radius#,Obj)
C = sc_spherecast(Obj,X1#,Y1#,Z1#,X2#,Y2#,Z2#,Radius#,0)
if C > 0
`here is where if collision occurs
endif
endfunction
For reference, OX#, OY#, OZ# are the starting points and x#,y#,z# are the end points for the ray. What I would do is store those variables before movement(OX# ect) and then after movement store the other set. This should work for you... it's the same function I use, but I haven't tested it for your situation. You might have to change some things.