I've got the collision system working pretty well I'm posting the source code here and the test map along with it. Take a look and tell me what you think and where I can make some improvements.
The map is just a test map and is kind of hard to see but you get the idea, a few ramps and a couple walls. I'm working on fixing the glitch that allows the player to climb the walls

Ramps work good

Gravity works good

Collision detection is good

Player can climb walls?
@ Latch
I used the sensor idea to detect a ramp, thanks.
@ Obese
I forgot about the example files in the myproj folder, I modified the collision system from the Room.dba file to use gravity and detect on the Y axis too, thanks for the tip.
I used as many rem's as I could but the code is still sort of confusing, I appreciate any feedback
` FPS Collision Project
` Cory Thornsberry
` 8/7/07
` Press "+" to display information
` Use Up, Down, Left, and Right Keys to move
` Look using the Mouse
Rem Start-Up--------------------------------------------
Sync Rate 40 : Sync On
Hide Mouse
Autocam Off
Rem Main Variables--------------------------------------
` Game Clock (Time(1)=Min, Time(2)=Sec, Time(3)=System)
Dim Time(3) : Time(1)=15
` Ramp Slope (Do not adjust)
RampHeight#=(TAN(ATAN(0.5))*0.75)
` Options (1=On, 0=Off)
Gravity=1 : Clock=0 : Collisions=1
` Gravity Strength (Percentage)
If Gravity = 1 then GravityStrength=100
` Respawn/Reset Position
StartX#=10 : StartY#=4 : StartZ#=10
StartAX#=0 : StartAY#=0
Rem Setup-World-----------------------------------------
GoSub Setup_Arena
INK Rgb(255,0,0),0
` Starting Positions
NewPosX#=StartX#
NewPosY#=StartY#
NewPosZ#=StartZ#
` Synchronize Time with Computer Clock
Time(3)=(Timer()/1000)
Rem Main Loop-------------------------------------------
Do
Set Cursor 1,1
` Reset Variables
OldPosX#=NewPosX#
OldPosY#=NewPosY#
OldPosZ#=NewPosZ#
` GoSubs
If Clock = 1 then GoSub Get_Game_Time
GoSub Input_Control
GoSub Print_Data
If Collisions = 1
Position Object 3,NewPosX#,NewPosY#+0.025,NewPosZ#
If Object Collision(3,1)=1 and OnRamp=0 then OnRamp=1
If OnRamp=1 then GoSub Control_Ramp
GoSub Collision_Control : ` Player Collision
EndIf
` Update Positions
Position Camera NewPosX#,NewPosY#+4,NewPosZ#
Position Object 2,NewPosX#,NewPosY#+3.25,NewPosZ#
Sync
Loop
Rem Sub-Routines----------------------------------------
Setup_Arena:
` Load Map
Load Object "TestMap.x",1
Scale Object 1,1500,1500,1500
Color Object 1,RGB(255,255,255)
ZRotate Object 1,90
XRotate Object 1,270
Set Object 1,1,1,0
` Make Collision Object
Make Object Sphere 2,1
Scale Object 2,350,600,350
Hide Object 2
` Make Ramp Detector Object
Make Object Cube 3,1
Scale Object 3,300,10,300
Hide Object 3
` Setup Collision
Set Object Collision to Polygons 1
Set Object Collision to Spheres 2
Set Object Collision to Boxes 3
Return
Get_Game_Time:
` Main Game Time Control
Time(2)=(Time(2)-((Timer()/1000)-Time(3)))
If Time(2) < 0 then Time(2)=59 : Time(1)=Time(1)-1
Print Time(1)," : ";
If Time(2) < 10 then Print "0",Time(2) else Print Time(2)
Time(3)=(Timer()/1000)
Return
Input_Control:
If UpKey()=1
` Move Camera Foreward
NewPosX#=NewXValue(OldPosX#,AngY#,0.75)
NewPosZ#=NewZValue(OldPosZ#,AngY#,0.75)
EndIf
If DownKey()=1
` Move Camera Backwards
NewPosX#=NewXValue(OldPosX#,AngY#,-0.75)
NewPosZ#=NewZValue(OldPosZ#,AngY#,-0.75)
EndIf
If LeftKey()=1
` Strafe to the Left
NewPosX#=NewXValue(NewPosX#,Wrapvalue(AngY#-90),0.25)
NewPosZ#=NewZValue(NewPosZ#,Wrapvalue(AngY#-90),0.25)
EndIf
If RightKey()=1
` Strafe to the Right
NewPosX#=NewXValue(NewPosX#,Wrapvalue(AngY#+90),0.25)
NewPosZ#=NewZValue(NewPosZ#,Wrapvalue(AngY#+90),0.25)
EndIf
` Jump
If SpaceKey()=1 and Gravity#=0 then Gravity#=-0.75
` Reset Player to Starting Position
If ControlKey()=1
NewPosX#=StartX#
NewPosY#=StartY#
NewPosZ#=StartZ#
Gravity#=0
AngX#=StartAX#
AngY#=StartAY#
OnRamp=0
EndIf
` Update Camera/Objects Rotation
AngX#=wrapvalue(Angx#+mousemovey())
AngY#=wrapvalue(Angy#+mousemovex())
YRotate Object 2,Angy# : YRotate Object 3,Angy#
Rotate Camera Angx#,Angy#,0
Return
Print_Data:
` Print Game Messages
If Gravity = 0 then Print "Grav. OFF"
If Clock = 0 then Print "Clock OFF"
If Collisions = 0 then Print "Coll. OFF"
If ScanCode() = 13
Print " FPS Rate- ",Screen FPS()
Print " Gravity- ",Gravity#
Print " Height- ",NewPosY#
EndIf
Return
Collision_Control:
If OnRamp = 0 and Gravity = 1
` Add Gravity
Gravity#=Gravity#+(0.1*(GravityStrength/100))
NewPosY#=NewPosY#-Gravity#
EndIf
Position Object 2,NewPosX#,NewPosY#+3.25,NewPosZ#
If Object Collision(2,1)=1
` Check X Axis
Position Object 2,OldPosX#,NewPosY#+3.25,NewPosZ#
If Object Collision(2,1)=0
NewPosX#=OldPosX#
Else
` Check Y Axis
If OnRamp = 0 then Position Object 2,NewPosX#,OldPosY#+3.25,NewPosZ#
If Object Collision(2,1)=0
If OnRamp = 0 then NewPosY#=OldPosY#
Gravity#=0 : ` Make sure player doesn't fall through floor
Else
` Check Z Axis
If OnRamp = 0 then NewPosY#=OldPosY#+Gravity# : ` Remove Gravity
Position Object 2,NewPosX#,NewPosY#+3.25,OldPosZ#
If Object Collision(2,1)=0
NewPosZ#=OldPosZ#
Else
NewPosX#=OldPosX#
NewPosY#=OldPosY#
NewPosZ#=OldPosZ#
EndIf
EndIf
EndIf
EndIf
Return
Control_Ramp:
` Control Ramp Math
If UpKey()=1 or DownKey()=1 then NewPosY#=NewPosY#+RampHeight#
Position Object 3,NewPosX#,NewPosY#+0.025,NewPosZ#
If Object Collision(3,1)=0 then OnRamp=0 : OldPosY#=NewPosY#+0.1
Return
Rem Functions-------------------------------------------
[Edit] Sorry, I forgot to say that you can download the map via the download link just put it in the same folder as the .dba
Cory