OK, a menu screen done (I would guess) a little differently than any of the other entries...
Rem DBC Menu Challenge
Rem TDK_Man December 2007
Rem Hopefully something a little different...
Gosub Setup
Rem Main Program Loop
Do
If LeftKey()=1 Then Gosub Clockwise
If RightKey()=1 Then Gosub AntiClockwise
If ReturnKey()=1 Then Gosub DecodeButton
Sync
Ink RGB(255,255,255),0: Center Text 400,580,ButtonText$(CurrentButton)
Center Text 400,0,"TDK_Man's TR-Style 3D Menu. Left/Right Cursor Keys To Highlight, Enter Key To Select"
Loop
End
Rem ******************************************************************************************
Rem *** PROCEDURES ***
Rem ******************************************************************************************
DecodeButton:
Select CurrentButton
Case 1
Rem Start Game
A$="Start Game Selected From The Menu"
EndCase
Case 2
Rem Options
A$="Options Screen Selected From The Menu"
EndCase
Case 3
Rem Help
A$="Help Screen Selected From The Menu"
EndCase
Case 4
Rem HiScores
A$="HiScores Screen Selected From The Menu"
EndCase
Case 5
Rem MultiPlay
A$="Multiplayer Screen Selected From The Menu"
EndCase
Case 6
Rem Exit Game
A$="Exit Program Selected From The Menu"
EndCase
EndSelect
Set Camera View 0,0,1,1
CLS
Print A$
Print
End
Return
Clockwise:
Rem Rotate Front Row Left
Hide Object 100
For N=1 To AngleSpacing
For I=1 To MenuOptions
X#(I) = WrapValue(X#(I) + 1)
Z#(I) = WrapValue(Z#(I) + 1)
Position Object I, NewXValue(0,X#(I),XDist#),0.0,NewZValue(0,Z#(I),ZDist#)
Next I
Sync
Next N
Show Object 100
Dec CurrentButton: If CurrentButton < 1 Then CurrentButton = MenuOptions
Repeat
Until LeftKey()=0
Return
AntiClockwise:
Rem Rotate Front Row Right
Hide Object 100
For N=1 To AngleSpacing
For I=1 To MenuOptions
X#(I) = WrapValue(X#(I) - 1)
Z#(I) = WrapValue(Z#(I) - 1)
Position Object I, NewXValue(0,X#(I),XDist#),0.0,NewZValue(0,Z#(I),ZDist#)
Next I
Sync
Next N
Show Object 100
Inc CurrentButton: If CurrentButton > MenuOptions Then CurrentButton = 1
Repeat
Until RightKey()=0
Return
Setup:
Set Display Mode 800,600,16
Sync On
Sync Rate 0
Hide Mouse
MenuOptions = 6: Rem Number of buttons on menu screen
Dim ButtonText$(6)
ButtonText$(1) = "Start Game"
ButtonText$(2) = "Options"
ButtonText$(3) = "Help"
ButtonText$(4) = "HiScores"
ButtonText$(5) = "MultiPlay"
ButtonText$(6) = "Exit Game"
Rem Make Menu Option Textures
Create Bitmap 1,800,600
Rem Highlight texture
CLS 0
Ink RGB(140,10,80),0
Box 0,10,300,90: Box 30,0,270,100
Get Image 101,0,0,300,101
Rem Main Button texture
CLS 0
Ink RGB(240,240,255),0
Box 0,10,300,90: Box 30,0,270,100
Ink RGB(90,90,150),0
Box 1,11,300,90: Box 31,1,270,100
Ink RGB(120,120,255),0
Box 1,11,298,88: Box 31,1,268,98
Get Image 100,0,0,300,101
Rem Set Font
Set Text Font "Comic Sans MS",1
Set Text Size 64
Rem Play Game Button
Ink RGB(0,0,10),0: Center Text 150,15,ButtonText$(1)
Ink RGB(255,255,255),0: Center Text 149,14,ButtonText$(1)
Get Image 1,0,0,301,101
Rem Options Button
Paste Image 100,0,0
Ink RGB(0,0,10),0: Center Text 150,15,ButtonText$(2)
Ink RGB(255,255,255),0: Center Text 149,14,ButtonText$(2)
Get Image 2,0,0,301,101
Rem Options Button
Paste Image 100,0,0
Ink RGB(0,0,10),0: Center Text 150,15,ButtonText$(3)
Ink RGB(255,255,255),0: Center Text 149,14,ButtonText$(3)
Get Image 3,0,0,301,101
Rem HiScores Button
Paste Image 100,0,0
Ink RGB(0,0,10),0: Center Text 150,15,ButtonText$(4)
Ink RGB(255,255,255),0: Center Text 149,14,ButtonText$(4)
Get Image 4,0,0,301,101
Rem HiScores Button
Paste Image 100,0,0
Ink RGB(0,0,10),0: Center Text 150,15,ButtonText$(5)
Ink RGB(255,255,255),0: Center Text 149,14,ButtonText$(5)
Get Image 5,0,0,301,101
Rem Exit Button
Paste Image 100,0,0
Ink RGB(0,0,10),0: Center Text 150,15,ButtonText$(6)
Ink RGB(255,255,255),0: Center Text 149,14,ButtonText$(6)
Get Image 6,0,0,301,101
Set Current Bitmap 0
Delete Bitmap 1
Backdrop On
Color Backdrop 0
AutoCam Off
AngleSpacing = 360/MenuOptions
CurrentButton = 1
XDist#=6.0: XDistInc=0-AngleInc
ZDist#=4.0: ZDistInc=AngleInc
Dim ButtonPosition(MenuOptions)
Dim X#(MenuOptions)
Dim Z#(MenuOptions)
For N=0 To MenuOptions-1
X#(N+1) = WrapValue(N*AngleSpacing+180.0)
Z#(N+1) = X#(N+1)
Make Object Box N+1,3,1,1
XRotate Object N+1,30
Texture Object N+1,N+1
Scale Object N+1,100,100,.1
Set Object N+1,1,0,1
Position Object N+1,NewXValue(0,X#(N+1),XDist#),0.0,NewZValue(0,Z#(N+1),ZDist#)
Next N
Rem Highlight Current Option
Make Object Box 100,3,1,1
Set Object 100,1,0,1
XRotate Object 100,30
Texture Object 100,101
Scale Object 100,100,100,.1
Ghost Object On 100
Position Object 100,Object Position X(1),Object Position Y(1),Object Position Z(1)-0.01
Rem Reset Font
Set Text Font "Arial",1
Set Text Size 16
Position Camera 0,5,-10
Point Camera 0,0,0
Return
I have to admit that it looks a bit naff, but that's only down to the fact that all the graphics have to be created by the program. Using properly created buttons, I think this would look a lot better.
TDK_Man