Microsoft Small Basic

Program Listing: NLQ667-2
'Small Basic Gorillas v2.0 for Microsoft Small Basic v0.5
'Redesigned for SB v0.5
'Quiet version - Sounds need to be downloaded seperately and are 'off' by default
GameInit()
Intro()
Options()
PlayGame()
GameOverSub()
'---------------------------------------------------------------------------
Sub GameInit
'setup the key and mouse subroutines
GraphicsWindow.KeyDown = KeyDownEvent
GraphicsWindow.MouseDown = MouseDownEvent
GraphicsWindow.MouseUp = MouseUpEvent

'if the user has sound files, they should be stored in the same directory as the exe file
Path = Program.Directory

'set the screen size and title bar
GraphicsWindow.Width = 700
GraphicsWindow.Height = 500
ScreenX = GraphicsWindow.Width
ScreenY = GraphicsWindow.Height
GraphicsWindow.Title = "Small Basic Gorillas version 2.0"
ScreenCenter = GraphicsWindow.Width / 2
'X and Y are used to draw text and set the position of other things
X = 0
Y = 0

'a switch to allow certain actions only at the desired times
ScreenType = "Intro" 'can be Intro, Options, Round, GameOver

'using text.getsubtext, we can easily convert decimal to hex. usually to set a color
Hex = "0123456789ABCDEF" 'see fadetoblack subroutine for use

'total number of rounds to play
NumberRounds = 3

'a switch to toggle the sound on and off
SoundOnOff = "Off"

'the banana is effected by gravity which can be set on the options screen
GravityArray[1]["Text"] = "1/16x"
GravityArray[1]["Value"] = 0.6125
GravityArray[2]["Text"] = "1/8x"
GravityArray[2]["Value"] = 1.225
GravityArray[3]["Text"] = "1/4x"
GravityArray[3]["Value"] = 2.45
GravityArray[4]["Text"] = "1/2x"
GravityArray[4]["Value"] = 4.9
GravityArray[5]["Text"] = "1x"
GravityArray[5]["Value"] = 9.8
GravityArray[6]["Text"] = "2x"
GravityArray[6]["Value"] = 19.6
GravityArray[7]["Text"] = "3x"
GravityArray[7]["Value"] = 29.4
GravityArray[8]["Text"] = "4x"
GravityArray[8]["Value"] = 39.2

'start with gravity at 9.8 meters per second squared (gravity near earth's surface)
GravityLevel = 5
Gravity = GravityArray[GravityLevel]["Value"]

'used to place the building and other objects
GroundLevel = GraphicsWindow.Height - 20

'by sliding the city buildings to the left a little, the edges of the city match better
CityOffset = 20

'how large a radius the explosion will be
ExplosionSize = 24

'each building has 5 to 20 floors, the number of floors is multiplied by floor height to calculate the height of the building
FloorHeight = 15
'the building sizes are 40, 50 and 60; we add 10, 20 or 30 to the defaultwidth to set the width
BuildingDefaultWidth = 30
WindowWidth = 4
WindowHeight = 6
WindowWidthOffset = 3
WindowHeightOffset = 4

'get images from the internet 'because the speed of intenet connections vary, we give them a message of what is happening
GraphicsWindow.FontSize = 24
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.DrawText(ScreenX / 2 - 175, ScreenY / 3, "Please wait while images are")
GraphicsWindow.DrawText(ScreenX / 2 - 195, ScreenY / 3 + 30, "downloaded from the Internet...")
GorillaArmsDown = ImageList.LoadImage("http://smallbasic.com/drop/gorilla/GorillaArmsDown.bmp")
GorillaLeftUp = ImageList.LoadImage("http://smallbasic.com/drop/gorilla/GorillaLeftUp.bmp")
GorillaRightUp = ImageList.LoadImage("http://smallbasic.com/drop/gorilla/GorillaRightUp.bmp")
GorillaVictory = ImageList.LoadImage("http://smallbasic.com/drop/gorilla/GorillaVictory.bmp")

'if you have the images downloaded, you can comment the above lines and use these instead
'GorillaArmsDown = ImageList.LoadImage(Path + "\GorillaArmsDown.bmp")
'GorillaLeftUp = ImageList.LoadImage(Path + "\GorillaLeftUp.bmp")
'GorillaRightUp = ImageList.LoadImage(Path + "\GorillaRightUp.bmp")
'GorillaVictory = ImageList.LoadImage(Path + "\GorillaVictory.bmp")

'prepare for the next screen
FadeToBlack()

'set up both gorillas
For I = 1 To 2
GorillaArray[I]["Name"] = "Gorilla " + I
GorillaArray[I]["Image"] = GorillaArmsDown
If (I = 1) Then
GorillaArray[I]["ThrowImage"] = GorillaRightUp
Else
GorillaArray[I]["ThrowImage"] = GorillaLeftUp
EndIf
GorillaArray[I]["Angle"] = 0
GorillaArray[I]["Velocity"] = 0
GorillaArray[I]["X"] = 0
GorillaArray[I]["Y"] = 0
GorillaArray[I]["Score"] = 0
EndFor

GorillaWidth = ImageList.GetWidthOfImage(GorillaArray[1]["Image"])
GorillaHeight = ImageList.GetHeightOfImage(GorillaArray[1]["Image"])

'there are four animations drawn to rotate the banana
Banana["Frame"] = 1
Banana["X"] = 0
Banana["Y"] = 0
BananaSize = 4

SunMouth = "Smile" 'smile or 'O' face

EndSub

'---------------------------------------------------------------------------
Sub Intro
GraphicsWindow.BackgroundColor = "#000000"

GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "#FFFFFF"

GraphicsWindow.DrawText(ScreenCenter - 100, Y + 30, "Small Basic G O R I L L A S")
GraphicsWindow.DrawText(ScreenCenter - 220, Y + 60, "Your mission is to hit your opponent with the exploding")
GraphicsWindow.DrawText(ScreenCenter - 238, Y + 80, "banana by varing the angle and power of your throw, taking")
GraphicsWindow.DrawText(ScreenCenter - 215, Y + 100, "into account wind speed, gravity, and the city skyline.")
GraphicsWindow.DrawText(ScreenCenter - 245, Y + 120, "The wind speed is shown by a directional arrow at the bottom")
GraphicsWindow.DrawText(ScreenCenter - 210, Y + 140, "of the playing field, its length relative to its strength.")
GraphicsWindow.DrawText(ScreenCenter - 106, Y + 180, "To skip intro, press any key")
BuildingInit()
DrawCity()
WaitForKeypress()
FadeToBlack()
EndSub

'---------------------------------------------------------------------------
Sub Options
ScreenType = "Options"
OptionThrowing = "False"
GraphicsWindow.Clear()
GraphicsWindow.BackgroundColor = "#000000"
GraphicsWindow.FontSize = 24
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(ScreenCenter - 50, Y + 30, "Options")
GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "#4169E1"
GraphicsWindow.DrawText(ScreenCenter - 110, Y + 65, "Press any key to continue.")

'gravity box
GraphicsWindow.FontSize = 24
GraphicsWindow.BrushColor = "#4169E1"
GraphicsWindow.DrawText(100, 118, "Gravity")
GraphicsWindow.BrushColor = "#0000FF"
GraphicsWindow.PenColor = "#4169E1"
GraphicsWindow.FillRectangle(100, 150, 200, 240)
GraphicsWindow.DrawRectangle(99, 149, 202, 242)
GraphicsWindow.DrawLine(100, 348, 300, 348)
For I = 1 To 8
GraphicsWindow.DrawRectangle(20, I * 30 + 120, 79, 30)
EndFor
UpdateGravity()

'create a small area of the screen and test the gravity by letting the gorilla throw the banana
Thrower = 1
GorillaArray[Thrower]["X"] = 105
GorillaArray[Thrower]["Y"] = 347 - GorillaHeight
GorillaArray[Thrower]["Angle"] = 45
GorillaArray[Thrower]["Velocity"] = 45
Banana["X"] = GorillaArray[Thrower]["X"]
Banana["Y"] = GorillaArray[Thrower]["Y"]
Wind = 0
GraphicsWindow.DrawImage(GorillaArray[Thrower]["Image"],GorillaArray[Thrower]["X"],GorillaArray[Thrower]["Y"])

'there is a problem when calling throwbanana subroutine while in the waitingforkeypress loop
'until a work-around is found, only throw the banana once
'GraphicsWindow.BrushColor = "#FFFFFF"
'GraphicsWindow.PenColor = "#4169E1"
'GraphicsWindow.FillRectangle(151, 351, 146, 36)
'GraphicsWindow.DrawRectangle(151, 351, 146, 36)
'GraphicsWindow.BrushColor = "#4169E1"
'GraphicsWindow.FontSize = 16
'GraphicsWindow.DrawText(175, 360, "Test gravity")

'sound
GraphicsWindow.FontSize = 24
GraphicsWindow.DrawRectangle(525, 150, 150, 100)
GraphicsWindow.DrawText(560, 155, "Sound")
'draw boxes around 'on' and 'off'
GraphicsWindow.DrawRectangle(537, 200, 50, 40)
GraphicsWindow.DrawRectangle(613, 200, 50, 40)
DrawSoundButtons()

'round
GraphicsWindow.BrushColor = "#4169E1"
GraphicsWindow.FontSize = 16
GraphicsWindow.DrawRectangle(525, 300, 150, 100)
GraphicsWindow.DrawText(555, 305, "Number of")
GraphicsWindow.DrawText(545, 325, "rounds to play")
'draw two rectangles to create three boxes
GraphicsWindow.DrawRectangle(535, 350, 130, 40)
GraphicsWindow.DrawRectangle(575, 350, 50, 40)
'draw left and right triangle
GraphicsWindow.DrawTriangle(565, 360, 565, 380, 545, 370)
GraphicsWindow.DrawTriangle(635, 360, 635, 380, 655, 370)
DrawNumberRounds()

'gorilla names
GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "#4169E1"

'we were going to allow the user to change the names, but problems arose and until, fixed comment out
'GraphicsWindow.DrawText(345, 250, "Click the gorilla's")
'GraphicsWindow.DrawText(348, 270, "name to change")
DrawNames()

'throw the banana one time
ThrowBanana()
EraseBanana()

'allow mouseclicks until user presses a key
WaitForKeypress()

'we didn't set thrower in gameinit because it would have messed up options screen, but now we can set it
'don't always let player 1 throw first
Thrower = Math.GetRandomNumber(2)
EndSub

'---------------------------------------------------------------------------
Sub PlayGame
ScreenType = "Round"
For NR = 1 to NumberRounds
'draw a new screen and city
FadeToBlue()
BuildingInit()
DrawCity()
'reset all images
SunMouth = "Smile"
DrawSun()
PlaceGorillas()
DrawGorillas()
UpdateScore()
'continue a round until a gorilla is hit with a banana
GorillaHit = "False"
While (GorillaHit = "False")
'since 3 - 1 = 2 and 3 - 2 = 1, this will swap the thrower and target
Thrower = 3 - Thrower
TargetGorilla = 3 - Thrower

AimBanana()
ThrowBanana()

'if the sun was hit on the previous shot reset to smile
If (SunMouth = "O") Then
SunMouth = "Smile"
SunHit = "False"
DrawSun()
EndIf
EndWhile
EndFor
'wait a second before we clear the screen (in gameoversub)
Program.Delay(1000)
GameOverSub()
EndSub

'---------------------------------------------------------------------------
Sub GameOverSub
ScreenType = "GameOver"
FadeToBlue()
If (Key <> "Y" And SoundOnOff = "On") Then
Sound.Play(Path + "\multi_ending.wav")
EndIf

BuildingInit()
DrawCity()

'place gorillas
GorillaArray[1]["X"] = ScreenCenter - 100
GorillaArray[1]["Y"] = ScreenY / 2 + 5
GorillaArray[2]["X"] = ScreenCenter + 100
GorillaArray[2]["Y"] = ScreenY / 2 + 5

DrawGorillas()

'announce a winner
GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "#FFFFFF"

GraphicsWindow.DrawText(ScreenCenter - 60, ScreenY / 2 - 100, "And the Winner is...")
Program.Delay(1500)
If (GorillaArray[1]["Score"] > GorillaArray[2]["Score"]) Then
GraphicsWindow.DrawText(ScreenCenter - 35, ScreenY / 2 - 75, "Player One!")
GorillaArray[1]["Image"] = GorillaVictory
ElseIf (GorillaArray[1]["Score"] < GorillaArray[2]["Score"]) Then
GraphicsWindow.DrawText(ScreenCenter - 34, ScreenY / 2 - 80, "Player Two!")
GorillaArray[2]["Image"] = GorillaVictory
ElseIf (GorillaArray[1]["Score"] = GorillaArray[2]["Score"]) Then
GraphicsWindow.DrawText(ScreenCenter - 30, ScreenY / 2 - 80, "Its a Tie!!")
GorillaArray[1]["Image"] = GorillaLeftUp
GorillaArray[2]["Image"] = GorillaRightUp
EndIf
'draw the victorious gorilla
DrawGorillas()
If (SoundOnOff = "On") Then
Program.Delay(2000)
Sound.Stop(Path + "\multi_ending.wav")
Sound.Play(Path + "\monkey2.wav")
EndIf

Program.Delay(1500)
GraphicsWindow.DrawText(ScreenCenter - 34, ScreenY / 2 - 40, "Game Over")
Program.Delay(1500)
GraphicsWindow.DrawText(ScreenCenter - 75, ScreenY / 2 - 20, "Press any key to exit")
Sound.Stop(Path + "\monkey2.wav")
WaitForKeypress()
Program.End()
EndSub

'---------------------------------------------------------------------------
Sub BuildingInit
'I seperated the BuildingInit from RoundInit() to add a nice graphic to Intro()

'CitySize is a counter of the number of pixels used to draw the screen
'if CitySize is greater than the screensize then screen is full
CitySize = 0

'how many buildings were we able to fit on the screen
'used also to place gorilla 2
Building = 0
While (CitySize <= ScreenX - 10)
Building = Building + 1
'if the game is over, make a row of buildings to announce winner
If (ScreenType = "GameOver") Then
CityArray[Building]["Height"] = 13 * FloorHeight
Else
'there are 15 different heights, pick one and multipy it by size of each floor
CityArray[Building]["Height"] = (Math.GetRandomNumber(15)+5) * FloorHeight
EndIf

'this varies the size of the buildings from sizes 40, 50, 60
CityArray[Building]["Width"] = (Math.GetRandomNumber(3) * 10) + BuildingDefaultWidth

'store the left hand side of the building in X, placing the gorillas will be easier
CityArray[Building]["X"] = CitySize
'the extra 2 is a offset so the buildings are not so close together
CitySize = CitySize + 2 + CityArray[Building]["Width"]

EndWhile


'setup the lights, some are on and some are off
'The maximum number of windows per building is 20 floors * 6 windows per floor = 120
For I = 1 To 121
LightArray[I] = Math.GetRandomNumber(2)
If (LightArray[I] = 2) Then
LightArray[I] = "#F0E68C"
Else
LightArray[I] = "#808080"
EndIf
EndFor

EndSub

'---------------------------------------------------------------------------
Sub PlaceGorillas
'place gorillas on either side of the screen
BuildingNumber = Math.GetRandomNumber(3) + 1
GorillaArray[1]["X"] = CityArray[BuildingNumber]["X"] + (CityArray[BuildingNumber]["Width"] / 2) - (GorillaWidth / 2) - CityOffset + 5
GorillaArray[1]["Y"] = GroundLevel - CityArray[BuildingNumber]["Height"] - GorillaHeight - 1

BuildingNumber = Building - 1 - Math.GetRandomNumber(2)
GorillaArray[2]["X"] = CityArray[BuildingNumber]["X"] + (CityArray[BuildingNumber]["Width"] / 2) - (GorillaWidth / 2)
GorillaArray[2]["Y"] = GroundLevel - CityArray[BuildingNumber]["Height"] - GorillaHeight - 1
EndSub

'---------------------------------------------------------------------------
Sub AimBanana
GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.PenColor = "#4169E1"
If (Thrower = 1) Then
GraphicsWindow.FillRectangle(10, 15, 120, 72)
GraphicsWindow.DrawRectangle(10, 15, 120, 72)
Else
GraphicsWindow.FillRectangle(ScreenX - 130, 15, 120, 72)
GraphicsWindow.DrawRectangle(ScreenX - 130, 15, 120, 72)
EndIf

GraphicsWindow.BrushColor = "#FFFFFF"
If (Thrower = 1) Then
GraphicsWindow.DrawText(16, 20, GorillaArray[Thrower]["Name"])
GraphicsWindow.DrawText(16, 40, "Angle:")
GetNumberVariable = "Angle"
GetNumber()
GraphicsWindow.DrawText(70, 40, GorillaArray[Thrower]["Angle"])
GraphicsWindow.DrawText(16, 60, "Velocity:")
GetNumberVariable = "Velocity"
GetNumber()
GraphicsWindow.DrawText(90, 60, GorillaArray[Thrower]["Velocity"])
Else
GraphicsWindow.DrawText(ScreenX - 124, 20, GorillaArray[Thrower]["Name"])
GraphicsWindow.DrawText(ScreenX - 124, 40, "Angle:")
GetNumberVariable = "Angle"
GetNumber()
GraphicsWindow.DrawText(ScreenX - 70, 40, GorillaArray[Thrower]["Angle"])
GraphicsWindow.DrawText(ScreenX - 124, 60, "Velocity:")
GetNumberVariable = "Velocity"
GetNumber()
GraphicsWindow.DrawText(ScreenX - 50, 60, GorillaArray[Thrower]["Velocity"])
EndIf
Program.Delay(500)
GraphicsWindow.BrushColor = "#0000FF"
If (Thrower = 1) Then
GraphicsWindow.FillRectangle(9, 14, 122, 74)
Else
GraphicsWindow.FillRectangle(ScreenX - 131, 14, 122, 74)
EndIf
Program.Delay(500)
EndSub

'---------------------------------------------------------------------------
Sub ThrowBanana
'mirror gorilla2's angle, so it throws in the correct direction
If (Thrower = 2) Then
GorillaArray[2]["Angle"] = 90 + (90 - GorillaArray[2]["Angle"])
EndIf

BananaStartX = GorillaArray[Thrower]["X"] + GorillaWidth / 2
BananaStartY = GorillaArray[Thrower]["Y"] - GorillaHeight - 15
Banana["Frame"] = 1

'draw gorilla throwing banana
GraphicsWindow.DrawImage(GorillaArray[Thrower]["ThrowImage"],GorillaArray[Thrower]["X"],GorillaArray[Thrower]["Y"])
Program.Delay(500)
GraphicsWindow.DrawImage(GorillaArray[Thrower]["Image"],GorillaArray[Thrower]["X"],GorillaArray[Thrower]["Y"])

'loop until we hit something
OnScreen = "True"
WhatWasHit = "Nothing"
T = 0.0
While (WhatWasHit = "Nothing")
'erase old banana
If (OnScreen = "True" And Banana["Y"] > 5 And T > 0) Then
EraseBanana()
EndIf
'advance time
T = T + 0.1
'Move banana to new position
MoveBanana()

If (ScreenType = "Options") Then
If (Banana["X"] <= 110 Or Banana["Y"] <= 200 Or Banana["X"] >= 290 Or Banana["Y"] >= 390) Then
WhatWasHit = "OptionScreenBounds"
EraseBanana()
Goto ContactMade
EndIf
DrawBanana()
Program.Delay(30)
'skip down to bottom of loop to avoid unneeded collision checking
Goto ContactMade

EndIf

'check for off screen left right or is the banana too low
If (Banana["X"] <= 5 Or Banana["X"] >= (ScreenX - 5) Or Banana["Y"] > GroundLevel) Then
WhatWasHit = "OutOfBounds"
OnScreen = "False"
Goto ContactMade
EndIf

'is the banana to high to see, but still between left and right margins
If (Banana["Y"] < 5) Then
OnScreen = "False"
Else
OnScreen = "True"
EndIf

'if the banana is not to high, draw it
If (OnScreen = "True" And Banana["Y"] > 10) Then
DrawBanana()
EndIf
Program.Delay(15)

'to avoid targetinvocation errors, check if banana is onscreen, goto offscreen label if it is not
If (OnScreen = "False") Then
Goto OffScreen
EndIf

'check for collisions

'did we hit the sun
BananaUnderSun = "False"
If (Banana["X"] >= SunX - 21 And Banana["X"] <= SunX + 21 And Banana["Y"] >= SunY - 21 And Banana["Y"] <= SunY + 21) Then
If (SunMouth = "Smile" And SoundOnOff = "On") Then
Sound.Play(Path + "\ouch.wav")
Endif
'the sun is shocked it got hit
SunMouth = "O"
'DoSun() 'Sun is redrawn in erasebanana subroutine
SunHit = "True"
BananaUnderSun = "True"
'contact made, but continue
'Goto ContactMade
EndIf
For I = 1 To 2
If (Banana["X"] + BananaSize >= GorillaArray[I]["X"] And Banana["X"] - BananaSize <= GorillaArray[I]["X"] + GorillaWidth And Banana["Y"] + BananaSize >= GorillaArray[I]["Y"] And Banana["Y"] - BananaSize <= GorillaArray[I]["Y"] + GorillaHeight) Then
'if g2 hit g1 or g1 hit itself - g2 scores point
WhatWasHit = "Gorilla"
GorillaHit = "True"
Dancer = 3 - I
EraseBanana()
'center the explosion on the gorilla
Banana["X"] = GorillaArray[I]["X"] + GorillaWidth / 3 - 1
Banana["Y"] = GorillaArray[I]["Y"] + GorillaHeight / 2
DoExplosion()
GorillaArray[Dancer]["Score"] = GorillaArray[Dancer]["Score"] + 1
VictoryDance()
Goto ContactMade
EndIf
EndFor

'did we hit anything else - building
If (Banana["Frame"] = 1) Then
BananaPX1 = 0
BananaPY1 = -4
BananaPX2 = 5
BananaPY2 = 7
EndIf
If (Banana["Frame"] = 2) Then
BananaPX1 = -4
BananaPY1 = 0
BananaPX2 = 7
BananaPY2 = -5
EndIf
If (Banana["Frame"] = 3) Then
BananaPX1 = -2
BananaPY1 = -4
BananaPX2 = 3
BananaPY2 = 7
EndIf
If (Banana["Frame"] = 4) Then
BananaPX1 = -4
BananaPY1 = -2
BananaPX2 = 7
BananaPY2 = 3
EndIf
For GUY = Banana["Y"] + BananaPY1 To Banana["Y"] + BananaPY2
For GUX = Banana["X"] + BananaPX1 To Banana["X"] + BananaPX2
CheckColor = GraphicsWindow.GetPixel(GUX, GUY)
If (CheckColor = "#00FFFF" Or CheckColor = "#CD5C5C" Or CheckColor = "#00FF7F" Or CheckColor = "#4169E1" Or CheckColor = "#F0E68C" Or CheckColor = "#808080") Then
WhatWasHit = "Object"
EraseBanana()
DoMiniExplosion()
If (CheckColor = "#F0E68C" Or CheckColor = "#808080") Then
'shatter glass
ShatterGlass = "True"
EndIf
Goto ContactMade
EndIf
EndFor
EndFor
OffScreen:
ContactMade:
EndWhile
Sound.Stop(Path + "\ouch.wav")
EndSub

'---------------------------------------------------------------------------
Sub MoveBanana
RadianAngle = Math.GetRadians(GorillaArray[Thrower]["Angle"])
InitXVel = Math.Round(Math.Cos(RadianAngle) * GorillaArray[Thrower]["Velocity"])
InitYVel = Math.Round(Math.Sin(RadianAngle) * GorillaArray[Thrower]["Velocity"])

Banana["X"] = Math.Round(BananaStartX + (InitXVel * T) + (0.5 * (Wind / 5) * (T * T)))
If (ScreenType = "Options") Then
'the ground level is different on the options screen
Banana["Y"] = Math.Round(BananaStartY + ((-1 * (InitYVel * T)) + (0.5 * Gravity * (T * T)) + (250 / 35)))
Else
Banana["Y"] = Math.Round(BananaStartY + ((-1 * (InitYVel * T)) + (0.5 * Gravity * (T * T)) + (GroundLevel / 35 )))
EndIf

If (Banana["Y"] < 1) Then
Banana["Y"] = 1
EndIf
EndSub

'---------------------------------------------------------------------------
Sub DrawCity
'CitySize is now just used as a counter to draw the actual landscape
'I offset it by -20 so both sides of the screen would look similar
CitySize = 0 - CityOffset
For BC = 1 To Building
BW = CityArray[BC]["Width"]
BH = CityArray[BC]["Height"]
WBH = Math.Round(BH / 15 - 1)
WBW = Math.Round(BW / 10)

'add a little color so everything doesn't look the same
BuildingColor = Math.GetRandomNumber(3)
If (BuildingColor = 1) Then
GraphicsWindow.BrushColor = "#CD5C5C"
ElseIf (BuildingColor = 2) Then
GraphicsWindow.BrushColor = "#00FF7F"
ElseIf (BuildingColor = 3) Then
GraphicsWindow.BrushColor = "#00FFFF"
EndIf

If (ScreenType = "Intro") Then
'make the color a little transparent
GraphicsWindow.BrushColor = "#44" + Text.GetSubTextToEnd(GraphicsWindow.BrushColor, 2)

'Draw the building
GraphicsWindow.FillRectangle(CitySize, GroundLevel - BH, BW, BH)

'I added an outline to make the buildings look better
GraphicsWindow.PenColor = "#444169E1"
Else
'Draw the building
GraphicsWindow.FillRectangle(CitySize, GroundLevel - BH, BW, BH)

'I added an outline to make the buildings look better
GraphicsWindow.PenColor = "#4169E1"
Endif
GraphicsWindow.DrawRectangle(CitySize, GroundLevel - BH, BW, BH)

'as we draw each building we also draw the windows
'the size of the building determines how many windows it has
For WH = 1 To WBH
For WW = 1 To WBW
GraphicsWindow.BrushColor = LightArray[WH * WW]
If (ScreenType = "Intro") Then
'make the color a little transparent
GraphicsWindow.BrushColor = "#44" + Text.GetSubTextToEnd(GraphicsWindow.BrushColor, 2)
Endif

'draw the window
GraphicsWindow.FillRectangle(CitySize - 5 + (WW * WindowWidthOffset * 3), GroundLevel - 4 - (FloorHeight * WH), WindowWidth, WindowHeight)
EndFor
EndFor
CitySize = CitySize + 4 + CityArray[BC]["Width"]
EndFor
SetWind()
EndSub

'---------------------------------------------------------------------------
Sub SetWind
'this code is very similar to the original
'create wind
Wind = Math.GetRandomNumber(10) - 5
If (Math.GetRandomNumber(3) = 2) Then
If (Wind > 0) Then
Wind = Wind + Math.GetRandomNumber(10)
Else
Wind = Wind - Math.GetRandomNumber(10)
EndIf
EndIf

'draw wind speed arrow below the city
GraphicsWindow.PenColor = "#FF0000"

If (Wind <> 0) Then
WindLine = Wind * 3 * (ScreenX / 320)
GraphicsWindow.DrawLine(ScreenCenter, ScreenY - 10, ScreenCenter + WindLine, ScreenY - 10)
If (Wind > 0) Then
ArrowDir = -4
Else
ArrowDir = 4
EndIf
GraphicsWindow.DrawLine(ScreenCenter + WindLine, ScreenY - 10, ScreenCenter + WindLine + ArrowDir, ScreenY - 10 - 4)
GraphicsWindow.DrawLine(ScreenCenter + WindLine, ScreenY - 10, ScreenCenter + WindLine + ArrowDir, ScreenY - 10 + 4)
Else
'if there's no wind tell them
GraphicsWindow.FontSize = 12
GraphicsWindow.BrushColor = "#FF0000"
GraphicsWindow.DrawText(ScreenCenter - 24, ScreenY - 18, "No Wind")
EndIf
EndSub

'---------------------------------------------------------------------------
Sub DrawSun
'set position of sun
SunX = ScreenCenter
SunY = 60

'clear old sun
GraphicsWindow.BrushColor = "#0000FF"
GraphicsWindow.FillRectangle(SunX - 20, SunY - 20, 40, 40)

'draw new sun
'body
GraphicsWindow.BrushColor = "#FFFF00"
GraphicsWindow.FillEllipse(SunX -15, SunY -15, 30, 30)

'rays
GraphicsWindow.PenColor = "#FFFF00"
GraphicsWindow.DrawLine(SunX, SunY - 20, SunX, SunY + 20)
GraphicsWindow.DrawLine(SunX - 20, SunY, SunX + 20, SunY)

GraphicsWindow.DrawLine(SunX - 14, SunY - 14, SunX + 14, SunY + 14)
GraphicsWindow.DrawLine(SunX - 14, SunY + 14, SunX + 14 , SunY - 14)

GraphicsWindow.DrawLine(SunX - 8, SunY - 18, SunX + 8, SunY + 18)
GraphicsWindow.DrawLine(SunX - 8, SunY + 18, SunX + 8 , SunY - 18)
GraphicsWindow.DrawLine(SunX - 18, SunY - 8, SunX + 18, SunY + 8)
GraphicsWindow.DrawLine(SunX - 18, SunY + 8, SunX + 18 , SunY - 8)

'mouth
If (SunMouth = "Smile") Then
GraphicsWindow.PenColor = "#000000"
GraphicsWindow.DrawLine(SunX -6, SunY +4, SunX -5, SunY +7)
GraphicsWindow.DrawLine(SunX -4, SunY +7, SunX +4, SunY +7)
GraphicsWindow.DrawLine(SunX +5, SunY +7, SunX +6, SunY +4)
Else
'O mouth
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillEllipse(SunX -3, SunY + 3, 6, 6)
EndIf

'eyes
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillEllipse(SunX -6, SunY -5, 3, 3)
GraphicsWindow.FillEllipse(SunX +4, SunY -5, 3, 3)
EndSub

'---------------------------------------------------------------------------
Sub DrawGorillas
GraphicsWindow.DrawImage(GorillaArray[1]["Image"], GorillaArray[1]["X"], GorillaArray[1]["Y"])
GraphicsWindow.DrawImage(GorillaArray[2]["Image"], GorillaArray[2]["X"], GorillaArray[2]["Y"])
EndSub

'---------------------------------------------------------------------------
Sub DrawBanana
'draw Banana - yellow color
GraphicsWindow.BrushColor = "#FFFF00"

If (Banana["Frame"] = 1) Then
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"], 2, 4)
GraphicsWindow.FillRectangle(Banana["X"] + 2, Banana["Y"] - 2, 2, 8)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] - 4, 2, 4)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] + 4, 2, 4)
EndIf
'upward pointing ^ banana
If (Banana["Frame"] = 2) Then
'rotate the banana the right way
If (Thrower = 1) Then
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] + 4, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] + 2, 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"], 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] + 4, 4, 2)
Else
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"], 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"] + 2, 4, 2)
EndIf
EndIf
'right pointing ) banana
If (Banana["Frame"] = 3) Then
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] - 4, 2, 4)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"] - 2, 2, 8)
GraphicsWindow.FillRectangle(Banana["X"] + 2, Banana["Y"], 2, 4)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] + 4, 2, 4)
EndIf
'downward pointing V banana
If (Banana["Frame"] = 4) Then
'rotate the banana the right way
If (Thrower = 1) Then
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"], 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"] + 2, 4, 2)
Else
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] + 4, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] + 2, 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"], 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] + 4, 4, 2)
EndIf
EndIf
EndSub

'---------------------------------------------------------------------------
Sub EraseBanana
'erase banana - blue color
GraphicsWindow.BrushColor = "#0000FF"
If (Banana["Frame"] = 1) Then
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"], 2, 4)
GraphicsWindow.FillRectangle(Banana["X"] + 2, Banana["Y"] - 2, 2, 8)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] - 4, 2, 4)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] + 4, 2, 4)
EndIf
'upward pointing ^ banana
If (Banana["Frame"] = 2) Then
'rotate the banana the right way
If (Thrower = 1) Then
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] + 4, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] + 2, 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"], 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] + 4, 4, 2)
Else
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"], 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"] + 2, 4, 2)
EndIf
EndIf
'right pointing ) banana
If (Banana["Frame"] = 3) Then
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] - 4, 2, 4)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"] - 2, 2, 8)
GraphicsWindow.FillRectangle(Banana["X"] + 2, Banana["Y"], 2, 4)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] + 4, 2, 4)
EndIf
'downward pointing V banana
If (Banana["Frame"] = 4) Then
'rotate the banana the right way
If (Thrower = 1) Then
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] - 2, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"], 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"] + 2, 4, 2)
Else
GraphicsWindow.FillRectangle(Banana["X"] - 4, Banana["Y"] + 4, 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] - 2, Banana["Y"] + 2, 8, 2)
GraphicsWindow.FillRectangle(Banana["X"], Banana["Y"], 4, 2)
GraphicsWindow.FillRectangle(Banana["X"] + 4, Banana["Y"] + 4, 4, 2)
EndIf
EndIf

'goto the next frame in the animation
Banana["Frame"] = Banana["Frame"] + 1

'if at the last animation frame, reset
If (Banana["Frame"] > 4) then
Banana["Frame"] = 1
EndIf

'redraw sun if banana is near
If (BananaUnderSun = "True") Then
DrawSun()
EndIf
EndSub

'---------------------------------------------------------------------------
Sub DoMiniExplosion
'if the banana hits something other than the gorilla, just make a small explosion
If (SoundOnOff = "On") Then
Sound.Play(Path + "\Explo Classic.wav")
EndIf
'erase the Banana
EraseBanana()
GraphicsWindow.BrushColor = "#B22222"
For C = 1 To ExplosionSize - 5
GraphicsWindow.FillEllipse(Banana["X"] - C / 4, Banana["Y"] - C / 4, C , C)
Program.Delay(25)
EndFor
GraphicsWindow.BrushColor = "#0000FF"
'add 1 to cleanup explosion
For C = 1 To ExplosionSize - 4
GraphicsWindow.FillEllipse(Banana["X"] - C / 4, Banana["Y"] - C / 4, C, C)
Program.Delay(25)
EndFor
Sound.Stop(Path + "\Explo Classic.wav")
If (ShatterGlass = "True" And SoundOnOff = "On") Then
Sound.Play(Path + "\glass_shatter_c.wav")
Program.Delay(1100)
Sound.Stop(Path + "\glass_shatter_c.wav")
ShatterGlass = "False"
EndIf

EndSub

'---------------------------------------------------------------------------
Sub DoExplosion
If (SoundOnOff = "On") Then
Sound.Play(Path + "\bigboom.wav")
EndIf
GraphicsWindow.BrushColor = "#B22222"
For C = 1 To ExplosionSize
GraphicsWindow.FillEllipse(Banana["X"] - C , Banana["Y"] - C , C * 3 , C * 2)
Program.Delay(25)
EndFor
GraphicsWindow.BrushColor = "#0000FF"
'add 1 to cleanup explosion
For C = 1 To ExplosionSize + 1
GraphicsWindow.FillEllipse(Banana["X"] - C , Banana["Y"] - C , C * 3 , C * 2)
Program.Delay(25)
EndFor
Sound.Stop(Path + "\bigboom.wav")
EndSub

'---------------------------------------------------------------------------
Sub VictoryDance
'Dancer = who does victory dance
If (Dancer = 1) Then
VX = GorillaArray[1]["X"]
VY = GorillaArray[1]["Y"]
Else
VX = GorillaArray[2]["X"]
VY = GorillaArray[2]["Y"]
EndIf
If (SoundOnOff = "On") Then
Sound.Play(Path + "\monkey2.wav")
EndIf
For VD = 1 To 6
GraphicsWindow.DrawImage(GorillaLeftUp, VX, VY)
Program.Delay(200)
GraphicsWindow.DrawImage(GorillaRightUp, VX, VY)
Program.Delay(200)
EndFor
Sound.Stop(Path + "\monkey2.wav")
UpdateScore()
EndSub

'---------------------------------------------------------------------------
Sub UpdateScore
'write players names
GraphicsWindow.FontSize = 12
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(20, ScreenY - 17, GorillaArray[1]["Name"])
GraphicsWindow.DrawText(ScreenX - 90, ScreenY - 17, GorillaArray[2]["Name"])
'drawtext score
GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "#0000FF"
GraphicsWindow.FillRectangle(ScreenCenter - 55, ScreenY - 60, 125, 20)
GraphicsWindow.PenColor = "#4169E1"
GraphicsWindow.DrawRectangle(ScreenCenter - 55, ScreenY - 60, 125, 20)
GraphicsWindow.BrushColor = "#FFFFFF"
ScoreLength = Text.GetLength(GorillaArray[1]["Score"] + "> Score <" + GorillaArray[2]["Score"])
GraphicsWindow.DrawText(ScreenCenter - (ScoreLength * 4.5) + 5, ScreenY - 60, GorillaArray[1]["Score"] + "> Score <" + GorillaArray[2]["Score"])
EndSub

'---------------------------------------------------------------------------
Sub UpdateAngleVelocity
If (Thrower = 1) Then
If (GetNumberVariable = "Angle") Then
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillRectangle(70, 40, 55, 20)
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(70, 40, UserNumber)
Else
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillRectangle(90, 60, 35, 20)
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(90, 60, UserNumber)
EndIf
Else
If (GetNumberVariable = "Angle") Then
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillRectangle(ScreenX - 70, 40, 55, 20)
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(ScreenX - 70, 40, UserNumber)
Else
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillRectangle(ScreenX - 50, 60, 35, 20)
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(ScreenX - 50, 60, UserNumber)
EndIf
EndIf
EndSub

'---------------------------------------------------------------------------
Sub UpdateGravity
GraphicsWindow.FontSize = 16
For I = 1 To 8
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.DrawText(85 - Text.GetLength(GravityArray[I]["Text"])*10, I * 30 + 125, GravityArray[I]["Text"])
If (GravityLevel = I) Then
GraphicsWindow.BrushColor = "#00FF00"
Gravity = GravityArray[I]["Value"]
Else
GraphicsWindow.BrushColor = "#4169E1"
EndIf
GraphicsWindow.DrawText(85 - Text.GetLength(GravityArray[I]["Text"])*10, I * 30 + 125, GravityArray[I]["Text"])
EndFor
EndSub

'---------------------------------------------------------------------------
Sub DrawSoundButtons
GraphicsWindow.FontSize = 24
If (SoundOnOff = "On") Then
GraphicsWindow.BrushColor = "#00FF00"
Else
GraphicsWindow.BrushColor = "#4169E1"
EndIf
GraphicsWindow.DrawText(545, 205, "On")

If (SoundOnOff = "Off") Then
GraphicsWindow.BrushColor = "#00FF00"
Else
GraphicsWindow.BrushColor = "#4169E1"
EndIf
GraphicsWindow.DrawText(618, 205, "Off")
EndSub

'---------------------------------------------------------------------------
Sub DrawNumberRounds
DrawingNumberRounds = "True"
Program.Delay(100)
For I = 12 To 32 Step 2
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillRectangle(576, 351, 48, 38)
GraphicsWindow.FontSize = I
GraphicsWindow.BrushColor = "#FFFFFF"
If (Text.GetLength(NumberRounds) = 1) Then
GraphicsWindow.DrawText(600 - (I * 0.3125), 370 - (I * 0.625), NumberRounds)
Else
GraphicsWindow.DrawText(600 - (I * 0.625), 370 - (I * 0.625), NumberRounds)
EndIf
Program.Delay(50)
EndFor
DrawingNumberRounds = "False"
EndSub

'---------------------------------------------------------------------------
Sub DrawNames
GraphicsWindow.BrushColor = "#FFFFFF"
For I = 1 to 2
If (GorillaArray[I]["Name"] <> Text.Append("Gorilla ", I)) Then
GraphicsWindow.DrawText(413 - Text.GetLength(GorillaArray[I]["Name"]) * 5, I * 113 + (I * I * 25) + 30, GorillaArray[I]["Name"])
EndIf
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.FillRectangle(326, I * 120 + 70 + 1, 173, 38)
GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawRectangle(325, I * 120 + 70, 175, 40)
GraphicsWindow.DrawText(413 - Text.GetLength(GorillaArray[I]["Name"]) * 5, I * 120 + 80, GorillaArray[I]["Name"])
EndFor
EndSub

'---------------------------------------------------------------------------
'Sub UpdateNewName
'EndSub

'---------------------------------------------------------------------------
Sub FadeToBlack
'fade to black
For I = 1 to 10 Step 0.5
HexText = Text.GetSubText(Hex, Math.Round(I), 1)
GraphicsWindow.BrushColor = "#" + HexText + HexText + "000000"
GraphicsWindow.FillRectangle(0,0,GraphicsWindow.Width, GraphicsWindow.Height)
EndFor
EndSub

'---------------------------------------------------------------------------
Sub FadeToBlue
'fade to blue
For I = 1 to 10 Step 0.5
HexText = Text.GetSubText(Hex, Math.Round(I), 1)
GraphicsWindow.BrushColor = "#" + HexText + HexText + "0000FF"
GraphicsWindow.FillRectangle(0,0,GraphicsWindow.Width, GraphicsWindow.Height)
EndFor
EndSub

'---------------------------------------------------------------------------
Sub ConfirmQuit
'ask user to confirm they want to quit

'display question just under sun so we don't mess up any other graphics
GraphicsWindow.BrushColor = "#000000"
GraphicsWindow.PenColor = "#4169E1"

GraphicsWindow.FillRectangle(ScreenCenter - 100, 80, 200, 40)
GraphicsWindow.DrawRectangle(ScreenCenter - 100, 80, 200, 40)

GraphicsWindow.BrushColor = "#FFFFFF"
GraphicsWindow.DrawText(ScreenCenter - 20, 80, "Quit")
GraphicsWindow.DrawText(ScreenCenter - 75, 100, "Are you sure? Y/N")
If (SoundOnOff = "On") Then
Sound.Play(Path + "\homerquit.wav")
EndIf
WaitForKeypress()
If (Key = "Y") Then
GameOverSub()
Else
'erase box and continue playing
GraphicsWindow.BrushColor = "#0000FF"
'make a box slightly bigger to erase question
GraphicsWindow.FillRectangle(ScreenCenter - 101, 79, 202, 42)
EndIf
Sound.Stop(Path + "\homerquit.wav")
EndSub

'---------------------------------------------------------------------------
'Sub GetName
'EndSub

'---------------------------------------------------------------------------
Sub GetNumber
Key = "" 'reset key. if last key pressed was return, the user will not be able to enter data
UserNumber = 0
While (Key <> "RETURN")
WaitForKeypress()

'match keypresses to actions
If (Key = "ESCAPE") Then
ConfirmQuit()
ElseIf (Key = "BACK") Then
UserNumber = Math.Floor(UserNumber / 10)
UpdateAngleVelocity()
Else
'convert numbers (D1 or Numpad1 become 1), stored in keytonumber
KeyToNumber = Text.GetSubTextToEnd(Key, Text.GetLength(Key))
For I = 0 to 9
If (KeyToNumber = I) Then
UserNumber = UserNumber * 10 + KeyToNumber
UpdateAngleVelocity()
Endif
EndFor
EndIf
EndWhile
If (GetNumberVariable = "Angle") Then
GorillaArray[Thrower]["Angle"] = UserNumber
ElseIf (GetNumberVariable = "Velocity") Then
GorillaArray[Thrower]["Velocity"] = UserNumber
EndIf
EndSub

'---------------------------------------------------------------------------
Sub WaitForKeypress
WaitingForKey = "True"
While (WaitingForKey = "True")
'the keydownevent will change waitingforkey, so nothing needs to be done here
EndWhile
EndSub

'---------------------------------------------------------------------------
Sub MouseDownEvent
'store MouseX and MouseY
MX = GraphicsWindow.MouseX
MY = GraphicsWindow.MouseY
'TextWindow.WriteLine("Mouse: " + MX + ":" + MY)
EndSub

'---------------------------------------------------------------------------
Sub MouseUpEvent
If (ScreenType = "Options") Then
If (OptionThrowing = "False") Then
'test gravity button
If (MX >= 151 And MY >= 351 And MX <= 299 And MY <= 389) Then
'an error occurs when we call this routine. until it is fixed, comment it out
'throw banana again
'ThrowBanana()
'EraseBanana()
EndIf
EndIf

'let the user choose between eight different settings for gravity
If (OptionThrowing = "False") Then
For I = 1 To 8
If (MX >= 20 And MY >= I * 30 + 120 And MX <= 100 And MY <= I * 30 + 150) Then
GravityLevel = I
UpdateGravity()
EndIf
EndFor
EndIf

'sound buttons
If (MX >= 537 And MY >= 200 And MX <= 587 And MY <= 240) Then
If (SoundOnOff = "Off") Then
SoundOnOff = "On"
DrawSoundButtons()
EndIf
ElseIf (MX >= 613 And MY >= 200 And MX <= 663 And MY <= 240) Then
If (SoundOnOff = "On") Then
SoundOnOff = "Off"
DrawSoundButtons()
EndIf
EndIf

'number rounds button
If (DrawingNumberRounds = "False") Then
If (MX >= 535 And MY >= 350 And MX <= 575 And MY <= 390) Then
If (NumberRounds > 2) Then
NumberRounds = NumberRounds - 1
Endif
DrawNumberRounds()
ElseIf (MX >= 625 And MY >= 350 And MX <= 665 And MY <= 390) Then
If (NumberRounds < 17) Then
NumberRounds = NumberRounds + 1
Endif
DrawNumberRounds()
EndIf
EndIf

'name buttons
If (MX >= 325 And MY >= 190 And MX <= 500 And MY <= 230) Then
'change gorilla 1 name
Thrower = 1
'we were going to allow the user to change the names, but problems arose and until, fixed comment out
'GetName()
ElseIf (MX >= 325 And MY >= 310 And MX <= 500 And MY <= 350) Then
'change gorilla 2 name
Thrower = 2
'we were going to allow the user to change the names, but problems arose and until, fixed comment out
'GetName()
EndIf
EndIf
EndSub

'---------------------------------------------------------------------------
Sub KeyDownEvent
'the user pressed something, so set waitingforkey to false, but allow user to change gorilla names in options screen
WaitingForKey = "False"
'get the key that was pressed and convert to uppercase
Key = Text.ConvertToUpperCase(GraphicsWindow.LastKey)

'allow the user to turn the sound on/off at any time
If (Key = "S") Then
If (SoundOnOff = "On") Then
SoundOnOff = "Off"
Else
SoundOnOff = "On"
EndIf
EndIf

'skip intro screen
If (ScreenType = "Intro") Then
'set BC to building so we stop drawing the city, which is slow at the beginning but speeds up later
'also set WH to WBH
BC = Building
WH = WBH
WW = WBW
'wait a bit to catch up to waitingforkeypress
Program.Delay(600)
'set waiting to false so we goto options
WaitingForKey = "False"
EndIf

'skip options screen
If (ScreenType = "Options") Then
'skip options
EraseBanana()
WhatWasHit = "Keypress"
'wait a bit to catch up to waitingforkeypress
Program.Delay(600)
'set waiting to false so we goto options
WaitingForKey = "False"
EndIf
EndSub