| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896 |
- ; Tunnel Run
- ; (c)2001 David Bird
- ; [email protected]
- ; www.birdie72.freeserve.co.uk
- ; Main Program
- ;
- Global Cheater=False
- Graphics3D 640,480
- SetBuffer BackBuffer()
- Include "globs.bb"
- Include "functions.bb"
- ChangeDir "Media"
- ;
- ;Set Up collision Constants here.
- ;
- Const TYPE_CAM=1
- Const TYPE_PLAYER=2
- Const TYPE_SHOT1=3
- Const TYPE_TUNNEL=50
- Const TYPE_ASTER=51
- Const TYPE_ASTERPOLY=52
- Const TYPE_CLAW=53
- ;
- ;
- Load_Media()
- Get_GFX_Modes()
- Load_Highscores()
- Set_GFXMode()
- Resize_Images(GraphicsWidth(),GraphicsHeight())
- ;
- Goto MainMenu
- End
- .Game_Start_Loop
- ;
- FlushMouse
- Create_Tunnel()
- lit=CreateLight()
- TurnEntity lit,45,0,0
- ;
- Select Gametype
- Case 1 ;One Player Game
- this.play=Add_Player(player1type,255,255,255,False,0,"Player1")
- Num_Players=1
- Case 2 ;Two Player Game
- this.play=Add_Player(player1type,255,255,255,True,0,"")
- other.play=Add_Player(player2type,255,255,0,True,1,"")
- Num_Players=2
- If Player2type>=5 Then Num_Players=2
- End Select
- Exited=False
- Go1_timer=0
- Go2_timer=0
- Game_Counter=0
- dummy=CreatePivot()
- Listen=CreateListener(dummy,.001,10,5)
- While Exited=False
- Game_Counter=Game_Counter+1
- Cls
- TurnEntity lit,1,1,0
- Update_Flash()
- Do_Tunnel_Scroll(Tunnel_tex,1)
- Do_Tunnel_Scroll(tex0,-2)
- Update_Shield_Texture()
- Do_Control()
-
- Update_Players()
- Update_Shots()
- Update_Objects()
- Update_Smoke()
- Change_Tunnel_Colors()
- If (Game_Counter Mod 100)=0 Then Alter_Tunnel_Colors()
- ;
- If cnt=0 Then
- cnt=10+(10*(3-G_Diff))
- Add_Object(Rnd(-300,300),Rnd(-300,300),9000,-1,Rnd(10,70),Rnd(50,150),Rand(1,3))
- ; Add_Object(ppop,0,10000,-1,50,4,1000)
- ppop=ppop+20
- End If
- ;
- If KeyHit(1) Then Num_Players=0:Exited=True
- ;
- cnt=cnt-1
- ;
- UpdateWorld
- RenderWorld
-
- lastplayer=Do_GameOver_Overlay()
- If lastplayer>=5 Then ppp=100
- If ppp>0 Then
- ppp=ppp-1
- If ppp=2 Then Exited=True
- End If
- Update_Players_Views()
- Flip
- Wend
- FreeEntity dummy
- ;Check High Scores
- Select gametype
- Case 1 ;One player Game
- Check_Highs(score(0),1)
- Case 2 ;two player Game
- If player1type<=4 Then
- Check_Highs(score(0),1)
- End If
- If player2type<=4 Then
- Check_Highs(score(1),2)
- End If
- End Select
- FreeEntity lit
- FreeEntity Tunnel_Mesh
- FreeEntity Background
- Free_Smoke()
- Free_Shots()
- Delete_Objects()
- Delete_Players()
- FlushMouse
- VWait 50
- Goto MainMenu
- ;
- ;
- Function Do_GameOver_Overlay()
- If Go1_Timer>0 Then
- Go1_Timer=Go1_timer-1
- If Go1_Timer>2 Then
- If Num_Players=1 Then pos=0 Else pos=GraphicsHeight()/4
- If Go2_Timer>2 Then pos=0
- DrawImage gover_image,0,pos
- Else
- If Num_Players=0 Then
- Exited=True
- Else
- lastplayer=Resize_Last_Player()
- End If
- End If
- End If
- If Go2_Timer>0 Then
- Go2_Timer=Go2_timer-1
- If Go2_Timer>2 Then
- If Num_Players=1 Then pos=GraphicsHeight()/2 Else pos=GraphicsHeight()/4
- If Go1_Timer>2 Then pos=GraphicsHeight()/2
- DrawImage gover_image,0,pos
- Else
- If Num_Players=0 Then
- Exited=True
- Else
- lastplayer=Resize_Last_Player()
- End If
- End If
- End If
- Return lastplayer
- End Function
- ;
- ;
- Function Update_Shield_Texture()
- shield_tex_pos=shield_tex_pos+.01
- If shield_tex_pos>1 Then shield_tex_pos=shield_tex_pos-1
- PositionTexture shield_tex,shield_tex_pos,shield_tex_pos
- End Function
- ; Create Scrolling tunnel No entity movement done
- ; at all. Texture scrolling screates the effect
- ; Makes controling bad guys a whole lot easier..
- ;
- Function Create_Tunnel()
- Tunnel_mesh=CreateCylinder(12)
- FlipMesh Tunnel_mesh
- ScaleMesh Tunnel_mesh,500,12000,500
- RotateEntity Tunnel_mesh,90,0,0
- EntityTexture Tunnel_mesh,Tunnel_tex,0,0
- EntityType tunnel_mesh,TYPE_TUNNEL
- PositionEntity tunnel_mesh,0,0,11400
- EntityColor tunnel_mesh,255,100,0
- t_r1=255:ta_r1=t_r1
- t_g1=100:ta_g1=t_g1
- t_b1=0:ta_b1=t_b1
- BackGround=CreateCylinder(12)
- FlipMesh BackGround
- ScaleMesh BackGround,510,12000,510
- RotateEntity BackGround,90,0,0
- EntityTexture BackGround,tex0,0,0
- PositionEntity BackGround,0,0,11400
- EntityColor BackGround,0,255,255
- t_r2=0:ta_r2=t_r2
- t_g2=255:ta_g2=t_g2
- t_b2=255:ta_b2=t_b2
- End Function
- Function Change_Tunnel_Colors()
- If t_r1>ta_r1 Then t_r1=t_r1-1
- If t_g1>ta_g1 Then t_g1=t_g1-1
- If t_b1>ta_b1 Then t_b1=t_b1-1
- If t_r2>ta_r2 Then t_r2=t_r2-1
- If t_g2>ta_g2 Then t_g2=t_g2-1
- If t_b2>ta_b2 Then t_b2=t_b2-1
- If t_r1<ta_r1 Then t_r1=t_r1+1
- If t_g1<ta_g1 Then t_g1=t_g1+1
- If t_b1<ta_b1 Then t_b1=t_b1+1
- If t_r2<ta_r2 Then t_r2=t_r2+1
- If t_g2<ta_g2 Then t_g2=t_g2+1
- If t_b2<ta_b2 Then t_b2=t_b2+1
- EntityColor Tunnel_mesh,t_r1,t_g1,t_b1
- EntityColor Background,t_r2,t_g2,t_b2
- End Function
- Function Alter_Tunnel_Colors()
- ta_r1=Rand(10,255):ta_g1=Rand(10,255):ta_b1=Rand(10,255)
- ta_r2=Rand(10,255):ta_g2=Rand(10,255):ta_b2=Rand(10,255)
- End Function
- Function Resize_Images(Width,Height)
- ResizeImage TitleScreen1,Width,Height
- ResizeImage gover_image,Width,Height/2
- End Function
- ;
- ;
- ;
- Function Load_media()
- Tunnel_tex=LoadTexture("tex0.bmp",6):ScaleTexture Tunnel_tex,1,2
- tex0=LoadTexture("tex0.bmp"):ScaleTexture tex0,.5,.5
- Shield_tex=LoadTexture("tex1.bmp",3)
- Rock_Tex=LoadTexture("stone04.bmp")
- ;
- ; Global Meshes
- ;
- Aster_mesh=LoadMesh("asteroid.3ds"):EntityTexture Aster_Mesh,Rock_tex
- ScaleMesh Aster_mesh,.005,.005,.005
- HideEntity Aster_Mesh
- ;
- player_mesh=LoadMesh("hfighter.3ds")
- ScaleEntity player_mesh,8,9,11
- HideEntity player_mesh
- ;
- shield_mesh=CreateSphere()
- ScaleEntity shield_mesh,55,35,60
- EntityTexture shield_mesh,shield_tex
- HideEntity shield_mesh
- ;
- missile1_mesh=LoadMesh("missile1.3ds")
- RotateMesh missile1_mesh,Pi,0,0
- ScaleMesh missile1_mesh,2,2,2
- temptex=LoadTexture("tex2.bmp")
- EntityTexture missile1_mesh,temptex
- HideEntity missile1_mesh
- FreeTexture temptex
- ;
- Bad01_mesh=CreateSphere()
- HideEntity bad01_mesh
-
- claw_anim_mesh=LoadAnimMesh("claw.3ds")
- HideEntity claw_anim_mesh
- ;
- ;
- ; Sprites
- ;
- shot1_spr=LoadSprite("shot1.bmp")
- HideEntity shot1_spr
- ScaleSprite shot1_spr,32,16
- ;
- For a=1 To 4
- b$="smoke"+a+".bmp"
- smoke_spr(a)=LoadSprite(b$)
- HideEntity smoke_spr(a)
- Next
- target_spr=LoadSprite("target.bmp"):HideEntity target_spr
-
- ;
- ; 2DImages
- Titlescreen1=LoadImage("title.bmp")
- Mousepointer=LoadImage("mouse.bmp"):MaskImage MousePointer,255,255,0
- Lives_Image=LoadImage("lives.bmp")
- Gover_Image=LoadImage("go.bmp")
- ;
-
- ;
- ;Sounds
- Shoot1_wave=LoadSound("shoot.wav")
- Explode_Wave=LoadSound("boom.wav")
- End Function
- Function Free_media()
- If Tunnel_tex<>0 Then FreeTexture tunnel_tex:tunnel_tex=0
- If tex0<>0 Then FreeTexture tex0:tex0=0
- If Shield_tex<>0 Then FreeTexture Shield_Tex:Shield_Tex=0
- If Rock_Tex<>0 Then FreeTexture Rock_Tex:Rock_Tex=0
- If temptex<>0 Then FreeTexture temptex:temptex=0
- ;
- ; Global Meshes
- ;
- If Aster_mesh<>0 Then FreeEntity Aster_mesh:Aster_Mesh=0
- If player_mesh<>0 Then FreeEntity player_mesh:player_mesh=0
- If shield_mesh<>0 Then FreeEntity shield_mesh:shield_mesh=0
- If missile1_mesh<>0 Then FreeEntity missile1_mesh:missile1_mesh=0
- ;
- If Bad01_mesh<>0 Then FreeEntity bad01_mesh:Bad01_mesh=0
- If Claw_Anim_Mesh<>0 Then FreeEntity Claw_Anim_Mesh:Claw_Anim_Mesh=0
- ;
- ;
- ; Sprites
- ;
- If shot1_spr<>0 Then FreeEntity shot1_spr:shot1_spr=0
- ;
- For a=1 To 4
- If smoke_spr(a)<>0 Then FreeEntity smoke_spr(a):smoke_spr(a)=0
- Next
- If target_spr<>0 Then FreeEntity target_spr:Target_Spr=0
- ;
- ; 2DImages
- If Titlescreen1<>0 Then FreeImage Titlescreen1:Titlescreen1=0
- If Mousepointe<>0 Then FreeImage MousePointer:MousePointer=0
- If Lives_Image<>0 Then FreeImage Lives_image:Lives_image=0
- If Gover_Image<>0 Then FreeImage Gover_Image:Gover_Image=0
- ;
- ;Sounds
- If Shoot1_wave<>0 Then FreeSound Shoot1_wave:Shoot1_wave=0
- If Explode_Wave<>0 Then FreeSound Explode_Wave:Explode_Wave=0
- End Function
- ;
- ; Trick scrolling
- ; Move the texture
- Function Do_Tunnel_Scroll(texture,div#)
- Tunnel_Texture_Coord=Tunnel_Texture_Coord+Scroll_speed
- If Tunnel_Texture_Coord>1 Then Tunnel_Texture_Coord=Tunnel_Texture_Coord-1
- PositionTexture texture,Tunnel_Texture_Coord/div,Tunnel_Texture_Coord
- End Function
- ;
- ; Control an entity
- ;
- ; Player functions
- ; typ = 1 Mouse controled player
- ; 2 ana Joy Controlled player
- ; 3 dig Joy controlled player
- ; 4 keyboard controlled player
- ; 5 CPU Controlled player
- ; 6 internet player ** TO DO **
- Function Do_Control()
- For a.play=Each play
- If a\dead=False Then
- Select a\con
- Case 1 ;Mouse Controlled
- Do_MouseMove(a)
- Case 2 ;analog controlled
- Do_JoyMove(a)
- Case 3 ;directional joy controlled
- Do_JoyDirMove(a)
- Case 4 ;keyboard controlled
- Do_KeyMove(a)
- Case 5 ;CPU Controlled
- CPU_Move(a)
- Case 6 ;Internet controlled
- End Select
- End If
- Next
- End Function
- Function Do_MouseMove(a.play)
- dx#=MouseXSpeed()/2
- dy#=MouseYSpeed()/2
- If dx>0 Then a\roll=a\roll-4
- If dx<0 Then a\roll=a\roll+4
- If dy>0 Then a\pich=a\pich-4
- If dy<0 Then a\pich=a\pich+4
- If a\pich<>0 Then a\pich=a\pich*.85
- If a\roll<>0 Then a\roll=a\roll*.85
- RotateEntity a\piv,a\pich,0,a\roll
- TranslateEntity a\piv,dx,dy,0
- MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
- If MouseDown(1) Then Add_Shot(a\piv,1,10,a)
- End Function
- Function Do_JoyMove(a.play)
- dx#=JoyX()
- dy#=JoyY()
- If dx>-Dead_BandX And dx<Dead_BandX Then dx=0
- If dy>-Dead_BandY And dy<Dead_BandY Then dy=0
- dx=dx*5
- dy=dy*5
- If dx>0 Then a\roll=a\roll-4
- If dx<0 Then a\roll=a\roll+4
- If dy>0 Then a\pich=a\pich-4
- If dy<0 Then a\pich=a\pich+4
- If a\pich<>0 Then a\pich=a\pich*.85
- If a\roll<>0 Then a\roll=a\roll*.85
- RotateEntity a\piv,a\pich,0,a\roll
- TranslateEntity a\piv,dx,dy,0
- If JoyDown(1) Then Add_Shot(a\piv,1,10,a)
- End Function
- Function Do_JoyDirMove(a.play)
- dx#=JoyXDir()*5
- dy#=JoyYDir()*5
- If dx>0 Then a\roll=a\roll-4
- If dx<0 Then a\roll=a\roll+4
- If dy>0 Then a\pich=a\pich-4
- If dy<0 Then a\pich=a\pich+4
- If a\pich<>0 Then a\pich=a\pich*.85
- If a\roll<>0 Then a\roll=a\roll*.85
- RotateEntity a\piv,a\pich,0,a\roll
- TranslateEntity a\piv,dx,dy,0
- If JoyDown(1) Then Add_Shot(a\piv,1,10,a)
- End Function
- Function Do_KeyMove(a.play)
- If KeyDown(Keys(1)) Then dx#=-5
- If KeyDown(Keys(2)) Then dx#=5
- If KeyDown(Keys(3)) Then dy#=-5
- If KeyDown(Keys(4)) Then dy#=5
- If dx>0 Then a\roll=a\roll-4
- If dx<0 Then a\roll=a\roll+4
- If dy>0 Then a\pich=a\pich-4
- If dy<0 Then a\pich=a\pich+4
- If a\pich<>0 Then a\pich=a\pich*.85
- If a\roll<>0 Then a\roll=a\roll*.85
- RotateEntity a\piv,a\pich,0,a\roll
- TranslateEntity a\piv,dx,dy,0
- If KeyDown(keys(5)) Then Add_Shot(a\piv,1,10,a)
- End Function
- Function CPU_Move(a.play)
- b.Obj=Find_Closest_Target()
- If b<>Null Then
- dx#=(EntityX(b\piv)-EntityX(a\piv))/60
- dy#=(EntityY(b\piv)-EntityY(a\piv))/60
- If dx>0 Then a\roll=a\roll-2
- If dx<0 Then a\roll=a\roll+2
- If dy>0 Then a\pich=a\pich-2
- If dy<0 Then a\pich=a\pich+2
- If a\pich<>0 Then a\pich=a\pich*.85
- If a\roll<>0 Then a\roll=a\roll*.85
- RotateEntity a\piv,a\pich,0,a\roll
- TranslateEntity a\piv,dx,dy,0
- ent=LinePick(EntityX(a\piv),EntityY(a\piv),EntityZ(a\piv)+50,0,0,5000)
- If dx>-2.5 And dx<2.5 Then
- If dy>-2.5 And dy<2.5 Then
- Add_Shot(a\piv,1,10,a)
- End If
- End If
- End If
- End Function
- Function Find_Obj_From_Ent.Obj(ent)
- For a.obj=Each obj
- If a\piv=ent Or a\ent=ent Then Return a
- Next
- Return Null
- End Function
- Function Find_Closest_Target.Obj()
- z#=1000000
- minz#=100
- For a.Obj=Each Obj
- If EntityZ(a\piv,True)>0 Then
- If EntityZ(a\piv,True)<z And EntityZ(a\piv,True)>minz Then target.Obj=a:z=EntityZ(a\piv,True)
- End If
- Next
- Return target
- End Function
- ;
- Type play
- Field name$
- Field rate
- Field ox#
- Field cam
- Field con
- Field piv
- Field ent
- Field shield_ent
- Field glow#
- Field dead
- Field pich#
- Field roll#
- Field shield#
- Field score
- Field waiting
- Field id
- ;
- Field tlx
- Field tly
- Field brx
- Field bry
- Field lives
- End Type
- ;
- ;
- ;
- Type shot
- Field typ
- Field ent
- Field life#
- Field dx#
- Field dy#
- Field dz#
- Field speed#
- Field ang#
- Field firer.play
- Field target.Obj
- End Type
- ;
- ; Object
- ;
- ; 1-3 are asteroids
- Type Obj
- Field typ
- Field piv
- Field ent
- Field val
- Field col
- Field cd
- Field speed#
- Field dx#
- Field dy#
- Field ds#
- Field fx
- Field fy
- Field dir
- Field st
- Field cnt
- End Type
- ;
- ; Smoke Effect
- ;
- Type smoke
- Field alpha#
- Field reduct#
- Field ent
- Field size#
- Field rot#
- Field disp#
- End Type
- .MainMenu
- SetBuffer BackBuffer()
- Cls
- FlushMouse:FlushKeys
- Game_Start=False
- Exit_Game=False
- Options=False
- While Not Game_Start=True
- cntr=cntr+1
- If MouseXSpeed()+MouseYSpeed()<>0 Then cntr=0
- Cls
- DrawImage TitleScreen1,0,0
- sel=0
- If cntr<500 Then
- Draw_Menu(True,0,0)
- sel=Draw_Menu(False,-2,-2)
- If MouseHit(1) Then
- Select sel
- Case 1
- If gametype=1 Then gametype=2 Else gametype=1
- Case 2
- player1type=player1type+1
- If player1type>6 Then player1type=1
- If player2type=player1type Then player1type=player1type+1
- Case 3
- player2type=player2type+1
- If player2type>6 Then player2type=1
- If player2type=player1type Then player2type=player2type+1
- Case 4
- Game_Start=True
- Options=True
- Case 5
- Case 6
- If player1type<>6 And player2type<>6 Then
- Game_Start=True
- End If
- Case 7
- Exit_Game=True
- Game_Start=True
- End Select
- End If
- Else
- If cntr>1000 Then cntr=0
- Draw_Highs(True,0,0)
- Draw_Highs(False,-2,-2)
- End If
- DrawImage MousePointer,MouseX(),MouseY()
- Flip
- Wend
- cntr=0
- If Options=True Then Goto Options
- If Exit_Game=True Then Goto Exit_Game_Sub
- If Game_Start=True Then Goto Game_Start_Loop
- RuntimeError "Game Ended Abnormally"
- EndGraphics
- End
- ;
- ; Exit Game / Save Highs etc
- ; Do Credits
- .Exit_Game_Sub
- Save_Highscores()
- ChangeDir ".."
- EndGraphics
- End
- ;
- ;
- ;Save Highscores and options
- Function Load_Highscores()
- p=0
- file=ReadFile("../Highs/Highs.Hsr")
- For a=1 To 10
- Hn$(a)=ReadLine$(file)
- Hs(a)=ReadInt(file)
- Next
- G_Brightness=ReadInt(file)
- G_StartLives=ReadInt(file)
- G_Diff=ReadInt(file)
- G_CurrentGFX=ReadInt(file)
- End Function
- Function Save_Highscores()
- p=0
- file=WriteFile("../Highs/Highs.Hsr")
- For a=1 To 10
- WriteLine file,Hn$(a)
- WriteInt file,Hs(a)
- Next
- WriteInt file,G_Brightness
- WriteInt file,G_StartLives
- WriteInt file,G_Diff
- WriteInt file,G_CurrentGFX
- End Function
- Function Draw_Menu(col,ox,oy)
- sel=0
- For a=1 To 7
- b$=""
- If col=True Then Color 0,0,0 Else Color 255,255,255
- p=0
- Select a
- Case 1
- b$=Menu$(a)+GM_TYPE(gametype)
- Case 2
- b$=Menu$(a)+CN_TYPE(player1type)
- Case 3
- If gametype=2 Then
- b$=Menu$(a)+CN_TYPE(player2type)
- End If
- Default
- b$=Menu(a)
- End Select
- c#=(Float(a)*32)/2
- w=Len(b$)*8
- y=GraphicsHeight()/2
- y=((y-c)+a*32)-oy
- x=(GraphicsWidth()/2)-ox-(w/2)
- h=16
- If RectsOverlap(x,y,w,h,MouseX(),MouseY(),1,1) Then sel=a:p=1
- If p<>0 And col=False Then Color Rnd(255),Rnd(255),Rnd(255)
- Text x,y,b$
- Next
- Return sel
- End Function
- ;
- ;Draw High's
- Function Draw_Highs(col,ox,oy)
- For a=1 To 10
- If col=True Then Color 0,0,0 Else Color 255,255,255
- b$=a+" "+hn$(a)+" "+hs(a)
- c#=(Float(a)*32)/2
- w=Len(b$)*8
- y=GraphicsHeight()/2
- y=((y-c)+a*32)-oy
- x=(GraphicsWidth()/2)-ox-(w/2)
- h=16
- Text x,y,b$
- Next
- End Function
- Function Check_Highs(score,id)
- If score>hs(10) Then ; Got a high Score
- ps=0
- For a=10 To 1 Step -1
- If score>hs(a) Then
- ps=a
- hs(a+1)=hs(a)
- hn(a+1)=hn(a)
- End If
- Next
- If ps<>0 Then
- hs(ps)=score
- SetBuffer FrontBuffer()
- Cls
- DrawImage TitleScreen1,0,0
- Color 0,0,0
- Text 0,GraphicsHeight()/2,"Well Done Player "+id+". Your On the High Score Table",0,1
- Color 255,255,255
- Text 2,2+GraphicsHeight()/2,"Well Done Player "+id+". Your On the High Score Table",0,1
- Locate GraphicsWidth/2,GraphicsHeight()/2+16
- hn(ps)=Input$("Enter Your Name ?")
- SetBuffer BackBuffer()
- cntr=1000
- End If
- End If
- End Function
- .dats
- ;Game Type
- Data "One Player Game"
- Data "Two Player Game"
- ;Control Type
- Data "Mouse Control"
- Data "Analog Joystick"
- Data "Digital Joystick"
- Data "Keyboard (Not Recommended)"
- Data "CPU"
- Data "Network Game(Not Availible)"
- ;Menus
- Data "Game Type:"
- Data "Player One Control:"
- Data "Player Two Control:"
- Data "Options"
- Data ""
- Data "START GAME"
- Data "QUIT GAME"
- .highs
- Data "David Bird",100000
- Data "Made With",90000
- Data "The Great",80000
- Data "Blitz Basic3D",70000
- Data "(c)2001 David Bird",60000
- Data "Donna Bird",50000
- Data "Jessica Bird",40000
- Data "Rebecca Bird",30000
- Data "Daniel Bird",20000
- Data "David Bird",10000
- Data "",0
- .Options
- Create_Tunnel()
- OptTunnel=CopyEntity(Tunnel_Mesh):FreeEntity Tunnel_Mesh
- OptBackground=CopyEntity(Background):FreeEntity Background
- Optlight=CreateLight()
- TurnEntity OptLight,45,0,0
- OptCamera=CreateCamera()
- CameraRange Optcamera,1,25000
- While Not KeyDown(1)
- AmbientLight G_Brightness,G_Brightness,G_Brightness
- UpdateWorld
- RenderWorld
- G_Brightness=Draw_slider("Brightness",50,50,300,16,G_Brightness,255,5,50)
- G_StartLives=Draw_slider("Number of Lives",50,75,300,16,G_StartLives,5,1,150)
- If G_StartLives<1 Then G_StartLives=1
- G_Diff=Draw_slider("Difficulty",50,100,300,16,G_Diff,3,1,150)
- G_CurrentGFX=Draw_GFX_Selector(G_CurrentGFX,50,130)
- DrawImage MousePointer,MouseX(),MouseY()
-
- Text GraphicsWidth()/2,GraphicsHeight()-16,"Press Escape to Return to Main Menu",1,0
- Flip
- Wend
- If OptLight<>0 Then FreeEntity OptLight:OptLight=0
- If OptTunnel<>0 Then FreeEntity OptTunnel:OptTunnel=0
- If OptBackground<>0 Then FreeEntity OptBackground:OptBackground=0
- If OptCamera<>0 Then FreeEntity OptCamera:OptCamera=0
- Goto MainMenu
- Function Draw_slider(txt$,x,y,Ln#,hg,pos#,scale#,Stp,dely)
- sel=0
- Rect x,y,ln,hg,0
- Rect x+ln,y,16,hg,0:Text x+ln+8,y+(hg/2)-1,"-",1,1
- If RectsOverlap(x+ln,y,16,16,MouseX(),MouseY(),1,1) Then sel=1
- Rect x+ln+16,y,16,hg,0:Text x+ln+24,y+(hg/2)-1,"+",1,1
- If RectsOverlap(x+ln+16,y+(hg/2)-1,16,16,MouseX(),MouseY(),1,1) Then sel=2
- ps=(ln/scale)*pos
- Rect ps+x,y,2,hg,1
- Text x+ln+38,y,txt+" "+Int(Pos)
- newval=pos
- If MouseDown(1) And sel<>0 Then
- Delay dely
- If sel=1 And newval>0 Then newval=newval-stp
- If sel=2 And newval<scale Then newval=newval+stp
- End If
- If newval<0 Then newval=0
- If newval>scale Then newval=scale
- Return newval
- End Function
- Function Draw_GFX_Selector(current,x,y)
- Rect x-4,y-4,150,24,0
- sel=0
- Rect x+150,y-4,16,24,0:Text x+158,y+6,"-",1,1
- If RectsOverlap(x+150,y-4,16,24,MouseX(),MouseY(),1,1) Then sel=1
- Rect x+166,y-4,16,24,0:Text x+172,y+6,"+",1,1
- If RectsOverlap(x+166,y-4,16,24,MouseX(),MouseY(),1,1) Then sel=2
- Rect x+182,y-4,24,24,0:Text x+194,y+6,"GO",1,1
- If RectsOverlap(x+182,y-4,24,24,MouseX(),MouseY(),1,1) Then sel=3
- p.GfxMode=First GfxMode
- For r=1 To current
- p=After p
- Next
- Text x,y,p\t$
-
- If MouseDown(1) And sel<>0 Then
- Delay 100
- If sel=1 And current>1 Then current=current-1
- If sel=2 And current<Max_GFXModes Then current=current+1
- If sel=3 Then ;Reset GFXMODE
- If OptLight<>0 Then FreeEntity OptLight:OptLight=0
- If OptTunnel<>0 Then FreeEntity OptTunnel:OptTunnel=0
- If OptBackground<>0 Then FreeEntity OptBackground:OptBackground=0
- If OptCamera<>0 Then FreeEntity OptCamera:OptCamera=0
- Set_GFXMode()
- Create_Tunnel()
- OptTunnel=CopyEntity(Tunnel_Mesh):FreeEntity Tunnel_Mesh
- OptBackground=CopyEntity(Background):FreeEntity Background
- Optlight=CreateLight()
- TurnEntity OptLight,45,0,0
- OptCamera=CreateCamera()
- CameraRange Optcamera,1,25000
- End If
- End If
- Return current
- End Function
- Type GfxMode
- Field width,height,depth
- Field t$
- End Type
- Function Get_GFX_Modes()
- cnt=0
- For k=1 To CountGfxModes()
- If GfxMode3D(k)
- t.GfxMode=New GfxMode
- t\width=GfxModeWidth(k)
- t\height=GfxModeHeight(k)
- t\depth=GfxModeDepth(k)
- t\t$=t\width+","+t\height+","+t\Depth
- cnt=cnt+1
- EndIf
- Next
- Max_GFXModes=cnt-1
- End Function
- Function Set_GFXMode()
- m.GfxMode=First GfxMode
- For r=1 To G_CurrentGFX
- m=After m
- Next
- Free_Media()
- ClearCollisions
- Graphics3D m\width,m\height,m\depth,1
- SetBuffer BackBuffer()
- Load_Media()
- Text GraphicsWidth()/2,GraphicsHeight()/2,"Please Wait Initialising Graphics",1,1
- Flip
- Resize_Images(GraphicsWidth(),GraphicsHeight())
- ;Do Collision Table Here
- Collisions TYPE_CAM,TYPE_TUNNEL,2,2
- Collisions TYPE_PLAYER,TYPE_TUNNEL,2,2
- Collisions TYPE_ASTER,TYPE_PLAYER,1,2
- Collisions TYPE_PLAYER,TYPE_ASTER,1,2
- Collisions TYPE_SHOT1,TYPE_ASTER,1,1
- Collisions TYPE_PLAYER,TYPE_PLAYER,1,1
- Collisions TYPE_PLAYER,TYPE_CLAW,2,2
- End Function
|