diff --git a/2.5DHero/2.5DHero/2.5DHero.vbproj b/2.5DHero/2.5DHero/2.5DHero.vbproj index 40b0a0855..c459d5c76 100644 --- a/2.5DHero/2.5DHero/2.5DHero.vbproj +++ b/2.5DHero/2.5DHero/2.5DHero.vbproj @@ -1575,6 +1575,7 @@ + diff --git a/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb b/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb index 38554107b..ef474febe 100644 --- a/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb +++ b/2.5DHero/2.5DHero/Battle/BattleSystemV2/BattleScreen.vb @@ -2,8 +2,13 @@ Public Class BattleScreen + Inherits Screen + + Public Shared OwnLeadIndex As Integer = 0 + Public Shared OppLeadIndex As Integer = 0 + #Region "BattleValues" Public ClearMenuTime As Boolean = False @@ -337,6 +342,12 @@ End If Next Me.OwnPokemon = Core.Player.Pokemons(meIndex) + If IsPVPBattle Then + OwnPokemon = Core.Player.Pokemons(OwnLeadIndex) + OwnPokemonIndex = OwnLeadIndex + OppPokemon = Trainer.Pokemons(OppLeadIndex) + OppPokemonIndex = OppLeadIndex + End If Me.IsTrainerBattle = True Me.ParticipatedPokemon.Add(meIndex) @@ -421,8 +432,8 @@ Me.BattleQuery.AddRange({cq, q, q1, q2, q22, q3, q31, q4}) - Battle.SwitchInOwn(Me, meIndex, True, -1) - Battle.SwitchInOpp(Me, True, 0) + Battle.SwitchInOwn(Me, meIndex, True, OwnPokemonIndex) + Battle.SwitchInOpp(Me, True, OppPokemonIndex) Me.BattleQuery.AddRange({cq1, q5, cq2}) @@ -1070,6 +1081,8 @@ nextIndex: ResetVars() Core.SetScreen(New TransitionScreen(Me, New BlackOutScreen(Me), Color.Black, False)) End If + OwnLeadIndex = 0 + OppLeadIndex = 0 End Sub Public Sub ChangeSavedScreen() diff --git a/2.5DHero/2.5DHero/Network/Servers/PVPLobbyScreen.vb b/2.5DHero/2.5DHero/Network/Servers/PVPLobbyScreen.vb index 143733956..9a19163cc 100644 --- a/2.5DHero/2.5DHero/Network/Servers/PVPLobbyScreen.vb +++ b/2.5DHero/2.5DHero/Network/Servers/PVPLobbyScreen.vb @@ -286,12 +286,18 @@ Private Sub StartBattle() If Not Me.OwnTeam Is Nothing And Not OppTeam Is Nothing Then - Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleStart, Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, PartnerNetworkID.ToString())) - If ReceivedBattleOffer = True Then - InitializeBattle() - Else - SentBattleOffer = True - End If + Core.SetScreen(New ChoosePokemonScreen(Core.CurrentScreen, Item.GetItemByID(5), AddressOf LeadPickedStart, "Choose your lead.", True, True, False, _pokemonList:=OwnTeam)) + End If + End Sub + + Private Sub LeadPickedStart(ByVal index As Integer) + BattleSystem.BattleScreen.OwnLeadIndex = index + Core.ServersManager.ServerConnection.SendPackage(New Servers.Package(Servers.Package.PackageTypes.BattleOffer, + Core.ServersManager.ID, Servers.Package.ProtocolTypes.TCP, {PartnerNetworkID.ToString(), CStr(index)}.ToList())) + If ReceivedBattleOffer = True Then + InitializeBattle() + Else + SentBattleOffer = True End If End Sub @@ -490,7 +496,8 @@ End If End Sub - Public Shared Sub ReceiveBattleStart() + Public Shared Sub ReceiveBattleStart(ByVal index As Integer) + BattleSystem.BattleScreen.OppLeadIndex = index If IsLobbyScreen() = True Then If SentBattleOffer = True Then StartBattleRemote = True diff --git a/2.5DHero/2.5DHero/Network/Servers/PackageHandler.vb b/2.5DHero/2.5DHero/Network/Servers/PackageHandler.vb index 27cccc043..013139fc6 100644 --- a/2.5DHero/2.5DHero/Network/Servers/PackageHandler.vb +++ b/2.5DHero/2.5DHero/Network/Servers/PackageHandler.vb @@ -203,7 +203,15 @@ End Sub Private Shared Sub HandleBattleOffer(ByVal p As Package) - PVPLobbyScreen.ReceiveOppTeam(p.DataItems(0)) + 'Remove the whole "if" when server API is updated. + If p.DataItems(0).Length = 1 Then + PVPLobbyScreen.ReceiveBattleStart(CInt(p.DataItems(0))) + Else + PVPLobbyScreen.ReceiveOppTeam(p.DataItems(0)) + End If + + 'PVPLobbyScreen.ReceiveOppTeam(p.DataItems(0)) + End Sub Private Shared Sub HandleBattleQuit(ByVal p As Package) @@ -229,7 +237,7 @@ End Sub Private Shared Sub HandleBattleStart(ByVal p As Package) - PVPLobbyScreen.ReceiveBattleStart() + PVPLobbyScreen.ReceiveBattleStart(CInt(p.DataItems(0))) End Sub Private Shared Sub HandleBattleHostData(ByVal p As Package) diff --git a/2.5DHero/2.5DHero/Screens/Battle/LeadPokemonInfoScreen.vb b/2.5DHero/2.5DHero/Screens/Battle/LeadPokemonInfoScreen.vb new file mode 100644 index 000000000..efa2a9184 --- /dev/null +++ b/2.5DHero/2.5DHero/Screens/Battle/LeadPokemonInfoScreen.vb @@ -0,0 +1,108 @@ +Public Class LeadPokemonInfoScreen + + Inherits Screen + + Dim Pokemon As Pokemon + + Dim index As Integer = 0 + Dim mainTexture As Texture2D + Public Delegate Sub DoStuff(ByVal PokeIndex As Integer) + Dim ChoosePokemon As DoStuff + Dim pokeIndex As Integer = 0 + + Dim PokeSize As Integer = 128 + Dim ItemSize As Integer = 0 + + Public Sub New(ByVal currentScreen As Screen, ByVal PokeIndex As Integer, ByVal ChoosePokemon As DoStuff) + Me.PreScreen = currentScreen + Me.Identification = Identifications.BattlePokemonScreen + Me.ChoosePokemon = ChoosePokemon + Me.pokeIndex = PokeIndex + Me.Pokemon = Core.Player.Pokemons(PokeIndex) + + + Me.mainTexture = TextureManager.GetTexture("GUI\Menus\Menu") + + Logger.Debug(currentScreen.Identification.ToString()) + End Sub + + Public Overrides Sub Update() + If Controls.Up(True, True, True, True) = True Then + Me.index -= 1 + End If + If Controls.Down(True, True, True, True) = True Then + Me.index += 1 + End If + + If Me.index < 0 Then + Me.index = 2 + ElseIf Me.index > 2 Then + Me.index = 0 + End If + + If PokeSize < 128 Then + PokeSize += 10 + End If + If ItemSize > 0 Then + ItemSize -= 10 + End If + + If Controls.Dismiss(True, True) = True Then + Core.SetScreen(Me.PreScreen) + End If + + If Controls.Accept(True, True) = True Then + Select Case index + Case 0 + Core.SetScreen(Me.PreScreen) + Me.ChoosePokemon(Me.pokeIndex) + Case 1 + Core.SetScreen(New PokemonStatusScreen(Me, Me.pokeIndex, {}, Core.Player.Pokemons(Me.pokeIndex), True)) + Case 2 + Core.SetScreen(Me.PreScreen) + End Select + End If + End Sub + + Public Overrides Sub Draw() + PreScreen.Draw() + + Canvas.DrawRectangle(New Rectangle(0, 0, Core.ScreenSize.Width, Core.ScreenSize.Height), New Color(0, 0, 0, 150)) + + DrawPreview() + DrawMenuPokemon() + + End Sub + + Private Sub DrawPreview() 'Draws the preview of the pokemon and it's holding item. + Dim T As Texture2D = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "") + Canvas.DrawImageBorder(T, 2, New Rectangle(CInt(Core.windowSize.Width / 2) - 70, 48, 96, 96)) + Core.SpriteBatch.Draw(Pokemon.GetTexture(True), New Rectangle(CInt(Core.windowSize.Width / 2) - 70, 32, PokeSize, PokeSize), Color.White) + If Not Pokemon.Item Is Nothing Then + Core.SpriteBatch.Draw(Pokemon.Item.Texture, New Rectangle(CInt(Core.windowSize.Width / 2) - 70, 64, ItemSize, ItemSize), Color.White) + End If + End Sub + + Private Sub DrawMenuPokemon() + Dim T As Texture2D + For i = 0 To 2 + Dim Text As String = "Pick" + Select Case i + Case 1 + Text = "Summary" + Case 2 + Text = "Back" + End Select + + If i = index Then + T = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 48, 48, 48), "") + Else + T = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "") + End If + + Canvas.DrawImageBorder(T, 2, New Rectangle(CInt(Core.windowSize.Width / 2) - 180, 180 + 128 * i, 320, 64)) + Core.SpriteBatch.DrawString(FontManager.InGameFont, Text, New Vector2(CInt(Core.windowSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(Text).X / 2) - 7, 215 + 128 * i), Color.Black) + Next + End Sub + +End Class \ No newline at end of file diff --git a/2.5DHero/2.5DHero/Screens/Inventory/ChoosePokemonScreen.vb b/2.5DHero/2.5DHero/Screens/Inventory/ChoosePokemonScreen.vb index f1f0bd184..3d8d05373 100644 --- a/2.5DHero/2.5DHero/Screens/Inventory/ChoosePokemonScreen.vb +++ b/2.5DHero/2.5DHero/Screens/Inventory/ChoosePokemonScreen.vb @@ -3,6 +3,7 @@ Inherits Screen Private PokemonList As New List(Of Pokemon) + Private AltPokemonList As New List(Of Pokemon) Public Shared Selected As Integer = -1 Public Shared Exited As Boolean = False @@ -29,7 +30,7 @@ Public LearnAttack As BattleSystem.Attack Public LearnType As Integer = 0 - Public Sub New(ByVal currentScreen As Screen, ByVal Item As Item, ByVal ChoosePokemon As DoStuff, ByVal Title As String, ByVal canExit As Boolean, ByVal canChooseFainted As Boolean, ByVal canChooseEgg As Boolean) + Public Sub New(ByVal currentScreen As Screen, ByVal Item As Item, ByVal ChoosePokemon As DoStuff, ByVal Title As String, ByVal canExit As Boolean, ByVal canChooseFainted As Boolean, ByVal canChooseEgg As Boolean, Optional ByVal _pokemonList As List(Of Pokemon) = Nothing) Me.PreScreen = currentScreen Me.Identification = Identifications.ChoosePokemonScreen @@ -50,6 +51,7 @@ Me.index = Player.Temp.PokemonScreenIndex Me.ChoosePokemon = ChoosePokemon + Me.AltPokemonList = _pokemonList GetPokemonList() End Sub @@ -63,10 +65,15 @@ End Sub Private Sub GetPokemonList() - Me.PokemonList.Clear() - For Each p As Pokemon In Core.Player.Pokemons - Me.PokemonList.Add(Pokemon.GetPokemonByData(p.GetSaveData())) - Next + If AltPokemonList IsNot Nothing Then + For Each p As Pokemon In AltPokemonList + Me.PokemonList.Add(Pokemon.GetPokemonByData(p.GetSaveData())) + Next + Else + For Each p As Pokemon In Core.Player.Pokemons + Me.PokemonList.Add(Pokemon.GetPokemonByData(p.GetSaveData())) + Next + End If End Sub Public Overrides Sub Update()