Decompiled source of BloonItemRebalance v1.4.1

BloonItemRebalance.dll

Decompiled 21 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BloonItemRebalance.Changes;
using BloonItemRebalance.Modules;
using BubbetsItems;
using BubbetsItems.Items.BarrierItems;
using BubbetsItems.Items.VoidLunar;
using EntityStates;
using EntityStates.Drone.DroneJunk;
using EntityStates.TeleporterHealNovaController;
using EntityStates.VagrantNovaItem;
using HG;
using HarmonyLib;
using IL.EntityStates.Drone.Command;
using IL.EntityStates.Drone.DroneWeapon;
using IL.EntityStates.TeleporterHealNovaController;
using IL.RoR2;
using IL.RoR2.Items;
using Meltdown;
using Meltdown.Items;
using Meltdown.Items.Green;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using Nautilus.Items;
using On.EntityStates.TeleporterHealNovaController;
using On.EntityStates.VagrantNovaItem;
using On.RoR2;
using On.RoR2.Items;
using On.RoR2.UI;
using R2API;
using RigsArsenal;
using RigsArsenal.Items;
using RigsArsenal.Items.VoidItems;
using RoR2;
using RoR2.ContentManagement;
using RoR2.ExpansionManagement;
using RoR2.Items;
using RoR2.Projectile;
using RoR2.UI;
using RoR2BepInExPack.GameAssetPaths.Version_1_39_0;
using SS2;
using SS2.Components;
using SS2.Items;
using SeekingTheVoid;
using TooManyItems.Items.Lunar;
using TooManyItems.Items.Tier1;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
using vanillaVoid;
using vanillaVoid.Items;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: IgnoresAccessChecksTo("BubbetsItems")]
[assembly: IgnoresAccessChecksTo("EclipseRevamped")]
[assembly: IgnoresAccessChecksTo("EnemyAbilities")]
[assembly: IgnoresAccessChecksTo("FlatItemBuff")]
[assembly: IgnoresAccessChecksTo("GrooveSaladSpikestripContent")]
[assembly: IgnoresAccessChecksTo("Meltdown")]
[assembly: IgnoresAccessChecksTo("Nautilus")]
[assembly: IgnoresAccessChecksTo("RigsArsenal")]
[assembly: IgnoresAccessChecksTo("SeekingTheVoid")]
[assembly: IgnoresAccessChecksTo("Starstorm2")]
[assembly: IgnoresAccessChecksTo("SuperCyanTweaks")]
[assembly: IgnoresAccessChecksTo("TooManyItems")]
[assembly: IgnoresAccessChecksTo("VanillaVoid")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BloonItemRebalance")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BloonItemRebalance")]
[assembly: AssemblyTitle("BloonItemRebalance")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 BloonItemRebalance
{
	[BepInPlugin("com.Bloonjitsu7.BloonItemRebalance", "BloonItemRebalance", "1.4.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class BaseMain : BaseUnityPlugin
	{
		public const string PluginGUID = "Bloonjitsu7.BloonItemRebalance";

		public const string PluginAuthor = "Bloonjitsu7";

		public const string PluginName = "BloonItemRebalance";

		public const string PluginVersion = "1.4.0";

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			new ContentPacks().Initialize();
			Main main = new Main();
			main.SetupConfig(((BaseUnityPlugin)this).Config);
			main.Initialize();
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

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

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

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

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

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

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

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
}
namespace BloonItemRebalance.Modules
{
	public static class DamageTypes
	{
		public static ModdedDamageType breachingFinProc = DamageAPI.ReserveDamageType();
	}
	public static class Buffs
	{
		internal static List<BuffDef> buffDefs = new List<BuffDef>();

		internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff, bool isCooldown, bool isHidden)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			BuffDef val = ScriptableObject.CreateInstance<BuffDef>();
			((Object)val).name = buffName;
			val.buffColor = buffColor;
			val.canStack = canStack;
			val.isDebuff = isDebuff;
			val.eliteDef = null;
			val.iconSprite = buffIcon;
			val.isCooldown = isCooldown;
			val.isHidden = isHidden;
			buffDefs.Add(val);
			return val;
		}
	}
	public static class Effects
	{
		private static GameObject finder = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_Mushroom.MushroomWard_prefab).WaitForCompletion();

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

		internal static void RegisterEffects()
		{
			Main.transmitterPrefab = CreateTransmitterEffect();
		}

		private static GameObject CreateTransmitterEffect()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			return CloneObject("RoR2/DLC3/Items/ShieldBooster/ShieldEMPPulseEffectVoid.prefab", "BloonUnstableTransmitterPulse", new Color(1f, 0.2f, 0f, 1f), new Color(1f, 0.3f, 0f, 1f), 1f, 50f, colorMesh: false);
		}

		private static GameObject CreateBurdenWaveEffect()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			return CloneObject("RoR2/Base/IgniteOnKill/IgniteExplosionVFX.prefab", "BloonBurdenWave", new Color(1f, 0f, 1f, 1f), new Color(1f, 0f, 1f, 1f), 1f, 0f, colorMesh: false);
		}

		private static GameObject CreateDaisyFieldEffect()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = CloneObject("RoR2/Base/Mushroom/MushroomWard.prefab", "BloonDaisyField", Color.green, Color.green, 1f, 0f, colorMesh: false, "", parentToTransform: false, recolor: false);
			GameObject gameObject = ((Component)val.transform.Find("Indicator")).gameObject;
			if ((Object)(object)gameObject != (Object)null)
			{
				int childCount = gameObject.transform.childCount;
				Log.Message(childCount);
				for (int i = 0; i < childCount; i++)
				{
					Transform child = gameObject.transform.GetChild(i);
					if ((Object)(object)child != (Object)null && ((Object)child).name == "MushroomMeshes")
					{
						Object.Destroy((Object)(object)((Component)child).gameObject);
					}
				}
			}
			return val;
		}

		private static GameObject CreateTracer()
		{
			//IL_000b: 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)
			GameObject val = CloneTracer("RoR2/Base/Huntress/TracerHuntressSnipe.prefab", "TracerStormboundAurelioniteLaser", Color.red, new Color(1f, 0.04f, 0.04f, 1f), 2f);
			Object.Destroy((Object)(object)((Component)val.transform.Find("TracerHead")).gameObject);
			return val;
		}

		private static GameObject CloneObject(string originalObjectName, string newObjectName, Color color1, Color color2, float scaleMult = 1f, float colorTemp = 0f, bool colorMesh = true, string soundName = "", bool parentToTransform = false, bool recolor = true)
		{
			//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_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)originalObjectName).WaitForCompletion();
			if ((Object)(object)val == (Object)null)
			{
				Log.Warning(originalObjectName + " is null!");
				return null;
			}
			Component[] componentsInChildren = val.GetComponentsInChildren(typeof(Component));
			foreach (Component data in componentsInChildren)
			{
				Log.Message(data);
			}
			GameObject val2 = PrefabAPI.InstantiateClone(val, newObjectName, false);
			if ((Object)(object)val2.GetComponent<EffectComponent>() == (Object)null)
			{
				val2.AddComponent<EffectComponent>();
			}
			if ((Object)(object)val2.GetComponent<VFXAttributes>() == (Object)null)
			{
				val2.AddComponent<VFXAttributes>();
			}
			val2.GetComponent<VFXAttributes>().vfxPriority = (VFXPriority)2;
			val2.GetComponent<VFXAttributes>().DoNotPool = true;
			if (recolor)
			{
				val2.Recolor(color1, color2, scaleMult, colorTemp, colorMesh);
			}
			CreateEffectFromObject(val2, soundName, parentToTransform);
			return val2;
		}

		private static GameObject CloneTracer(string originalTracerName, string newTracerName, Color color1, Color color2, float widthMult = 1f, float? speed = null, float? length = null)
		{
			//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_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)originalTracerName).WaitForCompletion();
			if ((Object)(object)val == (Object)null)
			{
				Log.Warning(originalTracerName + " is null!");
				return null;
			}
			GameObject val2 = PrefabAPI.InstantiateClone(val, newTracerName, false);
			if (!Object.op_Implicit((Object)(object)val2.GetComponent<EffectComponent>()))
			{
				val2.AddComponent<EffectComponent>();
			}
			if (!Object.op_Implicit((Object)(object)val2.GetComponent<VFXAttributes>()))
			{
				val2.AddComponent<VFXAttributes>();
			}
			val2.GetComponent<VFXAttributes>().vfxPriority = (VFXPriority)2;
			val2.GetComponent<VFXAttributes>().DoNotPool = true;
			if (!Object.op_Implicit((Object)(object)val2.GetComponent<NetworkIdentity>()))
			{
				val2.AddComponent<NetworkIdentity>();
			}
			val2.GetComponent<Tracer>().speed = (speed.HasValue ? speed.Value : val2.GetComponent<Tracer>().speed);
			val2.GetComponent<Tracer>().length = (length.HasValue ? length.Value : val2.GetComponent<Tracer>().length);
			val2.Recolor(color1, color2, widthMult);
			CreateAndAddEffectDef(val2);
			return val2;
		}

		private static void Recolor(this GameObject thingToColor, Color color1, Color color2, float widthMult = 1f, float colorTemp = 0f, bool colorMesh = true)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Expected O, but got Unknown
			//IL_00d7: 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_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: 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_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			bool flag = true;
			LineRenderer[] componentsInChildren = thingToColor.GetComponentsInChildren<LineRenderer>();
			foreach (LineRenderer val in componentsInChildren)
			{
				bool flag2 = true;
				val.startColor = color1;
				val.endColor = color2;
				if (widthMult != 1f)
				{
					val.widthMultiplier *= widthMult;
				}
			}
			ParticleSystem[] componentsInChildren2 = thingToColor.GetComponentsInChildren<ParticleSystem>();
			foreach (ParticleSystem val2 in componentsInChildren2)
			{
				MainModule main = val2.main;
				MinMaxCurve startSize = ((MainModule)(ref main)).startSize;
				((MainModule)(ref main)).startSize = new MinMaxCurve(((MinMaxCurve)(ref startSize)).constant * widthMult);
				((MainModule)(ref main)).startColor = new MinMaxGradient(color1);
				TrailModule trails = val2.trails;
				if (((TrailModule)(ref trails)).enabled)
				{
					Gradient val3 = new Gradient();
					GradientColorKey[] array = (GradientColorKey[])(object)new GradientColorKey[2];
					array[0].color = color1;
					array[0].time = 0f;
					array[1].color = color2;
					array[1].time = 1f;
					GradientAlphaKey[] array2 = (GradientAlphaKey[])(object)new GradientAlphaKey[2];
					array2[0].alpha = color1.a;
					array2[0].time = 0f;
					array2[1].alpha = color2.a;
					array2[1].time = 1f;
					val3.SetKeys(array, array2);
					((TrailModule)(ref trails)).colorOverLifetime = new MinMaxGradient(val3);
				}
			}
			Light[] componentsInChildren3 = thingToColor.GetComponentsInChildren<Light>();
			foreach (Light val4 in componentsInChildren3)
			{
				if (colorTemp > 0f)
				{
					val4.colorTemperature = colorTemp;
					val4.useColorTemperature = true;
				}
				else
				{
					val4.useColorTemperature = false;
				}
				val4.color = color1;
				Transform transform = ((Component)val4).transform;
				transform.localScale *= widthMult;
			}
			ParticleSystemRenderer[] componentsInChildren4 = thingToColor.GetComponentsInChildren<ParticleSystemRenderer>();
			foreach (ParticleSystemRenderer val5 in componentsInChildren4)
			{
				((Renderer)val5).material.SetColor("_MainColor", color1);
				((Renderer)val5).material.SetColor("_Color", color1);
				((Renderer)val5).material.SetColor("_TintColor", color2);
			}
			if (colorMesh)
			{
				MeshRenderer[] componentsInChildren5 = thingToColor.GetComponentsInChildren<MeshRenderer>();
				foreach (MeshRenderer val6 in componentsInChildren5)
				{
					((Renderer)val6).material.SetColor("_MainColor", color1);
					((Renderer)val6).material.SetColor("_Color", color1);
					((Renderer)val6).material.SetColor("_TintColor", color2);
				}
			}
		}

		internal static void AddEffectDef(EffectDef effectDef)
		{
			effectDefs.Add(effectDef);
		}

		internal static EffectDef CreateAndAddEffectDef(GameObject effectPrefab, bool donotPool = false)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			if (donotPool)
			{
				VFXAttributes val = effectPrefab.GetComponent<VFXAttributes>();
				if ((Object)(object)val == (Object)null)
				{
					val = effectPrefab.AddComponent<VFXAttributes>();
				}
				val.DoNotPool = true;
			}
			EffectDef val2 = new EffectDef(effectPrefab);
			AddEffectDef(val2);
			return val2;
		}

		internal static void CreateEffectFromObject(GameObject newEffect, string soundName, bool parentToTransform)
		{
			//IL_0032: 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)
			newEffect.AddComponent<DestroyOnTimer>().duration = 6f;
			newEffect.AddComponent<NetworkIdentity>();
			if (!Object.op_Implicit((Object)(object)newEffect.GetComponent<VFXAttributes>()))
			{
				newEffect.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2;
			}
			EffectComponent component = newEffect.GetComponent<EffectComponent>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				component = newEffect.AddComponent<EffectComponent>();
				component.applyScale = true;
				component.effectIndex = (EffectIndex)(-1);
				component.parentToReferencedTransform = parentToTransform;
				component.positionAtReferencedTransform = true;
				component.soundName = soundName;
			}
			CreateAndAddEffectDef(newEffect);
		}
	}
	internal class ContentPacks : IContentPackProvider
	{
		internal ContentPack contentPack = new ContentPack();

		public string identifier => "com.Bloonjitsu7.BloonModpackBaseMod";

		public void Initialize()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			Effects.RegisterEffects();
			ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders);
		}

		private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider)
		{
			addContentPackProvider.Invoke((IContentPackProvider)(object)this);
		}

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			contentPack.identifier = identifier;
			contentPack.effectDefs.Add(Effects.effectDefs.ToArray());
			contentPack.buffDefs.Add(Buffs.buffDefs.ToArray());
			args.ReportProgress(1f);
			yield break;
		}

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

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
}
namespace BloonItemRebalance.Changes
{
	public class MeatBuffVFX : MonoBehaviour
	{
		public TemporaryVisualEffect effect;
	}
	public class Main
	{
		public class NewChronoBehaviour : ItemBehavior
		{
			private static float interval = 0.25f;

			private float stopwatch;

			private SphereSearch sphereSearch;

			private void Start()
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Expected O, but got Unknown
				sphereSearch = new SphereSearch();
				stopwatch = 0f;
			}

			public void FixedUpdate()
			{
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_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_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_00b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_017c: Unknown result type (might be due to invalid IL or missing references)
				stopwatch += Time.fixedDeltaTime;
				if (!(stopwatch >= interval) || base.stack <= 0)
				{
					return;
				}
				stopwatch = 0f;
				List<HurtBox> list = CollectionPool<HurtBox, List<HurtBox>>.RentCollection();
				if (sphereSearch != null)
				{
					sphereSearch.radius = chronoRadius.Value;
					sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
					sphereSearch.origin = ((Component)this).transform.position;
					sphereSearch.RefreshCandidates();
					TeamMask enemyTeams = TeamMask.GetEnemyTeams(base.body.teamComponent.teamIndex);
					sphereSearch.FilterCandidatesByDistinctHurtBoxEntities();
					sphereSearch.OrderCandidatesByDistance();
					sphereSearch.FilterCandidatesByHurtBoxTeam(enemyTeams);
					sphereSearch.GetHurtBoxes(list);
					sphereSearch.ClearCandidates();
				}
				int num = 0;
				foreach (HurtBox item in list)
				{
					if (Object.op_Implicit((Object)(object)item.healthComponent) && Object.op_Implicit((Object)(object)item.healthComponent.body) && item.healthComponent.body.HasBuff(Buffs.Slow60))
					{
						num++;
					}
				}
				base.body.SetBuffCount(ChronoRechargeBuff.buffIndex, num);
				CollectionPool<HurtBox, List<HurtBox>>.ReturnCollection(list);
			}
		}

		public class DaisyFieldToken : MonoBehaviour
		{
			public HoldoutZoneController zoneController;

			public float stopwatch;

			public static float interval = 1f;

			public bool healReady;

			public void FixedUpdate()
			{
				stopwatch += Time.deltaTime;
				if (stopwatch >= interval)
				{
					stopwatch -= interval;
					healReady = true;
				}
			}
		}

		public class NewBandolierBehaviour : ItemBehavior
		{
			private void Start()
			{
				base.body.onSkillActivatedAuthority += OnActivateSkill;
			}

			private void OnDisable()
			{
				base.body.onSkillActivatedAuthority -= OnActivateSkill;
			}

			private void OnActivateSkill(GenericSkill genericSkill)
			{
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_0079: 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)
				if ((Object)(object)genericSkill != (Object)null && base.body.HasBuff(SpareAmmunition.buffIndex) && genericSkill.baseRechargeInterval > 0f && genericSkill.skillDef.stockToConsume > 0 && genericSkill.stock <= 0)
				{
					for (int i = 0; i < genericSkill.maxStock; i++)
					{
						genericSkill.ApplyAmmoPack();
					}
					int num = base.body.GetBuffCount(SpareAmmunition.buffIndex) - 1;
					base.body.SetBuffCount(SpareAmmunition.buffIndex, num);
				}
			}
		}

		public class NewTransmitterBehaviour : ItemBehavior
		{
			private bool regenerating = false;

			private SphereSearch sphereSearch;

			private void Start()
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Expected O, but got Unknown
				sphereSearch = new SphereSearch();
			}

			public bool TryProc()
			{
				if (base.stack > 0)
				{
					HandleActivateTransmitter();
					return true;
				}
				return false;
			}

			public void HandleActivateTransmitter()
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_0021: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: 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_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_0117: Unknown result type (might be due to invalid IL or missing references)
				//IL_0122: Unknown result type (might be due to invalid IL or missing references)
				//IL_0139: Expected O, but got Unknown
				//IL_0174: Unknown result type (might be due to invalid IL or missing references)
				//IL_0179: Unknown result type (might be due to invalid IL or missing references)
				//IL_018a: Unknown result type (might be due to invalid IL or missing references)
				//IL_018f: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
				if (base.stack <= 0)
				{
					return;
				}
				ItemTransformation val = default(ItemTransformation);
				((ItemTransformation)(ref val)).originalItemIndex = Items.TeleportOnLowHealth.itemIndex;
				((ItemTransformation)(ref val)).newItemIndex = Items.TeleportOnLowHealthConsumed.itemIndex;
				((ItemTransformation)(ref val)).minToTransform = 1;
				((ItemTransformation)(ref val)).maxToTransform = 1;
				val.transformationType = (ItemTransformationTypeIndex)7;
				TryTransformResult val2 = default(TryTransformResult);
				((ItemTransformation)(ref val)).TryTransform(base.body.inventory, ref val2);
				if (!base.body.HasBuff(TransmitterCooldown))
				{
					((MonoBehaviour)base.body).StartCoroutine(StartCooldown());
				}
				float num = base.body.maxHealth * transmitterBarrier.Value;
				base.body.healthComponent.AddBarrier(num);
				base.body.AddTimedBuff(Buffs.HiddenInvincibility, 0.2f);
				Util.PlaySound("Play_item_proc_teleportOnLowHealth", ((Component)base.body).gameObject);
				if ((Object)(object)transmitterPrefab != (Object)null)
				{
					EffectManager.SpawnEffect(transmitterPrefab, new EffectData
					{
						origin = base.body.transform.position,
						scale = base.body.radius
					}, true);
				}
				List<HurtBox> list = CollectionPool<HurtBox, List<HurtBox>>.RentCollection();
				if (sphereSearch != null)
				{
					sphereSearch.radius = transmitterPulseRadius.Value;
					sphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask;
					sphereSearch.origin = ((Component)this).transform.position;
					sphereSearch.RefreshCandidates();
					TeamMask enemyTeams = TeamMask.GetEnemyTeams(base.body.teamComponent.teamIndex);
					sphereSearch.FilterCandidatesByDistinctHurtBoxEntities();
					sphereSearch.OrderCandidatesByDistance();
					sphereSearch.FilterCandidatesByHurtBoxTeam(enemyTeams);
					sphereSearch.GetHurtBoxes(list);
					sphereSearch.ClearCandidates();
				}
				foreach (HurtBox item in list)
				{
					if (Object.op_Implicit((Object)(object)item.healthComponent))
					{
						if (NetworkServer.active)
						{
							item.healthComponent.DoWarp(((Component)base.body).gameObject, base.body);
						}
						base.body.healthComponent.AddBarrier(base.body.maxHealth * transmitterPulseBarrier.Value);
					}
				}
				CollectionPool<HurtBox, List<HurtBox>>.ReturnCollection(list);
			}

			public IEnumerator StartCooldown()
			{
				base.body.AddBuff(TransmitterCooldown);
				yield return (object)new WaitForSeconds(transmitterCooldown.Value);
				base.body.RemoveBuff(TransmitterCooldown);
				ItemTransformation val = default(ItemTransformation);
				((ItemTransformation)(ref val)).originalItemIndex = Items.TeleportOnLowHealthConsumed.itemIndex;
				((ItemTransformation)(ref val)).newItemIndex = Items.TeleportOnLowHealth.itemIndex;
				((ItemTransformation)(ref val)).maxToTransform = int.MaxValue;
				val.transformationType = (ItemTransformationTypeIndex)7;
				TryTransformResult tryTransformResult = default(TryTransformResult);
				((ItemTransformation)(ref val)).TryTransform(base.body.inventory, ref tryTransformResult);
			}
		}

		public class NewICBMBehaviour : ItemBehavior
		{
			public GameObject projectilePrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/MissileProjectile");

			public float interval;

			public float stopwatch;

			private void Start()
			{
				stopwatch = 0f;
				interval = icbmCooldown.Value / ConvertReductionIntoStackingDivision(icbmCooldownStack.Value, base.stack);
			}

			private void FixedUpdate()
			{
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d2: 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)
				if (!base.body.outOfCombat || !base.body.outOfDanger)
				{
					stopwatch += Time.fixedDeltaTime;
					if (stopwatch >= interval)
					{
						stopwatch = 0f;
						interval = icbmCooldown.Value / ConvertReductionIntoStackingDivision(icbmCooldownStack.Value, base.stack);
						float stackedStats = GetStackedStats(icbmDamage.Value, icbmDamageStack.Value, base.stack);
						bool flag = Util.CheckRoll(base.body.crit, base.body.master);
						MissileUtils.FireMissile(base.body.corePosition, base.body, default(ProcChainMask), (GameObject)null, base.body.damage * stackedStats, flag, projectilePrefab, (DamageColorIndex)3, false);
					}
				}
			}
		}

		public class NewBarrageOnBossBehaviour : ItemBehavior
		{
			private int maxBuffCount = 50;

			public uint prevMoney = 0u;

			private float totalMoney;

			public float gainedMoney;

			public int missileBarrageCount = 0;

			public float fireDelay = 1f;

			public float cooldownDelay = 0f;

			public static float MissileOriginHeight = 80f;

			private static GameObject missilePrefab;

			private static GameObject missileStartPrefab;

			private float timer;

			public float searchRange = 200f;

			private BullseyeSearch bullseyeSearch = new BullseyeSearch();

			private static Vector3 heightOffset = new Vector3(0f, BarrageOnBossBehaviour.MissileOriginHeight, 0f);

			private static Vector3 traceDirection = new Vector3(0f, -1f, 0f);

			private static readonly LayerMask missileCollisionMask = ((LayerIndex)(ref LayerIndex.noCollision)).mask;

			private static RaycastHit[] hits = (RaycastHit[])(object)new RaycastHit[8];

			[SystemInitializer(new Type[] { typeof(ItemCatalog) })]
			private static void Init()
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Unknown result type (might be due to invalid IL or missing references)
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				AsyncOperationHandle<GameObject> val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Items/BarrageOnBoss/BossMissileProjectile.prefab");
				val.Completed += delegate(AsyncOperationHandle<GameObject> x)
				{
					missilePrefab = x.Result;
				};
				val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Items/BarrageOnBoss/BossMissileStart.prefab");
				val.Completed += delegate(AsyncOperationHandle<GameObject> x)
				{
					missileStartPrefab = x.Result;
				};
			}

			private void Awake()
			{
				Init();
			}

			private void OnEnable()
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Expected O, but got Unknown
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				CharacterBody.Start += new hook_Start(CheckBarrageEnemy);
				totalMoney = 0f;
				bullseyeSearch.teamMaskFilter = TeamMask.allButNeutral;
				((TeamMask)(ref bullseyeSearch.teamMaskFilter)).RemoveTeam((TeamIndex)1);
				bullseyeSearch.maxDistanceFilter = searchRange;
				bullseyeSearch.sortMode = (SortMode)1;
				bullseyeSearch.filterByLoS = false;
			}

			private void OnDisable()
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Expected O, but got Unknown
				CharacterBody.Start -= new hook_Start(CheckBarrageEnemy);
			}

			private void Start()
			{
				CharacterMaster master = base.body.master;
				prevMoney = master.money;
				master.OnGoldCollected += CollectedMoney;
			}

			private void CollectedMoney(float amount)
			{
				gainedMoney += amount;
			}

			private void Update()
			{
				uint num = (uint)((float)base.body.master.money - gainedMoney);
				if (num < prevMoney)
				{
					UpdateExtraMissileMoneyCount(prevMoney - num);
				}
				prevMoney = base.body.master.money;
				gainedMoney = 0f;
			}

			private void CheckBarrageEnemy(orig_Start orig, CharacterBody self)
			{
				//IL_0031: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: 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)
				orig.Invoke(self);
				if ((self.isElite || self.isBoss) && base.body.HasBuff(Buffs.ExtraBossMissile) && self.teamComponent.teamIndex != (TeamIndex)(base.body.teamComponent.teamIndex | 0))
				{
					base.body.SetBuffCount(Buffs.ExtraBossMissile.buffIndex, base.body.GetBuffCount(Buffs.ExtraBossMissile) - 1);
					((MonoBehaviour)this).StartCoroutine(BarrageEnemy(self));
				}
			}

			public IEnumerator BarrageEnemy(CharacterBody characterBody)
			{
				yield return (object)new WaitForSeconds(fireDelay);
				FireMissile(characterBody);
			}

			private void UpdateExtraMissileMoneyCount(float amount)
			{
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				totalMoney += amount;
				uint difficultyScaledCost = (uint)Run.instance.GetDifficultyScaledCost(warbondsGoldCost.Value);
				while (totalMoney >= (float)difficultyScaledCost && base.body.GetBuffCount(Buffs.ExtraBossMissile) < maxBuffCount)
				{
					for (int i = 0; i < base.stack; i++)
					{
						base.body.AddBuff(Buffs.ExtraBossMissile.buffIndex);
					}
					totalMoney -= difficultyScaledCost;
				}
			}

			private Vector3 MoveTargetToGround(Vector3 target)
			{
				//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_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_008b: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_0052: 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_0087: 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_0075: Unknown result type (might be due to invalid IL or missing references)
				int num = Physics.RaycastNonAlloc(target, traceDirection, hits, 350f, LayerMask.op_Implicit(missileCollisionMask), (QueryTriggerInteraction)1);
				if (num > 0)
				{
					Vector3 point = ((RaycastHit)(ref hits[0])).point;
					for (int i = 1; i < num; i++)
					{
						if (point.y < ((RaycastHit)(ref hits[i])).point.y)
						{
							point = ((RaycastHit)(ref hits[i])).point;
						}
					}
					return point;
				}
				return target;
			}

			private void FireMissile(CharacterBody characterBody)
			{
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_010e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0113: Unknown result type (might be due to invalid IL or missing references)
				//IL_0118: 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_012f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0135: Unknown result type (might be due to invalid IL or missing references)
				//IL_0164: Unknown result type (might be due to invalid IL or missing references)
				//IL_0169: Unknown result type (might be due to invalid IL or missing references)
				//IL_016e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0173: Unknown result type (might be due to invalid IL or missing references)
				//IL_017d: Unknown result type (might be due to invalid IL or missing references)
				if (!Object.op_Implicit((Object)(object)characterBody))
				{
					characterBody = base.body;
				}
				int num = (Object.op_Implicit((Object)(object)base.body.inventory) ? base.body.inventory.GetItemCountEffective(Items.MoreMissile) : 0);
				float damage = base.body.damage * GetStackedStats(warbondsDamage.Value, warbondsDamageStack.Value, base.stack);
				float maxDistance = MissileOriginHeight - 4f;
				Component[] componentsInChildren = missilePrefab.GetComponentsInChildren(typeof(Component));
				foreach (Component data in componentsInChildren)
				{
					Log.Message(data);
				}
				FireProjectileInfo val = new FireProjectileInfo
				{
					crit = base.body.RollCrit(),
					owner = ((Component)this).gameObject,
					position = ((Component)characterBody).gameObject.transform.position + heightOffset,
					projectilePrefab = missilePrefab,
					rotation = Util.QuaternionSafeLookRotation(Vector3.down),
					damage = damage,
					maxDistance = maxDistance
				};
				ProjectileManager.instance.FireProjectile(val);
				if (num > 0)
				{
					val.damage *= 0.5f;
					val.position = ((Component)characterBody).gameObject.transform.position + heightOffset;
					ProjectileManager.instance.FireProjectile(val);
				}
			}

			private Vector3 CalculateHitPosition(GameObject target)
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_0013: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_0021: 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_002d: 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_0038: Unknown result type (might be due to invalid IL or missing references)
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				Vector3 val = MoveTargetToGround(target.transform.position);
				Vector2 insideUnitCircle = Random.insideUnitCircle;
				Vector2 normalized = ((Vector2)(ref insideUnitCircle)).normalized;
				return val + new Vector3(normalized.x, 0f, normalized.y);
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static Func<Func<int, float>, int, float> <0>__OnMissileDamage;

			public static hook_ProcessHitEnemy <1>__OnProcessSingularityBand;
		}

		private static Hook missileHook;

		public static GameObject MeatBuffVFX = Addressables.LoadAssetAsync<GameObject>((object)RoR2_Junk_RegenOnKill.RegenBoostEffect_prefab).WaitForCompletion();

		public static GameObject transmitterPrefab;

		public static GameObject daisyFieldPrefab;

		public static BuffDef MeatBuff = Buffs.MeatRegenBoost;

		public static BuffDef IgnitionCooldown;

		public static BuffDef ScytheCooldown;

		public static BuffDef OpticsBuff;

		public static BuffDef TransmitterCooldown;

		public static BuffDef GenesisBuff;

		public static BuffDef GenesisBuffPrecise;

		public static BuffDef SpareAmmunition;

		public static BuffDef StealthDamageBuff;

		public static BuffDef ChronoRechargeBuff;

		private static Sprite opticsIcon = Addressables.LoadAssetAsync<Sprite>((object)RoR2_Base_Merc.texBuffMercExposeIcon_tif).WaitForCompletion();

		private static Sprite transmitterIcon = Addressables.LoadAssetAsync<Sprite>((object)RoR2_DLC2_Items_TeleportOnLowHealth.texBuffTeleportOnLowHealthIcon_png).WaitForCompletion();

		private static Sprite genesisIcon = Addressables.LoadAssetAsync<Sprite>((object)RoR2_Base_ShockNearby.texBuffTeslaIcon_tif).WaitForCompletion();

		private static Sprite ammoIcon = Addressables.LoadAssetAsync<Sprite>((object)RoR2_Base_Bandolier.texBandolierIcon_png).WaitForCompletion();

		private static Sprite stealthIcon = Addressables.LoadAssetAsync<Sprite>((object)RoR2_Base_Common.texBuffCloakIcon_tif).WaitForCompletion();

		private static Sprite chronoIcon = Addressables.LoadAssetAsync<Sprite>((object)RoR2_Base_SlowOnHit.texBaubleIcon_png).WaitForCompletion();

		public static GameObject ammoPack = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/AmmoPack");

		private Xoroshiro128Plus rng;

		internal static bool HasFlatItemBuff => Chainloader.PluginInfos.ContainsKey("com.kking117.FlatItemBuff");

		internal static bool HasBubbetsItems => Chainloader.PluginInfos.ContainsKey("bubbet.bubbetsitems");

		internal static bool HasStarstorm => Chainloader.PluginInfos.ContainsKey("com.TeamMoonstorm");

		internal static bool HasSeekingTheVoid => Chainloader.PluginInfos.ContainsKey("acanthi.SeekingTheVoid");

		internal static bool HasTooManyItems => Chainloader.PluginInfos.ContainsKey("shirograhm.TooManyItems");

		internal static bool HasVanillaVoid => Chainloader.PluginInfos.ContainsKey("com.Zenithrium.vanillaVoid");

		internal static bool HasMeltdown => Chainloader.PluginInfos.ContainsKey("com.pittabread.Meltdown");

		internal static bool HasNautilus => Chainloader.PluginInfos.ContainsKey("com.Hex3.Nautilus");

		internal static bool HasRigsArsenal => Chainloader.PluginInfos.ContainsKey("RigsInRags.RigsArsenal");

		internal static bool HasSpikestrip => Chainloader.PluginInfos.ContainsKey("com.groovesalad.GrooveSaladSpikestripContent");

		internal static bool HasSuperCyan => Chainloader.PluginInfos.ContainsKey("Samuel17.SuperCyanTweaks");

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

		public static ConfigEntry<float> stunGrenadeDamage { get; set; }

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

		public static ConfigEntry<float> apRoundsEliteDamage { get; set; }

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

		public static ConfigEntry<float> lanternSpeed { get; set; }

		public static ConfigEntry<float> lanternSpeedStack { get; set; }

		public static ConfigEntry<float> lanternRegen { get; set; }

		public static ConfigEntry<float> lanternRegenStack { get; set; }

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

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

		public static ConfigEntry<float> lanternRadius { get; set; }

		public static ConfigEntry<float> lanternRadiusStack { get; set; }

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

		public static ConfigEntry<float> warpedEchoDuration { get; set; }

		public static ConfigEntry<float> warpedEchoDurationStack { get; set; }

		public static ConfigEntry<float> warpedEchoStats { get; set; }

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

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

		public static ConfigEntry<float> bungusTimer { get; set; }

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

		public static ConfigEntry<float> meatHealth { get; set; }

		public static ConfigEntry<float> meatDuration { get; set; }

		public static ConfigEntry<float> meatDurationStack { get; set; }

		public static ConfigEntry<float> meatRegen { get; set; }

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

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

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

		public static ConfigEntry<float> multikillDuration { get; set; }

		public static ConfigEntry<float> multikillDamage { get; set; }

		public static ConfigEntry<float> multikillDamageStack { get; set; }

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

		public static ConfigEntry<float> milkHealth { get; set; }

		public static ConfigEntry<float> milkRetaliate { get; set; }

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

		public static ConfigEntry<float> loafRegenChance { get; set; }

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

		public static ConfigEntry<float> coffeeBuffDuration { get; set; }

		public static ConfigEntry<float> coffeeMoveSpeed { get; set; }

		public static ConfigEntry<float> coffeeAttackSpeed { get; set; }

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

		public static ConfigEntry<float> uraniumHorseshoeDamage { get; set; }

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

		public static ConfigEntry<float> boneDuration { get; set; }

		public static ConfigEntry<float> boneDurationStack { get; set; }

		public static ConfigEntry<float> boneProcChance { get; set; }

		public static ConfigEntry<float> boneProcStack { get; set; }

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

		public static ConfigEntry<float> chanceDollScrap { get; set; }

		public static ConfigEntry<float> chanceDollUpgrade { get; set; }

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

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

		public static ConfigEntry<float> ignitionCooldownTime { get; set; }

		public static ConfigEntry<float> ignitionCooldownStack { get; set; }

		public static ConfigEntry<float> ignitionBurnDamage { get; set; }

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

		public static ConfigEntry<float> scytheHeal { get; set; }

		public static ConfigEntry<float> scytheHealStack { get; set; }

		public static ConfigEntry<float> scytheCooldownTime { get; set; }

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

		public static ConfigEntry<float> infusionSpeed { get; set; }

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

		public static ConfigEntry<float> faradaySpeedJumpCap { get; set; }

		public static ConfigEntry<float> faradayCharge { get; set; }

		public static ConfigEntry<float> faradayChargeStack { get; set; }

		public static ConfigEntry<float> faradayDamage { get; set; }

		public static ConfigEntry<float> faradayDamageStack { get; set; }

		public static ConfigEntry<float> faradayRadius { get; set; }

		public static ConfigEntry<float> faradayRadiusStack { get; set; }

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

		public static ConfigEntry<float> transmitterCooldown { get; set; }

		public static ConfigEntry<float> transmitterBarrier { get; set; }

		public static ConfigEntry<float> transmitterPulseBarrier { get; set; }

		public static ConfigEntry<float> transmitterPulseRadius { get; set; }

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

		public static ConfigEntry<float> bandolierSpeed { get; set; }

		public static ConfigEntry<float> bandolierChance { get; set; }

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

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

		public static ConfigEntry<float> markDamage { get; set; }

		public static ConfigEntry<float> markDuration { get; set; }

		public static ConfigEntry<float> markDurationStack { get; set; }

		public static ConfigEntry<float> markChance { get; set; }

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

		public static ConfigEntry<float> finDamage { get; set; }

		public static ConfigEntry<float> finChance { get; set; }

		public static ConfigEntry<float> finForce { get; set; }

		public static ConfigEntry<float> finForceScale { get; set; }

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

		public static ConfigEntry<float> stealthDamage { get; set; }

		public static ConfigEntry<float> stealthWindow { get; set; }

		public static ConfigEntry<float> stealthCooldown { get; set; }

		public static ConfigEntry<float> stealthCooldownStack { get; set; }

		public static ConfigEntry<float> stealthThreshold { get; set; }

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

		public static ConfigEntry<float> chronoDuration { get; set; }

		public static ConfigEntry<float> chronoRecharge { get; set; }

		public static ConfigEntry<float> chronoRadius { get; set; }

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

		public static ConfigEntry<float> tomeChance { get; set; }

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

		public static ConfigEntry<float> kineticShield { get; set; }

		public static ConfigEntry<float> kineticArmor { get; set; }

		public static ConfigEntry<float> kineticDamage { get; set; }

		public static ConfigEntry<float> kineticDamageStack { get; set; }

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

		public static ConfigEntry<float> daisyHeal { get; set; }

		public static ConfigEntry<float> daisyHealStack { get; set; }

		public static ConfigEntry<float> daisyInterval { get; set; }

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

		public static ConfigEntry<float> jetBootsDamage { get; set; }

		public static ConfigEntry<float> jetBootsDamageStack { get; set; }

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

		public static ConfigEntry<float> batteryDamage { get; set; }

		public static ConfigEntry<float> batteryDamageStack { get; set; }

		public static ConfigEntry<float> batteryDamageChance { get; set; }

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

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

		public static ConfigEntry<float> duplicatorDropChance { get; set; }

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

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

		public static ConfigEntry<float> vultureEliteDamage { get; set; }

		public static ConfigEntry<float> vultureDropChance { get; set; }

		public static ConfigEntry<float> vultureHealPercent { get; set; }

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

		public static ConfigEntry<float> raincoatCooldownTime { get; set; }

		public static ConfigEntry<float> raincoatCooldownStack { get; set; }

		public static ConfigEntry<float> raincoatBarrier { get; set; }

		public static ConfigEntry<float> raincoatDuration { get; set; }

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

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

		public static ConfigEntry<float> warbondsDamage { get; set; }

		public static ConfigEntry<float> warbondsDamageStack { get; set; }

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

		public static ConfigEntry<float> icbmDamage { get; set; }

		public static ConfigEntry<float> icbmDamageStack { get; set; }

		public static ConfigEntry<float> icbmCooldown { get; set; }

		public static ConfigEntry<float> icbmCooldownStack { get; set; }

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

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

		public static ConfigEntry<float> genesisDamage { get; set; }

		public static ConfigEntry<float> genesisDamageStack { get; set; }

		public static ConfigEntry<float> genesisCharge { get; set; }

		public static ConfigEntry<float> genesisChargeStack { get; set; }

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

		public static ConfigEntry<float> knurlHP { get; set; }

		public static ConfigEntry<float> knurlRegen { get; set; }

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

		public static ConfigEntry<float> lampDamage { get; set; }

		public static ConfigEntry<float> lampDamageStack { get; set; }

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

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

		public static ConfigEntry<float> welliesChance { get; set; }

		public static ConfigEntry<float> welliesDamage { get; set; }

		public static ConfigEntry<float> welliesDuration { get; set; }

		public static ConfigEntry<float> welliesDurationStack { get; set; }

		public static ConfigEntry<float> welliesForce { get; set; }

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

		public static ConfigEntry<float> coolantDamage { get; set; }

		public static ConfigEntry<float> coolantDamageStack { get; set; }

		public static ConfigEntry<float> coolantRadius { get; set; }

		public static ConfigEntry<float> coolantRadiusStack { get; set; }

		public static ConfigEntry<float> coolantDuration { get; set; }

		public static ConfigEntry<float> coolantDurationStack { get; set; }

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

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

		public static ConfigEntry<float> lotusDuration { get; set; }

		public static ConfigEntry<float> lotusDurationStack { get; set; }

		public static ConfigEntry<float> lotusSlow { get; set; }

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

		public static ConfigEntry<float> singularityDamage { get; set; }

		public static ConfigEntry<float> singularityDamageStack { get; set; }

		public static ConfigEntry<float> singularityRadius { get; set; }

		public static ConfigEntry<float> singularityRadiusStack { get; set; }

		public static ConfigEntry<float> singularityThreshold { get; set; }

		public static ConfigEntry<float> singularityProc { get; set; }

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

		public static ConfigEntry<float> toxicoStack { get; set; }

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

		public static ConfigEntry<float> coreDuration { get; set; }

		public static ConfigEntry<float> coreDurationStack { get; set; }

		public static ConfigEntry<float> coreSlowChance { get; set; }

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

		public static ConfigEntry<float> burdenDamage { get; set; }

		public static ConfigEntry<float> burdenDamageStack { get; set; }

		public static ConfigEntry<float> burdenRadius { get; set; }

		public static ConfigEntry<float> burdenRadiusStack { get; set; }

		public static ConfigEntry<float> burdenDuration { get; set; }

		public static ConfigEntry<float> burdenThreshold { get; set; }

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

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

		public static ConfigEntry<float> opticsDuration { get; set; }

		public static ConfigEntry<float> opticsDurationStack { get; set; }

		public static ConfigEntry<float> opticsChance { get; set; }

		public static ConfigEntry<float> opticsDamage { get; set; }

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

		public static ConfigEntry<float> solitudeCost { get; set; }

		public static ConfigEntry<float> solitudeExp { get; set; }

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

		public static ConfigEntry<float> crucifixBurnPercent { get; set; }

		public static ConfigEntry<float> crucifixBurnStack { get; set; }

		public static ConfigEntry<float> crucifixResist { get; set; }

		public static ConfigEntry<float> crucifixHealReduction { get; set; }

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

		public static ConfigEntry<float> seepingChance { get; set; }

		public static ConfigEntry<float> seepingChanceStack { get; set; }

		public void SetupConfig(ConfigFile cfg)
		{
			stunGrenadeEnable = cfg.Bind<bool>("Stun Grenade Buff", "Enable Changes", true, "Enables the changes to stun grenade.");
			stunGrenadeDamage = cfg.Bind<float>("Stun Grenade Buff", "Damage", 2f, "The damage coefficient of the proc. (1 = 100% damage)");
			apRoundsEnable = cfg.Bind<bool>("AP Rounds Buff", "Enable Changes", true, "Enables the changes to armor piercing rounds.");
			apRoundsEliteDamage = cfg.Bind<float>("AP Rounds Buff", "Elite Damage Bonus", 0.05f, "Damage bonus granted against elites for each stack of the item. (1 = 100% bonus damage)");
			lanternEnable = cfg.Bind<bool>("Bolstering Lantern Rework", "Enable Changes", true, "Enables the changes to bolstering lantern.");
			lanternSpeed = cfg.Bind<float>("Bolstering Lantern Rework", "Attack Speed", 0.07f, "Base attack speed bonus granted per buff stack. (1 = 100% attack speed)");
			lanternSpeedStack = cfg.Bind<float>("Bolstering Lantern Rework", "Attack Speed Stacking", 0f, "Attack speed bonus granted for each additional stack of the item, per buff stack.");
			lanternRegen = cfg.Bind<float>("Bolstering Lantern Rework", "Health Regen", 0.7f, "Base health regen bonus granted per buff stack. (1 = 1 hp/s)");
			lanternRegenStack = cfg.Bind<float>("Bolstering Lantern Rework", "Health Regen Stacking", 0f, "Health regen bonus granted for each additional stack of the item, per buff stack.");
			lanternAlly = cfg.Bind<int>("Bolstering Lantern Rework", "Max Buffs", 4, "Maximum number of buffs you can have with one stack of the item.");
			lanternAllyStack = cfg.Bind<int>("Bolstering Lantern Rework", "Max Buff Stacking", 2, "Maximum number of buffs you can have with each additional stack of the item.");
			lanternRadius = cfg.Bind<float>("Bolstering Lantern Rework", "Radius", 40f, "Base area of effect size of the item. (1 = 0.5m)");
			lanternRadiusStack = cfg.Bind<float>("Bolstering Lantern Rework", "Radius Stacking", 4f, "Bonus area of effect size for each additional stack of the item.");
			warpedEchoEnable = cfg.Bind<bool>("Warped Echo Rework", "Enable Changes", true, "Enables the changes to stun grenade. Requires FlatItemBuff.");
			warpedEchoDuration = cfg.Bind<float>("Warped Echo Rework", "Delayed Damage Duration", 2.5f, "Base duration of the delayed damage (in seconds) before it hits.");
			warpedEchoDurationStack = cfg.Bind<float>("Warped Echo Rework", "Duration Stacking", 0.25f, "Bonus duration of the delayed damage (in seconds) for each additional stack of the item.");
			warpedEchoStats = cfg.Bind<float>("Warped Echo Rework", "Stat Bonuses", 0.15f, "Base increase to attack, movement, and cooldown speed per delayed hit. (1 = 100% increase)");
			warpedEchoCap = cfg.Bind<int>("Warped Echo Rework", "Max Buffs", 1, "Maximum amount of hits that can be delayed for each stack of the item.");
			bungusEnable = cfg.Bind<bool>("Bungus Buff", "Enable Changes", true, "Enables the changes to bustling fungus.");
			bungusTimer = cfg.Bind<float>("Bungus Buff", "Timer", 0.25f, "Amount of time (in seconds) while standing still that it takes for bustling fungus to activate.");
			meatEnable = cfg.Bind<bool>("Bison Steak Buff", "Enable Changes", true, "Enables the changes to bison steak.");
			meatHealth = cfg.Bind<float>("Bison Steak Buff", "Health Increase", 30f, "Amount of HP gained for each stack of the item.");
			meatRegen = cfg.Bind<float>("Bison Steak Buff", "Health Regen", 1.5f, "Amount of health regeneration gained per buff stack. (1 = 1 hp/s)");
			meatDuration = cfg.Bind<float>("Bison Steak Buff", "Regen Duration", 3f, "Base duration (in seconds) of the regeneration buff on kill.");
			meatDurationStack = cfg.Bind<float>("Bison Steak Buff", "Regen Duration Stacking", 1f, "Duration of the regeneration buff on kill for each additional stack of the item.");
			meatMax = cfg.Bind<int>("Bison Steak Buff", "Max Buffs", 2, "Maximum number of buffs you can have with one stack of the item.");
			meatMaxStack = cfg.Bind<int>("Bison Steak Buff", "Max Buff Stacking", 1, "Maximum number of buffs you can have with each additional stack of the item.");
			chronicEnable = cfg.Bind<bool>("Chronic Expansion Rebalance", "Enable Changes", true, "Enables the changes to chronic expansion.");
			multikillDamage = cfg.Bind<float>("Chronic Expansion Rebalance", "Damage", 0.03f, "Base damage bonus granted per buff stack. (1 = 100% bonus damage)");
			multikillDamageStack = cfg.Bind<float>("Chronic Expansion Rebalance", "Damage Stacking", 0.005f, "Damage bonus granted for each additional stack of the item, per buff stack.");
			multikillDuration = cfg.Bind<float>("Chronic Expansion Rebalance", "Buff Duration", 9f, "Duration of the buff (in seconds).");
			milkEnable = cfg.Bind<bool>("Milk Carton Buff", "Enable Changes", true, "Enables the changes to milk carton. Requires TooManyItems.");
			milkHealth = cfg.Bind<float>("Milk Carton Buff", "Health Increase", 20f, "Amount of HP gained for each stack of the item.");
			milkRetaliate = cfg.Bind<float>("Milk Carton Buff", "Elite Retaliation", 2f, "Amount of damage retaliated from elites for each stack of the item. (1 = 100%)");
			loafEnable = cfg.Bind<bool>("Loaf of Bread Buff", "Enable Changes", true, "Enables the changes to loaf of bread. Requires TooManyItems.");
			loafRegenChance = cfg.Bind<float>("Loaf of Bread Buff", "Regen Chance", 20f, "Percent chance to regain a loaf of bread after it scraps itself. (100 = 100% chance)");
			coffeeEnable = cfg.Bind<bool>("Coffee Bag Rework", "Enable Changes", true, "Enables the changes to coffee bag. Requires Starstorm2.");
			coffeeBuffDuration = cfg.Bind<float>("Coffee Bag Rework", "Duration", 5f, "Base duration (in seconds) of the coffee buff.");
			coffeeMoveSpeed = cfg.Bind<float>("Coffee Bag Rework", "Move Speed", 0.07f, "Move speed bonus granted for each stack of the item, per buff stack. (1 = 100% move speed)");
			coffeeAttackSpeed = cfg.Bind<float>("Coffee Bag Rework", "Attack Speed", 0.075f, "Attack speed bonus granted for each stack of the item, per buff stack. (1 = 100% attack speed)");
			horseshoeEnable = cfg.Bind<bool>("Uranium Horseshoe Buff", "Enable Changes", true, "Enables the changes to uranium horseshoe. Requires Starstorm2 and Meltdown.");
			uraniumHorseshoeDamage = cfg.Bind<float>("Uranium Horseshoe Buff", "Radiation Damage", 0.05f, "Radiation damage bonus granted for each stack of the item. (1 = 100% bonus damage)");
			boneVisorEnable = cfg.Bind<bool>("Bone Visor Rework", "Enable Changes", true, "Enables the changes to bone visor. Requires BubbetsItems.");
			boneDuration = cfg.Bind<float>("Bone Visor Rework", "Duration", 5f, "Base duration (in seconds) of the barrier regeneration buff.");
			boneDurationStack = cfg.Bind<float>("Bone Visor Rework", "Duration Stacking", 1f, "Duration of the barrier regeneration buff for each additional stack of the item.");
			boneProcChance = cfg.Bind<float>("Bone Visor Rework", "Proc Chance", 6f, "Base percent chance to drop a bone shard on hit. (100 = 100% chance)");
			boneProcStack = cfg.Bind<float>("Bone Visor Rework", "Proc Chance Stacking", 1.5f, "Percent chance to drop a bone shard for each additional stack of the item.");
			chanceDollEnable = cfg.Bind<bool>("Chance Doll Rework", "Enable Changes", true, "Enables the changes to chance doll.");
			chanceDollScrap = cfg.Bind<float>("Chance Doll Rework", "Scrap Chance", 10f, "Percent chance to gain white scrap when a chance shrine fails, for each stack of the item. (100 = 100% chance)");
			chanceDollUpgrade = cfg.Bind<float>("Chance Doll Rework", "Upgrade Chance", 50f, "Percent chance to upgrade a chance shrine reward.");
			ignitionEnable = cfg.Bind<bool>("Ignition Tank Rework", "Enable Changes", true, "Enables the changes to ignition tank.");
			ignitionBurnBonus = cfg.Bind<int>("Ignition Tank Rework", "Ignite Multiplier", 2, "Ignite damage multiplier for each stack of the item. (1 = 100% more damage)");
			ignitionCooldownTime = cfg.Bind<float>("Ignition Tank Rework", "Cooldown", 5f, "Cooldown time (in seconds) for the ignite on hit effect.");
			ignitionCooldownStack = cfg.Bind<float>("Ignition Tank Rework", "Cooldown Stacking", 0.15f, "Cooldown reduction for each additional stack of the item. (1 = 100% reduction)");
			ignitionBurnDamage = cfg.Bind<float>("Ignition Tank Rework", "Ignite Damage", 0.5f, "Total damage of the ignite on hit effect. (1 = 100% damage)");
			scytheEnable = cfg.Bind<bool>("Harvesters Scythe Rework", "Enable Changes", true, "Enables the changes to harvesters scythe.");
			scytheHeal = cfg.Bind<float>("Harvesters Scythe Rework", "Heal Amount", 20f, "Base healing recieved from the item.");
			scytheHealStack = cfg.Bind<float>("Harvesters Scythe Rework", "Heal Amount Stacking", 20f, "Healing recieved from each additional stack of the item.");
			scytheCooldownTime = cfg.Bind<float>("Harvesters Scythe Rework", "Cooldown", 2f, "Cooldown time (in seconds) between uses of the item.");
			infusionEnable = cfg.Bind<bool>("Infusion Buff", "Enable Changes", true, "Enables the changes to infusion.");
			infusionSpeed = cfg.Bind<float>("Infusion Buff", "Speed Boost", 0.1f, "Maximum speed boost to recieve from each stack of the item. (1 = 100% bonus speed)");
			faradayEnable = cfg.Bind<bool>("Faraday Spur Rebalance", "Enable Changes", true, "Enables the changes to faraday spur.");
			faradaySpeedJumpCap = cfg.Bind<float>("Faraday Spur Rebalance", "Speed & Jump Height Cap", 1f, "Speed/jump bonus granted by this item at max charge. (1 = 100% bonus speed)");
			faradayCharge = cfg.Bind<float>("Faraday Spur Rebalance", "Charge Rate", 1.25f, "Base charge rate multiplier for faraday spur. Flat buff to the vanilla charge rate. (1 = no changes)");
			faradayChargeStack = cfg.Bind<float>("Faraday Spur Rebalance", "Charge Rate Stacking", 0.5f, "Bonus charge speed granted for each additional stack of the item. (1 = 100% faster charge rate)");
			faradayDamage = cfg.Bind<float>("Faraday Spur Rebalance", "Max Damage", 8f, "Damage coeffecient of the blast at max charge. (1 = 100% base damage)");
			faradayDamageStack = cfg.Bind<float>("Faraday Spur Rebalance", "Max Damage Stacking", 4f, "Max damage coeffecient of the blast for each additional stack of the item.");
			faradayRadius = cfg.Bind<float>("Faraday Spur Rebalance", "Max Radius Base", 40f, "Radius of the blast at max charge. (1 = 1m radius)");
			faradayRadiusStack = cfg.Bind<float>("Faraday Spur Rebalance", "Max Radius Stacking", 0f, "Max radius of the blast for each additional stack of the item.");
			transmitterEnable = cfg.Bind<bool>("Unstable Transmitter Rework", "Enable Changes", true, "Enables the changes to unstable transmitter.");
			transmitterBarrier = cfg.Bind<float>("Unstable Transmitter Rework", "Barrier Amount", 0.3f, "Barrier amount to recieve on activation, proportional to max HP. (1 = 100% barrier)");
			transmitterPulseBarrier = cfg.Bind<float>("Unstable Transmitter Rework", "Barrier Per Hit", 0.05f, "Additional barrier to recieve for each enemy within the radius, proportional to max HP.");
			transmitterPulseRadius = cfg.Bind<float>("Unstable Transmitter Rework", "Pulse Radius", 30f, "Radius of the unstable transmitter pulse. (1 = 1m radius)");
			transmitterCooldown = cfg.Bind<float>("Unstable Transmitter Rework", "Cooldown", 200f, "Cooldown time (in seconds) before this item regenerates.");
			bandolierEnable = cfg.Bind<bool>("Bandolier Rework", "Enable Changes", true, "Enables the changes to bandolier.");
			bandolierSpeed = cfg.Bind<float>("Bandolier Rework", "Attack Speed", 0.2f, "Attack speed bonus per stack of spare ammunition. (1 = 100% attack speed)");
			bandolierChance = cfg.Bind<float>("Bandolier Rework", "Drop Chance", 25f, "Chance for ammo packs to drop on kill. (100 = 100% chance)");
			bandolierStocks = cfg.Bind<int>("Bandolier Rework", "Recharge Stocks", 1, "The amount of spare ammunition to get per ammo pack, for each stack of the item.");
			markEnable = cfg.Bind<bool>("Death Mark Rework", "Enable Changes", true, "Enables the changes to death mark.");
			markDamage = cfg.Bind<float>("Death Mark Rework", "Damage Bonus", 0.15f, "Amount of bonus damage to deal to enemies that are marked for death, for each debuff applied to them. (1 = 100% bonus damage)");
			markDuration = cfg.Bind<float>("Death Mark Rework", "Duration", 4f, "Base duration (in seconds) of the death mark debuff.");
			markDurationStack = cfg.Bind<float>("Death Mark Rework", "Duration Stacking", 2f, "Bonus duration (in seconds) of the death mark debuff, for each additional stack of the item.");
			markChance = cfg.Bind<float>("Death Mark Rework", "Proc Chance", 10f, "Chance on hit to mark enemies for death. (100 = 100% chance)");
			finEnable = cfg.Bind<bool>("Breaching Fin Rework", "Enable Changes", true, "Enables the changes to breaching fin.");
			finDamage = cfg.Bind<float>("Breaching Fin Rework", "Damage Bonus", 0.75f, "Damage bonus for each stack of the item. (1 = 100% damage)");
			finChance = cfg.Bind<float>("Breaching Fin Rework", "Proc Chance", 25f, "Chance on hit for the item to activate, unaffected by proc coefficient. (100 = 100% chance)");
			finForce = cfg.Bind<float>("Breaching Fin Rework", "Base Knockback Force", 1250f, "Base knockback force applied by the item.");
			finForceScale = cfg.Bind<float>("Breaching Fin Rework", "Scaling Knockback Force", 250f, "Additional knockback force applied by the item, multiplied by the damage coefficient of the hit.");
			stealthEnable = cfg.Bind<bool>("Old War Stealthkit Buff", "Enable Changes", true, "Enables the changes to old war stealthkit.");
			stealthDamage = cfg.Bind<float>("Old War Stealthkit Buff", "Damage Bonus", 0.25f, "Damage bonus gained while invisible for each stack of the item. (1 = 100% damage)");
			stealthWindow = cfg.Bind<float>("Old War Stealthkit Buff", "Damage Window", 2f, "Amount of time (in seconds) that the damage bonus lasts for after losing invisibility.");
			stealthThreshold = cfg.Bind<float>("Old War Stealthkit Buff", "Health Threshold", 0.5f, "Amount of health that must be lost before the item activates. (1 = 100% health)");
			stealthCooldown = cfg.Bind<float>("Old War Stealthkit Buff", "Cooldown", 20f, "Base cooldown time (in seconds) between activations of the item.");
			stealthCooldownStack = cfg.Bind<float>("Old War Stealthkit Buff", "Cooldown Stacking", 0.25f, "Cooldown time reduction for each additional stack of the item. (1 = 100% time reduction)");
			chronoEnable = cfg.Bind<bool>("Chronobauble Buff", "Enable Changes", true, "Enables the changes to chronobauble.");
			chronoDuration = cfg.Bind<float>("Chronobauble Buff", "Slow Duration", 4f, "Slow debuff duration (in seconds) of the item.");
			chronoRecharge = cfg.Bind<float>("Chronobauble Buff", "Recharge Amount", 0.06f, "Skill recharge rate increase per slowed enemy, for each stack of the item. (1 = 100% Recharge Speed)");
			chronoRadius = cfg.Bind<float>("Chronobauble Buff", "Radius", 30f, "Radius of the recharge effect (in meters).");
			tomeEnable = cfg.Bind<bool>("Ghors Tome Buff", "Enable Changes", true, "Enables the changes to ghor's tome.");
			tomeChance = cfg.Bind<float>("Ghors Tome Buff", "Slow Duration", 6f, "Gold drop chance on kill or interactable activation for each stack of the item. (100 = 100% chance)");
			daisyEnable = cfg.Bind<bool>("Lepton Daisy Rework", "Enable Changes", true, "Enables the changes to lepton daisy.");
			daisyHeal = cfg.Bind<float>("Lepton Daisy Rework", "Heal Fraction", 0.07f, "Base percentage of missing health to heal per second. (1 = 100% missing health)");
			daisyHealStack = cfg.Bind<float>("Lepton Daisy Rework", "Heal Fraction Stacking", 0.03f, "Bonus percentage of missing health to heal for each additional stack of the item.");
			jetBootsEnable = cfg.Bind<bool>("Prototype Jet Boots Rebalance", "Enable Changes", true, "Enables the changes to prototype jet boots. Requires Starstorm2.");
			jetBootsDamage = cfg.Bind<float>("Prototype Jet Boots Rebalance", "Damage", 4.5f, "Base damage coefficient of the item. (1 = 100% damage)");
			jetBootsDamageStack = cfg.Bind<float>("Prototype Jet Boots Rebalance", "Damage Stacking", 1.5f, "Bonus damage coefficient for each additional stack of the item.");
			batteryEnable = cfg.Bind<bool>("Volatile Thorium Battery Rebalance", "Enable Changes", true, "Enables the changes to volatile thorium battery. Requires Meltdown.");
			batteryDamage = cfg.Bind<float>("Volatile Thorium Battery Rebalance", "Damage", 2f, "Base damage coefficient of the radiation wave. (1 = 100% damage)");
			batteryDamageStack = cfg.Bind<float>("Volatile Thorium Battery Rebalance", "Damage Stacking", 0.8f, "Bonus damage coefficient granted for each additional stack of the item.");
			batteryDamageChance = cfg.Bind<float>("Volatile Thorium Battery Rebalance", "Radiation Wave Proc Chance", 20f, "Percent chance per radiation damage tick for the item to proc. (100 = 100% chance)");
			duplicatorEnable = cfg.Bind<bool>("Substandard Duplicator Rework", "Enable Changes", true, "Enables the changes to substandard duplicator.");
			duplicatorCompat = cfg.Bind<bool>("Substandard Duplicator Rework", "TempItemsTooShort Compat", false, "Enable this if TempItemsTooShort is installed or else the game will blow itself up.");
			duplicatorDropChance = cfg.Bind<float>("Substandard Duplicator Rework", "Proc Chance", 8f, "Percent chance to drop a temporary item on kill. (100 = 100% chance)");
			duplicatorDuration = cfg.Bind<int>("Substandard Duplicator Rework", "Duration", 30, "Duration increase (in seconds) for temporary items per stack of the item.");
			vultureEnable = cfg.Bind<bool>("Wake Of Vultures Rework", "Enable Changes", true, "Enables the changes to wake of vultures.");
			vultureEliteDamage = cfg.Bind<float>("Wake Of Vultures Rework", "Elite Damage Bonus", 0.5f, "Damage bonus granted against elites above half health for each stack of the item. (1 = 100% bonus damage)");
			vultureDropChance = cfg.Bind<float>("Wake Of Vultures Rework", "Elite Aspect Drop Chance", 5f, "Flat percent chance for an elite aspect to drop on kill for each stack of the item. (100 = 100% chance)");
			vultureHealPercent = cfg.Bind<float>("Wake Of Vultures Rework", "Heal Percent", 0.2f, "Max HP fraction to heal upon killing an elite. (1 = 100% heal)");
			raincoatEnable = cfg.Bind<bool>("Bens Raincoat Rework", "Enable Changes", true, "Enables the changes to bens raincoat.");
			raincoatCooldownTime = cfg.Bind<float>("Bens Raincoat Rework", "Cooldown", 15f, "Cooldown time (in seconds) between uses of the item.");
			raincoatCooldownStack = cfg.Bind<float>("Bens Raincoat Rework", "Cooldown Stacking", 0.2f, "Cooldown reduction for each additional stack of the item. (1 = 100% reduction)");
			raincoatBarrier = cfg.Bind<float>("Bens Raincoat Rework", "Barrier Amount", 0.25f, "Barrier amount to recieve on activation, proportional to max HP. (1 = 100% barrier)");
			raincoatDuration = cfg.Bind<float>("Bens Raincoat Rework", "Invulnerability Time", 3f, "Duration of the invulnerability (in seconds) to recieve on activation.");
			warbondsEnable = cfg.Bind<bool>("War Bonds Rework", "Enable Changes", true, "Enables the changes to war bonds.");
			warbondsGoldCost = cfg.Bind<int>("War Bonds Rework", "Gold Rewuirement", 15, "Required amount of gold to spend per barrage stack (scales over time).");
			warbondsDamage = cfg.Bind<float>("War Bonds Rework", "Barrage Damage", 15f, "Base damage coefficient of the barrage. (1 = 100% damage)");
			warbondsDamageStack = cfg.Bind<float>("War Bonds Rework", "Barrage Damage Stacking", 3f, "Bonus damage coefficient of the barrage for each additional stack of the item.");
			icbmEnable = cfg.Bind<bool>("Pocket ICBM Rework", "Enable Changes", true, "Enables the changes to pocket icbm.");
			icbmDamage = cfg.Bind<float>("Pocket ICBM Rework", "Auto-Missile Damage", 5f, "Base damage coefficient of the auto-missiles. (1 = 100% damage)");
			icbmDamageStack = cfg.Bind<float>("Pocket ICBM Rework", "Auto-Missile Damage Stacking", 0.5f, "Bonus damage coefficient of the auto-missiles for each additional stack of the item.");
			icbmCooldown = cfg.Bind<float>("Pocket ICBM Rework", "Auto-Missile Interval", 10f, "Base time (in seconds) between auto-missiles.");
			icbmCooldownStack = cfg.Bind<float>("Pocket ICBM Rework", "Auto-Missile Interval Stacking", 0.25f, "Time reduction for each additional stack of the item.");
			knurlEnable = cfg.Bind<bool>("Titanic Knurl Rework", "Enable Changes", true, "Enables the changes to titanic knurl.");
			knurlHP = cfg.Bind<float>("Titanic Knurl Rework", "Level Health", 10f, "HP gained per level for each stack of the item.");
			knurlRegen = cfg.Bind<float>("Titanic Knurl Rework", "Level Regen", 0.5f, "Health regeneration gained per level for each stack of the item. (1 = 1 hp/s per level)");
			genesisEnable = cfg.Bind<bool>("Genesis Loop Rework", "Enable Changes", true, "Enables the changes to genesis loop.");
			genesisEnemyEnable = cfg.Bind<bool>("Genesis Loop Rework", "Enable Changes On Enemies", false, "Enables the changes to genesis loop on all enemies with the item. Off by default for compatibility with SimulacrumAdditions.");
			genesisCharge = cfg.Bind<float>("Genesis Loop Rework", "Charge Rate", 1f, "Amount of charge to gain per 1% health lost when damaged. (100 = 100% charge)");
			genesisChargeStack = cfg.Bind<float>("Genesis Loop Rework", "Charge Rate Stacking", 0.5f, "Bonus charge to gain per 1% health lost for each additional stack of the item.");
			lampEnable = cfg.Bind<bool>("Shackled Lamp Buff", "Enable Changes", true, "Enables the changes to shackled lamp. Requires Starstorm2.");
			lampDamage = cfg.Bind<float>("Shackled Lamp Buff", "Damage", 3.5f, "Base damage coeffecient of the item. (1 = 100% damage)");
			lampDamageStack = cfg.Bind<float>("Shackled Lamp Buff", "Damage Stacking", 1.5f, "Bonus damage coeffecient for each additional stack of the item.");
			pyreEnable = cfg.Bind<bool>("Umbral Pyre Corruption", "Change Corruption", true, "Changes this item's corruption to bolstering lantern. For further configuration, use the config file from the original mod. Requires RigsArsenal.");
			welliesEnable = cfg.Bind<bool>("Waterlogged Wellies Rework", "Enable Changes", true, "Enables the changes to waterlogged wellies. Requires Nautilus.");
			welliesDamage = cfg.Bind<float>("Waterlogged Wellies Rework", "Grounded Crit Damage", 0.15f, "Crit damage bonus to gain for each stack of the item while grounded. (1 = 100% bonus damage)");
			welliesChance = cfg.Bind<float>("Waterlogged Wellies Rework", "Airborne Crit Chance", 15f, "Crit chance to gain for each stack of the item while airborne. (100 = 100% chance)");
			welliesDuration = cfg.Bind<float>("Waterlogged Wellies Rework", "Weak Duration", 2f, "Base duration of the weak debuff (in seconds) applied to airborne enemies whenever you land a critical hit.");
			welliesDurationStack = cfg.Bind<float>("Waterlogged Wellies Rework", "Weak Duration Stacking", 0.5f, "Bonus duration of the weak debuff (in seconds) for each additional stack of the item.");
			welliesForce = cfg.Bind<float>("Waterlogged Wellies Rework", "Downward Pull Force", 175f, "Amount of pull force to apply to airborne enemies whenever you land a critical hit.");
			coolantEnable = cfg.Bind<bool>("Supercritical Coolant Rebalance", "Enable Changes", true, "Enables the changes to supercritical coolant. Requires VanillaVoid.");
			coolantDamage = cfg.Bind<float>("Supercritical Coolant Rebalance", "Damage", 2f, "Base damage of the item. (1 = 100% damage)");
			coolantDamageStack = cfg.Bind<float>("Supercritical Coolant Rebalance", "Damage Stacking", 0.5f, "Bonus damage for each additional stack of the item.");
			coolantRadius = cfg.Bind<float>("Supercritical Coolant Rebalance", "Radius", 15f, "Base area of effect size of the item. (1 = 1m).");
			coolantRadiusStack = cfg.Bind<float>("Supercritical Coolant Rebalance", "Radius Stacking", 5f, "Bonus area of effect size for each additional stack of the item.");
			coolantDuration = cfg.Bind<float>("Supercritical Coolant Rebalance", "Frost Duration", 4f, "Base duration of the Frost debuff (in seconds) applied by the item.");
			coolantDurationStack = cfg.Bind<float>("Supercritical Coolant Rebalance", "Frost Duration Stacking", 1f, "Bonus duration of the Frost debuff (in seconds) for each additional stack of the item.");
			coolantFrostCount = cfg.Bind<int>("Supercritical Coolant Rebalance", "Frost Count", 2, "Amount of Frost debuff stacks that the item applies on hit (enemies freeze after 6 stacks).");
			lotusEnable = cfg.Bind<bool>("Crystalline Lotus Rework", "Enable Changes", true, "Enables the changes to crystalline lotus. Requires VanillaVoid.");
			lotusDuration = cfg.Bind<float>("Crystalline Lotus Rework", "Duration", 45f, "Base duration (in seconds) of the slowing field.");
			lotusDurationStack = cfg.Bind<float>("Crystalline Lotus Rework", "Duration Stacking", 15f, "Bonus duration (in seconds) of the slowing field for each additional stack of the item.");
			singularityEnable = cfg.Bind<bool>("Singularity Band Rebalance", "Enable Changes", true, "Enables the changes to singularity band.");
			singularityDamage = cfg.Bind<float>("Singularity Band Rebalance", "Damage Coefficient", 3f, "Base damage coefficient of the black hole. (1 = 100% TOTAL damage)");
			singularityDamageStack = cfg.Bind<float>("Singularity Band Rebalance", "Damage Coefficient Stacking", 1.5f, "Bonus damage coefficient of the black hole for each additional stack of the item.");
			singularityRadius = cfg.Bind<float>("Singularity Band Rebalance", "Radius", 15f, "Base area of effect size of the black hole. (1 = 1m).");
			singularityRadiusStack = cfg.Bind<float>("Singularity Band Rebalance", "Radius Stacking", 1.5f, "Bonus area of effect size for each additional stack of the item.");
			singularityThreshold = cfg.Bind<float>("Singularity Band Rebalance", "Damage Threshold", 6f, "Damage coefficient required to proc the item. (1 = 100% damage)");
			singularityProc = cfg.Bind<float>("Singularity Band Rebalance", "Proc Coefficient", 2f, "Proc coefficient of the black hole.");
			toxicoEnable = cfg.Bind<bool>("Toxicodendron Brine Buff", "Enable Changes", true, "Enables the changes to toxicodendronbrine. Requires SeekingTheVoid.");
			toxicoStack = cfg.Bind<float>("Toxicodendron Brine Buff", "Cooldown Stacking", 0.1f, "Bonus ability cooldown reduction for each additional stack of the item. (1 = 100% recharge)");
			coreEnable = cfg.Bind<bool>("Corrosive Core Buff", "Enable Changes", true, "Enables the changes to corrosive core. Requires VanillaVoid.");
			coreDuration = cfg.Bind<float>("Corrosive Core Buff", "Tar Duration", 2f, "Base duration of the tar debuff (in seconds) from the item.");
			coreDurationStack = cfg.Bind<float>("Corrosive Core Buff", "Tar Duration Stacking", 0.5f, "Bonus duration of the tar debuff (in seconds) for each additional stack of the item.");
			coreSlowChance = cfg.Bind<float>("Corrosive Core Buff", "Tar Chance", 6f, "Percent chance to apply Tar on hit. (100 = 100% chance)");
			burdenEnable = cfg.Bind<bool>("Executioners Burden Rework", "Enable Changes", true, "Enables the changes to exectioners burden. Requires VanillaVoid.");
			burdenDamage = cfg.Bind<float>("Executioners Burden Rework", "Damage", 5f, "Base damage coefficient of the item. (1 = 100% damage)");
			burdenDamageStack = cfg.Bind<float>("Executioners Burden Rework", "Damage Stacking", 3.5f, "Bonus damage coefficient for each additional stack of the item.");
			burdenRadius = cfg.Bind<float>("Executioners Burden Rework", "Radius", 30f, "Base area of effect size of the item. (1 = 1m)");
			burdenRadiusStack = cfg.Bind<float>("Executioners Burden Rework", "Radius Stacking", 5f, "Bonus area of effect size for each additional stack of the item.");
			burdenDuration = cfg.Bind<float>("Executioners Burden Rework", "Dread Duration", 8f, "Duration of the dread debuff (in seconds) applied by this item.");
			burdenThreshold = cfg.Bind<float>("Executioners Burden Rework", "Dread Execute Threshold", 0.25f, "Percentage of max hp for enemies to be executed at while afflicted by dread. (1 = 100%)");
			opticsEnable = cfg.Bind<bool>("Obervers Optics Rework", "Enable Changes", true, "Enables the changes to observers optics. Requires Nautilus.");
			opticsDuration = cfg.Bind<float>("Obervers Optics Rework", "Voidtouched Duration", 30f, "Base duration of the voidtouched buff (in seconds) upon activating an equipment.");
			opticsDurationStack = cfg.Bind<float>("Obervers Optics Rework", "Voidtouched Duration Stacking", 30f, "Bonus duration of the voidtouched buff (in seconds) for each additional stack of the item.");
			opticsChance = cfg.Bind<float>("Obervers Optics Rework", "Collapse Chance", 5f, "Percent chance to collapse on hit per buff stack. (100 = 100% chance)");
			opticsDamage = cfg.Bind<float>("Obervers Optics Rework", "Collapse Damage", 0.25f, "Bonus collapse damage granted per puff stack. (1 = 100% bonus damage)");
			solitudeEnable = cfg.Bind<bool>("Longstanding Solitude Rebalance", "Enable Changes", true, "Enables the changes to longstanding solitude.");
			solitudeCost = cfg.Bind<float>("Longstanding Solitude Rebalance", "Cost Increase", 0.25f, "Percent increase in interactable prices for each stack of the item. (1 = 100%)");
			solitudeExp = cfg.Bind<float>("Longstanding Solitude Rebalance", "Exp Decrease", 0.25f, "Percent decrease in exp gains for each stack of the item. (1 = 100%)");
			crucifixEnable = cfg.Bind<bool>("Crucifix Rework", "Enable Changes", true, "Enables the changes to crucifix. Requires TooManyItems.");
			crucifixHealReduction = cfg.Bind<float>("Crucifix Rework", "Healing Reduction", 0.5f, "Healing reduction while on fire for each stack of the item. (1 = 100% reduction)");
			crucifixResist = cfg.Bind<float>("Crucifix Rework", "Damage Resistance", 0.95f, "Damage resistance granted by the item. (1 = 100% resistance)");
			crucifixBurnPercent = cfg.Bind<float>("Crucifix Rework", "Burn Damage", 0.2f, "Percentage of max hp to take as burn damage. (1 = 100% hp)");
			crucifixBurnStack = cfg.Bind<float>("Crucifix Rework", "Burn Damage Stacking", 0.1f, "Burn damage reduction per additional stack of the item. (1 = 100% reduction)");
			seepingEnable = cfg.Bind<bool>("Seeping Ocean Rework", "Enable Changes", true, "Enables the changes to seeping ocean. Requires BubbetsItems.");
			seepingChance = cfg.Bind<float>("Seeping Ocean Rework", "Conversion Chance", 0.04f, "Base percent chance to convert items into random void items. (1 = 100% chance)");
			seepingChanceStack = cfg.Bind<float>("Seeping Ocean Rework", "Conversion Chance Stacking", 0.02f, "Bonus percent chance to convert items for each additional stack of the item. (1 = 100% chance)");
		}

		public void Initialize()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Expected O, but got Unknown
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Expected O, but got Unknown
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Expected O, but got Unknown
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Expected O, but got Unknown
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Expected O, but got Unknown
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Expected O, but got Unknown
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Expected O, but got Unknown
			//IL_0355: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Expected O, but got Unknown
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Expected O, but got Unknown
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0457: Expected O, but got Unknown
			//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Expected O, but got Unknown
			//IL_0473: Unknown result type (might be due to invalid IL or missing references)
			//IL_047d: Expected O, but got Unknown
			//IL_05f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0601: Expected O, but got Unknown
			//IL_0609: Unknown result type (might be due to invalid IL or missing references)
			//IL_0613: Expected O, but got Unknown
			//IL_068b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0695: Expected O, but got Unknown
			//IL_07a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b3: Expected O, but got Unknown
			//IL_07bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c5: Expected O, but got Unknown
			//IL_07cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d7: Expected O, but got Unknown
			//IL_089d: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a7: Expected O, but got Unknown
			//IL_0966: Unknown result type (might be due to invalid IL or missing references)
			//IL_0970: Expected O, but got Unknown
			//IL_0a47: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a51: Expected O, but got Unknown
			//IL_0a59: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a63: Expected O, but got Unknown
			//IL_0a6b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a75: Expected O, but got Unknown
			//IL_0b7a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b84: Expected O, but got Unknown
			//IL_0b8c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b96: Expected O, but got Unknown
			//IL_0b9e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba8: Expected O, but got Unknown
			//IL_0bb0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bba: Expected O, but got Unknown
			//IL_0bc2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bcc: Expected O, but got Unknown
			//IL_0bd4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bde: Expected O, but got Unknown
			//IL_0be6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf0: Expected O, but got Unknown
			//IL_0bf8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c02: Expected O, but got Unknown
			//IL_0cfc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d06: Expected O, but got Unknown
			//IL_0d0e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d18: Expected O, but got Unknown
			//IL_0d20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d2a: Expected O, but got Unknown
			//IL_0dd5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ddf: Expected O, but got Unknown
			//IL_0de7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0df1: Expected O, but got Unknown
			//IL_0df9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e03: Expected O, but got Unknown
			//IL_0e9e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ea8: Expected O, but got Unknown
			//IL_0eb0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eba: Expected O, but got Unknown
			//IL_0f28: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f32: Expected O, but got Unknown
			//IL_0f3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f44: Expected O, but got Unknown
			//IL_0f4c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f56: Expected O, but got Unknown
			//IL_101b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1025: Expected O, but got Unknown
			//IL_102d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1037: Expected O, but got Unknown
			//IL_10c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_10cd: Expected O, but got Unknown
			//IL_1126: Unknown result type (might be due to invalid IL or missing references)
			//IL_1130: Expected O, but got Unknown
			//IL_1138: Unknown result type (might be due to invalid IL or missing references)
			//IL_1142: Expected O, but got Unknown
			//IL_114a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1154: Expected O, but got Unknown
			//IL_115c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1166: Expected O, but got Unknown
			//IL_11da: Unknown result type (might be due to invalid IL or missing references)
			//IL_11e4: Expected O, but got Unknown
			//IL_11ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_11f6: Expected O, but got Unknown
			//IL_12bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c6: Expected O, but got Unknown
			//IL_1294: Unknown result type (might be due to invalid IL or missing references)
			//IL_129e: Expected O, but got Unknown
			//IL_1352: Unknown result type (might be due to invalid IL or missing references)
			//IL_135c: Expected O, but got Unknown
			//IL_1364: Unknown result type (might be due to invalid IL or missing references)
			//IL_136e: Expected O, but got Unknown
			//IL_1376: Unknown result type (might be due to invalid IL or missing references)
			//IL_1380: Expected O, but got Unknown
			//IL_1388: Unknown result type (might be due to invalid IL or missing references)
			//IL_1392: Expected O, but got Unknown
			//IL_139a: Unknown result type (might be due to invalid IL or missing references)
			//IL_13a4: Expected O, but got Unknown
			//IL_149c: Unknown result type (might be due to invalid IL or missing references)
			//IL_14a6: Expected O, but got Unknown
			//IL_13da: Unknown result type (might be due to invalid IL or missing references)
			//IL_13e4: Expected O, but got Unknown
			//IL_150b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1515: Expected O, but got Unknown
			//IL_151d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1527: Expected O, but got Unknown
			//IL_15b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_15ba: Expected O, but got Unknown
			//IL_1598: Unknown result type (might be due to invalid IL or missing references)
			//IL_159d: Unknown result type (might be due to invalid IL or missing references)
			//IL_15a3: Expected O, but got Unknown
			CreateBuffs();
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(OnRecalcStats);
			HealthComponent.TakeDamage += new hook_TakeDamage(OnTakeDamage);
			if (!HasVanillaVoid || !coreEnable.Value)
			{
				GlobalEventManager.ProcessHitEnemy += new Manipulator(IL_ProcessHit);
			}
			HealthComponent.TakeDamageProcess += new Manipulator(IL_EliteDamage);
			GenericSkill.RunRecharge += new hook_RunRecharge(OnSkillRecharge);
			if (solitudeEnable.Value)
			{
				TeamManager.GetLongstandingSolitudeItemCostScale += new hook_GetLongstandingSolitudeItemCostScale(OnItemCostScale);
				ExperienceManager.AwardExperience += new hook_AwardExperience(OnAwardExperience);
				string text = string.Format("<style=cIsUtility>On level up</style> gain <style=cIsDamage>1</style> <style=cStack>(+1 per stack)</style> <style=cIsDamage>free unlock</style> for the next purchase, but all gold is converted to experience. All gold prices are <style=cIsHealth>increased by {0}%</style> <style=cStack>(+{0}% per stack)</style>, and all experience gained is <style=cIsHealth>reduced by {1}%</style> <style=cStack>(+{1}% per stack)</style>.", solitudeCost.Value * 100f, solitudeExp.Value * 100f);
				LanguageAPI.Add("ITEM_ONLEVELUPFREEUNLOCK_DESC", text);
			}
			if (lanternEnable.Value)
			{
				AttackSpeedPerNearbyCollider.UpdateValues += new hook_UpdateValues(OnLanternUpdate);
				AttackSpeedPerNearbyCollider.Start += new hook_Start(OnLanternStart);
				CharacterBody.RecalculateStats += new Manipulator(IL_Lantern);
				string stackDesc = GetStackDesc(lanternSpeedStack.Value * 100f, "%");
				string stackDesc2 = GetStackDesc(lanternRegenStack.Value, " hp/s");
				string stackDesc3 = GetStackDesc(lanternRadiusStack.Value / 2f, "m");
				string stackDesc4 = GetStackDesc(lanternAllyStack.Value, "");
				if (lanternRegen.Value > 0f)
				{
					string text2 = $"Increases <style=cIsDamage>attack speed</style> by <style=cIsDamage>{lanternSpeed.Value * 100f}%</style>{stackDesc} and <style=cIsHealing>health regeneration</style> by <style=cIsHealing>{lanternRegen.Value} hp/s</style>{stackDesc2} for each enemy and ally within <style=cIsUtility>{lanternRadius.Value / 2f}m</style>{stackDesc3}, up to <style=cIsUtility>{lanternAlly.Value}</style>{stackDesc4} times.";
					LanguageAPI.Add("ITEM_ATTACKSPEEDPERNEARBYALLYORENEMY_DESC", text2);
					string text3 = "Increases your attack speed and health regen for every nearby enemy and ally.";
					LanguageAPI.Add("ITEM_ATTACKSPEEDPERNEARBYALLYORENEMY_DESC", text3);
				}
				else
				{
					string text4 = string.Format("Increases <style=cIsDamage>attack speed</style> by <style=cIsDamage>{0}%</style>{1} for each enemy and ally within <style=cIsUtility>{4}m</style>{5}, up to <style=cIsUtility>{6}</style>{7} times.", lanternSpeed.Value * 100f, stackDesc, lanternRadius.Value / 2f, stackDesc3, lanternAlly.Value, stackDesc4);
					LanguageAPI.Add("ITEM_ATTACKSPEEDPERNEARBYALLYORENEMY_DESC", text4);
				}
			}
			if (stunGrenadeEnable.Value)
			{
				SetStateOnHurt.OnTakeDamageServer += new Manipulator(IL_StunDamage);
				string text5 = $"<style=cIsUtility>5%</style> <style=cStack>(+5% per stack)</style> chance on hit to deal <style=cIsDamage>{stunGrenadeDamage.Value * 100f}% damage</style> and <style=cIsUtility>stun</style> enemies for <style=cIsUtility>2s</style>.";
				LanguageAPI.Add("ITEM_STUNCHANCEONHIT_DESC", text5);
				string text6 = $"Chance to damage and stun on hit.";
				LanguageAPI.Add("ITEM_STUNCHANCEONHIT_PICKUP", text6);
			}
			if (bungusEnable.Value)
			{
				CharacterBody.GetNotMoving += new Manipulator(IL_NotMoving);
				string text7 = $"After standing still for <style=cIsHealing>{bungusTimer.Value}s</style>, create a zone that <style=cIsHealing>heals</style> for <style=cIsHealing>4.5%</style> <style=cStack>(+2.25% per stack)</style> of your