Namespace BattleSystem ''' ''' A class to execute GameMode attack functions. ''' Public Class AttackSpecialBasePower ''' ''' Executes the attack function(s). ''' ''' The move containing the attack function. ''' Own toggle. ''' Reference to the BattleScreen. Public Shared Function GetGameModeBasePower(ByVal Move As Attack, ByVal own As Boolean, ByVal BattleScreen As BattleScreen) As Integer If Move.GameModeBasePower <> "" Then Dim basePowerCalcs() As String = Move.GameModeBasePower.Split("|") Dim applyMultiplier As Single = 1 For i = 0 To basePowerCalcs.Count - 1 Dim b As String = basePowerCalcs(i) Dim bMain As String = b.Remove(b.IndexOf(",")) Dim bSub As String = b.Remove(0, b.IndexOf(",") + 1) Select Case bMain.ToLower Case "status" Dim Target As Boolean = own Dim Status As String = bSub.GetSplit(0, ",") Dim Multiplier As Single = 1 If bSub.Split(",").Count > 1 Then Multiplier = CSng(bSub.GetSplit(1, ",").InsertDecSeparator) If bSub.Split(",").Count > 2 Then If own = True Then Target = Not CBool(bSub.GetSplit(2, ",")) Else Target = CBool(bSub.GetSplit(2, ",")) End If End If End If Dim Success As Boolean = False Select Case Status.ToLower() Case "confuse" If Target = True Then If BattleScreen.OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True Then Success = True End If Else If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True Then Success = True End If End If 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 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 Case "paralyze" 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 "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 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 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 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 Case "noconfuse" If Target = True Then If BattleScreen.OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = False Then Success = True End If Else If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = False Then Success = True End If End If 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 If Success = True Then applyMultiplier *= Multiplier End If Case "underground" Dim Target As Boolean = own Dim Multiplier As Single = 1 Dim Success As Boolean = False If bSub.Split(",").Count > 0 Then Multiplier = CSng(bSub.GetSplit(0, ",").InsertDecSeparator) If bSub.Split(",").Count > 1 Then If own = True Then Target = Not CBool(bSub.GetSplit(1, ",")) Else Target = CBool(bSub.GetSplit(1, ",")) End If End If End If If Target = True Then If BattleScreen.FieldEffects.OppDigCounter > 0 Then Success = True End If Else If BattleScreen.FieldEffects.OwnDigCounter > 0 Then Success = True End If End If If Success = True Then applyMultiplier *= Multiplier End If Case "inmidair" Dim Target As Boolean = own Dim Multiplier As Single = 1 Dim Success As Boolean = False If bSub.Split(",").Count > 0 Then Multiplier = CSng(bSub.GetSplit(0, ",").InsertDecSeparator) If own = True Then Target = Not CBool(bSub.GetSplit(1, ",")) Else Target = CBool(bSub.GetSplit(1, ",")) End If End If If Target = True Then If BattleScreen.FieldEffects.OppFlyCounter > 0 Then Success = True End If If BattleScreen.FieldEffects.OppBounceCounter > 0 Then Success = True End If If BattleScreen.FieldEffects.OppSkyDropCounter > 0 Then Success = True End If Else If BattleScreen.FieldEffects.OwnFlyCounter > 0 Then Success = True End If If BattleScreen.FieldEffects.OwnBounceCounter > 0 Then Success = True End If If BattleScreen.FieldEffects.OwnSkyDropCounter > 0 Then Success = True End If End If If Success = True Then applyMultiplier *= Multiplier End If Case "underwater" Dim Target As Boolean = own Dim Multiplier As Single = 1 Dim Success As Boolean = False If bSub.Split(",").Count > 0 Then Multiplier = CSng(bSub.GetSplit(0, ",").InsertDecSeparator) If own = True Then Target = Not CBool(bSub.GetSplit(1, ",")) Else Target = CBool(bSub.GetSplit(1, ",")) End If End If If Target = True Then If BattleScreen.FieldEffects.OppDiveCounter > 0 Then Success = True End If Else If BattleScreen.FieldEffects.OwnDiveCounter > 0 Then Success = True End If End If If Success = True Then applyMultiplier *= Multiplier End If End Select Next Return CInt(Move.Power * applyMultiplier) Else Return Move.Power End If End Function End Class End Namespace