Decompiled source of LostSinner v1.0.0

LostSinner.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using GlobalEnums;
using HarmonyLib;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using LostSinner.Behaviours;
using LostSinner.Patches;
using Microsoft.CodeAnalysis;
using TeamCherry.Localization;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Audio;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("LostSinner")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6b91eae8e7ea04d7b25692e43616aec33da3803d")]
[assembly: AssemblyProduct("LostSinner")]
[assembly: AssemblyTitle("LostSinner")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.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;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace LostSinner
{
	internal static class AssetManager
	{
		[CompilerGenerated]
		private sealed class <>c__DisplayClass5_0
		{
			public string assetPath;

			internal bool <Initialize>b__0(string objName)
			{
				return assetPath.Contains(objName);
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass8_0
		{
			public string bundleName;

			internal bool <ManuallyLoadBundles>b__0(AssetBundle bundle)
			{
				return ((Object)bundle).name == bundleName;
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass8_1
		{
			public AssetBundleRequest assetLoadRequest;

			internal void <ManuallyLoadBundles>b__1(AsyncOperation _)
			{
				Object asset = assetLoadRequest.asset;
				GameObject val = (GameObject)(object)((asset is GameObject) ? asset : null);
				if (val != null && asset.name == "Lost Lace Ground Tendril")
				{
					ConstrainPosition component = val.GetComponent<ConstrainPosition>();
					component.xMax = 100f;
					component.yMin = 0f;
					component.yMax = 100f;
					FsmState[] fsmStates = FSMUtility.LocateMyFSM(val, "Control").FsmStates;
					foreach (FsmState val2 in fsmStates)
					{
						if (val2.Name == "Antic")
						{
							FsmStateAction[] actions = val2.Actions;
							FsmStateAction[] array = actions;
							foreach (FsmStateAction val3 in array)
							{
								SetFloatValue val4 = (SetFloatValue)(object)((val3 is SetFloatValue) ? val3 : null);
								if (val4 == null)
								{
									EaseFloat val5 = (EaseFloat)(object)((val3 is EaseFloat) ? val3 : null);
									if (val5 != null)
									{
										val5.fromValue.Value = 11f;
										val5.toValue.Value = 13f;
									}
								}
								else
								{
									val4.floatValue.Value = 11f;
								}
							}
							val2.Actions = actions;
						}
						else
						{
							if (!(val2.Name == "Recycle"))
							{
								continue;
							}
							FsmStateAction[] actions2 = val2.Actions;
							FsmStateAction[] array = actions2;
							foreach (FsmStateAction obj in array)
							{
								SetPosition2D val6 = (SetPosition2D)(object)((obj is SetPosition2D) ? obj : null);
								if (val6 != null)
								{
									val6.Y.Value = 11f;
								}
							}
							val2.Actions = actions2;
						}
					}
				}
				AssetManager.TryAdd<Object>(asset);
			}
		}

		[CompilerGenerated]
		private sealed class <Initialize>d__5 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			private IEnumerator<AssetBundle> <>7__wrap1;

			private AssetBundle <bundle>5__3;

			private string[] <>7__wrap3;

			private int <>7__wrap4;

			private AssetBundleRequest <assetLoadHandle>5__6;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <Initialize>d__5(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				int num = <>1__state;
				if (num == -3 || num == 1)
				{
					try
					{
					}
					finally
					{
						<>m__Finally1();
					}
				}
				<>7__wrap1 = null;
				<bundle>5__3 = null;
				<>7__wrap3 = null;
				<assetLoadHandle>5__6 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				try
				{
					int num = <>1__state;
					if (num != 0)
					{
						if (num != 1)
						{
							return false;
						}
						<>1__state = -3;
						Object asset = <assetLoadHandle>5__6.asset;
						if (asset != (Object)null)
						{
							AssetManager.TryAdd<Object>(asset);
						}
						<assetLoadHandle>5__6 = null;
						goto IL_010a;
					}
					<>1__state = -1;
					if (_initialized)
					{
						return false;
					}
					_initialized = true;
					<>7__wrap1 = AssetBundle.GetAllLoadedAssetBundles().GetEnumerator();
					<>1__state = -3;
					goto IL_0139;
					IL_0139:
					if (<>7__wrap1.MoveNext())
					{
						<bundle>5__3 = <>7__wrap1.Current;
						<>7__wrap3 = <bundle>5__3.GetAllAssetNames();
						<>7__wrap4 = 0;
						goto IL_0118;
					}
					<>m__Finally1();
					<>7__wrap1 = null;
					return false;
					IL_010a:
					<>7__wrap4++;
					goto IL_0118;
					IL_0118:
					if (<>7__wrap4 < <>7__wrap3.Length)
					{
						<>c__DisplayClass5_0 CS$<>8__locals0 = new <>c__DisplayClass5_0
						{
							assetPath = <>7__wrap3[<>7__wrap4]
						};
						if (_assetNames.Any((string objName) => CS$<>8__locals0.assetPath.Contains(objName)))
						{
							<assetLoadHandle>5__6 = <bundle>5__3.LoadAssetAsync(CS$<>8__locals0.assetPath);
							<>2__current = <assetLoadHandle>5__6;
							<>1__state = 1;
							return true;
						}
						goto IL_010a;
					}
					<>7__wrap3 = null;
					<bundle>5__3 = null;
					goto IL_0139;
				}
				catch
				{
					//try-fault
					((IDisposable)this).Dispose();
					throw;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			private void <>m__Finally1()
			{
				<>1__state = -1;
				if (<>7__wrap1 != null)
				{
					<>7__wrap1.Dispose();
				}
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <ManuallyLoadBundles>d__8 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			private string[] <>7__wrap1;

			private int <>7__wrap2;

			private AssetBundleCreateRequest <bundleLoadRequest>5__4;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <ManuallyLoadBundles>d__8(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>7__wrap1 = null;
				<bundleLoadRequest>5__4 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0065: Unknown result type (might be due to invalid IL or missing references)
				//IL_006a: Unknown result type (might be due to invalid IL or missing references)
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_006f: Invalid comparison between Unknown and I4
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Invalid comparison between Unknown and I4
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Invalid comparison between Unknown and I4
				int num = <>1__state;
				if (num != 0)
				{
					if (num != 1)
					{
						return false;
					}
					<>1__state = -1;
					AssetBundle assetBundle = <bundleLoadRequest>5__4.assetBundle;
					_manuallyLoadedBundles.Add(assetBundle);
					string[] allAssetNames = assetBundle.GetAllAssetNames();
					foreach (string text in allAssetNames)
					{
						string[] assetNames = _assetNames;
						foreach (string value in assetNames)
						{
							if (!text.Contains(value))
							{
								continue;
							}
							<>c__DisplayClass8_1 CS$<>8__locals1 = new <>c__DisplayClass8_1
							{
								assetLoadRequest = assetBundle.LoadAssetAsync(text)
							};
							((AsyncOperation)CS$<>8__locals1.assetLoadRequest).completed += delegate
							{
								Object asset = CS$<>8__locals1.assetLoadRequest.asset;
								GameObject val = (GameObject)(object)((asset is GameObject) ? asset : null);
								if (val != null && asset.name == "Lost Lace Ground Tendril")
								{
									ConstrainPosition component = val.GetComponent<ConstrainPosition>();
									component.xMax = 100f;
									component.yMin = 0f;
									component.yMax = 100f;
									FsmState[] fsmStates = FSMUtility.LocateMyFSM(val, "Control").FsmStates;
									foreach (FsmState val2 in fsmStates)
									{
										if (val2.Name == "Antic")
										{
											FsmStateAction[] actions = val2.Actions;
											FsmStateAction[] array = actions;
											foreach (FsmStateAction val3 in array)
											{
												SetFloatValue val4 = (SetFloatValue)(object)((val3 is SetFloatValue) ? val3 : null);
												if (val4 == null)
												{
													EaseFloat val5 = (EaseFloat)(object)((val3 is EaseFloat) ? val3 : null);
													if (val5 != null)
													{
														val5.fromValue.Value = 11f;
														val5.toValue.Value = 13f;
													}
												}
												else
												{
													val4.floatValue.Value = 11f;
												}
											}
											val2.Actions = actions;
										}
										else if (val2.Name == "Recycle")
										{
											FsmStateAction[] actions2 = val2.Actions;
											FsmStateAction[] array = actions2;
											foreach (FsmStateAction obj in array)
											{
												SetPosition2D val6 = (SetPosition2D)(object)((obj is SetPosition2D) ? obj : null);
												if (val6 != null)
												{
													val6.Y.Value = 11f;
												}
											}
											val2.Actions = actions2;
										}
									}
								}
								AssetManager.TryAdd<Object>(asset);
							};
						}
					}
					<bundleLoadRequest>5__4 = null;
					goto IL_0186;
				}
				<>1__state = -1;
				<>7__wrap1 = _bundleNames;
				<>7__wrap2 = 0;
				goto IL_0194;
				IL_0186:
				<>7__wrap2++;
				goto IL_0194;
				IL_0194:
				if (<>7__wrap2 < <>7__wrap1.Length)
				{
					<>c__DisplayClass8_0 CS$<>8__locals0 = new <>c__DisplayClass8_0
					{
						bundleName = <>7__wrap1[<>7__wrap2]
					};
					if (!AssetBundle.GetAllLoadedAssetBundles().Any((AssetBundle bundle) => ((Object)bundle).name == CS$<>8__locals0.bundleName))
					{
						RuntimePlatform platform = Application.platform;
						string text2 = (((int)platform == 1) ? "StandaloneOSX" : (((int)platform == 2) ? "StandaloneWindows64" : (((int)platform != 13) ? "" : "StandaloneLinux64")));
						string path = text2;
						string text3 = Path.Combine(Addressables.RuntimePath, path, CS$<>8__locals0.bundleName + ".bundle");
						<bundleLoadRequest>5__4 = AssetBundle.LoadFromFileAsync(text3);
						<>2__current = <bundleLoadRequest>5__4;
						<>1__state = 1;
						return true;
					}
					goto IL_0186;
				}
				<>7__wrap1 = null;
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private static string[] _bundleNames = new string[1] { "localpoolprefabs_assets_laceboss" };

		private static List<AssetBundle> _manuallyLoadedBundles = new List<AssetBundle>();

		private static string[] _assetNames = new string[4] { "Abyss Vomit Glob", "Audio Player Actor Simple", "Lost Lace Ground Tendril", "mini_mawlek_spit" };

		private static readonly Dictionary<Type, Dictionary<string, Object>> Assets = new Dictionary<Type, Dictionary<string, Object>>();

		private static bool _initialized;

		[IteratorStateMachine(typeof(<Initialize>d__5))]
		internal static IEnumerator Initialize()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <Initialize>d__5(0);
		}

		private static void TryAdd<T>(T asset) where T : Object
		{
			string name = ((Object)asset).name;
			if (Has(name))
			{
				Log.Warn("Asset \"" + ((Object)asset).name + "\" has already been loaded!");
				return;
			}
			Type type = ((object)asset).GetType();
			if (Assets.ContainsKey(type))
			{
				Dictionary<string, Object> dictionary = Assets[type];
				if (dictionary != null)
				{
					if (dictionary.ContainsKey(name))
					{
						if (dictionary[name] != (Object)null)
						{
							Log.Warn($"There is already an asset \"{name}\" of type \"{type}\"!");
							return;
						}
						Log.Info($"Key \"{name}\" for sub-dictionary of type \"{type}\" exists, but its value is null; Replacing with new asset...");
						Assets[type][name] = (Object)(object)asset;
					}
					else
					{
						Log.Debug($"Adding asset \"{name}\" of type \"{type}\".");
						Assets[type].Add(name, (Object)(object)asset);
					}
				}
				else
				{
					Log.Error($"Failed to get sub-dictionary of type \"{type}\"!");
					Assets.Add(type, new Dictionary<string, Object>());
				}
			}
			else
			{
				Assets.Add(type, new Dictionary<string, Object> { [name] = (Object)(object)asset });
				Log.Debug($"Added new sub-dictionary of type \"{type}\" with initial asset \"{name}\".");
			}
		}

		internal static void LoadTextures()
		{
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_0070: Expected O, but got Unknown
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			string[] manifestResourceNames = executingAssembly.GetManifestResourceNames();
			foreach (string text in manifestResourceNames)
			{
				using Stream stream = executingAssembly.GetManifestResourceStream(text);
				if (stream != null)
				{
					byte[] array = new byte[stream.Length];
					stream.Read(array, 0, array.Length);
					Texture2D val = new Texture2D(2, 2);
					string name = text.Split('.')[^2];
					((Object)val).name = name;
					ImageConversion.LoadImage(val, array);
					TryAdd<Texture2D>(val);
				}
			}
		}

		[IteratorStateMachine(typeof(<ManuallyLoadBundles>d__8))]
		internal static IEnumerator ManuallyLoadBundles()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <ManuallyLoadBundles>d__8(0);
		}

		internal static void UnloadAll()
		{
			foreach (Dictionary<string, Object> value in Assets.Values)
			{
				foreach (Object value2 in value.Values)
				{
					Object.DestroyImmediate(value2);
				}
			}
			Assets.Clear();
			GC.Collect();
		}

		internal static void UnloadManualBundles()
		{
			foreach (AssetBundle manuallyLoadedBundle in _manuallyLoadedBundles)
			{
				string bundleName = ((Object)manuallyLoadedBundle).name;
				((AsyncOperation)manuallyLoadedBundle.UnloadAsync(true)).completed += delegate
				{
					Log.Info("Successfully unloaded bundle \"" + bundleName + "\"");
				};
			}
			_manuallyLoadedBundles.Clear();
			foreach (KeyValuePair<string, Object> item in Assets[typeof(GameObject)])
			{
				item.Deconstruct(out var _, out var value);
				GameObject val = (GameObject)(object)((value is GameObject) ? value : null);
				if (val != null && val.activeSelf)
				{
					Log.Info("Recycling all instances of prefab \"" + ((Object)val).name + "\"");
					ObjectPoolExtensions.RecycleAll(val);
				}
			}
		}

		private static bool Has(string assetName)
		{
			foreach (KeyValuePair<Type, Dictionary<string, Object>> asset in Assets)
			{
				asset.Deconstruct(out var _, out var value);
				foreach (var (text2, val2) in value)
				{
					if (assetName == text2 && Object.op_Implicit(val2))
					{
						return true;
					}
				}
			}
			return false;
		}

		internal static T? Get<T>(string assetName) where T : Object
		{
			Type typeFromHandle = typeof(T);
			if (Assets.ContainsKey(typeFromHandle))
			{
				Dictionary<string, Object> dictionary = Assets[typeFromHandle];
				if (dictionary != null)
				{
					if (dictionary.ContainsKey(assetName))
					{
						Object val = dictionary[assetName];
						if (val != (Object)null)
						{
							return (T)(object)((val is T) ? val : null);
						}
						Log.Error("Failed to get asset \"" + assetName + "\"; asset is null!");
						return default(T);
					}
					Log.Error($"Sub-dictionary for type \"{typeFromHandle}\" does not contain key \"{assetName}\"!");
					return default(T);
				}
				Log.Error($"Failed to get asset \"{assetName}\"; sub-dictionary of key \"{typeFromHandle}\" is null!");
				return default(T);
			}
			Log.Error($"Could not find a sub-dictionary of type \"{typeFromHandle}\"!");
			return default(T);
		}
	}
	public class InvokeCoroutine : FsmStateAction
	{
		[CompilerGenerated]
		private sealed class <Coroutine>d__3 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public InvokeCoroutine <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <Coroutine>d__3(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				int num = <>1__state;
				InvokeCoroutine invokeCoroutine = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = invokeCoroutine._coroutine();
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					((FsmStateAction)invokeCoroutine).Finish();
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private readonly Func<IEnumerator> _coroutine;

		private readonly bool _wait;

		public InvokeCoroutine(Func<IEnumerator> coroutine, bool wait)
		{
			_coroutine = coroutine;
			_wait = wait;
		}

		[IteratorStateMachine(typeof(<Coroutine>d__3))]
		private IEnumerator Coroutine()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <Coroutine>d__3(0)
			{
				<>4__this = this
			};
		}

		public override void OnEnter()
		{
			((FsmStateAction)this).Fsm.Owner.StartCoroutine(_wait ? Coroutine() : _coroutine());
			if (!_wait)
			{
				((FsmStateAction)this).Finish();
			}
		}
	}
	public class InvokeMethod : FsmStateAction
	{
		private readonly Action _action;

		public InvokeMethod(Action action)
		{
			_action = action;
		}

		public override void OnEnter()
		{
			_action();
			((FsmStateAction)this).Finish();
		}
	}
	internal static class Log
	{
		private static ManualLogSource? _logSource;

		private static string LogPrefix => $"[{Assembly.GetExecutingAssembly().GetName().Version}] ";

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

		internal static void Debug(object debug)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogDebug((object)(LogPrefix + debug));
			}
		}

		internal static void Error(object error)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogError((object)(LogPrefix + error));
			}
		}

		internal static void Fatal(object fatal)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogFatal((object)(LogPrefix + fatal));
			}
		}

		internal static void Info(object info)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogInfo((object)(LogPrefix + info));
			}
		}

		internal static void Message(object message)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogMessage((object)(LogPrefix + message));
			}
		}

		internal static void Warn(object warning)
		{
			ManualLogSource? logSource = _logSource;
			if (logSource != null)
			{
				logSource.LogWarning((object)(LogPrefix + warning));
			}
		}
	}
	[BepInPlugin("LostSinner", "LostSinner", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		private static Harmony _harmony;

		private void Awake()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			AssetManager.LoadTextures();
			_harmony = new Harmony("LostSinner");
			MainPatches.Initialize();
			_harmony.PatchAll(typeof(MainPatches));
		}

		private void OnDestroy()
		{
			_harmony.UnpatchSelf();
			AssetManager.UnloadAll();
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "LostSinner";

		public const string PLUGIN_NAME = "LostSinner";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace LostSinner.Patches
{
	internal static class DebugPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(HeroController), "Awake")]
		private static void ForceInvincible()
		{
			CheatManager.Invincibility = (InvincibilityStates)3;
		}
	}
	internal static class MainPatches
	{
		[CompilerGenerated]
		private sealed class <UnpatchSinner>d__3 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public IEnumerator result;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <UnpatchSinner>d__3(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (result.MoveNext())
				{
					<>2__current = result.Current;
					<>1__state = 1;
					return true;
				}
				_harmony.UnpatchSelf();
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private static Harmony _harmony;

		internal static void Initialize()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			_harmony = new Harmony("MainPatches");
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameManager), "SetLoadedGameData", new Type[]
		{
			typeof(SaveGameData),
			typeof(int)
		})]
		private static void CheckPatchSinner(GameManager __instance)
		{
			__instance.GetSaveStatsForSlot(PlayerData.instance.profileID, (Action<SaveStats, string>)delegate(SaveStats saveStats, string _)
			{
				if (saveStats.IsAct3)
				{
					_harmony.PatchAll(typeof(SinnerPatches));
				}
			});
		}

		[IteratorStateMachine(typeof(<UnpatchSinner>d__3))]
		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameManager), "ReturnToMainMenu")]
		private static IEnumerator UnpatchSinner(IEnumerator result)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <UnpatchSinner>d__3(0)
			{
				result = result
			};
		}
	}
	internal static class SinnerPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(PlayMakerFSM), "Start")]
		private static void ModifySinner(PlayMakerFSM __instance)
		{
			if (((Object)__instance).name == "First Weaver" && __instance.FsmName == "Control" && ((Component)__instance).gameObject.layer == LayerMask.NameToLayer("Enemies"))
			{
				((Component)__instance).gameObject.AddComponent<Sinner>();
			}
			else if (((Object)__instance).name == "Pin Projectiles")
			{
				((Component)__instance).gameObject.AddComponent<PinProjectiles>();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Language), "Get", new Type[]
		{
			typeof(string),
			typeof(string)
		})]
		private static void ChangeSinnerTitle(string key, string sheetTitle, ref string __result)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Invalid comparison between Unknown and I4
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Invalid comparison between Unknown and I4
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Invalid comparison between Unknown and I4
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Invalid comparison between Unknown and I4
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Invalid comparison between Unknown and I4
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Invalid comparison between Unknown and I4
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Invalid comparison between Unknown and I4
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Invalid comparison between Unknown and I4
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Invalid comparison between Unknown and I4
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Invalid comparison between Unknown and I4
			string text2;
			LanguageCode val;
			string text;
			if (!(key == "FIRST_WEAVER_SUPER"))
			{
				if (key == "FIRST_WEAVER_SUB")
				{
					val = Language.CurrentLanguage();
					if ((int)val <= 82)
					{
						if ((int)val != 57)
						{
							if ((int)val != 82)
							{
								goto IL_00cf;
							}
							text = "Déchue";
						}
						else
						{
							text = "Perdida";
						}
					}
					else if ((int)val != 105)
					{
						if ((int)val != 147)
						{
							goto IL_00cf;
						}
						text = "Perdida";
					}
					else
					{
						text = "Perduta";
					}
					goto IL_00d2;
				}
				text2 = __result;
				goto IL_00d9;
			}
			val = Language.CurrentLanguage();
			if ((int)val <= 109)
			{
				if ((int)val != 37)
				{
					if ((int)val != 44)
					{
						if ((int)val != 109)
						{
							goto IL_0082;
						}
						text = "漆黒の";
					}
					else
					{
						text = "Lost";
					}
				}
				else
				{
					text = "Verlorene";
				}
			}
			else if ((int)val != 117)
			{
				if ((int)val != 154)
				{
					if ((int)val != 199)
					{
						goto IL_0082;
					}
					text = "失心";
				}
				else
				{
					text = "Пропащая";
				}
			}
			else
			{
				text = "광기에 빠진";
			}
			goto IL_0085;
			IL_00d2:
			text2 = text;
			goto IL_00d9;
			IL_00d9:
			__result = text2;
			return;
			IL_0082:
			text = __result;
			goto IL_0085;
			IL_00cf:
			text = __result;
			goto IL_00d2;
			IL_0085:
			text2 = text;
			goto IL_00d9;
		}
	}
}
namespace LostSinner.Behaviours
{
	internal class PinProjectiles : MonoBehaviour
	{
		private const int AdditionalPins = 32;

		private void Awake()
		{
			CreateMorePins();
			ModifyFsm();
		}

		private void CreateMorePins()
		{
			for (int i = 0; i < 32; i++)
			{
				Object.Instantiate<GameObject>(((Component)((Component)this).transform.GetChild(0)).gameObject, ((Component)this).transform);
			}
		}

		private void ModifyFsm()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_024e: 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_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_026f: Expected O, but got Unknown
			//IL_055a: Unknown result type (might be due to invalid IL or missing references)
			//IL_055f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0570: Unknown result type (might be due to invalid IL or missing references)
			//IL_0575: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02be: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: Expected O, but got Unknown
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03db: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c0: Expected O, but got Unknown
			//IL_05c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05cc: Expected O, but got Unknown
			//IL_05ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e3: Expected O, but got Unknown
			//IL_05e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_05eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0609: Expected O, but got Unknown
			//IL_060b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0610: Unknown result type (might be due to invalid IL or missing references)
			//IL_061d: Unknown result type (might be due to invalid IL or missing references)
			//IL_062a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0637: Expected O, but got Unknown
			//IL_0639: Unknown result type (might be due to invalid IL or missing references)
			//IL_063e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0645: Unknown result type (might be due to invalid IL or missing references)
			//IL_064d: Unknown result type (might be due to invalid IL or missing references)
			//IL_064e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0664: Expected O, but got Unknown
			//IL_0666: Unknown result type (might be due to invalid IL or missing references)
			//IL_066b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0672: Unknown result type (might be due to invalid IL or missing references)
			//IL_067f: Expected O, but got Unknown
			//IL_0681: Unknown result type (might be due to invalid IL or missing references)
			//IL_0686: Unknown result type (might be due to invalid IL or missing references)
			//IL_0687: Unknown result type (might be due to invalid IL or missing references)
			//IL_068c: Unknown result type (might be due to invalid IL or missing references)
			//IL_068e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0693: Unknown result type (might be due to invalid IL or missing references)
			//IL_069f: Expected O, but got Unknown
			//IL_069f: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b4: Expected O, but got Unknown
			//IL_0406: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0416: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Expected O, but got Unknown
			//IL_0430: Unknown result type (might be due to invalid IL or missing references)
			//IL_0435: Unknown result type (might be due to invalid IL or missing references)
			//IL_0445: Expected O, but got Unknown
			//IL_0447: Unknown result type (might be due to invalid IL or missing references)
			//IL_044c: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_046b: Expected O, but got Unknown
			//IL_046d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0472: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_048c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0499: Expected O, but got Unknown
			//IL_049b: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04af: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c6: Expected O, but got Unknown
			//IL_04c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Expected O, but got Unknown
			//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0501: Expected O, but got Unknown
			//IL_0501: Unknown result type (might be due to invalid IL or missing references)
			//IL_0516: Expected O, but got Unknown
			//IL_0794: Unknown result type (might be due to invalid IL or missing references)
			//IL_0799: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a5: Expected O, but got Unknown
			//IL_07a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c3: Expected O, but got Unknown
			//IL_07c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_07de: Expected O, but got Unknown
			//IL_07e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ff: Expected O, but got Unknown
			//IL_0801: Unknown result type (might be due to invalid IL or missing references)
			//IL_0806: Unknown result type (might be due to invalid IL or missing references)
			//IL_0819: Unknown result type (might be due to invalid IL or missing references)
			//IL_082c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0839: Expected O, but got Unknown
			//IL_083b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0840: Unknown result type (might be due to invalid IL or missing references)
			//IL_0847: Unknown result type (might be due to invalid IL or missing references)
			//IL_084f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0864: Expected O, but got Unknown
			//IL_0866: Unknown result type (might be due to invalid IL or missing references)
			//IL_086b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0872: Unknown result type (might be due to invalid IL or missing references)
			//IL_087f: Expected O, but got Unknown
			//IL_0881: Unknown result type (might be due to invalid IL or missing references)
			//IL_0886: Unknown result type (might be due to invalid IL or missing references)
			//IL_089b: Expected O, but got Unknown
			PlayMakerFSM val = FSMUtility.LocateMyFSM(((Component)this).gameObject, "Pattern Control");
			Fsm fsm = val.Fsm;
			FsmOwnerDefault gameObject = new FsmOwnerDefault
			{
				ownerOption = (OwnerDefaultOption)0
			};
			FsmGameObject fsmGameObject = fsm.GetFsmGameObject("Next Pin");
			FsmOwnerDefault gameObject2 = new FsmOwnerDefault
			{
				gameObject = fsmGameObject
			};
			FsmFloat fsmFloat = fsm.GetFsmFloat("Pos X");
			FsmFloat fsmFloat2 = fsm.GetFsmFloat("Rotation");
			FsmFloat fsmFloat3 = fsm.GetFsmFloat("Scene Centre X");
			FsmState[] fsmStates = val.FsmStates;
			foreach (FsmState val2 in fsmStates)
			{
				switch (val2.name)
				{
				case "Rain 1":
				{
					FsmStateAction[] actions = val2.Actions;
					foreach (FsmStateAction obj5 in actions)
					{
						SetIntValue val8 = (SetIntValue)(object)((obj5 is SetIntValue) ? obj5 : null);
						if (val8 != null)
						{
							val8.intValue = FsmInt.op_Implicit(8);
							break;
						}
					}
					break;
				}
				case "Rain 2":
				{
					FsmStateAction[] actions = val2.Actions;
					foreach (FsmStateAction obj4 in actions)
					{
						FloatAdd val7 = (FloatAdd)(object)((obj4 is FloatAdd) ? obj4 : null);
						if (val7 != null)
						{
							val7.add = FsmFloat.op_Implicit(3f);
							break;
						}
					}
					break;
				}
				case "Sweep Dir":
				{
					val2.Actions = (FsmStateAction[])(object)new FsmStateAction[1] { (FsmStateAction)new SendEventByName
					{
						eventTarget = FsmEventTarget.Self,
						sendEvent = FsmString.op_Implicit("FINISHED")
					} };
					FsmState val10 = ((IEnumerable<FsmState>)val.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState s) => s.name == "Sweep R"));
					if (val10 != null)
					{
						val2.Transitions = (FsmTransition[])(object)new FsmTransition[1]
						{
							new FsmTransition
							{
								toFsmState = val10,
								toState = val10.Name,
								FsmEvent = FsmEvent.Finished
							}
						};
					}
					break;
				}
				case "Sweep R":
				{
					FsmState val5 = ((IEnumerable<FsmState>)val.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState s) => s.name == "Sweep L"));
					if (val5 != null)
					{
						val2.Transitions[0].toFsmState = val5;
						val2.Transitions[0].toState = val5.Name;
					}
					FsmStateAction obj3 = val2.Actions[5];
					SetPosition val6 = (SetPosition)(object)((obj3 is SetPosition) ? obj3 : null);
					if (val6 != null)
					{
						val6.x = FsmFloat.op_Implicit(fsmFloat3.Value - 15f);
					}
					break;
				}
				case "Sweep L":
				{
					FsmStateAction obj6 = val2.Actions[5];
					SetPosition val11 = (SetPosition)(object)((obj6 is SetPosition) ? obj6 : null);
					if (val11 != null)
					{
						val11.x = FsmFloat.op_Implicit(fsmFloat3.Value + 15f);
					}
					break;
				}
				case "Claw R":
				{
					List<FsmStateAction> list2 = val2.Actions.ToList();
					Vector2[] array3 = (Vector2[])(object)new Vector2[2]
					{
						new Vector2(28f, 18.7f),
						new Vector2(35f, 19.7f)
					};
					float[] array4 = new float[2] { -62f, -47f };
					for (int l = 0; l < array3.Length; l++)
					{
						Vector2 val9 = array3[l];
						float num3 = array4[l];
						list2.Add((FsmStateAction)new GetRandomChild
						{
							gameObject = gameObject,
							storeResult = fsmGameObject
						});
						list2.Add((FsmStateAction)new GameObjectIsNull
						{
							isNull = FsmEvent.Finished
						});
						list2.Add((FsmStateAction)new FloatOperator
						{
							float1 = FsmFloat.op_Implicit(val9.x),
							storeResult = fsmFloat
						});
						list2.Add((FsmStateAction)new RandomFloat
						{
							min = FsmFloat.op_Implicit(num3),
							max = FsmFloat.op_Implicit(num3),
							storeResult = fsmFloat2
						});
						list2.Add((FsmStateAction)new SetPosition
						{
							gameObject = gameObject2,
							x = fsmFloat,
							y = FsmFloat.op_Implicit(val9.y)
						});
						list2.Add((FsmStateAction)new SetRotation
						{
							gameObject = gameObject2,
							zAngle = fsmFloat2
						});
						list2.Add((FsmStateAction)new SendEventByName
						{
							eventTarget = new FsmEventTarget
							{
								target = (EventTarget)1,
								gameObject = gameObject2
							},
							sendEvent = FsmString.op_Implicit("ATTACK")
						});
					}
					val2.Actions = list2.ToArray();
					break;
				}
				case "Claw L":
				{
					List<FsmStateAction> list3 = val2.Actions.ToList();
					Vector2[] array5 = (Vector2[])(object)new Vector2[2]
					{
						new Vector2(48f, 18.7f),
						new Vector2(40f, 19.7f)
					};
					float[] array6 = new float[2] { 242f, 228f };
					for (int m = 0; m < array5.Length; m++)
					{
						Vector2 val12 = array5[m];
						float num4 = array6[m];
						list3.Add((FsmStateAction)new GetRandomChild
						{
							gameObject = new FsmOwnerDefault(),
							storeResult = fsmGameObject
						});
						list3.Add((FsmStateAction)new GameObjectIsNull
						{
							isNull = FsmEvent.Finished
						});
						list3.Add((FsmStateAction)new FloatOperator
						{
							float1 = FsmFloat.op_Implicit(val12.x),
							storeResult = fsmFloat
						});
						list3.Add((FsmStateAction)new RandomFloat
						{
							min = FsmFloat.op_Implicit(num4),
							max = FsmFloat.op_Implicit(num4),
							storeResult = fsmFloat2
						});
						list3.Add((FsmStateAction)new SetPosition
						{
							gameObject = gameObject2,
							x = fsmFloat,
							y = FsmFloat.op_Implicit(val12.y)
						});
						list3.Add((FsmStateAction)new SetRotation
						{
							gameObject = gameObject2,
							zAngle = fsmFloat2
						});
						list3.Add((FsmStateAction)new SendEventByName
						{
							eventTarget = new FsmEventTarget
							{
								target = (EventTarget)1,
								gameObject = gameObject2
							},
							sendEvent = FsmString.op_Implicit("ATTACK")
						});
					}
					val2.Actions = list3.ToArray();
					break;
				}
				case "Pincer":
				{
					List<FsmStateAction> list = val2.Actions.ToList();
					FsmStateAction obj = list[4];
					RandomFloat val3 = (RandomFloat)(object)((obj is RandomFloat) ? obj : null);
					if (val3 != null)
					{
						val3.min = FsmFloat.op_Implicit(-122f);
						val3.max = FsmFloat.op_Implicit(-118f);
					}
					FsmStateAction obj2 = list[12];
					RandomFloat val4 = (RandomFloat)(object)((obj2 is RandomFloat) ? obj2 : null);
					if (val4 != null)
					{
						val4.min = FsmFloat.op_Implicit(-62f);
						val4.max = FsmFloat.op_Implicit(-58f);
					}
					float[] array = new float[3] { -15f, 0f, 15f };
					float[] array2 = new float[3] { -30f, -90f, -150f };
					for (int j = 0; j < array.Length; j++)
					{
						float num = array[j];
						float num2 = array2[j];
						list.Add((FsmStateAction)new GetRandomChild
						{
							storeResult = fsmGameObject
						});
						list.Add((FsmStateAction)new GameObjectIsNull
						{
							gameObject = fsmGameObject,
							isNull = FsmEvent.Finished
						});
						list.Add((FsmStateAction)new GetPosition
						{
							gameObject = gameObject,
							x = fsmFloat
						});
						list.Add((FsmStateAction)new FloatAdd
						{
							floatVariable = fsmFloat,
							add = FsmFloat.op_Implicit(num)
						});
						list.Add((FsmStateAction)new RandomFloat
						{
							min = FsmFloat.op_Implicit(num2 - 2f),
							max = FsmFloat.op_Implicit(num2 + 2f),
							storeResult = fsmFloat2
						});
						list.Add((FsmStateAction)new SetPosition
						{
							gameObject = gameObject2,
							x = fsmFloat,
							y = FsmFloat.op_Implicit(18f)
						});
						list.Add((FsmStateAction)new SetRotation
						{
							gameObject = gameObject2,
							zAngle = fsmFloat2
						});
						list.Add((FsmStateAction)new SendEventByName
						{
							sendEvent = FsmString.op_Implicit("ATTACK")
						});
					}
					val2.Actions = list.ToArray();
					break;
				}
				}
			}
		}
	}
	[RequireComponent(typeof(tk2dSpriteAnimator))]
	[RequireComponent(typeof(Rigidbody2D))]
	[RequireComponent(typeof(PlayMakerFSM))]
	internal class Sinner : MonoBehaviour
	{
		[CompilerGenerated]
		private sealed class <>c__DisplayClass22_0
		{
			public float riseTimer;

			public Sinner <>4__this;

			public float riseTime;

			internal bool <VomitGlobAttack>b__0()
			{
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_004f: Unknown result type (might be due to invalid IL or missing references)
				riseTimer += Time.deltaTime;
				float num = <>4__this._body.linearVelocity.y * 0.85f;
				<>4__this._body.linearVelocity = new Vector2(<>4__this._body.linearVelocity.x, num);
				return riseTimer >= riseTime;
			}
		}

		[CompilerGenerated]
		private sealed class <SetupBoss>d__6 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public Sinner <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <SetupBoss>d__6(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				int num = <>1__state;
				Sinner sinner = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = AssetManager.ManuallyLoadBundles();
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>2__current = AssetManager.Initialize();
					<>1__state = 2;
					return true;
				case 2:
					<>1__state = -1;
					sinner.GetComponents();
					sinner.ChangeBlackThreadVoice();
					sinner.ChangeTextures();
					sinner.ModifyDamage();
					sinner.IncreaseHealth();
					sinner.RemoveStuns();
					sinner.ModifyFsm();
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		[CompilerGenerated]
		private sealed class <VomitGlobAttack>d__22 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public Sinner <>4__this;

			private GameObject <abyssGlobPrefab>5__2;

			private GameObject <audioPlayerPrefab>5__3;

			private AudioClip <spitClip>5__4;

			private int <shots>5__5;

			private int <i>5__6;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <VomitGlobAttack>d__22(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<abyssGlobPrefab>5__2 = null;
				<audioPlayerPrefab>5__3 = null;
				<spitClip>5__4 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0114: Unknown result type (might be due to invalid IL or missing references)
				//IL_0123: Unknown result type (might be due to invalid IL or missing references)
				//IL_0148: Unknown result type (might be due to invalid IL or missing references)
				//IL_019b: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ac: 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_01fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0207: Expected O, but got Unknown
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f8: Expected O, but got Unknown
				int num = <>1__state;
				Sinner sinner = <>4__this;
				switch (num)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					<>c__DisplayClass22_0 CS$<>8__locals0 = new <>c__DisplayClass22_0
					{
						<>4__this = <>4__this
					};
					<abyssGlobPrefab>5__2 = AssetManager.Get<GameObject>("Abyss Vomit Glob");
					if ((Object)(object)<abyssGlobPrefab>5__2 == (Object)null)
					{
						return false;
					}
					<audioPlayerPrefab>5__3 = AssetManager.Get<GameObject>("Audio Player Actor Simple");
					if ((Object)(object)<audioPlayerPrefab>5__3 == (Object)null)
					{
						return false;
					}
					<spitClip>5__4 = AssetManager.Get<AudioClip>("mini_mawlek_spit");
					if ((Object)(object)<spitClip>5__4 == (Object)null)
					{
						return false;
					}
					sinner._anim.Play("Cast");
					sinner.FaceHero();
					sinner._body.linearVelocity = new Vector2(0f, 15f);
					CS$<>8__locals0.riseTime = 0.25f;
					CS$<>8__locals0.riseTimer = 0f;
					<>2__current = (object)new WaitUntil((Func<bool>)delegate
					{
						//IL_001d: Unknown result type (might be due to invalid IL or missing references)
						//IL_0044: Unknown result type (might be due to invalid IL or missing references)
						//IL_004f: Unknown result type (might be due to invalid IL or missing references)
						CS$<>8__locals0.riseTimer += Time.deltaTime;
						float num2 = CS$<>8__locals0.<>4__this._body.linearVelocity.y * 0.85f;
						CS$<>8__locals0.<>4__this._body.linearVelocity = new Vector2(CS$<>8__locals0.<>4__this._body.linearVelocity.x, num2);
						return CS$<>8__locals0.riseTimer >= CS$<>8__locals0.riseTime;
					});
					<>1__state = 1;
					return true;
				}
				case 1:
					<>1__state = -1;
					sinner._body.linearVelocity = new Vector2(sinner._body.linearVelocity.x, 0f);
					<shots>5__5 = Random.Range(5, 8);
					<i>5__6 = 0;
					break;
				case 2:
					<>1__state = -1;
					<i>5__6++;
					break;
				}
				if (<i>5__6 < <shots>5__5)
				{
					Config val = default(Config);
					val.Prefab = <abyssGlobPrefab>5__2;
					val.SpeedMin = 20f;
					val.SpeedMax = 30f;
					val.AngleMin = 45f;
					val.AngleMax = 135f;
					val.AmountMin = 1;
					val.AmountMax = 1;
					FlingUtils.SpawnAndFling(val, ((Component)sinner).transform, Vector3.up * 2f, (List<GameObject>)null, -1f);
					AudioSource component = ObjectPoolExtensions.Spawn(<audioPlayerPrefab>5__3, ((Component)sinner).transform.position).GetComponent<AudioSource>();
					component.pitch = Random.Range(0.85f, 1.15f);
					component.PlayOneShot(<spitClip>5__4);
					<>2__current = (object)new WaitForSeconds(0.05f);
					<>1__state = 2;
					return true;
				}
				sinner._control.SendEvent("FINISHED");
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private const float GroundY = 13f;

		private tk2dSpriteAnimator _anim;

		private Rigidbody2D _body;

		private PlayMakerFSM _control;

		private Transform _heroTransform;

		private void Awake()
		{
			((MonoBehaviour)this).StartCoroutine(SetupBoss());
		}

		[IteratorStateMachine(typeof(<SetupBoss>d__6))]
		private IEnumerator SetupBoss()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <SetupBoss>d__6(0)
			{
				<>4__this = this
			};
		}

		private void GetComponents()
		{
			_anim = ((Component)this).GetComponent<tk2dSpriteAnimator>();
			_body = ((Component)this).GetComponent<Rigidbody2D>();
			_control = FSMUtility.LocateMyFSM(((Component)this).gameObject, "Control");
			_heroTransform = HeroController.instance.transform;
		}

		private void ChangeBlackThreadVoice()
		{
			foreach (AudioSource item in from audio in ((Component)this).GetComponentsInChildren<AudioSource>(true)
				where ((Object)audio).name == "Audio Loop Voice"
				select audio)
			{
				AudioMixerGroup[] array = item.outputAudioMixerGroup.audioMixer.FindMatchingGroups("Actors VoiceBlackThread");
				item.outputAudioMixerGroup = array[0];
			}
		}

		private void ChangeTextures()
		{
			tk2dSpriteCollectionData collection = ((tk2dBaseSprite)((Component)this).GetComponent<tk2dSprite>()).Collection;
			for (int i = 0; i < collection.materials.Length; i++)
			{
				collection.materials[i].mainTexture = (Texture)(object)AssetManager.Get<Texture2D>($"atlas{i}");
			}
		}

		private void ModifyDamage()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			DamagePropertyFlags damagePropertyFlags = (DamagePropertyFlags)8;
			DamageHero[] componentsInChildren = ((Component)this).GetComponentsInChildren<DamageHero>(true);
			foreach (DamageHero val in componentsInChildren)
			{
				PlayMakerFSM val2 = FSMUtility.LocateMyFSM(((Component)val).gameObject, "hornet_multi_wounder");
				if (Object.op_Implicit((Object)(object)val2))
				{
					val2.Fsm.GetFsmBool("z3 Force Black Threaded").Value = true;
					continue;
				}
				val.damageDealt = 2;
				val.damagePropertyFlags = damagePropertyFlags;
			}
		}

		private void IncreaseHealth()
		{
			((Component)this).GetComponent<HealthManager>().hp = 2000;
		}

		private void RemoveStuns()
		{
			Object.Destroy((Object)(object)FSMUtility.LocateMyFSM(((Component)this).gameObject, "Stun Control"));
		}

		private void ModifyFsm()
		{
			AddAbyssTendrilsToCharge();
			AddVomitGlobAttack();
			MakeFacingSecondSlash();
			ShortenBindTime();
			ModifyPhase2();
		}

		private void AddAbyssTendrilsToCharge()
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Expected O, but got Unknown
			GameObject val = AssetManager.Get<GameObject>("Lost Lace Ground Tendril");
			if (!Object.op_Implicit((Object)(object)val))
			{
				return;
			}
			FsmState[] fsmStates = _control.FsmStates;
			foreach (FsmState val2 in fsmStates)
			{
				if (val2.Name == "Slice Charge")
				{
					List<FsmStateAction> list = val2.Actions.ToList();
					list.Insert(0, (FsmStateAction)new SpawnObjectFromGlobalPoolOverTime
					{
						gameObject = FsmGameObject.op_Implicit(val),
						spawnPoint = FsmGameObject.op_Implicit(((Component)this).gameObject),
						position = FsmVector3.op_Implicit(Vector3.up * 1.8000002f),
						rotation = FsmVector3.op_Implicit(Vector3.one),
						frequency = FsmFloat.op_Implicit(0.25f)
					});
					val2.Actions = list.ToArray();
				}
			}
		}

		private void AddVomitGlobAttack()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Expected O, but got Unknown
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected O, but got Unknown
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Expected O, but got Unknown
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Expected O, but got Unknown
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: 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
			FsmState val = new FsmState(_control.Fsm);
			val.Name = "Vomit Routine";
			val.Actions = (FsmStateAction[])(object)new FsmStateAction[1]
			{
				new InvokeCoroutine(VomitGlobAttack, wait: true)
			};
			_control.Fsm.States = _control.FsmStates.Append(val).ToArray();
			FsmEvent val2 = new FsmEvent("VOMIT");
			FsmTransition element = new FsmTransition
			{
				ToFsmState = val,
				ToState = val.Name,
				FsmEvent = val2
			};
			FsmState toFsmState = _control.FsmStates.First((FsmState state) => state.Name == "Idle");
			FsmTransition val3 = new FsmTransition
			{
				ToFsmState = toFsmState,
				ToState = "Idle",
				FsmEvent = FsmEvent.Finished
			};
			val.Transitions = (FsmTransition[])(object)new FsmTransition[1] { val3 };
			FsmInt val4 = new FsmInt("Ct Vomit");
			val4.Value = 0;
			FsmInt val5 = new FsmInt("Vomit Max");
			val5.Value = 2;
			FsmInt val6 = new FsmInt("Ms Vomit");
			val6.Value = 0;
			FsmInt val7 = new FsmInt("Ms Vomit");
			val7.Value = 3;
			_control.FsmVariables.IntVariables = _control.FsmVariables.IntVariables.Append(val4).ToArray();
			FsmState[] fsmStates = _control.FsmStates;
			foreach (FsmState val8 in fsmStates)
			{
				bool flag;
				switch (val8.Name)
				{
				case "P1 Early":
				case "P1":
				case "P2":
				case "No Tele Event":
				case "Tele Event":
					flag = true;
					break;
				default:
					flag = false;
					break;
				}
				if (flag)
				{
					val8.Transitions = val8.Transitions.Append(element).ToArray();
					int num = 0;
					string name = val8.Name;
					if ((name == "P1 Early" || name == "P1") ? true : false)
					{
						num = 1;
					}
					FsmStateAction obj = val8.Actions[num];
					SendRandomEventV3 val9 = (SendRandomEventV3)(object)((obj is SendRandomEventV3) ? obj : null);
					if (val9 != null)
					{
						val9.events = val9.events.Append(val2).ToArray();
						val9.weights = val9.weights.Append(FsmFloat.op_Implicit(0.5f)).ToArray();
						val9.trackingInts = val9.trackingInts.Append(val4).ToArray();
						val9.eventMax = val9.eventMax.Append(val5).ToArray();
						val9.trackingIntsMissed = val9.trackingIntsMissed.Append(val6).ToArray();
						val9.missedMax = val9.missedMax.Append(val7).ToArray();
					}
				}
			}
		}

		private void MakeFacingSecondSlash()
		{
			FsmState val = ((IEnumerable<FsmState>)_control.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState state) => state.Name == "Slash 3"));
			if (val != null)
			{
				List<FsmStateAction> list = val.Actions.ToList();
				list.Insert(0, (FsmStateAction)(object)new InvokeMethod(FaceHero));
				val.Actions = list.ToArray();
			}
		}

		private void ShortenBindTime()
		{
			FsmState val = ((IEnumerable<FsmState>)_control.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState state) => state.Name == "Bind Silk"));
			if (val == null)
			{
				return;
			}
			FsmStateAction[] actions = val.Actions;
			foreach (FsmStateAction obj in actions)
			{
				Wait val2 = (Wait)(object)((obj is Wait) ? obj : null);
				if (val2 != null)
				{
					val2.time = FsmFloat.op_Implicit(1f);
					break;
				}
			}
		}

		private void ModifyPhase2()
		{
			FsmState val = ((IEnumerable<FsmState>)_control.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState state) => state.name == "P2 Start"));
			if (val != null)
			{
				val.Actions = val.Actions.Append((FsmStateAction)(object)new InvokeMethod(IncreaseChargeSliceSpeed)).Append((FsmStateAction)(object)new InvokeMethod(SpeedUpPhase2Pins)).Append((FsmStateAction)(object)new InvokeMethod(SlashToCharge))
					.ToArray();
			}
		}

		private void SlashToCharge()
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Expected O, but got Unknown
			FsmState val = null;
			FsmState val2 = null;
			FsmState[] fsmStates = _control.FsmStates;
			foreach (FsmState val3 in fsmStates)
			{
				if (val3.Name == "After Slash")
				{
					val = val3;
				}
				else if (val3.Name == "Slice Charge Antic")
				{
					val2 = val3;
				}
			}
			if (val != null && val2 != null)
			{
				val.Transitions = (FsmTransition[])(object)new FsmTransition[1]
				{
					new FsmTransition
					{
						toFsmState = val2,
						toState = val.Name,
						FsmEvent = FsmEvent.Finished
					}
				};
			}
		}

		private void IncreaseChargeSliceSpeed()
		{
			FsmStateAction[] actions = _control.FsmStates.First((FsmState state) => state.Name == "Slice Charge").Actions;
			FsmStateAction obj = actions[1];
			SetVelocityByScale val = (SetVelocityByScale)(object)((obj is SetVelocityByScale) ? obj : null);
			if (val != null)
			{
				val.speed = FsmFloat.op_Implicit(-12f);
			}
			FsmStateAction obj2 = actions[2];
			AccelerateToXByScale val2 = (AccelerateToXByScale)(object)((obj2 is AccelerateToXByScale) ? obj2 : null);
			if (val2 != null)
			{
				val2.accelerationFactor = FsmFloat.op_Implicit(0.65f);
				val2.targetSpeed = FsmFloat.op_Implicit(40f);
			}
			FsmStateAction obj3 = actions[6];
			Wait val3 = (Wait)(object)((obj3 is Wait) ? obj3 : null);
			if (val3 != null)
			{
				val3.time = FsmFloat.op_Implicit(1f);
			}
		}

		private void SpeedUpPhase2Pins()
		{
			foreach (PlayMakerFSM item in from fsm in Object.FindObjectsByType<PlayMakerFSM>((FindObjectsSortMode)0)
				where ((Object)fsm).name.Contains("FW Pin Projectile")
				select fsm)
			{
				FsmStateAction obj = item.FsmStates.First((FsmState state) => state.Name == "Fire").Actions.First((FsmStateAction action) => action is SetVelocityAsAngle);
				((SetVelocityAsAngle)((obj is SetVelocityAsAngle) ? obj : null)).speed = FsmFloat.op_Implicit(180f);
				FsmStateAction obj2 = item.FsmStates.First((FsmState state) => state.Name == "Thread Pull").Actions[3];
				Wait val = (Wait)(object)((obj2 is Wait) ? obj2 : null);
				if (val != null)
				{
					val.time = FsmFloat.op_Implicit(0.4f);
				}
			}
		}

		[IteratorStateMachine(typeof(<VomitGlobAttack>d__22))]
		private IEnumerator VomitGlobAttack()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <VomitGlobAttack>d__22(0)
			{
				<>4__this = this
			};
		}

		private void FaceHero()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			if ((_heroTransform.position.x > ((Component)this).transform.position.x && ((Component)this).transform.localScale.x > 0f) || (_heroTransform.position.x < ((Component)this).transform.position.x && ((Component)this).transform.localScale.x < 0f))
			{
				Vector3 localScale = ((Component)this).transform.localScale;
				localScale.x *= -1f;
				((Component)this).transform.localScale = localScale;
			}
		}

		private void OnDestroy()
		{
			AssetManager.UnloadManualBundles();
		}
	}
}