public override void Unload()
        {
            Hotkeys.Unload();
            Core.Instance.Unload();
            FastForwardBoost.Unload();
            DisableAchievements.Instance.Unload();
            GraphicsCore.Instance.Unload();
            SimplifiedGraphicsFeature.Instance.Unload();
            CenterCamera.Instance.Unload();
            AutoMute.Unload();
            HideGameplay.Instance.Unload();
            HitboxTweak.Unload();
            InfoHud.Unload();
            PlayerInfo.Unload();
            On.Celeste.LevelLoader.LoadingThread -= LevelLoader_LoadingThread;
            StudioCommunicationClient.Destroy();

            UnixRtc?.Dispose();

            Manager.DisableExternal();

#if DEBUG
            Benchmark.Unload();
#endif
        }
        public override void Load()
        {
            Hotkeys.Load();
            Core.Load();
            FastForwardBoost.Load();
            DisableAchievements.Load();
            GraphicsCore.Load();
            SimplifiedGraphicsFeature.Load();
            CenterCamera.Load();
            AutoMute.Load();
            HideGameplay.Load();
            HitboxTweak.Load();
            InfoHud.Load();
            ConsoleEnhancements.Load();

            AttributeUtils.Invoke <LoadAttribute>();

            // Open unix IO pipe for interfacing with Linux / Mac Celeste Studio
            if (UnixRtcEnabled)
            {
                File.Delete("/tmp/celestetas");
                UnixRtc = new NamedPipeServerStream("/tmp/celestetas", PipeDirection.InOut);
                UnixRtc.WaitForConnection();
                UnixRtcStreamOut = new StreamWriter(UnixRtc);
                UnixRtcStreamIn  = new StreamReader(UnixRtc);
                Logger.Log("CelesteTAS", "Unix socket is active on /tmp/celestetas");
            }

            // Open memory mapped file for interfacing with Windows Celeste Studio
            StudioCommunicationClient.Run();

#if DEBUG
            Benchmark.Load();
#endif
        }
        public override void Load()
        {
            Hotkeys.Load();

            Core.Instance = new Core();
            Core.Instance.Load();

            FastForwardBoost.Load();

            DisableAchievements.Instance = new DisableAchievements();
            DisableAchievements.Instance.Load();

            GraphicsCore.Instance = new GraphicsCore();
            GraphicsCore.Instance.Load();

            SimplifiedGraphicsFeature.Instance = new SimplifiedGraphicsFeature();
            SimplifiedGraphicsFeature.Instance.Load();

            CenterCamera.Instance = new CenterCamera();
            CenterCamera.Instance.Load();

            AutoMute.Load();

            HideGameplay.Instance = new HideGameplay();
            HideGameplay.Instance.Load();

            HitboxTweak.Load();

            InfoHud.Load();

            PlayerInfo.Load();

            // Optional: Allow spawning at specified location
            On.Celeste.LevelLoader.LoadingThread += LevelLoader_LoadingThread;

            // Open unix IO pipe for interfacing with Linux / Mac Celeste Studio
            if (UnixRtcEnabled)
            {
                File.Delete("/tmp/celestetas");
                UnixRtc = new NamedPipeServerStream("/tmp/celestetas", PipeDirection.InOut);
                UnixRtc.WaitForConnection();
                UnixRtcStreamOut = new StreamWriter(UnixRtc);
                UnixRtcStreamIn  = new StreamReader(UnixRtc);
                Logger.Log("CelesteTAS", "Unix socket is active on /tmp/celestetas");
            }

            // Open memory mapped file for interfacing with Windows Celeste Studio
            if (StudioCommunicationClient.Instance == null)
            {
                StudioCommunicationClient.Run();
            }

#if DEBUG
            Benchmark.Load();
#endif
        }
        public override void Unload()
        {
            Hotkeys.Unload();
            Core.Unload();
            FastForwardBoost.Unload();
            DisableAchievements.Unload();
            GraphicsCore.Unload();
            SimplifiedGraphicsFeature.Unload();
            CenterCamera.Unload();
            AutoMute.Unload();
            HideGameplay.Unload();
            HitboxTweak.Unload();
            InfoHud.Unload();
            ConsoleEnhancements.Unload();
            StudioCommunicationClient.Destroy();

            AttributeUtils.Invoke <UnloadAttribute>();

            UnixRtc?.Dispose();

#if DEBUG
            Benchmark.Unload();
#endif
        }