using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using CursedWordsQuickRestart; using MelonLoader; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(QuickRestartMod), "Cursed Words Quick Restart", "0.1.0", "local", null)] [assembly: MelonGame(null, "Cursed Words")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("CursedWordsQuickRestart")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("CursedWordsQuickRestart")] [assembly: AssemblyTitle("CursedWordsQuickRestart")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace CursedWordsQuickRestart { public sealed class QuickRestartMod : MelonMod { private const float RestartHoldSeconds = 1f; private float restartHoldTimer; private bool restartTriggered; public override void OnInitializeMelon() { MelonLogger.Msg("Cursed Words Quick Restart 0.1.0 loaded."); } public override void OnUpdate() { HandleQuickRestart(); } private void HandleQuickRestart() { if (!Input.GetKey((KeyCode)114)) { restartHoldTimer = 0f; restartTriggered = false; } else if (!restartTriggered) { restartHoldTimer += Time.unscaledDeltaTime; if (!(restartHoldTimer < 1f)) { restartTriggered = true; QuickRestartRun(); } } } private static void QuickRestartRun() { try { if (GameStatics.GetPlayer() == null) { MelonLogger.Msg("Quick restart ignored: no active run."); return; } MelonLogger.Msg("Quick restart triggered."); if (!TryExistingRetryRun()) { RestartRunDirectly(); } } catch (Exception arg) { MelonLogger.Error($"Quick restart failed: {arg}"); } } private static bool TryExistingRetryRun() { EncounterController val = Object.FindAnyObjectByType(); if ((Object)(object)val != (Object)null) { val.RetryRun(); return true; } ShopController val2 = Object.FindAnyObjectByType(); if ((Object)(object)val2 != (Object)null) { val2.RetryRun(); return true; } SettingsMenuController val3 = Object.FindAnyObjectByType(); if ((Object)(object)val3 != (Object)null) { val3.RetryRun(); return true; } return false; } private static void RestartRunDirectly() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) Player player = GameStatics.GetPlayer(); Type type = ((object)player.MyCharacter).GetType(); Type type2 = ((object)player.CurrentRunProgress.Challenge)?.GetType(); AscensionLevel ascension = player.CurrentRunProgress.Ascension; InventoryVisualController singletonInventoryVisualController = CharacterInfoPanel.SingletonInventoryVisualController; if (singletonInventoryVisualController != null) { singletonInventoryVisualController.RemovePanel(); } GameStatics.InitialisePlayerForNewRun(type, type2, ascension); string text = GameStatics.GetPlayer().CurrentRunProgress.GoToNextNodeAndGetSceneName(); TransitionController val = Object.FindAnyObjectByType(); if ((Object)(object)val != (Object)null) { val.TransitionToNewScene(text); } else { SceneManager.LoadScene(text); } } } }