I don't know of one but here's my take on sparky's (just for you...):
Rem Project: Dark Basic Pro Project
Rem Created: Tuesday, October 12, 2010
Rem ***** Main Source File *****
sync on
sync rate 60
autocam off
color backdrop rgb(100,100,100)
randomize timer()
`make a box to muck about on
make object box 1,100,2,100
color object 1,rgb(0,255,0)
position object 1,0,-1,0
sc_setupobject 1,1,2 `set up object one in group one as type of object 2(box collision)
`add some randomly placed obstacles
for ob=3 to 10
make object box ob,1+rnd(3),2,1+rnd(3)
yrotate object ob,rnd(359)
move object ob,5+rnd(35)
yrotate object ob,rnd(359)
move object up ob,1
sc_setupobject ob,1,2
next
`make a player object
make object sphere 2,2
position object 2,0,1,0
do
gosub move_player:
gosub camera:
sync
loop
move_player:
`save old position for collision
oldx#=object position x(2)
oldy#=object position y(2)
oldz#=object position z(2)
`move player
move object 2,(upkey()-downkey())*.3
turn object right 2,(rightkey()-leftkey())*2
`do collision
`next line checks for a collision within a radius of
`the line between where we started and where we are now
hit=sc_sphereslidegroup(1,oldx#,oldy#,oldz#,object position x(2),object position y(2),object position z(2),1,0)
if hit<>0
`then we re-position using the sliding position provided by sparky's
position object 2,sc_getcollisionslidex(),sc_getcollisionslidey(),sc_getcollisionslidez()
endif
return
camera:
position camera object position x(2),object position y(2),object position z(2)
set camera to object orientation 2
move camera -5
move camera up 3
point camera object position x(2),object position y(2),object position z(2)
return
No vertical stuff in there but once you get your head around doing it in 2D the rest is just pie and mash...