All pastes #677152 Raw Edit

Something

public text v1 · immutable
#677152 ·published 2007-08-31 18:53 UTC
rendered paste body
`========================================================
`====================Simple FPS==========================
`========================================================
`=======by culmor30======================================

`------CONTROLLER PROMPT------
`sync on:sync rate 0:



`------CONTROLLER PROMPT------



sync on
sync rate 60
color backdrop black
hide mouse
autocam off
phy start

global NextIDNumber = 0
global newy = 0

`=====Create player object=====
PlayerObject = NextIDNumber()
make object cube PlayerObject,2
scale object PlayerObject,2,20,2
position object PlayerObject,10,15,0
hide object PlayerObject
`=====Create player object=====

pbpx#=object position x(PlayerObject)
pbpy#=object position y(PlayerObject)
pbpz#=object position z(PlayerObject)

`=====Add Level Light 1=====
make light 1
set spot light 1,100,200
position light 1,200,350,100
point light 1,200,0,350
set light range 1,600
color light 1,rgb(255,255,255)
`=====Add Level Light 1=====

color light 0,255,255,255

`=====Add Level Light 2=====
make light 2
set spot light 2,100,200
position light 2,100,350,200
point light 2,350,0,200
set light range 2,600
color light 2,rgb(255,255,255)
`=====Add Level Light 2=====

set normalization on

`=====Level Fog=====
`-(Only works if GFX card supports it)
fog on
fog color rgb(000,040,000)
fog distance 350
set ambient light 2.0
color ambient light rgb(000,040,000)
`=====Level Fog=====

`=====Load Level=====
LevelObject = NextIDNumber()
load object "level.x", LevelObject
position object LevelObject ,0,0,0
scale object LevelObject,400,400,400
set object collision to polygons LevelObject
phy make rigid body static mesh LevelObject
`=====Load Level=====

`=====Load and position crosshair=====
screen_height=screen height()
screen_width=screen width()
screen_center_x=screen_width / 2
screen_center_y=screen_height / 2

CrossHairImage = NextIDNumber()
load image "crosshair.bmp",CrossHairImage,1

CrossHairSprite = NextIDNumber()
sprite CrossHairSprite,screen_center_x - 50,screen_center_y - 50,CrossHairImage
`=====Load and position crosshair=====

`=====Character Controller=====
phy make box character controller 1,pbpx#,pbpy#,pbpz#,2,20,2,1,1,50
`=====Character Controller=====

`===Banner===
titleimg=NextIDNumber()
load image "title.bmp",titleimg,1
titlesprite=NextIDNumber()
sprite titlesprite,790,680,titleimg
`===Banner===

type BulletType
     ObjectNumber as integer
     Distance     as float
endtype

dim Bullets(10) as BulletType

for b=0 to 10
     NewBullet = NextIDNumber()
     make object sphere NewBullet,0.2
     color object NewBullet,rgb(255,255,0)

     ` This is the object number.
     Bullets(b).ObjectNumber = NewBullet

     Bullets(b).Distance = -1.0

     hide object NewBullet
     position object NewBullet,0,-999,0
next b

sparktex = NextIDNumber()
load image "sparktexture.bmp",sparktex,0

BulletsInFlight = 0
BulletRange#    = 150.0
BulletVelocity# = 350.0

MovementSpeed#  = 75.0

`Bullethole
BulletHoleImage = NextIDNumber()
load image "bullet hole.bmp", BulletHoleImage,1

OriginalBulletHole = NextIDNumber()
make object plain OriginalBulletHole, 1, 1
texture object OriginalBulletHole, BulletHoleImage
set object transparency OriginalBulletHole, 5
hide object OriginalBulletHole

sparkexist# = particles exist(particleemitter)
sparkdeltimer# = 1

cyclecount#=1


phy update 0
`Begin main loop:
do
     PreviousCycleTime = CycleTime
     CycleTime         = timer()
     ElapsedTime       = CycleTime - PreviousCycleTime
     CyclesPerSecond#  = 1000.0 / ElapsedTime

     oldx#=object position x(PlayerObject)
     oldy#=object position y(PlayerObject)
     oldz#=object position z(PlayerObject)

     `=====WASD Controls=====
     if keystate(17)=1 
     move object PlayerObject, MovementSpeed# / CyclesPerSecond# : phy move character controller 1, MovementSpeed# / CyclesPerSecond#
     else
     phy move character controller 1,0.0
     endif

     if keystate(30)=1 then move object left PlayerObject, MovementSpeed# / CyclesPerSecond#

     if keystate(31)=1
     move object PlayerObject, 0.0 - (MovementSpeed# / CyclesPerSecond#) : phy move character controller 1, 0.0 - (MovementSpeed# / CyclesPerSecond#)
     else
     phy move character controller 1,0.0
     endif

     if keystate(32)=1 then move object right PlayerObject, MovementSpeed# / CyclesPerSecond#
     `=====WASD Controls=====

     x#=object position x(PlayerObject)
     y#=object position y(PlayerObject)
     z#=object position z(PlayerObject)

     `=====Camera/Player Obj Lock=====
     position camera object position x(PlayerObject),object position y(PlayerObject),object position z(PlayerObject)
     rotate camera camera angle x(),object angle y(PlayerObject),camera angle z()
     `=====Camera/Player Obj Lock=====

     `=====Camera Controls=====
     speed#=0.2
     damper#=10.0

     camy#=wrapvalue(camy#+mousemovex()*speed#):camx#=wrapvalue(camx#+mousemovey()*speed#)

     if camx#<=290 and camx#>180 then camx#=290
     if camx#>=70 and camx#<180 then camx#=70

     tx#=curvevalue(-camx#,tx#,damper#)
     ty#=curvevalue(-camy#,ty#,damper#)

     rotate camera camx#,object angle y(PlayerObject),0
     yrotate object 1,camy#
     `=====Camera Controls=====

`SPARKY'S SLIDING COLLISION FUNCTION CALL

     `slidingcollision(oldx#,oldy#,oldz#,x#,y#,z#,3,PlayerObject,LevelObject)

     if mouseclick() = 1 and FireTime < timer() - 200
          gosub FireBullet
          FireTime = timer()
     endif

     ` Process the bullets that are in flight.
     if BulletsInFlight > 0 then gosub bullets
     
     inc sparkdeltimer#
     text 500,20,"Spark Deletion Timer: "+str$(sparkdeltimer#)
     
     inc cyclecount#
     text 500,40,"Cycle Count: "+str$(cyclecount#)
     
     text 500,60,"Frames Per Second: "+str$(screen fps())

`))$#@#!BULLET ARRAY!#@#$((
     LineY = 10

     for b = 0 to 10
          inc LineY, 20
          text 10, LineY, str$(bullets(b).ObjectNumber) + " / " + str$(bullets(b).Distance)
     next b

     inc LineY, 20
     text 10, LineY,"Bullets in flight: "+str$(BulletsInFlight)

phy update 1
phy update 0
     sync
loop
`End main loop

` --------------------------------------------------------------------------------------------------

`========<=-=Bullets=-=>========
`---------->-=-Are-=-<----------
`========<=-=Annoying-=>========

FireBullet:

` Find the first unused bullet.

for b = 0 to 10

     ` If the bullet isn't in flight, position it at the point of origin.
     if Bullets(b).Distance = -1.0
          BulletObject = Bullets(b).ObjectNumber
          show object BulletObject
          position object BulletObject, camera position x(), camera position y(), camera position z()
          rotate object BulletObject, camera angle x(), camera angle y(), camera angle z()

          ` Annotate this bullet as being in flight.
          Bullets(b).Distance = 0.0

          inc BulletsInFlight

          ` We have our bullet, so exit.
          exit
     endif

next b

return

` --------------------------------------------------------------------------------------------------

bullets:

for b = 0 to 10

     ` If the bullet is in flight, see if it's going to hit something this program cycle.
     if Bullets(b).Distance > -1.0
          BulletObject = Bullets(b).ObjectNumber

          ` Note the bullet's position.
          PositionX# = object position x(BulletObject)
          PositionY# = object position y(BulletObject)
          PositionZ# = object position z(BulletObject)

          ` Move the bullet to where it's going to be if it doesn't hit anything.
          move object BulletObject, BulletVelocity# / CyclesPerSecond#

         

          ` An impact has occured.
       
               NewBulletHole = NextIDNumber()
               instance object NewBulletHole, OriginalBulletHole
               position object NewBulletHole, newx# + normx# / 10.0, newy# + normy# / 10.0, newz# + normz# / 10.0
               point object NewBulletHole, newx# + normx#, newy# + normy#, newz# + normz#

`----____----Spark Particles----____----

particleemitter = NextIDNumber()



`Spark Deletion Timer Stuff
if sparkdeltimer#>30
if sparksexist#>0
`DELETE THE EMITTER HERE
endif
sparkdeltimer#=0
endif

`--------                                                                ---------------

               ` Reset the distance of flight for next use of bullet.
               Bullets(b).Distance = -1.0
               dec BulletsInFlight
               hide object BulletObject
          ` An impact has not occured - the bullet will keep flying.
          else
               DistanceOfFlight# = Bullets(b).Distance + ThreeDimensionDistance#(PositionX#, PositionY#, PositionZ#, object position x(BulletObject), object position y(BulletObject), object position z(BulletObject))

               ` control bullet flight distance
               if DistanceOfFlight# >= BulletRange#
                    ` Reset the distance of flight for the next use of this bullet.
                    Bullets(b).Distance = -1.0
                    dec BulletsInFlight
                    hide object BulletObject
               ` The bullet's still flying, increase the distance of flight for next time.
               else
                    Bullets(b).Distance = DistanceOfFlight#
               endif

          endif

next b

return

` --------------------------------------------------------------------------------------------------



` --------------------------------------------------------------------------------------------------

function ThreeDimensionDistance#(FromX#, FromY#, FromZ#, ToX#, ToY#, ToZ#)
` calculate the distance between two points in three dimensions

TempX# = abs(FromX# - ToX#)
TempY# = abs(FromY# - ToY#)
TempZ# = abs(FromZ# - ToZ#)

ReturnValue# = sqrt((TempX# * TempX#) + (TempY# * TempY#) + (TempZ# * TempZ#))

endfunction ReturnValue#

` --------------------------------------------------------------------------------------------------

function NextIDNumber()
` determine ID numbers

inc NextIDNumber

endfunction NextIDNumber

function newy()

inc newy

endfunction newy

`------------------------------------------------------------------------------------------