Decompiled source of ReindogAndFriends v2.3.3

ReindogFan1372.ReindogDLL.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLevelLoader;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using ReindogFan1372.ReindogDLL.NetcodePatcher;
using StaticNetcodeLib;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.InputSystem;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("LethalLevelLoader")]
[assembly: IgnoresAccessChecksTo("LethalLib")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("Xilophor.StaticNetcodeLib")]
[assembly: AssemblyCompany("ReindogFan1372.ReindogDLL")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.1.2.0")]
[assembly: AssemblyInformationalVersion("1.1.2")]
[assembly: AssemblyProduct("ReindogDLL")]
[assembly: AssemblyTitle("ReindogFan1372.ReindogDLL")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.2.0")]
[module: UnverifiableCode]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace ReindogDLL
{
	[BepInPlugin("ReindogFan1372.ReindogDLL", "ReindogDLL", "1.1.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class ReindogDLL : BaseUnityPlugin
	{
		internal static AssetBundle MyCustomAssets;

		internal static Texture2D fosgreathTexture;

		internal static AudioClip fosgreathClip;

		public static Dictionary<string, LevelMatchingProperties> LevelMatchingPropertiesByName = new Dictionary<string, LevelMatchingProperties>();

		public static ReindogDLL Instance { get; private set; } = null;


		internal static ManualLogSource Logger { get; private set; } = null;


		internal static Harmony? Harmony { get; set; }

		internal static MyModConfig ReindogAndFriendsModConfig { get; private set; } = null;


		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			ReindogAndFriendsModConfig = new MyModConfig(((BaseUnityPlugin)this).Config);
			AssetBundleLoader.AddOnExtendedModLoadedListener((Action<ExtendedMod>)OnExtendedModRegistered, "ReindogFan1372", "ReindogAndFriends");
			NetcodePatcher();
			Patch();
			Logger.LogInfo((object)"ReindogAndFriends has loaded!                                                                 \r\n                                                                 \r\n                       =--.                                      \r\n                       **+=-                                     \r\n                           +=:                                   \r\n         .                  -=:                                  \r\n         -+             -=  -=+                                  \r\n        .=*             ===.-+#                                  \r\n        -*    .          :--+#.                                  \r\n        ==                =+#.                                   \r\n        =.=              -+#                                     \r\n        =:=             .+#                                      \r\n        --+     .       +#.   .--.                               \r\n        --=            =*=    -*+-:                              \r\n         -:.           +#    -*-:.=                              \r\n          --.        .:**#=::+*::=-                              \r\n           --:       :=*===++++*                                 \r\n            -==     :::---==+--                                  \r\n             ++..  .::--=++=+=-:                                 \r\n          .-: .... ::--=+++++++-::..+                            \r\n          **. .:::::--=#+*++=====--+.-                           \r\n          -:.:----:---=*%*:::---===::-                           \r\n          ==.-===-----=+=::--++=====*                            \r\n            .--=#-:...:::--=+**+===*=                            \r\n            .-:=%- ------=++****+++*                             \r\n            ..... =###+++++*-.*+***:                             \r\n            ......=##*+****:..-*=*-                              \r\n           .::=--:-=#*+**:..::-**:.                              \r\n          .--=++++===+**..::-:-#%#:..                            \r\n         .=-=+:....+**=...:---=##*-..                            \r\n            :+-..........::-=+#*#---:                            \r\n            .==-:::......-:=****--:.                             \r\n             -.=--::..:-:-=**+=:--.                              \r\n             - .*==-:::--***+:.:--..                             \r\n           . -  :**-:::-+**-...---.:                             \r\n            -:  ..:*:::+++.....--:.:.                            \r\n               ....==:=*=.....---:.:..                           \r\n               .....::*......::--::-::.                          \r\n              .......+......------:-:::.                         \r\n              :............:------:---=..                        \r\n              ............:------------.:.                       \r\n              ..........::---------:-=:--:.                      \r\n             ..........:::--------=:=-:=--.                      \r\n             ::.-:....:-:---------=---=----:                     \r\n             --::+.:=:=::-::------=---:....:                     \r\n             --::-.:--::::--------=-=-----...                    \r\n            .:-:::-+::::::------==+-=-----:..                    \r\n            .:-=-::-::::..-----===+=-------:.                    \r\n           ..:-=-:-:::- :-.----=++++:-------..                   \r\n           .:--++-----:..:-:--==+*---:---==+::                   \r\n          .::-==#+---= ...---===+*=.::--==++=.        .....      \r\n         .::-===*%+=== -:::====+*=+++:-===++=.   ....:::::::     \r\n         ::--==++##:=.:--::====++++*++:==+*+++...::----::::..    \r\n         ::-==++*#:   --=-:===+#+*##*+-++*#*+**++===+-:----:.    \r\n        .:--=++*#:   ---==:==+**+*##*+-**#**%##*****-----==-=.   \r\n        -:-==+*#:   .===+===++:++*#*+++*#%%    .-*#+======+**    \r\n       =--==+*#.     ---==+++* +++**+=*:           =++++++*#     \r\n       .=+-+#-       -=-==++#  *+*+++*             :#*####       \r\n         :          .--===*#   *+++*                             \r\n                    :#:++==      .                               \r\n                      :                                                \r\n");
		}

		internal static void OnExtendedModRegistered(ExtendedMod myMod)
		{
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Expected O, but got Unknown
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Expected O, but got Unknown
			//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0301: Expected O, but got Unknown
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Expected O, but got Unknown
			if ((Object)(object)myMod == (Object)null)
			{
				return;
			}
			LoadNeededAssets();
			foreach (ExtendedItem extendedItem in myMod.ExtendedItems)
			{
				int configValueForItem = GetConfigValueForItem(extendedItem.Item.itemName);
				((MatchingProperties)extendedItem.LevelMatchingProperties).modNames.Clear();
				((MatchingProperties)extendedItem.LevelMatchingProperties).modNames.TrimExcess();
				((MatchingProperties)extendedItem.LevelMatchingProperties).authorNames.Clear();
				((MatchingProperties)extendedItem.LevelMatchingProperties).authorNames.TrimExcess();
				extendedItem.LevelMatchingProperties.levelTags.Clear();
				extendedItem.LevelMatchingProperties.levelTags.TrimExcess();
				extendedItem.LevelMatchingProperties.currentRoutePrice.Clear();
				extendedItem.LevelMatchingProperties.currentRoutePrice.TrimExcess();
				extendedItem.LevelMatchingProperties.currentWeather.Clear();
				extendedItem.LevelMatchingProperties.currentWeather.TrimExcess();
				extendedItem.LevelMatchingProperties.planetNames.Clear();
				extendedItem.LevelMatchingProperties.planetNames.TrimExcess();
				StringWithRarity item = new StringWithRarity("Vanilla", configValueForItem);
				StringWithRarity item2 = new StringWithRarity("Custom", configValueForItem);
				LevelMatchingPropertiesByName.Add(extendedItem.Item.itemName, extendedItem.LevelMatchingProperties);
				if (configValueForItem > 0)
				{
					extendedItem.LevelMatchingProperties.levelTags.Add(item2);
					extendedItem.LevelMatchingProperties.levelTags.Add(item);
					LevelMatchingPropertiesByName[extendedItem.Item.itemName] = extendedItem.LevelMatchingProperties;
				}
			}
			foreach (ExtendedEnemyType extendedEnemyType in myMod.ExtendedEnemyTypes)
			{
				if (extendedEnemyType.EnemyType.enemyName == "Mario")
				{
					((MatchingProperties)extendedEnemyType.InsideLevelMatchingProperties).modNames.Clear();
					((MatchingProperties)extendedEnemyType.InsideLevelMatchingProperties).modNames.TrimExcess();
					((MatchingProperties)extendedEnemyType.InsideLevelMatchingProperties).authorNames.Clear();
					((MatchingProperties)extendedEnemyType.InsideLevelMatchingProperties).authorNames.TrimExcess();
					extendedEnemyType.InsideLevelMatchingProperties.levelTags.Clear();
					extendedEnemyType.InsideLevelMatchingProperties.levelTags.TrimExcess();
					extendedEnemyType.InsideLevelMatchingProperties.currentRoutePrice.Clear();
					extendedEnemyType.InsideLevelMatchingProperties.currentRoutePrice.TrimExcess();
					extendedEnemyType.InsideLevelMatchingProperties.currentWeather.Clear();
					extendedEnemyType.InsideLevelMatchingProperties.currentWeather.TrimExcess();
					extendedEnemyType.InsideLevelMatchingProperties.planetNames.Clear();
					extendedEnemyType.InsideLevelMatchingProperties.planetNames.TrimExcess();
					int value = ReindogAndFriendsModConfig.marioRarity.Value;
					StringWithRarity item3 = new StringWithRarity("Vanilla", value);
					StringWithRarity item4 = new StringWithRarity("Custom", value);
					LevelMatchingPropertiesByName.Add(extendedEnemyType.EnemyType.enemyName, extendedEnemyType.InsideLevelMatchingProperties);
					if (value > 0)
					{
						extendedEnemyType.InsideLevelMatchingProperties.levelTags.Add(item4);
						extendedEnemyType.InsideLevelMatchingProperties.levelTags.Add(item3);
						extendedEnemyType.EnemyType.MaxCount = ReindogAndFriendsModConfig.marioMaxCount.Value;
						extendedEnemyType.EnemyType.PowerLevel = ReindogAndFriendsModConfig.marioPowerLevel.Value;
						LevelMatchingPropertiesByName[extendedEnemyType.EnemyType.enemyName] = extendedEnemyType.InsideLevelMatchingProperties;
					}
				}
			}
			int value2 = ReindogAndFriendsModConfig.holdingPenCost.Value;
			Item val = AssetBundleLoader.assetBundles["reindogandfriends.lethalbundle"].LoadAsset<Item>("assets/lethalcompany/mods/reindogandfriends/items/holdingpen/data/holdingpenitem.asset");
			NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab);
			TerminalNode val2 = AssetBundleLoader.assetBundles["reindogandfriends.lethalbundle"].LoadAsset<TerminalNode>("assets/lethalcompany/mods/reindogandfriends/items/holdingpen/data/terminal/shoppendata.asset");
			Items.RegisterShopItem(val, (TerminalNode)null, (TerminalNode)null, val2, value2);
		}

		internal static void LoadNeededAssets()
		{
			if (ReindogAndFriendsModConfig.maximumFosgreathModeEnabled.Value)
			{
				fosgreathTexture = AssetBundleLoader.assetBundles["reindogandfriends.lethalbundle"].LoadAsset<Texture2D>("assets/lethalcompany/mods/reindogandfriends/items/fosgreath/data/texturegreath.jpg");
				fosgreathClip = AssetBundleLoader.assetBundles["reindogandfriends.lethalbundle"].LoadAsset<AudioClip>("assets/lethalcompany/mods/reindogandfriends/audio/clipgreath.ogg");
			}
		}

		private static int GetConfigValueForItem(string itemName)
		{
			switch (itemName)
			{
			case "Bober Kurwa":
				return ReindogAndFriendsModConfig.boberKurwaSpawnRate.Value;
			case "Mini Nuke":
				return ReindogAndFriendsModConfig.miniNukeSpawnRate.Value;
			case "Broda":
				return ReindogAndFriendsModConfig.brodaSpawnRate.Value;
			case "Chris Griffin":
				return ReindogAndFriendsModConfig.chrisGriffinSpawnRate.Value;
			case "Cid":
				return ReindogAndFriendsModConfig.cidSpawnRate.Value;
			case "Clyde":
				return ReindogAndFriendsModConfig.clydeSpawnRate.Value;
			case "Crawly":
				return ReindogAndFriendsModConfig.crawlySpawnRate.Value;
			case "Deku":
				return ReindogAndFriendsModConfig.dekuSpawnRate.Value;
			case "Fosgreath":
				return ReindogAndFriendsModConfig.fosgreathSpawnRate.Value;
			case "Frieza":
				return ReindogAndFriendsModConfig.friezaSpawnRate.Value;
			case "Golden Reindog":
				return ReindogAndFriendsModConfig.goldenReindogSpawnRate.Value;
			case "Hamster":
				return ReindogAndFriendsModConfig.hamsterSpawnRate.Value;
			case "Iron Giant":
				return ReindogAndFriendsModConfig.ironGiantSpawnRate.Value;
			case "Lebron":
				return ReindogAndFriendsModConfig.lebronSpawnRate.Value;
			case "Lightning McQueen":
				return ReindogAndFriendsModConfig.lightningMcqueenSpawnRate.Value;
			case "Monkey Cube":
				return ReindogAndFriendsModConfig.monkeyCubeSpawnRate.Value;
			case "Nerd":
				return ReindogAndFriendsModConfig.nerdSpawnRate.Value;
			case "Optimus Prime":
				return ReindogAndFriendsModConfig.optimusPrimeSpawnRate.Value;
			case "Rat":
				return ReindogAndFriendsModConfig.ratSpawnRate.Value;
			case "Reindog":
				return ReindogAndFriendsModConfig.reindogSpawnRate.Value;
			case "Saul Bigman":
				return ReindogAndFriendsModConfig.saulBigmanSpawnRate.Value;
			case "Saul Goodman":
				return ReindogAndFriendsModConfig.saulGoodmanSpawnRate.Value;
			case "Sonic":
				return ReindogAndFriendsModConfig.sonicSpawnRate.Value;
			case "Superman":
				return ReindogAndFriendsModConfig.supermanSpawnRate.Value;
			case "Swag Baby":
				return ReindogAndFriendsModConfig.babySpawnRate.Value;
			case "Rayman":
				return ReindogAndFriendsModConfig.raymanSpawnRate.Value;
			case "Shadow":
				return ReindogAndFriendsModConfig.shadowSpawnRate.Value;
			case "Remy":
				return ReindogAndFriendsModConfig.remySpawnRate.Value;
			case "Fan":
				return ReindogAndFriendsModConfig.fanSpawnRate.Value;
			case "Knuckles":
				return ReindogAndFriendsModConfig.knucklesSpawnRate.Value;
			case "1-Up Mushroom":
				return ReindogAndFriendsModConfig.mushroomSpawnRate.Value;
			default:
				Logger.LogInfo((object)("No configuration found for item type: " + itemName + ", setting spawn value to 25"));
				return 25;
			}
		}

		public static float GetGenericVolumeConfig(string itemName)
		{
			return itemName switch
			{
				"Bober Kurwa" => ReindogAndFriendsModConfig.boberKurwaGenericVolume.Value, 
				"Mini Nuke" => ReindogAndFriendsModConfig.miniNukeGenericVolume.Value, 
				"Broda" => ReindogAndFriendsModConfig.brodaGenericVolume.Value, 
				"Chris Griffin" => ReindogAndFriendsModConfig.chrisGriffinGenericVolume.Value, 
				"Cid" => ReindogAndFriendsModConfig.cidGenericVolume.Value, 
				"Clyde" => ReindogAndFriendsModConfig.clydeGenericVolume.Value, 
				"Crawly" => ReindogAndFriendsModConfig.crawlyGenericVolume.Value, 
				"Deku" => ReindogAndFriendsModConfig.dekuGenericVolume.Value, 
				"Fosgreath" => ReindogAndFriendsModConfig.fosgreathGenericVolume.Value, 
				"Frieza" => ReindogAndFriendsModConfig.friezaGenericVolume.Value, 
				"Golden Reindog" => ReindogAndFriendsModConfig.goldenReindogGenericVolume.Value, 
				"Hamster" => ReindogAndFriendsModConfig.hamsterGenericVolume.Value, 
				"Iron Giant" => ReindogAndFriendsModConfig.ironGiantGenericVolume.Value, 
				"Lebron" => ReindogAndFriendsModConfig.lebronGenericVolume.Value, 
				"Lightning McQueen" => ReindogAndFriendsModConfig.lightningMcQueenGenericVolume.Value, 
				"Monkey Cube" => ReindogAndFriendsModConfig.monkeyCubeGenericVolume.Value, 
				"Nerd" => ReindogAndFriendsModConfig.nerdGenericVolume.Value, 
				"Optimus Prime" => ReindogAndFriendsModConfig.optimusPrimeGenericVolume.Value, 
				"Rat" => ReindogAndFriendsModConfig.ratGenericVolume.Value, 
				"Reindog" => ReindogAndFriendsModConfig.reindogGenericVolume.Value, 
				"Saul Bigman" => ReindogAndFriendsModConfig.saulBigmanGenericVolume.Value, 
				"Saul Goodman" => ReindogAndFriendsModConfig.saulGoodmanGenericVolume.Value, 
				"Sonic" => ReindogAndFriendsModConfig.sonicGenericVolume.Value, 
				"Superman" => ReindogAndFriendsModConfig.supermanGenericVolume.Value, 
				"Swag Baby" => ReindogAndFriendsModConfig.babyGenericVolume.Value, 
				"Rayman" => ReindogAndFriendsModConfig.raymanGenericVolume.Value, 
				"Shadow" => ReindogAndFriendsModConfig.shadowGenericVolume.Value, 
				"Remy" => ReindogAndFriendsModConfig.remyGenericVolume.Value, 
				"Fan" => ReindogAndFriendsModConfig.fanGenericVolume.Value, 
				"Knuckles" => ReindogAndFriendsModConfig.knucklesGenericVolume.Value, 
				"1-Up Mushroom" => ReindogAndFriendsModConfig.mushroomGenericVolume.Value, 
				"Holding Pen" => ReindogAndFriendsModConfig.holdingPenGenericVolume.Value, 
				_ => -1f, 
			};
		}

		public static float GetRoamingVolumeConfig(string itemName)
		{
			return itemName switch
			{
				"Sonic" => ReindogAndFriendsModConfig.sonicVolume.Value, 
				"Crawly" => ReindogAndFriendsModConfig.crawlyVolume.Value, 
				"Deku" => ReindogAndFriendsModConfig.dekuVolume.Value, 
				"Rayman" => ReindogAndFriendsModConfig.raymanVolume.Value, 
				"Shadow" => ReindogAndFriendsModConfig.shadowVolume.Value, 
				"Remy" => ReindogAndFriendsModConfig.remyVolume.Value, 
				"Knuckles" => ReindogAndFriendsModConfig.knucklesVolume.Value, 
				"1-Up Mushroom" => ReindogAndFriendsModConfig.mushroomVolume.Value, 
				_ => 1f, 
			};
		}

		public static float GetSpeedConfig(string itemName)
		{
			return itemName switch
			{
				"Sonic" => ReindogAndFriendsModConfig.sonicSpeed.Value, 
				"Crawly" => ReindogAndFriendsModConfig.crawlySpeed.Value, 
				"Deku" => ReindogAndFriendsModConfig.dekuSpeed.Value, 
				"Rayman" => ReindogAndFriendsModConfig.raymanSpeed.Value, 
				"Shadow" => ReindogAndFriendsModConfig.shadowSpeed.Value, 
				"Remy" => ReindogAndFriendsModConfig.remySpeed.Value, 
				"Knuckles" => ReindogAndFriendsModConfig.knucklesSpeed.Value, 
				"1-Up Mushroom" => ReindogAndFriendsModConfig.mushroomSpeed.Value, 
				_ => 5f, 
			};
		}

		public static int GetRoamChanceConfig(string itemName)
		{
			return itemName switch
			{
				"Sonic" => ReindogAndFriendsModConfig.sonicRoamChance.Value, 
				"Crawly" => ReindogAndFriendsModConfig.crawlyRoamChance.Value, 
				"Deku" => ReindogAndFriendsModConfig.dekuRoamChance.Value, 
				"Rayman" => ReindogAndFriendsModConfig.raymanRoamChance.Value, 
				"Shadow" => ReindogAndFriendsModConfig.shadowRoamChance.Value, 
				"Remy" => ReindogAndFriendsModConfig.remyRoamChance.Value, 
				"Knuckles" => ReindogAndFriendsModConfig.knucklesRoamChance.Value, 
				"1-Up Mushroom" => ReindogAndFriendsModConfig.mushroomRoamChance.Value, 
				_ => 100, 
			};
		}

		public static float GetMaxHearableDistanceConfig(string itemName)
		{
			return itemName switch
			{
				"Sonic" => ReindogAndFriendsModConfig.sonicHearableDist.Value, 
				"Crawly" => ReindogAndFriendsModConfig.crawlyHearableDist.Value, 
				"Deku" => ReindogAndFriendsModConfig.dekuHearableDist.Value, 
				"Rayman" => ReindogAndFriendsModConfig.raymanHearableDist.Value, 
				"Shadow" => ReindogAndFriendsModConfig.shadowHearableDist.Value, 
				"Remy" => ReindogAndFriendsModConfig.remyHearableDist.Value, 
				"Knuckles" => ReindogAndFriendsModConfig.knucklesHearableDist.Value, 
				"1-Up Mushroom" => ReindogAndFriendsModConfig.mushroomHearableDist.Value, 
				_ => 40f, 
			};
		}

		public static int GetMusicMode(string itemName)
		{
			if (!(itemName == "Crawly"))
			{
				if (itemName == "Knuckles")
				{
					return ReindogAndFriendsModConfig.knucklesMusicMode.Value;
				}
				return -1;
			}
			return ReindogAndFriendsModConfig.crawlyMusicMode.Value;
		}

		internal static void Patch()
		{
			//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_0018: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony = new Harmony("ReindogFan1372.ReindogDLL");
			}
			Logger.LogDebug((object)"Patching...");
			Harmony.PatchAll();
			Logger.LogDebug((object)"Finished patching!");
		}

		internal static void Unpatch()
		{
			Logger.LogDebug((object)"Unpatching...");
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			Logger.LogDebug((object)"Finished unpatching!");
		}

		private static void NetcodePatcher()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
	internal class MyModConfig
	{
		public readonly ConfigEntry<int> boberKurwaSpawnRate;

		public readonly ConfigEntry<float> boberKurwaGenericVolume;

		public readonly ConfigEntry<int> miniNukeSpawnRate;

		public readonly ConfigEntry<int> miniNukeExplodeChance;

		public readonly ConfigEntry<float> timeBetweenBombActivationChecksMax;

		public readonly ConfigEntry<float> nukeDetonationTime;

		public readonly ConfigEntry<float> miniNukeGenericVolume;

		public readonly ConfigEntry<float> miniNukeBeepingVolume;

		public readonly ConfigEntry<float> miniNukeExplosionVolume;

		public readonly ConfigEntry<int> brodaSpawnRate;

		public readonly ConfigEntry<float> brodaGenericVolume;

		public readonly ConfigEntry<int> chrisGriffinSpawnRate;

		public readonly ConfigEntry<float> chrisGriffinGenericVolume;

		public readonly ConfigEntry<int> cidSpawnRate;

		public readonly ConfigEntry<float> cidGenericVolume;

		public readonly ConfigEntry<int> clydeSpawnRate;

		public readonly ConfigEntry<float> clydeGenericVolume;

		public readonly ConfigEntry<int> crawlySpawnRate;

		public readonly ConfigEntry<float> crawlyVolume;

		public readonly ConfigEntry<int> crawlyMusicMode;

		public readonly ConfigEntry<float> crawlySpeed;

		public readonly ConfigEntry<int> crawlyRoamChance;

		public readonly ConfigEntry<float> crawlyHearableDist;

		public readonly ConfigEntry<float> crawlyGenericVolume;

		public readonly ConfigEntry<bool> randomiseSize;

		public readonly ConfigEntry<float> minRandomisedSize;

		public readonly ConfigEntry<float> maxRandomisedSize;

		public readonly ConfigEntry<int> dekuSpawnRate;

		public readonly ConfigEntry<float> dekuVolume;

		public readonly ConfigEntry<float> dekuSpeed;

		public readonly ConfigEntry<int> dekuRoamChance;

		public readonly ConfigEntry<float> dekuHearableDist;

		public readonly ConfigEntry<float> dekuGenericVolume;

		public readonly ConfigEntry<int> fosgreathSpawnRate;

		public readonly ConfigEntry<float> fosgreathGenericVolume;

		public readonly ConfigEntry<int> friezaSpawnRate;

		public readonly ConfigEntry<float> friezaGenericVolume;

		public readonly ConfigEntry<int> goldenReindogSpawnRate;

		public readonly ConfigEntry<float> goldenReindogGenericVolume;

		public readonly ConfigEntry<int> hamsterSpawnRate;

		public readonly ConfigEntry<float> hamsterGenericVolume;

		public readonly ConfigEntry<int> ironGiantSpawnRate;

		public readonly ConfigEntry<float> ironGiantGenericVolume;

		public readonly ConfigEntry<int> lebronSpawnRate;

		public readonly ConfigEntry<float> lebronGenericVolume;

		public readonly ConfigEntry<int> lightningMcqueenSpawnRate;

		public readonly ConfigEntry<float> lightningMcQueenGenericVolume;

		public readonly ConfigEntry<int> monkeyCubeSpawnRate;

		public readonly ConfigEntry<float> monkeyCubeGenericVolume;

		public readonly ConfigEntry<int> nerdSpawnRate;

		public readonly ConfigEntry<float> nerdGenericVolume;

		public readonly ConfigEntry<int> optimusPrimeSpawnRate;

		public readonly ConfigEntry<float> optimusPrimeGenericVolume;

		public readonly ConfigEntry<int> ratSpawnRate;

		public readonly ConfigEntry<float> ratGenericVolume;

		public readonly ConfigEntry<int> reindogSpawnRate;

		public readonly ConfigEntry<float> reindogGenericVolume;

		public readonly ConfigEntry<int> saulBigmanSpawnRate;

		public readonly ConfigEntry<float> saulBigmanGenericVolume;

		public readonly ConfigEntry<int> saulGoodmanSpawnRate;

		public readonly ConfigEntry<float> saulGoodmanGenericVolume;

		public readonly ConfigEntry<int> sonicSpawnRate;

		public readonly ConfigEntry<float> sonicVolume;

		public readonly ConfigEntry<float> sonicSpeed;

		public readonly ConfigEntry<int> sonicRoamChance;

		public readonly ConfigEntry<float> sonicHearableDist;

		public readonly ConfigEntry<float> sonicGenericVolume;

		public readonly ConfigEntry<int> supermanSpawnRate;

		public readonly ConfigEntry<float> supermanGenericVolume;

		public readonly ConfigEntry<int> babySpawnRate;

		public readonly ConfigEntry<float> babyGenericVolume;

		public readonly ConfigEntry<int> fanSpawnRate;

		public readonly ConfigEntry<float> fanVolume;

		public readonly ConfigEntry<float> fanBlowForceMin;

		public readonly ConfigEntry<float> fanBlowForceMax;

		public readonly ConfigEntry<float> fanBlowDist;

		public readonly ConfigEntry<int> fanActivationChance;

		public readonly ConfigEntry<float> fanActivationMaxInterval;

		public readonly ConfigEntry<float> fanGenericVolume;

		public readonly ConfigEntry<int> raymanSpawnRate;

		public readonly ConfigEntry<float> raymanVolume;

		public readonly ConfigEntry<float> raymanSpeed;

		public readonly ConfigEntry<int> raymanRoamChance;

		public readonly ConfigEntry<float> raymanHearableDist;

		public readonly ConfigEntry<float> raymanGenericVolume;

		public readonly ConfigEntry<int> shadowSpawnRate;

		public readonly ConfigEntry<float> shadowVolume;

		public readonly ConfigEntry<float> shadowSpeed;

		public readonly ConfigEntry<int> shadowRoamChance;

		public readonly ConfigEntry<float> shadowHearableDist;

		public readonly ConfigEntry<float> shadowGenericVolume;

		public readonly ConfigEntry<int> knucklesSpawnRate;

		public readonly ConfigEntry<float> knucklesVolume;

		public readonly ConfigEntry<float> knucklesSpeed;

		public readonly ConfigEntry<int> knucklesRoamChance;

		public readonly ConfigEntry<float> knucklesHearableDist;

		public readonly ConfigEntry<int> knucklesMusicMode;

		public readonly ConfigEntry<float> knucklesGenericVolume;

		public readonly ConfigEntry<int> remySpawnRate;

		public readonly ConfigEntry<float> remyVolume;

		public readonly ConfigEntry<float> remySpeed;

		public readonly ConfigEntry<int> remyRoamChance;

		public readonly ConfigEntry<float> remyHearableDist;

		public readonly ConfigEntry<float> remyGenericVolume;

		public readonly ConfigEntry<bool> maximumFosgreathModeEnabled;

		public readonly ConfigEntry<string> dekuExplodeTargetPlayerName;

		public readonly ConfigEntry<int> holdingPenCost;

		public readonly ConfigEntry<float> holdingPenGenericVolume;

		public readonly ConfigEntry<bool> quicktimeEventsToggle;

		public readonly ConfigEntry<float> quicktimeEventsDropRate;

		public readonly ConfigEntry<float> quicktimeEventsIncreaseRate;

		public readonly ConfigEntry<int> quicktimeEventChance;

		public readonly ConfigEntry<float> quicktimeEventIntervalMax;

		public readonly ConfigEntry<float> quicktimeEventIntervalMin;

		public readonly ConfigEntry<int> marioRarity;

		public readonly ConfigEntry<int> marioHealth;

		public readonly ConfigEntry<float> marioSearchSpeed;

		public readonly ConfigEntry<float> marioChaseSpeed;

		public readonly ConfigEntry<float> marioChaseMusicVolume;

		public readonly ConfigEntry<int> marioDamagePerHit;

		public readonly ConfigEntry<int> mushroomSpawnRate;

		public readonly ConfigEntry<float> mushroomVolume;

		public readonly ConfigEntry<float> mushroomSpeed;

		public readonly ConfigEntry<int> mushroomRoamChance;

		public readonly ConfigEntry<float> mushroomHearableDist;

		public readonly ConfigEntry<float> mushroomGenericVolume;

		public readonly ConfigEntry<int> marioMaxHearableDistSfx;

		public readonly ConfigEntry<int> marioMaxHearableDistChaseMusic;

		public readonly ConfigEntry<int> marioMaxCount;

		public readonly ConfigEntry<int> marioPowerLevel;

		public readonly ConfigEntry<int> minNumOfMushroomsToSpawn;

		public readonly ConfigEntry<int> maxNumOfMushroomsToSpawn;

		public MyModConfig(ConfigFile cfg)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Expected O, but got Unknown
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Expected O, but got Unknown
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Expected O, but got Unknown
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Expected O, but got Unknown
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Expected O, but got Unknown
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Expected O, but got Unknown
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Expected O, but got Unknown
			//IL_0307: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Expected O, but got Unknown
			//IL_035d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0367: Expected O, but got Unknown
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bc: Expected O, but got Unknown
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_0412: Expected O, but got Unknown
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0468: Expected O, but got Unknown
			//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04be: Expected O, but got Unknown
			//IL_050a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0514: Expected O, but got Unknown
			//IL_0560: Unknown result type (might be due to invalid IL or missing references)
			//IL_056a: Expected O, but got Unknown
			//IL_05b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c0: Expected O, but got Unknown
			//IL_060c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0616: Expected O, but got Unknown
			//IL_0662: Unknown result type (might be due to invalid IL or missing references)
			//IL_066c: Expected O, but got Unknown
			//IL_06b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c2: Expected O, but got Unknown
			//IL_070e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0718: Expected O, but got Unknown
			//IL_0764: Unknown result type (might be due to invalid IL or missing references)
			//IL_076e: Expected O, but got Unknown
			//IL_07ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c4: Expected O, but got Unknown
			//IL_0810: Unknown result type (might be due to invalid IL or missing references)
			//IL_081a: Expected O, but got Unknown
			//IL_0866: Unknown result type (might be due to invalid IL or missing references)
			//IL_0870: Expected O, but got Unknown
			//IL_08bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c6: Expected O, but got Unknown
			//IL_0912: Unknown result type (might be due to invalid IL or missing references)
			//IL_091c: Expected O, but got Unknown
			//IL_0968: Unknown result type (might be due to invalid IL or missing references)
			//IL_0972: Expected O, but got Unknown
			//IL_09be: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c8: Expected O, but got Unknown
			//IL_0a14: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1e: Expected O, but got Unknown
			//IL_0a49: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a53: Expected O, but got Unknown
			//IL_0a9e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa8: Expected O, but got Unknown
			//IL_0ad7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae1: Expected O, but got Unknown
			//IL_0b10: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b1a: Expected O, but got Unknown
			//IL_0b49: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b53: Expected O, but got Unknown
			//IL_0b82: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b8c: Expected O, but got Unknown
			//IL_0bbb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc5: Expected O, but got Unknown
			//IL_0bf4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bfe: Expected O, but got Unknown
			//IL_0c2d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c37: Expected O, but got Unknown
			//IL_0c66: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c70: Expected O, but got Unknown
			//IL_0c9f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ca9: Expected O, but got Unknown
			//IL_0cd8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce2: Expected O, but got Unknown
			//IL_0e07: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e11: Expected O, but got Unknown
			//IL_0e36: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e40: Expected O, but got Unknown
			//IL_0e65: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e6f: Expected O, but got Unknown
			//IL_0e94: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e9e: Expected O, but got Unknown
			//IL_0ec3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ecd: Expected O, but got Unknown
			//IL_0ef2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0efc: Expected O, but got Unknown
			//IL_0f21: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f2b: Expected O, but got Unknown
			//IL_0f50: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f5a: Expected O, but got Unknown
			//IL_1190: Unknown result type (might be due to invalid IL or missing references)
			//IL_119a: Expected O, but got Unknown
			//IL_121b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1225: Expected O, but got Unknown
			//IL_128d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1297: Expected O, but got Unknown
			//IL_12c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_12d0: Expected O, but got Unknown
			//IL_12ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_1309: Expected O, but got Unknown
			//IL_1338: Unknown result type (might be due to invalid IL or missing references)
			//IL_1342: Expected O, but got Unknown
			//IL_1367: Unknown result type (might be due to invalid IL or missing references)
			//IL_1371: Expected O, but got Unknown
			//IL_1396: Unknown result type (might be due to invalid IL or missing references)
			//IL_13a0: Expected O, but got Unknown
			//IL_13c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_13cf: Expected O, but got Unknown
			//IL_13f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_13fc: Expected O, but got Unknown
			//IL_141f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1429: Expected O, but got Unknown
			//IL_144d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1457: Expected O, but got Unknown
			//IL_1485: Unknown result type (might be due to invalid IL or missing references)
			//IL_148f: Expected O, but got Unknown
			//IL_14b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_14bd: Expected O, but got Unknown
			//IL_152c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1536: Expected O, but got Unknown
			//IL_1565: Unknown result type (might be due to invalid IL or missing references)
			//IL_156f: Expected O, but got Unknown
			//IL_15ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c4: Expected O, but got Unknown
			//IL_15f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_15fd: Expected O, but got Unknown
			cfg.SaveOnConfigSet = false;
			boberKurwaSpawnRate = cfg.Bind<int>("Bober Kurwa", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			boberKurwaGenericVolume = cfg.Bind<float>("Bober Kurwa", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			miniNukeSpawnRate = cfg.Bind<int>("Mini Nuke", "Item Weighting", 12, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			miniNukeGenericVolume = cfg.Bind<float>("Mini Nuke", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			brodaSpawnRate = cfg.Bind<int>("Broda", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			brodaGenericVolume = cfg.Bind<float>("Broda", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			chrisGriffinSpawnRate = cfg.Bind<int>("Chris Griffin", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			chrisGriffinGenericVolume = cfg.Bind<float>("Chris Griffin", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			cidSpawnRate = cfg.Bind<int>("Cid", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			cidGenericVolume = cfg.Bind<float>("Cid", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			clydeSpawnRate = cfg.Bind<int>("Clyde", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			clydeGenericVolume = cfg.Bind<float>("Clyde", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			crawlySpawnRate = cfg.Bind<int>("Crawly The Wizard", "Item Weighting", 20, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			crawlyGenericVolume = cfg.Bind<float>("Crawly The Wizard", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			dekuSpawnRate = cfg.Bind<int>("Deku", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			dekuGenericVolume = cfg.Bind<float>("Deku", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			fosgreathSpawnRate = cfg.Bind<int>("Fosgreath", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			fosgreathGenericVolume = cfg.Bind<float>("Fosgreath", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			friezaSpawnRate = cfg.Bind<int>("Frieza", "Item Weighting", 35, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			friezaGenericVolume = cfg.Bind<float>("Frieza", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			goldenReindogSpawnRate = cfg.Bind<int>("GoldenReindog", "Item Weighting", 7, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			goldenReindogGenericVolume = cfg.Bind<float>("GoldenReindog", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			hamsterSpawnRate = cfg.Bind<int>("Hamster", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			hamsterGenericVolume = cfg.Bind<float>("Hamster", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			ironGiantSpawnRate = cfg.Bind<int>("Iron Giant", "Item Weighting", 12, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			ironGiantGenericVolume = cfg.Bind<float>("Iron Giant", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			lebronSpawnRate = cfg.Bind<int>("LeBron", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			lebronGenericVolume = cfg.Bind<float>("Lebron", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			lightningMcqueenSpawnRate = cfg.Bind<int>("Lightning McQueen", "Item Weighting", 12, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			lightningMcQueenGenericVolume = cfg.Bind<float>("Lightning McQueen", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			monkeyCubeSpawnRate = cfg.Bind<int>("Monkey Cube", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			monkeyCubeGenericVolume = cfg.Bind<float>("Monkey Cube", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			nerdSpawnRate = cfg.Bind<int>("Nerd", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			nerdGenericVolume = cfg.Bind<float>("Nerd", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			optimusPrimeSpawnRate = cfg.Bind<int>("Optimus Prime", "Item Weighting (Default 30)", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			optimusPrimeGenericVolume = cfg.Bind<float>("Optimus Prime", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			ratSpawnRate = cfg.Bind<int>("Rat", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			ratGenericVolume = cfg.Bind<float>("Rat", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			reindogSpawnRate = cfg.Bind<int>("Reindog", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			reindogGenericVolume = cfg.Bind<float>("Reindog", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			saulBigmanSpawnRate = cfg.Bind<int>("Saul Bigman", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			saulBigmanGenericVolume = cfg.Bind<float>("Saul Bigman", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			saulGoodmanSpawnRate = cfg.Bind<int>("Saul Goodman", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			saulGoodmanGenericVolume = cfg.Bind<float>("Saul Goodman", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			sonicSpawnRate = cfg.Bind<int>("Sonic", "Item Weighting", 20, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			sonicGenericVolume = cfg.Bind<float>("Sonic", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			supermanSpawnRate = cfg.Bind<int>("Superman", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			supermanGenericVolume = cfg.Bind<float>("Superman", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			babySpawnRate = cfg.Bind<int>("Baby", "Item Weighting", 30, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			babyGenericVolume = cfg.Bind<float>("Baby", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			raymanSpawnRate = cfg.Bind<int>("Rayman", "Item Weighting", 20, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			raymanGenericVolume = cfg.Bind<float>("Rayman", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			shadowSpawnRate = cfg.Bind<int>("Shadow", "Item Weighting", 20, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			shadowGenericVolume = cfg.Bind<float>("Shadow", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			remySpawnRate = cfg.Bind<int>("Remy", "Item Weighting", 20, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			remyGenericVolume = cfg.Bind<float>("Remy", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			fanSpawnRate = cfg.Bind<int>("Fan", "Item Weighting", 25, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			fanGenericVolume = cfg.Bind<float>("Fan", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			knucklesSpawnRate = cfg.Bind<int>("Knuckles", "Item Weighting", 20, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			knucklesGenericVolume = cfg.Bind<float>("Knuckles", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			marioRarity = cfg.Bind<int>("Mario", "Spawn Weighting", 220, new ConfigDescription("How likely this enemy is to spawn over others", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 9999), Array.Empty<object>()));
			mushroomSpawnRate = cfg.Bind<int>("Mushroom", "Item Weighting", 0, "Rarity of the item, 30-40 is roughly normal vanilla weighting for standard scrap");
			mushroomGenericVolume = cfg.Bind<float>("Mushroom", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			holdingPenGenericVolume = cfg.Bind<float>("Holding Pen", "Generic Volume", 1f, new ConfigDescription("Controls the volume of any sound triggered when picked up, dropped, pocketed or played", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			crawlyVolume = cfg.Bind<float>("Crawly The Wizard", "Roaming Audio Volume", 0.28f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			sonicVolume = cfg.Bind<float>("Sonic", "Roaming Audio Volume", 0.5f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			dekuVolume = cfg.Bind<float>("Deku", "Roaming Audio Volume", 0.9f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			raymanVolume = cfg.Bind<float>("Rayman", "Roaming Audio Volume", 0.8f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			shadowVolume = cfg.Bind<float>("Shadow", "Roaming Audio Volume", 0.75f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			knucklesVolume = cfg.Bind<float>("Knuckles", "Roaming Audio Volume", 0.7f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			mushroomVolume = cfg.Bind<float>("Mushroom", "Roaming Audio Volume", 0.7f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			fanVolume = cfg.Bind<float>("Fan", "Volume of the fan", 1f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			remyVolume = cfg.Bind<float>("Remy", "Roaming Audio Volume", 0.7f, new ConfigDescription("Volume of the roaming audio, set to 0 to turn off", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			sonicSpeed = cfg.Bind<float>("Sonic", "Roaming Speed (Default 16.75)", 16.75f, "How fast should they move around");
			crawlySpeed = cfg.Bind<float>("Crawly The Wizard", "Roaming Speed (Default 2.1)", 2.1f, "How fast should they move around");
			dekuSpeed = cfg.Bind<float>("Deku", "Chase Speed (Default 12.5)", 12.5f, "How fast should deku chase the player");
			raymanSpeed = cfg.Bind<float>("Rayman", "Roaming Speed (Default 9)", 9f, "How fast should they move around");
			knucklesSpeed = cfg.Bind<float>("Knuckles", "Roaming Speed (Default 12.5)", 12.5f, "How fast should they move around");
			shadowSpeed = cfg.Bind<float>("Shadow", "Roaming Speed (Default 16.5)", 16.5f, "How fast should they move around");
			remySpeed = cfg.Bind<float>("Remy", "Roaming Speed (Default 0.9)", 0.9f, "How fast should they move around");
			mushroomSpeed = cfg.Bind<float>("Mushroom", "Roaming Speed", 5.5f, "How fast should they move around");
			dekuRoamChance = cfg.Bind<int>("Deku", "Chase chance (default 50)", 50, new ConfigDescription("Chance to chase the player on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			sonicRoamChance = cfg.Bind<int>("Sonic", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			crawlyRoamChance = cfg.Bind<int>("Crawly The Wizard", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			raymanRoamChance = cfg.Bind<int>("Rayman", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			knucklesRoamChance = cfg.Bind<int>("Knuckles", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			shadowRoamChance = cfg.Bind<int>("Shadow", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			remyRoamChance = cfg.Bind<int>("Remy", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			mushroomRoamChance = cfg.Bind<int>("Mushroom", "Roam chance (default 100)", 100, new ConfigDescription("Chance to start roaming on drop", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			crawlyHearableDist = cfg.Bind<float>("Crawly The Wizard", "Max Audio Distance (default 32)", 32f, "Max distance at which audio is still audible");
			sonicHearableDist = cfg.Bind<float>("Sonic", "Max Audio Distance (default 45f)", 42f, "Max distance at which audio is still audible");
			raymanHearableDist = cfg.Bind<float>("Rayman", "Max Audio Distance (default 40f)", 40f, "Max distance at which audio is still audible");
			dekuHearableDist = cfg.Bind<float>("Deku", "Max Audio Distance (default 50f)", 50f, "Max distance at which audio is still audible");
			shadowHearableDist = cfg.Bind<float>("Shadow", "Max Audio Distance (default 45)", 42f, "Max distance at which audio is still audible");
			remyHearableDist = cfg.Bind<float>("Remy", "Max Audio Distance", 32f, "Max distance at which audio is still audible");
			mushroomHearableDist = cfg.Bind<float>("Mushroom", "Max Audio Distance", 40f, "Max distance at which audio is still audible");
			knucklesHearableDist = cfg.Bind<float>("Knuckles", "Max Audio Distance (default 45)", 45f, "Max distance at which audio is still audible");
			maximumFosgreathModeEnabled = cfg.Bind<bool>("Fosgreath", "Enable Maximum Fosgreath Mode (default false)", false, "Should Maximum Fosgreath Mode Be Enabled?");
			dekuExplodeTargetPlayerName = cfg.Bind<string>("Deku", "Target Player Name (default NULL)", "NUll", "Deku has a small chance to explode when held by the player with the specified username");
			holdingPenCost = cfg.Bind<int>("Holding Pen", "Price of the Holding Pen (default 100)", 100, "Price of the Holding Pen when purchasing from the store in the terminal");
			crawlyMusicMode = cfg.Bind<int>("Crawly The Wizard", "Roaming Audio (default standard)", 0, "Which Audio should be played whilst roaming {0 = standard, 1 = full, 2 = lyrics}");
			knucklesMusicMode = cfg.Bind<int>("Knuckles", "Roaming Audio (default standard)", 0, "Which Audio should be played whilst roaming {0 = standard, 1 = All Knuckles}");
			fanBlowForceMin = cfg.Bind<float>("Fan", "Blow Force Minimum", 3f, "How much force should the fan exert at minimum (at max distance from fan)");
			fanBlowForceMax = cfg.Bind<float>("Fan", "Blow Force Maximum", 18f, "How much force should the fan exert at maximum (close to fan)");
			fanBlowDist = cfg.Bind<float>("Fan", "Blowing Distance", 22f, "How far does the fans blow reach");
			fanActivationMaxInterval = cfg.Bind<float>("Fan", "Max Activation Interval", 7.5f, "How long should the fan wait at max before checking if it should turn on");
			fanActivationChance = cfg.Bind<int>("Fan", "Activation Chance", 10, new ConfigDescription("Chance for the fan to turn on every interval", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			quicktimeEventsToggle = cfg.Bind<bool>("Quicktime Events", "Enable Quicktime Events?", true, "Should Quicktime Events be enabled for roaming scrap?");
			quicktimeEventsDropRate = cfg.Bind<float>("Quicktime Events", "Drop Rate", 0.55f, "Rate at which the progress bar decreases");
			quicktimeEventsIncreaseRate = cfg.Bind<float>("Quicktime Events", "Increase Rate", 0.1f, "Rate at which the progress bar increase per button tap as a percent (0.1 = 10% of the bar per tap)");
			quicktimeEventChance = cfg.Bind<int>("Quicktime Events", "Drop Chance", 50, new ConfigDescription("Chance of triggering the dropping quicktime event every quicktime interval", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			quicktimeEventIntervalMin = cfg.Bind<float>("Quicktime Events", "Minimum Interval", 5f, "Minimum time holding the item before the quicktime event could possibly trigger (randomised between min and max interval)");
			quicktimeEventIntervalMax = cfg.Bind<float>("Quicktime Events", "Maximum Interval", 25f, "Maximum time holding the item before the quicktime event could possibly trigger (randomised between min and max interval)");
			marioHealth = cfg.Bind<int>("Mario", "Health", 10, new ConfigDescription("How much health should mario have", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 9999), Array.Empty<object>()));
			marioSearchSpeed = cfg.Bind<float>("Mario", "Search Speed", 2.5f, new ConfigDescription("How fast should Mario move whilst searching?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 15f), Array.Empty<object>()));
			marioChaseSpeed = cfg.Bind<float>("Mario", "Chase Speed", 3.3f, new ConfigDescription("How fast should Mario move whilst chasing a player?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 20f), Array.Empty<object>()));
			marioChaseMusicVolume = cfg.Bind<float>("Mario", "Chase Music Volume", 0.8f, new ConfigDescription("How loud should the chase music be? (0 to turn it off)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			marioDamagePerHit = cfg.Bind<int>("Mario", "Mario Damage", 45, new ConfigDescription("How much damage should be dealt when hit by Mario's Punch?", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			marioMaxHearableDistSfx = cfg.Bind<int>("Mario", "Sound Effect Distance", 40, new ConfigDescription("How many units should mario's sound effects travel?", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			marioMaxHearableDistChaseMusic = cfg.Bind<int>("Mario", "Chase Music Distance", 30, new ConfigDescription("How many units should mario's chase music travel?", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			marioMaxCount = cfg.Bind<int>("Mario", "Max Count", 2, new ConfigDescription("Max number of Mario's that can be active each round", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 5), Array.Empty<object>()));
			marioPowerLevel = cfg.Bind<int>("Mario", "Power Level", 2, new ConfigDescription("How much should Mario contribute to the rounds max power level? (for reference, 1 is the power level of a hoarding bug, 3 is a thumper)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 5), Array.Empty<object>()));
			minNumOfMushroomsToSpawn = cfg.Bind<int>("Mario", "Min Number of Mushrooms to Spawn", 1, new ConfigDescription("How many mushrooms should Mario spawn on death at minimum?)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 10), Array.Empty<object>()));
			maxNumOfMushroomsToSpawn = cfg.Bind<int>("Mario", "Max Number of Mushrooms to Spawn", 3, new ConfigDescription("How many mushrooms should Mario spawn on death at maximum?)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(minNumOfMushroomsToSpawn.Value, 10), Array.Empty<object>()));
			miniNukeExplodeChance = cfg.Bind<int>("Mini Nuke", "Explosion Chance (0-100)", 2, new ConfigDescription("Chance for the explosion procedure to be triggered", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			timeBetweenBombActivationChecksMax = cfg.Bind<float>("Mini Nuke", "Activation Check Timer", 10f, "Max time for the bomb to check if it should explode (random between 0 and this value)");
			nukeDetonationTime = cfg.Bind<float>("Mini Nuke", "How Long It Takes The Nuke To Explode", 6.5f, "Once the bomb is activated, how long it will take before it explodes");
			miniNukeBeepingVolume = cfg.Bind<float>("Mini Nuke", "Beeping Volume", 1f, new ConfigDescription("How loud should this audio be?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			miniNukeExplosionVolume = cfg.Bind<float>("Mini Nuke", "Explosion Volume", 1f, new ConfigDescription("How loud should this audio be?", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
			randomiseSize = cfg.Bind<bool>("Randomize Size", "Enable Size Randomisation?", false, "Randomizes item sizes and scales their weight and value accordingly");
			minRandomisedSize = cfg.Bind<float>("Randomize Size", "Minimum Randomised Size Modifier", 0.25f, new ConfigDescription("Minimum value the size can randomise to", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
			maxRandomisedSize = cfg.Bind<float>("Randomize Size", "Maximum Randomised Size Modifier", 3f, new ConfigDescription("Maximum value the size can randomise to", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()));
			ClearOrphanedEntries(cfg);
			cfg.Save();
			cfg.SaveOnConfigSet = true;
		}

		private static void ClearOrphanedEntries(ConfigFile cfg)
		{
			PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
			Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg);
			dictionary.Clear();
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "ReindogFan1372.ReindogDLL";

		public const string PLUGIN_NAME = "ReindogDLL";

		public const string PLUGIN_VERSION = "1.1.2";
	}
}
namespace ReindogDLL.Patches
{
	[HarmonyPatch(typeof(GrabbableObject))]
	public class ConfigSetter
	{
		[HarmonyPatch("Start")]
		[HarmonyPrefix]
		private static bool SetConfigs2(GrabbableObject __instance)
		{
			if (ReindogDLL.ReindogAndFriendsModConfig.randomiseSize.Value)
			{
				RandomiseSize(__instance);
			}
			return true;
		}

		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void SetConfigs(GrabbableObject __instance)
		{
			ConfigSetterUtilities.SetAudioSourceVolumes(__instance);
		}

		private static void RandomiseSize(GrabbableObject objectToSet)
		{
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			if (((NetworkBehaviour)objectToSet).IsServer || ((NetworkBehaviour)objectToSet).IsHost)
			{
				float num = Random.Range(ReindogDLL.ReindogAndFriendsModConfig.minRandomisedSize.Value, ReindogDLL.ReindogAndFriendsModConfig.maxRandomisedSize.Value);
				Item itemProperties = Object.Instantiate<Item>(objectToSet.itemProperties);
				objectToSet.itemProperties = itemProperties;
				Transform transform = ((Component)objectToSet).transform;
				transform.localScale *= num;
				objectToSet.SetScrapValue((int)((float)objectToSet.scrapValue * num));
				objectToSet.itemProperties.weight = (objectToSet.itemProperties.weight - 1f) * num + 1f;
				RpcCaller.SyncSizeClientRpc(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)objectToSet), num);
			}
		}
	}
	[StaticNetcode]
	internal static class RpcCaller
	{
		[ServerRpc]
		public static void SyncSizeServerRpc(NetworkBehaviourReference objectToSet, float modifierValue)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			SyncSizeClientRpc(objectToSet, modifierValue);
		}

		[ClientRpc]
		public static void SyncSizeClientRpc(NetworkBehaviourReference objectToSet, float modifierValue)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			GrabbableObject val = (GrabbableObject)NetworkBehaviourReference.op_Implicit(objectToSet);
			if (!((NetworkBehaviour)val).IsServer && !((NetworkBehaviour)val).IsHost)
			{
				Item itemProperties = Object.Instantiate<Item>(val.itemProperties);
				val.itemProperties = itemProperties;
				Transform transform = ((Component)val).transform;
				transform.localScale *= modifierValue;
				val.SetScrapValue((int)((float)val.scrapValue * modifierValue));
				val.itemProperties.weight = (val.itemProperties.weight - 1f) * modifierValue + 1f;
			}
		}
	}
	internal static class ConfigSetterUtilities
	{
		internal static void SetAudioSourceVolumes(GrabbableObject objectToSet)
		{
			float genericVolumeConfig = ReindogDLL.GetGenericVolumeConfig(objectToSet.itemProperties.itemName);
			if (genericVolumeConfig != -1f)
			{
				((Component)objectToSet).GetComponent<AudioSource>().volume = genericVolumeConfig;
				Transform val = ((Component)objectToSet).transform.Find("FarAudio");
				AudioSource val2 = default(AudioSource);
				if (!((Object)(object)val == (Object)null) && ((Component)val).TryGetComponent<AudioSource>(ref val2))
				{
					val2.volume = genericVolumeConfig;
				}
			}
		}
	}
	[HarmonyPatch(typeof(PlayerControllerB))]
	public class PlayerItemAudioFixer
	{
		private static float itemAudioDefaultVolume = 0.63f;

		[HarmonyPatch("Awake")]
		[HarmonyPostfix]
		private static void SetDefaultVolume(PlayerControllerB __instance)
		{
			itemAudioDefaultVolume = __instance.itemAudio.volume;
		}

		[HarmonyPatch("BeginGrabObject")]
		[HarmonyPostfix]
		private static void GrabObjectPostfix(PlayerControllerB __instance)
		{
			if ((Object)(object)__instance.currentlyHeldObjectServer == (Object)null)
			{
				__instance.itemAudio.volume = itemAudioDefaultVolume;
				return;
			}
			float genericVolumeConfig = ReindogDLL.GetGenericVolumeConfig(__instance.currentlyHeldObjectServer.itemProperties.itemName);
			if (genericVolumeConfig == -1f)
			{
				__instance.itemAudio.volume = itemAudioDefaultVolume;
			}
			else
			{
				__instance.itemAudio.volume = itemAudioDefaultVolume * genericVolumeConfig;
			}
		}

		[HarmonyPatch("GrabObjectClientRpc")]
		[HarmonyPrefix]
		private static bool GrabObjectClientRpcPrefix(bool grabValidated, ref NetworkObjectReference grabbedObject, PlayerControllerB __instance)
		{
			NetworkObject val = default(NetworkObject);
			if (!((NetworkObjectReference)(ref grabbedObject)).TryGet(ref val, (NetworkManager)null))
			{
				__instance.itemAudio.volume = itemAudioDefaultVolume;
				return true;
			}
			float genericVolumeConfig = ReindogDLL.GetGenericVolumeConfig(((Component)val).gameObject.GetComponentInChildren<GrabbableObject>().itemProperties.itemName);
			if (genericVolumeConfig == -1f)
			{
				__instance.itemAudio.volume = itemAudioDefaultVolume;
				return true;
			}
			__instance.itemAudio.volume = itemAudioDefaultVolume * genericVolumeConfig;
			return true;
		}
	}
	public class ExplosiveItem : GrabbableObject
	{
		private enum BombState
		{
			Inate,
			PreparingToExplode,
			Sizzling,
			Exploding
		}

		private float timer = 0f;

		[SerializeField]
		private AudioSource bombAudioSource;

		[SerializeField]
		private AudioClip explosionClip;

		[SerializeField]
		private AudioClip sizzleClip;

		private BombState bombState;

		private float timeBetweenActivationChecks;

		private float bombActivationCheckTimer = 0f;

		private float playerHoldingObjectHealthLastFrame = 100f;

		private Random noiseRandomSeed;

		[SerializeField]
		private float noiseRange = 80f;

		private float minLoudness = 0.95f;

		private float maxLoudness = 1f;

		private void Awake()
		{
			bombState = BombState.Inate;
			timeBetweenActivationChecks = Random.Range(0f, ReindogDLL.ReindogAndFriendsModConfig.timeBetweenBombActivationChecksMax.Value);
		}

		public override void Start()
		{
			((GrabbableObject)this).Start();
			noiseRandomSeed = new Random(StartOfRound.Instance.randomMapSeed + 85);
		}

		public override void Update()
		{
			Explosive();
			((GrabbableObject)this).Update();
		}

		private void Explosive()
		{
			if ((!((NetworkBehaviour)this).IsServer && !((NetworkBehaviour)this).IsHost) || !StartOfRound.Instance.shipHasLanded)
			{
				return;
			}
			if ((base.isHeld || base.isPocketed) && bombState == BombState.Inate)
			{
				bombActivationCheckTimer += Time.deltaTime;
				if (bombActivationCheckTimer >= timeBetweenActivationChecks)
				{
					bombActivationCheckTimer = 0f;
					timeBetweenActivationChecks = Random.Range(0f, ReindogDLL.ReindogAndFriendsModConfig.timeBetweenBombActivationChecksMax.Value);
					if (Random.Range(0, 101) <= ReindogDLL.ReindogAndFriendsModConfig.miniNukeExplodeChance.Value)
					{
						bombState = BombState.PreparingToExplode;
					}
				}
				if ((float)base.playerHeldBy.health < playerHoldingObjectHealthLastFrame)
				{
					bombState = BombState.PreparingToExplode;
				}
				playerHoldingObjectHealthLastFrame = base.playerHeldBy.health;
			}
			if (bombState == BombState.PreparingToExplode)
			{
				timer += Time.deltaTime;
				if (timer > ReindogDLL.ReindogAndFriendsModConfig.nukeDetonationTime.Value - sizzleClip.length)
				{
					bombState = BombState.Sizzling;
					PlaySizzleSoundClientRpc();
				}
			}
			if (bombState == BombState.Sizzling)
			{
				timer += Time.deltaTime;
				if (timer > ReindogDLL.ReindogAndFriendsModConfig.nukeDetonationTime.Value)
				{
					bombActivationCheckTimer = 0f;
					timer = 0f;
					bombState = BombState.Inate;
					ExplodeBombClientRpc();
				}
			}
		}

		[ClientRpc]
		private void PlaySizzleSoundClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(148881451u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 148881451u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				bombAudioSource.PlayOneShot(sizzleClip, ReindogDLL.ReindogAndFriendsModConfig.miniNukeBeepingVolume.Value);
				float num = (float)noiseRandomSeed.Next((int)(minLoudness * 100f), (int)(maxLoudness * 100f)) / 100f;
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange, num, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
				if (minLoudness >= 0.5f && (Object)(object)base.playerHeldBy != (Object)null)
				{
					base.playerHeldBy.timeSinceMakingLoudNoise = 0f;
				}
			}
		}

		[ClientRpc]
		private void ExplodeBombClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: 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_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_027d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(715212118u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 715212118u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				bombAudioSource.PlayOneShot(explosionClip, ReindogDLL.ReindogAndFriendsModConfig.miniNukeExplosionVolume.Value);
				float num = (float)noiseRandomSeed.Next((int)(minLoudness * 100f), (int)(maxLoudness * 100f)) / 100f;
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange, num, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
				if (minLoudness >= 0.5f && (Object)(object)base.playerHeldBy != (Object)null)
				{
					base.playerHeldBy.timeSinceMakingLoudNoise = 0f;
				}
				Landmine.SpawnExplosion(((Component)this).transform.position + Vector3.up, true, 10f, 12.5f, 50, 0f, (GameObject)null, false);
				Landmine.SpawnExplosion(((Component)this).transform.position + Vector3.up + new Vector3(5.5f, 0f, 0f), true, 10f, 12.5f, 50, 0f, (GameObject)null, false);
				Landmine.SpawnExplosion(((Component)this).transform.position + Vector3.up + new Vector3(-5.5f, 0f, 0f), true, 10f, 12.5f, 50, 0f, (GameObject)null, false);
				Landmine.SpawnExplosion(((Component)this).transform.position + Vector3.up + new Vector3(0f, 0f, 5.5f), true, 10f, 12.5f, 50, 0f, (GameObject)null, false);
				Landmine.SpawnExplosion(((Component)this).transform.position + Vector3.up + new Vector3(0f, 0f, -5.5f), true, 10f, 12.5f, 50, 0f, (GameObject)null, false);
				((GrabbableObject)this).DestroyObjectInHand(base.playerHeldBy);
			}
		}

		protected override void __initializeVariables()
		{
			((GrabbableObject)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_ExplosiveItem()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(148881451u, new RpcReceiveHandler(__rpc_handler_148881451));
			NetworkManager.__rpc_func_table.Add(715212118u, new RpcReceiveHandler(__rpc_handler_715212118));
		}

		private static void __rpc_handler_148881451(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ExplosiveItem)(object)target).PlaySizzleSoundClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_715212118(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((ExplosiveItem)(object)target).ExplodeBombClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		protected internal override string __getTypeName()
		{
			return "ExplosiveItem";
		}
	}
	public class Frieza : GrabbableObject
	{
		[SerializeField]
		private AudioSource audio;

		[SerializeField]
		private AudioClip brolyLook;

		[SerializeField]
		private AudioClip vineBoom;

		[SerializeField]
		private uint chance = 2u;

		[SerializeField]
		private float timeBetweenActivationChecksMax = 1f;

		private float timeBetweenActivationChecks;

		private float checkTimer = 0f;

		[SerializeField]
		private Sprite[] sprites;

		[SerializeField]
		private GameObject uiCanvasPrefab;

		private GameObject uiCanvas;

		private Image imageOnCanvas;

		private bool isOnCooldown = false;

		private float cooldownTime = 5f;

		private PlayerControllerB playerWhoTriggeredFrieza;

		private Random noiseRandomSeed;

		[SerializeField]
		private float noiseRange = 70f;

		private float minLoudness = 0.99f;

		private float maxLoudness = 1f;

		private void Awake()
		{
			timeBetweenActivationChecks = Random.Range(0f, timeBetweenActivationChecksMax);
		}

		public override void Start()
		{
			((GrabbableObject)this).Start();
			noiseRandomSeed = new Random(StartOfRound.Instance.randomMapSeed + 85);
		}

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			uiCanvas = Object.Instantiate<GameObject>(uiCanvasPrefab);
			uiCanvas.SetActive(false);
			imageOnCanvas = uiCanvas.GetComponentInChildren<Image>();
		}

		public override void Update()
		{
			DoFriezaChecks();
			((GrabbableObject)this).Update();
		}

		private void DoFriezaChecks()
		{
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: 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_00fc: 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_0101: Unknown result type (might be due to invalid IL or missing references)
			if ((!((NetworkBehaviour)this).IsServer && !((NetworkBehaviour)this).IsHost) || (!base.isHeld && !base.isPocketed) || isOnCooldown)
			{
				return;
			}
			checkTimer += Time.deltaTime;
			if (checkTimer >= timeBetweenActivationChecks)
			{
				checkTimer = 0f;
				timeBetweenActivationChecks = Random.Range(0f, timeBetweenActivationChecksMax);
				if (Random.Range(0, 101) <= chance)
				{
					isOnCooldown = true;
					((MonoBehaviour)this).Invoke("ResetCooldown", cooldownTime);
					ActivateFriezaAudioBrolyLookClientRpc();
					ClientRpcParams val = default(ClientRpcParams);
					val.Send = new ClientRpcSendParams
					{
						TargetClientIds = new ulong[1] { base.playerHeldBy.actualClientId }
					};
					ClientRpcParams clientRpcParams = val;
					DisplayImageClientRpc(clientRpcParams);
				}
			}
		}

		[ClientRpc]
		private void ActivateFriezaAudioBrolyLookClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3762915186u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3762915186u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				audio.PlayOneShot(brolyLook);
				float num = (float)noiseRandomSeed.Next((int)(minLoudness * 100f), (int)(maxLoudness * 100f)) / 100f;
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange, num, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
				if (minLoudness >= 0.5f && (Object)(object)base.playerHeldBy != (Object)null)
				{
					base.playerHeldBy.timeSinceMakingLoudNoise = 0f;
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void ActivateFriezaAudioVineBoomServerRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2223191387u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2223191387u, val, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ActivateFriezaAudioVineBoomClientRpc();
				}
			}
		}

		[ClientRpc]
		private void ActivateFriezaAudioVineBoomClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(500400452u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 500400452u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				audio.PlayOneShot(vineBoom);
				float num = (float)noiseRandomSeed.Next((int)(minLoudness * 100f), (int)(maxLoudness * 100f)) / 100f;
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange, num, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
				if (minLoudness >= 0.5f && (Object)(object)base.playerHeldBy != (Object)null)
				{
					base.playerHeldBy.timeSinceMakingLoudNoise = 0f;
				}
			}
		}

		[ClientRpc]
		private void DisplayImageClientRpc(ClientRpcParams clientRpcParams = default(ClientRpcParams))
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(1545275795u, clientRpcParams, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val, 1545275795u, clientRpcParams, (RpcDelivery)0);
				}
				if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
				{
					((MonoBehaviour)this).StartCoroutine(FriezaActivated());
				}
			}
		}

		private IEnumerator FriezaActivated()
		{
			playerWhoTriggeredFrieza = base.playerHeldBy;
			yield return (object)new WaitForSeconds(brolyLook.length - 0.1f);
			imageOnCanvas.sprite = sprites[Random.Range(0, sprites.Length)];
			uiCanvas.SetActive(true);
			Color imageColor = ((Graphic)imageOnCanvas).color;
			imageColor.a = 0f;
			float fadeTime = 0.15f;
			float timePassed2 = 0f;
			ActivateFriezaAudioVineBoomServerRpc();
			playerWhoTriggeredFrieza.JumpToFearLevel(0.9f, true);
			while (imageColor.a < 0.95f)
			{
				timePassed2 += Time.deltaTime;
				imageColor.a = Mathf.Lerp(imageColor.a, 1f, timePassed2 / fadeTime);
				((Graphic)imageOnCanvas).color = imageColor;
				yield return (object)new WaitForSeconds(Time.deltaTime);
			}
			timePassed2 = 0f;
			imageColor.a = 1f;
			((Graphic)imageOnCanvas).color = imageColor;
			yield return (object)new WaitForSeconds(0.3f);
			while ((double)imageColor.a > 0.05)
			{
				timePassed2 += Time.deltaTime;
				imageColor.a = Mathf.Lerp(imageColor.a, 0f, timePassed2 / fadeTime);
				((Graphic)imageOnCanvas).color = imageColor;
				yield return (object)new WaitForSeconds(Time.deltaTime);
			}
			imageColor.a = 0f;
			((Graphic)imageOnCanvas).color = imageColor;
			uiCanvas.SetActive(false);
		}

		private void ResetCooldown()
		{
			isOnCooldown = false;
		}

		protected override void __initializeVariables()
		{
			((GrabbableObject)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_Frieza()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: 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
			NetworkManager.__rpc_func_table.Add(3762915186u, new RpcReceiveHandler(__rpc_handler_3762915186));
			NetworkManager.__rpc_func_table.Add(2223191387u, new RpcReceiveHandler(__rpc_handler_2223191387));
			NetworkManager.__rpc_func_table.Add(500400452u, new RpcReceiveHandler(__rpc_handler_500400452));
			NetworkManager.__rpc_func_table.Add(1545275795u, new RpcReceiveHandler(__rpc_handler_1545275795));
		}

		private static void __rpc_handler_3762915186(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((Frieza)(object)target).ActivateFriezaAudioBrolyLookClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2223191387(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((Frieza)(object)target).ActivateFriezaAudioVineBoomServerRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_500400452(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((Frieza)(object)target).ActivateFriezaAudioVineBoomClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1545275795(NetworkBehavio