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