1123 lines
57 KiB
VB.net
1123 lines
57 KiB
VB.net
Namespace BattleSystem
|
|
|
|
Public Class BattleMenu
|
|
|
|
Enum MenuStates
|
|
Main
|
|
Moves
|
|
End Enum
|
|
|
|
Public CanInteract As Boolean = True
|
|
Public MenuState As MenuStates = MenuStates.Main
|
|
Public Visible As Boolean = False
|
|
|
|
Public Sub New()
|
|
Me.Reset()
|
|
Dim blockinteractscreen() As Screen.Identifications = {Screen.Identifications.PartyScreen, Screen.Identifications.SummaryScreen, Screen.Identifications.PauseScreen, Screen.Identifications.ChatScreen}
|
|
If blockinteractscreen.Contains(Core.CurrentScreen.Identification) = True Then
|
|
CanInteract = False
|
|
Else
|
|
CanInteract = True
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub Reset()
|
|
_moveMenuAlpha = 255
|
|
_moveMenuChoseMove = False
|
|
MenuState = MenuStates.Main
|
|
End Sub
|
|
|
|
Private Sub DrawWeather(ByVal BattleScreen As BattleScreen)
|
|
Dim y As Integer = -1
|
|
Dim x As Integer = 0
|
|
Dim t As String = ""
|
|
|
|
Select Case BattleScreen.FieldEffects.Weather
|
|
Case BattleWeather.WeatherTypes.Sunny
|
|
y = 0
|
|
t = "Sunny"
|
|
Case BattleWeather.WeatherTypes.Rain
|
|
y = 34
|
|
t = "Rain"
|
|
Case BattleWeather.WeatherTypes.Sandstorm
|
|
y = 68
|
|
t = "Sandstorm"
|
|
Case BattleWeather.WeatherTypes.Hailstorm
|
|
y = 102
|
|
t = "Hailstorm"
|
|
Case BattleWeather.WeatherTypes.Foggy
|
|
x = 88
|
|
y = 0
|
|
t = "Foggy"
|
|
Case BattleWeather.WeatherTypes.Snow
|
|
x = 88
|
|
y = 34
|
|
t = "Snow"
|
|
End Select
|
|
|
|
If y > -1 Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\WeatherIcons"), New Rectangle(22, Core.windowSize.Height - 90, 176, 68), New Rectangle(x, y, 88, 34), Color.White)
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(110 - FontManager.MainFont.MeasureString(t).X / 2, Core.windowSize.Height - 44), Color.Black)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DrawTerrain(ByVal BattleScreen As BattleScreen)
|
|
Dim y As Integer = -1
|
|
Dim x As Integer = 0
|
|
Dim t As String = ""
|
|
|
|
With BattleScreen.FieldEffects
|
|
If .ElectricTerrain > 0 Then
|
|
x = 352
|
|
y = 0
|
|
t = "Electric Terrain"
|
|
End If
|
|
If .GrassyTerrain > 0 Then
|
|
x = 352
|
|
y = 34
|
|
t = "Grassy Terrain"
|
|
End If
|
|
If .MistyTerrain > 0 Then
|
|
x = 352
|
|
y = 68
|
|
t = "Misty Terrain"
|
|
End If
|
|
If .PsychicTerrain > 0 Then
|
|
x = 352
|
|
y = 102
|
|
t = "Psychic Terrain"
|
|
End If
|
|
End With
|
|
|
|
If y > -1 Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\WeatherIcons"), New Rectangle(222, Core.windowSize.Height - 90, 176, 68), New Rectangle(x, y, 88, 34), Color.White)
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(310 - FontManager.MainFont.MeasureString(t).X / 2, Core.windowSize.Height - 44), Color.Black)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DrawPokemonStats(ByVal pos As Vector2, ByVal p As Pokemon, ByVal BattleScreen As BattleScreen, ByVal largeStatsDisplay As Boolean, ByVal DrawCaught As Boolean)
|
|
Dim shinyHue As Color = Color.White
|
|
|
|
If p.IsShiny = True Then
|
|
shinyHue = Color.Gold
|
|
End If
|
|
If _moveMenuChoseMove = True Then
|
|
shinyHue.A = CByte(_moveMenuAlpha.Clamp(0, 255))
|
|
End If
|
|
|
|
'Draw large stats:
|
|
If largeStatsDisplay = True Then
|
|
'Background
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + 14, CInt(pos.Y) + 14, 182, 42), New Rectangle(0, 0, 91, 21), shinyHue)
|
|
|
|
'Name:
|
|
Dim nameInformation As String = p.GetDisplayName() & " Lv. " & p.Level.ToString()
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, nameInformation, New Vector2(pos.X + 2, pos.Y + 2), New Color(0, 0, 0, _moveMenuAlpha))
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, nameInformation, New Vector2(pos.X, pos.Y), shinyHue)
|
|
|
|
'Gender:
|
|
If p.Gender = Pokemon.Genders.Male Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X + 6 + FontManager.MainFont.MeasureString(nameInformation).X), CInt(pos.Y), 12, 20), New Rectangle(0, 104, 6, 10), New Color(255, 255, 255, _moveMenuAlpha))
|
|
ElseIf p.Gender = Pokemon.Genders.Female Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X + 6 + FontManager.MainFont.MeasureString(nameInformation).X), CInt(pos.Y), 12, 20), New Rectangle(6, 104, 6, 10), New Color(255, 255, 255, _moveMenuAlpha))
|
|
End If
|
|
|
|
'HP indicator:
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, p.HP & "/" & p.MaxHP, New Vector2(pos.X + 102, pos.Y + 37 + 3), New Color(0, 0, 0, _moveMenuAlpha))
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, p.HP & "/" & p.MaxHP, New Vector2(pos.X + 100, pos.Y + 35 + 3), shinyHue)
|
|
|
|
'EXP Bar:
|
|
If BattleScreen.CanReceiveEXP = True Then
|
|
Dim NextLvExp As Integer = p.NeedExperience(p.Level + 1) - p.NeedExperience(p.Level)
|
|
Dim currentExp As Integer = p.Experience - p.NeedExperience(p.Level)
|
|
If p.Level = 1 Then
|
|
NextLvExp = p.NeedExperience(p.Level + 1)
|
|
currentExp = p.Experience
|
|
End If
|
|
|
|
Dim NeedExp As Integer = NextLvExp - currentExp
|
|
|
|
If p.Level = CInt(GameModeManager.GetGameRuleValue("MaxLevel", "100")) Then
|
|
NextLvExp = 0
|
|
Else
|
|
Dim barPercentage As Integer = CInt((currentExp / NextLvExp) * 100)
|
|
If barPercentage > 0 Then
|
|
Dim EXPlength As Integer = CInt(Math.Ceiling(144 / 100 * barPercentage))
|
|
|
|
If currentExp = 0 Then
|
|
EXPlength = 0
|
|
Else
|
|
If EXPlength <= 0 Then
|
|
EXPlength = 1
|
|
End If
|
|
End If
|
|
If EXPlength = 144 Then
|
|
EXPlength = 143
|
|
End If
|
|
|
|
Dim t = TextureManager.GetTexture("GUI\Battle\Interface")
|
|
For dX As Integer = 0 To EXPlength Step 4
|
|
Core.SpriteBatch.Draw(t, New Rectangle(CInt(pos.X) + 50 + dX, CInt(pos.Y) + 54, 4, 6), New Rectangle(0, 43, 2, 3), New Color(255, 255, 255, _moveMenuAlpha))
|
|
Next
|
|
End If
|
|
End If
|
|
End If
|
|
Else 'Smaller stats display
|
|
'Background
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + 14, CInt(pos.Y) + 14, 182, 32), New Rectangle(0, 21, 91, 16), shinyHue)
|
|
|
|
'Name:
|
|
Dim nameInformation As String = p.GetDisplayName() & " Lv. " & p.Level.ToString()
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, nameInformation, New Vector2(pos.X + 2, pos.Y + 2), New Color(0, 0, 0, _moveMenuAlpha))
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, nameInformation, New Vector2(pos.X, pos.Y), shinyHue)
|
|
|
|
'Gender:
|
|
If p.Gender = Pokemon.Genders.Male Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X + 6 + FontManager.MainFont.MeasureString(nameInformation).X), CInt(pos.Y), 12, 20), New Rectangle(0, 104, 6, 10), New Color(255, 255, 255, _moveMenuAlpha))
|
|
ElseIf p.Gender = Pokemon.Genders.Female Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X + 6 + FontManager.MainFont.MeasureString(nameInformation).X), CInt(pos.Y), 12, 20), New Rectangle(6, 104, 6, 10), New Color(255, 255, 255, _moveMenuAlpha))
|
|
End If
|
|
End If
|
|
|
|
Dim HPpercentage As Single = (100.0F / p.MaxHP) * p.HP
|
|
Dim HPlength As Integer = CInt(Math.Ceiling(140 / 100 * HPpercentage.Clamp(1, 999)))
|
|
|
|
If p.HP = 0 Then
|
|
HPlength = 0
|
|
Else
|
|
If HPlength <= 0 Then
|
|
HPlength = 1
|
|
End If
|
|
End If
|
|
If p.HP = p.MaxHP Then
|
|
HPlength = 140
|
|
Else
|
|
If HPlength = 140 Then
|
|
HPlength = 139
|
|
End If
|
|
End If
|
|
|
|
Dim cX As Integer = 0
|
|
If HPpercentage <= 75.0F And HPpercentage > 25.0F Then
|
|
cX = 2
|
|
ElseIf HPpercentage <= 25.0F Then
|
|
cX = 4
|
|
End If
|
|
|
|
If HPlength > 0 Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + 54, CInt(pos.Y) + 26, 2, 12), New Rectangle(cX, 37, 1, 6), New Color(255, 255, 255, _moveMenuAlpha))
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + 2 + 54, CInt(pos.Y) + 26, HPlength - 4, 12), New Rectangle(cX + 1, 37, 1, 6), New Color(255, 255, 255, _moveMenuAlpha))
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + HPlength - 2 + 54, CInt(pos.Y) + 26, 2, 12), New Rectangle(cX, 37, 1, 6), New Color(255, 255, 255, _moveMenuAlpha))
|
|
End If
|
|
|
|
Dim caughtX As Integer = 0
|
|
Dim StatusTexture As Texture2D = BattleStats.GetStatImage(p.Status)
|
|
If Not StatusTexture Is Nothing Then
|
|
Core.SpriteBatch.Draw(StatusTexture, New Rectangle(CInt(pos.X) + 12, CInt(pos.Y) + 26, 38, 12), New Color(255, 255, 255, _moveMenuAlpha))
|
|
caughtX = -16
|
|
End If
|
|
|
|
If DrawCaught = True Then
|
|
If Pokedex.GetEntryType(Core.Player.PokedexData, p.Number) > 1 Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + caughtX, CInt(pos.Y) + 22, 20, 20), New Rectangle(0, 46, 10, 10), New Color(255, 255, 255, _moveMenuAlpha))
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DrawPokeBalls(ByVal pos As Vector2, ByVal BattleScreen As BattleScreen, ByVal PokemonList As List(Of Pokemon), ByVal Mirrored As Boolean)
|
|
If Mirrored = True Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X), CInt(pos.Y), 160, 14), New Rectangle(128, 7, 80, 7), New Color(255, 255, 255, _moveMenuAlpha))
|
|
Else
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X), CInt(pos.Y), 160, 14), New Rectangle(128, 0, 80, 7), New Color(255, 255, 255, _moveMenuAlpha))
|
|
End If
|
|
|
|
Dim mouseHovers As Boolean = False
|
|
|
|
Dim startX As Integer = 12
|
|
If Mirrored = True Then
|
|
startX = 76
|
|
End If
|
|
|
|
For i = 0 To 5
|
|
Dim texturePos As Integer = 0
|
|
|
|
If PokemonList.Count - 1 >= i Then
|
|
Dim p As Pokemon = PokemonList(i)
|
|
If p.Status = Pokemon.StatusProblems.Fainted Then
|
|
texturePos = 10
|
|
ElseIf p.Status = Pokemon.StatusProblems.None Then
|
|
texturePos = 0
|
|
Else
|
|
texturePos = 30
|
|
End If
|
|
|
|
If MouseHandler.IsInRectangle(New Rectangle(CInt(pos.X) + startX + 12 * i, CInt(pos.Y) + 1, 10, 10)) = True And Mirrored = False And _moveMenuChoseMove = False Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + startX + 12 * i - 27, CInt(pos.Y) - 86, 64, 84), New Rectangle(128, 16, 32, 42), New Color(255, 255, 255, _mainMenuTeamPreviewAlpha))
|
|
Core.SpriteBatch.Draw(PokemonList(i).GetMenuTexture(True), New Rectangle(CInt(pos.X) + startX + 12 * i - 27, CInt(pos.Y) - 86, 64, 64), New Color(255, 255, 255, _mainMenuTeamPreviewAlpha))
|
|
|
|
If _mainMenuTeamPreviewAlpha < 255 Then
|
|
_mainMenuTeamPreviewAlpha += 25
|
|
If _mainMenuTeamPreviewAlpha > 255 Then
|
|
_mainMenuTeamPreviewAlpha = 255
|
|
End If
|
|
End If
|
|
|
|
_mainMenuTeamPreviewLastIndex = i
|
|
|
|
mouseHovers = True
|
|
End If
|
|
Else
|
|
texturePos = 20
|
|
End If
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + startX + 12 * i, CInt(pos.Y) + 1, 10, 10), New Rectangle(texturePos, 46, 10, 10), New Color(255, 255, 255, _moveMenuAlpha))
|
|
Next
|
|
|
|
If mouseHovers = False And Mirrored = False Then
|
|
If _mainMenuTeamPreviewAlpha > 0 Then
|
|
_mainMenuTeamPreviewAlpha -= 25
|
|
If _mainMenuTeamPreviewAlpha < 0 Then
|
|
_mainMenuTeamPreviewAlpha = 0
|
|
End If
|
|
If _mainMenuTeamPreviewLastIndex > -1 Then
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Battle\Interface"), New Rectangle(CInt(pos.X) + startX + 12 * _mainMenuTeamPreviewLastIndex - 27, CInt(pos.Y) - 86, 64, 84), New Rectangle(128, 16, 32, 42), New Color(255, 255, 255, _mainMenuTeamPreviewAlpha))
|
|
Core.SpriteBatch.Draw(PokemonList(_mainMenuTeamPreviewLastIndex).GetMenuTexture(True), New Rectangle(CInt(pos.X) + startX + 12 * _mainMenuTeamPreviewLastIndex - 27, CInt(pos.Y) - 86, 64, 64), New Color(255, 255, 255, _mainMenuTeamPreviewAlpha))
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub Draw(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.IsCurrentScreen() = True Then
|
|
DrawPokemonStats(New Vector2(50, 50), BattleScreen.OppPokemon, BattleScreen, False, Not BattleScreen.IsTrainerBattle)
|
|
|
|
If BattleScreen.BattleMode <> BattleScreen.BattleModes.Safari Then
|
|
DrawPokemonStats(New Vector2(Core.windowSize.Width - 280, Core.windowSize.Height - 100), BattleScreen.OwnPokemon, BattleScreen, True, False)
|
|
End If
|
|
|
|
DrawPokeBalls(New Vector2(Core.windowSize.Width - 292, Core.windowSize.Height - 112), BattleScreen, Core.Player.Pokemons, False)
|
|
If BattleScreen.IsTrainerBattle = True Then
|
|
DrawPokeBalls(New Vector2(38, 38), BattleScreen, BattleScreen.Trainer.Pokemons, True)
|
|
End If
|
|
|
|
Select Case MenuState
|
|
Case MenuStates.Main
|
|
DrawMainMenu(BattleScreen)
|
|
Case MenuStates.Moves
|
|
DrawMoveMenu(BattleScreen)
|
|
End Select
|
|
|
|
DrawWeather(BattleScreen)
|
|
DrawTerrain(BattleScreen)
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub Update(ByRef BattleScreen As BattleScreen)
|
|
If CanInteract = True Then
|
|
Select Case MenuState
|
|
Case MenuStates.Main
|
|
UpdateMainMenu(BattleScreen)
|
|
Case MenuStates.Moves
|
|
UpdateMoveMenu(BattleScreen)
|
|
End Select
|
|
End If
|
|
End Sub
|
|
|
|
Private _allItemsExtended As Integer = 0
|
|
Private _selectedItemExtended As Integer = 0
|
|
Private _nextMenuState As MenuStates = MenuStates.Main
|
|
Private _retractMenu As Boolean = False
|
|
|
|
Private _isRetracting As Boolean = False
|
|
Private _isExtracting As Boolean = True
|
|
|
|
Private _moveMenuIndex As Integer = 0
|
|
Private _moveMenuNextIndex As Integer = 0
|
|
Private _moveMenuItemList As New List(Of MoveMenuItem)
|
|
Private _moveMenuCreatedID As String = ""
|
|
Private _moveMenuAlpha As Integer = 255
|
|
Private _moveMenuChoseMove As Boolean = False
|
|
|
|
Private _mainMenuIndex As Integer = 0
|
|
Private _mainMenuNextIndex As Integer = 0
|
|
Private _mainMenuItemList As New List(Of MainMenuItem)
|
|
Private _mainMenuTeamPreviewAlpha As Integer = 0
|
|
Private _mainMenuTeamPreviewLastIndex As Integer = -1
|
|
|
|
Public Delegate Sub D_MainMenuClick(ByVal BattleScreen As BattleScreen)
|
|
Public Delegate Sub D_MoveMenuClick(ByVal BattleScreen As BattleScreen)
|
|
|
|
Class MainMenuItem
|
|
|
|
Private IconSelected As Texture2D
|
|
Private IconUnselected As Texture2D
|
|
Private IconFading As Integer
|
|
|
|
Public Text As String
|
|
Public Index As Integer
|
|
|
|
Private Texture As Texture2D
|
|
|
|
Private ClickAction As D_MainMenuClick
|
|
|
|
Public Sub New(ByVal IconIndex As Integer, ByVal Text As String, ByVal Index As Integer, ByVal ClickAction As D_MainMenuClick)
|
|
If IconIndex > 4 Then
|
|
Me.IconUnselected = TextureManager.GetTexture("GUI\Battle\Interface", New Rectangle(160 + (IconIndex - 5) * 24, 56, 24, 24), "")
|
|
Me.IconSelected = TextureManager.GetTexture("GUI\Battle\Interface", New Rectangle(160 + (IconIndex - 5) * 24, 80, 24, 24), "")
|
|
Else
|
|
Me.IconUnselected = TextureManager.GetTexture("GUI\Battle\Interface", New Rectangle(IconIndex * 24, 56, 24, 24), "")
|
|
Me.IconSelected = TextureManager.GetTexture("GUI\Battle\Interface", New Rectangle(IconIndex * 24, 80, 24, 24), "")
|
|
End If
|
|
|
|
Me.IconFading = 0
|
|
|
|
Me.Text = Text
|
|
Me.Index = Index
|
|
|
|
Me.Texture = TextureManager.GetTexture("GUI\Menus\General")
|
|
|
|
Me.ClickAction = ClickAction
|
|
End Sub
|
|
|
|
Public Sub Draw(ByVal AllExtended As Integer, ByVal SelExtended As Integer, ByVal isSelected As Boolean)
|
|
Dim extraExtended As Integer = 0
|
|
If isSelected = True Then
|
|
Canvas.DrawGradient(New Rectangle(Core.ScreenSize.Width - 255, 100 + Index * 96, 255, 112), New Color(42, 167, 198, 0), New Color(42, 167, 198, (SelExtended + AllExtended)), True, -1)
|
|
|
|
extraExtended = SelExtended
|
|
End If
|
|
Core.SpriteBatch.Draw(Me.Texture, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended), 116 + Index * 96, 80, 80), New Rectangle(16, 16, 16, 16), Color.White)
|
|
Core.SpriteBatch.Draw(Me.Texture, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 80, 116 + Index * 96, AllExtended + extraExtended - 80, 80), New Rectangle(32, 16, 16, 16), Color.White)
|
|
|
|
Core.SpriteBatch.Draw(Me.IconUnselected, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 132 + Index * 96, 48, 48), Color.White)
|
|
If isSelected = True Then
|
|
Core.SpriteBatch.Draw(Me.IconSelected, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 132 + Index * 96, 48, 48), New Color(255, 255, 255, (SelExtended + AllExtended)))
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Text, New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 86), CInt(144 + Index * 96)), New Color(0, 0, 0, (SelExtended + AllExtended)))
|
|
Else
|
|
If IconFading > 0 Then
|
|
Core.SpriteBatch.Draw(Me.IconSelected, New Rectangle(Core.ScreenSize.Width - (AllExtended) + 28, 132 + Index * 96, 48, 48), New Color(255, 255, 255, IconFading))
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub Update(ByVal BattleScreen As BattleScreen, ByVal AllExtended As Integer, ByVal isSelected As Boolean)
|
|
Me.Activate(BattleScreen, AllExtended, isSelected)
|
|
If isSelected = False Then
|
|
If MouseHandler.IsInRectangle(New Rectangle(Core.ScreenSize.Width - (AllExtended) + 28, 132 + Index * 96, 48, 48)) = True Then
|
|
If IconFading < 255 Then
|
|
IconFading += 15
|
|
If IconFading > 255 Then
|
|
IconFading = 255
|
|
End If
|
|
End If
|
|
Else
|
|
If IconFading > 0 Then
|
|
IconFading -= 15
|
|
If IconFading < 0 Then
|
|
IconFading = 0
|
|
End If
|
|
End If
|
|
End If
|
|
Else
|
|
IconFading = 255
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub Activate(ByVal BattleScreen As BattleScreen, ByVal AllExtended As Integer, ByVal isSelected As Boolean)
|
|
If BattleScreen.BattleMenu._isExtracting = False And BattleScreen.BattleMenu._isRetracting = False Then
|
|
If Controls.Accept(False, True, True) = True And isSelected = True Then
|
|
SoundManager.PlaySound("select")
|
|
Me.ClickAction(BattleScreen)
|
|
End If
|
|
If Controls.Accept(True, False, False) = True Then
|
|
If MouseHandler.IsInRectangle(New Rectangle(Core.ScreenSize.Width - 255, 116 + Index * 96, 255, 80)) = True Then
|
|
If isSelected = True Then
|
|
SoundManager.PlaySound("select")
|
|
Me.ClickAction(BattleScreen)
|
|
Else
|
|
BattleScreen.BattleMenu._mainMenuNextIndex = Me.Index
|
|
BattleScreen.BattleMenu._isRetracting = True
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Class MoveMenuItem
|
|
|
|
Private Move As Attack
|
|
Public Index As Integer = 0
|
|
|
|
Private Texture As Texture2D
|
|
|
|
Private ClickAction As D_MoveMenuClick
|
|
|
|
Public Sub New(ByVal Index As Integer, ByVal Move As Attack, ByVal ClickAction As D_MoveMenuClick)
|
|
Me.Index = Index
|
|
Me.Move = Move
|
|
Me.ClickAction = ClickAction
|
|
Me.Texture = TextureManager.GetTexture("GUI\Menus\General")
|
|
End Sub
|
|
|
|
Public Sub Draw(ByVal AllExtended As Integer, ByVal SelExtended As Integer, ByVal isSelected As Boolean, ByVal BattleScreen As BattleScreen)
|
|
Dim deductAlpha As Integer = 255 - BattleScreen.BattleMenu._moveMenuAlpha
|
|
|
|
Dim extraExtended As Integer = 0
|
|
If isSelected = True Then
|
|
Canvas.DrawGradient(New Rectangle(Core.ScreenSize.Width - 255, 100 + Index * 96, 255, 112), New Color(42, 167, 198, 0), New Color(42, 167, 198, (SelExtended + AllExtended) - deductAlpha), True, -1)
|
|
|
|
extraExtended = SelExtended
|
|
End If
|
|
Core.SpriteBatch.Draw(Me.Texture, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended), 116 + Index * 96, 80, 80), New Rectangle(16, 16, 16, 16), New Color(255, 255, 255, 255 - deductAlpha))
|
|
Core.SpriteBatch.Draw(Me.Texture, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 80, 116 + Index * 96, AllExtended + extraExtended - 80, 80), New Rectangle(32, 16, 16, 16), New Color(255, 255, 255, 255 - deductAlpha))
|
|
|
|
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types", Me.Move.Type.GetElementImage(), ""), New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 132 + Index * 96, 48, 16), New Color(255, 255, 255, 255 - deductAlpha))
|
|
|
|
If isSelected = True Then
|
|
If Move.Disabled > 0 Then
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, "Disabled!", New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28), CInt(152 + Index * 96)), Color.Black)
|
|
Else
|
|
Dim ppColor As Color = GetPPColor()
|
|
ppColor.A = CByte((extraExtended + AllExtended - deductAlpha).Clamp(0, 255))
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.CurrentPP & "/" & Me.Move.MaxPP, New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28), CInt(152 + Index * 96)), ppColor)
|
|
End If
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.Name, New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 86), CInt(132 + Index * 96)), New Color(0, 0, 0, (SelExtended + AllExtended) - deductAlpha))
|
|
Else
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.Name, New Vector2(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 152 + Index * 96), New Color(0, 0, 0, 255 - (extraExtended + AllExtended) - deductAlpha))
|
|
End If
|
|
End Sub
|
|
|
|
Private Function GetPPColor() As Color
|
|
Dim c As Color = Color.Black
|
|
Dim per As Integer = CInt((Me.Move.CurrentPP / Me.Move.MaxPP) * 100)
|
|
|
|
If per <= 50 And per > 25 Then
|
|
c = Color.Orange
|
|
ElseIf per <= 25 Then
|
|
c = Color.IndianRed
|
|
End If
|
|
|
|
Return c
|
|
End Function
|
|
|
|
Public Sub Update(ByVal BattleScreen As BattleScreen, ByVal AllExtended As Integer, ByVal isSelected As Boolean)
|
|
Me.Activate(BattleScreen, AllExtended, isSelected)
|
|
End Sub
|
|
|
|
Public Sub Activate(ByVal BattleScreen As BattleScreen, ByVal AllExtended As Integer, ByVal isSelected As Boolean)
|
|
If BattleScreen.BattleMenu._isExtracting = False And BattleScreen.BattleMenu._isRetracting = False Then
|
|
If Me.Move.CurrentPP > 0 Or isSelected = False Then
|
|
|
|
If Controls.Accept(False, True, True) = True And isSelected = True Then
|
|
SoundManager.PlaySound("select")
|
|
If Me.Move.Disabled = 0 Then
|
|
Me.ClickAction(BattleScreen)
|
|
End If
|
|
End If
|
|
If Controls.Accept(True, False, False) = True Then
|
|
If MouseHandler.IsInRectangle(New Rectangle(Core.ScreenSize.Width - 255, 116 + Index * 96, 255, 80)) = True Then
|
|
If isSelected = True Then
|
|
SoundManager.PlaySound("select")
|
|
If Me.Move.Disabled = 0 Then
|
|
Me.ClickAction(BattleScreen)
|
|
End If
|
|
Else
|
|
BattleScreen.BattleMenu._moveMenuNextIndex = Me.Index
|
|
BattleScreen.BattleMenu._isRetracting = True
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Private Sub UpdateMenuOptions(ByRef MenuIndex As Integer, ByRef NextMenuIndex As Integer, ByVal ItemListCount As Integer)
|
|
Dim l_canSelect As Boolean = True
|
|
|
|
If _retractMenu = False Then
|
|
If _isRetracting = True Then
|
|
If _selectedItemExtended > 0 Then
|
|
_selectedItemExtended -= 40
|
|
If _selectedItemExtended <= 0 Then
|
|
_selectedItemExtended = 0
|
|
_isRetracting = False
|
|
MenuIndex = NextMenuIndex
|
|
_isExtracting = True
|
|
End If
|
|
End If
|
|
|
|
l_canSelect = False
|
|
ElseIf _isExtracting = True Then
|
|
If _selectedItemExtended < 200 Then
|
|
_selectedItemExtended += 40
|
|
If _selectedItemExtended >= 200 Then
|
|
_selectedItemExtended = 200
|
|
_isExtracting = False
|
|
End If
|
|
End If
|
|
|
|
l_canSelect = False
|
|
End If
|
|
End If
|
|
|
|
If _retractMenu = True Then
|
|
If _allItemsExtended > 0 Then
|
|
_allItemsExtended -= 5
|
|
_selectedItemExtended -= 40
|
|
If _allItemsExtended <= 0 Then
|
|
_allItemsExtended = 0
|
|
_selectedItemExtended = 0
|
|
_retractMenu = False
|
|
MenuState = _nextMenuState
|
|
_isExtracting = True
|
|
End If
|
|
End If
|
|
|
|
l_canSelect = False
|
|
ElseIf _allItemsExtended < 80 Then
|
|
_allItemsExtended += 5
|
|
|
|
l_canSelect = False
|
|
End If
|
|
|
|
If l_canSelect = True Then
|
|
If Controls.Down(True) = True Then
|
|
NextMenuIndex = MenuIndex + 1
|
|
|
|
If NextMenuIndex = ItemListCount Then
|
|
NextMenuIndex = 0
|
|
End If
|
|
|
|
_isRetracting = True
|
|
End If
|
|
If Controls.Up(True) = True Then
|
|
NextMenuIndex = MenuIndex - 1
|
|
|
|
If NextMenuIndex = -1 Then
|
|
NextMenuIndex = ItemListCount - 1
|
|
End If
|
|
|
|
_isRetracting = True
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
#Region "MainMenu"
|
|
|
|
Private Sub DrawMainMenu(ByVal BattleScreen As BattleScreen)
|
|
For Each m As MainMenuItem In _mainMenuItemList
|
|
m.Draw(_allItemsExtended, _selectedItemExtended, (m.Index = _mainMenuIndex))
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub UpdateMainMenu(ByRef BattleScreen As BattleScreen)
|
|
|
|
If BattleScreen.ClearMainMenuTime = True Then
|
|
_mainMenuItemList.Clear()
|
|
BattleScreen.ClearMainMenuTime = False
|
|
End If
|
|
If _mainMenuItemList.Count = 0 Then
|
|
CreateMainMenuItems(BattleScreen)
|
|
End If
|
|
If BattleScreen.OwnFaint = True Then
|
|
If BattleScreen.BattleQuery(0).QueryType <> QueryObject.QueryTypes.ScreenFade Then
|
|
TempBattleScreen = BattleScreen
|
|
|
|
Player.Temp.PokemonScreenIndex = BattleScreen.OwnPokemonIndex
|
|
Dim selScreen = New PartyScreen(Core.CurrentScreen, Item.GetItemByID(5), AddressOf ShowPokemonMenu, "Choose Pokémon", False) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = False}
|
|
AddHandler selScreen.SelectedObject, AddressOf ShowPokemonMenuHandler
|
|
|
|
Core.SetScreen(selScreen)
|
|
|
|
End If
|
|
End If
|
|
If _retractMenu = False Then
|
|
For Each m As MainMenuItem In _mainMenuItemList
|
|
m.Update(BattleScreen, _allItemsExtended, (m.Index = _mainMenuIndex))
|
|
Next
|
|
End If
|
|
|
|
UpdateMenuOptions(_mainMenuIndex, _mainMenuNextIndex, _mainMenuItemList.Count)
|
|
End Sub
|
|
|
|
Private Sub CreateMainMenuItems(ByRef BattleScreen As BattleScreen)
|
|
_mainMenuItemList.Clear()
|
|
Select Case BattleScreen.BattleMode
|
|
Case BattleSystem.BattleScreen.BattleModes.Safari
|
|
Dim safariBallText As String = "Safari Ball x" & Core.Player.Inventory.GetItemAmount(181).ToString()
|
|
If Core.Player.Inventory.GetItemAmount(181) = 0 Then
|
|
safariBallText = "No Safari Balls."
|
|
End If
|
|
_mainMenuItemList.Add(New MainMenuItem(4, safariBallText, 0, AddressOf MainMenuUseSafariBall))
|
|
_mainMenuItemList.Add(New MainMenuItem(0, "Throw Mud", 1, AddressOf MainMenuThrowMud))
|
|
_mainMenuItemList.Add(New MainMenuItem(0, "Throw Bait", 2, AddressOf MainMenuThrowBait))
|
|
|
|
_mainMenuItemList.Add(New MainMenuItem(3, "Run", 3, AddressOf MainMenuRun))
|
|
|
|
Case BattleSystem.BattleScreen.BattleModes.BugContest
|
|
_mainMenuItemList.Add(New MainMenuItem(0, "Battle", 0, AddressOf MainMenuOpenBattleMenu))
|
|
|
|
Dim sportBallText As String = "Sport Ball x" & Core.Player.Inventory.GetItemAmount(177).ToString()
|
|
If Core.Player.Inventory.GetItemAmount(177) = 0 Then
|
|
sportBallText = "No Sport Balls."
|
|
End If
|
|
_mainMenuItemList.Add(New MainMenuItem(4, sportBallText, 1, AddressOf MainMenuUseSportBall))
|
|
_mainMenuItemList.Add(New MainMenuItem(1, "Pokémon", 2, AddressOf MainMenuOpenPokemon))
|
|
_mainMenuItemList.Add(New MainMenuItem(3, "Run", 3, AddressOf MainMenuRun))
|
|
|
|
Case BattleSystem.BattleScreen.BattleModes.Standard
|
|
If BattleScreen.OwnFaint Then
|
|
_mainMenuIndex = 0
|
|
_mainMenuNextIndex = 0
|
|
If BattleScreen.IsRemoteBattle AndAlso Not BattleScreen.IsHost Then
|
|
_mainMenuItemList.Add(New MainMenuItem(1, "Pokémon", 0, AddressOf MainMenuOpenPokemon))
|
|
BattleScreen.OwnFaint = False
|
|
End If
|
|
ElseIf BattleScreen.OppFaint And BattleScreen.IsRemoteBattle Then
|
|
If BattleScreen.IsHost Then
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.Battle.InitializeRound(BattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Text, .Argument = "The client sends the next pokemon!"})
|
|
Else
|
|
BattleScreen.OwnStatistics.Switches += 1
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.SendClientCommand("TEXT|" & "The host sends the next pokemon!")
|
|
End If
|
|
BattleScreen.OppFaint = False
|
|
Else
|
|
_mainMenuItemList.Add(New MainMenuItem(0, "Battle", 0, AddressOf MainMenuOpenBattleMenu))
|
|
_mainMenuItemList.Add(New MainMenuItem(1, "Pokémon", 1, AddressOf MainMenuOpenPokemon))
|
|
_mainMenuItemList.Add(New MainMenuItem(2, "Bag", 2, AddressOf MainMenuOpenBag))
|
|
|
|
If BattleScreen.IsTrainerBattle = False Then
|
|
_mainMenuItemList.Add(New MainMenuItem(3, "Run", 3, AddressOf MainMenuRun))
|
|
MainMenuAddMegaEvolution(BattleScreen, 4)
|
|
Else
|
|
MainMenuAddMegaEvolution(BattleScreen, 3)
|
|
End If
|
|
End If
|
|
|
|
Case BattleSystem.BattleScreen.BattleModes.PVP
|
|
_mainMenuItemList.Add(New MainMenuItem(0, "Battle", 0, AddressOf MainMenuOpenBattleMenu))
|
|
_mainMenuItemList.Add(New MainMenuItem(1, "Pokémon", 1, AddressOf MainMenuOpenPokemon))
|
|
_mainMenuItemList.Add(New MainMenuItem(3, "Surrender", 2, AddressOf MainMenuOpenBag))
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub MainMenuAddMegaEvolution(ByVal BattleScreen As BattleScreen, ByVal Index As Integer)
|
|
|
|
'Checks if the player has the Mega Bracelet.
|
|
If Not (Core.Player.Inventory.GetItemAmount(576) > 0) Then
|
|
Exit Sub
|
|
End If
|
|
|
|
If _mainMenuIndex >= 3 Then
|
|
_mainMenuIndex = 0
|
|
End If
|
|
|
|
If BattleScreen.FieldEffects.OwnMegaEvolved Then
|
|
Exit Sub
|
|
End If
|
|
|
|
'For i = 0 To Core.Player.Pokemons.Count - 1
|
|
' Dim _str As String = Core.Player.Pokemons(i).AdditionalData
|
|
' Select Case _str
|
|
' Case "mega", "mega_x", "mega_y"
|
|
' Exit Sub
|
|
' Case Else
|
|
' 'do nothing
|
|
' End Select
|
|
'Next
|
|
Dim PokeIndex As Integer = BattleScreen.OwnPokemonIndex
|
|
If BattleScreen.FieldEffects.OwnMegaEvolved = False Then
|
|
If Not Core.Player.Pokemons(PokeIndex).Item Is Nothing Then
|
|
If Core.Player.Pokemons(PokeIndex).Item.IsMegaStone = True Then
|
|
Dim megaStone = CType(Core.Player.Pokemons(PokeIndex).Item, Items.MegaStone)
|
|
|
|
If megaStone.MegaPokemonNumber = Core.Player.Pokemons(PokeIndex).Number Then
|
|
_mainMenuItemList.Add(New MainMenuItem(5, "Mega Evolve!", Index, AddressOf MainMenuMegaEvolve))
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "MainMenuActions"
|
|
|
|
Private Sub MainMenuOpenBattleMenu(ByVal BattleScreen As BattleScreen)
|
|
_retractMenu = True
|
|
_nextMenuState = MenuStates.Moves
|
|
|
|
BattleScreen.BattleQuery.Clear()
|
|
Dim q As New CameraQueryObject(New Vector3(11, 0.5F, 14.0F), New Vector3(11, 0.5F, 14.0F), Screen.Camera.Speed, Screen.Camera.Speed, -(CSng(MathHelper.PiOver4) + 0.3F), -(CSng(MathHelper.PiOver4) + 0.3F), -0.3F, -0.3F, 0.04F, 0.04F)
|
|
BattleScreen.BattleQuery.AddRange({q})
|
|
End Sub
|
|
|
|
Private Sub MainMenuOpenPokemon(ByVal BattleScreen As BattleScreen)
|
|
TempBattleScreen = BattleScreen
|
|
|
|
Player.Temp.PokemonScreenIndex = BattleScreen.OwnPokemonIndex
|
|
Dim selScreen = New PartyScreen(Core.CurrentScreen, Item.GetItemByID(5), AddressOf ShowPokemonMenu, "Choose Pokémon", True) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = True}
|
|
AddHandler selScreen.SelectedObject, AddressOf ShowPokemonMenuHandler
|
|
|
|
Core.SetScreen(selScreen)
|
|
|
|
End Sub
|
|
|
|
Private Sub MainMenuOpenBag(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.CanUseItems = True Then
|
|
TempBattleScreen = BattleScreen
|
|
Dim selScreen As New NewInventoryScreen(Core.CurrentScreen)
|
|
selScreen.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection
|
|
selScreen.CanExit = True
|
|
|
|
AddHandler selScreen.SelectedObject, AddressOf SelectedItemHandler
|
|
Core.SetScreen(selScreen)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub MainMenuRun(ByVal BattleScreen As BattleScreen)
|
|
If BattleCalculation.CanRun(True, BattleScreen) = True And BattleScreen.CanRun = True Then
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusOwnPlayer())
|
|
BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\running", False))
|
|
BattleScreen.BattleQuery.Add(New TextQueryObject("Got away safely!"))
|
|
BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False))
|
|
Battle.Won = True
|
|
Battle.Fled = True
|
|
Else
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.Battle.InitializeRound(BattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Text, .Argument = "Failed to run away."})
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub MainMenuUseSafariBall(ByVal BattleScreen As BattleScreen)
|
|
If Core.Player.Inventory.GetItemAmount(181) > 0 Then
|
|
Core.Player.Inventory.RemoveItem(181, 1)
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
Core.SetScreen(New BattleCatchScreen(BattleScreen, Item.GetItemByID(181)))
|
|
|
|
Dim safariBallText As String = "Safari Ball x" & Core.Player.Inventory.GetItemAmount(181).ToString()
|
|
If Core.Player.Inventory.GetItemAmount(181) = 0 Then
|
|
safariBallText = "No Safari Balls."
|
|
End If
|
|
_mainMenuItemList(0).Text = safariBallText
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub MainMenuUseSportBall(ByVal BattleScreen As BattleScreen)
|
|
If Core.Player.Inventory.GetItemAmount(177) > 0 Then
|
|
Core.Player.Inventory.RemoveItem(177, 1)
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
Core.SetScreen(New BattleCatchScreen(BattleScreen, Item.GetItemByID(177)))
|
|
|
|
Dim sportBallText As String = "Sport Ball x" & Core.Player.Inventory.GetItemAmount(177).ToString()
|
|
If Core.Player.Inventory.GetItemAmount(177) = 0 Then
|
|
sportBallText = "No Sport Balls."
|
|
End If
|
|
_mainMenuItemList(0).Text = sportBallText
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub MainMenuThrowMud(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.PokemonSafariStatus > 0 Then
|
|
BattleScreen.PokemonSafariStatus = 0
|
|
End If
|
|
BattleScreen.PokemonSafariStatus -= Core.Random.Next(2, 5)
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.Battle.InitializeRound(BattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Text, .Argument = "Threw Mud at " & BattleScreen.OppPokemon.GetDisplayName() & "!"})
|
|
End Sub
|
|
|
|
Private Sub MainMenuThrowBait(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.PokemonSafariStatus < 0 Then
|
|
BattleScreen.PokemonSafariStatus = 0
|
|
End If
|
|
BattleScreen.PokemonSafariStatus += Core.Random.Next(2, 5)
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.Battle.InitializeRound(BattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Text, .Argument = "Threw a Bait at " & BattleScreen.OppPokemon.GetDisplayName() & "!"})
|
|
End Sub
|
|
|
|
Private Sub MainMenuMegaEvolve(ByVal BattleScreen As BattleScreen)
|
|
_retractMenu = True
|
|
_nextMenuState = MenuStates.Moves
|
|
|
|
BattleScreen.BattleQuery.Clear()
|
|
Dim q As New CameraQueryObject(New Vector3(11, 0.5F, 14.0F), New Vector3(11, 0.5F, 14.0F), Screen.Camera.Speed, Screen.Camera.Speed, -(CSng(MathHelper.PiOver4) + 0.3F), -(CSng(MathHelper.PiOver4) + 0.3F), -0.3F, -0.3F, 0.04F, 0.04F)
|
|
BattleScreen.BattleQuery.AddRange({q})
|
|
|
|
BattleScreen.IsMegaEvolvingOwn = True
|
|
For i = 0 To Core.Player.Pokemons.Count - 1
|
|
|
|
Dim _additionalData As String = Core.Player.Pokemons(i).AdditionalData
|
|
Select Case _additionalData
|
|
Case "mega", "mega_x", "mega_y"
|
|
BattleScreen.IsMegaEvolvingOwn = False
|
|
Case Else
|
|
'do nothing
|
|
End Select
|
|
Next
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "MoveMenu"
|
|
|
|
Private Sub DrawMoveMenu(ByVal BattleScreen As BattleScreen)
|
|
For Each m As MoveMenuItem In _moveMenuItemList
|
|
m.Draw(_allItemsExtended, _selectedItemExtended, (m.Index = _moveMenuIndex), BattleScreen)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub UpdateMoveMenu(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.ClearMoveMenuTime = True Then
|
|
_moveMenuItemList.Clear()
|
|
BattleScreen.ClearMoveMenuTime = False
|
|
End If
|
|
|
|
If _moveMenuChoseMove = True Then
|
|
_moveMenuAlpha -= 15
|
|
If _moveMenuAlpha <= 0 Then
|
|
_moveMenuAlpha = 0
|
|
MoveMenuStartRound(BattleScreen)
|
|
Visible = False
|
|
End If
|
|
Else
|
|
UseStruggle(BattleScreen)
|
|
|
|
If _moveMenuItemList.Count = 0 Or _moveMenuCreatedID <> BattleScreen.OwnPokemon.IndividualValue Or BattleScreen.IsChoiced Then
|
|
If _moveMenuCreatedID <> BattleScreen.OwnPokemon.IndividualValue Then
|
|
_moveMenuIndex = 0
|
|
End If
|
|
CreateMoveMenuItems(BattleScreen)
|
|
_moveMenuCreatedID = BattleScreen.OwnPokemon.IndividualValue
|
|
End If
|
|
If _retractMenu = False Then
|
|
For Each m As MoveMenuItem In _moveMenuItemList
|
|
m.Update(BattleScreen, _allItemsExtended, (m.Index = _moveMenuIndex))
|
|
Next
|
|
End If
|
|
|
|
UpdateMenuOptions(_moveMenuIndex, _moveMenuNextIndex, _moveMenuItemList.Count)
|
|
|
|
If Controls.Dismiss(True, True, True) = True And _retractMenu = False And _isExtracting = False And _isRetracting = False Then
|
|
SoundManager.PlaySound("select")
|
|
_retractMenu = True
|
|
_nextMenuState = MenuStates.Main
|
|
|
|
BattleScreen.BattleQuery.Clear()
|
|
For i = 0 To 99
|
|
BattleScreen.InsertCasualCameramove()
|
|
Next
|
|
|
|
Dim fQ As CameraQueryObject = CType(BattleScreen.BattleQuery(0), CameraQueryObject)
|
|
|
|
Dim q As New CameraQueryObject(fQ.StartPosition, Screen.Camera.Position, 0.06F, 0.06F, fQ.StartYaw, Screen.Camera.Yaw, fQ.TargetPitch, Screen.Camera.Pitch, 0.06F, 0.06F)
|
|
BattleScreen.BattleQuery.Insert(0, q)
|
|
|
|
BattleScreen.IsMegaEvolvingOwn = False
|
|
End If
|
|
|
|
If BattleScreen.BattleQuery.Count = 0 Then
|
|
For i = 0 To 50
|
|
Dim q As New CameraQueryObject(New Vector3(11.5, 0.5F, 13.0F), Screen.Camera.Position, 0.001F, Screen.Camera.Yaw, Screen.Camera.Pitch)
|
|
Dim q1 As New CameraQueryObject(New Vector3(11, 0.5F, 14.0F), New Vector3(11.5, 0.5F, 13.0F), 0.001F, Screen.Camera.Yaw, Screen.Camera.Pitch)
|
|
BattleScreen.BattleQuery.AddRange({q, q1})
|
|
Next
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CreateMoveMenuItems(ByVal BattleScreen As BattleScreen)
|
|
_moveMenuItemList.Clear()
|
|
|
|
For i = 0 To BattleScreen.OwnPokemon.Attacks.Count - 1
|
|
_moveMenuItemList.Add(New MoveMenuItem(i, BattleScreen.OwnPokemon.Attacks(i), AddressOf MoveMenuChooseMove))
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub MoveMenuChooseMove(ByVal BattleScreen As BattleScreen)
|
|
_moveMenuChoseMove = True
|
|
_moveMenuAlpha = 255
|
|
End Sub
|
|
|
|
Private Sub MoveMenuStartRound(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.IsRemoteBattle = True And BattleScreen.IsHost = False Then
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
If BattleScreen.IsMegaEvolvingOwn Then
|
|
BattleScreen.SendClientCommand("MEGA|" & BattleScreen.OwnPokemon.Attacks(_moveMenuIndex).ID.ToString())
|
|
BattleScreen.IsMegaEvolvingOwn = False
|
|
BattleScreen.FieldEffects.OwnMegaEvolved = True
|
|
Else
|
|
BattleScreen.SendClientCommand("MOVE|" & BattleScreen.OwnPokemon.Attacks(_moveMenuIndex).ID.ToString())
|
|
End If
|
|
Else
|
|
If BattleScreen.IsMegaEvolvingOwn Then
|
|
BattleScreen.FieldEffects.OwnMegaEvolved = True
|
|
End If
|
|
BattleScreen.OwnStatistics.Moves += 1
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.Battle.InitializeRound(BattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Move, .Argument = BattleScreen.OwnPokemon.Attacks(_moveMenuIndex)})
|
|
End If
|
|
_moveMenuChoseMove = False
|
|
_moveMenuAlpha = 255
|
|
_moveMenuItemList.Clear()
|
|
End Sub
|
|
|
|
Private Sub UseStruggle(ByVal BattleScreen As BattleScreen)
|
|
If BattleScreen.OwnPokemon.CountPP() <= 0 Then 'Use Struggle
|
|
BattleScreen.BattleQuery.Clear()
|
|
BattleScreen.BattleQuery.Add(BattleScreen.FocusBattle())
|
|
BattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
BattleScreen.Battle.InitializeRound(BattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Move, .Argument = Attack.GetAttackByID(165)})
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "SwitchPokemon"
|
|
|
|
Shared TempBattleScreen As BattleScreen
|
|
Private Shared Sub ShowPokemonMenuHandler(ByVal params As Object())
|
|
ShowPokemonMenu(CInt(params(0)))
|
|
End Sub
|
|
|
|
Private Shared Sub ShowPokemonMenu(ByVal PokeIndex As Integer)
|
|
SwitchPokemonTo(PokeIndex)
|
|
End Sub
|
|
|
|
Private Shared Sub SwitchPokemonTo(ByVal PokeIndex As Integer)
|
|
Dim Pokemon As Pokemon = Core.Player.Pokemons(PokeIndex)
|
|
|
|
If PokeIndex = TempBattleScreen.OwnPokemonIndex Then
|
|
If Pokemon.Status <> P3D.Pokemon.StatusProblems.Fainted Then
|
|
Screen.TextBox.Show(Pokemon.GetDisplayName() & " is already~in battle!", {}, True, False)
|
|
Else
|
|
Screen.TextBox.Show(Pokemon.GetDisplayName() & " is fainted!", {}, True, False)
|
|
End If
|
|
Else
|
|
If Pokemon.IsEgg() = False Then
|
|
If Pokemon.Status <> P3D.Pokemon.StatusProblems.Fainted Then
|
|
If BattleCalculation.CanSwitch(TempBattleScreen, True) = False Then
|
|
Screen.TextBox.Show(Localization.GetString("battle_main_cannot_switch", "Cannot switch out."), {}, True, False)
|
|
Else
|
|
If TempBattleScreen.IsRemoteBattle = True And TempBattleScreen.IsHost = False Then
|
|
TempBattleScreen.OppFaint = False
|
|
TempBattleScreen.OwnStatistics.Switches += 1
|
|
TempBattleScreen.BattleQuery.Clear()
|
|
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
|
|
TempBattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
TempBattleScreen.SendClientCommand("SWITCH|" & PokeIndex.ToString())
|
|
Else
|
|
TempBattleScreen.BattleQuery.Clear()
|
|
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
|
|
TempBattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Switch, .Argument = PokeIndex.ToString()})
|
|
End If
|
|
End If
|
|
Else
|
|
Screen.TextBox.Show(Pokemon.GetDisplayName() & " is fainted!", {}, True, False)
|
|
End If
|
|
Else
|
|
Screen.TextBox.Show("Cannot switch in~the egg!", {}, True, False)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "UseItem"
|
|
|
|
Private Shared Sub SelectedItemHandler(ByVal params As Object())
|
|
SelectedItem(CInt(params(0)))
|
|
End Sub
|
|
|
|
Private Shared Sub SelectedItem(ByVal itemID As Integer)
|
|
Dim Item As Item = Item.GetItemByID(itemID)
|
|
|
|
If Item.CanBeUsedInBattle = True Then
|
|
If Item.IsBall = True Then
|
|
Core.Player.Inventory.RemoveItem(itemID, 1)
|
|
If TempBattleScreen.IsTrainerBattle = False Then
|
|
If BattleScreen.CanCatch = True Or CBool(GameModeManager.GetGameRuleValue("OnlyCaptureFirst", "0")) = True And Core.Player.PokeFiles.Contains(BattleScreen.TempPokeFile) = True Then
|
|
TempBattleScreen.BattleQuery.Clear()
|
|
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
|
|
TempBattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
Core.SetScreen(New BattleCatchScreen(TempBattleScreen, Item.GetItemByID(itemID)))
|
|
PlayerStatistics.Track("[4]Poké Balls used", 1)
|
|
Else
|
|
TempBattleScreen.BattleQuery.Clear()
|
|
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
|
|
TempBattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Text, .Argument = "The wild Pokémon blocked the Pokéball!"})
|
|
End If
|
|
Else
|
|
TempBattleScreen.BattleQuery.Clear()
|
|
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
|
|
TempBattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Text, .Argument = "Hey! Don't be a thief!"})
|
|
End If
|
|
Else
|
|
TempItemID = itemID
|
|
|
|
If Item.BattleSelectPokemon = True Then
|
|
'Core.SetScreen(New PartyScreen(Core.CurrentScreen, Item, AddressOf UseItem, "Use " & Item.Name, True))
|
|
Dim selScreen = New PartyScreen(Core.CurrentScreen, Item, AddressOf Item.UseOnPokemon, "Use " & Item.Name, True) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = True}
|
|
AddHandler selScreen.SelectedObject, AddressOf UseItemHandler
|
|
|
|
Core.SetScreen(selScreen)
|
|
Else
|
|
UseItem(0)
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Shared TempItemID As Integer = -1
|
|
|
|
Private Shared Sub UseItemhandler(ByVal params As Object())
|
|
UseItem(CInt(params(0)))
|
|
End Sub
|
|
|
|
Private Shared Sub UseItem(ByVal PokeIndex As Integer)
|
|
Dim Pokemon As Pokemon = Core.Player.Pokemons(PokeIndex)
|
|
|
|
Dim Item As Item = Item.GetItemByID(TempItemID)
|
|
|
|
If Item.UseOnPokemon(PokeIndex) = True Then
|
|
TempBattleScreen.BattleQuery.Clear()
|
|
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
|
|
TempBattleScreen.BattleQuery.Insert(0, New ToggleMenuQueryObject(True))
|
|
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New Battle.RoundConst With {.StepType = Battle.RoundConst.StepTypes.Item, .Argument = TempItemID.ToString()})
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
End Class
|
|
|
|
End Namespace
|