diff --git a/P3D/Battle/BattleAnimations/BABackground.vb b/P3D/Battle/BattleAnimations/BABackground.vb
index 7cb14db5b..cee621738 100644
--- a/P3D/Battle/BattleAnimations/BABackground.vb
+++ b/P3D/Battle/BattleAnimations/BABackground.vb
@@ -2,59 +2,108 @@
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 Duration As Single = 2.0F
+ Public FadeInSpeed As Single = 0.01F
+ Public FadeOutSpeed As Single = 0.01F
+ Public BackgroundOpacity As Single = 0.0F
Public Texture As Texture2D
+ Public DoTile As Boolean = False
+ Public AnimationWidth As Integer = -1
+ Public AnimationLength As Integer = 1
+ Public AnimationSpeed As Integer = 16
+ Public AfterFadeInOpacity As Single = 1.0F
+ Public FadeProgress As FadeSteps = FadeSteps.FadeIn
+ Private DurationDate As Date
+ Private DurationWhole As Single
+ Private DurationFraction As Single
+ Private BackgroundAnimation As Animation
+ Private CurrentRectangle As New Rectangle(0, 0, 0, 0)
+ Private TextureScale As Integer = 4
- 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)
+ Public Enum FadeSteps As Integer
+ FadeIn
+ Duration
+ FadeOut
+ End Enum
+
+ Public Sub New(ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single, ByVal Duration As Single, Optional ByVal AfterFadeInOpacity As Single = 1.0F, Optional ByVal FadeInSpeed As Single = 0.125F, Optional ByVal FadeOutSpeed As Single = 0.125F, Optional ByVal DoTile As Boolean = False, Optional ByVal AnimationWidth As Integer = -1, Optional ByVal AnimationLength As Integer = 1, Optional ByVal AnimationSpeed As Integer = 2, Optional TextureScale As Integer = 4)
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.Duration = Duration
+ Me.AfterFadeInOpacity = AfterFadeInOpacity
+ Me.FadeInSpeed = FadeInSpeed
+ Me.FadeOutSpeed = FadeOutSpeed
+ Me.DoTile = DoTile
+ Me.AnimationWidth = AnimationWidth
+ Me.AnimationLength = AnimationLength
+ DurationWhole = CSng(Math.Truncate(CDbl(Duration)))
+ DurationFraction = CSng((Duration - DurationWhole) * 1000)
+ Me.TextureScale = TextureScale
- Me.BackgroundOpacity = StartState
+ If Me.AnimationWidth <> -1 OrElse Me.AnimationWidth <> Nothing Then
+ BackgroundAnimation = New Animation(Me.Texture, 1, CInt(Me.Texture.Width / Me.AnimationWidth), Me.AnimationWidth, Me.Texture.Height, AnimationSpeed * 24, 0, 0)
+ CurrentRectangle = BackgroundAnimation.TextureRectangle
+ Else
+ Me.AnimationWidth = Texture.Width
+ End If
Me.Visible = False
Me.AnimationType = AnimationTypes.Background
End Sub
Public Overrides Sub Render()
+ Dim BackgroundTarget As New RenderTarget2D(Core.GraphicsDevice, Core.windowSize.Width, Core.windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8)
+ Core.GraphicsDevice.SetRenderTarget(BackgroundTarget)
+ GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Transparent)
+
If Date.Now >= startDelay 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)))
+ If DoTile = False Then
+ Core.SpriteBatch.Draw(Texture, New Rectangle(0, 0, windowSize.Width, windowSize.Height), CurrentRectangle, New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity)))
+ Else
+ For Dx = 0 To Core.windowSize.Width Step AnimationWidth
+ For Dy = 0 To Core.windowSize.Height Step Texture.Height
+ Core.SpriteBatch.Draw(Texture, New Rectangle(Dx * TextureScale, Dy * TextureScale, AnimationWidth * TextureScale, Texture.Height * TextureScale), CurrentRectangle, New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity)))
+ Next
+ Next
+ End If
End If
+ Core.GraphicsDevice.SetRenderTarget(Nothing)
+ Core.SpriteBatch.Draw(BackgroundTarget, windowSize, New Color(255, 255, 255, CInt(255 * Me.BackgroundOpacity)))
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
+ If BackgroundAnimation IsNot Nothing Then
+ BackgroundAnimation.Update(0.005)
+ If CurrentRectangle <> BackgroundAnimation.TextureRectangle Then
+ CurrentRectangle = BackgroundAnimation.TextureRectangle
End If
End If
+ Select Case Me.FadeProgress
+ Case FadeSteps.FadeIn
+ If Me.AfterFadeInOpacity > Me.BackgroundOpacity Then
+ Me.BackgroundOpacity += Me.FadeInSpeed
+ If Me.BackgroundOpacity >= Me.AfterFadeInOpacity Then
+ DurationDate = Date.Now + New TimeSpan(0, 0, 0, CInt(DurationWhole), CInt(DurationFraction))
+ FadeProgress = FadeSteps.Duration
+ Me.BackgroundOpacity = Me.AfterFadeInOpacity
+ End If
+ End If
+ Case FadeSteps.Duration
+ If Date.Now >= DurationDate Then
+ FadeProgress = FadeSteps.FadeOut
+ End If
+ Case FadeSteps.FadeOut
+ If 0 < Me.BackgroundOpacity Then
+ Me.BackgroundOpacity -= Me.FadeOutSpeed
+ If Me.BackgroundOpacity <= 0 Then
+ Me.BackgroundOpacity = 0
+ End If
+ End If
+ If Me.BackgroundOpacity = 0 Then
+ Me.Ready = True
+ End If
+ End Select
+
End Sub
End Class
\ No newline at end of file
diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb
index 67356c627..5db6080c4 100644
--- a/P3D/Battle/BattleSystemV2/BattleScreen.vb
+++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb
@@ -878,39 +878,25 @@
#End Region
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
- Next
+
+ If OwnPokemonNPC IsNot Nothing Then
+ ForegroundEntities.Add(OwnPokemonNPC)
+ End If
+ If OppPokemonNPC IsNot Nothing Then
+ ForegroundEntities.Add(OppPokemonNPC)
+ End If
+ If OwnTrainerNPC IsNot Nothing Then
+ ForegroundEntities.Add(OwnTrainerNPC)
+ End If
+ If OppTrainerNPC IsNot Nothing Then
+ ForegroundEntities.Add(OppTrainerNPC)
+ End If
+
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
- Canvas.DrawRectangle(New Rectangle(0, CInt(Core.windowSize.Height / 2 - 60), CInt(Core.windowSize.Width), 120), New Color(0, 0, 0, 150))
- Dim t As String = "Waiting for the other player "
- Core.SpriteBatch.DrawString(FontManager.MainFont, t.Remove(t.Length - 2, 2) & LoadingDots.Dots, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), CSng(Core.windowSize.Height / 2 - FontManager.MainFont.MeasureString(t).Y / 2)), Color.White)
- Else
- If BattleMenu.Visible = True Then
- BattleMenu.Draw(Me)
- End If
- End If
Dim ForegroundAnimationList As New List(Of AnimationQueryObject)
Dim BackgroundAnimationList As New List(Of AnimationQueryObject)
@@ -964,14 +950,36 @@ nextIndexBackground:
cQuery.Reverse()
+ Dim BackgroundTarget As New RenderTarget2D(Core.GraphicsDevice, Core.windowSize.Width, Core.windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8)
+ Core.GraphicsDevice.SetRenderTarget(BackgroundTarget)
+ GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Transparent)
+
For Each cQueryObject As QueryObject In cQuery
cQueryObject.Draw(Me)
Next
+ Core.GraphicsDevice.SetRenderTarget(Nothing)
+
+ Dim NPCTarget As New RenderTarget2D(Core.GraphicsDevice, Core.windowSize.Width, Core.windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8)
+ Core.GraphicsDevice.SetRenderTarget(NPCTarget)
+ GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Transparent)
For i = 0 To ForegroundEntities.Count - 1
ForegroundEntities(i).Render()
DebugDisplay.MaxVertices += ForegroundEntities(i).VertexCount
Next
+
+ Core.GraphicsDevice.SetRenderTarget(Nothing)
+ SkyDome.Draw(45.0F)
+ Level.Draw()
+
+ World.DrawWeather(Screen.Level.World.CurrentMapWeather)
+ Core.SpriteBatch.Draw(BackgroundTarget, windowSize, Color.White)
+ Core.SpriteBatch.Draw(NPCTarget, windowSize, Color.White)
+ Else
+ SkyDome.Draw(45.0F)
+ Level.Draw()
+
+ World.DrawWeather(Screen.Level.World.CurrentMapWeather)
End If
If ForegroundAnimationList.Count > 0 Then
Dim cIndex As Integer = 0
@@ -995,6 +1003,16 @@ nextIndexForeground:
End If
'Core.SpriteBatch.DrawString(FontManager.MiniFont, "Battle system not final!", New Vector2(0, Core.windowSize.Height - 20), Color.White)
+ If HasToWaitPVP() = True Then
+ Canvas.DrawRectangle(New Rectangle(0, CInt(Core.windowSize.Height / 2 - 60), CInt(Core.windowSize.Width), 120), New Color(0, 0, 0, 150))
+ Dim t As String = "Waiting for the other player "
+ Core.SpriteBatch.DrawString(FontManager.MainFont, t.Remove(t.Length - 2, 2) & LoadingDots.Dots, New Vector2(CSng(Core.windowSize.Width / 2 - FontManager.MainFont.MeasureString(t).X / 2), CSng(Core.windowSize.Height / 2 - FontManager.MainFont.MeasureString(t).Y / 2)), Color.White)
+ Else
+ If BattleMenu.Visible = True Then
+ BattleMenu.Draw(Me)
+ End If
+ End If
+
TextBox.Draw()
If DrawColoredScreen = True Then
@@ -1340,7 +1358,6 @@ nextIndex:
Else
If Not p.OriginalItem Is Nothing Then
If p.Item IsNot Nothing Then
- Core.Player.Inventory.AddItem(p.OriginalItem.ID.ToString, 1)
If p.OriginalItem.IsGameModeItem = True Then
Core.Player.Inventory.AddItem(p.OriginalItem.gmID, 1)
Else
diff --git a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb
index 61d8dd53d..56dc905f1 100644
--- a/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb
+++ b/P3D/Battle/BattleSystemV2/QueryObjects/AnimationQueryObject.vb
@@ -270,8 +270,8 @@
AnimationSequence.Add(baSound)
End Sub
- 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)
+ Public Sub AnimationBackground(ByVal Texture As Texture2D, ByVal startDelay As Single, ByVal endDelay As Single, ByVal Duration As Single, Optional ByVal AfterFadeInOpacity As Single = 1.0F, Optional ByVal FadeInSpeed As Single = 0.125F, Optional ByVal FadeOutSpeed As Single = 0.125F, Optional ByVal DoTile As Boolean = False, Optional ByVal AnimationWidth As Integer = -1, Optional ByVal AnimationLength As Integer = 1, Optional ByVal AnimationSpeed As Integer = 4, Optional ByVal Scale As Integer = 4)
+ Dim baBackground As BABackground = New BABackground(Texture, startDelay, endDelay, Duration, AfterFadeInOpacity, FadeInSpeed, FadeOutSpeed, DoTile, AnimationWidth, AnimationLength, AnimationSpeed, Scale)
AnimationSequence.Add(baBackground)
End Sub
diff --git a/P3D/Content/Sounds/Battle/Attacks/Psychic/Psychic.wav b/P3D/Content/Sounds/Battle/Attacks/Psychic/Psychic.wav
new file mode 100644
index 000000000..ec0c519fd
Binary files /dev/null and b/P3D/Content/Sounds/Battle/Attacks/Psychic/Psychic.wav differ
diff --git a/P3D/Content/Textures/Battle/Psychic/PsychicBackground.png b/P3D/Content/Textures/Battle/Psychic/PsychicBackground.png
new file mode 100644
index 000000000..fa12b386a
Binary files /dev/null and b/P3D/Content/Textures/Battle/Psychic/PsychicBackground.png differ
diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj
index 1d6021c0c..37af40236 100644
--- a/P3D/P3D.vbproj
+++ b/P3D/P3D.vbproj
@@ -17954,6 +17954,12 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -17984,6 +17990,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
@@ -18062,6 +18071,12 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
@@ -18083,6 +18098,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/P3D/Pokemon/Attacks/Psychic/Psychic.vb b/P3D/Pokemon/Attacks/Psychic/Psychic.vb
index abe7f6806..99397f36d 100644
--- a/P3D/Pokemon/Attacks/Psychic/Psychic.vb
+++ b/P3D/Pokemon/Attacks/Psychic/Psychic.vb
@@ -71,6 +71,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)
+ Dim MoveAnimation As AnimationQueryObject = New AnimationQueryObject(CurrentEntity, BattleFlip, True)
+ MoveAnimation.AnimationPlaySound("Battle\Attacks\Psychic\Psychic", 0.0F, 0)
+ MoveAnimation.AnimationBackground(TextureManager.GetTexture("Textures\Battle\Psychic\PsychicBackground"), 0, 0, 1.5F,,,, True, 32, 11, 4, 6)
+
+ MoveAnimation.AnimationMove(Nothing, False, 0, 0, -0.1, 0.025, False, False, 1, 0.5)
+ MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0.1, 0.025, False, False, 1.75, 0.5)
+ MoveAnimation.AnimationMove(Nothing, False, 0, 0, -0.1, 0.025, False, False, 2.75, 0.5)
+ MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0.1, 0.025, False, False, 3.75, 0.5)
+ MoveAnimation.AnimationMove(Nothing, False, 0, 0, 0, 0.025, False, False, 4.5, 0.5)
+
+ BattleScreen.BattleQuery.Add(MoveAnimation)
+ End Sub
End Class
End Namespace
\ No newline at end of file