TGC Codebase Backup



very fast and simple FPS control using Sparky collision 2 by thebulk71

6th Jul 2006 14:15
Summary

this source contains two gosubs that just need getting thrown into your code, along with the Sparky collision dll 2 (free and lush), and you get a sweet FPS control system up and r



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    rem the following code is set as two gosubs... call the "setup", before the main loop and 
rem the "handle_player" during the main loop. all you have to do is set the "player=X"
rem to a free number (ex: player=100) and you are ready to go! full FPS physics on any geometry!!!

setup:
rem load land
load object "media\land.x",2
MAKE MEMBLOCK 1,1000
SC_setupComplexObject 2,1,3


rem make player



player=X



make object sphere player,50
position object player,0,100,0
SC_setupObject player,1,1
hide object player
return


`--------------------------------------------------------------------------------------------
handle_player:
position camera 0,curvevalue (object position x(player),camera position x(0),2),curvevalue (object position y(player)+25,camera position y(0),2),curvevalue (object position z(player),camera position z(0),5)
rem FPS cam block
oldcamy#=camy#
oldcamx#=camx#
camy#= wrapvalue(camy#+mousemoveY()*0.2)
camx#= wrapvalue(camx#+mousemoveX()*0.2)
if camy#>70 and camy#<180 then camy#=70
if camy#<300 and camy#>200 then camy#=299
yrotate camera curveangle(camx#,oldcamx#,25)
xrotate camera curveangle(camy#,oldcamy#,25)
rem record old position
oldx#=object position x(player)
oldy#=object position y(player)
oldz#=object position z(player)
rem handle forwards
if keystate(17)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)
endif
rem handle backwards
if keystate(31)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+180
endif
rem handle left
if keystate(30)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+270
endif
rem handle right
if keystate(32)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+90
endif
rem handle diagonals
if keystate(17)=1 and keystate(32)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+45
endif
if keystate(17)=1 and keystate(30)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+315
endif
if keystate(31)=1 and keystate(30)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+225
endif
if keystate(31)=1 and keystate(32)=1
speed#=speed#+1.5
yrotate object player,camera angle y(0)+135
endif
rem speed limits
if speed#>10 then speed#=10
if speed#<0 then speed#=0
rem speed calculation
if speed#>0 then move object player,speed#
speed#=speed#-0.5
rem player new position
newx#=object position x(player)
newy#=object position y(player)
newz#=object position z(player)
rem handle jumping and gravity
if spacekey()=1 and canjump=0
jump#=10
canjump=1
endif
if spacekey()=0 and height#<30 then canjump=0
rem calculate height
height#=SC_intersectObject ( 0,object position x(player),object position y(player),object position z(player), object position x(player),object position y(player)-100000,object position z(player))
cieling#=SC_intersectObject ( 0,object position x(player),object position y(player),object position z(player), object position x(player),object position y(player)+100,object position z(player))
IF height#<26
gravity#=0
endif
IF cieling#<20 and cieling#>0
jump#=0
endif
rem handle gravity
if jump#>0
position object player,object position x(player),object position y(player)+jump#,object position z(player)
jump#=jump#-0.5
endif
if jump#<1
position object player,object position x(player),object position y(player)-gravity#,object position z(player)
gravity#=gravity#+0.5
endif
rem handle on ground calculation
if height#<25 then position object player,object position x(player),object position y(player)+(25-height#),object position z(player)
rem handle sliding using Sparky
slide#=SC_sphereSlide ( 0, oldx#, oldy#, oldz#, newx#, newy#, newz#,25, player )
slidex#=SC_getCollisionSlideX ()
slidez#=SC_getCollisionSlideZ ()
if slide#>0
position object player,slidex#,object position y(player),object position z(player)
endif
if slide#>0
position object player,object position x(player),object position y(player),slidez#
endif
slidex#=0
slidey#=0
slidez#=0

return