Decompiled source of FathomlessVoidling v1.0.4

plugins/FathomlessVoidling/FathomlessVoidling.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.VoidBarnacle.Weapon;
using EntityStates.VoidRaidCrab;
using EntityStates.VoidRaidCrab.Joint;
using EntityStates.VoidRaidCrab.Weapon;
using FathomlessVoidling.Components;
using FathomlessVoidling.Controllers;
using FathomlessVoidling.EntityStates;
using FathomlessVoidling.EntityStates.Barnacle;
using FathomlessVoidling.EntityStates.Haunt;
using FathomlessVoidling.EntityStates.Primary;
using FathomlessVoidling.EntityStates.Secondary;
using FathomlessVoidling.EntityStates.Special;
using FathomlessVoidling.EntityStates.Utility;
using FathomlessVoidling.Hooks;
using HG.Reflection;
using Microsoft.CodeAnalysis;
using On.EntityStates.VoidBarnacle.Weapon;
using On.EntityStates.VoidRaidCrab;
using On.RoR2;
using On.RoR2.Projectile;
using On.RoR2.VoidRaidCrab;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.EntityLogic;
using RoR2.Mecanim;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.VoidRaidCrab;
using RoR2BepInExPack.GameAssetPaths.Version_1_39_0;
using RoR2BepInExPack.GameAssetPathsBetter;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Playables;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.SceneManagement;
using UnityEngine.Timeline;

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: NetworkCompatibility(/*Could not decode attribute arguments.*/)]
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyInformationalVersion("1.0.0+976fb69a4bdac2588feee650ab28455c04604175")]
[assembly: AssemblyProduct("FathomlessVoidling")]
[assembly: AssemblyTitle("FathomlessVoidling")]
[assembly: AssemblyCompany("FathomlessVoidling")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace FathomlessVoidling
{
	internal static class Log
	{
		internal static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		private static string getLogPrefix(string callerPath, string callerMemberName, int callerLineNumber)
		{
			int num = callerPath.LastIndexOf("FathomlessVoidling");
			if (num >= 0)
			{
				callerPath = callerPath.Substring(num + "FathomlessVoidling".Length + 1);
			}
			return $"{callerPath}:{callerLineNumber} ({callerMemberName}) ";
		}

		internal static void Error(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogError((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Error_NoCallerPrefix(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogFatal((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Fatal_NoCallerPrefix(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogInfo((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Info_NoCallerPrefix(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void Message(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogMessage((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Message_NoCallerPrefix(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogWarning((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Warning_NoCallerPrefix(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Nuxlar.FathomlessVoidling", "FathomlessVoidling", "1.0.4")]
	public class Main : BaseUnityPlugin
	{
		public const string PluginGUID = "Nuxlar.FathomlessVoidling";

		public const string PluginAuthor = "Nuxlar";

		public const string PluginName = "FathomlessVoidling";

		public const string PluginVersion = "1.0.4";

		public static ModdedDamageType gravityDamageType = DamageAPI.ReserveDamageType();

		public static GameObject spawnEffect;

		public static CharacterSpawnCard jointCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)RoR2_DLC1_VoidRaidCrab.cscVoidRaidCrabJoint_asset).WaitForCompletion();

		public static SpawnCard bigVoidlingCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)RoR2_DLC1_VoidRaidCrab.cscVoidRaidCrab_asset).WaitForCompletion();

		public static TimelineAsset introTimeline = Addressables.LoadAssetAsync<TimelineAsset>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabIntroTimeiline_playable).WaitForCompletion();

		public static GameObject chargeVoidRain;

		public static GameObject voidRainTracer = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.TracerVoidRaidCrabTripleBeamSmall_prefab).WaitForCompletion();

		public static GameObject voidRainExplosion = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabTripleBeamExplosion_prefab).WaitForCompletion();

		public static GameObject voidRainWarning = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.MultiBeamRayIndicator_prefab).WaitForCompletion();

		public static GameObject voidRainPortalEffect;

		public static GameObject eyeMissileProjectile;

		public static GameObject eyeBlastChargeEffect;

		public static GameObject eyeBlastMuzzleFlash;

		public static GameObject raidTeleportEffect;

		public static LoopSoundDef lsdVoidMegaCrabDeathBomb = Addressables.LoadAssetAsync<LoopSoundDef>((object)RoR2_DLC1_VoidMegaCrab.lsdVoidMegaCrabDeathBomb_asset).WaitForCompletion();

		public static GameObject chargeWardWipeChargeEffect = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabWardWipeChargeup_prefab).WaitForCompletion();

		public static GameObject fireWardWipeMuzzleFlash = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabWardWipeMuzzleflash_prefab).WaitForCompletion();

		public static BuffDef bdWardWipeFog = Addressables.LoadAssetAsync<BuffDef>((object)RoR2_DLC1_VoidRaidCrab.bdVoidRaidCrabWardWipeFog_asset).WaitForCompletion();

		public static InteractableSpawnCard iscSafeWard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)RoR2_DLC1_VoidRaidCrab.iscVoidRaidSafeWard_asset).WaitForCompletion();

		public static SkillDef sdWardWipe;

		public static SkillDef sdSingularity;

		private static SkillDef sdMaze;

		private static SkillDef sdMultiBeam;

		public static GameObject barnacleMuzzleFlash = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidBarnacle.VoidBarnacleMuzzleflash_prefab).WaitForCompletion();

		public static GameObject gravityBulletChargeEffect;

		public static GameObject gravityBulletProjectile;

		public static GameObject gravityBombProjectile;

		public static SpawnCard voidlingHauntCard = (SpawnCard)(object)ScriptableObject.CreateInstance<CharacterSpawnCard>();

		public static GameObject groundedGravityEffect;

		public static GameObject airborneGravityEffect;

		public static GameObject mazePortalEffect;

		public static GameObject mazeMuzzleEffect;

		public static GameObject mazeLaserPrefab;

		public static GameObject mazeWarningPrefab;

		public static GameObject mazeChargeUpPrefab;

		public static GameObject mazeImpactEffect;

		public static GameObject wSingularityProjectile;

		public static SpawnCard locusPortalCard = Addressables.LoadAssetAsync<SpawnCard>((object)RoR2_DLC1_PortalVoid.iscVoidPortal_asset).WaitForCompletion();

		private static CharacterBody jointBody;

		private static CharacterBody bossBody;

		internal static Main Instance { get; private set; }

		public static string PluginDirectory { get; private set; }

		public static bool RooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions");

		public void Awake()
		{
			Instance = this;
			Log.Init(((BaseUnityPlugin)this).Logger);
			ModConfig.Init();
			AddContent();
			LoadAssets();
			CreateVoidlingHaunt();
			CreateNewEyeMissiles();
			CreateGravityProjectiles();
			CreateSingularityProjectile();
			TweakBigVoidling();
			TweakBigVoidlingMaster();
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(TweaksAfterLoad));
			new ConnectHooks();
		}

		private void TweaksAfterLoad()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody obj = jointBody;
			obj.bodyFlags = (BodyFlags)(obj.bodyFlags | 0x4810);
			CharacterBody obj2 = bossBody;
			obj2.bodyFlags = (BodyFlags)(obj2.bodyFlags | 0x4810);
			bossBody.baseNameToken = "[ Voidling ]";
			bossBody.subtitleNameToken = "Augur of the Abyss";
			jointBody = null;
			bossBody = null;
			GameObject obj3 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_moon.FrogInteractable_prefab).WaitForCompletion();
			PurchaseInteraction component = obj3.GetComponent<PurchaseInteraction>();
			component.costType = (CostTypeIndex)0;
			component.cost = 0;
			obj3.GetComponent<FrogController>().maxPets = 1;
		}

		private void AddContent()
		{
			//IL_0002: 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_0012: 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)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			bool flag = default(bool);
			ContentAddition.AddEntityState<BetterSpawnState>(ref flag);
			ContentAddition.AddEntityState<JointSpawnState>(ref flag);
			ContentAddition.AddEntityState<ChargeVoidRain>(ref flag);
			ContentAddition.AddEntityState<FireVoidRain>(ref flag);
			ContentAddition.AddEntityState<ChargeEyeBlast>(ref flag);
			ContentAddition.AddEntityState<FireEyeBlast>(ref flag);
			ContentAddition.AddEntityState<BaseMazeAttackState>(ref flag);
			ContentAddition.AddEntityState<EnterMaze>(ref flag);
			ContentAddition.AddEntityState<ExitMaze>(ref flag);
			ContentAddition.AddEntityState<MazeAttack>(ref flag);
			ContentAddition.AddEntityState<WanderingSingularity>(ref flag);
			ContentAddition.AddEntityState<VoidlingHauntManager>(ref flag);
			ContentAddition.AddEntityState<ChargeGravityBullet>(ref flag);
			ContentAddition.AddEntityState<FireGravityBullet>(ref flag);
			ContentAddition.AddEntityState<ChargeWardWipeNux>(ref flag);
			ContentAddition.AddEntityState<FireWardWipeNux>(ref flag);
		}

		public static List<CharacterBody> GetPlayerBodies()
		{
			List<CharacterBody> list = new List<CharacterBody>();
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				if (Object.op_Implicit((Object)(object)instance) && Object.op_Implicit((Object)(object)instance.master))
				{
					CharacterBody body = instance.master.GetBody();
					if (Object.op_Implicit((Object)(object)body))
					{
						list.Add(body);
					}
				}
			}
			return list;
		}

		private static void CreateNewEyeMissiles()
		{
			//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_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: 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_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabImpact1_prefab).WaitForCompletion();
			GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMissileGhost_prefab).WaitForCompletion();
			GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMissileProjectile_prefab).WaitForCompletion();
			val3 = PrefabAPI.InstantiateClone(val3, "FathomlessEyeProjectile", true);
			val2 = PrefabAPI.InstantiateClone(val2, "FathomlessEyeProjectileGhost", false);
			val = PrefabAPI.InstantiateClone(val, "FathomlessEyeProjectileImpact", false);
			val3.GetComponent<ProjectileController>().ghostPrefab = val2;
			val3.AddComponent<StasisMissileComponent>();
			val3.GetComponent<ProjectileSimple>().desiredForwardSpeed = 125f;
			ProjectileImpactExplosion obj = val3.AddComponent<ProjectileImpactExplosion>();
			((ProjectileExplosion)obj).blastRadius = 6f;
			obj.impactEffect = val;
			obj.destroyOnWorld = true;
			obj.lifetime = 5f;
			((ProjectileExplosion)obj).blastDamageCoefficient = 1f;
			((ProjectileExplosion)obj).falloffModel = (FalloffModel)2;
			Object.Destroy((Object)(object)val3.GetComponent<ProjectileSingleTargetImpact>());
			ProjectileSteerTowardTarget component = val3.GetComponent<ProjectileSteerTowardTarget>();
			component.rotationSpeed = 10f;
			((Behaviour)component).enabled = false;
			ProjectileDirectionalTargetFinder component2 = val3.GetComponent<ProjectileDirectionalTargetFinder>();
			component2.lookCone = 360f;
			component2.lookRange = 100f;
			Transform transform = val3.transform;
			transform.localScale *= 4f;
			Transform val4 = val2.transform.Find("FlashRing");
			if (Object.op_Implicit((Object)(object)val4))
			{
				MainModule main = ((Component)val4).GetComponent<ParticleSystem>().main;
				((MainModule)(ref main)).duration = ((MainModule)(ref main)).duration * 3f;
				((MainModule)(ref main)).startLifetimeMultiplier = ((MainModule)(ref main)).startLifetimeMultiplier * 3f;
			}
			foreach (Transform item in val2.transform)
			{
				item.localScale *= 4f;
			}
			foreach (Transform item2 in val.transform)
			{
				item2.localScale *= 4f;
			}
			ContentAddition.AddEffect(val);
			ContentAddition.AddProjectile(val3);
			eyeMissileProjectile = val3;
		}

		private static void TweakBigVoidlingMaster()
		{
			//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_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: 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)
			GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMaster_prefab).WaitForCompletion();
			Object.Destroy((Object)(object)obj.GetComponent<VoidRaidCrabAISkillDriverController>());
			foreach (AISkillDriver item in obj.GetComponents<AISkillDriver>().ToList())
			{
				switch (item.customName)
				{
				case "Channel Gauntlet 1":
				case "Channel Gauntlet 2":
				case "GravityBump":
					Object.Destroy((Object)(object)item);
					break;
				case "FireMissiles":
					item.movementType = (MovementType)1;
					((Behaviour)item).enabled = true;
					item.noRepeat = true;
					item.buttonPressType = (ButtonPressType)0;
					item.activationRequiresAimConfirmation = false;
					item.nextHighPriorityOverride = null;
					break;
				case "FireMultiBeam":
					item.movementType = (MovementType)1;
					item.aimType = (AimType)1;
					item.skillSlot = (SkillSlot)1;
					((Behaviour)item).enabled = true;
					item.maxUserHealthFraction = float.PositiveInfinity;
					item.activationRequiresAimConfirmation = false;
					item.noRepeat = true;
					item.buttonPressType = (ButtonPressType)0;
					item.nextHighPriorityOverride = null;
					break;
				case "SpinBeam":
					item.skillSlot = (SkillSlot)2;
					item.maxUserHealthFraction = float.PositiveInfinity;
					item.buttonPressType = (ButtonPressType)0;
					item.driverUpdateTimerOverride = 1f;
					item.nextHighPriorityOverride = null;
					item.activationRequiresAimConfirmation = false;
					break;
				case "Vacuum Attack":
					((Behaviour)item).enabled = false;
					item.maxUserHealthFraction = float.PositiveInfinity;
					item.buttonPressType = (ButtonPressType)0;
					item.driverUpdateTimerOverride = 1f;
					item.nextHighPriorityOverride = null;
					break;
				case "WardWipe":
					((Behaviour)item).enabled = false;
					item.maxUserHealthFraction = float.PositiveInfinity;
					item.buttonPressType = (ButtonPressType)0;
					item.driverUpdateTimerOverride = 1f;
					item.nextHighPriorityOverride = null;
					item.requiredSkill = null;
					break;
				case "LookAtTarget":
					item.movementType = (MovementType)1;
					break;
				}
			}
		}

		private static void CreateGravityProjectiles()
		{
			//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_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: 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)
			//IL_00dc: 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)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: 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_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: 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_026b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0362: Unknown result type (might be due to invalid IL or missing references)
			//IL_036c: Unknown result type (might be due to invalid IL or missing references)
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: 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_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_043f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0514: Unknown result type (might be due to invalid IL or missing references)
			//IL_0519: Unknown result type (might be due to invalid IL or missing references)
			groundedGravityEffect = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabGravityBumpExplosionGround_prefab).WaitForCompletion();
			groundedGravityEffect.GetComponent<EffectComponent>().soundName = "Play_voidDevastator_death";
			airborneGravityEffect = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabGravityBumpExplosionAir_prefab).WaitForCompletion();
			airborneGravityEffect.GetComponent<EffectComponent>().soundName = "Play_voidDevastator_death";
			Material val = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_VoidRaidCrab.matVoidRaidCrabGravityBumpSphere_mat).WaitForCompletion();
			Material val2 = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_VoidRaidCrab.matVoidRaidCrabGravityBumpGem_mat).WaitForCompletion();
			Material sharedMaterial = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_VoidRaidCrab.matVoidRaidCrabParticleBlue_mat).WaitForCompletion();
			Material sharedMaterial2 = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_VoidRaidCrab.matVoidRaidCrabGravityBumpWarning_mat).WaitForCompletion();
			GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Nullifier.NullifierPreBombGhost_prefab).WaitForCompletion();
			GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Nullifier.NullifierExplosion_prefab).WaitForCompletion();
			Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Nullifier.NullifierBombProjectile_prefab).WaitForCompletion();
			Material[] sharedMaterials = (Material[])(object)new Material[2] { val, val2 };
			GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidBarnacle.VoidBarnacleImpactExplosion_prefab).WaitForCompletion();
			GameObject obj2 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidBarnacle.VoidBarnacleCharge_prefab).WaitForCompletion();
			GameObject val5 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidBarnacle.VoidBarnacleBullet_prefab).WaitForCompletion();
			GameObject val6 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidBarnacle.VoidBarnacleBulletGhost_prefab).WaitForCompletion(), "GravityBulletGhostNux", false);
			((Renderer)((Component)val6.transform.GetChild(3)).GetComponent<MeshRenderer>()).sharedMaterials = sharedMaterials;
			((Component)val6.transform.Find("Point Light")).GetComponent<Light>().color = new Color(6f / 85f, 6f / 85f, 1f, 1f);
			((Renderer)((Component)val6.transform.Find("Flames")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial;
			gravityBulletChargeEffect = PrefabAPI.InstantiateClone(obj2, "GravityBulletChargeEffectNux", false);
			Transform child = gravityBulletChargeEffect.transform.GetChild(0);
			((Renderer)((Component)child.Find("Fire")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial;
			((Component)child.Find("Point Light")).GetComponent<Light>().color = new Color(0.6627451f, 47f / 51f, 50f / 51f, 1f);
			((Renderer)((Component)child.Find("Sphere")).GetComponent<MeshRenderer>()).sharedMaterials = sharedMaterials;
			GameObject val7 = PrefabAPI.InstantiateClone(obj, "GravityBulletExplosionEffectNux", false);
			((Component)val7.transform.Find("Point Light")).GetComponent<Light>().color = new Color(9f / 85f, 41f / 85f, 0.972549f, 1f);
			((Renderer)((Component)val7.transform.Find("ExplosionSphere, Stars (1)")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = val;
			gravityBulletProjectile = PrefabAPI.InstantiateClone(val5, "GravityBulletNux", true);
			gravityBulletProjectile.GetComponent<ProjectileController>().ghostPrefab = val6;
			gravityBulletProjectile.GetComponent<ProjectileImpactExplosion>().impactEffect = val7;
			ContentAddition.AddEffect(val7);
			ContentAddition.AddProjectile(gravityBulletProjectile);
			GameObject obj3 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Nullifier.NullifierPreBombProjectile_prefab).WaitForCompletion(), "GravityPreBombProjectileNux", true);
			GameObject val8 = PrefabAPI.InstantiateClone(val3, "GravityPreBombGhostNux", false);
			GameObject val9 = PrefabAPI.InstantiateClone(val4, "GravityBombExplosionEffectNux", false);
			ProjectileController component = obj3.GetComponent<ProjectileController>();
			component.ghostPrefab = val8;
			component.cannotBeDeleted = true;
			ProjectileImpactExplosion component2 = obj3.GetComponent<ProjectileImpactExplosion>();
			((ProjectileExplosion)component2).blastRadius = 10f;
			component2.impactEffect = val9;
			component2.lifetime = 2f;
			((ProjectileExplosion)component2).childrenProjectilePrefab = null;
			gravityBombProjectile = obj3;
			Transform transform = gravityBombProjectile.transform;
			transform.localScale *= 2f;
			Transform transform2 = val8.transform;
			transform2.localScale *= 2f;
			((Renderer)((Component)val8.transform.Find("Vacuum Radial")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial2;
			Transform obj4 = val8.transform.Find("Sphere");
			obj4.localScale *= 2f;
			ObjectScaleCurve component3 = ((Component)obj4).GetComponent<ObjectScaleCurve>();
			component3.timeMax = 2f;
			component3.baseScale = new Vector3(4f, 4f, 4f);
			((Renderer)((Component)obj4).GetComponent<MeshRenderer>()).sharedMaterials = sharedMaterials;
			((Renderer)((Component)val8.transform.Find("Vacuum Stars")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial;
			ParticleSystem[] componentsInChildren = ((Component)val8.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main = componentsInChildren[i].main;
				((MainModule)(ref main)).startSizeMultiplier = ((MainModule)(ref main)).startSizeMultiplier * 1.5f;
				((MainModule)(ref main)).duration = ((MainModule)(ref main)).duration * 2f;
				((MainModule)(ref main)).startLifetimeMultiplier = ((MainModule)(ref main)).startLifetimeMultiplier * 2f;
			}
			((Renderer)((Component)val9.transform.Find("Vacuum Stars")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial;
			((Renderer)((Component)val9.transform.Find("Vacuum Radial")).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial2;
			Transform obj5 = val9.transform.Find("Sphere");
			((Renderer)((Component)obj5).GetComponent<MeshRenderer>()).sharedMaterial = val;
			Transform transform3 = ((Component)obj5).transform;
			transform3.localScale *= 2f;
			componentsInChildren = ((Component)val9.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main2 = componentsInChildren[i].main;
				((MainModule)(ref main2)).startSizeMultiplier = ((MainModule)(ref main2)).startSizeMultiplier * 1.2f;
			}
			ContentAddition.AddEffect(val9);
			ContentAddition.AddProjectile(gravityBombProjectile);
		}

		private static void CreateVoidlingHaunt()
		{
			//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_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Expected O, but got Unknown
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: 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_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_031f: Unknown result type (might be due to invalid IL or missing references)
			SpawnCard spawnCard = Addressables.LoadAssetAsync<SpawnCard>((object)RoR2_DLC1_VoidBarnacle.cscVoidBarnacle_asset).WaitForCompletion();
			DirectorCard val = new DirectorCard
			{
				selectionWeight = 1,
				spawnCard = spawnCard
			};
			GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BrotherHaunt.BrotherHauntMaster_prefab).WaitForCompletion();
			GameObject val2 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BrotherHaunt.BrotherHauntBody_prefab).WaitForCompletion(), "VoidlingHauntNux", true);
			GameObject val3 = PrefabAPI.InstantiateClone(obj, "VoidlingHauntNuxMaster", true);
			GameObject val4 = new GameObject("Barnacle Director");
			val4.SetActive(false);
			val4.transform.parent = val2.transform;
			CombatDirector obj2 = val4.AddComponent<CombatDirector>();
			DirectorCardCategorySelection val5 = ScriptableObject.CreateInstance<DirectorCardCategorySelection>();
			val5.AddCategory("BarnacleMania", 4f);
			val5.AddCard(0, val);
			obj2.customName = "Barnacle Director";
			obj2.expRewardCoefficient = 0.2f;
			obj2.minSeriesSpawnInterval = 0.1f;
			obj2.maxSeriesSpawnInterval = 1f;
			obj2.minRerollSpawnInterval = 4.333333f;
			obj2.maxRerollSpawnInterval = 8.333333f;
			obj2.creditMultiplier = 0.3f;
			obj2.targetPlayers = true;
			obj2.monsterCards = val5;
			obj2.teamIndex = (TeamIndex)4;
			obj2.monsterCredit = 150f;
			obj2.onSpawnedServer = new OnSpawnedServer();
			obj2.moneyWaveIntervals = (RangeFloat[])(object)new RangeFloat[1]
			{
				new RangeFloat
				{
					min = 1f,
					max = 1f
				}
			};
			val2.GetComponent<CharacterBody>().baseNameToken = "Voidling Haunt";
			val3.GetComponent<CharacterMaster>().bodyPrefab = val2;
			SkillDef val6 = ScriptableObject.CreateInstance<SkillDef>();
			val6.skillName = "Gravity Well Nux";
			((Object)val6).name = "Gravity Well Nux";
			val6.skillNameToken = "Gravity Well Nux";
			val6.activationState = new SerializableEntityStateType(typeof(VoidlingHauntManager));
			val6.activationStateMachineName = "Weapon";
			val6.interruptPriority = (InterruptPriority)9;
			val6.baseMaxStock = 1;
			val6.baseRechargeInterval = 60f;
			val6.rechargeStock = 1;
			val6.requiredStock = 1;
			val6.stockToConsume = 1;
			val6.dontAllowPastMaxStocks = true;
			val6.beginSkillCooldownOnSkillEnd = true;
			val6.canceledFromSprinting = false;
			val6.forceSprintDuringState = false;
			val6.fullRestockOnAssign = false;
			val6.resetCooldownTimerOnUse = false;
			val6.isCombatSkill = true;
			val6.mustKeyPress = false;
			val6.cancelSprintingOnActivation = false;
			ContentAddition.AddSkillDef(val6);
			Object.Destroy((Object)(object)val2.GetComponent<GenericSkill>());
			EntityStateMachine component = val2.GetComponent<EntityStateMachine>();
			component.initialStateType = new SerializableEntityStateType(typeof(VoidlingHauntManager));
			component.mainStateType = new SerializableEntityStateType(typeof(VoidlingHauntManager));
			SkillLocator component2 = val2.GetComponent<SkillLocator>();
			GenericSkill val7 = val2.AddComponent<GenericSkill>();
			val7.skillName = "VHauntNuxPrimary";
			SkillFamily val8 = ScriptableObject.CreateInstance<SkillFamily>();
			((Object)val8).name = "VHauntNuxPrimaryFamily";
			val8.variants = (Variant[])(object)new Variant[1]
			{
				new Variant
				{
					skillDef = val6
				}
			};
			val7._skillFamily = val8;
			ContentAddition.AddSkillFamily(val8);
			component2.primary = val7;
			ContentAddition.AddBody(val2);
			ContentAddition.AddMaster(val3);
			voidlingHauntCard.prefab = val3;
			voidlingHauntCard.sendOverNetwork = true;
			voidlingHauntCard.nodeGraphType = (GraphType)1;
		}

		private static void TweakBigVoidling()
		{
			//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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabBody_prefab).WaitForCompletion();
			ModelLocator component = val.GetComponent<ModelLocator>();
			CharacterBody component2 = val.GetComponent<CharacterBody>();
			component2.baseMaxHealth = 1000f;
			bossBody = component2;
			FogDamageController component3 = val.GetComponent<FogDamageController>();
			if (Object.op_Implicit((Object)(object)component3))
			{
				component3.healthFractionPerSecond = 0.01f;
				component3.healthFractionRampCoefficientPerSecond = 0.1f;
			}
			SkillLocator component4 = val.GetComponent<SkillLocator>();
			component4.primary.skillFamily.variants[0].skillDef.activationState = new SerializableEntityStateType(typeof(ChargeEyeBlast));
			component4.secondary.skillFamily.variants = (Variant[])(object)new Variant[1]
			{
				new Variant
				{
					skillDef = sdMultiBeam
				}
			};
			component4.utility.skillFamily.variants = (Variant[])(object)new Variant[1]
			{
				new Variant
				{
					skillDef = sdMaze
				}
			};
			List<EntityStateMachine> list = val.GetComponents<EntityStateMachine>().ToList();
			for (int i = 0; i < list.Count; i++)
			{
				EntityStateMachine val2 = list[i];
				if (val2.customName == "Body")
				{
					val2.initialStateType = new SerializableEntityStateType(typeof(BetterSpawnState));
				}
			}
			Animator component5 = ((Component)component.modelTransform).gameObject.GetComponent<Animator>();
			component5.applyRootMotion = true;
			component5.avatar = AvatarBuilder.BuildGenericAvatar(((Component)component5).gameObject, "ROOT");
			GameObject gameObject = ((Component)component.modelTransform).gameObject;
			PrintController obj = gameObject.AddComponent<PrintController>();
			obj.printTime = 8.5f;
			obj.disableWhenFinished = true;
			obj.startingPrintHeight = -20f;
			obj.maxPrintHeight = 200f;
			obj.startingPrintBias = -10f;
			obj.maxPrintBias = 0f;
			obj.animateFlowmapPower = false;
			obj.startingFlowmapPower = 0f;
			obj.maxFlowmapPower = 0f;
			obj.printCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f);
			((Component)obj).gameObject.SetActive(true);
			gameObject.AddComponent<RandomBlinkController>();
			foreach (SurfaceDefProvider item in ((Component)gameObject.transform.Find("VoidRaidCrabArmature").Find("ROOT").Find("LegBase")).GetComponentsInChildren<SurfaceDefProvider>().ToList())
			{
				((Component)item).gameObject.layer = (int)(ref LayerIndex.defaultLayer);
			}
		}

		private static void LoadAssets()
		{
			//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_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: 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_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: 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)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0279: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: 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_03fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: 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_053c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0541: Unknown result type (might be due to invalid IL or missing references)
			//IL_056d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0465: Unknown result type (might be due to invalid IL or missing references)
			//IL_058f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0594: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0602: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_0676: Unknown result type (might be due to invalid IL or missing references)
			//IL_067b: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_06dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_070a: Unknown result type (might be due to invalid IL or missing references)
			//IL_070f: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_083c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0841: Unknown result type (might be due to invalid IL or missing references)
			//IL_0873: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_095c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0961: Unknown result type (might be due to invalid IL or missing references)
			//IL_096b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0970: Unknown result type (might be due to invalid IL or missing references)
			//IL_098d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0992: Unknown result type (might be due to invalid IL or missing references)
			//IL_099c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09be: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_09fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a02: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a24: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a52: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a74: Unknown result type (might be due to invalid IL or missing references)
			Addressables.LoadAssetAsync<SceneDef>((object)RoR2_DLC1_voidraid.voidraid_asset).WaitForCompletion().blockOrbitalSkills = false;
			raidTeleportEffect = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_gauntlets.VoidRaidCrabGauntletTeleportEffect_prefab).WaitForCompletion();
			raidTeleportEffect.GetComponent<EffectComponent>().soundName = "Play_voidRaid_fog_explode";
			MainModule main = ((Component)raidTeleportEffect.transform.Find("OmniSparks")).GetComponent<ParticleSystem>().main;
			MinMaxGradient startColor = ((MainModule)(ref main)).startColor;
			MainModule main2 = ((Component)raidTeleportEffect.transform.Find("Sphere, Brief")).GetComponent<ParticleSystem>().main;
			MainModule main3 = ((Component)raidTeleportEffect.transform.Find("Sphere, Long")).GetComponent<ParticleSystem>().main;
			((MainModule)(ref main2)).startColor = startColor;
			((MainModule)(ref main3)).startColor = startColor;
			Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidSafeWard_prefab).WaitForCompletion().GetComponent<VerticalTubeZone>()
				.radius = 16f;
			Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_VoidRaidCrab.matVoidRaidCrabSpinBeamSphere1_mat).WaitForCompletion();
			Material sharedMaterial = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_PortalVoid.matPortalVoidCenter_mat).WaitForCompletion();
			mazeChargeUpPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabSpinBeamChargeUp_prefab).WaitForCompletion(), "MazeChargeUpEffectNux", false);
			ParticleSystem[] componentsInChildren = ((Component)mazeChargeUpPrefab.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main4 = componentsInChildren[i].main;
				((MainModule)(ref main4)).startSizeMultiplier = ((MainModule)(ref main4)).startSizeMultiplier * 1.5f;
			}
			mazeImpactEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.LaserImpactEffect_prefab).WaitForCompletion(), "MazeImpactEffectNux", false);
			componentsInChildren = ((Component)mazeImpactEffect.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main5 = componentsInChildren[i].main;
				((MainModule)(ref main5)).startSizeMultiplier = ((MainModule)(ref main5)).startSizeMultiplier / 2f;
			}
			ContentAddition.AddEffect(mazeImpactEffect);
			PostProcessProfile sharedProfile = Addressables.LoadAssetAsync<PostProcessProfile>((object)RoR2_Base_title_PostProcessing.ppLocalNullifier_asset).WaitForCompletion();
			((ParameterOverride<Color>)(object)Addressables.LoadAssetAsync<PostProcessProfile>((object)RoR2_DLC1_voidraid.ppSceneVoidRaidStageStarry_asset).WaitForCompletion().GetSetting<RampFog>()
				.fogColorStart).value = new Color(0.2687f, 0.2429f, 0.2429f, 0.05f);
			mazeLaserPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabSpinBeamVFX_prefab).WaitForCompletion(), "MazeLaserVFXNux");
			mazeLaserPrefab.AddComponent<NetworkIdentity>();
			Transform obj = mazeLaserPrefab.transform.Find("Mesh, Additive");
			obj.localScale *= 3f;
			obj.localPosition = new Vector3(0f, 0f, 50.16f);
			Transform child = mazeLaserPrefab.transform.Find("Point Light, End").GetChild(0);
			((Component)child).gameObject.SetActive(true);
			((Component)child).GetComponent<PostProcessVolume>().sharedProfile = sharedProfile;
			componentsInChildren = ((Component)mazeLaserPrefab.transform).GetComponentsInChildren<ParticleSystem>();
			foreach (ParticleSystem val in componentsInChildren)
			{
				if (((Object)((Component)val).gameObject).name != "MuzzleRayParticles")
				{
					MainModule main6 = val.main;
					((MainModule)(ref main6)).startSizeMultiplier = ((MainModule)(ref main6)).startSizeMultiplier * 3f;
				}
			}
			mazeWarningPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabSpinBeamVFX_prefab).WaitForCompletion(), "MazeWarningVFXNux");
			for (int num = mazeWarningPrefab.transform.childCount - 1; num >= 0; num--)
			{
				Transform child2 = mazeWarningPrefab.transform.GetChild(num);
				if (((Object)child2).name != "Mesh, Additive" && ((Object)child2).name != "Mesh, Transparent")
				{
					Object.Destroy((Object)(object)((Component)child2).gameObject);
				}
			}
			VfxKillBehavior component = mazeWarningPrefab.GetComponent<VfxKillBehavior>();
			if (Object.op_Implicit((Object)(object)component))
			{
				Object.Destroy((Object)(object)component);
			}
			DestroyOnTimer component2 = mazeWarningPrefab.GetComponent<DestroyOnTimer>();
			if (Object.op_Implicit((Object)(object)component2))
			{
				component2.duration = 2f;
			}
			Material sharedMaterial2 = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_voidstage.matVoidBoostPath_mat).WaitForCompletion();
			Material sharedMaterial3 = Addressables.LoadAssetAsync<Material>((object)RoR2_Base_Common.matVoidDeathBombAreaIndicatorFront_mat).WaitForCompletion();
			Transform val2 = mazeWarningPrefab.transform.Find("Mesh, Additive");
			if (Object.op_Implicit((Object)(object)val2))
			{
				val2.localScale *= 3f;
				val2.localPosition = new Vector3(0f, 0f, 50.16f);
				MeshRenderer component3 = ((Component)val2).GetComponent<MeshRenderer>();
				((Renderer)((Component)val2.GetChild(0)).GetComponent<MeshRenderer>()).sharedMaterial = sharedMaterial3;
				ObjectScaleCurve obj2 = ((Component)val2).gameObject.AddComponent<ObjectScaleCurve>();
				obj2.resetOnAwake = true;
				obj2.timeMax = 0.3f;
				obj2.curveX = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
				obj2.curveY = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
				obj2.curveZ = AnimationCurve.Linear(0f, 1f, 1f, 1f);
				obj2.overallCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
				if (Object.op_Implicit((Object)(object)component3))
				{
					((Renderer)component3).sharedMaterial = sharedMaterial2;
				}
			}
			GameObject val3 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabSpinBeamChargeUp_prefab).WaitForCompletion(), "MazeMuzzleEffectNux", false);
			val3.transform.eulerAngles = new Vector3(90f, 0f, 0f);
			componentsInChildren = ((Component)val3.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main7 = componentsInChildren[i].main;
				((MainModule)(ref main7)).duration = ((MainModule)(ref main7)).duration * 1.25f;
			}
			mazeMuzzleEffect = val3;
			GameObject val4 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidMegaCrab.VoidMegaCrabSpawnEffect_prefab).WaitForCompletion(), "MazePortalEffectNux", false);
			val4.GetComponent<DestroyOnTimer>().duration = 5f;
			componentsInChildren = val4.GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main8 = componentsInChildren[i].main;
				((MainModule)(ref main8)).startSizeMultiplier = ((MainModule)(ref main8)).startSizeMultiplier * 2f;
				((MainModule)(ref main8)).startLifetimeMultiplier = ((MainModule)(ref main8)).startLifetimeMultiplier * 4f;
			}
			((Renderer)((Component)val4.transform.Find("Ring").GetChild(0)).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial;
			mazePortalEffect = val4;
			ContentAddition.AddEffect(mazePortalEffect);
			eyeBlastMuzzleFlash = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMuzzleflashEyeMissiles_prefab).WaitForCompletion(), "EyeBlastMuzzleFlashNux", false);
			ContentAddition.AddEffect(eyeBlastMuzzleFlash);
			eyeBlastChargeEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabChargeEyeMissiles_prefab).WaitForCompletion(), "EyeBlastChargeEffectNux", false);
			componentsInChildren = ((Component)eyeBlastChargeEffect.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main9 = componentsInChildren[i].main;
				((MainModule)(ref main9)).startSizeMultiplier = ((MainModule)(ref main9)).startSizeMultiplier * 2f;
			}
			voidRainPortalEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Nullifier.NullifierSpawnEffect_prefab).WaitForCompletion(), "VoidRainPortalEffect", false);
			((Renderer)((Component)voidRainPortalEffect.transform.Find("Ring").GetChild(0)).GetComponent<ParticleSystemRenderer>()).sharedMaterial = sharedMaterial;
			ContentAddition.AddEffect(voidRainPortalEffect);
			Transform val5 = voidRainWarning.transform.Find("HitIndicator");
			if (Object.op_Implicit((Object)(object)val5))
			{
				Transform val6 = voidRainWarning.transform.Find("FurthestHitRecipient");
				if (Object.op_Implicit((Object)(object)val6))
				{
					val5.SetParent(val6);
					val5.localPosition = Vector3.zero;
				}
			}
			chargeVoidRain = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabTripleBeamChargeUp_prefab).WaitForCompletion(), "ChargeVoidRainNuxEffect", false);
			componentsInChildren = ((Component)chargeVoidRain.transform).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main10 = componentsInChildren[i].main;
				((MainModule)(ref main10)).startSizeMultiplier = ((MainModule)(ref main10)).startSizeMultiplier * 1.5f;
				((MainModule)(ref main10)).duration = ((MainModule)(ref main10)).duration * 7f;
				((MainModule)(ref main10)).startLifetimeMultiplier = ((MainModule)(ref main10)).startLifetimeMultiplier * 7f;
			}
			spawnEffect = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabSpawnEffect_prefab).WaitForCompletion(), "FathomlessVoidlingSpawnEffect", false);
			spawnEffect.transform.localScale = new Vector3(15f, 15f, 15f);
			spawnEffect.GetComponent<DestroyOnTimer>().duration = 12f;
			componentsInChildren = ((Component)spawnEffect.transform.GetChild(0).GetChild(1)).GetComponentsInChildren<ParticleSystem>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				MainModule main11 = componentsInChildren[i].main;
				((MainModule)(ref main11)).duration = ((MainModule)(ref main11)).duration * 1.75f;
			}
			ContentAddition.AddEffect(spawnEffect);
			GameObject obj3 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabJointBody_prefab).WaitForCompletion();
			obj3.AddComponent<JointThresholdController>();
			obj3.AddComponent<LegControllerNetworkHelper>();
			CharacterBody component4 = obj3.GetComponent<CharacterBody>();
			component4.baseMaxHealth = ModConfig.jointBaseHealth.Value;
			component4.levelMaxHealth = ModConfig.jointLevelHealth.Value;
			component4.baseRegen = 0f;
			component4.levelRegen = 0f;
			jointBody = component4;
			obj3.GetComponent<EntityStateMachine>().initialStateType = new SerializableEntityStateType(typeof(JointSpawnState));
			sdWardWipe = Addressables.LoadAssetAsync<SkillDef>((object)RoR2_DLC1_VoidRaidCrab.RaidCrabWardWipe_asset).WaitForCompletion();
			sdWardWipe.activationState = new SerializableEntityStateType(typeof(ChargeWardWipeNux));
			sdSingularity = Addressables.LoadAssetAsync<SkillDef>((object)RoR2_DLC1_VoidRaidCrab.RaidCrabVacuumAttack_asset).WaitForCompletion();
			sdSingularity.activationState = new SerializableEntityStateType(typeof(WanderingSingularity));
			sdSingularity.interruptPriority = (InterruptPriority)2;
			if (ModConfig.singularityCooldown.Value > 0f)
			{
				sdSingularity.baseRechargeInterval = ModConfig.singularityCooldown.Value;
			}
			sdMaze = Addressables.LoadAssetAsync<SkillDef>((object)RoR2_DLC1_VoidRaidCrab.RaidCrabSpinBeam_asset).WaitForCompletion();
			sdMaze.activationState = new SerializableEntityStateType(typeof(EnterMaze));
			sdMaze.baseRechargeInterval = ModConfig.mazeCooldown.Value;
			sdMaze.interruptPriority = (InterruptPriority)2;
			sdMultiBeam = Addressables.LoadAssetAsync<SkillDef>((object)RoR2_DLC1_VoidRaidCrab.RaidCrabMultiBeam_asset).WaitForCompletion();
			sdMultiBeam.activationState = new SerializableEntityStateType(typeof(ChargeVoidRain));
			sdMultiBeam.baseRechargeInterval = ModConfig.multiBeamCooldown.Value;
		}

		private static void CreateSingularityProjectile()
		{
			//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_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: 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_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.KillSphereVfxPlaceholder_prefab).WaitForCompletion();
			val = PrefabAPI.InstantiateClone(val, "WSingularitySphere", false);
			GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabSuckLoopFX_prefab).WaitForCompletion();
			val2 = PrefabAPI.InstantiateClone(val2, "WSingularityCenter", false);
			GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_DLC1_VoidRaidCrab.VoidRaidCrabMissileProjectile_prefab).WaitForCompletion();
			val3 = PrefabAPI.InstantiateClone(val3, "WSingularityProjectile", true);
			GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_LunarWisp.LunarWispTrackingBombGhost_prefab).WaitForCompletion();
			val4 = PrefabAPI.InstantiateClone(val4, "WSingularityGhost", false);
			LoopSoundDef flightSoundLoop = Addressables.LoadAssetAsync<LoopSoundDef>((object)RoR2_DLC1_VoidRaidCrab.lsdVoidRaidCrabVacuumAttack_asset).WaitForCompletion();
			Object.Destroy((Object)(object)val.GetComponent<VFXTransformController>());
			Object.Destroy((Object)(object)val2.GetComponent<VFXTransformController>());
			val.transform.localScale = new Vector3(20f, 20f, 20f);
			foreach (Transform item in val4.transform)
			{
				Object.Destroy((Object)(object)((Component)item).gameObject);
			}
			val2.transform.parent = val4.transform;
			val.transform.parent = val4.transform;
			((Component)val.transform.GetChild(1).GetChild(1)).gameObject.SetActive(false);
			val2.GetComponent<VFXAttributes>().vfxIntensity = (VFXIntensity)0;
			val.GetComponent<VFXAttributes>().vfxIntensity = (VFXIntensity)0;
			foreach (Transform item2 in val3.transform)
			{
				Object.Destroy((Object)(object)((Component)item2).gameObject);
			}
			Object.Destroy((Object)(object)val3.GetComponent<BoxCollider>());
			Object.Destroy((Object)(object)val3.GetComponent<ProjectileSingleTargetImpact>());
			val3.AddComponent<SingularityComponent>();
			SphereCollider val5 = val3.AddComponent<SphereCollider>();
			val5.radius = 19f;
			((Collider)val5).isTrigger = true;
			val3.GetComponent<Rigidbody>().useGravity = false;
			ProjectileDirectionalTargetFinder component = val3.GetComponent<ProjectileDirectionalTargetFinder>();
			component.allowTargetLoss = false;
			component.lookCone = 360f;
			component.lookRange = 1000f;
			ProjectileController component2 = val3.GetComponent<ProjectileController>();
			component2.ghostPrefab = val4;
			component2.cannotBeDeleted = true;
			component2.flightSoundLoop = flightSoundLoop;
			component2.myColliders = (Collider[])(object)new Collider[1] { (Collider)val5 };
			ProjectileSimple component3 = val3.GetComponent<ProjectileSimple>();
			component3.desiredForwardSpeed = 15f;
			component3.lifetime = 30f;
			component3.enableVelocityOverLifetime = true;
			component3.velocityOverLifetime = AnimationCurve.Linear(0f, 1f, 1f, 0.5f);
			val3.transform.localScale = Vector3.one;
			ContentAddition.AddProjectile(val3);
			wSingularityProjectile = val3;
		}

		public static void CreateTube(Transform parent)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("WallHolder");
			val.transform.parent = parent;
			val.transform.position = Vector3.zero;
			val.transform.localPosition = new Vector3(-2.5f, 0f, 0f);
			GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)2);
			((Renderer)val2.GetComponent<MeshRenderer>()).material = Addressables.LoadAssetAsync<Material>((object)RoR2_DLC1_GameModes_InfiniteTowerRun_ITAssets.matITSafeWardAreaIndicator1_mat).WaitForCompletion();
			Object.Destroy((Object)(object)val2.GetComponent<CapsuleCollider>());
			MeshCollider colliderToIgnore = val2.AddComponent<MeshCollider>();
			val2.transform.localScale = new Vector3(115f, 1250f, 115f);
			((Object)val2).name = "Cheese Deterrent";
			val2.transform.SetParent(val.transform);
			val2.transform.localPosition = Vector3.zero;
			val2.layer = LayerIndex.world.intVal;
			GameObject val3 = new GameObject("DisableCollisions");
			val3.transform.parent = val2.transform;
			val3.transform.localScale = new Vector3(0.0091f, 0.0008f, 0.0091f);
			val3.layer = LayerIndex.entityPrecise.intVal;
			val3.AddComponent<DisableCollisionsIfInTrigger>().colliderToIgnore = (Collider)(object)colliderToIgnore;
			SphereCollider component = val3.GetComponent<SphereCollider>();
			component.radius = 85f;
			((Collider)component).isTrigger = true;
			GameObject val4 = new GameObject("MazeSpawnPointController");
			val4.transform.parent = parent;
			val4.transform.position = Vector3.zero;
			val4.AddComponent<MazeSpawnPointController>();
		}
	}
	public static class ModConfig
	{
		internal static ConfigFile FVConfig;

		public static ConfigEntry<bool> enableFog;

		public static ConfigEntry<float> jointBaseHealth;

		public static ConfigEntry<float> jointLevelHealth;

		public static ConfigEntry<float> mazeCooldown;

		public static ConfigEntry<float> multiBeamCooldown;

		public static ConfigEntry<float> singularityCooldown;

		public static ConfigEntry<float> hauntP1Cooldown;

		public static ConfigEntry<float> hauntP2Cooldown;

		public static ConfigEntry<float> gravityBombChance;

		public static ConfigEntry<int> eyeBlastMissileCount;

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void Init()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			if (Main.RooInstalled)
			{
				InitRoO();
			}
			FVConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.FathomlessVoidling.cfg", true);
			enableFog = FVConfig.BindOption("General", "Enable Fog", defaultValue: false, "Enables void fog in Void Locus.");
			jointBaseHealth = FVConfig.BindOptionSteppedSlider("Stats", "Base Health", 1500f, 25f, "Base health for joints", 500f, 3000f);
			jointLevelHealth = FVConfig.BindOptionSteppedSlider("Stats", "Level Health", 425f, 25f, "Health gained per level for joints", 100f, 1000f);
			eyeBlastMissileCount = FVConfig.BindOptionSlider("Skills", "Eye Blast Missile Count", 6, "Number of missiles fired per wave during Eye Blast", 1f);
			mazeCooldown = FVConfig.BindOptionSteppedSlider("Skills", "Maze Cooldown", 45f, 1f, "Cooldown for Maze attack", 10f, 90f);
			multiBeamCooldown = FVConfig.BindOptionSteppedSlider("Skills", "Portal Beam Cooldown", 15f, 1f, "Cooldown for Portal Beam attack", 5f, 30f);
			singularityCooldown = FVConfig.BindOptionSteppedSlider("Skills", "Singularity Cooldown", 60f, 1f, "Cooldown for Wandering Singularity attack", 10f, 90f);
			hauntP1Cooldown = FVConfig.BindOptionSteppedSlider("Haunt", "P1 Cooldown", 30f, 1f, "Gravity bomb downtime in Phase 1", 5f, 120f);
			hauntP2Cooldown = FVConfig.BindOptionSteppedSlider("Haunt", "P2/P3 Cooldown", 20f, 1f, "Gravity bomb downtime in Phase 2/3", 5f, 120f);
			gravityBombChance = FVConfig.BindOptionSteppedSlider("Haunt", "Gravity Bomb Chance", 0.15f, 0.01f, "Chance per second to fire a gravity bomb during uptime (higher chance = much more bombs)", 0.01f, 1f);
			WipeConfig();
		}

		private static void WipeConfig()
		{
			((Dictionary<ConfigDefinition, string>)typeof(ConfigFile).GetProperty("OrphanedEntries", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(FVConfig)).Clear();
			FVConfig.Save();
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void InitRoO()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Expected O, but got Unknown
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			try
			{
				ModSettingsManager.SetModDescription("Fathomless Voidling", "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
				byte[] array = File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)Main.Instance).Info.Location), "icon.png"));
				Texture2D val = new Texture2D(256, 256);
				ImageConversion.LoadImage(val, array);
				ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, 256f, 256f), new Vector2(0.5f, 0.5f)), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
			catch (Exception data)
			{
				Log.Error(data, "C:\\Users\\romym\\OneDrive\\Desktop\\RoR2Mods\\FathomlessVoidling2\\FathomlessVoidling\\ModConfig.cs", "InitRoO", 135);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOption<T>(this ConfigFile myConfig, string section, string name, T defaultValue, string description = "", bool restartRequired = true)
		{
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Expected O, but got Unknown
			if ((defaultValue is int || defaultValue is float) ? true : false)
			{
				return myConfig.BindOptionSlider(section, name, defaultValue, description, 0f, 20f, restartRequired);
			}
			if (string.IsNullOrEmpty(description))
			{
				description = name;
			}
			if (restartRequired)
			{
				description += " (restart required)";
			}
			ConfigEntry<T> val = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()));
			if (Main.RooInstalled)
			{
				TryRegisterOption<T>(val, restartRequired);
			}
			return val;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOptionSlider<T>(this ConfigFile myConfig, string section, string name, T defaultValue, string description = "", float min = 0f, float max = 20f, bool restartRequired = true)
		{
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Expected O, but got Unknown
			if (!(defaultValue is int) && !(defaultValue is float))
			{
				return myConfig.BindOption(section, name, defaultValue, description, restartRequired);
			}
			if (string.IsNullOrEmpty(description))
			{
				description = name;
			}
			string text = description;
			T val = defaultValue;
			description = text + " (Default: " + val?.ToString() + ")";
			if (restartRequired)
			{
				description += " (restart required)";
			}
			AcceptableValueBase val2 = (AcceptableValueBase)((typeof(T) == typeof(int)) ? ((object)new AcceptableValueRange<int>((int)min, (int)max)) : ((object)new AcceptableValueRange<float>(min, max)));
			ConfigEntry<T> val3 = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, val2, Array.Empty<object>()));
			if (Main.RooInstalled)
			{
				TryRegisterOptionSlider<T>(val3, min, max, restartRequired);
			}
			return val3;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> BindOptionSteppedSlider<T>(this ConfigFile myConfig, string section, string name, T defaultValue, float increment = 1f, string description = "", float min = 0f, float max = 20f, bool restartRequired = true)
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			if (string.IsNullOrEmpty(description))
			{
				description = name;
			}
			string text = description;
			T val = defaultValue;
			description = text + " (Default: " + val?.ToString() + ")";
			if (restartRequired)
			{
				description += " (restart required)";
			}
			ConfigEntry<T> val2 = myConfig.Bind<T>(section, name, defaultValue, new ConfigDescription(description, (AcceptableValueBase)(object)new AcceptableValueRange<float>(min, max), Array.Empty<object>()));
			if (Main.RooInstalled)
			{
				TryRegisterOptionSteppedSlider<T>(val2, increment, min, max, restartRequired);
			}
			return val2;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TryRegisterOption<T>(ConfigEntry<T> entry, bool restartRequired)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Expected O, but got Unknown
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Expected O, but got Unknown
			if (entry is ConfigEntry<string> val)
			{
				ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(val, new InputFieldConfig
				{
					submitOn = (SubmitEnum)6,
					restartRequired = restartRequired
				}), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
			else if (entry is ConfigEntry<bool> val2)
			{
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val2, restartRequired), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
			else if (entry is ConfigEntry<KeyboardShortcut> val3)
			{
				ModSettingsManager.AddOption((BaseOption)new KeyBindOption(val3, restartRequired), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
			else if (typeof(T).IsEnum)
			{
				ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)entry, restartRequired), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TryRegisterOptionSlider<T>(ConfigEntry<T> entry, float min, float max, bool restartRequired)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Expected O, but got Unknown
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			if (entry is ConfigEntry<int> val)
			{
				ModSettingsManager.AddOption((BaseOption)new IntSliderOption(val, new IntSliderConfig
				{
					min = (int)min,
					max = (int)max,
					formatString = "{0:0.00}",
					restartRequired = restartRequired
				}), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
			else if (entry is ConfigEntry<float> val2)
			{
				ModSettingsManager.AddOption((BaseOption)new SliderOption(val2, new SliderConfig
				{
					min = min,
					max = max,
					FormatString = "{0:0.00}",
					restartRequired = restartRequired
				}), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TryRegisterOptionSteppedSlider<T>(ConfigEntry<T> entry, float increment, float min, float max, bool restartRequired)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_003d: Expected O, but got Unknown
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Expected O, but got Unknown
			if (entry is ConfigEntry<float> val)
			{
				ModSettingsManager.AddOption((BaseOption)new StepSliderOption(val, new StepSliderConfig
				{
					increment = increment,
					min = min,
					max = max,
					FormatString = "{0:0.00}",
					restartRequired = restartRequired
				}), "Nuxlar.FathomlessVoidling", "FathomlessVoidling");
			}
		}
	}
}
namespace FathomlessVoidling.Hooks
{
	public class ConnectHooks
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_RequestFog <0>__PreventFog;

			public static Action<Stage> <1>__SpawnCauldrons;

			public static hook_AttemptToSpawnAllEligiblePortals <2>__SpawnVoidMoonPortal;
		}

		public ConnectHooks()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Expected O, but got Unknown
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			//IL_00d1: 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_00dc: Expected O, but got Unknown
			//IL_0111: 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_011c: Expected O, but got Unknown
			GlobalEventManager.onServerDamageDealt += ApplyGravityDamageType;
			SceneDirector.Start += new hook_Start(TweakBossDirector);
			HealthComponent.SendDamageDealt += new hook_SendDamageDealt(ThresholdCheck);
			CharacterMaster.OnBodyStart += new hook_OnBodyStart(FixPipReviveBug);
			LegController.RegenerateServer += new hook_RegenerateServer(PreventJointRegen);
			VoidRaidGauntletController.RpcActivateDonut += new hook_RpcActivateDonut(DeactivateDonutRoof);
			VoidRaidGauntletController.TryOpenGauntlet += new hook_TryOpenGauntlet(BlockGauntletInPhase3);
			ProjectileDirectionalTargetFinder.SearchForTarget += new hook_SearchForTarget(TweakSingularitySearch);
			ChargeFire.OnEnter += new hook_OnEnter(LazyMf);
			DeathState.OnEnter += new hook_OnEnter(FixDeathState);
			DeathState.OnExit += new hook_OnExit(KillJointsOnDeath);
			object obj = <>O.<0>__PreventFog;
			if (obj == null)
			{
				hook_RequestFog val = PreventFog;
				<>O.<0>__PreventFog = val;
				obj = (object)val;
			}
			VoidStageMissionController.RequestFog += (hook_RequestFog)obj;
			Stage.onServerStageBegin += SpawnCauldrons;
			object obj2 = <>O.<2>__SpawnVoidMoonPortal;
			if (obj2 == null)
			{
				hook_AttemptToSpawnAllEligiblePortals val2 = SpawnVoidMoonPortal;
				<>O.<2>__SpawnVoidMoonPortal = val2;
				obj2 = (object)val2;
			}
			TeleporterInteraction.AttemptToSpawnAllEligiblePortals += (hook_AttemptToSpawnAllEligiblePortals)obj2;
		}

		private void DeactivateDonutRoof(orig_RpcActivateDonut orig, VoidRaidGauntletController self, int donutIndex)
		{
			orig.Invoke(self, donutIndex);
			DonutInfo currentDonut = self.currentDonut;
			object obj;
			if (currentDonut == null)
			{
				obj = null;
			}
			else
			{
				GameObject root = currentDonut.root;
				obj = ((root != null) ? root.transform : null);
			}
			Transform val = (Transform)obj;
			if (!Object.op_Implicit((Object)(object)val))
			{
				return;
			}
			if (((Object)val).name == "RaidDC")
			{
				Transform val2 = val.Find("HOLDER: ROOF");
				if (Object.op_Implicit((Object)(object)val2) && ((Component)val2).gameObject.activeSelf)
				{
					((Component)val2).gameObject.SetActive(false);
				}
			}
			Transform val3 = val.Find("HOLDER: Scripting");
			if (!Object.op_Implicit((Object)(object)val3))
			{
				return;
			}
			Transform val4 = val3.Find("CombatDirector");
			if (Object.op_Implicit((Object)(object)val4))
			{
				CombatDirector component = ((Component)val4).GetComponent<CombatDirector>();
				if (Object.op_Implicit((Object)(object)component))
				{
					((Behaviour)component).enabled = false;
				}
			}
		}

		private bool BlockGauntletInPhase3(orig_TryOpenGauntlet orig, VoidRaidGauntletController self, Vector3 entrancePosition, NetworkInstanceId bossMasterId)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			FathomlessMissionController instance = FathomlessMissionController.instance;
			if (instance != null && instance.GetCurrentPhase() == 2)
			{
				return false;
			}
			return orig.Invoke(self, entrancePosition, bossMasterId);
		}

		private void PreventJointRegen(orig_RegenerateServer orig, LegController self)
		{
		}

		private void FixPipReviveBug(orig_OnBodyStart orig, CharacterMaster self, CharacterBody body)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, body);
			if (!body.isPlayerControlled)
			{
				return;
			}
			Scene activeScene = SceneManager.GetActiveScene();
			if (((Scene)(ref activeScene)).name == "voidraid" && body.HasBuff(Buffs.Immune))
			{
				GameObject val = GameObject.Find("VoidRaidCrabBody(Clone)");
				if (Object.op_Implicit((Object)(object)val))
				{
					val.GetComponent<VoidRaidCrabHealthBarOverlayProvider>().OnEnable();
				}
			}
		}

		private void LazyMf(orig_OnEnter orig, ChargeFire self)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			Scene activeScene = SceneManager.GetActiveScene();
			if (((Scene)(ref activeScene)).name == "voidraid")
			{
				((EntityState)self).outer.SetState((EntityState)(object)new ChargeGravityBullet());
			}
			else
			{
				orig.Invoke(self);
			}
		}

		private void FixDeathState(orig_OnEnter orig, DeathState self)
		{
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			if (((Object)((EntityState)self).characterBody).name == "VoidRaidCrabBody(Clone)")
			{
				self.animationStateName = "ChargeWipe";
				self.animationPlaybackRateParam = "Wipe.playbackRate";
				self.addPrintController = false;
				orig.Invoke(self);
				PrintController obj = ((Component)self.modelTransform).gameObject.AddComponent<PrintController>();
				obj.printTime = self.printDuration;
				((Behaviour)obj).enabled = true;
				obj.startingPrintHeight = 200f;
				obj.maxPrintHeight = 500f;
				obj.startingPrintBias = self.startingPrintBias;
				obj.maxPrintBias = self.maxPrintBias;
				obj.disableWhenFinished = false;
				obj.printCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
				Transform val = ((EntityState)self).characterBody.transform.Find("WallHolder");
				if (Object.op_Implicit((Object)(object)val))
				{
					Object.Destroy((Object)(object)((Component)val).gameObject);
				}
				CharacterBody val2 = FathomlessMissionController.instance?.hauntBody;
				if (Object.op_Implicit((Object)(object)val2))
				{
					val2.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo));
				}
			}
			else
			{
				orig.Invoke(self);
			}
		}

		private void KillJointsOnDeath(orig_OnExit orig, DeathState self)
		{
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Expected O, but got Unknown
			orig.Invoke(self);
			if (((Object)((EntityState)self).characterBody).name != "VoidRaidCrabBody(Clone)")
			{
				return;
			}
			if (Object.op_Implicit((Object)(object)VoidRaidGauntletController.instance))
			{
				VoidRaidGauntletController.instance.SpawnOutroPortal();
			}
			foreach (TeamComponent item in TeamComponent.GetTeamMembers((TeamIndex)4).ToList())
			{
				CharacterBody component = ((Component)item).GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component) && !(((Object)component).name != "VoidRaidCrabJointBody(Clone)"))
				{
					EntityStateMachine val = ((IEnumerable<EntityStateMachine>)((Component)component).GetComponents<EntityStateMachine>()).FirstOrDefault((Func<EntityStateMachine, bool>)((EntityStateMachine e) => e.customName == "Body"));
					if (Object.op_Implicit((Object)(object)val))
					{
						val.SetState((EntityState)new DeathState());
					}
				}
			}
		}

		private void TriggerWardWipe()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			FathomlessMissionController instance = FathomlessMissionController.instance;
			if (Object.op_Implicit((Object)(object)instance) && Object.op_Implicit((Object)(object)instance.voidlingBody))
			{
				CharacterBody voidlingBody = instance.voidlingBody;
				voidlingBody.RemoveBuff(Buffs.HiddenInvincibility);
				voidlingBody.healthComponent.TakeDamage(new DamageInfo
				{
					damage = 100000000f,
					position = voidlingBody.corePosition
				});
				voidlingBody.AddBuff(Buffs.HiddenInvincibility);
				EntityStateMachine val = ((Component)voidlingBody).gameObject.GetComponents<EntityStateMachine>().First((EntityStateMachine esm) => esm.customName == "Body");
				voidlingBody.skillLocator.special.SetSkillOverride((object)val, Main.sdWardWipe, (SkillOverridePriority)4);
				voidlingBody.skillLocator.special.AddOneStock();
				if (Object.op_Implicit((Object)(object)instance.wardWipeDriver))
				{
					((Behaviour)instance.wardWipeDriver).enabled = true;
				}
				if (Object.op_Implicit((Object)(object)instance.singularityDriver))
				{
					((Behaviour)instance.singularityDriver).enabled = false;
				}
				if (Object.op_Implicit((Object)(object)instance.mazeDriver))
				{
					((Behaviour)instance.mazeDriver).enabled = false;
				}
				if (Object.op_Implicit((Object)(object)instance.fireMissileDriver))
				{
					((Behaviour)instance.fireMissileDriver).enabled = false;
				}
				if (Object.op_Implicit((Object)(object)instance.multibeamDriver))
				{
					((Behaviour)instance.multibeamDriver).enabled = false;
				}
			}
		}

		private void OnJointThreshold(HealthComponent hc, CharacterBody body, JointThresholdController jtc, float thresholdFraction, int phase)
		{
			body.AddBuff(Buffs.Immune);
			hc.health = hc.fullHealth * thresholdFraction;
			jtc.reachedThreshold = true;
			FathomlessMissionController instance = FathomlessMissionController.instance;
			if (Object.op_Implicit((Object)(object)instance))
			{
				if (phase == 0 && Object.op_Implicit((Object)(object)instance.singularityDriver) && !((Behaviour)instance.singularityDriver).enabled)
				{
					((Behaviour)instance.singularityDriver).enabled = true;
				}
				if (phase == 1 && Object.op_Implicit((Object)(object)instance.mazeDriver) && !((Behaviour)instance.mazeDriver).enabled)
				{
					((Behaviour)instance.mazeDriver).enabled = true;
					body.skillLocator.special.AddOneStock();
				}
			}
			if (JointThresholdController.AllJointsReachedThreshold())
			{
				TriggerWardWipe();
			}
		}

		private void OnJointFinalThreshold(DamageReport damageReport, HealthComponent hc, CharacterBody body, JointThresholdController jtc)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			damageReport.damageDealt = 0f;
			hc.health = 1f;
			body.AddBuff(Buffs.Immune);
			jtc.reachedThreshold = true;
			if (!JointThresholdController.AllJointsReachedThreshold())
			{
				return;
			}
			FathomlessMissionController instance = FathomlessMissionController.instance;
			if (instance != null)
			{
				CharacterBody voidlingBody = instance.voidlingBody;
				if (voidlingBody != null)
				{
					voidlingBody.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo));
				}
			}
			foreach (TeamComponent item in TeamComponent.GetTeamMembers((TeamIndex)4).ToList())
			{
				CharacterBody component = ((Component)item).GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component) && ((Object)component).name == "VoidRaidCrabJointBody(Clone)")
				{
					component.SetBuffCount(Buffs.Immune.buffIndex, 0);
					component.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo));
				}
			}
		}

		private void ThresholdCheck(orig_SendDamageDealt orig, DamageReport damageReport)
		{
			if (Object.op_Implicit((Object)(object)damageReport.victim))
			{
				HealthComponent component = ((Component)damageReport.victim).gameObject.GetComponent<HealthComponent>();
				if (Object.op_Implicit((Object)(object)component))
				{
					CharacterBody body = component.body;
					if (Object.op_Implicit((Object)(object)body) && ((Object)body).name == "VoidRaidCrabJointBody(Clone)")
					{
						JointThresholdController component2 = ((Component)body).GetComponent<JointThresholdController>();
						if (Object.op_Implicit((Object)(object)component2) && !component2.reachedThreshold)
						{
							int num = FathomlessMissionController.instance?.GetCurrentPhase() ?? (-1);
							if (component2.nextCleansePercent > 0f && component.health <= component.fullHealth * component2.nextCleansePercent)
							{
								component2.CleanseDebuffs();
								component2.nextCleansePercent -= 0.05f;
							}
							if (num >= 0 && num <= 1)
							{
								float thresholdForPhase = component2.GetThresholdForPhase(num);
								if (thresholdForPhase > 0f && component.health <= component.fullHealth * thresholdForPhase)
								{
									OnJointThreshold(component, body, component2, thresholdForPhase, num);
								}
							}
							else if (num == 2 && component.health <= 0f)
							{
								OnJointFinalThreshold(damageReport, component, body, component2);
							}
						}
					}
				}
			}
			orig.Invoke(damageReport);
		}

		private void TweakBossDirector(orig_Start orig, SceneDirector self)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			Scene activeScene = SceneManager.GetActiveScene();
			if (((Scene)(ref activeScene)).name == "voidraid")
			{
				GameObject val = GameObject.Find("EncounterPhases");
				GameObject gameObject = ((Component)val.transform.GetChild(0)).gameObject;
				if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)gameObject))
				{
					DelayedEvent component = gameObject.GetComponent<DelayedEvent>();
					if (Object.op_Implicit((Object)(object)component))
					{
						Object.Destroy((Object)(object)component);
					}
					gameObject.AddComponent<FathomlessMissionController>();
					Transform val2 = val.transform.GetChild(1).Find("Music");
					if (Object.op_Implicit((Object)(object)val2))
					{
						((Object)val2).name = "Phase2Music";
						val2.SetParent(gameObject.transform);
					}
					((Component)val.transform.GetChild(1)).gameObject.SetActive(false);
					((Component)val.transform.GetChild(2)).gameObject.SetActive(false);
					Transform transform = new GameObject().transform;
					transform.position = new Vector3(0f, -15f, 0f);
					SpawnInfo val3 = default(SpawnInfo);
					val3.explicitSpawnPosition = transform;
					val3.spawnCard = Main.bigVoidlingCard;
					gameObject.GetComponent<ScriptedCombatEncounter>().spawns = (SpawnInfo[])(object)new SpawnInfo[1] { val3 };
					Transform child = GameObject.Find("RaidVoid").transform.GetChild(5);
					((Component)child.GetChild(1)).GetComponent<PlayableDirector>().playableAsset = (PlayableAsset)(object)Main.introTimeline;
					Transform child2 = child.GetChild(2);
					child2.position = new Vector3(-110.27766f, 15f, -300f);
					child2.GetChild(0).position = new Vector3(-50f, 28.9719f, -396.993f);
				}
			}
			orig.Invoke(self);
		}

		private static FogRequest PreventFog(orig_RequestFog orig, VoidStageMissionController self, IZone zone)
		{
			if (ModConfig.enableFog.Value)
			{
				return orig.Invoke(self, zone);
			}
			return null;
		}

		private static void SpawnVoidMoonPortal(orig_AttemptToSpawnAllEligiblePortals orig, TeleporterInteraction self)
		{
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: 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_00a4: Unknown result type (might be due to