Decompiled source of ChaosMode v3.0.1

chaos.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.ExpansionManagement;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;

[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("chaos")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+e1d42888e48d172c1ff18deb32e055dafada34ac")]
[assembly: AssemblyProduct("chaos")]
[assembly: AssemblyTitle("chaos")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace chaos.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("chaos.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace ChaosMode
{
	internal static class Actions
	{
		public static Events eventing = new Events();

		public static void StartingItems()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			List<PickupIndex> list = RollType(0);
			PickupIndex val = list[ChaosMode.random.Next(0, list.Count)];
			for (int i = 0; i < 3; i++)
			{
				val = list[ChaosMode.random.Next(0, list.Count)];
				GiveToAllPlayers(val);
			}
			list = RollType(1);
			for (int j = 0; j < 2; j++)
			{
				val = list[ChaosMode.random.Next(0, list.Count)];
				GiveToAllPlayers(val);
			}
			list = RollType(2);
			val = list[ChaosMode.random.Next(0, list.Count)];
			GiveToAllPlayers(val);
		}

		public static void SpawnEveryMinute()
		{
			//IL_06ba: Unknown result type (might be due to invalid IL or missing references)
			List<SpawnCardData> list = new List<SpawnCardData>
			{
				Models.ADBeetleGuard,
				Models.ADGreaterWisp,
				Models.ADGolem,
				Models.ADTitan,
				Models.ADParent,
				Models.ADBigLemurian,
				Models.ADRoboBall,
				Models.ADTemplar,
				Models.ADArchWisp,
				Models.ADBeetleQueen,
				Models.ADLunarGolem,
				Models.ADLunarWisp
			};
			List<SpawnCardData> list2 = new List<SpawnCardData>
			{
				Models.ADBeetleQueen,
				Models.ADTitan,
				Models.ADTitanGold,
				Models.ADOverlord,
				Models.ADMagmaWorm,
				Models.ADOverWorm,
				Models.ADNullifier,
				Models.ADDunestrider,
				Models.ADGhibli,
				Models.ADGrandparent,
				Models.ADMagmaWorm,
				Models.ADBrother,
				Models.ADScav
			};
			List<SpawnCardData> list3 = new List<SpawnCardData>
			{
				Models.ADBeetle,
				Models.ADWisp,
				Models.ADGreaterWisp,
				Models.ADBell,
				Models.ADBison,
				Models.ADImp,
				Models.ADGolem,
				Models.ADLemurian,
				Models.ADJellyfish,
				Models.ADHermitCrab,
				Models.ADParent,
				Models.ADVulture,
				Models.ADLunarBomb,
				Models.ADMushroom
			};
			if (ChaosMode.expansion1)
			{
				List<SpawnCardData> collection = new List<SpawnCardData>
				{
					Models.ADGup,
					Models.ADJailer,
					Models.ADApothecary,
					Models.ADBarnacle
				};
				List<SpawnCardData> collection2 = new List<SpawnCardData>
				{
					Models.ADJailer,
					Models.ADMegaCrab,
					Models.ADMega,
					Models.ADMajor,
					Models.ADVoidling
				};
				List<SpawnCardData> collection3 = new List<SpawnCardData>
				{
					Models.ADLarva,
					Models.ADPest,
					Models.ADVermin,
					Models.ADMinor,
					Models.ADApothecary,
					Models.ADAssassin,
					Models.ADInfestor,
					Models.ADBarnacle
				};
				list.AddRange(collection);
				list2.AddRange(collection2);
				list3.AddRange(collection3);
			}
			if (ChaosMode.expansion2)
			{
				List<SpawnCardData> collection4 = new List<SpawnCardData> { Models.ADScorchling };
				List<SpawnCardData> collection5 = new List<SpawnCardData> { Models.ADFalseSon };
				List<SpawnCardData> collection6 = new List<SpawnCardData> { Models.ADChild };
				list.AddRange(collection4);
				list2.AddRange(collection5);
				list3.AddRange(collection6);
			}
			SpawnCardData spawnCardData = null;
			List<PickupIndex> list4 = null;
			int num = 0;
			int num2 = 1;
			ChaosMode.directorValue += (float)Run.instance.GetDifficultyScaledCost(ChaosMode.random.Next(1, 3)) / Mathf.Clamp(10f - (float)Init.ambushRate.Value / 100f * 8f, 2f, 10f);
			Console.WriteLine("[CHAOS] Director Aggro Value: {0}", ChaosMode.directorValue);
			switch (Tables.SummonDropTable())
			{
			case 0:
				Console.WriteLine("[CHAOS] spawn swarm");
				spawnCardData = list3[ChaosMode.random.Next(0, list3.Count)];
				num2 = Mathf.Clamp(Run.instance.GetDifficultyScaledCost(ChaosMode.random.Next(2, 4)) * Mathf.Clamp(Init.swarmAggression.Value, 1, Init.spawnLimit.Value ? 3 : 1024), 5, Init.spawnLimit.Value ? Init.maxEnemies.Value : 65536);
				SummonEnemy(spawnCardData, num2);
				ItemEveryMinute();
				break;
			case 1:
				Console.WriteLine("[CHAOS] spawn single enemy");
				spawnCardData = list[ChaosMode.random.Next(0, list.Count)];
				num2 = Mathf.Clamp(Run.instance.GetDifficultyScaledCost(ChaosMode.random.Next(1, 3)), 1, Init.spawnLimit.Value ? Init.maxEnemies.Value : 65536);
				SummonEnemy(spawnCardData, num2);
				ItemEveryMinute();
				break;
			case 2:
			{
				Console.WriteLine("[CHAOS] spawn event");
				List<IEnumerator> list5 = new List<IEnumerator>
				{
					eventing.JellyfishEvent(),
					eventing.EliteParentEvent(),
					eventing.FinalEncounter(),
					eventing.GainFriend(),
					eventing.GoldEvent()
				};
				if (Init.purgeRate.Value > 0)
				{
					list5.Add(eventing.PurgeAllItems());
				}
				if (Init.enableOrder.Value)
				{
					list5.Add(eventing.SequenceEvent());
				}
				if (ChaosMode.expansion1)
				{
					list5.AddRange(new List<IEnumerator>
					{
						eventing.Corruption(),
						eventing.VoidEncounter()
					});
				}
				if (ChaosMode.expansion2)
				{
					list5.AddRange(new List<IEnumerator> { eventing.StormEncounter() });
				}
				((MonoBehaviour)ChaosMode.instance).StartCoroutine(list5[Tables.EventDropTable()]);
				break;
			}
			case 3:
				Console.WriteLine("[CHAOS] spawn boss");
				spawnCardData = list2[ChaosMode.random.Next(0, list2.Count)];
				num2 = Mathf.Clamp(Run.instance.GetDifficultyScaledCost(1), 1, Init.spawnLimit.Value ? Init.maxEnemies.Value : 65536);
				SummonEnemy(spawnCardData, num2);
				if (Init.giveItems.Value)
				{
					num = Tables.GetDropTable(restrictVoid: false, restrictEquipment: true);
					list4 = RollType(Tables.GetDropTable());
					GiveToAllPlayers(list4[ChaosMode.random.Next(0, list4.Count)]);
				}
				break;
			}
		}

		private static void ItemEveryMinute()
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			if (Init.giveItems.Value)
			{
				int dropTable = Tables.GetDropTable(restrictVoid: false, restrictEquipment: true, Init.includeLunar.Value);
				List<PickupIndex> list = RollType(dropTable);
				GiveToAllPlayers(list[ChaosMode.random.Next(0, list.Count)]);
			}
		}

		public static void GiveToAllPlayers(PickupIndex pickupIndex, int count = 1)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				try
				{
					string displayName = instance.GetDisplayName();
					Console.WriteLine(displayName);
					CharacterMaster master = instance.master;
					master.inventory.GiveItem(PickupCatalog.GetPickupDef(pickupIndex).itemIndex, count);
					MethodInfo method = typeof(GenericPickupController).GetMethod("SendPickupMessage", BindingFlags.Static | BindingFlags.NonPublic);
					method.Invoke(null, new object[2] { master, pickupIndex });
				}
				catch (Exception ex)
				{
					Console.WriteLine(ex.Message);
				}
			}
		}

		public static void GiveToOnePlayer(PlayerCharacterMasterController playerCharacterMasterController, PickupIndex pickupIndex, int count = 1)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			string displayName = playerCharacterMasterController.GetDisplayName();
			CharacterMaster master = playerCharacterMasterController.master;
			master.inventory.GiveItem(PickupCatalog.GetPickupDef(pickupIndex).itemIndex, count);
			MethodInfo method = typeof(GenericPickupController).GetMethod("SendPickupMessage", BindingFlags.Static | BindingFlags.NonPublic);
			method.Invoke(null, new object[2] { master, pickupIndex });
		}

		public static void EquipAllPlayers(int pickupIndex)
		{
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				string displayName = instance.GetDisplayName();
				CharacterMaster master = instance.master;
				master.inventory.SetEquipmentIndex((EquipmentIndex)pickupIndex);
				MethodInfo method = typeof(GenericPickupController).GetMethod("SendPickupMessage", BindingFlags.Static | BindingFlags.NonPublic);
				method.Invoke(null, new object[2] { master, pickupIndex });
			}
		}

		public static void EquipOneElite(Inventory inventory, EliteEquipment eliteType)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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)
			EquipmentDef val = null;
			val = Addressables.LoadAssetAsync<EquipmentDef>((object)eliteType.addressable).WaitForCompletion();
			inventory.SetEquipmentIndex(val.equipmentIndex);
		}

		public static void SummonEnemy(SpawnCardData enemyType, int reps)
		{
			//IL_018e: 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_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Expected O, but got Unknown
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			reps = Mathf.Clamp(reps, 1, Init.spawnLimit.Value ? Init.maxEnemies.Value : 50);
			string text = "";
			float num = 0f;
			float num2 = 1f;
			float num3 = 0f;
			List<EliteEquipment> list = new List<EliteEquipment>
			{
				Models.ADFire,
				Models.ADIce,
				Models.ADLightning,
				Models.ADGhost,
				Models.ADPoison,
				Models.ADEcho
			};
			if (ChaosMode.expansion1)
			{
				list.AddRange(new List<EliteEquipment>
				{
					Models.ADEarth,
					Models.ADVoid
				});
			}
			num2 = Mathf.Clamp((float)Init.eliteRate.Value / 100f, 0f, 1f);
			num = Mathf.Clamp((float)Run.instance.GetDifficultyScaledCost(1) / 100f, 0f, 1f - num2);
			num3 = (float)ChaosMode.random.Next(0, (int)Mathf.Clamp(num2 * 100f + (float)Run.instance.GetDifficultyScaledCost(1), 0f, 100f)) / 100f;
			Console.WriteLine("[Chaos Log] Roll is {0} >= Elite Threshold is {1}", num3, num2 + num);
			bool flag = ((num3 >= num2 + num) ? true : false);
			EliteEquipment eliteEquipment = list[Tables.EliteDropTable()];
			try
			{
				int num4 = Mathf.Clamp(reps / ((!flag) ? 1 : 2), 1, reps);
				ReadOnlyCollection<PlayerCharacterMasterController> instances = PlayerCharacterMasterController.instances;
				CharacterSpawnCard val = null;
				val = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)enemyType.location).WaitForCompletion();
				int num5 = 0;
				for (int i = 0; i < Mathf.Clamp(num4 / instances.Count, 1, reps); i++)
				{
					foreach (PlayerCharacterMasterController item in instances)
					{
						GameObject spawnedInstance = SpawnEnemy(val, item.master.GetBody().transform.position).spawnedInstance;
						if (flag & Object.op_Implicit((Object)(object)spawnedInstance))
						{
							EquipOneElite(spawnedInstance.GetComponent<CharacterMaster>().inventory, eliteEquipment);
							text = eliteEquipment.prefix;
						}
						((MonoBehaviour)ChaosMode.instance).StartCoroutine(eventing.CheckIfEnemyDied(spawnedInstance, (int)enemyType.rewardBase));
					}
					num5 = i + 1;
				}
				SimpleChatMessage val2 = new SimpleChatMessage();
				val2.baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Summoning " + num5 + (flag ? (" " + text + " ") : " ") + enemyType.name + ((num5 > 1) ? "s" : "") + "!</color>";
				Chat.SendBroadcastChat((ChatMessageBase)(object)val2);
			}
			catch
			{
				Console.WriteLine("[Chaos Log] Can't find SpawnCard: {0}!", enemyType.name);
			}
		}

		public static SpawnResult SpawnEnemy(CharacterSpawnCard spawnCard, Vector3 center, bool ally = false)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: 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_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: 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_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: 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_0117: Unknown result type (might be due to invalid IL or missing references)
			spawnCard.noElites = false;
			((SpawnCard)spawnCard).eliteRules = (EliteRules)0;
			DirectorPlacementRule val = new DirectorPlacementRule
			{
				placementMode = (PlacementMode)0,
				preventOverhead = true
			};
			DirectorSpawnRequest val2 = new DirectorSpawnRequest((SpawnCard)(object)spawnCard, val, new Xoroshiro128Plus((ulong)Run.instance.stageRng.nextUint))
			{
				teamIndexOverride = (TeamIndex)(ally ? 1 : 2),
				ignoreTeamMemberLimit = true
			};
			Vector3 val3 = default(Vector3);
			((Vector3)(ref val3))..ctor((float)ChaosMode.random.Next(-25, 25), 0f, (float)ChaosMode.random.Next(-25, 25));
			Vector3 val4 = center + new Vector3((val3.x >= 0f) ? Mathf.Clamp(val3.x, 5f, 25f) : Mathf.Clamp(val3.x, -5f, -25f), 10f, (val3.z >= 0f) ? Mathf.Clamp(val3.z, 5f, 25f) : Mathf.Clamp(val3.z, -5f, -25f));
			return ((SpawnCard)spawnCard).DoSpawn(val4, Quaternion.identity, val2);
		}

		public static List<PickupIndex> RollType(int item)
		{
			List<PickupIndex> result = Run.instance.availableTier1DropList;
			switch (item)
			{
			case 1:
				result = Run.instance.availableTier2DropList;
				break;
			case 2:
				result = Run.instance.availableTier3DropList;
				break;
			case 3:
				result = Run.instance.availableBossDropList;
				break;
			case 4:
				result = Run.instance.availableLunarItemDropList;
				break;
			case 5:
				result = Run.instance.availableEquipmentDropList;
				break;
			case 6:
			{
				List<List<PickupIndex>> list = new List<List<PickupIndex>>
				{
					Run.instance.availableVoidTier1DropList,
					Run.instance.availableVoidTier2DropList,
					Run.instance.availableVoidTier3DropList,
					Run.instance.availableVoidBossDropList
				};
				result = list[Tables.VoidDropTable()];
				break;
			}
			}
			return result;
		}
	}
	public class Tables
	{
		public static int GetDropTable(bool restrictVoid = false, bool restrictEquipment = false, bool restrictLunar = false)
		{
			int[] array = new int[7]
			{
				Init.commonRate.Value,
				Init.uncommonRate.Value,
				Init.legendRate.Value,
				Init.bossRate.Value,
				(!restrictLunar) ? Init.lunarRate.Value : 0,
				(!restrictEquipment) ? 15 : 0,
				ChaosMode.expansion1 ? ((!restrictVoid) ? Init.corruptRate.Value : 0) : 0
			};
			int num = 0;
			int num2 = 0;
			int[] array2 = array;
			foreach (int num3 in array2)
			{
				num += num3;
			}
			int num4 = ChaosMode.random.Next(0, num);
			for (int j = 0; j < array.Length; j++)
			{
				if (array[j] != 0)
				{
					num2 += array[j];
					if (num4 < num2)
					{
						return j;
					}
				}
			}
			return 0;
		}

		public static int GetInstanceTable()
		{
			int[] array = new int[3]
			{
				Init.swarmRate.Value,
				Mathf.Clamp(100 - Init.swarmRate.Value - Init.eventRate.Value, 0, 100),
				Init.eventRate.Value
			};
			int num = 0;
			int num2 = 0;
			int[] array2 = array;
			foreach (int num3 in array2)
			{
				num += num3;
			}
			int num4 = ChaosMode.random.Next(0, num);
			for (int j = 0; j < array.Length; j++)
			{
				if (array[j] != 0)
				{
					num2 += array[j];
					if (num4 < num2)
					{
						return j;
					}
				}
			}
			return 0;
		}

		public static int ItemDropTable(bool restrictVoid = false, bool restrictEquipment = false, bool restrictLunar = false)
		{
			int[] weights = new int[7]
			{
				Init.commonRate.Value,
				Init.uncommonRate.Value,
				Init.legendRate.Value,
				Init.bossRate.Value,
				(!restrictLunar) ? Init.lunarRate.Value : 0,
				(!restrictEquipment) ? 15 : 0,
				ChaosMode.expansion1 ? ((!restrictVoid) ? Init.corruptRate.Value : 0) : 0
			};
			return CreateDropTable(weights);
		}

		public static int VoidDropTable()
		{
			int[] weights = new int[4] { 40, 35, 20, 5 };
			return CreateDropTable(weights);
		}

		public static int SummonDropTable()
		{
			int[] weights = new int[4]
			{
				Mathf.Clamp(Init.swarmRate.Value - (int)ChaosMode.directorValue / 3, 0, 100),
				Mathf.Clamp(50 - (int)ChaosMode.directorValue / 3, 0, 100),
				Mathf.Clamp(Init.eventRate.Value, 0, 100),
				Mathf.Clamp(5 + (int)ChaosMode.directorValue, 0, 100)
			};
			return CreateDropTable(weights);
		}

		public static int EventDropTable()
		{
			List<int> list = new List<int> { 20, 5, 8, 20, 15 };
			if (Init.purgeRate.Value > 0)
			{
				list.Add(2);
			}
			if (Init.enableOrder.Value)
			{
				list.Add(2);
			}
			if (ChaosMode.expansion1)
			{
				list.AddRange(new List<int> { 10, 5 });
			}
			if (ChaosMode.expansion1)
			{
				list.AddRange(new List<int> { 8 });
			}
			int num = CreateDropTable(list.ToArray());
			Console.WriteLine("[CHAOS] event return is {0}", num);
			return num;
		}

		public static int EliteDropTable()
		{
			List<int> list = new List<int> { 25, 25, 25, 15, 10, 10 };
			if (ChaosMode.expansion1)
			{
				list.AddRange(new List<int> { 25, 10 });
			}
			return CreateDropTable(list.ToArray());
		}

		public static int CreateDropTable(int[] weights)
		{
			double num = 0.0;
			double num2 = 0.0;
			double[] array = new double[weights.Length];
			foreach (int num3 in weights)
			{
				num += (double)num3;
			}
			for (int j = 0; j < weights.Length; j++)
			{
				array[j] = (double)weights[j] / num;
			}
			double num4 = ChaosMode.random.NextDouble() * 100.0;
			for (int k = 0; k < array.Length; k++)
			{
				num2 += array[k] * 100.0;
				if (array[k] != 0.0 && num4 < num2)
				{
					return k;
				}
			}
			return 0;
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Pocket.ChaosMode", "ChaosMode", "3.0.1")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	internal class ChaosMode : BaseUnityPlugin
	{
		public static ChaosMode instance;

		public static Random random = new Random();

		private static int oldTimer;

		public static float directorValue;

		private static bool initialized;

		private static bool spawning;

		public static bool expansion1;

		public static bool expansion2;

		public void Awake()
		{
			Init.Initialize(((BaseUnityPlugin)this).Config);
			instance = this;
		}

		public static void Reset()
		{
			directorValue = (oldTimer = 0);
			spawning = (initialized = false);
			((MonoBehaviour)instance).StartCoroutine(instance.GameLoop());
		}

		private IEnumerator GameLoop()
		{
			yield return null;
			if (!Object.op_Implicit((Object)(object)Run.instance))
			{
				yield break;
			}
			Scene activeScene = SceneManager.GetActiveScene();
			string scene = ((Scene)(ref activeScene)).name;
			if (!initialized)
			{
				if (scene == "lobby")
				{
					((MonoBehaviour)this).StartCoroutine(GameLoop());
				}
				initialized = true;
				((MonoBehaviour)instance).StartCoroutine(instance.RunInit());
			}
			float t = Run.instance.GetRunStopwatch();
			bool onTimer = Mathf.FloorToInt(t) % Mathf.Clamp(Init.chaosSpeed.Value, 5, 600) == 0;
			bool timeParam = t > 5f && t != (float)oldTimer;
			if (onTimer && timeParam && scene != "bazaar")
			{
				oldTimer = (int)t;
				if (!spawning)
				{
					spawning = true;
					Actions.SpawnEveryMinute();
					((MonoBehaviour)instance).StartCoroutine(instance.FailSafeDelay());
				}
			}
			else
			{
				spawning = false;
			}
			((MonoBehaviour)this).StartCoroutine(GameLoop());
		}

		private unsafe IEnumerator RunInit()
		{
			expansion1 = Run.instance.IsExpansionEnabled((ExpansionDef)Unsafe.Read<object>((void*)ExpansionCatalog.expansionDefs[0]));
			expansion2 = Run.instance.IsExpansionEnabled((ExpansionDef)Unsafe.Read<object>((void*)ExpansionCatalog.expansionDefs[1]));
			Console.WriteLine("[CHAOS] Expansion1 loaded: {0}", expansion1);
			Console.WriteLine("[CHAOS] Expansion2 loaded: {0}", expansion2);
			random = new Random((int)Run.instance.seed);
			if (Init.startingItems.Value)
			{
				Actions.StartingItems();
			}
			yield return (object)new WaitForSeconds(20f);
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] The Avatar of Chaos invades!"
			});
		}

		private IEnumerator FailSafeDelay()
		{
			yield return (object)new WaitForSeconds(1f);
			spawning = false;
		}

		public static T FindObjectOfType<T>()
		{
			return FindObjectOfType<T>();
		}

		public static T[] FindObjectsOfType<T>()
		{
			return FindObjectsOfType<T>();
		}
	}
	public class Events
	{
		public void JellyfishEventVoid()
		{
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(JellyfishEvent());
		}

		public IEnumerator JellyfishEvent()
		{
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Jellyfish event! Zzzap!</color>"
			});
			CharacterSpawnCard spawnCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)Models.ADJellyfish.location).WaitForCompletion();
			for (int i = 0; i < 50; i++)
			{
				foreach (PlayerCharacterMasterController player in PlayerCharacterMasterController.instances)
				{
					GameObject spawnedInstance = Actions.SpawnEnemy(spawnCard, player.master.GetBody().transform.position).spawnedInstance;
					((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance));
				}
				yield return (object)new WaitForSeconds(0.5f - (float)(i / 100));
			}
		}

		public IEnumerator EliteParentEvent()
		{
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Elite Parent event! The council will see you now!</color>"
			});
			ReadOnlyCollection<PlayerCharacterMasterController> players = PlayerCharacterMasterController.instances;
			PlayerCharacterMasterController chosen = players[ChaosMode.random.Next(0, players.Count)];
			CharacterSpawnCard spawnCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)Models.ADParent.location).WaitForCompletion();
			GameObject spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADFire);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADIce);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADLightning);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADGhost);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADPoison);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADEcho);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			spawnedInstance7 = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			Actions.EquipOneElite(spawnedInstance7.GetComponent<CharacterMaster>().inventory, Models.ADEarth);
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance7));
			yield return null;
		}

		public IEnumerator FinalEncounter()
		{
			if (ChaosMode.expansion1)
			{
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Mutated event! The King of Nothing loses control!</color>"
				});
			}
			else
			{
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Empty event! The King of Nothing invades!</color>"
				});
			}
			ReadOnlyCollection<PlayerCharacterMasterController> players = PlayerCharacterMasterController.instances;
			PlayerCharacterMasterController chosen = players[ChaosMode.random.Next(0, players.Count)];
			CharacterSpawnCard spawnCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)Models.ADBrother.location).WaitForCompletion();
			GameObject spawnedInstance = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			if (ChaosMode.expansion1)
			{
				Actions.EquipOneElite(spawnedInstance.GetComponent<CharacterMaster>().inventory, Models.ADVoid);
			}
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance));
			yield return null;
		}

		public IEnumerator VoidEncounter()
		{
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>[VO?ID E??VEN?T][E?SCA?PE!]</color>"
			});
			ReadOnlyCollection<PlayerCharacterMasterController> players = PlayerCharacterMasterController.instances;
			PlayerCharacterMasterController chosen = players[ChaosMode.random.Next(0, players.Count)];
			CharacterSpawnCard spawnCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)Models.ADVoidling.location).WaitForCompletion();
			GameObject spawnedInstance = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance));
			yield return null;
		}

		public IEnumerator StormEncounter()
		{
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Storm event! Seek and ye shall find!</color>"
			});
			ReadOnlyCollection<PlayerCharacterMasterController> players = PlayerCharacterMasterController.instances;
			PlayerCharacterMasterController chosen = players[ChaosMode.random.Next(0, players.Count)];
			CharacterSpawnCard spawnCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)Models.ADFalseSon.location).WaitForCompletion();
			GameObject spawnedInstance = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position).spawnedInstance;
			((MonoBehaviour)ChaosMode.instance).StartCoroutine(CheckIfEnemyDied(spawnedInstance));
			yield return null;
		}

		public IEnumerator PurgeAllItems()
		{
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[Chaos] <color=#ff0000>Purge event! You don't need these, right?</color>"
			});
			foreach (PlayerCharacterMasterController player in PlayerCharacterMasterController.instances)
			{
				((MonoBehaviour)ChaosMode.instance).StartCoroutine(Purge(player));
			}
			yield return null;
		}

		public IEnumerator Purge(PlayerCharacterMasterController player)
		{
			CharacterMaster master = player.master;
			List<ItemIndex> inventory = master.inventory.itemAcquisitionOrder;
			int cap = ChaosMode.random.Next(3, inventory.Count - 2);
			int j = 0;
			for (int i = inventory.Count - 1; i >= cap; i--)
			{
				ItemIndex slot = inventory[ChaosMode.random.Next(0, inventory.Count)];
				master.inventory.RemoveItem(slot, Mathf.Min(master.inventory.GetItemCount(slot), int.MaxValue));
				yield return (object)new WaitForSeconds(1f);
				j++;
				if (j > Init.purgeRate.Value)
				{
					break;
				}
			}
		}

		public IEnumerator Corruption()
		{
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>[VO?ID E??VEN?T][B?EC?OME O??NE OF U?S]</color>"
			});
			int corrupt = ChaosMode.random.Next(1, 5);
			for (int i = 0; i < corrupt; i++)
			{
				List<PickupIndex> corruption = Actions.RollType(6);
				Actions.GiveToAllPlayers(corruption[ChaosMode.random.Next(0, corruption.Count)]);
				yield return (object)new WaitForSeconds(1f);
			}
		}

		public IEnumerator GainFriend()
		{
			List<SpawnCardData> allies = new List<SpawnCardData>
			{
				Models.ADBeetleGuard,
				Models.ADBrother,
				Models.ADNullifier,
				Models.ADTitanGold,
				Models.ADLunarGolem,
				Models.ADVagrant
			};
			if (ChaosMode.expansion1)
			{
				allies.Add(Models.ADGup);
			}
			if (ChaosMode.expansion2)
			{
				allies.AddRange(new List<SpawnCardData>
				{
					Models.ADChild,
					Models.ADHalcyonite,
					Models.ADScorchling
				});
			}
			SpawnCardData ally = allies[ChaosMode.random.Next(0, allies.Count)];
			CharacterSpawnCard spawnCard = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)ally.location).WaitForCompletion();
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Friendly event! " + ally.name + " wants to help you this stage!</color>"
			});
			ReadOnlyCollection<PlayerCharacterMasterController> players = PlayerCharacterMasterController.instances;
			PlayerCharacterMasterController chosen = players[ChaosMode.random.Next(0, players.Count)];
			_ = Actions.SpawnEnemy(spawnCard, chosen.master.GetBody().transform.position, ally: true).spawnedInstance;
			yield return null;
		}

		public IEnumerator SequenceEvent()
		{
			foreach (PlayerCharacterMasterController player in PlayerCharacterMasterController.instances)
			{
				CharacterMaster master = player.master;
				int[] tiers = new int[6]
				{
					master.inventory.GetTotalItemCountOfTier((ItemTier)0),
					master.inventory.GetTotalItemCountOfTier((ItemTier)1),
					master.inventory.GetTotalItemCountOfTier((ItemTier)2),
					master.inventory.GetTotalItemCountOfTier((ItemTier)4),
					master.inventory.GetTotalItemCountOfTier((ItemTier)3),
					0
				};
				if (ChaosMode.expansion1)
				{
					tiers[5] = master.inventory.GetTotalItemCountOfTier((ItemTier)6);
					tiers[5] += master.inventory.GetTotalItemCountOfTier((ItemTier)7);
					tiers[5] += master.inventory.GetTotalItemCountOfTier((ItemTier)8);
					tiers[5] += master.inventory.GetTotalItemCountOfTier((ItemTier)9);
				}
				Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}", tiers[0], tiers[1], tiers[2], tiers[3], tiers[4], tiers[5]);
				List<ItemIndex> inventory = master.inventory.itemAcquisitionOrder;
				while (master.inventory.itemAcquisitionOrder.Count > 0)
				{
					ItemIndex slot = inventory[0];
					master.inventory.RemoveItem(slot, Mathf.Min(master.inventory.GetItemCount(slot), int.MaxValue));
				}
				for (int i = 0; i < 5; i++)
				{
					if (tiers[i] > 0)
					{
						List<PickupIndex> tieredItem = Actions.RollType(i);
						Actions.GiveToOnePlayer(player, tieredItem[ChaosMode.random.Next(0, tieredItem.Count)], tiers[i]);
					}
				}
				if (ChaosMode.expansion1 && tiers[5] > 0)
				{
					List<PickupIndex> tieredItem2 = Actions.RollType(6);
					Actions.GiveToOnePlayer(player, tieredItem2[ChaosMode.random.Next(0, tieredItem2.Count)], tiers[5]);
				}
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Order event! Your body has been sequenced!</color>"
				});
			}
			yield return null;
		}

		public IEnumerator ForceTeleportEvent()
		{
			if (!((NetworkBehaviour)Run.instance).isServer)
			{
				yield return null;
			}
			SceneDef newScene = Addressables.LoadAssetAsync<SceneDef>((object)Models.scenes[ChaosMode.random.Next(0, Models.scenes.Length)]).WaitForCompletion();
			SceneExitController sceneExitController = ChaosMode.FindObjectOfType<SceneExitController>();
			if ((Object)(object)sceneExitController == (Object)null)
			{
				sceneExitController = new SceneExitController();
			}
			sceneExitController.useRunNextStageScene = false;
			sceneExitController.destinationScene = newScene;
			sceneExitController.SetState((ExitState)2);
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Teleportation event! Disappear!</color>"
			});
			yield return null;
		}

		public IEnumerator GoldEvent()
		{
			foreach (PlayerCharacterMasterController player in PlayerCharacterMasterController.instances)
			{
				CharacterMaster master = player.master;
				master.money = (uint)ChaosMode.random.Next(0, 100000);
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Halcyon event! Random Number Gold-erator!</color>"
				});
			}
			yield return null;
		}

		public IEnumerator TeleporterEvent()
		{
			if (!((NetworkBehaviour)Run.instance).isServer)
			{
				yield return null;
			}
			ChaosMode.FindObjectOfType<TeleporterInteraction>().isActivated = true;
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Haste event! Start the teleporter!</color>"
			});
			yield return null;
		}

		public IEnumerator PortalEvent()
		{
			if (!((NetworkBehaviour)Run.instance).isServer)
			{
				yield return null;
			}
			ChaosMode.FindObjectOfType<TeleporterInteraction>().shouldAttemptToSpawnGoldshoresPortal = ChaosMode.random.Next(0, 2) == 0;
			ChaosMode.FindObjectOfType<TeleporterInteraction>().shouldAttemptToSpawnMSPortal = ChaosMode.random.Next(0, 2) == 0;
			ChaosMode.FindObjectOfType<TeleporterInteraction>().shouldAttemptToSpawnShopPortal = ChaosMode.random.Next(0, 2) == 0;
			Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
			{
				baseToken = "<color=#bb0011>[CHAOS] <color=#ff0000>Orb event! The teleporter has changed!</color>"
			});
			yield return null;
		}

		public IEnumerator CheckIfEnemyDied(GameObject enemy, int reward = 20)
		{
			while ((Object)(object)enemy != (Object)null)
			{
				yield return (object)new WaitForSeconds(0.1f);
			}
			foreach (PlayerCharacterMasterController player in PlayerCharacterMasterController.instances)
			{
				((Component)player).GetComponent<CharacterMaster>().GiveMoney((uint)Run.instance.GetDifficultyScaledCost(reward));
			}
		}
	}
	internal class Hooks
	{
		public static void ChestBehavior_ItemDrop(orig_ItemDrop orig, ChestBehavior self)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			if (!CheckChestTypeIsValid(self))
			{
				orig.Invoke(self);
				return;
			}
			PropertyInfo property = typeof(ChestBehavior).GetProperty("dropPickup", BindingFlags.Instance | BindingFlags.Public);
			if (!((PickupIndex)property.GetValue(self) == PickupIndex.none))
			{
				List<PickupIndex> list = Actions.RollType(Tables.ItemDropTable());
				PickupIndex val = list[ChaosMode.random.Next(0, list.Count)];
				property.SetValue(self, val);
				orig.Invoke(self);
			}
		}

		public static void ShrineChanceBehavior_AddShrineStack(orig_AddShrineStack orig, ShrineChanceBehavior self, Interactor activator)
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			int num = Reflection.GetFieldValue<int>((object)self, "successfulPurchaseCount") + 1;
			Reflection.SetFieldValue<int>((object)self, "successfulPurchaseCount", num);
			List<PickupIndex> list = Actions.RollType(Tables.GetDropTable(restrictVoid: false, restrictEquipment: true));
			PickupIndex val = list[ChaosMode.random.Next(0, list.Count)];
			PickupDropletController.CreatePickupDroplet(val, self.dropletOrigin.position, self.dropletOrigin.forward * 20f);
			Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage
			{
				subjectAsCharacterBody = ((Component)activator).GetComponent<CharacterBody>(),
				baseToken = "SHRINE_CHANCE_SUCCESS_MESSAGE"
			});
			Reflection.GetFieldValue<Action<bool, Interactor>>((object)self, "onShrineChancePurchaseGlobal")?.Invoke(arg1: true, activator);
			Reflection.SetFieldValue<bool>((object)self, "waitingForRefresh", true);
			Reflection.SetFieldValue<float>((object)self, "refreshTimer", 2f);
			if (Reflection.GetFieldValue<int>((object)self, "successfulPurchaseCount") >= self.maxPurchaseCount)
			{
				((Component)self.symbolTransform).gameObject.SetActive(false);
			}
		}

		public static bool CheckChestTypeIsValid(ChestBehavior self)
		{
			string text = ((Object)((Component)self).gameObject).name.Replace("(Clone)", "").Trim();
			Console.WriteLine("[CHAOS] ChestBehavior gameobject name: {0}", text);
			return text != "EquipmentBarrel" && text != "LunarChest" && text != "VoidChest" && text != "GoldChest";
		}

		public static void Run_Start(orig_Start orig, Run self)
		{
			ChaosMode.Reset();
			orig.Invoke(self);
		}
	}
	internal class Init
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static ArtifactStateChangeDelegate <0>__OnArtifactEnabled;

			public static ArtifactStateChangeDelegate <1>__OnArtifactDisabled;
		}

		public static ArtifactDef ChaosArtifact;

		public static bool multiplayerMode = true;

		public static ConfigEntry<bool> artifactMode { get; set; }

		public static ConfigEntry<int> chaosSpeed { get; set; }

		public static ConfigEntry<bool> startingItems { get; set; }

		public static ConfigEntry<bool> giveItems { get; set; }

		public static ConfigEntry<bool> randomShrines { get; set; }

		public static ConfigEntry<bool> randomSpecialChests { get; set; }

		public static ConfigEntry<bool> includeLunar { get; set; }

		public static ConfigEntry<int> commonRate { get; set; }

		public static ConfigEntry<int> uncommonRate { get; set; }

		public static ConfigEntry<int> legendRate { get; set; }

		public static ConfigEntry<int> bossRate { get; set; }

		public static ConfigEntry<int> lunarRate { get; set; }

		public static ConfigEntry<int> corruptRate { get; set; }

		public static ConfigEntry<int> swarmRate { get; set; }

		public static ConfigEntry<int> eventRate { get; set; }

		public static ConfigEntry<int> ambushRate { get; set; }

		public static ConfigEntry<int> eliteRate { get; set; }

		public static ConfigEntry<bool> spawnLimit { get; set; }

		public static ConfigEntry<int> maxEnemies { get; set; }

		public static ConfigEntry<int> swarmAggression { get; set; }

		public static ConfigEntry<bool> enableOrder { get; set; }

		public static ConfigEntry<int> purgeRate { get; set; }

		public static void Initialize(ConfigFile Config)
		{
			InitConfig(Config);
			if (artifactMode.Value)
			{
				InitArtifact();
			}
			else
			{
				AddHooks();
			}
		}

		public static void InitArtifact()
		{
			//IL_0093: 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: Expected O, but got Unknown
			//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_00bf: Expected O, but got Unknown
			ChaosArtifact = ScriptableObject.CreateInstance<ArtifactDef>();
			ChaosArtifact.cachedName = "ARTIFACT_ChaosMode";
			ChaosArtifact.nameToken = "Artifact of Chaos Mode";
			ChaosArtifact.descriptionToken = "Randomizes chest drops, spawns bosses on a timer, manipulates items and causes ABSOLUTE CHAOS!";
			AssetBundle val = AssetBundle.LoadFromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("chaos.chaosmode_assets"));
			ChaosArtifact.smallIconSelectedSprite = val.LoadAsset<Sprite>("Assets/ChaosMode/Selected.png");
			ChaosArtifact.smallIconDeselectedSprite = val.LoadAsset<Sprite>("Assets/ChaosMode/Unselected.png");
			ContentAddition.AddArtifactDef(ChaosArtifact);
			object obj = <>O.<0>__OnArtifactEnabled;
			if (obj == null)
			{
				ArtifactStateChangeDelegate val2 = OnArtifactEnabled;
				<>O.<0>__OnArtifactEnabled = val2;
				obj = (object)val2;
			}
			RunArtifactManager.onArtifactEnabledGlobal += (ArtifactStateChangeDelegate)obj;
			object obj2 = <>O.<1>__OnArtifactDisabled;
			if (obj2 == null)
			{
				ArtifactStateChangeDelegate val3 = OnArtifactDisabled;
				<>O.<1>__OnArtifactDisabled = val3;
				obj2 = (object)val3;
			}
			RunArtifactManager.onArtifactDisabledGlobal += (ArtifactStateChangeDelegate)obj2;
		}

		public static void OnArtifactEnabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
		{
			if ((Object)(object)artifactDef == (Object)(object)ChaosArtifact && NetworkServer.active)
			{
				AddHooks();
			}
		}

		public static void OnArtifactDisabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
		{
			if ((Object)(object)artifactDef == (Object)(object)ChaosArtifact && NetworkServer.active)
			{
				RemoveHooks();
			}
		}

		public static void AddHooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			ChestBehavior.ItemDrop += new hook_ItemDrop(Hooks.ChestBehavior_ItemDrop);
			if (randomShrines.Value)
			{
				ShrineChanceBehavior.AddShrineStack += new hook_AddShrineStack(Hooks.ShrineChanceBehavior_AddShrineStack);
			}
			Run.Start += new hook_Start(Hooks.Run_Start);
		}

		public static void RemoveHooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			ChestBehavior.ItemDrop -= new hook_ItemDrop(Hooks.ChestBehavior_ItemDrop);
			if (randomShrines.Value)
			{
				ShrineChanceBehavior.AddShrineStack -= new hook_AddShrineStack(Hooks.ShrineChanceBehavior_AddShrineStack);
			}
			Run.Start -= new hook_Start(Hooks.Run_Start);
		}

		[ConCommand(/*Could not decode attribute arguments.*/)]
		private static void EnableMultiplayer(ConCommandArgs args)
		{
			if (!multiplayerMode)
			{
				AddHooks();
			}
			multiplayerMode = true;
		}

		[ConCommand(/*Could not decode attribute arguments.*/)]
		private static void DisableMultiplayer(ConCommandArgs args)
		{
			if (multiplayerMode)
			{
				RemoveHooks();
			}
			multiplayerMode = false;
		}

		public static void InitConfig(ConfigFile Config)
		{
			artifactMode = Config.Bind<bool>("Mode Settings", "ArtifactMode", true, "Enable or disable the mod as an artifact.\nTurn this off if playing multiplayer with unmodded clients.");
			chaosSpeed = Config.Bind<int>("Chaos Settings", "ChaosSpeed", 60, "Raises the speed that Chaos Mode activates.\nIndicates how many seconds to wait before each Event or Spawn.");
			startingItems = Config.Bind<bool>("Chaos Settings", "StartingItems", true, "Start each run with 3 Common items, 2 Uncommon items and 1 Legendary item.\nApplies to all players.");
			giveItems = Config.Bind<bool>("Chaos Settings", "GiveItems", true, "Turn random item distribution on or off.\nItems either will or won't be added to your inventory when an event triggers.");
			randomShrines = Config.Bind<bool>("Chaos Settings", "RandomShrines", true, "Randomizes drop pools for Shrines of Chance.\nItems either will or won't be added to your inventory when an event triggers.");
			randomSpecialChests = Config.Bind<bool>("Chaos Settings", "RandomSpecialChests", false, "Randomizes drop pools for Special Chest types.\nItems dropped from Legendary Chests, Lunar Pods, Equipment Barrels, and Void Chests are randomized.");
			includeLunar = Config.Bind<bool>("Item Settings", "IncludeLunar", false, "Include or exclude Lunar items with randomly dispersed items.\nLunar items can still be found in chests.");
			commonRate = Config.Bind<int>("Item Settings", "CommonRate", 20, "Raises the likelyhood that a common item will be rolled.\nRoughly CommonRate% of items.");
			uncommonRate = Config.Bind<int>("Item Settings", "UncommonRate", 15, "Raises the likelyhood that an uncommon item will be rolled.\nRoughly UncommonRate% of items.");
			legendRate = Config.Bind<int>("Item Settings", "LegendRate", 10, "Raises the likelyhood that a legendary item will be rolled.\nRoughly LegendRate% of items.");
			bossRate = Config.Bind<int>("Item Settings", "BossRate", 10, "Raises the likelyhood that a boss item will be rolled.\nRoughly BossRate% of items.");
			lunarRate = Config.Bind<int>("Item Settings", "LunarRate", 10, "Raises the likelyhood that a lunar item will be rolled.\nRoughly LunarRate% of items.");
			corruptRate = Config.Bind<int>("Item Settings", "CorruptRate", 10, "Raises the likelyhood that a corrupted item will be rolled.\nRoughly CorruptRate% of items. (Requires Survivors of The Void)");
			swarmRate = Config.Bind<int>("Spawn Settings", "SwarmRate", 15, "Boosts the lilelyhood of enemies being spawned in swarms.\nRoughly SwarmRate% of spawns.");
			eventRate = Config.Bind<int>("Spawn Settings", "EventRate", 20, "Boosts how often events are triggered.\nRoughly EventRate% of spawns.");
			ambushRate = Config.Bind<int>("Spawn Settings", "AmbushRate", 15, "Boosts how often higher-tier boss enemies are spawned (not during swarms).\nRoughly AmbushRate% of enemies.");
			eliteRate = Config.Bind<int>("Spawn Settings", "EliteRate", 50, "Percent likelyhood that enemies spawned will be Elite.\nRoughly EliteRate% of enemies.");
			spawnLimit = Config.Bind<bool>("Spawn Settings", "SpawnLimit", true, "Places or removes an internal cap on enemy spawns.\n*WARNING! EXPERIMENTAL AND CAN CAUSE MASSIVE LAG!*");
			maxEnemies = Config.Bind<int>("Spawn Settings", "MaxEnemies", 20, "Maximum amount of enemies that *CAN* be spawned during a swarm.\n*Disabling SpawnLimit will cause the mod to ignore this value.*");
			swarmAggression = Config.Bind<int>("Spawn Settings", "SwarmAggression", 1, "Multiplies the amount of enemies that are spawned during swarms!");
			enableOrder = Config.Bind<bool>("Event Settings", "EnableOrder", false, "Enable or disable the Sequencing order event.\nThe order event takes your items and redistributes them similar to the Shrine of Order.");
			purgeRate = Config.Bind<int>("Event Settings", "PurgeRate", 5, "Limits how many items a Purge can take (limited to all but 3).\nPurge will remove *UP TO* PurgeRate of your items. (Set to 0 to disable Purge events.)");
		}
	}
	internal static class Models
	{
		public static EliteEquipment ADFire = new EliteEquipment
		{
			prefix = "Blazing",
			addressable = "RoR2/Base/EliteFire/EliteFireEquipment.asset"
		};

		public static EliteEquipment ADIce = new EliteEquipment
		{
			prefix = "Glacial",
			addressable = "RoR2/Base/EliteIce/EliteIceEquipment.asset"
		};

		public static EliteEquipment ADLightning = new EliteEquipment
		{
			prefix = "Overloading",
			addressable = "RoR2/Base/EliteLightning/EliteLightningEquipment.asset"
		};

		public static EliteEquipment ADGhost = new EliteEquipment
		{
			prefix = "Celestine",
			addressable = "RoR2/Base/EliteHaunted/EliteHauntedEquipment.asset"
		};

		public static EliteEquipment ADPoison = new EliteEquipment
		{
			prefix = "Malachite",
			addressable = "RoR2/Base/ElitePoison/ElitePoisonEquipment.asset"
		};

		public static EliteEquipment ADEcho = new EliteEquipment
		{
			prefix = "Perfected",
			addressable = "RoR2/Base/EliteLunar/EliteLunarEquipment.asset"
		};

		public static EliteEquipment ADEarth = new EliteEquipment
		{
			prefix = "Mending",
			addressable = "RoR2/DLC1/EliteEarth/EliteEarthEquipment.asset"
		};

		public static EliteEquipment ADVoid = new EliteEquipment
		{
			prefix = "Voidtouched",
			addressable = "RoR2/DLC1/EliteVoid/EliteVoidEquipment.asset"
		};

		public static EliteEquipment ADSpeed = new EliteEquipment
		{
			prefix = "Speedy?",
			addressable = "RoR2/DLC1/EliteSecretSpeedEquipment.asset"
		};

		public static EliteEquipment ADGold = new EliteEquipment
		{
			prefix = "Golden?",
			addressable = "RoR2/Junk/EliteGold/EliteGoldEquipment.asset"
		};

		public static EliteEquipment ADYellow = new EliteEquipment
		{
			prefix = "Yellow?",
			addressable = "RoR2/Junk/EliteYellow/EliteYellowEquipment.asset"
		};

		public static SpawnCardData ADBeetle = new SpawnCardData
		{
			name = "Beetle",
			location = "RoR2/Base/Beetle/cscBeetle.asset",
			difficultyBase = 0.1f,
			rewardBase = 5f
		};

		public static SpawnCardData ADBeetleGuard = new SpawnCardData
		{
			name = "Beetle Guard",
			location = "RoR2/Base/Beetle/cscBeetleGuard.asset",
			difficultyBase = 0.4f,
			rewardBase = 12f
		};

		public static SpawnCardData ADBeetleQueen = new SpawnCardData
		{
			name = "Beetle Queen",
			location = "RoR2/Base/Beetle/cscBeetleQueen.asset",
			difficultyBase = 1f,
			rewardBase = 23f
		};

		public static SpawnCardData ADLemurian = new SpawnCardData
		{
			name = "Lemurian",
			location = "RoR2/Base/Lemurian/cscLemurian.asset",
			difficultyBase = 0.2f,
			rewardBase = 23f
		};

		public static SpawnCardData ADBigLemurian = new SpawnCardData
		{
			name = "Elder Lemurian",
			location = "RoR2/Base/LemurianBruiser/cscLemurianBruiser.asset",
			difficultyBase = 0.9f,
			rewardBase = 23f
		};

		public static SpawnCardData ADBell = new SpawnCardData
		{
			name = "Brass Contraption",
			location = "RoR2/Base/Bell/cscBell.asset",
			difficultyBase = 0.8f,
			rewardBase = 16f
		};

		public static SpawnCardData ADBison = new SpawnCardData
		{
			name = "Bison",
			location = "RoR2/Base/Bison/cscBison.asset",
			difficultyBase = 0.3f,
			rewardBase = 9f
		};

		public static SpawnCardData ADTemplar = new SpawnCardData
		{
			name = "Clay Templar",
			location = "RoR2/Base/ClayBruiser/cscClayBruiser.asset",
			difficultyBase = 0.9f,
			rewardBase = 21f
		};

		public static SpawnCardData ADApothecary = new SpawnCardData
		{
			name = "Clay Apothecary",
			location = "RoR2/DLC1/ClayGrenadier/cscClayGrenadier.asset",
			difficultyBase = 0.8f,
			rewardBase = 18f
		};

		public static SpawnCardData ADGolem = new SpawnCardData
		{
			name = "Stone Golem",
			location = "RoR2/Base/Golem/cscGolem.asset",
			difficultyBase = 0.4f,
			rewardBase = 10f
		};

		public static SpawnCardData ADWisp = new SpawnCardData
		{
			name = "Lesser Wisp",
			location = "RoR2/Base/Wisp/cscLesserWisp.asset",
			difficultyBase = 0.1f,
			rewardBase = 4f
		};

		public static SpawnCardData ADGreaterWisp = new SpawnCardData
		{
			name = "Greater Wisp",
			location = "RoR2/Base/GreaterWisp/cscGreaterWisp.asset",
			difficultyBase = 0.7f,
			rewardBase = 14f
		};

		public static SpawnCardData ADJellyfish = new SpawnCardData
		{
			name = "Jellyfish",
			location = "RoR2/Base/Jellyfish/cscJellyfish.asset",
			difficultyBase = 0.2f,
			rewardBase = 7f
		};

		public static SpawnCardData ADMushroom = new SpawnCardData
		{
			name = "Mini Mushroom",
			location = "RoR2/Base/MiniMushroom/cscMiniMushroom.asset",
			difficultyBase = 0.9f,
			rewardBase = 19f
		};

		public static SpawnCardData ADVulture = new SpawnCardData
		{
			name = "Alloy Vulture",
			location = "RoR2/Base/Vulture/cscVulture.asset",
			difficultyBase = 0.7f,
			rewardBase = 14f
		};

		public static SpawnCardData ADImp = new SpawnCardData
		{
			name = "Imp",
			location = "RoR2/Base/Imp/cscImp.asset",
			difficultyBase = 0.6f,
			rewardBase = 16f
		};

		public static SpawnCardData ADParent = new SpawnCardData
		{
			name = "Parent",
			location = "RoR2/Base/Parent/cscParent.asset",
			difficultyBase = 0.9f,
			rewardBase = 23f
		};

		public static SpawnCardData ADLunarGolem = new SpawnCardData
		{
			name = "Lunar Chimera",
			location = "RoR2/Base/LunarGolem/cscLunarGolem.asset",
			difficultyBase = 1.1f,
			rewardBase = 25f
		};

		public static SpawnCardData ADLunarWisp = new SpawnCardData
		{
			name = "Lunar Chimera",
			location = "RoR2/Base/LunarWisp/cscLunarWisp.asset",
			difficultyBase = 1.3f,
			rewardBase = 27f
		};

		public static SpawnCardData ADLunarBomb = new SpawnCardData
		{
			name = "Lunar Chimera",
			location = "RoR2/Base/LunarExploder/cscLunarExploder.asset",
			difficultyBase = 0.8f,
			rewardBase = 19f
		};

		public static SpawnCardData ADNullifier = new SpawnCardData
		{
			name = "Void Reaver",
			location = "RoR2/Base/Nullifier/cscNullifier.asset",
			difficultyBase = 1.5f,
			rewardBase = 32f
		};

		public static SpawnCardData ADArchWisp = new SpawnCardData
		{
			name = "Archaic Wisp",
			location = "RoR2/Junk/ArchWisp/cscArchWisp.asset",
			difficultyBase = 0.8f,
			rewardBase = 23f
		};

		public static SpawnCardData ADHermitCrab = new SpawnCardData
		{
			name = "Hermit Crab",
			location = "RoR2/Base/HermitCrab/cscHermitCrab.asset",
			difficultyBase = 0.5f,
			rewardBase = 8f
		};

		public static SpawnCardData ADTitan = new SpawnCardData
		{
			name = "Stone Titan",
			location = "RoR2/Base/Titan/cscTitanBlackBeach.asset",
			difficultyBase = 1.2f,
			rewardBase = 24f
		};

		public static SpawnCardData ADVagrant = new SpawnCardData
		{
			name = "Wandering Vagrant",
			location = "RoR2/Base/Vagrant/cscVagrant.asset",
			difficultyBase = 0.7f,
			rewardBase = 17f
		};

		public static SpawnCardData ADOverlord = new SpawnCardData
		{
			name = "Imp Overlord",
			location = "RoR2/Base/ImpBoss/cscImpBoss.asset",
			difficultyBase = 1.3f,
			rewardBase = 19f
		};

		public static SpawnCardData ADTitanGold = new SpawnCardData
		{
			name = "Aurelionite",
			location = "RoR2/Base/Titan/cscTitanGold.asset",
			difficultyBase = 1.4f,
			rewardBase = 30f
		};

		public static SpawnCardData ADDunestrider = new SpawnCardData
		{
			name = "Clay Dunestrider",
			location = "RoR2/Base/ClayBoss/cscClayBoss.asset",
			difficultyBase = 1f,
			rewardBase = 22f
		};

		public static SpawnCardData ADGrandparent = new SpawnCardData
		{
			name = "Grandparent",
			location = "RoR2/Base/Grandparent/cscGrandparent.asset",
			difficultyBase = 1.6f,
			rewardBase = 34f
		};

		public static SpawnCardData ADGhibli = new SpawnCardData
		{
			name = "Grovetender",
			location = "RoR2/Base/Gravekeeper/cscGravekeeper.asset",
			difficultyBase = 1.3f,
			rewardBase = 31f
		};

		public static SpawnCardData ADMagmaWorm = new SpawnCardData
		{
			name = "Magma Worm",
			location = "RoR2/Base/MagmaWorm/cscMagmaWorm.asset",
			difficultyBase = 1.5f,
			rewardBase = 32f
		};

		public static SpawnCardData ADOverWorm = new SpawnCardData
		{
			name = "Overloading Worm",
			location = "RoR2/Base/ElectricWorm/cscElectricWorm.asset",
			difficultyBase = 1.8f,
			rewardBase = 36f
		};

		public static SpawnCardData ADRoboBall = new SpawnCardData
		{
			name = "Solus Control Unit",
			location = "RoR2/Base/RoboBallBoss/cscRoboBallBoss.asset",
			difficultyBase = 1.4f,
			rewardBase = 23f
		};

		public static SpawnCardData ADScav = new SpawnCardData
		{
			name = "Scavenger",
			location = "RoR2/Base/Scav/cscScav.asset",
			difficultyBase = 1.6f,
			rewardBase = 37f
		};

		public static SpawnCardData ADLarva = new SpawnCardData
		{
			name = "Acid Larva",
			location = "RoR2/DLC1/AcidLarva/cscAcidLarva.asset",
			difficultyBase = 0.6f,
			rewardBase = 10f
		};

		public static SpawnCardData ADAssassin = new SpawnCardData
		{
			name = "Assassin",
			location = "RoR2/DLC1/Assassin2/cscAssassin2.asset",
			difficultyBase = 0.5f,
			rewardBase = 14f
		};

		public static SpawnCardData ADPest = new SpawnCardData
		{
			name = "Blind Pest",
			location = "RoR2/DLC1/FlyingVermin/cscFlyingVermin.asset",
			difficultyBase = 0.7f,
			rewardBase = 16f
		};

		public static SpawnCardData ADVermin = new SpawnCardData
		{
			name = "Blind Vermin",
			location = "RoR2/DLC1/Vermin/cscVermin.asset",
			difficultyBase = 0.6f,
			rewardBase = 12f
		};

		public static SpawnCardData ADBarnacle = new SpawnCardData
		{
			name = "Void Barnacle",
			location = "RoR2/DLC1/VoidBarnacle/cscVoidBarnacle.asset",
			difficultyBase = 1f,
			rewardBase = 20f
		};

		public static SpawnCardData ADJailer = new SpawnCardData
		{
			name = "Void Jailer",
			location = "RoR2/DLC1/VoidJailer/cscVoidJailer.asset",
			difficultyBase = 1.8f,
			rewardBase = 38f
		};

		public static SpawnCardData ADMegaCrab = new SpawnCardData
		{
			name = "Void Devastator",
			location = "RoR2/DLC1/VoidMegaCrab/cscVoidMegaCrab.asset",
			difficultyBase = 2f,
			rewardBase = 43f
		};

		public static SpawnCardData ADGup = new SpawnCardData
		{
			name = "Gup",
			location = "RoR2/DLC1/Gup/cscGupBody.asset",
			difficultyBase = 1f,
			rewardBase = 20f
		};

		public static SpawnCardData ADInfestor = new SpawnCardData
		{
			name = "Void Infestor",
			location = "RoR2/DLC1/EliteVoid/cscVoidInfestor.asset",
			difficultyBase = 0.6f,
			rewardBase = 13f
		};

		public static SpawnCardData ADMajor = new SpawnCardData
		{
			name = "??? Construct",
			location = "RoR2/DLC1/MajorAndMinorConstruct/cscMajorConstruct.asset",
			difficultyBase = 1f,
			rewardBase = 20f
		};

		public static SpawnCardData ADMinor = new SpawnCardData
		{
			name = "Alpha Construct",
			location = "RoR2/DLC1/MajorAndMinorConstruct/cscMinorConstruct.asset",
			difficultyBase = 0.5f,
			rewardBase = 11f
		};

		public static SpawnCardData ADMega = new SpawnCardData
		{
			name = "Xi Construct",
			location = "RoR2/DLC1/MajorAndMinorConstruct/cscMegaConstruct.asset",
			difficultyBase = 1f,
			rewardBase = 20f
		};

		public static SpawnCardData ADHalcyonite = new SpawnCardData
		{
			name = "Halcyonite",
			location = "RoR2/DLC2/Halcyonite/cscHalcyonite.asset",
			difficultyBase = 2f,
			rewardBase = 34f
		};

		public static SpawnCardData ADScorchling = new SpawnCardData
		{
			name = "Scorch Wurm",
			location = "RoR2/DLC2/Scorchling/cscScorchling.asset",
			difficultyBase = 1.2f,
			rewardBase = 28f
		};

		public static SpawnCardData ADChild = new SpawnCardData
		{
			name = "Child",
			location = "RoR2/DLC2/Child/cscChild.asset",
			difficultyBase = 0.6f,
			rewardBase = 12f
		};

		public static SpawnCardData ADBrother = new SpawnCardData
		{
			name = "Mithrix",
			location = "RoR2/Base/Brother/cscBrother.asset",
			difficultyBase = 2f,
			rewardBase = 40f
		};

		public static SpawnCardData ADVoidling = new SpawnCardData
		{
			name = "Voidling",
			location = "RoR2/DLC1/VoidRaidCrab/cscMiniVoidRaidCrabBase.asset",
			difficultyBase = 2f,
			rewardBase = 45f
		};

		public static SpawnCardData ADFalseSon = new SpawnCardData
		{
			name = "False Son",
			location = "RoR2/DLC2/FalseSonBoss/cscFalseSonBoss.asset",
			difficultyBase = 3f,
			rewardBase = 60f
		};

		public static string[] scenes = new string[15]
		{
			"RoR2/Base/blackbeach/blackbeach.asset", "RoR2/Base/blackbeach2/blackbeach2.asset", "RoR2/Base/dampcavesimple/dampcavesimple.asset", "RoR2/Base/foggyswamp/foggyswamp.asset", "RoR2/Base/frozenwall/frozenwall.asset", "RoR2/Base/golemplains/golemplains.asset", "RoR2/Base/golemplains2/golemplains2.asset", "RoR2/Base/goolake/goolake.asset", "RoR2/Base/rootjungle/rootjungle.asset", "RoR2/Base/shipgraveyard/shipgraveyard.asset",
			"RoR2/Base/skymeadow/skymeadow.asset", "RoR2/Base/wispgraveyard/wispgraveyard.asset", "RoR2/DLC1/ancientloft/ancientloft.asset", "RoR2/DLC1/snowyforest/snowyforest.asset", "RoR2/DLC1/sulfurpools/sulfurpools.asset"
		};
	}
	internal class SpawnCardData
	{
		public string name { get; set; }

		public string location { get; set; }

		public float difficultyBase { get; set; }

		public float rewardBase { get; set; }

		public int spawnCost { get; set; }

		public SpawnCardData()
		{
			name = "Test Enemy";
			location = "RoR2/Base/Beetle/cscBeetle.asset";
			difficultyBase = 0.1f;
			rewardBase = 5f;
			spawnCost = 1;
		}
	}
	internal class EliteEquipment
	{
		public string prefix { get; set; }

		public string addressable { get; set; }
	}
}