| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847 |
- ; ------------------------------------
- ; Name: Wing Ring
- ; Version: V1.0
- ; Author: Simon Harrison
- ; Email: [email protected]
- ; Website: http://www.si-design.co.uk
- ; Date: 18/09/01
- ; ------------------------------------
- ; Player 1 - Keyboard. A = Forward. S = Shoot. Cursor keys = Move.
- ; Player 2 - Joypad.
- AppTitle "Wing Ring V1.0"
- 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("tune2.mid")
-
- 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,90,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,1,1
- Collisions type_ufo_bullet,type_plane1,1,1
- Collisions type_plane1,type_statue,2,1
- Collisions type_plane2_bullet,type_ufo,1,1
- Collisions type_ufo_bullet,type_plane2,1,1
- Collisions type_plane2,type_statue,2,1
-
- 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
|