Please disclose if any significant portion of your mod was created 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 HellfireCaptain v1.2.3
plugins/HellfireCaptain.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace HellfireCaptain; [BepInPlugin("com.marklow.HellfireCaptain", "HellfireCaptain", "1.2.2")] public class HellfireCaptainPlugin : BaseUnityPlugin { private static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static HellfireCaptainPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { HellfireCaptainPlugin instance = Instance; return (instance != null) ? ((BaseUnityPlugin)instance).Logger : null; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HellfireCaptain.marklowhellfirecaptain")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/Captain/matCaptain.mat", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainChestArmor/matCaptainChestArmor.mat", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainCoat/matCaptainCoat.mat", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainGunArm/matCaptainGunArm.mat", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainHat/matCaptainHat.mat", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainHead/matCaptainHead.mat", "Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainUndercoat/matCaptainUndercoat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("MARKLOW_SKIN_HELLFIRE_CAPTAIN_NAME", "Hellfire Captain"); } private static void Nothing(Action<SkinDef> orig, SkinDef self) { } private static void BodyCatalogInit() { MethodInfo method = typeof(SkinDef).GetMethod("Awake", BindingFlags.Instance | BindingFlags.NonPublic); HookEndpointManager.Add((MethodBase)method, (Delegate)new Action<Action<SkinDef>, SkinDef>(Nothing)); AddCaptainBodyHellfireCaptainSkin(); HookEndpointManager.Remove((MethodBase)method, (Delegate)new Action<Action<SkinDef>, SkinDef>(Nothing)); } private static void AddCaptainBodyHellfireCaptainSkin() { //IL_0180: Unknown result type (might be due to invalid IL or missing references) string text = "CaptainBody"; string text2 = "Hellfire Captain"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); ModelLocator component = val.GetComponent<ModelLocator>(); GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = gameObject.GetComponent<ModelSkinController>(); Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\HellfireCaptain\\Icons\\Hellfire CaptainIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "MARKLOW_SKIN_HELLFIRE_CAPTAIN_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { skinController.skins[0] }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skin.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) skin.rendererInfos = (RendererInfo[])(object)new RendererInfo[7] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/Captain/matCaptain.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "Captain") }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainChestArmor/matCaptainChestArmor.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "CaptainChestArmor") }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainCoat/matCaptainCoat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "CaptainCoat") }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainGunArm/matCaptainGunArm.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "CaptainGunArm") }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainHat/matCaptainHat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "CaptainHat") }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainHead/matCaptainHead.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "CaptainHead") }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Resources/PrestigiousSkinpack/Hellfire Captain/CaptainUndercoat/matCaptainUndercoat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = renderers.First((Renderer r) => ((Object)r).name == "CaptainUndercoat") } }; }); TryCatchThrow("Mesh Replacements", delegate { skin.meshReplacements = Array.Empty<MeshReplacement>(); }); TryCatchThrow("Minion Skin Replacements", delegate { skin.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skin.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; BodyCatalog.skins[BodyCatalog.FindBodyIndex(val)] = skinController.skins; } catch (Exception ex) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new Exception(message, innerException); } } }