diff --git a/2.5DHero/2.5DHero/2.5DHero.vbproj b/2.5DHero/2.5DHero/2.5DHero.vbproj index 11caecb1e..8f7fbe44c 100644 --- a/2.5DHero/2.5DHero/2.5DHero.vbproj +++ b/2.5DHero/2.5DHero/2.5DHero.vbproj @@ -1711,6 +1711,7 @@ PreserveNewest + PreserveNewest diff --git a/2.5DHero/2.5DHero/Battle/BattleSystemV2/Battle.vb b/2.5DHero/2.5DHero/Battle/BattleSystemV2/Battle.vb index 3e2f1120c..ffe101e71 100644 --- a/2.5DHero/2.5DHero/Battle/BattleSystemV2/Battle.vb +++ b/2.5DHero/2.5DHero/Battle/BattleSystemV2/Battle.vb @@ -402,6 +402,49 @@ Public SelectedMoveOwn As Boolean = True Public SelectedMoveOpp As Boolean = True + 'Does the MegaEvolution + Sub DoMegaEvolution(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) + + Dim p As Pokemon = BattleScreen.OwnPokemon + If own = False Then + p = BattleScreen.OppPokemon + End If + 'Transform a Pokemon into it's Mega Evolution + If p.AdditionalData = "" Then + p.AdditionalData = "mega" + p.ReloadDefinitions() + p.CalculateStatsBarSpeed() + p.LoadMegaAbility() + Me.ChangeCameraAngel(1, own, BattleScreen) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(own, ToggleEntityQueryObject.BattleEntities.OwnPokemon, PokemonForms.GetOverworldSpriteName(p), 0, 1, -1, -1)) + BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " has Mega Evolved!")) + End If + End Sub + + 'Checks if any pokemon is mega evolving, order based on speed + Sub MegaEvolCheck(ByVal BattleScreen As BattleScreen) + If BattleCalculation.MovesFirst(BattleScreen) = True Then + If BattleScreen.IsMegaEvolvingOwn = True Then + DoMegaEvolution(BattleScreen, True) + End If + If BattleScreen.IsMegaEvolvingOpp = True Then + DoMegaEvolution(BattleScreen, False) + End If + Else + If BattleScreen.IsMegaEvolvingOpp = True Then + DoMegaEvolution(BattleScreen, False) + End If + If BattleScreen.IsMegaEvolvingOwn = True Then + DoMegaEvolution(BattleScreen, True) + End If + + End If + BattleScreen.IsMegaEvolvingOwn = False + BattleScreen.IsMegaEvolvingOpp = False + End Sub + + + Public Sub InitializeRound(ByVal BattleScreen As BattleScreen, ByVal OwnStep As RoundConst) If BattleHasEnded(BattleScreen) = True Then Exit Sub @@ -410,9 +453,13 @@ Dim OppStep As RoundConst = GetOppStep(BattleScreen, OwnStep) If OwnStep.StepType = RoundConst.StepTypes.Move Then OwnStep = GetAttack(BattleScreen, True, CType(OwnStep.Argument, Attack)) + Else + BattleScreen.IsMegaEvolvingOwn = False End If If OppStep.StepType = RoundConst.StepTypes.Move Then OppStep = GetAttack(BattleScreen, False, CType(OppStep.Argument, Attack)) + Else + BattleScreen.IsMegaEvolvingOpp = False End If 'Move,Move @@ -426,7 +473,10 @@ If SelectedMoveOwn = True Then ownMove.MoveSelected(True, BattleScreen) If SelectedMoveOpp = True Then oppMove.MoveSelected(False, BattleScreen) + MegaEvolCheck(BattleScreen) Dim first As Boolean = BattleCalculation.AttackFirst(ownMove, oppMove, BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() If first = True Then DoAttackRound(BattleScreen, first, ownMove) @@ -443,6 +493,10 @@ 'Move,Text If OwnStep.StepType = RoundConst.StepTypes.Move And OppStep.StepType = RoundConst.StepTypes.Text Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + ChangeCameraAngel(0, True, BattleScreen) BattleScreen.BattleQuery.Add(New TextQueryObject(CStr(OppStep.Argument))) EndRound(BattleScreen, 2) @@ -458,6 +512,10 @@ 'Move,Item If OwnStep.StepType = RoundConst.StepTypes.Move And OppStep.StepType = RoundConst.StepTypes.Item Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + OpponentUseItem(BattleScreen, CInt(CStr(OppStep.Argument).Split(CChar(","))(0)), CInt(CStr(OppStep.Argument).Split(CChar(","))(1))) EndRound(BattleScreen, 2) @@ -470,6 +528,10 @@ 'Move,Switch If OwnStep.StepType = RoundConst.StepTypes.Move And OppStep.StepType = RoundConst.StepTypes.Switch Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + If CType(OwnStep.Argument, Attack).ID = 228 Then 'Pursuit is used by own pokemon and opponent tries to switch. BattleScreen.FieldEffects.OwnPursuit = True BattleScreen.FieldEffects.OwnUsedMoves.Add(CType(OwnStep.Argument, Attack).ID) @@ -494,6 +556,10 @@ 'Move,Flee If OwnStep.StepType = RoundConst.StepTypes.Move And OppStep.StepType = RoundConst.StepTypes.Flee Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + BattleScreen.FieldEffects.OwnUsedMoves.Add(CType(OwnStep.Argument, Attack).ID) Dim ownMove As Attack = CType(OwnStep.Argument, Attack) @@ -521,6 +587,10 @@ 'Text,Move If OwnStep.StepType = RoundConst.StepTypes.Text And OppStep.StepType = RoundConst.StepTypes.Move Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + ChangeCameraAngel(0, True, BattleScreen) BattleScreen.BattleQuery.Add(New TextQueryObject(CStr(OwnStep.Argument))) EndRound(BattleScreen, 1) @@ -587,6 +657,10 @@ 'Switch,Move If OwnStep.StepType = RoundConst.StepTypes.Switch And OppStep.StepType = RoundConst.StepTypes.Move Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + If BattleCalculation.CanSwitch(BattleScreen, True) = True Then If CType(OppStep.Argument, Attack).ID = 228 Then 'Opp uses pursuit while own tries to switch. BattleScreen.FieldEffects.OppPursuit = True @@ -711,6 +785,10 @@ 'Item,Move If OwnStep.StepType = RoundConst.StepTypes.Item And OppStep.StepType = RoundConst.StepTypes.Move Then + MegaEvolCheck(BattleScreen) + BattleScreen.OppPokemon.CalculateStats() + BattleScreen.OwnPokemon.CalculateStats() + EndRound(BattleScreen, 1) Dim oppMove As Attack = CType(OppStep.Argument, Attack) @@ -3755,6 +3833,7 @@ endthisround: With BattleScreen Select Case type Case 0 'Complete round + .BattleMenu._mainMenuItemList.Clear() 'The fastest pokemon ends its round first If BattleCalculation.MovesFirst(BattleScreen) = True Then EndRoundOwn(BattleScreen) @@ -6227,6 +6306,21 @@ endthisround: End Enum Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) + + 'Reverts battle only Pokemon formes. + Dim str As String = "" + Dim p As Pokemon = Core.Player.Pokemons(0) + For i = 0 To Core.Player.Pokemons.Count - 1 + p = Core.Player.Pokemons(i) + str = p.AdditionalData.ToLower() + If str = "mega" OrElse str = "blade" Then + p.AdditionalData = PokemonForms.GetInitialAdditionalData(p) + p.ReloadDefinitions() + p.CalculateStats() + p.RestoreAbility() + End If + Next + If AddPVP = True Then Select Case reason Case EndBattleReasons.WinTrainer 'Lost diff --git a/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleMenu.vb b/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleMenu.vb index 8ddbff76c..327de7329 100644 --- a/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleMenu.vb +++ b/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleMenu.vb @@ -297,7 +297,7 @@ Private _mainMenuIndex As Integer = 0 Private _mainMenuNextIndex As Integer = 0 - Private _mainMenuItemList As New List(Of MainMenuItem) + Public _mainMenuItemList As New List(Of MainMenuItem) Private _mainMenuTeamPreviewAlpha As Integer = 0 Private _mainMenuTeamPreviewLastIndex As Integer = -1 @@ -612,13 +612,14 @@ End Sub Private Sub MainMenuAddMegaEvolution(ByVal BattleScreen As BattleScreen, ByVal Index As Integer) + Dim PokeIndex As Integer = BattleScreen.OwnPokemonIndex If BattleScreen.FieldEffects.OwnMegaEvolved = False Then - If Not Core.Player.Pokemons(0).Item Is Nothing Then - If Core.Player.Pokemons(0).Item.IsMegaStone = True Then - Dim megaStone = CType(Core.Player.Pokemons(0).Item, Items.MegaStone) + 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(0).Number Then - 'm_MainMenuItemList.Add(New MainMenuItem(0, "Mega Evolve!", Index, Nothing)) + If megaStone.MegaPokemonNumber = Core.Player.Pokemons(PokeIndex).Number Then + _mainMenuItemList.Add(New MainMenuItem(0, "Mega Evolve!", Index, AddressOf MainMenuMegaEvolve)) End If End If End If @@ -722,6 +723,14 @@ 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) + BattleScreen.IsMegaEvolvingOwn = True + For i = 0 To Core.Player.Pokemons.Count - 1 + If Core.Player.Pokemons(i).AdditionalData = "mega" Then + BattleScreen.IsMegaEvolvingOwn = False + End If + Next + End Sub #End Region #Region "MoveMenu" diff --git a/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb b/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb index 422871186..b11eb1401 100644 --- a/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb +++ b/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb @@ -37,6 +37,9 @@ Public OwnPokemon As Pokemon Public OppPokemon As Pokemon + Public IsMegaEvolvingOwn As Boolean = False + Public IsMegaEvolvingOpp As Boolean = False + Public OppPokemonNPC As NPC Public OwnPokemonNPC As NPC Public OwnTrainerNPC As NPC diff --git a/2.5DHero/2.5DHero/Content/Pokemon/Data/181_mega.dat b/2.5DHero/2.5DHero/Content/Pokemon/Data/181_mega.dat new file mode 100644 index 000000000..37d7e1be3 --- /dev/null +++ b/2.5DHero/2.5DHero/Content/Pokemon/Data/181_mega.dat @@ -0,0 +1,62 @@ +Name|Mega Ampharos +Number|181 +ExperienceType|2 +BaseExperience|225 +Type1|Electric +Type2|Dragon +CatchRate|45 +BaseFriendship|70 +EggGroup1|Monster +EggGroup2|Field +BaseEggSteps|5355 +EggPokemon|179 +IsGenderLess|0 +CanBreed|1 +Devolution|180 +IsMale|50 +Ability1|104 +Ability2|Nothing +HiddenAbility|104 +EggMoves|495,97,34,268,598,604,260,231,316,28,103,36,115,219,85 +Machines|223,29,174,92,192,249,237,173,63,182,240,203,218,231,87,216,104,207,214,129,111,9,197,156,213,7,5,25,34,36,6,66,68,69,99,85,102,117,130,86,149,164,264,113,219,280,351,263,290,411,374,451,416,445,363,496,497,521,523,528,612,590,70,148,431 +BaseHP|90 +BaseAttack|95 +BaseDefense|105 +BaseSpAttack|165 +BaseSpDefense|110 +BaseSpeed|45 +FPHP|0 +FPAttack|0 +FPDefense|0 +FPSpAttack|3 +FPSpDefense|0 +FPSpeed|0 +CanFly|0 +CanSwim|0 +Pokedex|The tail's tip shines brightly and can be seen from far away. It acts as a beacon for lost people.\Light Pokémon\61.5\1.4\0,148,0 +Scale|1.16 +Move|1,192 +Move|1,602 +Move|1,569 +Move|1,406 +Move|1,7 +Move|1,33 +Move|1,45 +Move|1,86 +Move|1,84 +Move|4,86 +Move|8,84 +Move|11,178 +Move|16,268 +Move|20,36 +Move|25,486 +Move|29,109 +Move|30,9 +Move|35,408 +Move|40,435 +Move|46,538 +Move|51,324 +Move|57,113 +Move|62,87 +Move|65,406 +TradeValue|35 diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Bug/UTurn.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Bug/UTurn.vb index c8679b153..906e31746 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Bug/UTurn.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Bug/UTurn.vb @@ -75,7 +75,7 @@ Return i Else Dim i As Integer = 0 - While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex Or BattleScreen.Trainer.Pokemons(i).IsEgg() = True + While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OppPokemonIndex Or BattleScreen.Trainer.Pokemons(i).IsEgg() = True i += 1 End While Return i diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Fling.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Fling.vb index f4d784c45..96e57ffdc 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Fling.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Fling.vb @@ -86,7 +86,9 @@ If own = False Then p = BattleScreen.OppPokemon End If - + If p.Item.IsMegaStone = True Then + Exit Sub + End If If Not p.Item Is Nothing Then 'Clear prior effect chances to add the chance depending on the item. Me.EffectChances.Clear() diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/KnockOff.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/KnockOff.vb index ef1d86ca8..243952ee0 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/KnockOff.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/KnockOff.vb @@ -67,7 +67,9 @@ p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon End If - + If op.Item.IsMegaStone = True Then + Exit Sub + End If If BattleScreen.Battle.RemoveHeldItem(Not own, own, BattleScreen, "", "", True) = True Then op.OriginalItem = Item.GetItemByID(op.Item.ID) op.OriginalItem.AdditionalData = op.Item.AdditionalData diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Switcheroo.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Switcheroo.vb index c06f10917..c7c830b9f 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Switcheroo.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Switcheroo.vb @@ -83,13 +83,15 @@ Namespace BattleSystem.Moves.Dark Else If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso p.Number = 649 Then BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!")) - Else - Dim i1 As Item = p.Item - Dim i2 As Item = op.Item - - p.Item = i2 - op.Item = i1 - BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " switched items with " & op.GetDisplayName() & ".")) + If p.Item.IsMegaStone OrElse op.Item.IsMegaStone Then + BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!")) + Else + Dim i1 As Item = p.Item + Dim i2 As Item = op.Item + p.Item = i2 + op.Item = i1 + BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " switched items with " & op.GetDisplayName() & ".")) + End If End If End If End If diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Thief.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Thief.vb index c9ba93060..eda76f145 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Thief.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Dark/Thief.vb @@ -59,7 +59,9 @@ p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon End If - + If op.Item.IsMegaStone = True Then + Exit Sub + End If Dim canSteal As Boolean = True If op.Ability.Name.ToLower() = "multitype" Then canSteal = False diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Dragon/DragonTail.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Dragon/DragonTail.vb index bee91b62f..35839a9a4 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Dragon/DragonTail.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Dragon/DragonTail.vb @@ -89,7 +89,7 @@ If BattleScreen.Trainer.CountUseablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) While BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OppPokemonIndex = i OrElse BattleScreen.Trainer.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) + i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOpp(BattleScreen, i, "") Else @@ -99,7 +99,7 @@ If Core.Player.CountFightablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, Core.Player.Pokemons.Count) While Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OwnPokemonIndex = i OrElse Core.Player.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, Core.Player.Pokemons.Count) + i = Core.Random.Next(0, Core.Player.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOwn(BattleScreen, i, -1) Else diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Electric/VoltSwitch.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Electric/VoltSwitch.vb index b4919631e..c10e12cc4 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Electric/VoltSwitch.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Electric/VoltSwitch.vb @@ -75,7 +75,7 @@ Namespace BattleSystem.Moves.Electric Return i Else Dim i As Integer = 0 - While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex Or BattleScreen.Trainer.Pokemons(i).IsEgg() = True + While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OppPokemonIndex Or BattleScreen.Trainer.Pokemons(i).IsEgg() = True i += 1 End While Return i diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Fighting/CircleThrow.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Fighting/CircleThrow.vb index 59681b41f..78b01994c 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Fighting/CircleThrow.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Fighting/CircleThrow.vb @@ -89,7 +89,7 @@ Namespace BattleSystem.Moves.Fighting If BattleScreen.Trainer.CountUseablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) While BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OppPokemonIndex = i OrElse BattleScreen.Trainer.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) + i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOpp(BattleScreen, i, "") Else @@ -99,7 +99,7 @@ Namespace BattleSystem.Moves.Fighting If Core.Player.CountFightablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, Core.Player.Pokemons.Count) While Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OwnPokemonIndex = i OrElse Core.Player.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, Core.Player.Pokemons.Count) + i = Core.Random.Next(0, Core.Player.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOwn(BattleScreen, i, -1) Else diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/BatonPass.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/BatonPass.vb index 7ee3e817d..ad887b4c5 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/BatonPass.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/BatonPass.vb @@ -82,13 +82,13 @@ Private Function GetPokemonIndex(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) As Integer If own = True Then Dim i As Integer = 0 - While Core.Player.Pokemons(i).HP <= 0 Or Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex + While Core.Player.Pokemons(i).HP <= 0 Or Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex Or Core.Player.Pokemons(i).IsEgg() i += 1 End While Return i Else Dim i As Integer = 0 - While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex + While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex Or BattleScreen.Trainer.Pokemons(i).IsEgg() i += 1 End While Return i diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Covet.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Covet.vb index 492f6de19..99297ef04 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Covet.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Covet.vb @@ -62,7 +62,9 @@ Namespace BattleSystem.Moves.Normal p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon End If - + If op.Item.IsMegaStone = True Then + Exit Sub + End If Dim canSteal As Boolean = True If op.Ability.Name.ToLower() = "multitype" Then canSteal = False diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Roar.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Roar.vb index 7a36ac491..7926c055c 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Roar.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Roar.vb @@ -74,7 +74,7 @@ If BattleScreen.Trainer.CountUseablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) While BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OppPokemonIndex = i OrElse BattleScreen.Trainer.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) + i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOpp(BattleScreen, i, "") Else @@ -84,7 +84,7 @@ If Core.Player.CountFightablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, Core.Player.Pokemons.Count) While Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OwnPokemonIndex = i OrElse Core.Player.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, Core.Player.Pokemons.Count) + i = Core.Random.Next(0, Core.Player.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOwn(BattleScreen, i, -1) Else diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Whirlwind.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Whirlwind.vb index c33c5204e..5d94f74b4 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Whirlwind.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Normal/Whirlwind.vb @@ -75,7 +75,7 @@ If BattleScreen.Trainer.CountUseablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) While BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OppPokemonIndex = i OrElse BattleScreen.Trainer.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.count) + i = Core.Random.Next(0, BattleScreen.Trainer.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOpp(BattleScreen, i, "") Else @@ -85,7 +85,7 @@ If Core.Player.CountFightablePokemon > 1 Then Dim i As Integer = Core.Random.Next(0, Core.Player.Pokemons.Count) While Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted OrElse BattleScreen.OwnPokemonIndex = i OrElse Core.Player.Pokemons(i).HP <= 0 - i = Core.Random.Next(0, Core.Player.Pokemons.Count) + i = Core.Random.Next(0, Core.Player.Pokemons.Count - 1) End While BattleScreen.Battle.SwitchOutOwn(BattleScreen, i, -1) Else diff --git a/2.5DHero/2.5DHero/Pokemon/Attacks/Psychic/Trick.vb b/2.5DHero/2.5DHero/Pokemon/Attacks/Psychic/Trick.vb index f3dfd3651..9f0618555 100644 --- a/2.5DHero/2.5DHero/Pokemon/Attacks/Psychic/Trick.vb +++ b/2.5DHero/2.5DHero/Pokemon/Attacks/Psychic/Trick.vb @@ -84,12 +84,15 @@ Namespace BattleSystem.Moves.Psychic If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso p.Number = 649 Then BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!")) Else - Dim i1 As Item = p.Item - Dim i2 As Item = op.Item - - p.Item = i2 - op.Item = i1 - BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " switched items with " & op.GetDisplayName() & ".")) + If p.Item.IsMegaStone OrElse op.Item.IsMegaStone Then + BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!")) + Else + Dim i1 As Item = p.Item + Dim i2 As Item = op.Item + p.Item = i2 + op.Item = i1 + BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " switched items with " & op.GetDisplayName() & ".")) + End If End If End If End If diff --git a/2.5DHero/2.5DHero/Pokemon/Items/MegaStone.vb b/2.5DHero/2.5DHero/Pokemon/Items/MegaStone.vb index 38eba523d..cb0abbdbb 100644 --- a/2.5DHero/2.5DHero/Pokemon/Items/MegaStone.vb +++ b/2.5DHero/2.5DHero/Pokemon/Items/MegaStone.vb @@ -15,11 +15,11 @@ Namespace Items Public Overrides ReadOnly Property CanBeUsed As Boolean = False Public Overrides ReadOnly Property CanBeUsedInBattle As Boolean = False - Public Sub New(ByVal MegaPokemonName As String, ByVal MegaPokemonNumber As Integer) + Public Sub New(ByVal MegaPokemonName As String, ByVal _megaPokemonNumber As Integer) Description = "One variety of the mysterious Mega Stones. Have " & MegaPokemonName & " hold it, and this stone will enable it to Mega Evolve during battle." _textureSource = "Items\MegaStones" - MegaPokemonNumber = MegaPokemonNumber + MegaPokemonNumber = _megaPokemonNumber End Sub End Class diff --git a/2.5DHero/2.5DHero/Pokemon/Monster/Pokemon.vb b/2.5DHero/2.5DHero/Pokemon/Monster/Pokemon.vb index b0669c3dd..806383835 100644 --- a/2.5DHero/2.5DHero/Pokemon/Monster/Pokemon.vb +++ b/2.5DHero/2.5DHero/Pokemon/Monster/Pokemon.vb @@ -136,6 +136,8 @@ Public Class Pokemon ''' ''' Returns the name to reference to the animation/model of this Pokémon. ''' + Public AbilityTag As New List(Of Integer) + Public ReadOnly Property AnimationName() As String Get Return PokemonForms.GetAnimationName(Me) @@ -1026,6 +1028,16 @@ Public Class Pokemon Me.CalculateStats() End Sub + 'Just use these subs when doing/reverting mega evolutions. + Public NormalAbility As Ability = New Abilities.Stench + Public Sub LoadMegaAbility() + NormalAbility = Ability + Me.Ability = NewAbilities(0) + End Sub + Public Sub RestoreAbility() + Me.Ability = NormalAbility + End Sub + #End Region #Region "OriginalStats" @@ -1268,6 +1280,7 @@ Public Class Pokemon Public Sub LoadDefinitions(ByVal Number As Integer, ByVal AdditionalData As String) Dim path As String = PokemonForms.GetPokemonDataFile(Number, AdditionalData) Security.FileValidation.CheckFileValid(path, False, "Pokemon.vb") + NewAbilities.Clear() Dim Data() As String = System.IO.File.ReadAllLines(path) @@ -1316,7 +1329,11 @@ Public Class Pokemon Me.IsGenderless = CBool(Value) Case "devolution" Me.Devolution = CInt(Value) - Case "ability1", "ability2", "ability" + Case "ability1", "ability" + If Value <> "Nothing" Then + Me.NewAbilities.Add(Ability.GetAbilityByID(CInt(Value))) + End If + Case "ability2" If Value <> "Nothing" Then Me.NewAbilities.Add(Ability.GetAbilityByID(CInt(Value))) End If @@ -1538,6 +1555,7 @@ Public Class Pokemon Me.OT = tagValue Case "ability" Me.Ability = net.Pokemon3D.Game.Ability.GetAbilityByID(CInt(tagValue)) + Me.NormalAbility = Ability Case "status" Select Case tagValue Case "BRN" @@ -2112,12 +2130,17 @@ Public Class Pokemon ''' ''' Recalculates all stats for this Pokémon using its current EVs, IVs and level. ''' - Public Sub CalculateStats() + ''' + Public Sub CalculateStatsBarSpeed() Me.MaxHP = CalcStatus(Me.Level, True, Me.BaseHP, Me.EVHP, Me.IVHP, "HP") Me.Attack = CalcStatus(Me.Level, False, Me.BaseAttack, Me.EVAttack, Me.IVAttack, "Attack") Me.Defense = CalcStatus(Me.Level, False, Me.BaseDefense, Me.EVDefense, Me.IVDefense, "Defense") Me.SpAttack = CalcStatus(Me.Level, False, Me.BaseSpAttack, Me.EVSpAttack, Me.IVSpAttack, "SpAttack") Me.SpDefense = CalcStatus(Me.Level, False, Me.BaseSpDefense, Me.EVSpDefense, Me.IVSpDefense, "SpDefense") + End Sub + + Public Sub CalculateStats() + CalculateStatsBarSpeed() Me.Speed = CalcStatus(Me.Level, False, Me.BaseSpeed, Me.EVSpeed, Me.IVSpeed, "Speed") End Sub @@ -2743,5 +2766,4 @@ Public Class Pokemon Public Overrides Function ToString() As String Return GetSaveData() End Function - End Class diff --git a/2.5DHero/2.5DHero/Pokemon/Monster/Resource/PokemonForms.vb b/2.5DHero/2.5DHero/Pokemon/Monster/Resource/PokemonForms.vb index 7c69845be..5e6543a79 100644 --- a/2.5DHero/2.5DHero/Pokemon/Monster/Resource/PokemonForms.vb +++ b/2.5DHero/2.5DHero/Pokemon/Monster/Resource/PokemonForms.vb @@ -9,7 +9,9 @@ Public Class PokemonForms New Deoxys(), New Burmy(), New Shellos(), New Gastrodon(), New Rotom(), New Dialga(), New Arceus(), New Basculin(), New Deerling(), New Sawsbuck(), New Frillish(), New Jellicent(), New Tornadus(), New Thundurus(), New Landorus(), New Kyurem(), - New Aegislash()}) + New Aegislash(), + New Ampharos()}) + End Sub ''' @@ -237,6 +239,30 @@ Public Class PokemonForms End Class + 'Placeholder for Mega Ampharos + Private Class Ampharos + Inherits PokemonForm + Public Sub New() + MyBase.New(181) + End Sub + Public Overrides Function GetMenuImagePosition(ByVal P As Pokemon) As Vector2 + Select Case P.AdditionalData + Case "mega" + Return New Vector2(9, 29) + Case Else + Return New Vector2(20, 5) + End Select + End Function + Public Overrides Function GetDataFileAddition(ByVal AdditionalData As String) As String + Select Case AdditionalData.ToLower() + Case "mega" + Return "_mega" + Case Else + Return "" + End Select + End Function + End Class + Private Class Unown Inherits PokemonForm @@ -281,15 +307,30 @@ Public Class PokemonForms Public Sub New() MyBase.New(208) End Sub - Public Overrides Function GetMenuImagePosition(ByVal P As Pokemon) As Vector2 - Return New Vector2(11, 26) + Select Case P.AdditionalData + Case "mega" + Return New Vector2(29, 28) + Case Else + Return New Vector2(11, 26) + End Select End Function - Public Overrides Function GetMenuImageSize(ByVal P As Pokemon) As Size - Return New Size(35, 32) + Select Case P.AdditionalData + Case "mega" + Return New Size(39, 32) + Case Else + Return New Size(35, 32) + End Select + End Function + Public Overrides Function GetDataFileAddition(ByVal AdditionalData As String) As String + Select Case AdditionalData.ToLower() + Case "mega" + Return "_mega" + Case Else + Return "" + End Select End Function - End Class Private Class Deoxys