Hi there.
I personally use sparky's collision, but I made my own intersect collision time ago. As Derek Darkly said, you need more than one intersect check for a good collision, ...I use five..front,back ,left ,right and one or two to stand on any surface. This is a good collision if we don't want to use plugins. You can implement this piece of code, to check your head...it shows basically how it works. I hope this code can help you.
sync on:sync rate 60:autocam off:set global collision off
esn=1:pj=2:set camera range 0.01,30000
x as float :y as float :z as float :v as float
c#=0.2
smooth=2
` Loading level
load object "level.dbo",esn
position object 1,0,-2,0
` Player object
make object sphere pj,4
v=object size(pj)
position object pj,0,5,0
hide object pj
do
x=object position x(pj):y=object position y(pj):z=object position z(pj)
` collision with X
if INTERSECT OBJECT(esn,x,y,z,x+v,y,z)>0 then x=x-(v-INTERSECT OBJECT(esn,x,y,z,x+v,y,z))/smooth
if INTERSECT OBJECT(esn,x,y,z,x-v,y,z)>0 then x=x+(v-INTERSECT OBJECT(esn,x,y,z,x-v,y,z))/smooth
` collision with Z
if INTERSECT OBJECT(esn,x,y,z,x,y,z+v)>0 then z=z-(v-INTERSECT OBJECT(esn,x,y,z,x,y,z+v))/smooth
if INTERSECT OBJECT(esn,x,y,z,x,y,z-v)>0 then z=z+(v-INTERSECT OBJECT(esn,x,y,z,x,y,z-v))/smooth
`collision with Y
if INTERSECT OBJECT(esn,x,y,z,x,y-v,z)>0 then y=y+(v-INTERSECT OBJECT(esn,x,y,z,x,y-v,z))/3
`Gravity
if INTERSECT OBJECT(esn,x,y,z,x,y-v,z)=0 then gravedad#=0.8 else gravedad#=0.25
`player movements
if upkey()=1 THEN x=NEWXVALUE(x,gr,c#):if upkey()=1 then z=NEWZVALUE(z,gr,c#)
if downkey()=1 THEN x=NEWXVALUE(x,gr,-c#):if downkey()=1 then z=NEWZVALUE(z,gr,-c#)
`slide left
if leftkey()=1 THEN x=NEWXVALUE(x,gr-90,c#):if leftkey()=1 then z=NEWZVALUE(z,gr-90,c#)
`slide right
if rightkey()=1 THEN x=NEWXVALUE(x,gr-90,-c#):if rightkey()=1 then z=NEWZVALUE(z,gr-90,-c#)
`camera and player position
position object pj, x, y-gravedad#, z
position camera x,2+y-gravedad#,z
`camera movements
gr=wrapvalue(gr+mousemovex()/2)
gr2=wrapvalue(gr2+mousemovey()/2)
rotate camera gr2,0,0
yrotate camera gr
`camera rotation limits
if gr2<=290 and gr2>180 then gr2=290
if gr2>=70 and gr2<180 then gr2=70
sync
loop
I'm not a grumpy grandpa
