Decompiled source of UltraSkulls v1.0.0

UltraSkulls.dll

Decompiled 6 hours ago
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using Configgy;
using HarmonyLib;
using SkullProject;
using SkullProject.Patches;
using TestOnStuff.Patches;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("TestOnStuff")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TestOnStuff")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9888883e-e4b7-4bd7-88cf-f7b3ee196fd7")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace TestOnStuff.Patches
{
	[HarmonyPatch(typeof(Punch))]
	internal class TorchPatchFun
	{
		[HarmonyPatch("PunchStart")]
		[HarmonyPrefix]
		private static void FullBrightTorchF(Punch __instance)
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Invalid comparison between Unknown and I4
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: 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_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: 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_0278: Invalid comparison between Unknown and I4
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_030e: Unknown result type (might be due to invalid IL or missing references)
			//IL_033d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Expected O, but got Unknown
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fd: Invalid comparison between Unknown and I4
			if (!SkullBase.Enabled || !SkullBase.ToggledT || !Object.FindObjectOfType<Punch>().holding)
			{
				return;
			}
			ItemIdentifier heldItem = __instance.heldItem;
			if ((int)heldItem.itemType != 5)
			{
				return;
			}
			float num = SkullBase.minDistanceOnPunch;
			EnemyIdentifier[] array = Object.FindObjectsOfType<EnemyIdentifier>();
			List<EnemyIdentifier> list = new List<EnemyIdentifier>();
			EnemyIdentifier[] array2 = array;
			foreach (EnemyIdentifier val in array2)
			{
				if (!val.dead && !val.Blessed && (Object)(object)val != (Object)null && !Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
				{
					list.Add(val);
				}
				if (val.dead || val.Blessed || (Object)(object)val == (Object)null || Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
				{
					list.Remove(val);
				}
			}
			for (int j = 0; j < SkullBase.MaxTargets; j++)
			{
				if (!((Object)(object)list[j] != (Object)null))
				{
					continue;
				}
				if (!MonoSingleton<CheatsController>.Instance.cheatsEnabled)
				{
					MonoSingleton<CheatsController>.Instance.ActivateCheats();
				}
				SkullBase.mls.LogInfo((object)("Enemys found Torch: " + list.Count + ", Enemy target: " + (object)((Component)list[j]).gameObject));
				float num2 = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)list[j]).transform.position);
				if (num2 < num && SkullBase.Enabled && SkullBase.ToggledT && SkullBase.RequireNearbyLookingT && !(Vector3.Dot(-((Component)MonoSingleton<NewMovement>.Instance.cc.cam).transform.forward, ((Component)list[j]).transform.position) <= MonoSingleton<NewMovement>.Instance.cc.cam.fieldOfView))
				{
					continue;
				}
				if ((int)list[j].enemyType == 21)
				{
					list[j].idol = ((Component)list[j]).GetComponent<Idol>();
					list[j].idol.Death();
				}
				num = num2;
				if (SkullBase.ParryOnBoom)
				{
					__instance.Parry(false, (EnemyIdentifier)null, "FUNNY LIGHT");
				}
				if (!SkullBase.Enabled)
				{
					continue;
				}
				int num3 = 0;
				while (num3 < SkullBase.MaxTargets)
				{
					if (!list[j].dead)
					{
						VirtueInsignia component = AddressablesExtensions.ToAsset(Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Virtue.prefab").WaitForCompletion().GetComponent<Drone>()
							.projectile).GetComponent<VirtueInsignia>();
							VirtueInsignia val2 = Object.Instantiate<VirtueInsignia>(component, ((Component)list[j]).transform.position, Quaternion.identity);
							EnemyTarget target = new EnemyTarget(((Component)list[j]).transform);
							val2.target = target;
							val2.damage = SkullBase.BeamDamage;
							val2.charges = SkullBase.BeamAmount;
							val2.explosionLength = SkullBase.BeamTimeLength;
							((Component)val2).transform.localScale = new Vector3(SkullBase.BeamSize, SkullBase.BeamSize, SkullBase.BeamSize);
							val2.predictive = SkullBase.PredictableBeam;
							val2.parentDrone = null;
							val2.hadParent = false;
							val2.otherParent = null;
							val2.noTracking = SkullBase.IsBeamStationary;
							val2.windUpSpeedMultiplier = SkullBase.BeamSpeed;
							if ((int)list[j].enemyType == 9)
							{
								((Component)list[j]).GetComponent<Drone>().Enrage();
								MonoSingleton<StyleHUD>.Instance.AddPoints(30, "UNO REVERSE", ((Component)MonoSingleton<NewMovement>.Instance).gameObject, list[j], -1, "", "");
							}
						}
						j++;
					}
				}
			}
		}
		[HarmonyPatch(typeof(Punch))]
		internal class TorchPatch
		{
			[HarmonyPatch("PunchStart")]
			[HarmonyPostfix]
			private static void FullBrightTorch(Punch __instance)
			{
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_002d: Invalid comparison between Unknown and I4
				//IL_007f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0086: Invalid comparison between Unknown and I4
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_009e: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f4: Invalid comparison between Unknown and I4
				//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
				//IL_0100: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0116: Unknown result type (might be due to invalid IL or missing references)
				//IL_022d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0232: Unknown result type (might be due to invalid IL or missing references)
				//IL_0245: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
				//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
				//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0302: Unknown result type (might be due to invalid IL or missing references)
				//IL_031c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0323: Expected O, but got Unknown
				//IL_0366: Unknown result type (might be due to invalid IL or missing references)
				//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_03bd: Invalid comparison between Unknown and I4
				if (!SkullBase.Enabled || !SkullBase.ToggledT)
				{
					return;
				}
				ItemIdentifier heldItem = __instance.heldItem;
				if ((int)heldItem.itemType != 5)
				{
					return;
				}
				float num = SkullBase.minDistanceOnPunch;
				EnemyIdentifier[] array = Object.FindObjectsOfType<EnemyIdentifier>();
				List<EnemyIdentifier> list = new List<EnemyIdentifier>();
				EnemyIdentifier[] array2 = array;
				foreach (EnemyIdentifier val in array2)
				{
					if (!val.dead && !val.Blessed && (Object)(object)val != (Object)null && (int)val.enemyType != 21 && !Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
					{
						list.Add(val);
					}
					if (val.dead || val.Blessed || (Object)(object)val == (Object)null || (int)val.enemyType == 21 || Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
					{
						list.Remove(val);
					}
				}
				for (int j = 0; j < SkullBase.MaxTargets; j++)
				{
					if (!((Object)(object)list[j] != (Object)null))
					{
						continue;
					}
					if (!MonoSingleton<CheatsController>.Instance.cheatsEnabled)
					{
						MonoSingleton<CheatsController>.Instance.ActivateCheats();
					}
					SkullBase.mls.LogInfo((object)("Enemys found Torch: " + list.Count + ", Enemy target: " + (object)((Component)list[j]).gameObject));
					float num2 = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)list[j]).transform.position);
					if (num2 < num && SkullBase.Enabled && SkullBase.ToggledT && SkullBase.RequireNearbyLookingT && !(Vector3.Dot(-((Component)MonoSingleton<NewMovement>.Instance.cc.cam).transform.forward, ((Component)list[j]).transform.position) <= MonoSingleton<NewMovement>.Instance.cc.cam.fieldOfView))
					{
						continue;
					}
					num = num2;
					if (SkullBase.ParryOnBoom)
					{
						__instance.Parry(false, (EnemyIdentifier)null, "FUNNY LIGHT");
					}
					if (!SkullBase.Enabled)
					{
						continue;
					}
					int num3 = 0;
					while (num3 < SkullBase.MaxTargets)
					{
						if (!list[j].dead)
						{
							VirtueInsignia component = AddressablesExtensions.ToAsset(Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Virtue.prefab").WaitForCompletion().GetComponent<Drone>()
								.projectile).GetComponent<VirtueInsignia>();
								VirtueInsignia val2 = Object.Instantiate<VirtueInsignia>(component, ((Component)list[j]).transform.position, Quaternion.identity);
								EnemyTarget target = new EnemyTarget(((Component)list[j]).transform);
								val2.target = target;
								val2.damage = SkullBase.BeamDamage;
								val2.charges = SkullBase.BeamAmount;
								val2.explosionLength = SkullBase.BeamTimeLength;
								((Component)val2).transform.localScale = new Vector3(SkullBase.BeamSize, SkullBase.BeamSize, SkullBase.BeamSize);
								val2.predictive = SkullBase.PredictableBeam;
								val2.parentDrone = null;
								val2.hadParent = false;
								val2.otherParent = null;
								val2.noTracking = SkullBase.IsBeamStationary;
								val2.windUpSpeedMultiplier = SkullBase.BeamSpeed;
								if ((int)list[j].enemyType == 9)
								{
									((Component)list[j]).GetComponent<Drone>().Enrage();
									MonoSingleton<StyleHUD>.Instance.AddPoints(30, "UNO REVERSE", ((Component)MonoSingleton<NewMovement>.Instance).gameObject, list[j], -1, "", "");
								}
							}
							j++;
						}
					}
				}
			}
		}
		namespace SkullProject
		{
			public enum ProjStyle
			{
				Default,
				Homing,
				Explosive
			}
			[BepInPlugin("D1g1tal.UltraSkulls", "UltraSkulls", "1.0.0")]
			public class SkullBase : BaseUnityPlugin
			{
				private ConfigBuilder config;

				public const string modGUID = "D1g1tal.UltraSkulls";

				public const string modName = "UltraSkulls";

				public const string modVer = "1.0.0";

				private readonly Harmony harmony = new Harmony("D1g1tal.UltraSkulls");

				public static SkullBase Instance;

				public static ManualLogSource mls;

				[Configgable("", null, 0, "Look in BepInEx console for a tutorial on how to use the mod, BepInEx console is opened when you start the game")]
				public static bool Enabled = true;

				[Configgable("Red Skull Settings", null, 0, "Makes the explosion a 'Super Explosion'")]
				public static bool SuperBoom = false;

				[Configgable("Red Skull Settings", null, 0, "Both explosions all in one")]
				public static bool UltraBoom = false;

				[Configgable("Red Skull Settings", null, 0, null)]
				public static float ScaleOfBoom = 5f;

				[Configgable("Red Skull Settings", null, 0, null)]
				public static int BoomDamage = 45;

				[Configgable("Red Skull Settings", null, 0, null)]
				public static float BoomSpeed = 15f;

				[Configgable("Red Skull Settings", null, 0, "Sets the amount of force from the explosion amount equal to an ultraboost")]
				public static bool IsBoomUltrabooster = false;

				[Configgable("Red Skull Settings", null, 0, null)]
				public static bool CanBoomIgniteTargets = false;

				[Configgable("Misc", null, 0, "Adds a custom style text and auto parrys on punch")]
				public static bool ParryOnBoom = true;

				[Configgable("Misc", "Minimum skull target distance", 0, "The minimum distance the skull can detect enemys from.")]
				public static float minDistanceOnPunch = 30f;

				[Configgable("Misc", null, 0, "Sets the amount of enemys the skull can detect at once.")]
				public static int MaxTargets = 7;

				[Configgable("Blue Skull Settings", null, 0, "Makes the projectile explode, I recommend using a projectile size of 1 with this on")]
				public static bool ProjectileExplode = false;

				[Configgable("Blue Skull Settings", null, 0, "Makes the projectile strong?")]
				public static bool StrongProjectile = false;

				[Configgable("Blue Skull Settings", null, 0, "The turn speed of the projectile")]
				public static float ProjectileTurnSpeed = 2.5f;

				[Configgable("Blue Skull Settings", null, 0, null)]
				public static bool ProjectileIgnoreExplosions = false;

				[Configgable("Blue Skull Settings", null, 0, "Changes how the projectile looks like")]
				public static ProjStyle ProjectileStyle = ProjStyle.Homing;

				[Configgable("Blue Skull Settings", null, 0, "The more higher the value is, the more the projectile will attempt to predict the target")]
				public static float ProjectileHomingPredictionMultiplier = 1f;

				[Configgable("Blue Skull Settings", null, 0, "Requires 'Proj Explode' to be toggled on")]
				public static bool ProjectileBigExplosion = false;

				[Configgable("Blue Skull Settings", null, 0, null)]
				public static HomingType ProjectileHomingType = (HomingType)1;

				[Configgable("Blue Skull Settings", null, 0, null)]
				public static float ProjectileDamage = 25f;

				[Configgable("Blue Skull Settings", null, 0, null)]
				[Range(50f, 1000f)]
				public static float ProjectileSpeed = 100f;

				[Configgable("Blue Skull Settings", null, 0, "1 = normal size")]
				public static float ProjectileSize = 1f;

				[Configgable("Torch Settings", null, 0, null)]
				public static int BeamDamage = 21;

				[Configgable("Torch Settings", null, 0, null)]
				public static bool PredictableBeam = false;

				[Configgable("Torch Settings", null, 0, "The amount of times the beam can attack at once on an enemy.")]
				public static int BeamAmount = 1;

				[Configgable("Torch Settings", null, 0, null)]
				public static float BeamSize = 1.75f;

				[Configgable("Torch Settings", null, 0, null)]
				public static bool IsBeamStationary = false;

				[Configgable("Torch Settings", null, 0, "The time it takes for the beam to fade away")]
				public static float BeamTimeLength = 1f;

				[Configgable("Torch Settings", null, 0, "The higher the speed the faster it takes to explode")]
				public static float BeamSpeed = 2.75f;

				[Configgable("Torch Settings", "Require looking nearby the enemy to target", 0, "Makes it so you have to look near the targets for it to work")]
				public static bool RequireNearbyLookingT = false;

				[Configgable("Blue Skull Settings", "Require looking nearby the enemy to target", 0, "Makes it so you have to look near the targets for it to work")]
				public static bool RequireNearbyLookingB = false;

				[Configgable("Red Skull Settings", "Require looking nearby the enemy to target", 0, "Makes it so you have to look near the targets for it to work")]
				public static bool RequireNearbyLookingR = false;

				[Configgable("Torch Settings", "Toggle changes", 0, "Toggle skull/item change")]
				public static bool ToggledT = true;

				[Configgable("Blue Skull Settings", "Toggle changes", 0, "Toggle skull/item change")]
				public static bool ToggledB = true;

				[Configgable("Red Skull Settings", "Toggle changes", 0, "Toggle skull/item change")]
				public static bool ToggledR = true;

				[Configgable("Misc", "Fun mode :)", 0, "It's pretty fun I must say (Restart to apply change)")]
				public static bool FunMode = false;

				private void Awake()
				{
					//IL_003c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0046: Expected O, but got Unknown
					if (!Enabled)
					{
						((Behaviour)this).enabled = false;
						return;
					}
					FunMode = PlayerPrefs.GetInt("Fun") == 1;
					config = new ConfigBuilder("D1g1tal.UltraSkulls", "UltraSkulls");
					config.BuildAll();
					if ((Object)(object)Instance == (Object)null)
					{
						Instance = this;
					}
					mls = Logger.CreateLogSource("UltraSkulls");
					mls.LogInfo((object)"UltraSkulls plugin has loaded. Patching skulls");
					harmony.PatchAll(typeof(SkullBase));
				}

				public void Start()
				{
					if (FunMode)
					{
						harmony.PatchAll(typeof(RedSkullPatchFun));
						harmony.PatchAll(typeof(BlueSkullPatchFun));
						harmony.PatchAll(typeof(TorchPatchFun));
					}
					else
					{
						harmony.PatchAll(typeof(RedSkullPatch));
						harmony.PatchAll(typeof(BlueSkullPatch));
						harmony.PatchAll(typeof(TorchPatch));
					}
				}

				private void Update()
				{
					PlayerPrefs.SetInt("Fun", FunMode ? 1 : 0);
				}
			}
		}
		namespace SkullProject.Patches
		{
			[HarmonyPatch(typeof(Punch))]
			internal class BlueSkullPatchFun
			{
				[HarmonyPatch("PunchStart")]
				[HarmonyPrefix]
				private static void ProjBluePatchF(Punch __instance)
				{
					//IL_0031: Unknown result type (might be due to invalid IL or missing references)
					//IL_0037: Invalid comparison between Unknown and I4
					//IL_0167: Unknown result type (might be due to invalid IL or missing references)
					//IL_016c: Unknown result type (might be due to invalid IL or missing references)
					//IL_018d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0192: Unknown result type (might be due to invalid IL or missing references)
					//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
					//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
					//IL_0090: Unknown result type (might be due to invalid IL or missing references)
					//IL_009c: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
					//IL_0109: Unknown result type (might be due to invalid IL or missing references)
					//IL_0264: Unknown result type (might be due to invalid IL or missing references)
					//IL_0277: Unknown result type (might be due to invalid IL or missing references)
					//IL_0302: Unknown result type (might be due to invalid IL or missing references)
					//IL_0309: Invalid comparison between Unknown and I4
					//IL_034e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0361: Unknown result type (might be due to invalid IL or missing references)
					//IL_0370: Unknown result type (might be due to invalid IL or missing references)
					//IL_0375: Unknown result type (might be due to invalid IL or missing references)
					//IL_037f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0384: Unknown result type (might be due to invalid IL or missing references)
					//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
					//IL_03aa: Expected O, but got Unknown
					//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
					//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
					//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
					//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
					//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
					//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
					//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
					//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
					if (!SkullBase.Enabled || !SkullBase.ToggledB || !Object.FindObjectOfType<Punch>().holding)
					{
						return;
					}
					ItemIdentifier heldItem = __instance.heldItem;
					if ((int)heldItem.itemType != 1)
					{
						return;
					}
					float num = SkullBase.minDistanceOnPunch;
					EnemyIdentifier[] array = Object.FindObjectsOfType<EnemyIdentifier>();
					List<EnemyIdentifier> list = new List<EnemyIdentifier>();
					EnemyIdentifier[] array2 = array;
					foreach (EnemyIdentifier val in array2)
					{
						if (!val.dead && !val.Blessed && (Object)(object)val != (Object)null && !Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Add(val);
						}
						if (val.dead || val.Blessed || (Object)(object)val == (Object)null || Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Remove(val);
						}
					}
					Projectile val2 = null;
					switch (SkullBase.ProjectileStyle)
					{
					case ProjStyle.Default:
						val2 = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Projectile Zombie.prefab").WaitForCompletion().GetComponent<ZombieProjectiles>()
							.projectile.GetComponent<Projectile>();
						break;
					case ProjStyle.Homing:
						val2 = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Mindflayer.prefab").WaitForCompletion().GetComponent<Mindflayer>()
							.homingProjectile.GetComponent<Projectile>();
						break;
					case ProjStyle.Explosive:
						val2 = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Mass.prefab").WaitForCompletion().GetComponent<Mass>()
							.explosiveProjectile.GetComponent<Projectile>();
						break;
					}
					for (int j = 0; j < SkullBase.MaxTargets; j++)
					{
						if (!((Object)(object)list[j] != (Object)null))
						{
							continue;
						}
						if (!MonoSingleton<CheatsController>.Instance.cheatsEnabled)
						{
							MonoSingleton<CheatsController>.Instance.ActivateCheats();
						}
						SkullBase.mls.LogInfo((object)("Enemys found Blue: " + list.Count + ", Enemy target: " + (object)((Component)list[j]).gameObject));
						float num2 = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)list[j]).transform.position);
						if (!(num2 < num) || !SkullBase.Enabled || !SkullBase.ToggledB || !SkullBase.RequireNearbyLookingB || Vector3.Dot(-((Component)MonoSingleton<NewMovement>.Instance.cc.cam).transform.forward, ((Component)list[j]).transform.position) <= MonoSingleton<NewMovement>.Instance.cc.cam.fieldOfView)
						{
							if ((int)list[j].enemyType == 21)
							{
								list[j].idol = ((Component)list[j]).GetComponent<Idol>();
								list[j].idol.Death();
							}
							num = num2;
							Projectile val3 = Object.Instantiate<Projectile>(val2, ((Component)heldItem).transform.position, Quaternion.LookRotation((((Component)list[j]).transform.position - ((Component)MonoSingleton<NewMovement>.Instance).transform.position) * SkullBase.ProjectileSize));
							val3.target = new EnemyTarget(((Component)list[j]).transform);
							val3.playerBullet = true;
							val3.safeEnemyType = (EnemyType)0;
							val3.homingType = SkullBase.ProjectileHomingType;
							val3.ignoreExplosions = SkullBase.ProjectileIgnoreExplosions;
							val3.speed = SkullBase.ProjectileSpeed;
							((Component)val3).transform.localScale = new Vector3(SkullBase.ProjectileSize, SkullBase.ProjectileSize, SkullBase.ProjectileSize);
							val3.unparryable = true;
							val3.sourceWeapon = ((Component)MonoSingleton<NewMovement>.Instance).gameObject;
							val3.explosive = SkullBase.ProjectileExplode;
							val3.friendly = true;
							val3.predictiveHomingMultiplier = SkullBase.ProjectileHomingPredictionMultiplier;
							val3.bigExplosion = SkullBase.ProjectileBigExplosion;
							if (SkullBase.ProjectileExplode)
							{
								val3.explosionEffect = ((!SkullBase.ProjectileBigExplosion) ? MonoSingleton<DefaultReferenceManager>.Instance.explosion : ((SkullBase.ProjectileStyle == ProjStyle.Homing) ? AddressablesExtensions.ToAsset(Resources.FindObjectsOfTypeAll<Mindflayer>()[0].deathExplosion).gameObject : MonoSingleton<DefaultReferenceManager>.Instance.superExplosion));
							}
							Explosion component = val3.explosionEffect.GetComponent<Explosion>();
							component.maxSize *= SkullBase.ProjectileSize;
							val3.explosionEffect.GetComponent<Explosion>().canHit = (AffectedSubjects)2;
						}
					}
				}
			}
			[HarmonyPatch(typeof(Punch))]
			internal class BlueSkullPatch
			{
				[HarmonyPatch("PunchStart")]
				[HarmonyPostfix]
				private static void ProjBluePatch(Punch __instance)
				{
					//IL_0025: Unknown result type (might be due to invalid IL or missing references)
					//IL_002b: Invalid comparison between Unknown and I4
					//IL_0171: Unknown result type (might be due to invalid IL or missing references)
					//IL_0176: Unknown result type (might be due to invalid IL or missing references)
					//IL_0197: Unknown result type (might be due to invalid IL or missing references)
					//IL_019c: Unknown result type (might be due to invalid IL or missing references)
					//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
					//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
					//IL_007c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0083: Invalid comparison between Unknown and I4
					//IL_008f: Unknown result type (might be due to invalid IL or missing references)
					//IL_009b: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f1: Invalid comparison between Unknown and I4
					//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
					//IL_0109: Unknown result type (might be due to invalid IL or missing references)
					//IL_0113: Unknown result type (might be due to invalid IL or missing references)
					//IL_026e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0281: Unknown result type (might be due to invalid IL or missing references)
					//IL_030e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0321: Unknown result type (might be due to invalid IL or missing references)
					//IL_0330: Unknown result type (might be due to invalid IL or missing references)
					//IL_0335: Unknown result type (might be due to invalid IL or missing references)
					//IL_033f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0344: Unknown result type (might be due to invalid IL or missing references)
					//IL_0360: Unknown result type (might be due to invalid IL or missing references)
					//IL_036a: Expected O, but got Unknown
					//IL_0375: Unknown result type (might be due to invalid IL or missing references)
					//IL_037c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0381: Unknown result type (might be due to invalid IL or missing references)
					//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
					//IL_047f: Unknown result type (might be due to invalid IL or missing references)
					//IL_02be: Unknown result type (might be due to invalid IL or missing references)
					//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
					//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
					if (!SkullBase.Enabled || !SkullBase.ToggledB)
					{
						return;
					}
					ItemIdentifier heldItem = __instance.heldItem;
					if ((int)heldItem.itemType != 1)
					{
						return;
					}
					float num = SkullBase.minDistanceOnPunch;
					EnemyIdentifier[] array = Object.FindObjectsOfType<EnemyIdentifier>();
					List<EnemyIdentifier> list = new List<EnemyIdentifier>();
					EnemyIdentifier[] array2 = array;
					foreach (EnemyIdentifier val in array2)
					{
						if (!val.dead && !val.Blessed && (Object)(object)val != (Object)null && (int)val.enemyType != 21 && !Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Add(val);
						}
						if (val.dead || val.Blessed || (Object)(object)val == (Object)null || (int)val.enemyType == 21 || Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Remove(val);
						}
					}
					Projectile val2 = null;
					switch (SkullBase.ProjectileStyle)
					{
					case ProjStyle.Default:
						val2 = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Projectile Zombie.prefab").WaitForCompletion().GetComponent<ZombieProjectiles>()
							.projectile.GetComponent<Projectile>();
						break;
					case ProjStyle.Homing:
						val2 = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Mindflayer.prefab").WaitForCompletion().GetComponent<Mindflayer>()
							.homingProjectile.GetComponent<Projectile>();
						break;
					case ProjStyle.Explosive:
						val2 = Addressables.LoadAssetAsync<GameObject>((object)"Assets/Prefabs/Enemies/Mass.prefab").WaitForCompletion().GetComponent<Mass>()
							.explosiveProjectile.GetComponent<Projectile>();
						break;
					}
					for (int j = 0; j < SkullBase.MaxTargets; j++)
					{
						if (!((Object)(object)list[j] != (Object)null))
						{
							continue;
						}
						if (!MonoSingleton<CheatsController>.Instance.cheatsEnabled)
						{
							MonoSingleton<CheatsController>.Instance.ActivateCheats();
						}
						SkullBase.mls.LogInfo((object)("Enemys found Blue: " + list.Count + ", Enemy target: " + (object)((Component)list[j]).gameObject));
						float num2 = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)list[j]).transform.position);
						if (!(num2 < num) || !SkullBase.Enabled || !SkullBase.ToggledB || !SkullBase.RequireNearbyLookingB || Vector3.Dot(-((Component)MonoSingleton<NewMovement>.Instance.cc.cam).transform.forward, ((Component)list[j]).transform.position) <= MonoSingleton<NewMovement>.Instance.cc.cam.fieldOfView)
						{
							num = num2;
							Projectile val3 = Object.Instantiate<Projectile>(val2, ((Component)heldItem).transform.position, Quaternion.LookRotation((((Component)list[j]).transform.position - ((Component)MonoSingleton<NewMovement>.Instance).transform.position) * SkullBase.ProjectileSize));
							val3.target = new EnemyTarget(((Component)list[j]).transform);
							val3.playerBullet = true;
							val3.safeEnemyType = (EnemyType)0;
							val3.homingType = SkullBase.ProjectileHomingType;
							val3.ignoreExplosions = SkullBase.ProjectileIgnoreExplosions;
							val3.speed = SkullBase.ProjectileSpeed;
							((Component)val3).transform.localScale = new Vector3(SkullBase.ProjectileSize, SkullBase.ProjectileSize, SkullBase.ProjectileSize);
							val3.unparryable = true;
							val3.sourceWeapon = ((Component)MonoSingleton<NewMovement>.Instance).gameObject;
							val3.explosive = SkullBase.ProjectileExplode;
							val3.friendly = true;
							val3.predictiveHomingMultiplier = SkullBase.ProjectileHomingPredictionMultiplier;
							val3.bigExplosion = SkullBase.ProjectileBigExplosion;
							if (SkullBase.ProjectileExplode)
							{
								val3.explosionEffect = ((!SkullBase.ProjectileBigExplosion) ? MonoSingleton<DefaultReferenceManager>.Instance.explosion : ((SkullBase.ProjectileStyle == ProjStyle.Homing) ? AddressablesExtensions.ToAsset(Resources.FindObjectsOfTypeAll<Mindflayer>()[0].deathExplosion).gameObject : MonoSingleton<DefaultReferenceManager>.Instance.superExplosion));
							}
							Explosion component = val3.explosionEffect.GetComponent<Explosion>();
							component.maxSize *= SkullBase.ProjectileSize;
							val3.explosionEffect.GetComponent<Explosion>().canHit = (AffectedSubjects)2;
						}
					}
				}
			}
			[HarmonyPatch(typeof(Punch))]
			internal class RedSkullPatchFun
			{
				[HarmonyPatch("PunchStart")]
				[HarmonyPrefix]
				private static void ArsonRedPatchF(Punch __instance)
				{
					//IL_0033: Unknown result type (might be due to invalid IL or missing references)
					//IL_0039: Invalid comparison between Unknown and I4
					//IL_0093: Unknown result type (might be due to invalid IL or missing references)
					//IL_009f: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a9: 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_0102: Unknown result type (might be due to invalid IL or missing references)
					//IL_010c: Unknown result type (might be due to invalid IL or missing references)
					//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
					//IL_01e5: 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_0278: Invalid comparison between Unknown and I4
					//IL_0223: Unknown result type (might be due to invalid IL or missing references)
					//IL_0228: Unknown result type (might be due to invalid IL or missing references)
					//IL_023b: Unknown result type (might be due to invalid IL or missing references)
					//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
					//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
					//IL_0423: Unknown result type (might be due to invalid IL or missing references)
					//IL_0323: Unknown result type (might be due to invalid IL or missing references)
					//IL_0328: Unknown result type (might be due to invalid IL or missing references)
					//IL_0391: Unknown result type (might be due to invalid IL or missing references)
					//IL_0450: Unknown result type (might be due to invalid IL or missing references)
					//IL_0455: Unknown result type (might be due to invalid IL or missing references)
					//IL_04be: Unknown result type (might be due to invalid IL or missing references)
					//IL_04db: Unknown result type (might be due to invalid IL or missing references)
					//IL_04e0: Unknown result type (might be due to invalid IL or missing references)
					//IL_0549: Unknown result type (might be due to invalid IL or missing references)
					if (!SkullBase.Enabled || !SkullBase.ToggledR || !Object.FindObjectOfType<Punch>().holding)
					{
						return;
					}
					ItemIdentifier heldItem = __instance.heldItem;
					if ((int)heldItem.itemType != 2)
					{
						return;
					}
					float num = SkullBase.minDistanceOnPunch;
					EnemyIdentifier[] array = Object.FindObjectsOfType<EnemyIdentifier>();
					List<EnemyIdentifier> list = new List<EnemyIdentifier>();
					EnemyIdentifier[] array2 = array;
					foreach (EnemyIdentifier val in array2)
					{
						if (!val.dead && !val.Blessed && (Object)(object)val != (Object)null && !Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Add(val);
						}
						if (val.dead || val.Blessed || (Object)(object)val == (Object)null || Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Remove(val);
						}
					}
					for (int j = 0; j < SkullBase.MaxTargets; j++)
					{
						if (!((Object)(object)list[j] != (Object)null))
						{
							continue;
						}
						if (!MonoSingleton<CheatsController>.Instance.cheatsEnabled)
						{
							MonoSingleton<CheatsController>.Instance.ActivateCheats();
						}
						SkullBase.mls.LogInfo((object)("Enemys found Red: " + list.Count + ", Enemy target: " + (object)((Component)list[j]).gameObject));
						float num2 = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)list[j]).transform.position);
						if (!(num2 < num) || !SkullBase.Enabled || !SkullBase.ToggledR || !SkullBase.RequireNearbyLookingR || Vector3.Dot(-((Component)MonoSingleton<NewMovement>.Instance.cc.cam).transform.forward, ((Component)list[j]).transform.position) <= MonoSingleton<NewMovement>.Instance.cc.cam.fieldOfView)
						{
							if ((int)list[j].enemyType == 21)
							{
								list[j].idol = ((Component)list[j]).GetComponent<Idol>();
								list[j].idol.Death();
							}
							if (SkullBase.MaxTargets >= 10)
							{
								Object.Destroy((Object)(object)((Component)list[j]).gameObject);
							}
							num = num2;
							if (SkullBase.ParryOnBoom)
							{
								__instance.Parry(false, (EnemyIdentifier)null, "RED BOOM");
							}
							if (!SkullBase.SuperBoom)
							{
								GameObject val2 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.explosion, ((Component)list[j]).transform.position, Quaternion.identity);
								val2.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
								val2.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
								val2.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
								val2.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
								val2.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
								val2.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
							}
							else
							{
								GameObject val3 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.superExplosion, ((Component)list[j]).transform.position, Quaternion.identity);
								val3.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
								val3.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
								val3.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
								val3.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
								val3.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
								val3.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
							}
							if (SkullBase.UltraBoom)
							{
								GameObject val4 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.explosion, ((Component)list[j]).transform.position, Quaternion.identity);
								val4.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
								val4.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
								val4.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
								val4.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
								val4.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
								val4.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
								GameObject val5 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.superExplosion, ((Component)list[j]).transform.position, Quaternion.identity);
								val5.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
								val5.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
								val5.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
								val5.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
								val5.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
								val5.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
							}
						}
					}
				}
			}
			[HarmonyPatch(typeof(Punch))]
			internal class RedSkullPatch
			{
				[HarmonyPatch("PunchStart")]
				[HarmonyPostfix]
				private static void ArsonRedPatch(Punch __instance)
				{
					//IL_0027: Unknown result type (might be due to invalid IL or missing references)
					//IL_002d: Invalid comparison between Unknown and I4
					//IL_007f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0086: Invalid comparison between Unknown and I4
					//IL_0092: Unknown result type (might be due to invalid IL or missing references)
					//IL_009e: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
					//IL_00f4: Invalid comparison between Unknown and I4
					//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
					//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
					//IL_0100: Unknown result type (might be due to invalid IL or missing references)
					//IL_010c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0116: Unknown result type (might be due to invalid IL or missing references)
					//IL_022d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0232: Unknown result type (might be due to invalid IL or missing references)
					//IL_0245: Unknown result type (might be due to invalid IL or missing references)
					//IL_0375: Unknown result type (might be due to invalid IL or missing references)
					//IL_037a: Unknown result type (might be due to invalid IL or missing references)
					//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
					//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
					//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
					//IL_0351: Unknown result type (might be due to invalid IL or missing references)
					//IL_0410: Unknown result type (might be due to invalid IL or missing references)
					//IL_0415: Unknown result type (might be due to invalid IL or missing references)
					//IL_047e: Unknown result type (might be due to invalid IL or missing references)
					//IL_049b: Unknown result type (might be due to invalid IL or missing references)
					//IL_04a0: Unknown result type (might be due to invalid IL or missing references)
					//IL_0509: Unknown result type (might be due to invalid IL or missing references)
					if (!SkullBase.Enabled || !SkullBase.ToggledR)
					{
						return;
					}
					ItemIdentifier heldItem = __instance.heldItem;
					if ((int)heldItem.itemType != 2)
					{
						return;
					}
					float num = SkullBase.minDistanceOnPunch;
					EnemyIdentifier[] array = Object.FindObjectsOfType<EnemyIdentifier>();
					List<EnemyIdentifier> list = new List<EnemyIdentifier>();
					EnemyIdentifier[] array2 = array;
					foreach (EnemyIdentifier val in array2)
					{
						if (!val.dead && !val.Blessed && (Object)(object)val != (Object)null && (int)val.enemyType != 21 && !Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Add(val);
						}
						if (val.dead || val.Blessed || (Object)(object)val == (Object)null || (int)val.enemyType == 21 || Physics.Linecast(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)val).transform.position, LayerMask.op_Implicit(MonoSingleton<NewMovement>.Instance.lmask)))
						{
							list.Remove(val);
						}
					}
					for (int j = 0; j < SkullBase.MaxTargets; j++)
					{
						if (!((Object)(object)list[j] != (Object)null))
						{
							continue;
						}
						if (!MonoSingleton<CheatsController>.Instance.cheatsEnabled)
						{
							MonoSingleton<CheatsController>.Instance.ActivateCheats();
						}
						SkullBase.mls.LogInfo((object)("Enemys found Red: " + list.Count + ", Enemy target: " + (object)((Component)list[j]).gameObject));
						float num2 = Vector3.Distance(((Component)MonoSingleton<NewMovement>.Instance).transform.position, ((Component)list[j]).transform.position);
						if (num2 < num && SkullBase.Enabled && SkullBase.ToggledR && SkullBase.RequireNearbyLookingR && !(Vector3.Dot(-((Component)MonoSingleton<NewMovement>.Instance.cc.cam).transform.forward, ((Component)list[j]).transform.position) <= MonoSingleton<NewMovement>.Instance.cc.cam.fieldOfView))
						{
							continue;
						}
						num = num2;
						if (SkullBase.ParryOnBoom)
						{
							__instance.Parry(false, (EnemyIdentifier)null, "RED BOOM");
						}
						if (!SkullBase.SuperBoom)
						{
							if (SkullBase.MaxTargets >= 10)
							{
								Object.Destroy((Object)(object)((Component)list[j]).gameObject);
							}
							GameObject val2 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.explosion, ((Component)list[j]).transform.position, Quaternion.identity);
							val2.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
							val2.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
							val2.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
							val2.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
							val2.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
							val2.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
						}
						else
						{
							GameObject val3 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.superExplosion, ((Component)list[j]).transform.position, Quaternion.identity);
							val3.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
							val3.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
							val3.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
							val3.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
							val3.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
							val3.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
						}
						if (SkullBase.UltraBoom)
						{
							GameObject val4 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.explosion, ((Component)list[j]).transform.position, Quaternion.identity);
							val4.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
							val4.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
							val4.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
							val4.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
							val4.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
							val4.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
							GameObject val5 = Object.Instantiate<GameObject>(MonoSingleton<DefaultReferenceManager>.Instance.superExplosion, ((Component)list[j]).transform.position, Quaternion.identity);
							val5.GetComponentInChildren<Explosion>().damage = SkullBase.BoomDamage;
							val5.GetComponentInChildren<Explosion>().maxSize = SkullBase.ScaleOfBoom;
							val5.GetComponentInChildren<Explosion>().speed = SkullBase.BoomSpeed;
							val5.GetComponentInChildren<Explosion>().ignite = SkullBase.CanBoomIgniteTargets;
							val5.GetComponentInChildren<Explosion>().ultrabooster = SkullBase.IsBoomUltrabooster;
							val5.GetComponentInChildren<Explosion>().canHit = (AffectedSubjects)2;
						}
					}
				}
			}
		}