Namespace Screens.MainMenu Public Class NewGameScreen Inherits Screen Dim skinFiles() As String = {GameModeManager.ActiveGameMode.SkinFiles.ToString} Dim skinNames() As String = {GameModeManager.ActiveGameMode.SkinNames.ToString} Dim skinGenders() As String = {GameModeManager.ActiveGameMode.SkinGenders.ToString} Dim skinColors As List(Of Color) = GameModeManager.ActiveGameMode.SkinColors Public Index As Integer = 0 Dim pokeIndex As Integer = 0 Dim ProfAlpha As Integer = 0 Dim OtherAlpha As Integer = 0 Dim Name As String = "" Dim SkinIndex As Integer = 0 Dim skinTexture As Texture2D Dim enterCorrectName As Boolean = False Dim nameMessage As String = "This name is too short." Dim mainTexture As Texture2D Dim pokeTexture As Texture2D Dim ballPosition As Vector2 Dim ballIndex As Vector2 = New Vector2(0, 0) Dim ballAnimationDelay As Single = 0.2F Dim ballVelocity As Single = -7.0F Dim pokePosition As Vector2 Dim pokeID As Integer = 0 Dim CurrentText As String = "" Dim currentBackColor As Color = New Color(59, 123, 165) Dim normalColor As Color = New Color(59, 123, 165) Dim pokemonRange() As Integer = {1, 252} Dim introMusic As String = "welcome" Dim startMap As String = "yourroom.dat" Dim startPosition As Vector3 = New Vector3(1, 0.1F, 3) Dim startLocation As String = "Your Room" Dim startYaw As Single = MathHelper.PiOver2 Dim Dialogues As New List(Of String) Public Sub New() For Each s As String In Core.GameOptions.ContentPackNames ContentPackManager.Load(GameController.GamePath & "\ContentPacks\" & s & "\exceptions.dat") Next BattleSystem.GameModeAttackLoader.Load() SmashRock.Load() Badge.Load() Pokedex.Load() BattleSystem.BattleScreen.ResetVars() LevelLoader.ClearTempStructures() PokemonForms.Initialize() Me.Identification = Identifications.NewGameScreen Me.CanChat = False mainTexture = TextureManager.GetTexture("GUI\Intro") LoadIntroValues() Dim p As Pokemon = Pokemon.GetPokemonByID(Core.Random.Next(pokemonRange(0), pokemonRange(1))) p.Generate(1, True) pokeID = p.Number pokeTexture = p.GetTexture(True) CurrentText = "" TextBox.Showing = False Me.Index = 0 TextBox.reDelay = 0 Dim skinTexture2D = TextureManager.GetTexture("Textures\NPC\" & skinFiles(SkinIndex)) Dim skinFrameSize As Size If skinTexture2D.Width = skinTexture2D.Height / 2 Then skinFrameSize = New Size(CInt(skinTexture2D.Width / 2), CInt(skinTexture2D.Height / 4)) ElseIf skinTexture2D.Width = skinTexture2D.Height Then skinFrameSize = New Size(CInt(skinTexture2D.Width / 4), CInt(skinTexture2D.Height / 4)) Else skinFrameSize = New Size(CInt(skinTexture2D.Width / 3), CInt(skinTexture2D.Height / 4)) End If Dim skinRectangle As New Rectangle(0, CInt(skinFrameSize.Height * 2), CInt(skinFrameSize.Width), CInt(skinFrameSize.Height)) skinTexture = TextureManager.GetTexture(skinTexture2D, skinRectangle) MusicManager.Play("nomusic") End Sub Private Sub LoadIntroValues() Dim GameMode As GameMode = GameModeManager.ActiveGameMode Me.skinNames = GameMode.SkinNames.ToArray() Me.skinFiles = GameMode.SkinFiles.ToArray() Me.skinGenders = GameMode.SkinGenders.ToArray() Me.skinColors = GameMode.SkinColors Me.pokemonRange = GameMode.PokemonRange Me.introMusic = GameMode.IntroMusic Me.startMap = GameMode.StartMap Me.startPosition = GameMode.StartPosition Me.startLocation = GameMode.StartLocationName Me.startYaw = GameMode.StartRotation Me.normalColor = GameMode.StartColor Me.currentBackColor = GameMode.StartColor If GameMode.StartDialogue <> "" Then If GameMode.StartDialogue.CountSplits("|") >= 3 Then Dim Splits() As String = GameMode.StartDialogue.Split(CChar("|")) Me.Dialogues.AddRange(Splits) End If Else If Me.Dialogues.Count < 3 Then Me.Dialogues.Clear() Me.Dialogues.AddRange({Localization.GetString("new_game_intro_1"), Localization.GetString("new_game_intro_2"), Localization.GetString("new_game_intro_3")}) End If End If End Sub Public Overrides Sub Update() If Index = 5 Then Core.GameInstance.IsMouseVisible = True Else Core.GameInstance.IsMouseVisible = False End If If ProfAlpha < 255 And Index = 0 Then ProfAlpha += 2 If ProfAlpha >= 255 Then MusicManager.Play(Me.introMusic, True, 0.0F) End If ElseIf ProfAlpha >= 255 Or Index > 0 Then TextBox.Update() If TextBox.Showing = False Then Select Case Index Case 1 UpdatePokemon() Case 3 UpdateTransition(False) Case 4 If Screens.MainMenu.NewNewGameScreen.CharacterSelectionScreen.SelectedSkin <> "" Then skinTexture = TextureManager.GetTexture(Screens.MainMenu.NewNewGameScreen.CharacterSelectionScreen.SelectedSkin) Index += 1 Else SetScreen(New Screens.MainMenu.NewNewGameScreen.CharacterSelectionScreen(CurrentScreen)) End If Case 5 UpdateTextbox() Index += 1 Case 7 UpdateTransition(True) Case 9 If ProfAlpha > 0 Then ProfAlpha -= 2 End If If ProfAlpha <= 0 Then CreateGame() End If Case Else ShowText() End Select End If End If Dim AimColor As Color = normalColor If Me.Index = 4 Then AimColor = skinColors(SkinIndex) End If Dim diffR As Byte = 5 If (CInt(currentBackColor.R) - CInt(AimColor.R)).ToPositive() < 5 Then diffR = 1 End If Dim diffG As Byte = 5 If (CInt(currentBackColor.G) - CInt(AimColor.G)).ToPositive() < 5 Then diffG = 1 End If Dim diffB As Byte = 5 If (CInt(currentBackColor.B) - CInt(AimColor.B)).ToPositive() < 5 Then diffB = 1 End If If currentBackColor.R < AimColor.R Then currentBackColor.R += diffR ElseIf currentBackColor.R > AimColor.R Then currentBackColor.R -= diffR End If If currentBackColor.G < AimColor.G Then currentBackColor.G += diffG ElseIf currentBackColor.G > AimColor.G Then currentBackColor.G -= diffG End If If currentBackColor.B < AimColor.B Then currentBackColor.B += diffB ElseIf currentBackColor.B > AimColor.B Then currentBackColor.B -= diffB End If End Sub Private Sub ShowText() Dim Text As String = "" Select Case Index Case 0 Text = Dialogues(0) Case 2 Text = Dialogues(1) Case 6 Text = NameReaction(Name) Case 8 Text = Name & Dialogues(2) End Select TextBox.reDelay = 0 TextBox.Show(Text, {}) Index += 1 End Sub Public Overrides Sub Draw() Canvas.DrawRectangle(New Rectangle(0, 0, Core.windowSize.Width, Core.windowSize.Height), currentBackColor) TextBox.Draw() Core.SpriteBatch.Draw(mainTexture, New Rectangle(CInt(Core.windowSize.Width / 2) - 62, CInt(Core.windowSize.Height / 2) - 218, 130, 256), New Rectangle(0, 0, 62, 128), New Color(255, 255, 255, ProfAlpha)) Select Case pokeIndex Case 1 Core.SpriteBatch.Draw(mainTexture, New Rectangle(CInt(ballPosition.X), CInt(ballPosition.Y), 22, 22), New Rectangle(62 + CInt(ballIndex.X * 22), 48 + CInt(ballIndex.Y * 22), 22, 22), Color.White) Case 2 Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(pokePosition.X) - MathHelper.Min(CInt(pokeTexture.Width), 128), CInt(pokePosition.Y) - MathHelper.Min(CInt(pokeTexture.Height), 128), MathHelper.Min(CInt(pokeTexture.Width * 2), 256), MathHelper.Min(CInt(pokeTexture.Height * 2), 256)), Color.White) Case 3 If Index < 6 Then Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(pokePosition.X) - MathHelper.Min(CInt(pokeTexture.Width), 128), CInt(Core.windowSize.Height / 2) - MathHelper.Min(CInt(pokeTexture.Height), 128), MathHelper.Min(CInt(pokeTexture.Width * 2), 256), MathHelper.Min(CInt(pokeTexture.Height * 2), 256)), New Color(255, 255, 255, ProfAlpha)) End If End Select End Sub Private Sub UpdatePokemon() Select Case pokeIndex Case 0 ballPosition = New Vector2(CInt(Core.windowSize.Width / 2) - 40, CInt(Core.windowSize.Height / 2) - 110) pokePosition = New Vector2(CInt(Core.windowSize.Width / 2) - MathHelper.Min(CInt(pokeTexture.Width * 2), 256), CInt(Core.windowSize.Height / 2 - MathHelper.Min(CInt(pokeTexture.Height * 2), 256))) pokeIndex = 1 AnimateBall() Case 1 If ballPosition.X > CInt(Core.windowSize.Width / 2) - MathHelper.Min(CInt(pokeTexture.Width * 2), 256) Then ballPosition.X -= 3 ballPosition.Y += ballVelocity ballVelocity += 0.2F Else pokeIndex = 2 End If AnimateBall() Case 2 If pokePosition.Y < CInt(Core.windowSize.Height / 2) Then pokePosition.Y += 5 Else Dim p As Pokemon = Pokemon.GetPokemonByID(pokeID) p.PlayCry() pokeIndex = 3 Index = 2 End If End Select End Sub Private Sub AnimateBall() If ballAnimationDelay <= 0.0F Then ballIndex.X += 1 If ballIndex.X = 2 And ballIndex.Y = 2 Then ballIndex = New Vector2(0, 0) End If If ballIndex.X = 2 Then ballIndex.X = 0 ballIndex.Y += 1 End If ballAnimationDelay = 0.2F Else ballAnimationDelay -= 0.1F End If End Sub Private Sub UpdateTransition(ByVal ToProf As Boolean) If ToProf = True Then If OtherAlpha > 0 Then OtherAlpha -= 5 End If If OtherAlpha <= 0 Then If ProfAlpha < 255 Then ProfAlpha += 5 If ProfAlpha >= 255 Then Index += 1 End If End If End If Else If ProfAlpha > 0 Then ProfAlpha -= 5 End If If ProfAlpha <= 0 Then If OtherAlpha < 255 Then OtherAlpha += 5 If OtherAlpha >= 255 Then Index += 1 End If End If End If End If End Sub Private Sub UpdateTextbox() Dim skinTexture2D = TextureManager.GetTexture("Textures\NPC\" & skinFiles(SkinIndex)) Dim skinFrameSize As Size If skinTexture2D.Width = skinTexture2D.Height / 2 Then skinFrameSize = New Size(CInt(skinTexture2D.Width / 2), CInt(skinTexture2D.Height / 4)) ElseIf skinTexture2D.Width = skinTexture2D.Height Then skinFrameSize = New Size(CInt(skinTexture2D.Width / 4), CInt(skinTexture2D.Height / 4)) Else skinFrameSize = New Size(CInt(skinTexture2D.Width / 3), CInt(skinTexture2D.Height / 4)) End If Dim skinRectangle As New Rectangle(0, CInt(skinFrameSize.Height * 2), CInt(skinFrameSize.Width), CInt(skinFrameSize.Height)) skinTexture = TextureManager.GetTexture(skinTexture2D, skinRectangle) Core.SetScreen(New InputScreen(Core.CurrentScreen, skinNames(SkinIndex), InputScreen.InputModes.Name, skinNames(SkinIndex), 14, New List(Of Texture2D)({skinTexture}), AddressOf Me.ConfirmInput)) End Sub Private Sub ConfirmInput(ByVal input As String) Name = input End Sub Private Sub CreateGame() Dim folderPath As String = Name.Replace("\", "_").Replace("/", "_").Replace(":", "_").Replace("*", "_").Replace("?", "_").Replace("""", "_").Replace("<", "_").Replace(">", "_").Replace("|", "_").Replace(",", "_").Replace(".", "_") Dim folderPrefix As Integer = 0 If folderPath.ToLower() = "autosave" Then folderPath = "autosave0" End If Dim savePath As String = GameController.GamePath & "\Save\" While System.IO.Directory.Exists(savePath & folderPath) = True If folderPath <> Name Then folderPath = folderPath.Remove(folderPath.Length - folderPrefix.ToString().Length, folderPrefix.ToString().Length) End If folderPath &= folderPrefix folderPrefix += 1 End While If System.IO.Directory.Exists(GameController.GamePath & "\Save") = False Then System.IO.Directory.CreateDirectory(GameController.GamePath & "\Save") End If System.IO.Directory.CreateDirectory(savePath & folderPath) System.IO.File.WriteAllText(savePath & folderPath & "\Player.dat", GetPlayerData()) System.IO.File.WriteAllText(savePath & folderPath & "\Pokedex.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Items.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Register.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Berries.dat", GetBerryData()) System.IO.File.WriteAllText(savePath & folderPath & "\Apricorns.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Daycare.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Party.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\ItemData.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Options.dat", GetOptionsData()) System.IO.File.WriteAllText(savePath & folderPath & "\Box.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\NPC.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\HallOfFame.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\SecretBase.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\RoamingPokemon.dat", "") System.IO.File.WriteAllText(savePath & folderPath & "\Statistics.dat", "") Core.Player.IsGameJoltSave = False Core.Player.LoadGame(folderPath) Core.SetScreen(New TransitionScreen(Me, New OverworldScreen(), Color.Black, False, 5)) End Sub Private Function GetPlayerData() As String Dim ot As String = Core.Random.Next(0, 65256).ToString() While ot.Length < 5 ot = "0" & ot End While Dim s As String = "Name|" & Name & Environment.NewLine & "Position|" & Me.startPosition.X.ToString().Replace(GameController.DecSeparator, ".") & "," & Me.startPosition.Y.ToString().Replace(GameController.DecSeparator, ".") & "," & Me.startPosition.Z.ToString().Replace(GameController.DecSeparator, ".") & Environment.NewLine & "MapFile|" & Me.startMap & Environment.NewLine & "Rotation|" & Me.startYaw.ToString() & Environment.NewLine & "RivalName|???" & Environment.NewLine & "RivalSkin|4" & Environment.NewLine & "Money|3000" & Environment.NewLine & "Badges|0" & Environment.NewLine & "Gender|Male" & Environment.NewLine & "PlayTime|0,0,0,0" & Environment.NewLine & "OT|" & ot & Environment.NewLine & "Points|0" & Environment.NewLine & "hasPokedex|0" & Environment.NewLine & "hasPokegear|0" & Environment.NewLine & "freeCamera|1" & Environment.NewLine & "thirdPerson|0" & Environment.NewLine & "skin|" & skinFiles(SkinIndex) & Environment.NewLine & "location|" & Me.startLocation & Environment.NewLine & "battleAnimations|1" & Environment.NewLine & "RunMode|1" & Environment.NewLine & "BoxAmount|5" & Environment.NewLine & "LastRestPlace|" & startMap & Environment.NewLine & "LastRestPlacePosition|" & Me.startPosition.X.ToString().Replace(GameController.DecSeparator, ".") & "," & Me.startPosition.Y.ToString().Replace(GameController.DecSeparator, ".") & "," & Me.startPosition.Z.ToString().Replace(GameController.DecSeparator, ".") & Environment.NewLine & "DiagonalMovement|0" & Environment.NewLine & "RepelSteps|0" & Environment.NewLine & "LastSavePlace|" & startMap & Environment.NewLine & "LastSavePlacePosition|" & Me.startPosition.X.ToString().Replace(GameController.DecSeparator, ".") & "," & Me.startPosition.Y.ToString().Replace(GameController.DecSeparator, ".") & "," & Me.startPosition.Z.ToString().Replace(GameController.DecSeparator, ".") & Environment.NewLine & "Difficulty|" & GameModeManager.GetGameRuleValue("Difficulty", "0") & Environment.NewLine & "BattleStyle|1" & Environment.NewLine & "saveCreated|" & GameController.GAMEDEVELOPMENTSTAGE & " " & GameController.GAMEVERSION & Environment.NewLine & "LastPokemonPosition|999,999,999" & Environment.NewLine & "DaycareSteps|0" & Environment.NewLine & "GameMode|" & GameModeManager.ActiveGameMode.DirectoryName & Environment.NewLine & "PokeFiles|" & Environment.NewLine & "VisitedMaps|" & startMap & Environment.NewLine & "TempSurfSkin|" & skinFiles(SkinIndex) & Environment.NewLine & "Surfing|0" & Environment.NewLine & "ShowModels|1" & Environment.NewLine & "GTSStars|4" & Environment.NewLine & "SandBoxMode|0" & Environment.NewLine & "EarnedAchievements|" Return s End Function Public Shared Function GetOptionsData() As String Dim s As String = "FOV|60" & Environment.NewLine & "TextSpeed|2" & Environment.NewLine & "MouseSpeed|12" Return s End Function Public Shared Function GetBerryData() As String Dim s As String = "" If File.Exists(GameModeManager.GetContentFilePath("Data\BerryData.dat")) Then Dim Berries() As String = System.IO.File.ReadAllLines(GameModeManager.GetContentFilePath("Data\BerryData.dat")) For Each line In Berries s &= line Next Else s = "{route29.dat|13,0,5|6|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route29.dat|14,0,5|6|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route29.dat|15,0,5|6|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{azalea.dat|9,0,3|0|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{azalea.dat|9,0,4|1|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{azalea.dat|9,0,5|0|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route30.dat|7,0,41|10|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route30.dat|14,0,5|2|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route30.dat|15,0,5|6|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route30.dat|16,0,5|2|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{routes\route35.dat|0,0,4|7|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{routes\route35.dat|1,0,4|8|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route36.dat|37,0,7|0|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route36.dat|38,0,7|4|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route36.dat|39,0,7|3|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route39.dat|8,0,2|9|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route39.dat|8,0,3|6|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route38.dat|13,0,12|16|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route38.dat|14,0,12|23|1|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{route38.dat|15,0,12|16|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{routes\route43.dat|13,0,45|23|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{routes\route43.dat|13,0,46|24|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{routes\route43.dat|13,0,47|25|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{safarizone\main.dat|3,0,11|5|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{safarizone\main.dat|4,0,11|0|2|0|2012,9,21,4,0,0|1}" & Environment.NewLine & "{safarizone\main.dat|5,0,11|6|3|0|2012,9,21,4,0,0|1}" End If Return s End Function Private Function NameReaction(ByVal name As String) As String Dim WeirdNames() As String = {"derp", "karp"} Dim KnownNames() As String = {"ash", "gary", "misty", "brock", "tracey", "may", "max", "dawn", "iris", "cilan", "red", "blue", "green", "gold", "silver"} Dim OwnNames() As String = {"oak", "samuel", "prof. oak", "prof oak"} Select Case True Case WeirdNames.Contains(name.ToLower()) Return Localization.GetString("new_game_intro_weird_name_1") & name & Localization.GetString("new_game_intro_weird_name_2") Case KnownNames.Contains(name.ToLower()) Return Localization.GetString("new_game_intro_known_name_1") & name & Localization.GetString("new_game_intro_known_name_2") Case OwnNames.Contains(name.ToLower()) Return Localization.GetString("new_game_intro_same_name_1") & name & Localization.GetString("new_game_intro_same_name_2") End Select Return Localization.GetString("new_game_intro_name_1") & name & Localization.GetString("new_game_intro_name_2") End Function End Class End Namespace