Public Class PokedexSelectScreen Inherits Screen Dim texture As Texture2D Dim Profiles As New List(Of PokedexProfile) Dim Cursor As Integer = 0 Public Sub New(ByVal currentScreen As Screen) Me.Identification = Identifications.PokedexScreen Me.PreScreen = currentScreen Me.texture = TextureManager.GetTexture("GUI\Menus\General") Me.MouseVisible = True Me.CanMuteAudio = True Me.CanBePaused = True For Each p As Pokedex In Core.Player.Pokedexes If p.IsActivated = True Then Me.Profiles.Add(New PokedexProfile With {.Pokedex = p, .Obtained = p.Obtained, .Seen = p.Seen}) End If Next Me.AchievePokedexEmblems() End Sub Private Sub AchievePokedexEmblems() ' Eevee: Dim eevee() As Integer = {134, 135, 136, 196, 197, 470, 471, 700} Dim hasEevee As Boolean = True For Each e As Integer In eevee If Pokedex.GetEntryType(Core.Player.PokedexData, e.ToString) < 2 Then hasEevee = False Exit For End If Next If hasEevee = True Then GameJolt.Emblem.AchieveEmblem("eevee") End If ' Pokédex: If Core.Player.IsGameJoltSave = True Then If Me.Profiles(0).Pokedex.Obtained >= Me.Profiles(0).Pokedex.Count Then GameJolt.Emblem.AchieveEmblem("pokedex") End If End If End Sub Structure PokedexProfile Dim Obtained As Integer Dim Seen As Integer Dim Pokedex As Pokedex End Structure Public Overrides Sub Draw() Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216)) For y = -64 To Core.windowSize.Height Step 64 Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + PokedexScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White) Next Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1) Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1) Core.SpriteBatch.DrawString(FontManager.MainFont, "Select a Pokédex", New Vector2(100, 24), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F) For i = 0 To Me.Profiles.Count If i = Me.Profiles.Count Then Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 100 + i * 96, 64 * 5, 64), New Rectangle(32, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 6, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Core.SpriteBatch.DrawString(FontManager.MainFont, "Habitat-Dex", New Vector2(120, 120 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Else Dim p As Pokedex = Me.Profiles(i).Pokedex Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 100 + i * 96, 64 * 5, 64), New Rectangle(32, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 6, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Core.SpriteBatch.DrawString(FontManager.MainFont, p.Name, New Vector2(120, 120 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Profiles(i).Obtained.ToString(), New Vector2(460, 120 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) If Me.Profiles(i).Obtained >= Me.Profiles(i).Pokedex.Count Then Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), ""), New Rectangle(430, 122 + i * 96, 20, 20), Color.White) Else If Me.Profiles(i).Seen + Me.Profiles(i).Obtained >= Me.Profiles(i).Pokedex.Count Then Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), ""), New Rectangle(430, 122 + i * 96, 20, 20), Color.White) End If End If End If Next DrawCursor() End Sub Private Sub DrawCursor() Dim cPosition As Vector2 = New Vector2(512, 96 + Me.Cursor * 96 - 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 Public Overrides Sub Update() If Controls.Up(True, True, True, True, True, True) = True Then Me.Cursor -= 1 If Controls.ShiftDown() = True Then Me.Cursor -= 4 End If End If If Controls.Down(True, True, True, True, True, True) = True Then Me.Cursor += 1 If Controls.ShiftDown() = True Then Me.Cursor += 4 End If End If Me.Cursor = Me.Cursor.Clamp(0, Me.Profiles.Count) If Controls.Accept(True, False, False) = True Then For i = 0 To Me.Profiles.Count If New Rectangle(100, 100 + i * 96, 64 * 7, 64).Contains(MouseHandler.MousePosition) = True Then If i = Cursor Then If Me.Cursor = Me.Profiles.Count Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexHabitatScreen(Me)) Else SoundManager.PlaySound("select") Core.SetScreen(New PokedexScreen(Me, Me.Profiles(Me.Cursor), Nothing)) End If Else Cursor = i End If End If Next End If If Controls.Accept(False, True, True) = True Then If Me.Cursor = Me.Profiles.Count Then Core.SetScreen(New PokedexHabitatScreen(Me)) SoundManager.PlaySound("select") Else Core.SetScreen(New PokedexScreen(Me, Me.Profiles(Me.Cursor), Nothing)) SoundManager.PlaySound("select") End If End If If Controls.Dismiss(True, True, True) = True Then SoundManager.PlaySound("select") Core.SetScreen(New TransitionScreen(Core.CurrentScreen, Me.PreScreen, Color.White, False)) End If PokedexScreen.TileOffset += 1 If PokedexScreen.TileOffset >= 64 Then PokedexScreen.TileOffset = 0 End If End Sub End Class Public Class PokedexHabitatScreen Inherits Screen Dim texture As Texture2D Dim HabitatList As New List(Of PokedexScreen.Habitat) Dim Cursor As Integer = 0 Dim Scroll As Integer = 0 Public Sub New(ByVal currentScreen As Screen) Me.Identification = Identifications.PokedexHabitatScreen Me.PreScreen = currentScreen Me.texture = TextureManager.GetTexture("GUI\Menus\General") Me.MouseVisible = True Me.CanMuteAudio = True Me.CanBePaused = True For Each file As String In System.IO.Directory.GetFiles(GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath, "*.*", IO.SearchOption.AllDirectories) If file.EndsWith(".poke") = True Then Dim fileName As String = file.Remove(0, (GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath & "\").Length - 1) Dim newHabitat As New PokedexScreen.Habitat(file) Dim exists As Boolean = False For Each h As PokedexScreen.Habitat In Me.HabitatList If h.Name.ToLower() = newHabitat.Name.ToLower() Then exists = True h.Merge(newHabitat) Exit For End If Next If exists = False AndAlso Core.Player.PokeFiles.Contains(fileName) = True Then HabitatList.Add(New PokedexScreen.Habitat(file)) End If End If Next Me.HabitatList = (From h As PokedexScreen.Habitat In Me.HabitatList Order By h.Name Ascending).ToList() End Sub Public Overrides Sub Draw() Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216)) For y = -64 To Core.windowSize.Height Step 64 Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + PokedexScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White) Next Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1) Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1) Core.SpriteBatch.DrawString(FontManager.MainFont, "Select a Habitat", New Vector2(100, 24), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F) For i = Scroll To Scroll + 5 If i <= Me.HabitatList.Count - 1 Then Dim p As Integer = i - Scroll Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 100 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 100 + p * 96, 64 * 8, 64), New Rectangle(32, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 9, 100 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Core.SpriteBatch.Draw(HabitatList(i).Texture, New Rectangle(120, 108 + p * 96, 64, 48), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, HabitatList(i).Name, New Vector2(200, 120 + p * 96), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Dim t As String = HabitatList(i).PokemonCaught.ToString() & "/" & HabitatList(i).PokemonList.Count Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(680 - CSng((FontManager.MainFont.MeasureString(t).X * 1.0F) / 2.0F), 120 + p * 96), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Dim progressTexture As Texture2D = Me.HabitatList(i).ProgressTexture If Not progressTexture Is Nothing Then Core.SpriteBatch.Draw(progressTexture, New Rectangle(CInt(650 - CSng((FontManager.MainFont.MeasureString(t).X * 1.0F) / 2.0F)), 120 + p * 96, 20, 20), Color.White) End If End If Next DrawCursor() End Sub Private Sub DrawCursor() Dim cPosition As Vector2 = New Vector2(520, 100 + Me.Cursor * 96 - 42) 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 Public Overrides Sub Update() If Controls.Down(True, True, True, True, True, True) = True Then Me.Cursor += 1 If Controls.ShiftDown() = True Then Me.Cursor += 4 End If End If If Controls.Up(True, True, True, True, True, True) = True Then Me.Cursor -= 1 If Controls.ShiftDown() = True Then Me.Cursor -= 4 End If End If While Me.Cursor > 5 Me.Cursor -= 1 Me.Scroll += 1 End While While Me.Cursor < 0 Me.Cursor += 1 Me.Scroll -= 1 End While If Me.HabitatList.Count < 7 Then Me.Scroll = 0 Else Me.Scroll = Me.Scroll.Clamp(0, Me.HabitatList.Count - 6) End If If Me.HabitatList.Count < 6 Then Me.Cursor = Me.Cursor.Clamp(0, Me.HabitatList.Count - 1) Else Me.Cursor = Me.Cursor.Clamp(0, 5) End If If Me.HabitatList.Count > 0 Then If Controls.Accept(True, False, False) = True Then For i = Scroll To Scroll + 5 If i <= Me.HabitatList.Count - 1 Then If New Rectangle(100, 100 + (i - Scroll) * 96, 640, 64).Contains(MouseHandler.MousePosition) = True Then If i = Cursor + Scroll Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll))) Else Cursor = i - Scroll End If End If End If Next End If If Controls.Accept(False, True, True) = True Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll))) End If End If If Controls.Dismiss(True, True, True) = True Then Core.SetScreen(Me.PreScreen) SoundManager.PlaySound("select") End If PokedexScreen.TileOffset += 1 If PokedexScreen.TileOffset >= 64 Then PokedexScreen.TileOffset = 0 End If End Sub End Class Public Class PokedexScreen Inherits Screen Public Shared TileOffset As Integer = 0 Public Enum OrderType Numeric Weigth Height Alphabetically End Enum Public Enum FilterType Type1 Type2 Name End Enum Structure Filter Public FilterType As FilterType Public FilterValue As String End Structure Dim texture As Texture2D Public ReverseOrder As Boolean = False Public Order As OrderType = OrderType.Numeric Public Filters As New List(Of Filter) Public Profile As PokedexSelectScreen.PokedexProfile Public CHabitat As Habitat = Nothing Dim Scroll As Integer = 0 Dim Cursor As New Vector2(0) Public Shared TempPokemonStorage As New Dictionary(Of Integer, Pokemon) Shared TempPokemonDexType As New Dictionary(Of Integer, Integer) Public PokemonList As New List(Of Pokemon) Dim menu As SelectMenu Public Sub New(ByVal currentScreen As Screen, ByVal Profile As PokedexSelectScreen.PokedexProfile, ByVal Habitat As Habitat) Me.Identification = Identifications.PokedexScreen Me.PreScreen = currentScreen Me.texture = TextureManager.GetTexture("GUI\Menus\General") Me.Profile = Profile Me.CHabitat = Habitat Me.MouseVisible = True Me.CanMuteAudio = True Me.CanBePaused = True TempPokemonStorage.Clear() TempPokemonDexType.Clear() SetList() Me.menu = New SelectMenu({""}.ToList(), 0, Nothing, 0) Me.menu.Visible = False End Sub Private Sub SetList() PokemonList.Clear() TempPokemonStorage.Clear() TempPokemonDexType.Clear() Dim neededEntryType As Integer = 0 Select Case Me.Order Case OrderType.Alphabetically neededEntryType = 1 Case OrderType.Height, OrderType.Weigth neededEntryType = 2 End Select For Each f As Filter In Me.Filters Dim thisType As Integer = 0 If f.FilterType = FilterType.Name Then thisType = 1 Else thisType = 2 End If If thisType > neededEntryType Then neededEntryType = thisType End If Next Dim pokeSearchList As New List(Of String) If CHabitat Is Nothing Then ' Add any external Pokémon if specified to do so: If Profile.Pokedex.IncludeExternalPokemon = True Then If Pokedex.PokemonMaxCount > 0 Then For i = 1 To Pokedex.PokemonMaxCount If Me.Profile.Pokedex.HasPokemon(i.ToString, False) = False Then If Pokedex.GetEntryType(Core.Player.PokedexData, i.ToString) > 0 Then Profile.Pokedex.PokemonList.Add(Profile.Pokedex.PokemonList.Count + 1, i.ToString) End If End If Next End If End If For Each i As String In Profile.Pokedex.PokemonList.Values pokeSearchList.Add(i) Next Else For Each i As String In CHabitat.PokemonList pokeSearchList.Add(i) Next End If For i = 0 To pokeSearchList.Count - 1 If Pokemon.PokemonDataExists(pokeSearchList(i).GetSplit(0, "_")) = True OrElse Pokemon.PokemonDataExists(pokeSearchList(i).GetSplit(0, ";")) = True Then Dim pID As Integer Dim pAD As String = "" If pokeSearchList(i).Contains(";") Then pID = CInt(pokeSearchList(i).GetSplit(0, ";")) pAD = pokeSearchList(i).GetSplit(1, ";") ElseIf pokeSearchList(i).Contains("_") Then Dim additionalValue As String = PokemonForms.GetAdditionalValueFromDataFile(pokeSearchList(i)) pID = CInt(pokeSearchList(i).GetSplit(0, "_")) If additionalValue <> "" Then pAD = additionalValue End If Else pID = CInt(pokeSearchList(i)) End If Dim p As Pokemon If pAD <> "" Then p = Pokemon.GetPokemonByID(pID, pAD) Else p = Pokemon.GetPokemonByID(pID, pAD, True) End If If Pokedex.GetEntryType(Core.Player.PokedexData, pokeSearchList(i)) >= neededEntryType Then Dim valid As Boolean = True For Each F As Filter In Me.Filters Select Case F.FilterType Case FilterType.Name If p.GetName(True).ToUpper().StartsWith(F.FilterValue.ToUpper()) = False Then valid = False Exit For End If Case FilterType.Type1 If p.Type1.Type <> New Element(F.FilterValue).Type Then valid = False Exit For End If Case FilterType.Type2 If p.Type2.Type <> New Element(F.FilterValue).Type Then valid = False Exit For End If End Select Next If valid = True Then If Profile.Pokedex IsNot Nothing Then If Profile.Pokedex.GetPlace(pokeSearchList(i)) <> -1 Then Me.PokemonList.Add(p) End If Else Me.PokemonList.Add(p) End If End If End If End If Next Select Case Me.Order Case OrderType.Numeric If CHabitat Is Nothing Then If Me.ReverseOrder = True Then Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By Profile.Pokedex.GetPlace(PokemonForms.GetPokemonDataFileName(p.Number, p.AdditionalData, True)) Descending).ToList() Else Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By Profile.Pokedex.GetPlace(PokemonForms.GetPokemonDataFileName(p.Number, p.AdditionalData, True)) Ascending).ToList() End If Else If Me.ReverseOrder = True Then Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By PokemonForms.GetPokemonDataFileName(p.Number, p.AdditionalData, True) Descending).ToList() Else Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By PokemonForms.GetPokemonDataFileName(p.Number, p.AdditionalData, True) Ascending).ToList() End If End If Case OrderType.Alphabetically If Me.ReverseOrder = True Then Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.GetName(True) Descending).ToList() Else Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.GetName(True) Ascending).ToList() End If Case OrderType.Weigth If Me.ReverseOrder = True Then Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Weight Descending).ToList() Else Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Weight Ascending).ToList() End If Case OrderType.Height If Me.ReverseOrder = True Then Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Height Descending).ToList() Else Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Height Ascending).ToList() End If End Select Me.ClampCursor() End Sub Public Overrides Sub Draw() Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216)) For y = -64 To Core.windowSize.Height Step 64 Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White) Next Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1) Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1) Canvas.DrawRectangle(New Rectangle(50, 30, 564, 90), New Color(42, 167, 198, 150)) If CHabitat Is Nothing Then Core.SpriteBatch.DrawString(FontManager.MainFont, Profile.Pokedex.Name, New Vector2(60, 55), Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F) Core.SpriteBatch.DrawString(FontManager.MainFont, "Seen: " & Environment.NewLine & Environment.NewLine & "Obtained: ", New Vector2(420, 45), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, Profile.Seen + Profile.Obtained & Environment.NewLine & Environment.NewLine & Profile.Obtained, New Vector2(540, 45), Color.Black) Else Core.SpriteBatch.DrawString(FontManager.MainFont, CHabitat.Name, New Vector2(60, 80), Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F) Core.SpriteBatch.Draw(CHabitat.Texture, New Rectangle(60, 32, 64, 48), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, "Available: " & Environment.NewLine & Environment.NewLine & "Obtained: ", New Vector2(420, 45), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, CHabitat.PokemonList.Count & Environment.NewLine & Environment.NewLine & CHabitat.PokemonCaught, New Vector2(540, 45), Color.Black) Dim progressTexture As Texture2D = Me.CHabitat.ProgressTexture If Not progressTexture Is Nothing Then Core.SpriteBatch.Draw(progressTexture, New Rectangle(134, 46, 20, 20), Color.White) End If End If If PokemonList.Count > 0 Then For x = 0 To 5 For y = 0 To 4 Dim id As Integer = (y + Scroll) * 6 + x If id <= Me.PokemonList.Count - 1 Then Dim dexID As String = PokemonForms.GetPokemonDataFileName(Me.PokemonList(id).Number, Me.PokemonList(id).AdditionalData, True) If Not CHabitat Is Nothing OrElse Me.Profile.Pokedex.OriginalCount >= Profile.Pokedex.GetPlace(dexID) Then Canvas.DrawRectangle(New Rectangle(50 + x * 100, 140 + y * 100, 64, 92), New Color(42, 167, 198, 150)) Else Canvas.DrawBorder(3, New Rectangle(50 + x * 100, 140 + y * 100, 64, 92), New Color(42, 167, 198, 150)) End If Dim p As Pokemon = Nothing Dim entryType As Integer = 0 If TempPokemonStorage.ContainsKey(id + 1) = False Then TempPokemonStorage.Add(id + 1, Me.PokemonList(id)) TempPokemonDexType.Add(id + 1, Pokedex.GetEntryType(Core.Player.PokedexData, dexID)) End If p = TempPokemonStorage(id + 1) entryType = TempPokemonDexType(id + 1) If Cursor = New Vector2(x, y) Then DrawPokemonPreview(p) End If Dim drawBlack As Boolean = False If dexID.Contains(";") = False Then If entryType = 0 Then Dim formEntry As Integer = Pokedex.HasAnyForm(Me.PokemonList(id).Number) If formEntry > 0 Then entryType = formEntry Dim pForms As List(Of String) = PokemonForms.GetAdditionalDataForms(Me.PokemonList(id).Number) If dexID.Contains("_") = True Then If pForms Is Nothing Then drawBlack = True End If End If End If End If End If Dim c As Color = Color.Gray If entryType > 0 Then If entryType > 1 Then c = Color.White End If If drawBlack = True Then c = Color.Black End If Dim pokeTexture = p.GetMenuTexture() Dim pokeTextureScale As Vector2 = New Vector2(CSng(32 / pokeTexture.Width * 2), CSng(32 / pokeTexture.Height * 2)) Core.SpriteBatch.Draw(pokeTexture, New Rectangle(50 + x * 100, 140 + y * 100, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), c) End If Dim no As String = "000" If CHabitat Is Nothing Then no = Profile.Pokedex.GetPlace(dexID).ToString() Else no = p.Number.ToString() End If While no.Length < 3 no = "0" & no End While Core.SpriteBatch.DrawString(FontManager.MainFont, no, New Vector2(50 + x * 100 + CInt(32 - FontManager.MainFont.MeasureString(no).X / 2), 206 + y * 100), Color.White) End If Next Next Else Canvas.DrawGradient(New Rectangle(50, 300, 80, 90), New Color(84, 198, 216), New Color(42, 167, 198, 150), True, -1) Canvas.DrawRectangle(New Rectangle(130, 300, 404, 90), New Color(42, 167, 198, 150)) Canvas.DrawGradient(New Rectangle(534, 300, 80, 90), New Color(42, 167, 198, 150), New Color(84, 198, 216), True, -1) Core.SpriteBatch.DrawString(FontManager.MainFont, "No search results.", New Vector2(50 + CInt(564 / 2) - CInt(FontManager.MainFont.MeasureString("No search results.").X / 2), 330), Color.White) End If Canvas.DrawRectangle(New Rectangle(670, 30, 480, 90), New Color(42, 167, 198, 150)) Dim orderText As String = "Numeric" Select Case Me.Order Case OrderType.Alphabetically orderText = "A-Z" Case OrderType.Height orderText = "Height" Case OrderType.Weigth orderText = "Weight" End Select Dim filterText As String = "None" If Filters.Count > 0 Then filterText = "" For Each f As Filter In Me.Filters If filterText <> "" Then filterText &= ", " End If Select Case f.FilterType Case FilterType.Name filterText &= "Name" Case FilterType.Type1 filterText &= "Type 1" Case FilterType.Type2 filterText &= "Type 2" End Select Next End If Core.SpriteBatch.DrawString(FontManager.MainFont, "Order:" & Environment.NewLine & "Filter:" & Environment.NewLine & "Press " & KeyBindings.SpecialKey.ToString & " on the keyboard to search.", New Vector2(685, 45), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, orderText & Environment.NewLine & filterText, New Vector2(790, 45), Color.Black) If menu.Visible = True Then menu.Draw() Else If PokemonList.Count > 0 Then DrawCursor() End If End If End Sub Private Function GetPlace(ByVal PokemonNumber As Integer) As Integer For i = 0 To PokemonList.Count - 1 If PokemonList(i).Number = PokemonNumber Then Return i + 1 End If Next Return -1 End Function Private Sub DrawPokemonPreview(ByVal p As Pokemon) Dim dexID As String = PokemonForms.GetPokemonDataFileName(p.Number, p.AdditionalData, True) Dim entryType As Integer = Pokedex.GetEntryType(Core.Player.PokedexData, dexID) If dexID.Contains("_") = False AndAlso dexID.Contains(";") = False Then If entryType = 0 Then Dim formEntry As Integer = Pokedex.HasAnyForm(p.Number) If formEntry > 0 Then entryType = formEntry Dim pForms As List(Of String) = PokemonForms.GetAdditionalDataForms(p.Number) End If End If End If For i = 0 To 4 Canvas.DrawGradient(New Rectangle(650, 300 + i * 40, 50, 2), New Color(255, 255, 255, 10), New Color(255, 255, 255, 255), True, -1) Canvas.DrawRectangle(New Rectangle(700, 300 + i * 40, 350, 2), Color.White) Canvas.DrawGradient(New Rectangle(1050, 300 + i * 40, 50, 2), New Color(255, 255, 255, 255), New Color(255, 255, 255, 10), True, -1) Next Dim no As String = "000" If CHabitat Is Nothing Then no = Profile.Pokedex.GetPlace(dexID).ToString() Else no = p.Number.ToString() End If While no.Length < 3 no = "0" & no End While If entryType = 0 Then Core.SpriteBatch.DrawString(FontManager.MainFont, "???" & Environment.NewLine & Environment.NewLine & "No. " & no, New Vector2(864, 200), Color.White) Else Core.SpriteBatch.DrawString(FontManager.MainFont, p.GetName(True) & Environment.NewLine & Environment.NewLine & "No. " & no, New Vector2(864, 200), Color.White) Core.SpriteBatch.Draw(p.GetTexture(True), New Rectangle(CInt(680 - p.GetTexture(True).Width / 4), CInt(140 - p.GetTexture(True).Height / 4), MathHelper.Min(CInt(p.GetTexture(True).Width * 2), 256), MathHelper.Min(CInt(p.GetTexture(True).Height * 2), 256)), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, "SPECIES", New Vector2(680, 310), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "TYPE", New Vector2(680, 350), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "HEIGHT", New Vector2(680, 390), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "WEIGHT", New Vector2(680, 430), Color.Black) Canvas.DrawRectangle(New Rectangle(670, 480, 480, 152), New Color(42, 167, 198, 150)) If Not CHabitat Is Nothing Then Dim encounterTypes As New List(Of Integer) For Each ec As PokedexScreen.Habitat.EncounterPokemon In CHabitat.ObtainTypeList If ec.PokemonID = PokemonForms.GetPokemonDataFileName(p.Number, p.AdditionalData) Then If encounterTypes.Contains(ec.EncounterType) = False Then encounterTypes.Add(ec.EncounterType) End If End If Next For i = 0 To encounterTypes.Count - 1 Dim encounterType As Integer = encounterTypes(i) Core.SpriteBatch.Draw(PokedexScreen.Habitat.GetEncounterTypeImage(encounterType), New Rectangle(824 + i * 32, 266, 32, 32), Color.White) Next End If If entryType > 1 Then Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Species, New Vector2(850, 310), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "", New Vector2(850, 350), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Height & " m", New Vector2(850, 390), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Weight & " kg", New Vector2(850, 430), Color.Black) Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(850, 356, 48, 16), p.Type1.GetElementImage(), Color.White) If p.Type2.Type <> Element.Types.Blank Then Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(900, 356, 48, 16), p.Type2.GetElementImage(), Color.White) End If Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 448), New Vector2(688, 490), Color.Black) Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), ""), New Rectangle(992, 242, 20, 20), Color.White) If entryType > 2 Then SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\PokemonInfo"), New Rectangle(1033, 243, 18, 18), New Rectangle(16, 0, 9, 9), Color.White) End If Else Core.SpriteBatch.DrawString(FontManager.MainFont, "??? Pokémon", New Vector2(850, 310), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "???", New Vector2(850, 350), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "??? m", New Vector2(850, 390), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "??? kg", New Vector2(850, 430), Color.Black) Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), ""), New Rectangle(992, 242, 20, 20), Color.White) End If End If End Sub Private Sub DrawCursor() Dim cPosition As Vector2 = New Vector2(50 + Me.Cursor.X * 100 + 42, 140 + Me.Cursor.Y * 100 - 42) 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 Public Overrides Sub Update() If menu.Visible = True Then menu.Update() Else If Controls.Left(True, True, False, True, True, True) = True Then Me.Cursor.X -= 1 End If If Controls.Right(True, True, False, True, True, True) = True Then Me.Cursor.X += 1 End If If Controls.Up(True, True, True, True, True, True) = True Then Me.Cursor.Y -= 1 If Controls.ShiftDown() = True Then Me.Cursor.Y -= 4 End If End If If Controls.Down(True, True, True, True, True, True) = True Then Me.Cursor.Y += 1 If Controls.ShiftDown() = True Then Me.Cursor.Y += 4 End If End If If Cursor.X > 5 Then Cursor.X = 0 Cursor.Y += 1 End If If Cursor.X < 0 Then Cursor.X = 5 Cursor.Y -= 1 End If While Cursor.Y < 0 Me.Cursor.Y += 1 Me.Scroll -= 1 End While While Cursor.Y > 4 Me.Cursor.Y -= 1 Me.Scroll += 1 End While If Controls.Accept(True, False, False) = True Then For i = 0 To 29 Dim x As Integer = i Dim y As Integer = 0 While x > 5 x -= 6 y += 1 End While If New Rectangle(50 + x * 100, 140 + y * 100, 64, 92).Contains(MouseHandler.MousePosition) = True Then If Cursor.X + Cursor.Y * 6 = i Then Dim dexIndex As Integer = CInt((Cursor.Y + Scroll) * 6 + Cursor.X + 1) If TempPokemonDexType(dexIndex) > 0 Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexViewScreen(Me, TempPokemonStorage(dexIndex), False, dexIndex - 1)) Else Dim formEntry As Integer = Pokedex.HasAnyForm(TempPokemonStorage(dexIndex).Number) If formEntry > 0 Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexViewScreen(Me, TempPokemonStorage(dexIndex), False, dexIndex - 1)) End If End If Else Cursor.X = x Cursor.Y = y End If End If Next End If ClampCursor() If Controls.Accept(False, True, True) = True Then Dim dexIndex As Integer = CInt((Cursor.Y + Scroll) * 6 + Cursor.X + 1) If TempPokemonDexType(dexIndex) > 0 Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexViewScreen(Me, TempPokemonStorage(dexIndex), False, dexIndex - 1)) End If End If If KeyBoardHandler.KeyPressed(KeyBindings.SpecialKey) = True Or ControllerHandler.ButtonPressed(Buttons.Y) = True Then Me.menu = New SelectMenu({"Order", "Filter", "Reset", "Back"}.ToList(), 0, AddressOf SelectMenu1, 3) End If If Controls.Dismiss(True, True, True) = True Then If Me.Filters.Count > 0 Or Me.Order <> OrderType.Numeric Or Me.ReverseOrder = True Then SoundManager.PlaySound("select") Me.Filters.Clear() Me.ReverseOrder = False Me.Order = OrderType.Numeric Me.SetList() Else SoundManager.PlaySound("select") Core.SetScreen(Me.PreScreen) End If End If End If TileOffset += 1 If TileOffset >= 64 Then TileOffset = 0 End If End Sub Private Sub ClampCursor() Dim linesCount As Integer = CInt(Math.Ceiling(Me.PokemonList.Count / 6)) If linesCount < 6 Then Me.Scroll = 0 Else Me.Scroll = Me.Scroll.Clamp(0, linesCount - 5) End If Dim maxY As Integer = linesCount - Scroll - 1 Me.Cursor.Y = Me.Cursor.Y.Clamp(0, maxY) If Me.Cursor.Y = maxY Then Dim maxX As Integer = Me.PokemonList.Count While maxX > 6 maxX -= 6 End While Me.Cursor.X = Me.Cursor.X.Clamp(0, maxX - 1) End If End Sub Public Overrides Sub ChangeTo() TempPokemonDexType.Clear() TempPokemonStorage.Clear() End Sub #Region "Menus" Private Sub SelectMenu1(ByVal s As SelectMenu) Select Case s.SelectedItem.ToLower() Case "order" Me.menu = New SelectMenu({"Type", "Reverse: " & Me.ReverseOrder.ToString(), "Back"}.ToList(), 0, AddressOf SelectMenuOrder, 2) Case "filter" Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4) Case "reset" Me.Filters.Clear() Me.ReverseOrder = False Me.Order = OrderType.Numeric Me.SetList() End Select End Sub Private Sub SelectMenuFilter(ByVal s As SelectMenu) Select Case s.SelectedItem.ToLower() Case "name" Me.menu = New SelectMenu({"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Back"}.ToList(), 0, AddressOf SelectMenuNameFilter, -1) Case "type1" Me.menu = New SelectMenu({"Normal", "Fire", "Fighting", "Water", "Flying", "Grass", "Poison", "Electric", "Ground", "Psychic", "Rock", "Ice", "Bug", "Dragon", "Ghost", "Dark", "Steel", "Fairy", "Blank", "Back"}.ToList(), 0, AddressOf SelectMenuType1Filter, -1) Case "type2" Me.menu = New SelectMenu({"Normal", "Fire", "Fighting", "Water", "Flying", "Grass", "Poison", "Electric", "Ground", "Psychic", "Rock", "Ice", "Bug", "Dragon", "Ghost", "Dark", "Steel", "Fairy", "Blank", "Back"}.ToList(), 0, AddressOf SelectMenuType2Filter, -1) Case "clear" Me.Filters.Clear() Me.SetList() Case "back" Me.menu = New SelectMenu({"Order", "Filter", "Reset", "Back"}.ToList(), 0, AddressOf SelectMenu1, 3) End Select End Sub Private Sub SelectMenuType1Filter(ByVal s As SelectMenu) If s.SelectedItem <> "Back" Then For i = 0 To Filters.Count - 1 If Filters(i).FilterType = FilterType.Type1 Then Filters.RemoveAt(i) Exit For End If Next Filters.Add(New Filter With {.FilterType = FilterType.Type1, .FilterValue = s.SelectedItem}) SetList() Else Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4) End If End Sub Private Sub SelectMenuType2Filter(ByVal s As SelectMenu) If s.SelectedItem <> "Back" Then For i = 0 To Filters.Count - 1 If Filters(i).FilterType = FilterType.Type2 Then Filters.RemoveAt(i) Exit For End If Next Filters.Add(New Filter With {.FilterType = FilterType.Type2, .FilterValue = s.SelectedItem}) SetList() Else Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4) End If End Sub Private Sub SelectMenuNameFilter(ByVal s As SelectMenu) If s.SelectedItem <> "Back" Then For i = 0 To Filters.Count - 1 If Filters(i).FilterType = FilterType.Name Then Filters.RemoveAt(i) Exit For End If Next Filters.Add(New Filter With {.FilterType = FilterType.Name, .FilterValue = s.SelectedItem}) SetList() Else Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4) End If End Sub Private Sub SelectMenuOrder(ByVal s As SelectMenu) Select Case s.SelectedItem.ToLower() Case "type" Me.menu = New SelectMenu({"Numeric", "A-Z", "Weight", "Height", "Back"}.ToList(), 0, AddressOf SelectMenuOrderType, 4) Case "reverse: " & Me.ReverseOrder.ToString().ToLower() Me.ReverseOrder = Not Me.ReverseOrder Me.menu = New SelectMenu({"Type", "Reverse: " & Me.ReverseOrder.ToString(), "Back"}.ToList(), 0, AddressOf SelectMenuOrder, 2) Me.SetList() Case "back" Me.menu = New SelectMenu({"Order", "Filter", "Reset", "Back"}.ToList(), 0, AddressOf SelectMenu1, 3) End Select End Sub Private Sub SelectMenuOrderType(ByVal s As SelectMenu) Select Case s.SelectedItem.ToLower() Case "numeric" Me.Order = OrderType.Numeric Me.SetList() Case "a-z" Me.Order = OrderType.Alphabetically Me.SetList() Case "weight" Me.Order = OrderType.Weigth Me.SetList() Case "height" Me.Order = OrderType.Height Me.SetList() Case "back" Me.menu = New SelectMenu({"Type", "Reverse: " & Me.ReverseOrder.ToString(), "Back"}.ToList(), 0, AddressOf SelectMenuOrder, 2) End Select End Sub #End Region Private Class SelectMenu Dim Items As New List(Of String) Dim Index As Integer = 0 Public Delegate Sub ClickEvent(ByVal s As SelectMenu) Dim ClickHandler As ClickEvent = Nothing Dim BackIndex As Integer = 0 Public Visible As Boolean = True Public Scroll As Integer = 0 Dim t1 As Texture2D Dim t2 As Texture2D Public Sub New(ByVal Items As List(Of String), ByVal Index As Integer, ByVal ClickHandle As ClickEvent, ByVal BackIndex As Integer) Me.Items = Items Me.Index = Index Me.ClickHandler = ClickHandle Me.BackIndex = BackIndex If Me.BackIndex < 0 Then Me.BackIndex = Me.Items.Count + Me.BackIndex End If Me.Visible = True t1 = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(16, 16, 16, 16), "") t2 = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(32, 16, 16, 16), "") End Sub Public Sub Update() If Visible = True Then If Controls.Up(True, True, True, True, True, True) = True Then Me.Index -= 1 End If If Controls.Down(True, True, True, True, True, True) = True Then Me.Index += 1 End If Me.Index = Me.Index.Clamp(0, Me.Items.Count - 1) 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 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 ClickHandler(Me) SoundManager.PlaySound("select") End If Me.Visible = False End If If Controls.Dismiss(True, True, True) = True Then Me.Index = Me.BackIndex If Not ClickHandler Is Nothing Then ClickHandler(Me) SoundManager.PlaySound("select") 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 Me.Index = i End If End If Next If Index - Scroll > 8 Then Scroll = Index - 8 End If If Index - Scroll < 0 Then Scroll = Index End If End If End Sub Public Sub Draw() If Visible = True Then For i = Scroll To Me.Scroll + 8 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)) 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) If Me.Index = i Then Dim cPosition As Vector2 = New Vector2(startPos.X + 128, startPos.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 If End If Next End If End Sub Public ReadOnly Property SelectedItem() As String Get Return Items(Me.Index) End Get End Property End Class Public Class Habitat Public Enum HabitatTypes As Integer Grassland = 0 Forest = 1 WatersEdge = 2 Sea = 3 Cave = 4 Mountain = 5 RoughTerrain = 6 City = 7 End Enum Public Structure EncounterPokemon Public PokemonID As String Public EncounterType As Integer Public Daytimes() As Integer End Structure Dim MergeData() As String = {} ' Temporary data storage if needs to merge. Public File As String = "" Public Name As String = "" Public HabitatType As HabitatTypes = HabitatTypes.Grassland Public PokemonList As New List(Of String) Public ObtainTypeList As New List(Of EncounterPokemon) Public PokemonCaught As Integer = 0 Public PokemonSeen As Integer = 0 Public Sub New(ByVal file As String) Security.FileValidation.CheckFileValid(file, False, "PokedexScreen.vb") Dim data() As String = System.IO.File.ReadAllLines(file) Me.MergeData = data Me.File = file For Each line As String In data If line.ToLower().StartsWith("name=") = True Then Me.Name = line.Remove(0, 5) ElseIf line.ToLower().StartsWith("type=") = True Then Dim arg As String = line.Remove(0, 5) Select Case arg.ToLower() Case "grassland" Me.HabitatType = HabitatTypes.Grassland Case "forest" Me.HabitatType = HabitatTypes.Forest Case "watersedge" Me.HabitatType = HabitatTypes.WatersEdge Case "sea" Me.HabitatType = HabitatTypes.Sea Case "cave" Me.HabitatType = HabitatTypes.Cave Case "mountain" Me.HabitatType = HabitatTypes.Mountain Case "roughterrain" Me.HabitatType = HabitatTypes.RoughTerrain Case "city" Me.HabitatType = HabitatTypes.City End Select ElseIf line.StartsWith("{") = True And line.EndsWith("}") = True Then Dim pokemonData() As String = line.Remove(line.Length - 1, 1).Remove(0, 1).Split(CChar("|")) If Me.PokemonList.Contains(pokemonData(1)) = False Then Me.PokemonList.Add(pokemonData(1)) Dim entryType As Integer = Pokedex.GetEntryType(Core.Player.PokedexData, pokemonData(1)) If entryType > 0 Then Me.PokemonSeen += 1 End If If entryType > 1 Then Me.PokemonCaught += 1 End If End If Dim daytimesData As List(Of String) = pokemonData(3).Split(CChar(",")).ToList() Dim dayTimes As New List(Of Integer) For Each s As String In daytimesData If StringHelper.IsNumeric(s) = True Then Dim i As Integer = CInt(s) If i > 0 Then dayTimes.Add(i) Else dayTimes.Clear() Exit For End If End If Next Me.ObtainTypeList.Add(New EncounterPokemon With {.PokemonID = pokemonData(1), .EncounterType = CInt(pokemonData(0)), .Daytimes = dayTimes.ToArray()}) End If Next If Me.Name = "" Then Me.Name = System.IO.Path.GetFileNameWithoutExtension(file) Me.Name = Me.Name(0).ToString().ToUpper() & Me.Name.Remove(0, 1) End If End Sub Public ReadOnly Property Texture() As Texture2D Get Dim x As Integer = CInt(Me.HabitatType) Dim y As Integer = 0 While x > 1 x -= 2 y += 1 End While Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(x * 64, y * 48, 64, 48), "") End Get End Property Public Shared Function GetEncounterTypeImage(ByVal encounterType As Integer) As Texture2D Dim x As Integer = 0 Dim y As Integer = 4 Select Case encounterType Case 0 x = 0 y = 3 Case 1 x = 0 y = 4 Case 2 x = 1 y = 0 Case 3 x = 0 y = 0 Case 31 x = 0 y = 1 Case 32 x = 0 y = 2 End Select Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(128 + x * 32, y * 32, 32, 32), "") End Function Public ReadOnly Property ProgressTexture() As Texture2D Get If Me.PokemonCaught >= Me.PokemonList.Count Then Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), "") Else If Me.PokemonSeen >= Me.PokemonList.Count Then Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), "") End If End If Return Nothing End Get End Property Public Sub Merge(ByVal h As Habitat) Dim data() As String = h.MergeData For Each line As String In data If line.StartsWith("{") = True And line.EndsWith("}") = True Then Dim pokemonData() As String = line.Remove(line.Length - 1, 1).Remove(0, 1).Split(CChar("|")) If Me.PokemonList.Contains(pokemonData(1)) = False Then Me.PokemonList.Add(pokemonData(1)) Dim entryType As Integer = Pokedex.GetEntryType(Core.Player.PokedexData, pokemonData(1)) If entryType > 0 Then Me.PokemonSeen += 1 End If If entryType > 1 Then Me.PokemonCaught += 1 End If End If Me.ObtainTypeList.Add(New EncounterPokemon With {.PokemonID = pokemonData(1), .EncounterType = CInt(pokemonData(0))}) End If Next End Sub Public Function HasPokemon(ByVal pokemonNumber As String) As Boolean Return Me.PokemonList.Contains(pokemonNumber) End Function End Class End Class Public Class PokedexViewScreen Inherits Screen Dim DexIndex As Integer = -1 Dim Pokemon As Pokemon Dim texture As Texture2D Dim Page As Integer = 0 Dim Forms As New List(Of String) Dim FormIndex As Integer = 0 Dim EntryType As Integer = 0 Dim _transitionOut As Boolean = False Dim yOffset As Integer = 0 Dim FrontView As Boolean = True Dim ShinyView As Boolean = False Dim EvolutionLineConnections As New List(Of PokemonEvolutionLine) Dim GridMinimum As New Vector2(0, 0) Dim GridMaximum As New Vector2(0, 0) Dim HabitatList As New List(Of PokedexScreen.Habitat) Class PokemonEvolutionLine Public ConnectionList As New List(Of Tuple(Of Integer, Integer, Pokemon)) Public Sub New(ByVal GridPositions As List(Of Vector2), ByVal PokemonIDs As List(Of String)) If GridPositions.Count = PokemonIDs.Count Then For i = 0 To PokemonIDs.Count - 1 Dim DexID As Integer Dim DexAD As String = "" If PokemonIDs(i).Contains("_") Then DexID = CInt(PokemonIDs(i).GetSplit(0, "_")) DexAD = PokemonForms.GetAdditionalValueFromDataFile(PokemonIDs(i)) ElseIf PokemonIDs(i).Contains(";") Then DexID = CInt(PokemonIDs(i).GetSplit(0, ";")) DexAD = PokemonIDs(i).GetSplit(1, ";") Else DexID = CInt(PokemonIDs(i)) End If Dim p As Pokemon = Pokemon.GetPokemonByID(DexID, DexAD) Dim entry As New Tuple(Of Integer, Integer, Pokemon)(CInt(GridPositions(i).X), CInt(GridPositions(i).Y), p) ConnectionList.Add(entry) Next End If End Sub End Class ''' ''' Creates a new instance of this class. ''' ''' The screen that is currently active. ''' The Pokémon to display. ''' If the screen should fade out when closed. Public Sub New(ByVal currentScreen As Screen, ByVal Pokemon As Pokemon, ByVal transitionOut As Boolean, Optional DexIndex As Integer = -1) Me.PreScreen = currentScreen Me.Identification = Identifications.PokedexViewScreen Me.texture = TextureManager.GetTexture("GUI\Menus\General") Me.MouseVisible = True Me.CanMuteAudio = True Me.CanBePaused = True Me._transitionOut = transitionOut If Me.Forms.Count > 0 Then Me.Forms.Clear() Me.Forms.Add(Me.Pokemon.Number.ToString) Me.FormIndex = 0 End If LoadPokemonData(DexIndex, Pokemon) End Sub Private Sub LoadPokemonData(ByVal newDexIndex As Integer, Optional ByVal newPokemon As Pokemon = Nothing, Optional playCry As Boolean = False) If newPokemon IsNot Nothing Then EvolutionLineConnections.Clear() Me.Pokemon = newPokemon End If If Me.PreScreen.Identification = Identifications.PokedexScreen Then Dim PDexScreen As PokedexScreen = CType(Me.PreScreen, PokedexScreen) If newDexIndex <> -1 AndAlso newDexIndex <> Me.DexIndex Then Me.Pokemon = PDexScreen.PokemonList(newDexIndex) Me.DexIndex = newDexIndex Me.Forms.Clear() Me.EvolutionLineConnections.Clear() Me.Forms.Add(Me.Pokemon.Number.ToString) Me.FormIndex = 0 End If End If Dim dexID As String = PokemonForms.GetPokemonDataFileName(Me.Pokemon.Number, Me.Pokemon.AdditionalData) If dexID.Contains("_") = False Then If PokemonForms.GetAdditionalDataForms(Me.Pokemon.Number) IsNot Nothing AndAlso PokemonForms.GetAdditionalDataForms(Me.Pokemon.Number).Contains(Me.Pokemon.AdditionalData) Then dexID = Me.Pokemon.Number & ";" & Me.Pokemon.AdditionalData Else dexID = Me.Pokemon.Number.ToString End If End If Me.EntryType = Pokedex.GetEntryType(Core.Player.PokedexData, dexID) If dexID.Contains("_") = False AndAlso dexID.Contains(";") = False Then If EntryType = 0 Then Dim formEntry As Integer = Pokedex.HasAnyForm(Me.Pokemon.Number) If formEntry > 0 Then Me.EntryType = formEntry End If End If End If Me.GetYOffset() Me.FillHabitats() Me.FillEvolutionGrid() If playCry = True Then Dim crySuffix As String = PokemonForms.GetCrySuffix(Me.Pokemon) SoundManager.PlayPokemonCry(Pokemon.Number, crySuffix) End If End Sub Private Sub FillEvolutionGrid() If Me.Pokemon.EvolutionLines.Count > 0 Then For e = 0 To Me.Pokemon.EvolutionLines.Count - 1 Dim GridPositions As New List(Of Vector2) Dim PokemonIDs As New List(Of String) Dim DataEntries As String() = Me.Pokemon.EvolutionLines(e).Split(",") For i = 0 To DataEntries.Count - 1 PokemonIDs.Add(DataEntries(i).GetSplit(0, "\")) Dim Position As New Vector2(CInt(DataEntries(i).GetSplit(1, "\"))) If DataEntries(i).Split("\").Count > 2 Then Position.Y = CInt(DataEntries(i).GetSplit(2, "\")) End If If GridMinimum.X > Position.X Then GridMinimum.X = Position.X End If If GridMinimum.Y > Position.Y Then GridMinimum.Y = Position.Y End If If GridMaximum.X < Position.X Then GridMaximum.X = Position.X End If If GridMaximum.Y < Position.Y Then GridMaximum.Y = Position.Y End If GridPositions.Add(Position) Next Dim evoline As New PokemonEvolutionLine(GridPositions, PokemonIDs) EvolutionLineConnections.Add(evoline) For Each f As String In PokemonIDs If CInt(f.GetSplit(0, "_").GetSplit(0, ";")) = Me.Pokemon.Number Then If Me.Forms.Contains(f) = False Then Me.Forms.Add(f) End If End If Next Next Else Dim GridPositions As New List(Of Vector2) Dim PokemonIDs As New List(Of String) If Me.Pokemon.Devolution <> "0" Then Dim DevoID As Integer = CInt(Me.Pokemon.Devolution.GetSplit(0, "_").GetSplit(0, ";")) Dim DevoAD As String = "" If Me.Pokemon.Devolution.Contains("_") Then DevoAD = PokemonForms.GetAdditionalValueFromDataFile(Me.Pokemon.Devolution) ElseIf Me.Pokemon.Devolution.Contains(";") Then DevoAD = Me.Pokemon.Devolution.GetSplit(1, ";") End If Dim DevoP As Pokemon = Pokemon.GetPokemonByID(DevoID, DevoAD, True) If DevoP.Devolution <> "0" Then PokemonIDs.Add(DevoP.Devolution) End If PokemonIDs.Add(Me.Pokemon.Devolution) End If Dim DexData As String = PokemonForms.GetPokemonDataFileName(Me.Pokemon.Number, Me.Pokemon.AdditionalData, True) PokemonIDs.Add(DexData) If Me.Pokemon.EvolutionConditions.Count > 0 Then PokemonIDs.Add(Me.Pokemon.EvolutionConditions(0).Evolution) Dim EvoID As Integer = CInt(Me.Pokemon.EvolutionConditions(0).Evolution.GetSplit(0, "_").GetSplit(0, ";")) Dim EvoAD As String = "" If Me.Pokemon.EvolutionConditions(0).Evolution.Contains("_") Then EvoAD = PokemonForms.GetAdditionalValueFromDataFile(Me.Pokemon.EvolutionConditions(0).Evolution) ElseIf Me.Pokemon.EvolutionConditions(0).Evolution.Contains(";") Then EvoAD = Me.Pokemon.EvolutionConditions(0).Evolution.GetSplit(1, ";") End If Dim EvoP As Pokemon = Pokemon.GetPokemonByID(EvoID, EvoAD, True) If EvoP.EvolutionConditions.Count > 0 Then PokemonIDs.Add(EvoP.EvolutionConditions(0).Evolution) End If End If Dim CenterIndex As Integer = 0 For i = 0 To PokemonIDs.Count - 1 If CInt(PokemonIDs(i).GetSplit(0, "_").GetSplit(0, ";")) = Me.Pokemon.Number Then CenterIndex = i End If Next Select Case PokemonIDs.Count Case 1 GridMinimum = New Vector2(CenterIndex) GridMaximum = New Vector2(CenterIndex) GridPositions.Add(New Vector2(CenterIndex, 0)) Case 2 GridMinimum = New Vector2(0 - 2 * CenterIndex, 0) GridMaximum = New Vector2(2 - 2 * CenterIndex, 0) GridPositions.Add(New Vector2(0 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(2 - 2 * CenterIndex, 0)) Case 3 GridMinimum = New Vector2(0 - 2 * CenterIndex, 0) GridMaximum = New Vector2(4 - 2 * CenterIndex, 0) GridPositions.Add(New Vector2(0 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(2 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(4 - 2 * CenterIndex, 0)) Case 4 GridMinimum = New Vector2(0 - 2 * CenterIndex, 0) GridMaximum = New Vector2(6 - 2 * CenterIndex, 0) GridPositions.Add(New Vector2(0 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(2 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(4 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(6 - 2 * CenterIndex, 0)) Case 5 GridMinimum = New Vector2(0 - 2 * CenterIndex, 0) GridMaximum = New Vector2(8 - 2 * CenterIndex, 0) GridPositions.Add(New Vector2(0 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(2 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(4 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(6 - 2 * CenterIndex, 0)) GridPositions.Add(New Vector2(8 - 2 * CenterIndex, 0)) End Select Dim evoline As New PokemonEvolutionLine(GridPositions, PokemonIDs) EvolutionLineConnections.Add(evoline) End If Logger.Debug("Minimum level: " & GridMinimum.X & "x," & GridMinimum.Y & "y; Maximum level: " & GridMaximum.X & "x," & GridMaximum.Y & "y") End Sub Private Sub FillHabitats() For Each file As String In System.IO.Directory.GetFiles(GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath, "*.*", IO.SearchOption.AllDirectories) If file.EndsWith(".poke") = True Then Dim fileName As String = file.Remove(0, (GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath & "\").Length - 1) Dim newHabitat As New PokedexScreen.Habitat(file) Dim exists As Boolean = False For Each h As PokedexScreen.Habitat In Me.HabitatList If h.Name.ToLower() = newHabitat.Name.ToLower() Then exists = True h.Merge(newHabitat) Exit For End If Next If exists = False AndAlso Core.Player.PokeFiles.Contains(fileName) = True Then HabitatList.Add(New PokedexScreen.Habitat(file)) End If End If Next Me.HabitatList = (From h As PokedexScreen.Habitat In Me.HabitatList Order By h.Name Ascending).ToList() For i = 0 To Me.HabitatList.Count - 1 If i <= Me.HabitatList.Count - 1 Then Dim dexID As String = PokemonForms.GetPokemonDataFileName(Me.Pokemon.Number, Me.Pokemon.AdditionalData) If Me.HabitatList(i).HasPokemon(dexID) = False Then Me.HabitatList.RemoveAt(i) i -= 1 End If End If Next End Sub Private Sub GetYOffset() Dim t As Texture2D = Pokemon.GetTexture(FrontView, ShinyView) Me.yOffset = -1 Dim cArr(t.Width * t.Height - 1) As Color t.GetData(cArr) For y = 0 To t.Height - 1 For x = 0 To t.Width - 1 If cArr(x + y * t.Height) <> Color.Transparent Then Me.yOffset = y Exit For End If Next If Me.yOffset <> -1 Then Exit For End If Next End Sub Public Overrides Sub Draw() Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216)) For y = -64 To Core.windowSize.Height Step 64 Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + PokedexScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White) Next Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1) Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1) Select Case Me.Page Case 0 DrawPage1() Case 1 DrawPage2() Case 2 DrawPage3() End Select Core.SpriteBatch.Draw(Me.texture, New Rectangle(20, 20, 64, 64), New Rectangle(16, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64, 20, 64 * 8, 64), New Rectangle(32, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64 * 9, 20, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64, 20, 64 * 5, 64), New Rectangle(32, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64 * 6, 20, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Dim pokeTexture = Pokemon.GetMenuTexture() Dim pokeTextureScale As Vector2 = New Vector2(CSng(32 / pokeTexture.Width * 2), CSng(32 / pokeTexture.Height * 2)) If EntryType > 0 Then Core.SpriteBatch.Draw(pokeTexture, New Rectangle(28, 20, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.GetName(True), New Vector2(100, 36), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Else Core.SpriteBatch.Draw(pokeTexture, New Rectangle(28, 20, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "???", New Vector2(100, 36), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) End If If EntryType = 1 Then Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), ""), New Rectangle(64 * 6 + 40, 42, 20, 20), Color.White) ElseIf EntryType > 1 Then Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), ""), New Rectangle(64 * 6 + 40, 42, 20, 20), Color.White) If EntryType > 2 Then SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\PokemonInfo"), New Rectangle(64 * 6 - 1, 42, 18, 18), New Rectangle(16, 0, 9, 9), Color.White) End If End If If Me.mLineLength = 100 Then If Me.Page = 0 Or Me.Page = 1 Then Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 70, CInt(Core.windowSize.Height / 2 - 32), 64, 64), New Rectangle(0, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) End If If Me.Page = 1 Or Me.Page = 2 Then Core.SpriteBatch.Draw(Me.texture, New Rectangle(6, CInt(Core.windowSize.Height / 2 - 32), 64, 64), New Rectangle(0, 16, 16, 16), Color.White) End If End If If Me.Forms.Count > 1 Then Dim CanSwitchCount As Integer = 0 For i = 0 To Me.Forms.Count - 1 If Pokedex.GetEntryType(Core.Player.PokedexData, Me.Forms(i)) > 0 Then CanSwitchCount += 1 End If Next If CanSwitchCount > 1 OrElse CanSwitchCount = 1 AndAlso Pokedex.GetEntryType(Core.Player.PokedexData, PokemonForms.GetPokemonDataFileName(Me.Pokemon.Number, Me.Pokemon.AdditionalData, True)) = 0 Then Core.SpriteBatch.DrawString(FontManager.MainFont, "Press [Shift] to switch forms", New Vector2(CInt(windowSize.Width - FontManager.MainFont.MeasureString("Press [Shift] to switch forms").X - 128), 36), Color.White, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) End If End If Select Case Me.Page Case 0 Core.SpriteBatch.DrawString(FontManager.MainFont, "Details", New Vector2(480, 36), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Case 1 Core.SpriteBatch.DrawString(FontManager.MainFont, "Habitat", New Vector2(480, 36), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Case 2 Core.SpriteBatch.DrawString(FontManager.MainFont, "Evolution", New Vector2(480, 36), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) End Select End Sub Dim fadeMainImage As Integer = 0 Dim vLineLength As Integer = 1 Dim mLineLength As Integer = 1 Dim playedCry As Boolean = False Private Sub DrawPage1() Dim v As Vector2 = Core.GetMiddlePosition(New Size(MathHelper.Min(Pokemon.GetTexture(Me.FrontView, ShinyView).Width * 4, 512), MathHelper.Min(Pokemon.GetTexture(Me.FrontView, ShinyView).Height * 4, 512))) Dim textureColor As Color = Color.White Dim pForms As List(Of String) = PokemonForms.GetAdditionalDataForms(Pokemon.Number) If EntryType = 0 AndAlso pForms Is Nothing Then textureColor = New Color(0, 0, 0, 0) End If Core.SpriteBatch.Draw(Pokemon.GetTexture(Me.FrontView, ShinyView), New Rectangle(CInt(v.X), CInt(v.Y) - yOffset * 2 + 32, MathHelper.Min(Pokemon.GetTexture(Me.FrontView, ShinyView).Width * 4, 512), MathHelper.Min(Pokemon.GetTexture(Me.FrontView, ShinyView).Height * 4, 512)), New Color(textureColor.R, textureColor.G, textureColor.B, textureColor.A)) If fadeMainImage = 255 Then Dim mV As Vector2 = Core.GetMiddlePosition(New Size(0, 0)) Canvas.DrawLine(Color.Black, New Vector2(mV.X + 40, mV.Y - 40), New Vector2(mV.X + vLineLength, mV.Y - vLineLength), 2) Canvas.DrawLine(Color.Black, New Vector2(mV.X + 40, mV.Y + 40), New Vector2(mV.X + vLineLength, mV.Y + vLineLength), 2) Canvas.DrawLine(Color.Black, New Vector2(mV.X - 40, mV.Y - 40), New Vector2(mV.X - vLineLength, mV.Y - vLineLength), 2) Canvas.DrawLine(Color.Black, New Vector2(mV.X - 40, mV.Y + 40), New Vector2(mV.X - vLineLength, mV.Y + vLineLength), 2) If vLineLength = 140 Then Canvas.DrawLine(Color.Black, New Vector2(mV.X + 140, mV.Y - 140), New Vector2(mV.X + (140 + mLineLength), mV.Y - 140), 2) Canvas.DrawLine(Color.Black, New Vector2(mV.X + 139, mV.Y + 140), New Vector2(mV.X + (140 + mLineLength), mV.Y + 140), 2) Canvas.DrawLine(Color.Black, New Vector2(mV.X - 139, mV.Y - 140), New Vector2(mV.X - (140 + mLineLength), mV.Y - 140), 2) Canvas.DrawLine(Color.Black, New Vector2(mV.X - 139, mV.Y + 140), New Vector2(mV.X - (140 + mLineLength), mV.Y + 140), 2) End If If mLineLength = 100 Then If EntryType > 1 Then Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Height & " m", New Vector2(CInt(mV.X + 250), CInt(mV.Y - 152)), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Weight & " kg", New Vector2(CInt(mV.X + 250), CInt(mV.Y + 128)), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Species, New Vector2(CInt(mV.X - 248 - FontManager.MainFont.MeasureString(Pokemon.PokedexEntry.Species).X), CInt(mV.Y - 152)), Color.Black) If Pokemon.Type2.Type <> Element.Types.Blank Then Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(CInt(mV.X - 450), CInt(mV.Y + 123), 96, 32), Pokemon.Type1.GetElementImage(), Color.White) Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(CInt(mV.X - 350), CInt(mV.Y + 123), 96, 32), Pokemon.Type2.GetElementImage(), Color.White) Else Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(CInt(mV.X - 350), CInt(mV.Y + 123), 96, 32), Pokemon.Type1.GetElementImage(), Color.White) End If Canvas.DrawRectangle(New Rectangle(CInt(mV.X - FontManager.MainFont.MeasureString(Pokemon.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 720)).X / 2 - 16), CInt(mV.Y + 192 - 16), CInt(FontManager.MainFont.MeasureString(Pokemon.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 720)).X + 32), CInt(FontManager.MainFont.MeasureString(Pokemon.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 720)).Y + 32)), New Color(42, 167, 198, 150)) Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 720), New Vector2(CInt(mV.X - FontManager.MainFont.MeasureString(Pokemon.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 720)).X / 2), CInt(mV.Y + 192)), Color.Black) Else Core.SpriteBatch.DrawString(FontManager.MainFont, "??? m", New Vector2(CInt(mV.X + 250), CInt(mV.Y - 152)), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "??? kg", New Vector2(CInt(mV.X + 250), CInt(mV.Y + 128)), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "??? Pokémon", New Vector2(CInt(mV.X - 248 - FontManager.MainFont.MeasureString("??? Pokémon").X), CInt(mV.Y - 152)), Color.Black) Core.SpriteBatch.DrawString(FontManager.MainFont, "???", New Vector2(CInt(mV.X - 248 - FontManager.MainFont.MeasureString("???").X), CInt(mV.Y + 128)), Color.Black) End If End If End If End Sub Dim Scroll As Integer = 0 Dim Cursor As Integer = 0 Private Sub DrawPage2() If Me.HabitatList.Count = 0 Then Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) - 282, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(84, 198, 216), New Color(42, 167, 198, 150), True, -1) Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2) - 202, CInt(Core.windowSize.Height / 2 - 45), 404, 90), New Color(42, 167, 198, 150)) Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) + 202, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(42, 167, 198, 150), New Color(84, 198, 216), True, -1) Core.SpriteBatch.DrawString(FontManager.MainFont, "Area Unknown.", New Vector2(CInt(Core.windowSize.Width / 2) - CInt(FontManager.MainFont.MeasureString("Area Unknown.").X / 2), CInt(Core.windowSize.Height / 2 - 15)), Color.White) Else For i = Scroll To Scroll + 4 If i <= Me.HabitatList.Count - 1 Then Dim p As Integer = i - Scroll Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 160 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 160 + p * 96, 64 * 9, 64), New Rectangle(32, 16, 16, 16), Color.White) Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 10, 160 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Core.SpriteBatch.Draw(HabitatList(i).Texture, New Rectangle(120, 168 + p * 96, 64, 48), Color.White) Core.SpriteBatch.DrawString(FontManager.MainFont, HabitatList(i).Name, New Vector2(200, 176 + p * 96), Color.Black, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) Dim encounterTypes As New List(Of Integer) For j = 0 To HabitatList(i).ObtainTypeList.Count - 1 If HabitatList(i).ObtainTypeList(j).PokemonID = PokemonForms.GetPokemonDataFileName(Me.Pokemon.Number, Me.Pokemon.AdditionalData) And encounterTypes.Contains(HabitatList(i).ObtainTypeList(j).EncounterType) = False Then encounterTypes.Add(HabitatList(i).ObtainTypeList(j).EncounterType) End If Next For j = 0 To encounterTypes.Count - 1 Core.SpriteBatch.Draw(PokedexScreen.Habitat.GetEncounterTypeImage(encounterTypes(j)), New Rectangle(560 + j * 40, 176 + p * 96, 32, 32), Color.White) Next End If Next DrawCursor() End If End Sub Private Sub DrawCursor() Dim cPosition As Vector2 = New Vector2(520, 160 + Me.Cursor * 96 - 42) 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 Dim scale As Single = 2.0F Private Sub DrawPage3() If EvolutionLineConnections Is Nothing OrElse EvolutionLineConnections.Count = 0 OrElse EvolutionLineConnections.Count = 1 And EvolutionLineConnections(0).ConnectionList.Count <= 1 Then Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) - 282, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(84, 198, 216), New Color(42, 167, 198, 150), True, -1) Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2) - 202, CInt(Core.windowSize.Height / 2 - 45), 404, 90), New Color(42, 167, 198, 150)) Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) + 202, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(42, 167, 198, 150), New Color(84, 198, 216), True, -1) Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.GetName(True) & " doesn't evolve.", New Vector2(CInt(Core.windowSize.Width / 2) - CInt(FontManager.MainFont.MeasureString(Pokemon.GetName(True) & " doesn't evolve.").X / 2), CInt(Core.windowSize.Height / 2 - 15)), Color.White) Else Dim connectionLines As New List(Of String) Dim centerVector As Vector2 = Core.GetMiddlePosition(New Size(CInt(64 * scale), CInt(64 * scale))) For e = 0 To EvolutionLineConnections.Count - 1 For l = 0 To EvolutionLineConnections(e).ConnectionList.Count - 1 If EvolutionLineConnections(e).ConnectionList.Count > 1 AndAlso l > 0 Then connectionLines.Add(CStr(EvolutionLineConnections(e).ConnectionList(l - 1).Item1 & "_" & EvolutionLineConnections(e).ConnectionList(l - 1).Item2 & "," & EvolutionLineConnections(e).ConnectionList(l).Item1 & "_" & EvolutionLineConnections(e).ConnectionList(l).Item2)) End If Next Next 'Draw Lines For i = 0 To connectionLines.Count - 1 Dim LineStart As New Vector2(CInt(connectionLines(i).GetSplit(0, ",").GetSplit(0, "_")), CInt(connectionLines(i).GetSplit(0, ",").GetSplit(1, "_"))) Dim LineEnd As New Vector2(CInt(connectionLines(i).GetSplit(1, ",").GetSplit(0, "_")), CInt(connectionLines(i).GetSplit(1, ",").GetSplit(1, "_"))) Canvas.DrawLine(Color.Black, New Vector2(centerVector.X + (LineStart.X * (64 * scale)) + (scale * 32), centerVector.Y + (scale * 32) + (LineStart.Y * (48 * scale))), New Vector2(centerVector.X + (LineEnd.X * (64 * scale)) + (scale * 32), centerVector.Y + (scale * 32) + (LineEnd.Y * (48 * scale))), 2) Next 'Draw Sprites For x = CInt(GridMinimum.X) To CInt(GridMaximum.X) For y = CInt(GridMinimum.Y) To CInt(GridMaximum.Y) Dim pokemon As Pokemon = Nothing Dim position As Vector2 = New Vector2(0) For c = 0 To EvolutionLineConnections.Count - 1 For i = 0 To EvolutionLineConnections(c).ConnectionList.Count - 1 If EvolutionLineConnections(c).ConnectionList(i).Item1 = x AndAlso EvolutionLineConnections(c).ConnectionList(i).Item2 = y Then position = New Vector2(EvolutionLineConnections(c).ConnectionList(i).Item1, EvolutionLineConnections(c).ConnectionList(i).Item2) pokemon = EvolutionLineConnections(c).ConnectionList(i).Item3 End If Next Next If pokemon IsNot Nothing Then Dim dexID As String = PokemonForms.GetPokemonDataFileName(pokemon.Number, pokemon.AdditionalData, True) Dim pokeTexture = pokemon.GetMenuTexture() Dim pokeTextureScale As Vector2 = New Vector2(CSng(32 / pokeTexture.Width * 2), CSng(32 / pokeTexture.Height * 2)) If Pokedex.GetEntryType(Core.Player.PokedexData, dexID) = 0 Then Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(centerVector.X + (position.X * CInt(64 * scale))), CInt(centerVector.Y + (position.Y * (48 * scale))), CInt(pokeTexture.Width * pokeTextureScale.X * scale), CInt(pokeTexture.Height * pokeTextureScale.Y * scale)), Color.Black) Else Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(centerVector.X + (position.X * CInt(64 * scale))), CInt(centerVector.Y + (position.Y * (48 * scale))), CInt(pokeTexture.Width * pokeTextureScale.X * scale), CInt(pokeTexture.Height * pokeTextureScale.Y * scale)), Color.White) End If End If Next Next 'Draw Names For x = CInt(GridMinimum.X) To CInt(GridMaximum.X) For y = CInt(GridMinimum.Y) To CInt(GridMaximum.Y) Dim pokemon As Pokemon = Nothing Dim position As Vector2 = New Vector2(0) For c = 0 To EvolutionLineConnections.Count - 1 For i = 0 To EvolutionLineConnections(c).ConnectionList.Count - 1 If EvolutionLineConnections(c).ConnectionList(i).Item1 = x AndAlso EvolutionLineConnections(c).ConnectionList(i).Item2 = y Then position = New Vector2(EvolutionLineConnections(c).ConnectionList(i).Item1, EvolutionLineConnections(c).ConnectionList(i).Item2) pokemon = EvolutionLineConnections(c).ConnectionList(i).Item3 End If Next Next If pokemon IsNot Nothing Then Dim dexID As String = PokemonForms.GetPokemonDataFileName(pokemon.Number, pokemon.AdditionalData, True) Dim pokeTexture = pokemon.GetMenuTexture() Dim pokeTextureScale As Vector2 = New Vector2(CSng(32 / pokeTexture.Width * 2), CSng(32 / pokeTexture.Height * 2)) If Pokedex.GetEntryType(Core.Player.PokedexData, dexID) <> 0 Then Core.SpriteBatch.DrawString(FontManager.MainFont, pokemon.GetName(True), New Vector2(CInt(centerVector.X + (position.X * (64 * scale)) + CInt(pokeTexture.Width * pokeTextureScale.X / 2 * scale) - (FontManager.MainFont.MeasureString(pokemon.GetName(True)).X / 2 * CSng(scale / 2)) + 2), CInt(centerVector.Y + position.Y * (48 * scale) + (64 * scale)) + 2), Color.Black, 0.0F, Vector2.Zero, CInt(scale / 2), SpriteEffects.None, 0.0F) Core.SpriteBatch.DrawString(FontManager.MainFont, pokemon.GetName(True), New Vector2(CInt(centerVector.X + (position.X * (64 * scale)) + CInt(pokeTexture.Width * pokeTextureScale.X / 2 * scale) - (FontManager.MainFont.MeasureString(pokemon.GetName(True)).X / 2 * CSng(scale / 2))), CInt(centerVector.Y + position.Y * (48 * scale) + (64 * scale))), Color.White, 0.0F, Vector2.Zero, CInt(scale / 2), SpriteEffects.None, 0.0F) End If End If Next Next End If End Sub Public Overrides Sub Update() If Controls.Dismiss(True, True, True) = True Then If Me._transitionOut = True Then SoundManager.PlaySound("select") Core.SetScreen(New TransitionScreen(Me, Me.PreScreen, Color.White, False)) Else SoundManager.PlaySound("select") Core.SetScreen(Me.PreScreen) End If End If If DexIndex > -1 AndAlso Me.PreScreen.Identification = Identifications.PokedexScreen Then If Controls.Up(True, True, False, True, True, True) = True Then Dim PDexScreen As PokedexScreen = CType(Me.PreScreen, PokedexScreen) If Me.DexIndex > 0 Then Dim index As Integer = Me.DexIndex - 1 Dim pokeID As String = "" If Pokedex.GetEntryType(Core.Player.PokedexData, PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(index).Number, PDexScreen.PokemonList(index).AdditionalData, True)) > 0 Then pokeID = PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(index).Number, PDexScreen.PokemonList(index).AdditionalData, True) While Pokedex.GetEntryType(Core.Player.PokedexData, pokeID) = 0 Dim formEntry As Integer = Pokedex.HasAnyForm(PDexScreen.PokemonList(index).Number) If formEntry > 0 Then pokeID = PDexScreen.PokemonList(index).Number.ToString Exit While Else If index > 0 Then index -= 1 pokeID = PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(index).Number, PDexScreen.PokemonList(index).AdditionalData, True) Else Exit While End If End If End While End If If pokeID <> "" Then If Pokedex.GetEntryType(Core.Player.PokedexData, pokeID) > 0 OrElse Pokedex.HasAnyForm(PDexScreen.PokemonList(index).Number) > 0 Then vLineLength = 1 mLineLength = 1 fadeMainImage = 0 LoadPokemonData(index, Nothing, True) End If End If End If End If If Controls.Down(True, True, False, True, True, True) = True Then Dim PDexScreen As PokedexScreen = CType(Me.PreScreen, PokedexScreen) If Me.DexIndex < PDexScreen.PokemonList.count - 1 Then Dim index As Integer = Me.DexIndex + 1 Dim pokeID As String = "" If Pokedex.GetEntryType(Core.Player.PokedexData, PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(index).Number, PDexScreen.PokemonList(index).AdditionalData, True)) > 0 Then pokeID = PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(index).Number, PDexScreen.PokemonList(index).AdditionalData, True) While Pokedex.GetEntryType(Core.Player.PokedexData, pokeID) = 0 Dim formEntry As Integer = Pokedex.HasAnyForm(PDexScreen.PokemonList(index).Number) If formEntry > 0 Then pokeID = PDexScreen.PokemonList(index).Number.ToString Exit While Else If index < PDexScreen.PokemonList.Count - 1 Then index += 1 pokeID = PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(index).Number, PDexScreen.PokemonList(index).AdditionalData, True) Else Exit While End If End If End While End If If pokeID <> "" Then If Pokedex.GetEntryType(Core.Player.PokedexData, pokeID) > 0 OrElse Pokedex.HasAnyForm(PDexScreen.PokemonList(index).Number) > 0 Then vLineLength = 1 mLineLength = 1 fadeMainImage = 0 LoadPokemonData(index, Nothing, True) End If End If End If End If End If If Controls.ShiftPressed = True Or ControllerHandler.ButtonPressed(Buttons.Back) Then Dim OriginalFormIndex As Integer = Me.FormIndex Me.FormIndex += 1 If Me.FormIndex > Me.Forms.Count - 1 Then Me.FormIndex = 0 End If Dim formID As String = Me.Forms(Me.FormIndex) If formID <> "" AndAlso Pokedex.GetEntryType(Core.Player.PokedexData, formID) = 0 Then While Pokedex.GetEntryType(Core.Player.PokedexData, formID) = 0 Me.FormIndex += 1 If Me.FormIndex > Me.Forms.Count - 1 Then Me.FormIndex = 0 End If formID = Me.Forms(Me.FormIndex) If FormIndex = OriginalFormIndex Then Exit While End If End While End If If Me.Forms(Me.FormIndex) IsNot "" Then Dim PokeID As Integer = CInt(Me.Forms(Me.FormIndex).GetSplit(0, "_").GetSplit(0, ";")) Dim PokeAD As String = "" If Me.Forms(Me.FormIndex).Contains("_") Then PokeAD = PokemonForms.GetAdditionalValueFromDataFile(Me.Forms(Me.FormIndex)) ElseIf Me.Forms(Me.FormIndex).Contains(";") Then PokeAD = Me.Forms(Me.FormIndex).GetSplit(1, ";") End If Dim newPokemon As Pokemon = Pokemon.GetPokemonByID(PokeID, PokeAD, True) Dim playCry As Boolean = True If FormIndex = OriginalFormIndex Then playCry = False End If LoadPokemonData(-1, newPokemon, playCry) End If End If UpdateIntro() If mLineLength = 100 Then If Controls.Right(True, True, False, True, True, True) = True Then Me.Page += 1 End If If Controls.Left(True, True, False, True, True, True) = True Then Me.Page -= 1 End If If Controls.Accept(True, False, False) = True Then If Me.Page = 0 Or Me.Page = 1 Then If New Rectangle(Core.windowSize.Width - 70, CInt(Core.windowSize.Height / 2 - 32), 64, 64).Contains(MouseHandler.MousePosition) = True Then SoundManager.PlaySound("select") Me.Page += 1 End If End If If Me.Page = 1 Or Me.Page = 2 Then If New Rectangle(6, CInt(Core.windowSize.Height / 2 - 32), 64, 64).Contains(MouseHandler.MousePosition) = True Then SoundManager.PlaySound("select") Me.Page -= 1 End If End If End If Me.Page = Me.Page.Clamp(0, 2) Select Case Me.Page Case 0 UpdatePage1() Case 1 UpdatePage2() Case 2 UpdatePage3() End Select End If PokedexScreen.TileOffset += 1 If PokedexScreen.TileOffset >= 64 Then PokedexScreen.TileOffset = 0 End If End Sub Private Sub UpdateIntro() If fadeMainImage < 255 Then fadeMainImage += 10 If fadeMainImage >= 255 Then fadeMainImage = 255 If playedCry = False Then playedCry = True Dim crySuffix As String = PokemonForms.GetCrySuffix(Me.Pokemon) SoundManager.PlayPokemonCry(Pokemon.Number, crySuffix) End If End If Else If vLineLength < 140 Then vLineLength += 10 If vLineLength >= 140 Then vLineLength = 140 End If Else If mLineLength < 100 Then mLineLength += 10 If mLineLength >= 100 Then mLineLength = 100 End If End If End If End If End Sub Private Sub UpdatePage1() If Controls.Accept(True, True, True) = True Then SoundManager.PlaySound("select") If EntryType > 2 Then If Me.FrontView = False Then Me.ShinyView = Not Me.ShinyView End If Me.FrontView = Not Me.FrontView Else Me.FrontView = Not Me.FrontView End If Me.GetYOffset() End If End Sub Private Sub UpdatePage2() If Me.HabitatList.Count > 0 Then If Controls.Down(True, True, True, True, True, True) = True Then Me.Cursor += 1 End If If Controls.Up(True, True, True, True, True, True) = True Then Me.Cursor -= 1 End If If Me.Cursor > 4 Then Me.Cursor = 4 Me.Scroll += 1 End If If Me.Cursor < 0 Then Me.Cursor = 0 Me.Scroll -= 1 End If If Me.HabitatList.Count < 6 Then Me.Scroll = 0 Else Me.Scroll = Me.Scroll.Clamp(0, Me.HabitatList.Count - 5) End If If Me.HabitatList.Count < 5 Then Me.Cursor = Me.Cursor.Clamp(0, Me.HabitatList.Count - 1) Else Me.Cursor = Me.Cursor.Clamp(0, 4) End If If Controls.Accept(True, False, False) = True Then For i = Scroll To Scroll + 4 If i <= Me.HabitatList.Count - 1 Then If New Rectangle(100, 160 + (i - Scroll) * 96, 640, 64).Contains(MouseHandler.MousePosition) = True Then If i = Cursor + Scroll Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll))) Else Cursor = i - Scroll End If End If End If Next End If If Controls.Accept(False, True, True) = True Then SoundManager.PlaySound("select") Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll))) End If End If End Sub Private Sub UpdatePage3() If Controls.Accept(True, False, False) = True Then Dim centerVector As Vector2 = Core.GetMiddlePosition(New Size(CInt(64 * scale), CInt(64 * scale))) Dim pokemon As Pokemon = Nothing Dim position As Vector2 = New Vector2(0) Dim mPosition As Vector2 = MouseHandler.MousePosition.ToVector2 For c = 0 To EvolutionLineConnections.Count - 1 For i = 0 To EvolutionLineConnections(c).ConnectionList.Count - 1 Dim rect As New Rectangle(CInt(centerVector.X + (EvolutionLineConnections(c).ConnectionList(i).Item1 * CInt(64 * scale))), CInt(centerVector.Y + (EvolutionLineConnections(c).ConnectionList(i).Item2 * (48 * scale))), CInt(EvolutionLineConnections(c).ConnectionList(i).Item3.GetMenuTexture().Width * CSng(32 / EvolutionLineConnections(c).ConnectionList(i).Item3.GetMenuTexture().Width * 2) * scale), CInt(EvolutionLineConnections(c).ConnectionList(i).Item3.GetMenuTexture().Height * CSng(32 / EvolutionLineConnections(c).ConnectionList(i).Item3.GetMenuTexture().Height * 2) * scale)) If rect.Contains(mPosition) Then pokemon = EvolutionLineConnections(c).ConnectionList(i).Item3 End If Next Next If pokemon IsNot Nothing Then Dim dexID As String = PokemonForms.GetPokemonDataFileName(pokemon.Number, pokemon.AdditionalData, True) Dim TempForms As New List(Of String) Dim switchIndex As Integer = DexIndex If pokemon.Number <> Me.Pokemon.Number Then Dim PDexScreen As PokedexScreen = CType(Me.PreScreen, PokedexScreen) For pEntry = 0 To PDexScreen.PokemonList.Count - 1 If PDexScreen.PokemonList(pEntry).Number = pokemon.Number AndAlso PDexScreen.PokemonList(pEntry).AdditionalData = pokemon.AdditionalData Then switchIndex = pEntry Exit For End If Next If switchIndex = DexIndex Then For pEntry = 0 To PDexScreen.PokemonList.Count - 1 If PDexScreen.PokemonList(pEntry).Number = pokemon.Number Then switchIndex = pEntry Exit For End If Next End If TempForms.Add(pokemon.Number.ToString) If pokemon.EvolutionLines.Count > 0 Then For e = 0 To pokemon.EvolutionLines.Count - 1 Dim PokemonIDs As New List(Of String) Dim DataEntries As String() = pokemon.EvolutionLines(e).Split(",") For i = 0 To DataEntries.Count - 1 PokemonIDs.Add(DataEntries(i).GetSplit(0, "\")) Next For Each f As String In PokemonIDs If CInt(f.GetSplit(0, "_").GetSplit(0, ";")) = pokemon.Number Then If Me.Forms.Contains(f) = False Then TempForms.Add(f) End If End If Next Next Else TempForms.AddRange(Me.Forms) End If Else If Me.Forms.Count > 0 Then TempForms.AddRange(Me.Forms) End If End If Dim fIndex As Integer = -1 For f = 0 To TempForms.Count - 1 If TempForms(f) = dexID Then If Pokedex.GetEntryType(Core.Player.PokedexData, dexID) > 0 Then fIndex = f End If End If Next If fIndex <> -1 AndAlso TempForms(fIndex) IsNot "" Then Me.FormIndex = fIndex Dim PokeID As Integer = CInt(TempForms(Me.FormIndex).GetSplit(0, "_").GetSplit(0, ";")) Dim PokeAD As String = "" If TempForms(Me.FormIndex).Contains("_") Then PokeAD = PokemonForms.GetAdditionalValueFromDataFile(TempForms(Me.FormIndex)) ElseIf TempForms(Me.FormIndex).Contains(";") Then PokeAD = TempForms(Me.FormIndex).GetSplit(1, ";") End If Dim newPokemon As Pokemon = Pokemon.GetPokemonByID(PokeID, PokeAD, True) Me.Forms = TempForms LoadPokemonData(switchIndex, newPokemon, True) ElseIf Me.DexIndex > -1 Then Dim PDexScreen As PokedexScreen = CType(Me.PreScreen, PokedexScreen) If Pokedex.GetEntryType(Core.Player.PokedexData, PokemonForms.GetPokemonDataFileName(PDexScreen.PokemonList(switchIndex).Number, PDexScreen.PokemonList(switchIndex).AdditionalData, True)) > 0 Then vLineLength = 1 mLineLength = 1 fadeMainImage = 0 LoadPokemonData(switchIndex, Nothing, True) End If End If End If End If If Controls.Up(True, False, True, False, False, False) = True Or KeyBoardHandler.KeyPressed(Keys.OemPlus) = True Then Me.scale += 0.5F End If If Controls.Down(True, False, True, False, False, False) = True Or KeyBoardHandler.KeyPressed(Keys.OemMinus) = True Then Me.scale -= 0.5F End If Me.scale = Me.scale.Clamp(0.5F, 4.0F) End Sub End Class