I must say I like your idea, i'm eager to play it but I couldn't wait any longer

, so 3 hours after my last post I present my version written from scratch
I've uploaded the source code, media and compiled exe in a .rar attachment to this message. Simply move the mouse to move the sphere, don't touch anything. Level's start out very slow but quickly build up speed and spawn obstacles faster. Game is written loop independent so should run well regardless of framerate. I've artifically capped it at 100 but it runs at over 1500FPS on my system with sync rate 0
Sorry if i've nicked your thunder

but hey use my code to figure out any issue you may be having, then code yours and finish it off. I'm sure it'll be great
edit: source code (requires media)
`runner
`runner.dba
`======================
Sync On : Sync Rate 100
set window title "Runner"
Autocam Off : Backdrop On : Color Backdrop Rgb(128,128,255) : Hide Mouse
randomize timer()
Set Camera Range 1,5000
Load Music "music.mp3",1 : Loop Music 1 : Set Music Volume 1,50
load music "hit.wav",2 : set music volume 2,50
Load Image "ground.jpg",2
Load Image "wall.jpg",3
load image "ball.jpg",4
set camera fov 70
Gosub Init
Gosub SetVars
Do
position object 1,Player.X,0,Player.Z
Position Camera 0,125,Player.Z-250 : Rotate Camera 10,0,0
SpeedUpdate()
Movement()
Spawn()
GUI()
CollisionCheck()
If Player.Alive then Player.Score=(Player.Z/100) : Position Mouse Screen Width()/2,screen height()/2
TimeA=Timer()
Sync
TimeB=Timer()
Loop
Function CollisionCheck()
If Player.Alive
i=Object Hit(1,0)
If i>0
Player.Alive=0
Set Music Volume 1,15
Play Music 2
If Player.MaxScore<Player.Score Then Player.MaxScore=Player.Score
Ghost Object On i
Ghost Object On 1
show mouse
Endif
Endif
Endfunction
Function SpeedUpdate()
If Player.Alive
If Timer()-SpeedTimer=>100 And Player.Speed<Player.MaxSpeed Then Inc Player.Speed,2 : SpeedTimer=Timer()
if Timer()-LevelTimer=>10000 then inc Player.Level,1 : LevelTimer=Timer()
Endif
Endfunction
Function GUI()
if timer()-BarUpdate=>1000 then set window title "Runner - FPS:"+left$(str$((1000.0/(TimeB-TimeA))),5) : BarUpdate=timer()
Text 10,10,"Level:"+str$(Player.Level)+" Speed:"+str$(Player.Speed)
Text 10,25,"X:"+str$(Player.X,0)
text 10,40,"Z:"+str$(Player.Z,0)
Center Text Screen Width()/2,10,"Score: "+str$(Player.Score)
Text Screen Width()-(text width("High Score ("+str$(Player.MaxScore)+")")+10),10,"High Score ("+str$(Player.MaxScore)+")"
If Not Player.Alive
Center Text Screen Width()/2,screen height()/2,"Uh oh spaghettios!!"
If Player.Score=>Player.MaxScore Then Center Text Screen Width()/2,(screen height()/2)+20,"NEW HIGH SCORE"
Center Text Screen Width()/2,(screen height()/2)+40,"**Press SPACEBAR to reset**"
If Spacekey()=1 Then Set Music Volume 1,50 : Gosub SetVars
Endif
Endfunction
Function Spawn()
If Player.Alive
If Timer()-(SpawnTimer+SpawnTimerRND)=>(1000/Player.Level)
SpawnTimer=Timer()
SpawnTimerRND=rnd(1000)
For i=1 To Player.Level
i2=rnd(90)+20
Make Object Cone FreeObj,i2
Color Object FreeObj,rgb(rnd(255),rnd(255),rnd(255))
Position Object FreeObj,rnd(500)-250,0,Player.Z+rnd(2000)+2000
Set Object Collision To Polygons FreeObj
Set Object Collision On FreeObj
Inc FreeObj,1
next i
Endif
Endif
Endfunction
Function Movement()
If Player.Alive
Inc Player.X,(mousemovex()/7.5)
If Player.X>215 Then Player.X=215
if Player.X<-215 then Player.X=-215
i#=Player.Speed/(1000.0/(TimeB-TimeA))*(Player.Level*0.3)
Inc Player.Z,i#
Endif
rotate object 1,Wrapvalue(Player.Z),0,0
Endfunction
Init:
Type PlayerVars
Speed As Float
Maxspeed As Float
Score As Integer
MaxScore as integer
Level as integer
Alive As Boolean
X As Float
Z As Float
Endtype
Global GameTimer As Integer
Global TimeA As Integer
Global TimeB As Integer
Global BarUpdate As Integer
Global SpeedTimer As Integer
Global LevelTimer As Integer
Global SpawnTimer As Integer
Global SpawnTimerRND As Integer
Global FreeObj as integer
Global Player As PlayerVars
Make Object Sphere 1,50 : Position Object 1,0,0,0
Texture Object 1,4
Set Object Collision To Polygons 1
set object collision on 1
FreeObj=10000
For i=1 To 10
Make Object Plane (i*100),500,10000 : Xrotate Object (i*100),270 : Fix Object Pivot (i*100) // Floor
Make Object Plane (i*100)+1,350,10000 : Rotate Object (i*100)+1,90,0,270 : Fix Object Pivot (i*100)+1 // left wall
Make Object Plane (i*100)+2,350,10000 : Rotate Object (i*100)+2,90,0,270 : Fix Object Pivot (i*100)+2 // right wall
Position Object (i*100),0,-25,((i-1)*object size z(100))+(object size z(100)/2)
Position Object (i*100)+1,-250,150,((i-1)*object size z(101))+(object size z(101)/2)
Position Object (i*100)+2,250,150,((i-1)*object size z(102))+(object size z(102)/2)
Texture Object (i*100),2
Texture Object (i*100)+1,3
Texture Object (i*100)+2,3
Scale Object Texture (i*100),object size x(100)/250,object size z(100)/250
Scale Object Texture (i*100)+1,object size y(101)/250,object size z(101)/500
Scale Object Texture (i*100)+2,object size y(102)/250,object size z(102)/500
Set Object Collision Off (i*100) : set object collision off (i*100)+1 : Set Object Collision Off (i*100)+2
Next i
Return
SetVars:
Player.Speed=150
Player.MaxSpeed=1000
Player.Score=0
Player.Level=1
Player.Alive=1
Player.X=0
Player.Z=0
BarUpdate=Timer()
SpeedTimer=timer()
LevelTimer=Timer()
SpawnTimer=timer()
ghost object off 1
For i=10000 To FreeObj
if Object Exist(i) then Delete Object i
Next i
FreeObj=10000
For i=1 To 15
i2=rnd(90)+20
Make Object Cone FreeObj,i2
Color Object FreeObj,rgb(rnd(255),rnd(255),rnd(255))
Position Object FreeObj,rnd(500)-250,0,Player.Z+rnd(2000)+500
Set Object Collision To Polygons FreeObj
Set Object Collision On FreeObj
Inc FreeObj,1
Next i
Set Music Volume 1,50
hide mouse
Return