Fix for PP items in battle not starting round

This commit is contained in:
JappaWakka 2023-03-27 17:09:08 +02:00
parent cc582b21fd
commit f1484c77ca
5 changed files with 92 additions and 26 deletions

View File

@ -27,12 +27,15 @@ Namespace Items.Berries
Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean
Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack)) Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack))
If Core.CurrentScreen.Identification <> Screen.Identifications.ChooseAttackScreen Then Dim s As Screen = Core.CurrentScreen
If ChooseAttackScreen.Selected <> -1 Then While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
Return True s = s.PreScreen
End If End While
If s.Identification = Screen.Identifications.BattleScreen Then
Return False
Else
Return True
End If End If
Return False
End Function End Function
Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer) Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer)
@ -44,6 +47,19 @@ Namespace Items.Berries
SoundManager.PlaySound("Use_Item", False) SoundManager.PlaySound("Use_Item", False)
Screen.TextBox.Show(t, {}, True, True) Screen.TextBox.Show(t, {}, True, True)
Dim s As Screen = Core.CurrentScreen
While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
s = s.PreScreen
End While
If s.Identification = Screen.Identifications.BattleScreen Then
Dim TempBattleScreen As BattleSystem.BattleScreen = CType(s, BattleSystem.BattleScreen)
TempBattleScreen.BattleQuery.Clear()
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
TempBattleScreen.BattleQuery.Insert(0, New BattleSystem.ToggleMenuQueryObject(True))
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New BattleSystem.Battle.RoundConst With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Item, .Argument = Me.ID.ToString()})
Core.SetScreen(TempBattleScreen)
End If
Else Else
Screen.TextBox.Show("The move already has~full PP.", {}, True, True) Screen.TextBox.Show("The move already has~full PP.", {}, True, True)
End If End If

View File

@ -4,7 +4,6 @@ Namespace Items.Medicine
Public Class Ether Public Class Ether
Inherits MedicineItem Inherits MedicineItem
Public Overrides ReadOnly Property PokeDollarPrice As Integer = 1200 Public Overrides ReadOnly Property PokeDollarPrice As Integer = 1200
Public Overrides ReadOnly Property Description As String = "This medicine can restore 10 PP to a single selected move that has been learned by a Pokémon." Public Overrides ReadOnly Property Description As String = "This medicine can restore 10 PP to a single selected move that has been learned by a Pokémon."
@ -21,12 +20,15 @@ Namespace Items.Medicine
Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean
Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack)) Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack))
If Core.CurrentScreen.Identification <> Screen.Identifications.ChooseAttackScreen Then Dim s As Screen = Core.CurrentScreen
If ChooseAttackScreen.Selected <> -1 Then While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
Return True s = s.PreScreen
End If End While
If s.Identification = Screen.Identifications.BattleScreen Then
Return False
Else
Return True
End If End If
Return False
End Function End Function
Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer) Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer)
@ -39,6 +41,19 @@ Namespace Items.Medicine
SoundManager.PlaySound("Use_Item", False) SoundManager.PlaySound("Use_Item", False)
Screen.TextBox.Show(t, {}, True, True) Screen.TextBox.Show(t, {}, True, True)
Dim s As Screen = Core.CurrentScreen
While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
s = s.PreScreen
End While
If s.Identification = Screen.Identifications.BattleScreen Then
Dim TempBattleScreen As BattleSystem.BattleScreen = CType(s, BattleSystem.BattleScreen)
TempBattleScreen.BattleQuery.Clear()
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
TempBattleScreen.BattleQuery.Insert(0, New BattleSystem.ToggleMenuQueryObject(True))
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New BattleSystem.Battle.RoundConst With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Item, .Argument = Me.ID.ToString()})
Core.SetScreen(TempBattleScreen)
End If
Else Else
Screen.TextBox.Show("The move already has~full PP.", {}, True, True) Screen.TextBox.Show("The move already has~full PP.", {}, True, True)
End If End If

View File

@ -21,12 +21,15 @@ Namespace Items.Medicine
Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean
Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack)) Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack))
If Core.CurrentScreen.Identification <> Screen.Identifications.ChooseAttackScreen Then Dim s As Screen = Core.CurrentScreen
If ChooseAttackScreen.Selected <> -1 Then While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
Return True s = s.PreScreen
End If End While
If s.Identification = Screen.Identifications.BattleScreen Then
Return False
Else
Return True
End If End If
Return False
End Function End Function
Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer) Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer)

View File

@ -21,12 +21,15 @@ Namespace Items.Medicine
Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean
Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack)) Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack))
If Core.CurrentScreen.Identification <> Screen.Identifications.ChooseAttackScreen Then Dim s As Screen = Core.CurrentScreen
If ChooseAttackScreen.Selected <> -1 Then While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
Return True s = s.PreScreen
End If End While
If s.Identification = Screen.Identifications.BattleScreen Then
Return False
Else
Return True
End If End If
Return False
End Function End Function
Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer) Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer)
@ -44,6 +47,19 @@ Namespace Items.Medicine
PlayerStatistics.Track("[17]Medicine Items used", 1) PlayerStatistics.Track("[17]Medicine Items used", 1)
Screen.TextBox.Show(t, {}, True, True) Screen.TextBox.Show(t, {}, True, True)
Dim s As Screen = Core.CurrentScreen
While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
s = s.PreScreen
End While
If s.Identification = Screen.Identifications.BattleScreen Then
Dim TempBattleScreen As BattleSystem.BattleScreen = CType(s, BattleSystem.BattleScreen)
TempBattleScreen.BattleQuery.Clear()
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
TempBattleScreen.BattleQuery.Insert(0, New BattleSystem.ToggleMenuQueryObject(True))
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New BattleSystem.Battle.RoundConst With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Item, .Argument = Me.ID.ToString()})
Core.SetScreen(TempBattleScreen)
End If
Else Else
Screen.TextBox.Show("The move already has~full PP.", {}, True, True) Screen.TextBox.Show("The move already has~full PP.", {}, True, True)
End If End If

View File

@ -21,12 +21,15 @@ Namespace Items.Medicine
Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean Public Overrides Function UseOnPokemon(ByVal PokeIndex As Integer) As Boolean
Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack)) Core.SetScreen(New ChooseAttackScreen(Core.CurrentScreen, Core.Player.Pokemons(PokeIndex), True, True, AddressOf UseOnAttack))
If Core.CurrentScreen.Identification <> Screen.Identifications.ChooseAttackScreen Then Dim s As Screen = Core.CurrentScreen
If ChooseAttackScreen.Selected <> -1 Then While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
Return True s = s.PreScreen
End If End While
If s.Identification = Screen.Identifications.BattleScreen Then
Return False
Else
Return True
End If End If
Return False
End Function End Function
Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer) Private Sub UseOnAttack(ByVal Pokemon As Pokemon, ByVal AttackIndex As Integer)
@ -37,6 +40,19 @@ Namespace Items.Medicine
PlayerStatistics.Track("[17]Medicine Items used", 1) PlayerStatistics.Track("[17]Medicine Items used", 1)
Screen.TextBox.Show(t, {}, True, True) Screen.TextBox.Show(t, {}, True, True)
Dim s As Screen = Core.CurrentScreen
While s.Identification <> Screen.Identifications.BattleScreen AndAlso s.PreScreen IsNot Nothing
s = s.PreScreen
End While
If s.Identification = Screen.Identifications.BattleScreen Then
Dim TempBattleScreen As BattleSystem.BattleScreen = CType(s, BattleSystem.BattleScreen)
TempBattleScreen.BattleQuery.Clear()
TempBattleScreen.BattleQuery.Add(TempBattleScreen.FocusBattle())
TempBattleScreen.BattleQuery.Insert(0, New BattleSystem.ToggleMenuQueryObject(True))
TempBattleScreen.Battle.InitializeRound(TempBattleScreen, New BattleSystem.Battle.RoundConst With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Item, .Argument = Me.ID.ToString()})
Core.SetScreen(TempBattleScreen)
End If
Else Else
Screen.TextBox.Show("The move already has~full PP.", {}, True, True) Screen.TextBox.Show("The move already has~full PP.", {}, True, True)
End If End If