Decompiled source of StormTweaks v1.0.2

StormTweaks.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.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Chef;
using EntityStates.FalseSon;
using EntityStates.Seeker;
using IL.EntityStates.Chef;
using IL.RoR2;
using JetBrains.Annotations;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On;
using On.EntityStates.Chef;
using On.EntityStates.FalseSon;
using On.EntityStates.Seeker;
using On.RoR2.Projectile;
using R2API;
using RoR2;
using RoR2.Audio;
using RoR2.EntitlementManagement;
using RoR2.ExpansionManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using StormTweaks.Utils;
using StormTweaks.Utils.Assets;
using TMPro;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.AddressableAssets;
using UnityEngine.Audio;
using UnityEngine.Networking;
using UnityEngine.Rendering.PostProcessing;

[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("StormTweaks")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("StormTweaks")]
[assembly: AssemblyTitle("StormTweaks")]
[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 StormTweaks
{
	public class CHEF
	{
		public class ChefTrailBehaviour : MonoBehaviour
		{
			public ChefController chef;

			public Timer timer = new Timer(0.1f, inverse: false, expires: true, trueOnExpire: false, resetOnExpire: true);

			public void Start()
			{
				chef = ((Component)this).GetComponent<ChefController>();
			}

			public void FixedUpdate()
			{
				//IL_0043: 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_0081: Unknown result type (might be due to invalid IL or missing references)
				//IL_0086: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				if (chef.rolyPolyActive && chef.yesChefHeatActive && ((NetworkBehaviour)chef).hasAuthority && timer.Tick())
				{
					FireProjectileInfo val = default(FireProjectileInfo);
					val.damage = chef.characterBody.damage;
					val.crit = false;
					val.rotation = Quaternion.identity;
					val.position = chef.characterBody.footPosition;
					val.projectilePrefab = OilTrailSegment;
					val.owner = ((Component)this).gameObject;
					ProjectileManager.instance.FireProjectile(val);
				}
			}
		}

		public class ChefCleaverStorage : MonoBehaviour
		{
			public static Dictionary<CharacterBody, List<CleaverProjectile>> cleaverMap = new Dictionary<CharacterBody, List<CleaverProjectile>>();

			public static Dictionary<CharacterBody, ChefCleaverStorage> storageMap = new Dictionary<CharacterBody, ChefCleaverStorage>();

			private CharacterBody body;

			public float timer = 0f;

			public void OnEnable()
			{
				body = ((Component)this).GetComponent<CharacterBody>();
				cleaverMap.Add(body, new List<CleaverProjectile>());
				storageMap.Add(body, this);
			}

			public void FixedUpdate()
			{
				if (timer >= 0f)
				{
					timer -= Time.fixedDeltaTime;
				}
			}

			public static bool GetCanBodyRecall(CharacterBody body)
			{
				if (storageMap.ContainsKey(body))
				{
					return storageMap[body].timer <= 0f;
				}
				return true;
			}

			public static void Reset(CharacterBody body, float time = 0.4f)
			{
				if (storageMap.ContainsKey(body))
				{
					storageMap[body].timer = time;
				}
			}

			public void OnDestroy()
			{
				if (Object.op_Implicit((Object)(object)body) && cleaverMap.ContainsKey(body))
				{
					cleaverMap.Remove(body);
				}
				storageMap.Remove(body);
			}

			public int GetCleaversActive()
			{
				if (Object.op_Implicit((Object)(object)body))
				{
					return cleaverMap[body].Count;
				}
				return 0;
			}
		}

		public class CleaverSkillDef : SkillDef
		{
			public class CleaverInstanceData : BaseSkillInstanceData
			{
				public ChefCleaverStorage controller;
			}

			public override BaseSkillInstanceData OnAssigned([NotNull] GenericSkill skillSlot)
			{
				return (BaseSkillInstanceData)(object)new CleaverInstanceData
				{
					controller = ((Component)skillSlot).GetComponent<ChefCleaverStorage>()
				};
			}

			public override void OnFixedUpdate([NotNull] GenericSkill skillSlot, float deltaTime)
			{
				((SkillDef)this).OnFixedUpdate(skillSlot, deltaTime);
				int cleaversActive = (skillSlot.skillInstanceData as CleaverInstanceData).controller.GetCleaversActive();
				int num = skillSlot.maxStock - cleaversActive;
				skillSlot.stock = Mathf.Clamp(num, 0, skillSlot.maxStock);
			}

			public void Clone(SkillDef from)
			{
				//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)
				//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
				base.activationState = from.activationState;
				base.activationStateMachineName = from.activationStateMachineName;
				base.attackSpeedBuffsRestockSpeed = from.attackSpeedBuffsRestockSpeed;
				base.attackSpeedBuffsRestockSpeed_Multiplier = from.attackSpeedBuffsRestockSpeed_Multiplier;
				base.autoHandleLuminousShot = from.autoHandleLuminousShot;
				base.baseMaxStock = from.baseMaxStock;
				base.baseRechargeInterval = from.baseRechargeInterval;
				base.beginSkillCooldownOnSkillEnd = from.beginSkillCooldownOnSkillEnd;
				base.canceledFromSprinting = from.canceledFromSprinting;
				base.cancelSprintingOnActivation = from.cancelSprintingOnActivation;
				base.dontAllowPastMaxStocks = from.dontAllowPastMaxStocks;
				base.forceSprintDuringState = from.forceSprintDuringState;
				base.fullRestockOnAssign = from.fullRestockOnAssign;
				base.hideStockCount = from.hideStockCount;
				base.icon = from.icon;
				base.interruptPriority = from.interruptPriority;
				base.isCombatSkill = from.isCombatSkill;
				base.keywordTokens = from.keywordTokens;
				base.mustKeyPress = from.mustKeyPress;
				base.rechargeStock = from.rechargeStock;
				base.requiredStock = from.requiredStock;
				base.resetCooldownTimerOnUse = from.resetCooldownTimerOnUse;
				base.skillDescriptionToken = from.skillDescriptionToken;
				base.skillName = from.skillName;
				base.skillNameToken = from.skillNameToken;
				base.stockToConsume = from.stockToConsume;
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static hook_FixedUpdate <0>__Dice_FixedUpdate;

			public static hook_Update <1>__ChefController_Update;

			public static hook_OnExit <2>__Dice_OnExit;

			public static hook_OnEnter <3>__Dice_OnEnter;

			public static hook_Start <4>__CleaverProjectile_Start;

			public static hook_OnDestroy <5>__CleaverProjectile_OnDestroy;

			public static hook_GetMinimumInterruptPriority <6>__Sear_GetMinimumInterruptPriority;

			public static hook_GetMinimumInterruptPriority <7>__RolyPoly_GetMinimumInterruptPriority;

			public static hook_GetMinimumInterruptPriority <8>__Glaze_GetMinimumInterruptPriority;

			public static hook_GetMinimumInterruptPriority <9>__ChargeGlaze_GetMinimumInterruptPriority;

			public static Action<DamageReport> <10>__OnDamageDealt;

			public static hook_Update <11>__Sear_Update;

			public static Manipulator <12>__Sear_FirePrimaryAttack;

			public static hook_OnEnter <13>__Sear_OnEnter;
		}

		private static CleaverSkillDef DiceStandard;

		private static GameObject OilTrailSegment;

		private static GameObject OilTrailSegmentGhost;

		public static ModdedDamageType GlazeOnHit = DamageAPI.ReserveDamageType();

		public static float ChefDiceDuration => Main.Bind("CHEF: Dice", "Attack Duration", "The time it takes before another knife becomes throwable.", 0.3f);

		public static bool ChefDiceEnabled => Main.Bind("CHEF: Dice", "Enabled", "Enable changes to this skill?", val: true);

		public static bool ChefRename => Main.Bind("CHEF: General", "Capitalization Change", "Renames Chef to CHEF to be in-line with his previous iterations.", val: true);

		public static bool ChefSpecialRename => Main.Bind("CHEF: Yes Chef", "Name Reversion", "Renames Yes, Chef back to Second Helping, the way it is in RoR1 and RoRR.", val: true);

		public static float ChefSpecialCooldown => Main.Bind("CHEF: Yes Chef", "Cooldown", "Lower the cooldown of the alternate special.", 8f);

		public static bool ChefInterruptableSkills => Main.Bind("CHEF: General", "Skill Interrupts", "Make CHEF skills be able to interrupt each other.", val: true);

		public static bool ChefRollSpeed => Main.Bind("CHEF: Roll", "Charge-Based Speed", "Increase the speed of Roll when charged.", val: true);

		public static bool ChefRollOil => Main.Bind("CHEF: Roll", "Oil Trail", "Should Roll leave a trail of oil when boosted by Second Helping?", val: true);

		public static float ChefSearDistance => Main.Bind("CHEF: Sear", "Max Distance", "The distance Sear should damage targets.", 22f);

		public static bool ChefSearNoDirLock => Main.Bind("CHEF: Sear", "No Direction Lock", "Make Sear remain omnidirectional even during sprint.", val: true);

		public static void Init()
		{
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0076: Expected O, but got Unknown
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_034c: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Expected O, but got Unknown
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_047e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0484: Expected O, but got Unknown
			//IL_0436: Unknown result type (might be due to invalid IL or missing references)
			//IL_043b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0441: Expected O, but got Unknown
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: 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)
			//IL_00d9: Expected O, but got Unknown
			//IL_0457: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0462: Expected O, but got Unknown
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Expected O, but got Unknown
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Expected O, but got Unknown
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Expected O, but got Unknown
			SurvivorDef chef = SurvivorDef.Chef;
			if (ChefRename)
			{
				LanguageAPI.Add(chef.displayNameToken, "CHEF");
			}
			if (ChefSpecialRename)
			{
				LanguageAPI.Add(SkillDef.YesChef.skillNameToken, "Second Helping");
			}
			SkillDef.YesChef.baseRechargeInterval = ChefSpecialCooldown;
			if (ChefDiceEnabled)
			{
				object obj = <>O.<0>__Dice_FixedUpdate;
				if (obj == null)
				{
					hook_FixedUpdate val = Dice_FixedUpdate;
					<>O.<0>__Dice_FixedUpdate = val;
					obj = (object)val;
				}
				Dice.FixedUpdate += (hook_FixedUpdate)obj;
				object obj2 = <>O.<1>__ChefController_Update;
				if (obj2 == null)
				{
					hook_Update val2 = ChefController_Update;
					<>O.<1>__ChefController_Update = val2;
					obj2 = (object)val2;
				}
				ChefController.Update += (hook_Update)obj2;
				object obj3 = <>O.<2>__Dice_OnExit;
				if (obj3 == null)
				{
					hook_OnExit val3 = Dice_OnExit;
					<>O.<2>__Dice_OnExit = val3;
					obj3 = (object)val3;
				}
				Dice.OnExit += (hook_OnExit)obj3;
				object obj4 = <>O.<3>__Dice_OnEnter;
				if (obj4 == null)
				{
					hook_OnEnter val4 = Dice_OnEnter;
					<>O.<3>__Dice_OnEnter = val4;
					obj4 = (object)val4;
				}
				Dice.OnEnter += (hook_OnEnter)obj4;
				object obj5 = <>O.<4>__CleaverProjectile_Start;
				if (obj5 == null)
				{
					hook_Start val5 = CleaverProjectile_Start;
					<>O.<4>__CleaverProjectile_Start = val5;
					obj5 = (object)val5;
				}
				CleaverProjectile.Start += (hook_Start)obj5;
				object obj6 = <>O.<5>__CleaverProjectile_OnDestroy;
				if (obj6 == null)
				{
					hook_OnDestroy val6 = CleaverProjectile_OnDestroy;
					<>O.<5>__CleaverProjectile_OnDestroy = val6;
					obj6 = (object)val6;
				}
				CleaverProjectile.OnDestroy += (hook_OnDestroy)obj6;
				DiceStandard = ScriptableObject.CreateInstance<CleaverSkillDef>();
				DiceStandard.Clone(SkillDef.ChefDice);
				((SkillDef)DiceStandard).mustKeyPress = false;
				((SkillDef)DiceStandard).rechargeStock = 0;
				((SkillDef)DiceStandard).stockToConsume = 0;
				ContentAddition.AddSkillDef((SkillDef)(object)DiceStandard);
				SkillFamily.ChefPrimaryFamily.variants[0].skillDef = (SkillDef)(object)DiceStandard;
				GameObject.ChefBody.AddComponent<ChefCleaverStorage>();
				LanguageAPI.Add(SkillDef.ChefDice.skillDescriptionToken, "Throw up to <style=cIsUtility>3</style> cleavers for <style=cIsDamage>250% damage</style>. Release to recall the cleavers, dealing <style=cIsDamage>375% damage</style> on the return trip.");
			}
			if (ChefInterruptableSkills)
			{
				SkillDef.ChefSear.interruptPriority = (InterruptPriority)1;
				SkillDef.ChefSearBoosted.interruptPriority = (InterruptPriority)5;
				SkillDef.ChefRolyPoly.interruptPriority = (InterruptPriority)2;
				SkillDef.ChefRolyPolyBoosted.interruptPriority = (InterruptPriority)5;
				SkillDef.ChefGlaze.interruptPriority = (InterruptPriority)2;
				object obj7 = <>O.<6>__Sear_GetMinimumInterruptPriority;
				if (obj7 == null)
				{
					hook_GetMinimumInterruptPriority val7 = Sear_GetMinimumInterruptPriority;
					<>O.<6>__Sear_GetMinimumInterruptPriority = val7;
					obj7 = (object)val7;
				}
				Sear.GetMinimumInterruptPriority += (hook_GetMinimumInterruptPriority)obj7;
				object obj8 = <>O.<7>__RolyPoly_GetMinimumInterruptPriority;
				if (obj8 == null)
				{
					hook_GetMinimumInterruptPriority val8 = RolyPoly_GetMinimumInterruptPriority;
					<>O.<7>__RolyPoly_GetMinimumInterruptPriority = val8;
					obj8 = (object)val8;
				}
				RolyPoly.GetMinimumInterruptPriority += (hook_GetMinimumInterruptPriority)obj8;
				object obj9 = <>O.<8>__Glaze_GetMinimumInterruptPriority;
				if (obj9 == null)
				{
					hook_GetMinimumInterruptPriority val9 = Glaze_GetMinimumInterruptPriority;
					<>O.<8>__Glaze_GetMinimumInterruptPriority = val9;
					obj9 = (object)val9;
				}
				Glaze.GetMinimumInterruptPriority += (hook_GetMinimumInterruptPriority)obj9;
				object obj10 = <>O.<9>__ChargeGlaze_GetMinimumInterruptPriority;
				if (obj10 == null)
				{
					hook_GetMinimumInterruptPriority val10 = ChargeGlaze_GetMinimumInterruptPriority;
					<>O.<9>__ChargeGlaze_GetMinimumInterruptPriority = val10;
					obj10 = (object)val10;
				}
				ChargeRolyPoly.GetMinimumInterruptPriority += (hook_GetMinimumInterruptPriority)obj10;
			}
			if (ChefRollOil)
			{
				OilTrailSegment = PrefabAPI.InstantiateClone(GameObject.CrocoLeapAcid, "OilTrailSegment");
				OilTrailSegmentGhost = PrefabAPI.InstantiateClone(GameObject.CrocoLeapAcidGhost, "OilTrailSegmentGhost");
				OilTrailSegmentGhost.FindComponent<Decal>("Decal").Material = Material.matClayBossGooDecal;
				((Component)OilTrailSegmentGhost.FindParticle("Spittle")).gameObject.SetActive(false);
				((Component)OilTrailSegmentGhost.FindParticle("Gas")).gameObject.SetActive(false);
				((Component)OilTrailSegmentGhost.FindComponent<Light>("Point Light")).gameObject.SetActive(false);
				OilTrailSegmentGhost.GetComponent<ProjectileGhostController>().inheritScaleFromProjectile = true;
				OilTrailSegment.GetComponent<ProjectileDamage>().damageType = DamageTypeCombo.op_Implicit((DamageType)2560);
				Transform transform = OilTrailSegment.transform;
				transform.localScale *= 0.5f;
				OilTrailSegment.GetComponent<ProjectileController>().ghostPrefab = OilTrailSegmentGhost;
				OilTrailSegment.GetComponent<ProjectileDotZone>().damageCoefficient = 0f;
				OilTrailSegment.GetComponent<ProjectileDotZone>().impactEffect = null;
				OilTrailSegment.GetComponent<ProjectileDotZone>().fireFrequency = 20f;
				OilTrailSegment.GetComponent<ProjectileDotZone>().overlapProcCoefficient = 0f;
				OilTrailSegment.RemoveComponents<AkEvent>();
				OilTrailSegment.RemoveComponent<AkGameObj>();
				OilTrailSegment.AddComponent<ModdedDamageTypeHolderComponent>().Add(GlazeOnHit);
				GlobalEventManager.onServerDamageDealt += OnDamageDealt;
				ContentAddition.AddProjectile(OilTrailSegment);
				GameObject.ChefBody.AddComponent<ChefTrailBehaviour>();
			}
			if (ChefSearNoDirLock)
			{
				object obj11 = <>O.<11>__Sear_Update;
				if (obj11 == null)
				{
					hook_Update val11 = Sear_Update;
					<>O.<11>__Sear_Update = val11;
					obj11 = (object)val11;
				}
				Sear.Update += (hook_Update)obj11;
				object obj12 = <>O.<12>__Sear_FirePrimaryAttack;
				if (obj12 == null)
				{
					Manipulator val12 = Sear_FirePrimaryAttack;
					<>O.<12>__Sear_FirePrimaryAttack = val12;
					obj12 = (object)val12;
				}
				Sear.FirePrimaryAttack += (Manipulator)obj12;
			}
			object obj13 = <>O.<13>__Sear_OnEnter;
			if (obj13 == null)
			{
				hook_OnEnter val13 = Sear_OnEnter;
				<>O.<13>__Sear_OnEnter = val13;
				obj13 = (object)val13;
			}
			Sear.OnEnter += (hook_OnEnter)obj13;
		}

		private static void Sear_OnEnter(orig_OnEnter orig, Sear self)
		{
			Sear.maxDistance = ChefSearDistance;
			orig.Invoke(self);
		}

		private static void Sear_FirePrimaryAttack(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			MethodReference val2 = default(MethodReference);
			val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val2),
				(Instruction x) => ILPatternMatchingExt.MatchDup(x),
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0f)
			});
			val.Emit(OpCodes.Ldarg_0);
			val.EmitDelegate<Func<Vector3, Sear, Vector3>>((Func<Vector3, Sear, Vector3>)delegate(Vector3 inVec, Sear instance)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				Ray aimRay = ((BaseState)instance).GetAimRay();
				return ((Ray)(ref aimRay)).direction;
			});
		}

		private static void Sear_Update(orig_Update orig, Sear self)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.flamethrowerEffectInstance))
			{
				Transform flamethrowerEffectInstance = self.flamethrowerEffectInstance;
				Ray aimRay = ((BaseState)self).GetAimRay();
				flamethrowerEffectInstance.forward = ((Ray)(ref aimRay)).direction;
			}
		}

		private static void OnDamageDealt(DamageReport report)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			if (DamageAPI.HasModdedDamageType(report.damageInfo, GlazeOnHit) && Object.op_Implicit((Object)(object)report.victimBody))
			{
				report.victimBody.AddTimedBuff(Buffs.CookingOiled, 3f, 1);
			}
		}

		private static InterruptPriority RolyPoly_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, RolyPoly self)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private static InterruptPriority Glaze_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, Glaze self)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private static InterruptPriority ChargeGlaze_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, ChargeRolyPoly self)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private static InterruptPriority Sear_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, Sear self)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)2;
		}

		private static void Dice_OnEnter(orig_OnEnter orig, Dice self)
		{
			orig.Invoke(self);
			ChefCleaverStorage.Reset(((EntityState)self).characterBody, self.chefController.yesChefHeatActive ? 0.8f : 0.4f);
		}

		private static void CleaverProjectile_OnDestroy(orig_OnDestroy orig, CleaverProjectile self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.chefController))
			{
				CharacterBody characterBody = self.chefController.characterBody;
				if (ChefCleaverStorage.cleaverMap.ContainsKey(characterBody) && ChefCleaverStorage.cleaverMap[characterBody].Contains(self))
				{
					ChefCleaverStorage.cleaverMap[characterBody].Remove(self);
				}
			}
		}

		private static void CleaverProjectile_Start(orig_Start orig, CleaverProjectile self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.chefController))
			{
				CharacterBody characterBody = self.chefController.characterBody;
				if (ChefCleaverStorage.cleaverMap.ContainsKey(characterBody))
				{
					ChefCleaverStorage.cleaverMap[characterBody].Add(self);
				}
			}
		}

		private static void Dice_OnExit(orig_OnExit orig, Dice self)
		{
			self.chefController.SetYesChefHeatState(false);
			if (NetworkServer.active)
			{
				((EntityState)self).characterBody.RemoveBuff(Buffs.boostedFireEffect);
			}
			if (((EntityState)self).isAuthority)
			{
				self.chefController.ClearSkillOverrides();
			}
			((EntityState)self).PlayAnimation("Gesture, Override", "DiceReturnCatch", "DiceReturnCatch.playbackRate", self.duration, 0f);
			((EntityState)self).PlayAnimation("Gesture, Additive", "DiceReturnCatch", "DiceReturnCatch.playbackRate", self.duration, 0f);
		}

		private static void ChefController_Update(orig_Update orig, ChefController self)
		{
			orig.Invoke(self);
			self.recallCleaver = self.cleaverAway && !self.characterBody.inputBank.skill1.down && ChefCleaverStorage.GetCanBodyRecall(self.characterBody);
		}

		private static void Dice_FixedUpdate(orig_FixedUpdate orig, Dice self)
		{
			self.recallInputPressed = false;
			self.recallBackupCountdown = 900f;
			orig.Invoke(self);
			if (((EntityState)self).fixedAge >= ChefDiceDuration / ((BaseState)self).attackSpeedStat)
			{
				((EntityState)self).outer.SetNextStateToMain();
			}
		}
	}
	public class BurstLaserCharge : BaseSkillState
	{
		public float maxChargeDuration = 2f;

		public float minChargeDuration = 0.4f;

		public float chargePercentage;

		public LineRenderer lineRenderer;

		public Transform head;

		private uint sound;

		private GameObject chargeEffect;

		public override void OnEnter()
		{
			//IL_004a: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			maxChargeDuration /= ((BaseState)this).attackSpeedStat;
			minChargeDuration /= ((BaseState)this).attackSpeedStat;
			head = ((BaseState)this).FindModelChild("Head");
			GameObject val = Object.Instantiate<GameObject>(GameObject.LaserTriLaser, ((EntityState)this).transform.position, ((EntityState)this).transform.rotation);
			chargeEffect = Object.Instantiate<GameObject>(GameObject.ChargeTriLaser, ((Component)head).transform.position, ((Component)head).transform.rotation);
			ScaleParticleSystemDuration component = chargeEffect.GetComponent<ScaleParticleSystemDuration>();
			component.newDuration = maxChargeDuration;
			lineRenderer = val.GetComponent<LineRenderer>();
			sound = AkSoundEngine.PostEvent(Events.Play_golem_laser_charge, ((EntityState)this).gameObject);
			((EntityState)this).PlayCrossfade("Gesture, Head, Override", "FireLaserLoop", 0.25f);
			((EntityState)this).PlayCrossfade("Gesture, Head, Additive", "FireLaserLoop", 0.25f);
		}

		public override void Update()
		{
			((EntityState)this).Update();
			if ((((EntityState)this).fixedAge >= minChargeDuration && !((EntityState)this).inputBank.skill4.down) || ((EntityState)this).fixedAge >= maxChargeDuration + 0.2f)
			{
				((EntityState)this).outer.SetNextState((EntityState)(object)new BurstLaser(chargePercentage));
			}
		}

		public override void FixedUpdate()
		{
			//IL_0047: 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_0080: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			((EntityState)this).characterBody.SetAimTimer(0.2f);
			chargePercentage = Mathf.Clamp01(((EntityState)this).fixedAge / maxChargeDuration);
			chargeEffect.transform.position = ((Component)head).transform.position;
			chargeEffect.transform.rotation = ((Component)head).transform.rotation;
			lineRenderer.SetPosition(0, head.position);
			lineRenderer.SetPosition(1, FalseSon.GetOutPos(((BaseState)this).GetAimRay()));
			float num = Mathf.Clamp(1.5f * (1f - chargePercentage), 0.1f, 1.5f);
			lineRenderer.startWidth = num;
			lineRenderer.endWidth = num;
			Color color = ((Renderer)lineRenderer).material.GetColor("_TintColor");
			((Renderer)lineRenderer).material.SetColor("_TintColor", new Color(color.r, color.g, color.b, Mathf.Clamp01(chargePercentage * 1.75f)));
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)lineRenderer))
			{
				Object.Destroy((Object)(object)((Component)lineRenderer).gameObject);
			}
			if (Object.op_Implicit((Object)(object)chargeEffect))
			{
				Object.Destroy((Object)(object)chargeEffect);
			}
			AkSoundEngine.StopPlayingID(sound);
			((EntityState)this).PlayAnimation("Gesture, Head, Override", "FireLaserLoopEnd");
			((EntityState)this).PlayAnimation("Gesture, Head, Additive", "FireLaserLoopEnd");
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}
	}
	public class BurstLaser : BaseSkillState
	{
		private float damageCoefficient;

		private float radius;

		private float blastRadius;

		public BurstLaser(float charge)
		{
			damageCoefficient = Util.Remap(charge, 0f, 1f, 8f, 26f);
			radius = Util.Remap(charge, 0f, 1f, 2f, 4f);
			blastRadius = Util.Remap(charge, 0f, 1f, 10f, 15f);
		}

		public override void OnEnter()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Expected O, but got Unknown
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: 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_0166: Expected O, but got Unknown
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			AkSoundEngine.PostEvent(Events.Play_golem_laser_fire, ((EntityState)this).gameObject);
			Vector3 outPos = FalseSon.GetOutPos(((BaseState)this).GetAimRay());
			if (((EntityState)this).isAuthority)
			{
				BlastAttack val = new BlastAttack();
				val.attacker = ((EntityState)this).gameObject;
				val.radius = blastRadius;
				val.baseDamage = ((BaseState)this).damageStat * damageCoefficient;
				val.procCoefficient = 1f;
				val.damageType = DamageTypeCombo.op_Implicit((DamageType)32);
				val.crit = ((BaseState)this).RollCrit();
				val.falloffModel = (FalloffModel)0;
				val.teamIndex = ((BaseState)this).GetTeam();
				val.position = outPos;
				val.Fire();
			}
			((EntityState)this).PlayCrossfade("Gesture, Head, Override", "FireLaserLoop", 0.25f);
			((EntityState)this).PlayCrossfade("Gesture, Head, Additive", "FireLaserLoop", 0.25f);
			Transform val2 = ((BaseState)this).FindModelChild("MuzzleLaser");
			EffectData val3 = new EffectData
			{
				origin = outPos,
				start = ((Component)val2).transform.position,
				scale = radius
			};
			val3.SetChildLocatorTransformReference(((EntityState)this).gameObject, ((EntityState)this).GetModelChildLocator().FindChildIndex("MuzzleLaser"));
			EffectManager.SpawnEffect(GameObject.TracerTriLaser, val3, false);
			EffectManager.SpawnEffect(GameObject.SojournExplosionVFX, new EffectData
			{
				scale = blastRadius,
				origin = outPos
			}, false);
		}

		public override void FixedUpdate()
		{
			((EntityState)this).FixedUpdate();
			if (((EntityState)this).fixedAge >= 0.3f)
			{
				((EntityState)this).outer.SetNextStateToMain();
			}
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			((EntityState)this).PlayAnimation("Gesture, Head, Override", "FireLaserLoopEnd");
			((EntityState)this).PlayAnimation("Gesture, Head, Additive", "FireLaserLoopEnd");
		}
	}
	public class ChargeShards : BaseSkillState
	{
		public int shardCount = 0;

		public Transform muzzle;

		public GameObject charge;

		public bool shot = false;

		public string sound;

		public override void OnEnter()
		{
			//IL_0045: 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_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			((BaseState)this).OnEnter();
			muzzle = ((BaseState)this).FindModelChild("MuzzleRight");
			if (((EntityState)this).skillLocator.secondary.stock > 1)
			{
				charge = Object.Instantiate<GameObject>(GameObject.LunarWispBombChargeUp, ((Component)muzzle).transform.position, ((Component)muzzle).transform.rotation);
				Transform transform = charge.transform;
				transform.localScale *= 0.25f;
				float newDuration = 0.35f / ((BaseState)this).attackSpeedStat * (float)Mathf.Min(6, ((EntityState)this).skillLocator.secondary.stock);
				charge.GetComponent<ScaleParticleSystemDuration>().newDuration = newDuration;
			}
			else
			{
				shardCount = 1;
				((EntityState)this).skillLocator.secondary.DeductStock(1);
			}
			sound = new LunarSpikes().attackSoundString;
		}

		public override void FixedUpdate()
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)this).FixedUpdate();
			((EntityState)this).characterBody.SetAimTimer(0.2f);
			if (Object.op_Implicit((Object)(object)charge))
			{
				charge.transform.position = ((Component)muzzle).transform.position;
				charge.transform.rotation = ((Component)muzzle).transform.rotation;
			}
			if (shot)
			{
				return;
			}
			if (((EntityState)this).skillLocator.secondary.stock <= 0 || shardCount >= 6)
			{
				((MonoBehaviour)((EntityState)this).characterBody).StartCoroutine(FireShards());
				shot = true;
			}
			else if (!((EntityState)this).inputBank.skill2.down)
			{
				if (shardCount <= 0)
				{
					((EntityState)this).skillLocator.secondary.DeductStock(1);
					shardCount++;
				}
				((MonoBehaviour)((EntityState)this).characterBody).StartCoroutine(FireShards());
				shot = true;
			}
			else
			{
				((EntityState)this).PlayAnimation("Gesture, Override", "HoldGauntletsUp", "LunarSpike.playbackRate", 0.2f, 0f);
				if (shardCount < 6 && ((EntityState)this).inputBank.skill2.down && ((EntityState)this).fixedAge >= 0.35f / ((BaseState)this).attackSpeedStat)
				{
					((EntityState)this).fixedAge = 0f;
					shardCount++;
					((EntityState)this).skillLocator.secondary.DeductStock(1);
				}
			}
		}

		public override InterruptPriority GetMinimumInterruptPriority()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			return (InterruptPriority)5;
		}

		public override void OnExit()
		{
			((EntityState)this).OnExit();
			if (Object.op_Implicit((Object)(object)charge))
			{
				Object.Destroy((Object)(object)charge);
			}
		}

		public IEnumerator FireShards()
		{
			((EntityState)this).PlayCrossfade("Gesture, Additive", "FireLunarSpike", "LunarSpike.playbackRate", 0.3f, 0.1f);
			((EntityState)this).PlayCrossfade("Gesture, Override", "FireLunarSpike", "LunarSpike.playbackRate", 0.3f, 0.1f);
			float timePer = 0.15f / (float)shardCount;
			float mult = (float)((shardCount != 1) ? shardCount : 0) / 6f;
			if (Object.op_Implicit((Object)(object)charge))
			{
				Object.Destroy((Object)(object)charge);
			}
			GameObject proj = GameObject.LunarSpike;
			if (shardCount > 1)
			{
				EffectManager.SimpleEffect(GameObject.LunarWispTrackingBombExplosion, muzzle.position, Quaternion.identity, false);
			}
			for (int i = 0; i < shardCount; i++)
			{
				yield return (object)new WaitForSeconds(timePer);
				EffectManager.SimpleEffect(GameObject.MuzzleflashLunarNeedle, ((Component)muzzle).transform.position, ((Component)muzzle).transform.rotation, false);
				AkSoundEngine.PostEvent(sound, ((EntityState)this).gameObject);
				if (((EntityState)this).isAuthority)
				{
					FireProjectileInfo info = default(FireProjectileInfo);
					Ray aimRay = ((BaseState)this).GetAimRay();
					info.position = ((Ray)(ref aimRay)).origin;
					aimRay = ((BaseState)this).GetAimRay();
					info.rotation = Util.QuaternionSafeLookRotation(Util.ApplySpread(((Ray)(ref aimRay)).direction, -5f, 5f, mult, mult, 0f, 0f));
					info.damage = ((BaseState)this).damageStat * 2f;
					info.owner = ((EntityState)this).gameObject;
					info.crit = ((BaseState)this).RollCrit();
					info.projectilePrefab = proj;
					ProjectileManager.instance.FireProjectile(info);
				}
			}
			shardCount = 0;
			yield return (object)new WaitForSeconds(0.5f / ((BaseState)this).attackSpeedStat);
			((EntityState)this).outer.SetNextStateToMain();
		}
	}
	public class FalseSon
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_OnEnter <0>__LaserFather_OnEnter;

			public static hook_FixedUpdate <1>__LaserFather_FixedUpdate;

			public static hook_OnEnter <2>__LaserFatherCharged_OnEnter;

			public static hook_FixedUpdate <3>__LaserFatherCharged_FixedUpdate;

			public static hook_OnExit <4>__LaserFatherCharged_OnExit;

			public static Manipulator <5>__AllowGrowthScaling;

			public static hook_OnEnter <6>__ClubSwing_OnEnter;
		}

		public static GameObject FalseSonShardGhost;

		public static GameObject FalseSonSwingEffect;

		public static GameObject FalseSonSwingEffect2;

		public static bool FalseSonBetterLaserVisuals => Main.Bind("False Son: Laser of the Father", "Better Visuals", "Improves the visual effects of the laser.", val: true);

		public static bool FalseSonReworkedBurstLaser => Main.Bind("False Son: Laser Burst", "Reworked Burst", "Rework Laser Burst to charge up a golden beam that blasts a stunning explosion for much more damage.", val: true);

		public static bool FalseSonLunarShotgun => Main.Bind("False Son: Lunar Spikes", "Lunar Shotgun", "Make this skill chargable to blast a shotgun of up to 8 shards at a time.", val: true);

		public static bool FalseSonCoolerShards => Main.Bind("False Son: Lunar Shards", "Seeking Shards", "Make shards seek slightly", val: true);

		public static bool FalseSonGrowthScaling => Main.Bind("False Son: General", "Growth Scaling", "Allow growth to scale with level at 12.5% efficiency", val: true);

		public static bool FalseSonBetterSwing => Main.Bind("False Son: Club of the Forsaken", "Better VFX", "Improves the visual effects of the swing.", val: true);

		public static bool FalseSonAgility => Main.Bind("False Son: Club of the Forsaken", "Agile", "Make this skill agile", val: true);

		public static void Init()
		{
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			//IL_003f: 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_004a: Expected O, but got Unknown
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Expected O, but got Unknown
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Expected O, but got Unknown
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Expected O, but got Unknown
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b4: Expected O, but got Unknown
			if (FalseSonBetterLaserVisuals)
			{
				object obj = <>O.<0>__LaserFather_OnEnter;
				if (obj == null)
				{
					hook_OnEnter val = LaserFather_OnEnter;
					<>O.<0>__LaserFather_OnEnter = val;
					obj = (object)val;
				}
				LaserFather.OnEnter += (hook_OnEnter)obj;
				object obj2 = <>O.<1>__LaserFather_FixedUpdate;
				if (obj2 == null)
				{
					hook_FixedUpdate val2 = LaserFather_FixedUpdate;
					<>O.<1>__LaserFather_FixedUpdate = val2;
					obj2 = (object)val2;
				}
				LaserFather.FixedUpdate += (hook_FixedUpdate)obj2;
				object obj3 = <>O.<2>__LaserFatherCharged_OnEnter;
				if (obj3 == null)
				{
					hook_OnEnter val3 = LaserFatherCharged_OnEnter;
					<>O.<2>__LaserFatherCharged_OnEnter = val3;
					obj3 = (object)val3;
				}
				LaserFatherCharged.OnEnter += (hook_OnEnter)obj3;
				object obj4 = <>O.<3>__LaserFatherCharged_FixedUpdate;
				if (obj4 == null)
				{
					hook_FixedUpdate val4 = LaserFatherCharged_FixedUpdate;
					<>O.<3>__LaserFatherCharged_FixedUpdate = val4;
					obj4 = (object)val4;
				}
				LaserFatherCharged.FixedUpdate += (hook_FixedUpdate)obj4;
				object obj5 = <>O.<4>__LaserFatherCharged_OnExit;
				if (obj5 == null)
				{
					hook_OnExit val5 = LaserFatherCharged_OnExit;
					<>O.<4>__LaserFatherCharged_OnExit = val5;
					obj5 = (object)val5;
				}
				LaserFatherCharged.OnExit += (hook_OnExit)obj5;
			}
			if (FalseSonReworkedBurstLaser)
			{
				SkillFamily.FalseSonBodySpecialFamily.variants[1].skillDef.activationState = new SerializableEntityStateType(typeof(BurstLaserCharge));
				string skillDescriptionToken = SkillFamily.FalseSonBodySpecialFamily.variants[1].skillDef.skillDescriptionToken;
				LanguageAPI.Add(skillDescriptionToken, "<style=cIsDamage>Stunning.</style> Charge up a <style=cDeath>devastating laser</style>, dealing <style=cIsDamage>800%-2400% damage</style> in a blast on impact.");
			}
			if (FalseSonCoolerShards)
			{
				GameObject.LunarSpike.AddComponent<ProjectileTargetComponent>();
				ProjectileDirectionalTargetFinder val6 = GameObject.LunarSpike.AddComponent<ProjectileDirectionalTargetFinder>();
				ProjectileSteerTowardTarget val7 = GameObject.LunarSpike.AddComponent<ProjectileSteerTowardTarget>();
				val7.rotationSpeed = 30f;
				val6.lookRange = 40f;
				val6.lookCone = 7f;
				GameObject.LunarSpike.GetComponent<ProjectileSimple>().updateAfterFiring = true;
				FalseSonShardGhost = PrefabAPI.InstantiateClone(GameObject.LunarSpikeGhost, "FalseSonShardGhost");
				GameObject.LunarSpike.GetComponent<ProjectileController>().ghostPrefab = FalseSonShardGhost;
			}
			if (FalseSonLunarShotgun)
			{
				SkillDef.FalseSonBodyLunarSpikes.activationState = new SerializableEntityStateType(typeof(ChargeShards));
				SkillDef.FalseSonBodyLunarSpikes.stockToConsume = 0;
				LanguageAPI.Add(SkillDef.FalseSonBodyLunarSpikes.skillDescriptionToken, "<style=cIsUtility>Lunar Ruin.</style> Charge and fire up to <style=cIsUtility>6</style> Lunar Spikes for <style=cIsDamage>200% damage</style> each. Gain additional Lunar Spikes through <style=cIsHealing>Growth</style>.");
			}
			if (FalseSonGrowthScaling)
			{
				object obj6 = <>O.<5>__AllowGrowthScaling;
				if (obj6 == null)
				{
					Manipulator val8 = AllowGrowthScaling;
					<>O.<5>__AllowGrowthScaling = val8;
					obj6 = (object)val8;
				}
				FalseSonController.GetTotalSpikeCount += (Manipulator)obj6;
			}
			if (FalseSonBetterSwing)
			{
				FalseSonSwingEffect = PrefabAPI.InstantiateClone(GameObject.FalseSonSwingBasic, "FalseSonSwingEffect");
				FalseSonSwingEffect2 = PrefabAPI.InstantiateClone(GameObject.FalseSonSwingBasic2, "FalseSonSwingEffect2");
				((Component)FalseSonSwingEffect.GetComponentInChildren<ParticleSystemRenderer>()).transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
				((Component)FalseSonSwingEffect2.GetComponentInChildren<ParticleSystemRenderer>()).transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
				object obj7 = <>O.<6>__ClubSwing_OnEnter;
				if (obj7 == null)
				{
					hook_OnEnter val9 = ClubSwing_OnEnter;
					<>O.<6>__ClubSwing_OnEnter = val9;
					obj7 = (object)val9;
				}
				ClubSwing.OnEnter += (hook_OnEnter)obj7;
			}
			if (FalseSonAgility)
			{
				SkillFamily.FalseSonBodyPrimaryFamily.variants[0].skillDef.cancelSprintingOnActivation = false;
				SkillFamily.FalseSonBodyPrimaryFamily.variants[0].skillDef.canceledFromSprinting = false;
			}
		}

		private static void ClubSwing_OnEnter(orig_OnEnter orig, ClubSwing self)
		{
			((BasicMeleeAttack)self).swingEffectPrefab = FalseSonSwingEffect;
			ClubSwing.secondarySwingEffectPrefab = FalseSonSwingEffect2;
			orig.Invoke(self);
		}

		private static void AllowGrowthScaling(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 3)
			});
			val.Emit(OpCodes.Ldarg_0);
			val.EmitDelegate<Func<float, FalseSonController, float>>((Func<float, FalseSonController, float>)((float input, FalseSonController fsc) => input + fsc.characterBody.levelMaxHealth * 0.125f * (fsc.characterBody.level - 1f)));
		}

		private static void LaserFatherCharged_OnExit(orig_OnExit orig, LaserFatherCharged self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.laserEffectEnd))
			{
				Object.Destroy((Object)(object)((Component)self.laserEffectEnd).gameObject);
			}
		}

		private static void LaserFatherCharged_FixedUpdate(orig_FixedUpdate orig, LaserFatherCharged self)
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.laserEffectEnd) && Object.op_Implicit((Object)(object)((Component)self.laserEffectEnd).transform.parent))
			{
				((Component)self.laserEffectEnd).transform.parent = null;
			}
			if (Object.op_Implicit((Object)(object)self.laserEffectEnd) && !Object.op_Implicit((Object)(object)self.lockedOnHurtBox))
			{
				((Component)self.laserEffectEnd).transform.position = GetOutPos(((BaseState)self).GetAimRay());
			}
		}

		private static void LaserFatherCharged_OnEnter(orig_OnEnter orig, LaserFatherCharged self)
		{
			self.laserPrefab = GameObject.LunarGazeFireLaser;
			self.effectPrefab = GameObject.LunarGazeFireEffect;
			orig.Invoke(self);
		}

		private static void LaserFather_FixedUpdate(orig_FixedUpdate orig, LaserFather self)
		{
			//IL_005c: 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_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self.laserLineComponent))
			{
				self.laserLineComponent.startWidth = 1f - self.charge;
				self.laserLineComponent.endWidth = 1f - self.charge;
				Color color = ((Renderer)self.laserLineComponent).material.GetColor("_TintColor");
				((Renderer)self.laserLineComponent).material.SetColor("_TintColor", new Color(color.r, color.g, color.b, Mathf.Clamp01((1f - self.charge) * 1.75f)));
				self.laserLineComponent.SetPosition(0, ((Component)self.laserLineComponent).transform.position);
				self.laserLineComponent.SetPosition(1, GetOutPos(((BaseState)self).GetAimRay()));
			}
		}

		public static Vector3 GetOutPos(Ray aim)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: 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_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(aim, ref val, 2000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
			{
				return ((RaycastHit)(ref val)).point;
			}
			return ((Ray)(ref aim)).GetPoint(400f);
		}

		private static void LaserFather_OnEnter(orig_OnEnter orig, LaserFather self)
		{
			//IL_0033: 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)
			LaserFather.chargeVfxPrefab = GameObject.LunarGazeChargeEffect;
			LaserFather.effectPrefab = GameObject.LunarGazeChargeEffect;
			LaserFather.laserPrefab = GameObject.LunarGazeChargeLaser;
			orig.Invoke(self);
			Transform transform = self.chargeEffect.transform;
			transform.localScale *= 0.5f;
		}
	}
	[BepInPlugin("pseudopulse.StormTweaks", "StormTweaks", "1.0.1")]
	public class Main : BaseUnityPlugin
	{
		public const string PluginGUID = "pseudopulse.StormTweaks";

		public const string PluginAuthor = "pseudopulse";

		public const string PluginName = "StormTweaks";

		public const string PluginVersion = "1.0.1";

		public static ConfigFile config;

		public static ManualLogSource ModLogger;

		public void Awake()
		{
			ModLogger = ((BaseUnityPlugin)this).Logger;
			config = ((BaseUnityPlugin)this).Config;
			CHEF.Init();
			FalseSon.Init();
			Seeker.Init();
		}

		public static T Bind<T>(string sec, string name, string desc, T val)
		{
			return config.Bind<T>(sec, name, val, desc).Value;
		}
	}
	public class Seeker
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_OnEnter <0>__OnEnter;
		}

		public static float SeekerMeditateDamage => Main.Bind("Seeker: Meditation", "Explosion Damage", "Damage coefficient of Seeker's explosion. Vanilla is 4.5.", 8f);

		public static void Init()
		{
			//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>__OnEnter;
			if (obj == null)
			{
				hook_OnEnter val = OnEnter;
				<>O.<0>__OnEnter = val;
				obj = (object)val;
			}
			MeditationUI.OnEnter += (hook_OnEnter)obj;
		}

		private static void OnEnter(orig_OnEnter orig, MeditationUI self)
		{
			orig.Invoke(self);
			self.damageCoefficient = SeekerMeditateDamage;
		}
	}
}
namespace StormTweaks.Utils
{
	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 bool GetIsAttacking(this CharacterBody body)
		{
			List<string> list = new List<string>();
			GenericSkill[] components = ((Component)body).GetComponents<GenericSkill>();
			foreach (GenericSkill val in components)
			{
				if (Object.op_Implicit((Object)(object)val.skillDef) && !list.Contains(val.skillDef.activationStateMachineName))
				{
					list.Add(val.skillDef.activationStateMachineName);
				}
			}
			foreach (string item in list)
			{
				EntityStateMachine val2 = EntityStateMachine.FindByCustomName(((Component)body).gameObject, item);
				if (!val2.IsInMainState())
				{
					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));
			}
		}
	}
	public abstract class CoolerBasicMeleeAttack : BasicMeleeAttack
	{
		public abstract float BaseDuration { get; }

		public abstract float DamageCoefficient { get; }

		public abstract string HitboxName { get; }

		public abstract GameObject HitEffectPrefab { get; }

		public abstract float ProcCoefficient { get; }

		public abstract float HitPauseDuration { get; }

		public abstract GameObject SwingEffectPrefab { get; }

		public abstract string MuzzleString { get; }

		public virtual string MechanimHitboxParameter { get; }

		public virtual bool ScaleHitPauseDurationWithAttackSpeed { get; } = true;


		public override void OnEnter()
		{
			base.baseDuration = BaseDuration;
			base.damageCoefficient = DamageCoefficient;
			base.hitBoxGroupName = HitboxName;
			base.hitEffectPrefab = HitEffectPrefab;
			base.procCoefficient = ProcCoefficient;
			base.hitPauseDuration = HitPauseDuration;
			base.swingEffectPrefab = SwingEffectPrefab;
			base.swingEffectMuzzleString = MuzzleString;
			if (MechanimHitboxParameter != null)
			{
				base.mecanimHitboxActiveParameter = MechanimHitboxParameter;
			}
			base.scaleHitPauseDurationAndVelocityWithAttackSpeed = ScaleHitPauseDurationWithAttackSpeed;
			((BasicMeleeAttack)this).OnEnter();
		}
	}
	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);
			}
		}
	}
	public static class MiscUtils
	{
		public static Vector3? RaycastToDirection(Vector3 position, float maxDistance, Vector3 direction, int layer)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(new Ray(position, direction), ref val, maxDistance, layer, (QueryTriggerInteraction)1))
			{
				return ((RaycastHit)(ref val)).point;
			}
			return null;
		}

		public static Vector3? GroundPoint(this Vector3 point)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			return RaycastToDirection(point, float.PositiveInfinity, Vector3.down, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
		}

		public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> toShuffle, Xoroshiro128Plus random)
		{
			List<T> list = new List<T>();
			foreach (T item in toShuffle)
			{
				list.Insert(random.RangeInt(0, list.Count + 1), item);
			}
			return list;
		}

		public static Vector3 FindClosestNodeToPosition(Vector3 position, HullClassification hullClassification, bool checkAirNodes = false)
		{
			//IL_001c: 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)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_003a: 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_0044: 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)
			NodeGraph val = (checkAirNodes ? SceneInfo.instance.airNodes : SceneInfo.instance.groundNodes);
			NodeIndex val2 = val.FindClosestNode(position, hullClassification, float.PositiveInfinity);
			if (val2 != NodeIndex.invalid)
			{
				Vector3 result = default(Vector3);
				val.GetNodePosition(val2, ref result);
				return result;
			}
			return Vector3.zero;
		}

		public static bool TeleportBody(CharacterBody characterBody, GameObject target, GameObject teleportEffect, HullClassification hullClassification, Xoroshiro128Plus rng, float minDistance = 20f, float maxDistance = 45f, bool teleportAir = false)
		{
			//IL_001d: 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_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)characterBody))
			{
				return false;
			}
			SpawnCard val = ScriptableObject.CreateInstance<SpawnCard>();
			val.hullSize = hullClassification;
			val.nodeGraphType = (GraphType)(teleportAir ? 1 : 0);
			val.prefab = Resources.Load<GameObject>("SpawnCards/HelperPrefab");
			GameObject val2 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(val, new DirectorPlacementRule
			{
				placementMode = (PlacementMode)1,
				position = target.transform.position,
				minDistance = minDistance,
				maxDistance = maxDistance
			}, rng));
			if (Object.op_Implicit((Object)(object)val2))
			{
				TeleportHelper.TeleportBody(characterBody, val2.transform.position);
				if (Object.op_Implicit((Object)(object)teleportEffect))
				{
					EffectManager.SimpleEffect(teleportEffect, val2.transform.position, Quaternion.identity, true);
				}
				Object.Destroy((Object)(object)val2);
				Object.Destroy((Object)(object)val);
				return true;
			}
			Object.Destroy((Object)(object)val);
			return false;
		}

		public static Vector3? AboveTargetVectorFromDamageInfo(DamageInfo damageInfo, float distanceAboveTarget)
		{
			//IL_0050: 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_005c: 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_006c: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0126: 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_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: 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_016b: Unknown result type (might be due to invalid IL or missing references)
			//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_015b: Unknown result type (might be due to invalid IL or missing references)
			if (damageInfo.rejected || !Object.op_Implicit((Object)(object)damageInfo.attacker))
			{
				return null;
			}
			CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component))
			{
				TeamMask enemyTeams = TeamMask.GetEnemyTeams(component.teamComponent.teamIndex);
				HurtBox val = new SphereSearch
				{
					radius = 1f,
					mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
					origin = damageInfo.position
				}.RefreshCandidates().FilterCandidatesByHurtBoxTeam(enemyTeams).OrderCandidatesByDistance()
					.FilterCandidatesByDistinctHurtBoxEntities()
					.GetHurtBoxes()
					.FirstOrDefault();
				if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body))
				{
					CharacterBody body = val.healthComponent.body;
					Vector3 val2 = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f));
					Vector3? val3 = RaycastToDirection(val2, distanceAboveTarget, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
					if (val3.HasValue)
					{
						return val3.Value;
					}
					return val2 + Vector3.up * distanceAboveTarget;
				}
			}
			return null;
		}

		public static Vector3? AboveTargetBody(CharacterBody body, float distanceAbove)
		{
			//IL_0030: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: 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)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)body))
			{
				return null;
			}
			Vector3 val = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f));
			Vector3? val2 = RaycastToDirection(val, distanceAbove, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
			if (val2.HasValue)
			{
				return val2.Value;
			}
			return val + Vector3.up * distanceAbove;
		}

		public static Dictionary<string, Vector3> GetAimSurfaceAlignmentInfo(Ray ray, int layerMask, float distance)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: 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_0057: 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_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			Dictionary<string, Vector3> dictionary = new Dictionary<string, Vector3>();
			RaycastHit val = default(RaycastHit);
			if (!Physics.Raycast(ray, ref val, distance, layerMask, (QueryTriggerInteraction)1))
			{
				return null;
			}
			Vector3 point = ((RaycastHit)(ref val)).point;
			Vector3 val2 = Vector3.Cross(((Ray)(ref ray)).direction, Vector3.up);
			Vector3 val3 = Vector3.ProjectOnPlane(((RaycastHit)(ref val)).normal, val2);
			Vector3 value = Vector3.Cross(val2, val3);
			dictionary.Add("Position", point);
			dictionary.Add("Right", val2);
			dictionary.Add("Forward", value);
			dictionary.Add("Up", val3);
			return dictionary;
		}

		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 GetRandomGroundNode(NodeFlags reqFlags, NodeFlags forbiddenFlags, HullMask hull)
		{
			//IL_00c9: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//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_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Invalid comparison between Unknown and I4
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: 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 ((val.forbiddenHulls & hull) == 0 && (NodeFlags)(val.flags & reqFlags) == reqFlags && (val.flags & forbiddenFlags) == 0)
					{
						list.Add(val.position);
					}
				}
				if (list.Count > 0)
				{
					return list.GetRandom();
				}
				return Random.onUnitSphere * 500f;
			}
			return Random.onUnitSphere * 500f;
		}

		public static AnimatorOverrideController FixOverrideController(RuntimeAnimatorController target, AnimatorOverrideController original)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			AnimatorOverrideController result = new AnimatorOverrideController(target);
			AnimationClip[] animationClips = ((RuntimeAnimatorController)original).animationClips;
			foreach (AnimationClip val in animationClips)
			{
				Debug.Log((object)(((Object)val).name + " - clip"));
			}
			return result;
		}
	}
	public class Timer
	{
		public float duration;

		public float cur;

		private bool inv;

		public bool expired = false;

		private bool expires;

		private bool trueIfExp;

		private bool resetOnExp;

		public Timer(float dur, bool inverse = false, bool expires = false, bool trueOnExpire = false, bool resetOnExpire = false)
		{
			duration = dur;
			inv = inverse;
			trueIfExp = trueOnExpire;
			resetOnExp = resetOnExpire;
			this.expires = expires;
			Reset();
		}

		public void Reset()
		{
			cur = (inv ? duration : 0f);
		}

		public bool Tick()
		{
			cur += (inv ? (0f - Time.fixedDeltaTime) : Time.fixedDeltaTime);
			bool result = (inv ? (cur <= 0f) : (cur >= duration));
			if (expires)
			{
				if (expired && !resetOnExp)
				{
					return trueIfExp;
				}
				expired = result;
				if (resetOnExp && expired)
				{
					expired = false;
					Reset();
				}
			}
			return result;
		}
	}
	public class LazyIndex
	{
		private string target;

		private BodyIndex _value = (BodyIndex)(-1);

		public BodyIndex Value => UpdateValue();

		public LazyIndex(string target)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			this.target = target;
		}

		public BodyIndex UpdateValue()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Invalid comparison between Unknown and I4
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			if ((int)_value == -1 || (int)_value == -1)
			{
				_value = BodyCatalog.FindBodyIndex(target);
			}
			return _value;
		}

		public static implicit operator BodyIndex(LazyIndex index)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return index.Value;
		}
	}
	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 ParticleSystemRenderer FindParticle(this GameObject self, string name)
		{
			return self.FindComponent<ParticleSystemRenderer>(name);
		}

		public static T FindComponent<T>(this GameObject self, string name) where T : Component
		{
			return self.GetComponentsInChildren<T>().FirstOrDefault((T x) => ((Object)((Component)x).gameObject).name == name);
		}

		public static T Clone<T>(this T obj)
		{
			return (T)(obj.GetType().GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic)?.Invoke(obj, null));
		}

		public static void MakeAbideByScale(this ParticleSystem self)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			MainModule main = self.main;
			((MainModule)(ref main)).scalingMode = (ParticleSystemScalingMode)0;
		}

		public static void MakeAbideByScaleRecursively(this GameObject self)
		{
			ParticleSystem[] componentsInChildren = self.GetComponentsInChildren<ParticleSystem>();
			foreach (ParticleSystem self2 in componentsInChildren)
			{
				self2.MakeAbideByScale();
			}
		}

		public static Vector3 Nullify(this Vector3 self, bool x, bool y, bool z)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: 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 new Vector3(x ? 0f : self.x, y ? 0f : self.y, z ? 0f : self.z);
		}

		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);
		}
	}
	public static class Events
	{
		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 = 364