Decompiled source of CraniusHunt v1.0.3

BepInEx/plugins/CraniusHunt.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Pigeon.Math;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("CraniusHunt")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.0.0.0")]
[assembly: AssemblyInformationalVersion("0.0.0-alpha.0+cb3a188f4b33985c4c2b86ba703eac60865fde1f")]
[assembly: AssemblyProduct("CraniusHunt")]
[assembly: AssemblyTitle("CraniusHunt")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.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;
		}
	}
}
[BepInPlugin("sparroh.craniushunt", "CraniusHunt", "1.0.3")]
public class CraniusMissionMod : BaseUnityPlugin
{
	public const string PluginGUID = "sparroh.craniushunt";

	public const string PluginName = "CraniusHunt";

	public const string PluginVersion = "1.0.3";

	private void Awake()
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		Harmony val = new Harmony("sparroh.craniushunt");
		val.PatchAll(typeof(MissionSelectWindowInitPatch));
		val.PatchAll(typeof(AmalgamationObjectivePatch));
		val.PatchAll(typeof(MissionSelectWindowPatch));
		((BaseUnityPlugin)this).Logger.LogInfo((object)"CraniusHunt loaded successfully.");
	}
}
public class CraniusMission : AmalgamationMission
{
	public override bool CanShowInMissionSelect(out bool showLocked, out string lockedMessage)
	{
		showLocked = false;
		lockedMessage = null;
		return true;
	}
}
[HarmonyPatch(typeof(MissionSelectWindow), "Awake")]
public class MissionSelectWindowInitPatch
{
	public static CraniusMission craniusMission;

	public static EnemyClass craniusClass;

	[HarmonyPostfix]
	public static void Postfix(MissionSelectWindow __instance)
	{
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		AmalgamationMission val = Resources.FindObjectsOfTypeAll<AmalgamationMission>()[0];
		if ((Object)(object)val == (Object)null)
		{
			return;
		}
		craniusMission = ScriptableObject.CreateInstance<CraniusMission>();
		FieldInfo[] fields = typeof(AmalgamationMission).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		foreach (FieldInfo fieldInfo in fields)
		{
			fieldInfo.SetValue(craniusMission, fieldInfo.GetValue(val));
		}
		FieldInfo field = typeof(Mission).GetField("_missionName", BindingFlags.Instance | BindingFlags.NonPublic);
		if (field != null)
		{
			field.SetValue(craniusMission, "cranius_hunt");
		}
		FieldInfo field2 = typeof(Mission).GetField("_description", BindingFlags.Instance | BindingFlags.NonPublic);
		if (field2 != null)
		{
			field2.SetValue(craniusMission, "Hunt down the secret boss Cranius!");
		}
		((Mission)craniusMission).MissionIcon = ((Mission)val).MissionIcon;
		((Mission)craniusMission).MissionColor = Color.magenta;
		((Mission)craniusMission).ShowInReplayMenu = true;
		((Mission)craniusMission).Selectable = true;
		EnemyClass[] array = Resources.FindObjectsOfTypeAll<EnemyClass>();
		foreach (EnemyClass val2 in array)
		{
			if (val2.customSpawner is ScrapBossSpawner)
			{
				craniusClass = val2;
				break;
			}
		}
		if ((Object)(object)craniusClass == (Object)null)
		{
			return;
		}
		FieldInfo field3 = typeof(Global).GetField("Missions", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
		if (field3 == null)
		{
			return;
		}
		Mission[] array2 = (Mission[])field3.GetValue(Global.Instance);
		bool flag = false;
		Mission[] array3 = array2;
		for (int i = 0; i < array3.Length; i++)
		{
			if (array3[i] is CraniusMission)
			{
				flag = true;
				break;
			}
		}
		if (!flag)
		{
			Mission[] array4 = (Mission[])(object)new Mission[array2.Length + 1];
			Array.Copy(array2, array4, array2.Length);
			array4[array2.Length] = (Mission)(object)craniusMission;
			field3.SetValue(Global.Instance, array4);
		}
		if (PlayerData.Instance != null && PlayerData.Instance.GetFlag("cranius") == 0)
		{
			PlayerData.Instance.SetFlag("cranius", 1);
		}
		if (PlayerData.Instance.GetFlag("cranius") != 1)
		{
			PlayerData.Instance.SetFlag("cranius", 1);
		}
	}
}
[HarmonyPatch(typeof(AmalgamationObjective), "Setup")]
public class AmalgamationObjectivePatch
{
	[HarmonyPostfix]
	public static void Postfix(AmalgamationObjective __instance)
	{
		if (MissionManager.Instance.Mission is CraniusMission)
		{
			FieldInfo field = typeof(AmalgamationObjective).GetField("amalgamationClass", BindingFlags.Instance | BindingFlags.NonPublic);
			if (field != null)
			{
				field.SetValue(__instance, MissionSelectWindowInitPatch.craniusClass);
			}
		}
	}
}
[HarmonyPatch(typeof(MissionSelectWindow), "ToggleReplayWindow")]
public class MissionSelectWindowPatch
{
	[HarmonyPostfix]
	public static void Postfix(MissionSelectWindow __instance)
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Expected O, but got Unknown
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Expected O, but got Unknown
		//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0204: Unknown result type (might be due to invalid IL or missing references)
		//IL_021a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: Unknown result type (might be due to invalid IL or missing references)
		//IL_0230: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)MissionSelectWindowInitPatch.craniusMission == (Object)null)
		{
			return;
		}
		FieldInfo field = typeof(MissionSelectWindow).GetField("replayMissionContainer", BindingFlags.Instance | BindingFlags.NonPublic);
		if (field == null)
		{
			return;
		}
		RectTransform val = (RectTransform)field.GetValue(__instance);
		if ((Object)(object)val == (Object)null)
		{
			return;
		}
		List<MissionSelectButton> list = new List<MissionSelectButton>();
		for (int i = 0; i < ((Transform)val).childCount; i++)
		{
			MissionSelectButton component = ((Component)((Transform)val).GetChild(i)).GetComponent<MissionSelectButton>();
			if ((Object)(object)component != (Object)null && (Object)(object)((MissionData)(ref component.Mission)).Mission == (Object)(object)MissionSelectWindowInitPatch.craniusMission)
			{
				list.Add(component);
			}
		}
		if (list.Count > 1)
		{
			for (int j = 1; j < list.Count; j++)
			{
				Object.Destroy((Object)(object)((Component)list[j]).gameObject);
			}
		}
		if (list.Count > 0)
		{
			return;
		}
		FieldInfo field2 = typeof(MissionSelectWindow).GetField("missionButtonPrefab", BindingFlags.Instance | BindingFlags.NonPublic);
		if (field2 == null)
		{
			return;
		}
		MissionSelectButton val2 = (MissionSelectButton)field2.GetValue(__instance);
		if (!((Object)(object)val2 == (Object)null))
		{
			MissionSelectButton obj = Object.Instantiate<MissionSelectButton>(val2, (Transform)(object)val);
			((Component)obj).gameObject.SetActive(true);
			Random val3 = default(Random);
			((Random)(ref val3))..ctor(Global.MissionSelectSeed + (((Mission)MissionSelectWindowInitPatch.craniusMission).ID.GetHashCode() + 3173) * 5390921);
			WorldRegion val4 = ((Mission)MissionSelectWindowInitPatch.craniusMission).OverrideRegion() ?? Global.Instance.Regions[((Random)(ref val3)).Next(Global.Instance.Regions.Length)];
			string text = default(string);
			string text2 = (((Mission)MissionSelectWindowInitPatch.craniusMission).OverrideScene(ref text) ? text : val4.SceneNames[((Random)(ref val3)).Next(val4.SceneNames.Length)]);
			obj.Setup(new MissionData(((Random)(ref val3)).Next(), (Mission)(object)MissionSelectWindowInitPatch.craniusMission, val4, text2, (MissionContainer)null), __instance, true, false);
			RectTransform component2 = ((Component)obj).GetComponent<RectTransform>();
			if ((Object)(object)component2 != (Object)null)
			{
				component2.anchorMin = new Vector2(0.5f, 0.5f);
				component2.anchorMax = new Vector2(0.5f, 0.5f);
				component2.anchoredPosition = Vector2.zero;
				component2.sizeDelta = new Vector2(100f, 100f);
				((Transform)component2).localScale = Vector3.one * 1.5f;
			}
		}
	}
}
[CompilerGenerated]
[ExcludeFromCodeCoverage]
internal static class GitVersionInformation
{
	public const string AssemblySemFileVer = "0.0.1.0";

	public const string AssemblySemVer = "0.0.1.0";

	public const string BranchName = "master";

	public const string BuildMetaData = "";

	public const string CommitDate = "2025-10-17";

	public const string CommitsSinceVersionSource = "1";

	public const string EscapedBranchName = "master";

	public const string FullBuildMetaData = "Branch.master.Sha.cb3a188f4b33985c4c2b86ba703eac60865fde1f";

	public const string FullSemVer = "0.0.1-1";

	public const string InformationalVersion = "0.0.1-1+Branch.master.Sha.cb3a188f4b33985c4c2b86ba703eac60865fde1f";

	public const string Major = "0";

	public const string MajorMinorPatch = "0.0.1";

	public const string Minor = "0";

	public const string Patch = "1";

	public const string PreReleaseLabel = "";

	public const string PreReleaseLabelWithDash = "";

	public const string PreReleaseNumber = "1";

	public const string PreReleaseTag = "1";

	public const string PreReleaseTagWithDash = "-1";

	public const string SemVer = "0.0.1-1";

	public const string Sha = "cb3a188f4b33985c4c2b86ba703eac60865fde1f";

	public const string ShortSha = "cb3a188";

	public const string UncommittedChanges = "12";

	public const string VersionSourceSha = "";

	public const string WeightedPreReleaseNumber = "55001";
}
namespace CraniusHunt
{
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "CraniusHunt";

		public const string PLUGIN_NAME = "CraniusHunt";

		public const string PLUGIN_VERSION = "0.0.0";
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}