here is some code.
Rem Game demo
rem By Mike Schlueter
hide mouse
rem Varies
playerx#=0
playery#=-50
playerz#=0
Jumping=0
walking=0
stance#=10
InShip=0
foot=1
rem Media
rem Character
MAKE OBJECT SPHERE 1,50: position object 1,playerx#,playery#,playerz#
make object box 2,10,50,10: position object 2,playerx#,playery#,playerz#
rem make ship
load object "Ship/Fighter.x",3: scale object 3,10,10,10: position object 3,-270,-35,100
yrotate object 3,180
fix object pivot 3
rem Ship
load object "Ship/Ship.x",4: scale object 4,11,11,11 :position object 4,0,0,0
rem Space
load object "space station/ss.x",5: position object 5,0,0,0: Scale object 5,50,50,50
`Make sure all the objects are on ground level
`FOR Object = 1 TO 2
`POSITION OBJECT Object, OBJECT POSITION X(Object), OBJECT SIZE Y(Object)/2,OBJECT POSITION Z(Object)
`NEXT Object
`Add limb for intersection checks
MAKE OBJECT SPHERE 9999,10
MAKE MESH FROM OBJECT 1,9999
DELETE OBJECT 9999
add limb 1,1,1
`Front Intersection Limb
ADD LIMB 1,2,1
OFFSET LIMB 1,2,0,0,OBJECT SIZE Z(1)/2
HIDE LIMB 1,2
`Back Intersection Limb
ADD LIMB 1,3,1
OFFSET LIMB 1,3,0,0,-OBJECT SIZE Z(1)/2
HIDE LIMB 1,3
`Right Intersection Limb
ADD LIMB 1,4,1
OFFSET LIMB 1,4,OBJECT SIZE X(1)/2,0,0
HIDE LIMB 1,4
`Left Intersection Limb
ADD LIMB 1,5,1
OFFSET LIMB 1,5, -OBJECT SIZE X(1)/2,0,0
HIDE LIMB 1,5
Rem Mainline
rem start loop
do
`Screen FPS
FPS=SCREEN FPS()
TEXT 0,0,"FPS: "+STR$(FPS)
`Movement Controls
if foot=1
IF KEYSTATE(17)=1
XAngle#=OBJECT ANGLE X(1)
XROTATE OBJECT 1,0
MOVE OBJECT 1,2
XROTATE OBJECT 1,XAngle#
`Walk=1
endif
IF KEYSTATE(31)=1
XAngle#=OBJECT ANGLE X(1)
XROTATE OBJECT 1,0
MOVE OBJECT 1,-2
XROTATE OBJECT 1,XAngle#
`Walk=1
endif
IF KEYSTATE(30)=1 then MOVE OBJECT LEFT 1,1
IF KEYSTATE(32)=1 then MOVE OBJECT RIGHT 1,1
`Mouse Camera Movement
Camy#=Camy#+MOUSEMOVEX()*.1
Camx#=Camx#+MOUSEMOVEY()*.1
IF Camx#>90 AND Camx#<135 THEN Camx#=90
IF Camx#>270 AND Camx#<225 THEN Camx#=90
YROTATE CAMERA Camy#
XROTATE CAMERA Camx#
YROTATE OBJECT 1,Camy#
endif
`Define variables for lag reduction
X#=OBJECT POSITION X(1)
Y#=OBJECT POSITION Y(1)
Z#=OBJECT POSITION Z(1)
SX#=OBJECT POSITION X(3)
SY#=OBJECT POSITION Y(3)
SZ#=OBJECT POSITION Z(3)
`Camera Positioning
POSITION CAMERA X#,Y# + stance#,Z#
position object 2,X#,Y#,Z#
rem enter vehicle
if keystate(18)=1
InShip=1
foot=0
endif
if InShip=1
joystick=1
SRY#=0
SRX#=0
Jumping=0
walking=0
Jump=0
walk=0
glue object to limb 1,3,1
offset limb 1,1,0,3,2
`position camera SX#,SY#,SZ#
`set camera to object orientation 3
`move object 3,10
if upkey()=1
pitch object down 3,joystick
xrotate camera -joystick
`dec SRY,joystick
endif
if downkey()=1
pitch object up 3,joystick
xrotate camera joystick
`inc SRY,joystick
endif
if leftkey()=1
roll object left 3,joystick
yrotate camera -joystick
`dec SRX,joystick
endif
if rightkey()=1
roll object right 3,joystick
yrotate camera joystick
`inc SRX,joystick
endif
`Mouse Camera Movement IN SHIP
`SCamy#=SCamy#+SRY*.1
`SCamx#=SCamx#+SRX*.1
`YROTATE CAMERA SRY
`XROTATE CAMERA SRX
rem Get back position of object for camera
pitch object up 3,5
move object 3,-8
position object 1,object position x(3),object position y(3)+8,object position z(3)
move object 3,10
pitch object down 3,5
rem Place camera and set orientation to object
position camera object position x(1),object position y(1),object position z(1)
set camera to object orientation 3
endif
rem * *
rem * STANCE*
rem * *
rem 'C'=45 controls or 'ctrl'=53
if keystate(200)=1 then stance#=8
if keystate(200)=0 then stance#=20
rem * *
rem * JUMP *
rem * *
`Space key Controls
IF SPACEKEY()=1 AND Jumping=0 THEN Jump=1
`JUMP Variable Definition
IF Jump=1
Jump_Speed#=1
Jumping=1
Jump=0
ENDIF
`Jumping
IF Jumping=1
DEC Jump_Speed#,.1
POSITION OBJECT 1,X#,Y#+Jump_Speed#, Z#
ENDIF
rem
rem Walk
rem
`walk Variable Definition
IF Walk=1
Walk_Speed#=1
Walking=1
Walk=0
ENDIF
`walk
IF Walking=1
DEC Walk_Speed#,.1
POSITION OBJECT 1,X#,Y#+Walk_Speed#, Z#
ENDIF
`Add a target reticule to the screen
CIRCLE ScreenWidth#/2,ScreenHeight#/2,5
` * *
` * Check for collision with objects, and handle appropriately *
` * *
`Ground Intersection Check
IF INTERSECT OBJECT (4,X#,(Y#-OBJECT SIZE Y(1)/2),Z#,X#,Y#,Z#)>0
Jumping=0
Walking=0
If KEYSTATE(17)=1 or KEYSTATE(31)=1 or KEYSTATE(30)=1 or KEYSTATE(32)=1 then Walk=1
ELSE
IF Jumping=0
Jumping=1: Jump_Speed=-1
Walk=0
If KEYSTATE(17)=0 and KEYSTATE(31)=0 and KEYSTATE(30)=0 and KEYSTATE(32)=0 then Walk=0
ENDIF
ENDIF
`Front Intersection Check
IF INTERSECT OBJECT (4,LIMB POSITION X(1,2),LIMB POSITION Y(1,2),LIMB POSITION Z(1,2),X#,Y#,Z#)
`If intersection infront, move the user backwards
MOVE OBJECT 1,-2
ENDIF
`Back Intersection Check
IF INTERSECT OBJECT (4,LIMB POSITION X(1,3),LIMB POSITION Y(1,3),LIMB POSITION Z(1,3),X#,Y#,Z#)
`If intersection behind, move user forwards
MOVE OBJECT 1,2
ENDIF
`Right Intersection Check
IF INTERSECT OBJECT (4,LIMB POSITION X(1,4),LIMB POSITION Y(1,4),LIMB POSITION Z(1,4),X#,Y#,Z#)
`If intersection to the right, move the user left
MOVE OBJECT LEFT 1,1
ENDIF
`Left Intersection Check
IF INTERSECT OBJECT (4,LIMB POSITION X(1,5),LIMB POSITION Y(1,5),LIMB POSITION Z(1,5),X#,Y#,Z#)
`If intersection to the left, move user right
MOVE OBJECT RIGHT 1,1
ENDIF
rem end loop
sync
loop
Proud to be Canadian