Decompiled source of Boss Rush v1.3.2

YAU.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using HG;
using HG.Reflection;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Items;
using RoR2;
using RoR2.Audio;
using RoR2.ContentManagement;
using RoR2.EntitlementManagement;
using RoR2.ExpansionManagement;
using RoR2.Navigation;
using RoR2.Networking;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Audio;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using YAU.AddressableUtils;
using YAU.AddressableUtils.Assets;
using YAU.Attributes;
using YAU.Audio;
using YAU.Content;
using YAU.Extensions.ROR;
using YAU.Extensions.Text;
using YAU.Interactables;
using YAU.Language;

[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("YAU")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("YAU")]
[assembly: AssemblyTitle("YAU")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
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 YAU
{
	[BepInPlugin("pseudopulse.YAU", "YAU", "1.1.0")]
	public class YAU : BaseUnityPlugin
	{
		public const string PluginGUID = "pseudopulse.YAU";

		public const string PluginAuthor = "pseudopulse";

		public const string PluginName = "YAU";

		public const string PluginVersion = "1.1.0";

		public static ManualLogSource ModLogger;

		internal static YAUContentPack YAUContent;

		public void Awake()
		{
			ModLogger = ((BaseUnityPlugin)this).Logger;
			YAUContent = ContentPackManager.CreateContentPack(Assembly.GetExecutingAssembly(), "YAUInternals");
			AutoRunCollector.HandleAutoRun();
			SoundManager.SetupAudioManager();
		}
	}
}
namespace YAU.Networking
{
	public class NetworkingHelper
	{
		internal static short TakenMessagesIndex = 100;

		public static short GetMessageIndex()
		{
			if (TakenMessagesIndex == short.MaxValue)
			{
				YAU.ModLogger.LogError((object)"Mod attempted to request a message index with the maximum amount has been claimed.");
				throw new OverflowException();
			}
			TakenMessagesIndex++;
			return TakenMessagesIndex;
		}

		public static NetworkWriter CreateMessage(short messageType, Action<NetworkWriter> setup)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			NetworkWriter val = new NetworkWriter();
			val.StartMessage(messageType);
			setup(val);
			val.FinishMessage();
			return val;
		}

		public static void ServerSendToAll(NetworkWriter writer)
		{
			if (!NetworkServer.active)
			{
				return;
			}
			foreach (NetworkConnection connection in NetworkServer.connections)
			{
				if (connection != null && connection != null)
				{
					connection.SendWriter(writer, QosChannelIndex.defaultReliable.intVal);
				}
			}
		}

		public static void SendToServer(NetworkWriter writer)
		{
			if (ClientScene.readyConnection != null)
			{
				NetworkConnection readyConnection = ClientScene.readyConnection;
				if (readyConnection != null)
				{
					readyConnection.SendWriter(writer, QosChannelIndex.defaultReliable.intVal);
				}
			}
		}
	}
}
namespace YAU.Language
{
	public class LanguageManager
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_GetLocalizedStringByToken <0>__Language_GetLocalizedStringByToken;

			public static hook_TokenIsRegistered <1>__Language_TokenIsRegistered;
		}

		private static Dictionary<string, string> languageTokens = new Dictionary<string, string>();

		[AutoRun]
		internal static void Initialize()
		{
			//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_001c: Expected O, but got Unknown
			//IL_0032: 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_003d: Expected O, but got Unknown
			object obj = <>O.<0>__Language_GetLocalizedStringByToken;
			if (obj == null)
			{
				hook_GetLocalizedStringByToken val = Language_GetLocalizedStringByToken;
				<>O.<0>__Language_GetLocalizedStringByToken = val;
				obj = (object)val;
			}
			Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj;
			object obj2 = <>O.<1>__Language_TokenIsRegistered;
			if (obj2 == null)
			{
				hook_TokenIsRegistered val2 = Language_TokenIsRegistered;
				<>O.<1>__Language_TokenIsRegistered = val2;
				obj2 = (object)val2;
			}
			Language.TokenIsRegistered += (hook_TokenIsRegistered)obj2;
		}

		public static void RegisterLanguageToken(string key, string value)
		{
			if (languageTokens.ContainsKey(key))
			{
				YAU.ModLogger.LogError((object)("Attempted to add key " + key + " when the same key was already present."));
			}
			else
			{
				languageTokens.Add(key, value);
			}
		}

		private static string Language_GetLocalizedStringByToken(orig_GetLocalizedStringByToken orig, Language self, string token)
		{
			if (languageTokens.ContainsKey(token))
			{
				return languageTokens[token];
			}
			return orig.Invoke(self, token);
		}

		private static bool Language_TokenIsRegistered(orig_TokenIsRegistered orig, Language self, string token)
		{
			if (languageTokens.ContainsKey(token))
			{
				return true;
			}
			return orig.Invoke(self, token);
		}
	}
}
namespace YAU.Interfaces
{
	public interface IOnBuffInflictedReceiver
	{
		void OnBuffInflicted(BuffDef buff);
	}
	internal class OnBuffInflictedHandler
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_AddBuff_BuffIndex <0>__HandleUntimed;
		}

		internal static void Initialize()
		{
			//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_001c: Expected O, but got Unknown
			object obj = <>O.<0>__HandleUntimed;
			if (obj == null)
			{
				hook_AddBuff_BuffIndex val = HandleUntimed;
				<>O.<0>__HandleUntimed = val;
				obj = (object)val;
			}
			CharacterBody.AddBuff_BuffIndex += (hook_AddBuff_BuffIndex)obj;
		}

		internal static void HandleUntimed(orig_AddBuff_BuffIndex orig, CharacterBody self, BuffIndex index)
		{
			//IL_0003: 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_0068: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, index);
			IOnBuffInflictedReceiver[] components = ((Component)self).GetComponents<IOnBuffInflictedReceiver>();
			IOnBuffInflictedReceiver[] array = components;
			foreach (IOnBuffInflictedReceiver onBuffInflictedReceiver in array)
			{
				onBuffInflictedReceiver.OnBuffInflicted(BuffCatalog.GetBuffDef(index));
			}
			if (Object.op_Implicit((Object)(object)self.master))
			{
				IOnBuffInflictedReceiver[] components2 = ((Component)self.master).GetComponents<IOnBuffInflictedReceiver>();
				IOnBuffInflictedReceiver[] array2 = components2;
				foreach (IOnBuffInflictedReceiver onBuffInflictedReceiver2 in array2)
				{
					onBuffInflictedReceiver2.OnBuffInflicted(BuffCatalog.GetBuffDef(index));
				}
			}
		}
	}
}
namespace YAU.Interactables
{
	public class CardManager
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_RebuildCards <0>__ClassicStageInfo_RebuildCards;
		}

		private static List<CustomInteractable> interactables = new List<CustomInteractable>();

		public static void RegisterInteractable(CustomInteractable interactable)
		{
			interactables.Add(interactable);
		}

		[AutoRun]
		internal static void SetupHooks()
		{
			//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_001c: Expected O, but got Unknown
			object obj = <>O.<0>__ClassicStageInfo_RebuildCards;
			if (obj == null)
			{
				hook_RebuildCards val = ClassicStageInfo_RebuildCards;
				<>O.<0>__ClassicStageInfo_RebuildCards = val;
				obj = (object)val;
			}
			ClassicStageInfo.RebuildCards += (hook_RebuildCards)obj;
		}

		private static void ClassicStageInfo_RebuildCards(orig_RebuildCards orig, ClassicStageInfo self, DirectorCardCategorySelection f1, DirectorCardCategorySelection f2)
		{
			//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)
			orig.Invoke(self, f1, f2);
			foreach (CustomInteractable interactable in interactables)
			{
				List<string> list = interactable.validScenes.ToList();
				Scene activeScene = SceneManager.GetActiveScene();
				if (list.Contains(((Scene)(ref activeScene)).name))
				{
					self.interactableCategories.AddCard(0, interactable.directorCard);
				}
			}
		}
	}
	public class CustomInteractable
	{
		public InteractableSpawnCard spawnCard;

		public DirectorCard directorCard;

		public string[] validScenes;

		public CustomInteractable(InteractableSpawnCard spawnCard, DirectorCard directorCard, string[] validScenes)
		{
			this.spawnCard = spawnCard;
			this.directorCard = directorCard;
			this.validScenes = validScenes;
		}
	}
}
namespace YAU.Helpers
{
	public class DeployableManager
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_GetDeployableSameSlotLimit <0>__HandleLimits;
		}

		private static Dictionary<DeployableSlot, Func<CharacterMaster, int>> deployables = new Dictionary<DeployableSlot, Func<CharacterMaster, int>>();

		public static void AddDeployable(DeployableSlot slot, Func<CharacterMaster, int> limit)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			deployables.Add(slot, limit);
		}

		[AutoRun]
		internal static void Initialize()
		{
			//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_001c: Expected O, but got Unknown
			object obj = <>O.<0>__HandleLimits;
			if (obj == null)
			{
				hook_GetDeployableSameSlotLimit val = HandleLimits;
				<>O.<0>__HandleLimits = val;
				obj = (object)val;
			}
			CharacterMaster.GetDeployableSameSlotLimit += (hook_GetDeployableSameSlotLimit)obj;
		}

		private static int HandleLimits(orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot)
		{
			//IL_0006: 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)
			if (deployables.TryGetValue(slot, out var value))
			{
				return value(self);
			}
			return orig.Invoke(self, slot);
		}
	}
	public class OverlayManager
	{
		public struct Overlay
		{
			public Material material;

			public Func<CharacterModel, bool> action;
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static hook_UpdateOverlays <0>__HandleOverlays;
		}

		internal static List<Overlay> overlays = new List<Overlay>();

		public static void AddOverlay(Overlay overlay)
		{
			overlays.Add(overlay);
		}

		public static void AddOverlay(Material mat, Func<CharacterModel, bool> action)
		{
			Overlay overlay = default(Overlay);
			overlay.material = mat;
			overlay.action = action;
			Overlay item = overlay;
			overlays.Add(item);
		}

		[AutoRun]
		internal static void Setup()
		{
			//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_001c: Expected O, but got Unknown
			object obj = <>O.<0>__HandleOverlays;
			if (obj == null)
			{
				hook_UpdateOverlays val = HandleOverlays;
				<>O.<0>__HandleOverlays = val;
				obj = (object)val;
			}
			CharacterModel.UpdateOverlays += (hook_UpdateOverlays)obj;
		}

		private static void HandleOverlays(orig_UpdateOverlays orig, CharacterModel self)
		{
			orig.Invoke(self);
			foreach (Overlay overlay in overlays)
			{
				if (overlay.action(self))
				{
					Material[] currentOverlays = self.currentOverlays;
					int activeOverlayCount = self.activeOverlayCount;
					self.activeOverlayCount = activeOverlayCount + 1;
					currentOverlays[activeOverlayCount] = overlay.material;
				}
			}
		}
	}
	public class SettingsManager
	{
	}
	public class Utils
	{
		public static Vector3[] GetSafePositionsWithinDistance(Vector3 center, float distance)
		{
			//IL_0097: 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_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)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: 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_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)SceneInfo.instance) && Object.op_Implicit((Object)(object)SceneInfo.instance.groundNodes))
			{
				NodeGraph groundNodes = SceneInfo.instance.groundNodes;
				List<Vector3> list = new List<Vector3>();
				Node[] nodes = groundNodes.nodes;
				foreach (Node val in nodes)
				{
					if (Vector3.Distance(val.position, center) <= distance)
					{
						list.Add(val.position);
					}
				}
				return list.ToArray();
			}
			return (Vector3[])(object)new Vector3[1] { center };
		}

		public static Vector3 FindLookRotation(GameObject self, GameObject target)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = target.transform.position - self.transform.position;
			return ((Vector3)(ref val)).normalized;
		}
	}
	public class VoidManager
	{
		public struct Corruption
		{
			public ItemDef uncorrupt;

			public List<ItemDef> corrupts;
		}

		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_Init <>9__4_0;

			internal void <HandleCorruptions>b__4_0(orig_Init orig)
			{
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_0050: 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_006d: Unknown result type (might be due to invalid IL or missing references)
				foreach (Corruption corruption in corruptions)
				{
					foreach (ItemDef corrupt in corruption.corrupts)
					{
						Pair val = default(Pair);
						val.itemDef1 = corruption.uncorrupt;
						val.itemDef2 = corrupt;
						Pair val2 = val;
						ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = CollectionExtensions.AddToArray<Pair>(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem], val2);
					}
				}
				orig.Invoke();
			}
		}

		private static List<Corruption> corruptions = new List<Corruption>();

		public static void AddCorruption(ItemDef uncorrupted, ItemDef corrupted)
		{
			corruptions.Add(new Corruption
			{
				uncorrupt = uncorrupted,
				corrupts = new List<ItemDef> { corrupted }
			});
		}

		public static void AddCorruption(ItemDef uncorrupted, List<ItemDef> corrupted)
		{
			corruptions.Add(new Corruption
			{
				uncorrupt = uncorrupted,
				corrupts = corrupted
			});
		}

		[AutoRun]
		internal static void HandleCorruptions()
		{
			//IL_0015: 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_0020: Expected O, but got Unknown
			object obj = <>c.<>9__4_0;
			if (obj == null)
			{
				hook_Init val = delegate(orig_Init orig)
				{
					//IL_0035: Unknown result type (might be due to invalid IL or missing references)
					//IL_0050: 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_006d: Unknown result type (might be due to invalid IL or missing references)
					foreach (Corruption corruption in corruptions)
					{
						foreach (ItemDef corrupt in corruption.corrupts)
						{
							Pair val2 = default(Pair);
							val2.itemDef1 = corruption.uncorrupt;
							val2.itemDef2 = corrupt;
							Pair val3 = val2;
							ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = CollectionExtensions.AddToArray<Pair>(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem], val3);
						}
					}
					orig.Invoke();
				};
				<>c.<>9__4_0 = val;
				obj = (object)val;
			}
			ContagiousItemManager.Init += (hook_Init)obj;
		}
	}
}
namespace YAU.Extensions.Unity
{
	public static class UnityExtensions
	{
		public static void RemoveComponent<T>(this GameObject self) where T : Component
		{
			Object.Destroy((Object)(object)self.GetComponent<T>());
		}

		public static void RemoveComponents<T>(this GameObject self) where T : Component
		{
			T[] components = self.GetComponents<T>();
			for (int i = 0; i < components.Length; i++)
			{
				Object.Destroy((Object)(object)components[i]);
			}
		}

		public static void RemoveComponent<T>(this Component self) where T : Component
		{
			Object.Destroy((Object)(object)self.GetComponent<T>());
		}

		public static void RemoveComponents<T>(this Component self) where T : Component
		{
			T[] components = self.GetComponents<T>();
			for (int i = 0; i < components.Length; i++)
			{
				Object.Destroy((Object)(object)components[i]);
			}
		}

		public static T AddComponent<T>(this Component self) where T : Component
		{
			return self.gameObject.AddComponent<T>();
		}

		public static Sprite MakeSprite(this Texture2D self)
		{
			//IL_0015: 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)
			return Sprite.Create(new Rect(0f, 0f, 512f, 512f), new Vector2(256f, 256f), 1f, self);
		}
	}
}
namespace YAU.Extensions.Text
{
	public static class StringExtensions
	{
		public static void Add(this string str, string text)
		{
			LanguageManager.RegisterLanguageToken(str, text);
		}

		public static T Load<T>(this string str)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				return Addressables.LoadAssetAsync<T>((object)str).WaitForCompletion();
			}
			catch
			{
				YAU.ModLogger.LogError((object)("Failed to load asset " + str + " of type " + typeof(T).ToString() + ". Returned default(T) instead."));
				return default(T);
			}
		}

		public static string RemoveUnsafeCharacters(this string str)
		{
			string[] array = new string[17]
			{
				"\n", "'", " ", "!", "`", "&", "-", ")", "(", "{",
				"}", "|", "@", "<", ">", ".", "\\"
			};
			string text = str;
			string[] array2 = array;
			foreach (string oldValue in array2)
			{
				text = text.Replace(oldValue, "");
			}
			return text;
		}

		public static string RemoveUnsafeCharacters(this string str, string[] unsafeChars)
		{
			string text = str;
			foreach (string oldValue in unsafeChars)
			{
				text = text.Replace(oldValue, "");
			}
			return text;
		}

		public static string AutoFormat(this string str)
		{
			return Formatter.FormatString(str);
		}
	}
	internal class Formatter
	{
		internal struct Format
		{
			public string formatted;

			public List<string> matching;
		}

		private static List<Format> formats = new List<Format>
		{
			new Format
			{
				formatted = "<style=cIsHealing>%TEXT%</style>",
				matching = new List<string> { "heal", "health", "barrier", "temporary barrier" }
			},
			new Format
			{
				formatted = "<style=cStack>%TEXT%",
				matching = new List<string> { "(" }
			},
			new Format
			{
				formatted = "%TEXT%</style>",
				matching = new List<string> { ")" }
			},
			new Format
			{
				formatted = "<style=cIsUtility>%TEXT%</style>",
				matching = new List<string> { "shield", "gain", "regenerating", "speed", "boost", "buffs", "increase", "armor" }
			},
			new Format
			{
				formatted = "<style=cIsDamage>%TEXT%</style>",
				matching = new List<string> { "damage" }
			}
		};

		internal static string FormatString(string str)
		{
			foreach (Format format in formats)
			{
				foreach (string item in format.matching)
				{
					string newValue = format.formatted.Replace("%TEXT%", item);
					str = str.Replace(item, newValue);
				}
			}
			return str;
		}
	}
}
namespace YAU.Extensions.Enumeration
{
	public static class EnumeratorExtensions
	{
		public static T GetRandom<T>(this IEnumerable<T> self)
		{
			return self.ElementAt(Random.Range(0, self.Count()));
		}

		public static T GetRandom<T>(this IEnumerable<T> self, Xoroshiro128Plus rng)
		{
			return self.ElementAt(rng.RangeInt(0, self.Count()));
		}

		public static T GetRandom<T>(this IEnumerable<T> self, Func<T, bool> predicate)
		{
			try
			{
				return self.Where(predicate).ElementAt(Random.Range(0, self.Count()));
			}
			catch
			{
				return default(T);
			}
		}

		public static T GetRandom<T>(this IEnumerable<T> self, Xoroshiro128Plus rng, Func<T, bool> predicate)
		{
			try
			{
				return self.Where(predicate).ElementAt(rng.RangeInt(0, self.Count()));
			}
			catch
			{
				return default(T);
			}
		}
	}
}
namespace YAU.Extensions.ROR
{
	public static class CharacterExtensions
	{
		public static bool HasSkillEquipped(this CharacterBody body, SkillDef skill)
		{
			GenericSkill[] components = ((Component)body).GetComponents<GenericSkill>();
			foreach (GenericSkill val in components)
			{
				if ((Object)(object)val.skillDef == (Object)(object)skill)
				{
					return true;
				}
			}
			return false;
		}

		public static void ClearInventory(this CharacterBody body)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)body.inventory))
			{
				return;
			}
			List<ItemDef> list = new List<ItemDef>();
			foreach (ItemIndex item in body.inventory.itemAcquisitionOrder)
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(item);
				list.Add(itemDef);
			}
			foreach (ItemDef item2 in list)
			{
				body.inventory.RemoveItem(item2, body.inventory.GetItemCount(item2));
			}
		}

		public static void ClearInventory(this CharacterBody body, bool hidden)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)body.inventory))
			{
				return;
			}
			List<ItemDef> list = new List<ItemDef>();
			foreach (ItemIndex item in body.inventory.itemAcquisitionOrder)
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(item);
				if (hidden)
				{
					list.Add(itemDef);
				}
				else if (!itemDef.hidden)
				{
					list.Add(itemDef);
				}
			}
			foreach (ItemDef item2 in list)
			{
				body.inventory.RemoveItem(item2, body.inventory.GetItemCount(item2));
			}
		}
	}
}
namespace YAU.Enumeration
{
	public class EnumExtender<T> where T : Enum
	{
		private static int current;

		static EnumExtender()
		{
			current = -1;
			if (!typeof(T).IsEnum)
			{
				return;
			}
			Type underlyingType = Enum.GetUnderlyingType(typeof(T));
			if (underlyingType == typeof(int))
			{
				current = -1;
				foreach (object value4 in Enum.GetValues(typeof(T)))
				{
					int num = Convert.ToInt32(value4);
					if (num > current)
					{
						current = num;
					}
				}
				current += 5;
				return;
			}
			if (underlyingType == typeof(uint))
			{
				current = 0;
				{
					foreach (object value5 in Enum.GetValues(typeof(T)))
					{
						uint num2 = Convert.ToUInt32(value5);
						if (num2 > current)
						{
							current = (int)(num2 * 2);
						}
					}
					return;
				}
			}
			current = -1;
			foreach (object value6 in Enum.GetValues(typeof(T)))
			{
				int num3 = Convert.ToInt32(value6);
				if (num3 > current)
				{
					current = num3;
				}
			}
			current += 5;
		}

		public static T Extend()
		{
			T result = (T)Enum.ToObject(typeof(T), current);
			current = ((Enum.GetUnderlyingType(typeof(T)) == typeof(uint)) ? (current * 2) : (current + 1));
			return result;
		}
	}
	public static class EnumExtension
	{
		public static T Extend<T>() where T : Enum
		{
			return EnumExtender<T>.Extend();
		}
	}
}
namespace YAU.ContentBases
{
	public static class ContentScanner
	{
		public static void ScanContent(Assembly assembly, YAUContentPack pack, ConfigFile config)
		{
			string identifier = pack.identifier.ToUpper();
			ScanTypes(assembly, delegate(ItemBase x)
			{
				x.Initialize(pack, config, identifier);
			});
			ScanTypes(assembly, delegate(SkillBase x)
			{
				x.Initialize(pack, identifier);
			});
			ScanTypes(assembly, delegate(InteractableBase x)
			{
				x.Initialize();
			});
			ScanTypes(assembly, delegate(ItemTierBase x)
			{
				x.Initialize(pack);
			});
			ScanTypes(assembly, delegate(EquipmentBase x)
			{
				x.Initialize(config, pack, identifier);
			});
		}

		public static void ScanTypes<T>(Assembly assembly, Action<T> action)
		{
			IEnumerable<Type> enumerable = from x in assembly.GetTypes()
				where !x.IsAbstract && x.IsSubclassOf(typeof(T))
				select x;
			foreach (Type item in enumerable)
			{
				T obj = (T)Activator.CreateInstance(item);
				action(obj);
			}
		}
	}
	public abstract class EquipmentBase<T> : EquipmentBase where T : EquipmentBase<T>
	{
		public static T Instance { get; private set; }

		public EquipmentBase()
		{
			if (Instance == null)
			{
				Instance = this as T;
			}
			else
			{
				YAU.ModLogger.LogError((object)("Attempted to instantiate class " + typeof(T).Name + " when an instance already exists."));
			}
		}
	}
	public abstract class EquipmentBase
	{
		public EquipmentDef EquipmentDef;

		internal ConfigFile config;

		internal YAUContentPack contentPack;

		public abstract string Name { get; }

		public abstract string PickupDescription { get; }

		public abstract string FullDescription { get; }

		public abstract string Lore { get; }

		public virtual bool IsLunar { get; } = false;


		public abstract float Cooldown { get; }

		public virtual bool CanBeRandomlyTriggered { get; } = true;


		public virtual UnlockableDef Unlockable { get; } = null;


		public abstract GameObject PickupModel { get; }

		public abstract Sprite PickupSprite { get; }

		public virtual bool CanDrop { get; } = true;


		public virtual bool CanAppearSingleplayer { get; } = true;


		public virtual bool CanAppearMultiplayer { get; } = true;


		public virtual ExpansionDef RequiredExpansion { get; } = null;


		public virtual string LangToken => GetType().Name;

		public virtual Func<EquipmentBase, bool> EnabledCallback { get; } = DefaultEnabledCallback;


		private static bool DefaultEnabledCallback(EquipmentBase self)
		{
			ConfigSectionAttribute customAttribute = self.GetType().GetCustomAttribute<ConfigSectionAttribute>();
			if (customAttribute != null)
			{
				if (self.config.Bind<bool>(customAttribute.name, "Enabled", true, "Allow this equipment to appear in runs?").Value)
				{
					return true;
				}
				return false;
			}
			return true;
		}

		public void Initialize(ConfigFile config, YAUContentPack contentPack, string identifier)
		{
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Expected O, but got Unknown
			this.config = config;
			this.contentPack = contentPack;
			EquipmentDef = ScriptableObject.CreateInstance<EquipmentDef>();
			((Object)EquipmentDef).name = LangToken;
			(identifier + "_EQUIPMENT_" + LangToken + "_NAME").Add(Name);
			(identifier + "_EQUIPMENT_" + LangToken + "_DESC").Add(FullDescription);
			(identifier + "_EQUIPMENT_" + LangToken + "_PICKUP").Add(PickupDescription);
			(identifier + "_EQUIPMENT_" + LangToken + "_LORE").Add(Lore);
			EquipmentDef.nameToken = identifier + "_EQUIPMENT_" + LangToken + "_NAME";
			EquipmentDef.descriptionToken = identifier + "_EQUIPMENT_" + LangToken + "_DESC";
			EquipmentDef.loreToken = identifier + "_EQUIPMENT_" + LangToken + "_LORE";
			EquipmentDef.pickupToken = identifier + "_EQUIPMENT_" + LangToken + "_PICKUP";
			EquipmentDef.isLunar = IsLunar;
			EquipmentDef.cooldown = Cooldown;
			EquipmentDef.canBeRandomlyTriggered = CanBeRandomlyTriggered;
			EquipmentDef.pickupIconSprite = PickupSprite;
			EquipmentDef.pickupModelPrefab = PickupModel;
			EquipmentDef.canDrop = CanDrop;
			EquipmentDef.appearsInMultiPlayer = CanAppearMultiplayer;
			EquipmentDef.appearsInSinglePlayer = CanAppearSingleplayer;
			EquipmentDef.unlockableDef = Unlockable;
			EquipmentDef.requiredExpansion = RequiredExpansion;
			if (EnabledCallback(this))
			{
				contentPack.RegisterScriptableObject((ScriptableObject)(object)EquipmentDef);
			}
			EquipmentSlot.PerformEquipmentAction += (hook_PerformEquipmentAction)((orig_PerformEquipmentAction orig, EquipmentSlot self, EquipmentDef def) => ((Object)(object)def == (Object)(object)EquipmentDef) ? OnEquipmentActivation(self) : orig.Invoke(self, def));
			PostCreation();
		}

		public virtual void PostCreation()
		{
		}

		public virtual bool OnEquipmentActivation(EquipmentSlot activator)
		{
			return false;
		}
	}
	public abstract class GenericBase<T> : GenericBase where T : GenericBase<T>
	{
		public static T Instance { get; private set; }

		public GenericBase()
		{
			if (Instance == null)
			{
				Instance = this as T;
			}
			else
			{
				YAU.ModLogger.LogError((object)("Attempted to instantiate class " + typeof(T).Name + " when an instance already exists."));
			}
		}
	}
	public abstract class GenericBase
	{
		public YAUContentPack contentPack;

		public ConfigFile config;

		public virtual void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
		{
			PostCreation();
		}

		public virtual void PostCreation()
		{
		}
	}
	public abstract class InteractableBase<T> : InteractableBase where T : InteractableBase<T>
	{
		public static T Instance { get; private set; }

		public InteractableBase()
		{
			if (Instance == null)
			{
				Instance = this as T;
			}
			else
			{
				YAU.ModLogger.LogError((object)("Attempted to instantiate class " + typeof(T).Name + " when an instance already exists."));
			}
		}
	}
	public abstract class InteractableBase
	{
		private YAUContentPack contentPack;

		private ConfigFile config;

		public GameObject InteractablePrefab;

		public InteractableSpawnCard spawnCard;

		public DirectorCard directorCard;

		public CustomInteractable customInteractable;

		public abstract string Name { get; }

		public abstract string Context { get; }

		public virtual string LangToken => Name.ToUpper().RemoveUnsafeCharacters();

		public abstract int CreditCost { get; }

		public abstract int MaxPerStage { get; }

		public abstract string CardName { get; }

		public abstract int Weight { get; }

		public abstract string[] ValidScenes { get; }

		public virtual bool IsChest { get; }

		public virtual string NameToken => "INTERACTABLE_" + LangToken + "_NAME";

		public virtual string ContextToken => "INTERACTABLE_" + LangToken + "_CONTEXT";

		public virtual NodeFlags RequiredFlags { get; } = (NodeFlags)0;


		public virtual NodeFlags ForbiddenFlags { get; } = (NodeFlags)8;


		public virtual int MinimumStageCompletions { get; } = 0;


		public void Initialize()
		{
			LanguageManager.RegisterLanguageToken(NameToken, Name);
			LanguageManager.RegisterLanguageToken(ContextToken, Context);
			Setup();
			CreateSpawnCard();
			CreateDirectorCard();
			customInteractable = new CustomInteractable(spawnCard, directorCard, ValidScenes);
			CardManager.RegisterInteractable(customInteractable);
		}

		public virtual void Setup()
		{
		}

		public virtual void CreateDirectorCard()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Expected O, but got Unknown
			directorCard = new DirectorCard();
			directorCard.selectionWeight = Weight;
			directorCard.spawnCard = (SpawnCard)(object)spawnCard;
			directorCard.preventOverhead = false;
			directorCard.minimumStageCompletions = MinimumStageCompletions;
		}

		public virtual void CreateSpawnCard()
		{
			//IL_0024: 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_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			spawnCard = ScriptableObject.CreateInstance<InteractableSpawnCard>();
			((SpawnCard)spawnCard).directorCreditCost = CreditCost;
			((SpawnCard)spawnCard).eliteRules = (EliteRules)0;
			spawnCard.skipSpawnWhenSacrificeArtifactEnabled = IsChest;
			((SpawnCard)spawnCard).sendOverNetwork = true;
			((SpawnCard)spawnCard).occupyPosition = true;
			((SpawnCard)spawnCard).forbiddenFlags = ForbiddenFlags;
			((SpawnCard)spawnCard).requiredFlags = RequiredFlags;
			((SpawnCard)spawnCard).hullSize = (HullClassification)0;
			((SpawnCard)spawnCard).prefab = InteractablePrefab;
			((SpawnCard)spawnCard).nodeGraphType = (GraphType)0;
			((Object)spawnCard).name = CardName;
		}
	}
	public abstract class ItemBase<T> : ItemBase where T : ItemBase<T>
	{
		public static T Instance { get; private set; }

		public ItemBase()
		{
			if (Instance == null)
			{
				Instance = this as T;
			}
			else
			{
				YAU.ModLogger.LogError((object)("Attempted to instantiate class " + typeof(T).Name + " when an instance already exists."));
			}
		}
	}
	public abstract class ItemBase
	{
		private YAUContentPack contentPack;

		private ConfigFile config;

		public ItemDef ItemDef;

		public abstract string Name { get; }

		public virtual string TokenName => GetType().Name;

		public virtual string ConfigSafeName => Name;

		public abstract string FullDescription { get; }

		public abstract string PickupDescription { get; }

		public abstract string Lore { get; }

		public abstract Sprite Icon { get; }

		public abstract ItemTier ItemTier { get; }

		public virtual ItemTierDef ItemTierDef { get; } = null;


		public abstract Enum[] ItemTags { get; }

		public abstract GameObject PickupModelPrefab { get; }

		public virtual UnlockableDef Unlockable { get; } = null;


		public virtual bool CanRemove { get; } = true;


		public virtual ExpansionDef RequiredExpansion { get; } = null;


		public virtual Func<ItemBase, bool> EnabledCallback { get; } = DefaultEnabledCallback;


		private static bool DefaultEnabledCallback(ItemBase self)
		{
			ConfigSectionAttribute customAttribute = self.GetType().GetCustomAttribute<ConfigSectionAttribute>();
			if (customAttribute != null)
			{
				if (self.config.Bind<bool>(customAttribute.name, "Enabled", true, "Allow this item to appear in runs?").Value)
				{
					return true;
				}
				return false;
			}
			return true;
		}

		public void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			contentPack = pack;
			this.config = config;
			ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
			((Object)val).name = TokenName;
			val.pickupIconSprite = Icon;
			val.pickupModelPrefab = PickupModelPrefab;
			if (Object.op_Implicit((Object)(object)ItemTierDef))
			{
				val._itemTierDef = ItemTierDef;
			}
			else
			{
				val.deprecatedTier = ItemTier;
			}
			val.canRemove = CanRemove;
			string text = identifier + "_ITEM_" + TokenName + "_NAME";
			string text2 = identifier + "_ITEM_" + TokenName + "_DESC";
			string text3 = identifier + "_ITEM_" + TokenName + "_PICKUP";
			string text4 = identifier + "_ITEM_" + TokenName + "_LORE";
			LanguageManager.RegisterLanguageToken(text, Name);
			LanguageManager.RegisterLanguageToken(text2, FullDescription);
			LanguageManager.RegisterLanguageToken(text3, PickupDescription);
			LanguageManager.RegisterLanguageToken(text4, Lore);
			val.pickupToken = text3;
			val.nameToken = text;
			val.descriptionToken = text2;
			val.loreToken = text4;
			List<ItemTag> list = new List<ItemTag>();
			Enum[] itemTags = ItemTags;
			foreach (Enum @enum in itemTags)
			{
				list.Add((ItemTag)(object)@enum);
			}
			val.tags = list.ToArray();
			val.requiredExpansion = RequiredExpansion;
			ItemDef = val;
			if (EnabledCallback(this))
			{
				contentPack.RegisterScriptableObject((ScriptableObject)(object)val);
			}
			PostCreation();
		}

		public virtual void PostCreation()
		{
		}

		public bool HasItem(CharacterBody body)
		{
			return Object.op_Implicit((Object)(object)body.inventory) && body.inventory.GetItemCount(ItemDef) > 0;
		}

		public bool HasItem(CharacterMaster master)
		{
			return Object.op_Implicit((Object)(object)master.inventory) && master.inventory.GetItemCount(ItemDef) > 0;
		}

		public GameObject CreateIconCube(Sprite icon)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			//IL_0071: 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)
			GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
			GameObject val2 = RuntimePrefabManager.CreatePrefab(new GameObject(ConfigSafeName + "_IconCube"), ConfigSafeName + "_IconCube");
			val.transform.SetParent(val2.transform);
			Material val3 = new Material(Shader.HGStandard);
			val3.mainTexture = (Texture)(object)icon.texture;
			((Renderer)val.GetComponent<MeshRenderer>()).material = val3;
			Transform transform = val.transform;
			transform.localScale *= 2f;
			return val2;
		}

		public GameObject CreateIconCube(Texture icon)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			//IL_006c: 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)
			GameObject val = GameObject.CreatePrimitive((PrimitiveType)3);
			GameObject val2 = RuntimePrefabManager.CreatePrefab(new GameObject(ConfigSafeName + "_IconCube"), ConfigSafeName + "_IconCube");
			val.transform.SetParent(val2.transform);
			Material val3 = new Material(Shader.HGStandard);
			val3.mainTexture = icon;
			((Renderer)val.GetComponent<MeshRenderer>()).material = val3;
			Transform transform = val.transform;
			transform.localScale *= 2f;
			return val2;
		}

		public GameObject CreateIconPlane(Sprite icon)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			//IL_0071: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.CreatePrimitive((PrimitiveType)4);
			GameObject val2 = RuntimePrefabManager.CreatePrefab(new GameObject(ConfigSafeName + "_IconPlane"), ConfigSafeName + "_IconPlane");
			val.transform.SetParent(val2.transform);
			Material val3 = new Material(Shader.HGStandard);
			val3.mainTexture = (Texture)(object)icon.texture;
			((Renderer)val.GetComponent<MeshRenderer>()).material = val3;
			Transform transform = val.transform;
			transform.localScale *= 2f;
			val.transform.localRotation = Quaternion.Euler(-90f, 0f, 0f);
			return val2;
		}

		public GameObject CreateIconPlane(Texture icon)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			//IL_006c: 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_0096: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = GameObject.CreatePrimitive((PrimitiveType)4);
			GameObject val2 = RuntimePrefabManager.CreatePrefab(new GameObject(ConfigSafeName + "_IconPlane"), ConfigSafeName + "_IconPlane");
			val.transform.SetParent(val2.transform);
			Material val3 = new Material(Shader.HGStandard);
			val3.mainTexture = icon;
			((Renderer)val.GetComponent<MeshRenderer>()).material = val3;
			Transform transform = val.transform;
			transform.localScale *= 2f;
			val.transform.localRotation = Quaternion.Euler(-90f, 0f, 0f);
			return val2;
		}
	}
	public abstract class ItemTierBase<T> : ItemTierBase where T : ItemTierBase<T>
	{
		public static T Instance { get; private set; }

		public ItemTierBase()
		{
			if (Instance == null)
			{
				Instance = this as T;
			}
			else
			{
				YAU.ModLogger.LogError((object)("Attempted to instantiate class " + typeof(T).Name + " when an instance already exists."));
			}
		}
	}
	public abstract class ItemTierBase
	{
		public static ItemTierDef tierDef;

		public abstract ColorIndex ColorIndex { get; }

		public abstract ColorIndex DarkColorIndex { get; }

		public virtual bool CanRestack { get; } = true;


		public abstract bool CanScrap { get; }

		public abstract GameObject DropletPrefab { get; }

		public abstract GameObject HighlightPrefab { get; }

		public abstract PickupRules PickupRules { get; }

		public abstract Texture2D BackgroundTexture { get; }

		public virtual bool IsDroppable { get; } = true;


		public abstract string Name { get; }

		public static ItemTier itemTier => tierDef.tier;

		public void Initialize(YAUContentPack pack)
		{
			//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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			tierDef = ScriptableObject.CreateInstance<ItemTierDef>();
			tierDef.colorIndex = ColorIndex;
			tierDef.darkColorIndex = DarkColorIndex;
			tierDef.canRestack = CanRestack;
			tierDef.canScrap = CanScrap;
			tierDef.pickupRules = PickupRules;
			tierDef.bgIconTexture = (Texture)(object)BackgroundTexture;
			tierDef.tier = (ItemTier)10;
			((Object)tierDef).name = Name;
			tierDef.dropletDisplayPrefab = DropletPrefab;
			tierDef.highlightPrefab = HighlightPrefab;
			tierDef.isDroppable = IsDroppable;
			Setup();
			pack.RegisterScriptableObject((ScriptableObject)(object)tierDef);
		}

		public virtual void Setup()
		{
		}
	}
	public abstract class SkillBase<T> : SkillBase where T : SkillBase<T>
	{
		public static T Instance { get; private set; }

		public SkillBase()
		{
			if (Instance == null)
			{
				Instance = this as T;
			}
			else
			{
				YAU.ModLogger.LogError((object)("Attempted to instantiate class " + typeof(T).Name + " when an instance already exists."));
			}
		}
	}
	public abstract class SkillBase
	{
		public SkillDef skillDef;

		private SerializableEntityStateType serializableActivationType;

		public virtual Type SkillType { get; } = typeof(SkillDef);


		public abstract string Name { get; }

		public abstract string Description { get; }

		public virtual string LangToken => Name.ToUpper().RemoveUnsafeCharacters();

		public abstract float Cooldown { get; }

		public virtual int MaxStock { get; } = 1;


		public virtual int RechargeStock { get; } = 1;


		public virtual int StockToConsume { get; } = 1;


		public virtual string[] Keywords { get; } = null;


		public abstract Sprite Icon { get; }

		public abstract Type ActivationState { get; }

		public abstract string MachineName { get; }

		public virtual bool CanceledFromSprinting { get; } = true;


		public virtual bool CancelSprinting { get; } = true;


		public virtual bool Agile { get; } = false;


		public virtual bool Combat { get; } = true;


		public virtual bool ForceSprint { get; } = false;


		public virtual bool DelayCooldown { get; } = false;


		public virtual UnlockableDef Unlock { get; } = null;


		public void Initialize(YAUContentPack pack, string identifier)
		{
			//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_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_00ce: 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)
			serializableActivationType = new SerializableEntityStateType(ActivationState);
			pack.RegisterEntityState(ActivationState);
			skillDef = (SkillDef)ScriptableObject.CreateInstance(SkillType);
			skillDef.skillName = Name;
			skillDef.skillNameToken = identifier + "_SKILL_" + LangToken + "_NAME";
			skillDef.skillDescriptionToken = identifier + "_SKILL_" + LangToken + "_DESC";
			LanguageManager.RegisterLanguageToken(skillDef.skillNameToken, Name);
			LanguageManager.RegisterLanguageToken(skillDef.skillDescriptionToken, Description);
			skillDef.keywordTokens = Keywords;
			skillDef.activationState = serializableActivationType;
			skillDef.activationStateMachineName = MachineName;
			skillDef.icon = Icon;
			skillDef.isCombatSkill = Combat;
			skillDef.baseMaxStock = MaxStock;
			skillDef.rechargeStock = RechargeStock;
			skillDef.baseRechargeInterval = Cooldown;
			skillDef.canceledFromSprinting = !Agile && CanceledFromSprinting;
			skillDef.cancelSprintingOnActivation = !Agile && CancelSprinting;
			skillDef.forceSprintDuringState = ForceSprint;
			skillDef.resetCooldownTimerOnUse = true;
			skillDef.beginSkillCooldownOnSkillEnd = DelayCooldown;
			Setup();
			pack.RegisterScriptableObject((ScriptableObject)(object)skillDef);
		}

		public virtual void Setup()
		{
		}

		public void AddToBody(GameObject prefab, SkillSlot slot)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected I4, but got Unknown
			//IL_007f: 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_00b8: Expected O, but got Unknown
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			SkillLocator component = prefab.GetComponent<SkillLocator>();
			if (Object.op_Implicit((Object)(object)component))
			{
				if (1 == 0)
				{
				}
				GenericSkill val = (GenericSkill)((int)slot switch
				{
					0 => component.primary, 
					1 => component.secondary, 
					2 => component.utility, 
					3 => component.special, 
					_ => null, 
				});
				if (1 == 0)
				{
				}
				GenericSkill val2 = val;
				if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)val2.skillFamily))
				{
					Variant val3 = default(Variant);
					val3.skillDef = skillDef;
					val3.unlockableDef = Unlock;
					((Variant)(ref val3)).viewableNode = new Node(skillDef.skillNameToken, false, (Node)null);
					Variant val4 = val3;
					ArrayUtils.ArrayAppend<Variant>(ref val2._skillFamily.variants, ref val4);
				}
			}
		}

		public bool IsBodyUsing(CharacterBody body)
		{
			return body.HasSkillEquipped(skillDef);
		}
	}
}
namespace YAU.Content
{
	public class ContentPackManager
	{
		private static List<YAUContentPack> contentPacks = new List<YAUContentPack>();

		public static YAUContentPack CreateContentPack(Assembly assembly)
		{
			YAUContentPack yAUContentPack = new YAUContentPack(assembly);
			YAU.ModLogger.LogMessage((object)("Created content pack for assembly: " + assembly.FullName));
			contentPacks.Add(yAUContentPack);
			return yAUContentPack;
		}

		public static YAUContentPack CreateContentPack(string identifier)
		{
			YAUContentPack yAUContentPack = new YAUContentPack(identifier);
			YAU.ModLogger.LogMessage((object)("Created content pack: " + identifier));
			contentPacks.Add(yAUContentPack);
			return yAUContentPack;
		}

		public static YAUContentPack CreateContentPack(Assembly assembly, string identifier)
		{
			YAUContentPack yAUContentPack = new YAUContentPack(assembly, identifier);
			YAU.ModLogger.LogMessage((object)("Created content pack " + identifier + " for assembly " + assembly.FullName));
			contentPacks.Add(yAUContentPack);
			return yAUContentPack;
		}
	}
	public class YAUContentPack : IContentPackProvider
	{
		private string _identifier;

		private ContentPack pack = new ContentPack();

		private Assembly assembly;

		public List<ItemDef> itemDefs = new List<ItemDef>();

		public List<SurvivorDef> survivorDefs = new List<SurvivorDef>();

		public List<EquipmentDef> equipmentDefs = new List<EquipmentDef>();

		public List<ArtifactDef> artifactDefs = new List<ArtifactDef>();

		public List<BuffDef> buffDefs = new List<BuffDef>();

		public List<UnlockableDef> unlockableDefs = new List<UnlockableDef>();

		public List<SkillDef> skillDefs = new List<SkillDef>();

		public List<EntitlementDef> entitlementDefs = new List<EntitlementDef>();

		public List<EliteDef> eliteDefs = new List<EliteDef>();

		public List<GameEndingDef> gameEndingDefs = new List<GameEndingDef>();

		public List<GameObject> bodyPrefabs = new List<GameObject>();

		public List<GameObject> masterPrefabs = new List<GameObject>();

		public List<GameObject> projectilePrefabs = new List<GameObject>();

		public List<GameObject> gameModePrefabs = new List<GameObject>();

		public List<SkillFamily> skillFamilies = new List<SkillFamily>();

		public List<Type> entityStates = new List<Type>();

		public List<ItemTierDef> itemTierDefs = new List<ItemTierDef>();

		public List<EffectDef> effectDefs = new List<EffectDef>();

		public List<GameObject> networkedObjects = new List<GameObject>();

		public List<SceneDef> sceneDefs = new List<SceneDef>();

		public string identifier
		{
			get
			{
				return _identifier;
			}
			set
			{
				_identifier = value;
			}
		}

		public YAUContentPack(Assembly assembly)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Expected O, but got Unknown
			this.assembly = assembly;
			identifier = assembly.GetName().CodeBase;
			ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)delegate(AddContentPackProviderDelegate addContentPackProvider)
			{
				addContentPackProvider.Invoke((IContentPackProvider)(object)this);
			};
		}

		public YAUContentPack(string identifier)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Expected O, but got Unknown
			this.identifier = identifier;
			ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)delegate(AddContentPackProviderDelegate addContentPackProvider)
			{
				addContentPackProvider.Invoke((IContentPackProvider)(object)this);
			};
		}

		public YAUContentPack(Assembly assembly, string identifier)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Expected O, but got Unknown
			this.assembly = assembly;
			this.identifier = identifier;
			ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)delegate(AddContentPackProviderDelegate addContentPackProvider)
			{
				addContentPackProvider.Invoke((IContentPackProvider)(object)this);
			};
		}

		internal void RegisterNetworkedObject(GameObject asset)
		{
			networkedObjects.Add(asset);
		}

		public void RegisterScriptableObject(ScriptableObject asset)
		{
			if (Object.op_Implicit((Object)(object)((asset is ItemDef) ? asset : null)))
			{
				itemDefs.Add((ItemDef)(object)((asset is ItemDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is SurvivorDef) ? asset : null)))
			{
				survivorDefs.Add((SurvivorDef)(object)((asset is SurvivorDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is BuffDef) ? asset : null)))
			{
				buffDefs.Add((BuffDef)(object)((asset is BuffDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is SkillDef) ? asset : null)))
			{
				skillDefs.Add((SkillDef)(object)((asset is SkillDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is GameEndingDef) ? asset : null)))
			{
				gameEndingDefs.Add((GameEndingDef)(object)((asset is GameEndingDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is UnlockableDef) ? asset : null)))
			{
				unlockableDefs.Add((UnlockableDef)(object)((asset is UnlockableDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is EliteDef) ? asset : null)))
			{
				eliteDefs.Add((EliteDef)(object)((asset is EliteDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is EntitlementDef) ? asset : null)))
			{
				entitlementDefs.Add((EntitlementDef)(object)((asset is EntitlementDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is ItemTierDef) ? asset : null)))
			{
				itemTierDefs.Add((ItemTierDef)(object)((asset is ItemTierDef) ? asset : null));
			}
			if (Object.op_Implicit((Object)(object)((asset is EquipmentDef) ? asset : null)))
			{
				equipmentDefs.Add((EquipmentDef)(object)((asset is EquipmentDef) ? asset : null));
			}
			if (asset is SceneDef)
			{
				sceneDefs.Add((SceneDef)(object)((asset is SceneDef) ? asset : null));
			}
		}

		public void RegisterGameObject(GameObject asset)
		{
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Expected O, but got Unknown
			if (Object.op_Implicit((Object)(object)asset.GetComponent<CharacterBody>()))
			{
				bodyPrefabs.Add(asset);
			}
			if (Object.op_Implicit((Object)(object)asset.GetComponent<CharacterMaster>()))
			{
				masterPrefabs.Add(asset);
			}
			if (Object.op_Implicit((Object)(object)asset.GetComponent<ProjectileController>()))
			{
				projectilePrefabs.Add(asset);
			}
			if (Object.op_Implicit((Object)(object)asset.GetComponent<Run>()))
			{
				gameModePrefabs.Add(asset);
			}
			if (Object.op_Implicit((Object)(object)asset.GetComponent<EffectComponent>()))
			{
				EffectDef val = new EffectDef();
				val._prefab = asset;
				val.prefabName = ((Object)asset).name;
				val.prefabEffectComponent = asset.GetComponent<EffectComponent>();
				effectDefs.Add(val);
			}
		}

		public void RegisterSkillFamily(SkillFamily asset)
		{
			skillFamilies.Add(asset);
		}

		public void RegisterEntityState<T>() where T : EntityState
		{
			entityStates.Add(typeof(T));
		}

		public void RegisterEntityState(Type stateType)
		{
			if (!stateType.IsAssignableFrom(typeof(EntityState)))
			{
				throw new Exception("Attempted to register state that wasn't assignable from type EntityState. This isn't allowed");
			}
			entityStates.Add(stateType);
		}

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			pack.artifactDefs.Add(artifactDefs.ToArray());
			pack.itemDefs.Add(itemDefs.ToArray());
			pack.equipmentDefs.Add(equipmentDefs.ToArray());
			pack.survivorDefs.Add(survivorDefs.ToArray());
			pack.buffDefs.Add(buffDefs.ToArray());
			pack.unlockableDefs.Add(unlockableDefs.ToArray());
			pack.skillDefs.Add(skillDefs.ToArray());
			pack.entitlementDefs.Add(entitlementDefs.ToArray());
			pack.eliteDefs.Add(eliteDefs.ToArray());
			pack.gameEndingDefs.Add(gameEndingDefs.ToArray());
			pack.gameModePrefabs.Add(gameModePrefabs.ToArray());
			pack.bodyPrefabs.Add(bodyPrefabs.ToArray());
			pack.masterPrefabs.Add(masterPrefabs.ToArray());
			pack.projectilePrefabs.Add(projectilePrefabs.ToArray());
			pack.skillFamilies.Add(skillFamilies.ToArray());
			pack.entityStateTypes.Add(entityStates.ToArray());
			pack.itemTierDefs.Add(itemTierDefs.ToArray());
			pack.effectDefs.Add(effectDefs.ToArray());
			pack.networkedObjectPrefabs.Add(networkedObjects.ToArray());
			pack.sceneDefs.Add(sceneDefs.ToArray());
			args.ReportProgress(1f);
			YAU.ModLogger.LogMessage((object)("Loading content pack: " + identifier));
			yield break;
		}

		public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
		{
			pack.identifier = identifier;
			ContentPack.Copy(pack, args.output);
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
}
namespace YAU.Constants
{
	public static class Keywords
	{
		public static string Poison = "KEYWORD_POISON";

		public static string Regenerative = "KEYWORD_RAPID_REGEN";

		public static string Agile = "KEYWORD_AGILE";

		public static string HealthCost = "KEYWORD_PERCENT_HP";

		public static string Disperse = "KEYWORD_SONIC_BOOM";

		public static string Weak = "KEYWORD_WEAK";

		public static string Heavy = "KEYWORD_HEAVY";

		public static string Freeze = "KEYWORD_FREEZING";

		public static string Stun = "KEYWORD_STUNNING";

		public static string Expose = "KEYWORD_EXPOSE";

		public static string Shock = "KEYWORD_SHOCKING";

		public static string Slayer = "KEYWORD_SLAYER";

		public static string Hemorrhage = "KEYWORD_SUPERBLEED";

		public static string Ignite = "KEYWORD_IGNITE";

		public static string Weakpoint = "KEYWORD_WEAKPOINT";

		public static string ActiveReload = "KEYWORD_ACTIVERELOAD";

		public static string VoidCorruption = "KEYWORD_VOIDCORRUPTION";
	}
	public static class Scenes
	{
		public static string AphelianSanctuary = "ancientloft";

		public static string VoidFields = "arena";

		public static string DistantRoost = "blackbeach";

		public static string DistantRoostAlt = "blackbeach2";

		public static string AbyssalDepths = "dampcavesimple";

		public static string WetlandAspect = "foggyswamp";

		public static string RallypointDelta = "frozenwall";

		public static string TitanicPlains = "golemplains";

		public static string TitanicPlainsAlt = "golemplains2";

		public static string AbandonedAqueduct = "goolake";

		public static string Commencement = "moon2";

		public static string SunderedGrove = "rootjungle";

		public static string SirensCall = "shipgraveyard";

		public static string SkyMeadow = "skymeadow";

		public static string SiphonedForest = "snowyforest";

		public static string SulfurPools = "sulfurpools";

		public static string VoidLocus = "voidstage";

		public static string Planetarium = "voidraid";

		public static string ScorchedAcres = "wispgraveyard";

		public static string BulwarksAmbry = "artifactword";

		public static string Bazaar = "bazaar";

		public static string GildedCoast = "goldshores";

		public static string MomentWhole = "limbo";

		public static string MomentFractured = "mysteryspace";

		public static string[] AllStandard = new string[18]
		{
			AphelianSanctuary, VoidFields, DistantRoost, DistantRoostAlt, AbyssalDepths, WetlandAspect, RallypointDelta, TitanicPlains, TitanicPlainsAlt, AbandonedAqueduct,
			Commencement, SunderedGrove, SkyMeadow, SirensCall, SiphonedForest, SulfurPools, ScorchedAcres, BulwarksAmbry
		};
	}
	public static class WwiseEvents
	{
		public static uint Play_wBisonDeath = 1113517888u;

		public static uint Play_wBisonHit = 1197473233u;

		public static uint Play_wBisonShoot1 = 3268390400u;

		public static uint Play_wBisonSpawn = 1249767875u;

		public static uint Play_wBlastdoor = 3043230225u;

		public static uint Play_wBoarDeath = 3944593657u;

		public static uint Play_wBoarExplosion = 3091761946u;

		public static uint Play_wBoarHit = 1332006904u;

		public static uint Play_wBoarMDeath = 2887033908u;

		public static uint Play_wBoarShoot1 = 2651342963u;

		public static uint Play_wBoss1Shoot1 = 3380168965u;

		public static uint Play_wBoss1Shoot2 = 3380168966u;

		public static uint Play_wBossSkill2 = 857592033u;

		public static uint Play_wBubbleShield = 3999340508u;

		public static uint Play_wBullet1 = 3448409474u;

		public static uint Play_wBullet2 = 3448409473u;

		public static uint Play_wBullet3 = 3448409472u;

		public static uint Play_wCasing = 1800381192u;

		public static uint Play_wChainLightning = 1913174254u;

		public static uint Play_wChat = 1231583519u;

		public static uint Play_wChefShoot2_1 = 4002996080u;

		public static uint Play_wChest0 = 273185112u;

		public static uint Play_wChest1 = 273185113u;

		public static uint Play_wChest2 = 273185114u;

		public static uint Play_wChest5 = 273185117u;

		public static uint Play_wChildDeath = 3731152613u;

		public static uint Play_wChildGShoot1 = 2978407106u;

		public static uint Play_wChildHit = 4072685316u;

		public static uint Play_wChildShoot1 = 4260787991u;

		public static uint Play_wClayDeath = 1853199952u;

		public static uint Play_wClayHit = 2864197409u;

		public static uint Play_wClayShoot1 = 1969574576u;

		public static uint Play_wClaySpawn = 1481867283u;

		public static uint Play_wClick = 1105771879u;

		public static uint Play_wCoin = 1232716514u;

		public static uint Play_wCoins = 2360199605u;

		public static uint Play_wCrabDeath = 2914438815u;

		public static uint Play_wCrabSpawn = 400103432u;

		public static uint Play_wCrit_01 = 3774687669u;

		public static uint Play_wCrowbar = 2755541643u;

		public static uint Play_wCutsceneAlarm = 2172459452u;

		public static uint Play_wCutsceneJet = 197474154u;

		public static uint Play_wCutscenePass = 1461112566u;

		public static uint Play_wDifficulty = 3657652262u;

		public static uint Play_wDoll = 1118795882u;

		public static uint Play_wDrill = 1252691444u;

		public static uint Play_wDrone1Spawn = 3109566651u;

		public static uint Play_wEfMushroom = 3355655210u;

		public static uint Play_wEmbryo = 3519041107u;

		public static uint Play_wError = 2120356473u;

		public static uint Play_wExplosiveShot = 1244890662u;

		public static uint Play_wFeralShoot1 = 732734997u;

		public static uint Play_wFeralShoot2 = 732734998u;

		public static uint Play_wFrozen = 1850209911u;

		public static uint Play_wGeyser = 2014257388u;

		public static uint Play_wGiantJellyExplosion = 923348941u;

		public static uint Play_wGiantJellyHit = 3830172407u;

		public static uint Play_wGolemAttack1 = 1019251312u;

		public static uint Play_wGolemDeath = 469957963u;

		public static uint Play_wGolemHit = 1924739498u;

		public static uint Play_wGolemSpawn = 2658053020u;

		public static uint Play_wGuardDeath = 2195517878u;

		public static uint Play_wGuardHit = 3726358359u;

		public static uint Play_wGuardSpawn = 1193575573u;

		public static uint Play_wHeavyShoot1 = 2266555164u;

		public static uint Play_wHitlist = 1828045284u;

		public static uint Play_wHuntressShoot1 = 2714607293u;

		public static uint Play_wHuntressShoot3 = 2714607295u;

		public static uint Play_wImpDeath = 1405469125u;

		public static uint Play_wImpGShoot1 = 702433570u;

		public static uint Play_wImpHit = 2697432036u;

		public static uint Play_wImpShoot1 = 2776445175u;

		public static uint Play_wImpShoot2 = 2776445172u;

		public static uint Play_wJanitorShoot1_1 = 2483794322u;

		public static uint Play_wJanitorShoot1_2 = 2483794321u;

		public static uint Play_wJanitorShoot2_1 = 1409879677u;

		public static uint Play_wJanitorShoot2_2 = 1409879678u;

		public static uint Play_wJanitorShoot4_1 = 1410865383u;

		public static uint Play_wJanitorShoot4_2 = 1410865380u;

		public static uint Play_wJarSouls = 4162844532u;

		public static uint Play_wJellyDeath = 2679553851u;

		public static uint Play_wJellyHit = 213554906u;

		public static uint Play_wLevelUp = 1919980434u;

		public static uint Play_wLevelUpWar = 4023542052u;

		public static uint Play_wLightning = 1330288141u;

		public static uint Play_wLizardDeath = 2074794113u;

		public static uint Play_wLizardGDeath = 4177291774u;

		public static uint Play_wLizardGHit = 1425978735u;

		public static uint Play_wLizardGShoot1 = 1170430294u;

		public static uint Play_wLizardGSpawn = 2684018717u;

		public static uint Play_wLizardHit = 4207177744u;

		public static uint Play_wLizardShoot1 = 287412267u;

		public static uint Play_wLizardSpawn = 1283696654u;

		public static uint Play_wMine = 1021358464u;

		public static uint Play_wMinerShoot1 = 1056078324u;

		public static uint Play_wMinerShoot2 = 1056078327u;

		public static uint Play_wMinerShoot3 = 1056078326u;

		public static uint Play_wMinerShoot4 = 1056078321u;

		public static uint Play_wMissileLaunch = 3415171634u;

		public static uint Play_wMS = 3023098025u;

		public static uint Play_wMush = 1473662818u;

		public static uint Play_wMushDeath = 3463803836u;

		public static uint Play_wMushHit = 2887429069u;

		public static uint Play_wMushShoot1 = 487910212u;

		public static uint Play_wMushSpawn = 4208364455u;

		public static uint Play_wNautShoot1 = 874719151u;

		public static uint Play_wPickup = 745840569u;

		public static uint Play_wPigShoot1 = 4172429713u;

		public static uint Play_wPodDeath = 368641344u;

		public static uint Play_wPodHit = 4069172177u;

		public static uint Play_wPyroShoot1 = 1977581991u;

		public static uint Play_wReflect = 3534459008u;

		public static uint Play_wReload = 1935874270u;

		public static uint Play_wRevive = 3924543518u;

		public static uint Play_wRiotGrenade = 1170699791u;

		public static uint Play_wRiotShoot1 = 392428577u;

		public static uint Play_wSamuraiShoot1 = 2292726403u;

		public static uint Play_wSamuraiShoot2 = 2292726400u;

		public static uint Play_wScavengerHit = 3803292342u;

		public static uint Play_wShield = 144484126u;

		public static uint Play_wShrine1 = 1516352125u;

		public static uint Play_wSmite = 1676655215u;

		public static uint Play_wSniper = 1326789400u;

		public static uint Play_wSniper2 = 2522836730u;

		public static uint Play_wSniperShoot3 = 3029163620u;

		public static uint Play_wSpiderHit = 1534240581u;

		public static uint Play_wSpiderShoot1 = 4018099836u;

		public static uint Play_wSpitterHit = 530229631u;

		public static uint Play_wSpitterShoot1 = 1863108870u;

		public static uint Play_wSpitterSpawn = 291139117u;

		public static uint Play_wSqueaky = 1860044956u;

		public static uint Play_wTeleporter = 1289080377u;

		public static uint Play_wUse = 1100859862u;

		public static uint Play_wWatch = 3354880454u;

		public static uint Play_wWispBDeath = 3021624856u;

		public static uint Play_wWispBShoot1 = 2025586984u;

		public static uint Play_wWispDeath = 3169292106u;

		public static uint Play_wWispGDeath = 1968672835u;

		public static uint Play_wWispGShoot1 = 969982957u;

		public static uint Play_wWispHit = 2561235483u;

		public static uint Play_wWispShoot1 = 914723770u;

		public static uint Play_wWispSpawn = 3436613665u;

		public static uint Play_wWormBurning = 2192059253u;

		public static uint Play_wWormDeath = 3793594386u;

		public static uint Play_wWormExplosion = 2529227609u;

		public static uint Play_wWormHit = 3504753139u;

		public static uint Play_wWormRoar = 1700089088u;

		public static uint Kill_loops = 3633988413u;

		public static uint Pause_All = 3864097025u;

		public static uint Play_Achievement = 3433956687u;

		public static uint Play_acid_larva_attack1_explo = 2451117845u;

		public static uint Play_acid_larva_attack1_loop = 3362763155u;

		public static uint Play_acid_larva_attack1_start = 1646746355u;

		public static uint Play_acid_larva_death = 3568098837u;

		public static uint Play_acid_larva_idle = 2621183947u;

		public static uint Play_acid_larva_impact = 2231265675u;

		public static uint Play_acid_larva_spawn = 3730906858u;

		public static uint Play_acid_larva_sprint_land = 2824450583u;

		public static uint Play_acid_larva_sprint_leap = 2639308470u;

		public static uint Play_acid_larva_step = 828559811u;

		public static uint Play_acrid_m1_bigSlash = 1656148530u;

		public static uint Play_acrid_m1_hit = 1822928838u;

		public static uint Play_acrid_m1_slash = 1719910342u;

		public static uint Play_acrid_m2_bite_hit = 2714436782u;

		public static uint Play_acrid_m2_bite_shoot = 456215952u;

		public static uint Play_acrid_m2_explode = 2736075181u;

		public static uint Play_acrid_m2_fly_loop = 644013190u;

		public static uint Play_acrid_m2_shoot = 999289595u;

		public static uint Play_acrid_R_fly_loop = 1915769387u;

		public static uint Play_acrid_R_infect = 1007919396u;

		public static uint Play_acrid_R_shoot = 1160201708u;

		public static uint Play_acrid_shift_fly_loop = 642600073u;

		public static uint Play_acrid_shift_jump = 1749522733u;

		public static uint Play_acrid_shift_land = 320622162u;

		public static uint Play_acrid_shift_puddle_loop = 1556265730u;

		public static uint Play_acrid_sprint_start = 801642819u;

		public static uint Play_acrid_sprint_stop = 3680364993u;

		public static uint Play_acrid_step = 372958860u;

		public static uint Play_acrid_step_sprint = 2575316715u;

		public static uint Play_acrid_step_sprint_hand = 3560327381u;

		public static uint Play_affix_mendingBomb_explode = 841626335u;

		public static uint Play_affix_mendingChain_loop = 3768810533u;

		public static uint Play_affix_void_bug_infect = 939369398u;

		public static uint Play_affix_void_bug_loop = 1959624827u;

		public static uint Play_affix_void_bug_spawn = 3394761874u;

		public static uint Play_affix_void_spawn = 1535219985u;

		public static uint Play_AMB_zone_arena = 1539048487u;

		public static uint Play_AMB_zone_artifactWorld = 4134483156u;

		public static uint Play_AMB_zone_char_select = 1641027481u;

		public static uint Play_AMB_zone_damp_cave_simple = 1142851345u;

		public static uint Play_AMB_zone_dark_rain = 938309267u;

		public static uint Play_AMB_zone_desert = 56392161u;

		public static uint Play_AMB_zone_limbo = 1359925925u;

		public static uint Play_AMB_zone_moon = 3075336325u;

		public static uint Play_AMB_zone_rootJungle = 2348244945u;

		public static uint Play_AMB_zone_ship_graveyard = 642154978u;

		public static uint Play_AMB_zone_skyMeadow = 3453798682u;

		public static uint Play_AMB_zone_skyMeadow_hiddenLab = 3040657526u;

		public static uint Play_AMB_zone_tundra = 38798342u;

		public static uint Play_AMB_zone_wisp_graveyard = 751162865u;

		public static uint Play_arenaCrab_idle_VO = 158852972u;

		public static uint Play_arenaCrab_swim_land = 2386788264u;

		public static uint Play_arenaCrab_swim_loop = 2401300333u;

		public static uint Play_arenaCrab_swim_plant = 1572198610u;

		public static uint Play_arenaCrab_swim_stroke = 2022745195u;

		public static uint Play_arenaCrab_swim_uproot = 3172304260u;

		public static uint Play_artifactBoss_attack1_explode = 71177277u;

		public static uint Play_artifactBoss_attack1_flightLoop = 2591078442u;

		public static uint Play_artifactBoss_attack1_shoot = 2196529419u;

		public static uint Play_artifactBoss_death = 4163357724u;

		public static uint Play_artifactBoss_idle_VO = 1345400638u;

		public static uint Play_artifactBoss_loop_level1 = 184703648u;

		public static uint Play_artifactBoss_loop_level2 = 184703651u;

		public static uint Play_artifactBoss_loop_level3 = 184703650u;

		public static uint Play_artifactBoss_spawn = 188493575u;

		public static uint Play_artifactBoss_takehit = 1098257974u;

		public static uint Play_bandit2_m1_reload_bullet = 452712768u;

		public static uint Play_bandit2_m1_reload_finish = 888917029u;

		public static uint Play_bandit2_m1_rifle = 2347126876u;

		public static uint Play_bandit2_m1_shotgun = 4206201632u;

		public static uint Play_bandit2_m2_alt_throw = 595565201u;

		public static uint Play_bandit2_m2_impact = 2278422317u;

		public static uint Play_bandit2_m2_slash = 4103120750u;

		public static uint Play_bandit2_R_alt_kill = 4143438424u;

		public static uint Play_bandit2_R_fire = 1435016856u;

		public static uint Play_bandit2_R_kill = 3719464252u;

		public static uint Play_bandit2_R_load = 3765877048u;

		public static uint Play_bandit2_shift_enter = 2967307668u;

		public static uint Play_bandit2_shift_exit = 850833398u;

		public static uint Play_bandit2_step = 3692683083u;

		public static uint Play_bandit2_step_sprint = 1764271662u;

		public static uint Play_bandit_M1_pump = 1853111450u;

		public static uint Play_bandit_M1_shot = 3033552564u;

		public static uint Play_bandit_M2_load = 2190546849u;

		public static uint Play_bandit_M2_shot = 1980580961u;

		public static uint Play_bandit_shift_end = 2770013503u;

		public static uint Play_bandit_shift_jump = 1325724668u;

		public static uint Play_bandit_shift_land = 1259710815u;

		public static uint Play_beetle_guard_attack1 = 763398245u;

		public static uint Play_beetle_guard_attack2_initial = 2581251415u;

		public static uint Play_beetle_guard_attack2_spikeLoop = 542781083u;

		public static uint Play_beetle_guard_death = 1527577102u;

		public static uint Play_beetle_guard_idle_VO = 3561602500u;

		public static uint Play_beetle_guard_impact = 2349109310u;

		public static uint Play_beetle_guard_spawn = 515189165u;

		public static uint Play_beetle_guard_step = 2628071246u;

		public static uint Play_beetle_queen_attack1 = 555937964u;

		public static uint Play_beetle_queen_attack2_impact = 3157521796u;

		public static uint Play_beetle_queen_attack2_projectile_loop = 1477410428u;

		public static uint Play_beetle_queen_attack2_shoot = 4217844119u;

		public static uint Play_beetle_queen_death = 451763711u;

		public static uint Play_beetle_queen_impact = 806513485u;

		public static uint Play_beetle_queen_spawn = 2698326632u;

		public static uint Play_beetle_queen_step = 2551161845u;

		public static uint Play_beetle_queen_VO_idle = 1845046503u;

		public static uint Play_beetle_worker_attack = 4241852727u;

		public static uint Play_beetle_worker_death = 383219511u;

		public static uint Play_beetle_worker_idle = 1901530073u;

		public static uint Play_beetle_worker_impact = 1338816453u;

		public static uint Play_beetle_worker_spawn = 1471942880u;

		public static uint Play_beetle_worker_step = 1809191501u;

		public static uint Play_bellBody_attackCreate = 780374380u;

		public static uint Play_bellBody_attackLand = 1732098311u;

		public static uint Play_bellBody_attackShoot = 4097802741u;

		public static uint Play_bellBody_death = 2182572274u;

		public static uint Play_bellBody_idle_loop = 345208571u;

		public static uint Play_bellBody_idle_VO = 4021378928u;

		public static uint Play_bellBody_impact = 2147523650u;

		public static uint Play_bellBody_spawn = 4144720393u;

		public static uint Play_bison_charge_attack_collide = 2909411958u;

		public static uint Play_bison_charge_attack_end_skid = 2235015895u;

		public static uint Play_bison_charge_attack_start = 2509443544u;

		public static uint Play_bison_charge_attack_tell = 4101791573u;

		public static uint Play_bison_death = 3590751484u;

		public static uint Play_bison_headbutt_attack_hit = 3802411724u;

		public static uint Play_bison_headbutt_attack_swing = 1417054473u;

		public static uint Play_bison_idle_graze = 2516815946u;

		public static uint Play_bison_idle_VO = 3855060446u;

		public static uint Play_bison_impact = 4030239748u;

		public static uint Play_bison_spawn = 3910957799u;

		public static uint Play_bison_step = 2839275484u;

		public static uint Play_bison_step_charge = 532574671u;

		public static uint Play_bleedOnCritAndExplode_explode = 2693964769u;

		public static uint Play_bleedOnCritAndExplode_impact = 3570667772u;

		public static uint Play_blindVermin_attack1_bite = 901504895u;

		public static uint Play_blindVermin_death = 3786262665u;

		public static uint Play_blindVermin_idle_VO = 2536191415u;

		public static uint Play_blindVermin_impact = 121244671u;

		public static uint Play_blindVermin_spawn = 2995165238u;

		public static uint Play_blindVermin_step = 294344023u;

		public static uint Play_boss_spawn_radius_appear = 4035156426u;

		public static uint Play_boss_spawn_rumble = 2327315087u;

		public static uint Play_captain_drone_idle_VO = 1028355892u;

		public static uint Play_captain_drone_quick_move = 8118127u;

		public static uint Play_captain_drone_zap = 3992615829u;

		public static uint Play_captain_m1_chargeStart = 2544146878u;

		public static uint Play_captain_m1_hit = 3819278833u;

		public static uint Play_captain_m1_reload = 2226849933u;

		public static uint Play_captain_m1_shootWide = 532604026u;

		public static uint Play_captain_m1_shotgun_charge_loop = 2453063032u;

		public static uint Play_captain_m1_shotgun_shootTight = 1348536996u;

		public static uint Play_captain_m2_tazed_loop = 3117407908u;

		public static uint Play_captain_m2_tazer_bounce = 1888136956u;

		public static uint Play_captain_m2_tazer_impact = 58834266u;

		public static uint Play_captain_m2_tazer_shoot = 832597929u;

		public static uint Play_captain_R_aim = 364785367u;

		public static uint Play_captain_R_aiming_loop = 1040620982u;

		public static uint Play_captain_R_confirmLocation = 1531948689u;

		public static uint Play_captain_R_impact = 3902637834u;

		public static uint Play_captain_R_turret_build = 1359756347u;

		public static uint Play_captain_R_turret_healing_loop = 788149618u;

		public static uint Play_captain_shift_active_loop = 3941125189u;

		public static uint Play_captain_shift_confirm = 2140775262u;

		public static uint Play_captain_shift_end = 803261989u;

		public static uint Play_captain_shift_impact = 3269630552u;

		public static uint Play_captain_shift_preImpact = 1069989355u;

		public static uint Play_captain_shift_start = 2113266862u;

		public static uint Play_captain_sprint_start = 3430012852u;

		public static uint Play_captain_sprint_stop = 1094493224u;

		public static uint Play_captain_step = 1226612947u;

		public static uint Play_captain_step_sprint = 2831720022u;

		public static uint Play_captain_utility_variant_impact = 1357225738u;

		public static uint Play_captain_utility_variant_laser_loop = 2451237826u;

		public static uint Play_captain_utility_variant_preImpact = 3461917085u;

		public static uint Play_char_glass_death = 359633836u;

		public static uint Play_char_jump_VO = 1654395377u;

		public static uint Play_char_land = 81910470u;

		public static uint Play_char_land_fall_damage = 2642009198u;

		public static uint Play_clayboss_death = 2559714313u;

		public static uint Play_clayboss_idle_loop = 3870838284u;

		public static uint Play_clayboss_idle_VO = 628079927u;

		public static uint Play_clayboss_impact = 1890981503u;

		public static uint Play_clayboss_M1_explo = 2368148000u;

		public static uint Play_clayboss_m1_lidClose = 1576056771u;

		public static uint Play_clayboss_m1_lidOpen = 1470926389u;

		public static uint Play_clayboss_m1_shoot = 2922284055u;

		public static uint Play_clayboss_m2_explo = 4043539191u;

		public static uint Play_clayboss_m2_projectile_loop = 3593581531u;

		public static uint Play_clayboss_m2_rise = 916955724u;

		public static uint Play_clayboss_m2_shoot = 600290068u;

		public static uint Play_clayboss_R_mulch_loop = 968500644u;

		public static uint Play_clayboss_R_start = 988517284u;

		public static uint Play_clayboss_R_tether_loop = 3132967749u;

		public static uint Play_clayboss_spawn = 1768616886u;

		public static uint Play_clayboss_step = 3088890839u;

		public static uint Play_clayboss_step_legMove = 869404285u;

		public static uint Play_clayboss_walk_loop = 212114079u;

		public static uint Play_clayBruiser_attack1_shoot_bullet = 491470286u;

		public static uint Play_clayBruiser_attack1_shoot_flyby = 3572694566u;

		public static uint Play_clayBruiser_attack1_shootLoop = 649113537u;

		public static uint Play_clayBruiser_attack1_windDown = 263088688u;

		public static uint Play_clayBruiser_attack1_windUp = 1916278867u;

		public static uint Play_clayBruiser_attack2_shoot = 1288244652u;

		public static uint Play_clayBruiser_death = 3332873880u;

		public static uint Play_clayBruiser_idle_VO = 2519366882u;

		public static uint Play_clayBruiser_impact = 1250949200u;

		public static uint Play_clayBruiser_spawn = 817063995u;

		public static uint Play_clayBruiser_step = 1697475496u;

		public static uint Play_clayGrenadier_attack1_chargeup = 318212996u;

		public static uint Play_clayGrenadier_attack1_explode = 2432531130u;

		public static uint Play_clayGrenadier_attack1_launch = 1826024586u;

		public static uint Play_clayGrenadier_attack2_chargeup = 1264580837u;

		public static uint Play_clayGrenadier_attack2_explode = 1475316029u;

		public static uint Play_clayGrenadier_attack2_throw = 3151664278u;

		public static uint Play_clayGrenadier_death = 4008628731u;

		public static uint Play_clayGrenadier_idle_VO = 2834945965u;

		public static uint Play_clayGrenadier_impact = 216053097u;

		public static uint Play_clayGrenadier_spawn = 1404722828u;

		public static uint Play_clayGrenadier_step = 2998452545u;

		public static uint Play_commando_M1 = 4060526873u;

		public static uint Play_commando_M2 = 4060526874u;

		public static uint Play_commando_M2_grenade_beep = 767972256u;

		public static uint Play_commando_M2_grenade_bounce = 2406813524u;

		public static uint Play_commando_M2_grenade_explo = 1805372450u;

		public static uint Play_commando_M2_grenade_throw = 2891623396u;

		public static uint Play_commando_M2_impact = 3856027043u;

		public static uint Play_commando_R = 1872804647u;

		public static uint Play_commando_R_stun = 856897882u;

		public static uint Play_commando_shift = 4030773325u;

		public static uint Play_deathProjectile_activate = 4274104951u;

		public static uint Play_deathProjectile_activeLoop = 4274851604u;

		public static uint Play_deathProjectile_exit = 2255177404u;

		public static uint Play_deathProjectile_pulse = 3311061351u;

		public static uint Play_deathProjectile_throw = 3241022660u;

		public static uint Play_drone_active_loop = 1397126242u;

		public static uint Play_drone_attack = 2284311463u;

		public static uint Play_drone_deathpt1 = 263213456u;

		public static uint Play_drone_deathpt2 = 263213459u;

		public static uint Play_drone_repair = 1856960692u;

		public static uint Play_elite_antiHeal_spawn = 691984684u;

		public static uint Play_elite_antiHeal_turret_die = 3657700870u;

		public static uint Play_elite_antiHeal_turret_shot = 669631748u;

		public static uint Play_elite_antiHeal_turret_spawn = 308571281u;

		public static uint Play_elite_antiHeal_urchin_activeLoop = 3295205085u;

		public static uint Play_elite_antiHeal_urchin_land = 962572750u;

		public static uint Play_elite_antiHeal_urchin_spawn = 569941158u;

		public static uint Play_elite_haunt_ghost_convert = 2762055418u;

		public static uint Play_elite_haunt_hauntorb_activeLoop = 543514253u;

		public static uint Play_elite_haunt_spawn = 265705826u;

		public static uint Play_emergency_drone_heal_loop = 2145196828u;

		public static uint Play_engi_M1_chargeLoop = 1143106461u;

		public static uint Play_engi_M1_chargeStock = 1582860475u;

		public static uint Play_engi_M1_explo = 2460302619u;

		public static uint Play_engi_M1_land = 1224228428u;

		public static uint Play_engi_M1_shot = 2716114991u;

		public static uint Play_engi_M2_arm = 801551500u;

		public static uint Play_engi_M2_explo = 1876447108u;

		public static uint Play_engi_M2_land = 1942736441u;

		public static uint Play_engi_M2_spider_dash = 2039062976u;

		public static uint Play_engi_M2_throw = 2382761590u;

		public static uint Play_engi_R_activate = 3298597612u;

		public static uint Play_engi_R_place = 643340344u;

		public static uint Play_engi_R_turret_death = 4245687690u;

		public static uint Play_engi_R_turret_rotate_start = 3711319792u;

		public static uint Play_engi_R_turret_rotate_stop = 3202539612u;

		public static uint Play_engi_R_turret_shot = 3407965588u;

		public static uint Play_engi_R_turret_spawn = 4130025569u;

		public static uint Play_engi_R_walkingTurret_laser_end = 3407461464u;

		public static uint Play_engi_R_walkingTurret_laser_start = 1126280707u;

		public static uint Play_engi_R_walkingTurret_step = 2412533739u;

		public static uint Play_engi_seekerMissile_explode = 2273471583u;

		public static uint Play_engi_seekerMissile_HUD_close = 872995266u;

		public static uint Play_engi_seekerMissile_HUD_loop = 3389061272u;

		public static uint Play_engi_seekerMissile_HUD_open = 1095370646u;

		public static uint Play_engi_seekerMissile_lockOn = 407672846u;

		public static uint Play_engi_seekerMissile_shoot = 2951980765u;

		public static uint Play_engi_shift_end = 1395092584u;

		public static uint Play_engi_shift_hit = 1846263908u;

		public static uint Play_engi_shift_start = 729856403u;

		public static uint Play_engi_sprint_end = 1589710056u;

		public static uint Play_engi_sprint_start = 1694535187u;

		public static uint Play_env_dampCave_crystalLight_loop = 3080548713u;

		public static uint Play_env_dampCave_steamVent_loop = 2932480344u;

		public static uint Play_env_desert_wind_gust = 363197352u;

		public static uint Play_env_fan_activate = 1753248287u;

		public static uint Play_env_geyser_launch = 3684346483u;

		public static uint Play_env_geyser_loop = 2001038684u;

		public static uint Play_env_gooWaterfall_loop = 3671383336u;

		public static uint Play_env_hiddenLab_laptop_activate = 1191732790u;

		public static uint Play_env_hiddenLab_laptop_active_loop = 3198839584u;

		public static uint Play_env_hiddenLab_laptop_button_cycle = 1729294674u;

		public static uint Play_env_hiddenLab_laptop_sequence_fail = 3795285125u;

		public static uint Play_env_hiddenLab_laptop_sequence_lock = 535095044u;

		public static uint Play_env_hiddenLab_laptop_sequence_success = 2883328426u;

		public static uint Play_env_hiddenLab_TP_active_loop = 1656660852u;

		public static uint Play_env_hiddenLab_TP_VO = 1027544848u;

		public static uint Play_env_light_flicker = 1529618755u;

		public static uint Play_env_moon_planet_destroying_loop = 56354104u;

		public static uint Play_env_moon_shuttle_engineIdle_loop = 979450395u;

		public static uint Play_env_roach_scatter = 1578037490u;

		public static uint Play_env_rootJungle_mushroom_bounce = 1759858961u;

		public static uint Play_env_ship_interior_loop = 2037610980u;

		public static uint Play_env_ship_pulsing_energy_loop = 2105493367u;

		public static uint Play_env_teleporter_active_button = 2694206298u;

		public static uint Play_env_vase_shatter = 3320446911u;

		public static uint Play_fireballsOnHit_aliveLoop = 3330327238u;

		public static uint Play_fireballsOnHit_impact = 1308908475u;

		public static uint Play_fireballsOnHit_pool_aliveLoop = 289286259u;

		public static uint Play_fireballsOnHit_shoot = 2071974498u;

		public static uint Play_flyingVermin_attack1_explo = 2325827633u;

		public static uint Play_flyingVermin_attack1_loop = 959625319u;

		public static uint Play_flyingVermin_attack1_start = 2469277671u;

		public static uint Play_flyingVermin_death = 2852936633u;

		public static uint Play_flyingVermin_idle_VO = 1488967u;

		public static uint Play_flyingVermin_impact = 1482226543u;

		public static uint Play_flyingVermin_spawn = 2569421798u;

		public static uint Play_flyingVermin_wingFlap = 2482198841u;

		public static uint Play_golem_clap = 3011704479u;

		public static uint Play_golem_death = 4251967229u;

		public static uint Play_golem_idle = 4196494707u;

		public static uint Play_golem_impact = 790462995u;

		public static uint Play_golem_laser_charge = 3644347705u;

		public static uint Play_golem_laser_fire = 3454198445u;

		public static uint Play_golem_spawn = 1773057618u;

		public static uint Play_golem_step = 4056609419u;

		public static uint Play_grandParent_attack1_boulderLarge_impact = 124225148u;

		public static uint Play_grandParent_attack1_boulderSmall_impact = 3157690056u;

		public static uint Play_grandParent_attack1_flightLoop = 1108205171u;

		public static uint Play_grandParent_attack1_throw = 659529741u;

		public static uint Play_grandParent_attack1_windUp = 1356813166u;

		public static uint Play_grandParent_attack2_loop = 1723739392u;

		public static uint Play_grandParent_attack2_spawn = 1710100275u;

		public static uint Play_grandParent_attack3_spawn = 1361990298u;

		public static uint Play_grandParent_attack3_sun_activeLoop = 3203163036u;

		public static uint Play_grandParent_attack3_sun_damageLoop = 406969537u;

		public static uint Play_grandParent_attack3_sun_destroy = 2118002602u;

		public static uint Play_grandParent_attack3_sun_spawn = 2441414753u;

		public static uint Play_grandParent_death = 1713910539u;

		public static uint Play_grandparent_handStep = 2848869794u;

		public static uint Play_grandParent_idle_VO = 779063965u;

		public static uint Play_grandParent_impact = 2762774137u;

		public static uint Play_grandparent_rotate = 19433626u;

		public static uint Play_grandParent_spawn = 3902005852u;

		public static uint Play_gravekeeper_attack1_close = 351879350u;

		public static uint Play_gravekeeper_attack1_explode = 1862008297u;

		public static uint Play_gravekeeper_attack1_fire = 187415678u;

		public static uint Play_gravekeeper_attack1_fly_loop = 48308530u;

		public static uint Play_gravekeeper_attack1_open = 3258261602u;

		public static uint Play_gravekeeper_attack2_charge = 843010431u;

		public static uint Play_gravekeeper_attack2_fly_loop = 4016868819u;

		public static uint Play_gravekeeper_attack2_impact = 3666498161u;

		public static uint Play_gravekeeper_attack2_shoot = 1854147796u;

		public static uint Play_gravekeeper_attack2_shoot_singleChain = 157111274u;

		public static uint Play_gravekeeper_death_01 = 2997386486u;

		public static uint Play_gravekeeper_death_impact_01 = 886079489u;

		public static uint Play_gravekeeper_idle_loop = 1267131317u;

		public static uint Play_gravekeeper_idle_twitch = 416657018u;

		public static uint Play_gravekeeper_idle_VO = 3630636154u;

		public static uint Play_gravekeeper_impact_body = 205671591u;

		public static uint Play_gravekeeper_impact_canister = 3811738432u;

		public static uint Play_gravekeeper_jump = 3152593038u;

		public static uint Play_gravekeeper_land = 1220364025u;

		public static uint Play_gravekeeper_spawn_01 = 833992567u;

		public static uint Play_gravekeeper_step = 3893993616u;

		public static uint Play_greater_wisp_active_loop = 742303752u;

		public static uint Play_greater_wisp_attack = 1232102909u;

		public static uint Play_greater_wisp_death = 1444167041u;

		public static uint Play_greater_wisp_idle = 731002447u;

		public static uint Play_greater_wisp_impact = 2158457527u;

		public static uint Play_gup_attack1_charge = 3438622745u;

		public static uint Play_gup_attack1_shoot = 950894418u;

		public static uint Play_gup_death = 256612421u;

		public static uint Play_gup_idle_VO = 1624048235u;

		public static uint Play_gup_impact = 3673819067u;

		public static uint Play_gup_spawn = 305164250u;

		public static uint Play_gup_step = 1253711379u;

		public static uint Play_healing_drone_heal_loop = 5845797u;

		public static uint Play_heretic_sprint_end = 789491861u;

		public static uint Play_heretic_sprint_start = 19266142u;

		public static uint Play_heretic_squawk = 48852143u;

		public static uint Play_heretic_step = 303018737u;

		public static uint Play_heretic_step_sprint = 3042543384u;

		public static uint Play_heretic_transform = 1223237669u;

		public static uint Play_hermitCrab_attack = 2071920904u;

		public static uint Play_hermitCrab_attack_explo = 1299570915u;

		public static uint Play_hermitCrab_attack_flight_loop = 860273710u;

		public static uint Play_hermitCrab_burrow = 1102794849u;

		public static uint Play_hermitCrab_death = 216810634u;

		public static uint Play_hermitCrab_idle_VO = 3628647800u;

		public static uint Play_hermitCrab_impact = 3575639578u;

		public static uint Play_hermitCrab_spawn = 101148513u;

		public static uint Play_hermitCrab_step = 1911862778u;

		public static uint Play_hermitCrab_unburrow = 2901751544u;

		public static uint Play_huntress_m1_flight_loop = 3991633291u;

		public static uint Play_huntress_m1_ready = 1580388997u;

		public static uint Play_huntress_m1_shoot = 2005806765u;

		public static uint Play_huntress_m1_unready = 3092701574u;

		public static uint Play_huntress_m2_flight_loop = 3255539260u;

		public static uint Play_huntress_m2_impact = 3716108135u;

		public static uint Play_huntress_m2_throw = 2486049627u;

		public static uint Play_huntress_R_aim_loop = 298764410u;

		public static uint Play_huntress_R_jump = 3742373894u;

		public static uint Play_huntress_R_rain_loop = 1245670489u;

		public static uint Play_huntress_R_rain_start = 282745493u;

		public static uint Play_huntress_R_snipe_readyBow = 2533424749u;

		public static uint Play_huntress_R_snipe_shoot = 1625097243u;

		public static uint Play_huntress_shift_end = 976427987u;

		public static uint Play_huntress_shift_mini_blink = 4022209774u;

		public static uint Play_huntress_shift_start = 201442408u;

		public static uint Play_imp_attack = 2774179431u;

		public static uint Play_imp_attack_blink = 3629323260u;

		public static uint Play_imp_attack_tell = 940622283u;

		public static uint Play_imp_death = 3861350375u;

		public static uint Play_imp_idle_VO = 52008113u;

		public static uint Play_imp_impact = 3120622133u;

		public static uint Play_imp_overlord_attack1_land = 1106684340u;

		public static uint Play_imp_overlord_attack1_pop = 4199685168u;

		public static uint Play_imp_overlord_attack1_throw = 14820277u;

		public static uint Play_imp_overlord_attack2_smash = 2956702486u;

		public static uint Play_imp_overlord_attack2_tell = 819196927u;

		public static uint Play_imp_overlord_death = 1533958787u;

		public static uint Play_imp_overlord_idle_loop = 632481506u;

		public static uint Play_imp_overlord_idle_VO = 2719593925u;

		public static uint Play_imp_overlord_impact = 4009116561u;

		public static uint Play_imp_overlord_spawn = 583303092u;

		public static uint Play_imp_overlord_teleport_end = 200938724u;

		public static uint Play_imp_overlord_teleport_start = 2511118231u;

		public static uint Play_imp_spawn = 194906576u;

		public static uint Play_item_goldgat_fire = 981107519u;

		public static uint Play_item_goldgat_winddown = 917072005u;

		public static uint Play_item_goldgat_windup = 285162482u;

		public static uint Play_item_laserTurbine_charge_loop = 3907556148u;

		public static uint Play_item_lunar_focusedConvergence = 3972729947u;

		public static uint Play_item_lunar_primaryReplace_explode = 4293819245u;

		public static uint Play_item_lunar_primaryReplace_impact = 1243809256u;

		public static uint Play_item_lunar_primaryReplace_shoot = 320958651u;

		public static uint Play_item_lunar_secondaryReplace_activate = 2823364229u;

		public static uint Play_item_lunar_secondaryReplace_active_loop = 3372252345u;

		public static uint Play_item_lunar_secondaryReplace_explode = 1538162561u;

		public static uint Play_item_lunar_secondaryReplace_impact = 1781545244u;

		public static uint Play_item_lunar_secondaryReplace_throw = 3617280490u;

		public static uint Play_item_lunar_specialReplace_apply = 838666715u;

		public static uint Play_item_lunar_specialReplace_explode = 445399200u;

		public static uint Play_item_lunar_use_utilityReplacement_end = 3344329139u;

		public static uint Play_item_lunar_use_utilityReplacement_start = 1158437704u;

		public static uint Play_item_proc_armorReduction_hit = 3817389283u;

		public static uint Play_item_proc_armorReduction_shatter = 3687264935u;

		public static uint Play_item_proc_attackAndMoveBuff = 1867859700u;

		public static uint Play_item_proc_bandolier_Loop = 1800237208u;

		public static uint Play_item_proc_bandolierLand = 2260567040u;

		public static uint Play_item_proc_bandolierPickup = 2389173779u;

		public static uint Play_item_proc_bandolierSpawn = 3156422452u;

		public static uint Play_item_proc_bear = 2639048063u;

		public static uint Play_item_proc_behemoth = 2630955643u;

		public static uint Play_item_proc_bleed = 493503047u;

		public static uint Play_item_proc_bounceChain = 1835757740u;

		public static uint Play_item_proc_bounceChainPull = 2911094985u;

		public static uint Play_item_proc_chain_lightning = 4217941291u;

		public static uint Play_item_proc_clover = 1253570078u;

		public static uint Play_item_proc_crit_attack_speed1 = 4131003629u;

		public static uint Play_item_proc_crit_attack_speed2 = 4131003630u;

		public static uint Play_item_proc_crit_attack_speed3 = 4131003631u;

		public static uint Play_item_proc_crit_cooldown = 3641613923u;

		public static uint Play_item_proc_crit_heal = 4185184582u;

		public static uint Play_item_proc_crowbar = 3038522607u;

		public static uint Play_item_proc_dagger_fly = 893157561u;

		public static uint Play_item_proc_dagger_impact = 1843195976u;

		public static uint Play_item_proc_dagger_spawn = 2440278163u;

		public static uint Play_item_proc_deathMark = 4156567482u;

		public static uint Play_item_proc_delicateWatch_break = 4145952825u;

		public static uint Play_item_proc_equipMag = 3393425640u;

		public static uint Play_item_proc_extraLife = 10812723u;

		public static uint Play_item_proc_fallboots_activate = 1060806871u;

		public static uint Play_item_proc_fallboots_impact = 1203791954u;

		public static uint Play_item_proc_feather = 4205703066u;

		public static uint Play_item_proc_fireRingTornado_end = 3174138708u;

		public static uint Play_item_proc_fireRingTornado_start = 1856621255u;

		public static uint Play_item_proc_firework_explo = 4073142045u;

		public static uint Play_item_proc_firework_fire = 3289149845u;

		public static uint Play_item_proc_firework_fly_loop = 366165761u;

		public static uint Play_item_proc_ghostOnKill = 156474425u;

		public static uint Play_item_proc_goldOnHurt = 445783307u;

		public static uint Play_item_proc_guillotine = 3052861231u;

		public static uint Play_item_proc_healingPotion = 2286437436u;

		public static uint Play_item_proc_hoof = 2977775053u;

		public static uint Play_item_proc_iceRingSpear = 1422900995u;

		public static uint Play_item_proc_icicle = 4195

BossRush.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BossRush.Gamemode;
using BossRush.Tweaks;
using BossRush.Utils.Assets;
using EntityStates;
using EntityStates.GrandParent;
using EntityStates.VoidRaidCrab;
using HG.Reflection;
using Microsoft.CodeAnalysis;
using On.EntityStates.GrandParent;
using On.RoR2;
using On.RoR2.CharacterAI;
using R2API.Utils;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.EntitlementManagement;
using RoR2.ExpansionManagement;
using RoR2.Navigation;
using RoR2.Networking;
using RoR2.Skills;
using RoR2.UI;
using RoR2.WwiseUtils;
using TMPro;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.AddressableAssets;
using UnityEngine.Audio;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using YAU.AddressableUtils;
using YAU.Content;
using YAU.ContentBases;
using YAU.Extensions.Enumeration;
using YAU.Extensions.Text;
using YAU.Extensions.Unity;
using YAU.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BossRush")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BossRush")]
[assembly: AssemblyTitle("BossRush")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
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 BossRush
{
	public class WaveManager
	{
		public class BossRushObjective : ObjectiveTracker
		{
			public WaveManager wave = null;

			public override string GenerateString()
			{
				if (wave == null)
				{
					wave = (base.sourceDescriptor.source as BossRushRun).waveManager;
				}
				return $"Complete the <style=cIsDamage>Boss Rush</style> ({wave.waveIndex}/{wave.waves.Count()})";
			}

			public override bool IsDirty()
			{
				return true;
			}
		}

		public List<Wave> waves;

		public int waveIndex = 0;

		public Wave currentWave;

		public PhaseCounter mithrixPhaseCounter;

		public BossRushRun run;

		public static GameObject StackingHealthBarPrefab;

		private bool isInWaveTransition = false;

		public bool isPerfectedWave;

		public bool isVoidtouchedWave;

		public bool wasVoidtouchedWave;

		public bool wasPerfectWave;

		public static WaveManager instance;

		public bool canInteractWithShrines = true;

		public WaveManager()
		{
			instance = this;
		}

		public void Initialize()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected O, but got Unknown
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Expected O, but got Unknown
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			SetupWaves();
			mithrixPhaseCounter = ((Component)Run.instance).gameObject.AddComponent<PhaseCounter>();
			mithrixPhaseCounter.phase = 1;
			CharacterMaster.OnBodyDeath += new hook_OnBodyDeath(OnDeath);
			MusicController.PickCurrentTrack += new hook_PickCurrentTrack(PlayWaveTrack);
			AISkillDriver.OnEnable += new hook_OnEnable(ForceIgnoreNodegraph);
			MusicController.UpdateTeleporterParameters += new hook_UpdateTeleporterParameters(FixTPMusic);
			if (!Object.op_Implicit((Object)(object)StackingHealthBarPrefab))
			{
				InitHealthBarPrefab();
			}
			isInWaveTransition = true;
			foreach (PlayerCharacterMasterController item in PlayerCharacterMasterController._instancesReadOnly)
			{
				if (Object.op_Implicit((Object)(object)item.master) && Object.op_Implicit((Object)(object)item.master.GetBody()))
				{
					item.master.GetBody().SetBuffCount(GameMode.BossRushSpeed.buffIndex, 10);
				}
			}
		}

		private void ForceIgnoreNodegraph(orig_OnEnable orig, AISkillDriver self)
		{
			orig.Invoke(self);
			self.ignoreNodeGraph = true;
		}

		public void PlayWaveTrack(orig_PickCurrentTrack orig, MusicController self, ref MusicTrackDef def)
		{
			if (currentWave != null)
			{
				def = currentWave.Music;
			}
		}

		public void Unhook()
		{
			//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
			CharacterMaster.OnBodyDeath -= new hook_OnBodyDeath(OnDeath);
			MusicController.PickCurrentTrack -= new hook_PickCurrentTrack(PlayWaveTrack);
			AISkillDriver.OnEnable -= new hook_OnEnable(ForceIgnoreNodegraph);
			MusicController.UpdateTeleporterParameters -= new hook_UpdateTeleporterParameters(FixTPMusic);
		}

		private void FixTPMusic(orig_UpdateTeleporterParameters orig, MusicController self, TeleporterInteraction teleporter, Transform cameraTransform, CharacterBody targetBody)
		{
			//IL_0031: 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_0042: 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)
			//IL_004b: 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_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: 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: Unknown result type (might be due to invalid IL or missing references)
			self.stBossStatus.valueId = CommonWwiseIds.alive;
			self.rtpcTeleporterPlayerStatus.value = 1f;
			self.rtpcTeleporterProximityValue.value = 0f;
			Vector3 val = Vector3.zero - cameraTransform.position;
			Vector3 forward = cameraTransform.forward;
			float num = Vector2.SignedAngle(new Vector2(val.x, val.z), new Vector2(forward.x, forward.z));
			if (num < 0f)
			{
				num += 360f;
			}
			self.rtpcTeleporterDirectionValue.value = num;
		}

		public void FixScene()
		{
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Unknown result type (might be due to invalid IL or missing references)
			//IL_0329: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_035d: Unknown result type (might be due to invalid IL or missing references)
			//IL_037d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = GameObject.Find("HOLDER: Stage").transform;
			Transform val = transform.Find("ArenaWalls");
			MeshCollider component = ((Component)val.Find("Ceiling")).GetComponent<MeshCollider>();
			MeshCollider component2 = ((Component)val.Find("CylinderWall")).GetComponent<MeshCollider>();
			Transform val2 = transform.Find("PowerCore");
			((Collider)component).enabled = true;
			((Collider)component2).enabled = true;
			Transform val3 = val2.Find("ElementalRingVoidBlackHole");
			val3.localScale = new Vector3(5f, 5f, 5f);
			((Component)val2).transform.position = new Vector3(0f, 140f, 0f);
			foreach (Transform item in ((Component)val2).transform)
			{
				Transform val4 = item;
				((Component)val4).gameObject.layer = LayerIndex.world.intVal;
			}
			LightIntensityCurve[] componentsInChildren = ((Component)val3).GetComponentsInChildren<LightIntensityCurve>();
			foreach (LightIntensityCurve val5 in componentsInChildren)
			{
				((Behaviour)val5).enabled = false;
			}
			Light[] componentsInChildren2 = ((Component)val3).GetComponentsInChildren<Light>();
			foreach (Light val6 in componentsInChildren2)
			{
				val6.intensity = 3f;
			}
			Quaternion val7 = Quaternion.Euler(270f, 0f, 0f);
			Object.Instantiate<GameObject>(GameObject.MoonPillarHuge, new Vector3(100f, 1f, -1.3f), val7);
			Object.Instantiate<GameObject>(GameObject.MoonPillarHuge, new Vector3(-100f, 1f, -1.3f), val7);
			Object.Instantiate<GameObject>(GameObject.MoonPillarHuge, new Vector3(-1.3f, 1f, 100f), val7);
			Object.Instantiate<GameObject>(GameObject.MoonPillarHuge, new Vector3(-1.3f, 1f, -100f), val7);
			GameObject val8 = Object.Instantiate<GameObject>(((Component)val2).gameObject, new Vector3(100f, 70f, -1.3f), Quaternion.identity);
			val8.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
			Transform val9 = val8.transform.Find("ElementalRingVoidBlackHole");
			Transform val10 = val9.Find("Runes");
			Transform val11 = val9.Find("AreaIndicator");
			((Component)val10).gameObject.SetActive(false);
			((Component)val11).gameObject.SetActive(false);
			Object.Instantiate<GameObject>(val8, new Vector3(-100f, 70f, -1.3f), Quaternion.identity);
			Object.Instantiate<GameObject>(val8, new Vector3(-1.3f, 70f, 100f), Quaternion.identity);
			Object.Instantiate<GameObject>(val8, new Vector3(-1.3f, 70f, -100f), Quaternion.identity);
			if (NetworkServer.active)
			{
				GameObject val12 = Object.Instantiate<GameObject>(GameMode.ProgressionSlab, new Vector3(68f, 3f, -71f), Quaternion.Euler(270f, 0f, 0f));
				GameObject val13 = Object.Instantiate<GameObject>(GameMode.ProgressionSlab, new Vector3(-68f, 3f, 71f), Quaternion.Euler(270f, 180f, 0f));
				GameObject val14 = Object.Instantiate<GameObject>(GameMode.VoidtouchWave, new Vector3(-71f, 3f, -68f), Quaternion.Euler(0f, 0f, 0f));
				GameObject val15 = Object.Instantiate<GameObject>(GameMode.PerfectedWave, new Vector3(71f, 3f, 68f), Quaternion.Euler(0f, 180f, 0f));
				NetworkServer.Spawn(val12);
				NetworkServer.Spawn(val13);
				NetworkServer.Spawn(val14);
				NetworkServer.Spawn(val15);
			}
			if (BossRush.IsSimulAdditionsInstalled)
			{
				Transform transform2 = GameObject.Find("HOLDER: Stage").transform;
				((Component)transform2.Find("MoonArenaColumn, Huge Alt (4)")).gameObject.SetActive(false);
				((Component)transform2.Find("MoonArenaColumn, Huge Alt (5)")).gameObject.SetActive(false);
				((Component)transform2.Find("MoonArenaColumn, Huge Alt (6)")).gameObject.SetActive(false);
				((Component)transform2.Find("MoonArenaColumn, Huge Alt (7)")).gameObject.SetActive(false);
			}
		}

		public static void InitHealthBarPrefab()
		{
			GameObject hUDSimple = GameObject.HUDSimple;
			GameObject gameObject = ((Component)hUDSimple.transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas")
				.Find("TopCenterCluster")
				.Find("BossHealthBarRoot")
				.Find("Container")).gameObject;
			StackingHealthBarPrefab = RuntimePrefabManager.CreatePrefab(gameObject, "StackableBossBar");
			GameObject gameObject2 = ((Component)StackingHealthBarPrefab.transform.Find("BossHealthBarContainer").Find("BackgroundPanel")).gameObject;
			Image component = ((Component)gameObject2.transform.Find("FillPanel")).GetComponent<Image>();
			Image component2 = ((Component)gameObject2.transform.Find("DelayFillPanel")).GetComponent<Image>();
			HGTextMeshProUGUI component3 = ((Component)gameObject2.transform.Find("HealthText")).GetComponent<HGTextMeshProUGUI>();
			GameObject stackingHealthBarPrefab = StackingHealthBarPrefab;
			HGTextMeshProUGUI component4 = ((Component)stackingHealthBarPrefab.transform.Find("BossNameLabel")).GetComponent<HGTextMeshProUGUI>();
			((TMP_Text)component4).text = "this should not be here";
			UnityExtensions.RemoveComponent<LanguageTextMeshController>((Component)(object)component4);
			HGTextMeshProUGUI component5 = ((Component)stackingHealthBarPrefab.transform.Find("BossSubtitleLabel")).GetComponent<HGTextMeshProUGUI>();
			((TMP_Text)component5).text = "this also shouldnt be here";
			StackableHealthBar stackableHealthBar = StackingHealthBarPrefab.AddComponent<StackableHealthBar>();
			stackableHealthBar.FillRect = component;
			stackableHealthBar.HP = component3;
			stackableHealthBar.Name = component4;
			stackableHealthBar.Subtitle = component5;
			stackableHealthBar.DelayFillRect = component2;
			((Component)stackableHealthBar.HP).gameObject.SetActive(true);
		}

		public void OnDeath(orig_OnBodyDeath orig, CharacterMaster self, CharacterBody body)
		{
			//IL_00bc: 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)
			orig.Invoke(self, body);
			int count = currentWave.WaveSpawns.Count;
			int num = (from x in Object.FindObjectsOfType<WaveMarker>()
				where x.body.healthComponent.alive
				select x).Count();
			if (isInWaveTransition || num > 0)
			{
				return;
			}
			foreach (PlayerCharacterMasterController item in PlayerCharacterMasterController._instancesReadOnly)
			{
				if (Object.op_Implicit((Object)(object)item.master) && Object.op_Implicit((Object)(object)item.master.GetBody()))
				{
					item.master.GetBody().SetBuffCount(GameMode.BossRushSpeed.buffIndex, 10);
				}
			}
			canInteractWithShrines = true;
			if (waveIndex >= waves.Count())
			{
				PhaseCounter obj = mithrixPhaseCounter;
				int phase = obj.phase;
				obj.phase = phase + 1;
				if (mithrixPhaseCounter.phase == 2)
				{
					PhaseCounter obj2 = mithrixPhaseCounter;
					phase = obj2.phase;
					obj2.phase = phase + 1;
				}
				if (mithrixPhaseCounter.phase <= 3 || !NetworkServer.active)
				{
					run.InvokeDelayed(3f);
					{
						foreach (PlayerCharacterMasterController item2 in PlayerCharacterMasterController._instancesReadOnly)
						{
							if (Object.op_Implicit((Object)(object)item2.master) && Object.op_Implicit((Object)(object)item2.master.GetBody()))
							{
								item2.master.GetBody().SetBuffCount(GameMode.BossRushSpeed.buffIndex, currentWave.BuffStacks);
							}
						}
						return;
					}
				}
				((MonoBehaviour)run).Invoke("End", 3f);
			}
			else
			{
				PurchaseInteraction[] array = Object.FindObjectsOfType<PurchaseInteraction>();
				foreach (PurchaseInteraction val in array)
				{
					val.available = true;
				}
				wasPerfectWave = isPerfectedWave;
				wasVoidtouchedWave = isVoidtouchedWave;
				isPerfectedWave = false;
				isVoidtouchedWave = false;
				if (!isInWaveTransition)
				{
					currentWave.OnWaveCompleted();
					isInWaveTransition = true;
				}
			}
		}

		public void SetupWaves()
		{
			//IL_06b2: Unknown result type (might be due to invalid IL or missing references)
			waves = new List<Wave>();
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.TitanMaster, 2f, 1.2f, air: false)
			}, 3, 2, 0, 0, 5, 4, MusicTrackDef.muBossfightDLC112));
			if (BossRush.IsEnemiesReturnsInstalled && Util.CheckRoll(50f, 0f, (CharacterMaster)null))
			{
				waves[0].WaveSpawns[0].MasterPrefab = MasterCatalog.FindMasterPrefab("ColossusMaster");
			}
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.BeetleQueenMaster, 1f, 1f, air: false),
				new WaveSpawn(GameObject.VagrantMaster, 1f, 1f, air: true)
			}, 3, 2, 0, 0, 3, 4, MusicTrackDef.muSongLakesHabitatBoss));
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.ClayBossMaster, 2f, 2f, air: false)
			}, 2, 1, 1, 0, 3, 2, MusicTrackDef.muBossfightDLC112));
			if (BossRush.IsRARPresent && Util.CheckRoll(50f, 0f, (CharacterMaster)null))
			{
				waves.RemoveAt(waves.Count - 1);
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(GameObject.MegaConstructMaster, 1f, 2f, air: true),
					new WaveSpawn(GameObject.MajorConstructMaster, 1f, 2f, air: false)
				}, 3, 2, 0, 0, 3, 2, MusicTrackDef.muBossfightDLC112));
			}
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.GravekeeperMaster, 1.5f, 1.4f, air: false),
				new WaveSpawn(GameObject.ImpBossMaster, 1.5f, 1.4f, air: false)
			}, 2, 2, 0, 0, 3, 3, MusicTrackDef.muBossfightDLC110));
			if (BossRush.IsTyranitarInstalled && Util.CheckRoll(50f, 0f, (CharacterMaster)null))
			{
				waves[waves.Count - 1].WaveSpawns[0].MasterPrefab = MasterCatalog.FindMasterPrefab("TyranitarMaster");
			}
			if (BossRush.IsEnemiesReturnsInstalled && Util.CheckRoll(25f, 0f, (CharacterMaster)null))
			{
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(MasterCatalog.FindMasterPrefab("IfritMasterMaster"), 2f, 2f, air: false)
				}, 1, 1, 0, 0, 1, 2, MusicTrackDef.muBossfightDLC112));
			}
			if (BossRush.IsDireseekerPresent && Util.CheckRoll(25f, 0f, (CharacterMaster)null))
			{
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(MasterCatalog.FindMasterPrefab("DireseekerBossMaster"), 2f, 2f, air: false)
				}, 1, 1, 0, 0, 1, 2, MusicTrackDef.muBossfightDLC112));
			}
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.GrandparentMaster, 2f, 3f, air: false)
				{
					noRandomPos = true
				}
			}, 1, 2, 1, 0, 2, 5, MusicTrackDef.muSong22));
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.MagmaWormMaster, 1f, 3f, air: false),
				new WaveSpawn(GameObject.ElectricWormMaster, 1f, 1f, air: false)
			}, 2, 2, 0, 1, 2, 3, MusicTrackDef.muSong23));
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.RoboBallBossMaster, 0.6f, 2f, air: true),
				new WaveSpawn(GameObject.SuperRoboBallBossMaster, 1.5f, 5f, air: true),
				new WaveSpawn(GameObject.RoboBallBossMaster, 0.6f, 2f, air: true)
			}, 1, 3, 0, 0, 2, 3, MusicTrackDef.muSong05));
			if (BossRush.IsForgorPresent)
			{
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(MasterCatalog.FindMasterPrefab("BrassMonolithMonsterMaster"), 3f, 3f, air: false)
					{
						noRandomPos = true
					}
				}, 1, 1, 0, 0, 2, 2, MusicTrackDef.muSong22));
			}
			if (BossRush.IsStarstormInstalled && Util.CheckRoll(50f, 0f, (CharacterMaster)null))
			{
				waves.RemoveAt(waves.Count - 1);
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(MasterCatalog.FindMasterPrefab("LampBossMaster"), 2.5f, 4f, air: false),
					new WaveSpawn(MasterCatalog.FindMasterPrefab("LampBossMaster"), 2.5f, 4f, air: false)
				}, 3, 2, 0, 0, 1, 2, MusicTrackDef.muBossfightDLC110));
			}
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.TitanGoldMaster, 5f, 5f, air: false)
			}, 2, 2, 1, 0, 0, 3, MusicTrackDef.muSong05));
			if (BossRush.IsRegigigasInstalled)
			{
				waves.RemoveAt(waves.Count - 1);
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(MasterCatalog.FindMasterPrefab("RegigigasMaster"), 3f, 3f, air: false)
				}, 0, 0, 2, 1, 0, 5, MusicTrackDef.muBossfightDLC112)
				{
					IsRegigigas = true
				});
				Debug.Log((object)("Regi master: " + (object)waves[waves.Count - 1].WaveSpawns[0].MasterPrefab));
			}
			if (BossRush.IsGotcePresent)
			{
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(MasterCatalog.FindMasterPrefab("Crowdfunder WoolieMaster"), 8f, 10f, air: false)
				}, 2, 1, 0, 0, 1, 2, MusicTrackDef.muSongLakesHabitatBoss));
			}
			waves.Add(new Wave(new List<WaveSpawn>
			{
				new WaveSpawn(GameObject.BrotherMaster, 1f, 5f, air: false)
			}, 2, 2, 1, 0, 2, 4, MusicTrackDef.muSong25));
			if (((BaseUserEntitlementTracker<LocalUser>)(object)EntitlementManager.localUserEntitlementTracker).AnyUserHasEntitlement(((IEnumerable<EntitlementDef>)(object)EntitlementCatalog.entitlementDefs).Where((EntitlementDef x) => ((Object)x).name.Contains("DLC2")).First()))
			{
				waves.RemoveAt(waves.Count - 1);
				waves.Add(new Wave(new List<WaveSpawn>
				{
					new WaveSpawn(StringExtensions.Load<GameObject>("RoR2/DLC2/FalseSonBoss/FalseSonBossMaster.prefab"), 1f, 2f, air: false)
				}, 2, 2, 1, 0, 2, 4, StringExtensions.Load<MusicTrackDef>("RoR2/DLC2/Common/muSong_MeridianFSB.asset")));
			}
		}

		public void DoNextWave()
		{
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Expected O, but got Unknown
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			isInWaveTransition = false;
			currentWave = waves[waveIndex];
			canInteractWithShrines = false;
			Debug.Log((object)"sigma");
			Debug.Log((object)currentWave.Music);
			if (currentWave.IsRegigigas)
			{
				run.InvokeRegigigas();
			}
			else
			{
				foreach (WaveSpawn waveSpawn in currentWave.WaveSpawns)
				{
					if (NetworkServer.active)
					{
						waveSpawn.DoSpawn();
					}
				}
			}
			foreach (PlayerCharacterMasterController item in PlayerCharacterMasterController._instancesReadOnly)
			{
				if (Object.op_Implicit((Object)(object)item.master) && Object.op_Implicit((Object)(object)item.master.GetBody()))
				{
					item.master.GetBody().SetBuffCount(GameMode.BossRushSpeed.buffIndex, currentWave.BuffStacks);
				}
			}
			waveIndex++;
			GenericPickupController[] array = (from x in Object.FindObjectsOfType<GenericPickupController>()
				where Object.op_Implicit((Object)(object)EquipmentCatalog.GetEquipmentDef(((PickupIndex)(ref x.pickupIndex)).equipmentIndex))
				select x).ToArray();
			for (int i = 0; i < array.Length; i++)
			{
				EffectManager.SpawnEffect(GameObject.ExplosionLunarSun, new EffectData
				{
					scale = 2f,
					origin = ((Component)array[i]).transform.position
				}, false);
				Object.Destroy((Object)(object)((Component)array[i]).gameObject);
			}
			if (waveIndex >= waves.Count)
			{
				AkSoundEngine.SetState("bossPhase", "phase1");
			}
		}
	}
	public class WaveSpawn
	{
		public SpawnCard spawnCard;

		public GameObject MasterPrefab;

		public float Scale = 1f;

		public float Health = 1f;

		public Wave wave;

		public string customName = null;

		public bool noRandomPos = false;

		public WaveSpawn(GameObject master, float scale, float hp, bool air)
		{
			//IL_0077: 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)
			MasterPrefab = master;
			Scale = scale;
			Health = hp;
			spawnCard = ScriptableObject.CreateInstance<SpawnCard>();
			spawnCard.directorCreditCost = 0;
			spawnCard.prefab = MasterPrefab;
			spawnCard.nodeGraphType = (GraphType)(air ? 1 : 0);
			spawnCard.hullSize = (HullClassification)2;
			spawnCard.sendOverNetwork = true;
		}

		public void DoSpawn()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: 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_00a1: Expected O, but got Unknown
			//IL_007f: 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)
			if (!NetworkServer.active)
			{
				return;
			}
			DirectorPlacementRule val = new DirectorPlacementRule();
			val.maxDistance = 10f;
			val.minDistance = 0f;
			val.placementMode = (PlacementMode)3;
			val.position = new Vector3(-1.6f, 5.2f, 0.3f) + Random.onUnitSphere * 20f;
			if (noRandomPos)
			{
				val.position = new Vector3(-1.6f, 5.2f, 0.3f);
			}
			DirectorSpawnRequest val2 = new DirectorSpawnRequest(spawnCard, val, Run.instance.runRNG);
			val2.ignoreTeamMemberLimit = true;
			val2.teamIndexOverride = (TeamIndex)2;
			val2.onSpawnedServer = delegate(SpawnResult res)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0021: Unknown result type (might be due to invalid IL or missing references)
				//IL_025c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0298: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)res.spawnedInstance))
				{
					CharacterMaster component = res.spawnedInstance.GetComponent<CharacterMaster>();
					component.SpawnBodyHere();
					AISkillDriver[] components = ((Component)component).GetComponents<AISkillDriver>();
					foreach (AISkillDriver val3 in components)
					{
						val3.maxDistance *= Scale;
					}
					Health *= Run.instance.livingPlayerCount;
					if (Run.instance.livingPlayerCount > 1)
					{
						Health += (float)Run.instance.livingPlayerCount * 0.5f;
					}
					int num = Mathf.RoundToInt((Health - 1f) * 10f);
					component.inventory.GiveItem(Items.BoostHp, num);
					component.inventory.GiveItem(Items.UseAmbientLevel, 1);
					component.inventory.GiveItem(Items.AdaptiveArmor, 1);
					CharacterBody body = component.GetBody();
					if (body.baseMoveSpeed == 9f)
					{
						body.baseMoveSpeed = 12f;
					}
					if (wave.IsRegigigas)
					{
						MonoBehaviour[] components2 = ((Component)body).GetComponents<MonoBehaviour>();
						foreach (MonoBehaviour val4 in components2)
						{
							Debug.Log((object)((object)val4).GetType().FullName.Contains("SlowStart"));
							if (((object)val4).GetType().FullName.Contains("SlowStart"))
							{
								((Behaviour)val4).enabled = false;
							}
						}
					}
					DeathRewards component2 = ((Component)body).GetComponent<DeathRewards>();
					if (Object.op_Implicit((Object)(object)component2))
					{
						float num2 = 300f * ((WaveManager.instance.isPerfectedWave | WaveManager.instance.isVoidtouchedWave) ? 2f : 1f);
						component2.goldReward = (uint)Mathf.Max(1f, num2 * 2f * Run.instance.compensatedDifficultyCoefficient);
					}
					if (WaveManager.instance.isPerfectedWave)
					{
						component.inventory.GiveItem(Items.BoostHp, 5);
						component.inventory.SetEquipmentIndex(Equipment.AffixLunar.equipmentIndex);
					}
					else if (WaveManager.instance.isVoidtouchedWave)
					{
						component.inventory.GiveItem(Items.BoostHp, 5);
						component.inventory.SetEquipmentIndex(Equipment.EliteVoidEquipment.equipmentIndex);
					}
					NetworkWriter val5 = NetworkingHelper.CreateMessage((short)120, (Action<NetworkWriter>)delegate(NetworkWriter x)
					{
						x.Write(((Component)body).gameObject);
						x.Write(Scale);
					});
					NetworkingHelper.ServerSendToAll(val5);
				}
			};
			DirectorCore.instance.TrySpawnObject(val2);
		}

		[NetworkMessageHandler(client = true, msgType = 120)]
		public static void HandleWaveMarker(NetworkMessage netmsg)
		{
			Debug.Log((object)"handling netmessage for wave marker");
			if (Object.op_Implicit((Object)(object)Run.instance) && Run.instance is BossRushRun)
			{
				GameObject val = netmsg.reader.ReadGameObject();
				if (Object.op_Implicit((Object)(object)val))
				{
					WaveMarker waveMarker = val.AddComponent<WaveMarker>();
					waveMarker.scale = netmsg.reader.ReadSingle();
				}
			}
			else
			{
				Debug.Log((object)"not in a boss rush run");
			}
		}
	}
	public class Wave
	{
		public List<WaveSpawn> WaveSpawns;

		public int GreenRewards;

		public int BossRewards;

		public int WhiteRewards;

		public int RedRewards;

		public int LevelRewards;

		public int BuffStacks;

		public MusicTrackDef Music;

		public bool IsRegigigas = false;

		public Wave(List<WaveSpawn> spawns, int whites, int greens, int reds, int yellows, int levels, int buffStacks, MusicTrackDef music)
		{
			WaveSpawns = spawns;
			foreach (WaveSpawn spawn in spawns)
			{
				spawn.wave = this;
			}
			WhiteRewards = whites;
			GreenRewards = greens;
			RedRewards = reds;
			BossRewards = yellows;
			LevelRewards = levels;
			BuffStacks = buffStacks;
			Music = music;
		}

		public void OnWaveCompleted()
		{
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			List<PlayerCharacterMasterController> list = PlayerCharacterMasterController._instancesReadOnly.ToList();
			TeamManager.instance.SetTeamLevel((TeamIndex)1, TeamManager.instance.GetTeamLevel((TeamIndex)1) + (uint)LevelRewards);
			WaveManager.instance.run.bonusAmbientLevel += 5f * (DifficultyCatalog.GetDifficultyDef(Run.instance.selectedDifficulty).scalingValue / 2f);
			if (!NetworkServer.active)
			{
				return;
			}
			foreach (PlayerCharacterMasterController item in PlayerCharacterMasterController._instancesReadOnly)
			{
				if (item.master.IsDeadAndOutOfLivesServer() && item.isConnected)
				{
					item.master.Respawn(item.master.deathFootPosition, Quaternion.identity, false);
				}
			}
			bool wasPerfectWave = WaveManager.instance.wasPerfectWave;
			bool wasVoidtouchedWave = WaveManager.instance.wasVoidtouchedWave;
			int num = 0;
			foreach (PlayerCharacterMasterController item2 in list)
			{
				CharacterMaster master2 = item2.master;
				if (num < 1 || !BossRush.IsSharesuiteInstalled)
				{
					if (wasPerfectWave)
					{
						SpawnPickups(master2, Run.instance.availableLunarItemDropList, WhiteRewards, (ItemTier)3, sort: false);
					}
					else if (wasVoidtouchedWave)
					{
						SpawnPickups(master2, Run.instance.availableVoidTier1DropList, WhiteRewards, (ItemTier)6, sort: false);
					}
					else
					{
						SpawnPickups(master2, Run.instance.availableTier1DropList, WhiteRewards, (ItemTier)0);
					}
					if (wasVoidtouchedWave)
					{
						SpawnPickups(master2, Run.instance.availableVoidTier2DropList, GreenRewards, (ItemTier)7, sort: false);
					}
					else
					{
						SpawnPickups(master2, Run.instance.availableTier2DropList, GreenRewards, (ItemTier)1);
					}
					SpawnPickups(master2, Run.instance.availableTier3DropList, RedRewards, (ItemTier)2, sort: false);
					SpawnPickups(master2, Run.instance.availableBossDropList, BossRewards, (ItemTier)4, sort: false);
					SpawnRandomEquip(master2, wasPerfectWave ? Run.instance.availableLunarEquipmentDropList : Run.instance.availableEquipmentDropList);
					num++;
				}
			}
			static PickupIndex GetDropFrom(List<PickupIndex> drops, ItemTag reqtag, List<PickupIndex> exclude)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0031: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				return EnumeratorExtensions.GetRandom<PickupIndex>(drops.Where((PickupIndex x) => (ItemCatalog.GetItemDef(((PickupIndex)(ref x)).itemIndex).ContainsTag(reqtag) || (int)reqtag == 0) && ItemCatalog.GetItemDef(((PickupIndex)(ref x)).itemIndex).DoesNotContainTag((ItemTag)6) && ItemCatalog.GetItemDef(((PickupIndex)(ref x)).itemIndex).DoesNotContainTag((ItemTag)18) && ItemCatalog.GetItemDef(((PickupIndex)(ref x)).itemIndex).DoesNotContainTag((ItemTag)17) && ItemCatalog.GetItemDef(((PickupIndex)(ref x)).itemIndex).DoesNotContainTag((ItemTag)10) && ItemCatalog.GetItemDef(((PickupIndex)(ref x)).itemIndex).DoesNotContainTag((ItemTag)14) && !exclude.Contains(x)), Run.instance.runRNG);
			}
			static void SpawnPickups(CharacterMaster master, List<PickupIndex> pickups, int amount, ItemTier tier, bool sort = true)
			{
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: 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_0057: 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_006b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0070: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: Unknown result type (might be due to invalid IL or missing references)
				//IL_009e: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)master.GetBody()))
				{
					if (BossRush.IsBasedInstalled)
					{
						sort = false;
					}
					float num2 = 360f / (float)amount;
					Vector3 val2 = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 5f);
					Quaternion val3 = Quaternion.AngleAxis(num2, Vector3.up);
					for (int i = 0; i < amount; i++)
					{
						SpawnPotential(master.GetBody().transform.position, val2, tier, pickups, sort);
						val2 = val3 * val2;
					}
				}
			}
			static void SpawnPotential(Vector3 pos, Vector3 vel, ItemTier tier, List<PickupIndex> drops, bool sort)
			{
				//IL_0003: 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_000c: 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_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0063: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: 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_0076: 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_0084: 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_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_00d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_0102: Unknown result type (might be due to invalid IL or missing references)
				//IL_010e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0119: Unknown result type (might be due to invalid IL or missing references)
				//IL_011e: Unknown result type (might be due to invalid IL or missing references)
				//IL_012b: 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_0131: Unknown result type (might be due to invalid IL or missing references)
				//IL_0132: 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)
				CreatePickupInfo val = default(CreatePickupInfo);
				val.position = pos;
				val.prefabOverride = GameObject.OptionPickup;
				val.rotation = Quaternion.identity;
				((CreatePickupInfo)(ref val)).pickupIndex = PickupCatalog.FindPickupIndex(tier);
				val.pickerOptions = (Option[])(object)new Option[3];
				val.pickerOptions[0] = new Option
				{
					pickupIndex = GetDropFrom(drops, (ItemTag)(sort ? 1 : 0), new List<PickupIndex>()),
					available = true
				};
				val.pickerOptions[1] = new Option
				{
					pickupIndex = GetDropFrom(drops, (ItemTag)(sort ? 3 : 0), new List<PickupIndex> { val.pickerOptions[0].pickupIndex }),
					available = true
				};
				val.pickerOptions[2] = new Option
				{
					pickupIndex = GetDropFrom(drops, (ItemTag)(sort ? 2 : 0), new List<PickupIndex>
					{
						val.pickerOptions[0].pickupIndex,
						val.pickerOptions[1].pickupIndex
					}),
					available = true
				};
				PickupDropletController.CreatePickupDroplet(val, val.position, vel);
			}
			static void SpawnRandomEquip(CharacterMaster master, List<PickupIndex> pickups)
			{
				//IL_0021: Unknown result type (might be due to invalid IL or missing references)
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0031: Unknown result type (might be due to invalid IL or missing references)
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)master.GetBody()))
				{
					PickupDropletController.CreatePickupDroplet(EnumeratorExtensions.GetRandom<PickupIndex>((IEnumerable<PickupIndex>)pickups, Run.instance.runRNG), master.GetBody().corePosition, Vector3.up * 40f);
				}
			}
		}
	}
	public class WaveMarker : MonoBehaviour
	{
		public Wave wave;

		public float scale;

		public CharacterBody body;

		public void Start()
		{
			body = ((Component)this).GetComponent<CharacterBody>();
			Transform val = GameObject.Find("HUDSimple(Clone)").transform.Find("MainContainer").Find("MainUIArea").Find("SpringCanvas")
				.Find("TopCenterCluster")
				.Find("BossHealthBarRoot");
			((Behaviour)((Component)val).GetComponent<VerticalLayoutGroup>()).enabled = true;
			((HorizontalOrVerticalLayoutGroup)((Component)val).GetComponent<VerticalLayoutGroup>()).spacing = 90f;
			GameObject val2 = Object.Instantiate<GameObject>(WaveManager.StackingHealthBarPrefab, val);
			StackableHealthBar component = val2.GetComponent<StackableHealthBar>();
			component.target = body;
			HandleScale();
		}

		public void HandleScale()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			Transform modelTransform = body.modelLocator.modelTransform;
			modelTransform.localScale *= scale;
			EnumerableExtensions.ForEachTry<HitBox>((IEnumerable<HitBox>)((Component)body.modelLocator.modelTransform).GetComponentsInChildren<HitBox>(), (Action<HitBox>)delegate(HitBox x)
			{
				//IL_0007: 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)
				Transform transform = ((Component)x).transform;
				transform.localScale *= scale;
			}, (IDictionary<HitBox, Exception>)null);
		}
	}
	[BepInPlugin("pseudopulse.BossRush", "BossRush", "1.3.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class BossRush : BaseUnityPlugin
	{
		public const string PluginGUID = "pseudopulse.BossRush";

		public const string PluginAuthor = "pseudopulse";

		public const string PluginName = "BossRush";

		public const string PluginVersion = "1.3.0";

		public static ManualLogSource ModLogger;

		public static YAUContentPack contentPack;

		public const short SpawnMarkerMessage = 120;

		public const short InteractShrineMessage = 121;

		public const short EndlessModeMessage = 122;

		public const short InitCustomShrineMessage = 123;

		public static bool IsEndlessModeEnabled;

		public static bool RandomModeEnabled;

		public static bool IsGotcePresent;

		public static bool IsRARPresent;

		public static bool IsForgorPresent;

		public static bool IsDireseekerPresent;

		public static bool IsBasedInstalled;

		public static bool IsSharesuiteInstalled;

		public static bool IsStarstormInstalled;

		public static bool IsRegigigasInstalled;

		public static bool IsTyranitarInstalled;

		public static bool IsEnemiesReturnsInstalled;

		public static bool IsSimulAdditionsInstalled;

		public void Awake()
		{
			ModLogger = ((BaseUnityPlugin)this).Logger;
			contentPack = ContentPackManager.CreateContentPack(Assembly.GetExecutingAssembly(), "BossRush");
			GameMode.Create();
			ContentScanner.ScanTypes<TweakBase>(Assembly.GetExecutingAssembly(), (Action<TweakBase>)delegate(TweakBase x)
			{
				((GenericBase)x).Initialize(contentPack, ((BaseUnityPlugin)this).Config, "BossRush");
			});
			IsGotcePresent = Chainloader.PluginInfos.ContainsKey("com.TheBestAssociatedLargelyLudicrousSillyheadGroup.GOTCE");
			IsForgorPresent = Chainloader.PluginInfos.ContainsKey("PlasmaCore.ForgottenRelics");
			IsRARPresent = Chainloader.PluginInfos.ContainsKey("prodzpod.RecoveredAndReformed");
			IsDireseekerPresent = Chainloader.PluginInfos.ContainsKey("com.rob.Direseeker");
			IsBasedInstalled = Chainloader.PluginInfos.ContainsKey("BALLS.WellRoundedBalance");
			IsSharesuiteInstalled = Chainloader.PluginInfos.ContainsKey("com.funkfrog_sipondo.sharesuite");
			IsStarstormInstalled = Chainloader.PluginInfos.ContainsKey("com.TeamMoonstorm.Starstorm2");
			IsRegigigasInstalled = Chainloader.PluginInfos.ContainsKey("com.rob.RegigigasMod");
			IsTyranitarInstalled = Chainloader.PluginInfos.ContainsKey("com.rob.Tyranitar");
			IsEnemiesReturnsInstalled = Chainloader.PluginInfos.ContainsKey("com.Viliger.EnemiesReturns");
			IsSimulAdditionsInstalled = Chainloader.PluginInfos.ContainsKey("Wolfo.SimulacrumAdditions");
		}
	}
}
namespace BossRush.Gamemode
{
	public class BossRushRun : Run
	{
		private float stopwatch = 0f;

		public WaveManager waveManager;

		public float bonusAmbientLevel;

		public override bool spawnWithPod => false;

		public override bool canFamilyEventTrigger => false;

		public override void OverrideRuleChoices(RuleChoiceMask mustInclude, RuleChoiceMask mustExclude, ulong runSeed)
		{
			((Run)this).OverrideRuleChoices(mustInclude, mustExclude, runSeed);
			bool flag = true;
			for (int i = 0; i < ArtifactCatalog.artifactCount; i++)
			{
				ArtifactDef artifactDef = ArtifactCatalog.GetArtifactDef((ArtifactIndex)i);
				RuleDef val = RuleCatalog.FindRuleDef("Artifacts." + artifactDef.cachedName);
				((Run)this).ForceChoice(mustInclude, mustExclude, val.FindChoice("Off"));
			}
		}

		public override void Start()
		{
			base.startingScenes = (SceneDef[])(object)new SceneDef[1] { SceneDef.itmoon };
			base.startingSceneGroup = null;
			((Run)this).Start();
			((Run)this).SetEventFlag("NoArtifactWorld");
			Stage.onStageStartGlobal += onStageBegin;
		}

		public override void OnDestroy()
		{
			((Run)this).OnDestroy();
			waveManager.Unhook();
			Stage.onStageStartGlobal -= onStageBegin;
			ObjectivePanelController.collectObjectiveSources -= CollectObjectives;
		}

		public void End()
		{
			Run.instance.BeginGameOver(GameEndings.PrismaticTrialEnding);
		}

		public void StartWaves()
		{
			waveManager.run = this;
			waveManager.Initialize();
			ObjectivePanelController.collectObjectiveSources += CollectObjectives;
			Wave wave = new Wave(new List<WaveSpawn>(), 3, 2, 0, 0, 2, 0, null);
			wave.OnWaveCompleted();
		}

		public void CollectObjectives(CharacterMaster master, List<ObjectiveSourceDescriptor> objectiveSourcesList)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			objectiveSourcesList.Add(new ObjectiveSourceDescriptor
			{
				master = master,
				objectiveType = typeof(WaveManager.BossRushObjective),
				source = (Object)(object)this
			});
		}

		public void InvokeWave()
		{
			waveManager.DoNextWave();
		}

		public void onStageBegin(Stage stage)
		{
			waveManager = new WaveManager();
			waveManager.FixScene();
			((MonoBehaviour)this).Invoke("StartWaves", 5f);
		}

		public override void FixedUpdate()
		{
			((Run)this).FixedUpdate();
		}

		public override void AdvanceStage(SceneDef nextScene)
		{
			((Run)this).AdvanceStage(nextScene);
		}

		public void InvokeDelayed(float delay = 0f)
		{
			((MonoBehaviour)this).StartCoroutine(InvokeSpawns(delay));
		}

		public void InvokeRegigigas()
		{
			((MonoBehaviour)this).StartCoroutine(HandleRegigigas());
		}

		public IEnumerator HandleRegigigas()
		{
			yield return (object)new WaitForSeconds(0.5f);
			Chat.AddMessage("<style=cStack>[The Void's Neutralizing Gas]</style>");
			Chat.AddMessage("<style=cWorldEvent>Neutralizing gas filled the area!</style>");
			yield return (object)new WaitForSeconds(1f);
			Chat.AddMessage("<style=cLunarObjective>Regigigas</style>: ...my <style=cHumanObjective><b>FAVORITE.</b></style>");
			((MonoBehaviour)this).StartCoroutine(InvokeSpawns(0.016f));
		}

		public IEnumerator InvokeSpawns(float delay)
		{
			yield return (object)new WaitForSeconds(delay);
			foreach (WaveSpawn spawn in waveManager.currentWave.WaveSpawns)
			{
				if (NetworkServer.active)
				{
					yield return (object)new WaitForEndOfFrame();
					spawn.DoSpawn();
				}
			}
		}

		public override void RecalculateDifficultyCoefficentInternal()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			float runStopwatch = ((Run)this).GetRunStopwatch();
			DifficultyDef difficultyDef = DifficultyCatalog.GetDifficultyDef(((Run)this).selectedDifficulty);
			float num = Mathf.Floor(runStopwatch * (1f / 60f));
			float num2 = (float)((Run)this).participatingPlayerCount * 0.3f;
			float num3 = 0.7f + num2;
			float num4 = 0.7f + num2;
			float num5 = Mathf.Pow((float)((Run)this).participatingPlayerCount, 0.2f);
			float num6 = 0.0506f * difficultyDef.scalingValue * num5;
			float num7 = 0.0506f * difficultyDef.scalingValue * num5;
			float num8 = Mathf.Pow(1.15f, (float)base.stageClearCount);
			base.compensatedDifficultyCoefficient = (num4 + num7 * num) * num8;
			base.difficultyCoefficient = (num3 + num6 * num) * num8;
			float num9 = (num3 + num6 * (runStopwatch * (1f / 60f))) * Mathf.Pow(1.15f, (float)base.stageClearCount);
			((Run)this).ambientLevel = Mathf.Min((num9 - num3) / 0.33f + 1f, (float)Run.ambientLevelCap);
			((Run)this).ambientLevel = ((Run)this).ambientLevel + bonusAmbientLevel;
			int ambientLevelFloor = ((Run)this).ambientLevelFloor;
			((Run)this).ambientLevelFloor = Mathf.FloorToInt(((Run)this).ambientLevel);
			if (ambientLevelFloor != ((Run)this).ambientLevelFloor && ambientLevelFloor != 0 && ((Run)this).ambientLevelFloor > ambientLevelFloor)
			{
				((Run)this).OnAmbientLevelUp();
			}
		}
	}
	public static class GameMode
	{
		public enum ShrineType
		{
			Waveskip,
			Perfected,
			Voidtouched
		}

		public class BossRushShrineController : MonoBehaviour
		{
			public bool isVoidtouch = false;

			public bool isPerfected = false;

			public bool isWaveskip = false;

			public PurchaseInteraction interaction;

			public void Start()
			{
				interaction = ((Component)this).GetComponent<PurchaseInteraction>();
				((UnityEvent<Interactor>)(object)((Component)this).GetComponent<PurchaseInteraction>().onPurchase).AddListener((UnityAction<Interactor>)OnInteract);
			}

			public void FixedUpdate()
			{
				WaveManager instance = WaveManager.instance;
				if (!instance.canInteractWithShrines)
				{
					interaction.available = false;
				}
				else if (isPerfected && instance.isVoidtouchedWave)
				{
					interaction.available = false;
				}
				else if (isVoidtouch && instance.isPerfectedWave)
				{
					interaction.available = false;
				}
			}

			public void OnInteract(Interactor interactor)
			{
				((Component)this).GetComponent<PurchaseInteraction>().Networkavailable = false;
				NetworkWriter val = NetworkingHelper.CreateMessage((short)121, (Action<NetworkWriter>)delegate(NetworkWriter x)
				{
					x.Write(isVoidtouch);
					x.Write(isWaveskip);
					x.Write(isPerfected);
				});
				NetworkingHelper.ServerSendToAll(val);
			}

			[NetworkMessageHandler(client = true, msgType = 121)]
			public static void HandleNet(NetworkMessage netmsg)
			{
				if (Object.op_Implicit((Object)(object)Run.instance) && Run.instance is BossRushRun)
				{
					bool flag = netmsg.reader.ReadBoolean();
					bool flag2 = netmsg.reader.ReadBoolean();
					bool flag3 = netmsg.reader.ReadBoolean();
					HandleInteract(flag, flag3, flag2);
					Debug.Log((object)"Handling netmessage");
				}
			}

			public static void HandleInteract(bool isVoidtouch, bool isPerfected, bool isWaveskip)
			{
				if (isVoidtouch)
				{
					WaveManager.instance.isVoidtouchedWave = true;
					Chat.AddMessage("<style=cIsVoid>The Void imbues its power in the wave to come...</style>");
				}
				if (isPerfected)
				{
					WaveManager.instance.isPerfectedWave = true;
					Chat.AddMessage("<style=cIsUtility>The Moon shines its blessing on the wave to come...</style>");
				}
				if (isWaveskip)
				{
					WaveManager.instance.DoNextWave();
					Chat.AddMessage("<style=cIsDamage>Advancing the simulation!</style>");
				}
			}
		}

		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_RecalculateStats <>9__7_0;

			internal void <Create>b__7_0(orig_RecalculateStats orig, CharacterBody self)
			{
				orig.Invoke(self);
				if (self.HasBuff(BossRushSpeed))
				{
					self.moveSpeed *= 1f + 0.1f * (float)self.GetBuffCount(BossRushSpeed);
				}
			}
		}

		public static GameObject bossRushPrefab;

		public static BuffDef BossRushSpeed;

		public static GameObject ProgressionSlab;

		public static GameObject VoidtouchWave;

		public static GameObject PerfectedWave;

		public static GameObject HotPooGames;

		public static void Create()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			//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_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_01a3: 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_02ff: 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_03b4: 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_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Expected O, but got Unknown
			bossRushPrefab = RuntimePrefabManager.CreatePrefab(new GameObject("bossRushRun"), "bossRushRun");
			GameObject classicRun = GameObject.ClassicRun;
			BossRushRun bossRushRun = bossRushPrefab.AddComponent<BossRushRun>();
			((Run)bossRushRun).lobbyBackgroundPrefab = classicRun.GetComponent<Run>().lobbyBackgroundPrefab;
			((Run)bossRushRun).uiPrefab = classicRun.GetComponent<Run>().uiPrefab;
			((Run)bossRushRun).userPickable = true;
			((Run)bossRushRun).nameToken = "BOSSRUSH_MENU_NAME";
			((Run)bossRushRun).gameOverPrefab = classicRun.GetComponent<Run>().gameOverPrefab;
			((Run)bossRushRun).startingSceneGroup = classicRun.GetComponent<Run>().startingSceneGroup;
			bossRushPrefab.AddComponent<NetworkIdentity>();
			bossRushPrefab.AddComponent<DirectorCore>();
			bossRushPrefab.AddComponent<TeamManager>();
			bossRushPrefab.AddComponent<NetworkRuleBook>();
			bossRushPrefab.AddComponent<RunCameraManager>();
			RuntimePrefabManager.MakeNetworkPrefab(bossRushPrefab);
			BossRushSpeed = ScriptableObject.CreateInstance<BuffDef>();
			BossRushSpeed.canStack = true;
			BossRushSpeed.iconSprite = BuffDef.bdCloakSpeed.iconSprite;
			((Object)BossRushSpeed).name = "Blessing of the Void";
			BossRushSpeed.buffColor = Color.magenta;
			PerfectedWave = RuntimePrefabManager.CreatePrefab(GameObject.ShrineBoss, "PerfectedWave");
			VoidtouchWave = RuntimePrefabManager.CreatePrefab(GameObject.ShrineBoss, "VoidtouchWave");
			ProgressionSlab = RuntimePrefabManager.CreatePrefab(GameObject.LunarRecycler, "SkipWave");
			NetworkHash128 assetId = PerfectedWave.GetComponent<NetworkIdentity>().assetId;
			Debug.Log((object)("PerfectedWave ID pre-reset: " + ((object)(NetworkHash128)(ref assetId)).ToString()));
			UnityExtensions.RemoveComponent<ShrineBossBehavior>(PerfectedWave);
			UnityExtensions.RemoveComponent<ShrineBossBehavior>(VoidtouchWave);
			PurchaseInteraction component = VoidtouchWave.GetComponent<PurchaseInteraction>();
			component.displayNameToken = "BOSSRUSH_VOID_SHRINE";
			component.costType = (CostTypeIndex)0;
			component.contextToken = "BOSSRUSH_VOID_CONTEXT";
			BossRushShrineController bossRushShrineController = VoidtouchWave.AddComponent<BossRushShrineController>();
			bossRushShrineController.isVoidtouch = true;
			MeshRenderer[] componentsInChildren = VoidtouchWave.GetComponentsInChildren<MeshRenderer>();
			foreach (MeshRenderer val in componentsInChildren)
			{
				if (((Object)((Component)val).gameObject).name == "Symbol")
				{
					((Renderer)val).material = Material.matDeepVoidPortalCenter;
				}
				else
				{
					((Renderer)val).material = Material.matDeepVoidPortalOpaque;
				}
			}
			BossRushShrineController bossRushShrineController2 = PerfectedWave.AddComponent<BossRushShrineController>();
			bossRushShrineController2.isPerfected = true;
			PurchaseInteraction component2 = PerfectedWave.GetComponent<PurchaseInteraction>();
			component2.displayNameToken = "BOSSRUSH_PERFECTED_SHRINE";
			component2.costType = (CostTypeIndex)0;
			component2.contextToken = "BOSSRUSH_PERFECTED_CONTEXT";
			MeshRenderer[] componentsInChildren2 = PerfectedWave.GetComponentsInChildren<MeshRenderer>();
			foreach (MeshRenderer val2 in componentsInChildren2)
			{
				if (((Object)((Component)val2).gameObject).name == "Symbol")
				{
					((Renderer)val2).material = Material.matLunarGolemChargeGlow;
				}
				else
				{
					((Renderer)val2).material = Material.matLunarGolem;
				}
			}
			if (!Object.op_Implicit((Object)(object)ProgressionSlab.GetComponent<PurchaseInteraction>()))
			{
				ProgressionSlab.AddComponent<PurchaseInteraction>();
			}
			ProgressionSlab.GetComponent<PurchaseInteraction>().costType = (CostTypeIndex)0;
			ProgressionSlab.GetComponent<PurchaseInteraction>().contextToken = "BOSSRUSH_WAVESKIP_CONTEXT";
			ProgressionSlab.GetComponent<PurchaseInteraction>().displayNameToken = "BOSSRUSH_WAVESKIP_NAME";
			BossRushShrineController bossRushShrineController3 = ProgressionSlab.AddComponent<BossRushShrineController>();
			bossRushShrineController3.isWaveskip = true;
			StringExtensions.Add("BOSSRUSH_PERFECTED_SHRINE", "Shrine of the Moon");
			StringExtensions.Add("BOSSRUSH_PERFECTED_CONTEXT", "Take on the challenge of the Moon?");
			StringExtensions.Add("BOSSRUSH_VOID_SHRINE", "Shrine of the Void");
			StringExtensions.Add("BOSSRUSH_VOID_CONTEXT", "Take on the challenge of the Void?");
			StringExtensions.Add("BOSSRUSH_WAVESKIP_NAME", "...");
			StringExtensions.Add("BOSSRUSH_WAVESKIP_CONTEXT", "Advance the simulation...?");
			assetId = PerfectedWave.GetComponent<NetworkIdentity>().assetId;
			Debug.Log((object)("PerfectedWave ID post-reset: " + ((object)(NetworkHash128)(ref assetId)).ToString()));
			object obj = <>c.<>9__7_0;
			if (obj == null)
			{
				hook_RecalculateStats val3 = delegate(orig_RecalculateStats orig, CharacterBody self)
				{
					orig.Invoke(self);
					if (self.HasBuff(BossRushSpeed))
					{
						self.moveSpeed *= 1f + 0.1f * (float)self.GetBuffCount(BossRushSpeed);
					}
				};
				<>c.<>9__7_0 = val3;
				obj = (object)val3;
			}
			CharacterBody.RecalculateStats += (hook_RecalculateStats)obj;
			BossRush.contentPack.RegisterGameObject(bossRushPrefab);
			BossRush.contentPack.RegisterScriptableObject((ScriptableObject)(object)BossRushSpeed);
			UI.Initalize();
		}

		public static void SetupShrineWaveskip(GameObject ProgressionSlab)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)ProgressionSlab.GetComponent<PurchaseInteraction>()))
			{
				ProgressionSlab.AddComponent<PurchaseInteraction>();
			}
			ProgressionSlab.GetComponent<PurchaseInteraction>().costType = (CostTypeIndex)0;
			ProgressionSlab.GetComponent<PurchaseInteraction>().contextToken = "BOSSRUSH_WAVESKIP_CONTEXT";
			ProgressionSlab.GetComponent<PurchaseInteraction>().displayNameToken = "BOSSRUSH_WAVESKIP_NAME";
			BossRushShrineController bossRushShrineController = ProgressionSlab.AddComponent<BossRushShrineController>();
			bossRushShrineController.isWaveskip = true;
		}
	}
	public class StackableHealthBar : MonoBehaviour
	{
		public Image FillRect;

		public Image DelayFillRect;

		public HUD HUD;

		public WaveSpawn waveSpawn;

		public HGTextMeshProUGUI HP;

		public HGTextMeshProUGUI Name;

		public HGTextMeshProUGUI Subtitle;

		public CharacterBody target;

		private TimeStamp nextAllowedSourceUpdateTime = TimeStamp.negativeInfinity;

		private float delayedTotalHealthFraction;

		private float healthFractionVelocity;

		public void LateUpdate()
		{
			if (!Object.op_Implicit((Object)(object)target) || !Object.op_Implicit((Object)(object)target.healthComponent))
			{
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
			float combinedHealth = target.healthComponent.combinedHealth;
			float fullCombinedHealth = target.healthComponent.fullCombinedHealth;
			float num = ((fullCombinedHealth == 0f) ? 0f : Mathf.Clamp01(combinedHealth / fullCombinedHealth));
			delayedTotalHealthFraction = Mathf.Clamp(Mathf.SmoothDamp(delayedTotalHealthFraction, num, ref healthFractionVelocity, 0.1f, float.PositiveInfinity, Time.deltaTime), num, 1f);
			FillRect.fillAmount = num;
			DelayFillRect.fillAmount = delayedTotalHealthFraction;
			((TMP_Text)HP).SetText($"{(int)combinedHealth} / {(int)fullCombinedHealth}", true);
			((TMP_Text)Name).SetText(Util.GetBestBodyName(((Component)target).gameObject), true);
			((TMP_Text)Subtitle).SetText("<sprite name=\"CloudLeft\" tint=1> " + target.GetSubtitle() + " <sprite name=\"CloudRight\" tint=1>", true);
		}
	}
	public static class UI
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_SubmitCmd <>9__0_0;

			internal void <Initalize>b__0_0(orig_SubmitCmd orig, ConsoleFunctions self, string str)
			{
				if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<HGButton>()) && ((Component)self).GetComponent<HGButton>().hoverToken == "BOSSRUSH_HOVERDESC")
				{
					if (str == "transition_command \"gamemode bossRushRun; host 0;\"")
					{
						orig.Invoke(self, str);
					}
				}
				else
				{
					orig.Invoke(self, str);
				}
			}
		}

		public static void Initalize()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			StringExtensions.Add("BOSSRUSH_MENU_NAME", "Boss Rush");
			StringExtensions.Add("BOSSRUSH_HOVERDESC", "Fight through a gauntlet of powered-up versions of every boss!.");
			SceneManager.activeSceneChanged += OnSceneChanged;
			object obj = <>c.<>9__0_0;
			if (obj == null)
			{
				hook_SubmitCmd val = delegate(orig_SubmitCmd orig, ConsoleFunctions self, string str)
				{
					if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<HGButton>()) && ((Component)self).GetComponent<HGButton>().hoverToken == "BOSSRUSH_HOVERDESC")
					{
						if (str == "transition_command \"gamemode bossRushRun; host 0;\"")
						{
							orig.Invoke(self, str);
						}
					}
					else
					{
						orig.Invoke(self, str);
					}
				};
				<>c.<>9__0_0 = val;
				obj = (object)val;
			}
			ConsoleFunctions.SubmitCmd += (hook_SubmitCmd)obj;
		}

		private static void OnSceneChanged(Scene prev, Scene next)
		{
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Expected O, but got Unknown
			if (!(((Scene)(ref next)).name == "title"))
			{
				return;
			}
			GameObject val = GameObject.Find("MainMenu");
			Transform val2 = val.transform.Find("MENU: Extra Game Mode/ExtraGameModeMenu/Main Panel/GenericMenuButtonPanel/JuicePanel/GenericMenuButton (Eclipse)");
			if (Object.op_Implicit((Object)(object)val2))
			{
				GameObject val3 = Object.Instantiate<GameObject>(((Component)val2).gameObject, val2.parent);
				val3.GetComponent<LanguageTextMeshController>().token = "BOSSRUSH_MENU_NAME";
				ConsoleFunctions consoleFunctions = val3.GetComponent<ConsoleFunctions>();
				HGButton component = val3.GetComponent<HGButton>();
				component.hoverToken = "BOSSRUSH_HOVERDESC";
				((UnityEventBase)((Button)component).onClick).RemoveAllListeners();
				((UnityEvent)((Button)component).onClick).AddListener((UnityAction)delegate
				{
					consoleFunctions.SubmitCmd("transition_command \"gamemode bossRushRun; host 0;\"");
				});
			}
			else
			{
				Debug.Log((object)"Could not find transform.");
			}
		}
	}
}
namespace BossRush.Tweaks
{
	public class Grandparent : TweakBase
	{
		public class VoidSunController : MonoBehaviour
		{
			public CharacterBody owner;

			public float stopwatch = 0f;

			public float delay = 0.03f;

			private float angleStopwatch;

			public GameObject beamVfxInstance;

			private float y = 0f;

			private float yDir = 20f;

			public void SpawnVFX()
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				beamVfxInstance = Object.Instantiate<GameObject>(GameObject.VoidRaidCrabSpinBeamVFX);
				beamVfxInstance.transform.SetParent(((Component)this).transform);
				Transform transform = beamVfxInstance.transform;
				transform.localScale += new Vector3(0.3f, 0.3f, 0.3f);
			}

			public void FixedUpdate()
			{
				//IL_010c: 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)
				//IL_011c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0121: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_0132: Unknown result type (might be due to invalid IL or missing references)
				//IL_0159: Unknown result type (might be due to invalid IL or missing references)
				//IL_015e: 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_0169: Unknown result type (might be due to invalid IL or missing references)
				//IL_016c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0178: Unknown result type (might be due to invalid IL or missing references)
				//IL_018e: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a6: 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_01de: Expected O, but got Unknown
				//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
				//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
				//IL_0221: Unknown result type (might be due to invalid IL or missing references)
				//IL_0226: Unknown result type (might be due to invalid IL or missing references)
				//IL_0242: Unknown result type (might be due to invalid IL or missing references)
				//IL_025a: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
				stopwatch += Time.fixedDeltaTime;
				angleStopwatch += 90f * Time.fixedDeltaTime;
				if (angleStopwatch >= 360f)
				{
					angleStopwatch = 0f;
				}
				if (Object.op_Implicit((Object)(object)owner) && !owner.healthComponent.alive)
				{
					owner = null;
				}
				if (!Object.op_Implicit((Object)(object)owner))
				{
					if (Object.op_Implicit((Object)(object)beamVfxInstance))
					{
						VfxKillBehavior.KillVfxObject(beamVfxInstance);
						beamVfxInstance = null;
					}
					return;
				}
				if (Object.op_Implicit((Object)(object)owner) && !Object.op_Implicit((Object)(object)beamVfxInstance))
				{
					SpawnVFX();
				}
				Vector3 val = owner.master.aiComponents[0].currentEnemy.gameObject.transform.position - ((Component)this).transform.position;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				y = Mathf.Lerp(y, normalized.y, 1.5f * Time.fixedDeltaTime);
				Vector3 val2 = Quaternion.AngleAxis(angleStopwatch, ((Component)this).transform.up) * normalized;
				Vector3 val3 = default(Vector3);
				((Vector3)(ref val3))..ctor(val2.x, y, val2.z);
				beamVfxInstance.transform.forward = val3;
				beamVfxInstance.transform.position = ((Component)this).transform.position;
				if (stopwatch >= delay)
				{
					stopwatch = 0f;
					BulletAttack val4 = new BulletAttack();
					val4.origin = ((Component)this).transform.position;
					val4.aimVector = val3;
					val4.minSpread = 0f;
					val4.maxSpread = 0f;
					val4.maxDistance = 400f;
					val4.stopperMask = LayerMask.op_Implicit(0);
					val4.radius = 4f;
					val4.smartCollision = false;
					val4.queryTriggerInteraction = (QueryTriggerInteraction)1;
					val4.procCoefficient = 1f;
					val4.procChainMask = default(ProcChainMask);
					val4.owner = ((Component)owner).gameObject;
					val4.weapon = ((Component)this).gameObject;
					val4.damage = 6f * owner.damage * 0.03f;
					val4.damageColorIndex = (DamageColorIndex)0;
					val4.damageType = DamageTypeCombo.op_Implicit((DamageType)0);
					val4.falloffModel = (FalloffModel)0;
					val4.force = 0f;
					val4.hitEffectPrefab = SpinBeamAttack.beamImpactEffectPrefab;
					val4.isCrit = false;
					val4.HitEffectNormal = false;
					if (NetworkServer.active)
					{
						val4.Fire();
					}
				}
			}
		}

		public override GameObject Body => GameObject.GrandParentBody;

		public override void ProcessTweaks(CharacterBody body, SkillLocator locator)
		{
			base.ProcessTweaks(body, locator);
		}

		public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			base.Initialize(pack, config, identifier);
			ChannelSun.CreateSun += new hook_CreateSun(OverrideSun);
			ChannelSunEnd.OnEnter += new hook_OnEnter(OnChannelExit);
		}

		public GameObject OverrideSun(orig_CreateSun orig, ChannelSun self, Vector3 sunPos)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = GameObject.Find("HOLDER: Stage").transform;
			Transform val = ((transform != null) ? transform.Find("PowerCore") : null);
			if (!(Run.instance is BossRushRun))
			{
				return orig.Invoke(self, sunPos);
			}
			VoidSunController voidSunController = ((Component)val).GetComponent<VoidSunController>();
			if (!Object.op_Implicit((Object)(object)((Component)val).GetComponent<GenericOwnership>()))
			{
				UnityExtensions.AddComponent<GenericOwnership>((Component)(object)val);
			}
			if (!Object.op_Implicit((Object)(object)voidSunController))
			{
				voidSunController = UnityExtensions.AddComponent<VoidSunController>((Component)(object)val);
			}
			voidSunController.owner = ((EntityState)self).characterBody;
			return ((Component)val).gameObject;
		}

		public void OnChannelExit(orig_OnEnter orig, ChannelSunEnd self)
		{
			Transform transform = GameObject.Find("HOLDER: Stage").transform;
			Transform val = ((transform != null) ? transform.Find("PowerCore") : null);
			if (!(Run.instance is BossRushRun))
			{
				orig.Invoke(self);
				return;
			}
			VoidSunController component = ((Component)val).GetComponent<VoidSunController>();
			component.owner = null;
			orig.Invoke(self);
		}
	}
	public abstract class TweakBase : GenericBase<TweakBase>
	{
		public abstract GameObject Body { get; }

		public override void Initialize(YAUContentPack pack, ConfigFile config, string identifier)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			((GenericBase)this).Initialize(pack, config, identifier);
			CharacterBody.Start += new hook_Start(OnBodyStart);
		}

		private void OnBodyStart(orig_Start orig, CharacterBody body)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(body);
			if (body.bodyIndex == BodyCatalog.FindBodyIndex(Body))
			{
				ProcessTweaks(body, body.skillLocator);
			}
		}

		public virtual void ProcessTweaks(CharacterBody body, SkillLocator locator)
		{
		}
	}
}
namespace BossRush.Utils.Assets
{
	public static class AssetCollection
	{
		public static AssetCollection CalmWaterShadersCollection => Addressables.LoadAssetAsync<AssetCollection>((object)"Calm Water/CalmWaterShadersCollection.asset").WaitForCompletion();

		public static AssetCollection DecaliciousShadersCollection => Addressables.LoadAssetAsync<AssetCollection>((object)"Decalicious/DecaliciousShadersCollection.asset").WaitForCompletion();

		public static AssetCollection TranslucentImageShadersCollection => Addressables.LoadAssetAsync<AssetCollection>((object)"TranslucentImage/TranslucentImageShadersCollection.asset").WaitForCompletion();

		public static AssetCollection CustomPostProcessShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/CustomPostProcessShaders.asset").WaitForCompletion();

		public static AssetCollection DeferredShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/DeferredShaders.asset").WaitForCompletion();

		public static AssetCollection EnvironmentShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/EnvironmentShaders.asset").WaitForCompletion();

		public static AssetCollection FXShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/FXShaders.asset").WaitForCompletion();

		public static AssetCollection PostProcesShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/PostProcesShaders.asset").WaitForCompletion();

		public static AssetCollection ShadersCollection => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/ShadersCollection.asset").WaitForCompletion();

		public static AssetCollection SpeedtreeOverrideShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/SpeedtreeOverrideShaders.asset").WaitForCompletion();

		public static AssetCollection UIShaders => Addressables.LoadAssetAsync<AssetCollection>((object)"RoR2/Base/Shaders/UIShaders.asset").WaitForCompletion();
	}
	public static class Material
	{
		public static Material Blue => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Blue.mat").WaitForCompletion();

		public static Material Caustics => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Caustics.mat").WaitForCompletion();

		public static Material Green => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Green.mat").WaitForCompletion();

		public static Material Ground => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Ground.mat").WaitForCompletion();

		public static Material IslandClassic => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Island - Classic.mat").WaitForCompletion();

		public static Material PondClassic => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Pond - Classic.mat").WaitForCompletion();

		public static Material PondDX11 => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Pond - DX11.mat").WaitForCompletion();

		public static Material PondSwampDX11 => Addressables.LoadAssetAsync<Material>((object)"Calm Water/PondSwamp - DX11.mat").WaitForCompletion();

		public static Material Red => Addressables.LoadAssetAsync<Material>((object)"Calm Water/Red.mat").WaitForCompletion();

		public static Material matWaterTest => Addressables.LoadAssetAsync<Material>((object)"Calm Water/matWaterTest.mat").WaitForCompletion();

		public static Material DefaultTranslucent => Addressables.LoadAssetAsync<Material>((object)"TranslucentImage/Default-Translucent.mat").WaitForCompletion();

		public static Material matArtifactCompoundCircle => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ArtifactCompounds/matArtifactCompoundCircle.mat").WaitForCompletion();

		public static Material matArtifactCompoundDiamond => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ArtifactCompounds/matArtifactCompoundDiamond.mat").WaitForCompletion();

		public static Material matArtifactCompoundFrame => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ArtifactCompounds/matArtifactCompoundFrame.mat").WaitForCompletion();

		public static Material matArtifactCompoundSquare => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ArtifactCompounds/matArtifactCompoundSquare.mat").WaitForCompletion();

		public static Material matArtifactCompoundTriangle => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ArtifactCompounds/matArtifactCompoundTriangle.mat").WaitForCompletion();

		public static Material matArtifactScavScar => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ArtifactCompounds/matArtifactScavScar.mat").WaitForCompletion();

		public static Material matArtifactEnigmaGlow => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Enigma/matArtifactEnigmaGlow.mat").WaitForCompletion();

		public static Material matWispSoul => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/WispOnDeath/matWispSoul.mat").WaitForCompletion();

		public static Material matWispSoulFire => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/WispOnDeath/matWispSoulFire.mat").WaitForCompletion();

		public static Material matAltarSkeleton => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/AltarSkeleton/matAltarSkeleton.mat").WaitForCompletion();

		public static Material matAltarSkeletonGlow => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/AltarSkeleton/matAltarSkeletonGlow.mat").WaitForCompletion();

		public static Material matBandit2Knife => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Knife.mat").WaitForCompletion();

		public static Material matBandit2Revolver => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Revolver.mat").WaitForCompletion();

		public static Material matBandit2Shotgun => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Shotgun.mat").WaitForCompletion();

		public static Material matBandit2ShotgunAlt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2ShotgunAlt.mat").WaitForCompletion();

		public static Material matBandit => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit.mat").WaitForCompletion();

		public static Material matBandit2 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2.mat").WaitForCompletion();

		public static Material matBandit2Coat => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Coat.mat").WaitForCompletion();

		public static Material matBandit2AltColossus => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2AltColossus.mat").WaitForCompletion();

		public static Material matBandit2AltColossusWeapons => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2AltColossusWeapons.mat").WaitForCompletion();

		public static Material matBandit2Alt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Alt.mat").WaitForCompletion();

		public static Material matBandit2CoatAlt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2CoatAlt.mat").WaitForCompletion();

		public static Material matBackstabIndicatorParticle => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBackstabIndicatorParticle.mat").WaitForCompletion();

		public static Material matBandit2Explosion => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Explosion.mat").WaitForCompletion();

		public static Material matBandit2Hitspark => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Hitspark.mat").WaitForCompletion();

		public static Material matBandit2HitsparkBackstab => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2HitsparkBackstab.mat").WaitForCompletion();

		public static Material matBandit2PistolSpin => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2PistolSpin.mat").WaitForCompletion();

		public static Material matBandit2Ring => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Ring.mat").WaitForCompletion();

		public static Material matBandit2Shell => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Shell.mat").WaitForCompletion();

		public static Material matBandit2Skull => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Skull.mat").WaitForCompletion();

		public static Material matBandit2SlashBlade => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SlashBlade.mat").WaitForCompletion();

		public static Material matBandit2SmokebombDonut => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SmokebombDonut.mat").WaitForCompletion();

		public static Material matBandit2SmokebombSphere => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SmokebombSphere.mat").WaitForCompletion();

		public static Material matBandit2Splatter1 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2Splatter1.mat").WaitForCompletion();

		public static Material matBandit2SplatterBillboard => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SplatterBillboard.mat").WaitForCompletion();

		public static Material matBandit2SplatterBillboardAlt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SplatterBillboardAlt.mat").WaitForCompletion();

		public static Material matBandit2SplatterDirectional => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SplatterDirectional.mat").WaitForCompletion();

		public static Material matBandit2SplatterDirectionalAlt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SplatterDirectionalAlt.mat").WaitForCompletion();

		public static Material matBandit2SplatterOpaqueTrail => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SplatterOpaqueTrail.mat").WaitForCompletion();

		public static Material matBandit2SplatterOpaqueTrailAlt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2SplatterOpaqueTrailAlt.mat").WaitForCompletion();

		public static Material matBandit2TracerTrail => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matBandit2TracerTrail.mat").WaitForCompletion();

		public static Material matDestealth => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matDestealth.mat").WaitForCompletion();

		public static Material matOmniExplosion1Bandit => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matOmniExplosion1Bandit.mat").WaitForCompletion();

		public static Material matOmniHitspark2Bandit => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matOmniHitspark2Bandit.mat").WaitForCompletion();

		public static Material matOmniHitspark2BanditAlt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bandit2/matOmniHitspark2BanditAlt.mat").WaitForCompletion();

		public static Material matBeetle => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetle.mat").WaitForCompletion();

		public static Material matBeetleopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetle_opt.mat").WaitForCompletion();

		public static Material matSulfurBeetle => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matSulfurBeetle.mat").WaitForCompletion();

		public static Material matBeetleGuard => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleGuard.mat").WaitForCompletion();

		public static Material matBeetleGuardTrail => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleGuardTrail.mat").WaitForCompletion();

		public static Material matAuraPulse => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matAuraPulse.mat").WaitForCompletion();

		public static Material matAuraPulseBeetleGuardopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matAuraPulse_BeetleGuard_opt.mat").WaitForCompletion();

		public static Material matBeetleGuardCharge => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleGuardCharge.mat").WaitForCompletion();

		public static Material matDefenseUpShield => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matDefenseUpShield.mat").WaitForCompletion();

		public static Material matDefenseUpShieldopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matDefenseUpShield_opt.mat").WaitForCompletion();

		public static Material matSulfurBeetleGuard => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matSulfurBeetleGuard.mat").WaitForCompletion();

		public static Material matBeetleBreath => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleBreath.mat").WaitForCompletion();

		public static Material matBeetleQueen => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueen.mat").WaitForCompletion();

		public static Material matBeetleBugs1 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleBugs1.mat").WaitForCompletion();

		public static Material matBeetleBugs2 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleBugs2.mat").WaitForCompletion();

		public static Material matBeetleQueen1 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueen 1.mat").WaitForCompletion();

		public static Material matBeetleQueenAcidDecal => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueenAcidDecal.mat").WaitForCompletion();

		public static Material matBeetleQueenAcidFizz => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueenAcidFizz.mat").WaitForCompletion();

		public static Material matBeetleSpit => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleSpit.mat").WaitForCompletion();

		public static Material matBeetleSpitLarge => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleSpitLarge.mat").WaitForCompletion();

		public static Material matBeetleSpitShockwave => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleSpitShockwave.mat").WaitForCompletion();

		public static Material matBeetleSpitTrail1 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleSpitTrail1.mat").WaitForCompletion();

		public static Material matBeetleSpitTrail2 => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleSpitTrail2.mat").WaitForCompletion();

		public static Material matSulfurBeetleQueen => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matSulfurBeetleQueen.mat").WaitForCompletion();

		public static Material matBeetleJuice => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleJuice.mat").WaitForCompletion();

		public static Material matBeetleQueenSphere => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleQueenSphere.mat").WaitForCompletion();

		public static Material matBeetleGuardSlamDecal => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleGuardSlamDecal.mat").WaitForCompletion();

		public static Material matBeetleImpact => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetleImpact.mat").WaitForCompletion();

		public static Material matGroundSlamIndicator => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matGroundSlamIndicator.mat").WaitForCompletion();

		public static Material matBell => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matBell.mat").WaitForCompletion();

		public static Material matBellBall => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matBellBall.mat").WaitForCompletion();

		public static Material matBellBuffBeam => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matBellBuffBeam.mat").WaitForCompletion();

		public static Material matBellDevice => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matBellDevice.mat").WaitForCompletion();

		public static Material matBellFlashBright => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matBellFlashBright.mat").WaitForCompletion();

		public static Material matOmniExplosion1Bell => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matOmniExplosion1Bell.mat").WaitForCompletion();

		public static Material matOmniHitspark1Bell => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bell/matOmniHitspark1Bell.mat").WaitForCompletion();

		public static Material matBirdshark => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Birdshark/matBirdshark.mat").WaitForCompletion();

		public static Material matBirdsharkFeather => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Birdshark/matBirdsharkFeather.mat").WaitForCompletion();

		public static Material matBison => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBison.mat").WaitForCompletion();

		public static Material matBisonopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBison_opt.mat").WaitForCompletion();

		public static Material matBisonHair => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBisonHair.mat").WaitForCompletion();

		public static Material matBisonHairopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBisonHair_opt.mat").WaitForCompletion();

		public static Material matBisonMetalBall => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBisonMetalBall.mat").WaitForCompletion();

		public static Material matBisonMetalBallopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBisonMetalBall_opt.mat").WaitForCompletion();

		public static Material matBisonSnowSphere => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBisonSnowSphere.mat").WaitForCompletion();

		public static Material matBisonSnowSphereopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matBisonSnowSphere_opt.mat").WaitForCompletion();

		public static Material matGenericChargeIndicator => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matGenericChargeIndicator.mat").WaitForCompletion();

		public static Material matGenericChargeIndicatorbisonopt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matGenericChargeIndicator_bison_opt.mat").WaitForCompletion();

		public static Material matSnowyOverlay => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Bison/matSnowyOverlay.mat").WaitForCompletion();

		public static Material maBrotherDustSpeckledLarge => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/maBrotherDustSpeckledLarge.mat").WaitForCompletion();

		public static Material maBrotherGlassOverlay => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/maBrotherGlassOverlay.mat").WaitForCompletion();

		public static Material matBrotherDissolveParticle => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherDissolveParticle.mat").WaitForCompletion();

		public static Material matBrotherEnergizedWaveTell => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherEnergizedWaveTell.mat").WaitForCompletion();

		public static Material matBrotherEyeTrail => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherEyeTrail.mat").WaitForCompletion();

		public static Material matBrotherFirePillarIndicator => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherFirePillarIndicator.mat").WaitForCompletion();

		public static Material matBrotherGlassDistortion => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherGlassDistortion.mat").WaitForCompletion();

		public static Material matBrotherPostBossSphere => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherPostBossSphere.mat").WaitForCompletion();

		public static Material matBrotherPreBossSphere => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherPreBossSphere.mat").WaitForCompletion();

		public static Material matBrotherSlamDecal => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherSlamDecal.mat").WaitForCompletion();

		public static Material matBrotherSlamDecalCracks => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherSlamDecalCracks.mat").WaitForCompletion();

		public static Material matBrotherStealAura => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherStealAura.mat").WaitForCompletion();

		public static Material matBrotherSwing => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherSwing.mat").WaitForCompletion();

		public static Material matBrotherSwingDistortion => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherSwingDistortion.mat").WaitForCompletion();

		public static Material matBrotherUltIndicator => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherUltIndicator.mat").WaitForCompletion();

		public static Material matBrotherUltIndicatorTall => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherUltIndicatorTall.mat").WaitForCompletion();

		public static Material matLunarShardImpactEffect => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matLunarShardImpactEffect.mat").WaitForCompletion();

		public static Material matLunarShardTrail => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matLunarShardTrail.mat").WaitForCompletion();

		public static Material matBrotherInfectionBlue => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherInfectionBlue.mat").WaitForCompletion();

		public static Material matBrotherInfectionGreen => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherInfectionGreen.mat").WaitForCompletion();

		public static Material matBrotherInfectionRed => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherInfectionRed.mat").WaitForCompletion();

		public static Material matBrotherInfectionWhite => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherInfectionWhite.mat").WaitForCompletion();

		public static Material matBrother => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrother.mat").WaitForCompletion();

		public static Material matBrotherArmor => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherArmor.mat").WaitForCompletion();

		public static Material matBrotherCloth => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherCloth.mat").WaitForCompletion();

		public static Material matBrotherEye => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherEye.mat").WaitForCompletion();

		public static Material matBrotherEyeHurt => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherEyeHurt.mat").WaitForCompletion();

		public static Material matBrotherGem => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherGem.mat").WaitForCompletion();

		public static Material matBrotherHammer => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherHammer.mat").WaitForCompletion();

		public static Material matBrotherStib => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherStib.mat").WaitForCompletion();

		public static Material matCaptainColossusAltArmor => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainColossusAltArmor.mat").WaitForCompletion();

		public static Material matCaptainColossusAltClothes => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainColossusAltClothes.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeAltAreaIndicatorInner => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeAltAreaIndicatorInner.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeAltAreaIndicatorOuter => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeAltAreaIndicatorOuter.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeAltLaser => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeAltLaser.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeAltRadiusWarning => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeAltRadiusWarning.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeAreaIndicator => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeAreaIndicator.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeCore => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeCore.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeFlechetteBurning => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeFlechetteBurning.mat").WaitForCompletion();

		public static Material matCaptainAirstrikeTrail => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainAirstrikeTrail.mat").WaitForCompletion();

		public static Material matCaptainBlueprintsInvalid => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainBlueprintsInvalid.mat").WaitForCompletion();

		public static Material matCaptainBlueprintsOK => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainBlueprintsOK.mat").WaitForCompletion();

		public static Material matCaptainBlueprintsWarningInvalid => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Captain/matCaptainBlueprintsWarningInvalid.mat").WaitForCompletion();

		public static Material matCaptainBlueprintsWarningOK => Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Capt