Collisions problem

Übersicht BlitzBasic Beginners-Corner

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

 

Ardalic

Betreff: Collisions problem

BeitragMo, Apr 28, 2008 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich habe habe ein problem,
immer wenn ich mit dem Jet in ein objekt reinfliege geht es in die Luft
aber das Ufo kommt problemlos durch ich will das das Ufo aussen herum schwebt
Code: [AUSKLAPPEN]
Function InitCollisions()

   Collisions type_plane1_bullet,type_ufo,2,2
   Collisions type_ufo_bullet,type_plane1,2,2
   Collisions type_plane1,type_statue,2,2

   Collisions type_plane2_bullet,type_ufo,2,2
   Collisions type_ufo_bullet,type_plane2,2,2
   Collisions type_plane2,type_statue,2,2
   
   Collisions type_spark,type_ufo,1,1

End Function

Puccini

BeitragMo, Apr 28, 2008 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
eine frage:

sind die objekte starr oder bewegt?

du willst also das das ufo welches sich auf dein schiff zubewegt mit diesem kollidiert? und das schiff bewegt sich auch??

Very Happy
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39
 

Ardalic

BeitragMo, Apr 28, 2008 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
jo das schiff bewegt sich auch
 

Ardalic

BeitragDi, Apr 29, 2008 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry wegen doppelpost.
Hier ist der kommplette Code:
Code: [AUSKLAPPEN]

AppTitle "Alien War V0.1 Beta"

Global width=640,height=480,depth=16,mode=1
Graphics3D width,height,depth,mode
SetBuffer BackBuffer()

SeedRnd MilliSecs()


; --------------
; Menu variables
; --------------

; Menu background
Global logo,logo_width,logo_height,tile_y    ; Logo-related variables
Global cr#,cg#,cb#                      ; Current red, green, blue values
Global dr#,dg#,db#                      ; Destination red, green, blue values
Global sr#,sg#,sb#                      ; Step red, green, blue values
Global col,ct,fade=100                   ; Current colour, time, fade

; Menu text spacing
Global y_space#=height/18,option=4,screen
Global x_space=width/71,x_nos=((width/4)-((9*3)/2)),x_names=((width/2)-((9*5)/2)),x_scores=((width/1.33)-((9*5)/2))

; Graphics modes
Global count_gfx_modes=CountGfxModes(),gfx_mode_option,mode_option=1

; Arrays
Dim greyscale(0,0)
Dim gfx_modes(0,2)
Dim names$(11),scores(11) : scores(11)=0

; High score rank
Global rank


; ----------------------
; General game variables
; ----------------------

; Game-timing stuff
Const fps=60
Global elapsed,time,tween#,period=1000/fps

; Collision types
Const type_none=0,type_plane1=1,type_plane1_bullet=2,type_plane2=3,type_plane2_bullet=4,type_ufo=5,type_ufo_bullet=6,type_statue=7

; No of players
Global no_players

; Score values
Global pot1,bank1   ; Player 1
Global pot2,bank2   ; Player 2

; Game over values
Global game_over1=False,game_over1_delay   ; Player 1
Global game_over2,game_over2_delay         ; Player 2


; -----------------------------
; Lighting and camera variables
; -----------------------------

; Light and camera entities
Global light
Global main_cam1,top_cam1   ; Player 1
Global main_cam2,top_cam2   ; Player 2

; Camera 1 position values
Global cam1_x#,cam1_y#=1000,cam1_z#,cam1_ay#=180      ; Current values
Global cam1_dx#,cam1_dy#=1000,cam1_dz#,cam1_day#=180   ; Destination values

; Camera 2 position values
Global cam2_x#,cam2_y#=1000,cam2_z#,cam2_ay#=180      ; Current values
Global cam2_dx#,cam2_dy#=1000,cam2_dz#,cam2_day#=180   ; Destination values


; -----------------
; Scenery variables
; -----------------

; Scenery entities
Global sphinx,liberty,ground,ring,sky,sun,moon

; Senery textures
Global sand_tex,lights_tex,lights_multi_tex,sky_tex,night_sky_tex

; Pointers to scenery entities (sort of)
Global statue,solar,solar_y,solar_z,solar_scale,solar_scale_shake

; Scenery value
Global scenery

; Ring values
Global red_ring_x#=0,red_ring_z#=0,red_ring_radius#=625
Global orange_ring_x#=0,orange_ring_z#=2773.4375,orange_ring_radius#=1406.25
Global yellow_ring_x#=2578.125,yellow_ring_z#=898.4375,yellow_ring_radius#=1250
Global green_ring_x#=-2578.125,green_ring_z#=898.4375,green_ring_radius#=1093.75
Global blue_ring_x#=1601.5625,blue_ring_z#=-2187.5,blue_ring_radius#=937.5
Global pink_ring_x#=-1601.5625,pink_ring_z#=-2187.5,pink_ring_radius#=781.25


; ---------------
; Plane variables
; ---------------

; Plane entities
Global plane1,shield1   ; Player 1
Global plane2,shield2   ; Player 2

; Player 1 position values
Global plane1_x#,plane1_y#=1000,plane1_z#,plane1_ay#=180      ; Current values
Global plane1_dx#,plane1_dy#=1000,plane1_dz#,plane1_day#=180   ; Destination values

; Player 2 position values
Global plane2_x#,plane2_y#=1000,plane2_z#,plane2_ay#=180      ; Current values
Global plane2_dx#,plane2_dy#=1000,plane2_dz#,plane2_day#=180   ; Destination values

; Plane + camera curve values
Global curve_plane#=10,curve_cam#=15


; ---------------
; Enemy variables
; ---------------

; Enemy entities
Global mother_pivot,mother
Global orange_ufo,blue_ufo,green_ufo,pink_ufo,yellow_ufo
Global orange_shadow,blue_shadow,green_shadow,pink_shadow,yellow_shadow

; New ufos
Global mother_timer=MilliSecs(),ufo_count,new_ufo,no_ufos,max_ufos=15

; Ufo trail
Global trail_timer=MilliSecs(),trail_timer_reset=False


; -------------------
; Explosion variables
; -------------------

; Explosion entities
Global bullet,orange_spark,blue_spark,green_spark,pink_spark,yellow_spark,debris

; Points entities
Global points_200,points_200x2,points_200x4,points_200x6,points_200x8,points_200x10
Global points_400,points_400x2,points_400x4,points_400x6,points_400x8,points_400x10
Global points_600,points_600x2,points_600x4,points_600x6,points_600x8,points_600x10
Global points_800,points_800x2,points_800x4,points_800x6,points_800x8,points_800x10
Global points_1000,points_1000x2,points_1000x4,points_1000x6,points_1000x8,points_1000x10
Global points_bust

; Intensity of explosions
Global plane_intensity=100,ufo_intensity=50


; ----------------------
; Bonus camels variables
; ----------------------

; Camel entities
Global orange_camel,yellow_camel,green_camel,blue_camel,pink_camel

; Player 1 bonus values
Global plane1_bonus                                       ; Variable containing value of bonus collected
Global orange_bonus1_time,orange_bonus1_status
Global yellow_bonus1_time,yellow_bonus1_status,yellow_bonus1_pause
Global green_bonus1_time,green_bonus1_status
Global blue_bonus1_time,blue_bonus1_status
Global pink_bonus1_time,pink_bonus1_status

; Player 2 bonus values
Global plane2_bonus                                       ; Variable containing value of bonus collected
Global orange_bonus2_time,orange_bonus2_status
Global yellow_bonus2_time,yellow_bonus2_status,yellow_bonus2_pause
Global green_bonus2_time,green_bonus2_status
Global blue_bonus2_time,blue_bonus2_status
Global pink_bonus2_time,pink_bonus2_status


; -------------------------------
; Fonts + music + sound variables
; -------------------------------

; Fonts
Global small_font,large_font

; Music
Global music

; Sounds
Global explode


; -----
; Types
; -----

Type plane1_bullet
   Field entity,alpha#
End Type

Type plane2_bullet
   Field entity,alpha#
End Type

Type ufo
   Field entity,shadow,colour,target,x#,y#,z#,dx#,dy#,dz#,count
End Type

Type trail
   Field entity,alpha#,count
End Type

Type ufo_bullet
   Field entity,alpha#
End Type

Type bullet_trail
   Field entity,alpha#
End Type

Type shadow
   Field entity,scale#,alpha#
End Type

Type spark
   Field entity,alpha#,y_speed#
End Type

Type points
   Field entity,scale#,alpha#
End Type

Type camel
   Field entity,colour,alpha#
End Type


; -------------
; Pre-main loop
; -------------

Include "menus.bb"
Include "scenery.bb"
Include "player2.bb"

InitMenus()
LoadMedia()
CreateEntities()
InitCollisions()


; ---------
; Main loop
; ---------

While Not KeyHit(1)

   Background()

   ; Screen functions
   Select screen
      Case 4 : no_players=1 : Game()
      Case 5 : no_players=2 : Game()
      Case 6 : HighScores()
      Case 7 : Options()
      Default : Credits()
   End Select
   
   Flip
   
Wend

End ; End of program.


; -------------
; Game Function
; -------------

Function Game()

   ; Use random scenery
   scenery=1-scenery
   If scenery=1 Then Egypt()
   If scenery=0 Then USA()

   StartGame()

   While KeyHit(1)<>True And (game_over1_delay<=120 Or game_over2_delay<=120)

      Repeat
         elapsed=MilliSecs()-time
      Until elapsed
   
      tween#=Float(elapsed)/Float(period)
   
      While tween>=1
         tween=tween-1
         time=time+period
         If tween<1 Then CaptureWorld
         UpdateGame()
         UpdateWorld
      Wend
   
      RenderWorld ;tween      
      Render2D()
      Flip
      
   Wend

   EndGame()
   
   If screen<>6 Then screen=0

End Function


; --------------------
; Update game function
; --------------------

Function UpdateGame()

   If game_over1=False
      GameInput1()
      UpdatePlane1()
      UpdateCamels1()
      CheckCollisions1()
   Else
      game_over1_delay=game_over1_delay+1
   EndIf
   
   ; 2 player only
   If no_players=2
      If game_over2=False
         GameInput2()
         UpdatePlane2()
         UpdateCamels2()
         CheckCollisions2()
      Else
         game_over2_delay=game_over2_delay+1
      EndIf
   EndIf

   UpdateMother()
   UpdateUFO()
   UpdateExplosions()
   UpdateExtras()

End Function


; -------------------
; Start game function
; -------------------

Function StartGame()

   no_ufos=0
   ufo_count=0
   
   game_over2_delay=1000 ; Make sure it's game over for player 2 if we are having a one-player game!

   game_over1=False
   game_over1_delay=0

   plane1_x#=0
   plane1_z#=0
   plane1_ay#=180
   
   plane1_dx#=0
   plane1_dz#=0
   plane1_day#=180
   
   cam1_x#=0
   cam1_z#=0
   cam1_ay#=180
   
   cam1_dx#=0
   cam1_dz#=0
   cam1_day#=180
   
   pot1=0
   bank1=0
   
   orange_bonus1_time=0
   yellow_bonus1_time=0
   green_bonus1_time=0
   blue_bonus1_time=0
   pink_bonus1_time=0
   
   CameraViewport main_cam1,0,0,width,height

   ShowEntity plane1 : PositionEntity plane1,0,plane1_y#,0 : ResetEntity plane1
   HideEntity plane2
   HideEntity main_cam2
   HideEntity top_cam2
   
   If no_players=2
   
      game_over2=False
      game_over2_delay=0

      plane2_x#=0
      plane2_z#=0
      plane2_ay#=180
   
      plane2_dx#=0
      plane2_dz#=0
      plane2_day#=180
   
      cam2_x#=0
      cam2_z#=0
      cam2_ay#=180
   
      cam2_dx#=0
      cam2_dz#=0
      cam2_day#=180
      
      pot2=0
      bank2=0
   
      orange_bonus2_time=0
      yellow_bonus2_time=0
      green_bonus2_time=0
      blue_bonus2_time=0
      pink_bonus2_time=0
   
      ; Resize the already active player 1 camera viewport for 2-player game
      CameraViewport main_cam1,0,0,width,(height/2)

      ShowEntity main_cam2
      ShowEntity top_cam2
      ShowEntity plane2 : PositionEntity plane2,0,plane2_y#,0 : ResetEntity plane2
   
   EndIf

   SetFont large_font
   StopChannel music
   music=PlayMusic("Music.mp3")
   
   time=MilliSecs()-period

End Function


; -----------------
; End game function
; -----------------

Function EndGame()

   For p1.plane1_bullet=Each plane1_bullet
      FreeEntity p1\entity
      Delete p1
   Next

   For p2.plane2_bullet=Each plane2_bullet
      FreeEntity p2\entity
      Delete p2
   Next

   For u.ufo=Each ufo
      FreeEntity u\entity
      FreeEntity u\shadow
      Delete u
   Next

   For t.trail=Each trail
      FreeEntity t\entity
      Delete t
   Next

   For ub.ufo_bullet=Each ufo_bullet
      FreeEntity ub\entity
      Delete ub
   Next

   For b.bullet_trail=Each bullet_trail
      FreeEntity b\entity
      Delete b
   Next

   For s.shadow=Each shadow
      FreeEntity s\entity
      Delete s
   Next

   For sp.spark=Each spark
      FreeEntity sp\entity
      Delete sp
   Next

   For po.points=Each points
      FreeEntity po\entity
      Delete po
   Next

   For c.camel=Each camel
      FreeEntity c\entity
      Delete c
   Next

   SetFont small_font
   StopChannel music
   music=PlayMusic("tune1.mid")

   FlushKeys

End Function


; -------------------
; Load media function
; -------------------

Function LoadMedia()

   ChangeDir "media"
   explode=LoadSound("explode.wav")
   small_font=LoadFont("courier",16)
   large_font=LoadFont("arial black",(width+height)/23.3)

End Function


; ------------------------
; Create entities function
; ------------------------

Function CreateEntities()

   ; Create light
   light=CreateLight()
   RotateEntity light,45,0,0

   ; Create main cam 1
   main_cam1=CreateCamera()
   CameraRange main_cam1,1,9995
   CameraFogRange main_cam1,5000,9995
   CameraFogMode main_cam1,False

   ; Create top cam 1
   top_cam1=CreateCamera()
   CameraClsColor top_cam1,96,160,248
   CameraViewport top_cam1,(width+height)/140,(width+height)/140,(width+height)/8.75,(width+height)/8.75
   CameraRange top_cam1,1,1100
   MoveEntity top_cam1,0,50,0
   TurnEntity top_cam1,90,0,0

   ; Create main cam 2
   main_cam2=CreateCamera()
   CameraViewport main_cam2,0,(height/2),width,(height/2)
   CameraRange main_cam2,1,9995
   CameraFogRange main_cam2,5000,9995
   CameraFogMode main_cam2,1
   HideEntity main_cam2

   ; Create top cam 2
   top_cam2=CreateCamera()
   CameraClsColor top_cam2,96,160,248
   CameraViewport top_cam2,(width+height)/140,(height/2)+((width+height)/140),(width+height)/8.75,(width+height)/8.75
   CameraRange top_cam2,1,1100
   MoveEntity top_cam2,0,50,0
   TurnEntity top_cam2,90,0,0
   HideEntity top_cam2

   ; Create ground mesh
   ground=CreatePlane()
   
   ; Load sand texture
   sand_tex=LoadTexture("sand.bmp")
   ScaleTexture sand_tex,100,100
   
   ; Load lights texture
   lights_tex=LoadTexture("lights.bmp")
   ScaleTexture lights_tex,1000,1000
   
   ; Load lights texture again for multi-texturing purposes
   lights_multi_tex=LoadTexture("lights.bmp")
   ScaleTexture lights_multi_tex,1000,1000
   
   ; Create ring patterns mesh
   ring=CreateMesh()
   ring_surf=CreateSurface(ring)
   AddVertex(ring_surf,-5000,1,-5000,0,0)
   AddVertex(ring_surf,-5000,1,5000,0,1)
   AddVertex(ring_surf,5000,1,5000,1,1)
   AddVertex(ring_surf,5000,1,-5000,1,0)
   AddTriangle(ring_surf,0,1,2)
   AddTriangle(ring_surf,0,2,3)
   ring_tex=LoadTexture("ring.bmp",3)
   EntityTexture ring,ring_tex
   EntityFX ring,1

   ; Create sky mesh
   sky=CreateSphere()
   ScaleMesh sky,5000,2750,5000
   FlipMesh sky
   EntityFX sky,1
   EntityOrder sky,1
   
   ; Load sky texture
   sky_tex=LoadTexture("clouds.bmp")

   ; Load night sky texture
   night_sky_tex=LoadTexture("clouds_night.bmp")

   ; Load Sphinx mesh
   sphinx=LoadMesh("sphinx.x")
   EntityShininess sphinx,0.5
   EntityType sphinx,type_statue
   PositionEntity sphinx,0,0,0

   ; Load Statue of Liberty mesh
   liberty=LoadMesh("stat_lib.x")
   ScaleMesh liberty,10,10,10
   EntityType liberty,type_statue
   PositionEntity liberty,0,365,0

   ; Load plane 1 mesh
   plane1=LoadMesh("plane.x")
   EntityShininess plane1,1
   EntityRadius plane1,2
   EntityType plane1,type_plane1
   PositionEntity plane1,0,250,0
   ResetEntity plane1

   ; Create plane 2 mesh - create before shield1 so that shield1 is not copied too
   plane2=CopyEntity(plane1)
   EntityType plane2,type_plane2
   
   ; Create plane 1 shield mesh
   shield1=CreateSphere(16,plane1)
   ScaleEntity shield1,10,10,10
   EntityColor shield1,0,0,255
   EntityShininess shield1,1

   ; Create plane 2 shield mesh
   shield2=CopyEntity(shield1,plane2)
   EntityColor shield2,255,0,0

   ; Create debris mesh
   debris=CreateMesh()
   debris_surf=CreateSurface(debris)
   AddVertex(debris_surf,Sin(240)*5,Cos(240)*5,0)
   AddVertex(debris_surf,Sin(0)*5,Cos(0)*5,0)
   AddVertex(debris_surf,Sin(120)*5,Cos(120)*5,0)
   AddVertex(debris_surf,Sin(240)*5,Cos(240)*5,0.001)
   AddVertex(debris_surf,Sin(0)*5,Cos(0)*5,0.001)
   AddVertex(debris_surf,Sin(120)*5,Cos(120)*5,0.001)
   AddTriangle(debris_surf,0,1,2)
   AddTriangle(debris_surf,3,5,4)
   HideEntity debris

   ; Create mother pivot + mesh
   mother_pivot=CreatePivot()
   PositionEntity mother_pivot,0,1040,0
   mother=LoadMesh("mother.x",mother_pivot)
   ScaleMesh mother,0.1,0.1,0.1
   MoveEntity mother,4880,0,0

   ; Load orange ufo mesh
   orange_ufo=LoadMesh("orange_ufo.x")
   ScaleMesh orange_ufo,20,20,20
   EntityShininess orange_ufo,1
   EntityRadius orange_ufo,50
   EntityType orange_ufo,type_ufo
   HideEntity orange_ufo

   ; Load yellow ufo mesh
   yellow_ufo=LoadMesh("yellow_ufo.x")
   ScaleMesh yellow_ufo,20,20,20
   EntityShininess yellow_ufo,1
   EntityRadius yellow_ufo,50
   EntityType yellow_ufo,type_ufo
   HideEntity yellow_ufo
   
   ; Load green ufo mesh
   green_ufo=LoadMesh("green_ufo.x")
   ScaleMesh green_ufo,20,20,20
   EntityShininess green_ufo,1
   EntityRadius green_ufo,50
   EntityType green_ufo,type_ufo
   HideEntity green_ufo

   ; Load blue ufo mesh
   blue_ufo=LoadMesh("blue_ufo.x")
   ScaleMesh blue_ufo,20,20,20
   EntityShininess blue_ufo,1
   EntityRadius blue_ufo,50
   EntityType blue_ufo,type_ufo
   HideEntity blue_ufo

   ; Load pink ufo mesh
   pink_ufo=LoadMesh("pink_ufo.x")
   ScaleMesh pink_ufo,20,20,20
   EntityShininess pink_ufo,1
   EntityRadius pink_ufo,50
   EntityType pink_ufo,type_ufo
   HideEntity pink_ufo

   ; Create orange shadow mesh
   orange_shadow=CreateMesh()
   orange_shadow_surf=CreateSurface(orange_shadow)
   AddVertex(orange_shadow_surf,-50,0,-50,0,0)
   AddVertex(orange_shadow_surf,-50,0,50,0,1)
   AddVertex(orange_shadow_surf,50,0,50,1,1)
   AddVertex(orange_shadow_surf,50,0,-50,1,0)
   AddTriangle(orange_shadow_surf,0,1,2)
   AddTriangle(orange_shadow_surf,0,2,3)
   orange_spark_tex=LoadTexture("orange_spark.bmp")
   EntityTexture orange_shadow,orange_spark_tex
   EntityBlend orange_shadow,3
   HideEntity orange_shadow

   ; Create yellow shadow mesh
   yellow_shadow=CopyEntity(orange_shadow)
   yellow_spark_tex=LoadTexture("yellow_spark.bmp")
   EntityTexture yellow_shadow,yellow_spark_tex
   HideEntity yellow_shadow
   
   ; Create green shadow mesh
   green_shadow=CopyEntity(orange_shadow)
   green_spark_tex=LoadTexture("green_spark.bmp")
   EntityTexture green_shadow,green_spark_tex
   HideEntity green_shadow

   ; Create blue shadow mesh
   blue_shadow=CopyEntity(orange_shadow)
   blue_spark_tex=LoadTexture("blue_spark.bmp")
   EntityTexture blue_shadow,blue_spark_tex
   HideEntity blue_shadow

   ; Create pink shadow mesh
   pink_shadow=CopyEntity(orange_shadow)
   pink_spark_tex=LoadTexture("pink_spark.bmp")
   EntityTexture pink_shadow,pink_spark_tex
   HideEntity pink_shadow

   ; Create orange camel mesh
   orange_camel=LoadMesh("camel.x")
   ScaleMesh orange_camel,30,30,30
   PaintMesh orange_camel,CreateBrush()
   EntityColor orange_camel,255,102,0
   HideEntity orange_camel

   ; Create yellow camel mesh
   yellow_camel=CopyEntity(orange_camel)
   EntityColor yellow_camel,255,255,0
   HideEntity yellow_camel
   
   ; Create green camel mesh
   green_camel=CopyEntity(orange_camel)
   EntityColor green_camel,0,255,0
   HideEntity green_camel

   ; Create blue camel mesh
   blue_camel=CopyEntity(orange_camel)
   EntityColor blue_camel,0,255,255
   HideEntity blue_camel
   
   ; Create pink camel mesh
   pink_camel=CopyEntity(orange_camel)
   EntityColor pink_camel,255,0,255
   HideEntity pink_camel

   ; Load sun sprite
   sun=LoadSprite("big_spark.bmp")

   ; Load moon sprite
   moon=LoadSprite("moon.bmp",3)

   ; Load bullet sprite
   bullet=LoadSprite("orange_spark.bmp")
   ScaleSprite bullet,10,10
   EntityRadius bullet,5
   EntityType bullet,type_plane1_bullet
   HideEntity bullet

   ; Load orange spark sprite - acts as ufo bullet and ufo explosion spark
   orange_spark=LoadSprite("orange_spark.bmp")
   ScaleSprite orange_spark,10,10
   HideEntity orange_spark

   ; Load yellow spark sprite - acts as ufo bullet and ufo explosion spark
   yellow_spark=LoadSprite("yellow_spark.bmp")
   ScaleSprite yellow_spark,10,10
   HideEntity yellow_spark

   ; Load green spark sprite - acts as ufo bullet and ufo explosion spark
   green_spark=LoadSprite("green_spark.bmp")
   ScaleSprite green_spark,10,10
   HideEntity green_spark

   ; Load blue spark sprite - acts as ufo bullet and ufo explosion spark
   blue_spark=LoadSprite("blue_spark.bmp")
   ScaleSprite blue_spark,10,10
   HideEntity blue_spark

   ; Load pink spark sprite - acts as ufo bullet and ufo explosion spark
   pink_spark=LoadSprite("pink_spark.bmp")
   ScaleSprite pink_spark,10,10
   HideEntity pink_spark

   ; Load 200 points sprite
   points_200=LoadSprite("200.bmp",3)
   EntityBlend points_200,1
   HideEntity points_200

   ; Create 200x2 points sprite
   points_200x2=LoadSprite("200x2.bmp",3)
   EntityBlend points_200x2,1
   HideEntity points_200x2

   ; Create 200x4 points sprite
   points_200x4=LoadSprite("200x4.bmp",3)
   EntityBlend points_200x4,1
   HideEntity points_200x4

   ; Create 200x6 points sprite
   points_200x6=LoadSprite("200x6.bmp",3)
   EntityBlend points_200x6,1
   HideEntity points_200x6

   ; Create 200x8 points sprite
   points_200x8=LoadSprite("200x8.bmp",3)
   EntityBlend points_200x8,1
   HideEntity points_200x8

   ; Create 200x10 points sprite
   points_200x10=LoadSprite("200x10.bmp",3)
   EntityBlend points_200x10,1
   HideEntity points_200x10

   ; Create 400 points sprite
   points_400=LoadSprite("400.bmp",3)
   EntityBlend points_400,1
   HideEntity points_400

   ; Create 400x2 points sprite
   points_400x2=LoadSprite("400x2.bmp",3)
   EntityBlend points_400x2,1
   HideEntity points_400x2

   ; Create 400x4 points sprite
   points_400x4=LoadSprite("400x4.bmp",3)
   EntityBlend points_400x4,1
   HideEntity points_400x4

   ; Create 400x6 points sprite
   points_400x6=LoadSprite("400x6.bmp",3)
   EntityBlend points_400x6,1
   HideEntity points_400x6

   ; Create 400x8 points sprite
   points_400x8=LoadSprite("400x8.bmp",3)
   EntityBlend points_400x8,1
   HideEntity points_400x8

   ; Create 400x10 points sprite
   points_400x10=LoadSprite("400x10.bmp",3)
   EntityBlend points_400x10,1
   HideEntity points_400x10

   ; Create 600 points sprite
   points_600=LoadSprite("600.bmp",3)
   EntityBlend points_600,1
   HideEntity points_600

   ; Create 600x2 points sprite
   points_600x2=LoadSprite("600x2.bmp",3)
   EntityBlend points_600x2,1
   HideEntity points_600x2

   ; Create 600x4 points sprite
   points_600x4=LoadSprite("600x4.bmp",3)
   EntityBlend points_600x4,1
   HideEntity points_600x4

   ; Create 600x6 points sprite
   points_600x6=LoadSprite("600x6.bmp",3)
   EntityBlend points_600x6,1
   HideEntity points_600x6

   ; Create 600x8 points sprite
   points_600x8=LoadSprite("600x8.bmp",3)
   EntityBlend points_600x8,1
   HideEntity points_600x8

   ; Create 600x10 points sprite
   points_600x10=LoadSprite("600x10.bmp",3)
   EntityBlend points_600x10,1
   HideEntity points_600x10

   ; Create 800 points sprite
   points_800=LoadSprite("800.bmp",3)
   EntityBlend points_800,1
   HideEntity points_800

   ; Create 800x2 points sprite
   points_800x2=LoadSprite("800x2.bmp",3)
   EntityBlend points_800x2,1
   HideEntity points_800x2

   ; Create 800x4 points sprite
   points_800x4=LoadSprite("800x4.bmp",3)
   EntityBlend points_800x4,1
   HideEntity points_800x4

   ; Create 800x6 points sprite
   points_800x6=LoadSprite("800x6.bmp",3)
   EntityBlend points_800x6,1
   HideEntity points_800x6

   ; Create 800x8 points sprite
   points_800x8=LoadSprite("800x8.bmp",3)
   EntityBlend points_800x8,1
   HideEntity points_800x8

   ; Create 800x10 points sprite
   points_800x10=LoadSprite("800x10.bmp",3)
   EntityBlend points_800x10,1
   HideEntity points_800x10

   ; Create 1000 points sprite
   points_1000=LoadSprite("1000.bmp",3)
   EntityBlend points_1000,1
   HideEntity points_1000

   ; Create 1000x2 points sprite
   points_1000x2=LoadSprite("1000x2.bmp",3)
   EntityBlend points_1000x2,1
   HideEntity points_1000x2

   ; Create 1000x4 points sprite
   points_1000x4=LoadSprite("1000x4.bmp",3)
   EntityBlend points_1000x4,1
   HideEntity points_1000x4

   ; Create 1000x6 points sprite
   points_1000x6=LoadSprite("1000x6.bmp",3)
   EntityBlend points_1000x6,1
   HideEntity points_1000x6

   ; Create 1000x8 points sprite
   points_1000x8=LoadSprite("1000x8.bmp",3)
   EntityBlend points_1000x8,1
   HideEntity points_1000x8

   ; Create 1000x10 points sprite
   points_1000x10=LoadSprite("1000x10.bmp",3)
   EntityBlend points_1000x10,1
   HideEntity points_1000x10

   ; Create bust points sprite
   points_bust=LoadSprite("bust.bmp",3)
   EntityBlend points_bust,1
   HideEntity points_bust

End Function


; ------------------------
; Init collisions function
; ------------------------

Function InitCollisions()

   Collisions type_plane1_bullet,type_ufo,2,2
   Collisions type_ufo_bullet,type_plane1,2,2
   Collisions type_plane1,type_statue,2,2

   Collisions type_plane2_bullet,type_ufo,2,2
   Collisions type_ufo_bullet,type_plane2,2,2
   Collisions type_plane2,type_statue,2,2
   
   Collisions type_spark,type_ufo,1,1

End Function


; --------------------
; Game input1 function
; --------------------

Function GameInput1()

   ; Move up/down
   If KeyDown(200)=True Then plane1_dy=plane1_dy+2 : cam1_dy=cam1_dy+2
   If KeyDown(208)=True Then plane1_dy=plane1_dy-2 : cam1_dy=cam1_dy-2
   
   ; Turn left/right
   If KeyDown(203)=True Then plane1_day=plane1_day+2 : cam1_day=cam1_day+2
   If KeyDown(205)=True Then plane1_day=plane1_day-2 : cam1_day=cam1_day-2

   ; Move forward - normal
   If KeyDown(30)=True And blue_bonus1_status=False
      plane1_dx=plane1_dx-Sin(plane1_ay)*8
      plane1_dz=plane1_dz+Cos(plane1_ay)*8
      cam1_dx=cam1_dx-Sin(cam1_ay)*8
      cam1_dz=cam1_dz+Cos(cam1_ay)*8
   EndIf
   
   ; Move forward - blue bonus - extra speed
   If KeyDown(30)=True And blue_bonus1_status=True
      plane1_dx=plane1_dx-Sin(plane1_ay)*16
      plane1_dz=plane1_dz+Cos(plane1_ay)*16
      cam1_dx=cam1_dx-Sin(cam1_ay)*16
      cam1_dz=cam1_dz+Cos(cam1_ay)*16
   EndIf

   ; Fire bullet - normal
   If KeyHit(31)=True And yellow_bonus1_status=False
      p1.plane1_bullet=New plane1_bullet
      p1\entity=CopyEntity(bullet,plane1)
      EntityParent p1\entity,0
      TurnEntity p1\entity,0,270,0
      MoveEntity p1\entity,0,0,10
      p1\alpha=1
   EndIf
   
   ; Fire bullet - yellow bonus - rapid fire
   yellow_bonus1_pause=yellow_bonus1_pause+1
   If KeyDown(31)=True And yellow_bonus1_status=True And yellow_bonus1_pause>=3
      yellow_bonus1_pause=0
      p1.plane1_bullet=New plane1_bullet
      p1\entity=CopyEntity(bullet,plane1)
      EntityParent p1\entity,0
      TurnEntity p1\entity,0,270,0
      MoveEntity p1\entity,0,0,10
      p1\alpha=1
   EndIf

End Function


; ----------------------
; Update plane1 function
; ----------------------

Function UpdatePlane1()

   ; Prevent plane1 and main cam from going too low/high
   If plane1_dy<2 Then plane1_dy=2
   If plane1_dy>1000 Then plane1_dy=1000
   If cam1_dy<2 Then cam1_dy=2
   If cam1_dy>1000 Then cam1_dy=1000

   ; Update plane1 position/angle values
   plane1_x=CurveValue#(plane1_x,plane1_dx,curve_plane)
   plane1_y=CurveValue#(plane1_y,plane1_dy,curve_plane)
   plane1_z=CurveValue#(plane1_z,plane1_dz,curve_plane)
   plane1_ay=CurveValue#(plane1_ay,plane1_day,curve_plane)

   PositionEntity plane1,plane1_x,plane1_y,plane1_z
   RotateEntity plane1,0,plane1_ay+90,0

   ; Update camera1 position values
   cam1_x=CurveValue#(cam1_x,cam1_dx,curve_cam)
   cam1_y=CurveValue#(cam1_y,cam1_dy,curve_cam)
   cam1_z=CurveValue#(cam1_z,cam1_dz,curve_cam)
   cam1_ay=CurveValue#(cam1_ay,cam1_day,curve_cam)
   
   PositionEntity main_cam1,plane1_x+Sin(cam1_ay)*50,cam1_y,plane1_z-Cos(cam1_ay)*50
   RotateEntity main_cam1,0,cam1_ay,0
   
   PositionEntity top_cam1,plane1_x,plane1_y#+75,plane1_z
   RotateEntity top_cam1,90,plane1_ay,0
   
   ; Update plane1 bullets
   For p1.plane1_bullet=Each plane1_bullet
      MoveEntity p1\entity,0,0,100
      If EntityDistance(p1\entity,plane1)>5000 Then FreeEntity p1\entity : Delete p1
   Next

   ; Check to see if plane1 is inside bank zone and if so bank pot
   temp_pivot=CreatePivot()
   PositionEntity temp_pivot,red_ring_x,plane1_y,red_ring_z
   If EntityDistance(temp_pivot,plane1)<=625 And pot1>0 Then bank1=bank1+pot1 : pot1=0
   FreeEntity temp_pivot

End Function


; -----------------------
; Update camels1 function
; -----------------------

Function UpdateCamels1()

   For c.camel=Each camel
      
      ; Turn camels, fade them
      TurnEntity c\entity,0,2,0
      EntityAlpha c\entity,c\alpha : c\alpha=c\alpha-0.0005
      
      ; Use EntityDistance command to check for collision between camel and plane
      If EntityDistance(c\entity,plane1)<=40
         plane1_bonus=c\colour
         c\alpha=0
      EndIf
      
      ; Delete camel if invisible
      If c\alpha<=0 Then FreeEntity c\entity : Delete c
         
   Next
   
   ; Orange bonus - shield
   
   ; Time
   If orange_bonus1_time>300 Then EntityAlpha shield1,0.5 Else EntityAlpha shield1,orange_bonus1_time/600.0
   If orange_bonus1_time>0 Then orange_bonus1_time=orange_bonus1_time-1
   
   ; Activate
   If plane1_bonus=1
      orange_bonus1_status=True
      orange_bonus1_time=orange_bonus1_time+600
      EntityType plane1,type_none
      plane1_bonus=0
   EndIf
   
   ; Deactivate
   If orange_bonus1_time=0 And orange_bonus1_status=True
      orange_bonus1_status=False
      EntityType plane1,type_plane1
   EndIf
   
   ; Yellow bonus - rapid fire
   If yellow_bonus1_time>0 Then yellow_bonus1_time=yellow_bonus1_time-1 ; time
   If plane1_bonus=2 Then yellow_bonus1_status=True : yellow_bonus1_time=yellow_bonus1_time+600 : plane1_bonus=0 ; activate
   If yellow_bonus1_time=0 And yellow_bonus1_status=True Then yellow_bonus1_status=False ; deactivate
   
   ; Green bonus - homing missiles
   If green_bonus1_time>0 Then green_bonus1_time=green_bonus1_time-1 ; time
   If plane1_bonus=3 Then green_bonus1_status=True : green_bonus1_time=green_bonus1_time+600 : plane1_bonus=0 ; activate
   If green_bonus1_time=0 And green_bonus1_status=True Then green_bonus1_status=False ; deactivate
   
   ; blue bonus - extra speed
   If blue_bonus1_time>0 Then blue_bonus1_time=blue_bonus1_time-1 ; time
   If plane1_bonus=4 Then blue_bonus1_status=True : blue_bonus1_time=blue_bonus1_time+600 : plane1_bonus=0 ; activate
   If blue_bonus1_time=0 And blue_bonus1_status=True Then blue_bonus1_status=False ; deactivate
   
   ; Pink bonus - UFO to rings
   If pink_bonus1_time>0 Then pink_bonus1_time=pink_bonus1_time-1 ; time
   If plane1_bonus=5 Then pink_bonus1_status=True : pink_bonus1_time=pink_bonus1_time+600 : plane1_bonus=0 ; activate
   If pink_bonus1_time=0 And pink_bonus1_status=True Then pink_bonus1_status=False ; deactivate

End Function


; --------------------------
; Check collisions1 function
; --------------------------

Function CheckCollisions1()

   ; Ufo and plane1 bullet
   For u.ufo=Each ufo
      entity_col=EntityCollided(u\entity,type_plane1_bullet)
      If entity_col<>0
         DeleteBullet1(entity_col)
         pot1=pot1+Points(u)
         CreateShadow(u) ; Create a new shadow that will reflect explosion sparks after old ufo + shadow have been nuked
         ExplodeUFO(u,1)
      EndIf
   Next

   ; Ufo bullet and plane1
   If orange_bonus1_status=False
      For ub.ufo_bullet=Each ufo_bullet
         If EntityCollided(ub\entity,type_plane1)<>0
            If pot1>0
               pot1=0
               FreeEntity ub\entity
               Delete ub
               po.points=New points
               po\entity=CopyEntity(points_bust,plane1)
               ShowEntity po\entity
               EntityParent po\entity,0
               po\alpha=1
            Else
               game_over1=True
               ExplodePlane(plane1)
               If no_players=1
                  HighScore()
               EndIf
            EndIf
         EndIf
      Next
   EndIf

   ; Plane1 and statue
   If EntityCollided(plane1,type_statue)<>0 Then game_over1=True : ExplodePlane(plane1) : If no_players=1 Then HighScore()

End Function


; ----------------------
; Update mother function
; ----------------------

Function UpdateMother()

   If MilliSecs()-mother_timer=>1000
      If no_ufos<max_ufos ; No. ufos limit
         ufo_count=ufo_count+1
         If ufo_count<=5 Then new_ufo=1 : mother_timer=MilliSecs()
         If ufo_count>=6 And ufo_count<=9 Then new_ufo=2 : mother_timer=MilliSecs()
         If ufo_count>=10 And ufo_count<=12 Then new_ufo=3 : mother_timer=MilliSecs()
         If ufo_count>=13 And ufo_count<=14 Then new_ufo=4 : mother_timer=MilliSecs()
         If ufo_count=15 Then new_ufo=5 : ufo_count=0 : mother_timer=MilliSecs()
      EndIf
   EndIf

   TurnEntity mother_pivot,0,0.1,0

End Function


; -------------------
; Update ufo function
; -------------------

Function UpdateUFO()

   If new_ufo<>0 Then CreateUFO(new_ufo) : new_ufo=0

   For u.ufo=Each ufo
      MoveUFO(u)
      UFOFire(u)
      If MilliSecs()-trail_timer=>500 And u\colour=5 Then CreateTrail(u) : reset_trail_timer=True
   Next
   
   If reset_trail_timer=True Then trail_timer=MilliSecs() : reset_trail_timer=False
   UFOBullets()
   
End Function   


; --------------------------
; Update explosions function   
; --------------------------

Function UpdateExplosions()

   ; Explosion sparks
   For sp.spark=Each spark
      If sp\alpha>0 And EntityY(sp\entity)>-10
         EntityAlpha sp\entity,sp\alpha
         MoveEntity sp\entity,0,0,4
         TranslateEntity sp\entity,0,sp\y_speed,0
         sp\alpha=sp\alpha-0.01
         sp\y_speed=sp\y_speed-0.1
      Else
         FreeEntity sp\entity
         Delete sp
      EndIf
   Next
   
   ; Shadows that reflect the sparks
   For s.shadow=Each shadow
      ScaleEntity s\entity,s\scale,1,s\scale
      EntityAlpha s\entity,s\alpha
      s\scale=s\scale+0.1
      s\alpha=s\alpha-0.01
      If s\alpha=<0 Then HideEntity s\entity : FreeEntity s\entity : Delete s
   Next

   ; Points sprites eg. "200x2"
   For po.points=Each points
      ScaleSprite po\entity,po\scale,po\scale
      EntityAlpha po\entity,po\alpha
      po\scale=po\scale+10
      po\alpha=po\alpha-0.04
      If po\alpha=<0 Then HideEntity po\entity : FreeEntity po\entity : Delete po
   Next

End Function


; ----------------------
; Update extras function
; ----------------------

Function UpdateExtras()

   If no_players=1
      PositionEntity sky,EntityX(main_cam1),0,EntityZ(main_cam1)
      PositionEntity solar,EntityX(main_cam1),EntityY(main_cam1)+solar_y,EntityZ(main_cam1)-solar_z
      ScaleSprite solar,Rnd(solar_scale,solar_scale+solar_scale_shake),Rnd(solar_scale,solar_scale+solar_scale_shake)
   EndIf

End Function


; ------------------
; Render 2D function
; ------------------

Function Render2D()

   If no_players=1
   
      Color 255,0,0
      Text (width+height)/140,height-((width+height)/14.5),"Pot: "+pot1+" "

      Color 255,255,255
      Text (width+height)/140,height-((width+height)/24.75),"Bank: "+bank1+" "
      
      If orange_bonus1_time>0
         Color 255,102,0
         Text width-((width+height)/22.4),0,(orange_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If yellow_bonus1_time>0
         Color 255,255,0
         Text width-((width+height)/22.4),time_y,(yellow_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If green_bonus1_time>0
         Color 0,255,0
         Text width-((width+height)/22.4),time_y,(green_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If blue_bonus1_time>0
         Color 0,255,255
         Text width-((width+height)/22.4),time_y,(blue_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If pink_bonus1_time>0
         Color 255,0,255
         Text width-((width+height)/22.4),time_y,(pink_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
   EndIf
   
   If no_players=2
      
      Color 255,0,0
      Text (width+height)/140,(height/2)-((width+height)/14.5),"Pot: "+pot1+" "
      Text (width+height)/140,height-((width+height)/14.5),"Pot: "+pot2+" "
      
      Color 255,255,255
      Text (width+height)/140,(height/2)-((width+height)/24.75),"Bank: "+bank1+" "
      Text (width+height)/140,height-((width+height)/24.75),"Bank: "+bank2+" "
      
      ; Player 1 bonus times
      
      If orange_bonus1_time>0
         Color 255,102,0
         Text width-((width+height)/22.4),time_y,(orange_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If yellow_bonus1_time>0
         Color 255,255,0
         Text width-((width+height)/22.4),time_y,(yellow_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If green_bonus1_time>0
         Color 0,255,0
         Text width-((width+height)/22.4),time_y,(green_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If blue_bonus1_time>0
         Color 0,255,255
         Text width-((width+height)/22.4),time_y,(blue_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If pink_bonus1_time>0
         Color 255,0,255
         Text width-((width+height)/22.4),time_y,(pink_bonus1_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      ; Player 2 bonus times
      
      time_y=height/2
      If orange_bonus2_time>0
         Color 255,102,0
         Text width-((width+height)/22.4),time_y,(orange_bonus2_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If yellow_bonus2_time>0
         Color 255,255,0
         Text width-((width+height)/22.4),time_y,(yellow_bonus2_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If green_bonus2_time>0
         Color 0,255,0
         Text width-((width+height)/22.4),time_y,(green_bonus2_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If blue_bonus2_time>0
         Color 0,255,255
         Text width-((width+height)/22.4),time_y,(blue_bonus2_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
      If pink_bonus2_time>0
         Color 255,0,255
         Text width-((width+height)/22.4),time_y,(pink_bonus2_time/60)+1
         time_y=time_y+(width+height)/31.98
      EndIf
      
   EndIf
   
End Function


; -----------------------
; Delete bullet1 function
; -----------------------

Function DeleteBullet1(entity_col)

   ; Delete bullet that hits ufo
   For p1.plane1_bullet=Each plane1_bullet
      If p1\entity=entity_col Then FreeEntity p1\entity : Delete p1 : Exit
   Next

End Function


; ----------------------
; Explode plane function
; ----------------------

Function ExplodePlane(plane)

   ; Create a new set of sparks
   For t=1 To plane_intensity
      sp.spark=New spark
      sp\y_speed=0
      sp\alpha=2
      sp\entity=CopyEntity(debris,plane)
      EntityParent sp\entity,0
      RotateEntity sp\entity,Rnd(360),Rnd(360),Rnd(360)
      ShowEntity sp\entity
   Next

   ; Hide plane
   HideEntity plane

   ; "BOOM!"
   PlaySound explode
   
End Function


; -------------------
; Create ufo function
; -------------------

Function CreateUfo(new_ufo)

   u.ufo=New ufo
      
   Select new_ufo
      Case 1 : u\entity=CopyEntity(orange_ufo,mother) : u\shadow=CopyEntity(orange_shadow) : u\colour=1
      Case 2 : u\entity=CopyEntity(yellow_ufo,mother) : u\shadow=CopyEntity(yellow_shadow) : u\colour=2
      Case 3 : u\entity=CopyEntity(green_ufo,mother) : u\shadow=CopyEntity(green_shadow) : u\colour=3
      Case 4 : u\entity=CopyEntity(blue_ufo,mother) : u\shadow=CopyEntity(blue_shadow) : u\colour=4
      Case 5 : u\entity=CopyEntity(pink_ufo,mother) : u\shadow=CopyEntity(pink_shadow) : u\colour=5
   End Select

   EntityParent u\entity,0
   MoveEntity u\entity,0,0,-100

   If no_players=1 Then u\target=plane1

   If no_players=2
      If game_over1<>True And game_over2<>True
         d1#=EntityDistance(u\entity,plane1)
         d2#=EntityDistance(u\entity,plane2)
         If d1#<=d2# Then u\target=plane1 Else u\target=plane2
      Else
         If game_over1=True Then u\target=plane2
         If game_over2=True Then u\target=plane1
      EndIf
   EndIf

   u\x=EntityX(u\entity)
   u\y=EntityY(u\entity)
   u\z=EntityZ(u\entity)
   u\count=179
   no_ufos=no_ufos+1

End Function


; ---------------------
; Create trail function
; ---------------------

Function CreateTrail(u.ufo)

   ; New pink ufo trail
   t.trail=New trail
   t\entity=CopyEntity(u\entity)
   EntityType t\entity,type_none
   t\alpha=1

End Function


; -----------------
; Move ufo function
; -----------------

Function MoveUFO(u.ufo)

   ; Move UFO towards destination values
   
   u\count=u\count+1
   u\x=u\x+((u\dx-u\x)/100.0)
   u\y=u\y+((u\dy-u\y)/100.0)
   u\z=u\z+((u\dz-u\z)/100.0)
   
   PositionEntity u\entity,u\x,u\y,u\z
   PointEntity u\entity,u\target
   TurnEntity u\entity,0,180,0
   RotateEntity u\entity,EntityPitch(u\entity)/2,EntityYaw(u\entity),0

   ; Reset ufo destination values every 180 updates (3 seconds)
   
   If u\count>=180
      u\count=0
      
      If pink_bonus1_status=False

         ; Normal
         If u\target=plane1
            u\dx=plane1_x+Rnd(-1500,1500)
            u\dz=plane1_z+Rnd(-1500,1500)
            If plane1_y>=150 Then u\dy=plane1_y+Rnd(-100,100) Else u\dy=plane1_y+Rnd(50,150)
         Else
            u\dx=plane2_x+Rnd(-1500,1500)
            u\dz=plane2_z+Rnd(-1500,1500)
            If plane2_y>=150 Then u\dy=plane2_y+Rnd(-100,100) Else u\dy=plane2_y+Rnd(50,150)
         EndIf
         
      Else
      
         ; Pink bonus
         Select u\colour
            Case 1
            u\dx=orange_ring_x+Rnd(-orange_ring_radius,orange_ring_radius)
            u\dz=orange_ring_z+Rnd(-orange_ring_radius,orange_ring_radius)
            Case 2
            u\dx=yellow_ring_x+Rnd(-yellow_ring_radius,yellow_ring_radius)
            u\dz=yellow_ring_z+Rnd(-yellow_ring_radius,yellow_ring_radius)
            Case 3
            u\dx=green_ring_x+Rnd(-green_ring_radius,green_ring_radius)
            u\dz=green_ring_z+Rnd(-green_ring_radius,green_ring_radius)
            Case 4
            u\dx=blue_ring_x+Rnd(-blue_ring_radius,blue_ring_radius)
            u\dz=blue_ring_z+Rnd(-blue_ring_radius,blue_ring_radius)
            Case 5
            u\dx=pink_ring_x+Rnd(-pink_ring_radius,pink_ring_radius)
            u\dz=pink_ring_z+Rnd(-pink_ring_radius,pink_ring_radius)
         End Select

      EndIf
      
   EndIf

   ; Position shadow
   PositionEntity u\shadow,u\x,1,u\z

End Function


; -----------------
; Ufo fire function
; -----------------

Function UFOFire(u.ufo)

   ; Random ufo fire
   
   If Int(Rnd(0,900))=450
         ub.ufo_bullet=New ufo_bullet

         Select u\colour
            Case 1 : ub\entity=CopyEntity(orange_spark,u\entity)
            Case 2 : ub\entity=CopyEntity(yellow_spark,u\entity)
            Case 3 : ub\entity=CopyEntity(green_spark,u\entity)
            Case 4 : ub\entity=CopyEntity(blue_spark,u\entity)
            Case 5 : ub\entity=CopyEntity(pink_spark,u\entity)
         End Select

         piv=CreatePivot(u\target)
         PointEntity ub\entity,piv
         TurnEntity ub\entity,0,180,0
         FreeEntity piv

         EntityParent ub\entity,0
         EntityType ub\entity,type_ufo_bullet
         EntityRadius ub\entity,5
         ShowEntity ub\entity
   EndIf

End Function


; --------------------
; Ufo bullets function
; --------------------

Function UFOBullets()

   ; Update ufo trail
   For t.trail=Each trail
      EntityAlpha t\entity,t\alpha
      t\alpha=t\alpha-0.01
      If t\alpha<=0
         FreeEntity t\entity
         Delete t      
      EndIf
   Next

   ; Update ufo bullets
   For ub.ufo_bullet=Each ufo_bullet
      b.bullet_trail=New bullet_trail : b\entity=CopyEntity(ub\entity) : EntityType b\entity,0 : b\alpha=1
      MoveEntity ub\entity,0,0,-20
      If EntityDistance(ub\entity,plane1)>5000 Or EntityY(ub\entity)<=-10 Then FreeEntity ub\entity : Delete ub
   Next

   ; Update ufo bullets trail
   For b.bullet_trail=Each bullet_trail
      b\alpha=b\alpha-0.1
      EntityAlpha b\entity,b\alpha
      If b\alpha<=0 Then FreeEntity b\entity : Delete b
   Next

End Function


; --------------------
; Explode ufo function
; --------------------

Function ExplodeUFO(u.ufo,player)

   ; Create a new set of sparks
   
   For t=1 To ufo_intensity
      sp.spark=New spark
      sp\y_speed=0
      sp\alpha=2
      If u\colour=1 Then sp\entity=CopyEntity(orange_spark,u\entity)
      If u\colour=2 Then sp\entity=CopyEntity(yellow_spark,u\entity)
      If u\colour=3 Then sp\entity=CopyEntity(green_spark,u\entity)
      If u\colour=4 Then sp\entity=CopyEntity(blue_spark,u\entity)
      If u\colour=5 Then sp\entity=CopyEntity(pink_spark,u\entity)
      EntityParent sp\entity,0
      RotateEntity sp\entity,Rnd(360),Rnd(360),Rnd(360)

      If green_bonus1_status=True And player=1
         EntityRadius sp\entity,500
         EntityType sp\entity,type_plane1_bullet
      EndIf

      If green_bonus2_status=True And player=2
         EntityRadius sp\entity,500
         EntityType sp\entity,type_plane2_bullet
      EndIf
   Next

   ; Get rid of ufo
   HideEntity u\entity
   FreeEntity u\entity
   Delete u
   no_ufos=no_ufos-1

   ; "BOOM!"
   PlaySound explode
   
End Function


; ----------------------
; Create shadow function
; ----------------------

Function CreateShadow(u.ufo)

   s.shadow=New shadow
   s\entity=CopyEntity(u\shadow)
   s\scale=1
   s\alpha=1

   HideEntity u\shadow
   FreeEntity u\shadow

End Function


; ---------------
; Points function
; ---------------

Function Points(u.ufo)

   Select u\colour
      Case 1 : single=200
      Case 2 : single=400
      Case 3 : single=600
      Case 4 : single=800
      Case 5 : single=1000
   End Select
         
   temp_pivot=CreatePivot()
   multi=1
   PositionEntity temp_pivot,red_ring_x,u\y,red_ring_z : If EntityDistance(temp_pivot,u\entity)<=red_ring_radius Then multi=0
   PositionEntity temp_pivot,orange_ring_x,u\y,orange_ring_z : If EntityDistance(temp_pivot,u\entity)<=orange_ring_radius Then multi=2
   PositionEntity temp_pivot,yellow_ring_x,u\y,yellow_ring_z : If EntityDistance(temp_pivot,u\entity)<=yellow_ring_radius Then multi=4
   PositionEntity temp_pivot,green_ring_x,u\y,green_ring_z : If EntityDistance(temp_pivot,u\entity)<=green_ring_radius Then multi=6
   PositionEntity temp_pivot,blue_ring_x,u\y,blue_ring_z : If EntityDistance(temp_pivot,u\entity)<=blue_ring_radius Then multi=8
   PositionEntity temp_pivot,pink_ring_x,u\y,pink_ring_z : If EntityDistance(temp_pivot,u\entity)<=pink_ring_radius Then multi=10

   points=single*multi
         
   If multi=0 Then points=0 : po.points=New points : po\entity=CopyEntity(points_bust,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=200 And multi=1 Then po.points=New points : po\entity=CopyEntity(points_200,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=200 And multi=2 Then po.points=New points : po\entity=CopyEntity(points_200x2,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2 : c.camel=New camel : c\entity=CopyEntity(orange_camel,u\entity) : EntityParent c\entity,0 : c\colour=1 : c\alpha=1
   If single=200 And multi=4 Then po.points=New points : po\entity=CopyEntity(points_200x4,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=200 And multi=6 Then po.points=New points : po\entity=CopyEntity(points_200x6,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=200 And multi=8 Then po.points=New points : po\entity=CopyEntity(points_200x8,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=200 And multi=10 Then po.points=New points : po\entity=CopyEntity(points_200x10,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=400 And multi=1 Then po.points=New points : po\entity=CopyEntity(points_400,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=400 And multi=2 Then po.points=New points : po\entity=CopyEntity(points_400x2,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=400 And multi=4 Then po.points=New points : po\entity=CopyEntity(points_400x4,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2 : c.camel=New camel : c\entity=CopyEntity(yellow_camel,u\entity) : EntityParent c\entity,0 : c\colour=2 : c\alpha=1
   If single=400 And multi=6 Then po.points=New points : po\entity=CopyEntity(points_400x6,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=400 And multi=8 Then po.points=New points : po\entity=CopyEntity(points_400x8,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=400 And multi=10 Then po.points=New points : po\entity=CopyEntity(points_400x10,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=600 And multi=1 Then po.points=New points : po\entity=CopyEntity(points_600,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=600 And multi=2 Then po.points=New points : po\entity=CopyEntity(points_600x2,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=600 And multi=4 Then po.points=New points : po\entity=CopyEntity(points_600x4,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=600 And multi=6 Then po.points=New points : po\entity=CopyEntity(points_600x6,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2 : c.camel=New camel : c\entity=CopyEntity(green_camel,u\entity) : EntityParent c\entity,0 : c\colour=3 : c\alpha=1
   If single=600 And multi=8 Then po.points=New points : po\entity=CopyEntity(points_600x8,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=600 And multi=10 Then po.points=New points : po\entity=CopyEntity(points_600x10,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=800 And multi=1 Then po.points=New points : po\entity=CopyEntity(points_800,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=800 And multi=2 Then po.points=New points : po\entity=CopyEntity(points_800x2,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=800 And multi=4 Then po.points=New points : po\entity=CopyEntity(points_800x4,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=800 And multi=6 Then po.points=New points : po\entity=CopyEntity(points_800x6,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=800 And multi=8 Then po.points=New points : po\entity=CopyEntity(points_800x8,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2 : c.camel=New camel : c\entity=CopyEntity(blue_camel,u\entity) : EntityParent c\entity,0 : c\colour=4 : c\alpha=1
   If single=800 And multi=10 Then po.points=New points : po\entity=CopyEntity(points_800x10,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=1000 And multi=1 Then po.points=New points : po\entity=CopyEntity(points_1000,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=1000 And multi=2 Then po.points=New points : po\entity=CopyEntity(points_1000x2,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=1000 And multi=4 Then po.points=New points : po\entity=CopyEntity(points_1000x4,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=1000 And multi=6 Then po.points=New points : po\entity=CopyEntity(points_1000x6,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=1000 And multi=8 Then po.points=New points : po\entity=CopyEntity(points_1000x8,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2
   If single=1000 And multi=10 Then po.points=New points : po\entity=CopyEntity(points_1000x10,u\entity) : ShowEntity po\entity : EntityParent po\entity,0 : po\alpha=2 : c.camel=New camel : c\entity=CopyEntity(pink_camel,u\entity) : EntityParent c\entity,0 : c\colour=5 : c\alpha=1

   FreeEntity temp_pivot

   Return points

End Function


; -------------------
; High score function
; -------------------

Function HighScore()

   ; Load high score data
   load_file=ReadFile("high_scores.sav")
   For s=1 To 10
      names$(s)=ReadLine(load_file)
      scores(s)=ReadLine(load_file)
   Next
   CloseFile load_file

   ; Insert high score
   
   player_name$=""

   rank=1
   While bank1<scores(rank) ; scores(11) = zero value so score will never be lower than that, so rank = 11 max
      rank=rank+1
   Wend

   If rank<=10 ; If score is high enough to get on high score table   
      For s=10 To rank Step -1
         scores(s)=scores(s-1)
         names$(s)=names$(s-1)
      Next
      names$(rank)=player_name$
      scores(rank)=bank1
      screen=6
      option=1
   EndIf
   
   ; Save high score data
   save_file=WriteFile("high_scores.sav")
   For s=1 To 10
      WriteLine save_file,names$(s)
      WriteLine save_file,scores(s)
   Next
   CloseFile save_file

End Function


;---------------------
; Curve value function
;---------------------

Function CurveValue#(current#,destination#,curve)

   current#=current#+((destination#-current#)/curve)
   
   Return current#

End Function

Edit: Ich gerne auch wenn man mit dem Schiff(ich meinte damit ein Jet) gegen die wand fliegt das es nicht in die luft geht
 

Ardalic

BeitragSa, Mai 03, 2008 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir niemand Helfen Sad Sad Sad Crying or Very sad Crying or Very sad

BladeRunner

Moderator

BeitragSo, Mai 04, 2008 1:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Triplepost -> ~GESCHLOSSEN~
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group