From b03fa9f0fcb5499cfd5a8e7c214985fd6dfefef3 Mon Sep 17 00:00:00 2001 From: JappaWakka Date: Tue, 1 Jul 2025 08:00:54 +0200 Subject: [PATCH] Added BlackOutScript actions map tag {"BlackOutScript"{str[ScriptPath]}} will execute the specified script after blacking/whiting out --- P3D/Battle/BattleSystemV2/BattleScreen.vb | 9 +++++++-- P3D/Player/Player.vb | 6 +++++- .../ActionScript/V2/ScriptCommands/DoBattle.vb | 18 +++++++++++++++--- .../ActionScript/V2/ScriptCommands/DoScreen.vb | 6 +++++- P3D/World/Level.vb | 14 ++++++++++++++ P3D/World/LevelLoader.vb | 5 +++++ P3D/World/PokemonEncounter.vb | 6 +++++- 7 files changed, 56 insertions(+), 8 deletions(-) diff --git a/P3D/Battle/BattleSystemV2/BattleScreen.vb b/P3D/Battle/BattleSystemV2/BattleScreen.vb index 9fe23b5ab..7f1665ff4 100644 --- a/P3D/Battle/BattleSystemV2/BattleScreen.vb +++ b/P3D/Battle/BattleSystemV2/BattleScreen.vb @@ -1405,8 +1405,8 @@ nextIndex: ItemReturnScript &= "@Sound.Play(item_found)" & Environment.NewLine & "@Text.Show(" & Core.Player.Name & " found~" & p.OriginalItem.Name & "!*" & Core.Player.Inventory.GetMessageReceive(p.OriginalItem, 1) p.OriginalItem = Nothing - End If End If + End If End If p.ResetTemp() Next @@ -1528,7 +1528,12 @@ nextIndex: FieldEffects.OppRageFistPower = 0 ResetVars() - Core.SetScreen(New TransitionScreen(Me, New BlackOutScreen(Me), Color.Black, False)) + If SavedOverworld.Level.BlackOutScript <> "" Then + CType(SavedOverworld.OverworldScreen, OverworldScreen).ActionScript.StartScript(SavedOverworld.Level.BlackOutScript, 0, False) + Core.SetScreen(New TransitionScreen(Me, SavedOverworld.OverworldScreen, Color.Black, False, AddressOf ChangeSavedScreen)) + Else + Core.SetScreen(New TransitionScreen(Me, New BlackOutScreen(Me), Color.Black, False)) + End If End If BattleMapOffset = New Vector3(0) OwnLeadIndex = 0 diff --git a/P3D/Player/Player.vb b/P3D/Player/Player.vb index f5e050097..88ef1de51 100644 --- a/P3D/Player/Player.vb +++ b/P3D/Player/Player.vb @@ -1928,7 +1928,11 @@ End If End If If Core.Player.CountFightablePokemon = 0 Then - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + If Screen.Level.BlackOutScript <> "" Then + CType(CurrentScreen, OverworldScreen).ActionScript.StartScript(Screen.Level.BlackOutScript, 0, False) + Else + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + End If End If Next End If diff --git a/P3D/World/ActionScript/V2/ScriptCommands/DoBattle.vb b/P3D/World/ActionScript/V2/ScriptCommands/DoBattle.vb index 07f8cd4cc..2f36bf722 100644 --- a/P3D/World/ActionScript/V2/ScriptCommands/DoBattle.vb +++ b/P3D/World/ActionScript/V2/ScriptCommands/DoBattle.vb @@ -52,7 +52,11 @@ CanContinue = False Else - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + If Screen.Level.BlackOutScript <> "" Then + CType(CurrentScreen, OverworldScreen).ActionScript.StartScript(Screen.Level.BlackOutScript, 0, False) + Else + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + End If End If Case "trainer" If Core.Player.Pokemons.Count > 0 Then @@ -92,7 +96,11 @@ CanContinue = False Else - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + If Screen.Level.BlackOutScript <> "" Then + CType(CurrentScreen, OverworldScreen).ActionScript.StartScript(Screen.Level.BlackOutScript, 0, False) + Else + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + End If End If Case "wild" ' ID, Level, [shiny], [musicloop], [introtype] @@ -203,7 +211,11 @@ CanContinue = False Else - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + If Screen.Level.BlackOutScript <> "" Then + CType(CurrentScreen, OverworldScreen).ActionScript.StartScript(Screen.Level.BlackOutScript, 0, False) + Else + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + End If End If Case "setvar" Dim varname As String = argument.GetSplit(0) diff --git a/P3D/World/ActionScript/V2/ScriptCommands/DoScreen.vb b/P3D/World/ActionScript/V2/ScriptCommands/DoScreen.vb index d0a5e2f3a..43b92d518 100644 --- a/P3D/World/ActionScript/V2/ScriptCommands/DoScreen.vb +++ b/P3D/World/ActionScript/V2/ScriptCommands/DoScreen.vb @@ -80,7 +80,11 @@ CanContinue = False Case "blackout" - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + If Screen.Level.BlackOutScript <> "" Then + CType(CurrentScreen, OverworldScreen).ActionScript.StartScript(Screen.Level.BlackOutScript, 0, False) + Else + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + End If IsReady = True diff --git a/P3D/World/Level.vb b/P3D/World/Level.vb index 5e2297c1e..6668a5c6c 100644 --- a/P3D/World/Level.vb +++ b/P3D/World/Level.vb @@ -73,6 +73,8 @@ Public Class Level Private _offsetMapEntities As New List(Of Entity) Private _offsetMapFloors As New List(Of Entity) + Public _blackOutScript As String = "" + ' Radio: Private _isRadioOn As Boolean = False Private _selectedRadioStation As GameJolt.PokegearScreen.RadioStation = Nothing @@ -247,6 +249,18 @@ Public Class Level End Set End Property + ''' + ''' The script to execute after the player blacks/whites out + ''' + Public Property BlackOutScript() As String + Get + Return Me._blackOutScript + End Get + Set(value As String) + Me._blackOutScript = value + End Set + End Property + ''' ''' The name of the current map. ''' diff --git a/P3D/World/LevelLoader.vb b/P3D/World/LevelLoader.vb index 300709102..73132fdac 100644 --- a/P3D/World/LevelLoader.vb +++ b/P3D/World/LevelLoader.vb @@ -1037,6 +1037,11 @@ Else Screen.Level.DisableMenus = False End If + If TagExists(Tags, "BlackOutScript") = True Then + Screen.Level.BlackOutScript = CStr(GetTag(Tags, "BlackOutScript")) + Else + Screen.Level.BlackOutScript = "" + End If If _reload = False Then If TagExists(Tags, "EnvironmentType") = True Then Screen.Level.EnvironmentType = CInt(GetTag(Tags, "EnvironmentType")) diff --git a/P3D/World/PokemonEncounter.vb b/P3D/World/PokemonEncounter.vb index 3b12e9591..320062724 100644 --- a/P3D/World/PokemonEncounter.vb +++ b/P3D/World/PokemonEncounter.vb @@ -120,7 +120,11 @@ Public Class PokemonEncounter ' If the encounter check is true: If Me._levelReference.PokemonEncounterData.EncounteredPokemon = True And Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then If Core.Player.Pokemons.Count = 0 Then - Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + If Screen.Level.BlackOutScript <> "" Then + CType(CurrentScreen, OverworldScreen).ActionScript.StartScript(Screen.Level.BlackOutScript, 0, False) + Else + Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New BlackOutScreen(Core.CurrentScreen), Color.Black, False)) + End If Me._levelReference.PokemonEncounterData.EncounteredPokemon = False Exit Sub Else