From a0aa947c5c6ff04f202598a76600ecdfe698b4e8 Mon Sep 17 00:00:00 2001 From: JappaWakka Date: Tue, 13 Jun 2023 20:22:35 +0200 Subject: [PATCH] Added a GameMode Move property and 2 functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed an issue with GameMode Items in battles * Updated the example files for GameMode Items and GameMode Moves * Maybe fixed something audio volume related * Made it possible to disable the reduction of PP using the DeductPP (bool) property for GameModeMoves * Added the new functions "SetTrigger" and "RemoveTrigger" for GameModeMoves: Function "SetTrigger" checks if a Pokémon does or does not have a certain Status and prevents functions after it from executing if the Pokémon does not have the desired Status. The function is formatted like this: Function|SetTrigger,Target,Triggers * "Target" determines which Pokémon's Status is checked and has to be either 0 or 1 (0 = check own Pokémon, 1 = check opponent's Pokémon) * "Triggers" determines the status effect(s) that should or should not be on the target Pokémon. You can add multiple possible status effects to check for by separating them with a semicolon (;), the values can be: "burn", "freeze", "paralyze", "poison", "badpoison", "anypoison", "sleep", "noburn", "nofreeze", "noparalyze", "nopoison", "nobadpoison", "nopoison", "nosleep" Function "RemoveTrigger" removes such a trigger so that functions after it are executed --- P3D/Battle/BattleSystemV2/BattleMenu.vb | 8 +- P3D/Content/Data/Items/example.dat | Bin 3094 -> 3102 bytes P3D/Content/Data/Moves/example.dat | Bin 3476 -> 5974 bytes P3D/Core/GameOptions.vb | 8 +- P3D/Pokemon/Attacks/Attack.vb | 9 +- P3D/Pokemon/Attacks/AttackSpecialFunctions.vb | 484 ++++++++++++------ P3D/Pokemon/Attacks/GameModeAttackLoader.vb | 2 + P3D/Pokemon/Items/GameModeItemLoader.vb | 2 +- P3D/Screens/Inventory/NewInventoryScreen.vb | 8 +- 9 files changed, 348 insertions(+), 173 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/BattleMenu.vb b/P3D/Battle/BattleSystemV2/BattleMenu.vb index eab390740..80c75c542 100644 --- a/P3D/Battle/BattleSystemV2/BattleMenu.vb +++ b/P3D/Battle/BattleSystemV2/BattleMenu.vb @@ -1059,10 +1059,10 @@ #Region "UseItem" Private Shared Sub SelectedItemHandler(ByVal params As Object()) - SelectedItem(CInt(params(0))) + SelectedItem(CStr(params(0))) End Sub - Private Shared Sub SelectedItem(ByVal itemID As Integer) + Private Shared Sub SelectedItem(ByVal itemID As String) Dim Item As Item = Item.GetItemByID(itemID.ToString) If Item.CanBeUsedInBattle = True Then @@ -1103,9 +1103,9 @@ End If End Sub - Shared TempItemID As Integer = -1 + Shared TempItemID As String = "-1" - Private Shared Sub UseItemhandler(ByVal params As Object()) + Private Shared Sub UseItemHandler(ByVal params As Object()) UseItem(CInt(params(0))) End Sub diff --git a/P3D/Content/Data/Items/example.dat b/P3D/Content/Data/Items/example.dat index d302bbd06877a17b6f1f53eda2fedde01a73a802..4a12ad6f0728aecf6ed78e05845a538fbfaacac8 100644 GIT binary patch delta 69 zcmbOxF;8NH5tE=ZLn1>SgA+q4g9i}jFr;kOWJ+e-Jd61miCOg87f4*-4x5+DEo delta 83 zcmbOyF->BF5z}TLrYJ^kSB5koOl3%BDA~N2`6Y_La|27=>qDssF)B7Hy>pTD4u2oq+%;1fn>IO*f8h>=ehbY=@A_zrF2w=J@rD zudj=)aPFNs^L~E~|Ne8FI_WY^(sf$u&Ab751mP-gpWA4 z&>oh8H$KCMSZtQYTG`d7=zA)f=HHQr7veY1JUBTL1!zM#G)4zow5EwXw)a33ZZiH> z7O}2Si8IY8I2ZnIYeU=Xk?@uaZ%?yEaUSoR{;srWJr>_pmU$rC;2Bo1V?^q1EPqWG z+s}I0>mfy()KI(H=v@1U$iJ2Z_T5NQVU^IMc;c00#nRtxtlp94_F+dh!b^^hLw-WG zex~i1-i_2JI)5a3L;WJ@ktkyKflfH9V*N@~i0-+#5{HZJiN4SSomvPnkXPcwO7BEX ze8Zo39gD)E!Vw#eWGs6KMT9K1yO3P-J?XrT%$%R<*Pb3!{IS|ZQ4%p9auG4;$}cj< zI@E|Mq@w1m^q}FVE#gMspEhz?2liLnea9j?v)bQyn|I`OCXn;Z!WD0c6W4?)fq;BIv zJW$bR8$Ax$0eOd#Hay!-YpFO!&WMjTiRcEdgKfJ_{#T0LrSMn!C3;tShkC6eaXQL= zS;^m2Wmnf4bFVe}7g;_Q4Qf656hGDRYcIMA&}pd?yS2lW2dg60OgyPLef^dyQe&*K zxnm)JhlK6Od(m@rw&9jJ3aMW9>@H@UWtnBG5xudCA6@Tki#A)Wq(fh*pxlNbuITI~ zMr#gq2f7Jes_pb&qJO`)W2@7b=h;*A5i}^?t`Y5iL93y-Q$wJ0w4Khnk_U?tPtoH` zw?0ZQvQIb{o^JM^hxAw!@m_OsU=kue-HGs~C5v%Bvs*CD0^GGUhcGi`hUr2acdMe;pNa-^3bE*HF83`m zf?9)5$%=-jeVrQx{#Cx=Xe(zm7zU^X~g~#5;RBiZNB>$(5`cq ziQaduPWoQ<@*Rhaac*Hn-uI~-XO8FPB^Ch5F7AyuC|y5)E-vK!Qo`MKRw8E@A>p@1LTM z+=qiWg8twZb@qjGsxjGYf#CP1%p2-HDZRloGNm6bfXcm^)y=Sbq z*0|JZ-!zc8D_!8gJRYY_;Y_Q(Z$vhLT5VCsx*so9Q|d`MvZHVVL-y3uX+edwpw6XN znNJHQya?u_MHEY%$`AEDs7awlF4G6eLLEkum!j+2#Nji~rDuJM z{2&{;o4gc-a*GUq+l%jYW|U4U@9o|ti%dqk0-fyKR|73J!(hl@0EC86F+YYxhFqW-H4GtO slS&wTfhLpz*If the own Pokémon used the move. ''' Reference to the BattleScreen. Public Overridable Function DeductPP(ByVal own As Boolean, ByVal BattleScreen As BattleScreen) As Boolean - Return True + If Me.IsGameModeMove = True Then + Return gmDeductPP + Else + Return True + End If End Function ''' diff --git a/P3D/Pokemon/Attacks/AttackSpecialFunctions.vb b/P3D/Pokemon/Attacks/AttackSpecialFunctions.vb index 8d7d51a13..a2008b2c6 100644 --- a/P3D/Pokemon/Attacks/AttackSpecialFunctions.vb +++ b/P3D/Pokemon/Attacks/AttackSpecialFunctions.vb @@ -13,189 +13,351 @@ ''' Reference to the BattleScreen. Public Shared Sub ExecuteMoveHitsFunction(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen) Dim functions() As String = Move.GameModeFunction.Split("|") + Dim Trigger As String = "" For i = 0 To functions.Count - 1 Dim f As String = functions(i) Dim fMain As String = f Dim fSub As String = "" - If f.Contains(",") = True Then - fMain = f.GetSplit(0, ",") - fSub = f.GetSplit(1, ",") - Select Case fMain.ToLower() - Case "cameraangle" - Dim Direction As Integer = CInt(fSub) - Select Case Direction - Case 0 - BattleScreen.Battle.ChangeCameraAngle(0, own, BattleScreen) - Case 1 - BattleScreen.Battle.ChangeCameraAngle(1, True, BattleScreen) - Case 2 - BattleScreen.Battle.ChangeCameraAngle(2, True, BattleScreen) - End Select - Case "message", "text" - Dim OppPokemon As Pokemon = BattleScreen.OppPokemon - Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon - If own = False Then - OwnPokemon = BattleScreen.OppPokemon - OppPokemon = BattleScreen.OwnPokemon - End If - fSub = Localization.GetString(fSub, fSub).Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName) - BattleScreen.BattleQuery.Add(New TextQueryObject(fSub)) - Case "raisestat", "increasestat" - Dim Stat As String = f.GetSplit(1, ",") - Dim Target As Boolean = own - Dim Message As String = "" - Dim RaiseAmount As Integer = 1 + Select Case f.GetSplit(0, ",").ToLower + Case "settrigger" + Trigger = f.GetSplit(1, ",") & "," & f.GetSplit(2, ",") + Case "removetrigger" + Trigger = "" + End Select - If f.Split(CChar(",")).Count > 2 Then - Target = CBool(f.GetSplit(2, ",")) - If f.Split(CChar(",")).Count > 3 Then - Message = f.GetSplit(3, ",") - If f.Split(CChar(",")).Count > 4 Then - If CInt(f.GetSplit(4, ",")) > 0 Then - RaiseAmount = CInt(f.GetSplit(4, ",")) - End If + If Trigger <> "" Then + Dim Target As Boolean = CBool(Trigger.GetSplit(0, ",")) + Dim Triggers() As String = Trigger.GetSplit(1, ",").Split(";") + Dim Success As Boolean = False + For t = 0 To Triggers.Count - 1 + Select Case Triggers(t).ToLower() + Case "burn" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Burn Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Burn Then + Success = True End If End If - End If - BattleScreen.Battle.RaiseStat(Target, own, BattleScreen, Stat, RaiseAmount, Message, "move:" & Move.Name, True) - Case "lowerstat", "decreasestat" - Dim Stat As String = f.GetSplit(1, ",") - Dim Message As String = "" - Dim Target As Boolean = own - Dim LowerAmount As Integer = 1 - If f.Split(CChar(",")).Count > 2 Then - Target = CBool(f.GetSplit(2, ",")) - If f.Split(CChar(",")).Count > 3 Then - Message = f.GetSplit(3, ",") - If f.Split(CChar(",")).Count > 4 Then - If CInt(f.GetSplit(4, ",")) > 0 Then - LowerAmount = CInt(f.GetSplit(4, ",")) - End If + Case "freeze" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Freeze Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Freeze Then + Success = True End If End If - End If - BattleScreen.Battle.LowerStat(Target, own, BattleScreen, Stat, LowerAmount, Message, "move:" & Move.Name, True) - Case "reducehp", "drainhp", "damage" - Dim Target As Boolean = CBool(f.GetSplit(1, ",")) - Dim HPAmount As Integer = 0 - Dim Message As String = "" - - If f.Split(CChar(",")).Count > 2 Then - HPAmount = CInt(f.GetSplit(2, ",")) - If f.Split(CChar(",")).Count > 3 Then - Message = f.GetSplit(3, ",") - End If - End If - BattleScreen.Battle.ReduceHP(HPAmount, Target, own, BattleScreen, Message, "move:" & Move.Name.ToLower) - Case "gainhp", "increasehp", "heal" - Dim Target As Boolean = CBool(f.GetSplit(1, ",")) - Dim HPAmount As Integer = 0 - Dim Message As String = "" - - If f.Split(CChar(",")).Count > 2 Then - HPAmount = CInt(f.GetSplit(2, ",")) - If f.Split(CChar(",")).Count > 3 Then - Message = f.GetSplit(3, ",") - End If - End If - BattleScreen.Battle.GainHP(HPAmount, Target, own, BattleScreen, Message, "move:" & Move.Name.ToLower) - Case "endbattle" - Dim Blackout As Boolean = False - - If f.Split(CChar(",")).Count > 2 Then - Blackout = CBool(fSub) - End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(Blackout)) - Case "faint" - Dim Target As Boolean = CBool(f.GetSplit(1, ",")) - 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 - End If - - If Target = True Then - If f.Split(CChar(",")).Count > 3 Then - If f.GetSplit(3, ",").StartsWith("~+") Then - NextPokemonIndex = BattleScreen.OppPokemonIndex + CInt(f.GetSplit(3, ",").Remove(0, 2)) + Case "paralyze" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Paralyzed Then + Success = True End If - If f.GetSplit(3, ",").StartsWith("~-") Then - NextPokemonIndex = BattleScreen.OppPokemonIndex - CInt(f.GetSplit(3, ",").Remove(0, 2)) + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Paralyzed Then + Success = True End If End If - End If - BattleScreen.NextPokemonIndex = NextPokemonIndex - - If f.Split(CChar(",")).Count > 2 Then - Message = f.GetSplit(2, ",").Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName) - End If - BattleScreen.Battle.FaintPokemon(Not Target, BattleScreen, Message) - Case "switch" - 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, ",") - End If - If Target = True Then - If f.GetSplit(2, ",").StartsWith("~+") Then - SwitchTo = BattleScreen.OppPokemonIndex + CInt(f.GetSplit(2, ",").Remove(0, 2)) + Case "poison" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Poison Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Poison Then + Success = True + End If End If - If f.GetSplit(2, ",").StartsWith("~-") Then - SwitchTo = BattleScreen.OppPokemonIndex - CInt(f.GetSplit(2, ",").Remove(0, 2)) + Case "toxic", "badpoison" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.BadPoison Then + Success = True + End If End If - BattleScreen.Battle.SwitchOutOpp(BattleScreen, SwitchTo, Message) - Else - If f.GetSplit(2, ",").StartsWith("~+") Then - SwitchTo = BattleScreen.OwnPokemonIndex + CInt(f.GetSplit(2, ",").Remove(0, 2)) + Case "anypoison" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Poison OrElse BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Poison OrElse BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.BadPoison Then + Success = True + End If End If - If f.GetSplit(2, ",").StartsWith("~-") Then - SwitchTo = BattleScreen.OwnPokemonIndex - CInt(f.GetSplit(2, ",").Remove(0, 2)) + Case "sleep" + If Target = True Then + If BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Sleep Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then + Success = True + End If End If - BattleScreen.Battle.SwitchOutOwn(BattleScreen, SwitchTo, -1, Message) - End If - Case Else - fSub = CInt(f.GetSplit(1, ",")).Clamp(0, 100).ToString - End Select + Case "noburn" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Burn Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Burn Then + Success = True + End If + End If + Case "nofreeze" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Freeze Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Freeze Then + Success = True + End If + End If + Case "noparalyze" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Paralyzed Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Paralyzed Then + Success = True + End If + End If + Case "nopoison" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Poison Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Poison Then + Success = True + End If + End If + Case "notoxic", "nobadpoison" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.BadPoison Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.BadPoison Then + Success = True + End If + End If + Case "nopoison" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Poison AndAlso BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.BadPoison Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Poison AndAlso BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.BadPoison Then + Success = True + End If + End If + Case "nosleep" + If Target = True Then + If BattleScreen.OppPokemon.Status <> Pokemon.StatusProblems.Sleep Then + Success = True + End If + Else + If BattleScreen.OwnPokemon.Status <> Pokemon.StatusProblems.Sleep Then + Success = True + End If + End If + End Select + Next + If Success = True Then + Trigger = "" + End If Else - Select Case f.ToLower() - Case "endround" - Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) - Dim cq2 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, False, 16) - cq2.PassThis = True - BattleScreen.BattleQuery.AddRange({cq1, cq2}) - BattleScreen.Battle.StartRound(BattleScreen) - Case "freeze" - fSub = "15" + If f.Contains(",") = True Then + fMain = f.GetSplit(0, ",") + fSub = f.GetSplit(1, ",") + Select Case fMain.ToLower() + Case "cameraangle" + Dim Direction As Integer = CInt(fSub) + Select Case Direction + Case 0 + BattleScreen.Battle.ChangeCameraAngle(0, own, BattleScreen) + Case 1 + BattleScreen.Battle.ChangeCameraAngle(1, True, BattleScreen) + Case 2 + BattleScreen.Battle.ChangeCameraAngle(2, True, BattleScreen) + End Select + Case "message", "text" + Dim OppPokemon As Pokemon = BattleScreen.OppPokemon + Dim OwnPokemon As Pokemon = BattleScreen.OwnPokemon + If own = False Then + OwnPokemon = BattleScreen.OppPokemon + OppPokemon = BattleScreen.OwnPokemon + End If + + fSub = Localization.GetString(fSub, fSub).Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName) + BattleScreen.BattleQuery.Add(New TextQueryObject(fSub)) + Case "raisestat", "increasestat" + Dim Stat As String = f.GetSplit(1, ",") + Dim Target As Boolean = own + Dim Message As String = "" + Dim RaiseAmount As Integer = 1 + + If f.Split(CChar(",")).Count > 2 Then + Target = CBool(f.GetSplit(2, ",")) + If f.Split(CChar(",")).Count > 3 Then + Message = f.GetSplit(3, ",") + If f.Split(CChar(",")).Count > 4 Then + If CInt(f.GetSplit(4, ",")) > 0 Then + RaiseAmount = CInt(f.GetSplit(4, ",")) + End If + End If + End If + End If + BattleScreen.Battle.RaiseStat(Target, own, BattleScreen, Stat, RaiseAmount, Message, "move:" & Move.Name, True) + Case "lowerstat", "decreasestat" + Dim Stat As String = f.GetSplit(1, ",") + Dim Message As String = "" + Dim Target As Boolean = own + Dim LowerAmount As Integer = 1 + If f.Split(CChar(",")).Count > 2 Then + Target = CBool(f.GetSplit(2, ",")) + If f.Split(CChar(",")).Count > 3 Then + Message = f.GetSplit(3, ",") + If f.Split(CChar(",")).Count > 4 Then + If CInt(f.GetSplit(4, ",")) > 0 Then + LowerAmount = CInt(f.GetSplit(4, ",")) + End If + End If + End If + End If + BattleScreen.Battle.LowerStat(Target, own, BattleScreen, Stat, LowerAmount, Message, "move:" & Move.Name, True) + Case "reducehp", "drainhp", "damage" + Dim Target As Boolean = CBool(f.GetSplit(1, ",")) + Dim HPAmount As Integer = 0 + Dim Message As String = "" + + If f.Split(CChar(",")).Count > 2 Then + HPAmount = CInt(f.GetSplit(2, ",")) + If f.Split(CChar(",")).Count > 3 Then + Message = f.GetSplit(3, ",") + End If + End If + BattleScreen.Battle.ReduceHP(HPAmount, Target, own, BattleScreen, Message, "move:" & Move.Name.ToLower) + Case "gainhp", "increasehp", "heal" + Dim Target As Boolean = CBool(f.GetSplit(1, ",")) + Dim HPAmount As Integer = 0 + Dim Message As String = "" + + If f.Split(CChar(",")).Count > 2 Then + HPAmount = CInt(f.GetSplit(2, ",")) + If f.Split(CChar(",")).Count > 3 Then + Message = f.GetSplit(3, ",") + End If + End If + BattleScreen.Battle.GainHP(HPAmount, Target, own, BattleScreen, Message, "move:" & Move.Name.ToLower) + Case "endbattle" + Dim Blackout As Boolean = False + + If f.Split(CChar(",")).Count > 2 Then + Blackout = CBool(fSub) + End If + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(Blackout)) + Case "faint" + Dim Target As Boolean = CBool(f.GetSplit(1, ",")) + 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 + End If + + If Target = True Then + If f.Split(CChar(",")).Count > 3 Then + If f.GetSplit(3, ",").StartsWith("~+") Then + NextPokemonIndex = BattleScreen.OppPokemonIndex + CInt(f.GetSplit(3, ",").Remove(0, 2)) + End If + If f.GetSplit(3, ",").StartsWith("~-") Then + NextPokemonIndex = BattleScreen.OppPokemonIndex - CInt(f.GetSplit(3, ",").Remove(0, 2)) + End If + End If + End If + BattleScreen.NextPokemonIndex = NextPokemonIndex + + If f.Split(CChar(",")).Count > 2 Then + Message = f.GetSplit(2, ",").Replace("[OPPNAME]", OppPokemon.GetDisplayName).Replace("[OWNNAME]", OwnPokemon.GetDisplayName) + End If + BattleScreen.Battle.FaintPokemon(Not Target, BattleScreen, Message) + Case "switch" + 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, ",") + End If + If Target = True Then + If f.GetSplit(2, ",").StartsWith("~+") Then + SwitchTo = BattleScreen.OppPokemonIndex + CInt(f.GetSplit(2, ",").Remove(0, 2)) + End If + If f.GetSplit(2, ",").StartsWith("~-") Then + SwitchTo = BattleScreen.OppPokemonIndex - CInt(f.GetSplit(2, ",").Remove(0, 2)) + End If + BattleScreen.Battle.SwitchOutOpp(BattleScreen, SwitchTo, Message) + Else + If f.GetSplit(2, ",").StartsWith("~+") Then + SwitchTo = BattleScreen.OwnPokemonIndex + CInt(f.GetSplit(2, ",").Remove(0, 2)) + End If + If f.GetSplit(2, ",").StartsWith("~-") Then + SwitchTo = BattleScreen.OwnPokemonIndex - CInt(f.GetSplit(2, ",").Remove(0, 2)) + End If + BattleScreen.Battle.SwitchOutOwn(BattleScreen, SwitchTo, -1, Message) + End If + Case Else + fSub = CInt(f.GetSplit(1, ",")).Clamp(0, 100).ToString + End Select + Else + Select Case f.ToLower() + Case "endround" + Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) + Dim cq2 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, False, 16) + cq2.PassThis = True + BattleScreen.BattleQuery.AddRange({cq1, cq2}) + BattleScreen.Battle.StartRound(BattleScreen) + Case "freeze" + fSub = "15" + Case "poison" + fSub = "40" + Case "toxic", "badpoison" + fSub = "25" + Case Else + fSub = "30" + End Select + End If + + Select Case fMain.ToLower() + Case "paralyze" + Paralyze(Move, own, BattleScreen, CInt(fSub)) Case "poison" - fSub = "40" + Poison(Move, own, BattleScreen, CInt(fSub)) Case "toxic", "badpoison" - fSub = "25" - Case Else - fSub = "30" + BadPoison(Move, own, BattleScreen, CInt(fSub)) + Case "burn" + Burn(Move, own, BattleScreen, CInt(fSub)) + Case "freeze" + Freeze(Move, own, BattleScreen, CInt(fSub)) + Case "sleep" + Sleep(Move, own, BattleScreen, CInt(fSub)) End Select End If - - Select Case fMain.ToLower() - Case "paralyze" - Paralyze(Move, own, BattleScreen, CInt(fSub)) - Case "poison" - Poison(Move, own, BattleScreen, CInt(fSub)) - Case "toxic", "badpoison" - BadPoison(Move, own, BattleScreen, CInt(fSub)) - Case "burn" - Burn(Move, own, BattleScreen, CInt(fSub)) - Case "freeze" - Freeze(Move, own, BattleScreen, CInt(fSub)) - Case "sleep" - Sleep(Move, own, BattleScreen, CInt(fSub)) - End Select Next End Sub diff --git a/P3D/Pokemon/Attacks/GameModeAttackLoader.vb b/P3D/Pokemon/Attacks/GameModeAttackLoader.vb index 99784c865..9a034f535 100644 --- a/P3D/Pokemon/Attacks/GameModeAttackLoader.vb +++ b/P3D/Pokemon/Attacks/GameModeAttackLoader.vb @@ -178,6 +178,8 @@ move.UseOppDefense = CBool(value) Case "useoppevasion" move.UseOppEvasion = CBool(value) + Case "deductpp" + move.gmDeductPP = CBool(value) End Select End If Next diff --git a/P3D/Pokemon/Items/GameModeItemLoader.vb b/P3D/Pokemon/Items/GameModeItemLoader.vb index c8d0b86a9..3f5403f29 100644 --- a/P3D/Pokemon/Items/GameModeItemLoader.vb +++ b/P3D/Pokemon/Items/GameModeItemLoader.vb @@ -120,7 +120,7 @@ Public Class GameModeItemLoader item.gmIsHealingItem = CBool(value) Case "healhpamount" item.gmHealHPAmount = CInt(value) - Case "curestatuseffects" + Case "curestatus" Dim StatusEffectList As New List(Of String) Dim valueSplit As String() = value.Split(",") For i = 0 To valueSplit.Count - 1 diff --git a/P3D/Screens/Inventory/NewInventoryScreen.vb b/P3D/Screens/Inventory/NewInventoryScreen.vb index 3537601bb..940c94d10 100644 --- a/P3D/Screens/Inventory/NewInventoryScreen.vb +++ b/P3D/Screens/Inventory/NewInventoryScreen.vb @@ -984,7 +984,11 @@ Public Class NewInventoryScreen Case INFO_ITEM_OPTION_TOSS TossItem(cItem) Case INFO_ITEM_OPTION_SELECT - FireSelectionEvent(cItem.ID) + If cItem.IsGameModeItem = True Then + FireSelectionEvent(cItem.gmID) + Else + FireSelectionEvent(cItem.ID.ToString) + End If CloseInfoScreen() _closing = True End Select @@ -1268,7 +1272,7 @@ Public Class NewInventoryScreen Public Event SelectedObject(params() As Object) Implements ISelectionScreen.SelectedObject - Private Sub FireSelectionEvent(ByVal itemId As Integer) + Private Sub FireSelectionEvent(ByVal itemId As String) RaiseEvent SelectedObject(New Object() {itemId}) End Sub