diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj
index 4bac39791..4b14ebd60 100644
--- a/P3D/P3D.vbproj
+++ b/P3D/P3D.vbproj
@@ -31802,6 +31802,7 @@
+
diff --git a/P3D/Screens/Screen.vb b/P3D/Screens/Screen.vb
index 664fedbc4..764fca5fe 100644
--- a/P3D/Screens/Screen.vb
+++ b/P3D/Screens/Screen.vb
@@ -91,6 +91,7 @@ Public MustInherit Class Screen
PressStartScreen
CharacterSelectionScreen
GameModeSelectionScreen
+ VoltorbFlipScreen
'TEMPORARY, OLD
PokemonScreen
diff --git a/P3D/Screens/VoltorbFlipScreen.vb b/P3D/Screens/VoltorbFlipScreen.vb
new file mode 100644
index 000000000..aefde1403
--- /dev/null
+++ b/P3D/Screens/VoltorbFlipScreen.vb
@@ -0,0 +1,401 @@
+Imports P3D.Screens.UI
+
+Namespace VoltorbFlip
+ Public Class VoltorbFlipScreen
+
+ Inherits Screen
+
+ 'Animation:
+ Private _closing As Boolean = False
+
+ Private _enrollY As Single = 0F
+ Private _interfaceFade As Single = 0F
+ Private _cursorPosition As New Vector2
+ Private _cursorDest As New Vector2
+
+ Public Shared ReadOnly GridSize As Integer = 5
+ Public Property PreviousLevel As Integer = 1
+ Public Property CurrentLevel As Integer = 1
+ Public Property CurrentCoins As Integer = 0
+ Public Property TotalCoins As Integer = 0
+ Public Property MaxCoins As Integer = 1
+
+ 'Stuff related to blurred PreScreens
+ Private _preScreenTexture As RenderTarget2D
+ Private _preScreenTarget As RenderTarget2D
+ Private _blurScreens As Identifications() = {Identifications.BattleScreen,
+ Identifications.OverworldScreen,
+ Identifications.DirectTradeScreen,
+ Identifications.WonderTradeScreen,
+ Identifications.GTSSetupScreen,
+ Identifications.GTSTradeScreen,
+ Identifications.PVPLobbyScreen}
+
+ Public Sub New(ByVal currentScreen As Screen)
+
+ CreateBoard(1)
+
+ _preScreenTarget = New RenderTarget2D(GraphicsDevice, windowSize.Width, windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8)
+ _blur = New Resources.Blur.BlurHandler(windowSize.Width, windowSize.Height)
+
+ Identification = Identifications.VoltorbFlipScreen
+ PreScreen = currentScreen
+ IsDrawingGradients = True
+
+ Me.MouseVisible = True
+ Me.CanChat = Me.PreScreen.CanChat
+ Me.CanBePaused = Me.PreScreen.CanBePaused
+
+ End Sub
+
+
+ Public Overrides Sub Draw()
+ If _blurScreens.Contains(PreScreen.Identification) Then
+ DrawPrescreen()
+ Else
+ PreScreen.Draw()
+ End If
+
+ DrawGradients(CInt(255 * _interfaceFade))
+
+ DrawBackground()
+
+ End Sub
+
+
+ Private _blur As Resources.Blur.BlurHandler
+
+ Private Sub DrawPrescreen()
+ If _preScreenTexture Is Nothing OrElse _preScreenTexture.IsContentLost Then
+ SpriteBatch.EndBatch()
+
+ Dim target As RenderTarget2D = _preScreenTarget
+ GraphicsDevice.SetRenderTarget(target)
+ GraphicsDevice.Clear(BackgroundColor)
+
+ SpriteBatch.BeginBatch()
+
+ PreScreen.Draw()
+
+ SpriteBatch.EndBatch()
+
+ GraphicsDevice.SetRenderTarget(Nothing)
+
+ SpriteBatch.BeginBatch()
+
+ _preScreenTexture = target
+ End If
+
+ 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
+
+
+ Private Sub DrawBackground()
+ Dim mainBackgroundColor As Color = New Color(48, 151, 70)
+ If _closing Then
+ mainBackgroundColor = New Color(48, 151, 70, CInt(255 * _interfaceFade))
+ End If
+
+ Dim halfWidth As Integer = CInt(Core.windowSize.Width / 2)
+ Dim halfHeight As Integer = CInt(Core.windowSize.Height / 2)
+
+ Canvas.DrawRectangle(New Rectangle(halfWidth - 256, halfHeight - 256, 512, 512), mainBackgroundColor)
+
+ End Sub
+
+ Public Function CreateBoard(ByVal Level As Integer) As List(Of List(Of Tile))
+
+ Dim Board As List(Of List(Of Tile)) = CreateGrid()
+ Dim Data As List(Of Integer) = GetLevelData(Level)
+ Dim Spots As List(Of List(Of Integer)) = New List(Of List(Of Integer))
+
+ For i = 0 To Data(0) + Data(1) + Data(2)
+ Dim SpotList As List(Of Integer) = New List(Of Integer)
+ Dim ValueX As Integer = Random.Next(0, 5)
+ Dim ValueY As Integer = Random.Next(0, 5)
+ SpotList.AddRange({ValueX, ValueY})
+ If Spots.Count > 0 Then
+ Dim AddList As Boolean = True
+ For SpotIndex = 0 To Spots.Count - 1
+ If Spots(SpotIndex)(0) = ValueX AndAlso Spots(SpotIndex)(1) = ValueY Then
+ AddList = False
+ End If
+ Next
+ If AddList = True Then
+ Spots.Add(SpotList)
+ End If
+ Else
+ Spots.Add(SpotList)
+ End If
+ Next
+
+ Dim a = 0
+ While a < Data(0)
+ Dim TileX As Integer = Spots(a)(0)
+ Dim TileY As Integer = Spots(a)(1)
+
+ Board(TileX)(TileY).Value = Tile.Values.Two
+ a += 1
+ End While
+
+ While a < Data(0) + Data(1)
+ Dim TileX As Integer = Spots(a)(0)
+ Dim TileY As Integer = Spots(a)(1)
+
+ Board(TileX)(TileY).Value = Tile.Values.Three
+ a += 1
+ End While
+
+ While a < Data(0) + Data(1) + Data(2)
+ Dim TileX As Integer = Spots(a)(0)
+ Dim TileY As Integer = Spots(a)(1)
+
+ Board(TileX)(TileY).Value = Tile.Values.Voltorb
+ a += 1
+ End While
+
+ MaxCoins = CInt(Math.Pow(2, Data(0)) * Math.Pow(3, Data(1)))
+
+ Return Board
+
+ End Function
+
+ Private Function CreateGrid() As List(Of List(Of Tile))
+ Dim Grid As New List(Of List(Of Tile))
+ For _row = 1 To VoltorbFlipScreen.GridSize
+ Dim Column As New List(Of Tile)
+ For _column = 1 To VoltorbFlipScreen.GridSize
+ Column.Add(New VoltorbFlip.Tile(_row, _column, VoltorbFlip.Tile.Values.One, False))
+ Next
+ Grid.Add(Column)
+ Next
+ Return Grid
+ End Function
+
+ Public Function GetLevelData(ByVal LevelNumber As Integer) As List(Of Integer)
+ Select Case LevelNumber
+ Case 1
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {5, 0, 6}.ToList
+ Case 1
+ Return {4, 1, 6}.ToList
+ Case 2
+ Return {3, 1, 6}.ToList
+ Case 3
+ Return {2, 2, 6}.ToList
+ Case 4
+ Return {0, 3, 6}.ToList
+ End Select
+ Case 2
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {6, 0, 7}.ToList
+ Case 1
+ Return {5, 1, 7}.ToList
+ Case 2
+ Return {3, 2, 7}.ToList
+ Case 3
+ Return {1, 3, 7}.ToList
+ Case 4
+ Return {0, 4, 7}.ToList
+ End Select
+ Case 3
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {7, 0, 8}.ToList
+ Case 1
+ Return {6, 1, 8}.ToList
+ Case 2
+ Return {4, 2, 8}.ToList
+ Case 3
+ Return {2, 3, 8}.ToList
+ Case 4
+ Return {1, 4, 8}.ToList
+ End Select
+ Case 4
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {8, 0, 10}.ToList
+ Case 1
+ Return {5, 2, 10}.ToList
+ Case 2
+ Return {3, 3, 8}.ToList
+ Case 3
+ Return {2, 4, 10}.ToList
+ Case 4
+ Return {0, 5, 8}.ToList
+ End Select
+ Case 5
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {9, 0, 10}.ToList
+ Case 1
+ Return {7, 1, 10}.ToList
+ Case 2
+ Return {6, 2, 10}.ToList
+ Case 3
+ Return {4, 3, 10}.ToList
+ Case 4
+ Return {1, 5, 10}.ToList
+ End Select
+ Case 6
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {8, 1, 10}.ToList
+ Case 1
+ Return {5, 3, 10}.ToList
+ Case 2
+ Return {3, 4, 10}.ToList
+ Case 3
+ Return {2, 5, 10}.ToList
+ Case 4
+ Return {0, 6, 10}.ToList
+ End Select
+ Case 7
+ Dim chance As Integer = CInt(Random.Next(0, 5))
+ Select Case chance
+ Case 0
+ Return {9, 1, 13}.ToList
+ Case 1
+ Return {7, 2, 10}.ToList
+ Case 2
+ Return {6, 3, 10}.ToList
+ Case 3
+ Return {4, 4, 10}.ToList
+ Case 4
+ Return {1, 6, 13}.ToList
+ End Select
+ Case Else
+ Return Nothing
+ End Select
+
+ Return Nothing
+ End Function
+
+ Protected Overrides Function GetFontRenderer() As SpriteBatch
+ If IsCurrentScreen() And _interfaceFade + 0.01F >= 1.0F Then
+ Return FontRenderer
+ Else
+ Return SpriteBatch
+ End If
+ End Function
+
+
+ Public Overrides Sub Update()
+
+ If KeyBoardHandler.KeyPressed(KeyBindings.BackKey1) = True Then
+ SetScreen(Me.PreScreen)
+ End If
+ If _closing Then
+ If _interfaceFade > 0F Then
+ _interfaceFade = MathHelper.Lerp(0, _interfaceFade, 0.8F)
+ If _interfaceFade < 0F Then
+ _interfaceFade = 0F
+ End If
+ End If
+ If _enrollY > 0 Then
+ _enrollY = MathHelper.Lerp(0, _enrollY, 0.8F)
+ If _enrollY <= 0 Then
+ _enrollY = 0
+ End If
+ End If
+ If _enrollY <= 2.0F Then
+ SetScreen(PreScreen)
+ End If
+ Else
+
+ Dim maxWindowHeight As Integer = 400
+ If _enrollY < maxWindowHeight Then
+ _enrollY = MathHelper.Lerp(maxWindowHeight, _enrollY, 0.8F)
+ If _enrollY >= maxWindowHeight Then
+ _enrollY = maxWindowHeight
+ End If
+ End If
+ If _interfaceFade < 1.0F Then
+ _interfaceFade = MathHelper.Lerp(1, _interfaceFade, 0.95F)
+ If _interfaceFade > 1.0F Then
+ _interfaceFade = 1.0F
+ End If
+ End If
+
+
+ End If
+
+ End Sub
+
+ End Class
+
+ Public Class Tile
+ Public Enum Values
+ Voltorb
+ One
+ Two
+ Three
+ End Enum
+ Public Property Row As Integer = 0
+ Public Property Column As Integer = 0
+ Public Property Value As Integer = Tile.Values.Voltorb
+ Public Property Flipped As Boolean = False
+ Private Property Memo1 As Boolean = False
+ Private Property Memo2 As Boolean = False
+ Private Property Memo3 As Boolean = False
+ Private Property Memo4 As Boolean = False
+
+ Public Sub Flip()
+ If Flipped = False Then
+ Flipped = True
+ End If
+ End Sub
+ Public Sub Reset()
+ Row = 0
+ Column = 0
+ Value = Tile.Values.Voltorb
+ Flipped = False
+ End Sub
+ Public Function GetMemo(ByVal MemoNumber As Integer) As Boolean
+ Select Case MemoNumber
+ Case 1
+ Return Memo1
+ Case 2
+ Return Memo2
+ Case 3
+ Return Memo3
+ Case 3
+ Return Memo4
+ Case Else
+ Return Nothing
+ End Select
+ End Function
+ Public Sub SetMemo(ByVal MemoNumber As Integer, ByVal Value As Boolean)
+ Select Case MemoNumber
+ Case Tile.Values.Voltorb
+ Memo1 = Value
+ Case Tile.Values.One
+ Memo2 = Value
+ Case Tile.Values.Two
+ Memo3 = Value
+ Case Tile.Values.Three
+ Memo4 = Value
+ End Select
+ End Sub
+
+ Public Sub New(ByVal Row As Integer, ByVal Column As Integer, ByVal Value As Integer, ByVal Flipped As Boolean)
+ Me.Row = Row
+ Me.Column = Column
+ Me.Value = Value
+ Me.Flipped = Flipped
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file