Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Skyrim Loading Screens v1.1.0
BepInEx/plugins/CustomLoadingScreens.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+84ecdf67601019596bca6ee59e7c1b3bb50936f4")] [assembly: AssemblyVersion("1.0.0.0")] namespace CustomLoadingScreens; [BepInPlugin("aedenthorn.CustomLoadingScreens", "Custom Loading Screens", "0.7.0")] public class BepInExPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(FejdStartup), "LoadMainScene")] public static class LoadMainScene_Patch { public static void Prefix(FejdStartup __instance) { //IL_00fa: Unknown result type (might be due to invalid IL or missing references) Dbgl("loading main scene"); Dbgl("getting new random images"); loadingSprite = GetRandomLoadingScreen(); if (differentSpawnScreen.Value) { loadingSprite2 = GetRandomLoadingScreen(); } Dbgl("getting new random tips"); if (loadingTips.Any()) { loadingTip = loadingTips[Random.Range(0, loadingTips.Length)]; if (differentSpawnTip.Value) { loadingTip2 = loadingTips[Random.Range(0, loadingTips.Length)]; } } Image val = Object.Instantiate<Image>(((Component)__instance.m_loading.transform.Find("Bkg")).GetComponent<Image>(), __instance.m_loading.transform); if ((Object)(object)val == (Object)null) { Dbgl("missed bkg"); return; } Dbgl("setting sprite to loading screen"); val.sprite = loadingSprite; ((Graphic)val).color = loadingColorMask.Value; val.type = (Type)0; val.preserveAspect = true; } } [HarmonyPriority(800)] [HarmonyPatch(typeof(ZNet), "RPC_ClientHandshake")] public static class ZNet_RPC_ClientHandshake_Patch { public static bool Prefix(ZNet __instance, ZRpc rpc, bool needPassword) { //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) Dbgl("RPC_ClientHandshake"); if (!__instance.IsServer()) { Image val = Object.Instantiate<Image>(((Component)((Component)Hud.instance).transform.Find("LoadingBlack").Find("Bkg")).GetComponent<Image>(), ((Component)((Component)Hud.instance).transform.Find("LoadingBlack")).transform); if ((Object)(object)val == (Object)null) { Dbgl("missed bkg"); return true; } Dbgl("setting sprite to loading screen"); val.sprite = loadingSprite; ((Graphic)val).color = loadingColorMask.Value; val.type = (Type)0; val.preserveAspect = true; if (loadingTips.Any()) { Object.Instantiate<Transform>(Hud.instance.m_loadingTip.transform.parent.Find("panel_separator"), ((Component)((Component)Hud.instance).transform.Find("LoadingBlack")).transform); TMP_Text component = Object.Instantiate<GameObject>(((Component)Hud.instance.m_loadingTip).gameObject, ((Component)((Component)Hud.instance).transform.Find("LoadingBlack")).transform).GetComponent<TMP_Text>(); if ((Object)(object)component != (Object)null) { component.text = loadingTip; ((Graphic)component).color = tipTextColor.Value; } } } return true; } } [HarmonyPatch(typeof(Hud), "UpdateBlackScreen")] public static class UpdateBlackScreen_Patch { public static void Prefix(Hud __instance, bool ___m_haveSetupLoadScreen, ref bool __state) { __state = !___m_haveSetupLoadScreen; } public static void Postfix(Hud __instance, bool ___m_haveSetupLoadScreen, ref bool __state) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) if (__state && ___m_haveSetupLoadScreen) { Dbgl("setting sprite to loading screen"); __instance.m_loadingImage.sprite = (differentSpawnScreen.Value ? loadingSprite2 : loadingSprite); ((Graphic)__instance.m_loadingImage).color = spawnColorMask.Value; if (loadingTips.Any()) { __instance.m_loadingTip.text = (differentSpawnTip.Value ? loadingTip2 : loadingTip); } ((Graphic)__instance.m_loadingTip).color = tipTextColor.Value; if (removeVignette.Value) { ((Component)__instance.m_loadingProgress.transform.Find("TopFade")).gameObject.SetActive(false); ((Component)__instance.m_loadingProgress.transform.Find("BottomFade")).gameObject.SetActive(false); ((Component)__instance.m_loadingProgress.transform.Find("text_darken")).gameObject.SetActive(false); } } } } [HarmonyPatch(typeof(Terminal), "InputText")] private static class InputText_Patch { private static bool Prefix(Terminal __instance) { if (!modEnabled.Value) { return true; } string text = ((TMP_InputField)__instance.m_input).text; if (text.ToLower().Equals(typeof(BepInExPlugin).Namespace.ToLower() + " reset")) { ((BaseUnityPlugin)context).Config.Reload(); ((BaseUnityPlugin)context).Config.Save(); __instance.AddString(text); __instance.AddString(((BaseUnityPlugin)context).Info.Metadata.Name + " config reloaded"); return false; } return true; } } private static readonly bool isDebug = true; private static BepInExPlugin context; public static ConfigEntry<bool> modEnabled; public static ConfigEntry<int> nexusID; public static ConfigEntry<string> loadingText; public static ConfigEntry<bool> differentSpawnScreen; public static ConfigEntry<bool> differentSpawnTip; public static ConfigEntry<bool> showTipsOnLoadingScreen; public static ConfigEntry<bool> removeVignette; public static ConfigEntry<Color> spawnColorMask; public static ConfigEntry<Color> loadingColorMask; public static ConfigEntry<Color> loadingTextColor; public static ConfigEntry<Color> tipTextColor; public static List<string> loadingScreens = new List<string>(); public static Dictionary<string, string> loadingScreens2 = new Dictionary<string, string>(); public static Dictionary<string, DateTime> fileWriteTimes = new Dictionary<string, DateTime>(); public static List<string> screensToLoad = new List<string>(); public static string[] loadingTips = new string[0]; public static Dictionary<string, Texture2D> cachedScreens = new Dictionary<string, Texture2D>(); private static Sprite loadingSprite; private static Sprite loadingSprite2; private static string loadingTip; private static string loadingTip2; public static void Dbgl(string str = "", bool pref = true) { if (isDebug) { Debug.Log((object)((pref ? (typeof(BepInExPlugin).Namespace + " ") : "") + str)); } } private void Awake() { //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) context = this; modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Enable this mod"); differentSpawnScreen = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DifferentSpawnScreen", true, "Use a different screen for the spawn part"); differentSpawnTip = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DifferentSpawnTip", true, "Use a different tip for the spawn part"); spawnColorMask = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "SpawnColorMask", new Color(0.532f, 0.588f, 0.853f, 1f), "Change the color mask of the spawn screen (set last number to 0 to disable)"); loadingColorMask = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "LoadingColorMask", Color.white, "Change the color mask of the initial loading screen (set to white to disable)"); removeVignette = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "RemoveMask", true, "Remove dark edges for the spawn part"); nexusID = ((BaseUnityPlugin)this).Config.Bind<int>("General", "NexusID", 0, "Nexus mod ID for updates"); loadingText = ((BaseUnityPlugin)this).Config.Bind<string>("General", "LoadingText", "Loading...", "Custom Loading... text"); loadingTextColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "LoadingTextColor", new Color(1f, 0.641f, 0f, 1f), "Custom Loading... text color"); tipTextColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "TipTextColor", Color.white, "Custom tip text color"); if (modEnabled.Value) { LoadCustomLoadingScreens(); LoadTips(); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } } private void LoadTips() { string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "CustomLoadingScreens", "tips.txt"); if (!File.Exists(path)) { Dbgl("No tips, creating empty file"); File.Create(path); } else { loadingTips = File.ReadAllLines(path); } } private static void LoadCustomLoadingScreens() { loadingScreens.Clear(); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "CustomLoadingScreens"); if (!Directory.Exists(text)) { Dbgl("Directory " + text + " does not exist! Creating."); Directory.CreateDirectory(text); return; } string[] files = Directory.GetFiles(text, "*.png", SearchOption.AllDirectories); foreach (string item in files) { loadingScreens.Add(item); } Dbgl($"Directory {text} got {loadingScreens.Count} screens."); } private static Sprite GetRandomLoadingScreen() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) if (!loadingScreens.Any()) { return null; } Texture2D val = new Texture2D(2, 2); byte[] array = File.ReadAllBytes(loadingScreens[Random.Range(0, loadingScreens.Count)]); ImageConversion.LoadImage(val, array); return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero, 1f); } }