Fix GM move functions not taking opp in account...

When a move with an effect used by an opponent pokémon, the effect target didn't get swapped.
This commit is contained in:
JappaWakka 2025-04-18 13:07:25 +02:00
parent 41c5d35864
commit 9a6a6d7999

View File

@ -19,6 +19,8 @@
Dim fMain As String = f
Dim fSub As String = ""
Dim EffectTarget As Boolean = Not own
Select Case f.GetSplit(0, ",").ToLower
Case "settrigger"
Trigger = f.GetSplit(1, ",") & "," & f.GetSplit(2, ",")
@ -28,6 +30,9 @@
If Trigger <> "" Then
Dim Target As Boolean = CBool(Trigger.GetSplit(0, ","))
If own = False Then
Target = Not Target
End If
Dim Triggers() As String = Trigger.GetSplit(1, ",").Split(";")
Dim Success As Boolean = False
For t = 0 To Triggers.Count - 1
@ -220,9 +225,15 @@
OppPokemon = BattleScreen.OwnPokemon
End If
fSub = Localization.GetString(fSub, fSub).Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
If own = True Then
fSub = Localization.GetString(fSub, fSub).Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
fSub = Localization.GetString(fSub, fSub).Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
BattleScreen.BattleQuery.Add(New TextQueryObject(fSub))
Case "raisestat", "increasestat"
Dim OppPokemon As Pokemon = BattleScreen.OppPokemon
Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon
Dim Stat As String = f.GetSplit(1, ",")
Dim Target As Boolean = own
Dim Message As String = ""
@ -234,8 +245,17 @@
If f.GetSplit(2, ",") <> "" Then
Target = CBool(f.GetSplit(2, ","))
End If
If own = False Then
Target = Not Target
End If
If f.Split(CChar(",")).Count > 3 Then
Message = f.GetSplit(3, ",")
If own = True Then
Message = Message.Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
Message = Message.Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
If f.Split(CChar(",")).Count > 4 Then
If f.GetSplit(4, ",") <> "" Then
If CInt(f.GetSplit(4, ",")) > 0 Then
@ -257,9 +277,11 @@
End If
RaiseStat(Move, own, Stat, Target, Message, RaiseAmount, Chance, FailMessage, BattleScreen)
Case "lowerstat", "decreasestat"
Dim OppPokemon As Pokemon = BattleScreen.OppPokemon
Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon
Dim Stat As String = f.GetSplit(1, ",")
Dim Message As String = ""
Dim Target As Boolean = own
Dim Target As Boolean = not own
Dim LowerAmount As Integer = 1
Dim Chance As Integer = 100
Dim FailMessage As String = ""
@ -268,8 +290,17 @@
If f.GetSplit(2, ",") <> "" Then
Target = CBool(f.GetSplit(2, ","))
End If
If own = False Then
Target = Not Target
End If
If f.Split(CChar(",")).Count > 3 Then
Message = f.GetSplit(3, ",")
If own = True Then
Message = Message.Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
Message = Message.Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
If f.Split(CChar(",")).Count > 4 Then
If f.GetSplit(4, ",") <> "" Then
If CInt(f.GetSplit(4, ",")) > 0 Then
@ -293,7 +324,13 @@
End If
LowerStat(Move, own, Stat, Target, Message, LowerAmount, Chance, FailMessage, BattleScreen)
Case "reducehp", "drainhp", "damage"
Dim OppPokemon As Pokemon = BattleScreen.OppPokemon
Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon
Dim Target As Boolean = CBool(f.GetSplit(1, ","))
If own = False Then
Target = Not Target
End If
Dim HPAmount As Integer = 0
Dim Message As String = ""
@ -301,11 +338,22 @@
HPAmount = CInt(f.GetSplit(2, ","))
If f.Split(CChar(",")).Count > 3 Then
Message = f.GetSplit(3, ",")
If own = True Then
Message = Message.Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
Message = Message.Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
End If
End If
BattleScreen.Battle.ReduceHP(HPAmount, Target, own, BattleScreen, Message, "move:" & Move.Name.ToLower)
Case "gainhp", "increasehp", "heal"
Dim OppPokemon As Pokemon = BattleScreen.OppPokemon
Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon
Dim Target As Boolean = CBool(f.GetSplit(1, ","))
If own = False Then
Target = Not Target
End If
Dim HPAmount As Integer = 0
Dim Message As String = ""
@ -313,6 +361,11 @@
HPAmount = CInt(f.GetSplit(2, ","))
If f.Split(CChar(",")).Count > 3 Then
Message = f.GetSplit(3, ",")
If own = True Then
Message = Message.Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
Message = Message.Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
End If
End If
BattleScreen.Battle.GainHP(HPAmount, Target, own, BattleScreen, Message, "move:" & Move.Name.ToLower)
@ -325,11 +378,16 @@
BattleScreen.BattleQuery.Add(New EndBattleQueryObject(Blackout))
Case "faint"
Dim Target As Boolean = CBool(f.GetSplit(1, ","))
If own = False Then
Target = Not Target
End If
Dim Message As String = ""
Dim NextPokemonIndex As Integer = -1
Dim OppPokemon As Pokemon = BattleScreen.OppPokemon
Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon
If Target = False Then
OwnPokemon = BattleScreen.OppPokemon
OppPokemon = BattleScreen.OwnPokemon
@ -348,16 +406,27 @@
BattleScreen.NextPokemonIndex = NextPokemonIndex
If f.Split(CChar(",")).Count > 2 Then
Message = f.GetSplit(2, ",").Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
If own = True Then
Message = f.GetSplit(2, ",").Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
Message = f.GetSplit(2, ",").Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
End If
BattleScreen.Battle.FaintPokemon(Not Target, BattleScreen, Message)
Case "switch"
Dim OppPokemon As Pokemon = BattleScreen.OppPokemon
Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon
Dim Target As Boolean = CBool(f.GetSplit(1, ","))
Dim SwitchTo As Integer = 0
Dim Message As String = ""
If f.Split(CChar(",")).Count > 3 Then
Message = f.GetSplit(3, ",")
If own = True Then
Message = Message.Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName)
Else
Message = Message.Replace("[OWNNAME]", OppPokemon.GetDisplayName).Replace("[OPPNAME]", OwnPokemon.GetDisplayName)
End If
End If
If Target = True Then
If f.GetSplit(2, ",").StartsWith("~+") Then
@ -381,8 +450,14 @@
If f.Split(CChar(",")).Count > 2 Then
fSub &= "," & f.GetSplit(2, ",")
End If
If f.Split(CChar(",")).Count > 3 Then
EffectTarget = CBool(f.GetSplit(3, ","))
End If
Case Else
fSub = CInt(f.GetSplit(1, ",")).Clamp(0, 100).ToString
If f.Split(CChar(",")).Count > 2 Then
EffectTarget = CBool(f.GetSplit(2, ","))
End If
End Select
Else
Select Case f.ToLower()
@ -403,50 +478,52 @@
End Select
End If
If own = False Then
EffectTarget = Not EffectTarget
End If
Select Case fMain.ToLower()
Case "flinch"
Flinch(Move, own, BattleScreen, CInt(fSub))
Flinch(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "randomstatus"
Dim chance As Integer = CInt(fSub.GetSplit(0, ","))
Dim withoutBadPoison As Boolean = False
If fSub.Contains(",") Then
withoutBadPoison = CBool(fSub.GetSplit(1, ","))
End If
Dim randomNumber As Integer = Core.Random.Next(0, 7)
If withoutBadPoison = True Then
randomNumber = Core.Random.Next(0, 6)
End If
Select Case randomNumber
Case 0
Paralyze(Move, own, BattleScreen, CInt(fSub))
Paralyze(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case 1
Poison(Move, own, BattleScreen, CInt(fSub))
Poison(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case 2
Burn(Move, own, BattleScreen, CInt(fSub))
Burn(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case 3
Freeze(Move, own, BattleScreen, CInt(fSub))
Freeze(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case 4
Sleep(Move, own, BattleScreen, CInt(fSub))
Sleep(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case 5
Confuse(Move, own, BattleScreen, CInt(fSub))
Confuse(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case 6
BadPoison(Move, own, BattleScreen, CInt(fSub))
BadPoison(Move, own, EffectTarget, BattleScreen, CInt(fSub))
End Select
Case "paralyze"
Paralyze(Move, own, BattleScreen, CInt(fSub))
Paralyze(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "poison"
Poison(Move, own, BattleScreen, CInt(fSub))
Poison(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "toxic", "badpoison"
BadPoison(Move, own, BattleScreen, CInt(fSub))
BadPoison(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "burn"
Burn(Move, own, BattleScreen, CInt(fSub))
Burn(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "freeze"
Freeze(Move, own, BattleScreen, CInt(fSub))
Freeze(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "sleep"
Sleep(Move, own, BattleScreen, CInt(fSub))
Sleep(Move, own, EffectTarget, BattleScreen, CInt(fSub))
Case "confuse"
Confuse(Move, own, BattleScreen, CInt(fSub))
Confuse(Move, own, EffectTarget, BattleScreen, CInt(fSub))
End Select
End If
Next
@ -457,12 +534,12 @@
End Function
Private Shared Sub LowerStat(ByVal Move As Attack, own As Boolean, Stat As String, Target As Boolean, Message As String, LowerAmount As Integer, Chance As Integer, FailMessage As String, ByVal BattleScreen As BattleScreen)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.LowerStat(Target, own, BattleScreen, Stat, LowerAmount, Message, "move:" & Move.Name, True) = False Then
If BattleScreen.Battle.LowerStat(Not Target, own, BattleScreen, Stat, LowerAmount, Message, "move:" & Move.Name.ToLower, True) = False Then
If Move.Category = Attack.Categories.Status Then
If FailMessage = "" Then
BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
Else
BattleScreen.BattleQuery.Add(New TextQueryObject(FailMessage.Replace("<movename>", Move.Name)))
BattleScreen.BattleQuery.Add(New TextQueryObject(FailMessage.Replace("[MOVENAME]", Move.Name)))
End If
End If
End If
@ -470,74 +547,74 @@
End Sub
Private Shared Sub RaiseStat(ByVal Move As Attack, own As Boolean, Stat As String, Target As Boolean, Message As String, RaiseAmount As Integer, Chance As Integer, FailMessage As String, ByVal BattleScreen As BattleScreen)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.RaiseStat(Target, own, BattleScreen, Stat, RaiseAmount, Message, "move:" & Move.Name, True) = False Then
If BattleScreen.Battle.RaiseStat(Not Target, own, BattleScreen, Stat, RaiseAmount, Message, "move:" & Move.Name.ToLower, True) = False Then
If Move.Category = Attack.Categories.Status Then
If FailMessage = "" Then
BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
Else
BattleScreen.BattleQuery.Add(New TextQueryObject(FailMessage.Replace("<movename>", Move.Name)))
BattleScreen.BattleQuery.Add(New TextQueryObject(FailMessage.Replace("[MOVENAME]", Move.Name)))
End If
End If
End If
End If
End Sub
Private Shared Sub Flinch(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Flinch(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
BattleScreen.Battle.InflictFlinch(Not own, own, BattleScreen, "", "move:" & Move.Name.ToLower())
BattleScreen.Battle.InflictFlinch(Not Target, own, BattleScreen, "", "move:" & Move.Name.ToLower())
End If
End Sub
Private Shared Sub Paralyze(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Paralyze(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictParalysis(Not own, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictParalysis(Not Target, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If
End Sub
Private Shared Sub Confuse(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Confuse(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictConfusion(Not own, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictConfusion(Not Target, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If
End Sub
Private Shared Sub Burn(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Burn(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictBurn(Not own, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictBurn(Not Target, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If
End Sub
Private Shared Sub Sleep(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Sleep(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictSleep(Not own, own, BattleScreen, -1, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictSleep(Not Target, own, BattleScreen, -1, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If
End Sub
Private Shared Sub Freeze(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Freeze(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictFreeze(Not own, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictFreeze(Not Target, own, BattleScreen, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If
End Sub
Private Shared Sub Poison(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub Poison(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictPoison(Not own, own, BattleScreen, False, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictPoison(Not Target, own, BattleScreen, False, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If
End Sub
Private Shared Sub BadPoison(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
Private Shared Sub BadPoison(ByVal Move As Attack, ByVal own As Boolean, Target As Boolean, ByVal BattleScreen As BattleScreen, Chance As Integer)
If GetEffectChanceResult(Move, Chance) = True Then
If BattleScreen.Battle.InflictPoison(Not own, own, BattleScreen, True, "", "move:" & Move.Name.ToLower()) = False Then
If BattleScreen.Battle.InflictPoison(Not Target, own, BattleScreen, True, "", "move:" & Move.Name.ToLower()) = False Then
If Move.Category = Attack.Categories.Status Then BattleScreen.BattleQuery.Add(New TextQueryObject(Move.Name & " failed!"))
End If
End If