Skip to content

Commit 4af462e

Browse files
committed
add event to suppress the forced GBJ pause
1 parent 70fd226 commit 4af462e

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

Celeste.Mod.mm/Patches/Player.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using MonoMod.InlineRT;
1717
using MonoMod.Utils;
1818

19+
using _Level = Celeste.Level;
1920
using _Player = Celeste.Player;
2021

2122
namespace Celeste {
@@ -183,7 +184,8 @@ private void UpdateSprite() {
183184
if (framesAlive < 6 && level != null) {
184185
diedInGBJ++;
185186
if (diedInGBJ != 0 && (diedInGBJ % 2) == 0 && level.Session.Area.GetLevelSet() != "Celeste" && !CoreModule.Settings.DisableAntiSoftlock) {
186-
level.Pause();
187+
if (!Everest.Events.Player.PauseInGBJ(this))
188+
level.Pause();
187189
return null;
188190
}
189191
}
@@ -375,6 +377,16 @@ internal static void Spawn(_Player player)
375377
internal static void Die(_Player player)
376378
=> OnDie?.Invoke(player);
377379

380+
/// <summary>
381+
/// Called in <see cref="_Player.Die"/>, just before pausing the game as a softlock prevention measure.
382+
/// By returning <c>true</c> you can prevent the pause (and cancel invocation of this event).
383+
///
384+
/// Intended to be used when <see cref="_Level.PauseLock"/> is enabled during normal gameplay where the player might die.
385+
/// </summary>
386+
public static event Func<_Player, bool> OnPauseInGBJ;
387+
internal static bool PauseInGBJ(_Player player)
388+
=> OnPauseInGBJ.InvokeWhileFalse(player);
389+
378390
/// <summary>
379391
/// Called in the Player constructor during <see cref="StateMachine"/> initialisation, to be used to register custom Player states.
380392
/// </summary>

0 commit comments

Comments
 (0)