Decompiled source of MirrorAndTrueArtifacts v1.1.2

TrueArtifacts.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using EntityStates.LunarExploderMonster;
using EntityStates.VoidInfestor;
using HG;
using IL.RoR2;
using JetBrains.Annotations;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates.VoidInfestor;
using On.RoR2;
using On.RoR2.UI;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Artifacts;
using RoR2.ExpansionManagement;
using RoR2.Projectile;
using RoR2.UI;
using TrueArtifacts.Aritfacts;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TrueArtifacts")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6bdcc38ca642ee0d8c15c2029063442d420669c7")]
[assembly: AssemblyProduct("TrueArtifacts")]
[assembly: AssemblyTitle("TrueArtifacts")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace TrueArtifacts
{
	internal static class Assets
	{
		public static AssetBundle Bundle;

		public static PluginInfo PluginInfo;

		public static string Folder = "TrueArtifacts\\";

		internal static string assemblyDir => Path.GetDirectoryName(PluginInfo.Location);

		internal static void Init(PluginInfo info)
		{
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Expected O, but got Unknown
			PluginInfo = info;
			if (!Directory.Exists(GetPathToFile(Folder)))
			{
				Folder = "";
			}
			if (Directory.Exists(GetPathToFile(Folder + "Languages")))
			{
				Language.SetFolders += new hook_SetFolders(SetFolders);
			}
			else
			{
				Debug.LogWarning((object)"COULD NOT FIND LANGUAGES FOLDER");
			}
			if (Directory.Exists(GetPathToFile(Folder + "AssetBundles")))
			{
				Bundle = AssetBundle.LoadFromFile(GetPathToFile(Folder + "AssetBundles", "true_artifacts"));
			}
			else
			{
				Debug.LogWarning((object)"COULD NOT FIND ASSETBUNDLES FOLDER");
			}
		}

		private static void SetFolders(orig_SetFolders orig, Language self, IEnumerable<string> newFolders)
		{
			IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(GetPathToFile(Folder + "Languages")), self.name);
			orig.Invoke(self, newFolders.Union(second));
		}

		internal static string GetPathToFile(string folderName)
		{
			return Path.Combine(assemblyDir, folderName);
		}

		internal static string GetPathToFile(string folderName, string fileName)
		{
			return Path.Combine(assemblyDir, folderName, fileName);
		}
	}
	public class WConfig
	{
		public static ConfigEntry<bool> EnableMirrorArtifacts;

		public static ConfigEntry<bool> EnableTrueArtifacts;

		public static ConfigEntry<bool> MirrorKinDisplay;

		public static ConfigEntry<bool> MirrirSwarmsInfestor;

		public static ConfigEntry<bool> TrueDissoEliteStuff;

		public static ConfigEntry<bool> TrueEvoExtraTags;

		public static ConfigEntry<float> MirrorEnigmaChance;

		public static ConfigEntry<bool> SortAtEnd;

		public static ConfigEntry<bool> DebugPrint;

		internal static void InitConfig()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			ConfigFile val = new ConfigFile(Paths.ConfigPath + "\\Wolfo.True_Artifacts.cfg", true);
			MirrorKinDisplay = val.Bind<bool>("Mirror", "Mirror Kin Enemy Display", true, "Regular Kin does so seemed fitting to do it here too.");
			MirrorEnigmaChance = val.Bind<float>("Mirror", "Mirror Enigma Chance", 10f, "Chance to replace items and equipment with a random one.");
			SortAtEnd = val.Bind<bool>("Main", "Sort Artifacts to end of list", true, "If you don't like or mind the color mish mash");
			TrueEvoExtraTags = val.Bind<bool>("True", "True Evolution Extra Blacklist", false, "Blacklist OnKill items, which rarely come into play but may make minions and drones a detrimen. And BrotherBlacklist items such as Tougher Times and SaferSpaces");
			DebugPrint = val.Bind<bool>("Other", "Enable Debug Info", false, "If you do not need this better to leave it off");
			RiskConfig();
		}

		public static void RiskConfig()
		{
		}
	}
	public static class ArrayUtil
	{
		public static T[] Add<T>(this T[] array, params T[] items)
		{
			return (array ?? Enumerable.Empty<T>()).Concat(items).ToArray();
		}

		public static T[] Remove<T>(this T[] array, params T[] items)
		{
			return (array ?? Enumerable.Empty<T>()).Except(items).ToArray();
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Wolfo.TrueArtifacts", "TrueArtifacts", "1.2.0")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class Main : BaseUnityPlugin
	{
		public static ArtifactDef Mirror_Kin = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef Mirror_Glass = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef Mirror_Sacrifice = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef Mirror_Honor = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef Mirror_Frailty = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef Mirror_Spite = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef True_Command = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef True_Dissonance = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef True_Swarms = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef True_Frailty = ScriptableObject.CreateInstance<ArtifactDef>();

		public static ArtifactDef True_Evolution = ScriptableObject.CreateInstance<ArtifactDef>();

		public void Awake()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			Assets.Init(((BaseUnityPlugin)this).Info);
			WConfig.InitConfig();
			CreateArtifacts();
			RunArtifactManager.onArtifactEnabledGlobal += new ArtifactStateChangeDelegate(Artifact_Enabled);
			RunArtifactManager.onArtifactDisabledGlobal += new ArtifactStateChangeDelegate(Artifact_Disable);
			TrueCommand.Start();
			TrueEvolution.Start();
			MirrorSacrifice.Start();
			((ResourceAvailability)(ref ArtifactCatalog.availability)).CallWhenAvailable((Action)CallLate);
		}

		public static void CallLate()
		{
			MirrorKin.MakeDCCSPool();
			Mirror_Kin.unlockableDef = Artifacts.Swarms.unlockableDef;
			Mirror_Kin.pickupModelPrefab = Artifacts.Swarms.pickupModelPrefab;
			Mirror_Glass.unlockableDef = Artifacts.Glass.unlockableDef;
			Mirror_Glass.pickupModelPrefab = Artifacts.Glass.pickupModelPrefab;
			Mirror_Sacrifice.unlockableDef = Artifacts.Sacrifice.unlockableDef;
			Mirror_Sacrifice.pickupModelPrefab = Artifacts.Sacrifice.pickupModelPrefab;
			Mirror_Honor.unlockableDef = Artifacts.EliteOnly.unlockableDef;
			Mirror_Honor.pickupModelPrefab = Artifacts.EliteOnly.pickupModelPrefab;
			Mirror_Frailty.unlockableDef = Artifacts.EliteOnly.unlockableDef;
			Mirror_Frailty.pickupModelPrefab = Artifacts.EliteOnly.pickupModelPrefab;
			True_Command.unlockableDef = Artifacts.Command.unlockableDef;
			True_Command.pickupModelPrefab = Artifacts.Command.pickupModelPrefab;
			True_Dissonance.unlockableDef = Artifacts.MixEnemy.unlockableDef;
			True_Dissonance.pickupModelPrefab = Artifacts.MixEnemy.pickupModelPrefab;
			True_Dissonance.unlockableDef = Artifacts.MixEnemy.unlockableDef;
			True_Dissonance.pickupModelPrefab = Artifacts.MixEnemy.pickupModelPrefab;
			True_Swarms.unlockableDef = Artifacts.Swarms.unlockableDef;
			True_Swarms.pickupModelPrefab = Artifacts.Swarms.pickupModelPrefab;
			True_Frailty.unlockableDef = Artifacts.WeakAssKnees.unlockableDef;
			True_Frailty.pickupModelPrefab = Artifacts.WeakAssKnees.pickupModelPrefab;
			True_Evolution.unlockableDef = Artifacts.MonsterTeamGainsItems.unlockableDef;
			True_Evolution.pickupModelPrefab = Artifacts.MonsterTeamGainsItems.pickupModelPrefab;
		}

		public static void CreateArtifacts()
		{
			//IL_00d2: 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_00e7: 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_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: 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_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0341: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0458: Unknown result type (might be due to invalid IL or missing references)
			//IL_0459: Unknown result type (might be due to invalid IL or missing references)
			//IL_046c: Unknown result type (might be due to invalid IL or missing references)
			//IL_046d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0507: Unknown result type (might be due to invalid IL or missing references)
			//IL_0508: Unknown result type (might be due to invalid IL or missing references)
			//IL_058e: 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_05a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0629: Unknown result type (might be due to invalid IL or missing references)
			//IL_062a: Unknown result type (might be due to invalid IL or missing references)
			//IL_063d: Unknown result type (might be due to invalid IL or missing references)
			//IL_063e: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ce: Unknown result type (might be due to invalid IL or missing references)
			string text = "";
			string text2 = "";
			string text3 = "";
			if (WConfig.SortAtEnd.Value)
			{
				text3 = "ZZTM_";
				text2 = "ZZT_";
				text = "ZZM_";
			}
			Rect val = default(Rect);
			((Rect)(ref val))..ctor(0f, 0f, 64f, 64f);
			Vector2 val2 = default(Vector2);
			((Vector2)(ref val2))..ctor(0f, 0f);
			Texture2D val3 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Kin_On.png");
			Texture2D val4 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Kin_Off.png");
			((Texture)val3).filterMode = (FilterMode)2;
			((Texture)val4).filterMode = (FilterMode)2;
			Mirror_Kin.cachedName = text + "SingleMonsterTypeMirrorKin";
			Mirror_Kin.nameToken = "ARTIFACT_MIRROR_KIN_NAME";
			Mirror_Kin.descriptionToken = "ARTIFACT_MIRROR_KIN_DESC";
			Mirror_Kin.smallIconSelectedSprite = Sprite.Create(val3, val, val2);
			Mirror_Kin.smallIconDeselectedSprite = Sprite.Create(val4, val, val2);
			Texture2D val5 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Glass_On.png");
			Texture2D val6 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Glass_Off.png");
			((Texture)val5).filterMode = (FilterMode)2;
			((Texture)val6).filterMode = (FilterMode)2;
			Mirror_Glass.cachedName = text + "GlassMirrorGlass";
			Mirror_Glass.nameToken = "ARTIFACT_MIRROR_GLASS_NAME";
			Mirror_Glass.descriptionToken = "ARTIFACT_MIRROR_GLASS_DESC";
			Mirror_Glass.smallIconSelectedSprite = Sprite.Create(val5, val, val2);
			Mirror_Glass.smallIconDeselectedSprite = Sprite.Create(val6, val, val2);
			ContentAddition.AddArtifactDef(Mirror_Glass);
			Texture2D val7 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Command_On.png");
			Texture2D val8 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Command_Off.png");
			((Texture)val7).filterMode = (FilterMode)2;
			((Texture)val8).filterMode = (FilterMode)2;
			True_Command.cachedName = text2 + "CommandTrueCommand";
			True_Command.nameToken = "ARTIFACT_TRUE_COMMAND_NAME";
			True_Command.descriptionToken = "ARTIFACT_TRUE_COMMAND_DESC";
			True_Command.smallIconSelectedSprite = Sprite.Create(val7, val, val2);
			True_Command.smallIconDeselectedSprite = Sprite.Create(val8, val, val2);
			ContentAddition.AddArtifactDef(True_Command);
			Texture2D val9 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Dissonance_On.png");
			Texture2D val10 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Dissonance_Off.png");
			((Texture)val9).filterMode = (FilterMode)2;
			((Texture)val10).filterMode = (FilterMode)2;
			True_Dissonance.cachedName = text2 + "MixEnemyTrueDissonance";
			True_Dissonance.nameToken = "ARTIFACT_TRUE_DISSONANCE_NAME";
			True_Dissonance.descriptionToken = "ARTIFACT_TRUE_DISSONANCE_DESC";
			True_Dissonance.smallIconSelectedSprite = Sprite.Create(val9, val, val2);
			True_Dissonance.smallIconDeselectedSprite = Sprite.Create(val10, val, val2);
			Texture2D val11 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Swarms_On.png");
			Texture2D val12 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Swarms_Off.png");
			((Texture)val11).filterMode = (FilterMode)2;
			((Texture)val12).filterMode = (FilterMode)2;
			True_Swarms.cachedName = text2 + "SwarmsTrueSwarms";
			True_Swarms.nameToken = "ARTIFACT_TRUE_SWARMS_NAME";
			True_Swarms.descriptionToken = "ARTIFACT_TRUE_SWARMS_DESC";
			True_Swarms.smallIconSelectedSprite = Sprite.Create(val11, val, val2);
			True_Swarms.smallIconDeselectedSprite = Sprite.Create(val12, val, val2);
			ContentAddition.AddArtifactDef(True_Swarms);
			Texture2D val13 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Frailty_On.png");
			Texture2D val14 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Frailty_Off.png");
			((Texture)val13).filterMode = (FilterMode)2;
			((Texture)val14).filterMode = (FilterMode)2;
			True_Frailty.cachedName = text2 + "WeakAssKneesTrueFrailty";
			True_Frailty.nameToken = "ARTIFACT_TRUE_FRAILTY_NAME";
			True_Frailty.descriptionToken = "ARTIFACT_TRUE_FRAILTY_DESC";
			True_Frailty.smallIconSelectedSprite = Sprite.Create(val13, val, val2);
			True_Frailty.smallIconDeselectedSprite = Sprite.Create(val14, val, val2);
			Texture2D val15 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Evolution_On.png");
			Texture2D val16 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/True_Evolution_Off.png");
			((Texture)val15).filterMode = (FilterMode)2;
			((Texture)val16).filterMode = (FilterMode)2;
			True_Evolution.cachedName = text2 + "MonsterTeamGainsItemsTrueEvolution";
			True_Evolution.nameToken = "ARTIFACT_TRUE_EVOLUTION_NAME";
			True_Evolution.descriptionToken = "ARTIFACT_TRUE_EVOLUTION_DESC";
			True_Evolution.smallIconSelectedSprite = Sprite.Create(val15, val, val2);
			True_Evolution.smallIconDeselectedSprite = Sprite.Create(val16, val, val2);
			ContentAddition.AddArtifactDef(True_Evolution);
			Texture2D val17 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Sacrifice_On.png");
			Texture2D val18 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Sacrifice_Off.png");
			((Texture)val17).filterMode = (FilterMode)2;
			((Texture)val18).filterMode = (FilterMode)2;
			Mirror_Sacrifice.cachedName = text + "SacrificeMirrorSacrifice";
			Mirror_Sacrifice.nameToken = "ARTIFACT_MIRROR_SACRIFICE_NAME";
			Mirror_Sacrifice.descriptionToken = "ARTIFACT_MIRROR_SACRIFICE_DESC";
			Mirror_Sacrifice.smallIconSelectedSprite = Sprite.Create(val17, val, val2);
			Mirror_Sacrifice.smallIconDeselectedSprite = Sprite.Create(val18, val, val2);
			ContentAddition.AddArtifactDef(Mirror_Sacrifice);
			Texture2D val19 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Honor_On.png");
			Texture2D val20 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Honor_Off.png");
			((Texture)val19).filterMode = (FilterMode)2;
			((Texture)val20).filterMode = (FilterMode)2;
			Mirror_Honor.cachedName = text + "EliteOnlyMirrorHonor";
			Mirror_Honor.nameToken = "ARTIFACT_MIRROR_HONOR_NAME";
			Mirror_Honor.descriptionToken = "ARTIFACT_MIRROR_HONOR_DESC";
			Mirror_Honor.smallIconSelectedSprite = Sprite.Create(val19, val, val2);
			Mirror_Honor.smallIconDeselectedSprite = Sprite.Create(val20, val, val2);
			ContentAddition.AddArtifactDef(Mirror_Honor);
			Texture2D val21 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Frailty_On.png");
			Texture2D val22 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Frailty_Off.png");
			((Texture)val21).filterMode = (FilterMode)2;
			((Texture)val22).filterMode = (FilterMode)2;
			Mirror_Frailty.cachedName = text + "WeakAssKneesMirrorFrailty";
			Mirror_Frailty.nameToken = "ARTIFACT_MIRROR_FRAILTY_NAME";
			Mirror_Frailty.descriptionToken = "ARTIFACT_MIRROR_FRAILTY_DESC";
			Mirror_Frailty.smallIconSelectedSprite = Sprite.Create(val21, val, val2);
			Mirror_Frailty.smallIconDeselectedSprite = Sprite.Create(val22, val, val2);
			Texture2D val23 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Spite_On.png");
			Texture2D val24 = Assets.Bundle.LoadAsset<Texture2D>("Assets/TrueArtifacts/Mirror_Spite_Off.png");
			((Texture)val23).filterMode = (FilterMode)2;
			((Texture)val24).filterMode = (FilterMode)2;
			Mirror_Spite.cachedName = text + "BombMirrorSpite";
			Mirror_Spite.nameToken = "ARTIFACT_MIRROR_SPITE_NAME";
			Mirror_Spite.descriptionToken = "ARTIFACT_MIRROR_SPITE_DESC";
			Mirror_Spite.smallIconSelectedSprite = Sprite.Create(val23, val, val2);
			Mirror_Spite.smallIconDeselectedSprite = Sprite.Create(val24, val, val2);
		}

		private void Artifact_Enabled([NotNull] RunArtifactManager runArtifactManager, [NotNull] ArtifactDef artifactDef)
		{
			if ((Object)(object)artifactDef == (Object)(object)True_Command)
			{
				TrueCommand.On_Artifact_Enable();
				runArtifactManager.SetArtifactEnabled(Artifacts.Command, false);
			}
			else if ((Object)(object)artifactDef == (Object)(object)True_Swarms)
			{
				TrueSwarms.On_Artifact_Enable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)Mirror_Glass)
			{
				MirrorGlass.On_Artifact_Enable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)True_Evolution)
			{
				TrueEvolution.On_Artifact_Enable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)Mirror_Sacrifice)
			{
				MirrorSacrifice.On_Artifact_Enable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)Mirror_Honor)
			{
				MirrorHonor.On_Artifact_Enable();
			}
		}

		private void Artifact_Disable([NotNull] RunArtifactManager runArtifactManager, [NotNull] ArtifactDef artifactDef)
		{
			if ((Object)(object)artifactDef == (Object)(object)True_Command)
			{
				TrueCommand.On_Artifact_Disable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)True_Swarms)
			{
				TrueSwarms.On_Artifact_Disable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)Mirror_Glass)
			{
				MirrorGlass.On_Artifact_Disable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)True_Evolution)
			{
				TrueEvolution.On_Artifact_Disable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)Mirror_Sacrifice)
			{
				MirrorSacrifice.On_Artifact_Disable();
			}
			else if ((Object)(object)artifactDef == (Object)(object)Mirror_Honor)
			{
				MirrorHonor.On_Artifact_Disable();
			}
		}
	}
}
namespace TrueArtifacts.Aritfacts
{
	public class MirrorFrailty
	{
		public static void On_Artifact_Disable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			JumpVolume.OnTriggerStay -= new hook_OnTriggerStay(JumpVolume_OnTriggerStay);
			SetGravity.OnEnable -= new hook_OnEnable(SetGravity_OnEnable);
			Run.baseGravity /= 2f;
			Physics.gravity = new Vector3(0f, Run.baseGravity, 0f);
		}

		public static void On_Artifact_Enable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			JumpVolume.OnTriggerStay += new hook_OnTriggerStay(JumpVolume_OnTriggerStay);
			SetGravity.OnEnable += new hook_OnEnable(SetGravity_OnEnable);
			Run.baseGravity *= 2f;
			Physics.gravity = new Vector3(0f, Run.baseGravity, 0f);
		}

		private static void JumpVolume_OnTriggerStay(orig_OnTriggerStay orig, JumpVolume self, Collider other)
		{
			//IL_003b: 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_004a: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, other);
			CharacterMotor component = ((Component)other).GetComponent<CharacterMotor>();
			if (Object.op_Implicit((Object)(object)component) && component.hasEffectiveAuthority && !component.doNotTriggerJumpVolumes)
			{
				Debug.Log((object)component);
				component.velocity = self.jumpVelocity * 1.4f;
			}
		}

		private static void SetGravity_OnEnable(orig_OnEnable orig, SetGravity self)
		{
			self.newGravity *= 2f;
			orig.Invoke(self);
		}
	}
	public class MirrorGlass
	{
		public static void On_Artifact_Disable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			RecalculateStatsAPI.GetStatCoefficients -= new StatHookEventHandler(R2API_Stats);
			CharacterBody.RecalculateStats -= new hook_RecalculateStats(CharacterBody_RecalculateStats);
			PickupDropletController.OnCollisionEnter -= new hook_OnCollisionEnter(DoubleItems);
			PurchaseInteraction.Start -= new hook_Start(DoubleItemPrices);
		}

		public static void On_Artifact_Enable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(R2API_Stats);
			CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats);
			PickupDropletController.OnCollisionEnter += new hook_OnCollisionEnter(DoubleItems);
			PurchaseInteraction.Start += new hook_Start(DoubleItemPrices);
		}

		private static void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (self.isPlayerControlled)
			{
				self.isGlass = true;
			}
		}

		private static void R2API_Stats(CharacterBody sender, StatHookEventArgs args)
		{
			if (sender.isPlayerControlled)
			{
				args.baseCurseAdd += 1f;
			}
		}

		private static void DoubleItems(orig_OnCollisionEnter orig, PickupDropletController self, Collision collision)
		{
			//IL_0017: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: 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_002c: Invalid comparison between Unknown and I4
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: 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)
			if (!NetworkServer.active || !self.alive)
			{
				return;
			}
			PickupIndex pickupIndex = self.pickupIndex;
			ItemIndex itemIndex = ((PickupIndex)(ref pickupIndex)).pickupDef.itemIndex;
			if ((int)itemIndex != -1)
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
				if (((Object)itemDef).name.StartsWith("Scrap"))
				{
					orig.Invoke(self, collision);
					return;
				}
			}
			self.createPickupInfo.position = ((Component)self).transform.position;
			self.CreatePickup();
			orig.Invoke(self, collision);
		}

		private static void DoubleItemPrices(orig_Start orig, PurchaseInteraction self)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Invalid comparison between Unknown and I4
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Invalid comparison between Unknown and I4
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Invalid comparison between Unknown and I4
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Invalid comparison between Unknown and I4
			orig.Invoke(self);
			if ((int)self.costType == 4 || (int)self.costType == 5 || (int)self.costType == 6 || (int)self.costType == 10)
			{
				self.cost *= 2;
			}
		}
	}
	public class MirrorHonor
	{
		public static float MaxLevel = 199f;

		public static void On_Artifact_Enable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			Run.RecalculateDifficultyCoefficent += new hook_RecalculateDifficultyCoefficent(Run_RecalculateDifficultyCoefficent);
			InfiniteTowerRun.RecalculateDifficultyCoefficentInternal += new hook_RecalculateDifficultyCoefficentInternal(InfiniteTowerRun_RecalculateDifficultyCoefficentInternal);
			MaxLevel = Math.Max((Run.ambientLevelCap + 1) * 2, MaxLevel);
			if (MaxLevel < 1000f)
			{
				MaxLevel = 999f;
			}
		}

		private static void InfiniteTowerRun_RecalculateDifficultyCoefficentInternal(orig_RecalculateDifficultyCoefficentInternal orig, InfiniteTowerRun self)
		{
			orig.Invoke(self);
			((Run)self).difficultyCoefficient = ((Run)self).difficultyCoefficient * 2f;
			((Run)self).compensatedDifficultyCoefficient = ((Run)self).compensatedDifficultyCoefficient * 2f;
			((Run)self).ambientLevel = Mathf.Min((((Run)self).difficultyCoefficient - 1f) / 0.33f + 1f, 10000f);
			((Run)self).ambientLevelFloor = Mathf.FloorToInt(((Run)self).ambientLevel);
		}

		private static void Run_RecalculateDifficultyCoefficent(orig_RecalculateDifficultyCoefficent orig, Run self)
		{
			orig.Invoke(self);
			self.difficultyCoefficient *= 2f;
			self.compensatedDifficultyCoefficient *= 2f;
			float num = 0.7f + (float)self.participatingPlayerCount * 0.3f;
			self.ambientLevel = Mathf.Min((self.difficultyCoefficient - num) / 0.33f + 1f, MaxLevel);
			self.ambientLevelFloor = Mathf.FloorToInt(self.ambientLevel);
		}

		public static void On_Artifact_Disable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			Run.RecalculateDifficultyCoefficent -= new hook_RecalculateDifficultyCoefficent(Run_RecalculateDifficultyCoefficent);
			InfiniteTowerRun.RecalculateDifficultyCoefficentInternal -= new hook_RecalculateDifficultyCoefficentInternal(InfiniteTowerRun_RecalculateDifficultyCoefficentInternal);
		}
	}
	public class MirrorKin
	{
		public static DccsPool dpAllFamilies;

		public static FamilyDirectorCardCategorySelection dccsFamilyTrueDisso;

		public static void MakeDCCSPool()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: 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_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Expected O, but got Unknown
			//IL_01c5: 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_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Expected O, but got Unknown
			//IL_01f1: 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_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Expected O, but got Unknown
			//IL_021d: 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_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Expected O, but got Unknown
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: 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_0273: Expected O, but got Unknown
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: 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_0285: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Expected O, but got Unknown
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Expected O, but got Unknown
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Expected O, but got Unknown
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_0317: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Expected O, but got Unknown
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0330: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_0343: Unknown result type (might be due to invalid IL or missing references)
			//IL_034f: Expected O, but got Unknown
			//IL_035e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_0369: Unknown result type (might be due to invalid IL or missing references)
			//IL_036e: Unknown result type (might be due to invalid IL or missing references)
			//IL_037c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0387: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Expected O, but got Unknown
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03af: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: Expected O, but got Unknown
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Expected O, but got Unknown
			//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0402: Unknown result type (might be due to invalid IL or missing references)
			//IL_0407: Unknown result type (might be due to invalid IL or missing references)
			//IL_0415: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0428: Expected O, but got Unknown
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Expected O, but got Unknown
			//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d6: Expected O, but got Unknown
			//IL_0545: Unknown result type (might be due to invalid IL or missing references)
			//IL_054c: Expected O, but got Unknown
			//IL_00f1: 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_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Expected O, but got Unknown
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: 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_0134: Expected O, but got Unknown
			//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_0142: 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_015a: Expected O, but got Unknown
			Debug.Log((object)"ALL FAMILY");
			ExpansionDef val = Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC1/Common/DLC1.asset").WaitForCompletion();
			ExpansionDef val2 = Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC2/Common/DLC2.asset").WaitForCompletion();
			ExpansionDef[] requiredExpansions = (ExpansionDef[])(object)new ExpansionDef[1] { val };
			ExpansionDef[] requiredExpansions2 = (ExpansionDef[])(object)new ExpansionDef[1] { val2 };
			PoolEntry val3 = null;
			PoolEntry val4 = null;
			ConditionalPoolEntry val5 = null;
			ConditionalPoolEntry val6 = null;
			FamilyDirectorCardCategorySelection[] array = Object.FindObjectsOfType(typeof(FamilyDirectorCardCategorySelection)) as FamilyDirectorCardCategorySelection[];
			for (int i = 0; i < array.Length; i++)
			{
				Debug.Log((object)((Object)array[i]).name);
				switch (((Object)array[i]).name)
				{
				case "dccsClayFamily":
					val3 = new PoolEntry
					{
						dccs = (DirectorCardCategorySelection)(object)array[i],
						weight = 1f
					};
					break;
				case "dccsRoboBallFamily":
					val4 = new PoolEntry
					{
						dccs = (DirectorCardCategorySelection)(object)array[i],
						weight = 1f
					};
					break;
				case "dccsVerminFamily":
					val5 = new ConditionalPoolEntry
					{
						requiredExpansions = requiredExpansions,
						dccs = (DirectorCardCategorySelection)(object)array[i],
						weight = 1f
					};
					break;
				case "dccsWormsFamily":
					val6 = new ConditionalPoolEntry
					{
						requiredExpansions = requiredExpansions2,
						dccs = (DirectorCardCategorySelection)(object)array[i],
						weight = 1f
					};
					break;
				}
			}
			dpAllFamilies = ScriptableObject.CreateInstance<DccsPool>();
			((Object)dpAllFamilies).name = "dpAllFamilies";
			DccsPool obj = dpAllFamilies;
			Category[] array2 = new Category[1];
			Category val7 = new Category();
			val7.name = "Families";
			val7.categoryWeight = 1f;
			val7.alwaysIncluded = (PoolEntry[])(object)new PoolEntry[9]
			{
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsBeetleFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsGolemFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsJellyfishFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsWispFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsLemurianFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsImpFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsParentFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsMushroomFamily.asset").WaitForCompletion(),
					weight = 1f
				},
				new PoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsLunarFamily.asset").WaitForCompletion(),
					weight = 1f
				}
			};
			val7.includedIfConditionsMet = (ConditionalPoolEntry[])(object)new ConditionalPoolEntry[4]
			{
				new ConditionalPoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/Base/Common/dccsGupFamily.asset").WaitForCompletion(),
					weight = 1f,
					requiredExpansions = requiredExpansions
				},
				new ConditionalPoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/DLC1/Common/dccsConstructFamily.asset").WaitForCompletion(),
					weight = 1f,
					requiredExpansions = requiredExpansions
				},
				new ConditionalPoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/DLC1/Common/dccsAcidLarvaFamily.asset").WaitForCompletion(),
					weight = 1f,
					requiredExpansions = requiredExpansions
				},
				new ConditionalPoolEntry
				{
					dccs = (DirectorCardCategorySelection)(object)Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/DLC1/Common/dccsVoidFamily.asset").WaitForCompletion(),
					weight = 1f,
					requiredExpansions = requiredExpansions
				}
			};
			val7.includedIfNoConditionsMet = (PoolEntry[])(object)new PoolEntry[0];
			array2[0] = val7;
			obj.poolCategories = (Category[])(object)array2;
			if (val3 != null)
			{
				PoolEntry[] alwaysIncluded = dpAllFamilies.poolCategories[0].alwaysIncluded;
				ConditionalPoolEntry[] includedIfConditionsMet = dpAllFamilies.poolCategories[0].includedIfConditionsMet;
				dpAllFamilies.poolCategories[0].alwaysIncluded = alwaysIncluded.Add(val3, val4);
				dpAllFamilies.poolCategories[0].includedIfConditionsMet = includedIfConditionsMet.Add(val5, val6);
			}
			ClassicStageInfo.HandleMixEnemyArtifact += new hook_HandleMixEnemyArtifact(RandomFamilyOnDissonance);
			dccsFamilyTrueDisso = ScriptableObject.CreateInstance<FamilyDirectorCardCategorySelection>();
			((Object)dccsFamilyTrueDisso).name = "dccsFamilyTrueDissonance";
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCategory("Champion", 3f);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCategory("Miniboss", 3f);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCategory("Basic Monsters", 4f);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCategory("UniqueBosses", 0.3f);
			DirectorCard val8 = new DirectorCard();
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCard(0, val8);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCard(1, val8);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCard(2, val8);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).AddCard(3, val8);
		}

		private static void RandomFamilyOnDissonance(orig_HandleMixEnemyArtifact orig, DirectorCardCategorySelection monsterCategories, Xoroshiro128Plus rng)
		{
			if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(Main.Mirror_Kin))
			{
				DirectorCardCategorySelection val = FindFamily(Dissonance: true);
				if ((Object)(object)val == (Object)null)
				{
				}
				if (val is FamilyDirectorCardCategorySelection)
				{
					((MonoBehaviour)ClassicStageInfo.instance).StartCoroutine(ClassicStageInfo.instance.BroadcastFamilySelection(((FamilyDirectorCardCategorySelection)((val is FamilyDirectorCardCategorySelection) ? val : null)).selectionChatString));
				}
				monsterCategories.CopyFrom(val);
			}
			else
			{
				orig.Invoke(monsterCategories, rng);
			}
		}

		public static void On_Artifact_Enable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			FamilyDirectorCardCategorySelection.IsAvailable += new hook_IsAvailable(AllowFamilyEventsEarlier);
			ClassicStageInfo.RebuildCards += new hook_RebuildCards(Force_Family_Event);
			if (Object.op_Implicit((Object)(object)ClassicStageInfo.instance) && Object.op_Implicit((Object)(object)Run.instance))
			{
				ClassicStageInfo.instance.RebuildCards((DirectorCardCategorySelection)null, (DirectorCardCategorySelection)null);
			}
			EnemyInfoPanel.SetDisplayDataForViewer += new hook_SetDisplayDataForViewer(AddMirrorKinDisplay);
			EnemyInfoPanel.MarkDirty();
		}

		private static void AddMirrorKinDisplay(orig_SetDisplayDataForViewer orig, HUD hud, List<BodyIndex> bodyIndices, ItemIndex[] itemAcquisitionOrderBuffer, int itemAcquisitonOrderLength, int[] itemStacks)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Invalid comparison between Unknown and I4
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Invalid comparison between Unknown and I4
			//IL_003f: 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_0073: Invalid comparison between Unknown and I4
			//IL_0060: 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_0094: Invalid comparison between Unknown and I4
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)ClassicStageInfo.instance))
			{
				MirrorKinTracker component = ((Component)ClassicStageInfo.instance).GetComponent<MirrorKinTracker>();
				if (Object.op_Implicit((Object)(object)component))
				{
					if ((int)component.Enemy1 != -1)
					{
						bodyIndices.Add(component.Enemy1);
					}
					if ((int)component.Enemy2 != -1)
					{
						bodyIndices.Add(component.Enemy2);
					}
					if ((int)component.Enemy3 != -1)
					{
						bodyIndices.Add(component.Enemy3);
					}
					if ((int)component.Enemy4 != -1)
					{
						bodyIndices.Add(component.Enemy4);
					}
				}
			}
			orig.Invoke(hud, bodyIndices, itemAcquisitionOrderBuffer, itemAcquisitonOrderLength, itemStacks);
		}

		private static bool AllowFamilyEventsEarlier(orig_IsAvailable orig, FamilyDirectorCardCategorySelection self)
		{
			if (Object.op_Implicit((Object)(object)Run.instance) && Run.instance.stageClearCount >= 3)
			{
				return true;
			}
			return Object.op_Implicit((Object)(object)Run.instance) && self.minimumStageCompletion <= Run.instance.stageClearCount;
		}

		public static void On_Artifact_Disable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			FamilyDirectorCardCategorySelection.IsAvailable -= new hook_IsAvailable(AllowFamilyEventsEarlier);
			ClassicStageInfo.RebuildCards -= new hook_RebuildCards(Force_Family_Event);
			if (Object.op_Implicit((Object)(object)ClassicStageInfo.instance) && Object.op_Implicit((Object)(object)Run.instance))
			{
				ClassicStageInfo.instance.RebuildCards((DirectorCardCategorySelection)null, (DirectorCardCategorySelection)null);
			}
			EnemyInfoPanel.SetDisplayDataForViewer -= new hook_SetDisplayDataForViewer(AddMirrorKinDisplay);
			EnemyInfoPanel.MarkDirty();
		}

		public static List<DirectorCard> GenerateCandiateList(DirectorCardCategorySelection dccs)
		{
			List<DirectorCard> list = new List<DirectorCard>();
			for (int i = 0; i < dccs.categories.Length; i++)
			{
				DirectorCard[] cards = dccs.categories[i].cards;
				foreach (DirectorCard item in cards)
				{
					list.Add(item);
				}
			}
			return list;
		}

		public static List<DirectorCardCategorySelection> GenerateCandiateListDCCS(DccsPool dccsPool)
		{
			List<DirectorCardCategorySelection> list = new List<DirectorCardCategorySelection>();
			PoolEntry[] alwaysIncluded = dccsPool.poolCategories[0].alwaysIncluded;
			foreach (PoolEntry val in alwaysIncluded)
			{
				list.Add(val.dccs);
			}
			ConditionalPoolEntry[] includedIfConditionsMet = dccsPool.poolCategories[0].includedIfConditionsMet;
			foreach (ConditionalPoolEntry val2 in includedIfConditionsMet)
			{
				if (val2.requiredExpansions.Length != 0 && Run.instance.IsExpansionEnabled(val2.requiredExpansions[0]))
				{
					list.Add(((PoolEntry)val2).dccs);
				}
			}
			return list;
		}

		public static DirectorCardCategorySelection FindFamily(bool Dissonance)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"FindFamily");
			ClassicStageInfo instance = ClassicStageInfo.instance;
			List<DirectorCard> list = null;
			Xoroshiro128Plus val = new Xoroshiro128Plus(instance.seedServer);
			if (Dissonance)
			{
				list = GenerateCandiateList(RoR2Content.mixEnemyMonsterCards);
			}
			else
			{
				if (!Object.op_Implicit((Object)(object)instance.monsterDccsPool))
				{
					return null;
				}
				DirectorCardCategorySelection val2 = instance.monsterDccsPool.GenerateWeightedSelection().Evaluate(val.nextNormalizedFloat);
				if ((Object)(object)val2 != (Object)null)
				{
					list = GenerateCandiateList(val2);
				}
			}
			int num = Random.RandomRangeInt(0, 3);
			if (num == 2 && SceneCatalog.mostRecentSceneDef.cachedName == "voidstage")
			{
				return null;
			}
			DirectorCard val3 = list[val.RangeInt(0, list.Count)];
			Debug.Log((object)("Family for " + (object)val3.spawnCard));
			List<DirectorCardCategorySelection> list2 = GenerateCandiateListDCCS(dpAllFamilies);
			for (int i = 0; i < list2.Count; i++)
			{
				DirectorCardCategorySelection val4 = list2[i];
				for (int j = 0; j < list2[i].categories.Length; j++)
				{
					Category val5 = val4.categories[j];
					DirectorCard[] cards = val5.cards;
					foreach (DirectorCard val6 in cards)
					{
						if ((Object)(object)val6.spawnCard == (Object)(object)val3.spawnCard)
						{
							if (Dissonance || val4.IsAvailable())
							{
								return val4;
							}
							Debug.Log((object)(((object)val4)?.ToString() + " is not available yet."));
							return null;
						}
					}
				}
			}
			Debug.Log((object)("Could not find matching family for " + (object)val3.spawnCard));
			if (Dissonance)
			{
				int index = val.RangeInt(0, list2.Count);
				return list2[index];
			}
			return null;
		}

		public static DirectorCardCategorySelection MakeTrueDissoFamily()
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			Debug.Log((object)"Making TrueDisso Family");
			if ((Object)(object)TrueDissonance.dccsMixEnemyTRUE == (Object)null)
			{
				TrueDissonance.MakeDCCS();
			}
			Xoroshiro128Plus val = new Xoroshiro128Plus(ClassicStageInfo.instance.seedServer);
			int num = val.RangeInt(0, TrueDissonance.dccsMixEnemyTRUE.categories[0].cards.Length);
			int num2 = val.RangeInt(0, TrueDissonance.dccsMixEnemyTRUE.categories[1].cards.Length);
			int num3 = val.RangeInt(0, TrueDissonance.dccsMixEnemyTRUE.categories[2].cards.Length);
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).categories[0].cards[0] = TrueDissonance.dccsMixEnemyTRUE.categories[0].cards[num];
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).categories[1].cards[0] = TrueDissonance.dccsMixEnemyTRUE.categories[1].cards[num2];
			((DirectorCardCategorySelection)dccsFamilyTrueDisso).categories[2].cards[0] = TrueDissonance.dccsMixEnemyTRUE.categories[2].cards[num3];
			int num4 = TrueDissonance.dccsMixEnemyTRUE.FindCategoryIndexByName("UniqueBosses");
			if (num4 > -1)
			{
				int num5 = val.RangeInt(0, TrueDissonance.dccsMixEnemyTRUE.categories[num4].cards.Length);
				((DirectorCardCategorySelection)dccsFamilyTrueDisso).categories[3].cards[0] = TrueDissonance.dccsMixEnemyTRUE.categories[num4].cards[num5];
			}
			int num6 = val.RangeInt(1, 20);
			int num7 = val.RangeInt(1, 21);
			dccsFamilyTrueDisso.selectionChatString = string.Format(Language.GetString("FAMILY_DISSONANT"), Language.GetString("FAMILY_DISSONANT_" + num6), Language.GetString("FAMILY_DISSONANT_0" + num7));
			return (DirectorCardCategorySelection)(object)dccsFamilyTrueDisso;
		}

		private static void Force_Family_Event(orig_RebuildCards orig, ClassicStageInfo self, DirectorCardCategorySelection forcedMonsterCategory, DirectorCardCategorySelection forcedInteractableCategory)
		{
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Expected I4, but got Unknown
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Expected I4, but got Unknown
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Expected I4, but got Unknown
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Expected I4, but got Unknown
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			float num = -1f;
			if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(Main.True_Dissonance))
			{
				forcedMonsterCategory = MakeTrueDissoFamily();
			}
			else if (!Object.op_Implicit((Object)(object)RunArtifactManager.instance) || !RunArtifactManager.instance.IsArtifactEnabled(Artifacts.MixEnemy))
			{
				if ((Object)(object)forcedMonsterCategory == (Object)null)
				{
					try
					{
						forcedMonsterCategory = FindFamily(Dissonance: false);
					}
					catch (Exception ex)
					{
						Debug.LogException(ex);
						forcedMonsterCategory = null;
					}
				}
				if ((Object)(object)forcedMonsterCategory == (Object)null && Object.op_Implicit((Object)(object)self.monsterDccsPool) && self.monsterDccsPool.poolCategories.Length > 1)
				{
					num = self.monsterDccsPool.poolCategories[0].categoryWeight;
					self.monsterDccsPool.poolCategories[0].categoryWeight = 0f;
				}
				else
				{
					num = ClassicStageInfo.monsterFamilyChance;
					ClassicStageInfo.monsterFamilyChance = 10f;
				}
			}
			orig.Invoke(self, forcedMonsterCategory, forcedInteractableCategory);
			if (num > -1f)
			{
				if (Object.op_Implicit((Object)(object)self.monsterDccsPool) && self.monsterDccsPool.poolCategories.Length != 0)
				{
					self.monsterDccsPool.poolCategories[0].categoryWeight = num;
				}
				else
				{
					ClassicStageInfo.monsterFamilyChance = num;
				}
			}
			if (!WConfig.MirrorKinDisplay.Value || !Object.op_Implicit((Object)(object)RunArtifactManager.instance) || RunArtifactManager.instance.IsArtifactEnabled(Artifacts.singleMonsterTypeArtifactDef))
			{
				return;
			}
			SendMirrorKinTracker sendMirrorKinTracker = new SendMirrorKinTracker();
			for (int i = 0; i < 4; i++)
			{
				BodyIndex val = (BodyIndex)(-1);
				if (i < self.monsterSelection.Count)
				{
					try
					{
						val = self.monsterSelection.choices[i].value.spawnCard.prefab.GetComponent<CharacterMaster>().bodyPrefab.GetComponent<CharacterBody>().bodyIndex;
					}
					catch (Exception ex2)
					{
						Debug.LogException(ex2);
					}
				}
				switch (i)
				{
				case 0:
					sendMirrorKinTracker.Enemy1 = (int)val;
					break;
				case 1:
					sendMirrorKinTracker.Enemy2 = (int)val;
					break;
				case 2:
					sendMirrorKinTracker.Enemy3 = (int)val;
					break;
				case 3:
					sendMirrorKinTracker.Enemy4 = (int)val;
					break;
				}
			}
			Chat.SendBroadcastChat((ChatMessageBase)(object)sendMirrorKinTracker);
		}
	}
	public class MirrorKinTracker : MonoBehaviour
	{
		public BodyIndex Enemy1 = (BodyIndex)(-1);

		public BodyIndex Enemy2 = (BodyIndex)(-1);

		public BodyIndex Enemy3 = (BodyIndex)(-1);

		public BodyIndex Enemy4 = (BodyIndex)(-1);
	}
	public class SendMirrorKinTracker : ChatMessageBase
	{
		public int Enemy1 = -1;

		public int Enemy2 = -1;

		public int Enemy3 = -1;

		public int Enemy4 = -1;

		public override string ConstructChatString()
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: 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_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)ClassicStageInfo.instance))
			{
				MirrorKinTracker mirrorKinTracker = ((Component)ClassicStageInfo.instance).gameObject.GetComponent<MirrorKinTracker>();
				if ((Object)(object)mirrorKinTracker == (Object)null)
				{
					mirrorKinTracker = ((Component)ClassicStageInfo.instance).gameObject.AddComponent<MirrorKinTracker>();
				}
				mirrorKinTracker.Enemy1 = (BodyIndex)Enemy1;
				mirrorKinTracker.Enemy2 = (BodyIndex)Enemy2;
				mirrorKinTracker.Enemy3 = (BodyIndex)Enemy3;
				mirrorKinTracker.Enemy4 = (BodyIndex)Enemy4;
				if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(Main.True_Dissonance))
				{
					if (Object.op_Implicit((Object)(object)Run.instance) && Run.instance.stageClearCount > 9)
					{
						mirrorKinTracker.Enemy2 = (BodyIndex)Enemy1;
						mirrorKinTracker.Enemy3 = (BodyIndex)Enemy2;
						mirrorKinTracker.Enemy4 = (BodyIndex)Enemy3;
						mirrorKinTracker.Enemy1 = (BodyIndex)Enemy4;
					}
					else
					{
						mirrorKinTracker.Enemy4 = (BodyIndex)(-1);
					}
				}
			}
			EnemyInfoPanel.MarkDirty();
			return null;
		}

		public override void Serialize(NetworkWriter writer)
		{
			((ChatMessageBase)this).Serialize(writer);
			writer.Write(Enemy1);
			writer.Write(Enemy2);
			writer.Write(Enemy3);
			writer.Write(Enemy4);
		}

		public override void Deserialize(NetworkReader reader)
		{
			((ChatMessageBase)this).Deserialize(reader);
			Enemy1 = reader.ReadInt32();
			Enemy2 = reader.ReadInt32();
			Enemy3 = reader.ReadInt32();
			Enemy4 = reader.ReadInt32();
		}
	}
	public class MirrorSacrifice
	{
		public static void Start()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: 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_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)
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Barrel1/Barrel1.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineBoss/ShrineBoss.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineBoss/ShrineBossSandy Variant.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineBoss/ShrineBossSnowy Variant.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineCleanse/ShrineCleanse.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineCleanse/ShrineCleanseSandy Variant.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineCleanse/ShrineCleanseSnowy Variant.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineGoldshoresAccess/ShrineGoldshoresAccess.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/ShrineHalcyonite.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidCamp/VoidCamp.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/CU8/LemurianEgg/LemurianEgg.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/RadarTower/RadarTower.prefab").WaitForCompletion().AddComponent<MirrorSacrificeAllowed>();
		}

		public static void On_Artifact_Enable()
		{
			if (NetworkServer.active)
			{
				SceneDirector.onGenerateInteractableCardSelection += OnGenerateInteractableCardSelection;
			}
		}

		public static void On_Artifact_Disable()
		{
			if (NetworkServer.active)
			{
				SceneDirector.onGenerateInteractableCardSelection -= OnGenerateInteractableCardSelection;
			}
		}

		private static void OnGenerateInteractableCardSelection(SceneDirector sceneDirector, DirectorCardCategorySelection dccs)
		{
			int num = dccs.FindCategoryIndexByName("Void Stuff");
			if (num > -1 && dccs.categories[num].cards.Length >= 2)
			{
				dccs.categories[num].selectionWeight *= 2f;
				if (dccs.categories[num].cards[0].selectionWeight < 10)
				{
					DirectorCard obj = dccs.categories[num].cards[0];
					obj.selectionWeight *= 3;
				}
				else if (dccs.categories[num].cards[1].selectionWeight < 10)
				{
					DirectorCard obj2 = dccs.categories[num].cards[1];
					obj2.selectionWeight *= 3;
				}
			}
			dccs.RemoveCardsThatFailFilter((Predicate<DirectorCard>)Filter);
		}

		internal static bool Filter(DirectorCard card)
		{
			SpawnCard spawnCard = card.spawnCard;
			InteractableSpawnCard val = (InteractableSpawnCard)(object)((spawnCard is InteractableSpawnCard) ? spawnCard : null);
			if (Object.op_Implicit((Object)(object)val))
			{
				if (val.skipSpawnWhenSacrificeArtifactEnabled)
				{
					return true;
				}
				if (val.skipSpawnWhenDevotionArtifactEnabled && RunArtifactManager.instance.IsArtifactEnabled(Artifacts.Devotion))
				{
					return true;
				}
				GameObject prefab = card.spawnCard.prefab;
				return Object.op_Implicit((Object)(object)prefab.GetComponent<MirrorSacrificeAllowed>());
			}
			return false;
		}
	}
	public class MirrorSacrificeAllowed : MonoBehaviour
	{
	}
	public class TrueCommand
	{
		public class RainbowItemThing : MonoBehaviour
		{
			public Color color = Color.white;

			public Color colorOne = Color.white;

			public Color colorTwo = Color.white;

			private int colorIndex = 0;

			private float progress = 1000f;

			public Light TargetLight;

			public Highlight TargetHighlight;

			public ParticleSystem particleSystem;

			public bool isForUi = false;

			public void Start()
			{
				//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(Main.True_Command))
				{
					if (isForUi)
					{
						return;
					}
					Transform child = ((Component)this).gameObject.transform.GetChild(0);
					for (int i = 1; i < child.childCount; i++)
					{
						((Component)child.GetChild(i)).gameObject.SetActive(true);
						Light componentInChildren = ((Component)child.GetChild(i)).GetComponentInChildren<Light>(true);
						if (Object.op_Implicit((Object)(object)componentInChildren))
						{
							((Component)componentInChildren).gameObject.SetActive(false);
						}
						if (child.GetChild(i).childCount > 2)
						{
							((Component)child.GetChild(i).GetChild(2)).gameObject.SetActive(false);
						}
					}
					TargetHighlight = ((Component)this).GetComponent<Highlight>();
					TargetHighlight.highlightColor = (HighlightColor)3;
					colorIndex = Random.RandomRangeInt(0, 6);
					TargetLight = ((Component)child.GetChild(2)).GetComponentInChildren<Light>(true);
					if (Object.op_Implicit((Object)(object)TargetLight))
					{
						((Component)TargetLight).gameObject.SetActive(true);
						LightIntensityCurve component = ((Component)TargetLight).gameObject.GetComponent<LightIntensityCurve>();
						component.maxIntensity *= 10f;
					}
					((Component)child.GetChild(3).GetChild(2)).gameObject.SetActive(true);
					particleSystem = ((Component)child.GetChild(3).GetChild(2)).GetComponent<ParticleSystem>();
					((Component)this).GetComponent<GenericDisplayNameProvider>().SetDisplayToken("ARTIFACT_COMMAND_CUBE_RAINBOW");
				}
				else
				{
					Object.Destroy((Object)(object)this);
				}
			}

			public void FixedUpdate()
			{
				//IL_0165: Unknown result type (might be due to invalid IL or missing references)
				//IL_0176: Unknown result type (might be due to invalid IL or missing references)
				//IL_017c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0187: Unknown result type (might be due to invalid IL or missing references)
				//IL_018c: 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)
				//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_01be: 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_0064: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0075: 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)
				//IL_007f: 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_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009d: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b4: 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)
				//IL_00be: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
				//IL_0101: Unknown result type (might be due to invalid IL or missing references)
				//IL_0106: 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_0118: Unknown result type (might be due to invalid IL or missing references)
				//IL_0122: 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_012c: 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)
				//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)
				progress += 0.01f;
				if (progress >= 1f)
				{
					progress = 0f;
					switch (colorIndex)
					{
					case 0:
						colorOne = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)3));
						colorTwo = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)5));
						break;
					case 1:
						colorOne = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)5));
						colorTwo = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)13));
						break;
					case 2:
						colorOne = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)13));
						colorTwo = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)2));
						break;
					case 3:
						colorOne = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)2));
						colorTwo = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)4));
						break;
					case 4:
						colorOne = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)4));
						colorTwo = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)25));
						break;
					case 5:
						colorOne = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)25));
						colorTwo = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)3));
						colorIndex = -1;
						break;
					default:
						colorIndex = -1;
						break;
					}
					colorIndex++;
				}
				color = colorOne * (1f - progress) + colorTwo * progress;
				if (Object.op_Implicit((Object)(object)particleSystem))
				{
					TargetHighlight.CustomColor = color;
					TargetLight.color = color;
					particleSystem.startColor = color;
				}
			}
		}

		public static void Start()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			PickupTransmutationManager.RebuildPickupGroups += new hook_RebuildPickupGroups(AddEliteEquipmentsToCommand);
			LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/CommandCube").AddComponent<RainbowItemThing>();
		}

		private static void AddEliteEquipmentsToCommand(orig_RebuildPickupGroups orig)
		{
			for (int i = 0; i < EliteCatalog.eliteDefs.Length; i++)
			{
				EliteDef val = EliteCatalog.eliteDefs[i];
				EquipmentDef eliteEquipmentDef = val.eliteEquipmentDef;
				if ((Object)(object)eliteEquipmentDef != (Object)null && !((Object)val).name.EndsWith("Gold") && eliteEquipmentDef.dropOnDeathChance > 0f)
				{
					eliteEquipmentDef.canDrop = true;
					eliteEquipmentDef.isBoss = true;
					eliteEquipmentDef.isLunar = false;
				}
			}
			orig.Invoke();
			for (int j = 0; j < EliteCatalog.eliteDefs.Length; j++)
			{
				EliteDef val2 = EliteCatalog.eliteDefs[j];
				EquipmentDef eliteEquipmentDef2 = val2.eliteEquipmentDef;
				if ((Object)(object)eliteEquipmentDef2 != (Object)null && eliteEquipmentDef2.dropOnDeathChance > 0f)
				{
					eliteEquipmentDef2.canDrop = false;
				}
			}
		}

		private static void PickupDropletController_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3(orig_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3 orig, CreatePickupInfo pickupInfo, Vector3 position, Vector3 velocity)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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)
			if (RunArtifactManager.instance.IsArtifactEnabled(Main.True_Command))
			{
				ref PickupArtifactFlag artifactFlag = ref pickupInfo.artifactFlag;
				artifactFlag = (PickupArtifactFlag)((uint)artifactFlag | 1u);
			}
			orig.Invoke(pickupInfo, position, velocity);
		}

		public static void On_Artifact_Enable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			//IL_0066: 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_00bc: 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)
			PickupDropletController.CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3 += new hook_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3(PickupDropletController_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3);
			PickupPickerController.SetOptionsFromPickupForCommandArtifact_UniquePickup += new hook_SetOptionsFromPickupForCommandArtifact_UniquePickup(Override_Command_Options);
			SceneDirector.onGenerateInteractableCardSelection += CommandArtifactManager.OnGenerateInteractableCardSelection;
			Run.IsPickupAvailable += new hook_IsPickupAvailable(Run_IsPickupAvailable);
			Run.IsEquipmentAvailable += new hook_IsEquipmentAvailable(Run_IsEquipmentAvailable);
			FirstTimeOverrideJunk();
			int value = PickupCatalog.FindPickupIndex(Items.SkullCounter.itemIndex).value;
			if (PickupTransmutationManager.pickupGroupMap[value] != null)
			{
				float num = 1f - (float)PickupTransmutationManager.pickupGroupMap[value].Length / 1000f;
				int maxColumnCount = PickupTransmutationManager.pickupGroupMap[value].Length / 12;
				GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/CommandPickerPanel");
				val.transform.localScale = Vector3.one * num;
				val.GetComponent<PickupPickerPanel>().maxColumnCount = maxColumnCount;
			}
		}

		private static bool Run_IsPickupAvailable(orig_IsPickupAvailable orig, Run self, PickupIndex pickupIndex)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			//IL_0053: 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_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Invalid comparison between Unknown and I4
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Invalid comparison between Unknown and I4
			PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
			if ((int)pickupDef.itemIndex != -1)
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
				if (Object.op_Implicit((Object)(object)itemDef) && ((int)itemDef.tier >= 10 || (int)itemDef.tier < 0))
				{
					return true;
				}
			}
			return orig.Invoke(self, pickupIndex);
		}

		public static void On_Artifact_Disable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			//IL_006a: 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)
			PickupDropletController.CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3 -= new hook_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3(PickupDropletController_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3);
			PickupPickerController.SetOptionsFromPickupForCommandArtifact_UniquePickup -= new hook_SetOptionsFromPickupForCommandArtifact_UniquePickup(Override_Command_Options);
			SceneDirector.onGenerateInteractableCardSelection -= CommandArtifactManager.OnGenerateInteractableCardSelection;
			Run.IsItemAvailable -= new hook_IsItemAvailable(Run_IsItemAvailable);
			Run.IsEquipmentAvailable -= new hook_IsEquipmentAvailable(Run_IsEquipmentAvailable);
			LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/CommandPickerPanel").transform.localScale = Vector3.one;
			if (Object.op_Implicit((Object)(object)Run.instance))
			{
				Run.instance.availableEquipment.Remove(Equipment.QuestVolatileBattery.equipmentIndex);
			}
		}

		private static bool Run_IsEquipmentAvailable(orig_IsEquipmentAvailable orig, Run self, EquipmentIndex equipmentIndex)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			if (equipmentIndex == Equipment.QuestVolatileBattery.equipmentIndex)
			{
				return true;
			}
			return orig.Invoke(self, equipmentIndex);
		}

		private static bool Run_IsItemAvailable(orig_IsItemAvailable orig, Run self, ItemIndex itemIndex)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Expected I4, but got Unknown
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Invalid comparison between Unknown and I4
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Invalid comparison between Unknown and I4
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
			Debug.Log((object)(int)itemDef.tier);
			if (Object.op_Implicit((Object)(object)itemDef) && ((int)itemDef.tier >= 10 || (int)itemDef.tier < 0))
			{
				return true;
			}
			return orig.Invoke(self, itemIndex);
		}

		public static void FirstTimeOverrideJunk()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: 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)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Invalid comparison between Unknown and I4
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Invalid comparison between I4 and Unknown
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Expected I4, but got Unknown
			//IL_00cf: 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_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			int value = PickupCatalog.FindPickupIndex(Items.SkullCounter.itemIndex).value;
			if (PickupTransmutationManager.pickupGroupMap[value] != null && PickupTransmutationManager.pickupGroupMap[value].Length == 1)
			{
				return;
			}
			List<List<PickupIndex>> list = new List<List<PickupIndex>>();
			List<List<PickupIndex>> list2 = new List<List<PickupIndex>>();
			for (int i = 0; i < ItemTierCatalog.allItemTierDefs.Length + 2; i++)
			{
				list.Add(new List<PickupIndex>());
			}
			Enumerator<ItemDef> enumerator = ItemCatalog.allItemDefs.GetEnumerator();
			try
			{
				while (enumerator.MoveNext())
				{
					ItemDef current = enumerator.Current;
					if ((int)current.tier != 5)
					{
						if (list.Count > (int)current.tier)
						{
							list[(int)current.tier].Add(PickupCatalog.FindPickupIndex(current.itemIndex));
						}
						else
						{
							list[5].Add(PickupCatalog.FindPickupIndex(current.itemIndex));
						}
					}
				}
			}
			finally
			{
				((IDisposable)enumerator).Dispose();
			}
			List<PickupIndex> value2 = list[3];
			list[3] = list[4];
			list[4] = value2;
			List<PickupIndex> list3 = new List<PickupIndex>();
			for (int j = 0; j < list.Count; j++)
			{
				list3.AddRange(list[j]);
			}
			PickupIndex[] array = list3.ToArray();
			array = array.Add(PickupTransmutationManager.equipmentNormalGroup);
			array = array.Add(PickupCatalog.FindPickupIndex(Equipment.QuestVolatileBattery.equipmentIndex));
			array = array.Add(PickupTransmutationManager.equipmentLunarGroup);
			if (PickupTransmutationManager.equipmentBossGroup.Length != 0)
			{
				array = array.Add(PickupTransmutationManager.equipmentBossGroup);
			}
			PickupTransmutationManager.pickupGroupMap[value] = array;
		}

		private static void Override_Command_Options(orig_SetOptionsFromPickupForCommandArtifact_UniquePickup orig, PickupPickerController self, UniquePickup pickupIndex)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: 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_0019: Unknown result type (might be due to invalid IL or missing references)
			pickupIndex.pickupIndex = PickupCatalog.FindPickupIndex(Items.SkullCounter.itemIndex);
			orig.Invoke(self, pickupIndex);
		}
	}
	public class TrueDissonance
	{
		public class DirectorCard2 : DirectorCard
		{
			public float selectionWeight;
		}

		private static EliteTierDef[] eliteTiersBackup;

		public static DirectorCardCategorySelection dccsMixEnemyTRUE;

		public static void On_Artifact_Enable()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if ((Object)(object)dccsMixEnemyTRUE == (Object)null)
			{
				MakeDCCS();
			}
			ClassicStageInfo.RebuildCards += new hook_RebuildCards(ClassicStageInfo_RebuildCards);
			Infest.OnEnter += new hook_OnEnter(Infest_OnEnter);
			if (Object.op_Implicit((Object)(object)ClassicStageInfo.instance) && Object.op_Implicit((Object)(object)Run.instance))
			{
				ClassicStageInfo.instance.RebuildCards((DirectorCardCategorySelection)null, (DirectorCardCategorySelection)null);
			}
			eliteTiersBackup = CombatDirector.eliteTiers;
		}

		public static void DoEliteShenanigans()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Expected O, but got Unknown
			EliteTierDef[] array = (EliteTierDef[])(object)new EliteTierDef[CombatDirector.eliteTiers.Length];
			CombatDirector.eliteTiers.CopyTo(array, 0);
			EliteTierDef val = new EliteTierDef();
			EliteTierDef val2 = new EliteTierDef();
			EliteTierDef val3 = new EliteTierDef();
			val.isAvailable = (EliteRules rules) => (int)rules == 2 && Run.instance.stageClearCount >= 6;
			val2.isAvailable = (EliteRules rules) => (int)rules == 2 && Run.instance.stageClearCount >= 6;
			val3.isAvailable = (EliteRules rules) => (int)rules == 0 && Run.instance.stageClearCount >= 5;
			val3.eliteTypes = (EliteDef[])(object)new EliteDef[2]
			{
				Elites.Lunar,
				Elites.Void
			};
			EliteTierDef[] eliteTiers = CombatDirector.eliteTiers;
			foreach (EliteTierDef val4 in eliteTiers)
			{
				if (val4.eliteTypes.Length >= 5)
				{
					EliteDef[] eliteTypes = val4.eliteTypes;
					foreach (EliteDef val5 in eliteTypes)
					{
						if ((Object)(object)val5 == (Object)(object)Elites.Aurelionite)
						{
							val.eliteTypes = val4.eliteTypes;
							val.costMultiplier = val4.costMultiplier;
							val3.costMultiplier = val4.costMultiplier;
						}
					}
				}
				else if (val4.eliteTypes != null && (Object)(object)val4.eliteTypes[0] == (Object)(object)Elites.Poison)
				{
					val2.eliteTypes = val4.eliteTypes;
					val2.costMultiplier = val4.costMultiplier;
				}
			}
			CombatDirector.eliteTiers = array.Add(val, val2, val3);
		}

		private static void Infest_OnEnter(orig_OnEnter orig, Infest self)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Invalid comparison between Unknown and I4
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if ((int)self.attack.teamIndex == 2)
			{
				self.attack.teamIndex = (TeamIndex)4;
			}
		}

		public static void On_Artifact_Disable()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			ClassicStageInfo.RebuildCards -= new hook_RebuildCards(ClassicStageInfo_RebuildCards);
			Infest.OnEnter -= new hook_OnEnter(Infest_OnEnter);
			if (Object.op_Implicit((Object)(object)ClassicStageInfo.instance) && Object.op_Implicit((Object)(object)Run.instance))
			{
				ClassicStageInfo.instance.RebuildCards((DirectorCardCategorySelection)null, (DirectorCardCategorySelection)null);
			}
			CombatDirector.eliteTiers = eliteTiersBackup;
		}

		public static void MakeDCCS()
		{
			//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_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected O, but got Unknown
			//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_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Expected O, but got Unknown
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Expected O, but got Unknown
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: 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_0103: 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_0111: 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_011a: Expected O, but got Unknown
			//IL_011a: 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_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: 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_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Expected O, but got Unknown
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: 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_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: 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_0192: Expected O, but got Unknown
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: 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_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Expected O, but got Unknown
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Expected O, but got Unknown
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Expected O, but got Unknown
			//IL_031e: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"dccsMixEnemyTRUE");
			dccsMixEnemyTRUE = Object.Instantiate<DirectorCardCategorySelection>(RoR2Content.mixEnemyMonsterCards);
			((Object)dccsMixEnemyTRUE).name = "dccsMixEnemyTRUE";
			int minimumStageCompletions = 3;
			DirectorCard val = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Brother/cscBrother.asset").WaitForCompletion(),
				selectionWeight = 1,
				preventOverhead = true,
				minimumStageCompletions = minimumStageCompletions,
				spawnDistance = (MonsterSpawnDistance)0
			};
			DirectorCard val2 = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/VoidRaidCrab/cscMiniVoidRaidCrabPhase1.asset").WaitForCompletion(),
				selectionWeight = 1,
				preventOverhead = true,
				minimumStageCompletions = minimumStageCompletions,
				spawnDistance = (MonsterSpawnDistance)0
			};
			DirectorCard val3 = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC2/FalseSonBoss/cscFalseSonBoss.asset").WaitForCompletion(),
				selectionWeight = 1,
				preventOverhead = true,
				minimumStageCompletions = minimumStageCompletions,
				spawnDistance = (MonsterSpawnDistance)0
			};
			DirectorCard val4 = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/ScavLunar/cscScavLunar.asset").WaitForCompletion(),
				selectionWeight = 4,
				preventOverhead = true,
				minimumStageCompletions = minimumStageCompletions,
				spawnDistance = (MonsterSpawnDistance)0
			};
			DirectorCard val5 = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Ba