| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- ;--------------------
- ; Init menus function
- ;--------------------
- Function InitMenus()
- ; Load logo/get info
- logo=LoadImage("media\logo.bmp") ; Load background 'block'
- logo_width=ImageWidth(logo)
- logo_height=ImageHeight(logo)
- Dim greyscale(logo_width,logo_height)
- SetBuffer ImageBuffer(logo)
- LockBuffer()
- For x=0 To ImageWidth(logo)
- For y=0 To ImageHeight(logo)
- pix=ReadPixelFast(x,y)
- red=(pix Shr 16) And 255
- green=(pix Shr 8) And 255
- blue=pix And 255
- grey=(red+green+blue)/3.0
- greyscale(x,y)=grey
- Next
- Next
- UnlockBuffer()
- SetBuffer BackBuffer()
-
- ; Random starting background colour
- randy=Int(Rnd(4))
- Select randy
- Case 0 : col=15 : cr=255 : cg=0 : cb=0
- Case 1 : col=3 : cr=255 : cg=255 : cb=0
- Case 2 : col=6 : cr=0 : cg=255 : cb=0
- Case 3 : col=9 : cr=0 : cg=255 : cb=255
- Case 4 : col=12 : cr=255 : cg=0 : cb=255
- End Select
- ; Get graphics mode info
- count_gfx_modes=CountGfxModes()
-
- For g=1 To count_gfx_modes
- If GfxMode3D(g)=True Then gm3d=gm3d+1
- Next
-
- Dim gfx_modes(gm3d,2) : gm3d=0
- For g=1 To count_gfx_modes
- If GfxMode3D(g)=True
- gg=gg+1
- gfx_modes(gg,0)=GfxModeWidth(g)
- gfx_modes(gg,1)=GfxModeHeight(g)
- gfx_modes(gg,2)=GfxModeDepth(g)
- If gfx_modes(gg,0)=width And gfx_modes(gg,1)=height And gfx_modes(gg,2)=GraphicsDepth() Then gfx_mode_option=gg
- EndIf
- Next
- ; Load high score data
- load_file=ReadFile("media\high_scores.sav")
- For s=1 To 10
- names$(s)=ReadLine(load_file)
- scores(s)=ReadLine(load_file)
- Next
- CloseFile load_file
- ; Play music
- music=PlayMusic("media\tune1.mid")
- End Function
- ; -------------------
- ; Background function
- ; -------------------
- Function Background()
- ; A bit of 'waiting code' inbetween colour changes
- If col=1 Or col=4 Or col=7 Or col=10 Or col=13
- sr=0
- sg=0
- sb=0
- ct=ct+1
- EndIf
- If ct>500 Then ct=0 : col=col+1
- ; Update current red, green, blue values with red, green, blue step values
- cr=cr+sr
- cg=cg+sg
- cb=cb+sb
- ; Various colour stages
-
- If cr=>255 And cg=>0 And cb=<0 And col=15 Then col=1 : cr=255 : cg=0 : cb=0
- If col=2 Then col=3 : dr=255 : dg=255 : db=0 : sr=(dr-cr)/fade : sg=(dg-cg)/fade : sb=(db-cb)/fade
- If cr>=255 And cg>=255 And cb<=0 And col=3 Then col=4 : cr=255 : cg=255 : cb=0
- If col=5 Then col=6 : dr=0 : dg=255 : db=0 : sr=(dr-cr)/fade : sg=(dg-cg)/fade : sb=(db-cb)/fade
- If cr<=0 And cg>=255 And cb<=0 And col=6 Then col=7 : cr=0 : cg=255 : cb=0
- If col=8 Then col=9 : dr=0 : dg=255 : db=255 : sr=(dr-cr)/fade : sg=(dg-cg)/fade : sb=(db-cb)/fade
- If cr<=0 And cg>=255 And cb>=255 And col=9 Then col=10 : cr=0 : cg=255 : cb=255
- If col=11 Then col=12 : dr=255 : dg=0 : db=255 : sr=(dr-cr)/fade : sg=(dg-cg)/fade : sb=(db-cb)/fade
- If cr>=255 And cg<=0 And cb>=255 And col=12 Then col=13 : cr=255 : cg=0 : cb=255
- If col=14 Then col=15 : dr=255 : dg=0 : db=0 : sr=(dr-cr)/fade : sg=(dg-cg)/fade : sb=(db-cb)/fade
- ; Draw block each frame!
- SetBuffer ImageBuffer(logo)
- LockBuffer()
- For x=0 To ImageWidth(logo)
- For y=0 To ImageHeight(logo)
- red=greyscale(x,y)*(cr/255.0)
- green=greyscale(x,y)*(cg/255.0)
- blue=greyscale(x,y)*(cb/255.0)
- pix=(red Shl 16) Or (green Shl 8) Or blue
- WritePixelFast x,y,pix
- Next
- Next
- UnlockBuffer()
- SetBuffer BackBuffer()
- ; Tile the block
- TileBlock logo,0,tile_y
- tile_y=tile_y+1
- If tile_y>119 Then tile_y=tile_y-120
- End Function
- ; ----------------
- ; Credits function
- ; ----------------
- Function Credits()
- ; Shadow text
- Color 0,0,0
- Text (width/2)+1,(y_space*1)+1,"Wing Ring V1.0",1
- Text (width/2)+1,(y_space*3)+1,"Credits",1
- Text (width/2)+1,(y_space*5)+1,"Programmed by Si",1
- Text (width/2)+1,(y_space*6)+1,"[email protected]",1
- Text (width/2)+1,(y_space*9)+1,"In Blitz3D",1
- If option=1 Then Text (width/2)+1,(y_space*7)+1,"> www.si-design.co.uk <",1 Else Text (width/2)+1,(y_space*7)+1,"www.si-design.co.uk",1
- If option=2 Then Text (width/2)+1,(y_space*10)+1,"> www.blitzbasic.com <",1 Else Text (width/2)+1,(y_space*10)+1,"www.blitzbasic.com",1
- If option=3 Then Text (width/2)+1,(y_space*11)+1,"> www.blitz3d.co.uk <",1 Else Text (width/2)+1,(y_space*11)+1,"www.blitz3d.co.uk",1
- If option=4 Then Text (width/2)+1,(y_space*13)+1,"> 1 Player <",1 Else Text (width/2)+1,(y_space*13)+1,"1 Player",1
- If option=5 Then Text (width/2)+1,(y_space*14)+1,"> 2 Player <",1 Else Text (width/2)+1,(y_space*14)+1,"2 Player",1
- If option=6 Then Text (width/2)+1,(y_space*15)+1,"> High Scores <",1 Else Text (width/2)+1,(y_space*15)+1,"High Scores",1
- If option=7 Then Text (width/2)+1,(y_space*16)+1,"> Options <",1 Else Text (width/2)+1,(y_space*16)+1,"Options",1
- ; White text
- Color 255,255,255
- Text (width/2)+0,(y_space*1)+0,"Wing Ring V1.0",1
- Text (width/2)+0,(y_space*3)+0,"Credits",1
- Text (width/2)+0,(y_space*5)+0,"Programmed by Si",1
- Text (width/2)+0,(y_space*6)+0,"[email protected]",1
- Text (width/2)+0,(y_space*9)+0,"In Blitz3D",1
- If option=1 Then Text (width/2)+0,(y_space*7)+0,"> www.si-design.co.uk <",1 Else Text (width/2)+0,(y_space*7)+0,"www.si-design.co.uk",1
- If option=2 Then Text (width/2)+0,(y_space*10)+0,"> www.blitzbasic.com <",1 Else Text (width/2)+0,(y_space*10)+0,"www.blitzbasic.com",1
- If option=3 Then Text (width/2)+0,(y_space*11)+0,"> www.blitz3d.co.uk <",1 Else Text (width/2)+0,(y_space*11)+0,"www.blitz3d.co.uk",1
- If option=4 Then Text (width/2)+0,(y_space*13)+0,"> 1 Player <",1 Else Text (width/2)+0,(y_space*13)+0,"1 Player",1
- If option=5 Then Text (width/2)+0,(y_space*14)+0,"> 2 Player <",1 Else Text (width/2)+0,(y_space*14)+0,"2 Player",1
- If option=6 Then Text (width/2)+0,(y_space*15)+0,"> High Scores <",1 Else Text (width/2)+0,(y_space*15)+0,"High Scores",1
- If option=7 Then Text (width/2)+0,(y_space*16)+0,"> Options <",1 Else Text (width/2)+0,(y_space*16)+0,"Options",1
- ; Up/down option
- If KeyHit(200)=1 Then option=option-1
- If KeyHit(208)=1 Then option=option+1
- If option>7 Then option=1
- If option<1 Then option=7
- ; Enter option
- If KeyHit(28)=True
- If option=1 Then ExecFile "http://www.si-design.co.uk/index.htm?referrer=wing_ring"
- If option=2 Then ExecFile "http://www.blitzbasic.com"
- If option=3 Then ExecFile "http://www.blitz3d.co.uk/index.htm?referrer=wing_ring"
- If option>3 Then screen=option
- EndIf
- End Function
- ; -------------------
- ; Highscores function
- ; -------------------
- Function HighScores()
- ; Shadow text
- Color 0,0,0
- Text (width/2)+1,(y_space*1)+1,"Wing Ring V1.0",1
- Text (width/2)+1,(y_space*3)+1,"High Scores",1
- If option=1 And rank=1 Then Text x_nos-17,(y_space*5)+1,"> 1." Else Text x_nos+1,(y_space*5)+1,"1."
- If option=1 And rank=2 Then Text x_nos-17,(y_space*6)+1,"> 2." Else Text x_nos+1,(y_space*6)+1,"2."
- If option=1 And rank=3 Then Text x_nos-17,(y_space*7)+1,"> 3." Else Text x_nos+1,(y_space*7)+1,"3."
- If option=1 And rank=4 Then Text x_nos-17,(y_space*8)+1,"> 4." Else Text x_nos+1,(y_space*8)+1,"4."
- If option=1 And rank=5 Then Text x_nos-17,(y_space*9)+1,"> 5." Else Text x_nos+1,(y_space*9)+1,"5."
- If option=1 And rank=6 Then Text x_nos-17,(y_space*10)+1,"> 6." Else Text x_nos+1,(y_space*10)+1,"6."
- If option=1 And rank=7 Then Text x_nos-17,(y_space*11)+1,"> 7." Else Text x_nos+1,(y_space*11)+1,"7."
- If option=1 And rank=8 Then Text x_nos-17,(y_space*12)+1,"> 8." Else Text x_nos+1,(y_space*12)+1,"8."
- If option=1 And rank=9 Then Text x_nos-17,(y_space*13)+1,"> 9." Else Text x_nos+1,(y_space*13)+1,"9."
- If option=1 And rank=10 Then Text x_nos-17,(y_space*14)+1,"> 10." Else Text x_nos+1,(y_space*14)+1,"10."
- Text x_names+1,(y_space*5)+1,names$(1)
- Text x_names+1,(y_space*6)+1,names$(2)
- Text x_names+1,(y_space*7)+1,names$(3)
- Text x_names+1,(y_space*8)+1,names$(4)
- Text x_names+1,(y_space*9)+1,names$(5)
- Text x_names+1,(y_space*10)+1,names$(6)
- Text x_names+1,(y_space*11)+1,names$(7)
- Text x_names+1,(y_space*12)+1,names$(8)
- Text x_names+1,(y_space*13)+1,names$(9)
- Text x_names+1,(y_space*14)+1,names$(10)
- If option=1 And rank=1 Then Text x_scores+1,(y_space*5)+1,scores(1)+" <" Else Text x_scores+1,(y_space*5)+1,scores(1)
- If option=1 And rank=2 Then Text x_scores+1,(y_space*6)+1,scores(2)+" <" Else Text x_scores+1,(y_space*6)+1,scores(2)
- If option=1 And rank=3 Then Text x_scores+1,(y_space*7)+1,scores(3)+" <" Else Text x_scores+1,(y_space*7)+1,scores(3)
- If option=1 And rank=4 Then Text x_scores+1,(y_space*8)+1,scores(4)+" <" Else Text x_scores+1,(y_space*8)+1,scores(4)
- If option=1 And rank=5 Then Text x_scores+1,(y_space*9)+1,scores(5)+" <" Else Text x_scores+1,(y_space*9)+1,scores(5)
- If option=1 And rank=6 Then Text x_scores+1,(y_space*10)+1,scores(6)+" <" Else Text x_scores+1,(y_space*10)+1,scores(6)
- If option=1 And rank=7 Then Text x_scores+1,(y_space*11)+1,scores(7)+" <" Else Text x_scores+1,(y_space*11)+1,scores(7)
- If option=1 And rank=8 Then Text x_scores+1,(y_space*12)+1,scores(8)+" <" Else Text x_scores+1,(y_space*12)+1,scores(8)
- If option=1 And rank=9 Then Text x_scores+1,(y_space*13)+1,scores(9)+" <" Else Text x_scores+1,(y_space*13)+1,scores(9)
- If option=1 And rank=10 Then Text x_scores+1,(y_space*14)+1,scores(10)+" <" Else Text x_scores+1,(y_space*14)+1,scores(10)
- If option=0 Then Text (width/2)+1,(y_space*16)+1,"> Back <",1 Else Text (width/2)+1,(y_space*16)+1,"Back",1
- ; White text
- Color 255,255,255
- Text (width/2)+0,(y_space*1)+0,"Wing Ring V1.0",1
- Text (width/2)+0,(y_space*3)+0,"High Scores",1
- If option=1 And rank=1 Then Text x_nos-18,(y_space*5)+0,"> 1." Else Text x_nos+0,(y_space*5)+0,"1."
- If option=1 And rank=2 Then Text x_nos-18,(y_space*6)+0,"> 2." Else Text x_nos+0,(y_space*6)+0,"2."
- If option=1 And rank=3 Then Text x_nos-18,(y_space*7)+0,"> 3." Else Text x_nos+0,(y_space*7)+0,"3."
- If option=1 And rank=4 Then Text x_nos-18,(y_space*8)+0,"> 4." Else Text x_nos+0,(y_space*8)+0,"4."
- If option=1 And rank=5 Then Text x_nos-18,(y_space*9)+0,"> 5." Else Text x_nos+0,(y_space*9)+0,"5."
- If option=1 And rank=6 Then Text x_nos-18,(y_space*10)+0,"> 6." Else Text x_nos+0,(y_space*10)+0,"6."
- If option=1 And rank=7 Then Text x_nos-18,(y_space*11)+0,"> 7." Else Text x_nos+0,(y_space*11)+0,"7."
- If option=1 And rank=8 Then Text x_nos-18,(y_space*12)+0,"> 8." Else Text x_nos+0,(y_space*12)+0,"8."
- If option=1 And rank=9 Then Text x_nos-18,(y_space*13)+0,"> 9." Else Text x_nos+0,(y_space*13)+0,"9."
- If option=1 And rank=10 Then Text x_nos-18,(y_space*14)+0,"> 10." Else Text x_nos+0,(y_space*14)+0,"10."
- Text x_names+0,(y_space*5)+0,names$(1)
- Text x_names+0,(y_space*6)+0,names$(2)
- Text x_names+0,(y_space*7)+0,names$(3)
- Text x_names+0,(y_space*8)+0,names$(4)
- Text x_names+0,(y_space*9)+0,names$(5)
- Text x_names+0,(y_space*10)+0,names$(6)
- Text x_names+0,(y_space*11)+0,names$(7)
- Text x_names+0,(y_space*12)+0,names$(8)
- Text x_names+0,(y_space*13)+0,names$(9)
- Text x_names+0,(y_space*14)+0,names$(10)
- If option=1 And rank=1 Then Text x_scores+0,(y_space*5)+0,scores(1)+" <" Else Text x_scores+0,(y_space*5)+0,scores(1)
- If option=1 And rank=2 Then Text x_scores+0,(y_space*6)+0,scores(2)+" <" Else Text x_scores+0,(y_space*6)+0,scores(2)
- If option=1 And rank=3 Then Text x_scores+0,(y_space*7)+0,scores(3)+" <" Else Text x_scores+0,(y_space*7)+0,scores(3)
- If option=1 And rank=4 Then Text x_scores+0,(y_space*8)+0,scores(4)+" <" Else Text x_scores+0,(y_space*8)+0,scores(4)
- If option=1 And rank=5 Then Text x_scores+0,(y_space*9)+0,scores(5)+" <" Else Text x_scores+0,(y_space*9)+0,scores(5)
- If option=1 And rank=6 Then Text x_scores+0,(y_space*10)+0,scores(6)+" <" Else Text x_scores+0,(y_space*10)+0,scores(6)
- If option=1 And rank=7 Then Text x_scores+0,(y_space*11)+0,scores(7)+" <" Else Text x_scores+0,(y_space*11)+0,scores(7)
- If option=1 And rank=8 Then Text x_scores+0,(y_space*12)+0,scores(8)+" <" Else Text x_scores+0,(y_space*12)+0,scores(8)
- If option=1 And rank=9 Then Text x_scores+0,(y_space*13)+0,scores(9)+" <" Else Text x_scores+0,(y_space*13)+0,scores(9)
- If option=1 And rank=10 Then Text x_scores+0,(y_space*14)+0,scores(10)+" <" Else Text x_scores+0,(y_space*14)+0,scores(10)
- If option=0 Then Text (width/2)+0,(y_space*16)+0,"> Back <",1 Else Text (width/2)+0,(y_space*16)+0,"Back",1
- ; Input routine
- If rank>=1 And rank<=10
- gk=GetKey()
- If Len(names$(rank))<=4 Or gk=8 ; If size of string is less than six characters long or backspace key is pressed
-
- Select gk
- Case 0 ; Nothing! Just stops no key press (0) being used with the default option which results in ||| being shown
- Case 13 ; Stops return key being used
- Case 28 ; Stops up cursor key being used
- Case 29 ; Stops down cursor key being used
- Case 8 : If Len(names$(rank))>0 Then names$(rank)=Left$(names$(rank),Len(names$(rank))-1)
- Default : names$(rank)=names$(rank)+Chr$(gk)
- End Select
-
- EndIf
-
- EndIf
- ; Up/down option
- If KeyHit(200)=1 Then option=option-1
- If KeyHit(208)=1 Then option=option+1
- ; Choice of options depending on whether high score is yet to be entered or not
- If rank<1 Or rank>10
- If option>0 Then option=0
- If option<0 Then option=0
- Else
- If option>1 Then option=0
- If option<0 Then option=1
- EndIf
- ; Enter option
-
- If KeyHit(28)=True
- If option=0 Then screen=option : option=6 ; Back
- ; Save scores
- If option=1
- 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
- rank=11
- EndIf
- EndIf
- End Function
- ; ----------------
- ; Options function
- ; ----------------
- Function Options()
- kh=KeyHit(28)
- ; Shadow text
-
- Color 0,0,0
-
- Text (width/2)+1,(y_space*1)+1,"Wing Ring V1.0",1
- Text (width/2)+1,(y_space*3)+1,"Options",1
- Text (width/2)+1,(y_space*5)+1,"Graphics Mode:",1
- Text (width/2)+1,(y_space*8)+1,"Windowed:",1
- If option=1
- Text (width/2)+1,(y_space*6)+1,">"+gfx_modes(gfx_mode_option,0)+"x"+gfx_modes(gfx_mode_option,1)+"x"+gfx_modes(gfx_mode_option,2)+"<",1
- Else
- Text (width/2)+1,(y_space*6)+1,gfx_modes(gfx_mode_option,0)+"x"+gfx_modes(gfx_mode_option,1)+"x"+gfx_modes(gfx_mode_option,2),1
- EndIf
-
- If option=2
- If Windowed3D()=False
- Text (width/2)+1,(y_space*9)+1,"> Unavailable <",1
- Else
- If mode_option=1 Then Text (width/2)+1,(y_space*9)+1,"> No <",1
- If mode_option=2 Then Text (width/2)+1,(y_space*9)+1,"> Yes <",1
- EndIf
- Else
- If Windowed3D()=False
- Text (width/2)+1,(y_space*9)+1,"Unavailable",1
- Else
- If mode_option=1 Then Text (width/2)+1,(y_space*9)+1,"No",1
- If mode_option=2 Then Text (width/2)+1,(y_space*9)+1,"Yes",1
- EndIf
- EndIf
- If option=0 Then Text (width/2)+1,(y_space*16)+1,"> Back <",1 Else Text (width/2)+1,(y_space*16)+1,"Back",1
-
- ; White text
-
- Color 255,255,255
-
- Text (width/2)+0,(y_space*1)+0,"Wing Ring V1.0",1
- Text (width/2)+0,(y_space*3)+0,"Options",1
- Text (width/2)+0,(y_space*5)+0,"Graphics Mode:",1
- Text (width/2)+0,(y_space*8)+0,"Windowed:",1
- If option=1
- Text (width/2)+0,(y_space*6)+0,">"+gfx_modes(gfx_mode_option,0)+"x"+gfx_modes(gfx_mode_option,1)+"x"+gfx_modes(gfx_mode_option,2)+"<",1
- Else
- Text (width/2)+0,(y_space*6)+0,gfx_modes(gfx_mode_option,0)+"x"+gfx_modes(gfx_mode_option,1)+"x"+gfx_modes(gfx_mode_option,2),1
- EndIf
-
- If option=2
- If Windowed3D()=False
- Text (width/2)+0,(y_space*9)+0,"> Unavailable <",1
- Else
- If mode_option=1 Then Text (width/2)+0,(y_space*9)+0,"> No <",1
- If mode_option=2 Then Text (width/2)+0,(y_space*9)+0,"> Yes <",1
- EndIf
- Else
- If Windowed3D()=False
- Text (width/2)+0,(y_space*9)+0,"Unavailable",1
- Else
- If mode_option=1 Then Text (width/2)+0,(y_space*9)+0,"No",1
- If mode_option=2 Then Text (width/2)+0,(y_space*9)+0,"Yes",1
- EndIf
- EndIf
- If option=0 Then Text (width/2)+0,(y_space*16)+0,"> Back <",1 Else Text (width/2)+0,(y_space*16)+0,"Back",1
- ; Up/down option
- If KeyHit(200)=1 Then option=option-1
- If KeyHit(208)=1 Then option=option+1
- If option>2 Then option=0
- If option<0 Then option=2
- ; Enter option
- If kh=True And option=1 Then gfx_mode_option=gfx_mode_option+1 : If gfx_mode_option=>count_gfx_modes Then gfx_mode_option=1
- If kh=True And option=2 And Windowed3D()=True ; Only allow user to toggle windowed mode option if windowed 3d mode is available
- If mode_option=1 Then mode_option=2 Else mode_option=1
- EndIf
- If kh=True And option=0
- screen=option
- w=gfx_modes(gfx_mode_option,0)
- h=gfx_modes(gfx_mode_option,1)
- d=gfx_modes(gfx_mode_option,2)
- If width<>w Or height<>h Or depth<>d Or mode_option<>mode
- width=w : height=h : depth=d : mode=mode_option
- Graphics3D width,height,depth,mode
- logo=LoadImage("logo.bmp")
- y_space#=height/18
- 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))
- LoadMedia() : CreateEntities() : InitCollisions()
- EndIf
- EndIf
- End Function
|