Decompiled source of Expanded Bossfights v1.0.3

plugins/ExpandedBossfights.dll

Decompiled 7 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.InteropServices;
using System.Security;
using System.Security.Permissions;
using Alexandria;
using Alexandria.Assetbundle;
using Alexandria.DungeonAPI;
using Alexandria.EnemyAPI;
using Alexandria.ItemAPI;
using Alexandria.Misc;
using Alexandria.PrefabAPI;
using BepInEx;
using Brave.BulletScript;
using Dungeonator;
using ExpandBosses.Code;
using ExpandBosses.Code.Enemies.Abomination;
using ExpandBosses.Code.Enemies.Behaviors;
using ExpandBosses.Code.Objects;
using ExpandBosses.Code.Weapons;
using ExpandBosses.SoundAPI;
using ExpandBosses.Storage;
using ExpandTheGungeon.ExpandPrefab;
using ExpandTheGungeon.ItemAPI;
using FullInspector;
using Gungeon;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using Pathfinding;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Mod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Mod")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d6d7a494-722e-4763-959b-c2d6b6a42b01")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace ExpandBosses
{
	public class AdvancedBodyPartController : BraveBehaviour
	{
		public enum AimFromType
		{
			Transform = 10,
			ActorHitBoxCenter = 20
		}

		public Action<AIActor, Vector2> OnHostPreDeath;

		public Action<AIActor, Vector2> OnHostDeath;

		public Action<AIActor, float, float, CoreDamageTypes, DamageCategory, Vector2> OnHostDamaged;

		public bool FlashesOnHit = true;

		private bool currentlyFlashing = false;

		public float FlashDuration = 0.05f;

		public float FlashPause = 0.25f;

		public bool Render = true;

		public string Name = "BodyPart";

		public SpeculativeRigidbody ownBody;

		public HealthHaver ownHealthHaver;

		public Action<SpeculativeRigidbody, HealthHaver, Vector2> OnBodyPartPreDeath;

		public Action<SpeculativeRigidbody, HealthHaver, Vector2> OnBodyPartDeath;

		public Action<HealthHaver, SpeculativeRigidbody, float, float, CoreDamageTypes, DamageCategory, Vector2> OnBodyPartDamaged;

		public int intPixelCollider;

		public bool hasOutlines;

		public bool faceTarget;

		[ShowInInspectorIf("faceTarget", true)]
		public float faceTargetTurnSpeed = -1f;

		[ShowInInspectorIf("faceTarget", true)]
		public AimFromType aimFrom = (AimFromType)10;

		public bool autoDepth = true;

		public bool redirectHealthHaver;

		public bool independentFlashOnDamage;

		public AIActor MainBody;

		private float m_heightOffBody;

		public bool HostBodyIsDead = false;

		public bool OverrideFacingDirection { get; set; }

		private void HealthHaver_OnPreDeathAIActor(Vector2 obj)
		{
			//IL_002e: 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)
			HostBodyIsDead = true;
			if ((Object)(object)ownHealthHaver != (Object)null)
			{
				ownHealthHaver.ApplyDamage(2.1474836E+09f, new Vector2(0f, 0f), "get fucked", (CoreDamageTypes)0, (DamageCategory)0, false, (PixelCollider)null, false);
			}
			if (OnHostPreDeath != null)
			{
				OnHostPreDeath(MainBody, obj);
			}
		}

		private void OwnHealthHaver_OnDeathAIActor(Vector2 obj)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			if (OnHostDeath != null)
			{
				OnHostDeath(MainBody, obj);
			}
		}

		private void OwnHealthHaver_OnDamagedAIActor(float resultValue, float maxValue, CoreDamageTypes damageTypes, DamageCategory damageCategory, Vector2 damageDirection)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (OnHostDamaged != null)
			{
				OnHostDamaged.Invoke(MainBody, resultValue, maxValue, damageTypes, damageCategory, damageDirection);
			}
		}

		public virtual void Start()
		{
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Expected O, but got Unknown
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Expected O, but got Unknown
			((BraveBehaviour)this).renderer.enabled = Render;
			if (!Object.op_Implicit((Object)(object)ownBody))
			{
				ownBody = ((Component)this).gameObject.GetComponent<SpeculativeRigidbody>();
			}
			if (!Object.op_Implicit((Object)(object)ownHealthHaver))
			{
				ownHealthHaver = ((Component)this).gameObject.GetComponent<HealthHaver>();
			}
			AIAnimator component = ((Component)this).gameObject.GetComponent<AIAnimator>();
			if (Object.op_Implicit((Object)(object)component))
			{
				((Behaviour)component).enabled = true;
			}
			m_heightOffBody = ((BraveBehaviour)this).sprite.HeightOffGround;
			if (hasOutlines)
			{
				SpriteOutlineManager.AddOutlineToSprite(((BraveBehaviour)this).sprite, Color.black, ((BraveBehaviour)this).sprite.HeightOffGround + 0.1f, 0f, (OutlineType)0);
				if (Object.op_Implicit((Object)(object)MainBody))
				{
					ObjectVisibilityManager component2 = ((Component)MainBody).GetComponent<ObjectVisibilityManager>();
					if (Object.op_Implicit((Object)(object)component2))
					{
						component2.ResetRenderersList();
					}
				}
			}
			if (!Object.op_Implicit((Object)(object)((BraveBehaviour)this).specRigidbody))
			{
				((BraveBehaviour)this).specRigidbody = ((BraveBehaviour)MainBody).specRigidbody;
			}
			if ((Object)(object)((Component)this).gameObject.transform.parent != (Object)null)
			{
				MainBody = ((Component)((Component)this).gameObject.transform.parent).GetComponent<AIActor>();
			}
			if ((Object)(object)MainBody != (Object)null)
			{
				((BraveBehaviour)MainBody).healthHaver.OnPreDeath += HealthHaver_OnPreDeathAIActor;
				((BraveBehaviour)MainBody).healthHaver.OnDamaged += new OnDamagedEvent(OwnHealthHaver_OnDamagedAIActor);
				((BraveBehaviour)MainBody).healthHaver.OnDeath += OwnHealthHaver_OnDeathAIActor;
			}
			if ((Object)(object)ownBody != (Object)null && (Object)(object)ownHealthHaver != (Object)null)
			{
				ownHealthHaver.OnDamaged += new OnDamagedEvent(OwnHealthHaver_OnDamaged);
				ownHealthHaver.OnPreDeath += OwnHealthHaver_OnPreDeath;
				ownHealthHaver.OnDeath += OwnHealthHaver_OnDeath;
			}
		}

		private void OwnHealthHaver_OnDeath(Vector2 obj)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			if (OnBodyPartDeath != null)
			{
				OnBodyPartDeath(ownBody, ownHealthHaver, obj);
			}
		}

		private void OwnHealthHaver_OnPreDeath(Vector2 obj)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			if (OnBodyPartPreDeath != null)
			{
				OnBodyPartPreDeath(ownBody, ownHealthHaver, obj);
			}
		}

		private void OwnHealthHaver_OnDamaged(float resultValue, float maxValue, CoreDamageTypes damageTypes, DamageCategory damageCategory, Vector2 damageDirection)
		{
			//IL_0023: 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_0026: Unknown result type (might be due to invalid IL or missing references)
			if (OnBodyPartDamaged != null)
			{
				OnBodyPartDamaged.Invoke(ownHealthHaver, ownBody, resultValue, maxValue, damageTypes, damageCategory, damageDirection);
			}
			if (FlashesOnHit && !currentlyFlashing)
			{
				currentlyFlashing = true;
				((MonoBehaviour)this).StartCoroutine(DoFlash());
			}
		}

		private IEnumerator DoFlash()
		{
			float e = 0.01f;
			while (e < FlashDuration)
			{
				e += BraveTime.DeltaTime;
				float t = e / FlashDuration;
				if (ownHealthHaver.currentHealth > 0f || ownHealthHaver.Armor > 0f)
				{
					float g = 25f - t * 25f;
					if (((BraveBehaviour)((BraveBehaviour)ownHealthHaver).sprite).renderer.material.shaderKeywords.Contains("_OverrideColor"))
					{
						((BraveBehaviour)((BraveBehaviour)ownHealthHaver).sprite).renderer.material.SetColor("_OverrideColor", new Color(g, g, g, 1f));
					}
				}
				yield return null;
			}
			if (((BraveBehaviour)((BraveBehaviour)ownHealthHaver).sprite).renderer.material.shaderKeywords.Contains("_OverrideColor"))
			{
				((BraveBehaviour)((BraveBehaviour)ownHealthHaver).sprite).renderer.material.SetColor("_OverrideColor", new Color(0f, 0f, 0f, 0f));
			}
			e = 0f;
			while (e < FlashPause)
			{
				e += BraveTime.DeltaTime;
				yield return null;
			}
			currentlyFlashing = false;
		}

		public virtual void Update()
		{
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)ownBody != (Object)null)
			{
				ownBody.Reinitialize();
				((BraveBehaviour)ownBody).sprite.collectionInst = null;
			}
			((BraveBehaviour)this).renderer.enabled = Render;
			if (!OverrideFacingDirection && faceTarget && TryGetAimAngle(out var angle))
			{
				if (faceTargetTurnSpeed > 0f)
				{
					float num = ((!Object.op_Implicit((Object)(object)((BraveBehaviour)this).aiAnimator)) ? ((BraveBehaviour)this).transform.eulerAngles.z : ((BraveBehaviour)this).aiAnimator.FacingDirection);
					angle = Mathf.MoveTowardsAngle(num, angle, faceTargetTurnSpeed * BraveTime.DeltaTime);
				}
				if (Object.op_Implicit((Object)(object)((BraveBehaviour)this).aiAnimator))
				{
					((BraveBehaviour)this).aiAnimator.LockFacingDirection = true;
					((BraveBehaviour)this).aiAnimator.FacingDirection = angle;
				}
				else
				{
					((BraveBehaviour)this).transform.rotation = Quaternion.Euler(0f, 0f, angle);
				}
			}
			if (autoDepth && Object.op_Implicit((Object)(object)((BraveBehaviour)this).aiAnimator))
			{
				float num2 = BraveMathCollege.ClampAngle180(((Object)(object)MainBody != (Object)null) ? ((BraveBehaviour)MainBody).aiAnimator.FacingDirection : ((BraveBehaviour)ownBody).aiAnimator.FacingDirection);
				float num3 = BraveMathCollege.ClampAngle180(((BraveBehaviour)this).aiAnimator.FacingDirection);
				bool flag = num2 <= 155f && num2 >= 25f && num3 <= 155f && num3 >= 25f;
				((BraveBehaviour)this).sprite.HeightOffGround = ((!flag) ? m_heightOffBody : (0f - m_heightOffBody));
			}
		}

		public override void OnDestroy()
		{
			((BraveBehaviour)this).OnDestroy();
		}

		public virtual bool TryGetAimAngle(out float angle)
		{
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Invalid comparison between Unknown and I4
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Invalid comparison between Unknown and I4
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			angle = 0f;
			if (Object.op_Implicit((Object)(object)MainBody))
			{
				Vector2 unitCenter = ((Component)MainBody).GetComponent<SpeculativeRigidbody>().GetUnitCenter((ColliderType)2);
				Vector2 val = Vector3Extensions.XY(((BraveBehaviour)this).transform.position);
				if ((int)aimFrom == 20)
				{
					val = ((Component)MainBody).GetComponent<SpeculativeRigidbody>().GetUnitCenter((ColliderType)2);
				}
				angle = Vector2Extensions.ToAngle(unitCenter - val);
				if (Object.op_Implicit((Object)(object)((BraveBehaviour)MainBody).aiAnimator))
				{
					angle = ((BraveBehaviour)MainBody).aiAnimator.FacingDirection;
					return true;
				}
				return true;
			}
			Vector2 unitCenter2 = ownBody.GetUnitCenter((ColliderType)2);
			Vector2 val2 = Vector3Extensions.XY(((BraveBehaviour)this).transform.position);
			if ((int)aimFrom == 20)
			{
				val2 = ownBody.GetUnitCenter((ColliderType)2);
			}
			angle = Vector2Extensions.ToAngle(unitCenter2 - val2);
			if (Object.op_Implicit((Object)(object)((BraveBehaviour)ownBody).aiAnimator))
			{
				angle = ((BraveBehaviour)ownBody).aiAnimator.FacingDirection;
				return true;
			}
			return true;
		}
	}
	public class MaintainDamageOnPierce : MonoBehaviour
	{
		public Action<Projectile, SpeculativeRigidbody> OnPierce;

		public float AmountOfPiercesBeforeFalloff;

		public float damageMultOnPierce;

		private Projectile m_projectile;

		public MaintainDamageOnPierce()
		{
			damageMultOnPierce = 1f;
			AmountOfPiercesBeforeFalloff = -1f;
		}

		public void Start()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Expected O, but got Unknown
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Expected O, but got Unknown
			m_projectile = ((Component)this).GetComponent<Projectile>();
			if (Object.op_Implicit((Object)(object)m_projectile))
			{
				SpeculativeRigidbody specRigidbody = ((BraveBehaviour)m_projectile).specRigidbody;
				specRigidbody.OnPreRigidbodyCollision = (OnPreRigidbodyCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnPreRigidbodyCollision, (Delegate?)new OnPreRigidbodyCollisionDelegate(HandlePierce));
			}
		}

		private void HandlePierce(SpeculativeRigidbody myRigidbody, PixelCollider myPixelCollider, SpeculativeRigidbody otherRigidbody, PixelCollider otherPixelCollider)
		{
			if (AmountOfPiercesBeforeFalloff != 0f)
			{
				AmountOfPiercesBeforeFalloff -= 1f;
				FieldInfo field = typeof(Projectile).GetField("m_hasPierced", BindingFlags.Instance | BindingFlags.NonPublic);
				field.SetValue(((BraveBehaviour)myRigidbody).projectile, false);
				if (OnPierce != null)
				{
					OnPierce(m_projectile, otherRigidbody);
				}
				if (Object.op_Implicit((Object)(object)myRigidbody))
				{
					((MonoBehaviour)myRigidbody).StartCoroutine(FrameDelay());
				}
			}
		}

		public IEnumerator FrameDelay()
		{
			yield return null;
			if (!((Object)(object)m_projectile == (Object)null))
			{
				ProjectileData baseData = ((BraveBehaviour)m_projectile).projectile.baseData;
				baseData.damage *= damageMultOnPierce;
			}
		}
	}
	public class ParasiticAbominationIntro : SpecificIntroDoer
	{
		public ParasiticAbomination.AbominationBehaviour abominationBehaviour;

		public override void EndIntro()
		{
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)abominationBehaviour))
			{
				foreach (AbominationPart bodyPart in abominationBehaviour.BodyParts)
				{
					bodyPart.bodyPart.Render = true;
					bodyPart.aIAnimator.Play(bodyPart.DefaultIdleAnimation, (StateEndType)0, -1f, -1f, false, "");
					SpriteOutlineManager.AddOutlineToSprite(((BraveBehaviour)bodyPart.bodyPart).sprite, new Color(0.4f, 0f, 0f), 0.1f, 0f, (OutlineType)0);
				}
			}
			((BraveBehaviour)((BraveBehaviour)this).aiActor).aiAnimator.Play("idle", (StateEndType)0, -1f, -1f, false, "");
			((SpecificIntroDoer)this).EndIntro();
		}

		public override void PlayerWalkedIn(PlayerController player, List<tk2dSpriteAnimator> animators)
		{
			((BraveBehaviour)this).aiActor.HasBeenEngaged = true;
			if (Object.op_Implicit((Object)(object)abominationBehaviour))
			{
				foreach (AbominationPart bodyPart in abominationBehaviour.BodyParts)
				{
					bodyPart.bodyPart.Render = false;
					((BraveBehaviour)((BraveBehaviour)bodyPart.bodyPart).sprite).renderer.enabled = false;
					((BraveBehaviour)bodyPart.bodyPart).sprite.Awake();
					SpriteOutlineManager.RemoveOutlineFromSprite(((BraveBehaviour)bodyPart.bodyPart).sprite, false);
				}
			}
			((SpecificIntroDoer)this).PlayerWalkedIn(player, animators);
		}
	}
	public class ParasiticAbomination : AIActor
	{
		public class SpawnChandeliers : Script
		{
			public override IEnumerator Top()
			{
				List<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition> p = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>().potentialFleshballs;
				AkSoundEngine.PostEvent("Play_ParasiteGroan", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(105);
				IEnumerable<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition> t = p.Where((RoomObjects_ParasiticAbomination.PotentialFleshBallPosition self) => !self.Occupied);
				if (t.Count() <= 0)
				{
					yield break;
				}
				List<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition> list = t.ToList();
				BraveUtility.Shuffle<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition>(list);
				if (((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>().DeadParts == 2)
				{
					for (int j = 0; j < Mathf.Min(6, list.Count()); j++)
					{
						AkSoundEngine.PostEvent("Play_ENM_blobulord_bubble_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
						GameObject o2 = Object.Instantiate<GameObject>(RoomObjects_ParasiticAbomination.Chandelier, ((Component)list[j]).transform.position, Quaternion.identity);
						o2.GetComponent<RoomObjects_ParasiticAbomination.FleshBombController>().Pos = list[j];
						list[j].Occupied = true;
						((MonoBehaviour)GameManager.Instance).StartCoroutine(Delay(o2.GetComponent<RoomObjects_ParasiticAbomination.FleshBombController>()));
						PickupObject byId = PickupObjectDatabase.GetById(207);
						GameObject g2 = Object.Instantiate<GameObject>(((Gun)((byId is Gun) ? byId : null)).muzzleFlashEffects.effects[0].effects[0].effect, Vector2.op_Implicit(((Bullet)this).Position), Quaternion.Euler(0f, 0f, Vector2Extensions.ToAngle(Vector2.up)));
						Object.Destroy((Object)(object)g2, 3f);
						for (int h = -3; h < 4; h++)
						{
							((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction((12f + (float)(10 + j)) * (float)h, (DirectionType)0, -1f), new Speed(1f, (SpeedType)0), (Bullet)(object)new LeftEye_1.Teeth(25f, 90 + 45 * j));
							((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction((12f + (float)(10 + j)) * (float)h, (DirectionType)0, -1f), new Speed(2f, (SpeedType)0), (Bullet)(object)new LeftEye_1.Teeth(25f, 90 + 45 * j));
							((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction((12f + (float)(10 + j)) * (float)h, (DirectionType)0, -1f), new Speed(3f, (SpeedType)0), (Bullet)(object)new LeftEye_1.Teeth(25f, 90 + 45 * j));
						}
						yield return ((Bullet)this).Wait(25);
					}
				}
				else
				{
					for (int i = 0; i < Mathf.Min(2 + ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>().DeadParts * 2, list.Count()); i++)
					{
						AkSoundEngine.PostEvent("Play_ENM_blobulord_bubble_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
						GameObject o = Object.Instantiate<GameObject>(RoomObjects_ParasiticAbomination.Chandelier, ((Component)list[i]).transform.position, Quaternion.identity);
						o.GetComponent<RoomObjects_ParasiticAbomination.FleshBombController>().Pos = list[i];
						list[i].Occupied = true;
						((MonoBehaviour)GameManager.Instance).StartCoroutine(Delay(o.GetComponent<RoomObjects_ParasiticAbomination.FleshBombController>()));
						PickupObject byId2 = PickupObjectDatabase.GetById(207);
						GameObject g = Object.Instantiate<GameObject>(((Gun)((byId2 is Gun) ? byId2 : null)).muzzleFlashEffects.effects[0].effects[0].effect, Vector2.op_Implicit(((Bullet)this).Position), Quaternion.Euler(0f, 0f, Vector2Extensions.ToAngle(Vector2.up)));
						Object.Destroy((Object)(object)g, 3f);
						yield return ((Bullet)this).Wait(30);
					}
				}
			}

			public IEnumerator Delay(RoomObjects_ParasiticAbomination.FleshBombController fuck)
			{
				float a = Random.Range(4.1f, 40f);
				float e = 0f;
				while (e < a)
				{
					e += BraveTime.DeltaTime;
					yield return null;
				}
				if ((Object)(object)fuck != (Object)null)
				{
					fuck.Call(((Component)fuck).gameObject, "FleshFall");
				}
			}
		}

		public class DumpsterDive : Script
		{
			public virtual bool IsHard => false;

			public override IEnumerator Top()
			{
				if (IsHard)
				{
					DeadlyDeadlyGoopManager goopManagerForGoopType2 = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(GoopUtility.PoisonDef);
					goopManagerForGoopType2.TimedAddGoopCircle(((Bullet)this).Position, 12f, 2.4f, false);
					Exploder.DoDistortionWave(((Bullet)this).Position, 0.1f, 0.1f, 30f, 3f);
					for (int e2 = 0; e2 < 3; e2++)
					{
						for (int j = 0; j < 60; j++)
						{
							((Bullet)this).Fire(new Direction((float)(6 * j + 3 * e2), (DirectionType)1, -1f), new Speed(7f + 1.25f * (float)e2, (SpeedType)0), (Bullet)new SpeedChangingBullet("gross", 6f, 120, -1, false));
						}
						yield return ((Bullet)this).Wait(3);
					}
					yield break;
				}
				Exploder.DoDistortionWave(((Bullet)this).Position, 0.1f, 0.1f, 30f, 3f);
				DeadlyDeadlyGoopManager goopManagerForGoopType = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(GoopUtility.PoisonDef);
				goopManagerForGoopType.TimedAddGoopCircle(((Bullet)this).Position, 10f, 1f, false);
				for (int e = 0; e < 2; e++)
				{
					for (int i = 0; i < 90; i++)
					{
						((Bullet)this).Fire(new Direction((float)(4 * i + 2 * e), (DirectionType)1, -1f), new Speed(10f, (SpeedType)0), (Bullet)new SpeedChangingBullet("gross", (float)(6 + e), 120, -1, false));
					}
					yield return ((Bullet)this).Wait(5);
				}
			}
		}

		public class DumpsterDiveHard : DumpsterDive
		{
			public override bool IsHard => true;
		}

		public class CenterEye_1 : Script
		{
			public class HelixBullet : Bullet
			{
				private float Power;

				private float NegativePower;

				private bool reverse;

				private int Delay;

				private string bullettype;

				public HelixBullet(bool reverse, int delay, string BulletType, float Power, float NegativePower)
					: base(BulletType, false, false, false)
				{
					this.reverse = reverse;
					Delay = delay;
					bullettype = BulletType;
					((Bullet)this).SuppressVfx = true;
					this.Power = Power;
					this.NegativePower = NegativePower;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ManualControl = true;
					yield return ((Bullet)this).Wait(Delay);
					Vector2 truePosition = ((Bullet)this).Position;
					float startVal = 1f;
					for (int i = 0; i < 360; i++)
					{
						float offsetMagnitude = Mathf.SmoothStep(NegativePower, Power, Mathf.PingPong(startVal + (float)i / 90f * 3f, 1f));
						truePosition += BraveMathCollege.DegreesToVector(base.Direction, base.Speed / 90f);
						((Bullet)this).Position = truePosition + (reverse ? BraveMathCollege.DegreesToVector(base.Direction + 90f, offsetMagnitude) : BraveMathCollege.DegreesToVector(base.Direction - 90f, offsetMagnitude));
						yield return ((Bullet)this).Wait(1);
					}
					((Bullet)this).Vanish(false);
				}
			}

			public override IEnumerator Top()
			{
				AbominationBehaviour behavior = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>();
				AkSoundEngine.PostEvent("Play_ParasiteScream", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(75);
				AkSoundEngine.PostEvent("Play_BOSS_doormimic_vomit_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(30);
				if (behavior.DeadParts == 2)
				{
					for (int e4 = 0; e4 < 9; e4++)
					{
						((Bullet)this).Fire(new Direction(0f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
						((Bullet)this).Fire(new Direction(-96f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
						((Bullet)this).Fire(new Direction(96f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
						((Bullet)this).Fire(new Direction(-64f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
						((Bullet)this).Fire(new Direction(64f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
						((Bullet)this).Fire(new Direction(-32f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
						((Bullet)this).Fire(new Direction(32f, (DirectionType)0, -1f), new Speed(15f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 15 + e4 * 15, -1, false));
					}
					for (int e3 = 0; e3 < 6; e3++)
					{
						for (int j = 0; j < 24; j++)
						{
							((Bullet)this).Fire(new Direction(15f * (float)j + 7.5f * (float)e3, (DirectionType)0, -1f), new Speed((float)behavior.DeadParts, (SpeedType)0), (Bullet)new SpeedChangingBullet("gross", 15f, 60 + 60 * e3, -1, false));
						}
					}
				}
				else
				{
					for (int e2 = 0; e2 < 4 + behavior.DeadParts * 2; e2++)
					{
						((Bullet)this).Fire(new Direction(0f, (DirectionType)0, -1f), new Speed(20f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 90 - e2 * 15, -1, false));
						((Bullet)this).Fire(new Direction((float)(-(90 + behavior.DeadParts * 2)), (DirectionType)0, -1f), new Speed(20f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 90 - e2 * 15, -1, false));
						((Bullet)this).Fire(new Direction((float)(90 + behavior.DeadParts * 2), (DirectionType)0, -1f), new Speed(20f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 90 - e2 * 15, -1, false));
						((Bullet)this).Fire(new Direction((float)(-(90 + behavior.DeadParts * 2) / 2), (DirectionType)0, -1f), new Speed(20f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 90 - e2 * 15, -1, false));
						((Bullet)this).Fire(new Direction((float)((90 + behavior.DeadParts * 2) / 2), (DirectionType)0, -1f), new Speed(20f, (SpeedType)0), (Bullet)new SpeedChangingBullet("big", 8f, 90 - e2 * 15, -1, false));
					}
					for (int e = 0; e < behavior.DeadParts + 1; e++)
					{
						((Bullet)this).Fire(new Direction(0f, (DirectionType)0, -1f), new Speed((float)(5 - behavior.DeadParts * 2), (SpeedType)0), (Bullet)new SpeedChangingBullet("gross", 15f, 240 - 60 * e, -1, false));
						for (int i = 1; i < 9; i++)
						{
							((Bullet)this).Fire(new Direction(10f * (float)i, (DirectionType)0, -1f), new Speed((float)(5 - behavior.DeadParts * 2), (SpeedType)0), (Bullet)new SpeedChangingBullet("gross", 15f, 240 - 60 * e, -1, false));
							((Bullet)this).Fire(new Direction(0f - 10f * (float)i, (DirectionType)0, -1f), new Speed((float)(5 - behavior.DeadParts * 2), (SpeedType)0), (Bullet)new SpeedChangingBullet("gross", 15f, 240 - 60 * e, -1, false));
						}
					}
				}
				yield return ((Bullet)this).Wait(75);
			}
		}

		public class CenterEye_2 : Script
		{
			public class SnakeBullet : Bullet
			{
				public Vector2 position;

				private bool Hoames = false;

				private int A;

				private int m_delay;

				public SnakeBullet(string t, int delay, bool Homes, Vector2 vector, int D = 0)
					: base(t, false, false, false)
				{
					//IL_002a: Unknown result type (might be due to invalid IL or missing references)
					//IL_002c: Unknown result type (might be due to invalid IL or missing references)
					m_delay = delay;
					Hoames = Homes;
					A = D;
					position = vector;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ManualControl = true;
					yield return ((Bullet)this).Wait(m_delay);
					Vector2 truePosition = ((Bullet)this).Position;
					for (int i = 0; i < 720; i++)
					{
						float offsetMagnitude = Mathf.SmoothStep(-0.75f, 0.75f, Mathf.PingPong(0.5f + (float)i / 60f * 3f, 1f));
						if (i > 60 + A && i < 100 + A && Hoames)
						{
							float num = Vector2Extensions.ToAngle(position - truePosition);
							float value = BraveMathCollege.ClampAngle180(num - base.Direction);
							base.Direction += Mathf.Clamp(value, -6f, 6f);
						}
						truePosition += BraveMathCollege.DegreesToVector(base.Direction, base.Speed / 60f);
						((Bullet)this).Position = truePosition + BraveMathCollege.DegreesToVector(base.Direction - 90f, offsetMagnitude);
						yield return ((Bullet)this).Wait(1);
					}
					((Bullet)this).Vanish(false);
				}
			}

			public override IEnumerator Top()
			{
				AkSoundEngine.PostEvent("Play_ParasiteTell", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				AbominationBehaviour behavior = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>();
				yield return ((Bullet)this).Wait(60);
				AkSoundEngine.PostEvent("Play_ENM_creecher_charge_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(45);
				AkSoundEngine.PostEvent("Play_ENM_creecher_burst_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				if (behavior.DeadParts == 2)
				{
					for (int g = 0; g < 5 + behavior.DeadParts; g++)
					{
						Vector2 c4 = ((Bullet)this).GetPredictedTargetPosition(0.7f, 6f);
						float v4 = Vector2Extensions.ToAngle(Vector2.down) + (float)Random.Range(-90, 90);
						float t2 = Random.Range(16, 24);
						for (int u4 = 0; (float)u4 < t2; u4++)
						{
							((Bullet)this).Fire(new Direction(v4, (DirectionType)1, -1f), new Speed(9f, (SpeedType)0), (Bullet)(object)new SnakeBullet((u4 == 0) ? "spore1" : "spore2", u4 * 3, Homes: false, c4));
						}
					}
					yield return ((Bullet)this).Wait(30);
					for (int g2 = 0; g2 < 8; g2++)
					{
						yield return ((Bullet)this).Wait(10);
						float v2 = Vector2Extensions.ToAngle(Vector2.down) + (float)Random.Range(-75, 75);
						int f2 = Random.Range(20, 120);
						Vector2 c3 = ((Bullet)this).GetPredictedTargetPosition(0.7f, 6f);
						for (int u3 = 0; u3 < 5; u3++)
						{
							((Bullet)this).Fire(new Direction(v2, (DirectionType)1, -1f), new Speed(6f, (SpeedType)0), (Bullet)(object)new SnakeBullet("gross", u3 * 4, Homes: true, c3, f2));
						}
					}
					yield break;
				}
				for (int g4 = 0; g4 < 5 + behavior.DeadParts; g4++)
				{
					Vector2 c = ((Bullet)this).GetPredictedTargetPosition(0.7f, 6f);
					float v = Vector2Extensions.ToAngle(Vector2.down) + (float)Random.Range(-75, 75);
					float t1 = Random.Range(12, 20);
					for (int u = 0; (float)u < t1; u++)
					{
						((Bullet)this).Fire(new Direction(v, (DirectionType)1, -1f), new Speed(9f, (SpeedType)0), (Bullet)(object)new SnakeBullet((u == 0) ? "spore1" : "spore2", u * 3, Homes: false, c));
					}
				}
				yield return ((Bullet)this).Wait(30);
				float p = 25 + behavior.DeadParts;
				for (int g3 = 0; g3 < 3 + behavior.DeadParts; g3++)
				{
					yield return ((Bullet)this).Wait(p);
					float v3 = Vector2Extensions.ToAngle(Vector2.down) + (float)Random.Range(-75, 75);
					int f = Random.Range(20, 120);
					Vector2 c2 = ((Bullet)this).GetPredictedTargetPosition(0.7f, 6f);
					for (int u2 = 0; u2 < 6; u2++)
					{
						((Bullet)this).Fire(new Direction(v3, (DirectionType)1, -1f), new Speed(6f, (SpeedType)0), (Bullet)(object)new SnakeBullet("gross", u2 * 4, Homes: true, c2, f));
					}
				}
			}
		}

		public class LeftEye_1 : Script
		{
			private class ArmBullet : Bullet
			{
				public const int BulletDelay = 60;

				private const float WiggleMagnitude = 0.4f;

				public const int WiggleTime = 30;

				private const int NumBulletsToPreShake = 5;

				private LeftEye_1 m_parentScript;

				private HandBullet m_handBullet;

				private int m_index;

				public ArmBullet(LeftEye_1 parentScript, HandBullet handBullet, int index)
					: base("gross", false, false, false)
				{
					m_parentScript = parentScript;
					m_handBullet = handBullet;
					m_index = index;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ManualControl = true;
					while (!((Bullet)m_parentScript).IsEnded && !((Bullet)m_handBullet).IsEnded && !m_handBullet.HasStopped && Object.op_Implicit((Object)(object)((Bullet)this).BulletBank))
					{
						((Bullet)this).Position = Vector2.Lerp(((Bullet)m_parentScript).Position, ((Bullet)m_handBullet).Position, (float)m_index / 50f);
						yield return ((Bullet)this).Wait(1);
					}
					if (((Bullet)m_parentScript).IsEnded)
					{
						((Bullet)this).Vanish(false);
						yield break;
					}
					int delay = 20 - m_index - 5;
					if (delay > 0)
					{
						yield return ((Bullet)this).Wait(delay);
					}
					int halfWiggleTime = 10;
					for (int i = 0; i < 30; i++)
					{
						Vector2 truePosition = Vector2.Lerp(((Bullet)m_parentScript).Position, ((Bullet)m_handBullet).Position, (float)m_index / 50f);
						if (i == 0 && delay < 0)
						{
							i = -delay;
						}
						float magnitude4 = 0.4f;
						magnitude4 = Mathf.Min(magnitude4, Mathf.Lerp(0.2f, 0.4f, (float)m_index / 8f));
						magnitude4 = Mathf.Min(magnitude4, Mathf.Lerp(0.2f, 0.4f, (float)(20 - m_index - 1) / 3f));
						magnitude4 = Mathf.Lerp(magnitude4, 0f, (float)i / (float)halfWiggleTime - 2f);
						float currentOffset = Mathf.SmoothStep(0f - magnitude4, magnitude4, Mathf.PingPong(0.5f + (float)i / (float)halfWiggleTime, 1f));
						((Bullet)this).Position = truePosition + BraveMathCollege.DegreesToVector(base.Direction - 90f, currentOffset);
						yield return ((Bullet)this).Wait(1);
					}
					while (!m_handBullet.HasTrulyStopped)
					{
						((Bullet)this).Position = Vector2.Lerp(((Bullet)m_parentScript).Position, ((Bullet)m_handBullet).Position, (float)m_index / 50f);
						yield return ((Bullet)this).Wait(1);
					}
					((Bullet)this).Vanish(false);
				}
			}

			private class HandBullet : Bullet
			{
				public bool HasTrulyStopped = false;

				private bool FUCK = false;

				private LeftEye_1 m_parentScript;

				public bool HasStopped { get; set; }

				public HandBullet(LeftEye_1 parentScript)
					: base("gross", false, false, false)
				{
					m_parentScript = parentScript;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ChangeSpeed(new Speed(100f, (SpeedType)0), 120);
					base.Projectile.BulletScriptSettings.surviveRigidbodyCollisions = true;
					base.Projectile.BulletScriptSettings.surviveTileCollisions = true;
					SpeculativeRigidbody specRigidbody = ((BraveBehaviour)base.Projectile).specRigidbody;
					specRigidbody.OnCollision = (Action<CollisionData>)Delegate.Combine(specRigidbody.OnCollision, new Action<CollisionData>(OnCollision));
					while (!((Bullet)m_parentScript).IsEnded && !HasStopped)
					{
						yield return ((Bullet)this).Wait(1);
					}
					if (((Bullet)m_parentScript).IsEnded)
					{
						((Bullet)this).Vanish(false);
						yield break;
					}
					yield return ((Bullet)this).Wait(200);
					((Bullet)this).Vanish(false);
				}

				private void OnCollision(CollisionData collision)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Invalid comparison between Unknown and I4
					//IL_0149: Unknown result type (might be due to invalid IL or missing references)
					//IL_015f: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
					//IL_00da: 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_003b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0040: Unknown result type (might be due to invalid IL or missing references)
					//IL_0045: Unknown result type (might be due to invalid IL or missing references)
					bool flag = (int)collision.collisionType == 1;
					SpeculativeRigidbody otherRigidbody = collision.OtherRigidbody;
					if (Object.op_Implicit((Object)(object)otherRigidbody) && (Object)(object)((Component)otherRigidbody).GetComponent<PlayerController>() != (Object)null)
					{
						((Bullet)this).Position = collision.MyRigidbody.UnitCenter + PhysicsEngine.PixelToUnit(collision.NewPixelsToMove);
						base.Speed = 0f;
						HasStopped = true;
						base.Projectile.BulletScriptSettings.surviveRigidbodyCollisions = true;
						((Bullet)this).StartTask(DoPull(PlayerCollision: true));
					}
					else if (flag)
					{
						HasStopped = true;
						((Bullet)this).Position = collision.MyRigidbody.UnitCenter + PhysicsEngine.PixelToUnit(collision.NewPixelsToMove);
						base.Speed = 0f;
						HasStopped = true;
						PhysicsEngine.PostSliceVelocity = new Vector2(0f, 0f);
						SpeculativeRigidbody specRigidbody = ((BraveBehaviour)base.Projectile).specRigidbody;
						specRigidbody.OnCollision = (Action<CollisionData>)Delegate.Remove(specRigidbody.OnCollision, new Action<CollisionData>(OnCollision));
						((Bullet)this).StartTask(DoPull());
					}
					else
					{
						HasStopped = true;
						base.Speed = 0f;
						PhysicsEngine.PostSliceVelocity = new Vector2(0f, 0f);
						PhysicsEngine.PostSliceVelocity = collision.MyRigidbody.Velocity;
						((Bullet)this).StartTask(DoPull());
					}
				}

				public IEnumerator DoPull(bool PlayerCollision = false)
				{
					if (FUCK)
					{
						yield break;
					}
					FUCK = true;
					AkSoundEngine.PostEvent("Play_BOSS_lichA_stop_01", ((Component)((Bullet)this).BulletBank).gameObject);
					AkSoundEngine.PostEvent("Play_BOSS_doormimic_lick_02", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
					if (!PlayerCollision)
					{
						yield return ((Bullet)this).Wait(45);
						for (int k = 0; k < 32; k++)
						{
							((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction(((Bullet)this).RandomAngle(), (DirectionType)0, -1f), new Speed(7f, (SpeedType)0), (Bullet)(object)new Teeth(Random.Range(7, 11), Random.Range(60, 180)));
						}
					}
					AkSoundEngine.PostEvent("Play_ITM_Crisis_Stone_Impact_02", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
					Vector2 Self = ((Bullet)this).Position;
					for (int j = 0; j < 45; j++)
					{
						((Bullet)this).Position = Vector2.Lerp(Self, ((Bullet)m_parentScript).Position, (float)j / 45f);
						yield return ((Bullet)this).Wait(1);
					}
					AkSoundEngine.PostEvent("Play_BOSS_dragun_blade_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
					for (int i = 0; i < 16; i++)
					{
						((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction(22.5f * (float)i, (DirectionType)0, -1f), new Speed(1f, (SpeedType)0), (Bullet)(object)new Teeth(20f, 90));
						((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction(22.5f * (float)i, (DirectionType)0, -1f), new Speed(2f, (SpeedType)0), (Bullet)(object)new Teeth(20f, 90));
						((Bullet)this).Fire(Offset.OverridePosition(((Bullet)this).Position), new Direction(22.5f * (float)i, (DirectionType)0, -1f), new Speed(3f, (SpeedType)0), (Bullet)(object)new Teeth(20f, 90));
					}
					HasTrulyStopped = true;
					((Bullet)this).Vanish(false);
				}
			}

			public class Teeth : Bullet
			{
				private float S;

				private int T;

				public Teeth(float newSpeed, int t)
					: base("teeth_wave", false, false, false)
				{
					S = newSpeed;
					T = t;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ChangeSpeed(new Speed(S, (SpeedType)0), T);
					base.Projectile.IgnoreTileCollisionsFor(90f);
					yield return ((Bullet)this).Wait(90 + T);
				}
			}

			public override IEnumerator Top()
			{
				AbominationBehaviour behavior = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>();
				AkSoundEngine.PostEvent("Play_ParasiteScream", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(105);
				List<HandBullet> handBullets = new List<HandBullet>();
				if (behavior.DeadParts == 2)
				{
					for (int j = -2; j < 3; j++)
					{
						HandBullet handBullet2 = FireVolleySpecial(28f, 37.5f * (float)j);
						handBullets.Add(handBullet2);
						yield return ((Bullet)this).Wait(12);
					}
				}
				else
				{
					for (int i = 0; i < behavior.DeadParts + 1; i++)
					{
						HandBullet handBullet = FireVolley(28f, 20 * i);
						handBullets.Add(handBullet);
						yield return ((Bullet)this).Wait(30);
					}
				}
				bool allEnded = false;
				while (!allEnded)
				{
					allEnded = true;
					foreach (HandBullet entry in handBullets)
					{
						if (!entry.HasTrulyStopped)
						{
							allEnded = false;
						}
					}
					yield return ((Bullet)this).Wait(1);
				}
			}

			private HandBullet FireVolleySpecial(float speed, float Special)
			{
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: Expected O, but got Unknown
				//IL_0048: Expected O, but got Unknown
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Expected O, but got Unknown
				AkSoundEngine.PostEvent("Play_BOSS_Rat_Tail_Whip_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				HandBullet handBullet = new HandBullet(this);
				((Bullet)this).Fire(new Direction(((Bullet)this).AimDirection + Special, (DirectionType)1, -1f), new Speed(5f, (SpeedType)0), (Bullet)(object)handBullet);
				for (int i = 0; i < 50; i++)
				{
					((Bullet)this).Fire(new Direction(((Bullet)this).AimDirection, (DirectionType)1, -1f), (Bullet)(object)new ArmBullet(this, handBullet, i));
				}
				return handBullet;
			}

			private HandBullet FireVolley(float speed, float RNG)
			{
				//IL_0039: 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: Expected O, but got Unknown
				//IL_004f: Expected O, but got Unknown
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Expected O, but got Unknown
				AkSoundEngine.PostEvent("Play_BOSS_Rat_Tail_Whip_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				HandBullet handBullet = new HandBullet(this);
				((Bullet)this).Fire(new Direction(((Bullet)this).AimDirection + Random.Range(0f - RNG, RNG), (DirectionType)1, -1f), new Speed(5f, (SpeedType)0), (Bullet)(object)handBullet);
				for (int i = 0; i < 50; i++)
				{
					((Bullet)this).Fire(new Direction(((Bullet)this).AimDirection, (DirectionType)1, -1f), (Bullet)(object)new ArmBullet(this, handBullet, i));
				}
				return handBullet;
			}
		}

		public class LeftEye_2 : Script
		{
			public class RotatingBullet : Bullet
			{
				public float del;

				private float pred;

				private const float ExpandSpeed = 4.5f;

				private const float SpinSpeed = 40f;

				private LeftEye_2 m_parent;

				private float m_angle;

				private float m_spinSpeed;

				private float m_radius;

				private string m_bulletype;

				public RotatingBullet(float spinspeed, string BulletType, LeftEye_2 parent, float angle = 0f, float aradius = 0f, float predRadius = 10f, float delay = 0f)
					: base(BulletType, false, false, false)
				{
					m_parent = parent;
					m_angle = angle;
					m_radius = aradius;
					m_bulletype = BulletType;
					((Bullet)this).SuppressVfx = true;
					m_spinSpeed = spinspeed;
					pred = predRadius;
					del = delay;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ManualControl = true;
					Vector2 centerPosition = ((Bullet)this).Position;
					float radius = 0f;
					for (int i = 0; i < 900; i++)
					{
						if ((float)i == 150f + del)
						{
							((Bullet)this).ChangeSpeed(new Speed(base.Speed + 9f, (SpeedType)0), 240);
							((Bullet)this).ChangeDirection(new Direction(((Bullet)m_parent).GetAimDirection(1f, pred), (DirectionType)1, -1f), 20);
							((Bullet)this).StartTask(ChangeSpinSpeedTask(60f, 240));
						}
						((Bullet)this).UpdateVelocity();
						centerPosition += base.Velocity / 60f;
						if ((float)i < 120f + del)
						{
							radius = Mathf.Lerp(0f, m_radius, Toolbox.SinLerpTValue((float)i / 120f + del));
						}
						m_angle += m_spinSpeed / 60f;
						((Bullet)this).Position = centerPosition + BraveMathCollege.DegreesToVector(m_angle, radius);
						yield return ((Bullet)this).Wait(1);
					}
					((Bullet)this).Vanish(false);
				}

				private IEnumerator ChangeSpinSpeedTask(float newSpinSpeed, int term)
				{
					float delta = (newSpinSpeed - m_spinSpeed) / (float)term;
					for (int i = 0; i < term; i++)
					{
						m_spinSpeed += delta;
						yield return ((Bullet)this).Wait(1);
					}
				}
			}

			public override IEnumerator Top()
			{
				AbominationBehaviour behavior = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>();
				AkSoundEngine.PostEvent("Play_ParasiteTell", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				AkSoundEngine.PostEvent("Play_CHR_muncher_chew_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(60);
				float startDirection = ((Bullet)this).AimDirection;
				if (behavior.DeadParts == 2)
				{
					for (int g3 = 0; g3 < 2; g3++)
					{
						for (int j = 0; j < 30 / (g3 + 1); j++)
						{
							((Bullet)this).Fire(new Direction((float)(12 * (g3 + 1) * j), (DirectionType)1, -1f), new Speed(0f, (SpeedType)0), (Bullet)(object)new RotatingBullet(30f, "teeth_football", this, startDirection + (float)(12 * (g3 + 1)) * (float)j, 12f - 9f * (float)g3));
						}
					}
					for (int g2 = 0; g2 < 2; g2++)
					{
						for (int k = 0; k < 30 / (g2 + 1); k++)
						{
							((Bullet)this).Fire(new Direction((float)(12 * (g2 + 1) * k), (DirectionType)1, -1f), new Speed(0f, (SpeedType)0), (Bullet)(object)new RotatingBullet(30f, "teeth_football", this, startDirection + (float)(12 * (g2 + 1)) * (float)k, 10f - 8f * (float)g2, 10f, 75f));
						}
					}
				}
				else
				{
					for (int g = 0; g < 1 + behavior.DeadParts; g++)
					{
						for (int i = 0; i < 60 / (g + 1); i++)
						{
							((Bullet)this).Fire(new Direction((float)(6 * (g + 1) * i), (DirectionType)1, -1f), new Speed(0f, (SpeedType)0), (Bullet)(object)new RotatingBullet(30f, "teeth_football", this, startDirection + (float)(6 * (g + 1)) * (float)i, 11f - 7f * (float)g));
						}
					}
				}
				yield return ((Bullet)this).Wait(150);
				AkSoundEngine.PostEvent("Play_ENM_blobulord_leap_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
			}
		}

		public class RightEye_1 : Script
		{
			public class SnakeBullet : Bullet
			{
				private string name;

				public Vector2 Pos;

				private int delay;

				public SnakeBullet(string t, int delay, Vector2 vector2)
					: base(t, false, false, false)
				{
					//IL_0014: Unknown result type (might be due to invalid IL or missing references)
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					this.delay = delay;
					Pos = vector2;
					name = t;
				}

				public override IEnumerator Top()
				{
					((Bullet)this).ManualControl = true;
					yield return ((Bullet)this).Wait(delay);
					Vector2 truePosition = ((Bullet)this).Position;
					for (int q = 0; q < 5; q++)
					{
						for (int i = 0; i < 150; i++)
						{
							float offsetMagnitude = Mathf.SmoothStep(-0.5f, 0.5f, Mathf.PingPong(0.5f + (float)i / 60f * 3f, 1f));
							if (i > 75 && i < 125)
							{
								float num = Vector2Extensions.ToAngle(Pos - truePosition);
								float value = BraveMathCollege.ClampAngle180(num - base.Direction);
								base.Direction += Mathf.Clamp(value, -7f, 7f);
							}
							truePosition += BraveMathCollege.DegreesToVector(base.Direction, base.Speed / 90f);
							((Bullet)this).Position = truePosition + BraveMathCollege.DegreesToVector(base.Direction - 120f, offsetMagnitude);
							yield return ((Bullet)this).Wait(1);
						}
						if (name == "donut")
						{
							AkSoundEngine.PostEvent("Play_ENM_critter_poof_01", ((Component)base.Projectile).gameObject);
							((Bullet)this).Fire(Offset.OverridePosition(Vector2.op_Implicit(((BraveBehaviour)base.Projectile).transform.position)), new Direction(0f, (DirectionType)0, -1f), new Speed(0f, (SpeedType)0), (Bullet)new SpeedChangingBullet("spore2", 13f, 120, -1, false));
							((Bullet)this).Fire(Offset.OverridePosition(Vector2.op_Implicit(((BraveBehaviour)base.Projectile).transform.position)), new Direction(0f, (DirectionType)0, -1f), new Speed(0f, (SpeedType)0), (Bullet)new SpeedChangingBullet("spore2", 15f, 120, -1, false));
						}
					}
					((Bullet)this).Vanish(false);
				}
			}

			public override IEnumerator Top()
			{
				AbominationBehaviour behavior = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>();
				AkSoundEngine.PostEvent("Play_ParasiteScream", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(75);
				AkSoundEngine.PostEvent("Play_BOSS_spacebaby_charge_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				if (behavior.DeadParts == 2)
				{
					float v = Vector2Extensions.ToAngle(Vector2.right) + (float)Random.Range(-60, 60);
					for (int g2 = 0; g2 < 5; g2++)
					{
						Vector2 vvv2 = ((Bullet)this).GetPredictedTargetPosition(1f, (float)(5 + g2 * 5));
						AkSoundEngine.PostEvent("Play_BOSS_spacebaby_vomit_01", ((Component)((Bullet)this).BulletBank).gameObject);
						for (int u2 = 0; u2 < 42; u2++)
						{
							((Bullet)this).Fire(new Direction(v, (DirectionType)1, -1f), new Speed(6f, (SpeedType)0), (Bullet)(object)new SnakeBullet((u2 == 0) ? "donut" : "gross", u2 * 3 + 3, vvv2));
						}
						yield return ((Bullet)this).Wait(15);
					}
					yield break;
				}
				float v2 = Vector2Extensions.ToAngle(Vector2.right) + (float)Random.Range(-75, 75);
				for (int g = 0; g < 2 + behavior.DeadParts; g++)
				{
					Vector2 vvv = ((Bullet)this).GetPredictedTargetPosition(Random.Range(0.1f, 1f), (float)Random.Range(3, 30));
					AkSoundEngine.PostEvent("Play_BOSS_spacebaby_vomit_01", ((Component)((Bullet)this).BulletBank).gameObject);
					for (int u = 0; u < 16 + behavior.DeadParts * 8; u++)
					{
						((Bullet)this).Fire(new Direction(v2, (DirectionType)1, -1f), new Speed(6f, (SpeedType)0), (Bullet)(object)new SnakeBullet((u == 0) ? "donut" : "gross", u * 3 + 3, vvv));
					}
					yield return ((Bullet)this).Wait(37 + behavior.DeadParts);
				}
			}
		}

		public class RightEye_2 : Script
		{
			public class WaveBullet : Bullet
			{
				public WaveBullet()
					: base("gross", false, false, false)
				{
				}

				public override IEnumerator Top()
				{
					yield return ((Bullet)this).Wait(20);
					for (int i = 0; i < 10; i++)
					{
						((Bullet)this).ChangeSpeed(new Speed(-3f, (SpeedType)0), 50);
						yield return ((Bullet)this).Wait(80);
						((Bullet)this).ChangeSpeed(new Speed(10f, (SpeedType)0), 50);
						yield return ((Bullet)this).Wait(80);
					}
					((Bullet)this).Vanish(false);
				}
			}

			public override IEnumerator Top()
			{
				AbominationBehaviour behavior = ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).GetComponent<AbominationBehaviour>();
				AkSoundEngine.PostEvent("Play_ParasiteTell", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				yield return ((Bullet)this).Wait(75);
				AkSoundEngine.PostEvent("Play_BOSS_spacebaby_charge_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				if (behavior.DeadParts == 2)
				{
					AkSoundEngine.PostEvent("Play_BOSS_doormimic_vomit_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
					for (int g4 = 0; g4 < 5; g4++)
					{
						float v2 = Vector2Extensions.ToAngle(Vector2.right) + (float)Random.Range(-75, 75);
						((Bullet)this).Fire(new Direction(v2, (DirectionType)1, -1f), new Speed(6f, (SpeedType)0), new Bullet("homing", false, false, false));
					}
					for (int g3 = 0; g3 < 5; g3++)
					{
						AkSoundEngine.PostEvent("Play_ENM_blobulord_bubble_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
						for (int r2 = 0; r2 < 8; r2++)
						{
							((Bullet)this).Fire(new Direction((float)(45 * r2) + (float)g3 * 22.5f, (DirectionType)1, -1f), new Speed(4f + (float)(g3 * 2), (SpeedType)0), (Bullet)(object)new WaveBullet());
						}
						yield return ((Bullet)this).Wait(15);
					}
					yield break;
				}
				AkSoundEngine.PostEvent("Play_BOSS_doormimic_vomit_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
				for (int g2 = 0; g2 < 3 + behavior.DeadParts; g2++)
				{
					float v = Vector2Extensions.ToAngle(Vector2.right) + (float)Random.Range(-60, 60);
					((Bullet)this).Fire(new Direction(v, (DirectionType)1, -1f), new Speed(6f, (SpeedType)0), new Bullet("homing", false, false, false));
				}
				for (int g = 0; g < 2 + behavior.DeadParts; g++)
				{
					AkSoundEngine.PostEvent("Play_ENM_blobulord_bubble_01", ((Component)((BraveBehaviour)((Bullet)this).BulletBank).aiActor).gameObject);
					for (int r = 0; r < 24; r++)
					{
						((Bullet)this).Fire(new Direction(15f * (float)r + (float)g * 7.5f, (DirectionType)1, -1f), new Speed(6f + (float)(g * 3), (SpeedType)0), (Bullet)(object)new WaveBullet());
					}
					yield return ((Bullet)this).Wait(75 + behavior.DeadParts);
				}
			}
		}

		public class AbominationBehaviour : BraveBehaviour
		{
			public List<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition> potentialFleshballs = new List<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition>();

			private RoomHandler m_StartRoom;

			public int DeadParts = 0;

			public bool PartDiedThisLoop = false;

			public bool CanAttack = false;

			public Action OnAnimationLoop;

			public List<AbominationPart> BodyParts = new List<AbominationPart>();

			public void Update()
			{
				m_StartRoom = ((DungeonPlaceableBehaviour)((BraveBehaviour)this).aiActor).GetAbsoluteParentRoom();
			}

			private void Start()
			{
				m_StartRoom = ((DungeonPlaceableBehaviour)((BraveBehaviour)this).aiActor).GetAbsoluteParentRoom();
				((BraveBehaviour)((BraveBehaviour)this).aiActor).sprite.IsPerpendicular = false;
				((BraveBehaviour)((BraveBehaviour)this).aiActor).healthHaver.OnPreDeath += delegate
				{
					//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_006f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0092: Unknown result type (might be due to invalid IL or missing references)
					//IL_009c: Unknown result type (might be due to invalid IL or missing references)
					foreach (AbominationPart bodyPart in BodyParts)
					{
						bodyPart.bodyPart.Render = false;
					}
					GlobalMessageRadio.BroadcastMessage("RetractFleshSpikes");
					GameObject val = Object.Instantiate<GameObject>(ExpandedModule.AssetBundle.LoadAsset<GameObject>("MeatFleshParticles"), Vector2.op_Implicit(((BraveBehaviour)((BraveBehaviour)this).aiActor).sprite.WorldCenter), Quaternion.identity);
					GameObjectExtensions.SetLayerRecursively(val, LayerMask.NameToLayer("Unoccluded"));
					Transform transform = val.transform;
					transform.localScale *= 0.5f;
					Object.Destroy((Object)(object)val, 4f);
				};
				((BraveBehaviour)((BraveBehaviour)this).aiActor).healthHaver.OnDeath += delegate
				{
					//IL_0011: Unknown result type (might be due to invalid IL or missing references)
					((MonoBehaviour)GameManager.Instance).StartCoroutine(DoKeyLaunch(((BraveBehaviour)((BraveBehaviour)this).aiActor).sprite.WorldBottomCenter));
				};
				tk2dSpriteAnimator spriteAnimator = ((BraveBehaviour)((BraveBehaviour)this).aiActor).spriteAnimator;
				spriteAnimator.AnimationEventTriggered = (Action<tk2dSpriteAnimator, tk2dSpriteAnimationClip, int>)Delegate.Combine(spriteAnimator.AnimationEventTriggered, new Action<tk2dSpriteAnimator, tk2dSpriteAnimationClip, int>(EventTriggered));
				potentialFleshballs = ((DungeonPlaceableBehaviour)((BraveBehaviour)this).aiActor).GetAbsoluteParentRoom().GetComponentsInRoom<RoomObjects_ParasiticAbomination.PotentialFleshBallPosition>();
			}

			public static IEnumerator DoKeyLaunch(Vector2 vector2)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				GameObject effect = Object.Instantiate<GameObject>(RoomObjects_ParasiticAbomination.GoeyBlast.effect, Vector2.op_Implicit(vector2), Quaternion.identity);
				Object.Destroy((Object)(object)effect);
				GameObject item = ((Component)PickupObjectDatabase.GetById(ExpandKeyBulletPickup.OldKeyID)).gameObject;
				if (GameStatsManager.HasInstance && GameStatsManager.Instance.GetFlag((GungeonFlags)190000))
				{
					PickupObject component = item.GetComponent<PickupObject>();
					if (Object.op_Implicit((Object)(object)component) && component.PickupObjectId == GlobalItemIds.UnfinishedGun)
					{
						item = ((Component)PickupObjectDatabase.GetById(GlobalItemIds.FinishedGun)).gameObject;
					}
				}
				GameObject gameObject = Object.Instantiate<GameObject>(item, Vector2.op_Implicit(vector2), Quaternion.identity);
				SpriteOutlineManager.AddOutlineToSprite((tk2dBaseSprite)(object)gameObject.GetComponent<tk2dSprite>(), Color.black, 0.1f, 0f, (OutlineType)0);
				AkSoundEngine.PostEvent("Play_BOSS_doormimic_vomit_01", gameObject.gameObject);
				PickupObject byId = PickupObjectDatabase.GetById(207);
				GameObject g = Object.Instantiate<GameObject>(((Gun)((byId is Gun) ? byId : null)).muzzleFlashEffects.effects[0].effects[0].effect, Vector2.op_Implicit(vector2), Quaternion.Euler(0f, 0f, Vector2Extensions.ToAngle(Vector2.up)));
				Transform transform = g.transform;
				transform.localScale *= 1.3f;
				Object.Destroy((Object)(object)g, 3f);
				SpeculativeRigidbody body = gameObject.GetComponent<SpeculativeRigidbody>();
				RoomHandler room = Vector3Extensions.GetAbsoluteRoom(vector2);
				IntVector2 intVector = IntVector2.Zero;
				intVector = room.GetBestRewardLocation(new IntVector2(1, 1), (RewardLocationStyle)1, false);
				Vector3 direction = ((IntVector2)(ref intVector)).ToCenterVector3(0f) - Vector2Extensions.ToVector3XUp(vector2, 0f);
				float e1 = 0f;
				float duration = 1.5f;
				while (e1 < duration)
				{
					e1 += BraveTime.DeltaTime;
					Vector3 position2 = Vector2.op_Implicit(Vector2.Lerp(vector2, Vector2.op_Implicit(((IntVector2)(ref intVector)).ToCenterVector3(0f) + new Vector3(0f, -6f)), e1 / duration));
					position2 += new Vector3(0f, 10f * Toolbox.SinLerpTValueFull(e1 / duration));
					gameObject.transform.position = position2;
					gameObject.transform.Rotate(new Vector3(0f, 0f, 1f), gameObject.transform.localRotation.z + 420f * BraveTime.DeltaTime);
					body.Reinitialize();
					yield return null;
				}
				LootEngine.SpawnInternal(gameObject, gameObject.transform.position, Vector2.op_Implicit(direction), 0f, true, false, false, false);
				AkSoundEngine.PostEvent("Play_BOSS_blobulord_burst_01", gameObject.gameObject);
				DeadlyDeadlyGoopManager goopManagerForGoopType = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(GoopUtility.PoisonDef);
				goopManagerForGoopType.TimedAddGoopCircle(Vector2.op_Implicit(gameObject.transform.position), 2f, 0.5f, false);
				Exploder.DoDistortionWave(TransformExtensions.PositionVector2(gameObject.transform), 0.15f, 0.05f, 30f, 1f);
				GameObject effect2 = Object.Instantiate<GameObject>(RoomObjects_ParasiticAbomination.GoeyBlast.effect, gameObject.transform.position, Quaternion.identity);
				Object.Destroy((Object)(object)effect2);
				gameObject.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
				gameObject.GetComponent<PickupObject>().RespawnsIfPitfall = true;
			}

			public void EventTriggered(tk2dSpriteAnimator animator, tk2dSpriteAnimationClip clip, int frame)
			{
				if (clip.GetFrame(frame).eventInfo == "CheckAnimationData")
				{
					CanAttack = true;
					if (OnAnimationLoop != null)
					{
						OnAnimationLoop();
					}
				}
				if (clip.GetFrame(frame).eventInfo == "RESET")
				{
					CanAttack = false;
					PartDiedThisLoop = false;
				}
			}
		}

		public static GameObject prefab;

		public static readonly string guid = "ParasiticAbomination_exb";

		public static void BuildPrefab()
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02de: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0316: Expected O, but got Unknown
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_032e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0341: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_035a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0362: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0372: Unknown result type (might be due to invalid IL or missing references)
			//IL_037a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a9: Expected O, but got Unknown
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c7: Expected O, but got Unknown
			//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0406: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Expected O, but got Unknown
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_0548: Unknown result type (might be due to invalid IL or missing references)
			//IL_0565: Unknown result type (might be due to invalid IL or missing references)
			//IL_0574: Unknown result type (might be due to invalid IL or missing references)
			//IL_0579: Unknown result type (might be due to invalid IL or missing references)
			//IL_0596: 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_05aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05db: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_060c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0629: Unknown result type (might be due to invalid IL or missing references)
			//IL_0638: Unknown result type (might be due to invalid IL or missing references)
			//IL_063d: Unknown result type (might be due to invalid IL or missing references)
			//IL_065a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0669: Unknown result type (might be due to invalid IL or missing references)
			//IL_066e: Unknown result type (might be due to invalid IL or missing references)
			//IL_068b: Unknown result type (might be due to invalid IL or missing references)
			//IL_069a: Unknown result type (might be due to invalid IL or missing references)
			//IL_069f: Unknown result type (might be due to invalid IL or missing references)
			//IL_077f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0786: Expected O, but got Unknown
			//IL_07c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_087a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0881: Expected O, but got Unknown
			//IL_0884: Unknown result type (might be due to invalid IL or missing references)
			//IL_098e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0993: Unknown result type (might be due to invalid IL or missing references)
			//IL_0995: Unknown result type (might be due to invalid IL or missing references)
			//IL_099a: Unknown result type (might be due to invalid IL or missing references)
			//IL_099c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_09af: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_09fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a09: Expected O, but got Unknown
			//IL_0a7c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c98: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c9f: Expected O, but got Unknown
			//IL_0cdd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d93: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d9a: Expected O, but got Unknown
			//IL_0d9d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ea7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eb3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eb5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eba: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ec1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ec8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ed3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eda: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ef2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0efa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f01: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f08: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f0f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f16: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f22: Expected O, but got Unknown
			//IL_0f95: Unknown result type (might be due to invalid IL or missing references)
			//IL_11c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_11cd: Expected O, but got Unknown
			//IL_120b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1210: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c8: Expected O, but got Unknown
			//IL_12cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_13d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_13da: Unknown result type (might be due to invalid IL or missing references)
			//IL_13dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_13e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_13e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_13e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_13ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_13f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_1401: Unknown result type (might be due to invalid IL or missing references)
			//IL_1408: Unknown result type (might be due to invalid IL or missing references)
			//IL_1410: Unknown result type (might be due to invalid IL or missing references)
			//IL_1418: Unknown result type (might be due to invalid IL or missing references)
			//IL_1420: Unknown result type (might be due to invalid IL or missing references)
			//IL_1428: Unknown result type (might be due to invalid IL or missing references)
			//IL_142f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1436: Unknown result type (might be due to invalid IL or missing references)
			//IL_143d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1444: Unknown result type (might be due to invalid IL or missing references)
			//IL_1450: Expected O, but got Unknown
			//IL_14c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_167c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1681: Unknown result type (might be due to invalid IL or missing references)
			//IL_168c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1693: Unknown result type (might be due to invalid IL or missing references)
			//IL_169a: Unknown result type (might be due to invalid IL or missing references)
			//IL_16a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_16ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_16bc: Expected O, but got Unknown
			//IL_16de: Unknown result type (might be due to invalid IL or missing references)
			//IL_16e5: Expected O, but got Unknown
			//IL_1736: Unknown result type (might be due to invalid IL or missing references)
			//IL_1740: Expected O, but got Unknown
			//IL_174c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1756: Expected O, but got Unknown
			//IL_178d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1794: Expected O, but got Unknown
			//IL_17c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_17cb: Expected O, but got Unknown
			//IL_1811: Unknown result type (might be due to invalid IL or missing references)
			//IL_1818: Expected O, but got Unknown
			//IL_1845: Unknown result type (might be due to invalid IL or missing references)
			//IL_184f: Expected O, but got Unknown
			//IL_189e: Unknown result type (might be due to invalid IL or missing references)
			//IL_18a5: Expected O, but got Unknown
			//IL_18d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_18dc: Expected O, but got Unknown
			//IL_192b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1932: Expected O, but got Unknown
			//IL_195f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1969: Expected O, but got Unknown
			//IL_19b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_19bf: Expected O, but got Unknown
			//IL_19ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_19f6: Expected O, but got Unknown
			//IL_1a45: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a4c: Expected O, but got Unknown
			//IL_1a79: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a83: Expected O, but got Unknown
			//IL_1ad2: Unknown result type (might be due to invalid IL or missing references)
			//IL_1ad9: Expected O, but got Unknown
			//IL_1b06: Unknown result type (might be due to invalid IL or missing references)
			//IL_1b10: Expected O, but got Unknown
			//IL_1c5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1c62: Expected O, but got Unknown
			//IL_1ca9: Unknown result type (might be due to invalid IL or missing references)
			//IL_1cae: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1d49: Expected O, but got Unknown
			//IL_2049: Unknown result type (might be due to invalid IL or missing references)
			//IL_20cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_20d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_20fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_2102: Unknown result type (might be due to invalid IL or missing references)
			//IL_210d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2118: Unknown result type (might be due to invalid IL or missing references)
			//IL_2123: Unknown result type (might be due to invalid IL or missing references)
			//IL_2124: Unknown result type (might be due to invalid IL or missing references)
			//IL_2129: Unknown result type (might be due to invalid IL or missing references)
			//IL_212e: Unknown result type (might be due to invalid IL or missing references)
			//IL_212f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2134: Unknown result type (might be due to invalid IL or missing references)
			//IL_2139: Unknown result type (might be due to invalid IL or missing references)
			//IL_213a: Unknown result type (might be due to invalid IL or missing references)
			//IL_213f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2144: Unknown result type (might be due to invalid IL or missing references)
			//IL_2145: Unknown result type (might be due to invalid IL or missing references)
			//IL_214a: Unknown result type (might be due to invalid IL or missing references)
			//IL_2154: Expected O, but got Unknown
			//IL_21b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_2195: Unknown result type (might be due to invalid IL or missing references)
			//IL_2202: Unknown result type (might be due to invalid IL or missing references)
			//IL_2219: Unknown result type (might be due to invalid IL or missing references)
			//IL_2230: Unknown result type (might be due to invalid IL or missing references)
			//IL_2247: Unknown result type (might be due to invalid IL or missing references)
			//IL_225e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2275: Unknown result type (might be due to invalid IL or missing references)
			//IL_228c: Unknown result type (might be due to invalid IL or missing references)
			//IL_22a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_22ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_22d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_22ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_2302: Unknown result type (might be due to invalid IL or missing references)
			//IL_231a: Unknown result type (might be due to invalid IL or missing references)
			//IL_2332: Unknown result type (might be due to invalid IL or missing references)
			//IL_234a: Unknown result type (might be due to invalid IL or missing references)
			//IL_2379: Unknown result type (might be due to invalid IL or missing references)
			//IL_2390: Unknown result type (might be due to invalid IL or missing references)
			//IL_23a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_23be: Unknown result type (might be due to invalid IL or missing references)
			//IL_23d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_23ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_2403: Unknown result type (might be due to invalid IL or missing references)
			//IL_241a: Unknown result type (might be due to invalid IL or missing references)
			//IL_2431: Unknown result type (might be due to invalid IL or missing references)
			//IL_2449: Unknown result type (might be due to invalid IL or missing references)
			//IL_2461: Unknown result type (might be due to invalid IL or missing references)
			//IL_2479: Unknown result type (might be due to invalid IL or missing references)
			//IL_2491: Unknown result type (might be due to invalid IL or missing references)
			//IL_24a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_24c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_24f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_2507: Unknown result type (might be due to invalid IL or missing references)
			//IL_251e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2535: Unknown result type (might be due to invalid IL or missing references)
			//IL_254c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2563: Unknown result type (might be due to invalid IL or missing references)
			//IL_257a: Unknown result type (might be due to invalid IL or missing references)
			//IL_2591: Unknown result type (might be due to invalid IL or missing references)
			//IL_25a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_25c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_25d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_25f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_2608: Unknown result type (might be due to invalid IL or missing references)
			//IL_2620: Unknown result type (might be due to invalid IL or missing references)
			//IL_2638: Unknown result type (might be due to invalid IL or missing references)
			//IL_2667: Unknown result type (might be due to invalid IL or missing references)
			//IL_267e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2695: Unknown result type (might be due to invalid IL or missing references)
			//IL_26ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_26c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_26da: Unknown result type (might be due to invalid IL or missing references)
			//IL_26f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_2708: Unknown result type (might be due to invalid IL or missing references)
			//IL_271f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2737: Unknown result type (might be due to invalid IL or missing references)
			//IL_274f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2767: Unknown result type (might be due to invalid IL or missing references)
			//IL_277f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2797: Unknown result type (might be due to invalid IL or missing references)
			//IL_27af: Unknown result type (might be due to invalid IL or missing references)
			//IL_27de: Unknown result type (might be due to invalid IL or missing references)
			//IL_27f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_280c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2823: Unknown result type (might be due to invalid IL or missing references)
			//IL_283a: Unknown result type (might be due to invalid IL or missing references)
			//IL_2851: Unknown result type (might be due to invalid IL or missing references)
			//IL_2868: Unknown result type (might be due to invalid IL or missing references)
			//IL_287f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2896: Unknown result type (might be due to invalid IL or missing references)
			//IL_28ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_28c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_28de: Unknown result type (might be due to invalid IL or missing references)
			//IL_28f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_290e: Unknown result type (might be due to invalid IL or missing references)
			//IL_2926: Unknown result type (might be due to invalid IL or missing references)
			//IL_2955: Unknown result type (might be due to invalid IL or missing references)
			//IL_296c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2983: Unknown result type (might be due to invalid IL or missing references)
			//IL_299a: Unknown result type (might be due to invalid IL or missing references)
			//IL_29b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_29c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_29df: Unknown result type (might be due to invalid IL or missing references)
			//IL_29f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a25: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a3d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a55: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a85: Unknown result type (might be due to invalid IL or missing references)
			//IL_2a9d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2acc: Unknown result type (might be due to invalid IL or missing references)
			//IL_2ae3: Unknown result type (might be due to invalid IL or missing references)
			//IL_2afa: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b11: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b28: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b56: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b84: Unknown result type (might be due to invalid IL or missing references)
			//IL_2b9c: Unknown result type (might be due to invalid IL or missing references)
			//IL_2bb4: Unknown result type (might be due to invalid IL or missing references)
			//IL_2bcc: Unknown result type (might be due to invalid IL or missing references)
			//IL_2be4: Unknown result type (might be due to invalid IL or missing references)
			//IL_2bfc: Unknown result type (might be due to invalid IL or missing references)
			//IL_2c14: Unknown result type (might be due to invalid IL or missing references)
			tk2dSpriteCollectionData abominationBossCollection = StaticCollections.AbominationBossCollection;
			if ((Object)(object)prefab == (Object)null || !EnemyBuilder.Dictionary.ContainsKey(guid))
			{
				prefab = EnemyBuilder.BuildPrefabBundle("ParasiticAbomination_exb", guid, abominationBossCollection, 49, new IntVector2(0, 0), new IntVector2(8, 9), HasAiShooter: false, UsesAttackGroup: true);
				AbominationBehaviour abominationBehaviour = prefab.AddComponent<AbominationBehaviour>();
				((BraveBehaviour)abominationBehaviour).sprite.collection = abominationBossCollection;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).spriteAnimator.Library = StaticCollections.AbominationBossAnimation;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).spriteAnimator.library = StaticCollections.AbominationBossAnimation;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiAnimator).spriteAnimator = ((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).spriteAnimator;
				((BraveBehaviour)abominationBehaviour).sprite.IsPerpendicular = false;
				((BraveBehaviour)abominationBehaviour).sprite.IsPerpendicular = true;
				((BraveBehaviour)abominationBehaviour).sprite.HeightOffGround = -0.5f;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).knockbackDoer.weight = 100000f;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).knockbackDoer.knockbackMultiplier = 0f;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).knockbackDoer.SetImmobile(true, "Tetehr");
				((BraveBehaviour)abominationBehaviour).aiActor.MovementSpeed = 0f;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).healthHaver.PreventAllDamage = true;
				((BraveBehaviour)abominationBehaviour).aiActor.CollisionDamage = 1f;
				((BraveBehaviour)abominationBehaviour).aiActor.IgnoreForRoomClear = false;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).aiAnimator.HitReactChance = 0f;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).specRigidbody.CollideWithOthers = true;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).specRigidbody.CollideWithTileMap = true;
				((Behaviour)((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).aiAnimator).enabled = true;
				((BraveBehaviour)abominationBehaviour).aiActor.PreventFallingInPitsEver = true;
				((BraveBehaviour)abominationBehaviour).aiActor.procedurallyOutlined = true;
				ObjectVisibilityManager component = ((Component)abominationBehaviour).gameObject.GetComponent<ObjectVisibilityManager>();
				Object.Destroy((Object)(object)component);
				AIActor aiActor = ((BraveBehaviour)abominationBehaviour).aiActor;
				((GameActor)aiActor).EffectResistances = (ActorEffectResistance[])(object)new ActorEffectResistance[1]
				{
					new ActorEffectResistance
					{
						resistAmount = 1f,
						resistType = (EffectResistanceType)2
					}
				};
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).healthHaver.ForceSetCurrentHealth(6000f);
				((BraveBehaviour)abominationBehaviour).aiActor.CollisionKnockbackStrength = 0f;
				((BraveBehaviour)abominationBehaviour).aiActor.CanTargetPlayers = true;
				((BraveBehaviour)abominationBehaviour).aiActor.reinforceType = (ReinforceType)0;
				((BraveBehaviour)abominationBehaviour).aiActor.PathableTiles = (CellTypes)6;
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).healthHaver.SetHealthMaximum(6000f, (float?)null, false);
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).specRigidbody.PixelColliders.Clear();
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).specRigidbody.PixelColliders.Add(new PixelCollider
				{
					ColliderGenerationMode = (PixelColliderGeneration)0,
					CollisionLayer = (CollisionLayer)3,
					IsTrigger = false,
					BagleUseFirstFrameOnly = false,
					SpecifyBagelFrame = string.Empty,
					BagelColliderNumber = 0,
					ManualOffsetX = 44,
					ManualOffsetY = 80,
					ManualWidth = 30,
					ManualHeight = 11,
					ManualDiameter = 0,
					ManualLeftX = 0,
					ManualLeftY = 0,
					ManualRightX = 0,
					ManualRightY = 0
				});
				((BraveBehaviour)((BraveBehaviour)abominationBehaviour).aiActor).specRigidbody.PixelColliders.Add(new PixelCollider
				{
					ColliderGenerationMode = (PixelColliderGeneration)0,
					CollisionLayer = (CollisionLayer)2,
					IsTrigger = false,
					BagleUseFirstFrameOnly = false,
					SpecifyBagelFrame = string.Empty,
					BagelColliderNumber = 0,
					ManualOffsetX = 44,
					ManualOffsetY = 80,
					ManualWidth = 30,
					ManualHeight = 11,
					ManualDiameter = 0,
					ManualLeftX = 0,
					ManualLeftY = 0,
					ManualRightX = 0,
					ManualRightY = 0,
					Enabled = true
				});
				((BraveBehaviour)abominationBehaviour).aiActor.PreventBlackPhantom = false;
				AIAnimator aiAnimator = ((BraveBehaviour)abominationBehaviour).aiAnimator;
				DirectionalAnimation val = new DirectionalAnimation();
				val.Type = (DirectionType)1;
				val.Prefix = "idle";
				val.AnimNames = new string[1] { "idle" };
				val.Flipped = (FlipType[])(object)new FlipType[1];
				aiAnimator.IdleAnimation = val;
				val = new DirectionalAnimation();
				val.Type = (DirectionType)1;
				val.Flipped = (FlipType[])(object)new FlipType[1];
				val.AnimNames = new string[1] { "idle" };
				aiAnimator.MoveAnimation = val;
				Tk2dSpriteAnimatorUtility.AddEventTriggersToAnimation(((BraveBehaviour)abominationBehaviour).spriteAnimator, "idle", new Dictionary<int, string> { { 0, "CheckAnimationData" } });
				Tk2dSpriteAnimatorUtility.AddEventTriggersToAnimation(((BraveBehaviour)abominationBehaviour).spriteAnimator, "idle", new Dictionary<int, string> { { 1, "RESET" } });
				EnemyBuildingTools.AddNewDirectionAnimation(((BraveBehaviour)abominationBehaviour).aiAnimator, "attackMainBody", new string[1] { "attackMainBody" }, (FlipType[])(object)new FlipType[1], (DirectionType)1);
				EnemyBuildingTools.AddNewDirectionAnimation(((BraveBehaviour)abominationBehaviour).aiAnimator, "death", new string[1] { "death" }, (FlipType[])(object)new FlipType[1], (DirectionType)1);
				EnemyBuildingTools.AddNewDirectionAnimation(((BraveBehaviour)abominationBehaviour).aiAnimator, "attackdud", new string[1] { "attackdud" }, (FlipType[])(object)new FlipType[1], (DirectionType)1);
				Tk2dSpriteAnimatorUtility.AddSoundsToAnimationFrame(((BraveBehaviour)abominationBehaviour).spriteAnimator, "emerge_body", new Dictionary<int, string> { { 2, "Play_ENM_beholster_melt_01" } });
				Tk2dSpriteAnimatorUtility.AddSoundsToAnimationFrame(((BraveBehaviour)abominationBehaviour).spriteAnimator, "submerge_body", new Dictionary<int, string> { { 0, "Play_ENM_blobulord_death_01" } });
				GameObject val2 = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldCenter, "Dive");
				GameObject shootPoint = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(3.625f, 7f), "Dive2");
				GameObject shootPoint2 = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(3.625f, 2.8125f), "CenterEyePoint");
				GameObject shootPoint3 = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(1.9375f, 3.625f), "LeftEyePoint");
				GameObject shootPoint4 = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(6.1875f, 3.625f), "RightEyePoint");
				GameObject trans = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(3.625f, 3.5f), "Particle_CenterEyePoint");
				GameObject trans2 = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(2.4375f, 3.625f), "Particle_LeftEyePoint");
				GameObject trans3 = Toolbox.GenerateTransformPoint(((Component)abominationBehaviour).gameObject, ((BraveBehaviour)abominationBehaviour).sprite.WorldBottomLeft + new Vector2(5.75f, 3.625f), "Particle_RightEyePoint");
				GameObject val3 = PrefabBuilder.BuildObject("CenterEye");
				val3.transform.parent = ((Component)abominationBehaviour).gameObject.transform;
				tk2dSprite orAddComponent = GameObjectExtensions.GetOrAddComponent<tk2dSprite>(val3);
				val3.layer = LayerMask.NameToLayer("FG_Critical");
				((tk2dBaseSprite)orAddComponent).SortingOrder = 2;
				((tk2dBaseSprite)orAddComponent).HeightOffGround = 0.05f;
				((tk2dBaseSprite)orAddComponent).ShouldDoTilt = true;
				((tk2dBaseSprite)orAddComponent).IsPerpendicular = false;
				((tk2dBaseSprite)orAddComponent).collection = StaticCollections.AbominationBossCollection;
				GameObjectExtensions.GetOrAddComponent<tk2dBaseSprite>(val3);
				tk2dSpriteAnimator orAddComponent2 = GameObjectExtensions.GetOrAddComponent<tk2dSpriteAnimator>(val3);
				((BraveBehaviour)orAddComponent2).sprite = (tk2dBaseSprite)(object)orAddComponent;
				orAddComponent2.alwaysUpdateOffscreen = true;
				orAddComponent2.AnimateDuringBossIntros = true;
				AIAnimator val4 = val3.AddComponent<AIAnimator>();
				((BraveBehaviour)orAddComponent).sprite.usesOverrideMaterial = true;
				Material val5 = new Material(((BraveBehaviour)((BraveBehaviour)EnemyDatabase.GetOrLoadByGuid(EnemyGUIDs.Gun_Nut_GUID)).sprite).renderer.material);
				val5.mainTexture = ((BraveBehaviour)orAddComponent).renderer.material.mainTexture;
				val5.EnableKeyword("BRIGHTNESS_CLAMP_ON");
				val5.DisableKeyword("BRIGHTNESS_CLAMP_OFF");
				val5.SetColor("_EmissiveColor", Color32.op_Implicit(new Color32((byte)0, (byte)0, (byte)0, (byte)0)));
				val5.SetFloat("_EmissiveColorPower", 0f);
				val5.SetFloat("_EmissivePower", 0f);
				val5.SetFloat("_EmissiveThresholdSensitivity", 0f);
				((BraveBehaviour)((BraveBehaviour)orAddComponent).sprite).renderer.material = val5;
				tk2dBaseSprite orAddComponent3 = GameObjectExtensions.GetOrAddComponent<tk2dBaseSprite>(val3);
				orAddComponent3.SortingOrder = 2;
				orAddComponent3.HeightOffGround = 0.05f;
				orAddComponent3.ShouldDoTilt = true;
				orAddComponent3.IsPerpendicular = false;
				((BraveBehaviour)orAddComponent3).sprite.usesOverrideMaterial = true;
				((BraveBehaviour)orAddComponent3).renderer.material = val5;
				orAddComponent3.collection = StaticCollections.AbominationBossCollection;
				val = new DirectionalAnimation();
				val.Type = (DirectionType)2;
				val.Flipped = (FlipType[])(object)new FlipType[2];
				val.AnimNames = new string[2] { "centereyealive_idle", "centereyealive_idle" };
				val4.IdleAnimation = val;
				EnemyBuildingTools.AddNewDirectionAnimation(val4, "centereyedead_idle", new string[1] { "centereyedead_idle" }, (FlipType[])(object)new FlipType[1], (DirectionType)1);
				EnemyBuildingTools.AddNewDirectionAnimation(val4, "centerEye_attack", new string[1] { "centerEye_attack" }, (FlipType[])(object)new FlipType[1], (DirectionType)1);
				val3.AddComponent<MeshFilter>();
				val3.AddComponent<MeshRenderer>();
				orAddComponent2.Library = StaticCollections.AbominationBossAnimation;
				orAddComponent2.DefaultClipId = orAddComponent2.GetClipIdByName("centereyealive_idle");
				orAddComponent2.playAutomatically = true;
				AdvancedBodyPartController advancedBodyPartController = val3.AddComponent<AdvancedBodyPartController>();
				advancedBodyPartController.Name = "Eye_Center";
				advancedBodyPartController.Render = true;
				((BraveBehaviour)advancedBodyPartController).renderer.enabled = true;
				SpeculativeRigidbody val6 = val3.AddComponent<SpeculativeRigidbody>();
				val6.CollideWithOthers = true;
				val6.CollideWithTileMap = false;
				val6.PixelColliders = new List<PixelCollider>();
				val6.PixelColliders.Add(new PixelCollider
				{
					ColliderGenerationMode = (PixelColliderGeneration)0,
					CollisionLayer = (CollisionLayer)2,
					IsTrigger = false,
					BagleUseFirstFrameOnly = false,
					SpecifyBagelFrame = string.Em