From c79f92b3e8879b21a71c912b73e81772645567c5 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <66885565+JappaWakkaP3D@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:17:36 +0200 Subject: [PATCH 01/57] Battle Animations 22-08-2021 Made the Battle Animation implementation functional Added animations for: Stats Increasing Stats Decreasing Status Effects - Poisoned - Burned Attacks - Ember - Growl - Pound - Tackle - Poison Sting --- P3D/Battle/BattleSystemV2/Battle.vb | 1005 +++++++++++++-------- P3D/Pokemon/Attacks/Attack.vb | 28 +- P3D/Pokemon/Attacks/Fire/Ember.vb | 50 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 9 + P3D/Pokemon/Attacks/Normal/Pound.vb | 7 + P3D/Pokemon/Attacks/Normal/Tackle.vb | 13 + P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 30 + 7 files changed, 763 insertions(+), 379 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 0b0fb2977..2b322aaa2 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1496,7 +1496,7 @@ End If 'Own Pokémon move animation! This displays any effects that should display on the user of the move. - moveUsed.UserPokemonMoveAnimation(BattleScreen) + moveUsed.UserPokemonMoveAnimation(BattleScreen, own) If moveUsed.Target <> Attack.Targets.Self And moveUsed.FocusOppPokemon = True Then If own = True Then @@ -1849,7 +1849,7 @@ End If 'Opp Pokémon move animation! This displays the move effects that target the other Pokémon and appear after the camera switched around. - moveUsed.OpponentPokemonMoveAnimation(BattleScreen) + moveUsed.OpponentPokemonMoveAnimation(BattleScreen, own) If moveUsed.IsDamagingMove = True Then ChangeCameraAngle(2, own, BattleScreen) @@ -2643,9 +2643,12 @@ Public Function InflictBurn(ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String) As Boolean Dim p As Pokemon = BattleScreen.OwnPokemon Dim op As Pokemon = BattleScreen.OppPokemon + Dim pNPC As Entity = BattleScreen.OwnPokemonNPC + If own = False Then p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon + pNPC = BattleScreen.OppPokemonNPC End If If p.HP <= 0 OrElse p.Status = Pokemon.StatusProblems.Fainted Then @@ -2701,7 +2704,15 @@ 'Works! p.Status = Pokemon.StatusProblems.Burn ChangeCameraAngle(1, own, BattleScreen) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) + 'Burn animation + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) @@ -3399,7 +3410,28 @@ End If End If - '***SHOW STAT INCREASE ANIMATION HERE*** + '***STAT INCREASE ANIMATION*** + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim maxAmount As Integer = 20 * val + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As String = "Textures\Battle\StatChange\statDown" + Dim Position As Vector3 = New Vector3(0, -0.4, 0) + Dim Destination As Vector3 = New Vector3(0, 0.8, 0) + Dim Scale As Vector3 = New Vector3(0.2F) + Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) + Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) + + Position.X = xPos + Position.Z = zPos + Destination.X = xPos + Destination.Z = zPos + Dim startDelay As Double = 5.0 * Random.NextDouble() + MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + Threading.Interlocked.Increment(currentAmount) + End While + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) + BattleScreen.BattleQuery.Add(MoveAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -3660,8 +3692,28 @@ val = 6 + statC End If End If + '***STAT DECREASE ANIMATION*** + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim maxAmount As Integer = 20 * val + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As String = "Textures\Battle\StatChange\statDown" + Dim Position As Vector3 = New Vector3(0, 0.8, 0) + Dim Destination As Vector3 = New Vector3(0, -0.4, 0) + Dim Scale As Vector3 = New Vector3(0.2F) + Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) + Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - '***SHOW STAT DECREASE ANIMATION HERE*** + Position.X = xPos + Position.Z = zPos + Destination.X = xPos + Destination.Z = zPos + Dim startDelay As Double = 5.0 * Random.NextDouble() + MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + Threading.Interlocked.Increment(currentAmount) + End While + MoveAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) + BattleScreen.BattleQuery.Add(MoveAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -5295,14 +5347,48 @@ Else If .OwnPokemon.Ability.Name.ToLower() <> "magic guard" Then If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + 'Poison animation + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) + BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP / 8), True, True, BattleScreen, "The poison hurt " & .OwnPokemon.GetDisplayName() & ".", "poison") End If If .OwnPokemon.Status = Pokemon.StatusProblems.BadPoison Then 'Own Toxic .FieldEffects.OwnPoisonCounter += 1 Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + 'Poison animation + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) + BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP * multiplier), True, True, BattleScreen, "The toxic hurt " & .OwnPokemon.GetDisplayName() & ".", "badpoison") End If End If @@ -5317,7 +5403,16 @@ reduceAmount = CInt(.OwnPokemon.MaxHP / 32) End If - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) + 'Burn animation + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BattleScreen.BattleQuery.Add(BurnAnimation) + 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If End If @@ -6044,14 +6139,48 @@ Else If .OppPokemon.Ability.Name.ToLower() <> "magic guard" Then If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + 'Poison animation + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) + BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP / 8), False, False, BattleScreen, "The poison hurt " & .OppPokemon.GetDisplayName() & ".", "poison") End If If .OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then 'Opp Toxic .FieldEffects.OppPoisonCounter += 1 Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + 'Poison animation + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) + BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") End If End If @@ -6065,8 +6194,16 @@ If .OppPokemon.Ability.Name.ToLower() = "heatproof" Then reduceAmount = CInt(.OppPokemon.MaxHP / 16) End If - - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) + 'Burn animation + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BattleScreen.BattleQuery.Add(BurnAnimation) + 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If End If @@ -6620,8 +6757,8 @@ End If End Sub - Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") - HasSwitchedInOwn = True + Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") + HasSwitchedInOwn = True If FirstTime = False Then Dim insertMessage As String = message @@ -6631,6 +6768,34 @@ BattleScreen.AddToQuery(InsertIndex, New TextQueryObject(insertMessage)) + Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) + + ' Ball Closes + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = New Vector3(0, 0, 0) + + Dim SmokeTexture As String = "Textures\Battle\Cloud" + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 + + ' Pokemon disappears + BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) + BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + + ' Ball returns + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + + BattleScreen.AddToQuery(InsertIndex, BallReturn) + Dim index As Integer = NewPokemonIndex If index <= -1 Then For i = 0 To Core.Player.Pokemons.Count - 1 @@ -6655,435 +6820,547 @@ End If Dim ownModel As String = BattleScreen.GetModelName(True) - If ownModel = "" Then BattleScreen.AddToQuery(InsertIndex, New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OwnPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OwnPokemon), 0, 1, -1, -1)) Else BattleScreen.AddToQuery(InsertIndex, New ToggleEntityQueryObject(True, ownModel, 1, 0, -1, -1)) End If - BattleScreen.AddToQuery(InsertIndex, New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OwnPokemon, 1, -1, -1, -1, -1)) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(BattleScreen.OwnPokemon.Number.ToString(), True)) BattleScreen.AddToQuery(InsertIndex, New TextQueryObject("Go, " & BattleScreen.OwnPokemon.GetDisplayName() & "!")) + + ' Ball is thrown + Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + + ' Ball Opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokePosition = New Vector3(0, 0.35, 0) + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As String = "Textures\Battle\Cloud" + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 + + ' Pokemon appears + BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) + + ' Pokémon falls down + BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + + BattleScreen.AddToQuery(InsertIndex, BallThrow) End If With BattleScreen - If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then - .FieldEffects.UsedPokemon.Add(NewPokemonIndex) - End If + If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then + .FieldEffects.UsedPokemon.Add(NewPokemonIndex) + End If - If Not .OwnPokemon.Item Is Nothing Then - If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then - If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then - BattleScreen.FieldEffects.AmuletCoin += 1 - End If - End If - End If + If Not .OwnPokemon.Item Is Nothing Then + If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then + If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then + BattleScreen.FieldEffects.AmuletCoin += 1 + End If + End If + End If - Dim p As Pokemon = .OwnPokemon - Dim op As Pokemon = .OppPokemon + Dim p As Pokemon = .OwnPokemon + Dim op As Pokemon = .OppPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) - 'Spikes - If spikeAffected = True Then - If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OppSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If + 'Spikes + If spikeAffected = True Then + If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OppSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OppStickyWeb > 0 Then + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OppStickyWeb > 0 Then - LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If + End If + End If - 'Toxic Spikes - If spikeAffected = True Then - If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OppToxicSpikes - Case 1 - InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OppToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OppToxicSpikes = 0 - End If - End If - End If + 'Toxic Spikes + If spikeAffected = True Then + If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OppToxicSpikes + Case 1 + InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OppToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OppToxicSpikes = 0 + End If + End If + End If - 'Stealth Rock - If rockAffected = True Then - If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim rocksDamage As Double = 1D + 'Stealth Rock + If rockAffected = True Then + If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, True) - TriggerItemEffect(BattleScreen, True) + TriggerAbilityEffect(BattleScreen, True) + TriggerItemEffect(BattleScreen, True) - If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) - End If + If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OwnHealingWish = True Then - BattleScreen.FieldEffects.OwnHealingWish = False + If BattleScreen.FieldEffects.OwnHealingWish = True Then + BattleScreen.FieldEffects.OwnHealingWish = False - If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub - Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") - With BattleScreen - 'Natural cure cures status problems - If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then - If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then - .OppPokemon.Status = Pokemon.StatusProblems.None - .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) - End If - End If - 'Regenerator ability heals 1/3 of it's max HP - If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then - If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then - Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) - If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then - BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") - End If - End If - End If - 'save baton pass stuff: - If .FieldEffects.OppUsedBatonPass = True Then - .FieldEffects.OppBatonPassStats = New List(Of Integer) - With .OppPokemon - BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) - End With - .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True - End If + Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") + With BattleScreen + 'Natural cure cures status problems + If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then + If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then + .OppPokemon.Status = Pokemon.StatusProblems.None + .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) + End If + End If + 'Regenerator ability heals 1/3 of it's max HP + If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then + If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then + Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) + If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then + BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") + End If + End If + End If + 'save baton pass stuff: + If .FieldEffects.OppUsedBatonPass = True Then + .FieldEffects.OppBatonPassStats = New List(Of Integer) + With .OppPokemon + BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) + End With + .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True + End If - 'Set the original objects of Pokemon - .OppPokemon.ResetTemp() + 'Set the original objects of Pokemon + .OppPokemon.ResetTemp() - 'Remove volatiles - .OppPokemon.ClearAllVolatiles() + 'Remove volatiles + .OppPokemon.ClearAllVolatiles() - 'Resetting FieldEffects - With .FieldEffects - .OppSleepTurns = 0 - .OppTruantRound = 0 - .OppTaunt = 0 - .OppSmacked = 0 - .OppFlashFire = 0 - .OppRageCounter = 0 - .OppUproar = 0 - If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 - .OppEndure = 0 - .OppProtectCounter = 0 - .OppDetectCounter = 0 - .OppKingsShieldCounter = 0 - .OppProtectMovesCount = 0 - If .OppUsedBatonPass = False Then .OppIngrain = 0 - If .OppUsedBatonPass = False Then .OppSubstitute = 0 - If .OppUsedBatonPass = False Then .OppMagnetRise = 0 - If .OppUsedBatonPass = False Then .OppAquaRing = 0 - .OppPoisonCounter = 0 - .OppNightmare = 0 - If .OppUsedBatonPass = False Then .OppCurse = 0 - .OppOutrage = 0 - .OppThrash = 0 - .OppPetalDance = 0 - .OppEncore = 0 - .OppEncoreMove = Nothing - If .OppUsedBatonPass = False Then .OppEmbargo = 0 - .OppYawn = 0 - If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 - .OppConfusionTurns = 0 - .OppTorment = 0 - .OppTormentMove = Nothing - .OppChoiceMove = Nothing - .OppRecharge = 0 - .OppRolloutCounter = 0 - .OppIceBallCounter = 0 - .OppDefenseCurl = 0 - .OppCharge = 0 - .OppSolarBeam = 0 - .OppSolarBlade = 0 - If .OppUsedBatonPass = False Then .OppLeechSeed = 0 - If .OppUsedBatonPass = False Then .OppLockOn = 0 - .OppLansatBerry = 0 - .OppCustapBerry = 0 - .OppTrappedCounter = 0 - .OppFuryCutter = 0 - .OppEchoedVoice = 0 - .OppPokemonTurns = 0 - .OppStockpileCount = 0 - .OppDestinyBond = False - .OppGastroAcid = False + 'Resetting FieldEffects + With .FieldEffects + .OppSleepTurns = 0 + .OppTruantRound = 0 + .OppTaunt = 0 + .OppSmacked = 0 + .OppRageCounter = 0 + .OppUproar = 0 + If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 + .OppEndure = 0 + .OppProtectCounter = 0 + .OppDetectCounter = 0 + .OppKingsShieldCounter = 0 + .OppProtectMovesCount = 0 + If .OppUsedBatonPass = False Then .OppIngrain = 0 + If .OppUsedBatonPass = False Then .OppSubstitute = 0 + If .OppUsedBatonPass = False Then .OppMagnetRise = 0 + If .OppUsedBatonPass = False Then .OppAquaRing = 0 + .OppPoisonCounter = 0 + .OppNightmare = 0 + If .OppUsedBatonPass = False Then .OppCurse = 0 + .OppOutrage = 0 + .OppThrash = 0 + .OppPetalDance = 0 + .OppEncore = 0 + .OppEncoreMove = Nothing + If .OppUsedBatonPass = False Then .OppEmbargo = 0 + .OppYawn = 0 + If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 + .OppConfusionTurns = 0 + .OppTorment = 0 + .OppTormentMove = Nothing + .OppChoiceMove = Nothing + .OppRecharge = 0 + .OppRolloutCounter = 0 + .OppIceBallCounter = 0 + .OppDefenseCurl = 0 + .OppCharge = 0 + .OppSolarBeam = 0 + .OppSolarBlade = 0 + If .OppUsedBatonPass = False Then .OppLeechSeed = 0 + If .OppUsedBatonPass = False Then .OppLockOn = 0 + .OppLansatBerry = 0 + .OppCustapBerry = 0 + .OppTrappedCounter = 0 + .OppFuryCutter = 0 + .OppEchoedVoice = 0 + .OppPokemonTurns = 0 + .OppStockpileCount = 0 + .OppDestinyBond = False + .OppGastroAcid = False - .OppFlyCounter = 0 - .OppDigCounter = 0 - .OppBounceCounter = 0 - .OppDiveCounter = 0 - .OppShadowForceCounter = 0 - .OppPhantomForceCounter = 0 - .OppSkyDropCounter = 0 - .OppGeomancyCounter = 0 - .OppSkyAttackCounter = 0 - .OppRazorWindCounter = 0 - .OppSkullBashCounter = 0 + .OppFlyCounter = 0 + .OppDigCounter = 0 + .OppBounceCounter = 0 + .OppDiveCounter = 0 + .OppShadowForceCounter = 0 + .OppPhantomForceCounter = 0 + .OppSkyDropCounter = 0 + .OppGeomancyCounter = 0 + .OppSkyAttackCounter = 0 + .OppRazorWindCounter = 0 + .OppSkullBashCounter = 0 - .OppForesight = 0 - .OppOdorSleuth = 0 - .OppMiracleEye = 0 + .OppForesight = 0 + .OppOdorSleuth = 0 + .OppMiracleEye = 0 - .OppWrap = 0 - .OppWhirlpool = 0 - .OppBind = 0 - .OppClamp = 0 - .OppFireSpin = 0 - .OppMagmaStorm = 0 - .OppSandTomb = 0 - .OppInfestation = 0 + .OppWrap = 0 + .OppWhirlpool = 0 + .OppBind = 0 + .OppClamp = 0 + .OppFireSpin = 0 + .OppMagmaStorm = 0 + .OppSandTomb = 0 + .OppInfestation = 0 - .OppBideCounter = 0 - .OppBideDamage = 0 + .OppBideCounter = 0 + .OppBideDamage = 0 - .OppRoostUsed = False + .OppRoostUsed = False - 'Own stuff that depends on opp pokemon presence - .OwnTrappedCounter = 0 - .OwnWrap = 0 - .OwnWhirlpool = 0 - .OwnBind = 0 - .OwnClamp = 0 - .OwnFireSpin = 0 - .OwnMagmaStorm = 0 - .OwnSandTomb = 0 - .OwnInfestation = 0 + 'Own stuff that depends on opp pokemon presence + .OwnTrappedCounter = 0 + .OwnWrap = 0 + .OwnWhirlpool = 0 + .OwnBind = 0 + .OwnClamp = 0 + .OwnFireSpin = 0 + .OwnMagmaStorm = 0 + .OwnSandTomb = 0 + .OwnInfestation = 0 - If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then - BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) - End If - End With - End With + If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then + BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) + End If + End With + End With - BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) + BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) - If BattleScreen.IsTrainerBattle = False Then + If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) + Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + Faint.AnimationMovePokemonEntity(0, -1, 0, 0.1, False, False, 2, 0,,, 4) + BattleScreen.BattleQuery.Add(Faint) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) - EndBattle(EndBattleReasons.WinWild, BattleScreen, False) - Else - If BattleScreen.TrainerHasFightablePokemon() = True Then - If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then - GainEXP(BattleScreen) - End If - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) + EndBattle(EndBattleReasons.WinWild, BattleScreen, False) + Else + If BattleScreen.TrainerHasFightablePokemon() = True Then + If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then + GainEXP(BattleScreen) + End If If BattleScreen.IsRemoteBattle And BattleScreen.OppFaint Then - 'Next pokemon is selected by the opponent. - Else - SwitchInOpp(BattleScreen, False, index) - End If - Else - GainEXP(BattleScreen) - - ChangeCameraAngle(1, False, BattleScreen) - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) + 'Next pokemon is selected by the opponent. + Else + SwitchInOpp(BattleScreen, False, index) + End If + Else + GainEXP(BattleScreen) If message = "" Then - message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" - End If + message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" + End If - BattleScreen.BattleQuery.Add(New TextQueryObject(message)) + BattleScreen.BattleQuery.Add(New TextQueryObject(message)) + + Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + + ' Ball Closes + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = New Vector3(0, 0, 0) + + Dim SmokeTexture As String = "Textures\Battle\Cloud" + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 + + ' Pokemon disappears + BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) + BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + + ' Ball returns + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + + BattleScreen.BattleQuery.Add(BallReturn) EndBattle(EndBattleReasons.WinTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) - End If - End If - End If - End Sub + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) + End If + End If + End If + End Sub - Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OppUsedBatonPass = True Then - BattleScreen.FieldEffects.OppUsedBatonPass = False + Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OppUsedBatonPass = True Then + BattleScreen.FieldEffects.OppUsedBatonPass = False - BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) - BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) - BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) - BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) - BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) - BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) - BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) + BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) + BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) + BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) + BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) + BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) + BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) + BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) - If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then - BattleScreen.FieldEffects.OppBatonPassConfusion = False - BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then + BattleScreen.FieldEffects.OppBatonPassConfusion = False + BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) + Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) - If FirstTime = False Then - HasSwitchedInOpp = True - ChangeCameraAngle(1, False, BattleScreen) + If FirstTime = False Then + HasSwitchedInOpp = True BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) + Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + + ' Ball Closes + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = New Vector3(0, 0, 0) + + Dim SmokeTexture As String = "Textures\Battle\Cloud" + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 + + ' Pokemon disappears + BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) + BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + + ' Ball returns + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + + BattleScreen.BattleQuery.Add(BallReturn) + BattleScreen.SendInNewTrainerPokemon(index) - Me.ApplyOppBatonPass(BattleScreen) + Me.ApplyOppBatonPass(BattleScreen) - If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then - BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) - End If + If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then + BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) + End If - Dim oppShiny As String = "N" - If BattleScreen.OppPokemon.IsShiny = True Then - oppShiny = "S" - End If + Dim oppShiny As String = "N" + If BattleScreen.OppPokemon.IsShiny = True Then + oppShiny = "S" + End If - Dim oppModel As String = BattleScreen.GetModelName(False) + Dim oppModel As String = BattleScreen.GetModelName(False) - If oppModel = "" Then - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) - Else - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) - End If + If oppModel = "" Then + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) + Else + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) + End If - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(BattleScreen.OppPokemon.Number.ToString(), True)) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) + + ' Ball is thrown + Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + + ' Ball Opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokePosition = New Vector3(0, 0.35, 0) + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As String = "Textures\Battle\Cloud" + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 + + ' Pokemon appears + BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + + ' Pokémon falls down + BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + + BattleScreen.BattleQuery.Add(BallThrow) End If - With BattleScreen - Dim p As Pokemon = .OppPokemon - Dim op As Pokemon = .OwnPokemon + With BattleScreen + Dim p As Pokemon = .OppPokemon + Dim op As Pokemon = .OwnPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) - If spikeAffected = True Then - If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OwnSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OwnStickyWeb > 0 Then + If spikeAffected = True Then + If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OwnSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OwnStickyWeb > 0 Then - LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If - If spikeAffected = True Then - If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OwnToxicSpikes - Case 1 - InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OwnToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OwnToxicSpikes = 0 - End If - End If - End If + End If + End If + If spikeAffected = True Then + If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OwnToxicSpikes + Case 1 + InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OwnToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OwnToxicSpikes = 0 + End If + End If + End If - If rockAffected = True Then - If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim rocksDamage As Double = 1D + If rockAffected = True Then + If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, False) - TriggerItemEffect(BattleScreen, False) + TriggerAbilityEffect(BattleScreen, False) + TriggerItemEffect(BattleScreen, False) - If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) - End If + If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OppHealingWish = True Then - BattleScreen.FieldEffects.OppHealingWish = False + If BattleScreen.FieldEffects.OppHealingWish = True Then + BattleScreen.FieldEffects.OppHealingWish = False - If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub #End Region diff --git a/P3D/Pokemon/Attacks/Attack.vb b/P3D/Pokemon/Attacks/Attack.vb index 35b2af5b6..cf379b4c5 100644 --- a/P3D/Pokemon/Attacks/Attack.vb +++ b/P3D/Pokemon/Attacks/Attack.vb @@ -1844,7 +1844,7 @@ 'returnMove = New Moves.Fighting.MeteorAssault() 'Case 795 'returnMove = New Moves.Dragon.Eternabeam() - Case 796 + Case 796 returnMove = New Moves.Steel.SteelBeam() 'Case 797 'Blank @@ -2163,23 +2163,37 @@ #Region "Animation" - Public Sub UserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen) + Public Sub UserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) If Core.Player.ShowBattleAnimations = 1 Then - Me.InternalUserPokemonMoveAnimation(BattleScreen) + Dim CurrentPokemon As Pokemon = BattleScreen.OwnPokemon + Dim CurrentEntity As NPC = BattleScreen.OwnPokemonNPC + Dim CurrentModel As ModelEntity = BattleScreen.OwnPokemonModel + If own = False Then + CurrentEntity = BattleScreen.OppPokemonNPC + CurrentModel = BattleScreen.OppPokemonModel + End If + Me.InternalUserPokemonMoveAnimation(BattleScreen, own, CurrentPokemon, CurrentEntity, CurrentModel) End If End Sub - Public Overridable Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen) + Public Overridable Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) 'Override this method in the attack class to insert the move animation query objects into the queue. End Sub - Public Sub OpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen) + Public Sub OpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) If Core.Player.ShowBattleAnimations = 1 Then - Me.InternalOpponentPokemonMoveAnimation(BattleScreen) + Dim CurrentPokemon As Pokemon = BattleScreen.OppPokemon + Dim CurrentEntity As NPC = BattleScreen.OppPokemonNPC + Dim CurrentModel As ModelEntity = BattleScreen.OppPokemonModel + If own = False Then + CurrentEntity = BattleScreen.OwnPokemonNPC + CurrentModel = BattleScreen.OwnPokemonModel + End If + Me.InternalOpponentPokemonMoveAnimation(BattleScreen, own, CurrentPokemon, CurrentEntity, CurrentModel) End If End Sub - Public Overridable Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen) + Public Overridable Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) 'Override this method in the attack class to insert the move animation query objects into the queue. End Sub diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 48a698f0d..bb5fae6fe 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -50,7 +50,6 @@ Me.IsOneHitKOMove = False Me.IsWonderGuardAffected = True '#End - Me.AIField1 = AIField.Damage Me.AIField2 = AIField.CanBurn @@ -58,19 +57,54 @@ End Sub Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen) - Dim p As Pokemon = BattleScreen.OwnPokemon - Dim op As Pokemon = BattleScreen.OppPokemon - If own = False Then - p = BattleScreen.OppPokemon - op = BattleScreen.OwnPokemon - End If - Dim chance As Integer = GetEffectChance(0, own, BattleScreen) If Core.Random.Next(0, 100) < chance Then BattleScreen.Battle.InflictBurn(Not own, own, BattleScreen, "", "move:ember") End If End Sub + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Start", 0, 0) + For i = 0 To 12 + MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + i += 1 + Next + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + + MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0, 0.1, 0.5, 0) + For i = 0 To 12 + MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + i += 1 + Next + MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Hit", 2, 0) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index c42633558..5c35961e3 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -62,6 +62,15 @@ End If End Sub + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 2f542a2ab..467c5891d 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -55,6 +55,13 @@ Me.AIField2 = AIField.Nothing End Sub + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) + MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + End Class End Namespace \ No newline at end of file diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 36b8ca00f..6d8954700 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -52,6 +52,19 @@ '#End End Sub + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) + MoveAnimation.AnimationMovePokemonEntity(0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMovePokemonEntity(0, 0, 0, 0.3, False, False, 1, 0,,, 2) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Tackle", 0, 2) + MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Tackle", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 2) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 7e857aa53..36622416b 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -65,6 +65,36 @@ End If End Sub + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Start", 0, 0) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + + MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + + MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 2) + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + End Class End Namespace \ No newline at end of file From 09e5661729dee9a1682d442235c688a7f3ab8c02 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 2 Oct 2021 17:40:48 +0200 Subject: [PATCH 02/57] Fix Burned animation error --- P3D/Battle/BattleSystemV2/Battle.vb | 32 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 2b322aaa2..2b69ba9cc 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2705,13 +2705,13 @@ p.Status = Pokemon.StatusProblems.Burn ChangeCameraAngle(1, own, BattleScreen) 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message Case "" 'Print default message only @@ -5406,11 +5406,11 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") @@ -6197,11 +6197,11 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") From b95d4d1c694b1632463acf43f2feb92e3850eaa7 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sun, 3 Oct 2021 11:02:18 +0200 Subject: [PATCH 03/57] Hit Animation + Restructure of attack sound effects + Absorb animation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attack sound effects are now in the folder of the type of their attack Pokémon flicker briefly when hit --- P3D/Battle/BattleSystemV2/Battle.vb | 9 +++++++ .../Attacks/{ => Electric}/Thunderbolt.wav | Bin .../Battle/Attacks/{ => Fire}/Ember_Hit.wav | Bin .../Battle/Attacks/{ => Fire}/Ember_Start.wav | Bin .../Battle/Attacks/{ => Flying}/Fly_Hit.wav | Bin .../Battle/Attacks/{ => Flying}/Fly_Start.wav | Bin .../Sounds/Battle/Attacks/Grass/Absorb.wav | Bin 0 -> 472456 bytes .../Battle/Attacks/{ => Normal}/Pound.wav | Bin .../Battle/Attacks/{ => Normal}/Tackle.wav | Bin .../Attacks/{ => Poison}/PoisonSting_Hit.wav | Bin .../{ => Poison}/PoisonSting_Start.wav | Bin P3D/Content/Textures/Battle/Grass/Absorb.png | Bin 0 -> 258 bytes P3D/P3D.vbproj | 24 +++++++++++------- P3D/Pokemon/Attacks/Fire/Ember.vb | 4 +-- P3D/Pokemon/Attacks/Grass/Absorb.vb | 16 ++++++++++++ P3D/Pokemon/Attacks/Normal/Pound.vb | 2 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 2 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 4 +-- P3D/Screens/Pokemon/HatchEggScreen.vb | 2 +- P3D/World/World.vb | 2 +- 20 files changed, 48 insertions(+), 17 deletions(-) rename P3D/Content/Sounds/Battle/Attacks/{ => Electric}/Thunderbolt.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Fire}/Ember_Hit.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Fire}/Ember_Start.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Flying}/Fly_Hit.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Flying}/Fly_Start.wav (100%) create mode 100644 P3D/Content/Sounds/Battle/Attacks/Grass/Absorb.wav rename P3D/Content/Sounds/Battle/Attacks/{ => Normal}/Pound.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Normal}/Tackle.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Poison}/PoisonSting_Hit.wav (100%) rename P3D/Content/Sounds/Battle/Attacks/{ => Poison}/PoisonSting_Start.wav (100%) create mode 100644 P3D/Content/Textures/Battle/Grass/Absorb.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 2b69ba9cc..6247835f1 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -3978,8 +3978,10 @@ Public Sub ReduceHP(ByVal HPAmount As Integer, ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String, ByVal sound As String) Dim p As Pokemon = BattleScreen.OwnPokemon + Dim pNPC As Entity = BattleScreen.OwnPokemonNPC If own = False Then p = BattleScreen.OppPokemon + pNPC = BattleScreen.OppPokemonNPC End If If p.HP > 0 And p.Status <> Pokemon.StatusProblems.Fainted Then @@ -3996,6 +3998,13 @@ BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(sound, False, 0.0F)) End If + Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) + HitAnimation.AnimationFadePokemonEntity(1, False, 0, 0, 0) + HitAnimation.AnimationFadePokemonEntity(1, True, 1, 1, 0) + HitAnimation.AnimationFadePokemonEntity(1, False, 0, 2, 0) + HitAnimation.AnimationFadePokemonEntity(1, True, 1, 3, 0) + BattleScreen.BattleQuery.Add(HitAnimation) + If own = True Then BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, HPAmount, New Vector2(200, 256))) Else diff --git a/P3D/Content/Sounds/Battle/Attacks/Thunderbolt.wav b/P3D/Content/Sounds/Battle/Attacks/Electric/Thunderbolt.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Thunderbolt.wav rename to P3D/Content/Sounds/Battle/Attacks/Electric/Thunderbolt.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/Ember_Hit.wav b/P3D/Content/Sounds/Battle/Attacks/Fire/Ember_Hit.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Ember_Hit.wav rename to P3D/Content/Sounds/Battle/Attacks/Fire/Ember_Hit.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/Ember_Start.wav b/P3D/Content/Sounds/Battle/Attacks/Fire/Ember_Start.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Ember_Start.wav rename to P3D/Content/Sounds/Battle/Attacks/Fire/Ember_Start.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/Fly_Hit.wav b/P3D/Content/Sounds/Battle/Attacks/Flying/Fly_Hit.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Fly_Hit.wav rename to P3D/Content/Sounds/Battle/Attacks/Flying/Fly_Hit.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/Fly_Start.wav b/P3D/Content/Sounds/Battle/Attacks/Flying/Fly_Start.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Fly_Start.wav rename to P3D/Content/Sounds/Battle/Attacks/Flying/Fly_Start.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/Grass/Absorb.wav b/P3D/Content/Sounds/Battle/Attacks/Grass/Absorb.wav new file mode 100644 index 0000000000000000000000000000000000000000..84c0f3f606b904a185a7f9d161686cf26b517608 GIT binary patch literal 472456 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%0A;j?LJbN(gQX7b9)D~- z>d<{px=II|M{-2(H?sCtXF#X<9+@Bhl7ARsZy)r!VT^D1z&!am_I=&WURUvb<*X}> zd*1|jo!`Hz+~2BiEN=}6KUU6t(i7bi-RXlGV`7`4T6!NI@=@VGpdK7D{S{^IcRcMR zsgh6;<a$+t7*tbZFkKOzTkGu|(j|})WU#d-rTJn103>DwbhnO9Zy(*#(o%u;Z%^d^ zYXAOiH>gY?@x)hlL#ohITYThNSgCA3RAM;NuFxdcq1ZVbj~i0B`gti?3_#FPFj`ZC z8dPpitupx&^F&$HJGuMu;g(v`VmCDJeC{6)a9wO7WvV*6Iv{MOopd9Z9tGuLg-kfi z%gDz2@t5EvavLmAe>=>Alha)3+azpV=bn09UEylc^t+<6w`cJv4?)hkihL|oW)ph? zAQ<!t=075Rd*0T^Qw3B#L45i5@#V`dQ(dQ9N$%d{L6@my-vzFHra@!vZ3~t4A?K7` zu!M8A^i<_nFF(=CE?0U-Stvu}F@9;{EWbG(eA^0rE0v9Y1>irAFCthsCClP8#<uGH z<l3fOYN#nC;*o1{9LFH`$G_@bwFelCY)(hxIP|`gm)Gov#%9`xgd?m<u72_zaNgC? z1y|9y>-#uK{k~(u{->$a&Up?PDo}+i<|+ol$yJo8?An$`+{~TdM!7ciCnbA2A*$=_ z`sH}^3CYa7XHJ{C&Z+=tplW!icvcLBZ}!}Ag4W9!pXWy=J{YZ_hf0fOdGE!Q-==7& zx{{Y<qM$In&3e$VC$g)-4aa`jR1ZqCz#%`wz<8d?o_`HeOJk~%6W$4WXBbJV+`9Cn z^Czsk3{(wTl#-%pN6)+3HAv$K<4qlYVW8Bb<wZ{tTA0atw4p%>wL2E-U|DxaThg8! zi#o%x!ADh!-^3bQ)mb~xF$4kxrxe^Ny-Ejy<l#~YEcldBnpp}ZaS%_C?Eq;I=K7LX z9D<(MGx)OOJWM+qR<wQ^KRl9{hKQ1OGT>(UBzvN4+*MuAGaQR<hUQ^MjZd2PmQAmZ zay7&(ya0^&vp?r^X8S3o>l}%uYNR@v5$&lzk5vlld|guSv<|aRp?#j`_za{FLoe&R z)OgG&L|Mnmf&^xxLvEaO4o453Z0JSnWrR$h-C8VVP&l1FwW0^?f2uoIEHXkZQ{Ao^ zQjOsXfq_j^-KklLIbT5%t%u3kyeSdt15as+Hd2r|QPsm$@+)6fh(S$FhBapA!R{?g zp1M-ii~BWTpJ36ZU1OaVLJqFh<Nh|2vA&)xaYjJ*G4lslD>)Up+AZsE3BadxqslEq zKllGC>V5XvA3z;@8nM2~x}*Ptc|AN(^Go)xePX>;y&!P`fCUc);~o#+ak^sk;_cMj t9%An}<MA*L-0r34+wR*F(jHL#i(MwTxD}*0D6z-dW3eZG3;nb7zW^4+%kuyL literal 0 HcmV?d00001 diff --git a/P3D/Content/Sounds/Battle/Attacks/Pound.wav b/P3D/Content/Sounds/Battle/Attacks/Normal/Pound.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Pound.wav rename to P3D/Content/Sounds/Battle/Attacks/Normal/Pound.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/Tackle.wav b/P3D/Content/Sounds/Battle/Attacks/Normal/Tackle.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/Tackle.wav rename to P3D/Content/Sounds/Battle/Attacks/Normal/Tackle.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/PoisonSting_Hit.wav b/P3D/Content/Sounds/Battle/Attacks/Poison/PoisonSting_Hit.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/PoisonSting_Hit.wav rename to P3D/Content/Sounds/Battle/Attacks/Poison/PoisonSting_Hit.wav diff --git a/P3D/Content/Sounds/Battle/Attacks/PoisonSting_Start.wav b/P3D/Content/Sounds/Battle/Attacks/Poison/PoisonSting_Start.wav similarity index 100% rename from P3D/Content/Sounds/Battle/Attacks/PoisonSting_Start.wav rename to P3D/Content/Sounds/Battle/Attacks/Poison/PoisonSting_Start.wav diff --git a/P3D/Content/Textures/Battle/Grass/Absorb.png b/P3D/Content/Textures/Battle/Grass/Absorb.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4a6efbc484f930a32dd82c39506e5d3e8be1e7 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP*A$W zHKHUqKdq!Zu_%?nIW?!avREOwq%<WnUm+wvKj+}`hc!TDy`C<PArXg@|NQ@Nf7pTP zSRi|kRl*g<#e53K8STT3lCB<+`!|2$GQNgrnGejqX-qA*0vtCvca$ACKegw-p>EoN z5{}Nk1^bv6C_09+3#40C_DPf;2q<!3XJ&S0ES$z~&Az~@iLu*RZ9&n>xx9hi2l@VR uWrhj}KIMoKJKDU+NGg{fYT*J_1_q^_I}gqdn>h{WFa}RoKbLh*2~7aIOjlC? literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index f1927c233..7b6910788 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14665,31 +14665,34 @@ <Content Include="Content\Songs\wind.ogg"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Ember_Hit.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Electric\Thunderbolt.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Ember_Start.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Fire\Ember_Hit.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Fly_Hit.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Fire\Ember_Start.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Fly_Start.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Flying\Fly_Hit.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\PoisonSting_Hit.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Flying\Fly_Start.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\PoisonSting_Start.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Grass\Absorb.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Pound.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Normal\Pound.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Tackle.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Normal\Tackle.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Sounds\Battle\Attacks\Thunderbolt.wav"> + <Content Include="Content\Sounds\Battle\Attacks\Poison\PoisonSting_Hit.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Sounds\Battle\Attacks\Poison\PoisonSting_Start.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="Content\Sounds\Battle\Damage\Effective.wav"> @@ -15379,6 +15382,9 @@ <Content Include="Content\Textures\Battle\Fire\Smoke.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Grass\Absorb.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\Normal\Growl.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index bb5fae6fe..6719f780d 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -66,7 +66,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Start", 0, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 @@ -82,7 +82,7 @@ MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 Next - MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Hit", 2, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index 4c0c2f7b7..a63495b58 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -92,6 +92,22 @@ End If End Sub + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Dim maxAmount As Integer = 8 + Dim currentAmount As Integer = 0 + MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) + While currentAmount <= maxAmount + Dim yPos As Single = CSng(Random.NextDouble() * 0.5) + Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) + MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Grass\Absorb", 0.35, 0.35, 0.35, 1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount), 0.0, 0.1, 0.5) + Threading.Interlocked.Increment(currentAmount) + End While + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class + + End Namespace diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 467c5891d..25785556e 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -55,7 +55,7 @@ Me.AIField2 = AIField.Nothing End Sub - Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 6d8954700..c3a075d95 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -61,7 +61,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Tackle", 0, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Tackle", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 36622416b..9684f8379 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -68,7 +68,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Start", 0, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub @@ -77,7 +77,7 @@ MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) diff --git a/P3D/Screens/Pokemon/HatchEggScreen.vb b/P3D/Screens/Pokemon/HatchEggScreen.vb index e4f2c31f1..7e1aa39c7 100644 --- a/P3D/Screens/Pokemon/HatchEggScreen.vb +++ b/P3D/Screens/Pokemon/HatchEggScreen.vb @@ -72,7 +72,7 @@ If Stage = 6 Then SoundManager.PlaySound("egg_hatch") Else - SoundManager.PlaySound("Battle\Attacks\Pound") + SoundManager.PlaySound("Battle\Attacks\Normal\Pound") End If Egg = GetEggTexture() diff --git a/P3D/World/World.vb b/P3D/World/World.vb index a53cc8e06..39a864436 100644 --- a/P3D/World/World.vb +++ b/P3D/World/World.vb @@ -717,7 +717,7 @@ endsub: If Core.Random.Next(0, 250) = 0 Then Dim pitch As Single = -(Core.Random.Next(8, 11) / 10.0F) Debug.Print(pitch.ToString()) - SoundManager.PlaySound("Battle\Attacks\Thunderbolt", pitch, 0F, SoundManager.Volume, False) + SoundManager.PlaySound("Battle\Attacks\Electric\Thunderbolt", pitch, 0F, SoundManager.Volume, False) End If End If From 7ff7f96a47da163a7a80f946a173ad59cad5be92 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 14 Oct 2021 01:21:10 +0200 Subject: [PATCH 04/57] Battle Animation System Rework about halfway done Updated to work with the new animation system: - Catch animation - Burn animation - Attack: Tackle --- .../{BABillMove.vb => BAEntityMove.vb} | 6 +- .../{BABillOpacity.vb => BAEntityOpacity.vb} | 2 +- P3D/Battle/BattleAnimations/BAEntityRotate.vb | 131 +++++++++++ .../{BABillSize.vb => BAEntityScale.vb} | 2 +- .../BattleAnimations/BAEntityTextureChange.vb | 21 ++ P3D/Battle/BattleAnimations/BAMove.vb | 2 +- P3D/Battle/BattleAnimations/BASize.vb | 106 --------- P3D/Battle/BattleSystemV2/Battle.vb | 122 ++++++----- .../QueryObjects/AnimationQueryObject.vb | 198 +++++++++-------- .../{Other/Star.png => BallCatchStar.png} | Bin P3D/P3D.vbproj | 11 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 4 +- P3D/Screens/Battle/BattleCatchScreen.vb | 207 +++++++++--------- 13 files changed, 448 insertions(+), 364 deletions(-) rename P3D/Battle/BattleAnimations/{BABillMove.vb => BAEntityMove.vb} (98%) rename P3D/Battle/BattleAnimations/{BABillOpacity.vb => BAEntityOpacity.vb} (97%) create mode 100644 P3D/Battle/BattleAnimations/BAEntityRotate.vb rename P3D/Battle/BattleAnimations/{BABillSize.vb => BAEntityScale.vb} (99%) create mode 100644 P3D/Battle/BattleAnimations/BAEntityTextureChange.vb delete mode 100644 P3D/Battle/BattleAnimations/BASize.vb rename P3D/Content/Textures/Battle/{Other/Star.png => BallCatchStar.png} (100%) diff --git a/P3D/Battle/BattleAnimations/BABillMove.vb b/P3D/Battle/BattleAnimations/BAEntityMove.vb similarity index 98% rename from P3D/Battle/BattleAnimations/BABillMove.vb rename to P3D/Battle/BattleAnimations/BAEntityMove.vb index 120d3b87f..8e7685f6f 100644 --- a/P3D/Battle/BattleAnimations/BABillMove.vb +++ b/P3D/Battle/BattleAnimations/BAEntityMove.vb @@ -1,4 +1,4 @@ -Public Class BABillMove +Public Class BAEntityMove Inherits BattleAnimation3D @@ -20,7 +20,7 @@ Linear End Enum - Public Sub New(ByRef entity As Entity, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) + Public Sub New(ByRef Entity As Entity, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) Me.Destination = Destination @@ -33,7 +33,7 @@ Me.SpinSpeedZ = SpinZSpeed Me.Visible = False - Me.TargetEntity = entity + Me.TargetEntity = Entity Select Case MovementCurve Case Curves.EaseIn diff --git a/P3D/Battle/BattleAnimations/BABillOpacity.vb b/P3D/Battle/BattleAnimations/BAEntityOpacity.vb similarity index 97% rename from P3D/Battle/BattleAnimations/BABillOpacity.vb rename to P3D/Battle/BattleAnimations/BAEntityOpacity.vb index e2bc7e3d8..959d733b5 100644 --- a/P3D/Battle/BattleAnimations/BABillOpacity.vb +++ b/P3D/Battle/BattleAnimations/BAEntityOpacity.vb @@ -1,4 +1,4 @@ -Public Class BABillOpacity +Public Class BAEntityOpacity Inherits BattleAnimation3D diff --git a/P3D/Battle/BattleAnimations/BAEntityRotate.vb b/P3D/Battle/BattleAnimations/BAEntityRotate.vb new file mode 100644 index 000000000..cbcda0f7b --- /dev/null +++ b/P3D/Battle/BattleAnimations/BAEntityRotate.vb @@ -0,0 +1,131 @@ +Public Class BAEntityRotate + + Inherits BattleAnimation3D + + Dim TargetEntity As Entity + Dim RotationSpeedVector As Vector3 + Dim EndRotation As Vector3 + Dim DoReturn As Boolean = False + Dim ReturnVector As Vector3 + Dim hasReturned As Boolean = False + Dim DoRotation As Vector3 = New Vector3(1.0F) + + Public Sub New(ByVal Entity As Entity, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single) + MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + + Me.RotationSpeedVector = RotationSpeedVector + Me.EndRotation = EndRotation + Me.ReturnVector = Me.Rotation + Me.TargetEntity = Entity + End Sub + + Public Sub New(ByVal Entity As Entity, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean) + Me.New(Entity, RotationSpeedVector, EndRotation, startDelay, endDelay) + + If DoXRotation = False Then + DoRotation.X = 0.0F + End If + If DoYRotation = False Then + DoRotation.Y = 0.0F + End If + If DoZRotation = False Then + DoRotation.Z = 0.0F + End If + End Sub + + Public Sub New(ByVal Entity As Entity, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) + Me.New(Entity, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation) + + Me.DoReturn = DoReturn + End Sub + + Public Overrides Sub DoActionActive() + If VectorReached() = False Then + + If DoRotation.X = 1.0F Then + If TargetEntity.Rotation.X > Me.EndRotation.X Then + TargetEntity.Rotation.X += Me.RotationSpeedVector.X + + If TargetEntity.Rotation.X <= Me.EndRotation.X Then + TargetEntity.Rotation.X = Me.EndRotation.X + End If + ElseIf TargetEntity.Rotation.X < Me.EndRotation.X Then + TargetEntity.Rotation.X += Me.RotationSpeedVector.X + + If TargetEntity.Rotation.X >= Me.EndRotation.X Then + TargetEntity.Rotation.X = Me.EndRotation.X + End If + End If + End If + + If DoRotation.Y = 1.0F Then + If TargetEntity.Rotation.Y > Me.EndRotation.Y Then + TargetEntity.Rotation.Y += Me.RotationSpeedVector.Y + + If TargetEntity.Rotation.Y <= Me.EndRotation.Y Then + TargetEntity.Rotation.Y = Me.EndRotation.Y + End If + ElseIf TargetEntity.Rotation.Y < Me.EndRotation.Y Then + TargetEntity.Rotation.Y += Me.RotationSpeedVector.Y + + If TargetEntity.Rotation.Y >= Me.EndRotation.Y Then + TargetEntity.Rotation.Y = Me.EndRotation.Y + End If + End If + End If + + If DoRotation.Z = 1.0F Then + If TargetEntity.Rotation.Z > Me.EndRotation.Z Then + TargetEntity.Rotation.Z += Me.RotationSpeedVector.Z + + If TargetEntity.Rotation.Z <= Me.EndRotation.Z Then + TargetEntity.Rotation.Z = Me.EndRotation.Z + End If + ElseIf TargetEntity.Rotation.Z < Me.EndRotation.Z Then + TargetEntity.Rotation.Z += Me.RotationSpeedVector.Z + + If TargetEntity.Rotation.Z >= Me.EndRotation.Z Then + TargetEntity.Rotation.Z = Me.EndRotation.Z + End If + End If + End If + + If VectorReached() = True Then + RotationReady() + End If + Else + RotationReady() + End If + End Sub + + Private Sub RotationReady() + If Me.DoReturn = True And Me.hasReturned = False Then + Me.hasReturned = True + Me.EndRotation = Me.ReturnVector + Me.RotationSpeedVector = New Vector3(Me.RotationSpeedVector.X * -1, Me.RotationSpeedVector.Y * -1, Me.RotationSpeedVector.Z * -1) + Else + Me.Ready = True + End If + End Sub + + Private Function VectorReached() As Boolean + If DoRotation.X = 1.0F Then + If EndRotation.X <> TargetEntity.Rotation.X Then + Return False + End If + End If + If DoRotation.Y = 1.0F Then + If EndRotation.Y <> TargetEntity.Rotation.Y Then + Return False + End If + End If + If DoRotation.Z = 1.0F Then + If EndRotation.Z <> TargetEntity.Rotation.Z Then + Return False + End If + End If + + Return True + End Function + +End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BABillSize.vb b/P3D/Battle/BattleAnimations/BAEntityScale.vb similarity index 99% rename from P3D/Battle/BattleAnimations/BABillSize.vb rename to P3D/Battle/BattleAnimations/BAEntityScale.vb index ce7ff373a..24d1245ea 100644 --- a/P3D/Battle/BattleAnimations/BABillSize.vb +++ b/P3D/Battle/BattleAnimations/BAEntityScale.vb @@ -1,4 +1,4 @@ -Public Class BABillSize +Public Class BAEntityScale Inherits BattleAnimation3D diff --git a/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb b/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb new file mode 100644 index 000000000..4b266b706 --- /dev/null +++ b/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb @@ -0,0 +1,21 @@ +Public Class BAEntityTextureChange + + Inherits BattleAnimation3D + + Public Texture As Texture2D + Public TargetEntity As Entity + + Public Sub New(ByVal Entity As Entity, Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) + MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + + Me.TargetEntity = Entity + Me.Texture = Texture + Me.AnimationType = AnimationTypes.Texture + End Sub + + Public Overrides Sub DoActionActive() + TargetEntity.Textures = {Me.Texture} + Me.Ready = True + End Sub + +End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAMove.vb b/P3D/Battle/BattleAnimations/BAMove.vb index c1220411d..e59c0f0e5 100644 --- a/P3D/Battle/BattleAnimations/BAMove.vb +++ b/P3D/Battle/BattleAnimations/BAMove.vb @@ -10,7 +10,7 @@ Public InterpolationSpeed As Single Public SpinSpeedX As Single = 0.1F Public SpinSpeedZ As Single = 0.1F - Public MovementCurve As Integer = 2 + Public MovementCurve As Integer = 3 Private EasedIn As Boolean = False Private EasedOut As Boolean = False diff --git a/P3D/Battle/BattleAnimations/BASize.vb b/P3D/Battle/BattleAnimations/BASize.vb deleted file mode 100644 index b8926f1da..000000000 --- a/P3D/Battle/BattleAnimations/BASize.vb +++ /dev/null @@ -1,106 +0,0 @@ -Public Class BASize - - Inherits BattleAnimation3D - - Public Grow As Boolean = False - Public EndSize As Vector3 - Public SizeSpeed As Single = 0.01F - Public Anchors As String - - Public Change As New Vector3(1) - - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Grow As Boolean, ByVal EndSize As Vector3, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal Anchors As String) - MyBase.New(Position, Texture, Scale, startDelay, endDelay) - - Me.Anchors = Anchors - Me.Grow = Grow - Me.EndSize = EndSize - Me.SizeSpeed = SizeSpeed - - Me.AnimationType = AnimationTypes.Size - End Sub - - Public Overrides Sub DoActionActive() - Dim saveScale As Vector3 = Me.Scale - - Dim changeX As Single = SizeSpeed * Change.X - Dim changeY As Single = SizeSpeed * Change.Y - Dim changeZ As Single = SizeSpeed * Change.Z - - If Grow = True Then - If Me.Scale.X < Me.EndSize.X Then - Me.Scale.X += changeX - - If Me.Scale.X >= Me.EndSize.X Then - Me.Scale.X = Me.EndSize.X - End If - End If - If Me.Scale.Y < Me.EndSize.Y Then - Me.Scale.Y += changeY - - If Me.Scale.Y >= Me.EndSize.Y Then - Me.Scale.Y = Me.EndSize.Y - End If - End If - If Me.Scale.Z < Me.EndSize.Z Then - Me.Scale.Z += changeZ - - If Me.Scale.Z >= Me.EndSize.Z Then - Me.Scale.Z = Me.EndSize.Z - End If - End If - Else - If Me.Scale.X > Me.EndSize.X Then - Me.Scale.X -= changeX - - If Me.Scale.X <= Me.EndSize.X Then - Me.Scale.X = Me.EndSize.X - End If - End If - If Me.Scale.Y > Me.EndSize.Y Then - Me.Scale.Y -= changeY - - If Me.Scale.Y <= Me.EndSize.Y Then - Me.Scale.Y = Me.EndSize.Y - End If - End If - If Me.Scale.Z > Me.EndSize.Z Then - Me.Scale.Z -= changeZ - - If Me.Scale.Z <= Me.EndSize.Z Then - Me.Scale.Z = Me.EndSize.Z - End If - End If - End If - - 'Bottom - If Anchors.Contains("1") = True Then - Dim diffY As Single = saveScale.Y - Me.Scale.Y - Me.Position.Y -= diffY / 2 - End If - 'Top - If Anchors.Contains("2") = True Then - Dim diffY As Single = saveScale.Y - Me.Scale.Y - Me.Position.Y += diffY / 2 - End If - 'Left - If Anchors.Contains("3") = True Then - Dim diffX As Single = saveScale.X - Me.Scale.X - Me.Position.X -= diffX / 2 - End If - 'Right - If Anchors.Contains("4") = True Then - Dim diffX As Single = saveScale.X - Me.Scale.X - Me.Position.X += diffX / 2 - End If - - If Me.EndSize = Me.Scale Then - Me.Ready = True - End If - End Sub - - Public Sub SetChange(ByVal changeX As Single, ByVal changeY As Single, ByVal changeZ As Single) - Me.Change = New Vector3(changeX, changeY, changeZ) - End Sub - -End Class \ No newline at end of file diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 6247835f1..823bea6f1 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2705,14 +2705,20 @@ p.Status = Pokemon.StatusProblems.Burn ChangeCameraAngle(1, own, BattleScreen) 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) BattleScreen.BattleQuery.Add(BurnAnimation) + + If FlameEntity.Opacity = 0.0F Then + BurnAnimation.RemoveEntity(FlameEntity) + End If + Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) @@ -2723,30 +2729,30 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) End Select If p.Ability.Name.ToLower() = "synchronize" AndAlso from <> own Then - Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") - End If + Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") + End If - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") + End If End If End If - End If - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") + End If End If End If - End If - Return True + Return True + End If End If - End If End If End If End If @@ -3411,7 +3417,7 @@ End If '***STAT INCREASE ANIMATION*** - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount @@ -3427,11 +3433,11 @@ Destination.X = xPos Destination.Z = zPos Dim startDelay As Double = 5.0 * Random.NextDouble() - MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) - BattleScreen.BattleQuery.Add(MoveAnimation) + BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -3998,11 +4004,11 @@ BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(sound, False, 0.0F)) End If - Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) - HitAnimation.AnimationFadePokemonEntity(1, False, 0, 0, 0) - HitAnimation.AnimationFadePokemonEntity(1, True, 1, 1, 0) - HitAnimation.AnimationFadePokemonEntity(1, False, 0, 2, 0) - HitAnimation.AnimationFadePokemonEntity(1, True, 1, 3, 0) + Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 0, 0) + HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 1, 0) + HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 2, 0) + HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 3, 0) BattleScreen.BattleQuery.Add(HitAnimation) If own = True Then @@ -5415,12 +5421,19 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) BattleScreen.BattleQuery.Add(BurnAnimation) + + If FlameEntity.Opacity = 0.0F Then + BurnAnimation.RemoveEntity(FlameEntity) + End If + 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6206,12 +6219,19 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) BattleScreen.BattleQuery.Add(BurnAnimation) + + If FlameEntity.Opacity = 0.0F Then + BurnAnimation.RemoveEntity(FlameEntity) + End If + 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6796,8 +6816,8 @@ Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) - BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) + BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -6859,11 +6879,11 @@ Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) + BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If @@ -7112,7 +7132,7 @@ ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMovePokemonEntity(0, -1, 0, 0.1, False, False, 2, 0,,, 4) + Faint.AnimationMoveEntity(Nothing, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) @@ -7157,8 +7177,8 @@ Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) - BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) + BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -7218,8 +7238,8 @@ Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) - BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) + BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -7273,11 +7293,11 @@ Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) + BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index bf5d71de7..75e95027d 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -7,6 +7,7 @@ Public AnimationEnded As Boolean = False Public BAFlipped As Boolean Public AnimationSequence As List(Of BattleAnimation3D) + Public SpawnedEntities As List(Of Entity) Public CurrentEntity As Entity Public CurrentModel As ModelEntity @@ -16,7 +17,7 @@ End Get End Property - Public Sub New(ByVal entity As NPC, ByVal BAFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing) + Public Sub New(ByVal entity As Entity, ByVal BAFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing) MyBase.New(QueryTypes.MoveAnimation) Me.AnimationSequence = New List(Of BattleAnimation3D) Me.BAFlipped = BAFlipped @@ -54,20 +55,18 @@ If AnimationSequence.Count <= 0 Then AnimationSequenceEnd() End If + For Each Animation As BattleAnimation3D In AnimationSequence Animation.UpdateEntity() Next + For Each Entity As Entity In SpawnedEntities + Entity.UpdateEntity() + Next End If End Sub Public Sub AnimationSequenceBegin() - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationSequenceBegin OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationSequenceBegin INSIDE ANIMATION SEQUENCE, DID YOU MEAN AnimationSequenceEnd?") - Else - AnimationStarted = True - End If + AnimationStarted = True End Sub Public Sub AnimationSequenceEnd() @@ -80,6 +79,104 @@ End If End Sub + Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single) As Entity + Dim SpawnedEntity As Entity = New Entity(Position.X, Position.Y, Position.Z, "BattleAnimation", {Texture}, {0, 0}, False, 0, Scale, BaseModel.BillModel, 0, "", New Vector3(1.0F)) + + SpawnedEntity.Opacity = Opacity + If SpawnedEntity.Opacity > 0 Then + SpawnedEntity.Visible = True + Else + SpawnedEntity.Visible = False + End If + + SpawnedEntities.Add(SpawnedEntity) + Return SpawnedEntity + End Function + Public Sub RemoveEntity(Entity As Entity) + SpawnedEntities.Remove(Entity) + End Sub + Public Sub AnimationChangeTexture(ByVal Entity As Entity, ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) + Dim TextureChangeEntity As Entity + + If Entity Is Nothing Then + TextureChangeEntity = CurrentEntity + Else + TextureChangeEntity = Entity + End If + + Dim baEntityTextureChange As BAEntityTextureChange = New BAEntityTextureChange(TextureChangeEntity, Texture, startDelay, endDelay) + AnimationSequence.Add(baEntityTextureChange) + End Sub + + Public Sub AnimationMoveEntity(ByVal Entity As Entity, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) + Dim MoveEntity As Entity + Dim Destination As Vector3 + + If Entity Is Nothing Then + MoveEntity = CurrentEntity + If BAFlipped Then + DestinationX -= DestinationX * 2.0F + DestinationZ -= DestinationZ * 2.0F + Destination = New Vector3(CurrentEntity.Position.X + DestinationX, CurrentEntity.Position.Y + DestinationY, CurrentEntity.Position.Z + DestinationZ) + End If + Else + MoveEntity = Entity + Destination = New Vector3(DestinationX, DestinationY, DestinationZ) + End If + + Dim baEntityMove As BAEntityMove = New BAEntityMove(MoveEntity, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) + AnimationSequence.Add(baEntityMove) + + If Me.CurrentModel IsNot Nothing Then + Dim baModelMove As BAEntityMove = New BAEntityMove(CType(CurrentModel, Entity), Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) + AnimationSequence.Add(baModelMove) + End If + End Sub + + Public Sub AnimationFadeEntity(ByVal Entity As Entity, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) + Dim FadeEntity As Entity + If Entity Is Nothing Then + FadeEntity = CurrentEntity + Else + FadeEntity = Entity + End If + If startState = -1.0F Then startState = FadeEntity.Opacity + Dim baEntityOpacity As BAEntityOpacity = New BAEntityOpacity(FadeEntity, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) + AnimationSequence.Add(baEntityOpacity) + + If Me.CurrentModel IsNot Nothing Then + Dim baModelOpacity As BAEntityOpacity = New BAEntityOpacity(CType(CurrentModel, Entity), TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) + AnimationSequence.Add(baModelOpacity) + End If + End Sub + Public Sub AnimationRotateEntity(Entity As Entity, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) + Dim RotateEntity As Entity + If Entity Is Nothing Then + RotateEntity = CurrentEntity + Else + RotateEntity = Entity + End If + + Dim RotationSpeedVector As Vector3 = New Vector3(RotationSpeedX, RotationSpeedY, RotationSpeedZ) + Dim EndRotation As Vector3 = New Vector3(EndRotationX, EndRotationY, EndRotationZ) + Dim baEntityRotate As BAEntityRotate = New BAEntityRotate(RotateEntity, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation, DoReturn) + AnimationSequence.Add(baEntityRotate) + End Sub + Public Sub AnimationScaleEntity(ByVal Entity As Entity, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") + Dim ScaleEntity As Entity + If Entity Is Nothing Then + ScaleEntity = CurrentEntity + Else + ScaleEntity = Entity + End If + + Dim Position As Vector3 = ScaleEntity.Position + Dim Scale As Vector3 = ScaleEntity.Scale + Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ) + Dim baBillSize As BAEntityScale = New BAEntityScale(ScaleEntity, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) + AnimationSequence.Add(baBillSize) + End Sub + Public Sub AnimationSpawnFadingEntity(ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal Texture As String, ByVal ScaleX As Single, ByVal ScaleY As Single, ByVal ScaleZ As Single, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 1.0F) If CurrentEntity Is Nothing Then Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") @@ -142,44 +239,6 @@ AnimationSequence.Add(baMove) End If End Sub - Public Sub AnimationMovePokemonEntity(ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation BEFORE CALLING AnimationSequenceBegin") - Else - If BAFlipped Then - DestinationX -= DestinationX * 2.0F - DestinationZ -= DestinationZ * 2.0F - End If - - Dim Destination As Vector3 = New Vector3(CurrentEntity.Position.X + DestinationX, CurrentEntity.Position.Y + DestinationY, CurrentEntity.Position.Z + DestinationZ) - - Dim baBillMove As BABillMove = New BABillMove(CurrentEntity, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) - AnimationSequence.Add(baBillMove) - - If Me.CurrentModel IsNot Nothing Then - Dim baModelMove As BABillMove = New BABillMove(CType(CurrentModel, Entity), Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) - AnimationSequence.Add(baModelMove) - End If - End If - End Sub - Public Sub AnimationFadePokemonEntity(ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation BEFORE CALLING AnimationSequenceBegin") - Else - If startState = -1.0F Then startState = CurrentEntity.Opacity - Dim baBillOpacity As BABillOpacity = New BABillOpacity(CurrentEntity, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) - AnimationSequence.Add(baBillOpacity) - - If Me.CurrentModel IsNot Nothing Then - Dim baModelOpacity As BABillOpacity = New BABillOpacity(CType(CurrentModel, Entity), TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) - AnimationSequence.Add(baModelOpacity) - End If - End If - End Sub Public Sub AnimationPlaySound(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) If CurrentEntity Is Nothing Then Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationPlaySound OUTSIDE OF ATTACK ANIMATION DELEGATE") @@ -191,52 +250,5 @@ End If End Sub - Public Sub AnimationSpawnScalingEntity(ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal Texture As String, ByVal ScaleX As Single, ByVal ScaleY As Single, ByVal ScaleZ As Single, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnSizeAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnSizeAnimation BEFORE CALLING AnimationSequenceBegin") - Else - Dim stringArray = Texture.Split(","c) - Dim texture2D As Texture2D = Nothing - - If stringArray.Length = 1 Then - texture2D = TextureManager.GetTexture(Texture) - ElseIf stringArray.Length = 5 Then - Dim r As Rectangle = New Rectangle(CInt(stringArray(1)), CInt(stringArray(2)), CInt(stringArray(3)), CInt(stringArray(4))) - texture2D = TextureManager.GetTexture(stringArray(0), r, "") - End If - - If BAFlipped Then - PositionX -= PositionX * 2.0F - PositionZ -= PositionZ * 2.0F - End If - Dim Position As Vector3 = New Vector3(CurrentEntity.Position.X + PositionX, CurrentEntity.Position.Y + PositionY, CurrentEntity.Position.Z + PositionZ) - Dim Scale As Vector3 = New Vector3(ScaleX, ScaleY, ScaleZ) - Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ) - Dim baSize As BASize = New BASize(Position, texture2D, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) - AnimationSequence.Add(baSize) - End If - End Sub - Public Sub AnimationScalePokemonEntity(ByVal entity As Entity, ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal Texture As String, ByVal ScaleX As Single, ByVal ScaleY As Single, ByVal ScaleZ As Single, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnSizeAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnSizeAnimation BEFORE CALLING AnimationSequenceBegin") - Else - Dim stringArray = Texture.Split(","c) - - - If BAFlipped Then - PositionX -= PositionX * 2.0F - PositionZ -= PositionZ * 2.0F - End If - Dim Position As Vector3 = New Vector3(CurrentEntity.Position.X + PositionX, CurrentEntity.Position.Y + PositionY, CurrentEntity.Position.Z + PositionZ) - Dim Scale As Vector3 = New Vector3(ScaleX, ScaleY, ScaleZ) - Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ) - Dim baBillSize As BABillSize = New BABillSize(entity, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) - AnimationSequence.Add(baBillSize) - End If - End Sub End Class End Namespace \ No newline at end of file diff --git a/P3D/Content/Textures/Battle/Other/Star.png b/P3D/Content/Textures/Battle/BallCatchStar.png similarity index 100% rename from P3D/Content/Textures/Battle/Other/Star.png rename to P3D/Content/Textures/Battle/BallCatchStar.png diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 7b6910788..ec16b862f 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -15394,7 +15394,7 @@ <Content Include="Content\Textures\Battle\Normal\Tackle.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Textures\Battle\Other\Star.png"> + <Content Include="Content\Textures\Battle\BallCatchStar.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="Content\Textures\Battle\Poison\Bubble.png"> @@ -27545,9 +27545,11 @@ <Content Include="credits.txt"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Compile Include="Battle\BattleAnimations\BABillMove.vb" /> - <Compile Include="Battle\BattleAnimations\BABillOpacity.vb" /> - <Compile Include="Battle\BattleAnimations\BABillSize.vb" /> + <Compile Include="Battle\BattleAnimations\BAEntityRotate.vb" /> + <Compile Include="Battle\BattleAnimations\BAEntityMove.vb" /> + <Compile Include="Battle\BattleAnimations\BAEntityOpacity.vb" /> + <Compile Include="Battle\BattleAnimations\BAEntityTextureChange.vb" /> + <Compile Include="Battle\BattleAnimations\BAEntityScale.vb" /> <Compile Include="Battle\BattleAnimations\BASound.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\AnimationQueryObject.vb" /> <Compile Include="Dialogues\ImageView.vb" /> @@ -29229,7 +29231,6 @@ <Compile Include="Battle\BattleAnimations\BAMove.vb" /> <Compile Include="Battle\BattleAnimations\BAOpacity.vb" /> <Compile Include="Battle\BattleAnimations\BARotation.vb" /> - <Compile Include="Battle\BattleAnimations\BASize.vb" /> <Compile Include="Battle\BattleAnimations\BattleAnimation3D.vb" /> <Compile Include="Battle\BattleStats.vb" /> <Compile Include="Battle\BattleSystemV2\Battle.vb" /> diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index c3a075d95..4d53f749d 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,8 +54,8 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.AnimationMovePokemonEntity(0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.AnimationMovePokemonEntity(0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.AnimationMoveEntity(Nothing, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMoveEntity(Nothing, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Screens/Battle/BattleCatchScreen.vb b/P3D/Screens/Battle/BattleCatchScreen.vb index 3720b2ede..787d1e9b0 100644 --- a/P3D/Screens/Battle/BattleCatchScreen.vb +++ b/P3D/Screens/Battle/BattleCatchScreen.vb @@ -3,10 +3,13 @@ Inherits Screen Dim Ball As Item - Dim Animations As New List(Of BattleAnimation3D) + + Dim Animations As BattleSystem.AnimationQueryObject = New BattleSystem.AnimationQueryObject(Nothing, False, Nothing) + Dim BallStartPosition As Vector3 = New Vector3(Camera.Position.X - 1.0F, Camera.Position.Y, Camera.Position.Z - 0.5F) + BattleScreen.BattleMapOffset + Dim BallEntity As Entity = Animations.SpawnEntity(BallStartPosition, Ball.Texture, New Vector3(0.3F), 1.0F) Dim AnimationStarted As Boolean = False - Dim catched As Boolean = False + Dim caught As Boolean = False Dim InBall As Boolean = False Dim AnimationIndex As Integer = 0 Dim renamed As Boolean = False @@ -49,9 +52,6 @@ Level.Draw() Dim RenderObjects As New List(Of Entity) - For Each a As BattleAnimation3D In Me.Animations - RenderObjects.Add(a) - Next If InBall = False Then RenderObjects.Add(BattleScreen.OppPokemonNPC) @@ -65,29 +65,15 @@ [Object].Render() Next + Animations.Draw(CType(Me.PreScreen, BattleSystem.BattleScreen)) + World.DrawWeather(Screen.Level.World.CurrentMapWeather) TextBox.Draw() End Sub Private Sub UpdateAnimations() - Animations = (From a In Animations Order By a.CameraDistance Descending).ToList() - - For i = 0 To Animations.Count - 1 - If i <= Animations.Count - 1 Then - Dim a As BattleAnimation3D = Animations(i) - If a.CanRemove = True Then - i -= 1 - Animations.Remove(a) - Else - a.Update() - End If - End If - Next - - For Each Animation As BattleAnimation3D In Animations - Animation.UpdateEntity() - Next + Animations.Update(CType(Me.PreScreen, BattleSystem.BattleScreen)) End Sub Private Sub SetCamera() @@ -129,75 +115,72 @@ If AnimationStarted = False Then SetupAnimation() Else - If Me.Animations.Count = 0 Then - Select Case Me.AnimationIndex - Case 0 + Select Case Me.AnimationIndex + Case 0 + SoundManager.PlaySound("Battle\Pokeball\open") + InBall = True + AnimationIndex = 1 + AnimationStarted = False + SetupAnimation() + Case 1 + AnimationIndex = 2 + AnimationStarted = False + SetupAnimation() + Case 2, 3, 4, 5 + If StayInBall() = True Then + SoundManager.PlaySound("Battle\Pokeball\shake") + AnimationIndex += 1 + Else SoundManager.PlaySound("Battle\Pokeball\open") - InBall = True - AnimationIndex = 1 - AnimationStarted = False - SetupAnimation() - Case 1 - AnimationIndex = 2 - AnimationStarted = False - SetupAnimation() - Case 2, 3, 4, 5 - If StayInBall() = True Then - SoundManager.PlaySound("Battle\Pokeball\shake") - AnimationIndex += 1 - Else - SoundManager.PlaySound("Battle\Pokeball\break") - AnimationIndex = 21 - InBall = False - End If - AnimationStarted = False - SetupAnimation() - Case 6 - AnimationIndex = 7 - AnimationStarted = False - SetupAnimation() - SoundManager.PlaySound("Battle\Pokeball\catch", False) - Case 7 - AnimationIndex = 8 - AnimationStarted = False - SetupAnimation() - CatchPokemon() - BattleSystem.Battle.Caught = True - Case 8 - AnimationIndex = 9 - If showPokedexEntry = True Then - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New PokedexViewScreen(Core.CurrentScreen, p, True), Color.White, False)) - End If - Case 9 - AnimationIndex = 10 - Core.SetScreen(New NameObjectScreen(Core.CurrentScreen, p)) - Case 10 ' After Catch - If p.CatchBall.ID = 186 Then - p.FullRestore() ' Heal Ball - End If + AnimationIndex = 21 + InBall = False + End If + AnimationStarted = False + SetupAnimation() + Case 6 + AnimationIndex = 7 + AnimationStarted = False + SetupAnimation() + Case 7 + AnimationIndex = 8 + AnimationStarted = False + SetupAnimation() + CatchPokemon() + BattleSystem.Battle.Caught = True + Case 8 + AnimationIndex = 9 + If showPokedexEntry = True Then + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New PokedexViewScreen(Core.CurrentScreen, p, True), Color.White, False)) + End If + Case 9 + AnimationIndex = 10 + Core.SetScreen(New NameObjectScreen(Core.CurrentScreen, p)) + Case 10 ' After Catch + If p.CatchBall.ID = 186 Then + p.FullRestore() ' Heal Ball + End If - PlayerStatistics.Track("Caught Pokemon", 1) - StorePokemon() - AnimationIndex = 11 - Case 11 - Core.SetScreen(Me.PreScreen) - BattleSystem.Battle.Won = True - CType(Core.CurrentScreen, BattleSystem.BattleScreen).EndBattle(False) - Case 20 ' Failed - If Core.Player.Pokemons.Count < 6 Then - Dim p As Pokemon = BattleScreen.OppPokemon - p.SetCatchInfos(Me.Ball, "Illegally caught!") + PlayerStatistics.Track("Caught Pokemon", 1) + StorePokemon() + AnimationIndex = 11 + Case 11 + Core.SetScreen(Me.PreScreen) + BattleSystem.Battle.Won = True + CType(Core.CurrentScreen, BattleSystem.BattleScreen).EndBattle(False) + Case 20 ' Failed + If Core.Player.Pokemons.Count < 6 Then + Dim p As Pokemon = BattleScreen.OppPokemon + p.SetCatchInfos(Me.Ball, "Illegally caught!") - Core.Player.Pokemons.Add(p) - End If - ResetVisibility() - Core.SetScreen(Me.PreScreen) - Case 21 ' After Break - ResetVisibility() - Core.SetScreen(Me.PreScreen) - CType(Core.CurrentScreen, BattleSystem.BattleScreen).Battle.InitializeRound(CType(Core.CurrentScreen, BattleSystem.BattleScreen), New BattleSystem.Battle.RoundConst() With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Text, .Argument = "It broke free!"}) - End Select - End If + Core.Player.Pokemons.Add(p) + End If + ResetVisibility() + Core.SetScreen(Me.PreScreen) + Case 21 ' After Break + ResetVisibility() + Core.SetScreen(Me.PreScreen) + CType(Core.CurrentScreen, BattleSystem.BattleScreen).Battle.InitializeRound(CType(Core.CurrentScreen, BattleSystem.BattleScreen), New BattleSystem.Battle.RoundConst() With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Text, .Argument = "It broke free!"}) + End Select End If End If End If @@ -272,29 +255,51 @@ Select Case Me.AnimationIndex Case 0 - Animations.Add(New BAMove(New Vector3(Camera.Position.X - 1.0F, Camera.Position.Y, Camera.Position.Z - 0.5F) + BattleScreen.BattleMapOffset, Ball.Texture, New Vector3(0.3F), New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z), 0.04F, True, True, 1.0F, 0.0F,,, 3)) + Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.04F, True, True, 1.0F, 0.0F,,, 3) Case 1 - BattleScreen.OppPokemonNPC.Visible = False - Animations.Add(New BAMove(New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z), Ball.Texture, New Vector3(0.3F), New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z), 0.01F, False, False, 0.0F, 6.0F,,, 3)) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = New Vector3(0, 0, 0) - Dim Size As New BASize(BattleScreen.OppPokemonNPC.Position, BattleScreen.OppPokemonNPC.Textures(0), BattleScreen.OppPokemonNPC.Scale, False, New Vector3(0.05F), 0.02F, 0.0F, 0.0F, "1") + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Cloud") - Animations.Add(Size) + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + Dim SmokeEntity As Entity = Animations.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + + Animations.AnimationMoveEntity(SmokeEntity, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + If SmokeEntity.Position = SmokeDestination Then + Animations.RemoveEntity(SmokeEntity) + End If + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 + + Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.01F, False, False, 0.0F, 6.0F,,, 3) + + Animations.AnimationScaleEntity(BattleScreen.OppPokemonNPC, False, 0.05F, 0.05F, 0.05F, 0.02F, 0.0F, 0.0F, "1") + Animations.AnimationFadeEntity(BattleScreen.OppPokemonNPC, 1, False, 0.0F, 0.0F, 0.0F) Case 2 - Animations.Add(New BAMove(New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z), Ball.Texture, New Vector3(0.3F), New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z), 0.02F, False, False, 0.0F, 6.0F,,, 3)) + Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) + Case 3, 5 - Animations.Add(New BARotation(New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z), Ball.Texture, New Vector3(0.3F), New Vector3(0, 0, 0.05F), New Vector3(0, 0, 1.0F), 0.0F, 4.0F, False, False, True, True)) + Animations.AnimationRotateEntity(BallEntity, 0, 0, 0.05F, 0, 0, 1.0F, 0.0F, 4.0F, False, False, True, True) Case 4, 6 - Animations.Add(New BARotation(New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z), Ball.Texture, New Vector3(0.3F), New Vector3(0, 0, -0.05F), New Vector3(0, 0, -1.0F), 0.0F, 4.0F, False, False, True, True)) + Animations.AnimationRotateEntity(BallEntity, 0, 0, -0.05F, 0, 0, -1.0F, 0.0F, 4.0F, False, False, True, True) Case 7 ' Catch Animation For i = 0 To 2 - Dim v As Vector3 = New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z) - - Animations.Add(New BAMove(v, TextureManager.GetTexture("Textures\Battle\Other\Star"), New Vector3(0.1F), New Vector3(v.X, v.Y + 0.4F, v.Z - ((1 - i) * 0.4F)), 0.01F, False, False, 0.0F, 0.0F,,, 3)) + Dim StarPosition As Vector3 = New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z) + Dim StarDestination As Vector3 = New Vector3(StarPosition.X, StarPosition.Y + 0.4F, StarPosition.Z - ((1 - i) * 0.4F)) + Dim StarEntity As Entity = Animations.SpawnEntity(StarPosition, TextureManager.GetTexture("Textures\Battle\BallCatchStar"), New Vector3(0.1F), 1.0F) + Animations.AnimationMoveEntity(StarEntity, StarDestination.X, StarDestination.Y, StarDestination.Z, 0.01F, False, False, 0.0F, 0.0F,,, 3) + If StarEntity.Position = StarDestination Then + Animations.RemoveEntity(StarEntity) + End If Next - Animations.Add(New BAMove(New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z), Ball.Texture, New Vector3(0.3F), New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z), 0.02F, False, False, 0.0F, 6.0F,,, 3)) + Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) Case 8 - Animations.Add(New BAOpacity(New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z), Ball.Texture, New Vector3(0.3F), 0.01F, False, 0.0F, 0.0F, 0.0F)) + Animations.AnimationFadeEntity(BallEntity, 0.01F, False, 0.0F, 0.0F, 0.0F) Case 21 ' Break Animation End Select From 168a855ed03ad6257391b5f0d36edabb55b70f59 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 14 Oct 2021 17:50:44 +0200 Subject: [PATCH 05/57] I was not halfway done MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I've updated Poison Sting, through which I realized I hadn't taken some usage cases into consideration, so the system should be more robust and useful now I've also updated the animation for Switching In your own Pokémon and I've added an animation for when the Pokémon breaks out of the ball when you're trying to catch it --- P3D/Battle/BattleAnimations/BAEntityColor.vb | 67 + P3D/Battle/BattleAnimations/BAEntityScale.vb | 2 +- P3D/Battle/BattleAnimations/BAMove.vb | 194 --- P3D/Battle/BattleAnimations/BAOpacity.vb | 41 - P3D/Battle/BattleAnimations/BARotation.vb | 129 -- P3D/Battle/BattleAnimations/BASound.vb | 28 - .../BattleAnimations/BattleAnimation3D.vb | 10 +- P3D/Battle/BattleSystemV2/Battle.vb | 1086 ++++++++--------- .../QueryObjects/AnimationQueryObject.vb | 99 +- .../Textures/Battle/{Cloud.png => Smoke.png} | Bin P3D/Entites/Entity.vb | 1 + P3D/P3D.vbproj | 7 +- P3D/Pokemon/Attacks/Fire/Ember.vb | 4 +- P3D/Pokemon/Attacks/Grass/Absorb.vb | 2 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 2 +- P3D/Pokemon/Attacks/Normal/Pound.vb | 2 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 9 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 34 +- P3D/Resources/Models/BaseModel.vb | 6 +- P3D/Screens/Battle/BattleCatchScreen.vb | 86 +- 20 files changed, 777 insertions(+), 1032 deletions(-) create mode 100644 P3D/Battle/BattleAnimations/BAEntityColor.vb delete mode 100644 P3D/Battle/BattleAnimations/BAMove.vb delete mode 100644 P3D/Battle/BattleAnimations/BAOpacity.vb delete mode 100644 P3D/Battle/BattleAnimations/BARotation.vb delete mode 100644 P3D/Battle/BattleAnimations/BASound.vb rename P3D/Content/Textures/Battle/{Cloud.png => Smoke.png} (100%) diff --git a/P3D/Battle/BattleAnimations/BAEntityColor.vb b/P3D/Battle/BattleAnimations/BAEntityColor.vb new file mode 100644 index 000000000..75ba229d4 --- /dev/null +++ b/P3D/Battle/BattleAnimations/BAEntityColor.vb @@ -0,0 +1,67 @@ +Public Class BAEntityColor + + Inherits BattleAnimation3D + + Public TargetEntity As Entity + Public TransitionSpeed As Single = 0.01F + Public FadeIn As Boolean = False + Public ColorTo As Vector3 = New Vector3(1.0F, 1.0F, 1.0F) + + Public Sub New(ByVal Entity As Entity, ByVal TransitionSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal ColorTo As Color, Optional ByVal ColorFrom As Color = Nothing) + MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + + Me.TransitionSpeed = TransitionSpeed + Me.TargetEntity = Entity + + If Not ColorFrom = Nothing Then + TargetEntity.Color = ColorFrom.ToVector3 + End If + Me.ColorTo = ColorTo.ToVector3 + + Me.Visible = False + + Me.AnimationType = AnimationTypes.Transition + End Sub + + Public Overrides Sub DoActionActive() + + If TargetEntity.Color.X > ColorTo.X Then + TargetEntity.Color.X -= CByte(Me.TransitionSpeed) + If TargetEntity.Color.X <= ColorTo.X Then + TargetEntity.Color.X = ColorTo.X + End If + ElseIf TargetEntity.Color.X < ColorTo.X Then + TargetEntity.Color.X += CByte(Me.TransitionSpeed) + If TargetEntity.Color.X >= ColorTo.X Then + TargetEntity.Color.X = ColorTo.X + End If + End If + If TargetEntity.Color.Y > ColorTo.Y Then + TargetEntity.Color.Y -= CByte(Me.TransitionSpeed) + If TargetEntity.Color.Y <= ColorTo.Y Then + TargetEntity.Color.Y = ColorTo.Y + End If + ElseIf TargetEntity.Color.Y < ColorTo.Y Then + TargetEntity.Color.Y += CByte(Me.TransitionSpeed) + If TargetEntity.Color.Y >= ColorTo.Y Then + TargetEntity.Color.Y = ColorTo.Y + End If + End If + If TargetEntity.Color.Z > ColorTo.Z Then + TargetEntity.Color.Z -= CByte(Me.TransitionSpeed) + If TargetEntity.Color.Z <= ColorTo.Z Then + TargetEntity.Color.Z = ColorTo.Z + End If + ElseIf TargetEntity.Color.Z < ColorTo.Z Then + TargetEntity.Color.Z += CByte(Me.TransitionSpeed) + If TargetEntity.Color.Z >= ColorTo.Z Then + TargetEntity.Color.Z = ColorTo.Z + End If + End If + + If TargetEntity.Color = ColorTo Then + Me.Ready = True + End If + End Sub + +End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAEntityScale.vb b/P3D/Battle/BattleAnimations/BAEntityScale.vb index 24d1245ea..1e687de4c 100644 --- a/P3D/Battle/BattleAnimations/BAEntityScale.vb +++ b/P3D/Battle/BattleAnimations/BAEntityScale.vb @@ -6,7 +6,7 @@ Public EndSize As Vector3 Public SizeSpeed As Single = 0.01F Public TargetEntity As Entity - Public Anchors As String + Public Anchors As String '1 = Bottom, 2 = Top, 3 = Left, 4 = Right. Combinations are possible. Public Change As New Vector3(1) diff --git a/P3D/Battle/BattleAnimations/BAMove.vb b/P3D/Battle/BattleAnimations/BAMove.vb deleted file mode 100644 index e59c0f0e5..000000000 --- a/P3D/Battle/BattleAnimations/BAMove.vb +++ /dev/null @@ -1,194 +0,0 @@ -Public Class BAMove - - Inherits BattleAnimation3D - - Public Destination As Vector3 - Public MoveSpeed As Single - Public SpinX As Boolean = False - Public SpinZ As Boolean = False - - Public InterpolationSpeed As Single - Public SpinSpeedX As Single = 0.1F - Public SpinSpeedZ As Single = 0.1F - Public MovementCurve As Integer = 3 - - Private EasedIn As Boolean = False - Private EasedOut As Boolean = False - Public Enum Curves As Integer - EaseIn - EaseOut - EaseInAndOut - Linear - End Enum - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 2) - MyBase.New(Position, Texture, Scale, startDelay, endDelay) - - Me.Position = Position - Me.Destination = Destination - Me.MovementCurve = CType(MovementCurve, Curves) - - Me.MoveSpeed = Speed - Me.Scale = Scale - Me.SpinSpeedX = SpinXSpeed - Me.SpinSpeedZ = SpinZSpeed - - Me.SpinX = SpinX - Me.SpinZ = SpinZ - - Select Case MovementCurve - Case Curves.EaseIn - InterpolationSpeed = 0.0F - Case Curves.EaseOut - InterpolationSpeed = MoveSpeed - Case Curves.EaseInAndOut - InterpolationSpeed = 0.0F - Case Curves.Linear - InterpolationSpeed = MoveSpeed - End Select - - Me.AnimationType = AnimationTypes.Move - End Sub - - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Destination As Vector3, ByVal Speed As Single, ByVal startDelay As Single, ByVal endDelay As Single) - Me.New(Position, Texture, Scale, Destination, Speed, False, False, startDelay, endDelay, 0.1, 0.1, 2) - End Sub - - Public Overrides Sub DoActionUpdate() - Spin() - End Sub - - Public Overrides Sub DoActionActive() - Move() - End Sub - - Private Sub Spin() - If Me.SpinX = True Then - Me.Rotation.X += SpinSpeedX - End If - If Me.SpinZ = True Then - Me.Rotation.Z += SpinSpeedZ - End If - End Sub - - Private Sub Move() - Select Case MovementCurve - Case Curves.EaseIn - If EasedIn = False Then - If InterpolationSpeed < MoveSpeed Then - InterpolationSpeed += MoveSpeed / 10 - Else - EasedIn = True - InterpolationSpeed = MoveSpeed - End If - End If - Case Curves.EaseOut - If EasedOut = False Then - If InterpolationSpeed > 0 Then - InterpolationSpeed -= MoveSpeed / 10 - Else - EasedOut = True - InterpolationSpeed = 0 - End If - End If - Case Curves.EaseInAndOut - If EasedIn = False Then - If InterpolationSpeed < MoveSpeed Then - InterpolationSpeed += MoveSpeed / 10 - Else - EasedIn = True - InterpolationSpeed = MoveSpeed - End If - Else - If EasedOut = False Then - If InterpolationSpeed > 0 Then - InterpolationSpeed -= MoveSpeed / 10 - Else - EasedOut = True - InterpolationSpeed = 0 - End If - End If - End If - End Select - If MovementCurve = Curves.Linear Then - If Me.Position.X < Me.Destination.X Then - Me.Position.X += Me.MoveSpeed - - If Me.Position.X >= Me.Destination.X Then - Me.Position.X = Me.Destination.X - End If - ElseIf Me.Position.X > Me.Destination.X Then - Me.Position.X -= Me.MoveSpeed - - If Me.Position.X <= Me.Destination.X Then - Me.Position.X = Me.Destination.X - End If - End If - If Me.Position.Y < Me.Destination.Y Then - Me.Position.Y += Me.MoveSpeed - - If Me.Position.Y >= Me.Destination.Y Then - Me.Position.Y = Me.Destination.Y - End If - ElseIf Me.Position.Y > Me.Destination.Y Then - Me.Position.Y -= Me.MoveSpeed - - If Me.Position.Y <= Me.Destination.Y Then - Me.Position.Y = Me.Destination.Y - End If - End If - If Me.Position.Z < Me.Destination.Z Then - Me.Position.Z += Me.MoveSpeed - - If Me.Position.Z >= Me.Destination.Z Then - Me.Position.Z = Me.Destination.Z - End If - ElseIf Me.Position.Z > Me.Destination.Z Then - Me.Position.Z -= Me.MoveSpeed - - If Me.Position.Z <= Me.Destination.Z Then - Me.Position.Z = Me.Destination.Z - End If - End If - Else - If Me.Position.X < Me.Destination.X Then - Me.Position.X = MathHelper.Lerp(Me.Position.X, Me.Destination.X, Me.InterpolationSpeed) - If Me.Position.X > Me.Destination.X - 0.05 Then - Me.Position.X = Me.Destination.X - End If - ElseIf Me.Position.X > Me.Destination.X Then - Me.Position.X = MathHelper.Lerp(Me.Position.X, Me.Destination.X, Me.InterpolationSpeed) - If Me.Position.X < Me.Destination.X + 0.05 Then - Me.Position.X = Me.Destination.X - End If - End If - If Me.Position.Y < Me.Destination.Y Then - Me.Position.Y = MathHelper.Lerp(Me.Position.Y, Me.Destination.Y, Me.InterpolationSpeed) - If Me.Position.Y > Me.Destination.Y - 0.05 Then - Me.Position.Y = Me.Destination.Y - End If - ElseIf Me.Position.Y > Me.Destination.Y Then - Me.Position.Y = MathHelper.Lerp(Me.Position.Y, Me.Destination.Y, Me.InterpolationSpeed) - If Me.Position.Y < Me.Destination.Y + 0.05 Then - Me.Position.Y = Me.Destination.Y - End If - End If - If Me.Position.Z < Me.Destination.Z Then - Me.Position.Z = MathHelper.Lerp(Me.Position.Z, Me.Destination.Z, Me.InterpolationSpeed) - If Me.Position.Z > Me.Destination.Z - 0.05 Then - Me.Position.Z = Me.Destination.Z - End If - ElseIf Me.Position.Z > Me.Destination.Z Then - Me.Position.Z = MathHelper.Lerp(Me.Position.Z, Me.Destination.Z, Me.InterpolationSpeed) - If Me.Position.Z < Me.Destination.Z + 0.05 Then - Me.Position.Z = Me.Destination.Z - End If - End If - End If - - If Me.Position = Destination Then - Me.Ready = True - End If - - End Sub - -End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAOpacity.vb b/P3D/Battle/BattleAnimations/BAOpacity.vb deleted file mode 100644 index 5326dcea2..000000000 --- a/P3D/Battle/BattleAnimations/BAOpacity.vb +++ /dev/null @@ -1,41 +0,0 @@ -Public Class BAOpacity - - Inherits BattleAnimation3D - - Public TransitionSpeed As Single = 0.01F - Public FadeIn As Boolean = False - Public EndState As Single = 0.0F - - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal StartState As Single = 1.0F) - MyBase.New(Position, Texture, Scale, startDelay, endDelay) - MyBase.Opacity = StartState - Me.EndState = EndState - Me.FadeIn = FadeIn - Me.TransitionSpeed = TransitionSpeed - - Me.AnimationType = AnimationTypes.Transition - End Sub - - Public Overrides Sub DoActionActive() - If Me.FadeIn = True Then - If Me.EndState > Me.Opacity Then - Me.Opacity += Me.TransitionSpeed - If Me.Opacity >= Me.EndState Then - Me.Opacity = Me.EndState - End If - End If - Else - If Me.EndState < Me.Opacity Then - Me.Opacity -= Me.TransitionSpeed - If Me.Opacity <= Me.EndState Then - Me.Opacity = Me.EndState - End If - End If - End If - - If Me.Opacity = Me.EndState Then - Me.Ready = True - End If - End Sub - -End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BARotation.vb b/P3D/Battle/BattleAnimations/BARotation.vb deleted file mode 100644 index 13f921a10..000000000 --- a/P3D/Battle/BattleAnimations/BARotation.vb +++ /dev/null @@ -1,129 +0,0 @@ -Public Class BARotation - - Inherits BattleAnimation3D - - Dim RotationVector As Vector3 - Dim EndRotation As Vector3 - Dim DoReturn As Boolean = False - Dim ReturnVector As Vector3 - Dim hasReturned As Boolean = False - Dim DoRotation As Vector3 = New Vector3(1.0F) - - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal RotationVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single) - MyBase.New(Position, Texture, Scale, startDelay, endDelay) - - Me.RotationVector = RotationVector - Me.EndRotation = EndRotation - Me.ReturnVector = Me.Rotation - End Sub - - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal RotationVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean) - Me.New(Position, Texture, Scale, RotationVector, EndRotation, startDelay, endDelay) - - If DoXRotation = False Then - DoRotation.X = 0.0F - End If - If DoYRotation = False Then - DoRotation.Y = 0.0F - End If - If DoZRotation = False Then - DoRotation.Z = 0.0F - End If - End Sub - - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal RotationVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) - Me.New(Position, Texture, Scale, RotationVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation) - - Me.DoReturn = DoReturn - End Sub - - Public Overrides Sub DoActionActive() - If VectorReached() = False Then - - If DoRotation.X = 1.0F Then - If Me.Rotation.X > Me.EndRotation.X Then - Me.Rotation.X += Me.RotationVector.X - - If Me.Rotation.X <= Me.EndRotation.X Then - Me.Rotation.X = Me.EndRotation.X - End If - ElseIf Me.Rotation.X < Me.EndRotation.X Then - Me.Rotation.X += Me.RotationVector.X - - If Me.Rotation.X >= Me.EndRotation.X Then - Me.Rotation.X = Me.EndRotation.X - End If - End If - End If - - If DoRotation.Y = 1.0F Then - If Me.Rotation.Y > Me.EndRotation.Y Then - Me.Rotation.Y += Me.RotationVector.Y - - If Me.Rotation.Y <= Me.EndRotation.Y Then - Me.Rotation.Y = Me.EndRotation.Y - End If - ElseIf Me.Rotation.Y < Me.EndRotation.Y Then - Me.Rotation.Y += Me.RotationVector.Y - - If Me.Rotation.Y >= Me.EndRotation.Y Then - Me.Rotation.Y = Me.EndRotation.Y - End If - End If - End If - - If DoRotation.Z = 1.0F Then - If Me.Rotation.Z > Me.EndRotation.Z Then - Me.Rotation.Z += Me.RotationVector.Z - - If Me.Rotation.Z <= Me.EndRotation.Z Then - Me.Rotation.Z = Me.EndRotation.Z - End If - ElseIf Me.Rotation.Z < Me.EndRotation.Z Then - Me.Rotation.Z += Me.RotationVector.Z - - If Me.Rotation.Z >= Me.EndRotation.Z Then - Me.Rotation.Z = Me.EndRotation.Z - End If - End If - End If - - If VectorReached() = True Then - RotationReady() - End If - Else - RotationReady() - End If - End Sub - - Private Sub RotationReady() - If Me.DoReturn = True And Me.hasReturned = False Then - Me.hasReturned = True - Me.EndRotation = Me.ReturnVector - Me.RotationVector = New Vector3(Me.RotationVector.X * -1, Me.RotationVector.Y * -1, Me.RotationVector.Z * -1) - Else - Me.Ready = True - End If - End Sub - - Private Function VectorReached() As Boolean - If DoRotation.X = 1.0F Then - If EndRotation.X <> Me.Rotation.X Then - Return False - End If - End If - If DoRotation.Y = 1.0F Then - If EndRotation.Y <> Me.Rotation.Y Then - Return False - End If - End If - If DoRotation.Z = 1.0F Then - If EndRotation.Z <> Me.Rotation.Z Then - Return False - End If - End If - - Return True - End Function - -End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BASound.vb b/P3D/Battle/BattleAnimations/BASound.vb deleted file mode 100644 index da699ec23..000000000 --- a/P3D/Battle/BattleAnimations/BASound.vb +++ /dev/null @@ -1,28 +0,0 @@ -Public Class BASound - - Inherits BattleAnimation3D - - Private soundfile As String - Private stopMusic As Boolean - Private IsPokemon As Boolean - - - Public Sub New(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) - MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) - Me.Scale = New Vector3(1.0F) - soundfile = sound - Me.Visible = False - Me.stopMusic = stopMusic - Me.IsPokemon = IsPokemon - AnimationType = AnimationTypes.Sound - End Sub - - Public Overrides Sub DoActionActive() - If IsPokemon = True Then - SoundManager.PlayPokemonCry(CInt(soundfile)) - Else - SoundManager.PlaySound(soundfile, stopMusic) - End If - Me.Ready = True - End Sub -End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb index 7d7c8050b..1aeb45e27 100644 --- a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb +++ b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb @@ -24,14 +24,19 @@ Public Ready As Boolean = False Public startDelay As Single Public endDelay As Single + Public SpawnedEntity As Entity = Nothing - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal startDelay As Single, ByVal endDelay As Single) + Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, Optional SpawnedEntity As Entity = Nothing) MyBase.New(Position.X, Position.Y, Position.Z, "BattleAnimation", {Texture}, {0, 0}, False, 0, Scale, BaseModel.BillModel, 0, "", New Vector3(1.0F)) Me.Visible = Visible Me.startDelay = startDelay Me.endDelay = endDelay + If SpawnedEntity IsNot Nothing Then + Me.SpawnedEntity = SpawnedEntity + End If + Me.CreateWorldEveryFrame = True Me.DropUpdateUnlessDrawn = False End Sub @@ -56,6 +61,9 @@ startDelay = 0.0F End If Else + If SpawnedEntity IsNot Nothing Then + Ready = True + End If DoActionActive() End If End If diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 823bea6f1..a93c5e4bc 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2706,19 +2706,14 @@ ChangeCameraAngle(1, own, BattleScreen) 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) - If FlameEntity.Opacity = 0.0F Then - BurnAnimation.RemoveEntity(FlameEntity) - End If - Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) @@ -2729,30 +2724,30 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) End Select If p.Ability.Name.ToLower() = "synchronize" AndAlso from <> own Then - Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") - End If - - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") - End If - End If - End If - - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") - End If - End If - End If - - Return True + Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") End If + + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") + End If + End If + End If + + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") + End If + End If + End If + + Return True End If + End If End If End If End If @@ -3421,19 +3416,18 @@ Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As String = "Textures\Battle\StatChange\statDown" - Dim Position As Vector3 = New Vector3(0, -0.4, 0) - Dim Destination As Vector3 = New Vector3(0, 0.8, 0) - Dim Scale As Vector3 = New Vector3(0.2F) + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statUp") Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Position.X = xPos - Position.Z = zPos - Destination.X = xPos - Destination.Z = zPos + Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), pNPC.Position.Z + zPos) + Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), zPos + pNPC.Position.Z) + Dim Scale As New Vector3(0.2F) + + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + + StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) @@ -3699,27 +3693,26 @@ End If End If '***STAT DECREASE ANIMATION*** - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As String = "Textures\Battle\StatChange\statDown" - Dim Position As Vector3 = New Vector3(0, 0.8, 0) - Dim Destination As Vector3 = New Vector3(0, -0.4, 0) - Dim Scale As Vector3 = New Vector3(0.2F) + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statDown") Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Position.X = xPos - Position.Z = zPos - Destination.X = xPos - Destination.Z = zPos + Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), pNPC.Position.Z + zPos) + Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), zPos + pNPC.Position.Z) + Dim Scale As New Vector3(0.2F) + + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + + StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While - MoveAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) - BattleScreen.BattleQuery.Add(MoveAnimation) + StatAnimation.PlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) + BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -4005,10 +3998,10 @@ End If Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 0, 0) - HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 1, 0) - HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 2, 0) - HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 3, 0) + HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 0, 0) + HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 1, 0) + HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 2, 0) + HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 3, 0) BattleScreen.BattleQuery.Add(HitAnimation) If own = True Then @@ -4763,14 +4756,14 @@ #End Region - ''' <summary> - ''' Switches camera to angle - ''' </summary> - ''' <param name="direction">0=main battle/1=own pokemon/2=opp pokemon</param> - ''' <param name="own">If the code comes from the own player or not.</param> - ''' <param name="BattleScreen">Battlescreen reference</param> - ''' <param name="AddPVP">If the call should get added the PVP list or the own queue.</param> - Public Sub ChangeCameraAngle(ByVal direction As Integer, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Optional ByVal AddPVP As Boolean = False) + ''' <summary> + ''' Switches camera to angle + ''' </summary> + ''' <param name="direction">0=main battle/1=own pokemon/2=opp pokemon</param> + ''' <param name="own">If the code comes from the own player or not.</param> + ''' <param name="BattleScreen">Battlescreen reference</param> + ''' <param name="AddPVP">If the call should get added the PVP list or the own queue.</param> + Public Sub ChangeCameraAngle(ByVal direction As Integer, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Optional ByVal AddPVP As Boolean = False) Dim q As CameraQueryObject = Nothing Select Case direction @@ -5364,7 +5357,7 @@ If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -5388,7 +5381,7 @@ Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -5420,20 +5413,15 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) - If FlameEntity.Opacity = 0.0F Then - BurnAnimation.RemoveEntity(FlameEntity) - End If - 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6163,7 +6151,7 @@ If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -6187,7 +6175,7 @@ Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -6218,20 +6206,15 @@ End If 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) - If FlameEntity.Opacity = 0.0F Then - BurnAnimation.RemoveEntity(FlameEntity) - End If - 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6756,38 +6739,38 @@ End If Else If BattleScreen.IsTrainerBattle = True Then - EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, True) - End If - Else - EndBattle(EndBattleReasons.LoseWild, BattleScreen, False) - End If - End If - End With - End Sub + EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, False) + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, True) + End If + Else + EndBattle(EndBattleReasons.LoseWild, BattleScreen, False) + End If + End If + End With + End Sub - Public Sub ApplyOwnBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OwnUsedBatonPass = True Then - BattleScreen.FieldEffects.OwnUsedBatonPass = False + Public Sub ApplyOwnBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OwnUsedBatonPass = True Then + BattleScreen.FieldEffects.OwnUsedBatonPass = False - BattleScreen.OwnPokemon.StatAttack = BattleScreen.FieldEffects.OwnBatonPassStats(0) - BattleScreen.OwnPokemon.StatDefense = BattleScreen.FieldEffects.OwnBatonPassStats(1) - BattleScreen.OwnPokemon.StatSpAttack = BattleScreen.FieldEffects.OwnBatonPassStats(2) - BattleScreen.OwnPokemon.StatSpDefense = BattleScreen.FieldEffects.OwnBatonPassStats(3) - BattleScreen.OwnPokemon.StatSpeed = BattleScreen.FieldEffects.OwnBatonPassStats(4) - BattleScreen.OwnPokemon.Evasion = BattleScreen.FieldEffects.OwnBatonPassStats(5) - BattleScreen.OwnPokemon.Accuracy = BattleScreen.FieldEffects.OwnBatonPassStats(6) + BattleScreen.OwnPokemon.StatAttack = BattleScreen.FieldEffects.OwnBatonPassStats(0) + BattleScreen.OwnPokemon.StatDefense = BattleScreen.FieldEffects.OwnBatonPassStats(1) + BattleScreen.OwnPokemon.StatSpAttack = BattleScreen.FieldEffects.OwnBatonPassStats(2) + BattleScreen.OwnPokemon.StatSpDefense = BattleScreen.FieldEffects.OwnBatonPassStats(3) + BattleScreen.OwnPokemon.StatSpeed = BattleScreen.FieldEffects.OwnBatonPassStats(4) + BattleScreen.OwnPokemon.Evasion = BattleScreen.FieldEffects.OwnBatonPassStats(5) + BattleScreen.OwnPokemon.Accuracy = BattleScreen.FieldEffects.OwnBatonPassStats(6) - If BattleScreen.FieldEffects.OwnBatonPassConfusion = True Then - BattleScreen.FieldEffects.OwnBatonPassConfusion = False - BattleScreen.OwnPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OwnBatonPassConfusion = True Then + BattleScreen.FieldEffects.OwnBatonPassConfusion = False + BattleScreen.OwnPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") - HasSwitchedInOwn = True + Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") + HasSwitchedInOwn = True If FirstTime = False Then Dim insertMessage As String = message @@ -6800,28 +6783,32 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination = New Vector3(0, 0, 0) + Dim SmokeDestination As Vector3 = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + + BallReturn.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + BallReturn.FadeEntity(Nothing, False, 1, False, 0, 1, 0) + BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position, TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.MoveEntity(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) BattleScreen.AddToQuery(InsertIndex, BallReturn) @@ -6859,315 +6846,322 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + + BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) + + Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position + New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallThrow.MoveEntity(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) + Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Dim SmokeEntity As Entity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + + BallThrow.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) - BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) + BallThrow.FadeEntity(Nothing, False, 1, True, 1, 4, 0) + BallThrow.PlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If With BattleScreen - If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then - .FieldEffects.UsedPokemon.Add(NewPokemonIndex) - End If + If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then + .FieldEffects.UsedPokemon.Add(NewPokemonIndex) + End If - If Not .OwnPokemon.Item Is Nothing Then - If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then - If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then - BattleScreen.FieldEffects.AmuletCoin += 1 - End If - End If - End If + If Not .OwnPokemon.Item Is Nothing Then + If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then + If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then + BattleScreen.FieldEffects.AmuletCoin += 1 + End If + End If + End If - Dim p As Pokemon = .OwnPokemon - Dim op As Pokemon = .OppPokemon + Dim p As Pokemon = .OwnPokemon + Dim op As Pokemon = .OppPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) - 'Spikes - If spikeAffected = True Then - If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OppSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If + 'Spikes + If spikeAffected = True Then + If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OppSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OppStickyWeb > 0 Then + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OppStickyWeb > 0 Then - LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If + End If + End If - 'Toxic Spikes - If spikeAffected = True Then - If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OppToxicSpikes - Case 1 - InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OppToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OppToxicSpikes = 0 - End If - End If - End If + 'Toxic Spikes + If spikeAffected = True Then + If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OppToxicSpikes + Case 1 + InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OppToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OppToxicSpikes = 0 + End If + End If + End If - 'Stealth Rock - If rockAffected = True Then - If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim rocksDamage As Double = 1D + 'Stealth Rock + If rockAffected = True Then + If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, True) - TriggerItemEffect(BattleScreen, True) + TriggerAbilityEffect(BattleScreen, True) + TriggerItemEffect(BattleScreen, True) - If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) - End If + If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OwnHealingWish = True Then - BattleScreen.FieldEffects.OwnHealingWish = False + If BattleScreen.FieldEffects.OwnHealingWish = True Then + BattleScreen.FieldEffects.OwnHealingWish = False - If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub - Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") - With BattleScreen - 'Natural cure cures status problems - If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then - If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then - .OppPokemon.Status = Pokemon.StatusProblems.None - .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) - End If - End If - 'Regenerator ability heals 1/3 of it's max HP - If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then - If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then - Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) - If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then - BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") - End If - End If - End If - 'save baton pass stuff: - If .FieldEffects.OppUsedBatonPass = True Then - .FieldEffects.OppBatonPassStats = New List(Of Integer) - With .OppPokemon - BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) - End With - .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True - End If + Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") + With BattleScreen + 'Natural cure cures status problems + If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then + If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then + .OppPokemon.Status = Pokemon.StatusProblems.None + .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) + End If + End If + 'Regenerator ability heals 1/3 of it's max HP + If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then + If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then + Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) + If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then + BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") + End If + End If + End If + 'save baton pass stuff: + If .FieldEffects.OppUsedBatonPass = True Then + .FieldEffects.OppBatonPassStats = New List(Of Integer) + With .OppPokemon + BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) + End With + .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True + End If - 'Set the original objects of Pokemon - .OppPokemon.ResetTemp() + 'Set the original objects of Pokemon + .OppPokemon.ResetTemp() - 'Remove volatiles - .OppPokemon.ClearAllVolatiles() + 'Remove volatiles + .OppPokemon.ClearAllVolatiles() - 'Resetting FieldEffects - With .FieldEffects - .OppSleepTurns = 0 - .OppTruantRound = 0 - .OppTaunt = 0 - .OppSmacked = 0 - .OppRageCounter = 0 - .OppUproar = 0 - If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 - .OppEndure = 0 - .OppProtectCounter = 0 - .OppDetectCounter = 0 - .OppKingsShieldCounter = 0 - .OppProtectMovesCount = 0 - If .OppUsedBatonPass = False Then .OppIngrain = 0 - If .OppUsedBatonPass = False Then .OppSubstitute = 0 - If .OppUsedBatonPass = False Then .OppMagnetRise = 0 - If .OppUsedBatonPass = False Then .OppAquaRing = 0 - .OppPoisonCounter = 0 - .OppNightmare = 0 - If .OppUsedBatonPass = False Then .OppCurse = 0 - .OppOutrage = 0 - .OppThrash = 0 - .OppPetalDance = 0 - .OppEncore = 0 - .OppEncoreMove = Nothing - If .OppUsedBatonPass = False Then .OppEmbargo = 0 - .OppYawn = 0 - If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 - .OppConfusionTurns = 0 - .OppTorment = 0 - .OppTormentMove = Nothing - .OppChoiceMove = Nothing - .OppRecharge = 0 - .OppRolloutCounter = 0 - .OppIceBallCounter = 0 - .OppDefenseCurl = 0 - .OppCharge = 0 - .OppSolarBeam = 0 - .OppSolarBlade = 0 - If .OppUsedBatonPass = False Then .OppLeechSeed = 0 - If .OppUsedBatonPass = False Then .OppLockOn = 0 - .OppLansatBerry = 0 - .OppCustapBerry = 0 - .OppTrappedCounter = 0 - .OppFuryCutter = 0 - .OppEchoedVoice = 0 - .OppPokemonTurns = 0 - .OppStockpileCount = 0 - .OppDestinyBond = False - .OppGastroAcid = False + 'Resetting FieldEffects + With .FieldEffects + .OppSleepTurns = 0 + .OppTruantRound = 0 + .OppTaunt = 0 + .OppSmacked = 0 + .OppRageCounter = 0 + .OppUproar = 0 + If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 + .OppEndure = 0 + .OppProtectCounter = 0 + .OppDetectCounter = 0 + .OppKingsShieldCounter = 0 + .OppProtectMovesCount = 0 + If .OppUsedBatonPass = False Then .OppIngrain = 0 + If .OppUsedBatonPass = False Then .OppSubstitute = 0 + If .OppUsedBatonPass = False Then .OppMagnetRise = 0 + If .OppUsedBatonPass = False Then .OppAquaRing = 0 + .OppPoisonCounter = 0 + .OppNightmare = 0 + If .OppUsedBatonPass = False Then .OppCurse = 0 + .OppOutrage = 0 + .OppThrash = 0 + .OppPetalDance = 0 + .OppEncore = 0 + .OppEncoreMove = Nothing + If .OppUsedBatonPass = False Then .OppEmbargo = 0 + .OppYawn = 0 + If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 + .OppConfusionTurns = 0 + .OppTorment = 0 + .OppTormentMove = Nothing + .OppChoiceMove = Nothing + .OppRecharge = 0 + .OppRolloutCounter = 0 + .OppIceBallCounter = 0 + .OppDefenseCurl = 0 + .OppCharge = 0 + .OppSolarBeam = 0 + .OppSolarBlade = 0 + If .OppUsedBatonPass = False Then .OppLeechSeed = 0 + If .OppUsedBatonPass = False Then .OppLockOn = 0 + .OppLansatBerry = 0 + .OppCustapBerry = 0 + .OppTrappedCounter = 0 + .OppFuryCutter = 0 + .OppEchoedVoice = 0 + .OppPokemonTurns = 0 + .OppStockpileCount = 0 + .OppDestinyBond = False + .OppGastroAcid = False - .OppFlyCounter = 0 - .OppDigCounter = 0 - .OppBounceCounter = 0 - .OppDiveCounter = 0 - .OppShadowForceCounter = 0 - .OppPhantomForceCounter = 0 - .OppSkyDropCounter = 0 - .OppGeomancyCounter = 0 - .OppSkyAttackCounter = 0 - .OppRazorWindCounter = 0 - .OppSkullBashCounter = 0 + .OppFlyCounter = 0 + .OppDigCounter = 0 + .OppBounceCounter = 0 + .OppDiveCounter = 0 + .OppShadowForceCounter = 0 + .OppPhantomForceCounter = 0 + .OppSkyDropCounter = 0 + .OppGeomancyCounter = 0 + .OppSkyAttackCounter = 0 + .OppRazorWindCounter = 0 + .OppSkullBashCounter = 0 - .OppForesight = 0 - .OppOdorSleuth = 0 - .OppMiracleEye = 0 + .OppForesight = 0 + .OppOdorSleuth = 0 + .OppMiracleEye = 0 - .OppWrap = 0 - .OppWhirlpool = 0 - .OppBind = 0 - .OppClamp = 0 - .OppFireSpin = 0 - .OppMagmaStorm = 0 - .OppSandTomb = 0 - .OppInfestation = 0 + .OppWrap = 0 + .OppWhirlpool = 0 + .OppBind = 0 + .OppClamp = 0 + .OppFireSpin = 0 + .OppMagmaStorm = 0 + .OppSandTomb = 0 + .OppInfestation = 0 - .OppBideCounter = 0 - .OppBideDamage = 0 + .OppBideCounter = 0 + .OppBideDamage = 0 - .OppRoostUsed = False + .OppRoostUsed = False - 'Own stuff that depends on opp pokemon presence - .OwnTrappedCounter = 0 - .OwnWrap = 0 - .OwnWhirlpool = 0 - .OwnBind = 0 - .OwnClamp = 0 - .OwnFireSpin = 0 - .OwnMagmaStorm = 0 - .OwnSandTomb = 0 - .OwnInfestation = 0 + 'Own stuff that depends on opp pokemon presence + .OwnTrappedCounter = 0 + .OwnWrap = 0 + .OwnWhirlpool = 0 + .OwnBind = 0 + .OwnClamp = 0 + .OwnFireSpin = 0 + .OwnMagmaStorm = 0 + .OwnSandTomb = 0 + .OwnInfestation = 0 - If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then - BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) - End If - End With - End With + If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then + BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) + End If + End With + End With - BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) + BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) - If BattleScreen.IsTrainerBattle = False Then + If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMoveEntity(Nothing, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) + Faint.PlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + Faint.MoveEntity(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) - EndBattle(EndBattleReasons.WinWild, BattleScreen, False) - Else - If BattleScreen.TrainerHasFightablePokemon() = True Then - If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then - GainEXP(BattleScreen) - End If + EndBattle(EndBattleReasons.WinWild, BattleScreen, False) + Else + If BattleScreen.TrainerHasFightablePokemon() = True Then + If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then + GainEXP(BattleScreen) + End If If BattleScreen.IsRemoteBattle And BattleScreen.OppFaint Then - 'Next pokemon is selected by the opponent. - Else - SwitchInOpp(BattleScreen, False, index) - End If - Else - GainEXP(BattleScreen) + 'Next pokemon is selected by the opponent. + Else + SwitchInOpp(BattleScreen, False, index) + End If + Else + GainEXP(BattleScreen) If message = "" Then - message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" - End If + message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" + End If - BattleScreen.BattleQuery.Add(New TextQueryObject(message)) + BattleScreen.BattleQuery.Add(New TextQueryObject(message)) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As String = "Textures\Battle\Smoke" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) @@ -7178,57 +7172,57 @@ ' Pokemon disappears BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) EndBattle(EndBattleReasons.WinTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) - End If - End If - End If - End Sub + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) + End If + End If + End If + End Sub - Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OppUsedBatonPass = True Then - BattleScreen.FieldEffects.OppUsedBatonPass = False + Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OppUsedBatonPass = True Then + BattleScreen.FieldEffects.OppUsedBatonPass = False - BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) - BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) - BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) - BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) - BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) - BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) - BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) + BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) + BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) + BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) + BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) + BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) + BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) + BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) - If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then - BattleScreen.FieldEffects.OppBatonPassConfusion = False - BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then + BattleScreen.FieldEffects.OppBatonPassConfusion = False + BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) + Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) - If FirstTime = False Then - HasSwitchedInOpp = True + If FirstTime = False Then + HasSwitchedInOpp = True BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As String = "Textures\Battle\Smoke" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) @@ -7239,51 +7233,51 @@ ' Pokemon disappears BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) BattleScreen.SendInNewTrainerPokemon(index) - Me.ApplyOppBatonPass(BattleScreen) + Me.ApplyOppBatonPass(BattleScreen) - If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then - BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) - End If + If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then + BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) + End If - Dim oppShiny As String = "N" - If BattleScreen.OppPokemon.IsShiny = True Then - oppShiny = "S" - End If + Dim oppShiny As String = "N" + If BattleScreen.OppPokemon.IsShiny = True Then + oppShiny = "S" + End If - Dim oppModel As String = BattleScreen.GetModelName(False) + Dim oppModel As String = BattleScreen.GetModelName(False) - If oppModel = "" Then - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) - Else - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) - End If + If oppModel = "" Then + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) + Else + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) + End If - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As String = "Textures\Battle\Smoke" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) @@ -7294,180 +7288,180 @@ ' Pokemon appears BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) - BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + BallThrow.PlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If - With BattleScreen - Dim p As Pokemon = .OppPokemon - Dim op As Pokemon = .OwnPokemon + With BattleScreen + Dim p As Pokemon = .OppPokemon + Dim op As Pokemon = .OwnPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) - If spikeAffected = True Then - If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OwnSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OwnStickyWeb > 0 Then + If spikeAffected = True Then + If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OwnSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OwnStickyWeb > 0 Then - LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If - If spikeAffected = True Then - If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OwnToxicSpikes - Case 1 - InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OwnToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OwnToxicSpikes = 0 - End If - End If - End If + End If + End If + If spikeAffected = True Then + If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OwnToxicSpikes + Case 1 + InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OwnToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OwnToxicSpikes = 0 + End If + End If + End If - If rockAffected = True Then - If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim rocksDamage As Double = 1D + If rockAffected = True Then + If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, False) - TriggerItemEffect(BattleScreen, False) + TriggerAbilityEffect(BattleScreen, False) + TriggerItemEffect(BattleScreen, False) - If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) - End If + If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OppHealingWish = True Then - BattleScreen.FieldEffects.OppHealingWish = False + If BattleScreen.FieldEffects.OppHealingWish = True Then + BattleScreen.FieldEffects.OppHealingWish = False - If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub #End Region #Region "EndBattle" - Enum EndBattleReasons - WinWild - LoseWild - WinTrainer - LoseTrainer - WinPvP - LosePvP - End Enum + Enum EndBattleReasons + WinWild + LoseWild + WinTrainer + LoseTrainer + WinPvP + LosePvP + End Enum - Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) - BattleScreen.OwnFaint = False - BattleScreen.OppFaint = False - IsAfterFaint = False - If AddPVP = True Then - Select Case reason - Case EndBattleReasons.WinTrainer 'Lost - Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 5, q) + Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) + BattleScreen.OwnFaint = False + BattleScreen.OppFaint = False + IsAfterFaint = False + If AddPVP = True Then + Select Case reason + Case EndBattleReasons.WinTrainer 'Lost + Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 5, q) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 4, New TextQueryObject("You lost the battle!")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, New TextQueryObject("")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 4, New TextQueryObject("You lost the battle!")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, New TextQueryObject("")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) - Case EndBattleReasons.LoseTrainer 'Won - Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, q) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) + Case EndBattleReasons.LoseTrainer 'Won + Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, q) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("Pokémon Trainer " & Core.Player.Name & " was defeated!")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("Pokémon Trainer " & Core.Player.Name & " was defeated!")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) - End Select - Else - Select Case reason - Case EndBattleReasons.WinWild - Won = True - Core.Player.AddPoints(1, "Won against wild Pokémon.") + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) + End Select + Else + Select Case reason + Case EndBattleReasons.WinWild + Won = True + Core.Player.AddPoints(1, "Won against wild Pokémon.") - BattleScreen.BattleQuery.Add(New PlayMusicQueryObject("wild_defeat")) - ChangeCameraAngle(1, True, BattleScreen) + BattleScreen.BattleQuery.Add(New PlayMusicQueryObject("wild_defeat")) + ChangeCameraAngle(1, True, BattleScreen) - GainEXP(BattleScreen) + GainEXP(BattleScreen) - If BattleScreen.FieldEffects.OwnPayDayCounter > 0 Then - Core.Player.Money += BattleScreen.FieldEffects.OwnPayDayCounter - BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " picked up $" & BattleScreen.FieldEffects.OwnPayDayCounter & "!")) - End If + If BattleScreen.FieldEffects.OwnPayDayCounter > 0 Then + Core.Player.Money += BattleScreen.FieldEffects.OwnPayDayCounter + BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " picked up $" & BattleScreen.FieldEffects.OwnPayDayCounter & "!")) + End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) - Case EndBattleReasons.WinTrainer - Won = True - Core.Player.AddPoints(3, "Won against trainer.") + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) + Case EndBattleReasons.WinTrainer + Won = True + Core.Player.AddPoints(3, "Won against trainer.") - Core.Player.Money += BattleScreen.GetTrainerMoney() + Core.Player.Money += BattleScreen.GetTrainerMoney() - BattleScreen.BattleQuery.Add(New PlayMusicQueryObject(BattleScreen.Trainer.GetDefeatMusic())) + BattleScreen.BattleQuery.Add(New PlayMusicQueryObject(BattleScreen.Trainer.GetDefeatMusic())) - Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.04F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.BattleQuery.Add(q) + Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.04F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.BattleQuery.Add(q) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.TrainerType & " " & BattleScreen.Trainer.Name & " was defeated!")) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.OutroMessage)) + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.TrainerType & " " & BattleScreen.Trainer.Name & " was defeated!")) + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.OutroMessage)) - If BattleScreen.GetTrainerMoney() > 0 Then - BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " got $" & BattleScreen.GetTrainerMoney() & "!")) - End If + If BattleScreen.GetTrainerMoney() > 0 Then + BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " got $" & BattleScreen.GetTrainerMoney() & "!")) + End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) - Case EndBattleReasons.LoseTrainer, EndBattleReasons.LoseWild - Won = False + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) + Case EndBattleReasons.LoseTrainer, EndBattleReasons.LoseWild + Won = False Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) q.ApplyCurrentCamera = True BattleScreen.BattleQuery.Add(q) diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index 75e95027d..84eca1a23 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -5,7 +5,7 @@ Public AnimationStarted As Boolean = False Public AnimationEnded As Boolean = False - Public BAFlipped As Boolean + Public BattleFlipped As Boolean = Nothing Public AnimationSequence As List(Of BattleAnimation3D) Public SpawnedEntities As List(Of Entity) Public CurrentEntity As Entity @@ -17,10 +17,12 @@ End Get End Property - Public Sub New(ByVal entity As Entity, ByVal BAFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing) + Public Sub New(ByVal entity As Entity, ByVal BattleFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing) MyBase.New(QueryTypes.MoveAnimation) Me.AnimationSequence = New List(Of BattleAnimation3D) - Me.BAFlipped = BAFlipped + If BattleFlipped <> Nothing Then + Me.BattleFlipped = BattleFlipped + End If Me.CurrentEntity = entity Me.CurrentModel = model AnimationSequenceBegin() @@ -48,6 +50,9 @@ i -= 1 AnimationSequence.Remove(a) Else + If a.SpawnedEntity IsNot Nothing And a.Ready = True Then + SpawnedEntities.Add(a.SpawnedEntity) + End If a.Update() End If End If @@ -70,32 +75,32 @@ End Sub Public Sub AnimationSequenceEnd() - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationSequenceEnd OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationSequenceEnd BEFORE CALLING AnimationSequenceBegin") - Else - AnimationEnded = True - End If + AnimationEnded = True End Sub - Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single) As Entity - Dim SpawnedEntity As Entity = New Entity(Position.X, Position.Y, Position.Z, "BattleAnimation", {Texture}, {0, 0}, False, 0, Scale, BaseModel.BillModel, 0, "", New Vector3(1.0F)) - - SpawnedEntity.Opacity = Opacity - If SpawnedEntity.Opacity > 0 Then - SpawnedEntity.Visible = True - Else - SpawnedEntity.Visible = False + Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single, Optional ByVal startDelay As Single = 0.0F, Optional ByVal endDelay As Single = 0.0F) As Entity + If Not BattleFlipped = Nothing Then + If BattleFlipped = True Then + Position.X = CurrentEntity.Position.X - Position.X * 2.0F + Position.Z = CurrentEntity.Position.Z - Position.Z * 2.0F + Else + Position.X = CurrentEntity.Position.X + Position.X * 2.0F + Position.Z = CurrentEntity.Position.Z + Position.Z * 2.0F + End If End If - SpawnedEntities.Add(SpawnedEntity) + Dim SpawnedEntity As Entity = New Entity(Position.X, Position.Y, Position.Z, "BattleAnimation", {Texture}, {0, 0}, False, 0, Scale, BaseModel.BillModel, 0, "", New Vector3(1.0F)) + SpawnedEntity.Opacity = Opacity + + Dim SpawnDelayEntity As BattleAnimation3D = New BattleAnimation3D(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay, SpawnedEntity) + + AnimationSequence.Add(SpawnDelayEntity) Return SpawnedEntity End Function Public Sub RemoveEntity(Entity As Entity) SpawnedEntities.Remove(Entity) End Sub - Public Sub AnimationChangeTexture(ByVal Entity As Entity, ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) + Public Sub ChangeEntityTexture(ByVal Entity As Entity, RemoveEntityAfter As Boolean, ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) Dim TextureChangeEntity As Entity If Entity Is Nothing Then @@ -106,19 +111,29 @@ Dim baEntityTextureChange As BAEntityTextureChange = New BAEntityTextureChange(TextureChangeEntity, Texture, startDelay, endDelay) AnimationSequence.Add(baEntityTextureChange) + + If RemoveEntityAfter = True Then + If baEntityTextureChange.CanRemove = True Then + RemoveEntity(Entity) + End If + End If End Sub - Public Sub AnimationMoveEntity(ByVal Entity As Entity, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) + Public Sub MoveEntity(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) Dim MoveEntity As Entity Dim Destination As Vector3 - If Entity Is Nothing Then - MoveEntity = CurrentEntity - If BAFlipped Then + If Not BattleFlipped = Nothing Then + If BattleFlipped = True Then DestinationX -= DestinationX * 2.0F DestinationZ -= DestinationZ * 2.0F - Destination = New Vector3(CurrentEntity.Position.X + DestinationX, CurrentEntity.Position.Y + DestinationY, CurrentEntity.Position.Z + DestinationZ) End If + If Entity Is Nothing Then + MoveEntity = CurrentEntity + Else + MoveEntity = Entity + End If + Destination = CurrentEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ) Else MoveEntity = Entity Destination = New Vector3(DestinationX, DestinationY, DestinationZ) @@ -131,9 +146,15 @@ Dim baModelMove As BAEntityMove = New BAEntityMove(CType(CurrentModel, Entity), Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) AnimationSequence.Add(baModelMove) End If + + If RemoveEntityAfter = True Then + If baEntityMove.CanRemove = True Then + RemoveEntity(Entity) + End If + End If End Sub - Public Sub AnimationFadeEntity(ByVal Entity As Entity, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) + Public Sub FadeEntity(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) Dim FadeEntity As Entity If Entity Is Nothing Then FadeEntity = CurrentEntity @@ -148,8 +169,14 @@ Dim baModelOpacity As BAEntityOpacity = New BAEntityOpacity(CType(CurrentModel, Entity), TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) AnimationSequence.Add(baModelOpacity) End If + + If RemoveEntityAfter = True Then + If baEntityOpacity.CanRemove = True Then + RemoveEntity(Entity) + End If + End If End Sub - Public Sub AnimationRotateEntity(Entity As Entity, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) + Public Sub RotateEntity(Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) Dim RotateEntity As Entity If Entity Is Nothing Then RotateEntity = CurrentEntity @@ -161,8 +188,13 @@ Dim EndRotation As Vector3 = New Vector3(EndRotationX, EndRotationY, EndRotationZ) Dim baEntityRotate As BAEntityRotate = New BAEntityRotate(RotateEntity, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation, DoReturn) AnimationSequence.Add(baEntityRotate) + If RemoveEntityAfter = True Then + If baEntityRotate.CanRemove = True Then + RemoveEntity(Entity) + End If + End If End Sub - Public Sub AnimationScaleEntity(ByVal Entity As Entity, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") + Public Sub ScaleEntity(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") Dim ScaleEntity As Entity If Entity Is Nothing Then ScaleEntity = CurrentEntity @@ -175,6 +207,11 @@ Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ) Dim baBillSize As BAEntityScale = New BAEntityScale(ScaleEntity, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) AnimationSequence.Add(baBillSize) + If RemoveEntityAfter = True Then + If baBillSize.CanRemove = True Then + RemoveEntity(Entity) + End If + End If End Sub Public Sub AnimationSpawnFadingEntity(ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal Texture As String, ByVal ScaleX As Single, ByVal ScaleY As Single, ByVal ScaleZ As Single, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 1.0F) @@ -193,7 +230,7 @@ texture2D = TextureManager.GetTexture(stringArray(0), r, "") End If - If BAFlipped Then + If BattleFlipped Then PositionX -= PositionX * 2.0F PositionZ -= PositionZ * 2.0F End If @@ -222,7 +259,7 @@ texture2D = TextureManager.GetTexture(stringArray(0), r, "") End If - If BAFlipped Then + If BattleFlipped Then PositionX -= PositionX * 2.0F PositionZ -= PositionZ * 2.0F DestinationX -= DestinationX * 2.0F @@ -239,7 +276,7 @@ AnimationSequence.Add(baMove) End If End Sub - Public Sub AnimationPlaySound(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) + Public Sub PlaySound(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) If CurrentEntity Is Nothing Then Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationPlaySound OUTSIDE OF ATTACK ANIMATION DELEGATE") ElseIf Not AnimationStarted Then diff --git a/P3D/Content/Textures/Battle/Cloud.png b/P3D/Content/Textures/Battle/Smoke.png similarity index 100% rename from P3D/Content/Textures/Battle/Cloud.png rename to P3D/Content/Textures/Battle/Smoke.png diff --git a/P3D/Entites/Entity.vb b/P3D/Entites/Entity.vb index 998344643..99d766dfc 100644 --- a/P3D/Entites/Entity.vb +++ b/P3D/Entites/Entity.vb @@ -22,6 +22,7 @@ Public Visible As Boolean = True Public Shader As New Vector3(1.0F) Public Shaders As New List(Of Vector3) + Public Color As Vector3 = New Vector3(1.0F) Public CameraDistanceDelta As Single = 0.0F diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index ec16b862f..a3208c826 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -15403,6 +15403,9 @@ <Content Include="Content\Textures\Battle\Poison\Stinger.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Smoke.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\chess.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -26269,9 +26272,6 @@ <Content Include="Content\Textures\battletower.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Textures\Battle\Cloud.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> <Content Include="Content\Textures\Battle\Fighting\forcepalmhand.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -27545,6 +27545,7 @@ <Content Include="credits.txt"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Compile Include="Battle\BattleAnimations\BAEntityColor.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityRotate.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityMove.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityOpacity.vb" /> diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 6719f780d..03a9cfffc 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -66,7 +66,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) + MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 @@ -82,7 +82,7 @@ MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 Next - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) + MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index a63495b58..6b8075175 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -96,7 +96,7 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) Dim maxAmount As Integer = 8 Dim currentAmount As Integer = 0 - MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) + MoveAnimation.PlaySound("Battle\Attacks\Grass\Absorb", 0, 0) While currentAmount <= maxAmount Dim yPos As Single = CSng(Random.NextDouble() * 0.5) Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index 5c35961e3..e01dafc73 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -64,7 +64,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) + MoveAnimation.PlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 25785556e..5cf85b3e2 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -57,7 +57,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) + MoveAnimation.PlaySound("Battle\Attacks\Pound", 0.5, 2.5) MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 4d53f749d..99e61e709 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,15 +54,16 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.AnimationMoveEntity(Nothing, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.AnimationMoveEntity(Nothing, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.MoveEntity(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.MoveEntity(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) - MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Tackle", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 2) + MoveAnimation.PlaySound("Battle\Attacks\Normal\Tackle", 0, 2) + Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(1.0F), 1.0F) + MoveAnimation.FadeEntity(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 9684f8379..3cc76f0a4 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -67,30 +67,38 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(CurrentEntity.Position, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) + + MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) + MoveAnimation.MoveEntity(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.MoveEntity(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.ChangeEntityTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 2) + Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + MoveAnimation.ChangeEntityTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.ChangeEntityTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 3, 1) + + MoveAnimation.ChangeEntityTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + MoveAnimation.ChangeEntityTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) + + MoveAnimation.ChangeEntityTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Resources/Models/BaseModel.vb b/P3D/Resources/Models/BaseModel.vb index 92ae430c2..c10890d7d 100644 --- a/P3D/Resources/Models/BaseModel.vb +++ b/P3D/Resources/Models/BaseModel.vb @@ -15,7 +15,7 @@ Screen.Effect.TextureEnabled = True Screen.Effect.Alpha = Entity.Opacity - Screen.Effect.DiffuseColor = effectDiffuseColor * Entity.Shader + Screen.Effect.DiffuseColor = effectDiffuseColor * Entity.Shader * Entity.Color If Screen.Level.IsDark = True Then Screen.Effect.DiffuseColor *= New Vector3(0.5, 0.5, 0.5) @@ -70,7 +70,9 @@ End If Screen.Effect.DiffuseColor = effectDiffuseColor - If DebugDisplay.MaxDistance < Entity.CameraDistance Then DebugDisplay.MaxDistance = CInt(Entity.CameraDistance) + If DebugDisplay.MaxDistance < Entity.CameraDistance Then + DebugDisplay.MaxDistance = CInt(Entity.CameraDistance) + End If End Sub Private Sub ApplyTexture(ByVal texture As Texture2D) diff --git a/P3D/Screens/Battle/BattleCatchScreen.vb b/P3D/Screens/Battle/BattleCatchScreen.vb index 787d1e9b0..75ea37b7a 100644 --- a/P3D/Screens/Battle/BattleCatchScreen.vb +++ b/P3D/Screens/Battle/BattleCatchScreen.vb @@ -4,9 +4,11 @@ Dim Ball As Item - Dim Animations As BattleSystem.AnimationQueryObject = New BattleSystem.AnimationQueryObject(Nothing, False, Nothing) - Dim BallStartPosition As Vector3 = New Vector3(Camera.Position.X - 1.0F, Camera.Position.Y, Camera.Position.Z - 0.5F) + BattleScreen.BattleMapOffset - Dim BallEntity As Entity = Animations.SpawnEntity(BallStartPosition, Ball.Texture, New Vector3(0.3F), 1.0F) + Dim Animations As BattleSystem.AnimationQueryObject = New BattleSystem.AnimationQueryObject(BattleScreen.OppPokemonNPC, Nothing, BattleScreen.OppPokemonModel) + Dim BallStartPosition As Vector3 = New Vector3(Camera.Position.X - 1.0F, Camera.Position.Y, Camera.Position.Z - 1.0F) + BattleScreen.BattleMapOffset + Dim BallEntity As Entity = Nothing + + Dim PokemonScale As Vector3 Dim AnimationStarted As Boolean = False Dim caught As Boolean = False @@ -104,15 +106,15 @@ If TextBox.Showing = False Then - If Me._playIntroSound = False Then - Me._playIntroSound = True - SoundManager.PlaySound("Battle\Pokeball\throw") - End If - UpdateAnimations() If Me.IsCurrentScreen() = True Then If AnimationStarted = False Then + If Me._playIntroSound = False Then + Me._playIntroSound = True + SoundManager.PlaySound("Battle\Pokeball\throw") + End If + BallEntity = Animations.SpawnEntity(BallStartPosition, Ball.Texture, New Vector3(0.3F), 1.0F) SetupAnimation() Else Select Case Me.AnimationIndex @@ -131,7 +133,7 @@ SoundManager.PlaySound("Battle\Pokeball\shake") AnimationIndex += 1 Else - SoundManager.PlaySound("Battle\Pokeball\open") + SoundManager.PlaySound("Battle\Pokeball\break") AnimationIndex = 21 InBall = False End If @@ -177,7 +179,7 @@ ResetVisibility() Core.SetScreen(Me.PreScreen) Case 21 ' After Break - ResetVisibility() + SetupAnimation() Core.SetScreen(Me.PreScreen) CType(Core.CurrentScreen, BattleSystem.BattleScreen).Battle.InitializeRound(CType(Core.CurrentScreen, BattleSystem.BattleScreen), New BattleSystem.Battle.RoundConst() With {.StepType = BattleSystem.Battle.RoundConst.StepTypes.Text, .Argument = "It broke free!"}) End Select @@ -255,52 +257,68 @@ Select Case Me.AnimationIndex Case 0 - Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.04F, True, True, 1.0F, 0.0F,,, 3) + PokemonScale = BattleScreen.OppPokemonNPC.Scale + Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) Case 1 - Dim SmokeReturned As Integer = 0 + Dim SmokeParticles As Integer = 0 Do - Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination = New Vector3(0, 0, 0) + Dim SmokePosition = BattleScreen.OwnPokemonNPC.Position + New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = BattleScreen.OwnPokemonNPC.Position - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Cloud") + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) Dim SmokeEntity As Entity = Animations.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - Animations.AnimationMoveEntity(SmokeEntity, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) - If SmokeEntity.Position = SmokeDestination Then - Animations.RemoveEntity(SmokeEntity) - End If - Threading.Interlocked.Increment(SmokeReturned) - Loop While SmokeReturned <= 38 + Animations.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) - Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.01F, False, False, 0.0F, 6.0F,,, 3) + Threading.Interlocked.Increment(SmokeParticles) + Loop While SmokeParticles <= 38 - Animations.AnimationScaleEntity(BattleScreen.OppPokemonNPC, False, 0.05F, 0.05F, 0.05F, 0.02F, 0.0F, 0.0F, "1") - Animations.AnimationFadeEntity(BattleScreen.OppPokemonNPC, 1, False, 0.0F, 0.0F, 0.0F) + Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OppPokemonNPC.Position.Z, 0.01F, False, False, 0.0F, 6.0F,,, 3) + + Animations.ScaleEntity(Nothing, False, False, 0.05F, 0.05F, 0.05F, 0.02F, 0.0F, 0.0F, "1") + Animations.FadeEntity(Nothing, False, 1, False, 0.0F, 0.0F, 0.0F) Case 2 - Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) - + Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y - 0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) Case 3, 5 - Animations.AnimationRotateEntity(BallEntity, 0, 0, 0.05F, 0, 0, 1.0F, 0.0F, 4.0F, False, False, True, True) + Animations.RotateEntity(BallEntity, False, 0, 0, 0.05F, 0, 0, 1.0F, 0.0F, 4.0F, False, False, True, True) Case 4, 6 - Animations.AnimationRotateEntity(BallEntity, 0, 0, -0.05F, 0, 0, -1.0F, 0.0F, 4.0F, False, False, True, True) + Animations.RotateEntity(BallEntity, False, 0, 0, -0.05F, 0, 0, -1.0F, 0.0F, 4.0F, False, False, True, True) Case 7 ' Catch Animation For i = 0 To 2 Dim StarPosition As Vector3 = New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z) Dim StarDestination As Vector3 = New Vector3(StarPosition.X, StarPosition.Y + 0.4F, StarPosition.Z - ((1 - i) * 0.4F)) Dim StarEntity As Entity = Animations.SpawnEntity(StarPosition, TextureManager.GetTexture("Textures\Battle\BallCatchStar"), New Vector3(0.1F), 1.0F) - Animations.AnimationMoveEntity(StarEntity, StarDestination.X, StarDestination.Y, StarDestination.Z, 0.01F, False, False, 0.0F, 0.0F,,, 3) - If StarEntity.Position = StarDestination Then - Animations.RemoveEntity(StarEntity) - End If + Animations.MoveEntity(StarEntity, True, StarDestination.X, StarDestination.Y, StarDestination.Z, 0.01F, False, False, 0.0F, 0.0F,,, 3) Next - Animations.AnimationMoveEntity(BallEntity, BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) + Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y - 0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) Case 8 - Animations.AnimationFadeEntity(BallEntity, 0.01F, False, 0.0F, 0.0F, 0.0F) + Animations.FadeEntity(BallEntity, True, 0.01F, False, 0.0F, 0.0F, 0.0F) Case 21 ' Break Animation + ' Ball Opens + Dim SmokeParticles As Integer = 0 + Do + Dim SmokePosition = BattleScreen.OwnPokemonNPC.Position + Dim SmokeDestination = BattleScreen.OwnPokemonNPC.Position + New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + + Dim SmokeEntity As Entity = Animations.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + + Animations.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + + Threading.Interlocked.Increment(SmokeParticles) + Loop While SmokeParticles <= 38 + + ' Pokemon appears + Animations.FadeEntity(Nothing, False, 1, False, 1, 0.0F, 0.0F) + Animations.ScaleEntity(Nothing, False, True, PokemonScale.X, PokemonScale.Y, PokemonScale.Z, 0.02F, 0.0F, 0.0F, "1") End Select End Sub From 2c3f46cd2e7aa0ecf827eefea50ee56cfc92255c Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 21 Oct 2021 20:42:40 +0200 Subject: [PATCH 06/57] Updated everything to the new Battle Animations system and the newest commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated Attacks: Ember, Absorb, Growl, Pound Updated status effects & shared animations: Poisoned, Switching Pokémon (own and opponent's) --- P3D/Battle/BattleAnimations/BAPlaySound.vb | 28 +++ P3D/Battle/BattleSystemV2/Battle.vb | 217 ++++++++++-------- .../QueryObjects/AnimationQueryObject.vb | 91 +------- P3D/P3D.vbproj | 5 +- P3D/Pokemon/Attacks/Fire/Ember.vb | 51 ++-- P3D/Pokemon/Attacks/Grass/Absorb.vb | 6 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 13 +- P3D/Pokemon/Attacks/Normal/Pound.vb | 5 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 8 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 20 +- P3D/Screens/Battle/BattleCatchScreen.vb | 28 +-- 11 files changed, 229 insertions(+), 243 deletions(-) create mode 100644 P3D/Battle/BattleAnimations/BAPlaySound.vb diff --git a/P3D/Battle/BattleAnimations/BAPlaySound.vb b/P3D/Battle/BattleAnimations/BAPlaySound.vb new file mode 100644 index 000000000..120ec1106 --- /dev/null +++ b/P3D/Battle/BattleAnimations/BAPlaySound.vb @@ -0,0 +1,28 @@ +Public Class BAPlaySound + + Inherits BattleAnimation3D + + Private soundfile As String + Private stopMusic As Boolean + Private IsPokemon As Boolean + + + Public Sub New(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) + MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + Me.Scale = New Vector3(1.0F) + soundfile = sound + Me.Visible = False + Me.stopMusic = stopMusic + Me.IsPokemon = IsPokemon + AnimationType = AnimationTypes.Sound + End Sub + + Public Overrides Sub DoActionActive() + If IsPokemon = True Then + SoundManager.PlayPokemonCry(CInt(soundfile)) + Else + SoundManager.PlaySound(soundfile, stopMusic) + End If + Me.Ready = True + End Sub +End Class \ No newline at end of file diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index a93c5e4bc..058885f11 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2706,12 +2706,12 @@ ChangeCameraAngle(1, own, BattleScreen) 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message @@ -3427,7 +3427,7 @@ Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) @@ -3708,10 +3708,10 @@ Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While - StatAnimation.PlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) + StatAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString @@ -3998,10 +3998,10 @@ End If Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 0, 0) - HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 1, 0) - HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 2, 0) - HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 3, 0) + HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 0, 0) + HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 1, 0) + HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 2, 0) + HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 3, 0) BattleScreen.BattleQuery.Add(HitAnimation) If own = True Then @@ -5357,20 +5357,22 @@ If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP / 8), True, True, BattleScreen, "The poison hurt " & .OwnPokemon.GetDisplayName() & ".", "poison") @@ -5381,20 +5383,22 @@ Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP * multiplier), True, True, BattleScreen, "The toxic hurt " & .OwnPokemon.GetDisplayName() & ".", "badpoison") @@ -5413,13 +5417,13 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) - BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage @@ -6151,21 +6155,24 @@ If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP / 8), False, False, BattleScreen, "The poison hurt " & .OppPokemon.GetDisplayName() & ".", "poison") End If @@ -6175,20 +6182,22 @@ Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") @@ -6206,13 +6215,13 @@ End If 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage @@ -6783,7 +6792,7 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) ' Ball Closes - BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) @@ -6796,19 +6805,19 @@ Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - BallReturn.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.FadeEntity(Nothing, False, 1, False, 0, 1, 0) - BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns - BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position, TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.MoveEntity(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationMove(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) BattleScreen.AddToQuery(InsertIndex, BallReturn) @@ -6847,13 +6856,13 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) - BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position + New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.MoveEntity(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationMove(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens - BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do @@ -6867,17 +6876,17 @@ Dim SmokeEntity As Entity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - BallThrow.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.FadeEntity(Nothing, False, 1, True, 1, 4, 0) - BallThrow.PlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If @@ -7125,8 +7134,8 @@ If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - Faint.PlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.MoveEntity(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) + Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + Faint.AnimationMove(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) @@ -7155,28 +7164,29 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Smoke" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - - BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) - BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) @@ -7216,28 +7226,29 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Smoke" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - - BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) - BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) @@ -7267,31 +7278,33 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) - BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) - ' Ball Opens - BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) + ' Ball opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As String = "Textures\Battle\Smoke" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) - BallThrow.PlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index 84eca1a23..ff0d88d2f 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -100,7 +100,7 @@ Public Sub RemoveEntity(Entity As Entity) SpawnedEntities.Remove(Entity) End Sub - Public Sub ChangeEntityTexture(ByVal Entity As Entity, RemoveEntityAfter As Boolean, ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) + Public Sub AnimationChangeTexture(ByVal Entity As Entity, RemoveEntityAfter As Boolean, ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) Dim TextureChangeEntity As Entity If Entity Is Nothing Then @@ -119,7 +119,7 @@ End If End Sub - Public Sub MoveEntity(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) + Public Sub AnimationMove(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) Dim MoveEntity As Entity Dim Destination As Vector3 @@ -149,12 +149,12 @@ If RemoveEntityAfter = True Then If baEntityMove.CanRemove = True Then - RemoveEntity(Entity) + RemoveEntity(MoveEntity) End If End If End Sub - Public Sub FadeEntity(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) + Public Sub AnimationFade(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) Dim FadeEntity As Entity If Entity Is Nothing Then FadeEntity = CurrentEntity @@ -172,11 +172,11 @@ If RemoveEntityAfter = True Then If baEntityOpacity.CanRemove = True Then - RemoveEntity(Entity) + RemoveEntity(FadeEntity) End If End If End Sub - Public Sub RotateEntity(Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) + Public Sub AnimationRotate(Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) Dim RotateEntity As Entity If Entity Is Nothing Then RotateEntity = CurrentEntity @@ -190,11 +190,11 @@ AnimationSequence.Add(baEntityRotate) If RemoveEntityAfter = True Then If baEntityRotate.CanRemove = True Then - RemoveEntity(Entity) + RemoveEntity(RotateEntity) End If End If End Sub - Public Sub ScaleEntity(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") + Public Sub AnimationScale(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") Dim ScaleEntity As Entity If Entity Is Nothing Then ScaleEntity = CurrentEntity @@ -202,89 +202,22 @@ ScaleEntity = Entity End If - Dim Position As Vector3 = ScaleEntity.Position Dim Scale As Vector3 = ScaleEntity.Scale Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ) Dim baBillSize As BAEntityScale = New BAEntityScale(ScaleEntity, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) AnimationSequence.Add(baBillSize) If RemoveEntityAfter = True Then If baBillSize.CanRemove = True Then - RemoveEntity(Entity) + RemoveEntity(ScaleEntity) End If End If End Sub - Public Sub AnimationSpawnFadingEntity(ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal Texture As String, ByVal ScaleX As Single, ByVal ScaleY As Single, ByVal ScaleZ As Single, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 1.0F) - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation BEFORE CALLING AnimationSequenceBegin") - Else - Dim stringArray = Texture.Split(","c) - Dim texture2D As Texture2D = Nothing - - If stringArray.Length = 1 Then - texture2D = TextureManager.GetTexture(Texture) - ElseIf stringArray.Length = 5 Then - Dim r As Rectangle = New Rectangle(CInt(stringArray(1)), CInt(stringArray(2)), CInt(stringArray(3)), CInt(stringArray(4))) - texture2D = TextureManager.GetTexture(stringArray(0), r, "") - End If - - If BattleFlipped Then - PositionX -= PositionX * 2.0F - PositionZ -= PositionZ * 2.0F - End If - - Dim Position As Vector3 = New Vector3(CurrentEntity.Position.X + PositionX, CurrentEntity.Position.Y + PositionY, CurrentEntity.Position.Z + PositionZ) - Dim Scale As Vector3 = New Vector3(ScaleX, ScaleY, ScaleZ) - - Dim baOpacity As BAOpacity = New BAOpacity(Position, texture2D, Scale, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) - AnimationSequence.Add(baOpacity) - End If + Public Sub AnimationPlaySound(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) + Dim baSound As BAPlaySound = New BAPlaySound(sound, startDelay, endDelay, stopMusic, IsPokemon) + AnimationSequence.Add(baSound) End Sub - Public Sub AnimationSpawnMovingEntity(ByVal PositionX As Single, ByVal PositionY As Single, ByVal PositionZ As Single, ByVal Texture As String, ByVal ScaleX As Single, ByVal ScaleY As Single, ByVal ScaleZ As Single, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AttackSpawnMovingAnimation BEFORE CALLING AnimationSequenceBegin") - Else - Dim stringArray = Texture.Split(","c) - Dim texture2D As Texture2D = Nothing - - If stringArray.Length = 1 Then - texture2D = TextureManager.GetTexture(Texture) - ElseIf stringArray.Length = 5 Then - Dim r As Rectangle = New Rectangle(CInt(stringArray(1)), CInt(stringArray(2)), CInt(stringArray(3)), CInt(stringArray(4))) - texture2D = TextureManager.GetTexture(stringArray(0), r, "") - End If - - If BattleFlipped Then - PositionX -= PositionX * 2.0F - PositionZ -= PositionZ * 2.0F - DestinationX -= DestinationX * 2.0F - DestinationZ -= DestinationZ * 2.0F - SpinXSpeed -= SpinXSpeed * 2.0F - SpinZSpeed -= SpinZSpeed * 2.0F - End If - - Dim Position As Vector3 = New Vector3(CurrentEntity.Position.X + PositionX, CurrentEntity.Position.Y + PositionY, CurrentEntity.Position.Z + PositionZ) - Dim Scale As Vector3 = New Vector3(ScaleX, ScaleY, ScaleZ) - Dim Destination As Vector3 = New Vector3(CurrentEntity.Position.X + DestinationX, CurrentEntity.Position.Y + DestinationY, CurrentEntity.Position.Z + DestinationZ) - - Dim baMove As BAMove = New BAMove(Position, texture2D, Scale, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) - AnimationSequence.Add(baMove) - End If - End Sub - Public Sub PlaySound(ByVal sound As String, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal stopMusic As Boolean = False, Optional ByVal IsPokemon As Boolean = False) - If CurrentEntity Is Nothing Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationPlaySound OUTSIDE OF ATTACK ANIMATION DELEGATE") - ElseIf Not AnimationStarted Then - Logger.Log(Logger.LogTypes.Warning, "ATTEMPT TO USE AnimationPlaySound BEFORE CALLING AnimationSequenceBegin") - Else - Dim baSound As BASound = New BASound(sound, startDelay, endDelay, stopMusic, IsPokemon) - AnimationSequence.Add(baSound) - End If End Sub End Class diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index a3208c826..892230fc9 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -27551,7 +27551,7 @@ <Compile Include="Battle\BattleAnimations\BAEntityOpacity.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityTextureChange.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityScale.vb" /> - <Compile Include="Battle\BattleAnimations\BASound.vb" /> + <Compile Include="Battle\BattleAnimations\BAPlaySound.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\AnimationQueryObject.vb" /> <Compile Include="Dialogues\ImageView.vb" /> <Compile Include="Overworld\NotificationPopup.vb" /> @@ -29229,9 +29229,6 @@ <None Include="README.md" /> </ItemGroup> <ItemGroup> - <Compile Include="Battle\BattleAnimations\BAMove.vb" /> - <Compile Include="Battle\BattleAnimations\BAOpacity.vb" /> - <Compile Include="Battle\BattleAnimations\BARotation.vb" /> <Compile Include="Battle\BattleAnimations\BattleAnimation3D.vb" /> <Compile Include="Battle\BattleStats.vb" /> <Compile Include="Battle\BattleSystemV2\Battle.vb" /> diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 03a9cfffc..1356505d9 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -65,10 +65,14 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) + Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) + + MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 - MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) + MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + i += 1 Next BattleScreen.BattleQuery.Add(MoveAnimation) @@ -76,32 +80,37 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) + + MoveAnimation.AnimationMove(FireballEntity, True, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0, 0.1, 0.5, 0) For i = 0 To 12 - MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(3.0 - i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) + MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + i += 1 Next - MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + Dim FireEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim FireEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim FireEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + + MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index 6b8075175..9590c3d18 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -96,11 +96,13 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) Dim maxAmount As Integer = 8 Dim currentAmount As Integer = 0 - MoveAnimation.PlaySound("Battle\Attacks\Grass\Absorb", 0, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) While currentAmount <= maxAmount Dim yPos As Single = CSng(Random.NextDouble() * 0.5) Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) - MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Grass\Absorb", 0.35, 0.35, 0.35, 1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount), 0.0, 0.1, 0.5) + Dim AbsorbEntity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Grass\Absorb"), New Vector3(0.35F), 1) + MoveAnimation.AnimationMove(AbsorbEntity, True, 1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount), 0.0, 0.1, 0.5) + Threading.Interlocked.Increment(currentAmount) End While diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index e01dafc73..369515629 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -64,11 +64,14 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.PlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) + Dim SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 1, 1) + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, True, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 3, 1) + BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 5cf85b3e2..d14a3c279 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -57,8 +57,9 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.PlaySound("Battle\Attacks\Pound", 0.5, 2.5) - MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) + Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 3) + MoveAnimation.AnimationFade(PoundEntity, True, 1.0F, False, 0.0F, 3, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 99e61e709..668b4b545 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,16 +54,16 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.MoveEntity(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.MoveEntity(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.AnimationMove(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.PlaySound("Battle\Attacks\Normal\Tackle", 0, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(1.0F), 1.0F) - MoveAnimation.FadeEntity(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) + MoveAnimation.AnimationFade(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 3cc76f0a4..fa0fb7abe 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -69,8 +69,8 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(CurrentEntity.Position, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) - MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) - MoveAnimation.MoveEntity(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub @@ -80,25 +80,25 @@ Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) - MoveAnimation.MoveEntity(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 3, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Screens/Battle/BattleCatchScreen.vb b/P3D/Screens/Battle/BattleCatchScreen.vb index 75ea37b7a..9de11a298 100644 --- a/P3D/Screens/Battle/BattleCatchScreen.vb +++ b/P3D/Screens/Battle/BattleCatchScreen.vb @@ -258,7 +258,7 @@ Select Case Me.AnimationIndex Case 0 PokemonScale = BattleScreen.OppPokemonNPC.Scale - Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) + Animations.AnimationMove(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X - 0.05F, 0.0F, BattleScreen.OppPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) Case 1 Dim SmokeParticles As Integer = 0 Do @@ -272,31 +272,31 @@ Dim SmokeEntity As Entity = Animations.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - Animations.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Animations.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeParticles) Loop While SmokeParticles <= 38 - Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OppPokemonNPC.Position.Z, 0.01F, False, False, 0.0F, 6.0F,,, 3) + Animations.AnimationMove(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OppPokemonNPC.Position.Z, 0.01F, False, False, 0.0F, 6.0F,,, 3) - Animations.ScaleEntity(Nothing, False, False, 0.05F, 0.05F, 0.05F, 0.02F, 0.0F, 0.0F, "1") - Animations.FadeEntity(Nothing, False, 1, False, 0.0F, 0.0F, 0.0F) + Animations.AnimationScale(Nothing, False, False, 0.05F, 0.05F, 0.05F, 0.02F, 0.0F, 0.0F, "1") + Animations.AnimationFade(Nothing, False, 1, False, 0.0F, 0.0F, 0.0F) Case 2 - Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y - 0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) + Animations.AnimationMove(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y - 0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) Case 3, 5 - Animations.RotateEntity(BallEntity, False, 0, 0, 0.05F, 0, 0, 1.0F, 0.0F, 4.0F, False, False, True, True) + Animations.AnimationRotate(BallEntity, False, 0, 0, 0.05F, 0, 0, 1.0F, 0.0F, 4.0F, False, False, True, True) Case 4, 6 - Animations.RotateEntity(BallEntity, False, 0, 0, -0.05F, 0, 0, -1.0F, 0.0F, 4.0F, False, False, True, True) + Animations.AnimationRotate(BallEntity, False, 0, 0, -0.05F, 0, 0, -1.0F, 0.0F, 4.0F, False, False, True, True) Case 7 ' Catch Animation For i = 0 To 2 Dim StarPosition As Vector3 = New Vector3(BattleScreen.OppPokemonNPC.Position.X - 0.05F, -0.35F, BattleScreen.OppPokemonNPC.Position.Z) Dim StarDestination As Vector3 = New Vector3(StarPosition.X, StarPosition.Y + 0.4F, StarPosition.Z - ((1 - i) * 0.4F)) Dim StarEntity As Entity = Animations.SpawnEntity(StarPosition, TextureManager.GetTexture("Textures\Battle\BallCatchStar"), New Vector3(0.1F), 1.0F) - Animations.MoveEntity(StarEntity, True, StarDestination.X, StarDestination.Y, StarDestination.Z, 0.01F, False, False, 0.0F, 0.0F,,, 3) + Animations.AnimationMove(StarEntity, True, StarDestination.X, StarDestination.Y, StarDestination.Z, 0.01F, False, False, 0.0F, 0.0F,,, 3) Next - Animations.MoveEntity(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y - 0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) + Animations.AnimationMove(BallEntity, False, BattleScreen.OppPokemonNPC.Position.X, BattleScreen.OwnPokemonNPC.Position.Y - 0.35F, BattleScreen.OppPokemonNPC.Position.Z, 0.02F, False, False, 0.0F, 6.0F,,, 3) Case 8 - Animations.FadeEntity(BallEntity, True, 0.01F, False, 0.0F, 0.0F, 0.0F) + Animations.AnimationFade(BallEntity, True, 0.01F, False, 0.0F, 0.0F, 0.0F) Case 21 ' Break Animation ' Ball Opens Dim SmokeParticles As Integer = 0 @@ -311,14 +311,14 @@ Dim SmokeEntity As Entity = Animations.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - Animations.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Animations.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeParticles) Loop While SmokeParticles <= 38 ' Pokemon appears - Animations.FadeEntity(Nothing, False, 1, False, 1, 0.0F, 0.0F) - Animations.ScaleEntity(Nothing, False, True, PokemonScale.X, PokemonScale.Y, PokemonScale.Z, 0.02F, 0.0F, 0.0F, "1") + Animations.AnimationFade(Nothing, False, 1, False, 1, 0.0F, 0.0F) + Animations.AnimationScale(Nothing, False, True, PokemonScale.X, PokemonScale.Y, PokemonScale.Z, 0.02F, 0.0F, 0.0F, "1") End Select End Sub From 673178616f721e46739d09e81846981788c5693d Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 21 Oct 2021 20:44:38 +0200 Subject: [PATCH 07/57] =?UTF-8?q?Added=20Battle=20Animation=20type=20Backg?= =?UTF-8?q?round=20to=20temporarily=20draw=20a=20texture=20to=20the=20scre?= =?UTF-8?q?en=20behind=20the=20Pok=C3=A9mon=20but=20in=20front=20of=20the?= =?UTF-8?q?=20world?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- P3D/Battle/BattleAnimations/BABackground.vb | 60 +++++++++++++++++ .../BattleAnimations/BattleAnimation3D.vb | 1 + P3D/Battle/BattleSystemV2/BattleScreen.vb | 65 ++++++++++++++++++- .../QueryObjects/AnimationQueryObject.vb | 19 +++++- P3D/P3D.vbproj | 1 + 5 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 P3D/Battle/BattleAnimations/BABackground.vb diff --git a/P3D/Battle/BattleAnimations/BABackground.vb b/P3D/Battle/BattleAnimations/BABackground.vb new file mode 100644 index 000000000..929acc114 --- /dev/null +++ b/P3D/Battle/BattleAnimations/BABackground.vb @@ -0,0 +1,60 @@ +Public Class BABackground + + Inherits BattleAnimation3D + + Public TransitionSpeed As Single = 0.01F + Public FadeIn As Boolean = False + Public FadeOut As Boolean = False + Public BackgroundOpacity As Single = 1.0F + Public EndState As Single = 0.0F + Public Texture As Texture2D + + Public Sub New(ByVal Texture As Texture2D, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, FadeOut As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal StartState As Single = 0.0F) + MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + Me.Texture = Texture + Me.EndState = EndState + Me.FadeIn = FadeIn + Me.FadeOut = FadeOut + Me.TransitionSpeed = TransitionSpeed + + Me.BackgroundOpacity = StartState + Me.Visible = False + + Me.AnimationType = AnimationTypes.Background + End Sub + + Public Overrides Sub Render() + If startDelay = 0.0F AndAlso Me.BackgroundOpacity > 0.0F Then + Core.SpriteBatch.Draw(Me.Texture, New Rectangle(0, 0, windowSize.Width, windowSize.Height), New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity))) + End If + End Sub + + Public Overrides Sub DoActionActive() + If Me.FadeIn = True Then + If Me.EndState > Me.BackgroundOpacity Then + Me.BackgroundOpacity += Me.TransitionSpeed + If Me.BackgroundOpacity >= Me.EndState Then + Me.BackgroundOpacity = Me.EndState + Me.FadeIn = False + Me.EndState = 0 + End If + End If + Else + If Me.FadeOut = True Then + If Me.EndState < Me.BackgroundOpacity Then + Me.BackgroundOpacity -= Me.TransitionSpeed + If Me.BackgroundOpacity <= Me.EndState Then + Me.BackgroundOpacity = Me.EndState + End If + End If + If Me.BackgroundOpacity = Me.EndState Then + Me.Ready = True + End If + Else + Me.BackgroundOpacity = Me.EndState + Me.Ready = True + End If + End If + End Sub + +End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb index 1aeb45e27..8011ce1d2 100644 --- a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb +++ b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb @@ -17,6 +17,7 @@ Wait ViewPokeBill Sound + Background End Enum Public AnimationType As AnimationTypes = AnimationTypes.Nothing diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index 4cc142822..a4dcf7821 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -768,7 +768,33 @@ Public Overrides Sub Draw() SkyDome.Draw(45.0F) + + Dim ForegroundEntities As New List(Of Entity) + For Each e As Entity In Level.Entities + If e Is OwnPokemonNPC Then + ForegroundEntities.Add(e) + End If + If e Is OppPokemonNPC Then + ForegroundEntities.Add(e) + End If + If e Is OwnTrainerNPC Then + ForegroundEntities.Add(e) + End If + If e Is OppTrainerNPC Then + ForegroundEntities.Add(e) + End If + If e Is OwnPokemonModel Then + ForegroundEntities.Add(e) + End If + If e Is OppPokemonModel Then + ForegroundEntities.Add(e) + End If + Next + If ForegroundEntities.Count > 0 Then + ForegroundEntities = (From f In ForegroundEntities Order By f.CameraDistance Descending).ToList() + End If Level.Draw() + World.DrawWeather(Screen.Level.World.CurrentMapWeather) If HasToWaitPVP() = True Then @@ -781,13 +807,25 @@ End If End If + Dim ForegroundAnimationList As New List(Of AnimationQueryObject) If BattleQuery.Count > 0 Then Dim cIndex As Integer = 0 Dim cQuery As New List(Of QueryObject) nextIndex: If BattleQuery.Count > cIndex Then Dim cQueryObject As QueryObject = BattleQuery(cIndex) - cQuery.Add(cQueryObject) + If cQueryObject.QueryType = QueryObject.QueryTypes.MoveAnimation Then + If CType(cQueryObject, AnimationQueryObject).DrawBeforeEntities = False Then + cQuery.Add(cQueryObject) + Else + ForegroundAnimationList.Add(CType(cQueryObject, AnimationQueryObject)) + cIndex += 1 + GoTo nextIndex + End If + Else + cQuery.Add(cQueryObject) + End If + If cQueryObject.PassThis = True Then cIndex += 1 @@ -802,6 +840,31 @@ nextIndex: Next End If + If ForegroundAnimationList.Count > 0 Then + For i = 0 To ForegroundEntities.Count - 1 + ForegroundEntities(i).Render() + DebugDisplay.MaxVertices += ForegroundEntities(i).VertexCount + Next + + Dim cIndex As Integer = 0 + Dim cQuery As New List(Of QueryObject) +nextIndexForeground: + If ForegroundAnimationList.Count > cIndex Then + Dim cQueryObject As QueryObject = ForegroundAnimationList(cIndex) + cQuery.Add(cQueryObject) + + If cQueryObject.PassThis = True Then + cIndex += 1 + GoTo nextIndexForeground + End If + End If + + cQuery.Reverse() + + For Each cQueryObject As QueryObject In cQuery + cQueryObject.Draw(Me) + Next + End If 'Core.SpriteBatch.DrawString(FontManager.MiniFont, "Battle system not final!", New Vector2(0, Core.windowSize.Height - 20), Color.White) TextBox.Draw() diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index ff0d88d2f..fba7a46b3 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -10,6 +10,7 @@ Public SpawnedEntities As List(Of Entity) Public CurrentEntity As Entity Public CurrentModel As ModelEntity + Public DrawBeforeEntities As Boolean Public Overrides ReadOnly Property IsReady As Boolean Get @@ -17,9 +18,10 @@ End Get End Property - Public Sub New(ByVal entity As Entity, ByVal BattleFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing) + Public Sub New(ByVal entity As Entity, ByVal BattleFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing, Optional DrawBeforeEntities As Boolean = False) MyBase.New(QueryTypes.MoveAnimation) Me.AnimationSequence = New List(Of BattleAnimation3D) + Me.DrawBeforeEntities = DrawBeforeEntities If BattleFlipped <> Nothing Then Me.BattleFlipped = BattleFlipped End If @@ -28,14 +30,22 @@ AnimationSequenceBegin() End Sub Public Overrides Sub Draw(ByVal BV2Screen As BattleScreen) + Dim Backgrounds As New List(Of Entity) + Dim RenderObjects As New List(Of Entity) For Each a As BattleAnimation3D In Me.AnimationSequence - RenderObjects.Add(a) + If a.AnimationType = BattleAnimation3D.AnimationTypes.Background Then + Backgrounds.Add(a) + Else + RenderObjects.Add(a) + End If Next If RenderObjects.Count > 0 Then RenderObjects = (From r In RenderObjects Order By r.CameraDistance Descending).ToList() End If - + For Each [Object] As Entity In Backgrounds + [Object].Render() + Next For Each [Object] As Entity In RenderObjects [Object].Render() Next @@ -218,6 +228,9 @@ AnimationSequence.Add(baSound) End Sub + Public Sub AnimationBackground(Texture As Texture2D, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal FadeOut As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 0.0F) + Dim baBackground As BABackground = New BABackground(Texture, TransitionSpeed, FadeIn, FadeOut, EndState, startDelay, endDelay, startState) + AnimationSequence.Add(baBackground) End Sub End Class diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 892230fc9..28784aeb7 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -27546,6 +27546,7 @@ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Compile Include="Battle\BattleAnimations\BAEntityColor.vb" /> + <Compile Include="Battle\BattleAnimations\BABackground.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityRotate.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityMove.vb" /> <Compile Include="Battle\BattleAnimations\BAEntityOpacity.vb" /> From 758154551bde1e99a56e36eeae2e4fd9a13dac80 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <66885565+JappaWakkaP3D@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:17:36 +0200 Subject: [PATCH 08/57] Battle Animations 22-08-2021 Made the Battle Animation implementation functional Added animations for: Stats Increasing Stats Decreasing Status Effects - Poisoned - Burned Attacks - Ember - Growl - Pound - Tackle - Poison Sting --- P3D/Battle/BattleSystemV2/Battle.vb | 1112 ++++++++++----------- P3D/Pokemon/Attacks/Fire/Ember.vb | 51 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 11 +- P3D/Pokemon/Attacks/Normal/Pound.vb | 5 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 9 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 34 +- 6 files changed, 582 insertions(+), 640 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 058885f11..2b322aaa2 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2707,13 +2707,12 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) - Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) @@ -3412,26 +3411,27 @@ End If '***STAT INCREASE ANIMATION*** - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statUp") + Dim Texture As String = "Textures\Battle\StatChange\statDown" + Dim Position As Vector3 = New Vector3(0, -0.4, 0) + Dim Destination As Vector3 = New Vector3(0, 0.8, 0) + Dim Scale As Vector3 = New Vector3(0.2F) Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), pNPC.Position.Z + zPos) - Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), zPos + pNPC.Position.Z) - Dim Scale As New Vector3(0.2F) - - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) + Position.X = xPos + Position.Z = zPos + Destination.X = xPos + Destination.Z = zPos Dim startDelay As Double = 5.0 * Random.NextDouble() - - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) - BattleScreen.BattleQuery.Add(StatAnimation) + BattleScreen.BattleQuery.Add(MoveAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -3693,26 +3693,27 @@ End If End If '***STAT DECREASE ANIMATION*** - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statDown") + Dim Texture As String = "Textures\Battle\StatChange\statDown" + Dim Position As Vector3 = New Vector3(0, 0.8, 0) + Dim Destination As Vector3 = New Vector3(0, -0.4, 0) + Dim Scale As Vector3 = New Vector3(0.2F) Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), pNPC.Position.Z + zPos) - Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), zPos + pNPC.Position.Z) - Dim Scale As New Vector3(0.2F) - - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) + Position.X = xPos + Position.Z = zPos + Destination.X = xPos + Destination.Z = zPos Dim startDelay As Double = 5.0 * Random.NextDouble() - - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While - StatAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) - BattleScreen.BattleQuery.Add(StatAnimation) + MoveAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) + BattleScreen.BattleQuery.Add(MoveAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -3977,10 +3978,8 @@ Public Sub ReduceHP(ByVal HPAmount As Integer, ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String, ByVal sound As String) Dim p As Pokemon = BattleScreen.OwnPokemon - Dim pNPC As Entity = BattleScreen.OwnPokemonNPC If own = False Then p = BattleScreen.OppPokemon - pNPC = BattleScreen.OppPokemonNPC End If If p.HP > 0 And p.Status <> Pokemon.StatusProblems.Fainted Then @@ -3997,13 +3996,6 @@ BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(sound, False, 0.0F)) End If - Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 0, 0) - HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 1, 0) - HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 2, 0) - HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 3, 0) - BattleScreen.BattleQuery.Add(HitAnimation) - If own = True Then BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, HPAmount, New Vector2(200, 256))) Else @@ -4756,14 +4748,14 @@ #End Region - ''' <summary> - ''' Switches camera to angle - ''' </summary> - ''' <param name="direction">0=main battle/1=own pokemon/2=opp pokemon</param> - ''' <param name="own">If the code comes from the own player or not.</param> - ''' <param name="BattleScreen">Battlescreen reference</param> - ''' <param name="AddPVP">If the call should get added the PVP list or the own queue.</param> - Public Sub ChangeCameraAngle(ByVal direction As Integer, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Optional ByVal AddPVP As Boolean = False) + ''' <summary> + ''' Switches camera to angle + ''' </summary> + ''' <param name="direction">0=main battle/1=own pokemon/2=opp pokemon</param> + ''' <param name="own">If the code comes from the own player or not.</param> + ''' <param name="BattleScreen">Battlescreen reference</param> + ''' <param name="AddPVP">If the call should get added the PVP list or the own queue.</param> + Public Sub ChangeCameraAngle(ByVal direction As Integer, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Optional ByVal AddPVP As Boolean = False) Dim q As CameraQueryObject = Nothing Select Case direction @@ -5357,22 +5349,20 @@ If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP / 8), True, True, BattleScreen, "The poison hurt " & .OwnPokemon.GetDisplayName() & ".", "poison") @@ -5383,22 +5373,20 @@ Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP * multiplier), True, True, BattleScreen, "The toxic hurt " & .OwnPokemon.GetDisplayName() & ".", "badpoison") @@ -5418,14 +5406,12 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) - 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6155,24 +6141,21 @@ If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) - 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP / 8), False, False, BattleScreen, "The poison hurt " & .OppPokemon.GetDisplayName() & ".", "poison") End If @@ -6182,22 +6165,20 @@ Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") @@ -6216,14 +6197,12 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) - 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6748,38 +6727,38 @@ End If Else If BattleScreen.IsTrainerBattle = True Then - EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, True) - End If - Else - EndBattle(EndBattleReasons.LoseWild, BattleScreen, False) - End If - End If - End With - End Sub + EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, False) + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, True) + End If + Else + EndBattle(EndBattleReasons.LoseWild, BattleScreen, False) + End If + End If + End With + End Sub - Public Sub ApplyOwnBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OwnUsedBatonPass = True Then - BattleScreen.FieldEffects.OwnUsedBatonPass = False + Public Sub ApplyOwnBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OwnUsedBatonPass = True Then + BattleScreen.FieldEffects.OwnUsedBatonPass = False - BattleScreen.OwnPokemon.StatAttack = BattleScreen.FieldEffects.OwnBatonPassStats(0) - BattleScreen.OwnPokemon.StatDefense = BattleScreen.FieldEffects.OwnBatonPassStats(1) - BattleScreen.OwnPokemon.StatSpAttack = BattleScreen.FieldEffects.OwnBatonPassStats(2) - BattleScreen.OwnPokemon.StatSpDefense = BattleScreen.FieldEffects.OwnBatonPassStats(3) - BattleScreen.OwnPokemon.StatSpeed = BattleScreen.FieldEffects.OwnBatonPassStats(4) - BattleScreen.OwnPokemon.Evasion = BattleScreen.FieldEffects.OwnBatonPassStats(5) - BattleScreen.OwnPokemon.Accuracy = BattleScreen.FieldEffects.OwnBatonPassStats(6) + BattleScreen.OwnPokemon.StatAttack = BattleScreen.FieldEffects.OwnBatonPassStats(0) + BattleScreen.OwnPokemon.StatDefense = BattleScreen.FieldEffects.OwnBatonPassStats(1) + BattleScreen.OwnPokemon.StatSpAttack = BattleScreen.FieldEffects.OwnBatonPassStats(2) + BattleScreen.OwnPokemon.StatSpDefense = BattleScreen.FieldEffects.OwnBatonPassStats(3) + BattleScreen.OwnPokemon.StatSpeed = BattleScreen.FieldEffects.OwnBatonPassStats(4) + BattleScreen.OwnPokemon.Evasion = BattleScreen.FieldEffects.OwnBatonPassStats(5) + BattleScreen.OwnPokemon.Accuracy = BattleScreen.FieldEffects.OwnBatonPassStats(6) - If BattleScreen.FieldEffects.OwnBatonPassConfusion = True Then - BattleScreen.FieldEffects.OwnBatonPassConfusion = False - BattleScreen.OwnPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OwnBatonPassConfusion = True Then + BattleScreen.FieldEffects.OwnBatonPassConfusion = False + BattleScreen.OwnPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") - HasSwitchedInOwn = True + Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") + HasSwitchedInOwn = True If FirstTime = False Then Dim insertMessage As String = message @@ -6796,28 +6775,24 @@ Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination As Vector3 = New Vector3(0, 0, 0) + Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As String = "Textures\Battle\Cloud" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) - + BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) + BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position, TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.AddToQuery(InsertIndex, BallReturn) @@ -6855,311 +6830,304 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - - Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position + New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) - Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As String = "Textures\Battle\Cloud" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity As Entity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - - BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) - + BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If With BattleScreen - If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then - .FieldEffects.UsedPokemon.Add(NewPokemonIndex) - End If + If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then + .FieldEffects.UsedPokemon.Add(NewPokemonIndex) + End If - If Not .OwnPokemon.Item Is Nothing Then - If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then - If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then - BattleScreen.FieldEffects.AmuletCoin += 1 - End If - End If - End If + If Not .OwnPokemon.Item Is Nothing Then + If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then + If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then + BattleScreen.FieldEffects.AmuletCoin += 1 + End If + End If + End If - Dim p As Pokemon = .OwnPokemon - Dim op As Pokemon = .OppPokemon + Dim p As Pokemon = .OwnPokemon + Dim op As Pokemon = .OppPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) - 'Spikes - If spikeAffected = True Then - If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OppSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If + 'Spikes + If spikeAffected = True Then + If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OppSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OppStickyWeb > 0 Then + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OppStickyWeb > 0 Then - LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If + End If + End If - 'Toxic Spikes - If spikeAffected = True Then - If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OppToxicSpikes - Case 1 - InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OppToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OppToxicSpikes = 0 - End If - End If - End If + 'Toxic Spikes + If spikeAffected = True Then + If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OppToxicSpikes + Case 1 + InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OppToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OppToxicSpikes = 0 + End If + End If + End If - 'Stealth Rock - If rockAffected = True Then - If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim rocksDamage As Double = 1D + 'Stealth Rock + If rockAffected = True Then + If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, True) - TriggerItemEffect(BattleScreen, True) + TriggerAbilityEffect(BattleScreen, True) + TriggerItemEffect(BattleScreen, True) - If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) - End If + If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OwnHealingWish = True Then - BattleScreen.FieldEffects.OwnHealingWish = False + If BattleScreen.FieldEffects.OwnHealingWish = True Then + BattleScreen.FieldEffects.OwnHealingWish = False - If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub - Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") - With BattleScreen - 'Natural cure cures status problems - If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then - If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then - .OppPokemon.Status = Pokemon.StatusProblems.None - .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) - End If - End If - 'Regenerator ability heals 1/3 of it's max HP - If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then - If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then - Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) - If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then - BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") - End If - End If - End If - 'save baton pass stuff: - If .FieldEffects.OppUsedBatonPass = True Then - .FieldEffects.OppBatonPassStats = New List(Of Integer) - With .OppPokemon - BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) - End With - .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True - End If + Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") + With BattleScreen + 'Natural cure cures status problems + If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then + If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then + .OppPokemon.Status = Pokemon.StatusProblems.None + .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) + End If + End If + 'Regenerator ability heals 1/3 of it's max HP + If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then + If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then + Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) + If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then + BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") + End If + End If + End If + 'save baton pass stuff: + If .FieldEffects.OppUsedBatonPass = True Then + .FieldEffects.OppBatonPassStats = New List(Of Integer) + With .OppPokemon + BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) + End With + .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True + End If - 'Set the original objects of Pokemon - .OppPokemon.ResetTemp() + 'Set the original objects of Pokemon + .OppPokemon.ResetTemp() - 'Remove volatiles - .OppPokemon.ClearAllVolatiles() + 'Remove volatiles + .OppPokemon.ClearAllVolatiles() - 'Resetting FieldEffects - With .FieldEffects - .OppSleepTurns = 0 - .OppTruantRound = 0 - .OppTaunt = 0 - .OppSmacked = 0 - .OppRageCounter = 0 - .OppUproar = 0 - If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 - .OppEndure = 0 - .OppProtectCounter = 0 - .OppDetectCounter = 0 - .OppKingsShieldCounter = 0 - .OppProtectMovesCount = 0 - If .OppUsedBatonPass = False Then .OppIngrain = 0 - If .OppUsedBatonPass = False Then .OppSubstitute = 0 - If .OppUsedBatonPass = False Then .OppMagnetRise = 0 - If .OppUsedBatonPass = False Then .OppAquaRing = 0 - .OppPoisonCounter = 0 - .OppNightmare = 0 - If .OppUsedBatonPass = False Then .OppCurse = 0 - .OppOutrage = 0 - .OppThrash = 0 - .OppPetalDance = 0 - .OppEncore = 0 - .OppEncoreMove = Nothing - If .OppUsedBatonPass = False Then .OppEmbargo = 0 - .OppYawn = 0 - If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 - .OppConfusionTurns = 0 - .OppTorment = 0 - .OppTormentMove = Nothing - .OppChoiceMove = Nothing - .OppRecharge = 0 - .OppRolloutCounter = 0 - .OppIceBallCounter = 0 - .OppDefenseCurl = 0 - .OppCharge = 0 - .OppSolarBeam = 0 - .OppSolarBlade = 0 - If .OppUsedBatonPass = False Then .OppLeechSeed = 0 - If .OppUsedBatonPass = False Then .OppLockOn = 0 - .OppLansatBerry = 0 - .OppCustapBerry = 0 - .OppTrappedCounter = 0 - .OppFuryCutter = 0 - .OppEchoedVoice = 0 - .OppPokemonTurns = 0 - .OppStockpileCount = 0 - .OppDestinyBond = False - .OppGastroAcid = False + 'Resetting FieldEffects + With .FieldEffects + .OppSleepTurns = 0 + .OppTruantRound = 0 + .OppTaunt = 0 + .OppSmacked = 0 + .OppRageCounter = 0 + .OppUproar = 0 + If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 + .OppEndure = 0 + .OppProtectCounter = 0 + .OppDetectCounter = 0 + .OppKingsShieldCounter = 0 + .OppProtectMovesCount = 0 + If .OppUsedBatonPass = False Then .OppIngrain = 0 + If .OppUsedBatonPass = False Then .OppSubstitute = 0 + If .OppUsedBatonPass = False Then .OppMagnetRise = 0 + If .OppUsedBatonPass = False Then .OppAquaRing = 0 + .OppPoisonCounter = 0 + .OppNightmare = 0 + If .OppUsedBatonPass = False Then .OppCurse = 0 + .OppOutrage = 0 + .OppThrash = 0 + .OppPetalDance = 0 + .OppEncore = 0 + .OppEncoreMove = Nothing + If .OppUsedBatonPass = False Then .OppEmbargo = 0 + .OppYawn = 0 + If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 + .OppConfusionTurns = 0 + .OppTorment = 0 + .OppTormentMove = Nothing + .OppChoiceMove = Nothing + .OppRecharge = 0 + .OppRolloutCounter = 0 + .OppIceBallCounter = 0 + .OppDefenseCurl = 0 + .OppCharge = 0 + .OppSolarBeam = 0 + .OppSolarBlade = 0 + If .OppUsedBatonPass = False Then .OppLeechSeed = 0 + If .OppUsedBatonPass = False Then .OppLockOn = 0 + .OppLansatBerry = 0 + .OppCustapBerry = 0 + .OppTrappedCounter = 0 + .OppFuryCutter = 0 + .OppEchoedVoice = 0 + .OppPokemonTurns = 0 + .OppStockpileCount = 0 + .OppDestinyBond = False + .OppGastroAcid = False - .OppFlyCounter = 0 - .OppDigCounter = 0 - .OppBounceCounter = 0 - .OppDiveCounter = 0 - .OppShadowForceCounter = 0 - .OppPhantomForceCounter = 0 - .OppSkyDropCounter = 0 - .OppGeomancyCounter = 0 - .OppSkyAttackCounter = 0 - .OppRazorWindCounter = 0 - .OppSkullBashCounter = 0 + .OppFlyCounter = 0 + .OppDigCounter = 0 + .OppBounceCounter = 0 + .OppDiveCounter = 0 + .OppShadowForceCounter = 0 + .OppPhantomForceCounter = 0 + .OppSkyDropCounter = 0 + .OppGeomancyCounter = 0 + .OppSkyAttackCounter = 0 + .OppRazorWindCounter = 0 + .OppSkullBashCounter = 0 - .OppForesight = 0 - .OppOdorSleuth = 0 - .OppMiracleEye = 0 + .OppForesight = 0 + .OppOdorSleuth = 0 + .OppMiracleEye = 0 - .OppWrap = 0 - .OppWhirlpool = 0 - .OppBind = 0 - .OppClamp = 0 - .OppFireSpin = 0 - .OppMagmaStorm = 0 - .OppSandTomb = 0 - .OppInfestation = 0 + .OppWrap = 0 + .OppWhirlpool = 0 + .OppBind = 0 + .OppClamp = 0 + .OppFireSpin = 0 + .OppMagmaStorm = 0 + .OppSandTomb = 0 + .OppInfestation = 0 - .OppBideCounter = 0 - .OppBideDamage = 0 + .OppBideCounter = 0 + .OppBideDamage = 0 - .OppRoostUsed = False + .OppRoostUsed = False - 'Own stuff that depends on opp pokemon presence - .OwnTrappedCounter = 0 - .OwnWrap = 0 - .OwnWhirlpool = 0 - .OwnBind = 0 - .OwnClamp = 0 - .OwnFireSpin = 0 - .OwnMagmaStorm = 0 - .OwnSandTomb = 0 - .OwnInfestation = 0 + 'Own stuff that depends on opp pokemon presence + .OwnTrappedCounter = 0 + .OwnWrap = 0 + .OwnWhirlpool = 0 + .OwnBind = 0 + .OwnClamp = 0 + .OwnFireSpin = 0 + .OwnMagmaStorm = 0 + .OwnSandTomb = 0 + .OwnInfestation = 0 - If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then - BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) - End If - End With - End With + If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then + BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) + End If + End With + End With - BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) + BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) - If BattleScreen.IsTrainerBattle = False Then + If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMove(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) + Faint.AnimationMovePokemonEntity(0, -1, 0, 0.1, False, False, 2, 0,,, 4) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) - EndBattle(EndBattleReasons.WinWild, BattleScreen, False) - Else - If BattleScreen.TrainerHasFightablePokemon() = True Then - If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then - GainEXP(BattleScreen) - End If + EndBattle(EndBattleReasons.WinWild, BattleScreen, False) + Else + If BattleScreen.TrainerHasFightablePokemon() = True Then + If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then + GainEXP(BattleScreen) + End If If BattleScreen.IsRemoteBattle And BattleScreen.OppFaint Then - 'Next pokemon is selected by the opponent. - Else - SwitchInOpp(BattleScreen, False, index) - End If - Else - GainEXP(BattleScreen) + 'Next pokemon is selected by the opponent. + Else + SwitchInOpp(BattleScreen, False, index) + End If + Else + GainEXP(BattleScreen) If message = "" Then - message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" - End If + message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" + End If - BattleScreen.BattleQuery.Add(New TextQueryObject(message)) + BattleScreen.BattleQuery.Add(New TextQueryObject(message)) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) @@ -7170,57 +7138,56 @@ Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As String = "Textures\Battle\Cloud" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + + BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) + BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) EndBattle(EndBattleReasons.WinTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) - End If - End If - End If - End Sub + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) + End If + End If + End If + End Sub - Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OppUsedBatonPass = True Then - BattleScreen.FieldEffects.OppUsedBatonPass = False + Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OppUsedBatonPass = True Then + BattleScreen.FieldEffects.OppUsedBatonPass = False - BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) - BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) - BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) - BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) - BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) - BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) - BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) + BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) + BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) + BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) + BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) + BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) + BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) + BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) - If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then - BattleScreen.FieldEffects.OppBatonPassConfusion = False - BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then + BattleScreen.FieldEffects.OppBatonPassConfusion = False + BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) + Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) - If FirstTime = False Then - HasSwitchedInOpp = True + If FirstTime = False Then + HasSwitchedInOpp = True BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) @@ -7232,249 +7199,246 @@ Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As String = "Textures\Battle\Cloud" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + + BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) + BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) BattleScreen.SendInNewTrainerPokemon(index) - Me.ApplyOppBatonPass(BattleScreen) + Me.ApplyOppBatonPass(BattleScreen) - If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then - BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) - End If + If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then + BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) + End If - Dim oppShiny As String = "N" - If BattleScreen.OppPokemon.IsShiny = True Then - oppShiny = "S" - End If + Dim oppShiny As String = "N" + If BattleScreen.OppPokemon.IsShiny = True Then + oppShiny = "S" + End If - Dim oppModel As String = BattleScreen.GetModelName(False) + Dim oppModel As String = BattleScreen.GetModelName(False) - If oppModel = "" Then - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) - Else - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) - End If + If oppModel = "" Then + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) + Else + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) + End If - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) - ' Ball opens + ' Ball Opens BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As String = "Textures\Battle\Cloud" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If - With BattleScreen - Dim p As Pokemon = .OppPokemon - Dim op As Pokemon = .OwnPokemon + With BattleScreen + Dim p As Pokemon = .OppPokemon + Dim op As Pokemon = .OwnPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) - If spikeAffected = True Then - If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OwnSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OwnStickyWeb > 0 Then + If spikeAffected = True Then + If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OwnSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OwnStickyWeb > 0 Then - LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If - If spikeAffected = True Then - If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OwnToxicSpikes - Case 1 - InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OwnToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OwnToxicSpikes = 0 - End If - End If - End If + End If + End If + If spikeAffected = True Then + If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OwnToxicSpikes + Case 1 + InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OwnToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OwnToxicSpikes = 0 + End If + End If + End If - If rockAffected = True Then - If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim rocksDamage As Double = 1D + If rockAffected = True Then + If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, False) - TriggerItemEffect(BattleScreen, False) + TriggerAbilityEffect(BattleScreen, False) + TriggerItemEffect(BattleScreen, False) - If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) - End If + If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OppHealingWish = True Then - BattleScreen.FieldEffects.OppHealingWish = False + If BattleScreen.FieldEffects.OppHealingWish = True Then + BattleScreen.FieldEffects.OppHealingWish = False - If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub #End Region #Region "EndBattle" - Enum EndBattleReasons - WinWild - LoseWild - WinTrainer - LoseTrainer - WinPvP - LosePvP - End Enum + Enum EndBattleReasons + WinWild + LoseWild + WinTrainer + LoseTrainer + WinPvP + LosePvP + End Enum - Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) - BattleScreen.OwnFaint = False - BattleScreen.OppFaint = False - IsAfterFaint = False - If AddPVP = True Then - Select Case reason - Case EndBattleReasons.WinTrainer 'Lost - Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 5, q) + Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) + BattleScreen.OwnFaint = False + BattleScreen.OppFaint = False + IsAfterFaint = False + If AddPVP = True Then + Select Case reason + Case EndBattleReasons.WinTrainer 'Lost + Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 5, q) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 4, New TextQueryObject("You lost the battle!")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, New TextQueryObject("")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 4, New TextQueryObject("You lost the battle!")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, New TextQueryObject("")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) - Case EndBattleReasons.LoseTrainer 'Won - Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, q) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) + Case EndBattleReasons.LoseTrainer 'Won + Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, q) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("Pokémon Trainer " & Core.Player.Name & " was defeated!")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("Pokémon Trainer " & Core.Player.Name & " was defeated!")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) - End Select - Else - Select Case reason - Case EndBattleReasons.WinWild - Won = True - Core.Player.AddPoints(1, "Won against wild Pokémon.") + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) + End Select + Else + Select Case reason + Case EndBattleReasons.WinWild + Won = True + Core.Player.AddPoints(1, "Won against wild Pokémon.") - BattleScreen.BattleQuery.Add(New PlayMusicQueryObject("wild_defeat")) - ChangeCameraAngle(1, True, BattleScreen) + BattleScreen.BattleQuery.Add(New PlayMusicQueryObject("wild_defeat")) + ChangeCameraAngle(1, True, BattleScreen) - GainEXP(BattleScreen) + GainEXP(BattleScreen) - If BattleScreen.FieldEffects.OwnPayDayCounter > 0 Then - Core.Player.Money += BattleScreen.FieldEffects.OwnPayDayCounter - BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " picked up $" & BattleScreen.FieldEffects.OwnPayDayCounter & "!")) - End If + If BattleScreen.FieldEffects.OwnPayDayCounter > 0 Then + Core.Player.Money += BattleScreen.FieldEffects.OwnPayDayCounter + BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " picked up $" & BattleScreen.FieldEffects.OwnPayDayCounter & "!")) + End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) - Case EndBattleReasons.WinTrainer - Won = True - Core.Player.AddPoints(3, "Won against trainer.") + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) + Case EndBattleReasons.WinTrainer + Won = True + Core.Player.AddPoints(3, "Won against trainer.") - Core.Player.Money += BattleScreen.GetTrainerMoney() + Core.Player.Money += BattleScreen.GetTrainerMoney() - BattleScreen.BattleQuery.Add(New PlayMusicQueryObject(BattleScreen.Trainer.GetDefeatMusic())) + BattleScreen.BattleQuery.Add(New PlayMusicQueryObject(BattleScreen.Trainer.GetDefeatMusic())) - Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.04F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.BattleQuery.Add(q) + Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.04F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.BattleQuery.Add(q) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.TrainerType & " " & BattleScreen.Trainer.Name & " was defeated!")) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.OutroMessage)) + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.TrainerType & " " & BattleScreen.Trainer.Name & " was defeated!")) + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.OutroMessage)) - If BattleScreen.GetTrainerMoney() > 0 Then - BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " got $" & BattleScreen.GetTrainerMoney() & "!")) - End If + If BattleScreen.GetTrainerMoney() > 0 Then + BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " got $" & BattleScreen.GetTrainerMoney() & "!")) + End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) - Case EndBattleReasons.LoseTrainer, EndBattleReasons.LoseWild - Won = False + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) + Case EndBattleReasons.LoseTrainer, EndBattleReasons.LoseWild + Won = False Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) q.ApplyCurrentCamera = True BattleScreen.BattleQuery.Add(q) diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 1356505d9..bb5fae6fe 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -65,14 +65,10 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) - - MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) + MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Start", 0, 0) For i = 0 To 12 - Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) - MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) - + MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 Next BattleScreen.BattleQuery.Add(MoveAnimation) @@ -80,37 +76,32 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) - - MoveAnimation.AnimationMove(FireballEntity, True, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0, 0.1, 0.5, 0) For i = 0 To 12 - Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(3.0 - i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) - MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) - + MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 Next - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Hit", 2, 0) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - Dim FireEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - Dim FireEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - Dim FireEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - - MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index 369515629..5c35961e3 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -64,14 +64,11 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) - Dim SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - - MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 1, 1) - MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), 2, 1) - MoveAnimation.AnimationChangeTexture(SoundwaveEntity, True, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 3, 1) - + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index d14a3c279..467c5891d 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -55,11 +55,10 @@ Me.AIField2 = AIField.Nothing End Sub - Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) - Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 3) - MoveAnimation.AnimationFade(PoundEntity, True, 1.0F, False, 0.0F, 3, 0) + MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 668b4b545..6d8954700 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,16 +54,15 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.AnimationMove(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.AnimationMovePokemonEntity(0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMovePokemonEntity(0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) - Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(1.0F), 1.0F) - MoveAnimation.AnimationFade(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Tackle", 0, 2) + MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Tackle", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index fa0fb7abe..36622416b 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -67,38 +67,30 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(CurrentEntity.Position, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) - - MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) - MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - + MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Start", 0, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) + MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - - MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - - Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 3, 1) - - MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) - - MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) + MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From 79edf72d1ce3ce3b5221d6d472805bd259bfa1d5 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 2 Oct 2021 17:40:48 +0200 Subject: [PATCH 09/57] Fix Burned animation error --- P3D/Battle/BattleSystemV2/Battle.vb | 32 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 2b322aaa2..2b69ba9cc 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2705,13 +2705,13 @@ p.Status = Pokemon.StatusProblems.Burn ChangeCameraAngle(1, own, BattleScreen) 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message Case "" 'Print default message only @@ -5406,11 +5406,11 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") @@ -6197,11 +6197,11 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") From d20abdf6df6fb09c3c6923ae6a5166ae6c16a7f0 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sun, 3 Oct 2021 11:02:18 +0200 Subject: [PATCH 10/57] Hit Animation + Restructure of attack sound effects + Absorb animation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attack sound effects are now in the folder of the type of their attack Pokémon flicker briefly when hit --- P3D/Battle/BattleSystemV2/Battle.vb | 9 +++++++++ P3D/Pokemon/Attacks/Fire/Ember.vb | 4 ++-- P3D/Pokemon/Attacks/Normal/Pound.vb | 2 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 2 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 4 ++-- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 2b69ba9cc..6247835f1 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -3978,8 +3978,10 @@ Public Sub ReduceHP(ByVal HPAmount As Integer, ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String, ByVal sound As String) Dim p As Pokemon = BattleScreen.OwnPokemon + Dim pNPC As Entity = BattleScreen.OwnPokemonNPC If own = False Then p = BattleScreen.OppPokemon + pNPC = BattleScreen.OppPokemonNPC End If If p.HP > 0 And p.Status <> Pokemon.StatusProblems.Fainted Then @@ -3996,6 +3998,13 @@ BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(sound, False, 0.0F)) End If + Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) + HitAnimation.AnimationFadePokemonEntity(1, False, 0, 0, 0) + HitAnimation.AnimationFadePokemonEntity(1, True, 1, 1, 0) + HitAnimation.AnimationFadePokemonEntity(1, False, 0, 2, 0) + HitAnimation.AnimationFadePokemonEntity(1, True, 1, 3, 0) + BattleScreen.BattleQuery.Add(HitAnimation) + If own = True Then BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, HPAmount, New Vector2(200, 256))) Else diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index bb5fae6fe..6719f780d 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -66,7 +66,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Start", 0, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 @@ -82,7 +82,7 @@ MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 Next - MoveAnimation.AnimationPlaySound("Battle\Attacks\Ember_Hit", 2, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 467c5891d..25785556e 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -55,7 +55,7 @@ Me.AIField2 = AIField.Nothing End Sub - Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 6d8954700..c3a075d95 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -61,7 +61,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Tackle", 0, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Tackle", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 36622416b..9684f8379 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -68,7 +68,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Start", 0, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub @@ -77,7 +77,7 @@ MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) From 02ed129c85e0394cb8443a0ca48b44ff7b04d0c1 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 14 Oct 2021 01:21:10 +0200 Subject: [PATCH 11/57] Battle Animation System Rework about halfway done Updated to work with the new animation system: - Catch animation - Burn animation - Attack: Tackle --- P3D/Battle/BattleSystemV2/Battle.vb | 122 ++++++++++++++++----------- P3D/Pokemon/Attacks/Normal/Tackle.vb | 4 +- 2 files changed, 73 insertions(+), 53 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 6247835f1..823bea6f1 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2705,14 +2705,20 @@ p.Status = Pokemon.StatusProblems.Burn ChangeCameraAngle(1, own, BattleScreen) 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) BattleScreen.BattleQuery.Add(BurnAnimation) + + If FlameEntity.Opacity = 0.0F Then + BurnAnimation.RemoveEntity(FlameEntity) + End If + Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) @@ -2723,30 +2729,30 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) End Select If p.Ability.Name.ToLower() = "synchronize" AndAlso from <> own Then - Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") - End If + Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") + End If - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") + End If End If End If - End If - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") + End If End If End If - End If - Return True + Return True + End If End If - End If End If End If End If @@ -3411,7 +3417,7 @@ End If '***STAT INCREASE ANIMATION*** - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount @@ -3427,11 +3433,11 @@ Destination.X = xPos Destination.Z = zPos Dim startDelay As Double = 5.0 * Random.NextDouble() - MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) - BattleScreen.BattleQuery.Add(MoveAnimation) + BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -3998,11 +4004,11 @@ BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(sound, False, 0.0F)) End If - Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(CType(pNPC, NPC), own) - HitAnimation.AnimationFadePokemonEntity(1, False, 0, 0, 0) - HitAnimation.AnimationFadePokemonEntity(1, True, 1, 1, 0) - HitAnimation.AnimationFadePokemonEntity(1, False, 0, 2, 0) - HitAnimation.AnimationFadePokemonEntity(1, True, 1, 3, 0) + Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 0, 0) + HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 1, 0) + HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 2, 0) + HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 3, 0) BattleScreen.BattleQuery.Add(HitAnimation) If own = True Then @@ -5415,12 +5421,19 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) BattleScreen.BattleQuery.Add(BurnAnimation) + + If FlameEntity.Opacity = 0.0F Then + BurnAnimation.RemoveEntity(FlameEntity) + End If + 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6206,12 +6219,19 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - BurnAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) BattleScreen.BattleQuery.Add(BurnAnimation) + + If FlameEntity.Opacity = 0.0F Then + BurnAnimation.RemoveEntity(FlameEntity) + End If + 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6796,8 +6816,8 @@ Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) - BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) + BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -6859,11 +6879,11 @@ Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) + BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If @@ -7112,7 +7132,7 @@ ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMovePokemonEntity(0, -1, 0, 0.1, False, False, 2, 0,,, 4) + Faint.AnimationMoveEntity(Nothing, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) @@ -7157,8 +7177,8 @@ Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) - BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) + BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -7218,8 +7238,8 @@ Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadePokemonEntity(1, False, 0, 1, 0) - BallReturn.AnimationMovePokemonEntity(0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) + BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -7273,11 +7293,11 @@ Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadePokemonEntity(1, True, 1, 4, 0) + BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMovePokemonEntity(0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index c3a075d95..4d53f749d 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,8 +54,8 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.AnimationMovePokemonEntity(0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.AnimationMovePokemonEntity(0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.AnimationMoveEntity(Nothing, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMoveEntity(Nothing, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From ea12c8f5f4d1aa966154e22a8012d6f2e589bc3b Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 14 Oct 2021 17:50:44 +0200 Subject: [PATCH 12/57] I was not halfway done MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I've updated Poison Sting, through which I realized I hadn't taken some usage cases into consideration, so the system should be more robust and useful now I've also updated the animation for Switching In your own Pokémon and I've added an animation for when the Pokémon breaks out of the ball when you're trying to catch it --- P3D/Battle/BattleSystemV2/Battle.vb | 1086 ++++++++++----------- P3D/Pokemon/Attacks/Fire/Ember.vb | 4 +- P3D/Pokemon/Attacks/Grass/Absorb.vb | 2 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 2 +- P3D/Pokemon/Attacks/Normal/Pound.vb | 2 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 9 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 34 +- 7 files changed, 571 insertions(+), 568 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 823bea6f1..a93c5e4bc 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2706,19 +2706,14 @@ ChangeCameraAngle(1, own, BattleScreen) 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) - If FlameEntity.Opacity = 0.0F Then - BurnAnimation.RemoveEntity(FlameEntity) - End If - Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) @@ -2729,30 +2724,30 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " got burned!")) End Select If p.Ability.Name.ToLower() = "synchronize" AndAlso from <> own Then - Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") - End If - - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") - End If - End If - End If - - If Not p.Item Is Nothing Then - If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then - If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") - End If - End If - End If - - Return True + Me.InflictBurn(Not own, Not own, BattleScreen, "Synchronize passed over the burn.", "synchronize") End If + + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "rawst" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:rawst") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Rawst Berry cured the burn of " & p.GetDisplayName() & "!", "berry:rawst") + End If + End If + End If + + If Not p.Item Is Nothing Then + If p.Item.Name.ToLower() = "lum" AndAlso BattleScreen.FieldEffects.CanUseItem(own) = True AndAlso BattleScreen.FieldEffects.CanUseOwnItem(own, BattleScreen) = True Then + If RemoveHeldItem(own, own, BattleScreen, "", "berry:lum") = True Then + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) + CureStatusProblem(own, own, BattleScreen, "The Lum Berry cured the burn of " & p.GetDisplayName() & "!", "berry:lum") + End If + End If + End If + + Return True End If + End If End If End If End If @@ -3421,19 +3416,18 @@ Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As String = "Textures\Battle\StatChange\statDown" - Dim Position As Vector3 = New Vector3(0, -0.4, 0) - Dim Destination As Vector3 = New Vector3(0, 0.8, 0) - Dim Scale As Vector3 = New Vector3(0.2F) + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statUp") Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Position.X = xPos - Position.Z = zPos - Destination.X = xPos - Destination.Z = zPos + Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), pNPC.Position.Z + zPos) + Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), zPos + pNPC.Position.Z) + Dim Scale As New Vector3(0.2F) + + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + + StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) @@ -3699,27 +3693,26 @@ End If End If '***STAT DECREASE ANIMATION*** - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As String = "Textures\Battle\StatChange\statDown" - Dim Position As Vector3 = New Vector3(0, 0.8, 0) - Dim Destination As Vector3 = New Vector3(0, -0.4, 0) - Dim Scale As Vector3 = New Vector3(0.2F) + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statDown") Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Position.X = xPos - Position.Z = zPos - Destination.X = xPos - Destination.Z = zPos + Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), pNPC.Position.Z + zPos) + Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), zPos + pNPC.Position.Z) + Dim Scale As New Vector3(0.2F) + + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - MoveAnimation.AnimationSpawnMovingEntity(Position.X, Position.Y, Position.Z, Texture, Scale.X, Scale.Y, Scale.Z, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + + StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While - MoveAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) - BattleScreen.BattleQuery.Add(MoveAnimation) + StatAnimation.PlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) + BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -4005,10 +3998,10 @@ End If Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 0, 0) - HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 1, 0) - HitAnimation.AnimationFadeEntity(Nothing, 1, False, 0, 2, 0) - HitAnimation.AnimationFadeEntity(Nothing, 1, True, 1, 3, 0) + HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 0, 0) + HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 1, 0) + HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 2, 0) + HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 3, 0) BattleScreen.BattleQuery.Add(HitAnimation) If own = True Then @@ -4763,14 +4756,14 @@ #End Region - ''' <summary> - ''' Switches camera to angle - ''' </summary> - ''' <param name="direction">0=main battle/1=own pokemon/2=opp pokemon</param> - ''' <param name="own">If the code comes from the own player or not.</param> - ''' <param name="BattleScreen">Battlescreen reference</param> - ''' <param name="AddPVP">If the call should get added the PVP list or the own queue.</param> - Public Sub ChangeCameraAngle(ByVal direction As Integer, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Optional ByVal AddPVP As Boolean = False) + ''' <summary> + ''' Switches camera to angle + ''' </summary> + ''' <param name="direction">0=main battle/1=own pokemon/2=opp pokemon</param> + ''' <param name="own">If the code comes from the own player or not.</param> + ''' <param name="BattleScreen">Battlescreen reference</param> + ''' <param name="AddPVP">If the call should get added the PVP list or the own queue.</param> + Public Sub ChangeCameraAngle(ByVal direction As Integer, ByVal own As Boolean, ByVal BattleScreen As BattleScreen, Optional ByVal AddPVP As Boolean = False) Dim q As CameraQueryObject = Nothing Select Case direction @@ -5364,7 +5357,7 @@ If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -5388,7 +5381,7 @@ Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -5420,20 +5413,15 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) - If FlameEntity.Opacity = 0.0F Then - BurnAnimation.RemoveEntity(FlameEntity) - End If - 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6163,7 +6151,7 @@ If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -6187,7 +6175,7 @@ Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) @@ -6218,20 +6206,15 @@ End If 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - BurnAnimation.AnimationFadeEntity(FlameEntity, 1, False, 0.0F, 6, 1, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) - If FlameEntity.Opacity = 0.0F Then - BurnAnimation.RemoveEntity(FlameEntity) - End If - 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6756,38 +6739,38 @@ End If Else If BattleScreen.IsTrainerBattle = True Then - EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, True) - End If - Else - EndBattle(EndBattleReasons.LoseWild, BattleScreen, False) - End If - End If - End With - End Sub + EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, False) + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.LoseTrainer, BattleScreen, True) + End If + Else + EndBattle(EndBattleReasons.LoseWild, BattleScreen, False) + End If + End If + End With + End Sub - Public Sub ApplyOwnBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OwnUsedBatonPass = True Then - BattleScreen.FieldEffects.OwnUsedBatonPass = False + Public Sub ApplyOwnBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OwnUsedBatonPass = True Then + BattleScreen.FieldEffects.OwnUsedBatonPass = False - BattleScreen.OwnPokemon.StatAttack = BattleScreen.FieldEffects.OwnBatonPassStats(0) - BattleScreen.OwnPokemon.StatDefense = BattleScreen.FieldEffects.OwnBatonPassStats(1) - BattleScreen.OwnPokemon.StatSpAttack = BattleScreen.FieldEffects.OwnBatonPassStats(2) - BattleScreen.OwnPokemon.StatSpDefense = BattleScreen.FieldEffects.OwnBatonPassStats(3) - BattleScreen.OwnPokemon.StatSpeed = BattleScreen.FieldEffects.OwnBatonPassStats(4) - BattleScreen.OwnPokemon.Evasion = BattleScreen.FieldEffects.OwnBatonPassStats(5) - BattleScreen.OwnPokemon.Accuracy = BattleScreen.FieldEffects.OwnBatonPassStats(6) + BattleScreen.OwnPokemon.StatAttack = BattleScreen.FieldEffects.OwnBatonPassStats(0) + BattleScreen.OwnPokemon.StatDefense = BattleScreen.FieldEffects.OwnBatonPassStats(1) + BattleScreen.OwnPokemon.StatSpAttack = BattleScreen.FieldEffects.OwnBatonPassStats(2) + BattleScreen.OwnPokemon.StatSpDefense = BattleScreen.FieldEffects.OwnBatonPassStats(3) + BattleScreen.OwnPokemon.StatSpeed = BattleScreen.FieldEffects.OwnBatonPassStats(4) + BattleScreen.OwnPokemon.Evasion = BattleScreen.FieldEffects.OwnBatonPassStats(5) + BattleScreen.OwnPokemon.Accuracy = BattleScreen.FieldEffects.OwnBatonPassStats(6) - If BattleScreen.FieldEffects.OwnBatonPassConfusion = True Then - BattleScreen.FieldEffects.OwnBatonPassConfusion = False - BattleScreen.OwnPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OwnBatonPassConfusion = True Then + BattleScreen.FieldEffects.OwnBatonPassConfusion = False + BattleScreen.OwnPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") - HasSwitchedInOwn = True + Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") + HasSwitchedInOwn = True If FirstTime = False Then Dim insertMessage As String = message @@ -6800,28 +6783,32 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination = New Vector3(0, 0, 0) + Dim SmokeDestination As Vector3 = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + + BallReturn.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + BallReturn.FadeEntity(Nothing, False, 1, False, 0, 1, 0) + BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position, TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.MoveEntity(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) BattleScreen.AddToQuery(InsertIndex, BallReturn) @@ -6859,315 +6846,322 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + + BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) + + Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position + New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallThrow.MoveEntity(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) + Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Dim SmokeEntity As Entity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + + BallThrow.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) - BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) + BallThrow.FadeEntity(Nothing, False, 1, True, 1, 4, 0) + BallThrow.PlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If With BattleScreen - If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then - .FieldEffects.UsedPokemon.Add(NewPokemonIndex) - End If + If .FieldEffects.UsedPokemon.Contains(NewPokemonIndex) = False Then + .FieldEffects.UsedPokemon.Add(NewPokemonIndex) + End If - If Not .OwnPokemon.Item Is Nothing Then - If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then - If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then - BattleScreen.FieldEffects.AmuletCoin += 1 - End If - End If - End If + If Not .OwnPokemon.Item Is Nothing Then + If .OwnPokemon.Item.Name.ToLower() = "amulet coin" Or .OwnPokemon.Item.Name.ToLower() = "luck incense" Then + If .FieldEffects.CanUseItem(True) = True And .FieldEffects.CanUseOwnItem(True, BattleScreen) = True Then + BattleScreen.FieldEffects.AmuletCoin += 1 + End If + End If + End If - Dim p As Pokemon = .OwnPokemon - Dim op As Pokemon = .OppPokemon + Dim p As Pokemon = .OwnPokemon + Dim op As Pokemon = .OppPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(True, BattleScreen) - 'Spikes - If spikeAffected = True Then - If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OppSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If + 'Spikes + If spikeAffected = True Then + If .FieldEffects.OppSpikes > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OppSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), True, False, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OppStickyWeb > 0 Then + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OppStickyWeb > 0 Then - LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(True, True, BattleScreen, "Speed", 1, "Your pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If + End If + End If - 'Toxic Spikes - If spikeAffected = True Then - If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OppToxicSpikes - Case 1 - InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OppToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OppToxicSpikes = 0 - End If - End If - End If + 'Toxic Spikes + If spikeAffected = True Then + If .FieldEffects.OppToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OppToxicSpikes + Case 1 + InflictPoison(True, False, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(True, False, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OppToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .AddToQuery(InsertIndex, New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OppToxicSpikes = 0 + End If + End If + End If - 'Stealth Rock - If rockAffected = True Then - If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then - Dim rocksDamage As Double = 1D + 'Stealth Rock + If rockAffected = True Then + If .FieldEffects.OppStealthRock > 0 And (p.Ability.Name.ToLower() <> "magic guard" Or BattleScreen.FieldEffects.CanUseAbility(True, BattleScreen, 1) = False) Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), True, False, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, True) - TriggerItemEffect(BattleScreen, True) + TriggerAbilityEffect(BattleScreen, True) + TriggerItemEffect(BattleScreen, True) - If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) - End If + If .OwnPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OwnSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OwnHealingWish = True Then - BattleScreen.FieldEffects.OwnHealingWish = False + If BattleScreen.FieldEffects.OwnHealingWish = True Then + BattleScreen.FieldEffects.OwnHealingWish = False - If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OwnPokemon.HP < .OwnPokemon.MaxHP Or .OwnPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OwnPokemon.MaxHP - .OwnPokemon.HP, True, True, BattleScreen, "The Healing Wish came true for " & .OwnPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(True, True, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub - Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") - With BattleScreen - 'Natural cure cures status problems - If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then - If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then - .OppPokemon.Status = Pokemon.StatusProblems.None - .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) - End If - End If - 'Regenerator ability heals 1/3 of it's max HP - If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then - If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then - Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) - If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then - BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") - End If - End If - End If - 'save baton pass stuff: - If .FieldEffects.OppUsedBatonPass = True Then - .FieldEffects.OppBatonPassStats = New List(Of Integer) - With .OppPokemon - BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) - End With - .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True - End If + Public Sub SwitchOutOpp(ByVal BattleScreen As BattleScreen, ByVal index As Integer, Optional ByVal message As String = "") + With BattleScreen + 'Natural cure cures status problems + If .OppPokemon.Ability.Name.ToLower() = "natural cure" Then + If .OppPokemon.Status <> Pokemon.StatusProblems.Fainted And .OppPokemon.Status <> Pokemon.StatusProblems.None Then + .OppPokemon.Status = Pokemon.StatusProblems.None + .BattleQuery.Add(New TextQueryObject(.OppPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) + End If + End If + 'Regenerator ability heals 1/3 of it's max HP + If .OppPokemon.Ability.Name.ToLower() = "regenerator" Then + If Not (.OppPokemon.Status = Pokemon.StatusProblems.Fainted Or .OppPokemon.HP = 0) Then + Dim restoreHP = CInt(.OppPokemon.MaxHP / 3) + If restoreHP > 0 And .OppPokemon.HP < .OppPokemon.MaxHP And .OppPokemon.HP > 0 Then + BattleScreen.Battle.GainHP(restoreHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & "'s HP was restored!", "ability:regenerator") + End If + End If + End If + 'save baton pass stuff: + If .FieldEffects.OppUsedBatonPass = True Then + .FieldEffects.OppBatonPassStats = New List(Of Integer) + With .OppPokemon + BattleScreen.FieldEffects.OppBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) + End With + .FieldEffects.OppBatonPassConfusion = .OppPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Confusion) = True + End If - 'Set the original objects of Pokemon - .OppPokemon.ResetTemp() + 'Set the original objects of Pokemon + .OppPokemon.ResetTemp() - 'Remove volatiles - .OppPokemon.ClearAllVolatiles() + 'Remove volatiles + .OppPokemon.ClearAllVolatiles() - 'Resetting FieldEffects - With .FieldEffects - .OppSleepTurns = 0 - .OppTruantRound = 0 - .OppTaunt = 0 - .OppSmacked = 0 - .OppRageCounter = 0 - .OppUproar = 0 - If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 - .OppEndure = 0 - .OppProtectCounter = 0 - .OppDetectCounter = 0 - .OppKingsShieldCounter = 0 - .OppProtectMovesCount = 0 - If .OppUsedBatonPass = False Then .OppIngrain = 0 - If .OppUsedBatonPass = False Then .OppSubstitute = 0 - If .OppUsedBatonPass = False Then .OppMagnetRise = 0 - If .OppUsedBatonPass = False Then .OppAquaRing = 0 - .OppPoisonCounter = 0 - .OppNightmare = 0 - If .OppUsedBatonPass = False Then .OppCurse = 0 - .OppOutrage = 0 - .OppThrash = 0 - .OppPetalDance = 0 - .OppEncore = 0 - .OppEncoreMove = Nothing - If .OppUsedBatonPass = False Then .OppEmbargo = 0 - .OppYawn = 0 - If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 - .OppConfusionTurns = 0 - .OppTorment = 0 - .OppTormentMove = Nothing - .OppChoiceMove = Nothing - .OppRecharge = 0 - .OppRolloutCounter = 0 - .OppIceBallCounter = 0 - .OppDefenseCurl = 0 - .OppCharge = 0 - .OppSolarBeam = 0 - .OppSolarBlade = 0 - If .OppUsedBatonPass = False Then .OppLeechSeed = 0 - If .OppUsedBatonPass = False Then .OppLockOn = 0 - .OppLansatBerry = 0 - .OppCustapBerry = 0 - .OppTrappedCounter = 0 - .OppFuryCutter = 0 - .OppEchoedVoice = 0 - .OppPokemonTurns = 0 - .OppStockpileCount = 0 - .OppDestinyBond = False - .OppGastroAcid = False + 'Resetting FieldEffects + With .FieldEffects + .OppSleepTurns = 0 + .OppTruantRound = 0 + .OppTaunt = 0 + .OppSmacked = 0 + .OppRageCounter = 0 + .OppUproar = 0 + If .OppUsedBatonPass = False Then .OppFocusEnergy = 0 + .OppEndure = 0 + .OppProtectCounter = 0 + .OppDetectCounter = 0 + .OppKingsShieldCounter = 0 + .OppProtectMovesCount = 0 + If .OppUsedBatonPass = False Then .OppIngrain = 0 + If .OppUsedBatonPass = False Then .OppSubstitute = 0 + If .OppUsedBatonPass = False Then .OppMagnetRise = 0 + If .OppUsedBatonPass = False Then .OppAquaRing = 0 + .OppPoisonCounter = 0 + .OppNightmare = 0 + If .OppUsedBatonPass = False Then .OppCurse = 0 + .OppOutrage = 0 + .OppThrash = 0 + .OppPetalDance = 0 + .OppEncore = 0 + .OppEncoreMove = Nothing + If .OppUsedBatonPass = False Then .OppEmbargo = 0 + .OppYawn = 0 + If .OppUsedBatonPass = False Then .OppPerishSongCount = 0 + .OppConfusionTurns = 0 + .OppTorment = 0 + .OppTormentMove = Nothing + .OppChoiceMove = Nothing + .OppRecharge = 0 + .OppRolloutCounter = 0 + .OppIceBallCounter = 0 + .OppDefenseCurl = 0 + .OppCharge = 0 + .OppSolarBeam = 0 + .OppSolarBlade = 0 + If .OppUsedBatonPass = False Then .OppLeechSeed = 0 + If .OppUsedBatonPass = False Then .OppLockOn = 0 + .OppLansatBerry = 0 + .OppCustapBerry = 0 + .OppTrappedCounter = 0 + .OppFuryCutter = 0 + .OppEchoedVoice = 0 + .OppPokemonTurns = 0 + .OppStockpileCount = 0 + .OppDestinyBond = False + .OppGastroAcid = False - .OppFlyCounter = 0 - .OppDigCounter = 0 - .OppBounceCounter = 0 - .OppDiveCounter = 0 - .OppShadowForceCounter = 0 - .OppPhantomForceCounter = 0 - .OppSkyDropCounter = 0 - .OppGeomancyCounter = 0 - .OppSkyAttackCounter = 0 - .OppRazorWindCounter = 0 - .OppSkullBashCounter = 0 + .OppFlyCounter = 0 + .OppDigCounter = 0 + .OppBounceCounter = 0 + .OppDiveCounter = 0 + .OppShadowForceCounter = 0 + .OppPhantomForceCounter = 0 + .OppSkyDropCounter = 0 + .OppGeomancyCounter = 0 + .OppSkyAttackCounter = 0 + .OppRazorWindCounter = 0 + .OppSkullBashCounter = 0 - .OppForesight = 0 - .OppOdorSleuth = 0 - .OppMiracleEye = 0 + .OppForesight = 0 + .OppOdorSleuth = 0 + .OppMiracleEye = 0 - .OppWrap = 0 - .OppWhirlpool = 0 - .OppBind = 0 - .OppClamp = 0 - .OppFireSpin = 0 - .OppMagmaStorm = 0 - .OppSandTomb = 0 - .OppInfestation = 0 + .OppWrap = 0 + .OppWhirlpool = 0 + .OppBind = 0 + .OppClamp = 0 + .OppFireSpin = 0 + .OppMagmaStorm = 0 + .OppSandTomb = 0 + .OppInfestation = 0 - .OppBideCounter = 0 - .OppBideDamage = 0 + .OppBideCounter = 0 + .OppBideDamage = 0 - .OppRoostUsed = False + .OppRoostUsed = False - 'Own stuff that depends on opp pokemon presence - .OwnTrappedCounter = 0 - .OwnWrap = 0 - .OwnWhirlpool = 0 - .OwnBind = 0 - .OwnClamp = 0 - .OwnFireSpin = 0 - .OwnMagmaStorm = 0 - .OwnSandTomb = 0 - .OwnInfestation = 0 + 'Own stuff that depends on opp pokemon presence + .OwnTrappedCounter = 0 + .OwnWrap = 0 + .OwnWhirlpool = 0 + .OwnBind = 0 + .OwnClamp = 0 + .OwnFireSpin = 0 + .OwnMagmaStorm = 0 + .OwnSandTomb = 0 + .OwnInfestation = 0 - If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then - BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) - End If - End With - End With + If BattleScreen.OwnPokemon.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) Then + BattleScreen.OwnPokemon.RemoveVolatileStatus(Pokemon.VolatileStatus.Infatuation) + End If + End With + End With - BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) + BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) - If BattleScreen.IsTrainerBattle = False Then + If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMoveEntity(Nothing, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) + Faint.PlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + Faint.MoveEntity(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) - EndBattle(EndBattleReasons.WinWild, BattleScreen, False) - Else - If BattleScreen.TrainerHasFightablePokemon() = True Then - If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then - GainEXP(BattleScreen) - End If + EndBattle(EndBattleReasons.WinWild, BattleScreen, False) + Else + If BattleScreen.TrainerHasFightablePokemon() = True Then + If BattleScreen.OppPokemon.HP <= 0 Or BattleScreen.OppPokemon.Status = Pokemon.StatusProblems.Fainted Then + GainEXP(BattleScreen) + End If If BattleScreen.IsRemoteBattle And BattleScreen.OppFaint Then - 'Next pokemon is selected by the opponent. - Else - SwitchInOpp(BattleScreen, False, index) - End If - Else - GainEXP(BattleScreen) + 'Next pokemon is selected by the opponent. + Else + SwitchInOpp(BattleScreen, False, index) + End If + Else + GainEXP(BattleScreen) If message = "" Then - message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" - End If + message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" + End If - BattleScreen.BattleQuery.Add(New TextQueryObject(message)) + BattleScreen.BattleQuery.Add(New TextQueryObject(message)) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As String = "Textures\Battle\Smoke" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) @@ -7178,57 +7172,57 @@ ' Pokemon disappears BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) EndBattle(EndBattleReasons.WinTrainer, BattleScreen, False) - If BattleScreen.IsRemoteBattle = True Then - EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) - End If - End If - End If - End Sub + If BattleScreen.IsRemoteBattle = True Then + EndBattle(EndBattleReasons.WinTrainer, BattleScreen, True) + End If + End If + End If + End Sub - Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) - If BattleScreen.FieldEffects.OppUsedBatonPass = True Then - BattleScreen.FieldEffects.OppUsedBatonPass = False + Public Sub ApplyOppBatonPass(ByVal BattleScreen As BattleScreen) + If BattleScreen.FieldEffects.OppUsedBatonPass = True Then + BattleScreen.FieldEffects.OppUsedBatonPass = False - BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) - BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) - BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) - BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) - BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) - BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) - BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) + BattleScreen.OppPokemon.StatAttack = BattleScreen.FieldEffects.OppBatonPassStats(0) + BattleScreen.OppPokemon.StatDefense = BattleScreen.FieldEffects.OppBatonPassStats(1) + BattleScreen.OppPokemon.StatSpAttack = BattleScreen.FieldEffects.OppBatonPassStats(2) + BattleScreen.OppPokemon.StatSpDefense = BattleScreen.FieldEffects.OppBatonPassStats(3) + BattleScreen.OppPokemon.StatSpeed = BattleScreen.FieldEffects.OppBatonPassStats(4) + BattleScreen.OppPokemon.Evasion = BattleScreen.FieldEffects.OppBatonPassStats(5) + BattleScreen.OppPokemon.Accuracy = BattleScreen.FieldEffects.OppBatonPassStats(6) - If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then - BattleScreen.FieldEffects.OppBatonPassConfusion = False - BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) - End If - End If - End Sub + If BattleScreen.FieldEffects.OppBatonPassConfusion = True Then + BattleScreen.FieldEffects.OppBatonPassConfusion = False + BattleScreen.OppPokemon.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) + End If + End If + End Sub - Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) + Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) - If FirstTime = False Then - HasSwitchedInOpp = True + If FirstTime = False Then + HasSwitchedInOpp = True BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As String = "Textures\Battle\Smoke" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) @@ -7239,51 +7233,51 @@ ' Pokemon disappears BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.AnimationMoveEntity(Nothing, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) BattleScreen.SendInNewTrainerPokemon(index) - Me.ApplyOppBatonPass(BattleScreen) + Me.ApplyOppBatonPass(BattleScreen) - If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then - BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) - End If + If BattleScreen.ParticipatedPokemon.Contains(BattleScreen.OwnPokemonIndex) = False Then + BattleScreen.ParticipatedPokemon.Add(BattleScreen.OwnPokemonIndex) + End If - Dim oppShiny As String = "N" - If BattleScreen.OppPokemon.IsShiny = True Then - oppShiny = "S" - End If + Dim oppShiny As String = "N" + If BattleScreen.OppPokemon.IsShiny = True Then + oppShiny = "S" + End If - Dim oppModel As String = BattleScreen.GetModelName(False) + Dim oppModel As String = BattleScreen.GetModelName(False) - If oppModel = "" Then - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) - Else - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) - End If + If oppModel = "" Then + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, PokemonForms.GetOverworldSpriteName(BattleScreen.OppPokemon), -1, -1, 0, 1)) + Else + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(False, oppModel, -1, -1, 1, 0)) + End If - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As String = "Textures\Battle\Cloud" + Dim SmokeTexture As String = "Textures\Battle\Smoke" Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) @@ -7294,180 +7288,180 @@ ' Pokemon appears BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) - BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + BallThrow.PlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMoveEntity(Nothing, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If - With BattleScreen - Dim p As Pokemon = .OppPokemon - Dim op As Pokemon = .OwnPokemon + With BattleScreen + Dim p As Pokemon = .OppPokemon + Dim op As Pokemon = .OwnPokemon - Dim spikeAffected As Boolean = True - Dim rockAffected As Boolean = True + Dim spikeAffected As Boolean = True + Dim rockAffected As Boolean = True - spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) + spikeAffected = BattleScreen.FieldEffects.IsGrounded(False, BattleScreen) - If spikeAffected = True Then - If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim spikeDamage As Double = 1D - Select Case .FieldEffects.OwnSpikes - Case 1 - spikeDamage = (p.MaxHP / 100) * 12.5D - Case 2 - spikeDamage = (p.MaxHP / 100) * 16.7D - Case 3 - spikeDamage = (p.MaxHP / 100) * 25D - End Select - ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") - End If - End If - 'Sticky Web - If spikeAffected = True Then - If .FieldEffects.OwnStickyWeb > 0 Then + If spikeAffected = True Then + If .FieldEffects.OwnSpikes > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim spikeDamage As Double = 1D + Select Case .FieldEffects.OwnSpikes + Case 1 + spikeDamage = (p.MaxHP / 100) * 12.5D + Case 2 + spikeDamage = (p.MaxHP / 100) * 16.7D + Case 3 + spikeDamage = (p.MaxHP / 100) * 25D + End Select + ReduceHP(CInt(spikeDamage), False, True, BattleScreen, "The Spikes hurt " & p.GetDisplayName() & "!", "spikes") + End If + End If + 'Sticky Web + If spikeAffected = True Then + If .FieldEffects.OwnStickyWeb > 0 Then - LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") + LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") - End If - End If - If spikeAffected = True Then - If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then - Select Case .FieldEffects.OwnToxicSpikes - Case 1 - InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - Case 2 - InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") - End Select - End If - If .FieldEffects.OwnToxicSpikes > 0 Then - If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then - .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) - .FieldEffects.OwnToxicSpikes = 0 - End If - End If - End If + End If + End If + If spikeAffected = True Then + If .FieldEffects.OwnToxicSpikes > 0 And p.Status = Pokemon.StatusProblems.None And p.Type1.Type <> Element.Types.Poison And p.Type2.Type <> Element.Types.Poison Then + Select Case .FieldEffects.OwnToxicSpikes + Case 1 + InflictPoison(False, True, BattleScreen, False, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + Case 2 + InflictPoison(False, True, BattleScreen, True, "The Toxic Spikes hurt " & p.GetDisplayName() & "!", "toxicspikes") + End Select + End If + If .FieldEffects.OwnToxicSpikes > 0 Then + If p.Type1.Type = Element.Types.Poison Or p.Type2.Type = Element.Types.Poison Then + .BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " removed the Toxic Spikes!")) + .FieldEffects.OwnToxicSpikes = 0 + End If + End If + End If - If rockAffected = True Then - If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then - Dim rocksDamage As Double = 1D + If rockAffected = True Then + If .FieldEffects.OwnStealthRock > 0 And p.Ability.Name.ToLower() <> "magic guard" Then + Dim rocksDamage As Double = 1D - Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) - Select Case effectiveness - Case 0.25F - rocksDamage = (p.MaxHP / 100) * 3.125D - Case 0.5F - rocksDamage = (p.MaxHP / 100) * 6.25D - Case 1.0F - rocksDamage = (p.MaxHP / 100) * 12.5D - Case 2.0F - rocksDamage = (p.MaxHP / 100) * 25D - Case 4.0F - rocksDamage = (p.MaxHP / 100) * 50D - End Select + Dim effectiveness As Single = BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type1)) * BattleCalculation.ReverseTypeEffectiveness(Element.GetElementMultiplier(New Element(Element.Types.Rock), p.Type2)) + Select Case effectiveness + Case 0.25F + rocksDamage = (p.MaxHP / 100) * 3.125D + Case 0.5F + rocksDamage = (p.MaxHP / 100) * 6.25D + Case 1.0F + rocksDamage = (p.MaxHP / 100) * 12.5D + Case 2.0F + rocksDamage = (p.MaxHP / 100) * 25D + Case 4.0F + rocksDamage = (p.MaxHP / 100) * 50D + End Select - ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") - End If - End If + ReduceHP(CInt(rocksDamage), False, True, BattleScreen, "The Stealth Rocks hurt " & p.GetDisplayName() & "!", "stealthrocks") + End If + End If - TriggerAbilityEffect(BattleScreen, False) - TriggerItemEffect(BattleScreen, False) + TriggerAbilityEffect(BattleScreen, False) + TriggerItemEffect(BattleScreen, False) - If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then - .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) - End If + If .OppPokemon.Status = Pokemon.StatusProblems.Sleep Then + .FieldEffects.OppSleepTurns = Core.Random.Next(1, 4) + End If - If BattleScreen.FieldEffects.OppHealingWish = True Then - BattleScreen.FieldEffects.OppHealingWish = False + If BattleScreen.FieldEffects.OppHealingWish = True Then + BattleScreen.FieldEffects.OppHealingWish = False - If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then - GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") - CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") - End If - End If - End With - End Sub + If .OppPokemon.HP < .OppPokemon.MaxHP Or .OppPokemon.Status <> Pokemon.StatusProblems.None Then + GainHP(.OppPokemon.MaxHP - .OppPokemon.HP, False, False, BattleScreen, "The Healing Wish came true for " & .OppPokemon.GetDisplayName() & "!", "move:healingwish") + CureStatusProblem(False, False, BattleScreen, "", "move:healingwish") + End If + End If + End With + End Sub #End Region #Region "EndBattle" - Enum EndBattleReasons - WinWild - LoseWild - WinTrainer - LoseTrainer - WinPvP - LosePvP - End Enum + Enum EndBattleReasons + WinWild + LoseWild + WinTrainer + LoseTrainer + WinPvP + LosePvP + End Enum - Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) - BattleScreen.OwnFaint = False - BattleScreen.OppFaint = False - IsAfterFaint = False - If AddPVP = True Then - Select Case reason - Case EndBattleReasons.WinTrainer 'Lost - Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 5, q) + Public Sub EndBattle(ByVal reason As EndBattleReasons, ByVal BattleScreen As BattleScreen, ByVal AddPVP As Boolean) + BattleScreen.OwnFaint = False + BattleScreen.OppFaint = False + IsAfterFaint = False + If AddPVP = True Then + Select Case reason + Case EndBattleReasons.WinTrainer 'Lost + Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 5, q) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 4, New TextQueryObject("You lost the battle!")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, New TextQueryObject("")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 4, New TextQueryObject("You lost the battle!")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, New TextQueryObject("")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) - Case EndBattleReasons.LoseTrainer 'Won - Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, q) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) + Case EndBattleReasons.LoseTrainer 'Won + Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 3, q) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("Pokémon Trainer " & Core.Player.Name & " was defeated!")) + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 2, New TextQueryObject("Pokémon Trainer " & Core.Player.Name & " was defeated!")) - BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) - End Select - Else - Select Case reason - Case EndBattleReasons.WinWild - Won = True - Core.Player.AddPoints(1, "Won against wild Pokémon.") + BattleScreen.TempPVPBattleQuery.Add(BattleScreen.BattleQuery.Count - 1, New EndBattleQueryObject(True)) + End Select + Else + Select Case reason + Case EndBattleReasons.WinWild + Won = True + Core.Player.AddPoints(1, "Won against wild Pokémon.") - BattleScreen.BattleQuery.Add(New PlayMusicQueryObject("wild_defeat")) - ChangeCameraAngle(1, True, BattleScreen) + BattleScreen.BattleQuery.Add(New PlayMusicQueryObject("wild_defeat")) + ChangeCameraAngle(1, True, BattleScreen) - GainEXP(BattleScreen) + GainEXP(BattleScreen) - If BattleScreen.FieldEffects.OwnPayDayCounter > 0 Then - Core.Player.Money += BattleScreen.FieldEffects.OwnPayDayCounter - BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " picked up $" & BattleScreen.FieldEffects.OwnPayDayCounter & "!")) - End If + If BattleScreen.FieldEffects.OwnPayDayCounter > 0 Then + Core.Player.Money += BattleScreen.FieldEffects.OwnPayDayCounter + BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " picked up $" & BattleScreen.FieldEffects.OwnPayDayCounter & "!")) + End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) - Case EndBattleReasons.WinTrainer - Won = True - Core.Player.AddPoints(3, "Won against trainer.") + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) + Case EndBattleReasons.WinTrainer + Won = True + Core.Player.AddPoints(3, "Won against trainer.") - Core.Player.Money += BattleScreen.GetTrainerMoney() + Core.Player.Money += BattleScreen.GetTrainerMoney() - BattleScreen.BattleQuery.Add(New PlayMusicQueryObject(BattleScreen.Trainer.GetDefeatMusic())) + BattleScreen.BattleQuery.Add(New PlayMusicQueryObject(BattleScreen.Trainer.GetDefeatMusic())) - Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.04F, 0.02F) - q.ApplyCurrentCamera = True - BattleScreen.BattleQuery.Add(q) + Dim q As New CameraQueryObject(New Vector3(15, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, -(MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.04F, 0.02F) + q.ApplyCurrentCamera = True + BattleScreen.BattleQuery.Add(q) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.TrainerType & " " & BattleScreen.Trainer.Name & " was defeated!")) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.OutroMessage)) + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.TrainerType & " " & BattleScreen.Trainer.Name & " was defeated!")) + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.OutroMessage)) - If BattleScreen.GetTrainerMoney() > 0 Then - BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " got $" & BattleScreen.GetTrainerMoney() & "!")) - End If + If BattleScreen.GetTrainerMoney() > 0 Then + BattleScreen.BattleQuery.Add(New TextQueryObject(Core.Player.Name & " got $" & BattleScreen.GetTrainerMoney() & "!")) + End If - BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) - Case EndBattleReasons.LoseTrainer, EndBattleReasons.LoseWild - Won = False + BattleScreen.BattleQuery.Add(New EndBattleQueryObject(False)) + Case EndBattleReasons.LoseTrainer, EndBattleReasons.LoseWild + Won = False Dim q As New CameraQueryObject(New Vector3(12, 0, 13), Screen.Camera.Position, 0.03F, 0.03F, (MathHelper.Pi * 0.5F), Screen.Camera.Yaw, 0.0F, Screen.Camera.Pitch, 0.02F, 0.02F) q.ApplyCurrentCamera = True BattleScreen.BattleQuery.Add(q) diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 6719f780d..03a9cfffc 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -66,7 +66,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) + MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 @@ -82,7 +82,7 @@ MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 Next - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) + MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index 9590c3d18..318503d28 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -96,7 +96,7 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) Dim maxAmount As Integer = 8 Dim currentAmount As Integer = 0 - MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) + MoveAnimation.PlaySound("Battle\Attacks\Grass\Absorb", 0, 0) While currentAmount <= maxAmount Dim yPos As Single = CSng(Random.NextDouble() * 0.5) Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index 5c35961e3..e01dafc73 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -64,7 +64,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) + MoveAnimation.PlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 25785556e..5cf85b3e2 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -57,7 +57,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) + MoveAnimation.PlaySound("Battle\Attacks\Pound", 0.5, 2.5) MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 4d53f749d..99e61e709 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,15 +54,16 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.AnimationMoveEntity(Nothing, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.AnimationMoveEntity(Nothing, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.MoveEntity(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.MoveEntity(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) - MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Tackle", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 2) + MoveAnimation.PlaySound("Battle\Attacks\Normal\Tackle", 0, 2) + Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(1.0F), 1.0F) + MoveAnimation.FadeEntity(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 9684f8379..3cc76f0a4 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -67,30 +67,38 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(CurrentEntity.Position, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) + + MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) + MoveAnimation.MoveEntity(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Poison\Stinger", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.MoveEntity(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.ChangeEntityTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 2) + Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + MoveAnimation.ChangeEntityTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.ChangeEntityTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 3, 1) + + MoveAnimation.ChangeEntityTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + MoveAnimation.ChangeEntityTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) + + MoveAnimation.ChangeEntityTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From 944cf6ae712dfdc2961a74cd062e1bf7f4ae31a8 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 21 Oct 2021 20:42:40 +0200 Subject: [PATCH 13/57] Updated everything to the new Battle Animations system and the newest commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated Attacks: Ember, Absorb, Growl, Pound Updated status effects & shared animations: Poisoned, Switching Pokémon (own and opponent's) --- P3D/Battle/BattleSystemV2/Battle.vb | 217 ++++++++++++---------- P3D/Pokemon/Attacks/Fire/Ember.vb | 51 ++--- P3D/Pokemon/Attacks/Grass/Absorb.vb | 2 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 13 +- P3D/Pokemon/Attacks/Normal/Pound.vb | 5 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 8 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 20 +- 7 files changed, 171 insertions(+), 145 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index a93c5e4bc..058885f11 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2706,12 +2706,12 @@ ChangeCameraAngle(1, own, BattleScreen) 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message @@ -3427,7 +3427,7 @@ Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) @@ -3708,10 +3708,10 @@ Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.MoveEntity(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While - StatAnimation.PlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) + StatAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString @@ -3998,10 +3998,10 @@ End If Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 0, 0) - HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 1, 0) - HitAnimation.FadeEntity(Nothing, False, 1, False, 0, 2, 0) - HitAnimation.FadeEntity(Nothing, False, 1, True, 1, 3, 0) + HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 0, 0) + HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 1, 0) + HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 2, 0) + HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 3, 0) BattleScreen.BattleQuery.Add(HitAnimation) If own = True Then @@ -5357,20 +5357,22 @@ If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP / 8), True, True, BattleScreen, "The poison hurt " & .OwnPokemon.GetDisplayName() & ".", "poison") @@ -5381,20 +5383,22 @@ Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP * multiplier), True, True, BattleScreen, "The toxic hurt " & .OwnPokemon.GetDisplayName() & ".", "badpoison") @@ -5413,13 +5417,13 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) - BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage @@ -6151,21 +6155,24 @@ If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP / 8), False, False, BattleScreen, "The poison hurt " & .OppPokemon.GetDisplayName() & ".", "poison") End If @@ -6175,20 +6182,22 @@ Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.PlaySound("Battle\Effects\Poisoned", 0, 0) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - PoisonAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Poison\Bubble,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 2) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") @@ -6206,13 +6215,13 @@ End If 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - BurnAnimation.PlaySound("Battle\Effects\Burned", 0, 0) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.ChangeEntityTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) 'Actual damage @@ -6783,7 +6792,7 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) ' Ball Closes - BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) @@ -6796,19 +6805,19 @@ Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - BallReturn.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.FadeEntity(Nothing, False, 1, False, 0, 1, 0) - BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns - BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position, TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.MoveEntity(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationMove(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) BattleScreen.AddToQuery(InsertIndex, BallReturn) @@ -6847,13 +6856,13 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) - BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position + New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.MoveEntity(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationMove(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens - BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do @@ -6867,17 +6876,17 @@ Dim SmokeEntity As Entity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - BallThrow.MoveEntity(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.FadeEntity(Nothing, False, 1, True, 1, 4, 0) - BallThrow.PlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) BattleScreen.AddToQuery(InsertIndex, BallThrow) End If @@ -7125,8 +7134,8 @@ If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - Faint.PlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.MoveEntity(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) + Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + Faint.AnimationMove(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(Faint) BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) @@ -7155,28 +7164,29 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Smoke" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - - BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) - BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) @@ -7216,28 +7226,29 @@ Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes - BallReturn.PlaySound("Battle\Pokeball\Open", 0, 0) + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) Dim SmokeReturned As Integer = 0 Do Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As String = "Textures\Battle\Smoke" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - - BallReturn.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 ' Pokemon disappears - BallReturn.AnimationFadeEntity(Nothing, 1, False, 0, 1, 0) - BallReturn.MoveEntity(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) ' Ball returns - BallReturn.PlaySound("Battle\Pokeball\Throw", 1, 0) - BallReturn.AnimationSpawnMovingEntity(0, 0, 0, BattleScreen.OppPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) BattleScreen.BattleQuery.Add(BallReturn) @@ -7267,31 +7278,33 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - BallThrow.PlaySound("Battle\Pokeball\Throw", 0, 0) - BallThrow.AnimationSpawnMovingEntity(-2, -0.15, 0, BattleScreen.OwnPokemon.CatchBall.TextureSource, 0.3F, 0.3F, 0.3F, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) - ' Ball Opens - BallThrow.PlaySound("Battle\Pokeball\Open", 3, 0) + ' Ball opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) Dim SmokeSpawned As Integer = 0 Do Dim SmokePosition = New Vector3(0, 0.35, 0) Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As String = "Textures\Battle\Smoke" + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallThrow.AnimationSpawnMovingEntity(SmokePosition.X, SmokePosition.Y, SmokePosition.Z, SmokeTexture, SmokeScale.X, SmokeScale.Y, SmokeScale.Z, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFadeEntity(Nothing, 1, True, 1, 4, 0) - BallThrow.PlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.MoveEntity(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 03a9cfffc..1356505d9 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -65,10 +65,14 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationSpawnMovingEntity(0.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) + Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) + + MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 - MoveAnimation.AnimationSpawnFadingEntity(CSng(i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) + MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + i += 1 Next BattleScreen.BattleQuery.Add(MoveAnimation) @@ -76,32 +80,37 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) + + MoveAnimation.AnimationMove(FireballEntity, True, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) - MoveAnimation.AnimationSpawnMovingEntity(2.0, 0, 0.0, "Textures\Battle\Fire\FireBall", 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0, 0.1, 0.5, 0) For i = 0 To 12 - MoveAnimation.AnimationSpawnFadingEntity(CSng(3.0 - i * 0.2), 0.0, 0.0, "Textures\Battle\Fire\Smoke", 0.2, 0.2, 0.2, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(3.0 - i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) + MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) + i += 1 Next - MoveAnimation.PlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) + Dim FireEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim FireEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim FireEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,64,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,96,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationSpawnFadingEntity(-0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, 0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Fire\Ember,0,128,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + + MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index 318503d28..9590c3d18 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -96,7 +96,7 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) Dim maxAmount As Integer = 8 Dim currentAmount As Integer = 0 - MoveAnimation.PlaySound("Battle\Attacks\Grass\Absorb", 0, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) While currentAmount <= maxAmount Dim yPos As Single = CSng(Random.NextDouble() * 0.5) Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index e01dafc73..369515629 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -64,11 +64,14 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.PlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 1, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,0,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 2, 1) - MoveAnimation.AnimationSpawnFadingEntity(0.25, -0.25, -0.25, "Textures\Battle\Normal\Growl,0,32,32,32", 0.5, 0.5, 0.5, 0.02, False, 1.0, 3, 1) + + MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) + Dim SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 1, 1) + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, True, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 3, 1) + BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 5cf85b3e2..d14a3c279 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -57,8 +57,9 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.PlaySound("Battle\Attacks\Pound", 0.5, 2.5) - MoveAnimation.AnimationSpawnFadingEntity(0, -0.25, 0, "Textures\Battle\Normal\Pound", 0.5, 0.5, 0.5, 0.02, False, 1.0, 0, 3) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) + Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 3) + MoveAnimation.AnimationFade(PoundEntity, True, 1.0F, False, 0.0F, 3, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 99e61e709..668b4b545 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,16 +54,16 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.MoveEntity(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.MoveEntity(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.AnimationMove(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.PlaySound("Battle\Attacks\Normal\Tackle", 0, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(1.0F), 1.0F) - MoveAnimation.FadeEntity(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) + MoveAnimation.AnimationFade(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 3cc76f0a4..fa0fb7abe 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -69,8 +69,8 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(CurrentEntity.Position, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) - MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) - MoveAnimation.MoveEntity(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub @@ -80,25 +80,25 @@ Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) - MoveAnimation.MoveEntity(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) - MoveAnimation.PlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 3, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) - MoveAnimation.ChangeEntityTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From 7fba875d024200ad9a6bbba367d9bc429c4bc370 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Sun, 24 Oct 2021 01:56:29 +0200 Subject: [PATCH 14/57] Fixed a lot of animation system bugs Fixed: * Spawned entities not appearing * Animations getting removed too soon * Incorrect relative positioning * Ember textures being searched for in the wrong place --- P3D/Battle/BattleAnimations/BAEntityMove.vb | 3 +- .../BattleAnimations/BattleAnimation3D.vb | 11 +++--- P3D/Battle/BattleSystemV2/Battle.vb | 26 +++++++------- P3D/Battle/BattleSystemV2/BattleScreen.vb | 2 +- .../QueryObjects/AnimationQueryObject.vb | 36 ++++++++++--------- P3D/Pokemon/Attacks/Attack.vb | 2 ++ P3D/Pokemon/Attacks/Fire/Ember.vb | 24 ++++++------- P3D/Pokemon/Attacks/Grass/Absorb.vb | 2 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 10 +++--- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 2 +- 10 files changed, 60 insertions(+), 58 deletions(-) diff --git a/P3D/Battle/BattleAnimations/BAEntityMove.vb b/P3D/Battle/BattleAnimations/BAEntityMove.vb index 8e7685f6f..cb5fa1e0e 100644 --- a/P3D/Battle/BattleAnimations/BAEntityMove.vb +++ b/P3D/Battle/BattleAnimations/BAEntityMove.vb @@ -59,8 +59,7 @@ Private Sub Spin() If Me.SpinX = True Then - Dim targetEntity = Me.TargetEntity - targetEntity.Rotation.X += SpinSpeedX + TargetEntity.Rotation.X += SpinSpeedX End If If Me.SpinZ = True Then TargetEntity.Rotation.Z += SpinSpeedZ diff --git a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb index 8011ce1d2..48e63f3a0 100644 --- a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb +++ b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb @@ -25,18 +25,15 @@ Public Ready As Boolean = False Public startDelay As Single Public endDelay As Single - Public SpawnedEntity As Entity = Nothing + Public SpawnedEntity As Boolean = False - Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, Optional SpawnedEntity As Entity = Nothing) + Public Sub New(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, Optional SpawnedEntity As Boolean = False) MyBase.New(Position.X, Position.Y, Position.Z, "BattleAnimation", {Texture}, {0, 0}, False, 0, Scale, BaseModel.BillModel, 0, "", New Vector3(1.0F)) - Me.Visible = Visible Me.startDelay = startDelay Me.endDelay = endDelay - If SpawnedEntity IsNot Nothing Then - Me.SpawnedEntity = SpawnedEntity - End If + Me.SpawnedEntity = SpawnedEntity Me.CreateWorldEveryFrame = True Me.DropUpdateUnlessDrawn = False @@ -62,7 +59,7 @@ startDelay = 0.0F End If Else - If SpawnedEntity IsNot Nothing Then + If SpawnedEntity = True Then Ready = True End If DoActionActive() diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 058885f11..63e067b6f 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1496,7 +1496,7 @@ End If 'Own Pokémon move animation! This displays any effects that should display on the user of the move. - moveUsed.UserPokemonMoveAnimation(BattleScreen, own) + moveUsed.UserPokemonMoveAnimation(BattleScreen, Not own) If moveUsed.Target <> Attack.Targets.Self And moveUsed.FocusOppPokemon = True Then If own = True Then @@ -2707,7 +2707,7 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(pNPC.Position.X - 0.25), CSng(pNPC.Position.Y - 0.25), CSng(pNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(-0.25), CSng(-0.25), CSng(-0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) @@ -3420,8 +3420,8 @@ Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), pNPC.Position.Z + zPos) - Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), zPos + pNPC.Position.Z) + Dim Position As New Vector3(xPos, -0.4, zPos) + Dim Destination As New Vector3(xPos, 0.8, zPos) Dim Scale As New Vector3(0.2F) Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) @@ -3701,8 +3701,8 @@ Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim Position As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y + 0.8), pNPC.Position.Z + zPos) - Dim Destination As New Vector3(xPos + pNPC.Position.X, CSng(pNPC.Position.Y - 0.4), zPos + pNPC.Position.Z) + Dim Position As New Vector3(xPos, 0.8, zPos) + Dim Destination As New Vector3(xPos, -0.4, zPos) Dim Scale As New Vector3(0.2F) Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) @@ -5419,7 +5419,7 @@ Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OwnPokemonNPC.Position.X + 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z + 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25F, 0.25F, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) @@ -6214,10 +6214,10 @@ reduceAmount = CInt(.OppPokemon.MaxHP / 16) End If 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(BattleScreen.OppPokemonNPC.Position.X - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Y - 0.25), CSng(BattleScreen.OwnPokemonNPC.Position.Z - 0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) @@ -6816,8 +6816,8 @@ ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position, TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, BattleScreen.OwnPokemonNPC.Position.X - 2, BattleScreen.OwnPokemonNPC.Position.Y, BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 1, 0,, 0.3) + Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(New Vector3(0.0F), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) BattleScreen.AddToQuery(InsertIndex, BallReturn) @@ -6858,8 +6858,8 @@ BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(BattleScreen.OwnPokemonNPC.Position + New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, BattleScreen.OwnPokemonNPC.Position.X, CSng(BattleScreen.OwnPokemonNPC.Position.Y + 0.35), BattleScreen.OwnPokemonNPC.Position.Z, 0.1, False, True, 0F, 0F,, 0.3) + Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) ' Ball Opens BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index a4dcf7821..f96d4e96d 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -815,7 +815,7 @@ nextIndex: If BattleQuery.Count > cIndex Then Dim cQueryObject As QueryObject = BattleQuery(cIndex) If cQueryObject.QueryType = QueryObject.QueryTypes.MoveAnimation Then - If CType(cQueryObject, AnimationQueryObject).DrawBeforeEntities = False Then + If CType(cQueryObject, AnimationQueryObject).DrawBeforeEntities = True Then cQuery.Add(cQueryObject) Else ForegroundAnimationList.Add(CType(cQueryObject, AnimationQueryObject)) diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index fba7a46b3..919bc52ce 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -21,6 +21,7 @@ Public Sub New(ByVal entity As Entity, ByVal BattleFlipped As Boolean, Optional ByVal model As ModelEntity = Nothing, Optional DrawBeforeEntities As Boolean = False) MyBase.New(QueryTypes.MoveAnimation) Me.AnimationSequence = New List(Of BattleAnimation3D) + Me.SpawnedEntities = New List(Of Entity) Me.DrawBeforeEntities = DrawBeforeEntities If BattleFlipped <> Nothing Then Me.BattleFlipped = BattleFlipped @@ -40,6 +41,9 @@ RenderObjects.Add(a) End If Next + For Each entity As BattleAnimation3D In Me.SpawnedEntities + RenderObjects.Add(entity) + Next If RenderObjects.Count > 0 Then RenderObjects = (From r In RenderObjects Order By r.CameraDistance Descending).ToList() End If @@ -60,9 +64,6 @@ i -= 1 AnimationSequence.Remove(a) Else - If a.SpawnedEntity IsNot Nothing And a.Ready = True Then - SpawnedEntities.Add(a.SpawnedEntity) - End If a.Update() End If End If @@ -75,6 +76,7 @@ Animation.UpdateEntity() Next For Each Entity As Entity In SpawnedEntities + Entity.Update() Entity.UpdateEntity() Next End If @@ -89,21 +91,23 @@ End Sub Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single, Optional ByVal startDelay As Single = 0.0F, Optional ByVal endDelay As Single = 0.0F) As Entity - If Not BattleFlipped = Nothing Then - If BattleFlipped = True Then - Position.X = CurrentEntity.Position.X - Position.X * 2.0F - Position.Z = CurrentEntity.Position.Z - Position.Z * 2.0F - Else - Position.X = CurrentEntity.Position.X + Position.X * 2.0F - Position.Z = CurrentEntity.Position.Z + Position.Z * 2.0F - End If - End If - - Dim SpawnedEntity As Entity = New Entity(Position.X, Position.Y, Position.Z, "BattleAnimation", {Texture}, {0, 0}, False, 0, Scale, BaseModel.BillModel, 0, "", New Vector3(1.0F)) + Dim SpawnedEntity = New BattleAnimation3D(Position, Texture, Scale, 0, 0, False) SpawnedEntity.Opacity = Opacity - Dim SpawnDelayEntity As BattleAnimation3D = New BattleAnimation3D(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay, SpawnedEntity) + If Not BattleFlipped = Nothing Then + If BattleFlipped = True Then + SpawnedEntity.Position.X = CurrentEntity.Position.X - Position.X + SpawnedEntity.Position.Y = CurrentEntity.Position.Y + Position.Y + SpawnedEntity.Position.Z = CurrentEntity.Position.Z - Position.Z + Else + SpawnedEntity.Position.X = CurrentEntity.Position.X + Position.X + SpawnedEntity.Position.Y = CurrentEntity.Position.Y + Position.Y + SpawnedEntity.Position.Z = CurrentEntity.Position.Z + Position.Z + End If + End If + SpawnedEntities.Add(SpawnedEntity) + Dim SpawnDelayEntity As BattleAnimation3D = New BattleAnimation3D(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay, True) AnimationSequence.Add(SpawnDelayEntity) Return SpawnedEntity End Function @@ -124,7 +128,7 @@ If RemoveEntityAfter = True Then If baEntityTextureChange.CanRemove = True Then - RemoveEntity(Entity) + RemoveEntity(TextureChangeEntity) End If End If End Sub diff --git a/P3D/Pokemon/Attacks/Attack.vb b/P3D/Pokemon/Attacks/Attack.vb index cf379b4c5..4c6f982c4 100644 --- a/P3D/Pokemon/Attacks/Attack.vb +++ b/P3D/Pokemon/Attacks/Attack.vb @@ -2169,6 +2169,7 @@ Dim CurrentEntity As NPC = BattleScreen.OwnPokemonNPC Dim CurrentModel As ModelEntity = BattleScreen.OwnPokemonModel If own = False Then + CurrentPokemon = BattleScreen.OppPokemon CurrentEntity = BattleScreen.OppPokemonNPC CurrentModel = BattleScreen.OppPokemonModel End If @@ -2186,6 +2187,7 @@ Dim CurrentEntity As NPC = BattleScreen.OppPokemonNPC Dim CurrentModel As ModelEntity = BattleScreen.OppPokemonModel If own = False Then + CurrentPokemon = BattleScreen.OwnPokemon CurrentEntity = BattleScreen.OwnPokemonNPC CurrentModel = BattleScreen.OwnPokemonModel End If diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index 1356505d9..bcc8306f3 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -96,21 +96,21 @@ Dim FireEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) Dim FireEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index 9590c3d18..f895c3cf2 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -101,7 +101,7 @@ Dim yPos As Single = CSng(Random.NextDouble() * 0.5) Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) Dim AbsorbEntity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Grass\Absorb"), New Vector3(0.35F), 1) - MoveAnimation.AnimationMove(AbsorbEntity, True, 1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount), 0.0, 0.1, 0.5) + MoveAnimation.AnimationMove(AbsorbEntity, True, -1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount), 0.0, 0.1, 0.5) Threading.Interlocked.Increment(currentAmount) End While diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 668b4b545..e0d981ea9 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -54,16 +54,16 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) - MoveAnimation.AnimationMove(Nothing, False, 0.5, 0, 0, 0.3, False, False, 0, 0,,, 2) - MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.3, False, False, 1, 0,,, 2) + MoveAnimation.AnimationMove(Nothing, False, -0.5F, 0, 0, 0.3F, False, False, 0, 0,,, 2) + MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.3F, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 2) - Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(1.0F), 1.0F) - MoveAnimation.AnimationFade(SpawnEntity, True, 0.02, False, 1.0F, 0, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 0) + Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 0, 2) + MoveAnimation.AnimationFade(SpawnEntity, True, 1.0F, False, 0.0F, 2, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index fa0fb7abe..f270a269e 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -67,7 +67,7 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(CurrentEntity.Position, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) From 72599bfd168ba29ef06c6246b1c1445d99612b72 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 29 Oct 2021 15:58:28 +0200 Subject: [PATCH 15/57] Fixed spawned animation entities not being positioned/moved correctly + Added Heal animation + Made other animations be affected by battleanimations option --- P3D/Battle/BattleSystemV2/Battle.vb | 504 ++++++++++-------- .../QueryObjects/AnimationQueryObject.vb | 45 +- P3D/Content/Sounds/Battle/Effects/Heal.wav | Bin 0 -> 83280 bytes P3D/Pokemon/Attacks/Attack.vb | 16 +- P3D/Pokemon/Attacks/Fire/Ember.vb | 18 +- P3D/Pokemon/Attacks/Grass/Absorb.vb | 4 +- P3D/Pokemon/Attacks/Normal/Growl.vb | 4 +- P3D/Pokemon/Attacks/Normal/Pound.vb | 6 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 8 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 14 +- 10 files changed, 339 insertions(+), 280 deletions(-) create mode 100644 P3D/Content/Sounds/Battle/Effects/Heal.wav diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 63e067b6f..bc3d6609f 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1496,7 +1496,7 @@ End If 'Own Pokémon move animation! This displays any effects that should display on the user of the move. - moveUsed.UserPokemonMoveAnimation(BattleScreen, Not own) + moveUsed.UserPokemonMoveAnimation(BattleScreen, own) If moveUsed.Target <> Attack.Targets.Self And moveUsed.FocusOppPokemon = True Then If own = True Then @@ -3412,26 +3412,28 @@ End If '***STAT INCREASE ANIMATION*** - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) - Dim maxAmount As Integer = 20 * val - Dim currentAmount As Integer = 0 - While currentAmount <= maxAmount - Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statUp") - Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim maxAmount As Integer = 20 * val + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statUp") + Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) + Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim Position As New Vector3(xPos, -0.4, zPos) - Dim Destination As New Vector3(xPos, 0.8, zPos) - Dim Scale As New Vector3(0.2F) + Dim Position As New Vector3(xPos, -0.4, zPos) + Dim Destination As New Vector3(xPos, 0.8, zPos) + Dim Scale As New Vector3(0.2F) - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) - Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) + Dim startDelay As Double = 5.0 * Random.NextDouble() - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) - Threading.Interlocked.Increment(currentAmount) - End While + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + Threading.Interlocked.Increment(currentAmount) + End While + BattleScreen.BattleQuery.Add(StatAnimation) + End If BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) - BattleScreen.BattleQuery.Add(StatAnimation) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val @@ -3693,27 +3695,28 @@ End If End If '***STAT DECREASE ANIMATION*** - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) - Dim maxAmount As Integer = 20 * val - Dim currentAmount As Integer = 0 - While currentAmount <= maxAmount - Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statDown") - Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim maxAmount As Integer = 20 * val + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\statDown") + Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) + Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) - Dim Position As New Vector3(xPos, 0.8, zPos) - Dim Destination As New Vector3(xPos, -0.4, zPos) - Dim Scale As New Vector3(0.2F) + Dim Position As New Vector3(xPos, 0.8, zPos) + Dim Destination As New Vector3(xPos, -0.4, zPos) + Dim Scale As New Vector3(0.2F) - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) - Dim startDelay As Double = 5.0 * Random.NextDouble() - - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) - Threading.Interlocked.Increment(currentAmount) - End While - StatAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0.0F, 10.0F) - BattleScreen.BattleQuery.Add(StatAnimation) + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + Threading.Interlocked.Increment(currentAmount) + End While + BattleScreen.BattleQuery.Add(StatAnimation) + End If + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Lower", False)) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val Case 2 @@ -3941,8 +3944,10 @@ Public Sub GainHP(ByVal HPAmount As Integer, ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String) Dim p As Pokemon = BattleScreen.OwnPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC If own = False Then p = BattleScreen.OppPokemon + pNPC = BattleScreen.OppPokemonNPC End If If p.HP < p.MaxHP And p.HP > 0 And p.Status <> Pokemon.StatusProblems.Fainted Then @@ -3962,6 +3967,30 @@ BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, -HPAmount, New Vector2(300, 256))) End If + '***HP INCREASE ANIMATION*** + If Core.Player.ShowBattleAnimations <> 0 Then + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim maxAmount As Integer = 20 + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatChange\Heal") + Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) + Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) + + Dim Position As New Vector3(xPos, -0.4, zPos) + Dim Destination As New Vector3(xPos, 0.8, zPos) + Dim Scale As New Vector3(0.2F) + + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + Threading.Interlocked.Increment(currentAmount) + End While + BattleScreen.BattleQuery.Add(StatAnimation) + End If + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Heal", False)) + If message <> "" Then BattleScreen.BattleQuery.Add(New TextQueryObject(message)) End If @@ -3996,14 +4025,14 @@ End If BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(sound, False, 0.0F)) End If - - Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 0, 0) - HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 1, 0) - HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 2, 0) - HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 3, 0) - BattleScreen.BattleQuery.Add(HitAnimation) - + If Core.Player.ShowBattleAnimations <> 0 Then + Dim HitAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 0, 0) + HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 1, 0) + HitAnimation.AnimationFade(Nothing, False, 1, False, 0, 2, 0) + HitAnimation.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + BattleScreen.BattleQuery.Add(HitAnimation) + End If If own = True Then BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, HPAmount, New Vector2(200, 256))) Else @@ -5356,24 +5385,26 @@ If .OwnPokemon.Ability.Name.ToLower() <> "magic guard" Then If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison 'Poison animation - Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - BattleScreen.BattleQuery.Add(PoisonAnimation) + BattleScreen.BattleQuery.Add(PoisonAnimation) + End If 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP / 8), True, True, BattleScreen, "The poison hurt " & .OwnPokemon.GetDisplayName() & ".", "poison") End If @@ -5382,24 +5413,26 @@ .FieldEffects.OwnPoisonCounter += 1 Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) 'Poison animation - Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - BattleScreen.BattleQuery.Add(PoisonAnimation) + BattleScreen.BattleQuery.Add(PoisonAnimation) + End If 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP * multiplier), True, True, BattleScreen, "The toxic hurt " & .OwnPokemon.GetDisplayName() & ".", "badpoison") End If @@ -5416,16 +5449,17 @@ End If 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25F, 0.25F, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) - BattleScreen.BattleQuery.Add(BurnAnimation) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25F, 0.25F, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BattleScreen.BattleQuery.Add(BurnAnimation) + End If 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6154,25 +6188,26 @@ If .OppPokemon.Ability.Name.ToLower() <> "magic guard" Then If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison 'Poison animation - Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - - BattleScreen.BattleQuery.Add(PoisonAnimation) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + BattleScreen.BattleQuery.Add(PoisonAnimation) + End If 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP / 8), False, False, BattleScreen, "The poison hurt " & .OppPokemon.GetDisplayName() & ".", "poison") End If @@ -6180,27 +6215,29 @@ If .OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then 'Opp Toxic .FieldEffects.OppPoisonCounter += 1 Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) - 'Poison animation - Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) + If Core.Player.ShowBattleAnimations <> 0 Then + 'Poison animation + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - BattleScreen.BattleQuery.Add(PoisonAnimation) - 'Actual damage - ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") + BattleScreen.BattleQuery.Add(PoisonAnimation) + 'Actual damage + ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") + End If End If End If End If @@ -6214,16 +6251,17 @@ reduceAmount = CInt(.OppPokemon.MaxHP / 16) End If 'Burn animation - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True) - BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) - BattleScreen.BattleQuery.Add(BurnAnimation) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True) + BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BattleScreen.BattleQuery.Add(BurnAnimation) + End If 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") End If @@ -6790,35 +6828,37 @@ BattleScreen.AddToQuery(InsertIndex, New TextQueryObject(insertMessage)) Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) + If Core.Player.ShowBattleAnimations <> 0 Then + ' Ball Closes + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination As Vector3 = New Vector3(0, 0, 0) - ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) - Dim SmokeReturned As Integer = 0 - Do - Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination As Vector3 = New Vector3(0, 0, 0) + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) - - Threading.Interlocked.Increment(SmokeReturned) - Loop While SmokeReturned <= 38 + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 + End If ' Pokemon disappears + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) - - ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(New Vector3(0.0F), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + If Core.Player.ShowBattleAnimations <> 0 Then + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + ' Ball returns + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(Nothing, BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + End If BattleScreen.AddToQuery(InsertIndex, BallReturn) Dim index As Integer = NewPokemonIndex @@ -6856,37 +6896,40 @@ ' Ball is thrown Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False, BattleScreen.OwnPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + If Core.Player.ShowBattleAnimations <> 0 Then + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - Dim BallThrowEntity As Entity = BallReturn.SpawnEntity(New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + Dim BallThrowEntity As Entity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) - ' Ball Opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + ' Ball Opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) - Dim SmokeSpawned As Integer = 0 - Do - Dim SmokePosition = New Vector3(0, 0.35, 0) - Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity As Entity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) + Dim SmokeEntity As Entity = BallThrow.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F) - BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) - Threading.Interlocked.Increment(SmokeSpawned) - Loop While SmokeSpawned <= 38 + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 + End If ' Pokemon appears BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) - ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokémon falls down + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + End If BattleScreen.AddToQuery(InsertIndex, BallThrow) End If @@ -7133,10 +7176,12 @@ If BattleScreen.IsTrainerBattle = False Then ChangeCameraAngle(1, False, BattleScreen) - Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMove(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) - BattleScreen.BattleQuery.Add(Faint) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + Faint.AnimationMove(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) + BattleScreen.BattleQuery.Add(Faint) + End If BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) @@ -7161,34 +7206,38 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(message)) - Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) - Dim SmokeReturned As Integer = 0 - Do - Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination = New Vector3(0, 0, 0) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + ' Ball Closes + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) - Threading.Interlocked.Increment(SmokeReturned) - Loop While SmokeReturned <= 38 + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 - ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + ' Pokemon disappears + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) - BattleScreen.BattleQuery.Add(BallReturn) + ' Ball returns + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), BattleScreen.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) + BattleScreen.BattleQuery.Add(BallReturn) + Else + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) + End If EndBattle(EndBattleReasons.WinTrainer, BattleScreen, False) If BattleScreen.IsRemoteBattle = True Then @@ -7223,35 +7272,38 @@ HasSwitchedInOpp = True BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) - Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - ' Ball Closes - BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) - Dim SmokeReturned As Integer = 0 - Do - Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeDestination = New Vector3(0, 0, 0) + ' Ball Closes + BallReturn.AnimationPlaySound("Battle\Pokeball\Open", 0, 0) + Dim SmokeReturned As Integer = 0 + Do + Dim SmokePosition = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + Dim SmokeDestination = New Vector3(0, 0, 0) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) - Threading.Interlocked.Increment(SmokeReturned) - Loop While SmokeReturned <= 38 + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) + Loop While SmokeReturned <= 38 - ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + ' Pokemon disappears + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) - ' Ball returns - BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) - Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture(BattleScreen.OppPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) - - BattleScreen.BattleQuery.Add(BallReturn) + ' Ball returns + BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) + Dim BallReturnEntity = BallReturn.SpawnEntity(New Vector3(0, 0, 0), BattleScreen.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 0F, 0F,, 0.3) + BattleScreen.BattleQuery.Add(BallReturn) + Else + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) + End If BattleScreen.SendInNewTrainerPokemon(index) Me.ApplyOppBatonPass(BattleScreen) @@ -7275,38 +7327,40 @@ BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) - ' Ball is thrown - Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + If Core.Player.ShowBattleAnimations <> 0 Then + ' Ball is thrown + Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), TextureManager.GetTexture(BattleScreen.OwnPokemon.CatchBall.TextureSource), New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) - ' Ball opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) - Dim SmokeSpawned As Integer = 0 - Do - Dim SmokePosition = New Vector3(0, 0.35, 0) - Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + ' Ball opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokePosition = New Vector3(0, 0.35, 0) + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeEntity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) - BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) - Threading.Interlocked.Increment(SmokeSpawned) - Loop While SmokeSpawned <= 38 + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 - ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) - BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + ' Pokemon appears + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) - ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + ' Pokémon falls down + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) - BattleScreen.BattleQuery.Add(BallThrow) + BattleScreen.BattleQuery.Add(BallThrow) + End If End If With BattleScreen diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index 919bc52ce..5e1b293b4 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -91,20 +91,15 @@ End Sub Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single, Optional ByVal startDelay As Single = 0.0F, Optional ByVal endDelay As Single = 0.0F) As Entity - Dim SpawnedEntity = New BattleAnimation3D(Position, Texture, Scale, 0, 0, False) + Dim NewPosition As Vector3 + If Not Position = Nothing Then + NewPosition = CurrentEntity.Position + Position + Else + NewPosition = CurrentEntity.Position + End If + Dim SpawnedEntity = New BattleAnimation3D(NewPosition, Texture, Scale, 0, 0, False) SpawnedEntity.Opacity = Opacity - If Not BattleFlipped = Nothing Then - If BattleFlipped = True Then - SpawnedEntity.Position.X = CurrentEntity.Position.X - Position.X - SpawnedEntity.Position.Y = CurrentEntity.Position.Y + Position.Y - SpawnedEntity.Position.Z = CurrentEntity.Position.Z - Position.Z - Else - SpawnedEntity.Position.X = CurrentEntity.Position.X + Position.X - SpawnedEntity.Position.Y = CurrentEntity.Position.Y + Position.Y - SpawnedEntity.Position.Z = CurrentEntity.Position.Z + Position.Z - End If - End If SpawnedEntities.Add(SpawnedEntity) Dim SpawnDelayEntity As BattleAnimation3D = New BattleAnimation3D(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay, True) @@ -135,28 +130,34 @@ Public Sub AnimationMove(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) Dim MoveEntity As Entity + Dim ModelEntity As Entity = Nothing Dim Destination As Vector3 + If Entity Is Nothing Then + MoveEntity = CurrentEntity + If Me.CurrentModel IsNot Nothing Then + ModelEntity = Me.CurrentModel + End If + Else + MoveEntity = Entity + End If + If Not BattleFlipped = Nothing Then If BattleFlipped = True Then DestinationX -= DestinationX * 2.0F DestinationZ -= DestinationZ * 2.0F End If - If Entity Is Nothing Then - MoveEntity = CurrentEntity - Else - MoveEntity = Entity - End If - Destination = CurrentEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ) + End If + If CurrentEntity Is Nothing Then + Destination = MoveEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ) Else - MoveEntity = Entity - Destination = New Vector3(DestinationX, DestinationY, DestinationZ) + Destination = CurrentEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ) End If Dim baEntityMove As BAEntityMove = New BAEntityMove(MoveEntity, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) AnimationSequence.Add(baEntityMove) - If Me.CurrentModel IsNot Nothing Then + If ModelEntity IsNot Nothing Then Dim baModelMove As BAEntityMove = New BAEntityMove(CType(CurrentModel, Entity), Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) AnimationSequence.Add(baModelMove) End If @@ -232,7 +233,7 @@ AnimationSequence.Add(baSound) End Sub - Public Sub AnimationBackground(Texture As Texture2D, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal FadeOut As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 0.0F) + Public Sub AnimationBackground(Texture As Texture2D, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal FadeOut As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = 0.0F) Dim baBackground As BABackground = New BABackground(Texture, TransitionSpeed, FadeIn, FadeOut, EndState, startDelay, endDelay, startState) AnimationSequence.Add(baBackground) End Sub diff --git a/P3D/Content/Sounds/Battle/Effects/Heal.wav b/P3D/Content/Sounds/Battle/Effects/Heal.wav new file mode 100644 index 0000000000000000000000000000000000000000..6e952de6dad7a40b4ea42386f074fc8e8bb996f3 GIT binary patch literal 83280 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 NvDJo+s8TWD{{lOAuD}2Q literal 0 HcmV?d00001 diff --git a/P3D/Pokemon/Attacks/Attack.vb b/P3D/Pokemon/Attacks/Attack.vb index 4c6f982c4..cdddaf3ee 100644 --- a/P3D/Pokemon/Attacks/Attack.vb +++ b/P3D/Pokemon/Attacks/Attack.vb @@ -2164,38 +2164,42 @@ #Region "Animation" Public Sub UserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) - If Core.Player.ShowBattleAnimations = 1 Then + If Core.Player.ShowBattleAnimations <> 0 Then + Dim BattleFlip As Boolean = False Dim CurrentPokemon As Pokemon = BattleScreen.OwnPokemon Dim CurrentEntity As NPC = BattleScreen.OwnPokemonNPC Dim CurrentModel As ModelEntity = BattleScreen.OwnPokemonModel If own = False Then + BattleFlip = True CurrentPokemon = BattleScreen.OppPokemon CurrentEntity = BattleScreen.OppPokemonNPC CurrentModel = BattleScreen.OppPokemonModel End If - Me.InternalUserPokemonMoveAnimation(BattleScreen, own, CurrentPokemon, CurrentEntity, CurrentModel) + Me.InternalUserPokemonMoveAnimation(BattleScreen, BattleFlip, CurrentPokemon, CurrentEntity, CurrentModel) End If End Sub - Public Overridable Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Public Overridable Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) 'Override this method in the attack class to insert the move animation query objects into the queue. End Sub Public Sub OpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) - If Core.Player.ShowBattleAnimations = 1 Then + If Core.Player.ShowBattleAnimations <> 0 Then + Dim BattleFlip As Boolean = False Dim CurrentPokemon As Pokemon = BattleScreen.OppPokemon Dim CurrentEntity As NPC = BattleScreen.OppPokemonNPC Dim CurrentModel As ModelEntity = BattleScreen.OppPokemonModel If own = False Then + BattleFlip = True CurrentPokemon = BattleScreen.OwnPokemon CurrentEntity = BattleScreen.OwnPokemonNPC CurrentModel = BattleScreen.OwnPokemonModel End If - Me.InternalOpponentPokemonMoveAnimation(BattleScreen, own, CurrentPokemon, CurrentEntity, CurrentModel) + Me.InternalOpponentPokemonMoveAnimation(BattleScreen, BattleFlip, CurrentPokemon, CurrentEntity, CurrentModel) End If End Sub - Public Overridable Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Public Overridable Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) 'Override this method in the attack class to insert the move animation query objects into the queue. End Sub diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index bcc8306f3..a1dbe0b35 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -63,14 +63,14 @@ End If End Sub - Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) + Dim FireballEntity = MoveAnimation.SpawnEntity(Nothing, TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 - Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1, CSng(i * 0.2)) MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 @@ -78,14 +78,14 @@ BattleScreen.BattleQuery.Add(MoveAnimation) End Sub - Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim FireballEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) + Dim FireballEntity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) - MoveAnimation.AnimationMove(FireballEntity, True, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) For i = 0 To 12 - Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(3.0 - i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(-2.0 + i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1, CSng(i * 0.2)) MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index f895c3cf2..b728851a3 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -92,8 +92,8 @@ End If End Sub - Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) Dim maxAmount As Integer = 8 Dim currentAmount As Integer = 0 MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index 369515629..9558524c9 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -62,8 +62,8 @@ End If End Sub - Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) Dim SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index d14a3c279..b3441945a 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -55,10 +55,10 @@ Me.AIField2 = AIField.Nothing End Sub - Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) - Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 3) + Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 3) MoveAnimation.AnimationFade(PoundEntity, True, 1.0F, False, 0.0F, 3, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index e0d981ea9..9179a9538 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -52,15 +52,15 @@ '#End End Sub - Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own, CurrentModel) + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip, CurrentModel) MoveAnimation.AnimationMove(Nothing, False, -0.5F, 0, 0, 0.3F, False, False, 0, 0,,, 2) MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.3F, False, False, 1, 0,,, 2) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub - Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 0) Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 0, 2) MoveAnimation.AnimationFade(SpawnEntity, True, 1.0F, False, 0.0F, 2, 0) diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index f270a269e..7c872fc53 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -65,9 +65,9 @@ End If End Sub - Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(Nothing, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) @@ -75,12 +75,12 @@ BattleScreen.BattleQuery.Add(MoveAnimation) End Sub - Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal own As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, own) + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) - MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) From 3900fe7191ccb456606ba2d836fbc300a7e4bf58 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 29 Oct 2021 18:54:00 +0200 Subject: [PATCH 16/57] =?UTF-8?q?Fixed=20Spawned=20Entities=20not=20being?= =?UTF-8?q?=20removed=20after=20the=20animation=20is=20done=20+=20Made=20t?= =?UTF-8?q?he=20switch=20Pok=C3=A9mon=20animation=20look=20better?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- P3D/Battle/BattleAnimations/BAEntityMove.vb | 19 ++++- .../BattleAnimations/BAEntityOpacity.vb | 10 ++- P3D/Battle/BattleAnimations/BAEntityRotate.vb | 18 +++-- P3D/Battle/BattleAnimations/BAEntityScale.vb | 10 ++- .../BattleAnimations/BAEntityTextureChange.vb | 10 ++- .../BattleAnimations/BattleAnimation3D.vb | 6 ++ P3D/Battle/BattleSystemV2/Battle.vb | 27 +++---- .../QueryObjects/AnimationQueryObject.vb | 80 ++++++++++--------- P3D/Pokemon/Attacks/Fire/Ember.vb | 4 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 2 +- 10 files changed, 117 insertions(+), 69 deletions(-) diff --git a/P3D/Battle/BattleAnimations/BAEntityMove.vb b/P3D/Battle/BattleAnimations/BAEntityMove.vb index cb5fa1e0e..daf6a2eba 100644 --- a/P3D/Battle/BattleAnimations/BAEntityMove.vb +++ b/P3D/Battle/BattleAnimations/BAEntityMove.vb @@ -5,6 +5,7 @@ Public TargetEntity As Entity Public Destination As Vector3 Public MoveSpeed As Single + Public MoveYSpeed As Single Public InterpolationSpeed As Single Public SpinX As Boolean = False Public SpinZ As Boolean = False @@ -13,6 +14,7 @@ Public MovementCurve As Integer = 3 Private EasedIn As Boolean = False Private EasedOut As Boolean = False + Public RemoveEntityAfter As Boolean Public Enum Curves As Integer EaseIn EaseOut @@ -20,11 +22,17 @@ Linear End Enum - Public Sub New(ByRef Entity As Entity, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) + Public Sub New(ByRef Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Destination As Vector3, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3, Optional MoveYSpeed As Single = 0.0F) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + Me.RemoveEntityAfter = RemoveEntityAfter Me.Destination = Destination Me.MoveSpeed = Speed + If MoveYSpeed = 0F Then + Me.MoveYSpeed = MoveSpeed + Else + Me.MoveYSpeed = MoveYSpeed + End If Me.MovementCurve = CType(MovementCurve, Curves) Me.SpinX = SpinX @@ -121,13 +129,13 @@ End If End If If TargetEntity.Position.Y < Me.Destination.Y Then - TargetEntity.Position.Y += Me.MoveSpeed + TargetEntity.Position.Y += Me.MoveYSpeed If TargetEntity.Position.Y >= Me.Destination.Y Then TargetEntity.Position.Y = Me.Destination.Y End If ElseIf TargetEntity.Position.Y > Me.Destination.Y Then - TargetEntity.Position.Y -= Me.MoveSpeed + TargetEntity.Position.Y -= Me.MoveYSpeed If TargetEntity.Position.Y <= Me.Destination.Y Then TargetEntity.Position.Y = Me.Destination.Y @@ -185,5 +193,10 @@ Me.Ready = True End If End Sub + Public Overrides Sub DoRemoveEntity() + If Me.RemoveEntityAfter = True Then + TargetEntity.CanBeRemoved = True + End If + End Sub End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAEntityOpacity.vb b/P3D/Battle/BattleAnimations/BAEntityOpacity.vb index 959d733b5..0f6fe5f55 100644 --- a/P3D/Battle/BattleAnimations/BAEntityOpacity.vb +++ b/P3D/Battle/BattleAnimations/BAEntityOpacity.vb @@ -6,9 +6,11 @@ Public TransitionSpeed As Single = 0.01F Public FadeIn As Boolean = False Public EndState As Single = 0.0F + Public RemoveEntityAfter As Boolean - Public Sub New(ByVal entity As Entity, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal StartState As Single = 1.0F) + Public Sub New(ByVal entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal StartState As Single = 1.0F) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) + Me.RemoveEntityAfter = RemoveEntityAfter Me.EndState = EndState Me.FadeIn = FadeIn Me.TransitionSpeed = TransitionSpeed @@ -41,5 +43,9 @@ Me.Ready = True End If End Sub - + Public Overrides Sub DoRemoveEntity() + If Me.RemoveEntityAfter = True Then + TargetEntity.CanBeRemoved = True + End If + End Sub End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAEntityRotate.vb b/P3D/Battle/BattleAnimations/BAEntityRotate.vb index cbcda0f7b..2ac3c8b7e 100644 --- a/P3D/Battle/BattleAnimations/BAEntityRotate.vb +++ b/P3D/Battle/BattleAnimations/BAEntityRotate.vb @@ -9,18 +9,19 @@ Dim ReturnVector As Vector3 Dim hasReturned As Boolean = False Dim DoRotation As Vector3 = New Vector3(1.0F) + Public RemoveEntityAfter As Boolean = False - Public Sub New(ByVal Entity As Entity, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single) + Public Sub New(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) - + Me.RemoveEntityAfter = RemoveEntityAfter Me.RotationSpeedVector = RotationSpeedVector Me.EndRotation = EndRotation Me.ReturnVector = Me.Rotation Me.TargetEntity = Entity End Sub - Public Sub New(ByVal Entity As Entity, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean) - Me.New(Entity, RotationSpeedVector, EndRotation, startDelay, endDelay) + Public Sub New(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean) + Me.New(Entity, RemoveEntityAfter, RotationSpeedVector, EndRotation, startDelay, endDelay) If DoXRotation = False Then DoRotation.X = 0.0F @@ -33,8 +34,8 @@ End If End Sub - Public Sub New(ByVal Entity As Entity, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) - Me.New(Entity, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation) + Public Sub New(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedVector As Vector3, ByVal EndRotation As Vector3, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) + Me.New(Entity, RemoveEntityAfter, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation) Me.DoReturn = DoReturn End Sub @@ -128,4 +129,9 @@ Return True End Function + Public Overrides Sub DoRemoveEntity() + If Me.RemoveEntityAfter = True Then + TargetEntity.CanBeRemoved = True + End If + End Sub End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAEntityScale.vb b/P3D/Battle/BattleAnimations/BAEntityScale.vb index 1e687de4c..a99c261dd 100644 --- a/P3D/Battle/BattleAnimations/BAEntityScale.vb +++ b/P3D/Battle/BattleAnimations/BAEntityScale.vb @@ -9,10 +9,11 @@ Public Anchors As String '1 = Bottom, 2 = Top, 3 = Left, 4 = Right. Combinations are possible. Public Change As New Vector3(1) + Public RemoveEntityAfter As Boolean - Public Sub New(ByVal Entity As Entity, ByVal Scale As Vector3, ByVal Grow As Boolean, ByVal EndSize As Vector3, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal Anchors As String) + Public Sub New(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Scale As Vector3, ByVal Grow As Boolean, ByVal EndSize As Vector3, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal Anchors As String) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, Scale, startDelay, endDelay) - + Me.RemoveEntityAfter = RemoveEntityAfter Me.Anchors = Anchors Me.Grow = Grow Me.EndSize = EndSize @@ -104,5 +105,10 @@ Public Sub SetChange(ByVal changeX As Single, ByVal changeY As Single, ByVal changeZ As Single) Me.Change = New Vector3(changeX, changeY, changeZ) End Sub + Public Overrides Sub DoRemoveEntity() + If Me.RemoveEntityAfter = True Then + TargetEntity.CanBeRemoved = True + End If + End Sub End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb b/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb index 4b266b706..ced0d473b 100644 --- a/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb +++ b/P3D/Battle/BattleAnimations/BAEntityTextureChange.vb @@ -4,10 +4,11 @@ Public Texture As Texture2D Public TargetEntity As Entity + Public RemoveEntityAfter As Boolean - Public Sub New(ByVal Entity As Entity, Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) + Public Sub New(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single) MyBase.New(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay) - + Me.RemoveEntityAfter = RemoveEntityAfter Me.TargetEntity = Entity Me.Texture = Texture Me.AnimationType = AnimationTypes.Texture @@ -18,4 +19,9 @@ Me.Ready = True End Sub + Public Overrides Sub DoRemoveEntity() + If Me.RemoveEntityAfter = True Then + TargetEntity.CanBeRemoved = True + End If + End Sub End Class \ No newline at end of file diff --git a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb index 48e63f3a0..1eb6bfeb2 100644 --- a/P3D/Battle/BattleAnimations/BattleAnimation3D.vb +++ b/P3D/Battle/BattleAnimations/BattleAnimation3D.vb @@ -50,6 +50,7 @@ End If Else CanRemove = True + DoRemoveEntity() End If Else If startDelay > 0.0F Then @@ -61,6 +62,8 @@ Else If SpawnedEntity = True Then Ready = True + Else + Me.Visible = True End If DoActionActive() End If @@ -87,6 +90,9 @@ Public Overridable Sub DoActionActive() 'Insert code in Inherits class here. End Sub + Public Overridable Sub DoRemoveEntity() + 'Insert code in Inherits class here. + End Sub Public Overrides Sub Render() If Me.startDelay <= 0.0F Then diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index bc3d6609f..6efb7304a 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -6842,7 +6842,6 @@ Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) Dim SmokeEntity As Entity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1.0F) - BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) @@ -6900,7 +6899,7 @@ BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) Dim BallThrowEntity As Entity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) ' Ball Opens BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) @@ -6912,10 +6911,9 @@ Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - - Dim SmokeEntity As Entity = BallThrow.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) + Dim SmokeEntity As Entity = BallThrow.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) @@ -6923,12 +6921,12 @@ End If ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OwnPokemon.Number), 4, 0,, True) If Core.Player.ShowBattleAnimations <> 0 Then ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) End If BattleScreen.AddToQuery(InsertIndex, BallThrow) @@ -7219,9 +7217,10 @@ Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) + Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 @@ -7285,7 +7284,7 @@ Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) Dim SmokeEntity = BallReturn.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) BallReturn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 0.0F, 0.0F) Threading.Interlocked.Increment(SmokeReturned) @@ -7333,7 +7332,7 @@ BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0F,, 0.3) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) ' Ball opens BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) @@ -7345,19 +7344,19 @@ Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 10.0F) - Dim SmokeEntity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) + Dim SmokeEntity = BallThrow.SpawnEntity(SmokePosition, SmokeTexture, SmokeScale, 1, 3) BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 4, 0) + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 4) + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 4) BattleScreen.BattleQuery.Add(BallThrow) End If diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index 5e1b293b4..5dda41573 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -79,6 +79,16 @@ Entity.Update() Entity.UpdateEntity() Next + For i = 0 To Me.SpawnedEntities.Count - 1 + If i <= SpawnedEntities.Count - 1 Then + Dim entity As Entity = SpawnedEntities(i) + + If entity.CanBeRemoved = True Then + i -= 1 + RemoveEntity(entity) + End If + End If + Next End If End Sub @@ -97,13 +107,12 @@ Else NewPosition = CurrentEntity.Position End If - Dim SpawnedEntity = New BattleAnimation3D(NewPosition, Texture, Scale, 0, 0, False) + Dim SpawnedEntity = New BattleAnimation3D(NewPosition, Texture, Scale, startDelay, endDelay, False) SpawnedEntity.Opacity = Opacity + SpawnedEntity.Visible = False SpawnedEntities.Add(SpawnedEntity) - Dim SpawnDelayEntity As BattleAnimation3D = New BattleAnimation3D(New Vector3(0.0F), TextureManager.DefaultTexture, New Vector3(1.0F), startDelay, endDelay, True) - AnimationSequence.Add(SpawnDelayEntity) Return SpawnedEntity End Function Public Sub RemoveEntity(Entity As Entity) @@ -118,17 +127,12 @@ TextureChangeEntity = Entity End If - Dim baEntityTextureChange As BAEntityTextureChange = New BAEntityTextureChange(TextureChangeEntity, Texture, startDelay, endDelay) + Dim baEntityTextureChange As BAEntityTextureChange = New BAEntityTextureChange(TextureChangeEntity, RemoveEntityAfter, Texture, startDelay, endDelay) AnimationSequence.Add(baEntityTextureChange) - If RemoveEntityAfter = True Then - If baEntityTextureChange.CanRemove = True Then - RemoveEntity(TextureChangeEntity) - End If - End If End Sub - Public Sub AnimationMove(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3) + Public Sub AnimationMove(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal DestinationX As Single, ByVal DestinationY As Single, ByVal DestinationZ As Single, ByVal Speed As Single, ByVal SpinX As Boolean, ByVal SpinZ As Boolean, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal SpinXSpeed As Single = 0.1F, Optional ByVal SpinZSpeed As Single = 0.1F, Optional MovementCurve As Integer = 3, Optional MoveYSpeed As Single = 0.0F) Dim MoveEntity As Entity Dim ModelEntity As Entity = Nothing Dim Destination As Vector3 @@ -139,7 +143,7 @@ ModelEntity = Me.CurrentModel End If Else - MoveEntity = Entity + MoveEntity = Entity End If If Not BattleFlipped = Nothing Then @@ -154,77 +158,79 @@ Destination = CurrentEntity.Position + New Vector3(DestinationX, DestinationY, DestinationZ) End If - Dim baEntityMove As BAEntityMove = New BAEntityMove(MoveEntity, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) + Dim baEntityMove As BAEntityMove = New BAEntityMove(MoveEntity, RemoveEntityAfter, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve, MoveYSpeed) AnimationSequence.Add(baEntityMove) If ModelEntity IsNot Nothing Then - Dim baModelMove As BAEntityMove = New BAEntityMove(CType(CurrentModel, Entity), Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve) + Dim baModelMove As BAEntityMove = New BAEntityMove(CType(CurrentModel, Entity), False, Destination, Speed, SpinX, SpinZ, startDelay, endDelay, SpinXSpeed, SpinZSpeed, MovementCurve, MoveYSpeed) AnimationSequence.Add(baModelMove) End If - If RemoveEntityAfter = True Then - If baEntityMove.CanRemove = True Then - RemoveEntity(MoveEntity) - End If - End If End Sub Public Sub AnimationFade(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal TransitionSpeed As Single, ByVal FadeIn As Boolean, ByVal EndState As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal startState As Single = -1.0F) Dim FadeEntity As Entity + Dim FadeModel As Entity = Nothing If Entity Is Nothing Then FadeEntity = CurrentEntity + If Me.CurrentModel IsNot Nothing Then + FadeModel = Me.CurrentModel + End If Else FadeEntity = Entity End If If startState = -1.0F Then startState = FadeEntity.Opacity - Dim baEntityOpacity As BAEntityOpacity = New BAEntityOpacity(FadeEntity, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) + Dim baEntityOpacity As BAEntityOpacity = New BAEntityOpacity(FadeEntity, RemoveEntityAfter, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) AnimationSequence.Add(baEntityOpacity) - If Me.CurrentModel IsNot Nothing Then - Dim baModelOpacity As BAEntityOpacity = New BAEntityOpacity(CType(CurrentModel, Entity), TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) + If FadeModel IsNot Nothing Then + Dim baModelOpacity As BAEntityOpacity = New BAEntityOpacity(CType(FadeModel, Entity), False, TransitionSpeed, FadeIn, EndState, startDelay, endDelay, startState) AnimationSequence.Add(baModelOpacity) End If - If RemoveEntityAfter = True Then - If baEntityOpacity.CanRemove = True Then - RemoveEntity(FadeEntity) - End If - End If End Sub Public Sub AnimationRotate(Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal RotationSpeedX As Single, ByVal RotationSpeedY As Single, ByVal RotationSpeedZ As Single, ByVal EndRotationX As Single, ByVal EndRotationY As Single, ByVal EndRotationZ As Single, ByVal startDelay As Single, ByVal endDelay As Single, ByVal DoXRotation As Boolean, ByVal DoYRotation As Boolean, ByVal DoZRotation As Boolean, ByVal DoReturn As Boolean) Dim RotateEntity As Entity + Dim RotateModel As Entity = Nothing If Entity Is Nothing Then RotateEntity = CurrentEntity + If Me.CurrentModel IsNot Nothing Then + RotateModel = Me.CurrentModel + End If Else RotateEntity = Entity End If Dim RotationSpeedVector As Vector3 = New Vector3(RotationSpeedX, RotationSpeedY, RotationSpeedZ) Dim EndRotation As Vector3 = New Vector3(EndRotationX, EndRotationY, EndRotationZ) - Dim baEntityRotate As BAEntityRotate = New BAEntityRotate(RotateEntity, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation, DoReturn) + Dim baEntityRotate As BAEntityRotate = New BAEntityRotate(RotateEntity, RemoveEntityAfter, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation, DoReturn) AnimationSequence.Add(baEntityRotate) - If RemoveEntityAfter = True Then - If baEntityRotate.CanRemove = True Then - RemoveEntity(RotateEntity) - End If + + If RotateModel IsNot Nothing Then + Dim baModelOpacity As BAEntityRotate = New BAEntityRotate(CType(RotateModel, Entity), False, RotationSpeedVector, EndRotation, startDelay, endDelay, DoXRotation, DoYRotation, DoZRotation, DoReturn) + AnimationSequence.Add(baModelOpacity) End If + End Sub Public Sub AnimationScale(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") Dim ScaleEntity As Entity + Dim ScaleModel As Entity = Nothing If Entity Is Nothing Then ScaleEntity = CurrentEntity + If Me.CurrentModel IsNot Nothing Then + ScaleModel = Me.CurrentModel + End If Else ScaleEntity = Entity End If Dim Scale As Vector3 = ScaleEntity.Scale Dim EndSize As Vector3 = New Vector3(EndSizeX, EndSizeY, EndSizeZ) - Dim baBillSize As BAEntityScale = New BAEntityScale(ScaleEntity, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) - AnimationSequence.Add(baBillSize) - If RemoveEntityAfter = True Then - If baBillSize.CanRemove = True Then - RemoveEntity(ScaleEntity) - End If + Dim baEntityScale As BAEntityScale = New BAEntityScale(ScaleEntity, RemoveEntityAfter, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) + AnimationSequence.Add(baEntityScale) + + If ScaleModel IsNot Nothing Then + Dim baModelScale As BAEntityScale = New BAEntityScale(CType(ScaleModel, Entity), False, Scale, Grow, EndSize, SizeSpeed, startDelay, endDelay, Anchors) End If End Sub diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index a1dbe0b35..d8e04c15a 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -82,10 +82,10 @@ Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) Dim FireballEntity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) - MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationMove(FireballEntity, True, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) For i = 0 To 12 - Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(-2.0 + i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1, CSng(i * 0.2)) + Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(-3.0 + i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1, CSng(i * 0.2)) MoveAnimation.AnimationFade(SmokeEntity, True, 0.02, False, 0.0, CSng(i * 0.2), 0.0) i += 1 diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 7c872fc53..8104dbcd4 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -80,7 +80,7 @@ Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) - MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) From 4b3b900e40202ada7463191f6b8a1e1852f3cb88 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 5 Nov 2021 23:09:33 +0100 Subject: [PATCH 17/57] Start of battle pokeball throw animation and some little fixes --- P3D/Battle/BattleSystemV2/Battle.vb | 16 +- P3D/Battle/BattleSystemV2/BattleScreen.vb | 232 +++++++++++++++++++--- 2 files changed, 208 insertions(+), 40 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 6efb7304a..0a74526d1 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -7227,7 +7227,7 @@ ' Pokemon disappears BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -7292,7 +7292,7 @@ ' Pokemon disappears BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) - BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 4) + BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) @@ -7326,12 +7326,12 @@ BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) + Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) If Core.Player.ShowBattleAnimations <> 0 Then ' Ball is thrown - Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) ' Ball opens @@ -7350,11 +7350,11 @@ BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 - - ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + End If + ' Pokemon appears + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) - + If Core.Player.ShowBattleAnimations <> 0 Then ' Pokémon falls down BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 4) diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index f96d4e96d..e2d56b0df 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -225,12 +225,17 @@ Dim ownModel As String = GetModelName(True) Dim oppModel As String = GetModelName(False) + Dim InitiallyVisibleOwn As Integer = 1 + If Core.Player.ShowBattleAnimations <> 0 Then + InitiallyVisibleOwn = 0 + End If + If ownModel = "" Then - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, InitiallyVisibleOwn), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 13) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) - OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 13) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) + OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 13) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, InitiallyVisibleOwn), ModelEntity) End If Screen.Level.Entities.Add(OwnPokemonNPC) @@ -276,9 +281,50 @@ Dim q3 As CameraQueryObject = New CameraQueryObject(New Vector3(14, 0, 11), New Vector3(14, 0, 15), 0.01F, 0.01F, MathHelper.PiOver2, MathHelper.PiOver2, 0.0F, 0.0F) q3.PassThis = True - Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) Dim q4 As TextQueryObject = New TextQueryObject("Go, " & Me.OwnPokemon.GetDisplayName() & "!") + Me.BattleQuery.AddRange({cq, q1, q, q2, q22, q3, q4}) + + ' Ball is thrown + Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) + + If Core.Player.ShowBattleAnimations <> 0 Then + BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrow.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + + Dim BallThrowEntity As Entity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) + + ' Ball Opens + BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) + + Dim SmokeEntity As Entity = BallThrow.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) + BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 + End If + + ' Pokemon appears + BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + BallThrow.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) + + If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokémon falls down + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) + End If + + Me.BattleQuery.Add(BallThrow) + Dim q5 As ToggleMenuQueryObject = New ToggleMenuQueryObject(Me.BattleMenu.Visible) Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) @@ -286,8 +332,6 @@ cq2.PassThis = True - Me.BattleQuery.AddRange({cq, q1, q, q2, q22, q3, q31, q4}) - Battle.SwitchInOwn(Me, meIndex, True, -1) Battle.SwitchInOpp(Me, True, 0) @@ -359,23 +403,33 @@ Dim ownModel As String = GetModelName(True) Dim oppModel As String = GetModelName(False) + Dim InitiallyVisibleOwn As Integer = 1 + If Core.Player.ShowBattleAnimations <> 0 Then + InitiallyVisibleOwn = 0 + End If + If ownModel = "" Then - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, InitiallyVisibleOwn), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) - OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, InitiallyVisibleOwn), ModelEntity) End If Screen.Level.Entities.Add(OwnPokemonNPC) Screen.Level.Entities.Add(OwnPokemonModel) + Dim InitiallyVisibleOpp As Integer = 1 + If Core.Player.ShowBattleAnimations <> 0 Then + InitiallyVisibleOpp = 0 + End If + If oppModel = "" Then - OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OppPokemon), 1, OppPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) + OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OppPokemon), 1, OppPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}, InitiallyVisibleOpp), NPC) OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else - OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OppPokemon), 1, OppPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) - OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, oppModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) + OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OppPokemon), 1, OppPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) + OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, oppModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, InitiallyVisibleOpp), ModelEntity) End If Screen.Level.Entities.Add(OppPokemonNPC) @@ -401,22 +455,93 @@ Dim q As CameraQueryObject = New CameraQueryObject(New Vector3(13, 0, 15), New Vector3(21, 0, 15), 0.05F, 0.05F, -0.8F, 1.4F, 0.0F, 0.0F, 0.016F, 0.016F) q.PassThis = True - Dim hisher As String = "his" - If Trainer.Gender = 1 Then - hisher = "her" + Dim q1 As TextQueryObject = New TextQueryObject(Trainer.Name & " wants to battle!") + + ' Ball is thrown + Dim BallThrowOpp As AnimationQueryObject = New AnimationQueryObject(OppPokemonNPC, True, OppPokemonModel) + + If Core.Player.ShowBattleAnimations <> 0 Then + BallThrowOpp.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrowOpp.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + Dim BallThrowEntity As Entity = BallThrowOpp.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallThrowOpp.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) + + ' Ball Opens + BallThrowOpp.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + Dim SmokeSpawnedOpp As Integer = 0 + Do + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) + + Dim SmokeEntity As Entity = BallThrowOpp.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) + BallThrowOpp.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + + Threading.Interlocked.Increment(SmokeSpawnedOpp) + Loop While SmokeSpawnedOpp <= 38 + End If + ' Pokemon appears + BallThrowOpp.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + BallThrowOpp.AnimationPlaySound(CStr(Me.OppPokemon.Number), 4, 0,, True) + + ' Pokémon falls down + If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokémon falls down + BallThrowOpp.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 4, 0,,, 3) End If - Dim q1 As New PlaySoundQueryObject(OppPokemon.Number.ToString(), True, 5.0F) - Dim q2 As TextQueryObject = New TextQueryObject(Trainer.Name & " and " & hisher & " " & Me.OppPokemon.GetDisplayName() & " want to battle!") - - Dim q22 As CameraQueryObject = New CameraQueryObject(New Vector3(14, 0, 15), New Vector3(13, 0, 15), 0.05F, 0.05F, MathHelper.PiOver2, -0.8F, 0.0F, 0.0F, 0.05F, 0.05F) + Dim q2 As CameraQueryObject = New CameraQueryObject(New Vector3(14, 0, 15), New Vector3(13, 0, 15), 0.05F, 0.05F, MathHelper.PiOver2, -0.8F, 0.0F, 0.0F, 0.05F, 0.05F) Dim q3 As CameraQueryObject = New CameraQueryObject(New Vector3(14, 0, 11), New Vector3(14, 0, 15), 0.01F, 0.01F, MathHelper.PiOver2, MathHelper.PiOver2, 0.0F, 0.0F) q3.PassThis = True - Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) Dim q4 As TextQueryObject = New TextQueryObject("Go, " & Me.OwnPokemon.GetDisplayName() & "!") + Me.BattleQuery.AddRange({cq, q, q1, BallThrowOpp, q2, q3, q4}) + + ' Ball is thrown + Dim BallThrowOwn As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) + + If Core.Player.ShowBattleAnimations <> 0 Then + BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrowOwn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + + Dim BallThrowEntity As Entity = BallThrowOwn.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallThrowOwn.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) + + ' Ball Opens + BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) + + Dim SmokeEntity As Entity = BallThrowOwn.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) + BallThrowOwn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 + End If + + ' Pokemon appears + BallThrowOwn.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + BallThrowOwn.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) + + If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokémon falls down + BallThrowOwn.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) + End If + + Me.BattleQuery.Add(BallThrowOwn) + Dim q5 As ToggleMenuQueryObject = New ToggleMenuQueryObject(Me.BattleMenu.Visible) Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) @@ -424,8 +549,6 @@ cq2.PassThis = True - Me.BattleQuery.AddRange({cq, q, q1, q2, q22, q3, q31, q4}) - Battle.SwitchInOwn(Me, meIndex, True, OwnPokemonIndex) Battle.SwitchInOpp(Me, True, OppPokemonIndex) TempPVPBattleQuery.Clear() @@ -496,10 +619,10 @@ Dim oppModel As String = GetModelName(False) If ownModel = "" Then - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) End If @@ -507,10 +630,10 @@ Screen.Level.Entities.Add(OwnPokemonModel) If oppModel = "" Then - OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) + OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else - OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) + OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, oppModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) End If @@ -607,22 +730,27 @@ Dim ownModel As String = GetModelName(True) Dim oppModel As String = GetModelName(False) + Dim InitiallyVisibleOwn As Integer = 1 + If Core.Player.ShowBattleAnimations <> 0 Then + InitiallyVisibleOwn = 0 + End If + If ownModel = "" Then - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, InitiallyVisibleOwn), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) - OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) + OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, InitiallyVisibleOwn), ModelEntity) End If Screen.Level.Entities.Add(OwnPokemonNPC) Screen.Level.Entities.Add(OwnPokemonModel) If oppModel = "" Then - OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) + OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else - OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 12.5F) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) + OppPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(15, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(WildPokemon), 1, WildPokemon.GetDisplayName(), 1, True, "Still", New List(Of Rectangle)}), NPC) OppPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(15, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 1.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, oppModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) End If @@ -657,6 +785,48 @@ Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) Dim q4 As TextQueryObject = New TextQueryObject("Go, " & Me.OwnPokemon.GetDisplayName() & "!") + Me.BattleQuery.AddRange({cq, q1, q, q2, q22, q3, q4}) + + ' Ball is thrown + Dim BallThrowOwn As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) + + If Core.Player.ShowBattleAnimations <> 0 Then + BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) + BallThrowOwn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) + + Dim BallThrowEntity As Entity = BallThrowOwn.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + BallThrowOwn.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) + + ' Ball Opens + BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) + + Dim SmokeSpawned As Integer = 0 + Do + Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) + + Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") + + Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) + Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) + + Dim SmokeEntity As Entity = BallThrowOwn.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) + BallThrowOwn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) + + Threading.Interlocked.Increment(SmokeSpawned) + Loop While SmokeSpawned <= 38 + End If + + ' Pokemon appears + BallThrowOwn.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + BallThrowOwn.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) + + If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokémon falls down + BallThrowOwn.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) + End If + + Me.BattleQuery.Add(BallThrowOwn) + Dim q5 As ToggleMenuQueryObject = New ToggleMenuQueryObject(Me.BattleMenu.Visible) Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) @@ -664,8 +834,6 @@ cq2.PassThis = True - Me.BattleQuery.AddRange({cq, q, q1, q2, q22, q3, q31, q4}) - Battle.SwitchInOwn(Me, meIndex, True, -1) Battle.SwitchInOpp(Me, True, 0) From c1ec08fe7f3f40f3c16ac3c32113cb3cd27dd814 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sat, 6 Nov 2021 11:26:34 +0100 Subject: [PATCH 18/57] Various Battle Improvements and Fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improved timing BlockIn & BlockOut BattleIntro animations * Removed player ball throw animations at the start of the battle for battles that are not pvp * Fixed absorb animation * Improved the faint animation and removed the unnecessary camera angle changes when a pokémon faints --- P3D/Battle/BattleSystemV2/Battle.vb | 39 ++++--- P3D/Battle/BattleSystemV2/BattleScreen.vb | 130 ++++------------------ P3D/Pokemon/Attacks/Grass/Absorb.vb | 10 +- P3D/Screens/BattleIntroScreen.vb | 6 +- 4 files changed, 49 insertions(+), 136 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 0a74526d1..3e1b9971a 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2543,13 +2543,19 @@ p.HP = 0 p.Status = Pokemon.StatusProblems.Fainted Me.ChangeCameraAngle(1, own, BattleScreen) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject(p.Number.ToString(), True)) If message = "" Then message = p.GetDisplayName() & " fainted!" End If BattleScreen.BattleQuery.Add(New TextQueryObject(message)) + If BattleScreen.IsTrainerBattle = False AndAlso Core.Player.ShowBattleAnimations <> 0 Then + Dim FaintAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + FaintAnimation.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + FaintAnimation.AnimationMove(Nothing, False, 0, -1, 0, 0.05, False, False, 2, 0,,, 3) + BattleScreen.BattleQuery.Add(FaintAnimation) + End If + Dim str = p.AdditionalData.ToLower() Select Case str Case "mega", "mega_x", "mega_y", "primal", "blade" @@ -3424,9 +3430,9 @@ Dim Position As New Vector3(xPos, -0.4, zPos) Dim Destination As New Vector3(xPos, 0.8, zPos) Dim Scale As New Vector3(0.2F) - - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) @@ -3707,9 +3713,9 @@ Dim Position As New Vector3(xPos, 0.8, zPos) Dim Destination As New Vector3(xPos, -0.4, zPos) Dim Scale As New Vector3(0.2F) - - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) + StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) @@ -3969,7 +3975,7 @@ '***HP INCREASE ANIMATION*** If Core.Player.ShowBattleAnimations <> 0 Then - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim HealAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) Dim maxAmount As Integer = 20 Dim currentAmount As Integer = 0 While currentAmount <= maxAmount @@ -3980,14 +3986,14 @@ Dim Position As New Vector3(xPos, -0.4, zPos) Dim Destination As New Vector3(xPos, 0.8, zPos) Dim Scale As New Vector3(0.2F) - - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F) Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim HealEntity As Entity = HealAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + + HealAnimation.AnimationMove(HealEntity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While - BattleScreen.BattleQuery.Add(StatAnimation) + BattleScreen.BattleQuery.Add(HealAnimation) End If BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Heal", False)) @@ -6847,18 +6853,18 @@ Threading.Interlocked.Increment(SmokeReturned) Loop While SmokeReturned <= 38 End If - ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokemon disappears + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(Nothing, BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) + BattleScreen.AddToQuery(InsertIndex, BallReturn) End If - BattleScreen.AddToQuery(InsertIndex, BallReturn) Dim index As Integer = NewPokemonIndex If index <= -1 Then @@ -7173,13 +7179,6 @@ BattleScreen.OppPokemon.Ability.SwitchOut(BattleScreen.OppPokemon) If BattleScreen.IsTrainerBattle = False Then - ChangeCameraAngle(1, False, BattleScreen) - If Core.Player.ShowBattleAnimations <> 0 Then - Dim Faint As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - Faint.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - Faint.AnimationMove(Nothing, False, 0, -1, 0, 0.1, False, False, 2, 0,,, 3) - BattleScreen.BattleQuery.Add(Faint) - End If BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 2, -1, -1, -1, -1)) diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index e2d56b0df..2dbd82486 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -225,17 +225,12 @@ Dim ownModel As String = GetModelName(True) Dim oppModel As String = GetModelName(False) - Dim InitiallyVisibleOwn As Integer = 1 - If Core.Player.ShowBattleAnimations <> 0 Then - InitiallyVisibleOwn = 0 - End If - If ownModel = "" Then - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, InitiallyVisibleOwn), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, 1), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 13) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, WildPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) - OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 13) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, InitiallyVisibleOwn), ModelEntity) + OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 13) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, 1), ModelEntity) End If Screen.Level.Entities.Add(OwnPokemonNPC) @@ -281,49 +276,10 @@ Dim q3 As CameraQueryObject = New CameraQueryObject(New Vector3(14, 0, 11), New Vector3(14, 0, 15), 0.01F, 0.01F, MathHelper.PiOver2, MathHelper.PiOver2, 0.0F, 0.0F) q3.PassThis = True + Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) Dim q4 As TextQueryObject = New TextQueryObject("Go, " & Me.OwnPokemon.GetDisplayName() & "!") - Me.BattleQuery.AddRange({cq, q1, q, q2, q22, q3, q4}) - - ' Ball is thrown - Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) - - If Core.Player.ShowBattleAnimations <> 0 Then - BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - BallThrow.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) - - Dim BallThrowEntity As Entity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) - - ' Ball Opens - BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) - - Dim SmokeSpawned As Integer = 0 - Do - Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) - - Dim SmokeEntity As Entity = BallThrow.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) - BallThrow.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) - - Threading.Interlocked.Increment(SmokeSpawned) - Loop While SmokeSpawned <= 38 - End If - - ' Pokemon appears - BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) - BallThrow.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) - - If Core.Player.ShowBattleAnimations <> 0 Then - ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) - End If - - Me.BattleQuery.Add(BallThrow) + Me.BattleQuery.AddRange({cq, q1, q, q2, q22, q3, q31, q4}) Dim q5 As ToggleMenuQueryObject = New ToggleMenuQueryObject(Me.BattleMenu.Visible) @@ -404,7 +360,7 @@ Dim oppModel As String = GetModelName(False) Dim InitiallyVisibleOwn As Integer = 1 - If Core.Player.ShowBattleAnimations <> 0 Then + If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations <> 0 Then InitiallyVisibleOwn = 0 End If @@ -420,7 +376,7 @@ Screen.Level.Entities.Add(OwnPokemonModel) Dim InitiallyVisibleOpp As Integer = 1 - If Core.Player.ShowBattleAnimations <> 0 Then + If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations <> 0 Then InitiallyVisibleOpp = 0 End If @@ -500,12 +456,17 @@ Dim q4 As TextQueryObject = New TextQueryObject("Go, " & Me.OwnPokemon.GetDisplayName() & "!") - Me.BattleQuery.AddRange({cq, q, q1, BallThrowOpp, q2, q3, q4}) + If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations = 0 Then + Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) + Me.BattleQuery.AddRange({cq, q, q1, BallThrowOpp, q2, q3, q31, q4}) + Else + Me.BattleQuery.AddRange({cq, q, q1, BallThrowOpp, q2, q3, q4}) + End If - ' Ball is thrown - Dim BallThrowOwn As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) + If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations <> 0 Then + ' Ball is thrown + Dim BallThrowOwn As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) - If Core.Player.ShowBattleAnimations <> 0 Then BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) BallThrowOwn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) @@ -529,19 +490,17 @@ Threading.Interlocked.Increment(SmokeSpawned) Loop While SmokeSpawned <= 38 - End If - ' Pokemon appears - BallThrowOwn.AnimationFade(Nothing, False, 1, True, 1, 3, 0) - BallThrowOwn.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) - If Core.Player.ShowBattleAnimations <> 0 Then + ' Pokemon appears + BallThrowOwn.AnimationFade(Nothing, False, 1, True, 1, 3, 0) + BallThrowOwn.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) + ' Pokémon falls down BallThrowOwn.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) + Me.BattleQuery.Add(BallThrowOwn) End If - Me.BattleQuery.Add(BallThrowOwn) - Dim q5 As ToggleMenuQueryObject = New ToggleMenuQueryObject(Me.BattleMenu.Visible) Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) @@ -730,17 +689,12 @@ Dim ownModel As String = GetModelName(True) Dim oppModel As String = GetModelName(False) - Dim InitiallyVisibleOwn As Integer = 1 - If Core.Player.ShowBattleAnimations <> 0 Then - InitiallyVisibleOwn = 0 - End If - If ownModel = "" Then - OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, InitiallyVisibleOwn), NPC) + OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", True, New Vector3(1), 1, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}, 1), NPC) OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 0, "Models\Bulbasaur\Normal", False, New Vector3(1), 0, "", "", New Vector3(0), Nothing), ModelEntity) Else OwnPokemonNPC = CType(Entity.GetNewEntity("NPC", New Vector3(12, 0, 13) + BattleMapOffset, {Nothing}, {0, 0}, False, New Vector3(0), New Vector3(1), BaseModel.BillModel, 0, "", False, New Vector3(1), 0, "", "", New Vector3(0), {PokemonForms.GetOverworldSpriteName(OwnPokemon), 3, OwnPokemon.GetDisplayName(), 0, True, "Still", New List(Of Rectangle)}), NPC) - OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, InitiallyVisibleOwn), ModelEntity) + OwnPokemonModel = CType(Entity.GetNewEntity("ModelEntity", New Vector3(12, -0.5F, 12.5F) + BattleMapOffset, {}, {}, False, New Vector3(MathHelper.Pi * 0.5F, MathHelper.Pi * 0.5F, 0), New Vector3(0.07F), BaseModel.BlockModel, 1, ownModel, True, New Vector3(1), 0, "", "", New Vector3(0), Nothing, 1), ModelEntity) End If Screen.Level.Entities.Add(OwnPokemonNPC) @@ -787,46 +741,6 @@ Me.BattleQuery.AddRange({cq, q1, q, q2, q22, q3, q4}) - ' Ball is thrown - Dim BallThrowOwn As AnimationQueryObject = New AnimationQueryObject(Me.OwnPokemonNPC, False, Me.OwnPokemonModel) - - If Core.Player.ShowBattleAnimations <> 0 Then - BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - BallThrowOwn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) - - Dim BallThrowEntity As Entity = BallThrowOwn.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) - BallThrowOwn.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) - - ' Ball Opens - BallThrowOwn.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) - - Dim SmokeSpawned As Integer = 0 - Do - Dim SmokeDestination = New Vector3(CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10), CSng(Random.Next(-10, 10) / 10)) - - Dim SmokeTexture As Texture2D = TextureManager.GetTexture("Textures\Battle\Smoke") - - Dim SmokeScale = New Vector3(CSng(Random.Next(2, 6) / 10)) - Dim SmokeSpeed = CSng(Random.Next(1, 3) / 20.0F) - - Dim SmokeEntity As Entity = BallThrowOwn.SpawnEntity(Nothing, SmokeTexture, SmokeScale, 1.0F, 3) - BallThrowOwn.AnimationMove(SmokeEntity, True, SmokeDestination.X, SmokeDestination.Y, SmokeDestination.Z, SmokeSpeed, False, False, 3.0F, 0.0F) - - Threading.Interlocked.Increment(SmokeSpawned) - Loop While SmokeSpawned <= 38 - End If - - ' Pokemon appears - BallThrowOwn.AnimationFade(Nothing, False, 1, True, 1, 3, 0) - BallThrowOwn.AnimationPlaySound(CStr(Me.OwnPokemon.Number), 4, 0,, True) - - If Core.Player.ShowBattleAnimations <> 0 Then - ' Pokémon falls down - BallThrowOwn.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 3) - End If - - Me.BattleQuery.Add(BallThrowOwn) - Dim q5 As ToggleMenuQueryObject = New ToggleMenuQueryObject(Me.BattleMenu.Visible) Dim cq1 As ScreenFadeQueryObject = New ScreenFadeQueryObject(ScreenFadeQueryObject.FadeTypes.Vertical, Color.Black, True, 16) diff --git a/P3D/Pokemon/Attacks/Grass/Absorb.vb b/P3D/Pokemon/Attacks/Grass/Absorb.vb index b728851a3..efd2552a5 100644 --- a/P3D/Pokemon/Attacks/Grass/Absorb.vb +++ b/P3D/Pokemon/Attacks/Grass/Absorb.vb @@ -94,14 +94,14 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) - Dim maxAmount As Integer = 8 + Dim maxAmount As Integer = 12 Dim currentAmount As Integer = 0 MoveAnimation.AnimationPlaySound("Battle\Attacks\Grass\Absorb", 0, 0) While currentAmount <= maxAmount - Dim yPos As Single = CSng(Random.NextDouble() * 0.5) - Dim zPos As Single = CSng(Random.Next(-5, 5) * 0.15) - Dim AbsorbEntity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Grass\Absorb"), New Vector3(0.35F), 1) - MoveAnimation.AnimationMove(AbsorbEntity, True, -1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount), 0.0, 0.1, 0.5) + Dim yPos As Single = CSng(Random.Next(-1, 3) * 0.15) + Dim zPos As Single = CSng(Random.Next(-3, 3) * 0.15) + Dim AbsorbEntity = MoveAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Grass\Absorb"), New Vector3(0.35F), 1, CSng(currentAmount * 0.8)) + MoveAnimation.AnimationMove(AbsorbEntity, True, -1.5, yPos, zPos, 0.03, False, True, CSng(currentAmount * 0.8), 0.0, 0.1, 0.5,, 0.005F) Threading.Interlocked.Increment(currentAmount) End While diff --git a/P3D/Screens/BattleIntroScreen.vb b/P3D/Screens/BattleIntroScreen.vb index 3e5bd3c49..121fdaeb2 100644 --- a/P3D/Screens/BattleIntroScreen.vb +++ b/P3D/Screens/BattleIntroScreen.vb @@ -455,7 +455,7 @@ If Animations.Count = 0 Then Animations.Add(New Rectangle(CInt(Core.windowSize.Width / 2 - (Core.windowSize.Width / 100 / 2)), CInt(Core.windowSize.Height / 2 - (Core.windowSize.Height / 100 / 2)), CInt(Core.windowSize.Width / 100), CInt(Core.windowSize.Height / 100))) Else - Dim Speed As Integer = CInt(Me.duration.TotalMilliseconds / Core.windowSize.Height * 6) + Dim Speed As Integer = CInt(Me.duration.TotalMilliseconds / Core.windowSize.Height * 3) If Animations(0).Height >= Core.windowSize.Height + 128 Then ready = True End If @@ -476,10 +476,10 @@ If Animations.Count = 0 Then Animations.Add(New Rectangle(0, 0, Core.windowSize.Width, Core.windowSize.Height)) Else - If value >= Core.windowSize.Height / 2 - 4 Then + If value >= Core.windowSize.Height / 2 + 4 Then ready = True Else - value += CInt(Math.Ceiling(Me.duration.TotalMilliseconds / Core.windowSize.Height * 3)) + value += CInt(Math.Ceiling(Me.duration.TotalMilliseconds / Core.windowSize.Height)) End If End If End Sub From dc9ec6bd23a11838b663fb1cbf3192f4ad52e819 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sat, 6 Nov 2021 12:03:55 +0100 Subject: [PATCH 19/57] Fixed mistakes in Stat Animations + Updated Pound animation + Improved Tackle animation --- P3D/Battle/BattleSystemV2/Battle.vb | 4 ++-- P3D/Battle/BattleSystemV2/BattleMenu.vb | 8 ++++---- P3D/Pokemon/Attacks/Normal/Pound.vb | 2 +- P3D/Pokemon/Attacks/Normal/Tackle.vb | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 3e1b9971a..d01e74b6c 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -3434,7 +3434,7 @@ Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationMove(StatEntity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(StatAnimation) @@ -3717,7 +3717,7 @@ Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) - StatAnimation.AnimationMove(Nothing, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + StatAnimation.AnimationMove(StatEntity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While BattleScreen.BattleQuery.Add(StatAnimation) diff --git a/P3D/Battle/BattleSystemV2/BattleMenu.vb b/P3D/Battle/BattleSystemV2/BattleMenu.vb index 870ecb4e9..16b265fa8 100644 --- a/P3D/Battle/BattleSystemV2/BattleMenu.vb +++ b/P3D/Battle/BattleSystemV2/BattleMenu.vb @@ -384,7 +384,7 @@ Core.SpriteBatch.Draw(Me.IconUnselected, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 132 + Index * 96, 48, 48), Color.White) If isSelected = True Then Core.SpriteBatch.Draw(Me.IconSelected, New Rectangle(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 132 + Index * 96, 48, 48), New Color(255, 255, 255, (SelExtended + AllExtended))) - Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Text, New Vector2(Core.ScreenSize.Width - (AllExtended + extraExtended) + 86, 144 + Index * 96), New Color(0, 0, 0, (SelExtended + AllExtended))) + Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Text, New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 86), CInt(144 + Index * 96)), New Color(0, 0, 0, (SelExtended + AllExtended))) Else If IconFading > 0 Then Core.SpriteBatch.Draw(Me.IconSelected, New Rectangle(Core.ScreenSize.Width - (AllExtended) + 28, 132 + Index * 96, 48, 48), New Color(255, 255, 255, IconFading)) @@ -471,10 +471,10 @@ Dim ppColor As Color = GetPPColor() ppColor.A = CByte((extraExtended + AllExtended - deductAlpha).Clamp(0, 255)) - Core.SpriteBatch.DrawString(FontManager.MiniFont, Me.Move.CurrentPP & "/" & Me.Move.MaxPP, New Vector2(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 150 + Index * 96), ppColor) - Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.Name, New Vector2(Core.ScreenSize.Width - (AllExtended + extraExtended) + 86, 144 + Index * 96), New Color(0, 0, 0, (SelExtended + AllExtended) - deductAlpha)) + Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.CurrentPP & "/" & Me.Move.MaxPP, New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28), CInt(152 + Index * 96)), ppColor) + Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.Name, New Vector2(CInt(Core.ScreenSize.Width - (AllExtended + extraExtended) + 86), CInt(132 + Index * 96)), New Color(0, 0, 0, (SelExtended + AllExtended) - deductAlpha)) Else - Core.SpriteBatch.DrawString(FontManager.MiniFont, Me.Move.Name, New Vector2(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 150 + Index * 96), New Color(0, 0, 0, 255 - (extraExtended + AllExtended) - deductAlpha)) + Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Move.Name, New Vector2(Core.ScreenSize.Width - (AllExtended + extraExtended) + 28, 152 + Index * 96), New Color(0, 0, 0, 255 - (extraExtended + AllExtended) - deductAlpha)) End If End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index b3441945a..8b4525c2b 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -58,7 +58,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) - Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 3) + Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Pound"), New Vector3(0.5F), 1, 0, 3) MoveAnimation.AnimationFade(PoundEntity, True, 1.0F, False, 0.0F, 3, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Tackle.vb b/P3D/Pokemon/Attacks/Normal/Tackle.vb index 9179a9538..9db1f6f88 100644 --- a/P3D/Pokemon/Attacks/Normal/Tackle.vb +++ b/P3D/Pokemon/Attacks/Normal/Tackle.vb @@ -62,7 +62,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Tackle", 0, 0) - Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, 0, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 0, 2) + Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 0, 2) MoveAnimation.AnimationFade(SpawnEntity, True, 1.0F, False, 0.0F, 2, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From 71cdb5e0c04e28532a3e0715e41480d7de28bd1b Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sat, 6 Nov 2021 18:22:17 +0100 Subject: [PATCH 20/57] Added Paralysis Animation --- P3D/Battle/BattleSystemV2/Battle.vb | 72 +++++++++++++++++- .../Textures/Battle/Electric/Sparks.png | Bin 0 -> 395 bytes P3D/P3D.vbproj | 3 + 3 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 P3D/Content/Textures/Battle/Electric/Sparks.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index d01e74b6c..6cef7836a 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1122,14 +1122,20 @@ 'p: the attacking pokemon 'op: the target pokemon Dim p As Pokemon + Dim pNPC As NPC Dim op As Pokemon + Dim opNPC As NPC If own Then p = BattleScreen.OwnPokemon op = BattleScreen.OppPokemon + pNPC = BattleScreen.OwnPokemonNPC + opNPC = BattleScreen.OppPokemonNPC BattleScreen.FieldEffects.OwnLastMove = moveUsed Else p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon + pNPC = BattleScreen.OppPokemonNPC + opNPC = BattleScreen.OwnPokemonNPC BattleScreen.FieldEffects.OppLastMove = moveUsed End If If WildHasEscaped Then @@ -1405,7 +1411,36 @@ If p.Status = Pokemon.StatusProblems.Paralyzed Then If Core.Random.Next(0, 4) = 0 Then - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Paralyzed", False)) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim ParalyzedAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + + ParalyzedAnimation.AnimationPlaySound("Battle\Effects\Paralyzed", 0, 0) + Dim maxAmount As Integer = 4 + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(0, 0, 16, 16), "") + Dim xPos = CSng(Random.Next(-4, 4) / 8) + Dim zPos = CSng(Random.Next(-4, 4) / 8) + + Dim Position As New Vector3(xPos, -0.25, zPos) + Dim Destination As New Vector3(xPos - xPos * 2, 0, zPos - zPos * 2) + Dim Scale As New Vector3(0.25F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim ShockEntity = ParalyzedAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) + ParalyzedAnimation.AnimationMove(ShockEntity, True, Destination.X, Destination.Y, Destination.Z, 0.025F, False, True, CSng(startDelay), 0.0F) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(16, 0, 16, 16), ""), CSng(startDelay + 1), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(32, 0, 16, 16), ""), CSng(startDelay + 2), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(48, 0, 16, 16), ""), CSng(startDelay + 3), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(64, 0, 16, 16), ""), CSng(startDelay + 4), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(72, 0, 16, 16), ""), CSng(startDelay + 5), 1) + + Threading.Interlocked.Increment(currentAmount) + End While + + BattleScreen.BattleQuery.Add(ParalyzedAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Paralyzed", False)) + End If BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is fully paralyzed!" & Environment.NewLine & "It cannot move!")) Exit Sub End If @@ -2873,7 +2908,9 @@ Public Function InflictParalysis(ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String) As Boolean Dim p As Pokemon = BattleScreen.OwnPokemon Dim op As Pokemon = BattleScreen.OppPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC If own = False Then + pNPC = BattleScreen.OppPokemonNPC p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon End If @@ -2934,7 +2971,36 @@ 'Works! p.Status = Pokemon.StatusProblems.Paralyzed ChangeCameraAngle(1, own, BattleScreen) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Paralyzed", False)) + If Core.Player.ShowBattleAnimations <> 0 Then + Dim ParalyzedAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + + ParalyzedAnimation.AnimationPlaySound("Battle\Effects\Paralyzed", 0, 0) + Dim maxAmount As Integer = 4 + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(0, 0, 16, 16), "") + Dim xPos = CSng(Random.Next(-4, 4) / 8) + Dim zPos = CSng(Random.Next(-4, 4) / 8) + + Dim Position As New Vector3(xPos, -0.25, zPos) + Dim Destination As New Vector3(xPos - xPos * 2, 0, zPos - zPos * 2) + Dim Scale As New Vector3(0.25F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim ShockEntity = ParalyzedAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) + ParalyzedAnimation.AnimationMove(ShockEntity, False, Destination.X, Destination.Y, Destination.Z, 0.025F, False, True, CSng(startDelay), 0.0F) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(16, 0, 16, 16), ""), CSng(startDelay + 1), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(32, 0, 16, 16), ""), CSng(startDelay + 2), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(48, 0, 16, 16), ""), CSng(startDelay + 3), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(64, 0, 16, 16), ""), CSng(startDelay + 4), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, True, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(72, 0, 16, 16), ""), CSng(startDelay + 5), 0) + + Threading.Interlocked.Increment(currentAmount) + End While + + BattleScreen.BattleQuery.Add(ParalyzedAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Paralyzed", False)) + End If Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is paralyzed!" & Environment.NewLine & "It can't move!")) @@ -7352,7 +7418,7 @@ End If ' Pokemon appears BallThrow.AnimationFade(Nothing, False, 1, True, 1, 3, 0) - BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) + BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) If Core.Player.ShowBattleAnimations <> 0 Then ' Pokémon falls down BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 4) diff --git a/P3D/Content/Textures/Battle/Electric/Sparks.png b/P3D/Content/Textures/Battle/Electric/Sparks.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0bd76cbcf60d508a167d8028fd663d8814364f GIT binary patch literal 395 zcmV;60d)R}P)<h;3K|Lk000e1NJLTq003YB000mO1^@s6>AHIP00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0003N zNkl<ZSi|j@K@x)?3`LujXYmxC-BWlLS9H~mwIL?(KhTaW9U<YrBtRsk^tgvU_I3Uc zXIeHv+Ylsxqr*pMbKj%uUd=_>KMP+n_x10U?=S#4r*p&FjJ8%pe3boZ*(Bmi?q3Un zv?@WKbgs=5R5{t#Iawlm0ccrxo-3`-04o}p0HXGzK6uKcwm%a9LlBPuEb&<YygIo7 zuugw(l=O)H7PlVF{ucmd6neyE1MnW^EyQmMAeyE<?X!aK5&*jfk5~ej06hD71E@Jj z{sjOs0KGaD11Py6L?2*iA(+7hYei@R*Iv&`GNt4pgbbE$0BWA%sCqhzeRd<xe27Jx pO2{&TXofM$*zn!Z9{r<VA5ZIKr|=CXV-^4a002ovPDHLkV1j2Ioh<+W literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 28784aeb7..10cad480f 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -15373,6 +15373,9 @@ <Content Include="Content\Sounds\Use_Repel.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Electric\Sparks.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\Fire\Ember.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> From 51b9eb649a50cabebbb4e5cf71886c5fc6b6b2c2 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sun, 21 Nov 2021 12:59:21 +0100 Subject: [PATCH 21/57] Fix for missing texture in Poisoned & Burned animations as well as poison sting. --- P3D/Battle/BattleSystemV2/Battle.vb | 100 +++++++++++----------- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 18 ++-- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 6cef7836a..6599327ce 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2748,11 +2748,11 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(-0.25), CSng(-0.25), CSng(-0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(-0.25), CSng(-0.25), CSng(-0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message @@ -5461,19 +5461,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) End If @@ -5489,19 +5489,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) End If @@ -5526,10 +5526,10 @@ BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25F, 0.25F, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) End If 'Actual damage @@ -6264,19 +6264,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) End If @@ -6292,19 +6292,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage @@ -6327,11 +6327,11 @@ Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32)), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32)), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32)), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32)), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32)), 5, 2) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) End If 'Actual damage diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 8104dbcd4..9393f3042 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -84,21 +84,21 @@ MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) - Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 1, 1) + Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 2, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 2, 1) + Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 3, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) - Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32)), New Vector3(0.5F), 1, 3, 1) + Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 3, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 4, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32)), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 4, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32)), 5, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 5, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From e9d4cacd3c41c50bc588898f0d8c1581154e93e4 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sun, 21 Nov 2021 15:00:39 +0100 Subject: [PATCH 22/57] Fix for faint animation --- P3D/Battle/BattleSystemV2/Battle.vb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 6599327ce..b3c1bedc4 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2585,10 +2585,12 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(message)) If BattleScreen.IsTrainerBattle = False AndAlso Core.Player.ShowBattleAnimations <> 0 Then - Dim FaintAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) - FaintAnimation.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - FaintAnimation.AnimationMove(Nothing, False, 0, -1, 0, 0.05, False, False, 2, 0,,, 3) - BattleScreen.BattleQuery.Add(FaintAnimation) + If own = False Then + Dim FaintAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True, BattleScreen.OppPokemonModel) + FaintAnimation.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) + FaintAnimation.AnimationMove(Nothing, False, 0, -1, 0, 0.05, False, False, 2, 0,,, 3) + BattleScreen.BattleQuery.Add(FaintAnimation) + End If End If Dim str = p.AdditionalData.ToLower() From bac3d2b2929527c63f64ebd2a12f11b62956ebc7 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sun, 21 Nov 2021 15:01:38 +0100 Subject: [PATCH 23/57] Gave status effect textures a separate folder not related to a specific type. --- P3D/Battle/BattleSystemV2/Battle.vb | 142 ++++++++++++------ .../Textures/Battle/StatusEffect/Confused.png | Bin 0 -> 712 bytes .../Battle/StatusEffect/Paralyzed.png | Bin 0 -> 395 bytes .../Textures/Battle/StatusEffect/Poisoned.png | Bin 0 -> 372 bytes P3D/P3D.vbproj | 9 ++ 5 files changed, 103 insertions(+), 48 deletions(-) create mode 100644 P3D/Content/Textures/Battle/StatusEffect/Confused.png create mode 100644 P3D/Content/Textures/Battle/StatusEffect/Paralyzed.png create mode 100644 P3D/Content/Textures/Battle/StatusEffect/Poisoned.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index b3c1bedc4..84eb2270d 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1418,7 +1418,7 @@ Dim maxAmount As Integer = 4 Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(0, 0, 16, 16), "") + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(0, 0, 16, 16), "") Dim xPos = CSng(Random.Next(-4, 4) / 8) Dim zPos = CSng(Random.Next(-4, 4) / 8) @@ -1428,11 +1428,11 @@ Dim startDelay As Double = 5.0 * Random.NextDouble() Dim ShockEntity = ParalyzedAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) ParalyzedAnimation.AnimationMove(ShockEntity, True, Destination.X, Destination.Y, Destination.Z, 0.025F, False, True, CSng(startDelay), 0.0F) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(16, 0, 16, 16), ""), CSng(startDelay + 1), 1) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(32, 0, 16, 16), ""), CSng(startDelay + 2), 1) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(48, 0, 16, 16), ""), CSng(startDelay + 3), 1) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(64, 0, 16, 16), ""), CSng(startDelay + 4), 1) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(72, 0, 16, 16), ""), CSng(startDelay + 5), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(16, 0, 16, 16), ""), CSng(startDelay + 1), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(32, 0, 16, 16), ""), CSng(startDelay + 2), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(48, 0, 16, 16), ""), CSng(startDelay + 3), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(64, 0, 16, 16), ""), CSng(startDelay + 4), 1) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(72, 0, 16, 16), ""), CSng(startDelay + 5), 1) Threading.Interlocked.Increment(currentAmount) End While @@ -2980,7 +2980,7 @@ Dim maxAmount As Integer = 4 Dim currentAmount As Integer = 0 While currentAmount <= maxAmount - Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(0, 0, 16, 16), "") + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(0, 0, 16, 16), "") Dim xPos = CSng(Random.Next(-4, 4) / 8) Dim zPos = CSng(Random.Next(-4, 4) / 8) @@ -2990,11 +2990,11 @@ Dim startDelay As Double = 5.0 * Random.NextDouble() Dim ShockEntity = ParalyzedAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) ParalyzedAnimation.AnimationMove(ShockEntity, False, Destination.X, Destination.Y, Destination.Z, 0.025F, False, True, CSng(startDelay), 0.0F) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(16, 0, 16, 16), ""), CSng(startDelay + 1), 0) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(32, 0, 16, 16), ""), CSng(startDelay + 2), 0) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(48, 0, 16, 16), ""), CSng(startDelay + 3), 0) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(64, 0, 16, 16), ""), CSng(startDelay + 4), 0) - ParalyzedAnimation.AnimationChangeTexture(ShockEntity, True, TextureManager.GetTexture("Textures\Battle\Electric\Sparks", New Rectangle(72, 0, 16, 16), ""), CSng(startDelay + 5), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(16, 0, 16, 16), ""), CSng(startDelay + 1), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(32, 0, 16, 16), ""), CSng(startDelay + 2), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(48, 0, 16, 16), ""), CSng(startDelay + 3), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(64, 0, 16, 16), ""), CSng(startDelay + 4), 0) + ParalyzedAnimation.AnimationChangeTexture(ShockEntity, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Paralyzed", New Rectangle(72, 0, 16, 16), ""), CSng(startDelay + 5), 0) Threading.Interlocked.Increment(currentAmount) End While @@ -3304,10 +3304,14 @@ Public Function InflictConfusion(ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String) As Boolean Dim p As Pokemon = BattleScreen.OwnPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC Dim op As Pokemon = BattleScreen.OppPokemon + Dim opNPC As NPC = BattleScreen.OppPokemonNPC If own = False Then p = BattleScreen.OppPokemon + pNPC = BattleScreen.OppPokemonNPC op = BattleScreen.OwnPokemon + opNPC = BattleScreen.OwnPokemonNPC End If If p.HP <= 0 OrElse p.Status = Pokemon.StatusProblems.Fainted Then @@ -3340,6 +3344,48 @@ Return False Else 'Works! + If Core.Player.ShowBattleAnimations <> 0 Then + Dim ConfusionAnimation As New AnimationQueryObject(pNPC, Not own) + + ConfusionAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) + Dim DuckEntity1 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) + Dim DuckEntity2 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) + Dim DuckEntity3 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 2, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 2, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 2, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 1) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 4, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 4, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 4, 1) + + BattleScreen.BattleQuery.Add(ConfusionAnimation) + End If p.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) Select Case message Case "" 'Print default message only @@ -5463,19 +5509,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) End If @@ -5491,19 +5537,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) End If @@ -6266,19 +6312,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) End If @@ -6294,19 +6340,19 @@ Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) 'Actual damage diff --git a/P3D/Content/Textures/Battle/StatusEffect/Confused.png b/P3D/Content/Textures/Battle/StatusEffect/Confused.png new file mode 100644 index 0000000000000000000000000000000000000000..be3416b85b26d883e2e43787729a8e8d1b10553a GIT binary patch literal 712 zcmV;(0yq7MP)<h;3K|Lk000e1NJLTq000mG002M;1^@s66MgrV00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT00070 zNkl<ZSi|j?KX#lj5XQf$Xx+snT{uFHz*eD57nR;B9KlCmE8|Y?QsOEcAxFR+W!!DK zRFh&QGy)0Ow@#j4UexScV161j|2~MBam}JP1q`oG?$1#H9guux+63^7<@%`>Au~X6 ztI+(??umPa<Y5Ic9EkDdY;-Z;RDsa}xYzT$M+H<E0mBQO-4$o!Ug3opH+l}R*NzI- zSl586wnSmNIsi3*%Ki5N*2U230JH!~c%JxxXJTX#Kno!EJxP8r%`$NjB0b4~<Xa4Y z^8;(f(OMV|#7HBrA&ggxX*jsJ0|+J*y{~e9Q^1&&D}5mx1!*io7=q06;Pr`%TZN|c zA1pGUY37h+Kx;0hKv7%(u#Lo9rVh3P%;8Nlahgo?a=y{=USKLxdT|+`25=VvjAh)# zD^b^g%1uZgraf^_j2u8O8i(Ay2Xwmt7$MmTAoUM&7KO(hvC1dyD`Ff?<;NYd5)DQ7 zVdH<jAI#dk7<<WwuN#}{Gci8t;5`dj2JDID)Rv?FY5=|~e=^CDmV7jNU{8$Fe}5@F zkO6e+zyP32K;4N#lDZ(E8|)@@YT$-xc`nyrHO8V)=U{K=%GANagtogok+mcCc5VX| z8ENlMrFH8&hh~F|!WyL8(3L&NboIV2SRQSAU!{Z$|LcQ4sSifLbi7>!h$PWAfSr|_ zB~D1O3!Si>%2VSK&@dkt5l9?RIoEYBAbmtDk3F$+#e>`d>{{0cwJ~gcfJ)8psy>hq uaex*wRqeqKj#0`40Gsr|2uc5fKKKpc^)`nk-`D>D0000<MNUMnLSTY~=rwu( literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/StatusEffect/Paralyzed.png b/P3D/Content/Textures/Battle/StatusEffect/Paralyzed.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0bd76cbcf60d508a167d8028fd663d8814364f GIT binary patch literal 395 zcmV;60d)R}P)<h;3K|Lk000e1NJLTq003YB000mO1^@s6>AHIP00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0003N zNkl<ZSi|j@K@x)?3`LujXYmxC-BWlLS9H~mwIL?(KhTaW9U<YrBtRsk^tgvU_I3Uc zXIeHv+Ylsxqr*pMbKj%uUd=_>KMP+n_x10U?=S#4r*p&FjJ8%pe3boZ*(Bmi?q3Un zv?@WKbgs=5R5{t#Iawlm0ccrxo-3`-04o}p0HXGzK6uKcwm%a9LlBPuEb&<YygIo7 zuugw(l=O)H7PlVF{ucmd6neyE1MnW^EyQmMAeyE<?X!aK5&*jfk5~ej06hD71E@Jj z{sjOs0KGaD11Py6L?2*iA(+7hYei@R*Iv&`GNt4pgbbE$0BWA%sCqhzeRd<xe27Jx pO2{&TXofM$*zn!Z9{r<VA5ZIKr|=CXV-^4a002ovPDHLkV1j2Ioh<+W literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/StatusEffect/Poisoned.png b/P3D/Content/Textures/Battle/StatusEffect/Poisoned.png new file mode 100644 index 0000000000000000000000000000000000000000..5d45ad64df28e72f33b40a89d48e972860d3cf0c GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|!3HF2lnQ15Db50q$YKTtZXpn6ymYtj4^U9L z#5JNMI6tkVJh3R1!8tXjxUyIwxTG{CGhZPjKR@T-@`p7*W&b^0978hhy}fS8*Q_AY z@bLJv7cWkncou4tbi6O7_3TAugIyOFZseSL?1RuoHGAdG%K6MK_m@n0aw-+584B)* z3HY3_lewHRi?N9_vw}yc_RpKOb)kx@7;hH{o@BTdJu`Kk+X{xeSKfYOG-1x+P}jSC znP>ld!zXGiP!j~ymbPbJHYi*@`A1LWj10lhhPUT`ue?8X;<wCoOn;&n{MaX?Es=!T z$I!69LO8G4yKq%wNPB1W{qrA#=9p<NKFx4HHD*;Z?;@#!EqbgG`KyiJ+BGP*r0sYo y(lI$Ts;qhI)HVA$yejK{xw_0_1{!ui@-=JBi9Z3KyCy||%=UEkb6Mw<&;$U#(T+U; literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 10cad480f..3e257df4f 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -15409,6 +15409,15 @@ <Content Include="Content\Textures\Battle\Smoke.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\StatusEffect\Confused.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Textures\Battle\StatusEffect\Paralyzed.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Textures\Battle\StatusEffect\Poisoned.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\chess.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> From 3bdc124a997e34e94505b042f0a18f4b0c08e8a0 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 26 Nov 2021 21:56:38 +0100 Subject: [PATCH 24/57] Bugfixes & Tweaks * Growl displays correctly now * The sound played with stat change animations is now timed correctly * Stat change particles now fall straight down as intended * Fixed incorrect texture for Confusion * Stat Down texture is now blue and Stat Up texture is now orange/yellow --- P3D/Battle/BattleSystemV2/Battle.vb | 82 +++++++++--------- .../QueryObjects/AnimationQueryObject.vb | 12 ++- .../Textures/Battle/StatChange/statDown.png | Bin 234 -> 241 bytes .../Textures/Battle/StatChange/statUp.png | Bin 241 -> 234 bytes P3D/Pokemon/Attacks/Normal/Growl.vb | 8 +- 5 files changed, 55 insertions(+), 47 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 84eb2270d..b1f6a348f 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -3348,41 +3348,37 @@ Dim ConfusionAnimation As New AnimationQueryObject(pNPC, Not own) ConfusionAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) - Dim DuckEntity1 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) - Dim DuckEntity2 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) - Dim DuckEntity3 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) + Dim DuckEntity1 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + Dim DuckEntity2 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + Dim DuckEntity3 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 2, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 2, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 2, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 1) - - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 4, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 4, 1) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 64, 16, 16), ""), 4, 1) + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) BattleScreen.BattleQuery.Add(ConfusionAnimation) End If @@ -3533,7 +3529,7 @@ '***STAT INCREASE ANIMATION*** If Core.Player.ShowBattleAnimations <> 0 Then - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount @@ -3542,19 +3538,19 @@ Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim Position As New Vector3(xPos, -0.4, zPos) - Dim Destination As New Vector3(xPos, 0.8, zPos) + Dim Destination As New Vector3(xPos, 1.2, zPos) Dim Scale As New Vector3(0.2F) Dim startDelay As Double = 5.0 * Random.NextDouble() - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) - + Dim StatEntity As Entity = StatAnimation.SpawnEntity(pNPC.Position + Position, Texture, Scale, 1.0F, CSng(startDelay)) StatAnimation.AnimationMove(StatEntity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While + StatAnimation.AnimationPlaySound("Battle\Effects\Stat_Raise", 0, 0) BattleScreen.BattleQuery.Add(StatAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) End If - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Raise", False)) - Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val Case 2 @@ -3816,7 +3812,7 @@ End If '***STAT DECREASE ANIMATION*** If Core.Player.ShowBattleAnimations <> 0 Then - Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim StatAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) Dim maxAmount As Integer = 20 * val Dim currentAmount As Integer = 0 While currentAmount <= maxAmount @@ -3825,18 +3821,18 @@ Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim Position As New Vector3(xPos, 0.8, zPos) - Dim Destination As New Vector3(xPos, -0.4, zPos) + Dim Destination As New Vector3(0, -1.2, 0) Dim Scale As New Vector3(0.2F) Dim startDelay As Double = 5.0 * Random.NextDouble() - Dim StatEntity As Entity = StatAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) - - + Dim StatEntity As Entity = StatAnimation.SpawnEntity(pNPC.Position + Position, Texture, Scale, 1.0F, CSng(startDelay)) StatAnimation.AnimationMove(StatEntity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While + StatAnimation.AnimationPlaySound("Battle\Effects\Stat_Lower", 0, 0) BattleScreen.BattleQuery.Add(StatAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Lower", False)) End If - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Stat_Lower", False)) Dim printMessage As String = p.GetDisplayName() & "'s " & statString Select Case val Case 2 @@ -4103,14 +4099,14 @@ Dim startDelay As Double = 5.0 * Random.NextDouble() Dim HealEntity As Entity = HealAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) - HealAnimation.AnimationMove(HealEntity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) Threading.Interlocked.Increment(currentAmount) End While + HealAnimation.AnimationPlaySound("Battle\Effects\Heal", 0, 0) BattleScreen.BattleQuery.Add(HealAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Heal", False)) End If - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Heal", False)) - If message <> "" Then BattleScreen.BattleQuery.Add(New TextQueryObject(message)) End If diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index 5dda41573..b40f6f933 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -103,9 +103,17 @@ Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single, Optional ByVal startDelay As Single = 0.0F, Optional ByVal endDelay As Single = 0.0F) As Entity Dim NewPosition As Vector3 If Not Position = Nothing Then - NewPosition = CurrentEntity.Position + Position + If CurrentEntity IsNot Nothing Then + NewPosition = CurrentEntity.Position + Position + Else + NewPosition = Position + End If Else - NewPosition = CurrentEntity.Position + If CurrentEntity IsNot Nothing Then + NewPosition = CurrentEntity.Position + Else + NewPosition = New Vector3(0, 0, 0) + End If End If Dim SpawnedEntity = New BattleAnimation3D(NewPosition, Texture, Scale, startDelay, endDelay, False) SpawnedEntity.Opacity = Opacity diff --git a/P3D/Content/Textures/Battle/StatChange/statDown.png b/P3D/Content/Textures/Battle/StatChange/statDown.png index 44e7ba0409242e345a0af8a67b1a45622c3b066c..5b4326ff03cc65211babc811b91090390e76dc75 100644 GIT binary patch delta 153 zcmV;K0A~N{0r3HlV1Il`L_t(I%VYfi|33pIfRUyKcsB0*zrEg_k!%ApH{Sd|-CunG z4LJDn=YM-~cJd6!+<5bUfrA3WgaZ#4@VNrT0MEvq{}l`r7$Phb7$i6t7!)`d7#{p! zV0iI^fnmjo2MiA`JYYZ%RO-5bs$noVqLJd1IPjT?7ytm2&=PCmj2|la00000NkvXX Hu0mjf7xF<% delta 146 zcmV;D0B!&A0qOyeV1IQ<L_t(I%VYfi|33pIfRUyK{50hJ&wl<pBl!kQl>E=0|9l_~ zIH>ra-Tpp#2K<~T`JW*pfq`Mh0tS4pKr!H_A?JUF1OWyH0}ciTiwFh=h6V^ev4Vl& z!Vd<91s@pD1C_ciplTQll4ztfB@TRMA_f2exvOU3-CD-d01E&B07*qoM6N<$f&x@K A?EnA( diff --git a/P3D/Content/Textures/Battle/StatChange/statUp.png b/P3D/Content/Textures/Battle/StatChange/statUp.png index 5b4326ff03cc65211babc811b91090390e76dc75..44e7ba0409242e345a0af8a67b1a45622c3b066c 100644 GIT binary patch delta 146 zcmV;D0B!&A0qOyeV1IQ<L_t(I%VYfi|33pIfRUyK{50hJ&wl<pBl!kQl>E=0|9l_~ zIH>ra-Tpp#2K<~T`JW*pfq`Mh0tS4pKr!H_A?JUF1OWyH0}ciTiwFh=h6V^ev4Vl& z!Vd<91s@pD1C_ciplTQll4ztfB@TRMA_f2exvOU3-CD-d01E&B07*qoM6N<$f&x@K A?EnA( delta 153 zcmV;K0A~N{0r3HlV1Il`L_t(I%VYfi|33pIfRUyKcsB0*zrEg_k!%ApH{Sd|-CunG z4LJDn=YM-~cJd6!+<5bUfrA3WgaZ#4@VNrT0MEvq{}l`r7$Phb7$i6t7!)`d7#{p! zV0iI^fnmjo2MiA`JYYZ%RO-5bs$noVqLJd1IPjT?7ytm2&=PCmj2|la00000NkvXX Hu0mjf7xF<% diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index 9558524c9..7ab2ed77b 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -66,8 +66,12 @@ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) - Dim SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - + Dim SoundwaveEntity As Entity + If BattleFlip = False Then + SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Else + SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + End If MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 1, 1) MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), 2, 1) MoveAnimation.AnimationChangeTexture(SoundwaveEntity, True, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 3, 1) From 8bbbb729a75ad22cb49f2505a61c455511d7e7a4 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 26 Nov 2021 21:59:52 +0100 Subject: [PATCH 25/57] Fix for a bug where you couldn't use certain items outside of battle --- P3D/Screens/Inventory/NewInventoryScreen.vb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/P3D/Screens/Inventory/NewInventoryScreen.vb b/P3D/Screens/Inventory/NewInventoryScreen.vb index 9d6c66594..425d907a0 100644 --- a/P3D/Screens/Inventory/NewInventoryScreen.vb +++ b/P3D/Screens/Inventory/NewInventoryScreen.vb @@ -821,16 +821,23 @@ Public Class NewInventoryScreen If Controls.Accept() AndAlso _items.Length > 0 Then Dim cItem As Item = Item.GetItemByID(_items(ItemIndex + PageIndex * 10).ItemID) SoundManager.PlaySound("select") - If cItem.CanBeUsedInBattle = True Then + If Me.PreScreen.Identification = Screen.Identifications.BattleScreen Then + If cItem.CanBeUsedInBattle = True Then + _infoItemOptionSelection = 0 + _isInfoShowing = True + SetInfoSettings() + SetItemOptions() + Else + TextBox.Show("This item can't~be used in Battle.") + End If + Else _infoItemOptionSelection = 0 _isInfoShowing = True SetInfoSettings() SetItemOptions() - Else - TextBox.Show("This item can't~be used in Battle.") End If - End If + End If If Controls.Dismiss() Then SoundManager.PlaySound("select") _tabInControl = True From 1ea2da7bb7324cd5a30cd19e4b81e0ed9c517deb Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Sun, 28 Nov 2021 11:03:55 +0100 Subject: [PATCH 26/57] Added Asleep animation, fixed some code errors I made. Also added sound effects when animations are disabled. --- P3D/Battle/BattleSystemV2/Battle.vb | 97 +++++++++++++++++- P3D/Content/Sounds/Battle/Effects/Asleep.wav | Bin 0 -> 99812 bytes .../Textures/Battle/StatusEffect/Asleep.png | Bin 0 -> 290 bytes 3 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 P3D/Content/Sounds/Battle/Effects/Asleep.wav create mode 100644 P3D/Content/Textures/Battle/StatusEffect/Asleep.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index b1f6a348f..7bd5483c0 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1239,6 +1239,23 @@ End If Else If sleepTurns > 0 Then + If Core.Player.ShowBattleAnimations <> 0 Then + Dim SleepAnimation As New AnimationQueryObject(pNPC, Not own) + + SleepAnimation.AnimationPlaySound("Battle\Effects\Asleep", 0, 0) + Dim SleepEntity1 As Entity = SleepAnimation.SpawnEntity(New Vector3(0, 0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) + SleepAnimation.AnimationChangeTexture(SleepEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 16, 16, 16), ""), 1, 1) + SleepAnimation.AnimationMove(SleepEntity1, True, 0, 0.5, 0.25, 0.01, False, False, 0, 0) + + Dim SleepEntity2 As Entity = SleepAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 1.5, 1) + + SleepAnimation.AnimationChangeTexture(SleepEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 16, 16, 16), ""), 2.5, 1) + SleepAnimation.AnimationMove(SleepEntity2, True, 0, 0.5, 0.25, 0.01, False, False, 2, 0) + + BattleScreen.BattleQuery.Add(SleepAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Asleep", False)) + End If BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is fast asleep.")) Exit Sub Else @@ -1357,6 +1374,46 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is no longer confused!")) p.RemoveVolatileStatus(Pokemon.VolatileStatus.Confusion) Else + If Core.Player.ShowBattleAnimations <> 0 Then + Dim ConfusionAnimation As New AnimationQueryObject(pNPC, Not own) + + ConfusionAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) + Dim DuckEntity1 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + Dim DuckEntity2 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + Dim DuckEntity3 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + + ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + + BattleScreen.BattleQuery.Add(ConfusionAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Confused", False)) + End If BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is confused!")) 'Previously 'If Core.Random.Next(0, 2) = 0 Then' (Updated to gen 7's 33% instead of 50%) If Core.Random.Next(0, 3) = 0 Then @@ -3043,10 +3100,14 @@ Public Function InflictSleep(ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal turnsPreset As Integer, ByVal message As String, ByVal cause As String) As Boolean Dim p As Pokemon = BattleScreen.OwnPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC Dim op As Pokemon = BattleScreen.OppPokemon + Dim opNPC As NPC = BattleScreen.OppPokemonNPC If own = False Then p = BattleScreen.OppPokemon + pNPC = BattleScreen.OppPokemonNPC op = BattleScreen.OwnPokemon + opNPC = BattleScreen.OwnPokemonNPC End If If p.HP <= 0 OrElse p.Status = Pokemon.StatusProblems.Fainted Then @@ -3132,6 +3193,23 @@ Return False Else 'Works! + If Core.Player.ShowBattleAnimations <> 0 Then + Dim SleepAnimation As New AnimationQueryObject(pNPC, Not own) + + SleepAnimation.AnimationPlaySound("Battle\Effects\Asleep", 0, 0) + Dim SleepEntity1 As Entity = SleepAnimation.SpawnEntity(New Vector3(0, 0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 1) + SleepAnimation.AnimationChangeTexture(SleepEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 16, 16, 16), ""), 1, 1) + SleepAnimation.AnimationMove(SleepEntity1, True, 0, 0.5, 0.25, 0.01, False, False, 0, 0) + + Dim SleepEntity2 As Entity = SleepAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 1.5, 1) + + SleepAnimation.AnimationChangeTexture(SleepEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Asleep", New Rectangle(0, 16, 16, 16), ""), 2.5, 1) + SleepAnimation.AnimationMove(SleepEntity2, True, 0, 0.5, 0.25, 0.01, False, False, 2, 0) + + BattleScreen.BattleQuery.Add(SleepAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Asleep", False)) + End If If own = True Then BattleScreen.FieldEffects.OwnBideCounter = 0 BattleScreen.FieldEffects.OwnBideDamage = 0 @@ -3381,6 +3459,8 @@ ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) BattleScreen.BattleQuery.Add(ConfusionAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Confused", False)) End If p.AddVolatileStatus(Pokemon.VolatileStatus.Confusion) Select Case message @@ -5520,6 +5600,8 @@ PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) End If 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP / 8), True, True, BattleScreen, "The poison hurt " & .OwnPokemon.GetDisplayName() & ".", "poison") @@ -5548,6 +5630,8 @@ PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) End If 'Actual damage ReduceHP(CInt(.OwnPokemon.MaxHP * multiplier), True, True, BattleScreen, "The toxic hurt " & .OwnPokemon.GetDisplayName() & ".", "badpoison") @@ -5575,6 +5659,8 @@ BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) End If 'Actual damage ReduceHP(reduceAmount, True, True, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by the burn.", "burn") @@ -6323,6 +6409,8 @@ PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) End If 'Actual damage ReduceHP(CInt(.OppPokemon.MaxHP / 8), False, False, BattleScreen, "The poison hurt " & .OppPokemon.GetDisplayName() & ".", "poison") @@ -6351,9 +6439,12 @@ PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) - 'Actual damage - ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) End If + 'Actual damage + ReduceHP(CInt(.OppPokemon.MaxHP * multiplier), False, False, BattleScreen, "The toxic hurt " & .OppPokemon.GetDisplayName() & ".", "badpoison") + End If End If End If @@ -6377,6 +6468,8 @@ BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) BattleScreen.BattleQuery.Add(BurnAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) End If 'Actual damage ReduceHP(reduceAmount, False, False, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by the burn.", "burn") diff --git a/P3D/Content/Sounds/Battle/Effects/Asleep.wav b/P3D/Content/Sounds/Battle/Effects/Asleep.wav new file mode 100644 index 0000000000000000000000000000000000000000..2807c5619284d4b8f3fe29e7e696e63fd16a26bd GIT binary patch literal 99812 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 literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/StatusEffect/Asleep.png b/P3D/Content/Textures/Battle/StatusEffect/Asleep.png new file mode 100644 index 0000000000000000000000000000000000000000..1a350b9bb0a565c6be795d636c0e602205903636 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Q+(IDCc<FB4ACO#$ zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{LzR)_S@)hIkx*J7uHbAp;)Q z{aW&}a*cvB6m+#KnZmqIv-BL`xWF2^=p<{h_9R8w^y_u!r!CDF63mIb!n&<NpZ(wu z28Nc;b7!&6S@c9ezFcUX@ZXRo*59fY8#GTm+_c2(AkV`s?h<)d)HiaQaqe*mYm!+p z&1h<Of@Ex}@p27``4^hLik(rPetk=V{W-oj%P%&*)%R_*bk&sK^v;PfJND%Lm(Cw@ jxv%G6_#pf@a7Ntz{pSy+KmO?obU1^jtDnm{r-UW|m2hqU literal 0 HcmV?d00001 From b0c4ade6b19f86c5aa3c7f94e4ea6fedb089d23f Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Sun, 28 Nov 2021 12:13:09 +0100 Subject: [PATCH 27/57] Add the new textures and sounds to the project solution --- P3D/P3D.vbproj | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 3e257df4f..7367fed6b 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14704,6 +14704,9 @@ <Content Include="Content\Sounds\Battle\Damage\SuperEffective.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Effects\Asleep.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Effects\Burned.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -14713,6 +14716,9 @@ <Content Include="Content\Sounds\Battle\Effects\Frozen.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Effects\Heal.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Effects\Paralyzed.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -15409,6 +15415,9 @@ <Content Include="Content\Textures\Battle\Smoke.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\StatusEffect\Asleep.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\StatusEffect\Confused.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> From c85ccd89ae9ca444e59605f53903446f7807fca7 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 3 Dec 2021 16:01:54 +0100 Subject: [PATCH 28/57] Added Frozen animation and Infatuated sound effect --- P3D/Battle/BattleSystemV2/Battle.vb | 28 +++++++++++++++++- P3D/Content/Sounds/Battle/Effects/Frozen.wav | Bin 49474 -> 70728 bytes .../Sounds/Battle/Effects/Infatuated.wav | Bin 0 -> 143648 bytes .../Textures/Battle/StatusEffect/Frozen.png | Bin 0 -> 439 bytes P3D/P3D.vbproj | 6 ++++ 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 P3D/Content/Sounds/Battle/Effects/Infatuated.wav create mode 100644 P3D/Content/Textures/Battle/StatusEffect/Frozen.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 7bd5483c0..0f258704f 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2856,7 +2856,9 @@ Public Function InflictFreeze(ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal message As String, ByVal cause As String) As Boolean Dim p As Pokemon = BattleScreen.OwnPokemon Dim op As Pokemon = BattleScreen.OppPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC If own = False Then + pNPC = BattleScreen.OppPokemonNPC p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon End If @@ -2925,7 +2927,31 @@ 'Works! p.Status = Pokemon.StatusProblems.Freeze ChangeCameraAngle(1, own, BattleScreen) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Frozen", False)) + 'Frozen animation + If Core.Player.ShowBattleAnimations <> 0 Then + Dim FrozenAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + + FrozenAnimation.AnimationPlaySound("Battle\Effects\Frozen", 0, 0) + Dim maxAmount As Integer = 8 + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatusEffect\Frozen", New Rectangle(0, 0, 32, 32), "") + Dim xPos = CSng(Random.Next(-4, 4) / 8) + Dim zPos = CSng(Random.Next(-4, 4) / 8) + + Dim Position As New Vector3(xPos, -0.25, zPos) + Dim Scale As New Vector3(0.25F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim SnowflakeEntity = FrozenAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) + + FrozenAnimation.AnimationFade(SnowflakeEntity, True, 0.02, False, 0.0F, CSng(startDelay), 0.0) + Threading.Interlocked.Increment(currentAmount) + End While + + BattleScreen.BattleQuery.Add(FrozenAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Frozen", False)) + End If Select Case message Case "" 'Print default message only BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " was frozen solid!")) diff --git a/P3D/Content/Sounds/Battle/Effects/Frozen.wav b/P3D/Content/Sounds/Battle/Effects/Frozen.wav index 3634accf62737d6d60271b0bd817c7bd97caeb70..e21fa9775fdaa96752fed82aaeb4494f3e1fdd8b 100644 GIT binary patch literal 70728 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�X2|f#)A) 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 literal 49474 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%0D4$y13^nBpu#gtD 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 X%APhW^M8&k6xoG&19E2f>m&XJqG`3% diff --git a/P3D/Content/Sounds/Battle/Effects/Infatuated.wav b/P3D/Content/Sounds/Battle/Effects/Infatuated.wav new file mode 100644 index 0000000000000000000000000000000000000000..2ecea357b4330f88c2987ba93ee97505191f7059 GIT binary patch literal 143648 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ɥWmuGI1Xr{l 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 H>T~`d-&zUe literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/StatusEffect/Frozen.png b/P3D/Content/Textures/Battle/StatusEffect/Frozen.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec075fc550f24c9895a6f7a91366ca36cc24990 GIT binary patch literal 439 zcmV;o0Z9IdP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0003( zNkl<ZSi|jCu@S;B43x`^!3a=NW(8L97+EDNq@+wn$QUV2W$yDx4o-*zcccMwhy4H2 zOR@_g$dQlx1K0w<chmFFO<lR70B+4aoGxc+>Pmb!l?6b|#dnjeRU#VzGiM;X17P;> zew7MY05ta6_ssy1C9;YD=&;!*DqzJ)0#K@ZChyn}f*?2rO<g&yNG)|t09JspA4Eii zm0*=D0$B<mJ7l1xA_air<SBqsGXPCqCV=eURv=1@=#5~i%v>K9d(#D)3VfjA{g-qt zIUosu-)T8t`W*{aM5Ogsm(_?250_Km&>CR&$PW8Jsz+>c!B_Qxl-GCfgjRr<B5fAn ztoX<*z#-K7>+EoA8uGkY)d}&59?sbZQgJpfB!_N9Y{B9?q2-dITQSZDY(iGQ-}Pd0 h=*?(p(*4Bc^Z^b(7vDNpvLyfj002ovPDHLkV1jp$w3z?^ literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 7367fed6b..32cc4e1b4 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14713,12 +14713,18 @@ <Content Include="Content\Sounds\Battle\Effects\Confused.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\StatusEffect\Frozen.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Effects\Frozen.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="Content\Sounds\Battle\Effects\Heal.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Effects\Infatuated.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Effects\Paralyzed.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> From 93f1228eb2b1e2d55be1d5b82ee485e40a825735 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Fri, 3 Dec 2021 18:37:19 +0100 Subject: [PATCH 29/57] Possible animation fixes * Confusion ducks are smaller and they should rotate slower now. * Fixed the Stat Raise animation from using the wrong destination coordinates. * Attempted to center the frozen animation more. * Added the frozen animation to the other place where it was needed. --- P3D/Battle/BattleSystemV2/Battle.vb | 158 +++++++++++++++++----------- 1 file changed, 98 insertions(+), 60 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 0f258704f..f2fa41fc3 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1204,7 +1204,38 @@ If Core.Random.Next(0, 100) < 20 Then CureStatusProblem(own, own, BattleScreen, p.GetDisplayName() & " thawed out.", "own defrost") Else - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Frozen", False)) + 'Frozen animation + If Core.Player.ShowBattleAnimations <> 0 Then + Dim FrozenAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) + + FrozenAnimation.AnimationPlaySound("Battle\Effects\Frozen", 0, 0) + Dim maxAmount As Integer = 8 + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatusEffect\Frozen", New Rectangle(0, 0, 32, 32), "") + Dim xPos As Single + Dim zPos As Single + If own = False Then + xPos = CSng(Random.Next(-2, 4) / 8) + zPos = CSng(Random.Next(-2, 4) / 8) + Else + xPos = CSng(Random.Next(-4, 2) / 8) + zPos = CSng(Random.Next(-4, 2) / 8) + End If + + Dim Position As New Vector3(xPos, -0.25, zPos) + Dim Scale As New Vector3(0.25F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim SnowflakeEntity = FrozenAnimation.SpawnEntity(pNPC.Position + Position, Texture, Scale, 1.0F, CSng(startDelay)) + + FrozenAnimation.AnimationFade(SnowflakeEntity, True, 0.02, False, 0.0F, CSng(startDelay), 0.0) + Threading.Interlocked.Increment(currentAmount) + End While + + BattleScreen.BattleQuery.Add(FrozenAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Frozen", False)) + End If BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is frozen solid!")) Exit Sub End If @@ -1375,42 +1406,42 @@ p.RemoveVolatileStatus(Pokemon.VolatileStatus.Confusion) Else If Core.Player.ShowBattleAnimations <> 0 Then - Dim ConfusionAnimation As New AnimationQueryObject(pNPC, Not own) + Dim ConfusedAnimation As New AnimationQueryObject(pNPC, Not own) - ConfusionAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) - Dim DuckEntity1 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) - Dim DuckEntity2 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) - Dim DuckEntity3 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + ConfusedAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) + Dim DuckEntity1 As Entity = ConfusedAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.25F), 1, 0, 0) + Dim DuckEntity2 As Entity = ConfusedAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.25F), 1, 0, 0) + Dim DuckEntity3 As Entity = ConfusedAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.25F), 1, 0, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.75F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 2.25F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 2.25F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 2.25F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 3.0F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 3.0F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 3.0F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 3.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 3.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 3.75F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 4.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 4.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 4.5F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 5.25F, 1) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 5.25F, 1) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 5.25F, 1) - BattleScreen.BattleQuery.Add(ConfusionAnimation) + BattleScreen.BattleQuery.Add(ConfusedAnimation) Else BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Confused", False)) End If @@ -2929,20 +2960,27 @@ ChangeCameraAngle(1, own, BattleScreen) 'Frozen animation If Core.Player.ShowBattleAnimations <> 0 Then - Dim FrozenAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) + Dim FrozenAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) FrozenAnimation.AnimationPlaySound("Battle\Effects\Frozen", 0, 0) Dim maxAmount As Integer = 8 Dim currentAmount As Integer = 0 While currentAmount <= maxAmount Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\StatusEffect\Frozen", New Rectangle(0, 0, 32, 32), "") - Dim xPos = CSng(Random.Next(-4, 4) / 8) - Dim zPos = CSng(Random.Next(-4, 4) / 8) + Dim xPos As Single + Dim zPos As Single + If own = False Then + xPos = CSng(Random.Next(-2, 4) / 8) + zPos = CSng(Random.Next(-2, 4) / 8) + Else + xPos = CSng(Random.Next(-4, 2) / 8) + zPos = CSng(Random.Next(-4, 2) / 8) + End If Dim Position As New Vector3(xPos, -0.25, zPos) Dim Scale As New Vector3(0.25F) Dim startDelay As Double = 5.0 * Random.NextDouble() - Dim SnowflakeEntity = FrozenAnimation.SpawnEntity(Position, Texture, Scale, 1.0F, CSng(startDelay)) + Dim SnowflakeEntity = FrozenAnimation.SpawnEntity(pNPC.Position + Position, Texture, Scale, 1.0F, CSng(startDelay)) FrozenAnimation.AnimationFade(SnowflakeEntity, True, 0.02, False, 0.0F, CSng(startDelay), 0.0) Threading.Interlocked.Increment(currentAmount) @@ -3449,42 +3487,42 @@ Else 'Works! If Core.Player.ShowBattleAnimations <> 0 Then - Dim ConfusionAnimation As New AnimationQueryObject(pNPC, Not own) + Dim ConfusedAnimation As New AnimationQueryObject(pNPC, Not own) - ConfusionAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) - Dim DuckEntity1 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) - Dim DuckEntity2 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) - Dim DuckEntity3 As Entity = ConfusionAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.5F), 1, 0, 0.5) + ConfusedAnimation.AnimationPlaySound("Battle\Effects\Confused", 0, 0) + Dim DuckEntity1 As Entity = ConfusedAnimation.SpawnEntity(New Vector3(-0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.25F), 1, 0, 0) + Dim DuckEntity2 As Entity = ConfusedAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.25F), 1, 0, 0) + Dim DuckEntity3 As Entity = ConfusedAnimation.SpawnEntity(New Vector3(0.25, 0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), New Vector3(0.25F), 1, 0, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.5, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 0.75F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 1.5F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 1.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 2.25F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 2.25F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 2.25F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 2.0F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 3.0F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 3.0F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 0, 16, 16), ""), 3.0F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 2.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 3.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 3.75F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 16, 16, 16), ""), 3.75F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 3, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 4.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 4.5F, 0) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 32, 16, 16), ""), 4.5F, 0) - ConfusionAnimation.AnimationChangeTexture(DuckEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) - ConfusionAnimation.AnimationChangeTexture(DuckEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 3.5F, 0.5) + ConfusedAnimation.AnimationChangeTexture(DuckEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 5.25F, 1) + ConfusedAnimation.AnimationChangeTexture(DuckEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 5.25F, 1) + ConfusedAnimation.AnimationChangeTexture(DuckEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Confused", New Rectangle(0, 48, 16, 16), ""), 5.25F, 1) - BattleScreen.BattleQuery.Add(ConfusionAnimation) + BattleScreen.BattleQuery.Add(ConfusedAnimation) Else BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Confused", False)) End If @@ -3644,7 +3682,7 @@ Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) Dim Position As New Vector3(xPos, -0.4, zPos) - Dim Destination As New Vector3(xPos, 1.2, zPos) + Dim Destination As New Vector3(0, 1.2, 0) Dim Scale As New Vector3(0.2F) Dim startDelay As Double = 5.0 * Random.NextDouble() Dim StatEntity As Entity = StatAnimation.SpawnEntity(pNPC.Position + Position, Texture, Scale, 1.0F, CSng(startDelay)) From bf887b0e3a1ef2e7d70c489ec7dd60fb3e0bc90d Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Tue, 14 Dec 2021 22:11:11 +0100 Subject: [PATCH 30/57] =?UTF-8?q?Fixed=20Bug:=20When=20the=20lead=20Pok?= =?UTF-8?q?=C3=A9mon=20faints=20and=20you=20switch=20to=20a=20different=20?= =?UTF-8?q?Pok=C3=A9mon,=20when=20the=20battle=20ends,=20your=20current=20?= =?UTF-8?q?Pok=C3=A9mon=20disappears?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- P3D/Battle/BattleSystemV2/Battle.vb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index f2fa41fc3..9a19a130b 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -2674,7 +2674,7 @@ If BattleScreen.IsTrainerBattle = False AndAlso Core.Player.ShowBattleAnimations <> 0 Then If own = False Then - Dim FaintAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True, BattleScreen.OppPokemonModel) + Dim FaintAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) FaintAnimation.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) FaintAnimation.AnimationMove(Nothing, False, 0, -1, 0, 0.05, False, False, 2, 0,,, 3) BattleScreen.BattleQuery.Add(FaintAnimation) @@ -7121,17 +7121,17 @@ Loop While SmokeReturned <= 38 End If + ' Pokemon disappears + BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) If Core.Player.ShowBattleAnimations <> 0 Then - ' Pokemon disappears - BallReturn.AnimationFade(Nothing, False, 1, False, 0, 1, 0) BallReturn.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) ' Ball returns BallReturn.AnimationPlaySound("Battle\Pokeball\Throw", 1, 0) Dim BallReturnEntity As Entity = BallReturn.SpawnEntity(Nothing, BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) BallReturn.AnimationMove(BallReturnEntity, True, -2, 0, 0, 0.1, False, True, 1, 0,, 0.3) - BattleScreen.AddToQuery(InsertIndex, BallReturn) End If + BattleScreen.AddToQuery(InsertIndex, BallReturn) Dim index As Integer = NewPokemonIndex If index <= -1 Then From 6dcb11c775dd4b7b6707ffca7457515ae43127ac Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Mon, 20 Dec 2021 20:14:26 +0100 Subject: [PATCH 31/57] Mega Evolution Animation - Attempt 1 --- P3D/Battle/BattleSystemV2/Battle.vb | 40 +++++++++++++++++- .../Sounds/Battle/Effects/MegaEvolution.wav | Bin 0 -> 514532 bytes .../Battle/MegaEvolution/Mega_Phase1.png | Bin 0 -> 258 bytes .../Battle/MegaEvolution/Mega_Phase2.png | Bin 0 -> 4157 bytes P3D/P3D.vbproj | 9 ++++ 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 P3D/Content/Sounds/Battle/Effects/MegaEvolution.wav create mode 100644 P3D/Content/Textures/Battle/MegaEvolution/Mega_Phase1.png create mode 100644 P3D/Content/Textures/Battle/MegaEvolution/Mega_Phase2.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 9a19a130b..3800a3759 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -486,8 +486,10 @@ Sub DoMegaEvolution(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) Dim p As Pokemon = BattleScreen.OwnPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC If Not own Then p = BattleScreen.OppPokemon + pNPC = BattleScreen.OppPokemonNPC End If 'Transform a Pokemon into it's Mega Evolution Dim _base As String = p.GetDisplayName() @@ -504,7 +506,43 @@ p.CalculateStats() p.LoadAltAbility() Me.ChangeCameraAngle(1, own, BattleScreen) - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(own, ToggleEntityQueryObject.BattleEntities.OwnPokemon, PokemonForms.GetOverworldSpriteName(p), 0, 1, -1, -1)) + '***Mega Evolution Animation*** + If Core.Player.ShowBattleAnimations <> 0 Then + Dim MegaAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) + MegaAnimation.AnimationPlaySound("Battle\Effects\MegaEvolution", 0, 0) + + Dim maxAmount As Integer = 16 + Dim currentAmount As Integer = 0 + While currentAmount <= maxAmount + Dim Texture As Texture2D = TextureManager.GetTexture("Textures\Battle\MegaEvolution\Mega_Phase1") + Dim xPos = CSng((Random.NextDouble() - 0.5) * 1.2) + Dim zPos = CSng((Random.NextDouble() - 0.5) * 1.2) + + Dim Position As New Vector3(xPos, 0.8, zPos) + + Dim Scale As New Vector3(0.5F) + Dim startDelay As Double = 5.0 * Random.NextDouble() + Dim Phase1Entity As Entity = MegaAnimation.SpawnEntity(pNPC.Position + Position, Texture, Scale, 1.0F, CSng(startDelay)) + + Dim Destination As New Vector3(CSng(pNPC.Position.X - Phase1Entity.Position.X), -0.8, CSng(pNPC.Position.Z - Phase1Entity.Position.Z)) + MegaAnimation.AnimationMove(Phase1Entity, True, Destination.X, Destination.Y, Destination.Z, 0.05F, False, True, CSng(startDelay), 0.0F) + Threading.Interlocked.Increment(currentAmount) + End While + + Dim Phase2Entity As Entity = MegaAnimation.SpawnEntity(pNPC.Position, TextureManager.GetTexture("Textures\Battle\MegaEvolution\Mega_Phase2"), New Vector3(0.0F), 1.0F, 2.0F, 0.0F) + MegaAnimation.AnimationRotate(Phase2Entity, False, 0, 0, 0.25F, 0, 0, 10.0F, 2, 0F, False, False, True, False) + MegaAnimation.AnimationScale(Phase2Entity, False, True, 1.0F, 1.0F, 1.0F, 0.05F, 2.0F, 0.0F) + BattleScreen.BattleQuery.Add(MegaAnimation) + If pNPC Is BattleScreen.OwnPokemonNPC Then + BattleScreen.OwnPokemonNPC.SetupSprite(PokemonForms.GetOverworldSpriteName(p), "", False) + Else + BattleScreen.OppPokemonNPC.SetupSprite(PokemonForms.GetOverworldSpriteName(p), "", False) + End If + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\MegaEvolution", False)) + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(own, ToggleEntityQueryObject.BattleEntities.OwnPokemon, PokemonForms.GetOverworldSpriteName(p), 0, 1, -1, -1)) + End If + BattleScreen.BattleQuery.Add(New TextQueryObject(_base & " has Mega Evolved!")) TriggerAbilityEffect(BattleScreen, own) End If diff --git a/P3D/Content/Sounds/Battle/Effects/MegaEvolution.wav b/P3D/Content/Sounds/Battle/Effects/MegaEvolution.wav new file mode 100644 index 0000000000000000000000000000000000000000..83da982da44c2d5019d4b49338e280797c832559 GIT binary patch literal 514532 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'&w@f8n=7K~jSjfvZi)D*kKHX^oRcvIG*mE3j1 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%0A?~l7~F} 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 literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/MegaEvolution/Mega_Phase1.png b/P3D/Content/Textures/Battle/MegaEvolution/Mega_Phase1.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4a6efbc484f930a32dd82c39506e5d3e8be1e7 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oArNM~bhqvgP*A$W zHKHUqKdq!Zu_%?nIW?!avREOwq%<WnUm+wvKj+}`hc!TDy`C<PArXg@|NQ@Nf7pTP zSRi|kRl*g<#e53K8STT3lCB<+`!|2$GQNgrnGejqX-qA*0vtCvca$ACKegw-p>EoN z5{}Nk1^bv6C_09+3#40C_DPf;2q<!3XJ&S0ES$z~&Az~@iLu*RZ9&n>xx9hi2l@VR uWrhj}KIMoKJKDU+NGg{fYT*J_1_q^_I}gqdn>h{WFa}RoKbLh*2~7aIOjlC? literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/MegaEvolution/Mega_Phase2.png b/P3D/Content/Textures/Battle/MegaEvolution/Mega_Phase2.png new file mode 100644 index 0000000000000000000000000000000000000000..68cd6e9aa23c3bf288780696e8e34377899fb1e9 GIT binary patch literal 4157 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 EAAG=UWB>pF literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 32cc4e1b4..dac21a01e 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14713,6 +14713,15 @@ <Content Include="Content\Sounds\Battle\Effects\Confused.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Effects\MegaEvolution.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Textures\Battle\MegaEvolution\Mega_Phase1.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Textures\Battle\MegaEvolution\Mega_Phase2.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\StatusEffect\Frozen.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> From f1ccba7e4569ea87a590817b349aa41480cc78db Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Tue, 28 Dec 2021 13:55:30 +0100 Subject: [PATCH 32/57] Improved Mega Evolution animation and slightly tweaked the speed of some of the battle intros Battle intros need testing still --- P3D/Battle/BattleSystemV2/Battle.vb | 14 ++++---------- P3D/Screens/BattleIntroScreen.vb | 4 ++-- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 3800a3759..64673f565 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -529,20 +529,14 @@ Threading.Interlocked.Increment(currentAmount) End While - Dim Phase2Entity As Entity = MegaAnimation.SpawnEntity(pNPC.Position, TextureManager.GetTexture("Textures\Battle\MegaEvolution\Mega_Phase2"), New Vector3(0.0F), 1.0F, 2.0F, 0.0F) - MegaAnimation.AnimationRotate(Phase2Entity, False, 0, 0, 0.25F, 0, 0, 10.0F, 2, 0F, False, False, True, False) - MegaAnimation.AnimationScale(Phase2Entity, False, True, 1.0F, 1.0F, 1.0F, 0.05F, 2.0F, 0.0F) + Dim Phase2Entity As Entity = MegaAnimation.SpawnEntity(pNPC.Position, TextureManager.GetTexture("Textures\Battle\MegaEvolution\Mega_Phase2"), New Vector3(0.0F), 1.0F, 4.0F, 0.0F) + MegaAnimation.AnimationRotate(Phase2Entity, False, 0, 0, 0.1F, 0, 0, 10.0F, 4, 0F, False, False, True, False) + MegaAnimation.AnimationScale(Phase2Entity, False, True, 1.25F, 1.25F, 1.25F, 0.02F, 4.0F, 0.0F) BattleScreen.BattleQuery.Add(MegaAnimation) - If pNPC Is BattleScreen.OwnPokemonNPC Then - BattleScreen.OwnPokemonNPC.SetupSprite(PokemonForms.GetOverworldSpriteName(p), "", False) - Else - BattleScreen.OppPokemonNPC.SetupSprite(PokemonForms.GetOverworldSpriteName(p), "", False) - End If Else BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\MegaEvolution", False)) - BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(own, ToggleEntityQueryObject.BattleEntities.OwnPokemon, PokemonForms.GetOverworldSpriteName(p), 0, 1, -1, -1)) End If - + BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(own, ToggleEntityQueryObject.BattleEntities.OwnPokemon, PokemonForms.GetOverworldSpriteName(p), 0, 1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(_base & " has Mega Evolved!")) TriggerAbilityEffect(BattleScreen, own) End If diff --git a/P3D/Screens/BattleIntroScreen.vb b/P3D/Screens/BattleIntroScreen.vb index 121fdaeb2..bf53de80d 100644 --- a/P3D/Screens/BattleIntroScreen.vb +++ b/P3D/Screens/BattleIntroScreen.vb @@ -455,7 +455,7 @@ If Animations.Count = 0 Then Animations.Add(New Rectangle(CInt(Core.windowSize.Width / 2 - (Core.windowSize.Width / 100 / 2)), CInt(Core.windowSize.Height / 2 - (Core.windowSize.Height / 100 / 2)), CInt(Core.windowSize.Width / 100), CInt(Core.windowSize.Height / 100))) Else - Dim Speed As Integer = CInt(Me.duration.TotalMilliseconds / Core.windowSize.Height * 3) + Dim Speed As Integer = CInt(Me.duration.TotalMilliseconds / Core.windowSize.Height * 4) If Animations(0).Height >= Core.windowSize.Height + 128 Then ready = True End If @@ -479,7 +479,7 @@ If value >= Core.windowSize.Height / 2 + 4 Then ready = True Else - value += CInt(Math.Ceiling(Me.duration.TotalMilliseconds / Core.windowSize.Height)) + value += CInt(Math.Ceiling(Me.duration.TotalMilliseconds / Core.windowSize.Height * 3)) End If End If End Sub From 9468900f9b18cf355822661c74d429be5d2484fd Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Tue, 28 Dec 2021 17:34:19 +0100 Subject: [PATCH 33/57] Removed Attack textures that will never be used --- .../Battle/Fighting/forcepalmhand.png | Bin 1876 -> 0 bytes .../Battle/Fighting/forcepalmhandfaded.png | Bin 1849 -> 0 bytes .../Battle/Fighting/forcepalmhandfading.png | Bin 1863 -> 0 bytes .../Battle/Fighting/forcepalmimpact.png | Bin 1477 -> 0 bytes .../Battle/Fighting/forcepalmparticle.png | Bin 260 -> 0 bytes P3D/Content/Textures/Battle/Fire/Hand.png | Bin 2805 -> 0 bytes .../Textures/Battle/Other/RedCircle.png | Bin 1740 -> 0 bytes .../Textures/Battle/Other/YellowCloud.png | Bin 385 -> 0 bytes P3D/Content/Textures/Battle/Status.png | Bin 3682 -> 0 bytes P3D/Content/Textures/Battle/Water/Water.png | Bin 279 -> 0 bytes P3D/Content/Textures/Battle/Water/bubble.png | Bin 571 -> 0 bytes P3D/P3D.vbproj | 37 ++---------------- 12 files changed, 3 insertions(+), 34 deletions(-) delete mode 100644 P3D/Content/Textures/Battle/Fighting/forcepalmhand.png delete mode 100644 P3D/Content/Textures/Battle/Fighting/forcepalmhandfaded.png delete mode 100644 P3D/Content/Textures/Battle/Fighting/forcepalmhandfading.png delete mode 100644 P3D/Content/Textures/Battle/Fighting/forcepalmimpact.png delete mode 100644 P3D/Content/Textures/Battle/Fighting/forcepalmparticle.png delete mode 100644 P3D/Content/Textures/Battle/Fire/Hand.png delete mode 100644 P3D/Content/Textures/Battle/Other/RedCircle.png delete mode 100644 P3D/Content/Textures/Battle/Other/YellowCloud.png delete mode 100644 P3D/Content/Textures/Battle/Status.png delete mode 100644 P3D/Content/Textures/Battle/Water/Water.png delete mode 100644 P3D/Content/Textures/Battle/Water/bubble.png diff --git a/P3D/Content/Textures/Battle/Fighting/forcepalmhand.png b/P3D/Content/Textures/Battle/Fighting/forcepalmhand.png deleted file mode 100644 index ca1fa76642b3873e48e4c0090f4a86566927dd97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 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 O0000<MNUMnLSTZQx^_|k diff --git a/P3D/Content/Textures/Battle/Fighting/forcepalmhandfaded.png b/P3D/Content/Textures/Battle/Fighting/forcepalmhandfaded.png deleted file mode 100644 index 6d7e52fb2a78da641ff8faaabb7bad0ed7e973c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 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 diff --git a/P3D/Content/Textures/Battle/Fighting/forcepalmhandfading.png b/P3D/Content/Textures/Battle/Fighting/forcepalmhandfading.png deleted file mode 100644 index 5b3bd33add1cd9fd583aa1e02e40a72acfa796fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1863 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 BY^MMK diff --git a/P3D/Content/Textures/Battle/Fighting/forcepalmimpact.png b/P3D/Content/Textures/Battle/Fighting/forcepalmimpact.png deleted file mode 100644 index dcb19dac53c32f89fa010ad60d863c3068f977f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1477 zcmV;$1v>hPP)<h;3K|Lk000e1NJLTq0024w001=z1^@s65bgN=00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1zJf&K~!i%?OI!i z<5U<PuXxA%6$BAQP(f4>1wj@?K@?vU1Rn$yMSKvv;KPEhAgr(mzNo9nf{M~6>FBuV zgW$f1tooqB4(N-+4x6OYX-?9amGvIKFa1-~)6+I>)2593!AIMi|NNJnKj;6Gbm9Mi zIF65zuhWHZtD5hGJLKoqMBNG=M38YpTfG(Ui;tI~tpoo(|5OCm>;&2l_FLZxt`U)u z;8ixx^PJ!=`8hxEY_+p1NTKJbzdbwLd#KjBQbY&Bw}PvEJN#Vcd2)C@aA+~Sj*giE zO(~9lv|4FiBGbCy*P{DzvcA#hHQ#TZAtL31yPV0v0Xzcv?Yw@Oo=EQ(dQ!fN!QEo2 zTp-P!Gdnn#SltcZQNNqUx~X=Fsq#=?46e=R?D#~=|03qf1DyE6<lG=4ZU4c%zwr4d zQua5VD1PTLlRU{iKuqStY9%^*t-5xhUkNYcF33;*#`kmh=~mUHP`oToC>Y<5&nnXF zbsXE7lE)GnobsITFw*&hx)VO?S<#K|(#E;8&1;h1d5mL}Nn{N=dT6Vsk^u68!I5jV z=yC=fSL5TjnZz%~$I_8_cYFc@dB<pM2;uYr1~5vKK-uJkV6I7Lhqkh0N^yYVZ9RsD z5RN`8)5ivNm~@jE^F^#UaCMPZznTo{<Vr9VW$MJBu70b_QY2!<ft`uTn8vTt>#s;q zCv|JKa8jqx4i2l0JnPd4GDWg!X)BB05w6v@eJi|8#3qO9gx6<{=qxf_`++u0w#jzT zNk9DLYGw6gnKB-rtkuWJ#2Zgu(3Z)EEZZGc_y#M9Ol#LsriIkg(~^?H62tPMkqvl{ zQlyipni*(Q_oFY7+A=LaJWD;KD`L%);h7<6E;K((WCo6PNv(gpezB(L@F>kdQJ_uQ z&ic|z)o9qQD`d*(fP$Yo%FwdO;hBTBy94`=Y*$@N-72Ev0R~=96_$~<DF&wRsC}>r zuDyO$s&E!1r62m08usNPG8yW2bbG3FnhnA*NVn7-q@%uMbr6y9!OaL~Y$a7(#zvHa zwzENk%PWiFnKGOoom({$b(Ko6)BTuLJ~x5lh66SJ89qimP>oMyXVh>S7x~WS`F!NM zvS;NanKm2<^22P9WSObU2Lq`e^;&RqAt{S9_DD9slx1#4T)or}1}%rj2NZ3?MQ(gP zTV{FTGvCw?&xszF!{Y%f`7jh6Nfq|6#D)Qv(q`%h7UEqwJUU!Eybp!<=dQpsmem5T zS-~xuFUvACK76Zn6YG<vxWh8iH@Vr?eSx1cJQ-X&y3@46Sk;-{rg@9e4JajEuODiU zh)fP{;l33;07E}?8=1|GH=i>jpnX}}9io=HOYSKmS{zurp!~Dc(6md<z#xU(S46yc z@ZmR&FombpK;#LsO|@I5Ob0M>P>dD&xRb4?yl2f3Bu@6UUlPN>*CxX<JTlm4vtLDk zuNw3&V^gfUweT@!)4{#bS=^v->>iBmz>UZ0qNaGj2>*4WJJg|w4Mp9F?npMfJ}X$} zO+*50N^hDRD~h}m5mV&?&b*{MS0wrHTuhY<UN0sG3!$x=rLQP&a=A0s9d)nK$u6qz z_)?kkuz9&=88Z`O^8mi&F*!)`(IbM~m3<$ARr=l}Ya;6Nl1wWfdY}vrJLi6UZm)l` zd4Y&^kjM}Gdrh0XJDQt~i12E`6Nz(Z3Hg*TPZ?maI2nKF!DWd+TOvLm;N3oZU-_9E zI5E$g0!)cOi+_Dz7I^)df+SH^o))pK0qnw`_5^CH*JOC>fEx~ieFdxA0Btr1EL$>s f6i3m6g@u0s%eGN*r=wNe00000NkvXXu0mjfk>SrA diff --git a/P3D/Content/Textures/Battle/Fighting/forcepalmparticle.png b/P3D/Content/Textures/Battle/Fighting/forcepalmparticle.png deleted file mode 100644 index 3ece9177f0d7f2f6cbf6a3620ef8a87629c40dcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^JRmj)8<3o<+3y6T7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@f-^l`978mMlO>)!n00;1|MLqaj<j(lv!9>a zz|}mh>EqrNTMNuWq=aq0&-(m7?$fpZ-#7I;W(crlvUE95RXA|#$<6KqYR;xHtM{=T zQ?T=pQQ;5eVl3eG=z1vCV3v@<z?dR^z=Y#*kq}1=cT<Jb5{@><nh6#moN5f&OtUx+ zSBNS%FFiR~*s&xrUtc|<Aws~ea+A~)PF5ZshTnVU%Ww5)<pnyD!PC{xWt~$(69Bnf BRt5k7 diff --git a/P3D/Content/Textures/Battle/Fire/Hand.png b/P3D/Content/Textures/Battle/Fire/Hand.png deleted file mode 100644 index 51d3171d6c379985e27f14257b7d91cdb621874d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2805 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 Hu0mjf*NGP~ diff --git a/P3D/Content/Textures/Battle/Other/RedCircle.png b/P3D/Content/Textures/Battle/Other/RedCircle.png deleted file mode 100644 index 277e030d0da320bde6e1e1dea4a4d467dc8d63a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1740 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 diff --git a/P3D/Content/Textures/Battle/Other/YellowCloud.png b/P3D/Content/Textures/Battle/Other/YellowCloud.png deleted file mode 100644 index 1e75ef2bbd842dfb19eed47761dbd383440bda83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!1~E?;$B+p3w^JOs4jG8J{7>E69$uioVy(JB z)b~8CD|$8#;X&fDI|LjrhW+_G`9538O%5-%HXSD`{mUvMK=8$Qm5`LGuvBu$ZO#8q zH`2VcOQ!~@lqJO6PCa~*_r1ckkWJZT*KUfll&wDaa}M9}DeDZ{&B|;xd!MOfZurbP zS4C&3^`V<<54}m+#o%!3BU3`wy4;G>kAq`fz9clvW_qyU*3!csS*Z*wr5XHo?1~8L z7Tacgi~k<O5ygy$JRM4P><@Ob=`vj5Z^&GDOfT>!JI9|{liYXCE4x{6$URV>ZxO?R z80+>&HZuw&7T7T;@SPA@v|I3*?u+}(^BDxRrZr!)cd6a6_P%z5SF=jU-?bkW0D-;G aMQ&yOfH^|E(wl(6#^CAd=d#Wzp$Pz42a`1b diff --git a/P3D/Content/Textures/Battle/Status.png b/P3D/Content/Textures/Battle/Status.png deleted file mode 100644 index 731861d6cab922265c0be668ac8acf89420206bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3682 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 diff --git a/P3D/Content/Textures/Battle/Water/Water.png b/P3D/Content/Textures/Battle/Water/Water.png deleted file mode 100644 index 4722e8b3dfb1099670f48729ff434e6b007c170b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!8M*Pjv*HQr4x7aHaPG&M^0Nfqy5>k1u4DF zE_+TG21NW2mR6aTDjmGBZ}X43Ilj#wl)T?6s`Bk)TP5>>p{390!fdluj2D>MPJG}N z&^2aAcd)Ip{1D1kAD4M*{ez3Mv`-ygaAtDSfp%$y!Y8R`A3S-QXe4mKNOI0cvxb!) zntn|Q{;e4QF+6NZ_>;PzFN|B7bn2Ct?T@Y9QT1|n<ms{*$G59F@Bh~{&9wP@qoMx3 X=jWFPioGoWx|_k%)z4*}Q$iB}n;~u8 diff --git a/P3D/Content/Textures/Battle/Water/bubble.png b/P3D/Content/Textures/Battle/Water/bubble.png deleted file mode 100644 index da25aff4aec618793100702ecd39d2280fc40367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0nkZAK~y+TeUmXy z!cY{2F&ZZa;|~zy1cQ^m1R{f7Oz7A_X&0kzu<52h0T$E7g(eO(HZiYZ5F!hS3o$W~ zr9c=ccJX=7>w7{I@gyg&eZA-Fz2%WvCB5>vV^|Ikx_xe4I$Uo5ugPS>;rV<n>;+xk za07mG=ZSj&VOhS=5xorsn&Ao~G#ZVLXS3O16h+xE{K^C35)kfo2WbexI+1C;j^p@% zbG{)T{fhQBtxNkG<Dgz{CsF`ve_L+-DeJ<S0+IsYBcbi_c)TmOgz8P^U*EQTd7BbF zTR_m#&7I5ZE{in7?vwo_-1K#;C00?mBpPQ+HyX((=s>qTUaYcEH@yx*s|*;utOE!# z$jbRWo^yxqn$h$V+kXO-0niNjG4Z=AK)yNjVO0p2S^-toO^05V95T^Cu@>;0J^Ua) z=WT+J6=c~oreCbFXYz-2VZT<c9uClr8e^JwK6?tFEJ9>;U8u4iYLO|G?$;Lp(~Ai( zAhT6~LM>p08XJ@??@P?DBs&n0vgr+S&SzVVBLLJk1>1P0!gQdrGM)$@GYI;ev3^XT zkiu`|7inCF^uLG^K0CMfWh^ZKU=*o!*(aw@dvuJ}WH~95`2p})2YX#!M0EfF002ov JPDHLkV1jst??M0o diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index dac21a01e..6edd1715b 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -26308,30 +26308,6 @@ <Content Include="Content\Textures\battletower.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Textures\Battle\Fighting\forcepalmhand.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Fighting\forcepalmhandfaded.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Fighting\forcepalmhandfading.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Fighting\forcepalmimpact.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Fighting\forcepalmparticle.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Fire\Hand.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Other\RedCircle.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Other\YellowCloud.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> <Content Include="Content\Textures\Battle\StatChange\Heal.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -26341,15 +26317,6 @@ <Content Include="Content\Textures\Battle\StatChange\statUp.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Content\Textures\Battle\Status.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Water\bubble.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Content\Textures\Battle\Water\Water.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> <Content Include="Content\Textures\Berries.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -30943,7 +30910,9 @@ <Install>false</Install> </BootstrapperPackage> </ItemGroup> - <ItemGroup /> + <ItemGroup> + <Folder Include="Content\Textures\Battle\Fighting\" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> <Import Condition=" '$(Configuration)' != 'DebugNoContent' Or '$(Configuration)' != 'ReleaseNoContent' " Project="$(MSBuildExtensionsPath)\MonoGame\v3.0\MonoGame.Content.Builder.targets" /> <PropertyGroup> From 92fafb2d63cd106c53b3d878fdfbb96f99f1e06c Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Tue, 28 Dec 2021 17:35:02 +0100 Subject: [PATCH 34/57] Fix Pound sound effect pointing towards the wrong location --- P3D/Pokemon/Attacks/Normal/Pound.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/P3D/Pokemon/Attacks/Normal/Pound.vb b/P3D/Pokemon/Attacks/Normal/Pound.vb index 8b4525c2b..5acd68c02 100644 --- a/P3D/Pokemon/Attacks/Normal/Pound.vb +++ b/P3D/Pokemon/Attacks/Normal/Pound.vb @@ -57,7 +57,7 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Pound", 0.5, 2.5) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Pound", 0.5, 2.5) Dim PoundEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Pound"), New Vector3(0.5F), 1, 0, 3) MoveAnimation.AnimationFade(PoundEntity, True, 1.0F, False, 0.0F, 3, 0) BattleScreen.BattleQuery.Add(MoveAnimation) From 312e3ed934f821a6ef960c7fa42542e714453c17 Mon Sep 17 00:00:00 2001 From: JappaWakkaP3D <31563291+JappaWakka@users.noreply.github.com> Date: Tue, 28 Dec 2021 17:35:28 +0100 Subject: [PATCH 35/57] Added Wrap & Whirlpool Animations --- P3D/Battle/BattleSystemV2/Battle.vb | 50 ++++++++++++++++++ .../Sounds/Battle/Attacks/Normal/Wrap.wav | Bin 0 -> 243240 bytes .../Sounds/Battle/Attacks/Water/Whirlpool.wav | Bin 0 -> 560952 bytes P3D/Content/Textures/Battle/Normal/Wrap.png | Bin 0 -> 1192 bytes .../Textures/Battle/Water/Whirlpool.png | Bin 0 -> 1525 bytes P3D/P3D.vbproj | 12 +++++ P3D/Pokemon/Attacks/Normal/Wrap.vb | 13 +++++ P3D/Pokemon/Attacks/Water/Whirlpool.vb | 10 +++- 8 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 P3D/Content/Sounds/Battle/Attacks/Normal/Wrap.wav create mode 100644 P3D/Content/Sounds/Battle/Attacks/Water/Whirlpool.wav create mode 100644 P3D/Content/Textures/Battle/Normal/Wrap.png create mode 100644 P3D/Content/Textures/Battle/Water/Whirlpool.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 64673f565..a5b5d117b 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -5813,6 +5813,20 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + 'Wrap Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, True, BattleScreen) + Dim WrapAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) + WrapAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) + Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + WrapAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + WrapAnimation.AnimationScale(WrapEntity, True, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 1) + BattleScreen.BattleQuery.Add(WrapAnimation) + End If ReduceHP(multiHP, True, False, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by Wrap!", "wrap") End If End If @@ -5827,6 +5841,17 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + 'Whirlpool Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, True, BattleScreen) + Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) + WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) + Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) + WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) + WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) + BattleScreen.BattleQuery.Add(WhirlpoolAnimation) + End If ReduceHP(multiHP, True, False, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by Whirlpool!", "whirlpool") End If End If @@ -6623,6 +6648,20 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + 'Wrap Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, False, BattleScreen) + Dim WrapAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) + WrapAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) + Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + WrapAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + WrapAnimation.AnimationScale(WrapEntity, True, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 1) + BattleScreen.BattleQuery.Add(WrapAnimation) + End If ReduceHP(multiHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by Wrap!", "wrap") End If End If @@ -6637,6 +6676,17 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + 'Whirlpool Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, False, BattleScreen) + Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) + WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) + Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) + WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) + WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) + BattleScreen.BattleQuery.Add(WhirlpoolAnimation) + End If ReduceHP(multiHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by Whirlpool!", "whirlpool") End If End If diff --git a/P3D/Content/Sounds/Battle/Attacks/Normal/Wrap.wav b/P3D/Content/Sounds/Battle/Attacks/Normal/Wrap.wav new file mode 100644 index 0000000000000000000000000000000000000000..aac7fa92affa59206d3c61594a9c359fef92662b GIT binary patch literal 243240 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 BM6v(? literal 0 HcmV?d00001 diff --git a/P3D/Content/Sounds/Battle/Attacks/Water/Whirlpool.wav b/P3D/Content/Sounds/Battle/Attacks/Water/Whirlpool.wav new file mode 100644 index 0000000000000000000000000000000000000000..de5b37b3be7231814a5e6877b4931c4a8b302930 GIT binary patch literal 560952 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	f!P;o=t#bbLKt-3G9Li^60W3e&q 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%0DH&M_8ATO2Srut%k<X9C=-S+D?Nqj|*Z#aNbV+sb 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 literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Normal/Wrap.png b/P3D/Content/Textures/Battle/Normal/Wrap.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba4edfe36803424950a83da6825aec436fc8ceb GIT binary patch literal 1192 zcmV;Z1XufsP)<h;3K|Lk000e1NJLTq002M$004jp1^@s6yMb?N00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT000Ct zNkl<Zc-rlpA$t=+5Qe`~SmN#<(73I_w(g>k6h)#S3hLq@iaJ1nBUMm|BCfSnoTL2* z>#9+UpcCdcx0k(;OD;DvCV8IrN%Flnx4Spr>?Y1RNRC7SC;$bZ02F`%Pyh-*0Vn_k zpa6K>{yujA@aVzwL=*rL4gh(c<LTq~asc?^0muR1izfi@UR=rrV6DZMH@~_MAawOb z1F+V@T8kf_?z#`);`-DXW5kIEfMoLd$Qfhc1L%6{7XScQ004mbw;Vq&?-YP206eU< z$givj2+8p6flJf0ARd4m0NKlj&KR?l0a73&&N+;x{Y4g7Ymug@taZR(+;eG~q6|WQ z^*0;3nhA?%fy3jTOAi17K^d^PEpE_B5KHv{0#O!Sgb=I<9Uk{e|IqmikQNF+0Vn_k zpa2wr0#E=7KmjNK1yK4#D54}*CY)*lB1&RB2IFEKKokI893_)P3;-@(0o;c%Mn;Rw zVBA|WN60Z2(Iw^sp!Z$B`U*e+1gtUMF(PIV<X7H@u<2}|?`y*pyO;+3EZ`9Mx}Yuy z66;T~09xTb7gmB*nZSc!`0rzaoaeSIv`WoU07wu1f$(3~h2i%e*qhyZjVsO3?4&vy zVqp}l_IvR_ivfflkB7tI(sUUU9LQ`oYt1vpS`{H0D|{Gvo-aXZ`%+p<VhTV3C;$bZ z02F`%Pyh-*0Vn_kpa8tMxIT5Fw$F3n^o%d=00r7cOCbt?FJ9CM5~FF~O(v6q_&m?$ z9H20o_Fa}`;x<t)?HeQjQnt^QZkz-JZJqT25CjF#5&*O&0h;MoNSt#xJnlJjRCI=S z34t%fcr-CBS9XbQ%ft)`_M=e%Wm({Z0I(4lv4Xkqrf!46O0Wt7pCP!@yRKPUS9qgi z01tuyAPB+-QWaU2MZ*d87c{vXkJ>!FNg(|Hc=l{lbnSwOzmq%$NEr-1j+DhNW}LMu zLZPkovC*almX^f24uGcI(3m0yKxl9k1)!|`R{=;E1bMAf0Z6?CL<6WQ^>-RTjL*?o z0A=FKe2z{6h!x*S0RD)->YUV00iXk-x$r9SD*^0Nf57eUb4Q|M#RmcKG-|s&9ugiS zz7)W|^at=YepxLs_H5+J{(v?DSS7rU_yT~B-=DcOP0`i{iP5wl+<(Y_Z(ZM_0Dwx^ zix0CFubzBOx+uH=U^MMJV+`5^V3lwZO|fpFH3;DB>}>1ZAyjRya;G*WyZ~S@?zt?> z769h+Ic6W`TPa`1h~_5kriAYlfbTl(LU;iH`GM3V1pp`6>y3UH7tOch`hpk28x$P{ zfFP{<17ZXNMSpM`Zg6lK3_+ln&1TW&r=QYQCg?6i2UmitAaEF~u4Yv<+3@gR0O~-f z6T803wE$4iks5Ux9QHx*S_Kh)4hUZ?g<_u?tkoWu4&V<njp{uVoQd230000<MNUMn GLSTaJSNM?t literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Water/Whirlpool.png b/P3D/Content/Textures/Battle/Water/Whirlpool.png new file mode 100644 index 0000000000000000000000000000000000000000..96bdc8c60ba56a4c3ae9cce38b7e93a34fe60861 GIT binary patch literal 1525 zcmV<R1q%9!P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00009a7bBm000XU z000XU0RWnu7ytkTr%6OXRCt`tTS2nqAP9Z=H3#BIeFTq^<t+P19Ov&ci;f8*Ag1$w z&#Ou$EeMEc6w}M!?{9n<+kRg@q5SI;N)>9uH=NG+HT(|_0NURFRY&~!Eky=Kjg<5s z8y=<u3jdV46Dv)zZ@W!zIl|I;O9ZTR_SV38i{_6|Wv%qO3S+~~(eU;hpc_+-b$WQi z*_&x7{#)mVI0D!%ULUp*X2TpAMarYGtineW0Kf*Ghy+7^#drwphOBGsdAC;ywiBK> z3@dxlXkKV^c={~;0a8O?)OcWeQac^PcsYY#4Xl@oN^_#{uqR<NkaR#PSmc$dlLCon z#>){ASlxva))kv>bjAr&lc1%fp_4=K$}QRxXJkk?zppe}BK;bi63jCupr0pnee$ao zo^Q0oE$aYx%*t|_ptHCWe1}%Lf^^9Gz*d4cM%n>&>{sFDjO-aYqDeZTZ8XD=fSsq{ z!X&(7DgxG3En*mP!zdxtt51T?Nm&<=p9CMG@r-k_vOu_Qu$DQJ<Jlk(Exi{jA<{II zalUR6%BChj8q_64^Z4m?C5Aya7mOny+jvg!jOq~V$*|JcC=Za?b3_i<KodPru)~$q zWr5K*R?@6;U0*=1CPz;29Iyc*q&&re5urn}GAufaXN71P?Uh?^fvq;YsYJHY!x$2L znl=NAU&@yt^bWE30=Tb1(_>ZmNU2rVl4Hq;>QX}XB(wwiMUDomI~g<!G<cTsEIEug z3OqXE_Q*M4eyvYNnFSK}{aI#>Rsz<Cpg$6_vWV<L8vzT{<kxwQ9f1QS0NnSqEE5@@ z_riUmo^(JL0j?u}K8zXmIDVXuM_S9tDXi;j0xnXPmN&u-FJ_aXo^ZzSl@}yR4;&k= z$~)lqbU84cUL#;U{@GE+Xu&<t5lQc6leDfIFpPl0$nW|Lp4rBCX*a_B#Am?U5PczY zI?LjjoN}uU1@r{2?(ww^LQZ$?SR=q}{L%XrkwI)1XEr34Km+}3@EFJ^L@b4of}QqG zFE-n93$x`twl9p%+8DPaC9dF7mYG|=paV9bp9GivI>SFwmcZLXAZr65KU~GUXTAlZ zENU9u8Z<gnkT4Uk6(r<Gpxp5L<OdQRTnF)fCxd2{JyPlxV2}`T!2ykWUYV%KL_w3- zuyoZj8k8k47XgI12~YCUxfe(c1vYefx}EaF>C};qAwG6MUwNLFPg-??_1y5w-&tK` zmm7{azBGv)U@3{f!U$HhCmJU-&$507(k?d2#u!IHvp2U4V9dWJCI3^%lJp2#7pwBX z7Sa378}9zM0LO-;$F+nd&(c$6sq*M`IPU;LYc!i&{=&rL*L)f*=p68&rOQZODS0yF zdCW~}khn*NAwkz*%%2z5dT55Rxws4S0Zq~}qf{sc5TEdP@>pFSeS}uNyRsc7MBE;i z<%~88*fE3+nk7F2ElZ-xd}6_1S?_%+yLcIt6bSZd5v#kVYp_#p@sN`9%<X5~2#7XB zmxcq7KSAPvW`WR5dfCPU@4N<gg-x%LqBHv5)?lYRqg%+lns~kJfNr5g1{0xo5Q*Pj zT~@zI-GvREU3Dv+bVTTY^2AcV3oZpqw~46+uu++CHku7Sf{%dqcA`|_as*U|$aQ@O zUC!#+t7p}nz|1h1IvLV}OTm&#QV{GzPY#qhv?#@P<x}2a1nAK36g;tju%&Ya544jb z<CcRDpwBa8oRJy=LqRN@;29@q1+XW`BxD}J<+)=L1Tft@;Wk?E0OC&*1b^9U==U05 zp6W;~fjbi-3--UmXeUIQtBMi`j(WRUumyY`?*8B4Va)97YUe-BB_wK+R7chw>HGLg z(d*b|9dOH8!~m8}rUP!o%!cYC{~iA6gOU2((eeF}qJ12{@!#P^-1UEiKaNlQd0IN+ b<4*Vo^IjO63>%v*00000NkvXXu0mjf-|5Ht literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 6edd1715b..35f36949b 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14689,12 +14689,18 @@ <Content Include="Content\Sounds\Battle\Attacks\Normal\Tackle.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Attacks\Normal\Wrap.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Attacks\Poison\PoisonSting_Hit.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="Content\Sounds\Battle\Attacks\Poison\PoisonSting_Start.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Attacks\Water\Whirlpool.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Damage\Effective.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -14722,6 +14728,9 @@ <Content Include="Content\Textures\Battle\MegaEvolution\Mega_Phase2.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Normal\Wrap.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\StatusEffect\Frozen.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -15442,6 +15451,9 @@ <Content Include="Content\Textures\Battle\StatusEffect\Poisoned.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Water\Whirlpool.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\chess.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/P3D/Pokemon/Attacks/Normal/Wrap.vb b/P3D/Pokemon/Attacks/Normal/Wrap.vb index 199cc4c64..bea93d4e8 100644 --- a/P3D/Pokemon/Attacks/Normal/Wrap.vb +++ b/P3D/Pokemon/Attacks/Normal/Wrap.vb @@ -87,6 +87,19 @@ End If End Sub + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) + Dim WrapEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + MoveAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + MoveAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + MoveAnimation.AnimationScale(WrapEntity, True, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 1) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + End Class End Namespace \ No newline at end of file diff --git a/P3D/Pokemon/Attacks/Water/Whirlpool.vb b/P3D/Pokemon/Attacks/Water/Whirlpool.vb index d40914b55..e603e4011 100644 --- a/P3D/Pokemon/Attacks/Water/Whirlpool.vb +++ b/P3D/Pokemon/Attacks/Water/Whirlpool.vb @@ -99,7 +99,15 @@ Namespace BattleSystem.Moves.Water End If End If End Sub - + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) + Dim WhirlpoolEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + MoveAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) + MoveAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) + MoveAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file From 31e00f72d6e066db8b3e13e9d152bd478285fdab Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 30 Dec 2021 21:53:17 +0100 Subject: [PATCH 36/57] Directional light color at night is now neutral and more subtle --- P3D/World/Lighting.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/P3D/World/Lighting.vb b/P3D/World/Lighting.vb index 951024204..afbf03a6e 100644 --- a/P3D/World/Lighting.vb +++ b/P3D/World/Lighting.vb @@ -48,7 +48,7 @@ Public Class Lighting Case 0 ' Night refEffect.AmbientLightColor = New Vector3(0.8F) - refEffect.DirectionalLight0.DiffuseColor = New Vector3(-0.4F, -0.4F, -0.6F) + refEffect.DirectionalLight0.DiffuseColor = New Vector3(-0.2F) refEffect.DirectionalLight0.Direction = Vector3.Normalize(New Vector3(-1.0F, 0.0F, 1.0F)) refEffect.DirectionalLight0.SpecularColor = New Vector3(0.0F) refEffect.DirectionalLight0.Enabled = True From 35aa80b072850ed1ddb89122c565b02eea35ca76 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 30 Dec 2021 21:53:57 +0100 Subject: [PATCH 37/57] =?UTF-8?q?Improved=20Whirlpool=20Animation=20+=20Fi?= =?UTF-8?q?xed=20BattleAnimations=20drawn=20behind=20Pok=C3=A9mon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- P3D/Battle/BattleSystemV2/Battle.vb | 10 ++++--- P3D/Battle/BattleSystemV2/BattleScreen.vb | 33 +++++++++++++++++++---- P3D/Pokemon/Attacks/Water/Whirlpool.vb | 5 ++-- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index a5b5d117b..85b8faab5 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -5844,9 +5844,10 @@ 'Whirlpool Animation If Core.Player.ShowBattleAnimations <> 0 Then ChangeCameraAngle(1, True, BattleScreen) - Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) + Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False,, True) WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) - Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0, -0.3, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 4.71F, 0, 0, 4.71F, 0, 0, 0, 0, True, False, False, False) WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) @@ -6679,9 +6680,10 @@ 'Whirlpool Animation If Core.Player.ShowBattleAnimations <> 0 Then ChangeCameraAngle(1, False, BattleScreen) - Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) + Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True,, True) WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) - Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0, -0.3, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 4.71F, 0, 0, 4.71F, 0, 0, 0, 0, True, False, False, False) WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index 2dbd82486..7786494ce 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -875,7 +875,7 @@ If ForegroundEntities.Count > 0 Then ForegroundEntities = (From f In ForegroundEntities Order By f.CameraDistance Descending).ToList() End If - Level.Draw() + Level.Draw() World.DrawWeather(Screen.Level.World.CurrentMapWeather) @@ -890,6 +890,7 @@ End If Dim ForegroundAnimationList As New List(Of AnimationQueryObject) + Dim BackgroundAnimationList As New List(Of AnimationQueryObject) If BattleQuery.Count > 0 Then Dim cIndex As Integer = 0 Dim cQuery As New List(Of QueryObject) @@ -898,7 +899,9 @@ nextIndex: Dim cQueryObject As QueryObject = BattleQuery(cIndex) If cQueryObject.QueryType = QueryObject.QueryTypes.MoveAnimation Then If CType(cQueryObject, AnimationQueryObject).DrawBeforeEntities = True Then - cQuery.Add(cQueryObject) + BackgroundAnimationList.Add(CType(cQueryObject, AnimationQueryObject)) + cIndex += 1 + GoTo nextIndex Else ForegroundAnimationList.Add(CType(cQueryObject, AnimationQueryObject)) cIndex += 1 @@ -915,19 +918,39 @@ nextIndex: End If End If + cQuery.Reverse() + If cQuery.Count > 0 Then + For Each cQueryObject As QueryObject In cQuery + cQueryObject.Draw(Me) + Next + End If + End If + If BackgroundAnimationList.Count > 0 Then + Dim cIndex As Integer = 0 + Dim cQuery As New List(Of QueryObject) +nextIndexBackground: + If BackgroundAnimationList.Count > cIndex Then + Dim cQueryObject As QueryObject = BackgroundAnimationList(cIndex) + cQuery.Add(cQueryObject) + + If cQueryObject.PassThis = True Then + cIndex += 1 + GoTo nextIndexBackground + End If + End If + cQuery.Reverse() For Each cQueryObject As QueryObject In cQuery cQueryObject.Draw(Me) Next - End If - If ForegroundAnimationList.Count > 0 Then For i = 0 To ForegroundEntities.Count - 1 ForegroundEntities(i).Render() DebugDisplay.MaxVertices += ForegroundEntities(i).VertexCount Next - + End If + If ForegroundAnimationList.Count > 0 Then Dim cIndex As Integer = 0 Dim cQuery As New List(Of QueryObject) nextIndexForeground: diff --git a/P3D/Pokemon/Attacks/Water/Whirlpool.vb b/P3D/Pokemon/Attacks/Water/Whirlpool.vb index e603e4011..f6f10666b 100644 --- a/P3D/Pokemon/Attacks/Water/Whirlpool.vb +++ b/P3D/Pokemon/Attacks/Water/Whirlpool.vb @@ -100,9 +100,10 @@ Namespace BattleSystem.Moves.Water End If End Sub Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) - Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip,, True) MoveAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) - Dim WhirlpoolEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + Dim WhirlpoolEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0, -0.3F, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) + MoveAnimation.AnimationRotate(WhirlpoolEntity, False, 4.71F, 0, 0, 4.71F, 0, 0, 0, 0, True, False, False, False) MoveAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) MoveAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) MoveAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) From 38f2f0c0f4ea708cb0d35c6aac87ff378ca13aa7 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sun, 2 Jan 2022 22:25:26 +0100 Subject: [PATCH 38/57] Made the light color more neutral --- P3D/World/SkyDome.vb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/P3D/World/SkyDome.vb b/P3D/World/SkyDome.vb index 50f5a879d..9a9a7ecf5 100644 --- a/P3D/World/SkyDome.vb +++ b/P3D/World/SkyDome.vb @@ -148,13 +148,13 @@ End If Select Case Screen.Level.DayTime Case 1 - Return New Color(48, 200, 248) + Return New Color(128, 128, 128) Case 2 - Return New Color(40, 88, 136) + Return New Color(128, 128, 128) Case 3 - Return New Color(168, 224, 248) + Return New Color(128, 128, 128) Case 4 - Return New Color(192, 152, 184) + Return New Color(128, 128, 128) End Select End If End Function From ffaf50178c4e26e299bcd265a93f0ef7e3a31463 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Tue, 4 Jan 2022 22:04:14 +0100 Subject: [PATCH 39/57] Revert "Made the light color more neutral" This reverts commit 38f2f0c0f4ea708cb0d35c6aac87ff378ca13aa7. --- P3D/World/SkyDome.vb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/P3D/World/SkyDome.vb b/P3D/World/SkyDome.vb index 9a9a7ecf5..50f5a879d 100644 --- a/P3D/World/SkyDome.vb +++ b/P3D/World/SkyDome.vb @@ -148,13 +148,13 @@ End If Select Case Screen.Level.DayTime Case 1 - Return New Color(128, 128, 128) + Return New Color(48, 200, 248) Case 2 - Return New Color(128, 128, 128) + Return New Color(40, 88, 136) Case 3 - Return New Color(128, 128, 128) + Return New Color(168, 224, 248) Case 4 - Return New Color(128, 128, 128) + Return New Color(192, 152, 184) End Select End If End Function From 35fb69b5fd38174cbfa70a56356adc0316048765 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Tue, 4 Jan 2022 22:37:26 +0100 Subject: [PATCH 40/57] Made the fog colors for outside more neutral --- P3D/World/World.vb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/P3D/World/World.vb b/P3D/World/World.vb index 39a864436..a4e984d02 100644 --- a/P3D/World/World.vb +++ b/P3D/World/World.vb @@ -584,8 +584,19 @@ endsub: Private Sub ChangeEnvironment() Select Case Me.EnvironmentType Case EnvironmentTypes.Outside + Dim _fogColor As Color + Select Case Screen.Level.DayTime + Case 1 + _fogColor = New Color(192, 192, 192) + Case 2 + _fogColor = New Color(64, 64, 64) + Case 3 + _fogColor = New Color(192, 192, 192) + Case 4 + _fogColor = New Color(64, 64, 64) + End Select Core.BackgroundColor = GetWeatherBackgroundColor(SkyDome.GetDaytimeColor(False)) - Screen.Effect.FogColor = Core.BackgroundColor.ToVector3() + Screen.Effect.FogColor = _fogColor.ToVector3() Screen.SkyDome.TextureDown = TextureManager.GetTexture("SkyDomeResource\Stars") Case EnvironmentTypes.Inside Core.BackgroundColor = New Color(57, 57, 57) From ae6141b1396ff84904014ec31669706a807e8e79 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Tue, 4 Jan 2022 22:43:22 +0100 Subject: [PATCH 41/57] Made day and morning fog color slightly darker --- P3D/World/World.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/P3D/World/World.vb b/P3D/World/World.vb index a4e984d02..4c181068f 100644 --- a/P3D/World/World.vb +++ b/P3D/World/World.vb @@ -587,11 +587,11 @@ endsub: Dim _fogColor As Color Select Case Screen.Level.DayTime Case 1 - _fogColor = New Color(192, 192, 192) + _fogColor = New Color(168, 168, 168) Case 2 _fogColor = New Color(64, 64, 64) Case 3 - _fogColor = New Color(192, 192, 192) + _fogColor = New Color(168, 168, 168) Case 4 _fogColor = New Color(64, 64, 64) End Select From 6681a75601c87b1c8c36355a6c42314bd7e70961 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 6 Jan 2022 12:31:46 +0100 Subject: [PATCH 42/57] Whirlpool animation now uses 1.5 * MathHelper.PI instead of 4.71F --- P3D/Battle/BattleSystemV2/Battle.vb | 4 ++-- P3D/Pokemon/Attacks/Water/Whirlpool.vb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 85b8faab5..25163d4ef 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -5847,7 +5847,7 @@ Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False,, True) WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0, -0.3, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) - WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 4.71F, 0, 0, 4.71F, 0, 0, 0, 0, True, False, False, False) + WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, CSng(MathHelper.Pi * 1.5), 0, 0, CSng(MathHelper.Pi * 1.5), 0, 0, 0, 0, True, False, False, False) WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) @@ -6683,7 +6683,7 @@ Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True,, True) WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0, -0.3, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) - WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 4.71F, 0, 0, 4.71F, 0, 0, 0, 0, True, False, False, False) + WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, CSng(MathHelper.Pi * 1.5), 0, 0, CSng(MathHelper.Pi * 1.5), 0, 0, 0, 0, True, False, False, False) WhirlpoolAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) WhirlpoolAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) diff --git a/P3D/Pokemon/Attacks/Water/Whirlpool.vb b/P3D/Pokemon/Attacks/Water/Whirlpool.vb index f6f10666b..88fed6eee 100644 --- a/P3D/Pokemon/Attacks/Water/Whirlpool.vb +++ b/P3D/Pokemon/Attacks/Water/Whirlpool.vb @@ -103,7 +103,7 @@ Namespace BattleSystem.Moves.Water Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip,, True) MoveAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) Dim WhirlpoolEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(0, -0.3F, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) - MoveAnimation.AnimationRotate(WhirlpoolEntity, False, 4.71F, 0, 0, 4.71F, 0, 0, 0, 0, True, False, False, False) + MoveAnimation.AnimationRotate(WhirlpoolEntity, False, CSng(MathHelper.Pi * 1.5), 0, 0, CSng(MathHelper.Pi * 1.5), 0, 0, 0, 0, True, False, False, False) MoveAnimation.AnimationRotate(WhirlpoolEntity, False, 0, 0, 0.2F, 0, 0, 10.0F, 0.0F, 0.0F, False, False, True, True) MoveAnimation.AnimationScale(WhirlpoolEntity, False, True, 1.0F, 1.0F, 1.0F, 0.025F, 0.0F, 0.0F) MoveAnimation.AnimationScale(WhirlpoolEntity, True, False, 0.0F, 0.0F, 0.0F, 0.025F, 5.0F, 0.0F) From 1a1c8f209f5839d071dd0f8c8c0ee0800eb1d60f Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Thu, 6 Jan 2022 12:32:52 +0100 Subject: [PATCH 43/57] =?UTF-8?q?Improved=20wild=20Pok=C3=A9mon=20encounte?= =?UTF-8?q?r=20rate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Caves and water get a minimum value of 15 - Grass gets a minimum value of 25 - There's an encounter multiplier of 1 by default that gets modified by various abilities If you run, the encounter multiplier is multiplied by 1.5 Then, a random number is generated from 0-255 If the random number is below the minimum value multiplied by the encounter multiplier, a wild pokémon appears --- P3D/World/PokemonEncounter.vb | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/P3D/World/PokemonEncounter.vb b/P3D/World/PokemonEncounter.vb index 28f6b9664..26e8eb4e8 100644 --- a/P3D/World/PokemonEncounter.vb +++ b/P3D/World/PokemonEncounter.vb @@ -40,22 +40,32 @@ Public Class PokemonEncounter End If If System.IO.File.Exists(GameModeManager.GetPokeFilePath(pokeFile)) = True Then ' Only try to register a wild battle if the .poke file exists: - Dim startRandomValue As Integer = 12 - Dim minRandomValue As Integer = 5 - + Dim encounterRate As Single = 1.0F + Dim minTileValue As Integer + Select Case Method + Case Spawner.EncounterMethods.Land + If Screen.Level.WildPokemonFloor = True And Screen.Level.Surfing = False Then + minTileValue = 15 + Else + minTileValue = 25 + End If + Case Spawner.EncounterMethods.Surfing + minTileValue = 15 + End Select + If Core.Player.IsRunning = True Then + encounterRate *= 1.5F + End If If Core.Player.Pokemons.Count > 0 Then Dim p As Pokemon = Core.Player.Pokemons(0) ' Arena Trap/Illuminate/No Guard/Swarm Ability: If p.Ability.Name.ToLower() = "arena trap" Or p.Ability.Name.ToLower() = "illuminate" Or p.Ability.Name.ToLower() = "no guard" Or p.Ability.Name.ToLower() = "swarm" Then - startRandomValue = 6 - minRandomValue = 3 + encounterRate *= 2.0F End If ' Intimidate/Keen Eye/Quick Feet/Stench/White Smoke Ability: If p.Ability.Name.ToLower() = "intimidate" Or p.Ability.Name.ToLower() = "keen eye" Or p.Ability.Name.ToLower() = "quick feet" Or p.Ability.Name.ToLower() = "stench" Or p.Ability.Name.ToLower() = "white smoke" Then - startRandomValue = 24 - minRandomValue = 10 + encounterRate *= 0.5F End If 'Sand Veil Ability: @@ -76,10 +86,10 @@ Public Class PokemonEncounter End If ' Determine if the wild Pokémon will be met or not: - Dim randomValue As Integer = startRandomValue - .WalkedSteps - randomValue = CInt(MathHelper.Clamp(randomValue, minRandomValue, startRandomValue)) + Dim minEncounterValue As Integer = CInt(encounterRate * minTileValue) + Dim randomValue As Integer = Core.Random.Next(0, 255) - If Core.Random.Next(0, randomValue * 2) = 0 Then + If randomValue <= minEncounterValue Then ' Don't encounter a Pokémon if the left control key is held down, for Debug or Sandbox Mode: If GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then If KeyBoardHandler.KeyDown(Keys.LeftControl) = True Then From fccb4ef5b5ea197e567ee8a6747f3f7ac4cac0fe Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Fri, 7 Jan 2022 12:29:11 +0100 Subject: [PATCH 44/57] Improved fog colors --- P3D/World/World.vb | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/P3D/World/World.vb b/P3D/World/World.vb index 4c181068f..f44a554fe 100644 --- a/P3D/World/World.vb +++ b/P3D/World/World.vb @@ -562,19 +562,19 @@ endsub: Case World.Weathers.Clear, Weathers.Sunny v = New Vector3(1) Case World.Weathers.Rain, Weathers.Thunderstorm - v = New Vector3(0.4, 0.4, 0.7) + v = New Vector3(0.7) Case World.Weathers.Snow v = New Vector3(0.8) Case World.Weathers.Underwater v = New Vector3(0.1, 0.3, 0.9) Case World.Weathers.Fog - v = New Vector3(0.7, 0.7, 0.8) + v = New Vector3(0.7) Case World.Weathers.Sandstorm v = New Vector3(0.8, 0.5, 0.2) - Case Weathers.Ash - v = New Vector3(0.5, 0.5, 0.5) - Case Weathers.Blizzard - v = New Vector3(0.6, 0.6, 0.6) + Case World.Weathers.Ash + v = New Vector3(0.5) + Case World.Weathers.Blizzard + v = New Vector3(0.6) End Select Dim colorV As Vector3 = defaultColor.ToVector3 * Screen.SkyDome.GetWeatherColorMultiplier(v) @@ -585,15 +585,22 @@ endsub: Select Case Me.EnvironmentType Case EnvironmentTypes.Outside Dim _fogColor As Color + Dim v As Single = 1.0F + Dim nightFog As Integer = 64 + Dim dayFog As Integer = 168 + Select Case CurrentMapWeather + Case World.Weathers.Clear, Weathers.Sunny + v = 1.0F + Case World.Weathers.Rain, Weathers.Thunderstorm, World.Weathers.Fog + v = 0.7F + Case World.Weathers.Snow + v = 0.8F + End Select Select Case Screen.Level.DayTime - Case 1 - _fogColor = New Color(168, 168, 168) - Case 2 - _fogColor = New Color(64, 64, 64) - Case 3 - _fogColor = New Color(168, 168, 168) - Case 4 - _fogColor = New Color(64, 64, 64) + Case 1, 3 + _fogColor = New Color(CInt(v * dayFog), CInt(v * dayFog), CInt(v * dayFog)) + Case 2, 4 + _fogColor = New Color(CInt(v * nightFog), CInt(v * nightFog), CInt(v * nightFog)) End Select Core.BackgroundColor = GetWeatherBackgroundColor(SkyDome.GetDaytimeColor(False)) Screen.Effect.FogColor = _fogColor.ToVector3() From e892977d7075809cf394bddc34ab3f34fd52e508 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Fri, 7 Jan 2022 14:25:57 +0100 Subject: [PATCH 45/57] Added Bind animation & Fixed scaling animation anchor functionality --- P3D/Battle/BattleAnimations/BAEntityScale.vb | 8 ++++---- .../QueryObjects/AnimationQueryObject.vb | 2 +- .../Sounds/Battle/Attacks/Normal/Bind.wav | Bin 0 -> 243334 bytes P3D/P3D.vbproj | 3 +++ P3D/Pokemon/Attacks/Normal/Bind.vb | 9 +++++++++ 5 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 P3D/Content/Sounds/Battle/Attacks/Normal/Bind.wav diff --git a/P3D/Battle/BattleAnimations/BAEntityScale.vb b/P3D/Battle/BattleAnimations/BAEntityScale.vb index a99c261dd..d48dc96a0 100644 --- a/P3D/Battle/BattleAnimations/BAEntityScale.vb +++ b/P3D/Battle/BattleAnimations/BAEntityScale.vb @@ -79,22 +79,22 @@ 'Bottom If Anchors.Contains("1") = True Then Dim diffY As Single = saveScale.Y - TargetEntity.Scale.Y - Me.Position.Y -= diffY / 2 + TargetEntity.Position.Y -= diffY / 2 End If 'Top If Anchors.Contains("2") = True Then Dim diffY As Single = saveScale.Y - TargetEntity.Scale.Y - Me.Position.Y += diffY / 2 + TargetEntity.Position.Y += diffY / 2 End If 'Left If Anchors.Contains("3") = True Then Dim diffX As Single = saveScale.X - TargetEntity.Scale.X - Me.Position.X -= diffX / 2 + TargetEntity.Position.X -= diffX / 2 End If 'Right If Anchors.Contains("4") = True Then Dim diffX As Single = saveScale.X - TargetEntity.Scale.X - Me.Position.X += diffX / 2 + TargetEntity.Position.X += diffX / 2 End If If Me.EndSize = TargetEntity.Scale Then diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index b40f6f933..bd7e555cd 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -220,7 +220,7 @@ End If End Sub - Public Sub AnimationScale(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "1") + Public Sub AnimationScale(ByVal Entity As Entity, ByVal RemoveEntityAfter As Boolean, ByVal Grow As Boolean, ByVal EndSizeX As Single, ByVal EndSizeY As Single, ByVal EndSizeZ As Single, ByVal SizeSpeed As Single, ByVal startDelay As Single, ByVal endDelay As Single, Optional ByVal Anchors As String = "") Dim ScaleEntity As Entity Dim ScaleModel As Entity = Nothing If Entity Is Nothing Then diff --git a/P3D/Content/Sounds/Battle/Attacks/Normal/Bind.wav b/P3D/Content/Sounds/Battle/Attacks/Normal/Bind.wav new file mode 100644 index 0000000000000000000000000000000000000000..9749a0da63f4f007be2da484d66e467028928840 GIT binary patch literal 243334 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%0D0G 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 TQq=T^Z(3Q|ef<aDpY#6<GKo;1 literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 35f36949b..d9e55dfc1 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14683,6 +14683,9 @@ <Content Include="Content\Sounds\Battle\Attacks\Grass\Absorb.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Attacks\Normal\Bind.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Attacks\Normal\Pound.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/P3D/Pokemon/Attacks/Normal/Bind.vb b/P3D/Pokemon/Attacks/Normal/Bind.vb index 4a4e36a82..4116145e3 100644 --- a/P3D/Pokemon/Attacks/Normal/Bind.vb +++ b/P3D/Pokemon/Attacks/Normal/Bind.vb @@ -87,6 +87,15 @@ Namespace BattleSystem.Moves.Normal End If End Sub + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 0.0F, 0) + MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 0, 0) + MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 2, 0) + MoveAnimation.AnimationScale(Nothing, False, False, 1.0F, 0.75F, 1.0F, 0.02F, 4, 0, "1") + MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 6, 1, "1") + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file From 047d52832d25f88cf5a2f7b60a6c8d5593a4afec Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Fri, 7 Jan 2022 14:29:17 +0100 Subject: [PATCH 46/57] Fixed errors in drawing the chat screen, made categorie tabs dynamically scaleable --- P3D/Network/ChatScreen.vb | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/P3D/Network/ChatScreen.vb b/P3D/Network/ChatScreen.vb index 4863086d3..6bc99999f 100644 --- a/P3D/Network/ChatScreen.vb +++ b/P3D/Network/ChatScreen.vb @@ -591,7 +591,7 @@ Public Class ChatScreen For Each l As String In lineArr Canvas.DrawRectangle(New Rectangle(100, (Core.windowSize.Height - 82) - offset - 64, Core.windowSize.Width - 200, 32), backC) - Core.SpriteBatch.DrawString(FontManager.ChatFont, l, New Vector2(100, (Core.windowSize.Height - 50 - 32) - offset - 64), c, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) + Core.SpriteBatch.DrawString(FontManager.ChatFont, l, New Vector2(100 + 8, (Core.windowSize.Height - 50 - 32) - offset - 64), c, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) offset += 32 items += 1 Next @@ -675,21 +675,26 @@ Public Class ChatScreen Private Sub DrawChatTabs() Dim p = MouseHandler.MousePosition + Dim globalText As String = "Global" + Dim globalTextWidth As Integer = CInt(FontManager.MainFont.MeasureString(globalText).X) + Dim commandsText As String = "Commands" + Dim commandsTextWidth As Integer = CInt(FontManager.MainFont.MeasureString(commandsText).X) + 'First, draw global: - DrawChatTab(100, "global", HasNewGlobalMessages, "Global", ChatState = ChatStates.Global) - If p.X >= 100 And p.X < 220 Then + DrawChatTab(100, "global", HasNewGlobalMessages, globalText, ChatState = ChatStates.Global) + If p.X >= 100 And p.X < 100 + 48 + globalTextWidth Then canClickOnTab = True canClickOnTabType = ChatStates.Global canClickOnTabText = "Global" End If 'Then, if active, draw the Commands tab: - Dim x As Integer = 120 + Dim x As Integer = CInt(48 + globalTextWidth) If HasCommandChat = True Then - DrawChatTab(x + 100, "command", False, "Commands", ChatState = ChatStates.Command) - x += 120 - If p.X >= 220 And p.X < 340 Then + DrawChatTab(x + 100, "command", False, commandsText, ChatState = ChatStates.Command) + x += CInt(48 + commandsTextWidth) + If p.X >= CInt(100 + 48 + globalTextWidth) And p.X < CInt(100 + 48 + globalTextWidth + 48 + commandsTextWidth) Then canClickOnTab = True canClickOnTabType = ChatStates.Command canClickOnTabText = "Commands" @@ -752,7 +757,7 @@ Public Class ChatScreen ''' </summary> Private Shared Function DrawChatTab(ByVal xPosition As Integer, ByVal textureType As String, ByVal HasNewMessages As Boolean, ByVal Text As String, ByVal IsActive As Boolean) As Integer Dim drawHeight As Integer = 32 - Dim drawWidth As Integer = 120 + Dim drawWidth As Integer = CInt(48 + FontManager.MainFont.MeasureString(Text).X) If IsActive = False Then drawHeight = 24 @@ -780,7 +785,7 @@ Public Class ChatScreen Core.SpriteBatch.Draw(texture, New Rectangle(xPosition, Core.windowSize.Height - 50 - drawHeight - 12, 24, 24), New Rectangle(48, 0, 24, 24), Color.White) End If - Core.SpriteBatch.DrawString(FontManager.MainFont, Text, New Vector2(xPosition + 32, CInt(Core.windowSize.Height - 50 + 4)), Color.White, 0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0F) + Core.SpriteBatch.DrawString(FontManager.MainFont, Text, New Vector2(xPosition + 24 + 12, CInt(Core.windowSize.Height - 50 + drawHeight / 2 - FontManager.MainFont.MeasureString(Text).Y / 2)), Color.White, 0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0F) Return drawWidth End Function @@ -881,7 +886,7 @@ Public Class ChatScreen For Each l As String In lineArr Canvas.DrawRectangle(New Rectangle(100, (Core.windowSize.Height - 82) - offset - 64, Core.windowSize.Width - 200, 32), New Color(0, 0, 0, opacity)) - Core.SpriteBatch.DrawString(FontManager.ChatFont, l, New Vector2(100, (Core.windowSize.Height - 50 - 32) - offset - 64), New Color(c.R, c.G, c.B, CInt(opacity * 1.7)), 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) + Core.SpriteBatch.DrawString(FontManager.ChatFont, l, New Vector2(100 + 8, (Core.windowSize.Height - 50 - 32) - offset - 64), New Color(c.R, c.G, c.B, CInt(opacity * 1.7)), 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) offset += 32 Next End If From 65887946d55a0c9a3f627be0bcedd652c9f82bf8 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Fri, 7 Jan 2022 16:30:03 +0100 Subject: [PATCH 47/57] Attract, Bind, Wrap, Infatuated Animations Added animation for attacks Attract & Bind, updated animation of attacks Wrap, added animation for status Infatuated --- P3D/Battle/BattleSystemV2/Battle.vb | 41 +++++++++++++++++- .../Sounds/Battle/Attacks/Normal/Attract.wav | Bin 0 -> 277062 bytes .../Textures/Battle/Normal/Attract.png | Bin 0 -> 306 bytes P3D/Content/Textures/Battle/Normal/Bind.png | Bin 0 -> 1022 bytes P3D/P3D.vbproj | 9 ++++ P3D/Pokemon/Attacks/Normal/Attract.vb | 28 ++++++++++++ P3D/Pokemon/Attacks/Normal/Bind.vb | 18 ++++++-- P3D/Pokemon/Attacks/Normal/Wrap.vb | 9 +++- 8 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 P3D/Content/Sounds/Battle/Attacks/Normal/Attract.wav create mode 100644 P3D/Content/Textures/Battle/Normal/Attract.png create mode 100644 P3D/Content/Textures/Battle/Normal/Bind.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 25163d4ef..ec7dbb70c 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1523,6 +1523,19 @@ If op.HP > 0 And op.Status <> Pokemon.StatusProblems.Fainted Then If p.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) = True Then If Core.Random.Next(0, 2) = 0 Then + 'Infatuated animation + If Core.Player.ShowBattleAnimations <> 0 Then + Me.ChangeCameraAngle(1, own, BattleScreen) + Dim HeartAnimation = New AnimationQueryObject(pNPC, Not own) + For i = 0 To 6 + Dim HeartEntity = HeartAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Normal\Attract"), New Vector3(0.25F), 1.0F, CSng(i * 0.2)) + Dim zPos As Single = CSng(Random.Next(-2, 2) * 0.2) + HeartAnimation.AnimationMove(HeartEntity, False, 0.0, 0.25, zPos, 0.01, False, False, CSng(i * 0.2), 0.0) + HeartAnimation.AnimationFade(HeartEntity, True, 0.02, False, 0.0, CSng(1 + i * 0.2), 0.0) + i += 1 + Next + BattleScreen.BattleQuery.Add(HeartAnimation) + End If BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is in love with " & op.GetDisplayName() & "!")) Exit Sub End If @@ -5822,9 +5835,15 @@ WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + WrapAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + WrapAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) WrapAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) - WrapAnimation.AnimationScale(WrapEntity, True, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 1) + WrapAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) + WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + WrapAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) + WrapAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + WrapAnimation.AnimationFade(WrapEntity, True, 0.03, False, 0.0, 11, 0) BattleScreen.BattleQuery.Add(WrapAnimation) End If ReduceHP(multiHP, True, False, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by Wrap!", "wrap") @@ -5881,6 +5900,26 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + 'Bind Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, True, BattleScreen) + Dim BindAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) + BindAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 5.0F, 0) + Dim WrapEntity = BindAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) + BindAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 32, 64, 32), ""), 1, 1) + BindAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 64, 64, 32), ""), 2, 1) + BindAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 96, 64, 32), ""), 3, 2) + BindAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) + BindAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + BindAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) + BindAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + BindAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) + BindAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + BindAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) + BindAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + BindAnimation.AnimationFade(WrapEntity, True, 0.03, False, 0.0, 11, 0) + BattleScreen.BattleQuery.Add(BindAnimation) + End If ReduceHP(multiHP, True, False, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by Bind!", "bind") End If End If diff --git a/P3D/Content/Sounds/Battle/Attacks/Normal/Attract.wav b/P3D/Content/Sounds/Battle/Attacks/Normal/Attract.wav new file mode 100644 index 0000000000000000000000000000000000000000..6ab97427031e5c502f77e473d2e22c8c08b289e2 GIT binary patch literal 277062 zcmeF42|QHY|HrR3^(bvmTCAnrPS(OBAqj;n2{FbJW@IeI!?Zl*sgyQULM4=a2_dvn zAv;;8QekX88DyC8zeAH`yF)*J#+~~z_nz<hp6@xI_c`ZU>U&2+Sy53&Y8Id)r>$US zW6!k+000JH2CyR>02al}0A>M;08?XoV~^Y!fY~DG$Bh>F7%Ktjl>0o#+7I0BMhh*h zVP4}S0J9z+Kd7x~;Y{&`8W;8(On?^FgImKES_r_bX`wZCUs^a%wfhI5X>uL&mq0%z z*T|>dXrPmxzhvsEn>-_?g)_x>@{D}yjf57~Q%~LG8ZpdzV&;Pu&hY(Xd~-qz>+$sj zxBgwM_cp@ENCcvm(sqm#3$7cP04=0Pjs(|^MgV3#8lm4)PYY*?@9*h#dPbpz_4Fk4 z`&7fMe;><{BGJNmy52t`@xSNLSO)$0Jv~m}D9}l3EStWR#;=?f&J^GA_c(nc(87B9 zQW~FfsEo(g%k*mvl`DLYplxlyTxsJ)i#JrZw8Z@X@|{~hd5&)^(2vP8>d8M6=v2S4 zOnx<!YlKkQPOec;{?S0?O7WZgY9`MJVXptXxq!;{e>Vd9j0}}4d@rDF{^^CQY3<}Y zZmxiKOums%?h!$w+UGU7m5gt6P&kaQ2l{9Yg%ibxKGcp+1r%1}>w$h+!>pjqB@|BZ z{_A52g%vdF^zQ|;f;PucIKlf5-ha?mQ@<CKb=B`ZeXpQ!g7;tF`hdb}`mUsb%3)Rm zc??&A!U^7gee|HP8jkaHv%{>Q%{UZJ@cx7MAGFof?*(OD^?Og>D=3`c{nxiXps<?0 zD`}u|nAJcY!<C?Lg7;q^Jt(Y(<2>E$Fe_*?4uuoE|KR-xZ8i0KL0MP*-qZIA3MY8~ z^{o#mtmt(mfsgElUoZif089WT026=-zyx3dFaekVOkh+3v^?v5>`#=3ThhXLsy$PG zvdu0ntS8&pr`mX6))O;hv~Y&+ALE-7T3C;-C%84tdScc9Eu5#?{bRB{S^jrD=Y6v2 znvCOtSx?NY(88JGJ29i8&t7O@O`ilNP8H00Vp!9{8NPpvZ%$}oJ-(jc*1wDONY9gp z>-ILn&(xo|RX_{ti5nGt_5`z@n0cjzGsSmeMn#{!(88KN2~3<SnDxZ4riJr#y?^|! z=deS4Mm+qv2ID6VvmQS~C=qDk46kb_M2GjGh4t`J;F^&LKxI5q47hGE0jONzd&FRN zBUxasBheXO9aOgC>t$kE)Akhj|E)K@JY)WUONsXAFjv}{L2Ut*E!23hUmpReTq%Aq zGw1|huFzT0>Is!Ct#PNjKUA*py@0lrLN8n=<8v;cJf8!8mI>`M2bJruezf;Qe=UAx zGF+Mdl+&(gI5t1qX^%>uEq-P)+%<hFr%lyxY<{)V7L`7|e`PXMnLd@%u4*VYzuIVz zN`EbWWiniu{*=?MXgD@M+i8zVpDli7GTb$NDyL1=aBP0H(-xIJy?<pgRGB`N)2?bL zHow|vk4k?neq}OTnf{d1u4p(mKig@KN}nx$W-{D0eJZC-)o^TnwbK@rKD~csGE|v9 zmD8?jC^o;^Xpc&NEq-M(T$%oq)2?VZHb2{Gk4m2{er7V<HGL|lP1SI0eznsUl|H?H zWinKmK9$q1YA80p+GvkTe=UAxGF+Mdl+&(gI5t1qX^%>uEq-P)+%<hFr%lyxY<{)V z7L`7|e`PXMnckF-`tWMl0VV(wfC<0^U;;1!m;g)wCIAx{k^rsG|DI~k0H2trs6+3C zR^HGf!=AqqpoR6XZQ(L)1Yp**@fxc)Eu1O7W9<iSccX<C)-bQ}5rA2bj~~?5v~Zqk z_m9c;)bZc-4DiXOYch@pW<4>pLJMb#@5GFXK6{~sHGLA8I8`v~iD69(XZZdxzB!?V z_4s;%TmLTB6Z6#asoM+uy!DBjJ6c#z+^FcYCz$ob%quONDZUdkD*Eh&7S{AhVB%E4 ztS5#wEu5$8{o{8%ksIps!{KM%kDoZqdi)HbM4*K;ysn`T9o~l)*271EYepgfmGMY1 z;JU#CpmK%p5rf%{WP!PkL}z?;P}z>Jmx*aj+Y`e7x8C&f{PF)SCEBCITxn+pwFOkR zP~*XVeFUI#rTD?jpc8<(LT5#*Cseky#+~l|P`SeQ0@_vzy>Ok3&wUu``4mIhCga#A z^O%NWIGk-V>ln+}hST}8eJpY5t<BFoM!Kdq-DA-+5+7>aSmM%S8!C^H&h)68R!t-E z`MHkPxb*1%Gmqh}=~4GsG!4h+XZu*<(p#IKd5m;TZ@R~#XCyw<y0OHi$2L?RBc16{ zH?5jR;`4JIt#Rqm|7RY<UDKoPv1l5O&(HR;#HF`3Kl2#rn%;DeMbAilsC8qBOOI`+ zJVrXxqi$L?jl}2YI$Gn>qyNu5hP$Rm-DA--9G{=<V~I;|ZGPr4(lx#59*drl_)zP{ z5|<v^P<f1WrbpehY8r{p&vmrMrAPmtc?@?=kGjXAX*fPV+s6`@-rD@kW29?((>)eF zBk`fujU_HUwxRME=}eEhY1K3mpP%b!jZ2UIKl2#wn%;B|`G9WN2orz_zyx3dFaekV zOaLYT6MzXoB0$Tt&Y?a(9rhbcfELbE?V0j})&BolXkq>TJJPA&JIs1w=8zW7@cm<a zb3zO2@%03^hFMR{8lZ*qRJ(snwkNCquIHRjHeHi(JTU8tnH5?%Q+y|8RP@;kEv)I2 zz{IJ7Sx*dWS~$b^kMYe3Ev(1a6WscDv7VSGvrpY#;AhHD+}zQ^dg4Y!pFP2>CuUx0 z;Y{(Jm{HMZFSM|xPXZIC3T8bqtZCsqUGE>i>#5^VpOFqf*MI!PVb<ek2qgk7oZ)p1 zh3N1;w6GpN3S2W10jP{eiUHRRCIFQye2*B+ZX^rLbtF3DtAomRe7#IeYucWI{=fC6 zmuIa1Zz<6p9p*|qGpH?~vV|HC_Uj`6l`F*$W(J)A%oRE-T0Nn%r8Vw!_lL?Az8BE8 zQs{;2WPIksaL=ds)jk==KAFe#E5DJ-lUc`j$2O8~YTbDIpojKU7Nec%LF;%mjK+vk zKi)p*r9I3F+Dt;>1h1<;mQYwhqfY-`Fe_+t422WC|KR-xZ8i0KL0MP*-qZIA3MY8~ z^{o#mtfucu8mJs*HIT<}B`BQW{ntki3ajBbPd7Wv3fhcA;RNqLc>h6LP5oX_)>Xgv z^u2<@3EqEw>jMg_>AR8!Du-DO<S|?c3MY8~_0faEYB<i*%?`7IHseq@!TS&1f6!J_ zzZaBs)$cuhub^;(_g~-ofWnI2RuZI#cEe6E0hj<x044wvfC<0^U;;1!n7|+c^!&{8 ziFs-~^j=`r&{>VwlNQ$F?Q6QXhgna|3ZR8E#dl&xMW4OU!kRt_Oq?p1^~A8Ih4WOq ze@wQgtpBcOo=-MilW{yS>xr2aS~ydDCuUUi*$XYK>65_3se)Ng3~O3A!}pKz%?T~6 z$JZ0w`ggIOn5VQ)-Cp45%TL_g(ZYJ-Mn#`J!K^1{UTNV>@tv4a(PuBTu%=G}6Q>Gh zJu$3l;XGaMAHVAf<WQfN4nO06{KR3_<7WsZ0xg{3bq$5+@IJJ#9zF_OGZF!)j7N$A z*9|5Bl`DLY7|d=Y3(R#SI^(N@%65FcOiXLqo{0Xx^`@8St^aQ+(H<S<N;@;CEugZ6 z8V~mCBLI~v#Sdl%odC=gIxAW|p|Yhl?sWHu$`!sB(6&<Oh3jN|<^z;xRlv{npnc|` za-A-0q41!cGX1rH!fCp!nbBq!3aim#OqY6?6||X#!U^7geJr7{f<~SGy<k?*<`@bm zc>lrs587(#_kyyn`n{*`6%<bJ{_9&GP*_dhl{8Q}%xWNy;Yv_A!TYa|9u!u?ah`5= zm=&}chr$WofAIc;wwn6ApscHY@9BF5g%iC0`ql>&R?~MS4O9-Z8pva~5)@AG{_CR$ zh1GDJr<)yS1#QNmaDw+Ay#JuBrhYFd>#E;-`d&fd1n<AT^#O&|^j%2<mBXwC@))iJ zg%iC0`shJnH5_Mpx5I3Po?(~^%w=c-LtEkX0&^Lfz|dBBy}(?CCNQ)WUN110p$QCa zh1UzrWoQCJTjBKra~Ybz&{lZ8z+8qVFtin3FEE#(2@Gw8*9**LXaYl9;q?M@8JfV* zR(QR@T!tnvv=v@2FqfeT3~hzi3(RF`0z+Hj^#XGln!wOjc)h?}h9)qy6<#kem!Sy^ zZH3p%KrS$kJ|3fS7)XsiOE3e|+R+$L>gjX#2dWy4!$5EPEWr%m{XkvW@LCvsEl^p} z^Ley&K&hu^{ZwtEaiIFq^BHC^`aJ>O4}GhIp7#M&8@wOj{Q$28DuL10Lcb^dUX6B7 zfWJS$-yf)JgnoBHzcQ-Uk<R_z^m{dueo7tvD(_bYGZ_7QB)k^-R!RS=q2DWbKfwEe zy1L=DF#1}cvZCknXzPGdPtW?P+D79*^`qxA%wY6;0=yskRtY`t1FAN7KTPlaFdgR~ z);y2^^<F?v=Ya|bm*`0=Rm)(N11(fPdO8nOIIu)dI;mO)DjZy*`q9&Qu*!iJdeTbO zGEm{b64i&E&I1(=F42=#s+Pej2U@6p^mHDmaA1j^bW*hpR5-Xq^`ocrV3h+c^rV%l zWuU@=C8`fSod+r$T%sqfR4s#54zy7H=;=IA;lL6->7;5IsBmzJ>PJuK!72w@=t(P8 z%Rq$#OH?0vIuBGhxI|A{sagiB9B85X(bIXL!ht1v(n-}aP~qSb)sLRegH;Z+(34iG zmVpWfmZ(1TbRMX1aEYF@Qnd_LInYA&qo?ygg#%0Uq?4*;pu)i=svkX_2df-tp(m|W zEdvz}EKz;v={!*3;1WG)rD_?ha-fCkM^ER03I~?xNhejyK!t-#R6lw;4^}zQG8U}^ zBMdB!CEiqOGf?f|(p1timaz_2JkT<hm{Y0EK(&KQQ%TEM#yVK>K+9NSPNg;j)ebIA zB`sqa>tMwLEn|r}mD&tcJGeBJw2Wn}gB1_7j3wq&YBNyn;L=pmGM2FpRy@!$mYDw^ zZRXaG?fAwr@-eokQ>WF)>c6o}9VKHMDXf2F0%M~(by|(A9$x=bXC}usQh5GHCNMUt zQ>WF)>f!xAb!KvGBb`k1ABms%Lu1*<$Hb3lVtX7}y~eVM9nHk|2J0W0z{JnU#P&F{ zdU*X$>}*VYZ}9w&Okm<?WMX?9Sv|b}Cw4X_zPH~!|9cy!))BRI<YQ{7p?$O?tB+br zd&H^L0@gn=fvGi{w2yXV_4L2~sl-O(K&hwtPM0&xWbjOn#$<2{`nHV51Ku}76PnDc zg3$E)kNHbRK7N0XlRM(bH2P{Mw}Rh4I+)2|rlT<#+=9L>qw%2B(>H;^>R=|cGa1~1 zzAf+?89cu*6WW;!ZZSD6H(GwrVYX=W<M;G5b)t+;#B9;jQS*C7IvSJT)63L}G8zv` z{nSzOdqxT~8O(7sCWBkhw`DXQ@V*(E5Ph$T!Rm&l&~F{wg1#;N%7?$2Y6N8d8{hGi zdGup^JxsmUqY;^UipDqM(Rfhm$JfKuYYj6QJZGaZ8Qg-tEu-;(_s!6R=zCQRRyQ<- ze(T^C^lj-^KKvDZ6Bw*+coO|JgIi4v%lofmKR6eRevCajeY6~%P@e~Vs2#fsD4fO~ zojzK^j7FbFD2ymRqer4|4=9}Io51MmU`D@(5xn2te}&i5?^#PjMfry?eU87GpdHhP z$k0lmP#U`B^s&N>MxSdaj3_>%N1|^JD4gh<!075=M!$y<yx;yIz-#IEtfkSTOpM2- z_Wz%wbRM+h|7UcQr&lPHCeLX9e?|f`8l5{7MiigXBhj}96iyROKvQm?1~3Bvgm}3G zdAY>EcL07(Ljt>%HMK5)x|P)w)s^>X?BD^f_n@tiHfR)=rlPJCmz=%5F~W*V743+` za48{CT*6%PXlrXE!rl^%0^7-HXe|WW>~cU^A}lPqRE;qXrpBOMNlk+Zv}>XrP^R{F zU<gVda;kGd8yFHa*aOO18Y(lvvXD4fC$F(%Hh3*8C=9MdOH&c9T5|?Kd4~waVYa$~ zmfY^`;FTT#F!Yf30BFDpKms=483k|wnt&pp3rK-ia)3Q}7y}5fo(oU~>m5Nq40x>s zo+-Y<;FmmTw+0U+=w}aD_C^5!tvw1tU>B=<yVwOdfbN!{g9Z3b31tk1aR5xgbFZr~ zcv{x$ss=isz&MonreG{ewYnyFq6}Ra(2`eI120zg`f7spl)$E-zuot7g8s@{lyFOX zUHT;SRoa7AEe&}U@H7kj0zql%DQJLKbHJ}&RC0Ti<pBn>6tHY*V{DETIAn`72Yc>$ z+w)$yMB#{~833rN0-M45xd0=>lHNfv01RMPs{jgc@Cq<tVEu7@h+*S*AMozLAVj%G z0Bqow9fNT1^`GGN1$WEd@le{{1;6ruKf22SV8bHnS<Vz~g5=s`fwo6uEYP-G@|vPt zI+iF?v=gRx*iwQbQbHnJ!a`Ca-~~ASAgo&q{bRc|gBpK^?yZ^q*Az$aHHTs5cVCc0 zzYYeDejN<!f7UUBff|E>f5wm4LbrOO0l-f1OwrPN2FW!6^LrH-$*Y3Ptr=kMEdi#- zD1JQ^z(2tJxpU{vn>&Bry!nfn{$N_XY~lR*3zw}}x^&snr7ITC?|pqg^%Z`7XIQ|* zw19cRB4*}Ae=;*O|4Dgc{<E*iVkiN69s`T#0=Ix$Ga1$ZGZr(<T+Gl@1&aKm=Q)Ec zILg@!y)SUUl-EpvVaBZ4a~S8&`-2Ib{DGAWz>JyH%0&RfEQXmgX3dz*IA`wcne#=! z%EdEhtzIHDTW+uM(lv*V3(xuU((Rb-+-sL<JTVd3Vs|26o^jn}%`fl&LtsQ%?!=y4 zzvGIQslwAhd$HvO`#vDQ#{KiG(4nSPal_TSryh7cFZxIbihoi3sZHC=@w9hvLPp8w zc5x*gb0>G7ki^W=+K$D*j2Yl)XZ4PWan5Yf-XW|OS~3e9!QnMaXA2*{^e1HmPc-ts zh^#evZ+GIdyyh|lX3Kx;=1>N}xL)*W0XT@j<)#Yz#O#qDehgvw5p3umLQgp`e`ar= zivd~SYfjXc&94GEjS4s)t#%E{+*z9=Ux@a6ciFqb{CM}ifVi66R`>3Ar`mmvxNYX} z{Tn;$YC^@fg&)F+D|&$Xg`H2Bn)ttTYvy0bLLpIZk2?T^rAt3;Jf;kwR5#vOUdHm> zx3&9y4<I3+Tray<CW>u6(g@QkE~tB8KEQ2n-9cJGdXY;yM2yP6UTB3+o%0N-9#<fG zOqsv1Ec$ecV@leIsB^wge0Za4M6SLUKq-}Hu^G068kQzW5bem3e+vb?xwCf7+P@Zi z2NrW|CN*<b9Vy`0x}r0TFEdkcW~K7KzzJpP6U{OauKG{2AHQN;*@U+ji)R1(w7ahB z8&TaV+#M?;lD&0qnDkQCaQ!RiF4Y$oZfp~IiLfrOTNZOZ+{G;)O`0u`a?IREVACZZ zcD56O-f}C{BtqsLMtmSUwXAsW-ra0ejFpIf{WqJ5_)-(GBS-E^1SWo4$W-JkzPCO+ z(`_Hh%I+F(c*B!!T&wF#6A#z*PbC6u4O;fpuke!(x357ds;MSLTBa=DP_Lcox)foB z3A>Z4M2Oev^y&d5_s5sWgxH76couVddgS5Dak0AZ*uF67<Ga$g5~A8~U%CG2{Wigy z9_HC!y7s*HxtF!&DEg~EF0j%km#oPw>$1u?1Hpa3u<F08ZcYp_*T*|;_Y5VZ@dL!g zdC_NPI536QacV|nxg2(mcYLpJ>r~d%BzpeM{b!C<T~2PEoiFso@$0UB_*^T#DLnH@ ze48HL^DtjUm?KFbsOx^E?zaqCJC65@d}j9m{sD2G#RA2zHL^I-Cq#5ud=%r`bef5G zzkZ6G^?0r0#-=+b@&&jquHE@*uIa<SE^I4g5zRcjt)b&ilDX)U=UbLA2>yMkLSc3U z|It~;*C=g7tj=jaPOz_i^4Ei{m1-eIsp~f7*dAUm>%mgSSL_e=>}T?q|98n+yHoA% z;^lKrs{Or`#hv{*zR8VnwFl_Q`<nVH&2rtmO|Gw$ZkXO)Cy>N7SBhP8!^sbq{ad>Y zT#b+5)t<lln-scoJy0!st)@$>2PkFvEc7%a;-kG4le6oQVqHPD`HO9yJ72#L(}msd zip{~^A)|smJv@qf{>n^#y{@@Dqv}zeWL(L7a{M(BVHG`#MeMre2z9H3CgN7Dqk>B7 z4_wdAM*1#{yYf$f6Yd2+htUns<t&@BnhSHXK6c2ya*OIt*mvi#2e54A;mnRB>baiX zSpE7M-o2L<j>aR+jEyU;<0GuB))IN2KS!)+amy@j*oy0}?KXK;FRSOwZ<CfF5LhS@ zKKuGI-KX99Pr56viIu68_W%x#*h0fY!srEjEZesDJ!f38mV9_G>+#ulPe`m5+ZMvV zM(N&lr4yQLD;^~6&MeR5OwQ#@x{SH7?PfYY{gqoR2Oed9uljL`(V4a$AlG$HdX%n@ zgQLj(f^6&EJbuQJ-d#9sQd*e5`scD1Y&}+`vq3Y2WGcP$L@kr$^Q0tJaiC#8UwqC2 zTwGBcyXT$qy6zqzPGB=8>*j$L%$dt-cQ5;S#s|nXqh06CEBJI&`40(hj>XUZ&1hL3 ziTU6e*7>R{_Vn(6H(2q8niuEgD_M6pv>MgR#Hksnlp$S3gtHS4s@X(7^o#$)RVD1j z?MNGRTl1?pLIsI@_BL6#RqssU=K7*8>zoHTdnd9^`|YeZhjLzq=DcrqN^!YSyM(PK zE1>H&Zhyn|Diran$WDj&5+3Fn&o}K&dr6rqJ_}(MXGyvsR^P-}`S2fz@mTGR$y|X5 zSlF=Pt4XIIxEYDr=N{(HJN|F!X%9Eu4B0ztYEiqET)cWTY_3+une7_emUP|?+HG-F z?f%X$yXG}t4(Q4MKn||i=ces?`bK0T=lm45kJ_lv6yEgZOihk8bIL1x&#CQ8bi3?( zoxHq&w5q{QCdxir&F{)dM}FC`LMcaL%lz3TANAc!jC>K1F8au7e=|;ebqK*IMx=n? z<Nx7vI&=HS_eN%7@*9vvKHC3rTUH>%QYs7M*;6$en56lVI{CV`;*jeSAF{|);VfeB za5lPD2l+?hYNb_V3)Y4N6Km8MRbJJvEG7_FycV!hRSiQP{j*p}C5N<C_C|V}NA_#$ z6m&h-H?A`%5xuic*ALa~qq^cm`0nN_|1KzE3c%QLdKK|UBsgm)gqS)P=i^(*=TFt? zljj|MqwQLD>O%IblugBnh4-p!b@x9ZSVa}_m+4~<t3}=}z31w!>3d1DnO9uWCn@N2 z)Ms|YjUE7do6P9cYPqR}QK?>U<#j?F6N|e^QZxRP*Mp+jRl*gAqw3X?jntM(osv8% zs$-One0Wqgr;xZ{vrMF`VRmW=&vMQMZ%LYs4?k+n<PBpLE<b$lrKwF~Q;}=PybgWR z8lq6D(cVTwM3;_uK0&79Qr(%eB&DX3s2EpvTnAH|Y&Q>a;pd`oypgVrr{>nxc{~=r zmG-xMK6r-o0G8DqX`Te_wILD@l?^Wy5S?}h23H`f1X$O5F#EXQTo9j=kX&x(e5yV6 z^FobUx4hsRyvPfL&Gm1S9I(M{+X%@gkk2pgzAU#kY<^CI#|spza0`k@{zf^g)kz>) zI^lsfdz{Vr<f^6~;B+F1yFjyUxqVC6H$Tg7ZzUw6LV`ZYa`Iglb&iZ?4scUsO06k; z+ZgV4r_nF6jW4dz5qpOalNL=f$f$Q+xH^+P{G}`Vnpb?Qvt7!3J^kX}bcmO}de+9- z=^bg?=6}cFQSGPYKFI|=z}~J@rMSH0s*3cRv7ULUJwRQ$VxW@-@yR6vFC)JzHcrR* zkUr8+Y7RdX%Sa;k0EN;eUFlEPhQtI%g|*aQYcEw4u}KMX4eqFtKfr375^TTW4_^gT zT#4&LzwNI%$qPlcmh=G1hl<kiJ;08{@Y;ikAvFb?T-3E<JUD#yFP*&DxWPW;5jjd# zPe1Y{Y5Bb_5)<}XhT&l)jjR`|-<BO+@hScW!~GUhty<RbOjd*LXU&)h2cvpdyrY9a z_;Q_kJ-<sx)1(R`%)je1wsJg`_v`%DuBYC;&s(Rnep5?aGNXKY$R`JJ6U4h(an5^5 z56_!rY}+FeeZ5|z#pb9)#Pg?F?bxcU9^k__bf{O2Y{Q&ode#e(En7-?S>hA-mukA( zTx-U#UfL(=sOj*a2lyu<Ab_wa5>HZE_eN4ONnG-?wLnaBr79Nb642byoI%pVec=rJ z>qXps6T|GAJl2^>SL!P?&vE3v({1uJwz{62*rco;BEl4CTzb-I@3RcVY3|tA1@?u> zS;?-_toO@v_l9=}e@?t7oRj`WWPPz=q%Sx}CPr5O*|u0o$*^|_=9QRkDLWHz33;t- zP69DW2Pu3r#4wAqz6S9T8))d}9JP0g_{z>C#nW^D^yTH{4D4DfmRf<m6A;@2yhrEt z0Ac~{J|zoPz2d}q@*{40iIl`y>8>JP%MiiF_@6H+jw7)r2(6PgDpn+fUpQW9;B{U# zNjAQ&-ptClO0}cLLArAZ4jj>r*U!ybzDTm@be9*P7AkiwRC0az&8N)wI!Z>&K_Vjj zTvJ>qA|K_r%p=5++fL?5yR`~W5AZ-QppL||?dwh7m}mO?N(!u8_-4d@ei5G=;^N3z z8(P@|sNsU2W6RTZ&!@#<zGijWoNf@e!gnR2dVrLpMqNv>M5`s5byc!=>>oF>sYJ(w zcd72vzfovl-gcI!PUf7xm41^=$!AmHTxGJqP7_o5&9>#s+A2Z_mD?^{H`?WbdhP}! zq?DJ$=Q6*{CXn-^#U1zUb3W3^N+JjGh($&e)rA*iH-?t0s$o_lkD+b}J&bHmAr}xu zT?0tV19ga^+8LiK_aA8BwUS%by!M%jpS8GCeihO)jx1Easiz>OFqu)^Z9&rfx`)@D z_Qe#N<{L$*gxM3L+*tlYG&<N2m&vqaZ>5wF@LFMYuIvdwv)_e7GI+!Mhc>eBa4EQ? zfNLGZfG^(8J-{2(JA_7w!+fi-;L<Anu*mG?e%`u;ctJhSm||xi>2N|5Nh&+6X!%=S z3!8s({*f+EcJsQ{VH4}ivO`#<x%l~!z)gy7k^CzUV{-^SK%=<)`+SePJC1E=We@v= z(aTR(x$#vn=GDQO+7?W{4GVDXt=Q-X$stALfP%E#c8~c^^UvNm&~)o`HG{*qrV2s> z!nIiU<KKpUUPZPi1&_D+Hth61Gb0(58T!l^UGUN=&>-MlDl)O{RD0WQ{(uVx?fMZf zU2KlJuQD)@<X&Cg#aWl?Y2LiS-)zyTkHTzbdp)8oO?rT|cfQQV#CiaDf2knZ{s^v2 zdRc+~$qNo#<Hc`nJm|^#BjIV6P<#+w$h%BLYKMVjqPnTs!^v!%BsH#pewb&bMzZ zNXW1bjjBz53a;xghxxM6wN+>Eta^q|GyP)a%h}^AWZ#Q7nimpM1-?B`#qBwBX{pfC zcj7M=^Y;KXyni}NBuVoGi8YFO?Ap(H#OihoR}2}~>g}mUj63OfIosLx-nweOnR0}) zr;Z+Z(8kO7Ne5r!@o!2w+w65dh-#91J?dx=aGntT)pc2dU7Sp~gS&PmHom~>2A{+6 zv><-s!pibSlBgPqy$49|Zu#b162&c0yz}pZI2~Mv_Qx}`EL)j4)Vy_ya_>KUd*`Od z{?G>xJPq!!uXW{fO)EAEaaFJ5@GMI-Ho~lXQOm(5fAfI2c2~N%Q*d;gRB@S;ROR_b zOz!H6lP;o<geqjCBkUh-jkROA|KjvL*TnXS^cyXo%1o{A1bhkj&*5!^i>YFESlx3( za5B(X)}|9ubD-RyFeXZDhVG$|x9`N7ZQ@g#ky!QC2-2EbsUDyh<$K=z{>if?61n&P z6{}bzE=@=dDMQG9NyWAK%07u`K!=7YbnZy@&O*gLRVGxsw!FlM5vzSkTMh6oJdx@7 z&JNrLB~r6xE-s90HSjpHA{+N0=4n|Q&w~2_^5(7glsp_|)vupea$(OAw7mM_!nCY? z5jS`+W^$*jf<JuFFSJN(Y)fhh_uHZD<7OA<b?zj}DWcFSde4_G{=2cW|JqugXo;<J z-4N%7tLp*&vv6JP$<Fh~t%5ElN70BS%9W(_+D*pKUYIh}i@VBb^B>&3L&@lxPT7VX zu7)vh<B|EEimEIpKCd!pSseJR?x6;$Eu{=;-DYhPDkS8@LgZsc7g$;{bCw`dbM&P- zSHBf6J5#j3arbWT<eW}Ehuz5R1te~p2g2zErHye_goY^cG7BVu$d9l|PTwCB;UtJ> z=*A0}lf$sJL2OrdtE$8-!!xZr`(f>@z)Duat52sz`Hoo`uM0nNJh);-#WmR&yfgN# zdfi^~`Fj%IlCDWBi7;(`hM8%Vvg8A|1HZUPof{(5sV>5tsQ&GR^%gH)(SMC!N|-A2 z0BfEVgxfy$2{CH^XFKp|M+hIbr!f6urS<O9x=&P@!w~w&Yu<6In~oiB<wWj|GLPu4 z=mC_vN!T>s`yUEDkt}(S-(S*=4QpcUkm!mGjq}t;h2=Z7`lplxb?P|mR@Zp_%!b=I zWl5>@ljGTr3OY3p^1bxK3GLQlO;MR~gktg~^Suak239rosdrj|MP%tm16MI+8&RY_ zW+j5%KR1uK4=bHc;7I(od$*)e?zOB{+~@K)R+>MN%?rpPVq0Y&=AK*qLP#KgYxA-^ zyYLqc9OvBY&=CdiWeN`Ds`dayZB=!8Jpk)J@e#~%(hm`PksZqy&T)(KvUO^!K!86_ zM20I7-Xv;f2Ax4_&v&{c<7@1_&}x6~gZ;IQ@m|GVWY1!fK;2c|SNKSmuj~h-gkCg7 zD;DY=K_1m@lWcNn=-6x2n$iPYi;&B)(-2v@WD()wk*LnMJ%FfK^-h<vwTHC`AGVkf z9+;+fidD(G?hen1xR>l$dS1_EV>0d=53i#FAtwFq%eDmUiP+ai-^3SI96y|yxc1X0 zoMm$3tyR)u%O#5tg*$tIRJN%6l;U>b8y2MHczji=6Z=(JPUf38NMbFC+OZARwuHl$ zEFv!ZE6+KKl-}<F?u2mW1t)05>hCLlQO1w^`(ndPm9YD{9WG&}<*&h?4wE?F%RVg+ zc$q0Cu}kyct6!Z>kPSIcWj{aV{8mdA^Vs(A(j)(W<v%kPTJsP#<Jl$lzYgcLWKQtu zy0&6-l2>8@Q9al@KHR)bTA>i9B9*x_WmTx!dZk@!Dy4jz*PN(IyO6aa)5bCDTDFmS zNWBTabE8X4Wc~FHcbz?1HV>bC`C2O|lbe@*Fr~5GnyB5_12EP(dyvt0q}3Y(_6wac zzMr(Nct0CgV|<0hRyQ9)l$?JLklm);vf3ka-iF#UBDhF@f0mHvB8OWSuV^{_P!-L= zS@7W~EAK2O=7RmXdyd%)uREUp%CWf6;lPb#F>Ys+P$iF3eK@y1KNq7kuCqA-`=TIL z3b#9q^`2?|Y=5sydo4Zl-zq$aPOMAvBBn@#w}kz?5vlS=WHNQFon9vAc74cO#=XQb zP@t>CQ+kt1#fz1;U4{RwRmyoLX`3izV;ChT_R+2osm@r*QRd?2)8=|^No7`SW$8x= z$+nrA;m4R>O6i&9Rpo+9^4y(Q7Eg&$3JX~ed{({`p5B>>4M3i|{shAspS!4Gl_8Gr zjaUUKB0-02vZrVzXZ4o2D}ed6)7LTttupLLI%M$-ysMFIR2ZTh-%-|rk``gc+{_el zsUV+;PtNHAzb#o4|L{=_7Z0u}ddD`~`0iq^*0+(Kc;CZi=gpMr$}U^;y-Kcm@Ibw8 z<NW~TqO=4eZdW?EN7C!bo&ir>*xgmm9kaA<E)o-$K3VDJo)qAJT5_iM{$gg%&aBQV zlZ|dZq-;MnwM#|BG!E4jiHS&t+gCrLFv@OCZHZjy*kETH^TMzV<b+ruA!5rer;v+! z1$IK$zPX@oXB3dapM{bG)bE=aF7?kUODSkeS8gbd%{D4%PY3^cqHyj;HLuO_+ILn5 z(Ioj2alQEBkNdn_RvtZ^6km4u{P}f}vF<6IO&*w3YaQ^n1EY{kf~#zyM)u|FBLA|i zu|InhYcb#LqsNX@uPxBoFS4K3m(9swD-~@@^>QaIDM@YDuCNNujU!$~RT9C@$ctw^ zS}^C_lIq)DMZ{BNKYxEF&XhI8<Cd$*xY)vnB2^b#W6qZug^@Ocw}~73y-bC_)NVP? zp?mP<MOO0|TtK7CK93z=&NW1)6ZSuPzF9FoaK8;ny)!(kB0S*E+U{-Gt3GQKZ=IQU z677fr?!+O|%H%KP-ktN=xyfZNX}xGs5zdIjSk{n2-ninzYiu}*AwD6CC-dN9-iVfn zgogpx`c*~mxnDe0I{S>_@!EyQIRtu&8lAl{tOvW$s@_Q{6__g3^Fri55+0OYL8kjP zW^S)fl2Ah=zDr7yT*!yuzyFSOQ}R3_tV@M4NI^8kp(wq8WL`w#tjD*RdsHS$y$Lx> zy#M@_OhoC&l6SR5C7enHQ6*7%K@s51O9Qv70;`;MqtHY(5xGSVnNV>~q9tL~0fv|a znQ+HO0#7AgOu9|GJD^rp)xa&Zw)4_Pv#Uua){p<oKI|5%LBgrmlL^8ie{k=^U3JSY ztuiYq^+1*<;ev~{s^+@jGlE*m2u;q}iSvBkr9{a*N!&<GIbyr8L)d*L!AK|1Ij%^U zS#&pk*}}aZZlc-Y?(8{hZZwpyY$ocrr?<*JbvtirUMqXAq;mIBMAWM;&5iC|1{Q6c zc%jI+qPIB13d`GF(pG7?-7T$lUv;fkUTxO6nZYL5@ZP7(<65Vu+22}6T-RV`7OuGN z9BA$A@Kzw(Dz>}>p@XU5E6!#P$}A=|T_XqLnmUT>iMV%~$N$Z1OmW?P!yq*+Wffba z(}Mtw3Zb{%9&C^F4K(%eq^L$&EAZEnUDYyt8`j*Mzgl193*I&DRDN0ouZv7xV|ch~ zPG$~)d{PL!$!#dULR2&@cDlVAcSYM!`e7~4hL8iusApM($e>)a$XiuDhAONr=+CD4 z=HHOKtt!k2_kV8g;r86Z{o=`{%yaHt>7{ChCVHuVUDJ(Z#ho@1@iJ6tY%mb+cE546 zyP)Cgs@n54$P%rt!%WT3Zs$0KG!SLmYwt#pEFQlBe;uqNG(DVSjMGU@IiQ>@%8dYT zsRhD*<RBMW1(b@kf?~LBmy}{AOY>_hr!79$m+5b{acadWb@l*XaBm{xm^iYf*yWX9 zzBoGT!~Xp<v0EMa&Ra<@M|BX<q~-U!OUu$_buK=v5#|V8zkUPxipm!CMZlNyYu7R- zc112M$?0%l`#YHw@hbQvLjB)FBd5H|65U+$X5O?r?AME8@G};)#~)+<>R8qT9GA-E zBZnBgedr@q(2@7~fd)UX!^wR9mnZ9!iiy<$X%Puz|Ik>hQiHSMT_GvNVe2fs-g#Er z>j(>%)LToF6RUCGUX$Xn1_u8;KHj{=^Srmau-Q=$^COR!VDH!aiOR&9ZRK91xmLpO z#uo+>_)ic)hh8GDefXSp!*Gj5jem~$*VKEpD?1ZP9Szb=gFD=!G!?tgnYk9#pwK}{ zDXCjyaq2<c<Sf}I)tU9);yjH-afL1(nh(w}JSPgcg!KUPbH8|^!P(p4rXRW3ZQiFi zHbD`g8h<^e!0t+bbO6~3{%WS;PHZNXkv1@fXkI@a-%%ia47^Juytaw!=I9{%<b!|g z*#0p(*;UL{v%XC1qn<lbly#+#9`L{?&A{m%zQI+$2XM>4X7H)S7oqXuCABZ_1bZrn zJohXxF#n3{0p!luFPBW;M??qbb+N0xetQIiLwXhKkyRQoPCdYC?H7ExF0n5$E=g;F zLU!A4S8*Cm_&+Pm)KuGy3gaAWYARF~94vok+~&wq@_Ms_w=65crQXe`RYg17k@Z7~ zyXXZ03yi$`BNp9E(N=<&Z%p0ejHmTER)!TjGcf;_KQ4*Q_VD#DCtm=67tj6ZdIw*q zhnkJcZ?S5!IL8y+_<*6gjW@K)o5WddviF+shK}@$rZ-iwPMynTx$(Khk++S?TpvoV ztG<Qee!<LdYuo0Q70H(%laOBB=-RMwD?V!9<JT<j_g7XPN;v!Fnp^g}JacqCJ8~s+ z7111>?DNrxP-ylsQFe1y#=Fdm<;HIir)-X^Bnrm9zS&Z5^q+U6d&p-!q)dS3oc$$@ zZ|vu6lhQXTcWkl|cM)?=am#V(0rC%k2vs(!FIpl@$O>sDtuVeJx%(DlsCbkzxjj-{ zLG(goUMKQe6DD=}gV>xmXRTz;`&zfhw5MS6wC=k{OFoh@lwn@i19W^U`g|}xdzqP5 z1s)aNwu=41w?wDpL@a;2YPwEnG|Rhki|B<mI!kTLRacchB;5(<a{P>aykY*ar6Ms6 z%iLFT{e_ZJ?kR3gdvYxMq%VTu$O3+c3+s*v`nWg6RQo#SwtAA$-JHSqhzi%b6qW8@ z%;}tuTo?7=<Dw5)5wFj7#HN2vCFGxPN9TQXzSaW-x)vTxToZbn$X&uGdvm{IG3iD) zX=@MQV<=11YIoo@zR)1w_-F=`zW#xx=NC&Fqfh4(JX_O3?#6y?og=d1@P`ib)ftGx z|8NrpKio_+T)%hub-Xm<zG<~g7@_;nJ-nk(Mg<@LpIxl&nbr>zJ42i+@EK9XgjAzl zxb0qEdH2ls)^BN(i8Bh559PFA2ss?)riw}p52>uUR+4{(xUj$(n*;v)UVMg(x^DLC z`ZC9Tnmh+tO3y!(O1@cB|ACn8s-9kS%Plr5eR~fOk5!85^h!T>Tyfp}K=w4heg9gp z)rVMo=>cB4otN>rt*6v*YM$DhutM@Kqrg_|v7Al*OFgs>DyVSQ{fE6tZvEF8xxPW@ z%i};!_BRekC29*}YS)KG*m&uwhtx@hhL?4h*7JaW^LXE&t;k>X{BrHKq&NIUmupfh z(p@UGeGgmRlhCfZ-Ry8-RYt9=u&k3)bG%$z@V~Yf7MUvi=lm&?pZihJCbuhW7WSM< zteX?q$d~zy<K2bXp1k5X5B~P#iIKf&UJK3$X-!GGRQ96M@<OlEt;>+546Q=-ra~3E zmEI{8WX59f4+EqnLEbO%2An;>!iC+f&Q-3g&)OH2z7>0vbi3)u`4r*JjyOGE*YxY? z?#=11-e&A<iDNPHt^3fn?WSSkv2He2lRSk4#`tVr8{=kX#}-7Qeq3w%jW(~DPKFJ- z-v}lqNf(gww>DK7piZAo=+JE^W4}rJ2ZDEy<-{F-S1ydkHP}crIeH7uM2S3iag^Qt zNPks}tI?e-f}4A*x{i=rw1L;zMmBL_kF$psv>7Dj0dFgKGS41pmQ`*hElFN$RUlf2 zB+BsdeyiDJxP8Z#58%Jx@+`vo2GoOpmythoaBCpp-1#J(_}pZlgeS(#uD&@a90Hr4 z8WH26^Cixf=;f$iXp~I8zNG0c>*gb3qNj4L*lH6CT=dYyUEu6A9@wB6wK*~fTd~<j zyu3p{{zi0sW_crci~A>}bwx`Trus~wRIt(RSCSH^Qf@vo@Oq@e@vJjyW>u3@T4G`y zR<kHVh1X0+(AAX@{Bhr5(fiXv7u*?J7W4p5(6wwS&M{BSA0_8i?tgsja|Ll1M@yq@ zHTX*ip-~^FWqFTa&33~t&109Uy=+{>`V0ds>Cl~~fNy3k1S{$Dq`0#-kIM}8dAhdl zZ>e?Uboh3<%xY!3XP{~q*0)U-+^*Zx+jPB2>h;Da=G{86hKuNpCKs4yW-Xd!RcO>< z^qza(3}K&oPT!}y8bssn)qX(76nThf-j7c!$P(ryr0VSKevLN=2mM}lr+d+y?#%p4 zdyqAihjGj`6?jB5XK*Ga-8VkHD5WsHC}MxY>9^exP0Ut}gv!EuyfzN|;&CM%p$3YN z9-R#fZS>rKT4F(>b_LrOUZj8EIq`~=Li77pvNcO@-#yN{cNP!tk(#HftV_-iw@6*G z+3Wg-P>u_(wcsY-&n0D$w(M35yyA5dt$u4scl)X*81}|H(!!-;PxLv_^*6gVMSy>W zG^*FD2RHU9^PPdq*F{B^vijrpF#Q#uZ8@_roxNnC8Na3hnK7Tx99o_#OAu}oW<^*p z-&z!Y`RS_14BY6v@+LAa2TT52bC==A*-SHA=dXCrCbDhEbxz{C!n)3~Bd*)ie6KOS zjg{Be6nBn5;L-~dnQ?b3H>3ubb%}bAmf`9)kzI@l6`qc7JH!sW{K9!7>8!z}D@A2T zN$d41yH@<Qz;|<S*FB4ar^N~2zmx}<G&m=yn$I%RXj)a?Z1vC^g}{+rS<AzAy%(Iz zaT`C=%0@9{DNm>RUH{ykl7;|Hv<1uZzet5k=2jq4Bzy$A)dTzn;``^<{c0lrS{cQ1 z=+>9ZOXtsLtaGtOV&6;4%C{CWmKva9OV8pXg4%VDSgl}cJW38+6>1+DP%0B`B61HG zfL5$8Q^mQv|HIQI7gUWGwrg!dcG)DkW6S=ls4q1NAuo3hbYFQXrXb$z>M{8?onTWF zsfK3EO^zqJE>D<a3iuLgn>%DOD^g2jNgK$Fc~7%n5>wjF%?Qv5Z1ZgmIPma&o18&* zqWb3wuYE^4SERqh7!gVg1@!SodQ#qV1eCI+*LYmG+1+JSSL*5?hF&3NvbAY<MI1*) zI>7@Wtsox9gL4RW3M;(0s5<XHHU}4h?QR8saEsPWC#ss*>$qCrNk(CWz|tJ%x)R~2 zy$_E(FXt6YDSjXwN#YiBHVS;3+jQ5K<2@TH*rEs6NI>(pkd`{*X0Xbxd!?W6mY~;m z;ewyJzDrDfhGelB>B<VpM0e7ayth1MiFrx6I<{YlA?n0}>N7>eXgqJqtWPs-L=h~q z#VG0d!LP-{T8s!4^>L&nzO#07KXr(6=DQw;-oZ0V{urOE^4*=Xi?rQzicyy?|7WG! zt$)KwxY68OGNj{LVOkV%u7Q4(nQ_}@XPsU3HKFDe@?RV8R##%xyd@t9=d=swkmKJF z-o`|yXRtV;)v=nH_16MSLeNn*ehMC<=&hSp?j!j)sK?{vR5Il9B5o-rCrX`jHb@oc z33gbL@2eYEaMXI6Zb3#()dkt++z9o&cG=E<q_8jEaB<=MT-+UF;-kC86<(*Izdg@+ z`Z((TM?$u|yY)>M9z1VMNu!J(&NQkqCEQh{h4@Dy`H{o6zhesGoY}qF!ro>H3T}Rh zyz@DwxXl1%6tYhuB9kDil3t`#b@A;bm+%W4k1PJmDd6MTBCb@73Mlxm3aifI8vGDb z-I4U75uMb=f)yt?NkxFGUm~Q<@c5-RL`cf^7A19Aj5iN9V}nMFciEYOjai{*?Sze7 zCEpdt{aI2O9Mk;5igYN|%<X(}7e3avzRfcAY}9sQvGxYV^qC^7vUv^t3d_8+Dy;aU zb*wzgtdbKNyTly2>R&$3h|MH>c9xd-umx!=bKloVT%<g6`^Mw%TFm0Vm7)2JF@{fU z+K%(LyPYcgQ#7`LH^~2--Mt=wN&PmGGlayVu$80q*yoF%AF3Rfe`0Qa4tKq1j^1_b z0Zda;cuG(seg%t`kv6})O<D?yFZismP-Ezg)cK_cvRw>3FI{Qpu?{IA8GC7mk<0Pc z2NB7d=xEb82J&gdf%4cUjI4H!Q(0yZ_?zQ5a)NjiG4VeB{^3vmR>qjV5Z=gycHVuE z@BaCN>vvi#nDwno(|L&llZ<Eh(d&}nKVnv~rAwV7XI;_%+JIPT+2*HzD5bzDGE?V_ zl^;>69V-^FykWhXqm^y4(@xh?car~Sql>TE4R=O1p8L=7hIMth-WjI`&Olt3*Zs6s z&-8asIu5vpe5fzV+8pDf)uLAJmzMZgunr@0E;X`Ux>4IGK%QuD?WkC(YP^nvweh-R z(FwV6&W5*%9KK~nt==wgW75$dotGVOHfu*Rv7fo5W}t17^kAkL=BsdyL)n@3{nrts zw<WHDg`_{kRT|{)aqcdzOCpd$I9`W~6*{c$0n8H0Z5)oY>)5Q6y`92AOf~uvAh#u# zL-`Mxh|}l(5k{Pesjme8EYee2pByBH%XhvY%_orD$a}Wo;HNhZVxk`CwyGw5?7pv? zUJ?@vns1%dkJ)srVD2oT2nRRZn}{4j^&`8e|AN{AY|FF%+Rt>HfVD@HdVr6SU3lzH zV(Hn}&cQN<E9z5Ky*|kX&Dmcb)^<`L{_O>Uq_-t50You!SPL1^nXbmR=qke!e6lI~ z<&Un$c&ui0G|>^O8n>0>R<<)S423xKw@rlSYez*~bZUh!X+2J<Lzs7;Tj={w??^T; zGIH)BK9XN%CBK$Gb=*IFuOx3+v3X2$gm;tUi&8=**{{t#aNl(mS8Fz+N3oS+gowd| zD!s~FtHfgS!U$X0J<W+^S0o`*qD)8eSyuhG+`oNpSmuQ1@g9|FQA=Uf6l)~0{+VT% z-hl4@*d?}!m{!4gFug6ffViSnElcK<pPYAocS}&`xogCGjei?O=yoE@IIS9Z-#o|j zzU0H4c4YT5GOI<1Ui0_e*k%>j*hFaO_i6Ac@geCw&3tVpV)sU&`ixaL;aIz#V-wjA zSC{T!3;qjq$34ALw*;n0gr1>56LW})?z{>!oA^CMoFy59bRo&+ms}3eX+3~d&wLC{ zpT1PHnR<}7kdY$Gx`iDqB>!}sP1R?%T37gZbp-^*IPzqsrGNfRIzTMD;>djnBkam? z+W=+tk3?dl(^gmY&<vsvq9x8M{|tb)dd1k}&??nYMou*URH2Qyz`T#+VT7-u%p7U+ z6(1{zJZ^>VzF4iS*MyBE{%j*70#+4MBXU<fgoLPf70W!(oapC?Rtin#w}?N{et;O- zw%H69*L9DyKG#)6BPzTH&?6=)vg>c)=9+n<I^fLl0!Ks{G6E4Bkya5ECE0?$TdHHY zRo0J?FVaem{$QUL;OnG;Uzm*-H`0IBl<{1Ycyz(D+l_VY2>mOVMr63_w}<WIsIIzo zFWj)Z*|*|x>N#!FZl}C1q4&MmqFXCYc$0QhiR@W`Y2_#}AxZlO;erg98B5#(j(ZjI z;JNwJf=+51ZqNu>6H;--U^xr2*uU$)|H}3i6}KPi0epLanO=CeEA?-glS*Y0>{S%r zlJ=H;+xLe}y$*{|@uz*R7m)F_(&y3T0+}Rs*;@&o=0TT;0(y+g8`O1DW{O0TOI{%# zI^^kgoPD#PQ~S6JaUHwl1F;@JJ9ukjf|2$<pB|t*#dTGI=Jhu8J$uwiHI!<UnWCaL zv*LQm$S|A72^k_RkF3pwz7?ls->l$C<QDH<7-VCZSf8pWjMHk+mEK#W#2P5>nrc4x z<7fLC{mins&}F2UfV-imrOWIS5uBR*vCUEE&Y8%dOR8g?)m0l(HSZgFR0m!`9(iE@ z<#kx_4W@f9v$BwFNIhS4Xh~VSfM!1U`_eO=)K&Q8X6~rR<~mvInyh#HLk|?{l&y<e zlPwi(pp-~3CrG-b-^Y`E3c8;w)~$KAnH=~2Q#J3)TMqt#g~E8OYRZyx%-FI+E@^L_ z{qctzkntuh5yfs7d|PFG!|IS+1ajO-Wqb`#Rvh40atMzyV;7ewJfp4Px;-ma`p|vw zU$ke|5o7|uA3Nt<XmEZ-EG;HSkjrydxbiG0dvJi$D6&DCS6{&iSJzc%6%}XWvTU<+ z>48_oJGk)c((1z5DRxG3cf!N1H}5YIDiLiH?sk#3!YYwgc@`e<K3g1!a$}a&Xkgcw zxy^KbrO(Hj3Qz4FH4h7mSl!#Nm`U4&c8S;>z89R1?cNY#R9KEK@js_@px#e2j7bWu zgZzhdFw;SYC8n(gdGN!>_=x-DO3w$S-Gz;$<+s6qWCH*GuIm=l#&N3HPRh|q2QRtu zVUb3+kEV@%u}#$54upx8U~?C%o@!%ylRDX{u|2<z9B1H#{#@g*Kb9E0T&+QRr<r}` z!Lz(C(|k9%v|1B<8xS61ZWlbiWfJdO_$<HM7MhGMu3RN3Y}h3jD=cDzci8I^9U7mL z{K%Ruv+BG-RAv^k+ONG>r;e`&Nc5`qa^&2LSH-`Tc#v27E-f<3jpsn6zOaE6r|J>^ zc>A>M(?mz3t3=ZN^e3b{Ew$Eh=M5bdjrLk4ckB&e4f^cNzN>*Rq%%t0sr)c|JGy9p zb^_Tu>NELev`jSkUjif98P`ai-kH8p-%ThqV@n?1B8<7x8h^+<$p=XaZs2nQ|Bg1h zKCX~Zc*|t%yi^v`C0BPY3j_a0X1QUBE>oH(^S8zES^3WD-*VDt1{=RC7n5D$y{ACb z%2$_wk8y8J)Glcz?{7UKGuI>G^MZ&C=;lk@-KA?o@`>1QFQ3(4^E&u$U)_g2b3@N| zNZ?g3ET}%vk=o*te$)ARU4Xv23h{|gi8X_dd2Flgs?%i-jju!>fPXdfinlx6_3n5R zqhAF08{$0%1@M0${&n%Pe_?}p>EX7MOq_pSC)hZIkSkoV9c?;zr;<=|WXd`sBhElH zx}&_Ry^QSOc_6Mi^#hx7=h`e(l;UL><xK=lvZw&*URGj2oQJuVenpX(SV=mu+RH7V zy<|h_!U!#riA0nTz98$+;qxjStTy1^4xdyQkwmkcJC|<tti0Y~_#g9H&l9^Gla)%s z{r%1gNpBWDoS}L&JZxPQpP8z>mE9pn(W|nU8zs*1`e`9y;2(31?2=E$Sm!)_@+xjl zg+PXj@71SSe9@-+>jH(7aYXI7&Wy-i3s3C%dx>U}d5QmRa|P1B9S`1n1SAMHIo&sK z$M_j;O(a?e7R9tTf?NKk4nMKUp=yr*8MJzRRN$(Uo}QK&hm%ulY?A&gZ*bJ{vT~2G z2{*47Ag%fI?%O)XC+no=$d+WEjTVaL4dh(!!FJN?RQu^|$vzK>o;GH_n~@Ksatnwn z7r2O%w)`CsC9S?WOd%uWlhJ8shtwT0J%ELy5H=KVh|_8G4G&POAaUv!g1_!}M4I#s z`7O5Q)KzDH9c>9|*{05-n}3HTeCopUA>9H(+HuPMudO;ta`1uVgd+0gHy+K`3v<;& zYc9T)H7F=xl2+Ggs!q(u=Cz6OAL@&i*CrcL=BH8`+n!gM{m9YeQ>|8JLW7lYM3;?u zSi5#|W}!|PQmY3LHwx)4kM|)9N~Ia3D%Q?-j=%@5I6%C9Q1s?@>x{TRlUr<jbJL5e zlXl9?ll!8qzSpO%;oe70A5E)_yAF)fooQEi=hW({d^y*I!z4Ic$CXAVgMTJ!PY3^# z)RRzl{RT1YzIu}EOun4hG%tgzHF^)uG4Z~wN@A|G!Uh?LmKtV=ke51VoP2kcbJkVx zXR@-MCh6?{%n}iPK|o@=vg#~KehdH@u`%oiX0onR`t4^h4~CKo)7#g&-o6%P<z8S} z==;U%(cV=BpTsNOd+Vfn>tew7Mc@}Ds{{a;Z0#&j_UaDywhokxp5CGE!Psk>pwZU7 z9?B?tBogIdLvf~DQ_k|%c9inM-nN>SM<^cKE$u07DAj#2k#=gvHb^Z6T`kbW0cI&t zGM4PXBqI#?Wd<f0ae;|Zd%y%KE?@^}L4e6eHob{Tlo}n-)3P^l$qsDYJNm7Z&<wHQ zTmR^n{4{!XTT0p&2CQE~@szi<M^Og^4%o!*M?u3Jqxz#DZ-<iaFQDxE3%gCMF+Xb5 z%<Ub26clW%cl;=TO!`A_M_8Gwn;b%b{rAEH01c(>@?eRQZv|+Wa&eiW9Zdd0zoQg; zUrKhULALGIgZ;MKnQHAr*(-8uSX1Wd$7{Q_Dc4YT4UDyYuYJ!E>%TOBE64g;{NV^@ z$D!?Z7~30D6!Z>qkNF-9b%rU|6i@I>88)yRY1S9!mu|Jd%&DQe)kIkL+4tBX{sJ@N zC@;$F&1~wuTm<Z#p$4L1pq_hYc71OhbMJfao9wagbH1RrNLiE|y`EsE8u<EAp4r-4 zp4a;hzA^On1?GBDUVl)h0GQD`g0^1kPC&rS46LyR-@yzm@Wt@ma{Ky?9~R+W`+o49 z>Lc1~;p?~b#{34B0l*djdWL+>tfN#9S=BS1x?UEP(3Fj@*ju99000I`mKgl{4Fr0b z3ibxN+n263x!-%oOIe+i6-(LG%)OSmy_U7$J7}BnSKk+9|Ezll0KlK+pmm`i__kDz zq1T@Sw0{34&|6+bDb56w_P*}}N)ec$+xG?LW%g&T_V&<Q{qq}TB;Q{@T2T$X=bs#Y z*!yqq0LsCd@*Rb;xaXKq(sePv++7j&l)PBV4FRCslC04vbILX4MY(nTT;6Vvw&^QV zh63J=%`Lvy_m<~itSu2pjJEY|$_<cVKtHp4>p(N*I}2lPL3zhdu^G+n&<?f(Omon7 zmgbgVVqNcd&iM+Ol<4ZcHZaBlV+VUQn6ZqsGqy*Xf(AhAs4ex|>>qv36bq$B*~Xj; zJpHfr&vdY}{{GGS`=n6d545Oa%&Fhd`+VjYTia_Hn-B0}Mj*j<$Rqa3n4MaxyQ$x1 z=2FcAoab4f?VRPTEzPN<7WRqXNi~DY8BM{2Du>>0d-EKTcJ@QKYg5ew-I+|x!Gv(M z-A`~A_r>3?^rHf70;r);6xQ?X(YD}^LKx)F3+E4Oa3Kw{&No5Zg9~bqoe7*`i(lP) z_tHj6N5FjWYliHX-s`@fYyRxLrYvDXuOGz&5PAf@Q5fIq`(k(pFz|wxLbrewV4g3W z2Mp%{!+F4P9x$8-4CevEdBAWUFq{Vr=K;fcz;GTgoCgf&0mFH~a2_z62Mp%{!+F4P z9x$8-4CevEdBAWUFq{Vr=K;fcz;GTgoCgf&0mFH~a2_z62Mp%{!+F4P9x$8-4CevE zdBAWUFq{Vr=K;fcz;GTgoCgf&0mFH~a2_z62RyDk;NCor)nK{?0PF+57$}Jx3&9Tn zq<jRQ37F%`1?Ih4fY<im7pC_LOd$k6V{c>+%7+7L0)2^ylpYq|0viDgY&OOyOJxm3 z4e)vq#V&{1K}lhv<d_UjrRq&Yl~dIGIl~1|v{Ob6nfOFa!0K%Udi5qft+=->mD01K z-45%%B&fbzMnyX%@Wbf9^i~;4ZQl#*Xy}wGYUJM3Ek(?L+$lg#(e8Vy*7qnFMLX*F zC_Pd~uv;EQ)d3==Xx9Kg{}F7{m-hx<^m4l08->lr%+3<Lq9l|3#HBaOrY{qxFV~Z? zhYU^__%Ule?}a{D*xTDm2?(Gt{Kk~e4dh3lZ3K=O+X@Kr3km?+WRKW_pB{;{=Q2Tp zxn9z1T2j*2a9Ns4uh9`z6;!pAM_O3!bhblkI;&|RoUIU&rfXznxV9aUI$~pMgS0p1 zI$~pu!blyFUeg;~3cRM61=eu&y4YJuuj&1CKQ3L>J>Vx>+9A0_`33n9f?|SPVnX~v zB3s18#d*1e1%(6!1ce2Jg!zQTr9_0K1O>Uizt(`g*_oP2Y3xw^-WOPsUh`d)lamv_ zlL$ZB&Rjr9Qc{u<Ls*y(^x(rBMcEr4;X`4#sS$P{F$g=$-VAFlN<=Vw*uh?U4LH(1 z2{yJr!Vbxb>S&7i;b#jbob`5YiV#3rBW;i<dkn}`h$6o?s4ev~8h<ny5c)@T?_^LL zfoN4#hi*WfHyfKDU101L96=c)%`%3PJSL!l#GoDQ5J&|_aG2cG&M@{G$bOy!Mn~;z zU~|yDx3R61ydBaQOvKg#ld!3?-2dc&pFWe4($#lwB$&00lwJeQw<MpSIG?bXmXH`Y z-+Y2wz$x$ZQ$?FvnjNM32@CQGitq`EXi-1Ra)2wi(oDfL@KK#j5mIJoI~!w=Q~$?! zuHpKDU#d5g4(u5mo5;_0WqJ8Mc4#w8Yp?<X=D~9*E69rpNs5W_3G)l}j#pJxN*RT* zH%1|l$~&ajfJ*r-Els5qB?X1V1jQsIMZ`oE<b;H_ONa_?7m*a*At$~=K~PwX+I9yT z;Xqk7)V8KzTS+-Zi7i_c<+jUh-=ZKXBqX;(L0CdwNKi;YPEJll=ttYWR7_**F~tD4 zRlj^{1UXOz2AopN_f5Cm*!=sIwWSP28fAE*!eSyqa$6)Mwo3>K2`Pw5NGb|SY!{Q; zE+VHWFSJErn*e2ZfepC&uKI!qjNDuAnwQ#XN$LIQ_dYd|hkx|W)w|54z|XY>ACMru z20>YRNYgdn&6Y#Vz~~hFLONL>!GOc9$UYwo+RWa`*bXUY4o=m`Yh7U2A)`^0%+LNo z+Zx+}50|h<+F_*EnAxFixcZi+Ey|qB9?fNJYYV2^8dKy7IHF9y-@AW6Tr+Gx7-Pr& zK86IdeYE8@7>op;ppcfZAoyXjQletiEl4w)@3V!lFh-dp!EZ4F<53|$b``=RQX-Q? z#g1{P*fMEUD2zjesMHpr$+4mo$Du+T{J`Z&p+Zh@>?%Zrq=ZB#hYF#wtJoquSyq&s zFkPq+8J7xC@F%^#pYHyDzh7(-6cm+{kld~?+z(a5f7cTglM<X9Dug72w+o5Niz*6j z-%k0_@c-C*3#d4{Wq)*r!7aE$aEHL)g9IJig9ZsOxWhoOV8Pwp-2%ZiB)Gc;5|ZFf z&;*FRAvyA$`|iEx{=f6qe`Vcwdd=#tuHL(Q|F(7Q>Z&Pe8K{VyG#D%+EhGSz<41_3 z{}~Ei-UmE95I!LYztC^d7Q7<=8&L4^@bgJSWn_4z1o>}8d|@G|kQ|R7pD>Rc55EYX z^nYxNzbs|I4|u>3um}XPPW>Im1t0JK3KZZ!k3xV40!GNUzrh?OCCm#JkrfmW;s4d6 zM0jLn5lcpC5yW`sm6a3tFMAZP07O6-!i!id{|+cb{v{Lwze!t2{aF-<mj&PNGP<Q? z{sk0*5dPm|l_Vwm=TY$T{5H~{-2Vy`&_9m?42B5&9&?lkubhy8l$?+V^#63G6@-8h z8tUI;ttSHh^C$!mE7spbrWN7)vnUV{5Hc<QZ}HX>;s5g}5Q;VM?;)9s2>uHwZimKi z(H3%i!ZK1|9zJP-zewf+vi#D5d@>02IS((tjO>3cM+x7`QT)Hh93{v9zXFB8pG6@8 z;p6{pdX(UwM1lBhg^<aA6CH@0(7%8J@tyAXkj&+T|0NW^i3B1i^1lLw)SpKIMl6(m z56!=v^q)t;&j;cEJv2G|P^b*QpftZM-~ZuT4<VNG2}8iYM_UN<3Q7sc$|By_zfedE zLgj>^QZjOKU?E-sIhp_R-HkxOkB~rqj}@yh_+LPQ5JG;Fw&45oC=gmTzTX6e;Gac- zP~-3+lsUhJObZqIX9gwzsQLd#!<pX$0>WP8zqg6`?;s%7djB_2So~8njela9acjKs z2P32Z(oO?r>1O)}ON~ETgZ!-wv_I`a{y%!)KQ#>b=Qd0KciZQu9nmi%pnLz(KIqrE z?5{e6-dfN6G-QMPX9h3O|3SY)ShYc5f65l?*K>dURsNr}#k%byKf(UNMDedIgx%vU z`8R`0iN6{~{`>gv8u)h&{JRGJT?7BFfq&P)|Bq_m?=BmbP6#8~#|VdvAM4oq2vc=a z4J~!3qKe#4Zyjs}6<a4~B!ruYBO<)pt?jzLfgvs0B*J+F0}%=d5p&4Q!retx8+set z4uG(0r@b|Bzoq}OA>2_uE&g&Xnd4H>pr!rmh5z9Z-@?TW5$6r4fk@8>LpWa`=nw?$ z@EGoL%RfQTMCSIlG}5gL4Urq7fC!rGmbU&y-^Pm}GXF(O-qJ8fCm15lZJAwQj<8$0 zA3;ZWdfdh!0;wSAFi%^{#|U~JK{GmdI3gToK(|58h#W1=5KcwN*tdMRrG*WG=0VWd zZV$8&f#Q(G5I#59)_<VQ|3JeL!GI8H0W!`m-ao_R(6U;v(IR|KglQElA3IpW;anOB zKN>SP7{bfN(Z$Tk8vyu)`8F4T;Q!@3@RR*(_upRpL%RQtylvZG*UvS7wi%FQ{O`QK z=lna*xd`D}ga{}HO87g^JQDzD4Fv$mR{qXoEI>GZg#Z98Q-8oia@$}2;DcjpX~BJ4 zp?}-{X@b9{{I7{WJdgYKd4F@fpq2d<O^NolS6d*WBYC*dx+C0}ENQv^V<-O88UIkM zKa_(Lu}-jbvqZQ_(CQ+3nJvOrU&h%9W_xR<PiyP+5AGp<xWk{!_J=#%lE3;jf*>sU z4j?k+2H;H*0YFFN0AxZe0LUm0aRvCdc2mL7MR@1|0D5<Ke)W3<jkx}E{|`H)c*H4^ zyY0^iT>u%a2ecL*Zl1rAAm1KP5Mc=K0EhtOhzOVr09F7O01OZUhyo-5asVZOI^Y4o z0APZMeQAS;edz{x4DbU40m1;$fCNA)APbNWC;?OgY5@&^RzMe^2QUa2155)J0B-;v z09$|qgp1!Nz!yYdIy4{-kPt`?ybELkasa_VVW0$14yXdu0vZ4x0j+^fKo6iF@F_4F zm;}rM76L1Q^}u#u4{!uH16&5K0r!Asz#AkG5;hVM5;YPt(mf<$Bq=0iqz6dGNY+TM zNIpm*NO4FRNJU6BNG(V`NMlF~NFR_6kS;+05Eh68L<iym34>%n>L5dq703<b4~hb% zfr>!2pbpRwXb$uNbO^deMnxt>rbXsL7DZM-)<L#Fc189_jzP{su0U=<?nj<OUPC@X z{*Ho!LWRPC0zpwk(MPdHd5jW<l7>=-(u^{IvVgLM@(C3cl?0UqRR~o9)d1BF)fY7e zH5auG^%d$2>IUj18X6io8V8y<nmU>p8XPSQEfcK<?IqeQ+7{XsIu`m}bTB#;-4NXg zJs3R=y$Zb>eHMKO{R;*j1``GZLmdN#;f)cGQG(HdF@>>(@dXnflLb>8^8uzEW)Nlu zW-aCb=3C5jEG#T~ED<bCEL*HVtPHH@Si@LrSl8GD*zDLc*hbhM*m2n9*srjcvCnaE zaF}r<aSU<bIB__YIDI(paISC(ak+67abdUtxY@WZxU;y&cQEcS-I2Oua>wUR+MUKb zQ+E#WFz}f1Wbn-J{PD8!+VPg~F7XNRdGXcp9r0uEtMEtgcL~r4m<i+vU<4rq#RPo> z8-yT220|G^3&N*_C4>WnTSTZtEJTV#c0|!c&xj_8PKXJJ`H6Ljy@<1kUl4yF0g*71 zD3Umk#FI3TERx)iQj<!NT9QVR){@SWekP+NlO(ewiz2HdTOhk3rzMvow<k{|ZzW%) zK&D`)(4=@wkw-B=aY#u-DN1QU8AaJZxk80R#ZIL~<x5peHBNO&O+zhD?LwVN-A8>$ zLqa1-V@H!h(@nE?m+-E{UE8}UcVFJ!rzNJ9qIICnpzWtUp`)Txp!1+Bq?@GsLeE04 zLmy0EN59H|$so*N#gM|#%W%SYmr<3`kFlC@g$aX6n8}7IooR^aGcyab9&<QzEAuW3 z8H*x|4@))6TUH#_`>d|4MXd8|sBFS)_H4Oq)9gs>0_-;I+3ZssNF0J3wj8+}Gn^=# zBAiZ~MVw1q*j!Rvo?O*jYuqH<D%`=`t=z}=81EV0OT0I9?>mnGj{{E$&l_F>UM1dO z-VWX~Fgw@+oDH7m!{LMS1@N`;o$_<=Tk_}ezZM`AP!$Ll=oR=TC?x16SSz?E#3=Mg zC`V{Xm`GSdI7WC_1VuzzBtWD~<QgIffkPS~A4R!D?M16Zcg0x5EX7L1HpJ=0&BP1E zKS<C@Jd!Ao_;8=@zS;ev`|FYnk}%0K$sH*+DLbhesbgs#X*cO+>CZ9{nI|%@WI?j> zvQe^=as+ZZa#?ckp!85{Xf^aiUO?Vg{*?lXg0e!Q!jdAjqJ?6m;)#-w(i5eAWo%__ z<t*iO6?PRjl@3)TRVCGA)wgO)YEEjc>Hu{`^<?!`4HgYojZRHeO%2U#&224SEkCUx zZ9;8R?JDh052PQ&KX{|Vs^g*4t9wV+NVih=v!1M8lHLdXd-_lG#|$V8Yz^8B(F}DB z%M33c$~{bdxMd_@6lSz&%wp_iJYqs&;$ZT^^p2^SY2zc5M|zK{9(^@aH!Cu`G*>jw zF+Z`8u}HT#fJwqqV0)J0mPwX7R^nDkR=d{X*2&g;Hur7PYz}Q@Y_n`n?G)_t?LOP9 z+n3w_aL{w8b3}K1<k;>+;AHRA?@Z(D<vioU;S%QZ!4=|~>U!d)>{jLubT@WygA*Zy zsc{chk5G>_PYKU#&#T9}j~l)4y_~$pz1h7Zy?1<|KBd0Mz81c{esq38err#po)r26 z{muP*0~i8A0=5F>11o|sgY1JQf_Z|If-j!xJ?#jg4ham|2$c`54#N#|3tI{o4bP82 zj<AiGjO2^VjQk!2iyDpQiB60D8e<VN8p|7-5&I*~DsD1fFg`B<HNh!iG4Xz4MG}6J zPtr!RYH~{oZAw(iMXG7)NE&}yemZ8lNBV~hm5jDb#>|AwuUR%(3)#}ybvaZykvX4p zVY#z;l6kfH)cMi*HwCr@uM6c1TZ)*A(uz@wJ&U(XbW4Uxg-a{TD9WPCzLh(bf2h!^ z=&uy2tgND{imyhh_Nd;gF{+t<Ci|?dmaDd~j-)R7IpDd+^Zoiq^@|P44ZV%RjkQfo zO*zek%~37D7VnmmR-4ujZ3b;K?Mm&v9iko0o!p(}U36X9FNj~ncVl*kbpLqi^YZeQ z%d5j4>z<8X)803I`hD~Ln*Eal$^*lL(80bTsiBv{;=^4dkdgLL;nCJH!LgQcf$`=E zfr;ix!O4~>p{cfMk?D>Zv6=4K`?EcBvU7v;it}R&Y6~-qI*YHDjFvvUhP~chc33`L z@m%@xCh#rF+o)B%)wFk1?~2~Dy|4Qq_~FHx?ArLc_WGL*i;aU#_sy?cA=^0HX*+j! zDtE!VU3<{I>HUZMTL&%&Uk<~L@Q-qiS&y4ON`4$a(LdQbbvylW7IRL1UVg!U(R-<J z`R<eBr!SwQuE?({u7$6MZuD+;zC8Yl_BG=h+qaJI%HQAqa72XtJq9rUbl?WS0uizR z5CkAb2BBj93TljC{B`^B1`q-u!pEl|pkN~-W8-6?W#MC?LToJbq_-PAKK9S;FNa?z z|8Wl_rl6psrlTh#qbI_}#U;Ak;S&AIg8x6c!H-@5K01;<l0FDX4?w~Pg7ASq`T;)> z@(l?1526nc351M-`j>dPf5m_}{^a8UfXF})2!wo_>oyw@fR6+sz~e=xr6c5_2TL;W z5ot(0l9q7^WW-0TwLloCNa(0Q5Xx<cY#`tSpAL^#O4H0WC=rRau)b%8V2z&V6fCV} z-a9Ml7MxVnu&!|idgKyF$ROk1hX}_CLPkYLMnPo%wE^+z5Sj5LPk5z}G=dU;-hq~9 z?UerZ7Km&Kh<ktt5up<iWkg2$Sw=)55oM%9JQdH(l@^hQr~afza^`eR!{yPB6#zB} z2tvXK;UiLQpp#_~peIG3la<LP$flsun$a@`Geq=bJ4Dh(&_xE(Ml#ZYh(Z+Tm1t?r zGYO;!G{}PDWHCa}@FU2XC9~*h%^#`Is&FvlCCi1HSz6Gl&^c(D>8n+Ok$VLfNr<0@ zWFkG<(%09;P@&x<q>UzeY%j3!@$77fSHMi)K!2DJ{UMRQE<vqI5Ra}D32_j42*%S? zGxI>%3~3c+T@vDuh>#*WY@+oMd<>~VY~lo1#M7t9f`pyEV%L}DLw<&x7gQim?(5tk z=^eJko@nS@xv6x)mCKL9uAkhLGk5pKhC04wbo;*$@wIZA*kSJ;6dts#t<F)|mz9i3 z2*cIHz(>xY3mFbcLXW}g!6pPoPyn%s5_mz;$UGEikp4XnVPD4G)a7$=^4jgaPiIDP zO+Gugu^!H%>*`xK7C|z*C%fl925nA<=}Su-h2f8JbZopk&fGud&!1Z?RNoVK+P-i- zS#5UcshlXytD#GZ1>s=?lktM^=z<?1_5c7afZ`E=IS^nQh>(pj-e(?&Kly6%GQE`h zouN(ryY?N*dYc(J%E`lKhcpOyJ1)({^}RTG)wMDIR;MaC|NAk0r<r(dnb5C-ZMkYJ z)w!w?(*QzAz^mKv!90jQ@N?q_0Qj*brvZRDMCT09j%_tKbn|)p1HhtmBZl>a?8vNl za*}Exv6HQR!EdZuAhl+dVDwVpc+(JW5!bdfy>7~VlrxzgU4{$o%6n&Sr-3Le62)!w zWLf|)@bCXi0W1IjBOYah`+FPAO(p8DkMH8~0(fKqlGFV>Dl)D(dgrBGlg|fKl=^Y7 zWdL~nfF5ih2oHqJBZF+(wfTY?6xXU{ElO2{JAukq=sIG|=pIWkX|de4o^_7@upa#p zR>317*?xPdwmVNcebI1&z<BTH;T?iSbHhujqLaeO`l#9Fg~VY|aus=bsX<XPmCB1r zgL!MteSO!lmYl}o=WCQ_skyi={n%1(H$D|8Ju})U9XmL~x#o@>`*{6c!~M8tg~y>x zdTY66CcLy?lw5Gd{VKPcte+HqV&t%tFETS0Al5h6*VKyU8=;+U!Z*FO>!#eY<Z3En z$FEtP;sHK-exBL1Lu!%eYHcqO97}aP)0-<UooyMh`Ps`jsW-QruN2x)%h|ykBaW*% zTXir_CGi<u23bLr!iz#JYuyIY?){0nTNa#n>}tjRId2~Ro{?o~<H2Kw!LI#{9W=dY zm_ic9<yBT(s@TcCd1Y4f$puYx_Go5xcCpCHHk8FwkEU4dow2o}YaOIr<T7oB6?er^ zRLJ`vF6KHVdH)nnZRj1O_7yAu_e#tDbh2)+u&MP}O}t!PNEnjy7(aqpmI;qug^rhi zp5Q4ABZN~S5zi%=R)r{uQI;S>G6PJ<7|hs9@Mt)s2r;|~@#*Q<HxVOvf*vuLdXamS z=;&!v5XVFeMto+3v@fdb;u0_2Da@j4us3Y%W+F2Gn5xnPd7D~<s^W5H1TwreRzfvb zLNzdtYcLa*@m}^#4%|4Wudz&Q@7<_-zKl+ecGFzg7xR;i_nN&zOYRAa<d(G~F14{x z`L0EggQ7|MT~xI844kzop~gHo2y2BbwlL_J1EY;M8+p(H)7kxcwQi*DUhy-#UF+hI z;#?N;gD7idqrHKpt$7Xez}ulA-N~{0Lg*dIvojLNb-A%?#T#-1*0<+w&oTvoqlM9) z4+afP8VromT%%(F_E|X)ulL->R4p392b{=q%jfMuH9zlySP~10`ddHAxLm)qE0UKu zCNOxTojj$do;<VY;r?l3e$2_K?4F=TUXXDhGk|zxb>=~Bc?;ZW=V*Aeq7uqGJ3OfD zS;IH!G0hgOox7^prS#l`V`6Jmx$Mzf*gWcq5+i)CPF<o&5AKl@ZRu&rhghHmVj}+W zg#ti?#H1VHcYL#}z2{n8=-W0b{Pt+7Rm{G+Sl;Qe#X|f@HFvCN3KxsF&=dbB?m4DK z!cFs*T8l5xD2r}Rw*;LAqH?M&le8o4Qbo3iD7J0-gp3mh9=yA<u&QyZXA50u^pf}6 zv^7|CDi^$dh8H`dXz7#U_C=WFgU~o?ATMI<V@P7L&gq4B!7Uq;iXBbjnv_r>S$s7c zRV+I@(tw$~BR+?zCsg0ae4saCQ?gXWQ`4EExzw1XPUP;F?Uei!^M+aKrReAV?n-fa zPY8=2Ea<#ReMatB`c8$l;RUZ1PTP63<lcy}R@&i~BlNI?<j60XwA%QgK%U<Q*CVq> zA^ZSj#I)nyct5!-%3=rZo$c_kroPsFhN7+%qH8^~wWUgG)#w4?Tk}xb%1Je;*(rPQ zv8IITrbpVi%`W!RN9=_d1yfv3D*KI{r;bA|cFRtl&!d_Z-_ygL*&Lq+=MWa-_(vtZ zE9Hb!FR=##ofFVk*_MY|3GWw;lu;I|yuI<O_865Dw8w@v0FYwlher^v?^0|-3Fk7h z8-uy~GWp{2y5p-IM5`vE#;w^@XD@UQq$lRqQgZPrI4Ab@51qw{jG8m(JT_jB6$_by z-wz&4oZGG@9mishaZi<Voy`cVzOjl>&gK?3fSlwM!auQ279EG^!dwmq_#ROUCnlM+ zaf|OgE!Ho(G!dQ5*nTe>^XBm+%+dt_m1Qn2r->{Ws@6}y@R$w|nnO2iH(KoIG@rLW za?_hDvga~3EbU$6ydlU+sxENOeXMFc*ggT6>E^eZQyCm>g?*f2KK4&n?K&<86MeYM z6{(%_TX?9J{-kP@7rfI_n{$Y+uJb%+LpSEJIn_5WCnwjqQ@G;W3uDsLqf8}n-pFN5 zHG58j5j}U&hFwOe9wUtW!WbJq;o_VDoR7uo+wGcknJFhZo;7&O)6%{a?WpzwJo)*3 zi<dD*iC)q6s1G^BwP@HhX0f(sQXwp_HjGQS(?YZ(FS&kdIXmxcvi&3Jc1!hkwH0^R z6QMcw9kDpR#hzAg`;pm6V?&!h2}=9DDK*?oYl$HlW8Cn&^-~Y@JRtp!YUQdeR%d6Q z*Sm67#e7ot$NU?GNBA0IMO@o}a~V9l+G5{LRVtV73G{eIi7XyhaR#%KeR`?#LR#F( zFva^a<*3T)rY4=nnbe%RoZZf_d4gifyvx_eI@?-?yEtS+AWIZ{5NX_e5bJw(FjUl0 zs(U4^)4rb|%2bv6dfs+na?*VnOCUDoJyw@zpP6|>*R!gX;Sq}QqBG^`bPhF-vQGPk zu9d~c;8pK2cStmuGoVk!v3g{W;$`gUQFXF0=}Zx2+B2%pM_Ue5V&gY<b9)O{i1*B3 zSF87h_KZ(X^@DGi2kr2QnHlb@)a4~{ZIcdV-rZ`WLh?7YhO9Hu;&f8Qdg5Q$vdWZ< zMa0`pxue1wC)<0+UL>Y?RNat!Y-og>E&J6lS7_Ji^Q`KgK-K*|E=@JYKjG;B&%gCZ zCr2SZY%uYzVO@nfvzUZ=88!DDynUcooXb&vk+V=P;VY#^Na3`-y!*ic?A_tf-clRo zM8h6hszcsavdXI70?h!xYTu^Ey>YCj5Xq`~&p}LL*t}aVUK#gxNpO1!N-RC9A9B!g zV5yt#6Vg~^rYh(_?eNw*tPyGd#$79<rrTqAtloZW=ZTGG3m?fs7h#|c2XDQ?R=qGW z$!PUdIcMkj=2%{u`xmjit{ZMjZ>N=mH+|$bVck)dW=)E08oil=l#@4t+Oq@$Toab0 zP``&&i}%V!yU^b_?2a_gP;A6~?i2jvrd<~6KFl)5yP%VEW85mfJg;RqD0swVy!^`E zFJi<%C1PJ(#Coc^z0|EoZpbjhI9BWJ<1pI#;;GlqY}jMVIZ!u7*9TT6n!l=Am)W$X zksmd5vUl^Pvf<;0K#2x5-!7R$V0|ra=XBMA=PhlWk?P8WrFl0LBYDkpgb|vrH+Cm> zXZ*c$l+7I6hM*pEPotze+2&oEDZvZ=PKs)=>#wb=#@756)8WiDFPX=e-Ro*cJVcC* z>^hos%sJS5^mYz72-lgkM@MzUj}=!j8)dWTg2|W|=|Z4|Z1fqUqS=85N!dA8shOkm zx#`L{k)EoF?c2#=6*DTxjV2h(!;|CfKFQg;dN6$LC$cH2^;MghmQP@XzP!mk1KKtW zw7_NVFvZiODuUo`dV3+-a}TxlN86No<QuECH%?>jScs(sHbGKIhO8Z1$Xa`Q`4TN4 zLnqr^L}Opm62d1MOZM6H9{T&>neqzU^%v7ABdDh@Tw0KAW{d?eB86WUGr`QvL$coC z^>PJUaOIL99@J`_`Kmh0->C)|sFUw$+_)cCQ-Xq!Kmh=DRcS3b{2T!x&|V@x4i9R9 zFvoN7?%?H=uAbj)&f9uNHjHrat0nQ%%-jV^`$f0<InC5a0k>pbM2*nZV-s;=v7~vw zmW^KVcNzzFh#2M$yK>GoN)THYiWnnw5<2h2_Dmwq3wPDU`MTOL#gRUs*-=F-@5Ku` z?vdaI1LhGQsIVWros$T{;ne^D({c?scUcud5>Gjw4b{Ac!jri*da&_&5Q{8nGP<gW z;pXzq3&`QtqN$YHaXSEjYjQ_^$D(>_Dd9Ls64-lu5-lp>J`;$Rb<uSkq2olDx+^T6 z&0Ti<pzHh@L)`vRPIB`Qz2}|?)05)lmH0ftzRq5hPS;+;THeoHA1w?9vd#sg56AVm zKU3R<J44*LSNrbyids`*dn_8j`G+W>hl708gPi*_`3Ac|UHbD~c~2wXtl9Y}4jR*q z@14cPrkGGUO;PDg;;$k_Ih~^g#2m*t*POrT{lLb9D`Y)Ma>1{zao+tjD7&+AbU#nN z`Kh-vY4d=n_l33aw_5-6>YZ<Btb5)8+FKDfYWE-Ii$c%io$nRa%)L2poNVr^l)86+ zSM2&gBv(Se?a3tm!v0w`q-%1(io>p{Z+YV~Vl2L7#QO1s!D~=C2Zg`7%*H3)z3%TU z&SjFg&XfzY-qmU)Voz|rSCQiGc!`aFyPFxif?aNd_#nZ%+qJwG^N@2Oylyx>du48l zdEY8ew>vX0>UH}IiO4kK;=*9>F`><hczG0P)%k@(AIBLrjq#gkw;3b*p@#jL$&#q8 zGG_m6F=(vcyz|bKv9`)?T$sp(03PKItgC(J<Nn>W#8y+D`Ach1yEY&`>*8y#{>gFN zE)g2f-gWNV;)b^GVS+$O;MNnp+<P+v)!Iu7+nf`-q}E)azSvuk36XZs+~}@n;ffTo zLf1CAZ`oz{L-+D7J*=4szJC1yP=Za39^ea@#TsnU(f2kMCzM@pG1wN2_<<KI-3xNh zCyDX+%2~%Rg*08Rjn$-PJM+7|1+2t&WO8Rji_o^kg)-SAo-TSj>+*u==+1oF<AsdY zl{<SslDohKGCkErMh;vcXr{@tP3NT3V_!0=Sw|@E7;HWXNVs=N<2*}qf9dK6;F0_J z-ng51c>E`{nB$Yq(yq90#>;N`rE8=&gyLveoxPA1cU!Tk;`6+iszdA@&E2ni8pr^u zgXc$f9~>bDXJH2-g|lP%<R;?{qC@-;Bb=@efX>dI*YG$S^?=-6YNknCw;Z`*#<=}8 zzUev%YLqD~@p~B&cH{B7-Wsb>U{U_FnVE$FYjt&0dEM`L@J^Zs5Xvjy>cEt|Tbv<8 z<UG7&!@@d%g<W3TG|%dgEiZd=9`SXFAVNQ7P>zuHl?w~eNFs(FBeMPuszMYUToX(i zgl|I@6!Ggv0sIT`H_k2bQ-%k&g(M;75_8l*0D^}a6oEMTZ?=E9!C!CxKVjZSs9(?# zN+ci((htBL*hq%~7`DopDWuG-l3kk2tU5iC%)AF1NrpGvvcXPiD%l0_yDD&+puOYg zhrTwDI|jSdXayc|VJevpxe$*IMA~w-Trg|}0zZI{B-`xG?T#d~sI_VY^8yTr#$bOr z&xigkeG`0dj#;(1Tz%R<hS?+dw2nexp9EbuLMyt6T&96wKuKN-WkVWpkKnmrAf*3> zr62%(RG?x$1fY_sgy}MiiBk|KJD`S1Tt^_lCMC%%>l@W%i$VqwsFd<rM7x?UWZpfi z7-M=Q@AXL&A`50p6v+>q7#GEuSa?|WnFEQq#z3bd?Ihl|ABFGz)o=>4WROeEVb#07 zcLIfg2Zd3QV~R;SPg43KbfYJfu&cx`LEvv=D0Gpl`l8jAU*XDhEIP^^IaEm;#NmP! zuX`odw1yc-wV$%;--xp5S4TbnG}csdTH^~N$1Zy&^PFx(_wGh-q$W30J$s7zL4WBH zF^bjc^AKjnSeqEltVj=xKrZfvL(#!X&$%<gGu^zo_g7b`4-&OBvgvp<GcespB)>Qs z&@oY>Yo{4va4y;|z))zrN;uDSj=t|N2hbB?qAUc#8lnA+jZmM>#yyX$36+jW7;}M9 zs@ZoXCU11qe&27jNoQ<%KLEooufKU@<K&p3FK9N6MXpqdMG@~X^vQxl+*0SSCYmre zXc!_~8w6crP&_EHudcG$dS${$L$+6siwEX#`Ag^qQ(kQhkMd_KXsNt3+L7Qd5VNLO z+vE#FWni$BxHU{)9|c`94l)uBrC3-pHwjyIS?ZZ4j0)${f%qJe+QwplR9-vlU($5& zMNTd7aamKGN)}2}`lX46hSaGH?k<r}g%uiPwnQv)7w8rbL=Y5{j|yj35DyhcP=J&3 z?%B9nsZ`;x-{&k@a_dtd5t0`eXa6`bAhBY-8A@GUk!*IyBkeB#(A&+W_n9rtF{Pu= zpJH6?Kd;9d)JdyQQy*i3-nEFn7P+6`sVmRt>f7!{d(ER2adu{<a(IVrMQ-A=ech19 zdvRf<p~(QYw9Y#nu+Q!iT8W`Xd6!k+E>;h#;`{oq=fIZglj^yJJEQ5{?{-oj*6Q^Y z$6oD*y2l2@N1lg|#*aB~Z#z|pNMDO5_hGuSo0@kEv?=LqIDd2e+ITITxb67tu7v4i zn>YKG!MnY0-CQw_bwd({l&*abhrdQWO`(^q-9*1fqjb={LoYIDDjFd4&3sPJ@1oXU z#El^#e=Nmt=tzo2xl~^>FxRhrua6@`hgkx$1+u^l^~{(`MAN=L>vo6Aa9a-*hcn4R z8>Kwtm>Y*g$R3zkM;>k|v(+-bXyCR6LE2^p<d1c9nEPO1?rDOP!44^T2Ror%#VH;^ z{bzQ3n!<Bqm>>J(pw_7@xjj4aZKyAk4G4^E`8lr7s=>_qwQ|<O@=?`l;9SNx<l^(o zvFUynp;mqNdPd)kvSK3hUzhKUR7?=YialR*RaQ?j@pHM<G^iaWO|b>1PN2W%wDgcr ze0VQ_U4JT>b8Q-z^^8**%4`%lEWIq{U8dP>tv@~_HJl;6heFAOLTQQ2D3voly*Um9 zW0zSqFv6v;CA}>pTeMI|6rjtJ4Dk0OEa!?l@G`u_DC)#+OQmJv?L@xk<C7z*xU#Qe zwm{#K)1E(HREddCv!pE3l?xi6+}2A|aZE&~(mXD9DCn9E;0%hLjRZ4}x@E<lM+|pu zTQzXa`p5We6x{3-_#Ed#R)0=#d&$fyxsWI1V9N&h-o@?Ar(Vpg(xUc<>oarZ56gZ| zb%<oYCO>!w{Cl>??KE4jU#3#8U!#i!c&<7V)$@onhEtb=IO;TX18a~3_~^O*Ju(xX zE;Fy*SDZ+%5HxL<lvnU63gRkh3@yDb(5sj@))QM&I5ZGS$1{XikM*DYN<fk*5h^5f z=6E&4>*(`D1%m*~2>npRFHk?kE+(Zg3O3SoSTcc^!K{)AMqpqzMxe?RDh<-e_f?{s z@gSE-dVN$X^J3;`Z_EZROGj;q&$MPDun~1C=QX^0_+Twwr6sIz(=|bTewpi=r^mV$ zDh1vRF&Adwp-kiu;hwUM9g#&L>j<pDpnTCRjsq`)o?HP=UA-IAfD$EuEJaQ1O!KZa zHcggwWGG1)#)umVObHg1xAfn~8@VI>P`bH0fr20gQMCn0C@@&eqWxQ4EEIiL){UCf zC-`Z|`{tPavDDFDUTD%41Y%0|I9F<3zb5+u(D|w}Trp7GlF2|W3lA{T+JC)KqU6E- z96Sfdx{y;5E2V;`Ex_j(eXyw&-?6-`hGagH4vEy2fO4!B%4}J~%~Cybxpju#u<;BO zb`XcRZdB@$5UC@{RElAx?8vLnkZs4+zn3<^=)cFPm<OJHs5jTJN)t_&_5GW{LxLbQ z8LC7AjKQSWsa@fgk3LmDtt7#Vu3pfbl?$tXSW#87{@My+QDTv_Ol`gFtt6=M?1m1= z#A9AqjLaTsLd>e@T`zs5T()~N9j7o)!dYa1UJTHPwrz`ia>v8KD?ja=I_2B>tlMy< zT-?6#d`lI1A%?C_eg8$^F18fAT*7pP`5^7Z()p&JS?#du%yAStpsOL6fN)lZj{1ed zs~$Dw;UJF<_#^X1X~}01!UrbrKbpc1tCtm$>gjbBIkb}VBY?_wEKz6uRiioX*x~*W z@<94rVojG7nt|!v>V~#27Sl3?NsniXh@h}R9g5QQI_3s}jKmU|Ad>mdsu>{-nCPi^ zy^}ZO1Qz&20L(pFk{e|^Wd@$&L-y$bYPz!|*3^zVxaM)VBs$w?{JnD9dFFE2q7X&t z%*y_Xh+zC{pWuSIFpl02QYly*^rv{LW&JUj@uN(m@o+UI25KfN*3YI~mP`iv4RjAo z_~IlPI_kFg-WHeoP%|_*QcH_eOE8oHi%XMJ<kM86K!gqP9`(C#52LKaks*VcCYyYk zNjZ`dyd|kghrX;6@+;Qn*R<qH`o(NS>l{yvN$B%tlh_+(wQ=aFA3yk<lDJs^y0X%- zAud#!+}64uPTiDwM3{sR8?|0;Pf6hR!OZtS+MY`5_IuzEGan|6s-e}|mXb}%f z^^vM1lV)Fh49tjf*Y8;pNJGz-E$$UKQBI-3!)389De3#PoGOtIz$__ygXU>Vs6*r# zosgCYXH!J~eKq~U*Y6%mQYvJM6)@H(Kw<0=!8soa1z1vI-8E`Pyv9kGDH0A=i5Q7| z?<J~)WO^pWfcYY7K+E&_O6o0UgQ-p>FWWv6JxKo)7Typsr7XcaO*(xjx(iQvGOB%8 zNb<0fCW%^>bdyzHTe~bnohi#kQLabe^#jY2PNHR5nw5kyUtsZiCovgD5De*gTL?8D zh6Ax&NxXSs;p{U^c1VB^dPafDLIT-*>FXqnW4z<atKyQNQO&I6Q1nV_w9cw$&n}pW zBqOw!6$!>R@I-Ckpw&kM_(^ecULo=sobI|h8$?9MEKQww50!ltrHC|i4tI;f9TERb z&Wik`>};kKZ}%xNCAO|w+u0M`r1=GcQrTpBS4{EAkmtbA7c@3?{G@3dW5n4LN-E{2 zGF|1X>Ky}kaS1C-k({9#Y!f!h!)5d{hb2dYP}VO^yqHV_Jv5_~)b|VDDAH$Z6qdfE zjIM&iY@v+oVUWAh4`hoKv6u+foOH4;)X2+Di$#b-wi{ANz1fNkWE?Ujzl3`*swKP* z*W@6PfI>O56&+RTB|CD!T3!{QxV@_>f^xV!(l1+gLzcazGua<%mSmn`-gm{ThS0>* zqAMsD^b@bc4hu`V4U_sfBWigUWeHxcypM?nh^~n08XFooMa9a=Cc(^@$Yc~FiC(92 zRXt>#Vw6l8LMEEBm6La5L*Kn|s@D%CK?AgCahEnz;O)*6YYwu8;K~%qw{urF(<Ez{ zT-D?pu$dRhYBsgk^OqC>lJ1InCPjWss#z}yH#2&$6&O7agxg1&kjScWY?ZV;<JBi7 z-?a$#OW+P$0leDlj_K1s5|Kz+iB<0`rU{4f^P=ck8vyDs?-3oxgy?nH_Yn=JY2Fj~ z{>e}6==~_6MF~UF#C)He5)D6>On0(h%BONIYD?BS`V>pXC%qEu51>h`6^pPi9<4N= zz=ltITosE2H^h3K+NI%zxzdXlmI~|zY7JR<THHY%5`$8G9XT{I^-1Y)dd8SgJNe<N z<T9u*l>rtb(IJZ5{HOAoFSv6&$4H5CqtR026`yAfW#P(p{7Jy3Mms2n$7X_weu^*m zHz07e%MMI9(}9||1=dzl01|zd9?rRA8$l|~S+h!ns-$7YiW);M*L$AMNDf!GE7~R9 z@3cOQgeiG+Agub#@eYIJH?=Drp{Zz#$NQNU!e8P2HXczy@O?Vy5oKi)yKoQHD2V84 zq&GEcj8gva-D-c~(bOB79h###@wR;zICFkcZ;NJri`F!DGOhUVXGAA4MylbeX{l81 zc%#Kf56Jow*Pt)|JS9`UCH1vM;Xwi%WTVW?m^Y})UJ)6IT_mv*a)OD^Fr7D_gvVWu zHV4M5hhe@Qr-jFQ7n)EICyjUm*v(S<VgasNH4HU^@sq<T*B+v@)C6N5aY~W{;4+hW zpCBgR^mdEVX+jec0Z+8I@DyXoh8oX<ym@A6r*iDXqnamW#`EkrYZUsWf(Ar4i*7NW zw8#>u4Gv?)Z&+4n!Rd}HXlmv`PgE9Bl~JD3HAE}Q+udxp?9$EXhw_38NhAduaEr)1 zrtJ6`7_W+uQwqjB2$RxQx@|5N#IRemaTz}KPbx>xSk<S;!eSBwWg*nl7)`^hW5nbr zwgj`(VfFWFMDrr2h$bbEX<>oRy1tq-PdS$@$cr_xSfuTT@tKv`WNH*bu%6AY?>}^H zf+%m*0u}IhD3mzJMjnxXjGzVLuH5`9N|s?^lAOJ%xq-6iQD5Q>eKlvLdDW!Pi1rzC z(LGo<7O`kel?&fQ&wO8HSYJjTnf|z|eOmr}`fK8GL5T)V$tSp)U7g89#Q_f#GU($} zs!9E*0W*L`*y-uY6H(SF;(P78bEj8R$^x_n0`K%}P3x@YeV75oS^~rb(&!v()5Ci7 zq3A;>_hYFE<D|g>1u<QAZfMfat}d19>1HtLUib<Y&nLJd<tlg7;wPLAJc2NS39e3W z6h@%x7pUBYESOXAre6TNsF#N;@wz6<<ZKg?p8IX!jf=QJO*rEZfFv%~7_mtIP#tR_ zt$*-D<z<%{W_Y33r_)Q6i|4HA+SK2(JTd3n36f3>1a6Y$Bh9}wvtKL2mD$`_7&e=| zxlEMxk`^|b<r9UIpCtX|gmQ<L=@EiXo33~{a*^g|i(O<yYiQ_)aqOSw_6iE_)>)vq zaas><`}D!-%B6L0`(v*-QQz?%cxL^Mf0{b_j>Dp7kF~?nJ5%o`Tc6Y48N5N+Y_S)8 z6uN=oW-Sm}Jq06N(MuYxW85@zsAfO-(%h(SX>$gS)2{bALN{ftsmb!CE%kP&!8(?c z-ih;6#W3JsEN@_^O64dO*l5PGMj=Q1!Mv7{jRkJ4k!#MR&d(zBbBWtOeOS)g>}L@b z)8DkM+)5zamr7NLWofvf??4rqA^)ky$UAc=8CI>`qRY+b8qO{vDVC~(8FEdKnEtLh z{^~lP_Xl7*gdwv<e<)f%bJKuVLc9#7^-1|iI=VEUKA(2Yar~-!h8&C5E}hbeU~{}z z%sw_cRROcj>)>2f`J>LDxLAIUFOG<A1}kY?&cfZE-uK!L(&ticWy}_bY0v8TtBQ|e z4c%}(4enD#xSkquwFlg}K9!(aIMY=hqNj2#{>*vROI|bP`U61zY-jwL>n0QVmxFb6 zLRO4w;pi~YvjA#Sfq}#Jd}5z7-;dQJG=guL#;;tyKSm3u@$Q97+wJ4n$E=FQXDnrs z68rIQSA54MxjDPfvacu;HI_o5lT$o5Dq=vkjxQW1JUQky+aTkl;+l`;WZL)LPd!|~ zwK(NyLumvj8*7_}hqLVxi}dd4vJ=TL3^XSiM_=Vmd{#<q9Q=wx$nCZq{oJ?Z*vxUL znqss>HM%XxQ1{t%u611XHa(cg??yysRdbYLd59hADmkg34IAHxHR8JLh#U=gW?t5Z z;Wp$%=LPROept?~iYpdE-(SmBAfINz)SnTtr3McFdNmgj&MmDRPlsO55p9FNr9f=T z%%|(xm(B3Nrh%TS9YZO)C!T|x{ri@mubj<kkIvc<>bezoXnj?pQQc-RYiqxC=*-Cy zie<OrnF3$g6j3>hcU?iwIJD>`HPV-_)xxWH7In`U$WDvrhQl=1AI?Drf=5dg%RbU~ zuJyhzdp|aO<<jABHFp+UL8>dMe_u_B2)+Mg^QD@??M}Ie>b{zS3xfJ9TgeD9zGT7> zmoCvwYn8rvvwwKRG&JJhm9Rm?8m%0qcc3a0gVYej@6{j^&FED{rQ=9mw~+MB;NC(K zl~%E=dFg;@9TN@sP1U{%u~=;qwE;+WhqG$UdCqxjizFP|*T<ib9WO1pL7;eCbDLq@ zwBx0R|9;h}T|N&;XMI5w#pYaNo7lL%QCWmH_*?Hw8wKxvy~9)*1=FT*HnmgYFG{45 zcUDYWUOM{EKl~K+t@(@nr=_F1H}a{(U*zOd@VD4M66%^p)~-nuVx+ERRlG5bY1rMC zTbB^yx@=4hdFi2KFlrw|(Vb^xXl-~PnAzKb?Dx1<Typfaj)tIC+eNQN%S)oRX~G1} z_$2Mq>0;x@&|$9<rQ+DE7M(?hT5u?pHL6GC>Hy9_Egx0Y2C~pMpNsV+@@NYkCGCnR z;pJ*eV^}Y$K$ZiztS#!RF6CZ`nfzS=Saq$gYcbtm6__fj3!0d+O<|0pb269CKx}j# zmlHok-S+Tc_-hC<QHl(19?UmDp_a;!YGN(t4)OV>u0zb#S>VPnw6p3=K5}LFqsoAL zx3u;~AG(`$&hjvJ>D%7k;p4WRcmeq*!Vlf-QllOyp`&VX%azE)UUOZ!-e+MseZ}u| zy>NnK*nrfdqT<-N?Za4gWjpaE`s(84+OKCPNy%D@yL~L(V3n6{3tt{P;uZ+&`2jF7 zuo2PvO6BYKbm(K;nUN2<=?Gku#g^gq>A{ptn~~d2R&jR@S9@qeI^37S?yOd5vvsZi zYfk<U(rM?8dhhz_`kRDQXATMLf-0875m-&cbGZVr0msf^+*_?7rlb+$^Q5Taoum<1 zX#QiwsUHkp^d7$zSF&a({w||mx|z*4FAg#tqpvVyq~MK>{4}gFl(B@AsNy7wedIXT zGJZE13SjQr1T+G3`ZX+#BB1x9mnN7w?0V>ih-03leFcHYV8-c~fo0-QjATCjaMsn= zAbdv&MfF6Ae#=kAoGQ*CA>Xab+SeNmY8LGUvRb_FT~;(qST$;2D+cIz-ZJlbBKVE& z)wfCmM@lGSk5KmhRfBM=NLcx)OIYYwMy&fe)07!kkj4;DoZ<o-5SoBF1WE7%FzS?P zUa!)!`%~@gNDg-1TD||h@ux-_=~g5C9Y)pNX}O6t%>Nqd6w)BuPb;OB5XA@6d(^6W zNf@ULGbi(NqksxW;2|3vu0qC`Oimfc_PH==w%GW`=)u`aSY#uZy~oyJ91P@0n^m7~ zVh4Oj>6Lha==JcPx#G9r1XrFh=QYzG0Om1ygw_V3h%Q%O9O=jeJFCuI3@shz-mPOL zUHY<$GX(cRtNC8;@xJf^zR#d}=@9N(h%<c?Uqy%1G9RuI4+C8w<KF;xsf8Z0s4w1G zphjZR-F<?#FjmB%m5YP6kQ7#IuA!~c0J)=Z19~>cywL3NQu5}sj4iw13E&beTcCXz zFMCs5rhq(r1KNKxcen4(nd^6wk(VI>h)*#;YXtPOMy#FdU@Hlk$y^D?*#|&J>Hx<= z);(&2l*Bjt^zpFOw7&X>ET(hM2E+GDTI6T$-nesWKjA<q<R#*A?`x<Qe#f?Z^7zJN z<*wu<HJY~1B)>$^K8w_}e*q5D>;q`{jI)N_svHqNYsKNqmr^sArn-)%B}FewsW0!V zXkT<EP4C^U@_#xFhv4>cVcu2x#!|4WLCsLH3wc<X5?%rqmnprZNv7Alh=LFMuq-(j zN<4+%J)!#nSiJkIQISyZBhBG)jPvGpj&?1|;Po0bR@i#>X9=S?+2GwTX$ZIKWtyjJ zJ>~W<jQOgXjWSv<sgRG)@zB9W8(W~J(sXQ^Avl=~TJ7@zLw_ghZHTCoXx5lLMpFsN z*WKr=AinGLuW{O<y;+a9U)7H63-Bn04rM5xTaLEprrssPJG%DGOgZ6yrJ8e%t=S%@ zlehDH=jfHt=Ez023*K-qmr3!O$>C4~GIpW2SVZ`08mT>p3eOjn?<vMlkHvecq6Rvf zYO%t-1Ik|lT*XTRP19Mvu8h4HzxTGhX*~GbI2*AgXB%<=L47#oO?dVc21r0hS1q(t zpso~mnDVrAb?FFQF`W$Q-hfaBy{q$JQ!hQ=&|R({fc7+o>50n|wa8s`CyZD~YqCva z2<cmwJCLI+6D;%5J0?E>E^!-ir_3H$jnDiaoKOn#3DLGZ6w=sQDvj%UC(A?MQjf`a zzda|kE<g%ft?Q`oIQ2_=#n5Pw-qGXGSWy#(UU{Q-D>_UTCo@xc7ygR;%Y+6!p9rU7 zXJCb7>ul-%UE{4ay@$^TIwq$VJ0)MaPur?2I~r0<-rr{V)%AY18$RKxiG`QO4Hb<Q zjS)yNV@I~q!^0*pFvt<|$Z9zB#l2z=OJsF?o;Ohu;r)=<hr8a}1O(Gg30_NIb|<ok zJE+qZikLPwHYcAA4cw*kYxRzY%vZVM`$sR`+=)-7cyQ?-ZRAqZ_Oc-0=R<)&L}&Q{ z7+_v&6#9m7=SGloA)r>&b{iwxa~$SvuM<mMW?ehO(C705u<(YjY0rX_V)IkC{2`x& z)c2O_hn{04ZuWDf^=*aUD?awfi3Plt_osgUX{1MdZ)_BHq`@`-kuQINcb&YWA)~xw zT$D;k{5rSkI=T1Afz<AZe7ciY-S~<Hd2@3U#ddFRtZlQ-D6s+lA(!K+;WOJ{q~<qK zht_lj=H=?Titk9h?UF~2iafU1`sPC&d8Fp+_>TacHvF~orwuCM+EP@D?WW90fiftS z&`o18KRh2&u2tQn&OvdF*Fet@bVCobtc7QV5J<==mz(eO!%eUa*C}mIQ`EF=nOb2{ z6D?~tzatICvOvV>1H;lnlvP-VLh6LMyI~yI4yDF0v#8i`HZ)qw_`0w`r>W>(@`E4@ zBnQ3hWos_uMpnK(H9i`F0{ivn$x4T;4j2F#Rn6UeQ-RmEj(f{o94%AG2Qvw*t-W1y z(@j~)1K92|-zDD_HH`!xS5ZrYU);F{`J_eC6b*Qn8=7=7(gAA9_f2Fyu$DY+>~S;= zVbh&hx_HYF!+F!-g;D~;g^B{DkE$^t=6Qiw8mwXU`b~Q>Osn#;D2luI&oPf@=U<4I z%V_I{VO;19)0t0`dg3N`MB+r4bcT#Um5A!q_?mbOu^xm~K^WX1_8aRlwdgkXO4FSc z4-<@gKyDOS_0JFHVwH7MSMX*YKeJ`Uk0&ly)(=9bP7j56scESD<moFyx;>CTEOGB^ zkGdU~ij`|NeCV_>?^HVC<DOwaC`)ViwPWIlCi4iRT#H}=6ojKuZeHr@;4YR_v624T z6~f+J&*@H^#5J*U<j(_-wel6!ImUB3E7jTN16Hkevx}Uvxn_i9R|(;-gEJpnq5DJF z(6%z>37@vvkx8BzcZ7I-UGa`08npyxR=m!vO|lgFV5J&mf6K`JM!fF#(u1P)9>1{v zaRq9Kwi92~4?tV1T9wm+xE)t0YW=A0%aj8D8u9wC(dixx;axa!Bm4{B3AkL<QK|~n z8JA^(Lmb4KzbzjM->~3(mBnV&wxpgGO~x6rS$**#{@{vKQ*+}7fTqq~s>-EUXkg4( zemi5C!3i8@yM@}buO?~Gix$6Lr~-}<5rY-a4f!~^3GU;pJg1Y0!t!O=y0}Bwc#$pO zRo-0iwy1FJi-()r-lwVLPq<WbRpF}dvPZo`srsQN)9RY;CMShhEOSr0R_@zkWQ-nM zv*_HRl7$gq`<x~2;4+>~%}D$6y;NvjJH6;O`aXjepLtxlE787N`Z1v4F){ivdFBa< z+Cle`F|o*nhR9GrQ(V$i%>4(_4!8`y-%wJPb-N8~VkvP3^oH*FqA%0+WeL+5w#KV2 z<hUdr#d=k9+||f2#c$x<%r_F*+a^Ax?0fz}qfLP#xON91QqH$0Qq~J??``O8)tT>v z<#azYRT!X>C|#8kyc@NlT3<J_JoquKQKeUR$iK%nbt6QcaMxFjB(B4%eaP~nwb_(t zIhxRPuY7Grvc-?+A!xqxY+$c7mpfn|MF@mT5LQq`ehP6Bf6-Q`AF)%8kBsAQ6v%M> zI1;2$93U<lC|jOogfgFf3H;)!MpJcZHXu=f%c9vjKpienTB(LjSnVjRnUdR135kqy zvQ&GmG%m=waTYDX5bBFNlvWGXt6XshPo+kA8?L4=&=lk2RNL%2NU+sPWY>rhF?!|3 z*bc}d8hxQ%2*h!E&@MbH9MCQz9WQ8Nkpr8hSe<$pdTwjn1fuk(7S88=r4=}oK>nB# zpk5bBJ_++Rj<RadYwWT%9^Z$I*f>HuRxTZ>xfj3=&@nTHMzQem$LRC9&rcSPRoAQR zrsSx<;ATvF1v7I`&Tkwvxf2YzzvDrrANi<`yfaTM;ZI!^M;U!pu_xxk{d@!Gi}><4 zmNb(re`?HVbEKT+GeJ?@zNA?f2e=Z2jhhUOlrfbGzdP7-n%*^AS>xJ)a)RYzoXf{U zfWNmPS7m!D9Gb^CX++q#RZiicHo5;&4};>3^zr1;xjMta#&;R7R@=S>XQfdWd(}=g zxID&1PGN9(=t68l-b}b^gcs#ele6x^+&Za)<fidgKO%GR!l&GkwK^h&?RtTCX@n2F zaHLMEu=-tsOP>+&HL$zJr&k!Gi(!3c-p=yj%Y@8S1eji<ejbZFm@w;49(k<y${T)6 zAklU~X6usNs`3Lc?`PPZ2sy%c_FW^&eif<CH|ver6mRHN=0v?+D>Yvhd8(R5aM#$q zgWYogQn&vkr??z>`+0@Aa7Q)kYX_v3y!1QNtsnf8b9h&th@ojKIZupPwz3a?>9)4Y z_DWpI_yI^K+UusMJ-SyBfe+r1dfq&i+6aRQA^7)|x5oD7Sz<=sp;4IClfRkRE`IO@ zw=~CTK5wc_CV*DAIPk6TzM66KluP7zo8p^tLTFyc{#=%Iwxa3_&l%M+*8=y;^5(Jd z)j1JmJ*}2^Oo!U%gZZ<@A@Oyw<a-}7%Tok$K2b<u)NZxB*;jcz{Iz|5lXt~=R0xG? zZ!+fr!w|d6h@`;QsCQYJR~Biu9w2|Uj{z21L6bTtIPO5bVu4~zW7F~OWZf>#_AA|Z z<)oX+x&8ft`yr@`9SUFhcJ*8``gFb@cfJQP*9f!t^=}D&R$L8idor-YcqE+FZ7gu` zy|o;*=?zo!llSP4^8C=YwyoJG?{5t5nP<%}V<Bh9QCq87&%6+1t4XX`wi7dLdh27& zmE&-i%PNb|pouAP=&Ln%8EoHvpOX+j$;s|J-^a~7y1q+X_o|Os_rI$K2-dl)Qur;f z@O3dSyIM%(;i?Hg3>X)h%tCyN9AvN@^&28M>8kIn6z^Q1@;=veV(Yygdp;|M<kYa$ z&r;+RS`V;5BLWLw=YL7J$+PeB^;=}I%`*4TC0VM9o(r~lO>7kKc!gIruXvFyV~nID zCvT5(8(v!%aZr9U@=^rRgyax-e%zdirG1I7@!~__We;y3RsjpVw&p@eEzNOF>j?ZI z3VHd<wOKj96#1*fI*_%$CdO5BhZ5lCRrF^$v!0E-ehZtRA!vpFsuEf);?G%Q+WNy; zMDO4*RyOVu*PQIbQ+AF4R=$z1lop9T;_cHJ7nC>0cSMy?IKSNfW>`I{Q2td+WoyxP zkgeC#+s>1rGrD}_xJ>Eer<ZE=gr4Q^8bp*|ayKe`ijOWG%Y1D=c@*~2a>6I<V~68j zyG%f#*JXUj89&iCiRprmGye}~Ul|og(6qZa!3pjbJUENP;t<>kZVB%0?k>R=m*5)Q zA-KD{ySr^J@B7^!_xpS2^qlJHIj3i8y1S~o>gk%Y$uPA^g`%=@pCF%4<0sUdmg|g? zO?q`JrX1gW&Uq%7L?NtnCPO8C4Op^2JEz|3cEM35d^edusb?<}&s!AdK7(txiLUfF zk#N=9tz2G**!{ic^!laUZ&-M6V(R6pgV)N;Kt+cOZvznwg-lH@!Z0v4h;uh=<)t4z zf{0W#Anu&TS|98E)XYcI_dBmc=dTC1=o=2hf)B1bW@+w&&u=j`lFB#z#@<C64911f zNXIW?%o`%cBhrjBB95ubLa~n5QLw<ZohsTE+H;F8OO`$=yy-U}Qd>o~ZHUzE&sr{x zWnOUbYTvFMt)0H%t0~VDrlV{8c4vt<`6g$|Rb812_IuDtiHKkp8$gbt{`_M#3&bPO z-l+R}=!OUK%-uvkxo(k9*e`F8#EUiBcD_0&=MPa#vjBFDs}%U^Ei7aKb1X0@qW!l6 zGMI#=4}zgOwqIF(=UOv7`ONUvXxQOJ+7Zx%2~xZ9-ed01S!L8)Mh|W%VAS+RA7W9J z@7?4vy%qG_;O30+3@uo5sMaigBKl-dOafdj-d=1|3Ff(*ZZE!$!>63D?B8rtFvYKO zh8&Ntv?UwYf=*{A6;y0Th%n6bo|8<@>B2a>!)bFg<6yTzNcYYSB9#jHIrW@a;9J8h zc>##BWFlEgudi~Cg{2@&DSzpFITWx;;WLN;&=f2e<3|$OCr#+id_rG$NT!}3pGH5o z?@){>7)kNkCH>@|YpDQ!a;N38L_jBN<NOEs-qe_00$wKUd*RV>Sj(O#nK2mcK5JMP zBsvY~TAz>mW1mo|pghq<^u>G7;cdk?4_i{80rLmE7kc@8iSM#yD=7j-Hu7b_m{_1| ziBpYb`cf5YU(v``22&WY1c+eLeW!YT)Q&E(<w+49O$AL`Ig|27YJ1XvBG8FP{1DLQ z0Fv&zAYyV{pOFee%GqBhCWG65uq>Mr*V8?2^42VZtQ9GZsrsfjNk~*z;#PtbD1#nO zp1YhD8LZ;`W8f7s*FV81p2+o10S|483%o<hQ&7if?yGKA<Y|^0bOo^~+*XW|l8uK* zu7--`fAVjqSk%U&*kf+!e!;&Xe$ZJ=Kyru{`n@0P?cy48VBhMEyrl`|6i_sCO_I+o z86Q|z@P{ruc#7T12B&4yopjriwW(OVsMo`&w7GnM8jK|KCi2_s$5r3Y39ECyVPaw` zI6Do+nbU<UpQ4}tVfhrRQg<AVy($yf*qHgfV9WNf$oYUKhfp;=zm|ly-=RXQT9FOa zf0J#Ei}1We^5`<nSk0dJo={%x6SC$P+W{Zi6d4jp?H24^AlLlw)iKkg`fXb<>W+=p zZ2eTn^x8gruQB6jLI%t^>ghP@?jxGT{S_uHS)&}!OCuliEHWUf9CTxe(QVu^;l%dK zVvueS?_1aL2{?_W*-luU*e465tTz`+dNsmB)4{<fX|9mIJQ=(9DBriqABJ<d`G{zz zwDT6Ucaze|JXA6<ebZ~7T&YN)<Z1a_=ea|VDw0-=^V7RwRk=v6Ib=PnpelWU%IMkY zm~nQcJ9mSNW-kM5eZ^oCI6u;FH`y~|Z)JgfE*hy|i^J;?N)cMy!Lw!c?BWf&(YjQw zzlJdr<Y2f6crPMgmW0cGZX{yAz)JqcnX34j2@ekL;a$$zFF`xBz)9YZnf1Lz$<DW* zoiwPocMQ?>Tczkd(Q-gE=p7%nv<Qm^H=%JO{8~m9bQIV&Jh2$okun%9a#S;BEClV& zj?vMBui6WvjfTZDkstY+f8_9UQrjE^59Yh`+^{*|V($v=+GZz3d>xDRtiMDe+G6BI zDy86QDofYOtNrl1fSrsi!KmU-SphZLEnZezROLndsGaSuq)mq`wiT#;%+)!s22D8o z%p2@%L)BcyRAgQXyu-N73hH9dq}pu0<w<tc_d?PY6jr4!r1NY^Xy_;4not2umZ)0{ zXZ(;6H;ATUzYecu{VTh`I7n#MumHFp(|OdT&TV19RU-6)&|8Smn;C~?U-vyj10226 za4->VG5dGf@+G7WCiSCzlIw7A3?BOA%MpmMp|;cKwzBPEPUegaIEnG>@5u-vsYrh= zxPeS3xHwPpx=;ljl_q{|XOZ&IOlVr;R_VXN{dIb2u!Yt?c|x=xzT_8dS%*l4jy9~X zkLpP-$K|;P)Sb+Jgn6ji4Jf{gs5kF9&_o26HEBIcz6AP~WcA*lm-K_=iH_!rrTV=m zF}(e^UyC3L3Rc{ed|;N@_XMk>N)RIx%uao0_s2w0{A}`m#;y^mldMUOLwO{VGyjDW zF8dYY`)R<JYJG8GndEd<(c;+`D?kyWEjv9j+J^X!RKm68u{YYlF-l*Tj7q1;$i~1C z0p(z`W;L*}tFdqlF9SUc>l>#K5$`>*E3zh4@Bx`?^$b>F$a0S>m<K=RQg5>A$V2Ma z-$-ILv5Qw1pV11Q;^GFdJ<%6VVb9=s70|nBbvz_7oA6pHw;*&2Lf;43fcEihuq*&x z#qBx7nZC=QT5#@UNxo~UfOfG@9*Zy%@e(vA82oxJm8z|KHVSwGUaRIPu}X4ITnUSk zs|_;ZnhJt`t%JDj^CE-Kc?+;_1s3@7#!3_@{6_p(hsr_m1*&&5=fY3Lkscn>K(98X zoP~Fq-d5+SI*Ur*y*J0$NulVygNCPXEB5t1e{Hme4r+G$Z-}2sUOqUa^)*Q8S}<|? z4KNtuXRi(wI(_>3l&-beXp?WVy}wW6fZuv;q_CI;{}14QafdpfIb#a#yXnmTY)P9~ zHsRSxrID~-@oSPRF)zF-sl<DW|5o)2PUYw9?5bGhtN4~uqD3c3#HIrmW31xylu7}` zf!?8MN9))jD?Ci^mD;p3t-&{==pX`ub}a5d_nh$Z><qhjVxhe5vxmiZpWV1WEK4kH z3^99EtCLK$Fr`nFD3`H9W^3kmxMO_Ve2!k<*%X9Y6;JBug|tF`39X}tWQUA9+8j7B zDUSE_wrTzqBH<XI3v~+?wO3@L0auj-PAG^jnd<!&ec>T9p|44p6XKClv;nub`=ApZ z$7YoM7Wu!gX!DBRn?9B`42IXo_WdJ|1Gt+gY91o&JT?f}FTcA=c)pn*s(f}AQgQ4g z8T?cyQLZ;X{%rofv7keA8`=HN*d})u7q0#s)|O};(`Lt`1(E9EhQ0NFY0y#1fBsrk zJwB>oF+7gWq9_7|bl~%sdc@{kH|=6ZsPGo|(RtCrqd_opnvVF{Xq~qt_n<yKA8hFs zSZ&jT%4xC7It0?7RN(f~iNjfbwJnx-0hL*C4zh@9*Ix_mK8N_R#vIShPkwt0St_^M zv%>vRu;oX;FA(GCB<j<Dg2i>gP1nH5tPhkP*I%~!;i~Buy-W*yq6M}_DQMa_t&^U; zXSyP5O(>i+%U3(wC+r}^9b#|t-I`MJMN9VDaljo6DaTMNIO%IGZ)K>i5*w-!{+-g5 z(7<(&=Wc63@wi)cvG3gkHT`TVX|x)$Kf2_~#Ix|v{S;OCry%iWQcv?epPGwC#|-a| zgGdn5axY376^ZwK_XK=Qu^ZMua5sh(eSScEE-%M>rZw<~4!ZQAfNjmHdF-dDL%N$~ zb`_z=i6GYK_pkT)^Jh?Y=-l+WK42k(RL#*VFb#Xn23}G$bM#^0Er_5=4EV`YDj1%D zgJdBC=rxhnZ{I`~SsQ6Ts4lkc{t%M@Eo`%+knKeTz9#UhA=9sL5xYBE*|5=Y$P?%< zSfNw=aB^lb8T(e0JsS)*EaoU^cf@_=F)2=S{P-5^51|sySrv16B!lPkEj*W@ippb7 zSTWn~E{^4~PRK!*3RZXXqqZZh&gootvv1lJq(@k3e?Q&Tb4HSMrlS!*z|)3i#m295 z?LA(B!3^q~GZy@zl(mmY?20y{i}T!qMeX*AzYg!Rp(Tq)-bmXdPz#+BVz)|%JtXak zcI=T>?2hO@)iT_?agMj6cjH!DG>4bo#^GNoJJ`+TvI{go<77PYF3YT*@LMm+TrI4* z7la8$^JbMx(Z#L*25yy1(7q0ixXI<jV!Pa-YUwqIeY(3~kCvJr(J=)nRL^mD@F;eB zOT`x!#S|@byR6+k)E7@p3j~stM|A<TyTr$AmGAGkets43c0X@)i;&f<^=2bAYI#*8 z?ZOmMaB#u$T|U4j%*`ixubrcry@@!!<Gt35c`@{hAdq>LTAk30c>3=O<W^9iK8o{c zgbgGO88Yv?c4fDC7t3M!U}%PC`ypFW|LmDm%SJ+LqQdMmZna5BXy6>91@S)seI{AA zmH=Jliv@P?7hoh08FTRkTbV|kT^o!;A(F1RwMN<&MXnuw5;=~dZyC?l<$r4Aypvuk z)<lbPXcs=`t)Q=!C|~wXUwSyH{<c<G$hkG;2UuO_vx<F2&&@A^Tx?&vIV!y`c!REv zUncJ1>sS0f7?(LYc&R_c^h7mqw3^uW)?sSQM&FCl{3A(uB6U399DEJJyt3RgXH2H- zeL|)UA;aeGak;0$ZS@o3dBe1P=a_f9!?;6r_;|8=rqso3_{QEH8gcK1+xAW#a`9wA zs=>{zts2*-mKGHrr<wNWdlL54(cQSf-!*EDNGUxkOAI=22iLv*Vorkp&C42QodQ`M ze}7zPUuBx@?mnr^7d2ldHDTT#cRyFLw+3;~7o5z53i3h-&JA_t<%O>q2xfCAP*abx z%g|Tc9Q2B85f-5%`9(118u`)6kFTA71K0Mw)VNDPcU?!yzAP_uWG@DHEMCw5Z=&nE z2c0VU9s5n?f0$DK0V>@xD@z<|6!MT^pC^-&nL7BRKNe8*5NooQDSfl`^0xvB<k9$l z0Q_n$^6O{=x!73={&3>ioq6TNVuGd~N!QyY2^pfUew9VKOC?{jo%}byVNp+a(dT)# z&1ZvQfiApvCFM-Ja&M&26PEM*dxY)D2Cvn5o_~PETic_&R`0`Mm4bxpNOvnP;lcQW z>bTXm*wxcm4${&G&*>GUCm-ELAnvWyG5f_~H}-@12xq;3!rsffSOCM(4S(cKqxmD( zx9#GDeY6E|!+~|u={*{3dBM;H{W!iOa)c#TPg~MyzZ*e6w_<kMMvz9x+CA;-p__kE zhf;$ZK`D2=wM22CM?qXrQV}*E{$H2nGRlqe+ANTWr(nHj$o07RM9;ir;fv0Qhjt|1 zy}aerCX$1KF_Gt@+gdE~?A_v{v%=isTHD?3s3v7j@ru)PK!{p0uN95nfP*6Oz@3<y zhjqi-)Gyb%tVKt-@?R!*6;A~<J8Ihq6am}i0ZXPuN^E<)MHat)xT3y9P8XG4{{tNM zHW$+xE>qT?)b4#ORfLV&b4tx;)t>$VZnxJ|lP6z23LGTnq=KHRRtP<>MauOKw%Z@= z0x!EiY<{v0nHF6=I+Kc;c6vqGK;wJd*1~rJ=lMlWZ3tom1#%y_S`<=RsZF%4mlo?D zi^pjG>af$W{zw%DjAN2T3t#^$kUS;mpgbnF7&UJavI_>@+)sw(!B^SFo*(J*e3BGM z@m5}9Qpw~(9#2&Phub^CRc<!4<&b=v5d_^kL&TX68)cZZI|bbWBL~X{<Ks<+^+<Du zM_bMlqcp1R&VOSXNgmqGxWnqtZUt%h=dJ1UH=&Sbs)~E&WA!t=)l-$;dd`^)KDv0i z-&2|UQW8@}sUYFS{;}*pei_c|#J)E6b;Skum#dppI7p#ck!q)qV2*+q2m_+@@6J79 zJw1P9f+0FArs>f0B)ca60O>BjjIOR)csfK*cysWJscNK&zgCns#kII*R23`)nEwMb z=s_;LzIUB$QFoGQQkSc9A~|M%xlo++-^f(3&*ogYL*x?WnpSPfzs=++A+9Yo8KTR2 zS8^Busx?>^1t_TYWeq=H5zR(SU=3vGhgQ;1R`i63+bIXE2b^NRf8kqUcG_S_cQudT z05gPr-3S_*xJN39;VaYsK-eM7nRL#tA^O}IX~G!uS!P5v2cN6rjx_Agk=O-2)1_u` zL(R3gH7JaDt46cznKHI%<j!~XyB_!5;4M@XC-m^XOCo@MD;4YJTu6FAjFmgN%XH(4 z>tV3Q93;vf6F3W5YmAxNj169j7XGtqnKZi=du=XwnDRJ!gf{6?N=~}mRqJ?q;&-X) zo)=cGwl;e9dSPgu9?`D4-V*(RzETM#7xV+ZT(L&juC+%|YO%ymH_P1L2#B@k`E@U> z8e5+Eij{JmKHLXHfDc0WYr6)y&Zi5HF}D~sK$+LwzZlh|rE2AH?<7k!V6q#B#~S)3 z^Cj#mk-F0RHJJ!9_pZ|}tYkAF<(_px6zRhx?3{2q8|nJujg97uo-|HM%AYJz{8<8g z50ewTx|rdnvUd$4!x8gM=KrCN`l6-?YS8p!XkKY=dx=f-XmVM-nB~5|Dk-*_yeNBn z&{bn0L5JDNF{>o0@TBQVq|Sq!7aNTZ8Vm8VDiPd~s7dOfs{<B!u2s2YY#>M<X{D7= z)!(OsR%3n)`*z0`>0_I2S@>xG34zMOu#ReZ!Q9vaEx!HLMjj4(oI1yke8PPlQ3lgt zwK<I<>tExE>3?+F)kaK*<(BC)s5yQVStr>Ek`~#FP*kaMeH-rKx7a>0E@Cb}=d`bN z<k+9E37ennpCO4|<h-YEdZHa7$g6+(2Us078YA@27P~Bt$EW45pPJf^q*5m>ye*ob zX~X-o*&+~pR&^?(z{DAA3Qa$8!BtC?)a^3o$V<xs{_JL%5hv2`8bi4en5hXF$B&t^ zh(T`ChsiE8Zu2tYc*L@&e_=nCoxZS+KW{pAejMg7qqwmC<vck&pP|OtU#YiJv^(XX zS0LS#Ta5D$P%nRJv2&0%)#jz`7uoly^UF$sQ0I|S*v!AJL4L5u^<i`CaVn>v`;c9* zN7VA`v*&kzCO*p9dS+tSR_Ufh!Vlby$~^XmtkCEt60Y}Kt$BGCb`l1{B)SvTh@a#z z4fhli&yJuMw&5rA49`u^?0|<!wS%u_k!+Q_ddacr!t^7S92F$|PAdlS5Ri(N=9uo8 zc;5Np&{jR1m5V+NRgJunvx|`uCNy8M6Z0GkQ-<_da>ebh65rF}mgFKU#2iMf;C&KP zuThpVY*2|>b?pVSy#D0fKiIEXyw#Q!rGLqwevu-PCDks(dq3fbc(y#XyzIVk*t1XV z(kFAR(n?;<w>)jlYae>^7|vnMQH`r+ijkZzCM!0~i<=4Bvr4EN@Qxo0EwmLt2}9#k zqRVq!bpHo<?(#h6h^QoSz7o^Z84Tpk=9in5*~#QW;)g3st~#vIHh*75OBwNu5)FtF zz!dz}w@-whO4}~4*P7?)W?vQb{VBw1m8kQ61$nn^^1x{fYp_CvFqvmE+&kOmewr`S zl&^Haq%1^DGE4p2YB?XOa_%PhVn)&<-h}UbmPFF=1LZ#}TkR9oq~Wq*&RyK@Iw|x; zy@OxwHKe+5ZcpDS3|pX^Z<oK*NabPRvO|G`M6;3G=X3>u;{Jc#a6Op_QZwg1Xsb`i z{((Qy<~*pJ84-fPIdi&cjBZY-9G*7Az*W*{-W+|7&Ak4dR4PGlMcSbWb{k6yoekrl zLCDcTXqb9<Tkr{Mo@kOx=2CQAvUfS_A0XM_e-H&QP@oSm%F|Ytl+2s2+4M{YTo>87 zAY2Ct<Kl`Z^g9XTl+NN9#Fw<gAgEyKUJxfYp!YJINwK_qvEas2(6fsN(7OPqxdr8N zgmVID#xh*c_y>qa01eI|b$!S4iwEd=c9*>wdXniJBa4&XBna*hnmx|x$9w(V*-!iR z4<M&0N1Mvth;qBa-Q}+C^fl%&t9R^5__rucc<4sb4SMCBZi|za%5Qn<(NqStQkDJD zRL9?P#k76$*VCnpa5H*)ugP2z;ps0C;(gvv{>faMw%=TZ<lwKkGB?I*(QfLnA;#uu zg8OqzBYcP9H4nX{EMv0&0Mu$Njt75!%YbE5S$@kTGwZgvF{o9G9Qg_LUspS#rno3# zz$F%;1b$cNU~M1pvkA3{xFgBW#&4~A|Ge1lwiIK!ilOy<-0?OkTaj{lkMs|)_O6F2 z+;W+wK)tE>QO{HA*U7O$(B7zB!OSG7camy^3s0Ie;iGAgudXhQO7cGdGn172*3X1> z*3Z?`qj*Py&Nf|VFf0h_6=T_(bE?J`o)u6z*}vdZL8Z`<>Fu&z5Sz}xNNdOo4U2~` zFhy%s==<FcD%zSIyJkwe)UR}2;TUCrMs;yMP|V>b$mt<67v)A^M4%4G;3|ZE)+>f> z>hN7=GAF#GC2sN`Ku{I5BxCmMKttHKU~VMs_7wikp|i{y`(!^x8i!&~=uO^dPiZ)l z8<&V8WI7>s&v1ZvcJwaW^EUe%`+)yy@E<^Yd_D1pm?rb)@GvLsA<9}O`zT2xh3a#= zn+uW^DE79Kn3bJR_0uHA;Bz4+xr^71T~1nuJS4Z^7I#u^1N6d>u9&Fw$Lto#YPN?> z2aAQV6ydt7u;L4=b5Er6%TL)224<gsfOn=LWeVF>oa#4rb=Y*1P_2J}8SIp<-OYc1 z*|!OIN*gEJoBUa~@Shd(S^Mg(r4`SU;SDW)Zp~JRqzHHn0c{7LI<*I8GMqSMQmWZI zdVRlXJn~~mUI?)DFiq3@pi-nSnwjc0>68lFUd~$8&vjCVg7%v2PqRMbUIJbF48RRb zv6$mO8zh+Mb`T%Xf9b7unNQsFBxlz8nxJ0XnJlf|g=?Ge1Wu)od!*23F}RPf%jLJ9 zm1I=13UZIR$6PL-6KpJ<zWu`B;G1*^$@UQ5XjMUI@V#ywJSQ#^F`N^0o!QB(Bn^G# zzQk^De2DsyQz8EkK*h8Vx3|4v_v&6j9PiCK##q4m^UuQ=oleg($->e@Fo9i;;tdHE zduz?>9s&RRZ`Jnq=nwrV|J#o0o`IBu^+GY!?9o^z@9Soc`J>gyr9l4;#jN_lVYto) zhDL~Y!BPaHK)^oP;O_LgcyM;)xSfNCy4P2<?JJI!0E7iAfq_<?@(wY8{fQIjTC};l z*_C_b;^oKCQ2w^lxjnVbZryKR<BK@x?rUUyRK{hRb$KNUQ%fYQ=pGdl-ihJ^sqZwH zo80tMe%qjJDnB5lJ?HQ_-7$C1iuW0=^a2U8KjL~zqDM@T{Z9XkK$7ndUSs}f>fd;y z*VyGjm*@%ai8VmBZII^u@q6{$1Trg~4h?!a$lxAi0{7~4Dkxw@hEaE<^hBY)RKn?U z<t;Oxy|_Vk1&y;2wVOM4BTtqyr*|gw?eQO=T52_?Ff~f6D^y8=^eFEN2ak|YV9-$S ziFKU<>e@99wh*F7!mMku^WAwvAbzcq75O5nN;~{XwL_Z!BL>?G%gIN?RWf%lc=a!t zUpds{h1eO<1>4&OHB3L-)8joy#@$Wq^mMc?=WN)R6_?dv5y;i-(NxOlhCJE4=pojm zO8;k6*K}}8_anaV=82!~?4ECai$vBI<M=VGB5n9mU3nV4hk>aDS>6tR{rH7O8N)(A ztSuTUir1ZcpO&MoWpQ|~n$<ObZrxhcc0l=#nrBQ$ExX`kJq>^Mn3@;S%>Y%6SNxq* zPPNoeonO4QIT#g0Y@YndQ-caHcENx_lY_(C7;2Q|YGZ@Pro9-_GG>lLyF`A4$+cDg zv8!19y>3zwV#sRi->K^xVX79dflm#B`#t$ak1uc2XL1R)Fb8DgJDPkbw-IF<ovLS2 zjWFy<tFJPCgLUvG9(`Ts;nCcMdom78U3Mt)HT$lV>koqAx0<tLV!rX}jW)rHB7XK# z>#wIO1&s6ubk#+FuFcXNc{XaDpil0jBoYdda*i3)>N@mE4~0v*qe>3<J|Z-J<<)b- z78}`FSgju>eI0qeiMFhxupe@8{4H~A&9({TCPSo5<9rBJML*&F%iD42b03L15$%LM zxxd4h6Y`L9Fm75C!WI@R3q*;(XWj0DmGj2IlW3(*zwV)zDoXn5bxF*ur)SG>W975U zG^pixaOa#FxMAGmIK4ua>ypvLaEWP4C{o%Jsrw}R>FOF7U5_Q5+I))C7;&}#5b|kM zgPetmNxgmC#ig)-*v6x@&9OPT@tB)beM7gaTM)hS4PgNye4i8VW48-cocr?>`tk}; zejnf)VBimZ`k^WJ064xi%<qPSxxC2?A6jUCBzcN7xHAt*KZ}~$2dcghV(^z;<wMg& z7vA~_=EEI6pF`0zG798OTI@l*6lrf);6Bi=!{5G17lS4(4&u1yJUR=;-yU*CpA`4s zXp^4L1#*=4UgBuypeE-$K-sgyZx7juhxI}|S7I?&@->y^M{?2Rq}`L&aKhVx(Remj z!mi$*v*QBcEcIQvW0$WKmaoK}q<Y|%x9O=Gy|EgfXn$TQ4F5OvTq*qTBp?42+3xe7 z!s%;%gdQ}i9UFumwj*z>A3})QQr0r{gbp2pHdhL(TUkv#{C0t^ih;zmJ)HhzpXa|6 zf6kO~0PG+jGWA?<VAY??T+{dcx9tBCLYe;_)Sn~7^Ofm-$%OCUtbeXScIw1$A)ArX zgv4X31|+P<wW1o}&5>`p3-LuZ{ki!f|19PuiSQ4=50TuQqfV?USbX`yz$JLxhh~68 zy^^|ba3R>_MeoAr_2<JBpH2#vm<Bbs5PHJ1?2c{Dv1dB|#uqDlj<7r~=uItU^B&@v zdH)As-H=8hA$5*H5_}GXR^F`3i*NAakLMo;ku@LRK=O-1(J7<Ol^sSV)3?$u{sAbO z?(qO8$_wbyo8oxQ9k5bn99w@~&TrG)<HEs$<J(!BKy&kZafi0m*V6<}LbpI1#h3w# zZXqY2Lc1xI+N3*XXIZ=0fuwF+&s+Z=vARS;6lnFj9rQf3g&3jFZn)e6%x`>m=8vEs zm^z7_m5yHG3s;bWr?^Ft)ZU}x<U17WVY1>Yzy0;*p%$b%!)}<8WM)t0Y0r$f+3{}F zXS_)OVZXCU<XoLi@d%$rvHyYg?Tu)YfMEb^|8f791gfUfV%TZ!S3lqAhf6RW9w~To zA_Cp?WhDF<5sr}inekS%wqO7Q3!7si6}LoxEDbC^^b+BD_Ya`B_A*_1>z%YZUwb8n zi@vRLcwywDfVb|{5moIBquac{^J3xhIEt}tq46w88NzQevSSVUp<Ps+@RhytCnM%) zTz<ji%qe`P&F5r>&B>%G<Erf|f0Ewy&k1T2F&mqk#iN7;{&AwXD2@l7X}i+bUdzwz zVI76<P+vnoXUp$vDdQ8W{S4HL^_UJa1|l@i0!;GXe20S`71Ox=q4`sT@fQNFWc1J8 z|A-!*`&nF|6xRpcNc9B;_akXlynhL|SB8GEX0&Z5>=NJXDG_b>jlAs-okh(0wqr-M zE*NgJdjBHp;WM9-Y4GM5;l<~2`71qder7*To5}`}iSpjb!%$=*Yjrpl?m2i4Vh8Np zNIbF%TEUXI%}L{9-$pT?|7z&!=<pnbDpea=(nWC8AoKf2ExGU1Af4TP!4z&6ScWmu ziy50aR5e2ak(1S(+DqfN2?O<-B!6|ke1TQo`qwOTyLC)d^X?x5`i!RqO^QS;u|M4A zNB5(SfL_N-{XIIzOTz18PTh~>^&|v0@n+8jNXd&~L=T4H$Hm?9p)s7SB>5-V4lfDa z-i795D7Cas`-@r^N))+Lsydu_FgoY&cTj(d?ftu(6`f-^pF&}J?7W0A^5MVc5hb(Y zcu<NT%gSHx`5KD3?d1{#a{HjbFAn=v=#p#59c}1Pset@0;Nw;yFR)T0o8V)^YP<Av zhA5$_PP0O5JLKQx-W>}@*4`Cb1mS^DPI8sJB1KwrHlHaCLTlpA?f?%(Wev<1D7h55 zm`0~;f<V{PL}$cFr@MHvA<qDQK4fZKYaV|dtKMY5X2F9H1M(T|U>@=$sWg_tZc?G7 zl0~N0ExEDBl$Z`=u&`bSvP<zc{QON%PYbpgP!Rvn3UGbWMM!N<vRCbA@LU{G$*aJa z&N*S}{s6<+y`vQ@@Srzawm~Cc4b_MvJF~xvlvWw|{&Gsy{Ndj=*6&Ig2w!w)%xkto zIu(!JvQJsj+G6t7v299dMG+#-rRZ9y!@H~%Eb#$Lmt%IrzeqqzotnJWdPDne1+JSK zZDq{q-eDaCgyxL(NcyENoTzeDU})>B9^ci>{{xU8O5kKaB}3@RTT)bNXAZ{hf08xC z<Drt|Jzqv`Bju{_82BakFv?B;E(JP>4Um&Y$e%_5nMq+#xRd>>Let|6?V#h9ZqTx% zo|;R`bp+-~GXe~-#KxyNn&ZAw%9E<kfft%aM|!I&34sOk`_)Goi%qNf3m-j{an&k{ z74J`)!1uook6D~&XJq&dvIjge>0Xl^5_2lUcN_R1vjdt0d82C%rbR#7^4bcz(dy}` zs{{UIK@C*za)cHhV|XWYYelQWel@%hc!jNQ<?l}=n&}=xLG*FI-YU72i+=fAvFasg z<IX1NE}*|dTljhWoE2u14d7w+5OZ?d6eJ`)3^xZN@wXxrUOr$5-0l`1dWfpf{|L4g zv1eTjgx0v6{p7=NjX~#?PN04p$*sW)+<;s92|V$RU%ptaNxeSc6!?(gA4VHHIptka zAx{$hd-&=8oU>=JA24N;tQorgNY6>y@!|bNJ%1mj_T^|mTe4a>`^VP`1RN(i0k0O5 zzeZc~nHv}4B3=q2aW#V<W`LW!JNO_|LK$fy?{LXXS0V8Z@NUns|EeTxPjwl4u@on# z^zH1vNcP22<fvwbq}(HA=edO1%%qh?U_mbki~raB8-`={ecLedh9#$5;DgxKWVb7M zls8nFS&0`)Uvp@?9pXk;Od(^QE}@s{7NG@1_wUZ>IyoE4d2EaU@ix|`^%#()T_SJw zk>h(o>DyG4Rx-@9HK!b6sUI*1ootS%!8bN=#SV0Ltew4CH@k2W(m+sUN&d?loxQok zcN$+5kMrpZA4&HqfWk^D$K(8`kmd}hi7GlPhN=|WBK%o};ca!o!x8YvRS0h>-Z7O> zobJv6P;>55lp9`Zfb^a3OrY*+3^g_)i52$G=QMk36<h8zjO}Yi(<MXbO*x|IU}gEi zbuquy;OP3np$0@K$qbBD^#jU<z^J|f&5_MOX0lfXH8GfnI67V-Ljn!|&~D}oH=wL> zY~P$OTgul>+E7ED?d$pI9ZyifyG%W=Vr<|GR~96E$n*5&(a<$P%IPlhK5|xL{hLi! znMruZ1y_K?pED#8BImP4eC1CQDR9(QReIv*Q;QbC&mKm0MEt5Vox<J;X9+b=5sCa9 z<Xr*Ye?y#oxGZ@{gUQxFH${M7Jw?fAM5KiHyK3m>2gCaxW}}V;@tkBqZ{%jUSQzB5 z!V}5mVu4TglJt`2Qf1^oSvpw3K?yU!_d`v_WC}Au0UFG%Y`5U<*ZqhHy>v(}dJ2%& zK9{adw=6v|^@;I--6FMdMl{OP+Uy(i{DZ(}$O(SklgCN28xFcKBq24zj}>z;y*lD? zO8r4VkO*a7wHE-RJVfY;*3@(s?VPgmsZ39y6fk{Z>kN|`ek5>sAjsFFefHgm!VYQ> zDil@t(mX&{UZ?z+RtQ!1Ph3pnM#3=Icx0T0P?@A){9T59(RNU^z0vX8DnhsB3L&s7 zkO53aS=>%Whfj#3ku35}IHsd&o(djUFqul1jPVk{%eZ2>yt;w-9T)Y!36;<-!4Ulp zQ`};7c&uE*1ET;n=U9nVI|Jq*JYvz~k95xXHse+60L5?7i0U1S=l3ym^v)Cux0fTr zP1f2qpdT0(x4NkhpE7bexxGtD_ND1^3L^p~xSfncSeAuhC4Trp62_dD)g|C?an;l# zbTe0yTq}`LuzD}GFnVgZ<1&OH?`l>b(UH3jBWIDY-+<~E`lynu8GT8-K};{kKe+qX zMuB_p6cm9#`I&6>@Ou{&CycO?xfs*0&j-aQg1H+eO+ybTB?bgfLCH%^V>Rex?7wA0 zGR%gdzqj)~h?TjU6bbdsWe68qrKv0>Z8X-JzVXu;Ar9&O04aaU)U+t*i0}W(?kMkP zw}y6|+DcszD6~$HxBal|^xD-KqpGtBvR`|A22<tp;UdX)fNqrE+wZi}#eru*F%grm z86COfMO4dwP$_8<93ASHX5-i5J*Axq_xHlN;eT4Ljlj0ZH)5oK%rNqHu28qL^z;l- zGl=eW+1vcFQakR5%RD|oL`j~!#yAzMlqlEX3LF*#Uj6fnq)@y^&7DRm+k*Z95C=$z zsc>@Q!Z|u1V``nigS<w(cqLJT_9j`FZ!XIVC{DNe!vC47{9I-^S|EH+l5Ign?H}aF znS!orxCu<yBXDV3{OjTCnsf19E6GDj)@;EnAa^}_Ck-JJ`81_-h;u=m3MymZ>P7Z( zb(Ga)8&1=H)3XV~06X(hZ$CN8K@@{&Ay-Bf7CYf6sW%gm&%tv2L8CKq8bTcW@BvG` z3eQT^Dn%qI42;tB1<H<5%-EbjHK-w8iZhAatI0lWUjw$!n(xVQE>`8p(P+t&7w<Kn zZT|t3P4dOm7Roh^NNe>x{$`B)J_CO50RRpzqs*QCSlov#$MnpD5I4k0*Mn3X!t|%& zeprIL(V-`shZbwY;V0yo!ao%dkKaPAk$*91en);j(rspCb087O{D#DWX9k?5gv3Td zTl->uA)e832~3xyGNfkfb)TmSMRcY<@ws+Dbr%92nS9FgHEw_meZFhYXYZ|v$Mx~6 zn;uqq7&Z*SJ($CM223&+edcW=CgCXMA#?0keR{@n{Rp*xrg|gW8RXPPj7m02_3p@` z))`ub{*}&Zt3;Tldx(a*g1j2Lr16qrI2m7>D~wWalm|M+wU7@%=ega*cZ%`ZD1q3j zr4%soH8iZwrG{Gb@LjPM-qNZNfJFL9IrZ?(r0DxBolZ*iG#crlG0EheNY8tBeTey1 zA4zJ@SHVu|wqrj{VI*h&q3I0<567eG;nHj|bc#-h$<b=8h)pd_iXxv#o!|gKCQklm zm+JuG9L(5H^>!vAfG3>o1vrmjw%?W+Cr#3}n}QbLY_R=<q|lw55=uD7+1W?hcZs8z zYG)SYPF{hhpy(ex+@yJ@ux8`eTz*Xv7M3g^opN$egF!U32X4MCAe&1uY9O@~*2tfg zuw}6F<IX5)7LXd#5&qQELf}*Ylel|~rw?S+f>}=df-$u4BHb1W*Km%YT<>6O)se?C zdXVQ;Vcygwj+mn6I*D*%5yQ7Rk1l4iky<Rl+_bo&Z09Sd`)M9}h2RNnGe0^hS$AU; z&bB3;AP7BG*IsmJB5<~p2tXFf#Vvm|G&n2tM_n8>r8Gj^K=^9)IZRcDkJZSH%sfMX znjKRb?t2XaO*;jAM){uM<r{5Zz$R;g3z4vq^*Wv%a#_DkalM%j(|tYMyhYX6C}u)Z zqbFRlVB$tVmchZTTa!|x-yV!|91Se1Y>9h`<X;+(1adV?k;QY8A@W~M*CaG^n$?iR zVIe8Cp!|tb272duLlvWcfWD&^uvqjxME~}MuS%c*(-X*Bi-;KS+}dK+GY?yYVsgf% zB~&P#q$naJ$J#8q(w=HjtVie5Q25!bEzsf*&Z$0DAfQgZxcPF2q=|~uD6Hk>o8w$9 zf)oaVh-ohd!7#VJ-V*LUzGY3AWn3r)^hh%X@NX%u+8Osjn0OJ6>v)XHXFSW6bruYZ zZKJEN+2ay0b=IrY<!>9d4?%Mfm0Su!gTDYi!cV4gDX?9p-#2c$7YN;dPJOj|D}voj z*07Ij#;SZ*8g1y~|12CNh7eR>Yw2*yh4!c20uz=3HP$@MnA86dR}XG>K+CW(^e3Zd z%auz$QHWI%k#KE$Lz^_YmGvum$zM%%cw^)B)xf&F+%l^6ZpbpqNVorQ&CW){k~~&k zuwX5N(cYT4gTV@wI!<d=Ww7$kg*Q9Y9J53Q2aQ*4np!F7^X6_-CSk7x-bhY!e*&PL ze_#etf8Pjlf+3l^=x>*Kh#l@lh$d>kqF+8=wd&_fKXqI+*JlbALF#pqR&h$yl}qT) zjWcaBS>v;coVble0$HqNj&Us%ur^bC?LK1cxKG#8i}~86lX#zb!dg5GA;(LpVVCTc z9hL7{R>7)6c>Odph69-JzfssLV}htkdgnX=wsmc7Q?SMIZ}Qavh7>T$pr6K0Cipj1 zDprie#NPrb2_S0A&x%KFqSO18kLm6#C%V8Agfyf!GodjCIOFT+L_U;t<x%NBm`sEo zB@$k(g8R0QhaUPdA3g4+_zCzk=g0#e?#`4{OV-{3!5%@Cj08F7&rVJ7FF%|`QM8vh z6!pt|`$0pl;IH99Z5eK}@326#xC`X4(VF<90>#tc-I7|xmc0OcM)*cGJ{>^E)R#NK zPsNtc`0=`I^o-_2lXI?e(E9l2yd4=si>xlQ(~4%m&|K%&n>zsRF|dLil^7N-eU<Xm zoc*LrwKd@rPPMYsiVqZ0E|Ki(_QI>5D%4cz-`tU8#@Xt(weZp;>}>=rPug3+An@$M zmQ|R)SGcb&I>5qrGL(x1g9}*H3xf<kjpQLgBRzd6;r<2uDg6&Hn7dT<6xp)ZJE?4b zWU?0UHI{+72@)_9rE+k|eWQ>Xbn(?4Ljlta5|_sojys?~wT*H5v5y+c6JZ(GhEMEN zk9d?5s#np%P&@U4?h6T-q-MPw^&8YXWp>Ygy?<=UY#_O9^%I5Rk(L5MPlNWXq*C~# z9+Lt++y=NPjulx<?4TB@Adeq!t=7o^sU@CE!8Rul)${%zAS3C8Vq#@YPK41U5tg`q zi7G%nsved0?K$!a3y*cOcB8OzG)wjSkNL_4yTU(SZ#xKBEYrAAo-;y|i9WO^@UHMR zh{xskT$+nw%j7W|{cR?;1;m3U4PJk8iA{FCN}hVPi2NDnx@Ph!nrf0R5g;VG&W?gU z8tq9V4A}uV1waoF@ETjjRL=!lrOra57cO84jV-qFZ93h~ek(4ZY<<HZrh|NbiR}{F zBj<6Of$w(b5;;)qmc|WZ8e!A#)SExCj3MBsO&ipEgP{5y>_KAvan772;jYFK0y1;H z=!?a~gCXov)}03?ch55AB+O)anY&OpO~-#dFhZ-t?h$!wwMfZno@Sku&r9z<gNpQ9 zh=X>^U!kg0@(9l-3jfg3UzQQVZt}6KJ;gL&VA!9d1#>q=$1?*fZ7xPk11C=DL@!Np zjo~@4mPU_ozx>XU)mJE>vbc_q6NFZq3F$yXG-6*By`zqDV;qHvU(cWfU>m-*{sW8; zzmo=)v;!Snr~Jpi-TH@GiOHu~)j5|~8omb+Z#AuxpGsMek|8wVoXXL3!J1k}HKuVA zBgP)JHnjzx7%t|f<00hgMSF-=-~vP2bZ)fBcj!lvkBr`>k`736GAFY55e5yYWIS+X zn1$a4^TLLl&*N&nwW%b`RVKoaPJ1i`s}p&CY3nSB3+j|Jz>q(hgsr_DHT<_n2nu&S zN}__}l=AlQzm<4%RGql`?ax9LQBGtC{fV7)N@M#$jV$XF`eIxgT<H^5C<_jQ)VlO^ zN`>D>bCMJwGs~bIUJ?3UkLfIX4w!84VZib6n6#1Ltd$mIPKK+Q#<{u7T07>@FufuR zQJ1(Ak1TH)fU@Tw-jiMgWm-%V!jt5{x5y4bO(d|PXh{?a1Cx5b4{HGusZD389e?g< zsA_x$%WgV?oj(f>sSG>iadvY84MIg4{t8Wv_Rl0lu~w16%(pbITG$U#37{2GqY0&v zib-u9J$8jayfjxI6p!A7w=;F3y$|*MKW7Sfcw#67FH>GTrJTBE<-34B#zZSt5wete z4_8R{APfXbYeCy_*ct%E^>tx7!H2MOviJ0RBc7!0XSVPQ!EISsfo9YNed0sANrmdB zvz+N?{PTMO$|2<{=Z7HK<101`xp=fW1W_dy2o(xW`J&X&;Jv)~X=%yMgEX0=(jdYU zGXKran21K}(KDaPwJ-eKQYBive_0n?vXV0RZR@|^1w?OZk+iZD>eR7WBihYfcbr}B z`0BY#%=wDnRZvMK@E|SU`zD=#JFT6wg`3H6p%pW<7$}Khezfmn3Z8t0ox;3|J1pUN zc#ntV{0a)YFe@Tm?QYy}Lht@+hyC8;n}xIh{8h2Z7NM87mh!16RvOC1#*OifN%@%J zJ)oSd+KNt6MMw{1?#BUG^5)P}bYfo(IGZsH9Lx9uWgBV$TWM%b5Y%!Nd-#_>2l2w2 zs^uzjL2@@7bEJ*rBmY0eBSPD7`95U#{F{h#2F-o^@)_F@DxK8_d8(#*6_Aj0m7cYy z<9E`tb7N5a%h6n^%7^=U=C{n7Xf>qfb)!3tnRngt4!(v25jLY7d+gm^h~;ulh~)yo z3*GaCddFCB{H?Vw%;>T2&l>XW!k^vZ6y&lTKDdDfvWOT<Kd6&0iEZX@s1nJFS<t)M zaozpCB&B7>s0&Pg1`NQjYq*K8*5bY2-FiQRb^rWG2yAL|7R|7{apHAq$D2T0>$t(> zYxPPSNLc;O4E<0%C<??mZ|>iJ!2hXrnXh{yc+X6Otl2K59g}LmD3`evvOBZ`!`8@t zD2leV=u5R6+ff~)TH~{oY|;bOVPF-j{(8~}iuW{Vky5)%TBwPM$88U~B$IxB=}dY} z(?`#J!aqq_KVhU@y(U%tO+2uP!H%l;it$i^(WmaYWwguS5E%nmatgon!E$)Wv_Sb& zb%|HV$mCK4^L+^Db|$t`BO-E$;3*Pnb-_LlRbyU4cE3XP+SQD=BaX-ag~wLSYgo4< zyk$ZqCK(~cr(2{_$%9%VeM;xdNIkGLs2$FJIFRWS0|~{EzX9evr}Qm$>ilg3^o<6L zhQIwPkn}b&oiAD{k8T+<@MGxs2V8zL*c4u<AxV?<Lgy8n^Db24C*1vl^8^JW>o0`% zJ4Dv<Qi(qveR$60NwjJAL9x*H{nHdl|JXl3h3u*GPtGy7tct4_q#&=>kNpy@F?2+S z2aJ<{;beOn$XLsrU&ueDgvYhpFpe(gH2M~wN<H*G)QP9OA+$3zDdq#x&BI^E`Tqg( z;69A>#;#~<DA))4+DJVg?2-atLig$sUdXAuOvcESmP0WX1N1TBB;Wo<w;Z;YRnNh6 z*1ms$MCpg8wsvyxKnW`(T^WPNUvRaj*S>I`69h9pamIYMaF;OKf6Z~o2@dA%z9t@; zOu%^b+0YY!Ia+*pmq$>?OMbdT3XO2tzKh$;HAs7xy20<TedRRLzVYe5%r(eSHz!gP zqi7W3BNPmIN*=Y+H>NJ&Bj}dsY4c-qdSf<Q1*zT_yc)e~<;!fazsjUUADKbn!JohN zY-I=zx%mr8s$Ra51G{j(MYi}}Uf_fYv@v|gp0OVzY9!rLXa#;<PHquhD%a*eKu2)* z6OvM=Blg`+GpM`A>^e|I)=Fo#xpjKZ%3FPI<MP62%QJ=|g9gm4)iulK%d;RZW#g@K zL#Ch-?3I<5sDGS_znJ804DKlACk(w(4M+_y0>QyIg)0wXA%1HM<$tR$EUS+x<(!dn zKDsK)7#|nck>~QtlA9=mQR(lEVvef+?G?IK(4J_fd?Vo}Iw_;_sKD|_2NOhNc$KLT zIXGnkAQ5FevMELlWJ$x{<}boITE(d=J?xH6&D1whDlttwI8E%G0gO4dqHR;m<r_5Y zex(Hq4W&TNWlyT8;Hv<RbwGs-Zh$==fG7mEhfO3Hx^vI}GQOYmemO8@WB<!H=OR@m zN*4u^SZH1jEqd1Sq+qDud^N0-?n|ZMiwegG6M>jOEWIMs25aLuY2_t+{i$C+ti!5R z5yI!-ldeSOV;K7LR1|r&@=)twPts=`4+5T5U~JgumBc`fM3zJ$AOCpA8c?^$J0O#k zTVye3coukPtrEgVnw3urh=C!vKb!%5pd}Gu+{`w%dCpV23cr}>Xo53V7pQrjyQhV) z1lW=!oH9agCN5Ipyl^~FX#N3etuKwMDf~Adm~tW(e<d|tXz?$V4;ziwPS|Rm^0$iU z_v?#&>N?XN_bWimCd+wCd*mv>gIYE$HqzDlZvDe+nYiK6u|mvc!3bHkB|m-Eytrcr zq~tyVHF%f^+KPtXJ^ToGr0i}1ueiqT?_7LBrQ}oN($P7<K=ggr8TO9b0qw)-8fNab zO!`4%($DSrsayQ_yu`2HM*ei<0}2#XNF{+vI+KkH8l6FWL8U^5ULsf|=l_vb4FXh{ zBV<_B@r%84=mb7lG&Ow`DQ|=&px1c6Cgrr#%t~Ekzcp=j+1S}6u5Y<XPGVQluGt5a z44beYK1xrr$KS%bx2@CDq3q{*P^)Ct#u-jkC7|oz^UfXT#b~PDy#bq8$<uAN0|j^b zkbi&^TxLmC-EX@$#+&!JAE7iHp}Gp&OfJk14>9dtqx{x%AUm6nfUh{aGXCdrjhGE< zWA<-plKuR)td>l`CH&u!u4_KrO0Af~E}&fw1UK@(N^9OQQ*<7kd9KAD?G|92+_5lK zSTgDQCQ*1Z>Z>_-W%!yfDTwwH=i-baB{cN6JXh8U5n)<tCowmH_(aqWAqxNM7<Bz1 z@8Os&e0dtS#)$SM;V#rBDI&64zdE`deE(<AFsYiF$Gc2t_XbXJx#}1aoQ~BTUCMzo z8w}!2=V`F6v0Q6#f|4G!6+XC{$w`R=W*C(0i32yIQLCE7#Ed#LFc@n23gfPkU8%^5 zf`-n;%!xSM;oLn`drYD*B;bCU#fHNrQ_O$!+s_c+0+=VJTJ^*HdM+R<*osTzQ}X<z zBh-YH>I&jGfFF9W^f<njbFc&a%(v^u(u<xal<<1zQ+E$LTcCTsMTSsz!KgpQF`e%Q z{SxG?cRf-=<TyI7@l8<;dO5|gsB*(0G70{4{FJwkjGl6bz3neHi3nD(Cp4i4nM0_e ziC#UWpmt^~b1oT-Y6`v(D>Nz!DdMGL^%}LdsU3cZl*I*PYuTwzUBE2=?k%UY%lchm z<)@7m--V^BharZ!;gxI?!~1}kgjJ_!oH(a|AYT<1%nAQ(m-6N{8zEP!H#Pmn^mc54 zXpVkrz|=oLM6PTq$dr`SV6DZ$+v(^-seAzFgnC|1EQy0wcJ@d8HLmchbc<b!)3`Cg z)XCe5>6}?|*~*_>;G6p~EJJ&~_sWS_Gu}=uLGT=)f9q0=B0}`1@!~xGHlZ;X`Q)u* zYqSKd`DXF@4iTw-&&arQ(ANq8g;)u)C=S1#K1|M8Gr1b;_viCY#L3MLzXlM@im#pU zQRHnOFFHcK<oKkyZ<d~M@8%A{PAqELn>}6VM{p)~JH&NXM-Y5gvmo*A1q;2f82b6f zR<`@L#?VIjb|74T)4#hT5P)x$OU4tbBpQOMAk+s2DHB%C0UAP7jy2aLP_6ep5kzLf z#RWevQAll&13K@?rGamdykTv2?MN3y4Cq=qZMbfGHVO+?CPaAn3FRU~T&67~L<Za> z=qX_pZqj{Ss-F!}<RSkN#Z+064`L;JS`RMqg^{La+Efz-UVNmPx8DNHF;Gx53*@@L z>U3jcVBrvq2GXXx0KV7gPhszy2lnxF<E_i*z2UL)N^d2&nbQ#<1tXc~&Rj_6SrJfR zBiJMMVsqBWf8I#>EzeQ#dLNK)?z<f+8<)$kC=%{!U?+@y`!3|adB`EqljdV*T%J3) zW#|~bno9%$y|&Vl1}MZHtK#V4DBq#jBqH98q^W*w6XdAO&+uh>Tdf>TW!CLXo%v|& z|C}H2M#uj}eC!t3$5k6rQnJnl!fSq_RI|5_$n&A(Yo_b}q~ZLPe4v>wg7*(l>LYu% z*5aFydeq|g58(Enspfw$nE&5I@qZ$o{SV~y4F2K^Kq&;`yrB4K%$GF+y*otle~SCg zxF(wR-6SLsAV3m&4^;>dLzN<!P(wBJj`ZFI3o4S(tF%x>2~E0yNK=$90@9_43J4ew z6$C6;o)e$<y#Mn%AI|49nM@|Lvpch8cIUqLzOGyQnaw3Q%Mc`dKbQYA)nn0{C0?e> zu7S9e>3Vx4gES#$;28D=TidKG+4j)pMQpiyYbTWPbqn@+%*9h0@EDYANpPn6%?uH% zPmgp)J#4DSYx3=8`^mz#!`!Ty>1m<|&o+D*bNk|m!SSdw<fKLk4_mOqgGX#$FIu?A zS4#S<t0)GcLj0KER&rX^;XoEA4_D{uFCLgTMR`?U1Jv+Ey%P-L*NhQtJWZqB0cL$? z4bXMNTxq`5ed5~>`OtTqe`N<c_z}<XuX4?v`(wH>sB_3M3{d`i(0U;z6uIgDIeeeS z!hnyT#Kz<t2hn=be&xSRkHTiGho02jU$gH~Hn=wYzIwasW>@QA!Ub)e`xf_BB^Vme z_U0#HGrux<PmI2$y!o-y_Cx<==5FP{5r*NmMb^PHYg_YkZ02J3tyeB=n3rTt4{DW; zxf~)=r^7%aa6yeZF2~#TkB9#OOg?CC(Y)#E5H#C!PWjoh^`J7fl<nU&c~?EY24F5- z6#5>_up^ck`4RrAf%hHtI|UZy!8bS^M0-*)*fjatVX}8kOA%<h`F$cNC*CpjSBUK0 z@18*1xP1{O48m9v)f|bZb8<vU%!T3aS5)fUNeY{P53STnP><3Gf+<t0?jdi5-t~iN z8SUD4s~ik<Z%i#33PVp)?}izDy0Uoh!@P*pSw+jYc22ilM9Bil+IknR+?g}j^hCdQ z3KRyUvM1{`?076}ozQ}brx|wz^ezY(dF8KdvClqnK)+3`6jyMHo9c9`zo64|i%N^C zrEu6Tw7A}X?09hN82S5YMZhHlPrJWh&oH%i*K~Jz1-H0`Ih<IW?Ga{<{B1NdUSXel zBkFDdU60<Q8*K7DQT(^X-gu7fgw^|QpuXuMR_?rmR2T;46QgURsnmN}YtOV7)%<}D zZ!A#qS5NNx{2gTTcwy!SruWkE!=ojh9l1g7k({hj`pERf#-4+|pF7dLFgf>a_eq0> zp|INvHlO7c@MPnRQ!MW1U7h+j3WEnanU_0-p&#FWN#Bib)2TmtQW5)9%jJbO$9HbD zy%T*1){1W3$@`_ec;j^WKY)W|>)9BNeYCyFj%%O|$3E+?%YVoI0)4>$1E6vIhpg^@ z54qDl)A_qoKNg<0oqpsd_4PX6jnAi5vvv%8NEbZ8@1fSYE=<w({%#*5lk(*B=d9%E zmZ+$xq>B^WbGNIa?R>hVyUPAZWd?*5aWi;_)^=-ZzyGFFuG7yif@1$Dx_N5i0^2F@ z@T0Y-AU2MxS5(rYxx`{Q88sK^%H%`brBs7(>a*ne1(6GzwAGpG_-iSJtwRq%?G$C( zy4jk{yfc|GeRJW*Ud~tl0ie6*4i-EA0p#<JzN6mj{?D*E)=4j%IR^a((RXd8L~G() zXr`OQAHjP#QKg<9(WJYx5dY=DIs5O)7D=aKA6<*(blG7y`8f0Qgq<3D=I+6+tI}7> zY-QC6O)6F|{Dd50{rh~Q+WUs+moaH~^^8o9o+bqK4xF>lM(4*S8yxcLNZiS=n&_Af zJ+Zh``k7rI)-!COlk$|RDG?E06+N=qY2ESY!8goNfZDCH7?r4*gPG*#rRMmz(>pr~ z+w9k#)eU`|Fgdy#`Nlo#c!rVx%!cU25wT9)n%62nk3v2f8B@BB{3(aDsZNW7pT7#{ zjM_E4(_`5i)q-Z+lY+$u6St0nI9zRRa{mL^d)t12Y>BpaLA^bpxUyY4`YrLZG~=S| z>-Y%!!r2%X!CUVfMwXW1tE25*9;19c(3{HwHy7~@x0(hko+|Zx(799oK`Gqk>x9m4 zj!N*mV;S+M0fmk(`lT`Hbnwj|c;NPtR9U>P+<lRI(-=8|R~VR|a?aW;O673zCP8k> zwDu&Z*)du>jJjdDqHK|jyO8<*!}Qo!8q1tp%zi>l8SMM5wHwSgitizRbFB7KzfW0; z_MPO4B)naCYW(A^V}{P`=V>|y?A?WtvI~C%|M>io+KK!Jpb)D`k=wVayYS~Px#9ou zcMiu6!m#l$y31+oAQ(l@(_=r3?yC@>2Lr%V6f-21GvpQN5emNi8z#X9d&dkLWEC1< zfC10T0M5$*Cq?Hz${qHJ9I{-$JPnu|1zhX{98RD>Fcc657cS~IcJl8!Z}K21<vjqP z2LKGveTdQ5`WsJ0biqF5jhydK<5~e&)7PTMsj~-D@`_V3z>%4c)VVmP>xr2&)?<LV z|1Le8QaQ|!Jgov#hQYj;VSXAgFCc7?0X7IzZ=H}A%aT;gfGM8`E1SUd#_2w_VR|Ik z+#pQR>?}14DxnL*zEIaqQOO;KeHjL1<6$0*l5<nwJ`Nenbb0&~RQUxo5-2&qqOv~* zKp21rSg^qJ@&FDQ;1r7CJXCKCz%UNb>jTV<(R<5vI3aR&>Wl1a`7<j@$1iNF8P7CE zgnatamM%linTi0&bYJ>ioB+oYvz3@%W(K0KxCgutI!lI%WvMH$hiol)171kNh0~fG z%+f@)fZvT$8lz5~{pJRGgET(d-&7bs=3x8teV|$E=L=0l+ewr5%{#6srwpckH2n6^ ze))V)*YNUml1?TF#L{6AMYFwJPX0rQSM?|>PItT@CV8i;;7z6>QR?mn`bFmo5PIt1 zTcZMXJZ6Kyc+xF<I>dMZe5)?w{ZTXdWj{!JV5u#T$1E%DN6%-so{;%B-#<(QNth32 zz?+4nC+SYEGmR`ZRX)RskLomwnnGkHjE@YhCAq>PP)~B~ZRp&v05IQ#Rv-&%=Dx}w zy1d5VwD{-yueXIu*?WhwrKf{0*j|0Vjln}?V@I@wL^<lYG_@kX2;+tJFJbMUyc`M4 zs8pOvl%KU&QdB6gjGr9-w))I;!kBUTp;N;fhWm(_lKMpii=V2r#f7Hbi{^K1SRR)} zAM^yM9B1|^%bUEj=|-?{{nq<wA~6q3Y)<SJtcKo=oNWFFAi!VBDQQq_5m)JZq1pEz z0E}*ex`GA(`lV0lEaLrE0VYYz+2Kq)L%m5>R_dqiFJ$#y{z<qdSjzsD1*#e}*JsU} z@qqVzkKoI5$C1JPH_em{b74bESA3Z%9GaYbKi3X#X=@K~es;S!E^=l{-fCFAT1p;3 zkcrcW2`dYJ?$#EG(B1x~{^i!Mw%*5)ahl<fvu*unad+jFSkLB7VK096{xYDrI3;jq zO6SFAA=HGr^+4^$_`1v0ac;G930p;9G9Q0QdVG+8!5PZDOXm8MEUBXU`BTrY#?La= zQ|cGT0Lm}a%gyCC1_1q|d<<iJs5p6`1#Ev%s3ip!!3=Bd6S|m%-5<o3XMp34u+%hg z9>-ZP7&s0G$bJq5O`UBSJR321mOkS4pV8N%XXGzV!7dKMTBiOM{$KGww}t;l`aj4f zcxQ2#(i@-0<5vp~6}Fux{=fdc!5et>yzCanzP$DF*?ak4j#zEJ+_4^?``|i7CzhzN zcGX?EV?B1&q%gMB!bc;2+u=Tro>~`)fAaM76s-HVOlZT?6Z+_HX_l|FG>Y5gqU^*y zolN@dzT`ItxI5y80CH=*R9khtP*ppco=tCL&naLjNj8Vk@lN;3BQP%WM}c&CU_OQi zxi$Q(iY^!YZKHU!aN|O1tW@CNcCCwBhn^yTnLhe=<BBi;U3BUa+PawDg;J$orU$2o z8vf=pSvO?n3pcQkMjs_vZ<Wv%h)Yq)#nbrWSgG%Y8=+%=`}Uveul{b;!YA-=`GwTy zL-&+!k6l#j`upehzxgvh|1OE#I&t!$_dSL#vD}*-V!bsF-*k9Aq_c_;h^A2>tvzH3 zgDn`>aKE5jfDQ9%z9uAOKa<>T*m2>i-9mZjbv;?7b%BEZA%J;JQDSIGT9&pz^?0F5 zjEZR?CUBRY1RVc7g3ykxKlmW(RV!uKc)w&XRqaZtRPS00*xuh~eYH5#o}li!^-6jk zNwUnRX&9)vqsuQ{#vAad=43SGix=`~KHAb!dQHv_nIajtLVjkS*2;Op^qh&Lcit@6 zo^|n-QLhLoHo0M{@y4x5hVzd1ZCtgUvF$_K*e%i>-JOsYLc3U!lu$fE>Au5c3pAJ@ z#b!4eZ<ZX!Gs6q$>ldz;uG5+fM>#s`@)&v0g4HvmQh8cSk(in*iGa3Fct`Ke6)DQ; zYujvw?g8`T5?){awo&mfk_{6?pC{2T1^Nte)}=e4@tXJ^orvgzK5~roanA%-UwW=9 zsv^<KyG`=|CuWx9p85?1Y4s^0<So{HE7%aUNbeFaO5h6J=48p=1=uCnO-H+1)_gGO z{+K9l(;qj3k&?56CXtAkJuja}V-$1%{UkNgrNMdnMPx!zDa2f$9*Jfid8_jMepofC zscdn!rgAm-uvokcHyCUq*tI71U_nE2&)p_B0jDjzw5}m`sqZs%@pG=~s{x0)n&%_j z!5*(0wuyEf$>o8c;bJ!3c;Hsyo$_?w0i0v7VZfuV7*YK9w+3{XmW~C9+&ZGS{cpa+ zWZO303Se<EcyCx}`Qb}X**Bx+N-t`t2JS2f*)tw1UyJZ@K1HC*@hfVl+)zK;rgxl7 zYNb2O+Qe?_pE5{js_nxJl<8Y`0+HT~3J;GwR))Jfb?HOuKRfy4U!2AXeWJ2{C%IbX zlL_Z6(BpI#Uz~C~IruCtg!&PbQ%*wYHbYde%-?#B`OJrpqcM*@b0{G^8oPQXpW#}v zND~^O=etS8?`4to=lLV=U>D8qz??(g=)_N-a5(<a9xq&cBVns5ALnEoSrd#_ZZf1p z*^#w<pluG_4J>v%-pNpP0z2-l;bT%_^s?yD?;L^o@>LU2&TxX?)+h3~r_<T)*oMNt zS3om;c-L9=xOCrqR~B&I3xg9HQOj+wcK&`|kEV$>gf{u&R)B6J;@od%PdG;Y0o<~x zj^Wggrk}}PRkZzo@Q|}x;|2BIR=u|WEuc#j6tw+!zkkoLNb<r7haOGauhx)l{VY;Q zypK3BIRk%kKiXC%+zDlCat6U?Ma*ov4ZlkogcW>LEbkEzuk>ATlhG2>rK!HV#-`2S z$R)m%dGeBnwYp;Y@t^jiMR9nhjhsERjZ#Zh`{_1r-!g)#GC24J0bpx_Hv}v6O9+pS zKJ;Y#Ze?HZp8#b`0apVVO;{NNVZf$RW_eqTa5EXw!dR-CZ@a8{OVB|?8P|V%H*8iW zoMQhv8vjDKAVD}1_}CKY3^FzDSSU5^lTDl~C`w`u#MM5uQdVW8HpR(#%UR()z--&` zVGG91V`P7XUvib;0-d1mZYiJEz;8sMl^zqL-_T6T)c^uQYdT>!r81`p7Un_m&f4&G zQD!VQDB?9w;Zbk_CC9L*cBB;DaH#t#8gc&34OTx>#1NzkLf+<!%8V>9yo;Aq?d&3? zwz0Z@2KcnvYcq;g(iw5Zd!C1@4;R^N%RT4Anw9wRwATqE;pRKROGp$uHz}4*&wz=e z8(&p~ocU(-#`EoH348X;9&E*K>@{IDb9cNlKY^*U?#y&Sw{dJT#F3PwRmU4H=Z|Ht zFTYkEnr9<ab?#b2<hEgu1pX6tY#NAQewcINj({Q_x#1$&t)CNCfil7Sfl@FZ%`76v zi&(-~xL*I+Z#TC4V)&4124RYF>Ar#WL)7s55U2h7h9jY(*~=R-&q@jzB5VEu0B~Q+ ze>)HYeBdrC4`BYh&T%ugd|dEotXdbX-(#-vwa}0qb<WbNCPgpf;!g3YHy*6ZUvVPO z3t0A^7fDtTvaPv1^rbi4n&+-`@CpHQYQQmUXBjeS3XoTP{v*Sj_qpN^GVlx0Vgdj* zjvchUjUWbUS3wh+n3qUJ6hvW)Jl5<2U>YgnwU@M|Sl+UCY}zJqC_9UnH-Gu!qr`k4 z(#N>R6sJ)p4;ok#m|04?fe=X!g;I~=Zd`})Bzyo627EFr^t#zvwCedQy8I=;%kj%I z4p)u+LbHjdPotap{4XPsO5sh2oMB*loZT`RgTFreX6McKpIHxO9$2#l$P=zlsMIKu zu2-Dwq?I0-<Gp!vG{s9jJPTiGZW5FITO?L5#B;dTNk{~X7(<Sf61lt5%z{)b$$il2 zup`X{I|$KVYTb0zphe&v;|EV*dv*`#jpAXzhSGu^v6jEE9YU1pN8c$-@Mk=z8{X^V zvK$9lVXMV%B$%ff{sUNRNa;j^+S*!2PLT<yiuuk2m$V)mHp4WuAS>MW@R1M1fUthe zBNSwZY|q4JpauEO<0|;mOr<h)S<e#Jfnoy_`_d_?-Vr7fFNx2aq+21GFLD~*_$VlF zVI^!HgxWmztwB&(kRK^UELKiwMTywnxm336FL7sZ_v<awoSaHJIxWLrvJAg7gAaz+ zNM$=;q9n@r33)Q^hr#E`xqG|HPEIy;ZUx13Jh!VcJ<*|<P*hJCkk$C)nR@z?oFV#M zNZ{|&Bu0g<YYg0_Cqgj_3JOema&mIK#`K(Qp;B90ReO8;vX76C*WlHF0RO-?dKi(a zu3o)JuO+PO<mALyV`pclDM_yeYizWLoSmJHqOaB(g{0@ie^4m-%JfaK@z~kfHyH%b zLsy?R9%4EkWoKsvUG0us3#6n%VZgtd&Z~EfSA8tLqzO%7Nc~-rE#}J-;#ES*^oHb} zT3nZ;{{a~L3tltTDBHg5&}}#Qe)ig3<4-qE={tUU&@=f{m1#%&ZPn$q&%eqM_9BPc z+t+eF|DwMAq4)F)+5V=?<tKS>PR?K3ktmh?eF_+`up!)Xbp#cIdhTB+rzY@(z-{RA zlB)pWii&$_sgQj+(bxbkI>^lx@k|KYpBoaq?G2ox-uf|W$oZ#Aw<@5Qh6Lqi$EV3= z>IIhJW|&_lp{!EA0#fx3tvkM#6%JMU4TVmnj$AjB@bY%_IMCuqUA}JdYU9#dI>@iA zbLiufQy~XhVe~>=Iq8a`)~TUAQO=g@7X5T+-_S=<&i3mTGg|r|Ios(!U?Z?^0=IKX z;2goC(8TSG6W0F5q@~6sJDnZwQ|*=AJHpCJ;@MwcI*fzsJADwm2Z29hx9@vfR9A9Z zeLz>|W-mWr=TQnT-sEh<RHWU<b)&o&z=0R|2xyVf=!Vr~RgvF@Jy&C=@2}5KcL_L} zAOFzE;Sc^QYE>a@0Gwb?iM6g0m&)3lz03e?May#4IXWsco(?$gl06QQyIR<FkwLJB z1S)+10^}7KPLVi66{05p0kGfi{1o)n5Qy;wY4)OrAoftl0xwp;G54a?^XD%0=W6Sp zoj=JP+l?Htx}DK$*iwAwZP(|zDDzMo(Ya{L=c;*a`21^|F#_4t>0|D5C)W6za)MQY z-q9&*Ke8jqZO_O7NbmYnQB{x3gk$submG1~5o3K>u?VnQTnMx+wU!Lzy2)^_XBrh& zS6iOT7>^}U0Wds&pyp$}N0b$`vjdvX_%aKGY+<md&{Go5-}BCmwhmmT6ekuTM~bh` zEY?{I3G;Ow(z@>~Llk*%Int!()bygWRe+F&Q`c=m#|D2mz7|&_fu_X)CbWd%mf`E5 z8I8DU0h)aC{)j-$v=NKU=dGe5o;G(fcb=TKptNSuhj<RT2;Op~z_lL;N=?Ru`m*mI zGGF-J(0Gxp{Hxdk8@xh}sAamZek~k@;#q!Tu;d?(mzbeET58x0_(tl5o#G}w^_RN! z>YHi|n%Tn8;}KiClMGsNK#L#d`7)A4>-<<5Dz4oe=ImzDm0+3ZDGW?Vldt{+9<{8v zlq$zsb$Hg8hAX$p_JTF;l8IrwrmDR|oVrTqx79Puhh!MgTu~z4ih4h8QS{mJOJv!+ zgso~|XT))~-YfXr*N7!ck!f6~Z+)=gv%nWg;nAU~+yT`yJ5UMNBqqplZFwJ}@brx` zNbP;73&#VpR)C^fpijqrGgPfkEtgIXq7iohr2)AVQOO!Dj;N$2S%g-vt;w;bsUpu@ z5A!C;Tx=j&VLG|fmyS=_Qpjg;BE!YNyjF}Vk|?Ak4g`v0t}Jdb@KrYQCNM|lBA%zT zA`igPOipk_i+FygWfoZA;gvN0r~<yIm(n8Y_tARRH4<;%=;8)0Ua=9Z-*mUrmXXp_ zMD;GwGBRLkCwKrAFirt!6c0CCMr~wkc?CONh{|`TqlGGdJ+pK-zHTQ1NaU;fI73Kp zK*X!(&WMXz8IkQ~)6#)VC>PUfUYeD}%i?3zCQVT3M^oB?_D1tN@_U<-ub!W2gdK>z ziLH1v+*Ya<SVRP^%_**Ksz$B{nUJ?6Uxzy#8S?PD<g7hC&UG`>r6x2e*)LYzhStC~ zhj^=*aKxc`rS^r#qGrCIg!$_3ef*heAD3WYfRe}iW;Cv?d(2K!oF8#~P>yKg1DkFc zsOC@MsD(9_k5zzUkC4u0glG#<_1RB9@(rK7wm$894&%+{0sE3giCt6&rUh@Z_+U8{ z7&k|mr2Y8v@eR@CF@O)ToyH-=*3(jf7_ZZIp>sCnFyi}#X5<t$x!b+sjNH#=bFKBX zwrN@*Y%uwTCQdHIEdRj>j3fEHsHtTcF~KcuuDexO3MMP|S}5cN&hP4K9By~!;SDM) z!Rof-yX32J4~VDD5zNT7G>LU!C4cT$35yRY(9kv{ow-4()SW%F6&f&O|Bw>&YELgx zH6~kO*5Nz^UT`Qvf1@6TYY&B*nglL2nG=BRSA|Nb;%yy(SCd~!@?0%jGKCY=b;|74 zA11=86H>B9sEvu=Jg6drOCKrQoW+wAcg?`nqpm`!rpB7VRU}#Ut)n@gGf)#u8IMvQ zslhHfi3SNfyl~0He1BOEMx0#<Yuu_?y~_46fbpY!qHHuc)Wesp;_aMBd7t+lTg9=t zT{$R|3LF|2QqLOa^4ISTNd|=hJ}Zd1q1JMd{3;l-)y#D<FDsTBkqF#X&69xJS;2O1 z?p)CCB$&JFJJiOhUJs4?BfyAj<!o=@VkbXMoulR`1Op@Zb186VujGhr!TPLSV6m>g zqP{#yIruE9Fs0_TH!TXi1HJo1;{NJUxc7;kM<me`%a{mdF_c>&z5XD8lUnn-X&9n$ zIWu6#xW0tY6%fZ4-M!CFwi)NutY?1@@$R&DaL9J@7U6PC=Cl$sH(_RxnPt6NC@J70 z!|!zwdk9ett77i&2PkqGW(o|QX4`uUAd?yFX+3N5AJ5~0(|9Z|`C|K^KlEJl_{&xr zP4ZCT#jUl0SgZaOx!E7ru={xm4;#IWM_Ypn7CIYWOIJmzapmN2xoU`b96jcQ^AoOd z5;jqq#Z9tteKN^3AKRW3Eq`zEaXxcBCWbS-J>pJh3o>+-sd~D;lMear*{2MZdi@jG z-^6ek&Ivpt3cjq`sj~GbfcB3$7W=i*+}KlOimBNYb>e7Sg~DYYJtg*UEa+EC6AMi= z9;2)7>J@;GP$!zGA-rTqBM#!;|BUdga+@2JMw=aG(I~$qJkil0<tt%{Y!Dk!5de80 z#;Xd}*_o^V0aSZ-%p>YGGMa5qbs50IPzCAXcu28Cm5Z#fbim-agaLAnYtO;iw$m!Y zD=7l#=d84EW;LMKa(;mXe{HF-_j4_%3+$c`D@ZhkaOdgAsf#O1O%wXurJzt<V`6^7 zhb6C9P8#H#4w(6}VE;M5ObqY~U#QxP1|B$<nKi0Kh`EtR_b{+$)lOhK>oQLj?3(UZ zg4Y!@ZV{08p<_mcsv(r@Kj@HFX<Nm{#@G@d!c~(76Oec2PCF9n(aePHj3tIJ$rc=1 zajWrBFfYth$y*dgakfUNd*lajeSFZ-6j&@L9^M&_5f)i-h6=WM250Qq_~?~^3X|QI zIU5_&B7e|A@W)9Rea_Nexu!T$3OmOfm*>wt*2j36g{8ZvDqjnw3mpsnUeN68$m9<f zH~7w*gH^~Vt5j5*Nm%1k&EFg8haBdq8U&L?CNPQC7=<=}7@$}p@6-ORIL&OR09Y3B zv%{RcU=Z-pO7i)$&_d}EXvzxl4pg8aQd7`$rEoDrPm=lcS+P*HL?2xuJg!DDURU$- zYZYfUyNr&6efSN(Ai`CvwNGSBT>Q{w5Cww^mTkaGngU+ek1XL%n4Kr_dd}oLSkOhG zYLPQ})3?kMl&P~x6^b<&CrxW1HU>976pQ)V!;T8x_w#`9bO)BEZb7-xJn0%Kh@eWk z5(<*&4mEU=s^+vglh2NajPc&-oDfJEn*YScGRxB+uIxhzeh=brC2=8TwTr}y*oxjo zx6f+qr%LoO=xV0Y))7lwV=f;RQW-VfY|cV%rQXe@a{YiUlO4vBAAjR4cg<b_oUU04 zJyZe<yqUqypeM<4U?rgvR0FDh#*cSa^E8+oYM@oHS2G$^^*lGCiKKqJu0m`0jGeFk z@fU==nH~X@HJUf{ij86E+0*jr2U4$Upv!mKo*7%pRhPU)fYsHb853^wx0x{*DVOE2 z#P>2Vz2&h@;Ahnx#jl<q;qQH=Tl6m~%&4*>5)5GSLW%r6If$m<Dia0JAy0uy@3P`q zl&&yn98NbW^(Yc0ek@=jQp(;99D;^cq!L^thy1^EV_U9Sm@y)<WTcY!`YtyD$exo@ zrpe8W?*;G^X-5t(vA5Myj?e6hq37k`?x1v3cRVsNAcFuYG2_}1sNymL7f0D5>jkpo zmV*}b34!mI7ngD`+ALVSX`g_rH{c)mht9M*S1Fl+qf9PLM7k=iFC`L}YOhoxR9p{u zdc?&{#S@wp-82d&&jsJ1MSJu5#50sLg9IEa!^J<n)R1bZkv%P~)RjDbDkN=(^^uoj zx*mL3GlIg`flB|QZpL4KDMd~|+6Jk*a`u%<nFl}}gjCZ=BF&=!uL|$tFkL&AV%od@ zmfs+~P!^D8Mt7uB%&MxRbd^f3V6G3OS%#4j%Bf@{hRbS!Q@8V-A8v~qSPg*c&h#8H z9`i_1wiyOA+sYq8Ajx35GLL26^NiBIFP{J;RV>+w)%#(Z5Nbzqn?%leDHS4KaWe2R z2xs`(g1r4Me`eiM$z%{!r>Bc{kEktjDH%|b*LPai>UlYf^83hJ+e#g2DUpP^a597I z>r-BI$ynKNsd$0r(I`x08b%nbZc}MekgTi5!%%gfYeWjIm2*~Vt>$XE@C3V2dO?EH zxVPG|_S5iJ0yr?|?ZUlxT{|IZdlKu}4*9wL?{ai}vTX#@{k?&xGnSKF)=j#DB*@&U z>Xj=LtGx<rj%Q1>u&0|Rn@r0(SFy^rnGQkMza*pzoqmdUTTHrVTAXd+l`&jFe$}Zv zd-{xnoZHpJ{MCKB|5IosJeyHbzmkwq*CeyTh-}K{(Ge<7gX+|FivJ2~lGcgfi<8Ka zuH@9QYJlpM=Ev)~z#DWKS-8{{%f1s5<pcJMJ!OMH<MECW10|;18g#|c4ZoqvrQS8C zWkuF7d5Q}|il5t@HGN)eIARoJB~ZnhD3)bqqk1icAvhdQx&i%$Aw#$ks2Q(#59fHA zFPb?5#+MG0>fF@lauet~LNd22vnhDXLmgj@Su=~B@q&@=>&F<3I=e$Ri!a^0UMj>p zbtX!e|MrMeFy$FCvii<373xDQci8caNn6oQ1D*1$l#KHbd;H!*3(}5Lf=d&r@@V`? z#V*2&kQ8S|0%8Qz-%UdcwDh@i`vGE~?7`qve^BGF&w73B{fU^8CKQk;L(zLpc4f6l z#o*=!q?DP#B2gg)8wQJ}ikAcC?CJX!<!kk-C$j#ElVJYlpcly@!>=5T{8Ru;!SItK znj&ZxP9Ge!<s3T_qWK7#8De|T+x?m^pcZ34X7SZ8US=}J5sCgr6JQ}}YhTHsNa=YI z?;l05JVa8QG*fsy-?P(c=v9P^04ty7FF;&PQ*xA~r9$-_qkNr{xU8nSlBbjOhf4O< zXK~Z06A2p<h**lkilh2K6{3T1x;PgsV>?vA7X~G<o*hs1P*quAe8{8-&KOZ0wd<sN zM|0T#m^AP26Dy)#e$9+%EnL)>L8DC6B&S)Va@+Wm4HaBsj00L10CPNUZ{v+>=Q;2@ z-K{mmO;i63cd<YgFtA_FICI>J6PiWRu9)8&;OkzY3iLqIOMF0*12Rdh*At_|C7D>( zQ7Q^Lv;uxB$uC^ZUvd*ab>UP%QWEIQ%i^+-c&q~x5TadHl6h&EuSK*%m7oo)ZAhOa zF+KFQJ@vSP+ptAF@Hk%)$d{rDshOQulvCl?Z9PV_tH-brIud`YSW1llJq>}HHP2<0 zabTXcjx4pz-{szFI>xWoHMhC;A342BbS65I8J<WobUM%|MW(he*?{cEs$tNX!YGFM zmNeZ>e|U4NNE=RG>xIcAo==I5#UBPD#{<kn+Alg;T2&ybqS6>f8`Hv}(qFEM@jOI* zQ0HSWRDRr$U8&(-`&Adv$WW}j9$q*ml_3OWsOd|ioU_8*xbV0zL50c}UwgqY&S9k7 z(l1(9*GwzN77-nQon>u!&Da7i>VP`L6|8Ja+i{8wo_<)QjWYpBolJbqbAI)Wvt^ow zp-Bk07NSvnOG}bzf}BjMZY-MR0^kjZH}$fFM$!YNG^q{Oy_6W97oL9DL2r1`OQ{`} z7&c`tm2@c26d~OPD>Dr>fqAF!zvNnXaJ9o$nird=SkP1(Jui!AvNa({umYUj49SS| z7(ZHUNX<?3yHX)m%(XTzObnDQG#m(~q3zGlXI>PamgMVtUc(q>>=O;L2~EtbCGE|# zOyAO$Xc_}Seeia#**s~A!P{i{`RoeN^T&V`mghUsjP=*E3I2%d28&YNKo$tt&5NK$ zL_l;J&CW8CWZ^f=yrx%8d{gqzwxqtp3)EL901{0AGYRsSd<N%vyoWWJ@bMPqJ9_Y* zCb#ASRJcH+pi}$zgr#p{Ci+q4=TpsII%~@RGA(!`#vD(eOp{9B#VnXL)6nln+z7hj zDt<S0N?+NaWZ^(%T{)7VVVhJnxv#%AKMOq-cF*`gGx_QpaRe9chYG0THb4TS3Ny^^ z7uqkCi4m-tw&ZDag^Rtr2W1A84!K=rg`%6;IrFM|c-l--K0(*zz`PyL-j?4tBb=7^ z&PSG86Ysk%2AD(m9l-JCb$1#EJpCCA5jTR9je3`q^;LE*S__K60v?h|&rS5TvKyqP zUQ(3|%PTf`2;q#ISLL-m0qbgfRx_&7?NwX5i|hy5s|3S|ysb3Uzov%gOf)Mk-Kbyd zqCd#;DckVaH>gIL81@ZR@p1s%T`);DZEnL%lIYEBiWMo!Ll$lsCO==`db9=de==*h zH|_v7YQxzR893k#aZ>cl8pu5u;1=W|khp|*Y^slQH}`)CcoABj=Wws8U1apK?tBmX zInDIMAopDFYt@1L&{Vz`#IYp-7&3jpK$}=v=^)tf#c9KlNm#&XLKqUqB4)LKjhjHW zT*$ucE{qr|Es>+ML?lW*V6XA%w8@ySjT`7FXH!fruXDZWq}ih!A6=w;-4>aT)bYr9 zsssWuJphy>V|*Xn2_ygn_{64na1AD7iFEPk^Q`P@MGzz^53Z$;?zqGqT<Q{H)xK&7 zX`&6JGagQJAtha-OZix{f!yWso&i|j?|58?Y6KULZi!?jHmB0DCQ4d89j=aasS$ZR zqeADPAAqIE@WBwydu2@OUGhGv@XZJeuvePFuKonfuF^fxbYKimJgZD`=De6LX2?ia z#rDwc7JKO4f3s>Q$s>VzwV8&<oC=!3c3kiko|?23Xll#CYNi<VkwHYmkdIvF=zWI> z%%jY7e|gf1qvTxq?mC`sL;7*nz(9YF>mgFoQ}BT|I<H^&x!G5^C4fr+xr)h20e~YV zyEcfg`Qo^^F6}&eGc#TEMa+YAuWvhLLkC<JpRy<5(8?w$40d|U!sjm@N0e;2zx*nB zFDFPGHCLncS4B&s_fqn=|L&1ycWBOw8jqy$2m*H~L1bpbZ3V093TwV(^3`--9Dxj0 z43jOeolU~9CTVQQA|(kxVIgd-Dmw5Wn_Uro(X>4gS>1Y+&D`U~>I3r$F^E`6Vi&J$ zsj!OY8xxRv#rfn*F43T}vEC}Dj$5?ro@zgL%&xsjDox*cX1>l9(LiuCY>vvYBQCQh zU9`#esCAn6Np31w-K_3b(loP}P|-8uQ`AJxO}FsnWGpRO0;HO7T<@TiY3jCipbfLX z5-nItVZ*x7=6y~way>D|?#|DQ9Dqex{B`DmPvs^vR)eFla@u^yM)uSPj`vKuYq>X^ z?{72kN$~}w46IeLe0oB1>Y7yC4w6Y@D2lb;GkDt;aDyeTa5^z9WrSQbqDUK2q8~1_ zO_Z}QG|%Wt&Y=8Ym(l?^fW1mWL<T&PBd~4~iV-MU&E#?CIQXh9Qv2aZjjok1U9Xh) zWb(s8_QoKS1$zWocN`P7gn<nOFJ$96ZK$~iQ$993Vn!mDkm(dILx%#zj2K0FGk=FK ziKW~<VR_VJqDSJq@yy!3i>c#oN5AhNg=te-k!)mdXlTPuVW)x|-Hjz^NI9%iLw3uI zU#-h1#SFN(F1IrXu7?9=J*LT6n-=|Re1G5h{@sH*S2(MQA}%yNWrNBELTZDd<qwUn zye(xfUbC;E*O03>*_F_PMES;)F}s?VTZn0%36hUrjTxK7MTlBmCO#i45);XekBn3B zzZ=Ih!06+6az*<;J*Iq!u6+_Hk{(oWTGxocd95}>@Mb}jD6n7*T5e!mG?-e1=mll# zXU)+GIif|sS^hUQ0OYLfyRJ&!q*eY&Lr*5Kiv^X(Su7oJ{I&^_gtNs2_Al;CA75DO zzP<DyGe5JnIfn<+w0!juS>jXie*C4R`+cBZ5WVX&v%*maDiSK482tmABM2Fk`^>+K zJYk%-KoB~c!n&Zh3pl2XWS?=xf!fr)B1P*`*LgB{I<oNL3B^$Zgn9{m<Z^g~i~?5U z7-=jXy*`AkP}WCW@rYoquMB6h7bY-lnTPm|YSvfbKTe~{Z29%b<kDH0w|ga%MMch! zRtnkUdJOVEsLQ>$(k`_X0`Vq2;|kNfQ6t{X9;8Hh;a~Orn8%V!sm!8Z&5siM2>y`8 zmjstD>`9@cVlibJ6feu6?ohtTrHNZMa0!oi_JrA=0~E~f5BLfaN9gXoHG=rvuyP&k z{>30o46Ho8J&!HApCXs6lq5z1iPyo($Ik*?snQ@&d@v~HB~(k}mh*%SH(q`K?+$56 zfcKFQHc3RE)*B98b)?2o%TOn4AK6lU&ZA0qNF52rugm86HOU_qDiEg|s4s-{vBe&- zsVAlJS+dH2>xs#klFktJLR*~Ay}|N#V`HfmOvd1!2T`#66fI!B7aHZNPp+A1f(>nA za_vc_`Zs>6#~`K)@0CAwX!8Jp8+ZQ!I40@!G0@3flyS8B`b;6Rw04;OCa#E~e$KrX z`3k3@u@0SScS#Zi_h>T&NNHx?xy4}meZv*r{{Gv$xMFA@l6J&aRgm^W@#Xe(^sdw9 zz?Mg$W!wc5#UI7wv7VOV{&L-V_FFUGWZcG-9afUHv+KKRsx%vC5plDrv-WetB4wNf zciH3bCc(uaE*+AB36tk;R;&ZInIS33MhK~g6>DRy&Vc?kngms+@lWggVJpihadDB~ z?HfnK4z&CWrv+cCF=u0xI)-i$P-m8Q4}mD}Og0zir;LR_gRHDRqJb=<E|k4#CMs_B zk9wiLg2wOf%dbZb0!>`2abk|Fxfm7QrH}5K!?PQ_7PSfy^yl-UK&##@9<0gh7lz70 zWbG&_!!tRJPfVTx#C1ddN+ES_>s%B|pAV&zPO8q?k|h^-;fzx%CrloA?`x3g)0yyB zTu_(jiu34y0Km*qR0N<NG9<(pUnN0RFa7L|TfNhbk{ulz6ZTy<zOF^<uG0|1`QNX7 zxRef)ph6isMsK{<dzbb5m~}iV_BKWd%3Lizf2L1-=UPSzcYBr0J(QwDOb7zWd)zu_ z*gTs)MakP$BfOC1p*{g(3cE&0&L(;p4o34iAn(Y|LOdWef{h_AREFw<18zc^Q<#}J z9Ls`QUXYqI#-uVO65n%anx9g5j+$<thq=C5wwUOv3#BNfj4KL&!E7-QMUs0##t0%H zx9UZX<S9;TkmYfyWN4A}D9k&+YJdpgfyoaW*(zk8Kp&LKNa^<NR8j@4vih6sPCPF9 z48nw0-}4Fp^Y$m87c=J#uFWM*bG7u?l~W6bm_kS6jYrMiA!G}FRrEFPB`$3Ujj&3v z70s}F@h()NS+<2n<QRI+geN4ZT-sQol;u1U(#2j+Urv?3fBWT?4_qBzvi9U<C~$J3 zCvFm=CpDMU=jHDi3One_3HAp01dZXOpR1?nmVEPE4i8C8b4S-MO*|g_e)?+QP;>1# zf6nb$1<UFH4av+V+K6$uF$*iG=#q~>&J>Y5m*C##4&7m|@oKpkw`JIbpuZO|n!XLR z(&O>><2C<02v%=&8Q;N!?-4$=mn3;1I6+(;69JeE)m;I)9aCCG7L+Ax<;G(L_xVs} zx8OKzl`VKtvO&#V@i+$FY-x`j2(My21p*Jb#8zf652`yrN+|eTOVHyNk36vrZy7_n zNDv}pl|NrA`=mqX8F9Z?=?`*z4b1ST*curgF>apo!K}Eprz@d-Y>a<f0AG_#Lbn~& zHa_w<bC(dB8U1vKHBxjFLGtkJz<yH!Cf$4Z?$MTbn<frJM#h$tyCS(rbIp{?`=GiW z#FeuTx^5WmF=pfGg5cGxbj|ZuKSOoi^ucQc$$hHR4KBJW&`L52khBQ!Z~DmctBG%E zHzg^<;R~%FJm)Ed3266!YCa!fX<;x7sd*zi53P+!*?hsfneFK6{X>ADl&w2YYjIrX z8*JAFPk}{?m!td)$WzegA&|8YX8t9A1+@bU`ctS;+CjQ%Ldu}RhYwnoTfU6LMq4pD zwjJ`aE~DsD=A)8gDRK_c2T}tNq&s%d{E(FQta4+QHHVL!m+Ub22ytK3uQnxY{Tm|6 zAbL&v(r?S%TZ5v!$OqU{^58ehGS4XWDf-dZp+r@}5O^uRL|~rOPz$tm)XIal<B7?} zDG2w&lR{<}f=z7nAXH>%udIGK33F90ygQ==fZE;4sM<31i34B-3}5G`W#Rfx>mNf2 z3=FV%F(QLFzX||P8Ryd~5FOsh)&T=%EqTwR@dxuQcX>Fm;RnjFN25L4l|#JGjEo7* zS$=WX6pabzjZG?KWo5Z1jt7G`9FV!W*#WihtEy1PD5F?ba&gYJ!G?yMcbgL5_Wf%$ z2@I@uUl76U+}s+IkyXsQt&Q0uw;n5h!b_()v*y>*SpuU0Ny%?^TtX`${tpv-v8le< z)0ci{qclmd5N@|B0)uu_FR0zDn+Bqft9|djqihZmpl=pCzm}Nd=C8*e#%N{;7o^I^ z^z0T_O*%f<T|+1UX_kwh{22>dOcy1lf79F-u~YC@mtr_qO8a%#ADLKJDrg{Oi{TaN zY2F@=&R&BbU_&vrzP;`1cdD>^HU5GtyNoQlqpoEx8&D{7{fE0#B>Meli5*Bm?gK|Z zIoVk0J$8(jRSiQf-wEE&izm)dlWS&X1ig8quL<kD>khkTb7@pz<+-qG?SCuF_%a5a zz0Cpuu$ocC+4zQ!tcb-Nt-djmU@U9{#fPdCldv}T_U<CRdyK~MhFS4{Grix8a?oHj zc$K^LGjCd}CC69p?0JC`z!UpvMzcLJ;+9O-r?#Jxg7wH>xxaD@H@~DLGlvq)z7_lT zKg#jl9JC8x5u2%too2J-w>`ZQdKa;lORxAppVd6W?!u3NKyqioQ^_lBzj7MbeSYFT zeb2m1`klI|XC-%Jt2GztxthJZ^o;M+E;tl9dr0FK@tJULEWeZOai@mYzl+1PppYJD z-2suaUw-q>(9J*o#{V5+(@p<|annMD(=W}IlqXDo=k*_+6~&%9GM)7+4z8fn$7B>7 z3W%>(xc2H*JP$)ZZ5NC!j-M#FdGrZZP>}9(+)XzIxe@B*<cx7vP&oY$;8W93Cvw#^ zLgD}8&;NnV!Rc5K$D8l7-GP2HW9RteYyvb{vE}1iXX<ZDHwSR1W~4Um<OrKYO?a#Q z0}u-6s<HjdS*dtyG#RH+GrRv@(wM8Kfs4^{{J1&%r6qd$l&wK|!qS!g>^#kfH=jkO zR+b~2cS!E1D%28r_0LF<$LuAG&96yUk)-OyR68$e7+=^j_t|GWvVDhj+o4D-4BiXC zxl;wA;!6}<9@E((>25~SZsrB$&H--R<mR{P_y_QdBF$e9Q?oL0wYg`MT+9A)5iiT$ z*5K&YP5I02Joeu(^4yU{-Ei1!J}G-u?LvcIHK$_$arK^qw>3c`k6Kv)zZicrB>>z= z=+swDG|e1hB@#W7WIT3T6TLN#06SIn@ve+n<S}xlHsigUeU{3s=QA0rsKxT-_T@71 zUF6Qtq~hYf5E)-h1z-M<4`zp12#0k2sux`v_@{%`8gjub^WKg=!+Bicc@*#E6wl{t zCCcipp;~hFugcq+VNo-#zTjDZa*>P5@n*t`Nt`^>)jMJ__ZV&VZ38WpiaFR?I!2Iy z9H$fiq;Q&YXqI%c?Th~THV{UkXSeR^5%8UODA~}74np*qj4R`i4Y_y}h#n|GA^g!w z68B8Tg*{SY<VT~Tb}AU12_G>hfn6KZG4`R^(_4{QpZKk2Wvb23D@6{mx>o_luDa)O zCyn3sbkSyXpdn}<*nL*yefMWQA3y@wr-#^%-Zqpb(V8q3CFx4c6_gpC$2-k^TzuO+ zAiDS+wU#DVKH+j?i{UH8et;+&8A21whbtJ%bhjRrT#|U5-Nvntzhe556@LpaxK<Wv zGNd+dm3RQ-UaVeaZft)BgAGqCpl3D2cM8O#&~o4h_2&KR1^k(^i52DmY&X1pK<a@% zB38@@$R@K{qe8AWu=Gz_BC`fuRz+@YBb=G9#)s>&w{4@+pA^vUV5{9#rExWE)p?0R zcmSBBU-Zs}4GJXgbYGsA_i2^_Q-!CaGM(Lv@`o#I44Xmt5_9g^Z{TqwY^c=OlpUr? z_W(ic5R3EbtkSb~ONUGQ&W78Y7$+-LbVZKcBGTS#!{cEKmuXbh5`wcuS2n1kDPQk? zrHch>UNHZqLXu#d22H-}tpG(*4~r<F0J~hoCLbU(-J{JTq94Y)WVf5tCOXF)A6bxd z?78qCTnsaaPm&vW0EJe)4E2I1UYw`)b)FiGnRY$oE|Zta#GCOQH&Bk&=0IUI`;-sg z1$qNaOg!JzkJFSNYsb8hdS82|$A<M-BsI3-=qp`c=lU0w`&<02-rWJlry?1{-ND_# z9nM_iWU0oW=APbD&SJF3mZC%Izk;+~brR3xOEil;ZEmvRJgcjfW{dqZYMh+BJLxcj z<Z`)bZkq2u0JeF$xm$aOle0oWK>;26cf|BR*uTH`4NEc*ckZyfK7rwx5jJq$w}7`F z$~F>coTHXunrGpUMGpzyJXnrl0cgq#s;o;ul}dJJ*2uKU1spHe7XPCNe?3`lmfJG- z5BewEZI&AGDdHA3rU=7XbA<r1eRh#=4jB$}R55gV`o$}n&<gWV-1XI^rZ<(iG%_00 z+9i}q3f|0}-O4R|cL~d7Pxm=joFxV2*_Jv7pbNe9_aA{S-S6rmEa|3t^zh~H_sf@k zvZQ>MF#p48QR|r)m&FQ`6s3lmd%9v9Ll*J-U^a_1?wOK9M_1+>*0DWf6fR}eaauvt zJgq4Ld{3Y6ZbCWVYXI#<M6RYmV+=1^dVHtOmA`eyy4o^6pEYnjoNDG-{_%UAjobi< zltyiDn1DVqcXXWp(9mQx%4P;D<FA|E0xsB?S)+>^_FbMvOFlA-JpMEjW|3)%vIL3| zSZr88X#V0tv3;YWfIArryIeMn{n0TF=7`E#<9`0CxJmYu%;)CY3Krr3sE4?}4{K@& zk*4v&Y|^TSI<Y_tjCwp)9OuK$lInC6UUZKrEp9_t<_UtrFxz#Y5eH;vy)C-@Rbw3} zQ5TIofPt}9YDaF>NLlHb5~_a(XiGWJs$}Q-aK{O(s}NKPTH@rik_%q2F|OxEYfdz_ zyZV9>w2E?vBb&)F7^|T{Hi`SXl3-ptNNe;FKgDv6YKRRgVZ9@zs$Xkh8i&%<grJ4J zI=I*3fFJ=lXCwtaqmrl*PmCJGYVx*&q%~jm#jKio4x5l@yc1QZwsKhRMi_QvG%67h z#BHurk?I`dz-4GBZgYiXmV3u1Q)*20yn0XJ?8aDyG>fhyfE01*WFdXNpQye;WoxWN zO7f9{9TXR&ggran<ky*Rz)a$;4i>1+1MxVY8}hHDpOSL83_^K9bh6PQTWS)Oih;){ zJ6iRSyk{@%EESN5)DGtwW)71RNsHnol8;`3?JZ?XRk)ysN8?OaLTXg{A&9NzG$E~O zhRO1=12<6)N%x#6Zg0bWNaJN7Sti858qzXh4;QEXV#|8azXnVqbz9}C4HCTxUX_@N z-x@pyr7>(5>E=EfZU6&e^IRL_6~!I8@+nEBWJlT6?!Sn7=i~AZp!Or_P?s2mv43@5 zy&ToQc)uUx>h$aAjtc-3xDOcpbmYEytjg58nU_b1BOTJykt%STBgUo8rQ5sBz4BLi YA$@X7cX5z!B4r{ab?!IAKg)ps1tJj!M*si- literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Normal/Attract.png b/P3D/Content/Textures/Battle/Normal/Attract.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f1fc3ebf49bc90579329972b24d8d81a8ae606 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GGLLkg|>2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{LzR_IkQFhFF|FI(e^Xvw}$L z``br^Rz<Y&zSz{1YIZ`Z?*Z4#I|szHHSa!ICLmxsPa^n<DgU{rb<+>`PdK8lDtIA# zvqEf}->0AR^i(cpJBNxntW>*NSz*4+b+1{-SJ{HcZsN<=g-o4$(RX&6-IvzNrTz^w z=5?+-m1GoNw)lL*WcC~XL?0+C+&$F!<@SZn2}gpZZwbHb=V16Cs<KQ!?optJ>?Cvl zpTa8lzun%yp^c$|_n6_At(D>vn!ok5Gq}HEwU28IzBRLc2hbx7p00i_>zopr0QxX| AkN^Mx literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Normal/Bind.png b/P3D/Content/Textures/Battle/Normal/Bind.png new file mode 100644 index 0000000000000000000000000000000000000000..16eeb2cd04e159762e182d1c395b6d18fdd349dc GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!3HFEH|A#nDb50q$YKTtZXpn6ymYtj4^U9L z#5JNMI6tkVJh3R1!8tXjxUyIwxTG{CGhZPjKR@T-@`p7H49uOLE{-7;x8B})TX@@m zhb^I^IWHjpK~6$;Q%SR$@Q*!?W-lt6u1K2*o7{7_*KqTI^agvWR}wM~wGopvA3a_F zL~kQszfPl)!`eOHQ!3X0?L`3#jucwfS12ty`|bBBl>@gwKDy3-f7X4=7ET5wCEkNP z4Q&B72R{D16T|e3QH4dAq42>o1{0R>_?LzIBWKR!_*mVzdi}PvruJ7)%I)Re__g{n z%dDClzy5lBUV|EAg;>GYtu+j~6~+vOTqR$(Iu?AL`fdH~qRS5!TK(n!^ZC~EgTjF` zfo6W}DBfS(SNHdC<h{)eVl~BQ-5bScvobNs+Y}TFE9Rm&7|3y$_&8who^L7{ObR-k zp4p7c7!KXopBJvi_#<gWBtu`qD(53A2cG_UcsOfAOG1*|gkNGnO>R=EkAFLqE!{X_ z)en`_p3Uc)&+|2$zw+Zn_aSTN;DhNC*|vWAIzjR3e;}LjfV9LfC69V-)^~H1l}@d< zn5C8eoimF2-(P=Swt06qJFHr|HP@rO;_b)s!v4dFhn-~-wALoNa-cgD$gi@F`}4Ri zdAq%WUazM>+C2qFm$PM&#nTz|dyjLd-B<Yd@Agg2e(%}Ke7~}1+)nciZC`qKu^QtN zyM>+%kE&|2go0EU{H-4*d_Q!diGS+iNQNIXn3v>U|B({uP+fRYMxpS+t&fj4+eb=0 zv9;WO<xg<JpXb{ie|(@mpWWlEXRPBat@Q#4_s@HW_N03^OSxTFXlIjg3;WA>i!VR- zc6IcHpaUxxY_65MlCY~!k8yT1zXXrKx|=d-MVpyE%$};ruyU;kgBYVzmZoh5!xqLF z`&ic0a33+r;B=hJ9^ojE-ZV|Xh2h`7vy+UQf9WXfZ834kSief2%fXpLz}s=hPJ0LE z2rd_m{_N@b%fB{=IK4a1v-m4}iQ@@Dr(1<aJM0y{Ha+^m;PN=HY0p==1D7jn7P0Ae z>T)j1^)s&UHHbUllXyqkiCJQ;#VvNH+j}g&TG-A1`!3U#w}I{8)%Tr(c@IAJlx_O- zBcMamFpV|iut#G{?z-e;U;?bKx>?Ivx9MNQm0k}fkE^Wtteol!EcNCM>m;JsUN#-I z4}Qx#W3hdLhR6LjF3k^D{-3!gZ}4>c;`0}p&hsVs2;56p=zBygRMyWl(qp>&^qcCZ d9$#bp$Jlji%FC>jmPw#!_H^}gS?83{1OUPXubBV< literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index d9e55dfc1..24c369ba0 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14683,6 +14683,9 @@ <Content Include="Content\Sounds\Battle\Attacks\Grass\Absorb.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Attacks\Normal\Attract.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Attacks\Normal\Bind.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -14731,6 +14734,12 @@ <Content Include="Content\Textures\Battle\MegaEvolution\Mega_Phase2.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Normal\Attract.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Textures\Battle\Normal\Bind.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\Normal\Wrap.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/P3D/Pokemon/Attacks/Normal/Attract.vb b/P3D/Pokemon/Attacks/Normal/Attract.vb index 5f34f5a4f..496f977b2 100644 --- a/P3D/Pokemon/Attacks/Normal/Attract.vb +++ b/P3D/Pokemon/Attacks/Normal/Attract.vb @@ -76,6 +76,34 @@ End If End Sub + Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) + For i = 0 To 6 + Dim HeartEntity = MoveAnimation.SpawnEntity(Nothing, TextureManager.GetTexture("Textures\Battle\Normal\Attract"), New Vector3(0.25F), 1.0F, CSng(i * 0.2)) + + MoveAnimation.AnimationMove(HeartEntity, True, 2.0, 0.0, 0.0, 0.075, False, False, CSng(i * 0.2), 0.0) + i += 1 + Next + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Attract", 0, 0) + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub + + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) + + For i = 0 To 6 + Dim HeartEntity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Normal\Attract"), New Vector3(0.25F), 1.0F, CSng(i * 0.2)) + + MoveAnimation.AnimationMove(HeartEntity, False, 0.0, 0.0, 0.0, 0.06, False, False, CSng(i * 0.2), 0.0) + Dim zPos As Single = CSng(Random.Next(-2, 2) * 0.2) + MoveAnimation.AnimationMove(HeartEntity, False, 0.0, 0.25, zPos, 0.01, False, False, CSng(1 + i * 0.2), 0.0) + MoveAnimation.AnimationFade(HeartEntity, True, 0.02, False, 0.0, CSng(2 + i * 0.2), 0.0) + i += 1 + Next + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file diff --git a/P3D/Pokemon/Attacks/Normal/Bind.vb b/P3D/Pokemon/Attacks/Normal/Bind.vb index 4116145e3..f4e169155 100644 --- a/P3D/Pokemon/Attacks/Normal/Bind.vb +++ b/P3D/Pokemon/Attacks/Normal/Bind.vb @@ -90,10 +90,20 @@ Namespace BattleSystem.Moves.Normal Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 0.0F, 0) - MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 0, 0) - MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 2, 0) - MoveAnimation.AnimationScale(Nothing, False, False, 1.0F, 0.75F, 1.0F, 0.02F, 4, 0, "1") - MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 6, 1, "1") + Dim BindEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 32, 64, 32), ""), 1, 1) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 64, 64, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 96, 64, 32), ""), 3, 2) + MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) + MoveAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) + MoveAnimation.AnimationScale(BindEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) + MoveAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) + MoveAnimation.AnimationScale(BindEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + MoveAnimation.AnimationFade(BindEntity, True, 0.03, False, 0.0, 11, 0) + BattleScreen.BattleQuery.Add(MoveAnimation) End Sub End Class diff --git a/P3D/Pokemon/Attacks/Normal/Wrap.vb b/P3D/Pokemon/Attacks/Normal/Wrap.vb index bea93d4e8..116b891e2 100644 --- a/P3D/Pokemon/Attacks/Normal/Wrap.vb +++ b/P3D/Pokemon/Attacks/Normal/Wrap.vb @@ -94,9 +94,16 @@ MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) MoveAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) MoveAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) - MoveAnimation.AnimationScale(WrapEntity, True, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 1) + MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) + MoveAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) + MoveAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + MoveAnimation.AnimationFade(WrapEntity, True, 0.03, False, 0.0, 11, 0) + BattleScreen.BattleQuery.Add(MoveAnimation) End Sub From 639185159778c5c5f8202d97d175e833b452c7e6 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Fri, 7 Jan 2022 19:27:05 +0100 Subject: [PATCH 48/57] Improved Wrap & Bind animations, fixed some errors in the Bind animation --- P3D/Battle/BattleSystemV2/Battle.vb | 70 +++++++++++++++----- P3D/Content/Textures/Battle/Normal/Bind.png | Bin 1022 -> 2325 bytes P3D/Content/Textures/Battle/Normal/Wrap.png | Bin 1192 -> 2202 bytes P3D/Pokemon/Attacks/Normal/Bind.vb | 13 ++-- P3D/Pokemon/Attacks/Normal/Wrap.vb | 10 +-- 5 files changed, 66 insertions(+), 27 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index ec7dbb70c..05b1e1165 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -5831,10 +5831,12 @@ ChangeCameraAngle(1, True, BattleScreen) Dim WrapAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) WrapAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) - Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) - WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) - WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) - WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 40, 80, 40), ""), 0.75, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 80, 80, 40), ""), 1.5, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 120, 80, 40), ""), 2.25, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 160, 80, 40), ""), 3, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 200, 80, 40), ""), 3.75, 0.75) WrapAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) WrapAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) @@ -5905,19 +5907,21 @@ ChangeCameraAngle(1, True, BattleScreen) Dim BindAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) BindAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 5.0F, 0) - Dim WrapEntity = BindAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) - BindAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 32, 64, 32), ""), 1, 1) - BindAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 64, 64, 32), ""), 2, 1) - BindAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 96, 64, 32), ""), 3, 2) + Dim BindEntity = BindAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 40, 80, 40), ""), 0.75, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 80, 80, 40), ""), 1.5, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 120, 80, 40), ""), 2.25, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 160, 80, 40), ""), 3, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 200, 80, 40), ""), 3.75, 0.75) BindAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) - BindAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + BindAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) BindAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) - BindAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + BindAnimation.AnimationScale(BindEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) BindAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) - BindAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + BindAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) BindAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) - BindAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) - BindAnimation.AnimationFade(WrapEntity, True, 0.03, False, 0.0, 11, 0) + BindAnimation.AnimationScale(BindEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + BindAnimation.AnimationFade(BindEntity, True, 0.03, False, 0.0, 11, 0) BattleScreen.BattleQuery.Add(BindAnimation) End If ReduceHP(multiHP, True, False, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by Bind!", "bind") @@ -6693,13 +6697,21 @@ ChangeCameraAngle(1, False, BattleScreen) Dim WrapAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) WrapAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) - Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) - WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) - WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) - WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 40, 80, 40), ""), 0.75, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 80, 80, 40), ""), 1.5, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 120, 80, 40), ""), 2.25, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 160, 80, 40), ""), 3, 0.75) + WrapAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 200, 80, 40), ""), 3.75, 0.75) + WrapAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + WrapAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) WrapAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) - WrapAnimation.AnimationScale(WrapEntity, True, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 1) + WrapAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) + WrapAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + WrapAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) + WrapAnimation.AnimationScale(WrapEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + WrapAnimation.AnimationFade(WrapEntity, True, 0.03, False, 0.0, 11, 0) BattleScreen.BattleQuery.Add(WrapAnimation) End If ReduceHP(multiHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by Wrap!", "wrap") @@ -6756,6 +6768,28 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + 'Bind Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, False, BattleScreen) + Dim BindAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) + BindAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 5.0F, 0) + Dim BindEntity = BindAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 40, 80, 40), ""), 0.75, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 80, 80, 40), ""), 1.5, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 120, 80, 40), ""), 2.25, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 160, 80, 40), ""), 3, 0.75) + BindAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 200, 80, 40), ""), 3.75, 0.75) + BindAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) + BindAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) + BindAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) + BindAnimation.AnimationScale(BindEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 7, 0) + BindAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 9, 0) + BindAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 9, 0) + BindAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 11, 0) + BindAnimation.AnimationScale(BindEntity, False, True, 1.0F, 0.5F, 1.0F, 0.04F, 11, 0) + BindAnimation.AnimationFade(BindEntity, True, 0.03, False, 0.0, 11, 0) + BattleScreen.BattleQuery.Add(BindAnimation) + End If ReduceHP(multiHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by Bind!", "bind") End If End If diff --git a/P3D/Content/Textures/Battle/Normal/Bind.png b/P3D/Content/Textures/Battle/Normal/Bind.png index 16eeb2cd04e159762e182d1c395b6d18fdd349dc..a45062aeda2d9fa8fb29968d2bcf62e10ddcb25b 100644 GIT binary patch delta 2289 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 delta 976 zcmbO#^p9P!Gr-TCmrII^fq{Y7)59eQNIL*=0|y(B+})U;HBr&7p1IT0#WAGf*4sO8 z3vV0nuq9M9=LO_H$Vtd<Drr^|{;|i=>_uhM6=@S;lY0*L8g3qt-e52FN<zk=He!<I zqo?bi=xyZd*J)I8Si9$YO63}$$tYmKkwVM*3Z+G7zx_U?a^UvIN7wo9&$@5f!pWed z#CwpZp}sA^=D^3FcVd{HF{-c#GZa2}#$dt{9{;j%f8@-W93QJ2SFhie*3|y$Nx8k; z8^2axW|>u!<JVu0&udU)tPm^sy0wNux5AjAkgMeDR>y*`Q@^dhU3B@uLaV?0e?H%O zeo#1YCeX}}9mV^L`|AGwjl8$HL9C|utb3#QY*r>Fd7JuzVqwKx6ej~Y4ig^-%-!=% zC4)&pr_(c=aT&v*8~gLZ)fj&yt%zjkOIYQ6MCHKKKMxOQZD>hIlAG{L45-OXO7-z? zhq9#`C#?FRlG?NRT=RLphVxf`yy!k;?HqhCeInb|PhTe}Ui}YbGaitZ_@(4guU*gj zZjQ3jsr44Kw9>zGMsff9>#xf;@9t)YRZF+#dX!hZ{a9Yue>m~5vrK~4+C*0lbe978 zRn~ET9@iyrw^z{X^%O|Er{L&vwk)!EI)i@iaSpZn3LpR7zNy*oJ$sq&SN4qCX}+QD zOYbgLV_agl(39a&eN|1CP>>3PzxBg}?}sil@lRbG$?#(a^OD@_KT;wcstYg5C=_0} z_3`m$`$(xLwwBwk{0UC@^L*Rmj}O%6vwNKNjCGu)wO%0M{(0}vo^<bKDYxqi?QAk` zVSgEK@#W{<u8zJCbYSIz&9zcj5_a|JG0u+Wm*5dtcT*;<XfxA?*;DH^8CI?pVGv_< z%F?v0VA#SqV;{?!8tx+|8Jv!D*&`eU(wn9UxG?<tcXpC-^DiBRy)7mV8S7W+b2&J3 z2zWd0*lF+J9Kq$H(Vsm%fBDx25vO<Oc@}?VFL68}=ya>lXotPR*QQ557+fCbHSPH- zci?hm%_274PF>DLxqikKz6Npi2YeFmNINl0thKns?sR*P#a9cv`G4PK+VVEA9lZL! zQ!wwr$DXoHpMC^%Xd0%mW*qitY{^}hoD58b^;I`(IqNq4Yq-+u!Q^q3HJ_DJU4f<E zykVV06x++DqxQjXd1oxPPtfqV-^Qi+;mZFr_v8(pZeM)<LeqJ^1RsHW2@8FXsELKj n`k6+0On0AtQ~lKAYmEOGyKYT+nU&Hq2^7_yu6{1-oD!M<Fa)BD diff --git a/P3D/Content/Textures/Battle/Normal/Wrap.png b/P3D/Content/Textures/Battle/Normal/Wrap.png index 1ba4edfe36803424950a83da6825aec436fc8ceb..d9bbc47faf15ddf12a3a39cb7b0bc3a00e7865fa 100644 GIT binary patch delta 2165 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 QH)jjL-3<d)9}BwqPqrT9VE_OC delta 1147 zcmV->1cdvV5vU0viBL{Q4GJ0x0000DNk~Le0000$0001h2nGNE0K0*2YLOv6e*`m0 zL_t(|+U=YndlNwrhQCu-;_e^NxUIsr?xK(sMWP@I>f#`ZIzWLVRZxi{uC-O1qx}c# zs!@xe6XrIzm%WfnE;lnKd7k!3^1U~=yEotLCeArXjzj?{00p1`6o3Ly017|>C;$bZ z0C?Q~K6e1{=)v<u6aW$q0C}F{f9d1*asc?^0muR1izfi@UR=rrV6DZMH@~_MAawOb z1F+V@T8kf_?z#`);`-DXW5kIEfMoLd$Qfhc1L%6{7XScQ004mbw;Vq&?-YP206eU< z$givj2+8p6flJf0ARd4m0NKlj&KR?l0a73&&N+;x{Y4g7Ymug@taZR(f829vnxYIs ze)TsSx|#`#XMw}xo=Xn^0znzDxGiqbNf1l*00L1KU4#&<2pt~xO8?OL43HKIKmjNK z1)u;FfC5ke3P1rU00mI`L@1&pRwkTk0wPLcJO<-p9Y7QSUK}NpL<|5fUIE;PF-As< z%wXJGGDpZU7SSc<1EBX^f4}+)Kmi1-G2SsEW)S38-iNU1Y@qLJ!xX!i2K_AH5cs;F zE(j9qPq6@6;XW5uf>oKogJAgYV}hLLwk)(t%~1eI5B`DhU)P1<_a4}r-FuBI&C%?n zIvZkP6s-1p@j#0KgdUHF!{O3&8511HY&L7nGsapKAsQ=u7<ryAe?e*cQd&!53P1rU z00p1`6o3Ly017|>C;$bZ0KB-kK6RqD&vW7Qj4$p01=>bSAqs#mUepN^qiNqwCX<5r zJkRAEpfH;DU6y6yHc>C_8zcZyw$GMsoCE}Io%I0_1O?C%0JJ6nn(0?aoO3ul?m2T* zbcS~cfiJ{(G%+n#e|Cv&%ft)`_M=e%Wm({Z0I(4lv4Xkqrf!46O0Wt7pCP!@yRKPU zS9qgi01tuyAPB+-QWaU2MZ*d87c{vXkJ>!FNg(|Hc=l{lbnSwOzmq%$NEr-1j+DhN zW}LMuLZPkovC*almX^f24uGcI(3m0yKxl9k1)!|`R{=;Ee*}50Qvpc51w;d=D)o07 zK#b4PSpa3?%Y2Sb0*DpgNdW$czv`USP640;qPg%Y@hbuBQ-8qi?{i0@W5ovn@HA?> zJsuJsBfb>CzVrw1HGWwwG4^ca%Km^h0$3%yj`#wAkKdoUG)>Xg28q$MAKZV)e{Wsi zq5yzO*ozOde-^Kvd`-G2yZ~S{?K@)(+5}*ga1u?iZlN^@;Oy*d>)jz#ZLV^sHYL0O zU@-2vEXx)E=JPpbALd&rU&n~%Chew#?-YRVI_*Mu0RZ`d)FcG}C)w+bei;|dx8wSP z7s4A99R+|Otos9E1Or8Xa2sxLa2gCjpqR~O(dMV0QPNc==q^MDSAwe`a2TtuW>qxV z@bF&%>OiOyyS~b`08r488g&{R_CfGk1rdG@2wyCPVxJnU)gG4);14s6>OB;kiQE7H N002ovPDHLkV1i|<>)ikV diff --git a/P3D/Pokemon/Attacks/Normal/Bind.vb b/P3D/Pokemon/Attacks/Normal/Bind.vb index f4e169155..e50542ea6 100644 --- a/P3D/Pokemon/Attacks/Normal/Bind.vb +++ b/P3D/Pokemon/Attacks/Normal/Bind.vb @@ -89,11 +89,14 @@ Namespace BattleSystem.Moves.Normal Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) - MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 0.0F, 0) - Dim BindEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) - MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 32, 64, 32), ""), 1, 1) - MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 64, 64, 32), ""), 2, 1) - MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 96, 64, 32), ""), 3, 2) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 5.0F, 0) + Dim BindEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 40, 80, 40), ""), 0.75, 0.75) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 80, 80, 40), ""), 1.5, 0.75) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 120, 80, 40), ""), 2.25, 0.75) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 160, 80, 40), ""), 3, 0.75) + MoveAnimation.AnimationChangeTexture(BindEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 200, 80, 40), ""), 3.75, 0.75) + MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) MoveAnimation.AnimationScale(BindEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) diff --git a/P3D/Pokemon/Attacks/Normal/Wrap.vb b/P3D/Pokemon/Attacks/Normal/Wrap.vb index 116b891e2..534165c7e 100644 --- a/P3D/Pokemon/Attacks/Normal/Wrap.vb +++ b/P3D/Pokemon/Attacks/Normal/Wrap.vb @@ -90,10 +90,12 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) MoveAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) - Dim WrapEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 64, 32), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 1) - MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 32, 64, 32), ""), 1, 1) - MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 64, 64, 32), ""), 2, 1) - MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 96, 64, 32), ""), 3, 2) + Dim WrapEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 40, 80, 40), ""), 0.75, 0.75) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 80, 80, 40), ""), 1.5, 0.75) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 120, 80, 40), ""), 2.25, 0.75) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 160, 80, 40), ""), 3, 0.75) + MoveAnimation.AnimationChangeTexture(WrapEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 200, 80, 40), ""), 3.75, 0.75) MoveAnimation.AnimationScale(Nothing, False, False, 0.75F, 1.0F, 0.75F, 0.02F, 5, 0) MoveAnimation.AnimationScale(WrapEntity, False, False, 0.75F, 0.5F, 0.75F, 0.02F, 5, 0) MoveAnimation.AnimationScale(Nothing, False, True, 1.0F, 1.0F, 1.0F, 0.04F, 7, 0) From c116f30c6b448ec51aa5079bb100d408eb20ff4e Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 8 Jan 2022 17:36:57 +0100 Subject: [PATCH 49/57] Added Battle Animation for attack Clamp --- P3D/Battle/BattleSystemV2/Battle.vb | 34 ++++++++++++++++++ .../Sounds/Battle/Attacks/Water/Clamp.wav | Bin 0 -> 100024 bytes .../Textures/Battle/Water/Clamp_Left.png | Bin 0 -> 392 bytes .../Textures/Battle/Water/Clamp_Right.png | Bin 0 -> 390 bytes P3D/P3D.vbproj | 9 +++++ P3D/Pokemon/Attacks/Water/Clamp.vb | 20 +++++++++++ 6 files changed, 63 insertions(+) create mode 100644 P3D/Content/Sounds/Battle/Attacks/Water/Clamp.wav create mode 100644 P3D/Content/Textures/Battle/Water/Clamp_Left.png create mode 100644 P3D/Content/Textures/Battle/Water/Clamp_Right.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 05b1e1165..0814097cd 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -5938,6 +5938,23 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + 'Clamp Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, True, BattleScreen) + Dim ClampAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, True) + Dim offsetLeft As Single = 0.35 + Dim offsetRight As Single = -0.35 + ClampAnimation.AnimationPlaySound("Battle\Attacks\Water\Clamp", 0, 0) + Dim ClampEntityLeft = ClampAnimation.SpawnEntity(New Vector3(offsetLeft, -0.1, offsetLeft), TextureManager.GetTexture("Textures\Battle\Water\Clamp_Left", New Rectangle(0, 0, 24, 64), ""), New Vector3(0.28F, 0.75F, 0.28F), 0.75F) + Dim ClampEntityRight = ClampAnimation.SpawnEntity(New Vector3(offsetRight, -0.1, offsetRight), TextureManager.GetTexture("Textures\Battle\Water\Clamp_Right", New Rectangle(0, 0, 24, 64), ""), New Vector3(0.28F, 0.75F, 0.28F), 0.75F) + ClampAnimation.AnimationMove(ClampEntityLeft, False, -0.1, -0.1, -0.1, 0.02, False, False, 0, 0) + ClampAnimation.AnimationMove(ClampEntityRight, False, 0.1, -0.1, 0.1, 0.02, False, False, 0, 0) + ClampAnimation.AnimationMove(ClampEntityLeft, True, -0.35, -0.1, -0.35, 0.02, False, False, 2, 0) + ClampAnimation.AnimationMove(ClampEntityRight, True, 0.35, -0.1, 0.35, 0.02, False, False, 2, 0) + Dim SpawnEntity = ClampAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 2.5, 2) + ClampAnimation.AnimationFade(SpawnEntity, True, 1.0F, False, 0.0F, 4.5F, 0) + BattleScreen.BattleQuery.Add(ClampAnimation) + End If ReduceHP(multiHP, True, False, BattleScreen, .OwnPokemon.GetDisplayName() & " is hurt by Clamp!", "clamp") End If End If @@ -6804,6 +6821,23 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + 'Clamp Animation + If Core.Player.ShowBattleAnimations <> 0 Then + ChangeCameraAngle(1, False, BattleScreen) + Dim ClampAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, False) + Dim offsetLeft As Single = -0.35 + Dim offsetRight As Single = 0.35 + ClampAnimation.AnimationPlaySound("Battle\Attacks\Water\Clamp", 0, 0) + Dim ClampEntityLeft = ClampAnimation.SpawnEntity(New Vector3(offsetLeft, -0.1, offsetLeft), TextureManager.GetTexture("Textures\Battle\Water\Clamp_Left", New Rectangle(0, 0, 24, 64), ""), New Vector3(0.28F, 0.75F, 0.28F), 0.75F) + Dim ClampEntityRight = ClampAnimation.SpawnEntity(New Vector3(offsetRight, -0.1, offsetRight), TextureManager.GetTexture("Textures\Battle\Water\Clamp_Right", New Rectangle(0, 0, 24, 64), ""), New Vector3(0.28F, 0.75F, 0.28F), 0.75F) + ClampAnimation.AnimationMove(ClampEntityLeft, False, -0.1, -0.1, -0.1, 0.02, False, False, 0, 0) + ClampAnimation.AnimationMove(ClampEntityRight, False, 0.1, -0.1, 0.1, 0.02, False, False, 0, 0) + ClampAnimation.AnimationMove(ClampEntityLeft, True, -0.35, -0.1, -0.35, 0.02, False, False, 2, 0) + ClampAnimation.AnimationMove(ClampEntityRight, True, 0.35, -0.1, 0.35, 0.02, False, False, 2, 0) + Dim SpawnEntity = ClampAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 2.5, 2) + ClampAnimation.AnimationFade(SpawnEntity, True, 1.0F, False, 0.0F, 4.5F, 0) + BattleScreen.BattleQuery.Add(ClampAnimation) + End If ReduceHP(multiHP, False, True, BattleScreen, .OppPokemon.GetDisplayName() & " is hurt by Clamp!", "clamp") End If End If diff --git a/P3D/Content/Sounds/Battle/Attacks/Water/Clamp.wav b/P3D/Content/Sounds/Battle/Attacks/Water/Clamp.wav new file mode 100644 index 0000000000000000000000000000000000000000..dc33ea5fb75fb0a6f41e6eee055159b39957807b GIT binary patch literal 100024 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 literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Water/Clamp_Left.png b/P3D/Content/Textures/Battle/Water/Clamp_Left.png new file mode 100644 index 0000000000000000000000000000000000000000..4097d10c3513ac9cc74e1c0867f3942cfbad23f1 GIT binary patch literal 392 zcmV;30eAk1P)<h;3K|Lk000e1NJLTq000;O002M;1^@s60IIiQ00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0003K zNkl<ZSi|j@K@P+q2u1N$9?P9)aObhSm9uIyX|+Y*(`hnpnsmWKK!qQA?}S`I3n-=R z26E2946qqaDeeDittW^GP)g}3C2Fk^5$#`-9gK{R42u9q<J-D|ECXVUr~f7ZiTBHZ zqxW~l*?^Jv9OFv>iT5nPEcRw0npKVqKwU*w;V}bfyjKC#Riv#R7C`I07+@BnD}XA= zobpry?!1QsR5`Fpun4eXd<eKp@H+sU1kV~R6M(9UxB&4v_ygXNWObRo`y|6JyT`9< zmj~zfAANY+@_6HA);dC)UwHfOHh@4!DEJWQHpW5+ak!M=B8I@_92Y?fE~&YQf^b>W mMVS4D5P_uS5y*T8-1Py*<E@`0LSj+?0000<MNUMnLSTY$fT4!~ literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Water/Clamp_Right.png b/P3D/Content/Textures/Battle/Water/Clamp_Right.png new file mode 100644 index 0000000000000000000000000000000000000000..7597cf1470e5a9393dc9590f42bf436750b28880 GIT binary patch literal 390 zcmV;10eSw3P)<h;3K|Lk000e1NJLTq000;O002M;1^@s60IIiQ00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0003I zNkl<ZSi|j@I}XGk3`Fs*ax6N|;ErQ)E4E6siW0z|u~=zoqNLzyY!mFE-g`nWdIB)> z^|6#ft^j84Ip^!W)@lL`6&%Nr&S$Mv1))(6n7LaauYm8(&!vHg04b%^TJr&Tsi4_8 zc!Ee&(8@u(LnJCx0Er4!h$Jf1fK?UZDhdUxgvk`56&30#as^nb$qbmOFo(ztm~9>c z80EnQFjC=?12e#qXp%Huno@NGyd`=Mz`YTZ<iV|q)PU8^{{S2Sp5%}+{r!_1^0R~f zuAvtW{L0+o(%-xB3TYkT%`dclhYld{5ehy8!pGQ<K^$%+z|9b-odY$b;FcQP6olHE kP-8aKTDEMgYP>Y-1A3ZkpRa^hQ~&?~07*qoM6N<$g0VZH2mk;8 literal 0 HcmV?d00001 diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 24c369ba0..ec8947d4c 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14704,6 +14704,9 @@ <Content Include="Content\Sounds\Battle\Attacks\Poison\PoisonSting_Start.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Battle\Attacks\Water\Clamp.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Sounds\Battle\Attacks\Water\Whirlpool.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -15463,6 +15466,12 @@ <Content Include="Content\Textures\Battle\StatusEffect\Poisoned.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\Water\Clamp_Left.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Content\Textures\Battle\Water\Clamp_Right.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\Water\Whirlpool.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/P3D/Pokemon/Attacks/Water/Clamp.vb b/P3D/Pokemon/Attacks/Water/Clamp.vb index 91db66f75..25066b13d 100644 --- a/P3D/Pokemon/Attacks/Water/Clamp.vb +++ b/P3D/Pokemon/Attacks/Water/Clamp.vb @@ -87,6 +87,26 @@ Namespace BattleSystem.Moves.Water End If End Sub + Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) + Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) + Dim offsetLeft As Single = -0.35 + Dim offsetRight As Single = 0.35 + If BattleFlip = True Then + offsetLeft = 0.35 + offsetRight = -0.35 + End If + MoveAnimation.AnimationPlaySound("Battle\Attacks\Water\Clamp", 0, 0) + Dim ClampEntityLeft = MoveAnimation.SpawnEntity(New Vector3(offsetLeft, -0.1, offsetLeft), TextureManager.GetTexture("Textures\Battle\Water\Clamp_Left", New Rectangle(0, 0, 24, 64), ""), New Vector3(0.28F, 0.75F, 0.28F), 0.75F) + Dim ClampEntityRight = MoveAnimation.SpawnEntity(New Vector3(offsetRight, -0.1, offsetRight), TextureManager.GetTexture("Textures\Battle\Water\Clamp_Right", New Rectangle(0, 0, 24, 64), ""), New Vector3(0.28F, 0.75F, 0.28F), 0.75F) + MoveAnimation.AnimationMove(ClampEntityLeft, False, -0.1, -0.1, -0.1, 0.02, False, False, 0, 0) + MoveAnimation.AnimationMove(ClampEntityRight, False, 0.1, -0.1, 0.1, 0.02, False, False, 0, 0) + MoveAnimation.AnimationMove(ClampEntityLeft, True, -0.35, -0.1, -0.35, 0.02, False, False, 2, 0) + MoveAnimation.AnimationMove(ClampEntityRight, True, 0.35, -0.1, 0.35, 0.02, False, False, 2, 0) + Dim SpawnEntity = MoveAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Tackle"), New Vector3(0.5F), 1.0F, 2.5, 2) + MoveAnimation.AnimationFade(SpawnEntity, True, 1.0F, False, 0.0F, 4.5F, 0) + + BattleScreen.BattleQuery.Add(MoveAnimation) + End Sub End Class End Namespace \ No newline at end of file From 5b7a6fc9ab8a8b57e626aea4e197846f0326d838 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 8 Jan 2022 18:00:05 +0100 Subject: [PATCH 50/57] =?UTF-8?q?Fixed=20Overworld=20Pok=C3=A9mon=20textur?= =?UTF-8?q?e=20animations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pokémon textures with 3 and 4 frames work better now When the player is running, the Pokémon animates faster When a (network) player is standing still, the Pokémon animates slower (unless the Pokémon texture has 4 frames, then it stops at the first frame) Cleaned up the code a little --- P3D/Entites/Other/NetworkPlayer.vb | 14 +++++----- P3D/Entites/Other/NetworkPokemon.vb | 37 +++++++++++++++++---------- P3D/Entites/Other/OverworldPokemon.vb | 33 +++++++++++------------- P3D/Entites/Other/OwnPlayer.vb | 14 +++++----- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/P3D/Entites/Other/NetworkPlayer.vb b/P3D/Entites/Other/NetworkPlayer.vb index 2a86a7e1c..0828b2ffe 100644 --- a/P3D/Entites/Other/NetworkPlayer.vb +++ b/P3D/Entites/Other/NetworkPlayer.vb @@ -165,6 +165,10 @@ Return 0 Case 2 Return 1 + Case 3 + Return 0 + Case 4 + Return 1 End Select ElseIf Me.Texture.Width = Me.Texture.Height Then Select Case AnimationX @@ -198,14 +202,8 @@ If Me.AnimationDelay <= 0.0F Then Me.AnimationDelay = AnimationDelayLength AnimationX += 1 - If Me.Texture.Width = Me.Texture.Height / 2 Then - If AnimationX > 2 Then - AnimationX = 1 - End If - Else - If AnimationX > 4 Then - AnimationX = 1 - End If + If AnimationX > 4 Then + AnimationX = 1 End If End If End If diff --git a/P3D/Entites/Other/NetworkPokemon.vb b/P3D/Entites/Other/NetworkPokemon.vb index 97a7174f0..9682b7ec9 100644 --- a/P3D/Entites/Other/NetworkPokemon.vb +++ b/P3D/Entites/Other/NetworkPokemon.vb @@ -6,13 +6,14 @@ Public LevelFile As String = "" Public PokemonTexture As String = "" Public faceRotation As Integer = 0 + Dim Moving As Boolean = False Dim Texture As Texture2D Dim lastRectangle As New Rectangle(0, 0, 0, 0) Dim loadedTexture As String = "" Dim AnimationX As Integer = 1 - Dim AnimationDelayLength As Single = 2.2F + Dim AnimationDelayLength As Single = 1.1F Dim AnimationDelay As Single = AnimationDelayLength Public Sub New(ByVal pos As Vector3, ByVal PokemonTexture As String, ByVal visible As Boolean) @@ -51,22 +52,26 @@ If Me.PokemonTexture <> "" Then Me.ChangeTexture() - - Me.AnimationDelay -= 0.1F - If AnimationDelay <= 0.0F Then - AnimationX += 1 - AnimationDelay = AnimationDelayLength - If Me.Texture.Width = Me.Texture.Height / 2 Then - If AnimationX > 2 Then - AnimationX = 1 - End If - ElseIf Me.Texture.Width = Me.Texture.Height Then + If Moving = True Then + Me.AnimationDelay -= 0.1F + If AnimationDelay <= 0.0F Then + AnimationX += 1 + AnimationDelay = AnimationDelayLength If AnimationX > 4 Then AnimationX = 1 End If + End If + Else + If Me.Texture.Width = Me.Texture.Height Then + AnimationX = 1 Else - If AnimationX > 3 Then - AnimationX = 1 + Me.AnimationDelay -= 0.1F + If AnimationDelay <= 0.0F Then + AnimationX += 1 + AnimationDelay = 2.2F + If AnimationX > 4 Then + AnimationX = 1 + End If End If End If End If @@ -160,6 +165,10 @@ Return 0 Case 2 Return 1 + Case 3 + Return 0 + Case 4 + Return 1 End Select ElseIf Me.Texture.Width = Me.Texture.Height Then Select Case AnimationX @@ -197,7 +206,7 @@ Public Sub ApplyPlayerData(ByVal p As Servers.Player) Try Me.PlayerID = p.ServersID - + Me.Moving = p.Moving Me.PokemonTexture = p.PokemonSkin Me.Position = p.PokemonPosition Me.LevelFile = p.LevelFile diff --git a/P3D/Entites/Other/OverworldPokemon.vb b/P3D/Entites/Other/OverworldPokemon.vb index 7a8ba86b8..6cd0fe9e1 100644 --- a/P3D/Entites/Other/OverworldPokemon.vb +++ b/P3D/Entites/Other/OverworldPokemon.vb @@ -40,7 +40,6 @@ Public Class OverworldPokemon Me.Texture = PokemonReference.GetOverworldTexture() End If - Dim cameraRotation As Integer = Screen.Camera.GetFacingDirection() Dim spriteIndex As Integer = Me.faceRotation - cameraRotation @@ -96,18 +95,8 @@ Public Class OverworldPokemon If AnimationDelay <= 0.0F Then AnimationX += 1 AnimationDelay = AnimationDelayLength - If Me.Texture.Width = Me.Texture.Height / 2 Then - If AnimationX > 2 Then - AnimationX = 1 - End If - ElseIf Me.Texture.Width = Me.Texture.Height Then - If AnimationX > 4 Then - AnimationX = 1 - End If - Else - If AnimationX > 3 Then - AnimationX = 1 - End If + If AnimationX > 4 Then + AnimationX = 1 End If End If Else @@ -183,15 +172,19 @@ Public Class OverworldPokemon If Screen.Camera.IsMoving() = True And Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then If CInt(Me.Position.X) <> CInt(Screen.Camera.Position.X) Or CInt(Me.Position.Z) <> CInt(Screen.Camera.Position.Z) Then Me.Position += GetMove() - Me.AnimationDelayLength = 1.1F + If Core.Player.IsRunning = True Then + Me.AnimationDelayLength = 1.1F / 1.4F + Else + Me.AnimationDelayLength = 1.1F + End If Me.Moving = True End If Else - Me.AnimationDelayLength = 1.1F - If Me.Texture.Width = Me.Texture.Height / 2 Then - Me.Moving = True - Else + Me.AnimationDelayLength = 2.2F + If Me.Texture.Width = Me.Texture.Height Then Me.Moving = False + Else + Me.Moving = True End If End If End Sub @@ -310,6 +303,10 @@ Public Class OverworldPokemon Return 0 Case 2 Return 1 + Case 3 + Return 0 + Case 4 + Return 1 End Select ElseIf Me.Texture.Width = Me.Texture.Height Then Select Case AnimationX diff --git a/P3D/Entites/Other/OwnPlayer.vb b/P3D/Entites/Other/OwnPlayer.vb index ac4c506b0..94c74c9e3 100644 --- a/P3D/Entites/Other/OwnPlayer.vb +++ b/P3D/Entites/Other/OwnPlayer.vb @@ -90,14 +90,8 @@ If AnimationDelay <= 0.0F Then AnimationDelay = GetAnimationDelay() AnimationX += 1 - If Me.Texture.Width = Me.Texture.Height / 2 Then - If AnimationX > 2 Then - AnimationX = 1 - End If - Else - If AnimationX > 4 Then - AnimationX = 1 - End If + If AnimationX > 4 Then + AnimationX = 1 End If End If Else @@ -164,6 +158,10 @@ Return 0 Case 2 Return 1 + Case 3 + Return 0 + Case 4 + Return 1 End Select ElseIf Me.Texture.Width = Me.Texture.Height Then Select Case AnimationX From 667671e16fab22d54d645ec3552fa69e1959bb4a Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Mon, 10 Jan 2022 20:45:28 +0100 Subject: [PATCH 51/57] Battle Bugfixes Fixed buggy throwing animation of the opponent trainer Fixed a bug related to the trainer sprite in the vs trainer intro that made the trainer texture buggy if it wasn't 32x32 --- P3D/Battle/BattleSystemV2/Battle.vb | 6 +++--- P3D/Battle/BattleSystemV2/BattleScreen.vb | 6 +++--- P3D/Screens/BattleIntroScreen.vb | 16 ++++++++++------ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 0814097cd..9d4512057 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -7363,7 +7363,7 @@ BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) Dim BallThrowEntity As Entity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OwnPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) - BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) + BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, -0.3,, 0.025F) ' Ball Opens BallThrow.AnimationPlaySound("Battle\Pokeball\Open", 3, 0) @@ -7783,12 +7783,12 @@ BattleScreen.BattleQuery.Add(New ToggleEntityQueryObject(True, ToggleEntityQueryObject.BattleEntities.OppPokemon, 1, -1, -1, -1, -1)) BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Go, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) - Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) + Dim BallThrow As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False, BattleScreen.OppPokemonModel) If Core.Player.ShowBattleAnimations <> 0 Then ' Ball is thrown BallThrow.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) - Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(-2, -0.15, 0), BattleScreen.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + Dim BallThrowEntity = BallThrow.SpawnEntity(New Vector3(2, -0.15, 0), BattleScreen.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) BallThrow.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) ' Ball opens diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index 7786494ce..444072a8e 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -376,7 +376,7 @@ Screen.Level.Entities.Add(OwnPokemonModel) Dim InitiallyVisibleOpp As Integer = 1 - If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations <> 0 Then + If Core.Player.ShowBattleAnimations <> 0 Then InitiallyVisibleOpp = 0 End If @@ -414,12 +414,12 @@ Dim q1 As TextQueryObject = New TextQueryObject(Trainer.Name & " wants to battle!") ' Ball is thrown - Dim BallThrowOpp As AnimationQueryObject = New AnimationQueryObject(OppPokemonNPC, True, OppPokemonModel) + Dim BallThrowOpp As AnimationQueryObject = New AnimationQueryObject(OppPokemonNPC, False, OppPokemonModel) If Core.Player.ShowBattleAnimations <> 0 Then BallThrowOpp.AnimationPlaySound("Battle\Pokeball\Throw", 0, 0) BallThrowOpp.AnimationMove(Nothing, False, 0, 0.5, 0, 0.5, False, False, 2, 0,,, 3) - Dim BallThrowEntity As Entity = BallThrowOpp.SpawnEntity(New Vector3(-2, -0.15, 0), Me.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) + Dim BallThrowEntity As Entity = BallThrowOpp.SpawnEntity(New Vector3(2, -0.15, 0), Me.OppPokemon.CatchBall.Texture, New Vector3(0.3F), 1.0F) BallThrowOpp.AnimationMove(BallThrowEntity, True, 0, 0.35, 0, 0.1, False, True, 0F, 0.5F,, 0.3,, 0.025F) ' Ball Opens diff --git a/P3D/Screens/BattleIntroScreen.vb b/P3D/Screens/BattleIntroScreen.vb index bf53de80d..822bce57e 100644 --- a/P3D/Screens/BattleIntroScreen.vb +++ b/P3D/Screens/BattleIntroScreen.vb @@ -172,6 +172,7 @@ Private Sub DrawTrainerIntro() Dim barPosition As Vector2 = New Vector2(Trainer.BarImagePosition.X * 128, Trainer.BarImagePosition.Y * 128) Dim VSPosition As Vector2 = New Vector2(Trainer.VSImagePosition.X * 128, Trainer.VSImagePosition.Y * 128 + 64) + Dim TrainerFrameSize As Size = New Size(CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName).Width / 3), CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName).Height / 4)) If Trainer.VSImageOrigin <> "VSIntro" Then VSPosition.Y -= 64 @@ -179,17 +180,18 @@ Dim t1 As Texture2D = TextureManager.GetTexture("GUI\Intro\VSIntro", New Rectangle(CInt(barPosition.X), CInt(barPosition.Y), 128, 64), "") Dim t2 As Texture2D = TextureManager.GetTexture("GUI\Intro\" & Trainer.VSImageOrigin, New Rectangle(CInt(VSPosition.X), CInt(VSPosition.Y), Trainer.VSImageSize.Width, Trainer.VSImageSize.Height), "") - Dim t3 As Texture2D = TextureManager.GetTexture("NPC\" & Trainer.SpriteName, New Rectangle(0, 64, 32, 32)) + Dim t3 As Texture2D = TextureManager.GetTexture("NPC\" & Trainer.SpriteName, New Rectangle(0, TrainerFrameSize.Height * 2, TrainerFrameSize.Width, TrainerFrameSize.Height)) Dim t4 As Texture2D = Nothing If Trainer.DoubleTrainer = True Then - t4 = TextureManager.GetTexture("NPC\" & Trainer.SpriteName2, New Rectangle(0, 64, 32, 32)) + Dim Trainer2FrameSize As Size = New Size(CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName2).Width / 3), CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName2).Height / 4)) + t4 = TextureManager.GetTexture("NPC\" & Trainer.SpriteName2, New Rectangle(0, Trainer2FrameSize.Height * 2, Trainer2FrameSize.Width, Trainer2FrameSize.Height)) End If If Trainer.GameJoltID <> "" Then If GameJolt.Emblem.HasDownloadedSprite(Trainer.GameJoltID) = True Then Dim t As Texture2D = GameJolt.Emblem.GetOnlineSprite(Trainer.GameJoltID) If Not t Is Nothing Then - Dim spriteSize As New Vector2(t.Width / 3.0F, t.Height / 4.0F) + Dim spriteSize As New Vector2(CInt(t.Width / 3), CInt(t.Height / 4)) t3 = TextureManager.GetTexture(t, New Rectangle(0, CInt(spriteSize.Y * 2), CInt(spriteSize.X), CInt(spriteSize.Y))) End If End If @@ -238,20 +240,22 @@ Private Sub DrawFaceshotIntro() Dim barPosition As Vector2 = New Vector2(Trainer.BarImagePosition.X * 128, Trainer.BarImagePosition.Y * 128) Dim VSPosition As Vector2 = New Vector2(Trainer.VSImagePosition.X * 128, Trainer.VSImagePosition.Y * 128 + 64) + Dim TrainerFrameSize As Size = New Size(CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName).Width / 3), CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName).Height / 4)) Dim t1 As Texture2D = TextureManager.GetTexture("GUI\Intro\VSIntro", New Rectangle(CInt(barPosition.X), CInt(barPosition.Y), 128, 64), "") Dim t2 As Texture2D = TextureManager.GetTexture("GUI\Intro\VSIntro", New Rectangle(CInt(VSPosition.X), CInt(VSPosition.Y), 61, 54), "") - Dim t3 As Texture2D = TextureManager.GetTexture("NPC\" & Trainer.SpriteName, New Rectangle(0, 64, 32, 32)) + Dim t3 As Texture2D = TextureManager.GetTexture("NPC\" & Trainer.SpriteName, New Rectangle(0, TrainerFrameSize.Height * 2, TrainerFrameSize.Width, TrainerFrameSize.Height)) Dim t4 As Texture2D = Nothing If Trainer.DoubleTrainer = True Then - t4 = TextureManager.GetTexture("NPC\" & Trainer.SpriteName2, New Rectangle(0, 64, 32, 32)) + Dim Trainer2FrameSize As Size = New Size(CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName2).Width / 3), CInt(TextureManager.GetTexture("Textures\NPC\" & Trainer.SpriteName2).Height / 4)) + t4 = TextureManager.GetTexture("NPC\" & Trainer.SpriteName2, New Rectangle(0, Trainer2FrameSize.Height * 2, Trainer2FrameSize.Width, Trainer2FrameSize.Height)) End If If Trainer.GameJoltID <> "" Then If GameJolt.Emblem.HasDownloadedSprite(Trainer.GameJoltID) = True Then Dim t As Texture2D = GameJolt.Emblem.GetOnlineSprite(Trainer.GameJoltID) If Not t Is Nothing Then - Dim spriteSize As New Vector2(t.Width / 3.0F, t.Height / 4.0F) + Dim spriteSize As New Vector2(CInt(t.Width / 3), CInt(t.Height / 4)) t3 = TextureManager.GetTexture(t, New Rectangle(0, CInt(spriteSize.Y * 2), CInt(spriteSize.X), CInt(spriteSize.Y))) End If End If From 7555a5e903e3272f165af0ca36453fc13eed5cce Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sun, 16 Jan 2022 17:22:36 +0100 Subject: [PATCH 52/57] Battle fixes and improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed camera angle not changing to the Pokémon when status effects are doing something * Fixed softlock when opponent trainer switches Pokémon * (Hopefully) fixed initial positioning errors with spawned BattleAnimation entities related to BattleFlip functionality * Removed the now unneccessary BattleFlip checks in the move animation of Growl * Improved Ember move animation (fireball speed & flame delay) * Improved Poison Sting move animation by making the stinger smaller, increasing the speed of the stinger and making it use a flipped version of the texture when the opponent uses the move * Improved Poisoned status effect animation by making it 1 bubble for regular poison and 3 bubbles for toxic * Repositioned the flame of the Burned status effect animation * Trainers now display a message when sending out their Pokémon (I removed that before) * Fixed Party Screen not appearing immediately after the player's Pokémon fainted and also made the player unable to exit the Party Screen when that happens. * Fixed the incorrectly scaled font sizes and text alignment in the selection menu that appears when selecting a Pokémon in the Party screen * Replaced minifont in the Pokémon level up stats box with InGameFont and fixed the offsets * Fixed the error I made in the ceiling map code of Violet City's gym * Removed the file MoveAnimationQueryObject.vb because AnimationQueryObject.vb also includes Move Animations * Fixed the textbox in battles where an empty rectangle would appear before the animation finished. * When a trainer spots the player and an exclamation mark bubble pops up above their head, a sound is played (Emote_Exclamation) * In trainer battles, the player's Pokémon now also plays their cry. --- P3D/Battle/BattleSystemV2/Battle.vb | 152 ++++++++++-------- P3D/Battle/BattleSystemV2/BattleMenu.vb | 13 +- P3D/Battle/BattleSystemV2/BattleScreen.vb | 18 +-- .../QueryObjects/AnimationQueryObject.vb | 16 +- .../QueryObjects/MoveAnimationQueryObject.vb | 3 - .../QueryObjects/TextQueryObject.vb | 8 +- .../Data/maps/battle/gyms/violet_gym.dat | Bin 20262 -> 20250 bytes P3D/Content/Data/maps/gyms/violet_gym.dat | Bin 25286 -> 25326 bytes P3D/Content/Localization/Tokens_en.dat | 3 + P3D/Content/Sounds/Emote_Exclamation.wav | Bin 0 -> 52646 bytes .../Textures/Battle/Poison/Stinger.png | Bin 202 -> 246 bytes .../Textures/Battle/StatusEffect/Burned.png | Bin 0 -> 1077 bytes P3D/Entites/Other/NPC.vb | 8 +- P3D/Input/UI/SelectMenu.vb | 14 +- P3D/P3D.vbproj | 7 +- P3D/Pokemon/Attacks/Fire/Ember.vb | 36 ++--- P3D/Pokemon/Attacks/Normal/Growl.vb | 12 +- P3D/Pokemon/Attacks/Poison/PoisonSting.vb | 35 ++-- P3D/Screens/Battle/BattleGrowStatsScreen.vb | 53 +++--- P3D/Screens/Pokemon/PartyScreen.vb | 27 ++-- 20 files changed, 235 insertions(+), 170 deletions(-) delete mode 100644 P3D/Battle/BattleSystemV2/QueryObjects/MoveAnimationQueryObject.vb create mode 100644 P3D/Content/Sounds/Emote_Exclamation.wav create mode 100644 P3D/Content/Textures/Battle/StatusEffect/Burned.png diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 9d4512057..4320f3bbd 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1237,6 +1237,7 @@ CureStatusProblem(own, own, BattleScreen, p.GetDisplayName() & " thawed out.", "own defrost") Else 'Frozen animation + ChangeCameraAngle(1, Not own, BattleScreen) If Core.Player.ShowBattleAnimations <> 0 Then Dim FrozenAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) @@ -1302,6 +1303,8 @@ End If Else If sleepTurns > 0 Then + ChangeCameraAngle(1, Not own, BattleScreen) + 'Sleep Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim SleepAnimation As New AnimationQueryObject(pNPC, Not own) @@ -1437,6 +1440,8 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is no longer confused!")) p.RemoveVolatileStatus(Pokemon.VolatileStatus.Confusion) Else + Me.ChangeCameraAngle(1, Not own, BattleScreen) + 'Confused Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim ConfusedAnimation As New AnimationQueryObject(pNPC, Not own) @@ -1523,9 +1528,9 @@ If op.HP > 0 And op.Status <> Pokemon.StatusProblems.Fainted Then If p.HasVolatileStatus(Pokemon.VolatileStatus.Infatuation) = True Then If Core.Random.Next(0, 2) = 0 Then + Me.ChangeCameraAngle(1, own, BattleScreen) 'Infatuated animation If Core.Player.ShowBattleAnimations <> 0 Then - Me.ChangeCameraAngle(1, own, BattleScreen) Dim HeartAnimation = New AnimationQueryObject(pNPC, Not own) For i = 0 To 6 Dim HeartEntity = HeartAnimation.SpawnEntity(New Vector3(0.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Normal\Attract"), New Vector3(0.25F), 1.0F, CSng(i * 0.2)) @@ -1544,6 +1549,7 @@ If p.Status = Pokemon.StatusProblems.Paralyzed Then If Core.Random.Next(0, 4) = 0 Then + Me.ChangeCameraAngle(1, Not own, BattleScreen) If Core.Player.ShowBattleAnimations <> 0 Then Dim ParalyzedAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) @@ -2713,7 +2719,7 @@ Me.ChangeCameraAngle(1, own, BattleScreen) If message = "" Then - message = p.GetDisplayName() & " fainted!" + message = p.GetDisplayName() & " " & "fainted!" End If BattleScreen.BattleQuery.Add(New TextQueryObject(message)) @@ -2721,7 +2727,7 @@ If own = False Then Dim FaintAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) FaintAnimation.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 0, 2, False, True) - FaintAnimation.AnimationMove(Nothing, False, 0, -1, 0, 0.05, False, False, 2, 0,,, 3) + FaintAnimation.AnimationMove(Nothing, False, 0, -1, 0, 0.05, False, False, 2, 2) BattleScreen.BattleQuery.Add(FaintAnimation) End If End If @@ -2883,11 +2889,11 @@ 'Burn animation Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(CSng(-0.25), CSng(-0.25), CSng(-0.25)), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0, -0.25F, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 32, 32, 32), ""), 0.75, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 64, 32, 32), ""), 1.5, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 96, 32, 32), ""), 2.25, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 128, 32, 32), ""), 3, 0) BattleScreen.BattleQuery.Add(BurnAnimation) Select Case message @@ -3302,6 +3308,8 @@ Return False Else 'Works! + ChangeCameraAngle(1, Not own, BattleScreen) + 'Sleep Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim SleepAnimation As New AnimationQueryObject(pNPC, Not own) @@ -3373,9 +3381,11 @@ Public Function InflictPoison(ByVal own As Boolean, ByVal from As Boolean, ByVal BattleScreen As BattleScreen, ByVal bad As Boolean, ByVal message As String, ByVal cause As String) As Boolean Dim p As Pokemon = BattleScreen.OwnPokemon Dim op As Pokemon = BattleScreen.OppPokemon + Dim pNPC As NPC = BattleScreen.OwnPokemonNPC If own = False Then p = BattleScreen.OppPokemon op = BattleScreen.OwnPokemon + pNPC = BattleScreen.OppPokemonNPC End If If p.HP <= 0 OrElse p.Status = Pokemon.StatusProblems.Fainted Then @@ -3430,7 +3440,20 @@ Else 'Works! ChangeCameraAngle(1, own, BattleScreen) - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + 'Poison animation + If Core.Player.ShowBattleAnimations <> 0 Then + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + + BattleScreen.BattleQuery.Add(PoisonAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + End If If bad = True Then p.Status = Pokemon.StatusProblems.BadPoison Select Case message @@ -3531,6 +3554,8 @@ Return False Else 'Works! + Me.ChangeCameraAngle(1, Not own, BattleScreen) + 'Confused Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim ConfusedAnimation As New AnimationQueryObject(pNPC, Not own) @@ -4266,12 +4291,6 @@ HPAmount = p.MaxHP - p.HP End If - If own = True Then - BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, -HPAmount, New Vector2(200, 256))) - Else - BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, -HPAmount, New Vector2(300, 256))) - End If - '***HP INCREASE ANIMATION*** If Core.Player.ShowBattleAnimations <> 0 Then Dim HealAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) @@ -4296,6 +4315,13 @@ Else BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Heal", False)) End If + + If own = True Then + BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, -HPAmount, New Vector2(200, 256))) + Else + BattleScreen.BattleQuery.Add(New MathHPQueryObject(p.HP, p.MaxHP, -HPAmount, New Vector2(300, 256))) + End If + If message <> "" Then BattleScreen.BattleQuery.Add(New TextQueryObject(message)) End If @@ -5689,24 +5715,16 @@ Else If .OwnPokemon.Ability.Name.ToLower() <> "magic guard" Then If .OwnPokemon.Status = Pokemon.StatusProblems.Poison Then 'Own Poison + ChangeCameraAngle(1, True, BattleScreen) 'Poison animation If Core.Player.ShowBattleAnimations <> 0 Then Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) Else @@ -5719,6 +5737,8 @@ If .OwnPokemon.Status = Pokemon.StatusProblems.BadPoison Then 'Own Toxic .FieldEffects.OwnPoisonCounter += 1 Dim multiplier As Double = (.FieldEffects.OwnPoisonCounter / 16) + + ChangeCameraAngle(1, True, BattleScreen) 'Poison animation If Core.Player.ShowBattleAnimations <> 0 Then Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) @@ -5727,11 +5747,11 @@ Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) @@ -5756,17 +5776,17 @@ If .OwnPokemon.Ability.Name.ToLower() = "heatproof" Then reduceAmount = CInt(.OwnPokemon.MaxHP / 32) End If - + ChangeCameraAngle(1, True, BattleScreen) 'Burn animation If Core.Player.ShowBattleAnimations <> 0 Then - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, False) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OwnPokemonNPC, True) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25F, 0.25F, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0, 0.25F, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 32, 32, 32), ""), 0.75, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 64, 32, 32), ""), 1.5, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 96, 32, 32), ""), 2.25, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 128, 32, 32), ""), 3, 0) BattleScreen.BattleQuery.Add(BurnAnimation) Else BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) @@ -5826,9 +5846,10 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, True, BattleScreen) 'Wrap Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, True, BattleScreen) + Dim WrapAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) WrapAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) @@ -5862,9 +5883,10 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, True, BattleScreen) 'Whirlpool Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, True, BattleScreen) + Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False,, True) WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0, -0.3, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) @@ -5902,9 +5924,9 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, True, BattleScreen) 'Bind Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, True, BattleScreen) Dim BindAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, False) BindAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 5.0F, 0) Dim BindEntity = BindAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) @@ -5938,9 +5960,9 @@ multiHP = CInt(.OwnPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, True, BattleScreen) 'Clamp Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, True, BattleScreen) Dim ClampAnimation As AnimationQueryObject = New AnimationQueryObject(.OwnPokemonNPC, True) Dim offsetLeft As Single = 0.35 Dim offsetRight As Single = -0.35 @@ -6571,24 +6593,16 @@ Else If .OppPokemon.Ability.Name.ToLower() <> "magic guard" Then If .OppPokemon.Status = Pokemon.StatusProblems.Poison Then 'Opp Poison + ChangeCameraAngle(1, False, BattleScreen) 'Poison animation If Core.Player.ShowBattleAnimations <> 0 Then Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) BattleScreen.BattleQuery.Add(PoisonAnimation) Else @@ -6601,6 +6615,7 @@ If .OppPokemon.Status = Pokemon.StatusProblems.BadPoison Then 'Opp Toxic .FieldEffects.OppPoisonCounter += 1 Dim multiplier As Double = (.FieldEffects.OppPoisonCounter / 16) + ChangeCameraAngle(1, False, BattleScreen) If Core.Player.ShowBattleAnimations <> 0 Then 'Poison animation Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) @@ -6609,11 +6624,11 @@ Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) - Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) - Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) @@ -6639,16 +6654,17 @@ If .OppPokemon.Ability.Name.ToLower() = "heatproof" Then reduceAmount = CInt(.OppPokemon.MaxHP / 16) End If + ChangeCameraAngle(1, False, BattleScreen) 'Burn animation If Core.Player.ShowBattleAnimations <> 0 Then - Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True) + Dim BurnAnimation As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, False) BurnAnimation.AnimationPlaySound("Battle\Effects\Burned", 0, 0) - Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0.25, 0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) - BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 2) + Dim FlameEntity As Entity = BurnAnimation.SpawnEntity(New Vector3(0, 0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5, 0.5, 0.5), 1.0F) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 32, 32, 32), ""), 0.75, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 64, 32, 32), ""), 1.5, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 96, 32, 32), ""), 2.25, 0) + BurnAnimation.AnimationChangeTexture(FlameEntity, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Burned", New Rectangle(0, 128, 32, 32), ""), 3, 0) BattleScreen.BattleQuery.Add(BurnAnimation) Else BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Burned", False)) @@ -6709,9 +6725,9 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, False, BattleScreen) 'Wrap Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, False, BattleScreen) Dim WrapAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) WrapAnimation.AnimationPlaySound("Battle\Attacks\Normal\Wrap", 5.0F, 0) Dim WrapEntity = WrapAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Wrap", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) @@ -6745,9 +6761,9 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, False, BattleScreen) 'Whirlpool Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, False, BattleScreen) Dim WhirlpoolAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True,, True) WhirlpoolAnimation.AnimationPlaySound("Battle\Attacks\Water\Whirlpool", 0.0F, 0) Dim WhirlpoolEntity As Entity = WhirlpoolAnimation.SpawnEntity(New Vector3(0, -0.3, 0), TextureManager.GetTexture("Textures\Battle\Water\Whirlpool"), New Vector3(0.0F), 1.0F, 0.0F, 0.0F) @@ -6785,9 +6801,9 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, False, BattleScreen) 'Bind Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, False, BattleScreen) Dim BindAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, True) BindAnimation.AnimationPlaySound("Battle\Attacks\Normal\Bind", 5.0F, 0) Dim BindEntity = BindAnimation.SpawnEntity(New Vector3(0, -0.2, 0), TextureManager.GetTexture("Textures\Battle\Normal\Bind", New Rectangle(0, 0, 80, 40), ""), New Vector3(1.0F, 0.5F, 1.0F), 1, 0, 0.75) @@ -6821,9 +6837,9 @@ multiHP = CInt(.OppPokemon.MaxHP / 6) End If End If + ChangeCameraAngle(1, False, BattleScreen) 'Clamp Animation If Core.Player.ShowBattleAnimations <> 0 Then - ChangeCameraAngle(1, False, BattleScreen) Dim ClampAnimation As AnimationQueryObject = New AnimationQueryObject(.OppPokemonNPC, False) Dim offsetLeft As Single = -0.35 Dim offsetRight As Single = 0.35 @@ -7109,10 +7125,9 @@ Dim HasSwitchedInOpp As Boolean = False Public Sub SwitchOutOwn(ByVal BattleScreen As BattleScreen, ByVal SwitchInIndex As Integer, ByVal InsertIndex As Integer, Optional ByVal message As String = "") With BattleScreen - ChangeCameraAngle(1, True, BattleScreen) - 'Natural cure cures status problems If .OwnPokemon.Ability.Name.ToLower() = "natural cure" Then + ChangeCameraAngle(1, True, BattleScreen) If .OwnPokemon.Status <> Pokemon.StatusProblems.Fainted And .OwnPokemon.Status <> Pokemon.StatusProblems.None Then .OwnPokemon.Status = Pokemon.StatusProblems.None .AddToQuery(InsertIndex, New TextQueryObject(.OwnPokemon.GetDisplayName() & "'s status problem got healed by Natural Cure")) @@ -7120,6 +7135,7 @@ End If 'Regenerator ability heals 1/3 of it's max HP If .OwnPokemon.Ability.Name.ToLower() = "regenerator" Then + ChangeCameraAngle(1, True, BattleScreen) If Not (.OwnPokemon.Status = Pokemon.StatusProblems.Fainted Or .OwnPokemon.HP = 0) Then Dim restoreHP = CInt(.OwnPokemon.MaxHP / 3) If restoreHP > 0 And .OwnPokemon.HP < .OwnPokemon.MaxHP And .OwnPokemon.HP > 0 Then @@ -7129,6 +7145,7 @@ End If 'save baton pass stuff: If .FieldEffects.OwnUsedBatonPass = True Then + ChangeCameraAngle(1, True, BattleScreen) .FieldEffects.OwnBatonPassStats = New List(Of Integer) With .OwnPokemon BattleScreen.FieldEffects.OwnBatonPassStats.AddRange({ .StatAttack, .StatDefense, .StatSpAttack, .StatSpDefense, .StatSpeed, .Evasion, .Accuracy}) @@ -7283,6 +7300,7 @@ Public Sub SwitchInOwn(ByVal BattleScreen As BattleScreen, ByVal NewPokemonIndex As Integer, ByVal FirstTime As Boolean, ByVal InsertIndex As Integer, Optional ByVal message As String = "") HasSwitchedInOwn = True If FirstTime = False Then + ChangeCameraAngle(1, True, BattleScreen) Dim insertMessage As String = message If insertMessage = "" Then @@ -7655,13 +7673,13 @@ Else GainEXP(BattleScreen) + ChangeCameraAngle(1, False, BattleScreen) If message = "" Then message = BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""" End If BattleScreen.BattleQuery.Add(New TextQueryObject(message)) - If Core.Player.ShowBattleAnimations <> 0 Then Dim BallReturn As AnimationQueryObject = New AnimationQueryObject(BattleScreen.OppPokemonNPC, True, BattleScreen.OppPokemonModel) ' Ball Closes @@ -7723,8 +7741,8 @@ End Sub Public Sub SwitchInOpp(ByVal BattleScreen As BattleScreen, ByVal FirstTime As Boolean, ByVal index As Integer) - If FirstTime = False Then + ChangeCameraAngle(1, False, BattleScreen) HasSwitchedInOpp = True BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & ": ""Come back, " & BattleScreen.OppPokemon.GetDisplayName() & "!""")) @@ -7813,8 +7831,7 @@ BallThrow.AnimationPlaySound(CStr(BattleScreen.OppPokemon.Number), 4, 0,, True) If Core.Player.ShowBattleAnimations <> 0 Then ' Pokémon falls down - BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0,,, 4) - + BallThrow.AnimationMove(Nothing, False, 0, 0, 0, 0.05F, False, False, 5, 0) BattleScreen.BattleQuery.Add(BallThrow) End If End If @@ -7845,10 +7862,7 @@ 'Sticky Web If spikeAffected = True Then If .FieldEffects.OwnStickyWeb > 0 Then - LowerStat(False, False, BattleScreen, "Speed", 1, "The opposing pokemon was caught in a Sticky Web!", "stickyweb") - - End If End If If spikeAffected = True Then diff --git a/P3D/Battle/BattleSystemV2/BattleMenu.vb b/P3D/Battle/BattleSystemV2/BattleMenu.vb index 16b265fa8..c63e7f3cc 100644 --- a/P3D/Battle/BattleSystemV2/BattleMenu.vb +++ b/P3D/Battle/BattleSystemV2/BattleMenu.vb @@ -604,10 +604,21 @@ _mainMenuItemList.Clear() BattleScreen.ClearMainMenuTime = False End If - If _mainMenuItemList.Count = 0 Then CreateMainMenuItems(BattleScreen) End If + If BattleScreen.OwnFaint = True Then + If BattleScreen.BattleQuery(0).QueryType <> QueryObject.QueryTypes.ScreenFade Then + TempBattleScreen = BattleScreen + + Player.Temp.PokemonScreenIndex = BattleScreen.OwnPokemonIndex + Dim selScreen = New PartyScreen(Core.CurrentScreen, Item.GetItemByID(5), AddressOf ShowPokemonMenu, "Choose Pokémon", False) With {.Mode = Screens.UI.ISelectionScreen.ScreenMode.Selection, .CanExit = False} + AddHandler selScreen.SelectedObject, AddressOf ShowPokemonMenuHandler + + Core.SetScreen(selScreen) + + End If + End If If _retractMenu = False Then For Each m As MainMenuItem In _mainMenuItemList m.Update(BattleScreen, _allItemsExtended, (m.Index = _mainMenuIndex)) diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index 444072a8e..65ea22efd 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -411,7 +411,8 @@ Dim q As CameraQueryObject = New CameraQueryObject(New Vector3(13, 0, 15), New Vector3(21, 0, 15), 0.05F, 0.05F, -0.8F, 1.4F, 0.0F, 0.0F, 0.016F, 0.016F) q.PassThis = True - Dim q1 As TextQueryObject = New TextQueryObject(Trainer.Name & " wants to battle!") + Dim q1 As TextQueryObject = New TextQueryObject(Trainer.Name & " " & "wants to battle!") + Dim q11 As TextQueryObject = New TextQueryObject(Trainer.Name & ": """ & "Go," & " " & OppPokemon.GetDisplayName() & "!""") ' Ball is thrown Dim BallThrowOpp As AnimationQueryObject = New AnimationQueryObject(OppPokemonNPC, False, OppPokemonModel) @@ -438,9 +439,10 @@ Threading.Interlocked.Increment(SmokeSpawnedOpp) Loop While SmokeSpawnedOpp <= 38 + + ' Pokemon appears + BallThrowOpp.AnimationFade(Nothing, False, 1, True, 1, 3, 0) End If - ' Pokemon appears - BallThrowOpp.AnimationFade(Nothing, False, 1, True, 1, 3, 0) BallThrowOpp.AnimationPlaySound(CStr(Me.OppPokemon.Number), 4, 0,, True) ' Pokémon falls down @@ -453,15 +455,11 @@ Dim q3 As CameraQueryObject = New CameraQueryObject(New Vector3(14, 0, 11), New Vector3(14, 0, 15), 0.01F, 0.01F, MathHelper.PiOver2, MathHelper.PiOver2, 0.0F, 0.0F) q3.PassThis = True + Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) + Dim q4 As TextQueryObject = New TextQueryObject("Go," & " " & Me.OwnPokemon.GetDisplayName() & "!") - Dim q4 As TextQueryObject = New TextQueryObject("Go, " & Me.OwnPokemon.GetDisplayName() & "!") - If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations = 0 Then - Dim q31 As New PlaySoundQueryObject(OwnPokemon.Number.ToString(), True, 3.0F) - Me.BattleQuery.AddRange({cq, q, q1, BallThrowOpp, q2, q3, q31, q4}) - Else - Me.BattleQuery.AddRange({cq, q, q1, BallThrowOpp, q2, q3, q4}) - End If + Me.BattleQuery.AddRange({cq, q, q1, q11, BallThrowOpp, q2, q3, q31, q4}) If IsPVPBattle = True AndAlso Core.Player.ShowBattleAnimations <> 0 Then ' Ball is thrown diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb index bd7e555cd..6ea89d65a 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb @@ -103,10 +103,20 @@ Public Function SpawnEntity(ByVal Position As Vector3, ByVal Texture As Texture2D, ByVal Scale As Vector3, ByVal Opacity As Single, Optional ByVal startDelay As Single = 0.0F, Optional ByVal endDelay As Single = 0.0F) As Entity Dim NewPosition As Vector3 If Not Position = Nothing Then - If CurrentEntity IsNot Nothing Then - NewPosition = CurrentEntity.Position + Position + If BattleFlipped = True Then + If CurrentEntity IsNot Nothing Then + NewPosition.X = CurrentEntity.Position.X - Position.X + NewPosition.Y = CurrentEntity.Position.Y + Position.Y + NewPosition.Z = CurrentEntity.Position.Z + Position.Z + Else + NewPosition = Position + End If Else - NewPosition = Position + If CurrentEntity IsNot Nothing Then + NewPosition = CurrentEntity.Position + Position + Else + NewPosition = Position + End If End If Else If CurrentEntity IsNot Nothing Then diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/MoveAnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/MoveAnimationQueryObject.vb deleted file mode 100644 index 9cb854966..000000000 --- a/P3D/Battle/BattleSystemV2/QueryObjects/MoveAnimationQueryObject.vb +++ /dev/null @@ -1,3 +0,0 @@ -Public Class MoveAnimationQueryObject - -End Class \ No newline at end of file diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/TextQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/TextQueryObject.vb index 74013718b..02b6551be 100644 --- a/P3D/Battle/BattleSystemV2/QueryObjects/TextQueryObject.vb +++ b/P3D/Battle/BattleSystemV2/QueryObjects/TextQueryObject.vb @@ -67,11 +67,11 @@ Public Overrides Sub Draw(BV2Screen As BattleScreen) Dim rec As New Rectangle(100, Core.windowSize.Height - 250, Core.windowSize.Width - 200, 200) - - Canvas.DrawRectangle(rec, New Color(0, 0, 0, 150)) - Dim text As String = Me._text.Substring(0, _textIndex) - text = text.CropStringToWidth(FontManager.TextFont, 2.0F, Core.windowSize.Width - 300) + If text.Length > 0 Then + Canvas.DrawRectangle(rec, New Color(0, 0, 0, 150)) + End If + Text = text.CropStringToWidth(FontManager.TextFont, 2.0F, Core.windowSize.Width - 300) Core.SpriteBatch.DrawString(FontManager.TextFont, text, New Vector2(rec.X + 20, rec.Y + 20), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F) diff --git a/P3D/Content/Data/maps/battle/gyms/violet_gym.dat b/P3D/Content/Data/maps/battle/gyms/violet_gym.dat index fc4fce5cd2385cd5503173f9b2219627d15b5a09..25becde102a69ff7c1cfaf53833756b086d1d718 100644 GIT binary patch delta 73 zcmZ2Bk8##K#tm|c(vA!{Kp4!B$&kX3%23SU&yd8B1!N^NluT9>(4EA|GC53f+hh*0 bfXRMbe3SVcwoDdalbUQG&ayd1`II&Q!(S7a delta 42 ycmbO=k8#;N#tm|c?9L3O3`q>BlNAMYCvmb&&QjdA`GJ}j<77Q?w#@;`r?deZPYqQ7 diff --git a/P3D/Content/Data/maps/gyms/violet_gym.dat b/P3D/Content/Data/maps/gyms/violet_gym.dat index 02a065626a4a7200a6f1f476a527cb55e6e2fe3d..a9c071122205a3e6a02dfc1450e145549213a9f7 100644 GIT binary patch delta 77 zcmX?hl=0nB#tmNLyv_`%44Di$K%B>rK3R~rTG|oF%V7uxilhMLiW&SFk{GgptYn6g b$%)#!lM@8kHvbUUV4N(+&$n4ma)u`WKMNGH delta 51 zcmV-30L=gH#R0~}0kBFJlMppTlh6+olW+|j2SWgL0Ac`TlaVzolVA`Avmh8K0h5ps JlC#<w6iL}n5fT6Z diff --git a/P3D/Content/Localization/Tokens_en.dat b/P3D/Content/Localization/Tokens_en.dat index bd7bd479e..6721cf780 100644 --- a/P3D/Content/Localization/Tokens_en.dat +++ b/P3D/Content/Localization/Tokens_en.dat @@ -84,10 +84,13 @@ HP,HP PP,PP Lv.,Lv. Level,Level +MaxHP,Max HP Attack,Attack Defense,Defense Special_Attack,Special Attack +Sp_Attack,Sp. Attack Special_Defense,Special Defense +Sp_Defense,Sp. Defense Speed,Speed --- GameInteractions: diff --git a/P3D/Content/Sounds/Emote_Exclamation.wav b/P3D/Content/Sounds/Emote_Exclamation.wav new file mode 100644 index 0000000000000000000000000000000000000000..06ccd271c76e8c8c1947956a11bdcf8b501ff3ce GIT binary patch literal 52646 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%0D0iUu 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 VEinn^uQ^i`ONw=Q;yX)2{sZC-+q(b& literal 0 HcmV?d00001 diff --git a/P3D/Content/Textures/Battle/Poison/Stinger.png b/P3D/Content/Textures/Battle/Poison/Stinger.png index 68fa6e649e4482024c2592c846625ff4b85984ed..b37b8b491d7a3b6cbd55fb162dc118582e8b1f3b 100644 GIT binary patch delta 172 zcmV;d08{_U0rmlq7YZN<1^@s68;SVLks&{Sfk{L`R7l6|l(7y3AqYg}568|=q?`Fe zx45iXa~jF5)kP{};1MP;R%=af!VX{)Am`js0DL7%YHyO(001h0R7weVy>m%g14If& z{~^F^9FjKFU=^JPXORxz4*}1cSb4(mnA|<w+1-<*&pFQuS3pU<rTyXyQw^fNa29D7 a1K<ML(vgYAoWBeJ0000<MNUMnLSTYRDn|SO delta 127 zcmV-_0D%AY0m=c87YYyv1^@s6AM^iVks&{7RY^oaR5;7+lEDhVFbG4NKa4m3GX9}E zO(^S_&>fqTNPJ=tnK^cZ1NaGGW)p?v!x#}&OF{uiCduLM?X9<05(>~6SoK?gw{s+6 hnZcK)49+9%11^OBMAI;%4Lbk;002ovPDHLkV1kfvGZO#+ diff --git a/P3D/Content/Textures/Battle/StatusEffect/Burned.png b/P3D/Content/Textures/Battle/StatusEffect/Burned.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca6e2e663d780268f9a43a2fe58b4df623ff58a GIT binary patch literal 1077 zcmV-51j_q~P)<h;3K|Lk000e1NJLTq001BW005u}1^@s6ZOU#e00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT000BP zNkl<Zc-rloA$!{}5QaaY1STwF8ygHP?9V84(83xx7&w@*7R_)!V`GK=31uByV2m{2 zoFh4sBb{V>P0!3up66cOo#gvYveH^(%u5M?00@8p2!H?xfB*=900_XF2dI?N6Rp*F z0IRv4{P;T#K&6yMF+*AI@rCJyG=SAyV>tyje=r#upi)ZXPy!EMf#(CbVc-L-<{A&X z`ewZu9smHU?;kV(OzvNmEJOkz00JNY0w4hI10b~mzMc@|^h8=wTFj853G&p0&j+B~ z4_}ryUf3;=0+B@<Vz)RGC!u+gM;R@rK)GjmAx)Spr@;Cfu--J!W0R6S4FLef?DTLs zWl1z1z-q1=qvZZ#RwrYmP>lwl`QI47xdWbl*2aNoFT?|wiFdOFa998E^qG~2e1LTU zV0(PJt-Wyj(*G=ILQu?(9suyP9d;U85CGeFmX{IAeLerjco#@bC;$Q=00I#62KChl zgL~jnDQ)g8Tu%t9)m-~t$z2+ORT25(>4K<!f2yCQ<Ul)aG0ORpLJ9(iRl=kjLc$RS z5V199i55prw8O+sLRVNGmC^;>90jZCiE1@($~YPjyDD~hq!~S3EiagLB+COn<4(gQ z-7d&>766T))9_KIng4YqWiUXy3_nxHrdW;83UL6GSk#swgU^SPIHmg|MAzu!0e*c1 zZeMVcW_PDQJd};gDNkt1VYl#ZZpHzS+Z*F8aY~+`e!;P4(6zJb1#r#tCJdG`#tDMF zK%f_l$Ik*<NUYJr_JYwZA>-K!61z75e+bO$!c5?;17>>$u#FqNq7tx9R=C2-Z%~-? z-W++~EgB~X!?5TA0T2KIcpm^E`$qZ1DRUn&3qZ;yW)^@)rF1bSKuR9;zImM;AST`+ z|IOMV@s;se0enda07Zu~&I(}l0bEzaR!)3X+-20L4?~Req?zm5Ei5@6YMc+?7%g4d z_6^N!ckY(AjQ6^2XDK2>fOHu*7oe^_V;lfwcYyKG#VQ=2HNC8mv^!xDVd2jL3JGO@ zD=Z<xG)<hE4JorT5}A}~0MsXFwP)I+?+?J^f!^i$nKbt-zaekVwEjTC3Mj%v00ck) z1V8|;4}g2#Tte`+0Afy3gyu!E2dGytdP&xGY-6w-=sL<X3_$B!gOHrb_L)ypraL}% z$O7OSjk!e+;OyW^Zz1UFlno=z9Q}g9-UXw6=;X@<^LfmQ$&%+?3OIIU%<`er<o;E0 v)pD9V-z}_fj6xgKc|AZgfnof=s0aQ5bmPhW{j4~w00000NkvXXu0mjffo{{^ literal 0 HcmV?d00001 diff --git a/P3D/Entites/Other/NPC.vb b/P3D/Entites/Other/NPC.vb index 29d3ebcdb..a26840f1e 100644 --- a/P3D/Entites/Other/NPC.vb +++ b/P3D/Entites/Other/NPC.vb @@ -418,14 +418,16 @@ If CType(Screen.Camera, OverworldCamera).ThirdPerson = True And IsOnScreen() = False Then s &= "@camera.setfocus(npc," & Me.NPCID & ")" & Environment.NewLine Dim cPosition = .ThirdPersonOffset.X.ToString() & "," & .ThirdPersonOffset.Y.ToString() & "," & .ThirdPersonOffset.Z.ToString() - s &= "@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine & + s &= "@sound.play(Emote_Exclamation)" & Environment.NewLine & + "@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine & "@npc.move(" & Me.NPCID & "," & distance - 1 & ")" & Environment.NewLine & + "@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine & "@camera.resetfocus" & Environment.NewLine & "@camera.setposition(" & cPosition & ")" & Environment.NewLine & - "@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine & ":end" Else - s &= "@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine & + s &= "@sound.play(Emote_Exclamation)" & Environment.NewLine & + "@entity.showmessagebulb(1|" & Me.Position.X + offset.X & "|" & Me.Position.Y + 0.7F & "|" & Me.Position.Z + offset.Y & ")" & Environment.NewLine & "@npc.move(" & Me.NPCID & "," & distance - 1 & ")" & Environment.NewLine & "@script.start(" & Me.AdditionalValue & ")" & Environment.NewLine & ":end" diff --git a/P3D/Input/UI/SelectMenu.vb b/P3D/Input/UI/SelectMenu.vb index 19998d8bf..c2829e53c 100644 --- a/P3D/Input/UI/SelectMenu.vb +++ b/P3D/Input/UI/SelectMenu.vb @@ -47,7 +47,7 @@ Public Sub Update() If Visible = True Then - cursorPos.Y = MathHelper.Lerp(cursorDest.Y, cursorPos.Y, 0.6F) + cursorPos.Y = CInt(MathHelper.Lerp(cursorDest.Y, cursorPos.Y, 0.6F)) If Controls.Up(True, True, True, True, True, True) = True Then Me.Index -= 1 @@ -64,7 +64,7 @@ For i = Scroll To Me.Scroll + 8 If i <= Me.Items.Count - 1 Then - If Controls.Accept(True, False, False) = True And i = Me.Index And New Rectangle(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll), 256, 64).Contains(MouseHandler.MousePosition) = True Or + If Controls.Accept(True, False, False) = True And i = Me.Index And New Rectangle(Core.windowSize.Width - 270, 72 * ((i + 1) - Scroll), 256, 64).Contains(MouseHandler.MousePosition) = True Or Controls.Accept(False, True, True) = True And i = Me.Index Or Controls.Dismiss(True, True, True) = True And Me.BackIndex = Me.Index Then If Not ClickHandler Is Nothing Then @@ -79,7 +79,7 @@ End If Me.Visible = False End If - If New Rectangle(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll), 256, 64).Contains(MouseHandler.MousePosition) = True And Controls.Accept(True, False, False) = True Then + If New Rectangle(Core.windowSize.Width - 270, 72 * ((i + 1) - Scroll), 256, 64).Contains(MouseHandler.MousePosition) = True And Controls.Accept(True, False, False) = True Then Me.Index = i End If End If @@ -104,25 +104,25 @@ If i <= Me.Items.Count - 1 Then Dim Text As String = Items(i) - Dim startPos As New Vector2(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll)) + Dim startPos As New Vector2(Core.windowSize.Width - 270, 72 * ((i + 1) - Scroll)) Core.SpriteBatch.Draw(t1, New Rectangle(CInt(startPos.X), CInt(startPos.Y), 64, 64), Color.White) Core.SpriteBatch.Draw(t2, New Rectangle(CInt(startPos.X + 64), CInt(startPos.Y), 64, 64), Color.White) Core.SpriteBatch.Draw(t2, New Rectangle(CInt(startPos.X + 128), CInt(startPos.Y), 64, 64), Color.White) Core.SpriteBatch.Draw(t1, New Rectangle(CInt(startPos.X + 192), CInt(startPos.Y), 64, 64), Nothing, Color.White, 0.0F, New Vector2(0), SpriteEffects.FlipHorizontally, 0.0F) - Core.SpriteBatch.DrawString(FontManager.MainFont, Text, New Vector2(startPos.X + 128 - (FontManager.MainFont.MeasureString(Text).X * 1.4F) / 2, startPos.Y + 15), Color.Black, 0.0F, Vector2.Zero, 1.4F, SpriteEffects.None, 0.0F) + Core.SpriteBatch.DrawString(FontManager.MainFont, Text, New Vector2(CInt(startPos.X + 20), CInt(startPos.Y + 32 - FontManager.MainFont.MeasureString(Text).Y / 2)), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) End If Next End If - Dim cPosition As Vector2 = New Vector2(cursorPos.X + 128, cursorPos.Y - 40) + Dim cPosition As Vector2 = New Vector2(CInt(cursorPos.X + 128), CInt(cursorPos.Y - 40)) Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "") Core.SpriteBatch.Draw(t, New Rectangle(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White) End Sub Private Sub SetCursorDest() - cursorDest = New Vector2(Core.windowSize.Width - 270, 66 * ((Index + 1) - Scroll)) + cursorDest = New Vector2(CInt(Core.windowSize.Width - 270), CInt(72 * (Index + 1 - Scroll))) End Sub Public ReadOnly Property SelectedItem() As String diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index ec8947d4c..3f0c657a7 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -14731,6 +14731,9 @@ <Content Include="Content\Sounds\Battle\Effects\MegaEvolution.wav"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Sounds\Emote_Exclamation.wav"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\MegaEvolution\Mega_Phase1.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -14746,6 +14749,9 @@ <Content Include="Content\Textures\Battle\Normal\Wrap.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Content\Textures\Battle\StatusEffect\Burned.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Content\Textures\Battle\StatusEffect\Frozen.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -29285,7 +29291,6 @@ <Compile Include="Battle\BattleSystemV2\QueryObjects\EndBattleQueryObject.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\LearnMovesQueryObject.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\MathHPQueryObject.vb" /> - <Compile Include="Battle\BattleSystemV2\QueryObjects\MoveAnimationQueryObject.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\PlayMusicQueryObject.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\PlaySoundQueryObject.vb" /> <Compile Include="Battle\BattleSystemV2\QueryObjects\QueryObject.vb" /> diff --git a/P3D/Pokemon/Attacks/Fire/Ember.vb b/P3D/Pokemon/Attacks/Fire/Ember.vb index d8e04c15a..d977fa38a 100644 --- a/P3D/Pokemon/Attacks/Fire/Ember.vb +++ b/P3D/Pokemon/Attacks/Fire/Ember.vb @@ -67,7 +67,7 @@ Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) Dim FireballEntity = MoveAnimation.SpawnEntity(Nothing, TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) - MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationMove(FireballEntity, True, 2.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5) MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Start", 0, 0) For i = 0 To 12 Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1, CSng(i * 0.2)) @@ -82,7 +82,7 @@ Dim MoveAnimation = New AnimationQueryObject(CurrentEntity, BattleFlip) Dim FireballEntity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\FireBall"), New Vector3(0.5F), 1.0F) - MoveAnimation.AnimationMove(FireballEntity, True, 0.0, 0.0, 0.0, 0.05, False, True, 0.0, 0.0,, -0.5, 0) + MoveAnimation.AnimationMove(FireballEntity, True, -0.05, 0.0, 0.0, 0.05, False, True, 0.0, 1.0,, -0.5) For i = 0 To 12 Dim SmokeEntity = MoveAnimation.SpawnEntity(New Vector3(CSng(-3.0 + i * 0.2), 0.0, 0.0), TextureManager.GetTexture("Textures\Battle\Fire\Smoke"), New Vector3(0.2), 1, CSng(i * 0.2)) @@ -90,27 +90,27 @@ i += 1 Next - MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 2, 0) + MoveAnimation.AnimationPlaySound("Battle\Attacks\Fire\Ember_Hit", 4, 0) - Dim FireEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - Dim FireEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) - Dim FireEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim FireEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 3, 0) + Dim FireEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 3, 0) + Dim FireEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 3, 0) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 3.75, 0) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 3.75, 0) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 32, 32, 32), ""), 3.75, 0) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 3, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 4.5, 0) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 4.5, 0) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 64, 32, 32), ""), 4.5, 0) - MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 4, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 5.25, 0) + MoveAnimation.AnimationChangeTexture(FireEntity2, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 5.25, 0) + MoveAnimation.AnimationChangeTexture(FireEntity3, False, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 96, 32, 32), ""), 5.25, 0) - MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 1) - MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 1) - MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 5, 1) + MoveAnimation.AnimationChangeTexture(FireEntity1, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 6, 0) + MoveAnimation.AnimationChangeTexture(FireEntity2, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 6, 0) + MoveAnimation.AnimationChangeTexture(FireEntity3, True, TextureManager.GetTexture("Textures\Battle\Fire\Ember", New Rectangle(0, 128, 32, 32), ""), 6, 0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Pokemon/Attacks/Normal/Growl.vb b/P3D/Pokemon/Attacks/Normal/Growl.vb index 7ab2ed77b..714437ec3 100644 --- a/P3D/Pokemon/Attacks/Normal/Growl.vb +++ b/P3D/Pokemon/Attacks/Normal/Growl.vb @@ -67,12 +67,12 @@ MoveAnimation.AnimationPlaySound(CStr(CurrentPokemon.Number), 0, 0,, True) Dim SoundwaveEntity As Entity - If BattleFlip = False Then - SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - Else - SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - End If - MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 1, 1) + ' If BattleFlip = False Then + SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + 'Else + ' SoundwaveEntity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + 'End If + MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 1, 1) MoveAnimation.AnimationChangeTexture(SoundwaveEntity, False, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 0, 32, 32), ""), 2, 1) MoveAnimation.AnimationChangeTexture(SoundwaveEntity, True, TextureManager.GetTexture("Textures\Battle\Normal\Growl", New Rectangle(0, 32, 32, 32), ""), 3, 1) diff --git a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb index 9393f3042..50517801e 100644 --- a/P3D/Pokemon/Attacks/Poison/PoisonSting.vb +++ b/P3D/Pokemon/Attacks/Poison/PoisonSting.vb @@ -67,10 +67,15 @@ Public Overrides Sub InternalUserPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(Nothing, TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1.0F) + + Dim TextureYOffset As Integer = 0 + If BattleFlip = True Then + TextureYOffset = 16 + End If + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(Nothing, TextureManager.GetTexture("Textures\Battle\Poison\Stinger", New Rectangle(0, TextureYOffset, 16, 16), ""), New Vector3(0.2F), 1.0F) MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Start", 0, 0) - MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 2.0, 0.0, 0.0, 0.08, False, False, 0.0, 0.0) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub @@ -78,27 +83,31 @@ Public Overrides Sub InternalOpponentPokemonMoveAnimation(ByVal BattleScreen As BattleScreen, ByVal BattleFlip As Boolean, ByVal CurrentPokemon As Pokemon, ByVal CurrentEntity As NPC, ByVal CurrentModel As ModelEntity) Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip) - Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger"), New Vector3(0.5F), 1) + Dim TextureYOffset As Integer = 0 + If BattleFlip = True Then + TextureYOffset = 16 + End If + Dim StingerEntity As Entity = MoveAnimation.SpawnEntity(New Vector3(-2.0, 0, 0.0), TextureManager.GetTexture("Textures\Battle\Poison\Stinger", New Rectangle(0, TextureYOffset, 16, 16), ""), New Vector3(0.2F), 1) - MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.05, False, False, 0.0, 0.0,,, 0) + MoveAnimation.AnimationMove(StingerEntity, True, 0.0, 0.0, 0.0, 0.08, False, False, 0.0, 0.0) MoveAnimation.AnimationPlaySound("Battle\Attacks\Poison\PoisonSting_Hit", 1, 0) - Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + Dim BubbleEntity1 As Entity = MoveAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 2, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) - Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + Dim BubbleEntity2 As Entity = MoveAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 3, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 3, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 3, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 4, 1) - Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 3, 1) + Dim BubbleEntity3 As Entity = MoveAnimation.SpawnEntity(New Vector3(0.25, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 4, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 4, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 4, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 5, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 32, 32, 32), ""), 5, 1) - MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 5, 1) + MoveAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\Poison\Bubble", New Rectangle(0, 64, 32, 32), ""), 6, 1) BattleScreen.BattleQuery.Add(MoveAnimation) End Sub diff --git a/P3D/Screens/Battle/BattleGrowStatsScreen.vb b/P3D/Screens/Battle/BattleGrowStatsScreen.vb index 7532b2c81..9fe64c82a 100644 --- a/P3D/Screens/Battle/BattleGrowStatsScreen.vb +++ b/P3D/Screens/Battle/BattleGrowStatsScreen.vb @@ -41,47 +41,60 @@ Dim pokeTexture = Pokemon.GetMenuTexture() Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(p.X + 20), CInt(p.Y + 20), pokeTexture.Width * 2, 64), Color.White) Core.SpriteBatch.DrawString(FontManager.InGameFont, Pokemon.GetDisplayName(), New Vector2(p.X + 90, p.Y + 32), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, " reached level " & Pokemon.Level & "!", New Vector2(p.X + 90 + FontManager.InGameFont.MeasureString(Pokemon.GetDisplayName()).X, p.Y + 41), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, " reached level " & Pokemon.Level & "!", New Vector2(p.X + 90 + FontManager.InGameFont.MeasureString(Pokemon.GetDisplayName()).X, p.Y + 41), Color.Black) + + Dim OldOffset As Integer = 160 If Delay >= 3.0F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "Max HP: " & OldStats(0).ToString(), New Vector2(p.X + 32, p.Y + 84), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "Attack: " & OldStats(1).ToString(), New Vector2(p.X + 32, p.Y + 124), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "Defense: " & OldStats(2).ToString(), New Vector2(p.X + 32, p.Y + 164), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "Sp Attack: " & OldStats(3).ToString(), New Vector2(p.X + 32, p.Y + 204), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "Sp Defense: " & OldStats(4).ToString(), New Vector2(p.X + 32, p.Y + 244), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "Speed: " & OldStats(5).ToString(), New Vector2(p.X + 32, p.Y + 284), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("MaxHP") & ":", New Vector2(p.X + 32, p.Y + 84), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, OldStats(0).ToString(), New Vector2(p.X + 32 + OldOffset, p.Y + 84), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("Attack") & ":", New Vector2(p.X + 32, p.Y + 124), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, OldStats(1).ToString(), New Vector2(p.X + 32 + OldOffset, p.Y + 124), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("Defense") & ":", New Vector2(p.X + 32, p.Y + 164), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, OldStats(2).ToString(), New Vector2(p.X + 32 + OldOffset, p.Y + 164), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("Sp_Attack") & ":", New Vector2(p.X + 32, p.Y + 204), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, OldStats(3).ToString(), New Vector2(p.X + 32 + OldOffset, p.Y + 204), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("Sp_Defense") & ":", New Vector2(p.X + 32, p.Y + 244), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, OldStats(4).ToString(), New Vector2(p.X + 32 + OldOffset, p.Y + 244), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("Speed") & ":", New Vector2(p.X + 32, p.Y + 284), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, OldStats(5).ToString(), New Vector2(p.X + 32 + OldOffset, p.Y + 284), Color.Black) End If + + Dim NewOffset As Integer = 208 If Delay >= 5.0F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "+ " & newMaxHP, New Vector2(p.X + 200, p.Y + 84), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "+ " & newMaxHP, New Vector2(p.X + 32 + NewOffset, p.Y + 84), Color.Black) End If If Delay >= 5.5F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "+ " & newAttack, New Vector2(p.X + 200, p.Y + 124), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "+ " & newAttack, New Vector2(p.X + 32 + NewOffset, p.Y + 124), Color.Black) End If If Delay >= 6.0F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "+ " & newDefense, New Vector2(p.X + 200, p.Y + 164), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "+ " & newDefense, New Vector2(p.X + 32 + NewOffset, p.Y + 164), Color.Black) End If If Delay >= 6.5F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "+ " & newSpAttack, New Vector2(p.X + 200, p.Y + 204), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "+ " & newSpAttack, New Vector2(p.X + 32 + NewOffset, p.Y + 204), Color.Black) End If If Delay >= 7.0F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "+ " & newSpDefense, New Vector2(p.X + 200, p.Y + 244), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "+ " & newSpDefense, New Vector2(p.X + 32 + NewOffset, p.Y + 244), Color.Black) End If If Delay >= 7.5F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "+ " & newSpeed, New Vector2(p.X + 200, p.Y + 284), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "+ " & newSpeed, New Vector2(p.X + 32 + NewOffset, p.Y + 284), Color.Black) End If + + Dim ResultOffset As Integer = 272 + If Delay >= 9.0F Then - Core.SpriteBatch.DrawString(FontManager.MiniFont, "= " & Pokemon.MaxHP, New Vector2(p.X + 252, p.Y + 84), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "= " & Pokemon.Attack, New Vector2(p.X + 252, p.Y + 124), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "= " & Pokemon.Defense, New Vector2(p.X + 252, p.Y + 164), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "= " & Pokemon.SpAttack, New Vector2(p.X + 252, p.Y + 204), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "= " & Pokemon.SpDefense, New Vector2(p.X + 252, p.Y + 244), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MiniFont, "= " & Pokemon.Speed, New Vector2(p.X + 252, p.Y + 284), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "= " & Pokemon.MaxHP, New Vector2(p.X + 32 + ResultOffset, p.Y + 84), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "= " & Pokemon.Attack, New Vector2(p.X + 32 + ResultOffset, p.Y + 124), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "= " & Pokemon.Defense, New Vector2(p.X + 32 + ResultOffset, p.Y + 164), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "= " & Pokemon.SpAttack, New Vector2(p.X + 32 + ResultOffset, p.Y + 204), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "= " & Pokemon.SpDefense, New Vector2(p.X + 32 + ResultOffset, p.Y + 244), Color.Black) + Core.SpriteBatch.DrawString(FontManager.InGameFont, "= " & Pokemon.Speed, New Vector2(p.X + 32 + ResultOffset, p.Y + 284), Color.Black) End If If Delay >= 11.0F Then Dim newStat As Integer = 0 newStat = newAttack + newDefense + newSpAttack + newMaxHP + newSpDefense + newSpeed - Core.SpriteBatch.DrawString(FontManager.MiniFont, Pokemon.GetDisplayName() & " got a boost of " & newStat.ToString() & "!", New Vector2(p.X + 32, p.Y + 320), Color.DarkRed) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Pokemon.GetDisplayName() & " got a boost of " & newStat.ToString() & "!", New Vector2(p.X + 32, p.Y + 320), Color.DarkRed) End If End Sub diff --git a/P3D/Screens/Pokemon/PartyScreen.vb b/P3D/Screens/Pokemon/PartyScreen.vb index f3d242116..a831acb44 100644 --- a/P3D/Screens/Pokemon/PartyScreen.vb +++ b/P3D/Screens/Pokemon/PartyScreen.vb @@ -183,10 +183,10 @@ Public Class PartyScreen Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2 - 150), CInt(Core.windowSize.Height - 200), 300, 100), New Color(0, 0, 0, CInt(150 * textFade * _interfaceFade))) - Dim text As String = _messageText.CropStringToWidth(FontManager.ChatFont, 250) '''??? - Dim size As Vector2 = FontManager.ChatFont.MeasureString(text) + Dim text As String = _messageText.CropStringToWidth(FontManager.MainFont, 250) '''??? + Dim size As Vector2 = FontManager.MainFont.MeasureString(text) - SpriteBatch.DrawString(FontManager.ChatFont, text, New Vector2(CSng(Core.windowSize.Width / 2 - size.X / 2), CSng(Core.windowSize.Height - 150 - size.Y / 2)), New Color(255, 255, 255, CInt(255 * textFade * _interfaceFade))) + SpriteBatch.DrawString(FontManager.MainFont, text, New Vector2(CSng(Core.windowSize.Width / 2 - size.X / 2), CSng(Core.windowSize.Height - 150 - size.Y / 2)), New Color(255, 255, 255, CInt(255 * textFade * _interfaceFade))) End If End Sub @@ -214,7 +214,10 @@ Public Class PartyScreen _preScreenTexture = target End If - SpriteBatch.Draw(_blur.Perform(_preScreenTexture), windowSize, Color.White) + If _interfaceFade < 1.0F Then + SpriteBatch.Draw(_preScreenTexture, windowSize, Color.White) + End If + SpriteBatch.Draw(_blur.Perform(_preScreenTexture), windowSize, New Color(255, 255, 255, CInt(255 * _interfaceFade * 2).Clamp(0, 255))) End Sub @@ -232,7 +235,7 @@ Public Class PartyScreen SpriteBatch.Draw(_texture, New Rectangle(halfWidth - 140, halfHeight - 232, 16, 16), New Rectangle(80, 0, 16, 16), mainBackgroundColor) SpriteBatch.Draw(_texture, New Rectangle(halfWidth - 124, halfHeight - 216, 16, 16), New Rectangle(80, 0, 16, 16), mainBackgroundColor) - SpriteBatch.DrawString(FontManager.ChatFont, POKEMON_TITLE, New Vector2(halfWidth - 390, halfHeight - 228), mainBackgroundColor) + SpriteBatch.DrawString(FontManager.MainFont, POKEMON_TITLE, New Vector2(halfWidth - 390, halfHeight - 228), mainBackgroundColor) For y = 0 To CInt(_enrollY) Step 16 For x = 0 To 800 Step 16 @@ -292,7 +295,7 @@ Public Class PartyScreen _pokemonAnimations(index)._shakeV * shakeMulti, New Vector2(16, 16), SpriteEffects.None, 0F) 'name: - GetFontRenderer().DrawString(FontManager.MiniFont, p.GetDisplayName(), New Vector2(position.X + 156, position.Y + 27), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + GetFontRenderer().DrawString(FontManager.MainFont, p.GetDisplayName(), New Vector2(position.X + 156, position.Y + 27), New Color(255, 255, 255, CInt(255 * _interfaceFade))) Else Dim shakeMulti As Single = CSng((p.HP / p.MaxHP).Clamp(0.2F, 1.0F)) @@ -308,18 +311,18 @@ Public Class PartyScreen End If 'name: - GetFontRenderer().DrawString(FontManager.MiniFont, p.GetDisplayName(), New Vector2(position.X + 78, position.Y + 5), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + GetFontRenderer().DrawString(FontManager.MainFont, p.GetDisplayName(), New Vector2(position.X + 78, position.Y + 5), New Color(255, 255, 255, CInt(255 * _interfaceFade))) 'Gender symbol: Select Case p.Gender Case Pokemon.Genders.Male - SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(position.X + FontManager.MiniFont.MeasureString(p.GetDisplayName()).X + 86), CInt(position.Y + 9), 7, 13), New Rectangle(25, 0, 7, 13), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(position.X + FontManager.MainFont.MeasureString(p.GetDisplayName()).X + 86), CInt(position.Y + 9), 7, 13), New Rectangle(25, 0, 7, 13), New Color(255, 255, 255, CInt(255 * _interfaceFade))) Case Pokemon.Genders.Female - SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(position.X + FontManager.MiniFont.MeasureString(p.GetDisplayName()).X + 85), CInt(position.Y + 9), 9, 13), New Rectangle(32, 0, 9, 13), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(position.X + FontManager.MainFont.MeasureString(p.GetDisplayName()).X + 85), CInt(position.Y + 9), 9, 13), New Rectangle(32, 0, 9, 13), New Color(255, 255, 255, CInt(255 * _interfaceFade))) End Select 'Level: - GetFontRenderer().DrawString(FontManager.MiniFont, "Lv. " & p.Level.ToString(), New Vector2(position.X + 4, position.Y + 56), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + GetFontRenderer().DrawString(FontManager.MainFont, "Lv. " & p.Level.ToString(), New Vector2(position.X + 4, position.Y + 50), New Color(255, 255, 255, CInt(255 * _interfaceFade))) 'HP Bar: SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(position.X) + 102, CInt(position.Y) + 32, 111, 15), New Rectangle(16, 32, 74, 10), New Color(255, 255, 255, CInt(255 * _interfaceFade))) @@ -354,7 +357,7 @@ Public Class PartyScreen End With 'HP display: - GetFontRenderer().DrawString(FontManager.MiniFont, p.HP & " / " & p.MaxHP, New Vector2(position.X + 100, position.Y + 50), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + GetFontRenderer().DrawString(FontManager.MainFont, p.HP & " / " & p.MaxHP, New Vector2(position.X + 100, position.Y + 50), New Color(255, 255, 255, CInt(255 * _interfaceFade))) 'status condition Dim StatusTexture As Texture2D = BattleStats.GetStatImage(p.Status) @@ -379,7 +382,7 @@ Public Class PartyScreen End If End Select End If - GetFontRenderer().DrawString(FontManager.MiniFont, AttackLabel, New Vector2(position.X + 210, position.Y + 50), New Color(255, 255, 255, CInt(255 * _interfaceFade))) + GetFontRenderer().DrawString(FontManager.MainFont, AttackLabel, New Vector2(position.X + 210, position.Y + 50), New Color(255, 255, 255, CInt(255 * _interfaceFade))) End If From 54ea0e57bae1c7d36929d3870286beed8cb335d3 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 29 Jan 2022 00:06:58 +0100 Subject: [PATCH 53/57] Added WallModel (ModelID=20) which is a flat vertical surface on an offset (like a wall) --- P3D/P3D.vbproj | 1 + P3D/Resources/Models/2D/WallModel.vb | 20 ++++++++++++++++++++ P3D/Resources/Models/BaseModel.vb | 3 +++ 3 files changed, 24 insertions(+) create mode 100644 P3D/Resources/Models/2D/WallModel.vb diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 3f0c657a7..0cc1162c9 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -30775,6 +30775,7 @@ <Compile Include="Resources\FontManager.vb" /> <Compile Include="Resources\GameModeManager.vb" /> <Compile Include="Resources\ModelManager.vb" /> + <Compile Include="Resources\Models\2D\WallModel.vb" /> <Compile Include="Resources\Models\2D\BillModel.vb" /> <Compile Include="Resources\Models\2D\CrossModel.vb" /> <Compile Include="Resources\Models\2D\DoubleFloorModel.vb" /> diff --git a/P3D/Resources/Models/2D/WallModel.vb b/P3D/Resources/Models/2D/WallModel.vb new file mode 100644 index 000000000..ea0c59c36 --- /dev/null +++ b/P3D/Resources/Models/2D/WallModel.vb @@ -0,0 +1,20 @@ +Public Class WallModel + + Inherits BaseModel + + Public Sub New() + Me.ID = 20 + + Dim vertexData = New VertexPositionNormalTexture() { + New VertexPositionNormalTexture(New Vector3(-0.5, -0.5, 0.5), Vector3.Backward, New Vector2(0, 1)), + New VertexPositionNormalTexture(New Vector3(-0.5, 0.5, 0.5), Vector3.Backward, New Vector2(0, 0)), + New VertexPositionNormalTexture(New Vector3(0.5, 0.5, 0.5), Vector3.Backward, New Vector2(1, 0)), + New VertexPositionNormalTexture(New Vector3(0.5, 0.5, 0.5), Vector3.Backward, New Vector2(1, 0)), + New VertexPositionNormalTexture(New Vector3(0.5, -0.5, 0.5), Vector3.Backward, New Vector2(1, 1)), + New VertexPositionNormalTexture(New Vector3(-0.5, -0.5, 0.5), Vector3.Backward, New Vector2(0, 1)) + } + + Setup(vertexData) + End Sub + +End Class diff --git a/P3D/Resources/Models/BaseModel.vb b/P3D/Resources/Models/BaseModel.vb index c10890d7d..782c08ba4 100644 --- a/P3D/Resources/Models/BaseModel.vb +++ b/P3D/Resources/Models/BaseModel.vb @@ -100,6 +100,7 @@ Public Shared DiagonalWallModel As DiagonalWallModel = New DiagonalWallModel() Public Shared HalfDiagonalWallModel As HalfDiagonalWallModel = New HalfDiagonalWallModel() Public Shared OutsideStepModel As OutsideStepModel = New OutsideStepModel() + Public Shared WallModel As WallModel = New WallModel() Public Shared Function getModelbyID(ByVal ID As Integer) As BaseModel Select Case ID @@ -143,6 +144,8 @@ Return HalfDiagonalWallModel Case 19 Return OutsideStepModel + Case 20 + Return WallModel Case Else Return BlockModel End Select From e1f20d7c63c4b48993e39528ff12dbfd6cc48697 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 29 Jan 2022 00:08:12 +0100 Subject: [PATCH 54/57] Improved and optimized Violet City gym maps (Regular & Battle) --- .../Data/maps/battle/gyms/violet_gym.dat | Bin 20250 -> 38682 bytes P3D/Content/Data/maps/gyms/violet_gym.dat | Bin 25326 -> 47788 bytes P3D/Content/Textures/Gym.png | Bin 7858 -> 7395 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/P3D/Content/Data/maps/battle/gyms/violet_gym.dat b/P3D/Content/Data/maps/battle/gyms/violet_gym.dat index 25becde102a69ff7c1cfaf53833756b086d1d718..5f3d1ff46178c49c0dcd05bbca0626d1da7ca521 100644 GIT binary patch literal 38682 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 CTzBvQ delta 698 zcmaKq-z!659LD!L=P)}<xL6XB$d7E!*0GQ@lBC6yG@4Kv%MC@*%EpwdDd%AqyI7Q5 zN#o>KGV)j8>ZHgeuH2A!vokB>_WgX{=Xt)*`-Ts)!VwbH5jdPS#-b5%C>Rm#>A*nM z8O9oB5cS0*rkFJ2)!>1ni^XnrMxe!e?NR0%9rY&(;1BM>(bI${ZysE{i-<VqFVrhg zv}Jhq>f?kHHT4<+SNw4%%20|+{xpN;Ft$f@xZzVl(p2M&C4Z?VC}MniQtQvwIYy0{ zW-?=ZU=r6=b~RUeHCpm7X1U)A@kXMRR@%g&FduK1vrv~tc{Z2O7qNt3cXrGE{z{_y zCHA?syRqG_gR|><&u<kGZ(JeT`i6-WAI@b+oB=a+EwasLA`(*rWy*zzxz*Hpe$YUu zxrk3TAND~PT0MG1rWe!!YFV6I+lZaDM<`iMboQG5luq~qZrsyn3@xVSlSV~q47`l$ zkv;UolZGV_0w?mslBpnBNa^Ms6k7%MB`bQjT4i=)g-GjRl;i#PgxtFoqtys`U)B*2 A+5i9m diff --git a/P3D/Content/Data/maps/gyms/violet_gym.dat b/P3D/Content/Data/maps/gyms/violet_gym.dat index a9c071122205a3e6a02dfc1450e145549213a9f7..7a2ebb2b421721c39539f9cf38981ee81c0a30f1 100644 GIT binary patch literal 47788 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 Y)9Q&khq2danOUr7=PYUK-ldcFe;*<5{Qv*} delta 1092 zcmZ4UmFeA4#tjb`8LcJ@ve-`cV#=Bv$Hz6fh)0Flgu!C+Ll*JLZCpkZC$LPu$Cfr( zj+0~Z9A-V-N=zpEv1H(uPMh4o!ZEpom4FFWlM~qRD4B!X0+Y%A*a`T+0-tU#CcDW2 z+<5E;g#p)OF)nOM%p}7Z5*c!Uu$aM$ftP`cAqB`UV#sE&ntV~ze=?uB)+8mb$(LMH zCI<)wOkS`?YVrkBw#ji80h0yRPMT~W=mk{5$L_|E2{L5zLO1Ej_oSjGKM>@boEMum zNx+8$Eo_s|xn_`P4I883<nylS*mUtbGo*r@mC2CDkPi1x-Q+8-NoeXHai%cj17Q(Z zmG|Ur4tbOJ`0PM;`=si1lNB5}CaYL&L6@2=Fn!bHhIwq0)vPw5$t~M_AzY6UO)zTm zs>q<p7dn(CUkJ~d{BH*&ehx(S;7}*TnFNfNWN5rVTv+714NWyDLfkfQb5KFIZrbF8 z7#?7LxhU#A*@sDB@*cmK$purnCaZWPOui5+Hu)2?*k*+#8H|%R2un<sTbDIip@3`h zyR-^a2|pHr$pSV}lM^brCii8dNy@D&m@HCWgG)yfs>Hnw1(QP>aHw9;)PkxS?xOB0 sWC<xGzrf75VceWBa|R=;A%hNs;pV@y8d>1XWX8!8I$1WqT5w1b0GyeLIsgCw diff --git a/P3D/Content/Textures/Gym.png b/P3D/Content/Textures/Gym.png index ceb22ffe4747718adfde196305a794cc30cf5fee..030112f4d92a459dc1d54d84e3c57f8e29d3a7fa 100644 GIT binary patch literal 7395 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 E0JI2~9smFU literal 7858 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 From 313fb999cbaec3af9aef8266e7fc8de73adbf6f7 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Sat, 29 Jan 2022 00:10:47 +0100 Subject: [PATCH 55/57] Bugfixes Fixed: - Regular toxic animation (initial move) only has 1 bubble instead of 3 - Issue with Zoom in screen when status effect occurs (from opposing pokemon) instead focuses on player pokemon --- P3D/Battle/BattleSystemV2/Battle.vb | 60 ++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 4320f3bbd..3404d56cb 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -1237,7 +1237,7 @@ CureStatusProblem(own, own, BattleScreen, p.GetDisplayName() & " thawed out.", "own defrost") Else 'Frozen animation - ChangeCameraAngle(1, Not own, BattleScreen) + ChangeCameraAngle(1, own, BattleScreen) If Core.Player.ShowBattleAnimations <> 0 Then Dim FrozenAnimation As AnimationQueryObject = New AnimationQueryObject(Nothing, Not own) @@ -1303,7 +1303,7 @@ End If Else If sleepTurns > 0 Then - ChangeCameraAngle(1, Not own, BattleScreen) + ChangeCameraAngle(1, own, BattleScreen) 'Sleep Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim SleepAnimation As New AnimationQueryObject(pNPC, Not own) @@ -1440,7 +1440,7 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is no longer confused!")) p.RemoveVolatileStatus(Pokemon.VolatileStatus.Confusion) Else - Me.ChangeCameraAngle(1, Not own, BattleScreen) + Me.ChangeCameraAngle(1, own, BattleScreen) 'Confused Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim ConfusedAnimation As New AnimationQueryObject(pNPC, Not own) @@ -1549,7 +1549,7 @@ If p.Status = Pokemon.StatusProblems.Paralyzed Then If Core.Random.Next(0, 4) = 0 Then - Me.ChangeCameraAngle(1, Not own, BattleScreen) + Me.ChangeCameraAngle(1, own, BattleScreen) If Core.Player.ShowBattleAnimations <> 0 Then Dim ParalyzedAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, Not own) @@ -3308,7 +3308,7 @@ Return False Else 'Works! - ChangeCameraAngle(1, Not own, BattleScreen) + ChangeCameraAngle(1, own, BattleScreen) 'Sleep Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim SleepAnimation As New AnimationQueryObject(pNPC, Not own) @@ -3440,20 +3440,7 @@ Else 'Works! ChangeCameraAngle(1, own, BattleScreen) - 'Poison animation - If Core.Player.ShowBattleAnimations <> 0 Then - Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) - PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) - Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) - - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) - PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) - - BattleScreen.BattleQuery.Add(PoisonAnimation) - Else - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) - End If If bad = True Then p.Status = Pokemon.StatusProblems.BadPoison Select Case message @@ -3465,7 +3452,42 @@ BattleScreen.BattleQuery.Add(New TextQueryObject(message)) BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " is badly poisoned!")) End Select + If Core.Player.ShowBattleAnimations <> 0 Then + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(-0.25, -0.25, -0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + Dim BubbleEntity2 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 1, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 2, 1) + Dim BubbleEntity3 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0.25), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 2, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity2, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 3, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 3, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity3, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 4, 1) + + BattleScreen.BattleQuery.Add(PoisonAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + End If Else + 'Poison animation + If Core.Player.ShowBattleAnimations <> 0 Then + Dim PoisonAnimation As AnimationQueryObject = New AnimationQueryObject(pNPC, own) + + PoisonAnimation.AnimationPlaySound("Battle\Effects\Poisoned", 0, 0) + Dim BubbleEntity1 As Entity = PoisonAnimation.SpawnEntity(New Vector3(0, -0.25, 0), TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 0, 32, 32), ""), New Vector3(0.5F), 1, 0, 1) + + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, False, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 32, 32, 32), ""), 1, 1) + PoisonAnimation.AnimationChangeTexture(BubbleEntity1, True, TextureManager.GetTexture("Textures\Battle\StatusEffect\Poisoned", New Rectangle(0, 64, 32, 32), ""), 2, 1) + + BattleScreen.BattleQuery.Add(PoisonAnimation) + Else + BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Battle\Effects\Poisoned", False)) + End If p.Status = Pokemon.StatusProblems.Poison Select Case message Case "" 'Print default message only @@ -3554,7 +3576,7 @@ Return False Else 'Works! - Me.ChangeCameraAngle(1, Not own, BattleScreen) + Me.ChangeCameraAngle(1, own, BattleScreen) 'Confused Animation If Core.Player.ShowBattleAnimations <> 0 Then Dim ConfusedAnimation As New AnimationQueryObject(pNPC, Not own) From 5c9a5e664433653c68851c38274e2abdd19429d8 Mon Sep 17 00:00:00 2001 From: JappaWakka <jjlspeelman@outlook.com> Date: Mon, 31 Jan 2022 20:09:25 +0100 Subject: [PATCH 56/57] Fix for the ceiling glitching --- P3D/Content/Data/maps/barktown0.dat | Bin 36818 -> 36938 bytes P3D/Content/Data/maps/elmlab.dat | Bin 28468 -> 28538 bytes P3D/Content/Data/maps/gyms/violet_gym.dat | Bin 47788 -> 47826 bytes P3D/Content/Data/maps/yourroom.dat | Bin 35502 -> 35622 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/P3D/Content/Data/maps/barktown0.dat b/P3D/Content/Data/maps/barktown0.dat index a671b67057d22c64a1d670c2f103ced242e301d5..7aa0768a74b179a4660292e90020344434168a1f 100644 GIT binary patch delta 92 zcmcaKpXt;BrVSI=CnrcdZN9@^$2j>)mek}0(rnzu40;TP3?@KqI{Bk!<KzRJ8j};m d>^2*4wP06dC~P@-0wc@h0DYFtx43^a0|1{49Yg>C delta 96 zcmX@Lfa%hFrVSI=r5zb^fH0ULlOcs6m7$oypCO4M3&=`lDA~M_eLdsk1AJ+dH;8HA ZQ#g4cyYA*Bt`^404uVRX{doQ~0{|S68y)}v diff --git a/P3D/Content/Data/maps/elmlab.dat b/P3D/Content/Data/maps/elmlab.dat index 11dcd43b7b15d0ac66f1c5fd52bd9e1590343a0e..c1066e7c5de9906bae1d52557cf4ec0f1206a6bb 100644 GIT binary patch delta 44 zcmdmTkMY+%#tko6Ckt?}Opb97V2xmiWQdv^s3Og6%%I0$$Y27*rkfwK24?~QPh1SQ delta 17 Zcmex$k8#UA#tko6C-L!Zwqdi&1OQJx2UGw6 diff --git a/P3D/Content/Data/maps/gyms/violet_gym.dat b/P3D/Content/Data/maps/gyms/violet_gym.dat index 7a2ebb2b421721c39539f9cf38981ee81c0a30f1..bc0080835a24fffe6d5445b1d68e26c278d95654 100644 GIT binary patch delta 60 zcmZ4UmFdz~rVVx$lNI6uCa<$7VU1vjWQdxqC?YIuz@Wnb!p01G42BFQKx{gBp_ck& Mg>JFUE|wXM06NkTwEzGB delta 29 lcmccgm1)garVVx$lN**uO}=2tHu;w6qe;vxo3ku48Ufcb4PF2M diff --git a/P3D/Content/Data/maps/yourroom.dat b/P3D/Content/Data/maps/yourroom.dat index 194a53f7134733a2618b188c0d0b8341a708fbd8..1b992b86141e11792666c62bf0ead181a64b5a46 100644 GIT binary patch delta 103 zcmZ2Cm1)^DrVR$HlMfg<O|D^mGP%G}ZSn(-lF28yB_>(3@Eb7bFc>rFF&HwK0I})h dK;hcSG3+{%B<&_&V1GqO^+i$J&1IYxjR4bE9~uAv delta 115 zcmZ2BjcMIfrVR$H(vA!{Kp4!B$&kX3%23SU&yd8B1!N^Nlx%in6=j?pAfYx{PL*%6 g0%zLf2Yh|_G)yk6)St}4@d8E91s%1`pEyk#0ivKECIA2c From dde6cb5c34fe2dc7e8baffe5066dbe899a262f94 Mon Sep 17 00:00:00 2001 From: "Jasper \"JappaWakka\" Speelman" <31563291+JappaWakka@users.noreply.github.com> Date: Sat, 5 Feb 2022 10:28:48 +0100 Subject: [PATCH 57/57] Removed unneccessary item use sounds --- P3D/Battle/BattleSystemV2/Battle.vb | 65 ++++++++++++----------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb index 3404d56cb..07b311e05 100644 --- a/P3D/Battle/BattleSystemV2/Battle.vb +++ b/P3D/Battle/BattleSystemV2/Battle.vb @@ -978,48 +978,35 @@ 'Potion,Super Point,Hyper Potion,Full Heal,Full Restore,Burn Heal,Antidote,Paralyze heal,Awakening,Ice Heal,Revive,Max Revive,Max Potion Select Case ItemID - Case 18 'Potion - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.GainHP(20, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Potion on " & p.GetDisplayName() & "!", "item:potion") - Case 17 'Super Potion - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.GainHP(50, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Super Potion on " & p.GetDisplayName() & "!", "item:superpotion") - Case 16 'Hyper Potion - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.GainHP(100, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Hyper Potion on " & p.GetDisplayName() & "!", "item:hyperpotion") - Case 15 'Max Potion - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.GainHP(p.MaxHP, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Max Potion on " & p.GetDisplayName() & "!", "item:maxpotion") - Case 14 'Full Restore - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.GainHP(p.MaxHP, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Full Restore on " & p.GetDisplayName() & "!", "item:fullrestore") + Case 18 'Potion + Me.GainHP(20, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Potion on " & p.GetDisplayName() & "!", "item:potion") + Case 17 'Super Potion + Me.GainHP(50, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Super Potion on " & p.GetDisplayName() & "!", "item:superpotion") + Case 16 'Hyper Potion + Me.GainHP(100, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Hyper Potion on " & p.GetDisplayName() & "!", "item:hyperpotion") + Case 15 'Max Potion + Me.GainHP(p.MaxHP, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Max Potion on " & p.GetDisplayName() & "!", "item:maxpotion") + Case 14 'Full Restore + Me.GainHP(p.MaxHP, False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Full Restore on " & p.GetDisplayName() & "!", "item:fullrestore") Me.CureStatusProblem(False, False, BattleScreen, "", "item:fullrestore") - Case 38 'Full Heal - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Full Heal on " & p.GetDisplayName() & "!", "item:fullheal") - Case 9 'Antidote - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used an Antidote on " & p.GetDisplayName() & "!", "item:antidote") - Case 10 'Burn Heal - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Burn Heal on " & p.GetDisplayName() & "!", "item:burnheal") - Case 11 'Ice Heal - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used an Ice Heal on " & p.GetDisplayName() & "!", "item:iceheal") - Case 12 'Awakening - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used an Awakening on " & p.GetDisplayName() & "!", "item:awakening") - Case 13 'Paralyze Heal - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Paralyze Heal on " & p.GetDisplayName() & "!", "item:paralyzeheal") - Case 39 'Revive - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & " used a Revive on " & p.GetDisplayName() & "!")) + Case 38 'Full Heal + Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Full Heal on " & p.GetDisplayName() & "!", "item:fullheal") + Case 9 'Antidote + Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used an Antidote on " & p.GetDisplayName() & "!", "item:antidote") + Case 10 'Burn Heal + Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Burn Heal on " & p.GetDisplayName() & "!", "item:burnheal") + Case 11 'Ice Heal + Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used an Ice Heal on " & p.GetDisplayName() & "!", "item:iceheal") + Case 12 'Awakening + Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used an Awakening on " & p.GetDisplayName() & "!", "item:awakening") + Case 13 'Paralyze Heal + Me.CureStatusProblem(False, False, BattleScreen, BattleScreen.Trainer.Name & " used a Paralyze Heal on " & p.GetDisplayName() & "!", "item:paralyzeheal") + Case 39 'Revive + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & " used a Revive on " & p.GetDisplayName() & "!")) p.Status = Pokemon.StatusProblems.None p.HP = CInt(Math.Ceiling(p.MaxHP / 2)) - Case 40 'Max Revive - BattleScreen.BattleQuery.Add(New PlaySoundQueryObject("Use_Item", False)) - BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & " used a Revive on " & p.GetDisplayName() & "!")) + Case 40 'Max Revive + BattleScreen.BattleQuery.Add(New TextQueryObject(BattleScreen.Trainer.Name & " used a Revive on " & p.GetDisplayName() & "!")) p.Status = Pokemon.StatusProblems.None p.HP = p.MaxHP End Select