using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using DM; using HarmonyLib; using Landfall.TABS; using Landfall.TABS.GameMode; using Landfall.TABS.Workshop; using QuickScene; using QuickSceneFunctions; 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: AssemblyTitle("QuickScene")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("GeeztJeez")] [assembly: AssemblyProduct("QuickScene")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("7acfaef0-7669-4401-8bff-5a9a02e18c75")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace QuickSceneFunctions { public class QuickSceneUI : MonoBehaviour { private Vector2 scrollPos; private bool showMenu = true; public Texture2D windowTexture; public Texture2D buttonTexture; private GUIStyle windowStyle; private GUIStyle buttonStyle; private void OnGUI() { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) EnsureStyles(); if (!showMenu) { if (GUI.Button(new Rect((float)Screen.width - 40f, 10f, 30f, 30f), "<")) { showMenu = true; } return; } float num = 250f; float num2 = 500f; GUILayout.BeginArea(new Rect((float)Screen.width - num - 10f, 10f, num, num2), windowStyle); GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label("Quick Scenes", Array.Empty()); if (GUILayout.Button("X", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(30f) })) { showMenu = false; } GUILayout.EndHorizontal(); GUILayout.Space(10f); GUILayout.Label("Loaded: " + Loader.SceneNames.Count, Array.Empty()); scrollPos = GUILayout.BeginScrollView(scrollPos, Array.Empty()); foreach (Loader.SceneShortcut sceneName in Loader.SceneNames) { if (GUILayout.Button(sceneName.DisplayName, buttonStyle, Array.Empty())) { Loader.LoadSceneOrMap(sceneName.SceneName); } } GUILayout.EndScrollView(); GUILayout.Space(10f); if (GUILayout.Button("Reload", buttonStyle, Array.Empty())) { Loader.ReloadScenes(); } if (GUILayout.Button("Dump MapAssets", buttonStyle, Array.Empty())) { foreach (MapAsset item in ContentDatabase.Instance().GetAllMapAssetsOrdered()) { Debug.Log((object)("[MapAsset] " + item.MapName + " | " + item.Entity.Name)); } } GUILayout.EndArea(); } private void EnsureStyles() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown if (windowStyle == null) { windowStyle = new GUIStyle(GUI.skin.box); if ((Object)(object)windowTexture != (Object)null) { windowStyle.normal.background = windowTexture; } } if (buttonStyle == null) { buttonStyle = new GUIStyle(GUI.skin.button); if ((Object)(object)buttonTexture != (Object)null) { buttonStyle.normal.background = buttonTexture; } } } } } namespace QuickScene { [BepInPlugin("GeeztJeez.QuickScene", "QuickScene", "1.0.0")] internal class Loader : BaseUnityPlugin { public class SceneShortcut { public string SceneName; public string DisplayName; } public static Loader Instance; public static string QuickSceneFolder; public static string SceneFilePath; public AssetBundle assetBundle; public GameObject quickSceneUI; public static string ConfigFilePath; public static bool InstantLoadEnabled; public static string InstantLoadScene; public static bool DebugEnabled; public static List SceneNames = new List(); public void Awake() { try { Instance = this; QuickSceneFolder = Path.Combine(Application.dataPath, "../QuickScene"); SceneFilePath = Path.Combine(QuickSceneFolder, "shortcutScene.txt"); ConfigFilePath = Path.Combine(QuickSceneFolder, "config.txt"); CreateConfig(); LoadConfig(); ReloadScenes(); ApplyHarmony(); ((MonoBehaviour)this).StartCoroutine(Call()); } catch (Exception ex) { LogError("[QuickScene] Fatal error, mod loading failed: " + ex); LogWarning("Please contact Geezt Jeez or try reloading the game for proper installation..."); } } public IEnumerator Call() { yield return (object)new WaitUntil((Func)(() => (Object)(object)Object.FindObjectOfType() != (Object)null)); yield return (object)new WaitUntil((Func)(() => ServiceLocator.GetService() != null)); yield return (object)new WaitUntil((Func)(() => (Object)(object)ServiceLocator.GetService() != (Object)null)); yield return (object)new WaitUntil((Func)(() => ContentDatabase.Instance() != null)); Log("[QuickScene] Loading...!"); assetBundle = LoadBundle("quicksceneassetbundle"); quickSceneUI = new GameObject("QuickSceneUI"); Object.DontDestroyOnLoad((Object)(object)quickSceneUI); QuickSceneUI obj = quickSceneUI.AddComponent(); obj.windowTexture = assetBundle.LoadAsset("QuickSceneWindowTexture"); obj.buttonTexture = assetBundle.LoadAsset("QuickSceneButtonTexture"); SceneManager.sceneLoaded += SceneLoaded; ServiceLocator.GetService().QuickRefresh((WorkshopContentType)5, (Action)null); Log("[QuickScene] Successfully loaded!"); if (InstantLoadEnabled && !string.IsNullOrEmpty(InstantLoadScene)) { Log("[QuickScene] Instant load enabled."); LoadSceneOrMap(InstantLoadScene); } else { Log("[QuickScene] Instant load disabled."); } } public static void CreateConfig() { if (!Directory.Exists(QuickSceneFolder)) { Directory.CreateDirectory(QuickSceneFolder); } if (!File.Exists(SceneFilePath)) { File.WriteAllText(SceneFilePath, "00_Simulation_Day_VC=Simulation\r\nUnitCreator_GamepadUI=Unit Creator\r\nEditor Scene=Map Editor"); } if (!File.Exists(ConfigFilePath)) { File.WriteAllText(ConfigFilePath, "InstantLoadEnabled=false\r\nInstantLoadScene=00_Simulation_Day_VC\r\nDebugEnabled=false"); } } public static void ReloadScenes() { try { SceneNames.Clear(); string[] array = File.ReadAllLines(SceneFilePath); for (int i = 0; i < array.Length; i++) { string text = array[i].Trim(); if (!string.IsNullOrWhiteSpace(text)) { string[] array2 = text.Split(new char[1] { '=' }, 2); string sceneName; string displayName; if (array2.Length == 2) { sceneName = array2[0].Trim(); displayName = array2[1].Trim(); } else { sceneName = text; displayName = text; } SceneNames.Add(new SceneShortcut { SceneName = sceneName, DisplayName = displayName }); } } Log($"[QuickScene] Loaded {SceneNames.Count} scene shortcuts."); foreach (SceneShortcut sceneName2 in SceneNames) { Log($"[QuickScene] {sceneName2.SceneName} => {sceneName2.DisplayName}"); } } catch (Exception arg) { LogError($"[QuickScene] Failed loading scene list.\n{arg}"); } } public static bool SceneExists(string sceneName) { try { return Application.CanStreamedLevelBeLoaded(sceneName); } catch { return false; } } public void SceneLoaded(Scene scene, LoadSceneMode loadSceneMode) { try { Log($"[QuickScene] Loading scene: {((Scene)(ref scene)).name}"); } catch (Exception arg) { LogError($"[QuickScene] SceneLoaded failed: {arg}"); } } public void ApplyHarmony() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) try { new Harmony("QuickScene").PatchAll(Assembly.GetExecutingAssembly()); Log("[QuickScene] Harmony patched successfully!"); } catch (Exception ex) { LogError("[QuickScene] Harmony patch failed: " + ex); LogWarning("Please contact Geezt Jeez or try reloading the game for proper installation..."); } } public AssetBundle LoadBundle(string assetBundleName) { Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(assetBundleName); if (manifestResourceStream == null) { return null; } if (!manifestResourceStream.CanRead) { return null; } return AssetBundle.LoadFromStream(manifestResourceStream); } public void OnDestroy() { SceneManager.sceneLoaded -= SceneLoaded; } public static void LoadConfig() { InstantLoadEnabled = false; DebugEnabled = false; InstantLoadScene = ""; try { string[] array = File.ReadAllLines(ConfigFilePath); foreach (string text in array) { if (string.IsNullOrWhiteSpace(text)) { continue; } string[] array2 = text.Split(new char[1] { '=' }, 2); if (array2.Length == 2) { string text2 = array2[0].Trim(); string text3 = array2[1].Trim(); switch (text2) { case "DebugEnabled": bool.TryParse(text3, out DebugEnabled); break; case "InstantLoadScene": InstantLoadScene = text3; break; case "InstantLoadEnabled": bool.TryParse(text3, out InstantLoadEnabled); break; } } } Log($"[QuickScene] InstantLoadEnabled={InstantLoadEnabled}"); Log($"[QuickScene] DebugEnabled={DebugEnabled}"); Log("[QuickScene] InstantLoadScene=" + InstantLoadScene); } catch (Exception arg) { LogError($"[QuickScene] Failed loading config:\n{arg}"); } } public static void LoadSceneOrMap(string sceneName) { Log("[QuickScene] Selected: " + sceneName); try { MapAsset val = null; try { val = ContentDatabase.Instance().GetAllMapAssetsOrdered().FirstOrDefault((Func)((MapAsset m) => (Object)(object)m != (Object)null && m.MapName == sceneName)); } catch (Exception ex) { LogWarning("[QuickScene] Failed to search MapAssets"); Debug.LogException(ex); } if ((Object)(object)val != (Object)null) { GameModeService service = ServiceLocator.GetService(); if ((Object)(object)service != (Object)null) { service.SetGameMode(); } CampaignPlayerDataHolder.StartedPlayingSandbox(); Log("[QuickScene] Loading sandbox map: " + val.MapName); TABSSceneManager.LoadMap(val, true); } else { Log("[QuickScene] Loading normal scene: " + sceneName); TABSSceneManager.LoadScene(sceneName, false); } } catch (Exception ex2) { LogError("[QuickScene] Failed to load:"); Debug.LogException(ex2); } } public static void Log(string message) { if (DebugEnabled) { Debug.Log((object)("[QuickScene] " + message)); } } public static void LogWarning(string message) { if (DebugEnabled) { Debug.LogWarning((object)("[QuickScene] " + message)); } } public static void LogError(string message) { Debug.LogError((object)("[QuickScene] " + message)); } } public class SceneShortcut { public string SceneName; public string DisplayName; } }