Decompiled source of Hatsune Miku v1.0.2

plugins/MikuMikuMod.dll

Decompiled 2 weeks 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 System.Text;
using Alexandria;
using Alexandria.Assetbundle;
using Alexandria.CharacterAPI;
using Alexandria.EnemyAPI;
using Alexandria.ItemAPI;
using Alexandria.Misc;
using Alexandria.PrefabAPI;
using Alexandria.SoundAPI;
using Alexandria.VisualAPI;
using BepInEx;
using BepInEx.Configuration;
using Dungeonator;
using Gungeon;
using HarmonyLib;
using JuneLib;
using MikuMikuMod.Code;
using MonoMod.RuntimeDetour;
using UnityEngine;
using UnityEngine.Rendering;

[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 MikuMikuMod
{
	internal class AssetBundleLoader
	{
		public static AssetBundle LoadAssetBundleFromLiterallyAnywhere(string name, bool logs = false)
		{
			AssetBundle result = null;
			string text = name + GetPlatformBundleExtension();
			if (File.Exists(MikuMikuModule.FilePathFolder + "/" + text))
			{
				try
				{
					result = AssetBundle.LoadFromFile(Path.Combine(MikuMikuModule.FilePathFolder, text));
					if (logs)
					{
						ETGModConsole.Log((object)"Successfully loaded assetbundle!", false);
					}
				}
				catch (Exception ex)
				{
					ETGModConsole.Log((object)"Failed loading asset bundle from file.", false);
					ETGModConsole.Log((object)ex.ToString(), false);
				}
			}
			else
			{
				ETGModConsole.Log((object)"AssetBundle NOT FOUND!", false);
			}
			return result;
		}

		private static string GetPlatformBundleExtension()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Invalid comparison between Unknown and I4
			if ((int)Application.platform == 13)
			{
				return "-linux";
			}
			if ((int)Application.platform == 1)
			{
				return "-macos";
			}
			return "-windows";
		}
	}
	public class AudioResourceLoader
	{
		public static void loadFromFolder(string modName)
		{
			ResourceLoaderSoundbanks resourceLoaderSoundbanks = new ResourceLoaderSoundbanks();
			resourceLoaderSoundbanks.AutoloadFromPath(MikuMikuModule.FilePathFolder, modName);
		}

		public static void loadFromAssembly(string bankName, string modName)
		{
			ResourceLoaderSoundbanks resourceLoaderSoundbanks = new ResourceLoaderSoundbanks();
			resourceLoaderSoundbanks.AutoloadFromAssembly(Assembly.GetExecutingAssembly(), bankName, modName);
		}
	}
	public class ResourceLoaderSoundbanks
	{
		public void AutoloadFromAssembly(Assembly assembly, string bankName, string prefix)
		{
			if ((object)assembly == null)
			{
				throw new ArgumentNullException("assembly", "Assembly cannot be null.");
			}
			if (prefix == null)
			{
				throw new ArgumentNullException("prefix", "Prefix name cannot be null.");
			}
			prefix = prefix.Trim();
			if (prefix == "")
			{
				throw new ArgumentException("Prefix name cannot be an empty (or whitespace only) string.", "prefix");
			}
			List<string> list = new List<string>(assembly.GetManifestResourceNames());
			for (int i = 0; i < list.Count; i++)
			{
				string text = list[i];
				string text2 = text;
				text2 = text2.Replace('/', Path.DirectorySeparatorChar);
				text2 = text2.Replace('\\', Path.DirectorySeparatorChar);
				if (!text2.Contains(bankName))
				{
					continue;
				}
				text2 = text2.Substring(text2.IndexOf(bankName));
				if (text2.LastIndexOf(".bnk") == text2.Length - ".bnk".Length)
				{
					text2 = text2.Substring(0, text2.Length - ".bnk".Length);
					if (text2.IndexOf(Path.DirectorySeparatorChar) == 0)
					{
						text2 = text2.Substring(1);
					}
					text2 = prefix + ":" + text2;
					Debug.Log((object)$"{typeof(ResourceLoaderSoundbanks)}: Soundbank found, attempting to autoload: name='{text2}' resource='{text}'");
					using Stream stream = assembly.GetManifestResourceStream(text);
					LoadSoundbankFromStream(stream, text2);
				}
			}
		}

		public void AutoloadFromPath(string path, string prefix)
		{
			if (string.IsNullOrEmpty(path))
			{
				throw new ArgumentNullException("path", "Path cannot be null.");
			}
			if (string.IsNullOrEmpty(prefix))
			{
				throw new ArgumentNullException("prefix", "Prefix name cannot be null.");
			}
			prefix = prefix.Trim();
			if (string.IsNullOrEmpty(prefix))
			{
				throw new ArgumentException("Prefix name cannot be an empty (or whitespace only) string.", "prefix");
			}
			path = path.Replace('/', Path.DirectorySeparatorChar);
			path = path.Replace('\\', Path.DirectorySeparatorChar);
			if (!Directory.Exists(path))
			{
				Debug.LogError((object)$"{typeof(ResourceLoaderSoundbanks)}: No autoload directory in path, not autoloading anything. Path='{path}'.");
				return;
			}
			List<string> list = new List<string>(Directory.GetFiles(path, "*.bnk", SearchOption.AllDirectories));
			for (int i = 0; i < list.Count; i++)
			{
				string text = list[i];
				string text2 = text;
				text2 = text2.Replace('/', Path.DirectorySeparatorChar);
				text2 = text2.Replace('\\', Path.DirectorySeparatorChar);
				text2 = text2.Substring(text2.IndexOf(path) + path.Length);
				text2 = text2.Substring(0, text2.Length - ".bnk".Length);
				if (text2.IndexOf(Path.DirectorySeparatorChar) == 0)
				{
					text2 = text2.Substring(1);
				}
				text2 = prefix + ":" + text2;
				Debug.Log((object)$"{typeof(ResourceLoaderSoundbanks)}: Soundbank found, attempting to autoload: name='{text2}' file='{text}'");
				using FileStream stream = File.OpenRead(text);
				LoadSoundbankFromStream(stream, text2);
			}
		}

		private void LoadSoundbankFromStream(Stream stream, string name)
		{
			//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_0032: Unknown result type (might be due to invalid IL or missing references)
			byte[] array = StreamToByteArray(stream);
			IntPtr intPtr = Marshal.AllocHGlobal(array.Length);
			try
			{
				Marshal.Copy(array, 0, intPtr, array.Length);
				uint num = default(uint);
				AKRESULT val = AkSoundEngine.LoadAndDecodeBankFromMemory(intPtr, (uint)array.Length, false, name, false, ref num);
				Debug.Log((object)$"Result of soundbank load: {val}.");
			}
			finally
			{
				Marshal.FreeHGlobal(intPtr);
			}
		}

		public static byte[] StreamToByteArray(Stream input)
		{
			byte[] array = new byte[16384];
			using MemoryStream memoryStream = new MemoryStream();
			int count;
			while ((count = input.Read(array, 0, array.Length)) > 0)
			{
				memoryStream.Write(array, 0, count);
			}
			return memoryStream.ToArray();
		}
	}
	public static class Easing
	{
		public enum Ease
		{
			IN,
			OUT,
			IN_OUT,
			NONE,
			EASE_IN_AND_BACK
		}

		public static float DoLerpT(float t, Ease ease = Ease.IN_OUT)
		{
			return ease switch
			{
				Ease.IN => EaseIn(t), 
				Ease.OUT => EaseOut(t), 
				Ease.IN_OUT => EaseInOut(t), 
				Ease.NONE => t, 
				Ease.EASE_IN_AND_BACK => EaseInAndBack(t), 
				_ => t, 
			};
		}

		public static float EaseIn(float t)
		{
			return t * t;
		}

		public static float EaseInInverse(float t)
		{
			return 1f - t * t;
		}

		public static float Flip(float t)
		{
			return 1f - t;
		}

		public static float EaseOut(float t)
		{
			return Flip(EaseIn(Flip(t)));
		}

		public static float EaseInOut(float t)
		{
			return Mathf.Lerp(EaseIn(t), EaseOut(t), t);
		}

		public static float EaseInAndBack(float t)
		{
			return Mathf.Lerp(EaseIn(t), EaseInInverse(t), t);
		}
	}
	public class Leek : PlayerItem
	{
		public static int ID;

		public static VFXPool Impact;

		public static string ImpactSFX;

		public static GameObject LeekObject;

		private MikuHarmony mikuHarmony;

		public static void Init()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Expected O, but got Unknown
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			string text = "Leek";
			GameObject val = new GameObject(text);
			Leek leek = val.AddComponent<Leek>();
			tk2dSpriteCollectionData mikuItemAndGunCollection = StaticSpriteCollections.MikuItemAndGunCollection;
			ItemBuilder.AddSpriteToObjectAssetbundle(text, mikuItemAndGunCollection.GetSpriteIdByName("leek"), mikuItemAndGunCollection, val);
			string text2 = "Spin To Win! (Not Guaranteed)";
			string text3 = "Spins items into other items. Gets more effective spins with higher Harmony.\n\nA leek..? How does a leek of all things work like that?";
			ItemBuilder.SetupItem((PickupObject)(object)leek, text2, text3, "miku");
			ItemBuilder.SetCooldownType((PlayerItem)(object)leek, (CooldownType)2, 5f);
			((PlayerItem)leek).consumable = false;
			((PickupObject)leek).quality = (ItemQuality)(-50);
			ItemBuilder.AddPassiveStatModifier((PickupObject)(object)leek, (StatType)8, 1f, (ModifyMethod)0);
			((PickupObject)leek).CanBeDropped = false;
			GameObject val2 = PrefabBuilder.BuildObject("leek");
			tk2dSprite val3 = val2.gameObject.AddComponent<tk2dSprite>();
			((tk2dBaseSprite)val3).SetSprite(StaticSpriteCollections.MikuItemAndGunCollection, "takingaleek");
			((BraveBehaviour)val3).renderer.material = new Material(ShaderCache.Acquire("Sprites/Default"));
			((tk2dBaseSprite)val3).SortingOrder = 4;
			GameObjectExtensions.SetLayerRecursively(((Component)val3).gameObject, LayerMask.NameToLayer("FG_Critical"));
			((BraveBehaviour)val3).renderer.sortingLayerName = "Foreground";
			DepthLookupManager.AssignRendererToSortingLayer(((BraveBehaviour)val3).renderer, (GungeonSortingLayer)2);
			ImprovedAfterImage val4 = val2.AddComponent<ImprovedAfterImage>();
			((BraveBehaviour)val4).sprite = (tk2dBaseSprite)(object)val3;
			val4.shadowLifetime = 0.333f;
			val4.shadowTimeDelay = 0.0333f;
			val4.dashColor = Color.white;
			val4.targetHeight = 1f;
			LeekObject = val2;
			HarmonyPatches.OnActiveItemDropped = (Action<PlayerItem, PlayerController>)Delegate.Combine(HarmonyPatches.OnActiveItemDropped, new Action<PlayerItem, PlayerController>(OnThisActiveDropped));
			ID = ((PickupObject)leek).PickupObjectId;
		}

		public static void OnThisActiveDropped(PlayerItem active, PlayerController player)
		{
			if (((PickupObject)active).PickupObjectId == ID)
			{
				((PickupObject)active).Pickup(player);
			}
		}

		public static IEnumerator DoLeekToss(tk2dSpriteAnimator tk2DSpriteAnimator, tk2dSpriteAnimationFrame tk2DSpriteAnimationFrame)
		{
			AttachPoint[] attachPoints = tk2DSpriteAnimationFrame.spriteCollection.spriteDefinitions[tk2DSpriteAnimationFrame.spriteId].GetAttachPoints(tk2DSpriteAnimationFrame.spriteCollection, tk2DSpriteAnimationFrame.spriteId);
			Vector3 attachPoint_start = ((BraveBehaviour)tk2DSpriteAnimator).transform.position + Array.Find(attachPoints, (AttachPoint a) => a.name == "throwpoint_leek").position;
			Vector3 attachPoint_end = ((BraveBehaviour)tk2DSpriteAnimator).transform.position + Array.Find(attachPoints, (AttachPoint a) => a.name == "headlandspot").position;
			GameObject onject = Object.Instantiate<GameObject>(LeekObject, attachPoint_start, Quaternion.identity);
			float uiyferw = Random.Range(540, 1080);
			float e = 0f;
			AkSoundEngine.PostEvent("Play_OBJ_item_throw_01", onject.gameObject);
			while (e < 1f)
			{
				e += Time.deltaTime * 0.666f;
				onject.transform.position = Vector2.op_Implicit(Vector2.Lerp(Vector2.op_Implicit(attachPoint_start), Vector2.op_Implicit(attachPoint_end), e) + new Vector2(0f, Mathf.Lerp(0f, 5f, Easing.DoLerpT(e, Easing.Ease.EASE_IN_AND_BACK))));
				onject.transform.Rotate(new Vector3(0f, 0f, uiyferw * Time.deltaTime));
				yield return null;
			}
			if (((Component)tk2DSpriteAnimator).gameObject.activeSelf)
			{
				Impact.SpawnAtPosition(attachPoint_end, 0f, (Transform)null, (Vector2?)null, (Vector2?)null, (float?)null, false, (SpawnMethod)null, (tk2dBaseSprite)null, false);
				AkSoundEngine.PostEvent("Play_WPN_" + ImpactSFX + "_impact_01", onject.gameObject);
			}
			((Behaviour)onject.GetComponent<ImprovedAfterImage>()).enabled = false;
			DebrisObject orAddComponent = GameObjectExtensions.GetOrAddComponent<DebrisObject>(onject);
			orAddComponent.angularVelocity = Random.Range(90, 120);
			orAddComponent.angularVelocityVariance = Random.Range(10, 60);
			orAddComponent.decayOnBounce = 0.5f;
			orAddComponent.bounceCount = 1;
			orAddComponent.canRotate = true;
			orAddComponent.shouldUseSRBMotion = true;
			orAddComponent.AssignFinalWorldDepth(-0.5f);
			((BraveBehaviour)orAddComponent).sprite = onject.GetComponent<tk2dBaseSprite>();
			orAddComponent.animatePitFall = true;
			orAddComponent.Trigger(Vector2.op_Implicit(Toolbox.GetUnitOnCircle(BraveUtility.RandomAngle(), Random.Range(0.5f, 2f))), 3.5f, 1f);
			orAddComponent.audioEventName = "Play_PET_junk_splat_01";
		}

		public override void Pickup(PlayerController player)
		{
			((PlayerItem)this).Pickup(player);
			SetHarmonyInst();
		}

		private void SetHarmonyInst()
		{
			if ((Object)(object)base.LastOwner == (Object)null || (Object)(object)mikuHarmony != (Object)null)
			{
				return;
			}
			foreach (PassiveItem passiveItem in base.LastOwner.passiveItems)
			{
				if (passiveItem is MikuHarmony)
				{
					mikuHarmony = (MikuHarmony)(object)passiveItem;
					break;
				}
			}
		}

		public override bool CanBeUsed(PlayerController user)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Invalid comparison between Unknown and I4
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Invalid comparison between Unknown and I4
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Invalid comparison between Unknown and I4
			if ((Object)(object)user == (Object)null)
			{
				return false;
			}
			IPlayerInteractable lastInteractable = user.GetLastInteractable();
			if (lastInteractable != null)
			{
				PickupObject val = (PickupObject)(object)((lastInteractable is PickupObject) ? lastInteractable : null);
				if (val != null && (int)val.quality != -100 && (int)val.quality != -50 && (int)val.quality > 0)
				{
					return true;
				}
			}
			return false;
		}

		public override void DoEffect(PlayerController user)
		{
			SetHarmonyInst();
			((MonoBehaviour)user).StartCoroutine(LeekAllOverThePlace(user));
		}

		private IEnumerator LeekAllOverThePlace(PlayerController user)
		{
			PickupObject pickupObject = null;
			IPlayerInteractable lastInteractable = user.GetLastInteractable();
			int num;
			if (lastInteractable != null)
			{
				PickupObject interactablePickup = (PickupObject)(object)((lastInteractable is PickupObject) ? lastInteractable : null);
				num = ((interactablePickup != null) ? 1 : 0);
			}
			else
			{
				num = 0;
			}
			if (num != 0)
			{
				pickupObject = (PickupObject)lastInteractable;
			}
			if ((Object)(object)pickupObject == (Object)null)
			{
				yield break;
			}
			((PickupObject)this).CanBeDropped = false;
			((PlayerItem)this).IsCurrentlyActive = true;
			base.m_activeElapsed = 0f;
			base.m_activeDuration = 5f;
			user.CurrentRoom.DeregisterInteractable(lastInteractable);
			user.ToggleGunRenderers(false, "Leeking");
			user.ToggleHandRenderers(false, "Leeking");
			user.SetInputOverride("Leeking");
			user.ZeroVelocityThisFrame = true;
			user.m_handlingQueuedAnimation = true;
			((BraveBehaviour)user).spriteAnimator.PlayForDuration("select_leek_start", 0.5f, "select_leek_loop", false);
			PassiveItem passive = (PassiveItem)(object)((pickupObject is PassiveItem) ? pickupObject : null);
			if (passive != null)
			{
				passive.OnExitRange(user);
			}
			Gun gun = (Gun)(object)((pickupObject is Gun) ? pickupObject : null);
			if (gun != null)
			{
				gun.OnExitRange(user);
			}
			PlayerItem active = (PlayerItem)(object)((pickupObject is PlayerItem) ? pickupObject : null);
			if (active != null)
			{
				active.OnExitRange(user);
			}
			Vector2 v = ((BraveBehaviour)pickupObject).sprite.WorldCenter;
			_ = ((BraveBehaviour)pickupObject).transform.position;
			SquishyBounceWiggler p2 = ((Component)pickupObject).GetComponent<SquishyBounceWiggler>();
			if (Object.op_Implicit((Object)(object)p2))
			{
				((Behaviour)p2).enabled = false;
			}
			float particle = 40f;
			float delay = 1f / particle;
			float a = 0f;
			float e3 = 0f;
			float offsetAngleApplied2 = 0f;
			AkSoundEngine.PostEvent("Play_OBJ_item_throw_01", ((Component)base.LastOwner).gameObject);
			AkSoundEngine.PostEvent("Play_OBJ_rope_escape_01", ((Component)base.LastOwner).gameObject);
			SpriteOutlineManager.RemoveOutlineFromSprite(((BraveBehaviour)pickupObject).sprite, false);
			while (e3 < 1f)
			{
				e3 += Time.deltaTime * 0.66f;
				a += Time.deltaTime;
				float angleApplied = Mathf.Lerp(0f, 7223f, e3 * e3) * Time.deltaTime;
				((BraveBehaviour)pickupObject).transform.position = Vector2.op_Implicit(v);
				((BraveBehaviour)pickupObject).transform.Rotate(new Vector3(0f, 0f, angleApplied));
				Vector3 v_ = Vector2Extensions.ToVector3ZUp(((BraveBehaviour)pickupObject).sprite.WorldCenter, 120f) - ((BraveBehaviour)pickupObject).transform.position;
				offsetAngleApplied2 += angleApplied;
				Transform transform = ((BraveBehaviour)pickupObject).transform;
				transform.position -= v_;
				((BraveBehaviour)pickupObject).transform.position = Vector3Extensions.WithZ(((BraveBehaviour)pickupObject).transform.position, 120f);
				if (a > delay)
				{
					a = 0f;
					particle += 1f;
					delay = 1f / particle;
					GlobalSparksDoer.DoSingleParticle(Vector2.op_Implicit(((BraveBehaviour)pickupObject).sprite.WorldCenter), Vector2.op_Implicit(Toolbox.GetUnitOnCircle(BraveUtility.RandomAngle(), Mathf.Min(12f, particle * 0.075f))), (float?)0.125f, (float?)0.5f, (Color?)Color.white, (SparksType)2);
					GlobalSparksDoer.DoSingleParticle(Vector2.op_Implicit(((BraveBehaviour)pickupObject).sprite.WorldCenter), Vector2.op_Implicit(Toolbox.GetUnitOnCircle(BraveUtility.RandomAngle(), Mathf.Min(8f, particle * 0.05f))), (float?)0.125f, (float?)1f, (Color?)Color.white, (SparksType)2);
				}
				yield return null;
			}
			AkSoundEngine.PostEvent("Play_BOSS_dragun_spin_01", ((Component)base.LastOwner).gameObject);
			e3 = 0f;
			while (e3 < 1f)
			{
				e3 += Time.deltaTime * 1f;
				a += Time.deltaTime;
				((BraveBehaviour)pickupObject).transform.position = Vector2.op_Implicit(v);
				((BraveBehaviour)pickupObject).transform.Rotate(new Vector3(0f, 0f, 7223f * Time.deltaTime));
				Vector3 v_2 = Vector2Extensions.ToVector3ZUp(((BraveBehaviour)pickupObject).sprite.WorldCenter, 120f) - ((BraveBehaviour)pickupObject).transform.position;
				offsetAngleApplied2 += 7200f * Time.deltaTime;
				Transform transform2 = ((BraveBehaviour)pickupObject).transform;
				transform2.position -= v_2;
				((BraveBehaviour)pickupObject).transform.position = Vector3Extensions.WithZ(((BraveBehaviour)pickupObject).transform.position, 120f);
				if (a > delay)
				{
					a = 0f;
					delay = 1f / particle;
					GlobalSparksDoer.DoSingleParticle(Vector2.op_Implicit(((BraveBehaviour)pickupObject).sprite.WorldCenter), Vector2.op_Implicit(Toolbox.GetUnitOnCircle(BraveUtility.RandomAngle(), Mathf.Min(12f, particle * 0.075f))), (float?)0.125f, (float?)0.5f, (Color?)Color.white, (SparksType)2);
					GlobalSparksDoer.DoSingleParticle(Vector2.op_Implicit(((BraveBehaviour)pickupObject).sprite.WorldCenter), Vector2.op_Implicit(Toolbox.GetUnitOnCircle(BraveUtility.RandomAngle(), Mathf.Min(8f, particle * 0.05f))), (float?)0.125f, (float?)1f, (Color?)Color.white, (SparksType)2);
				}
				yield return null;
			}
			int oldPickup = pickupObject.PickupObjectId;
			int SuccessfulRoll = 0;
			int newID = ((!(pickupObject is Gun)) ? ((PickupObject)PickupObjectDatabase.GetRandomGunOfQualities(new Random(), new List<int> { oldPickup }, (ItemQuality[])(object)new ItemQuality[1] { (ItemQuality)(int)DetermineNewQuality(pickupObject, ref SuccessfulRoll) })).PickupObjectId : ((!(Random.value > 0.15f)) ? ((PickupObject)Toolbox.GetRandomActiveOfQualities(new Random(), new List<int> { oldPickup }, (ItemQuality)(int)DetermineNewQuality(pickupObject, ref SuccessfulRoll))).PickupObjectId : ((PickupObject)PickupObjectDatabase.GetRandomPassiveOfQualities(new Random(), new List<int>
			{
				303, 243, 244, 245, 246, 247, 248, 72, 219, 222,
				oldPickup
			}, (ItemQuality[])(object)new ItemQuality[1] { (ItemQuality)(int)DetermineNewQuality(pickupObject, ref SuccessfulRoll) })).PickupObjectId));
			GameObject silencerVFX = (GameObject)ResourceCache.Acquire("Global VFX/BlankVFX_Ghost");
			GameObject blankObj = Object.Instantiate<GameObject>(silencerVFX.gameObject, Vector2.op_Implicit(v), Quaternion.identity);
			blankObj.transform.localScale = Vector3.one * 0.5f;
			Object.Destroy((Object)(object)blankObj, 2f);
			AkSoundEngine.PostEvent("Play_NPC_faerie_heal_01", ((Component)base.LastOwner).gameObject);
			switch (SuccessfulRoll)
			{
			case 0:
			{
				AkSoundEngine.PostEvent("Play_OBJ_prize_won_01", ((Component)base.LastOwner).gameObject);
				for (int i = 0; i < 18; i++)
				{
					ParticleBase.EmitNoiselessParticle(v, 2, 9f * Random.Range(0.8f, 1.2f), 20 * i, 1f);
				}
				break;
			}
			case 1:
			{
				AkSoundEngine.PostEvent("Play_NPC_magic_blessing_01", ((Component)base.LastOwner).gameObject);
				for (int j = 0; j < 36; j++)
				{
					ParticleBase.EmitNoiselessParticle(v, 4, 11.5f * Random.Range(0.8f, 1.2f), 10 * j, 1f);
				}
				break;
			}
			case -1:
			{
				AkSoundEngine.PostEvent("Play_NPC_Blessing_Slow_Tonic_01", ((Component)base.LastOwner).gameObject);
				for (int k = 0; k < 24; k++)
				{
					GlobalSparksDoer.DoSingleParticle(Vector2.op_Implicit(((BraveBehaviour)pickupObject).sprite.WorldCenter), Vector2.op_Implicit(Toolbox.GetUnitOnCircle(15 * k, 5.5f * Random.Range(0.8f, 1.2f))), (float?)0.2f, (float?)3f, (Color?)Color.red, (SparksType)6);
				}
				break;
			}
			}
			if ((Object)(object)((Component)pickupObject).GetComponent<DebrisObject>() != (Object)null)
			{
				Object.Destroy((Object)(object)((Component)pickupObject).GetComponent<DebrisObject>());
			}
			if ((Object)(object)((Component)pickupObject).GetComponentInParent<DebrisObject>() != (Object)null)
			{
				Object.Destroy((Object)(object)((Component)pickupObject).GetComponentInParent<DebrisObject>());
			}
			offsetAngleApplied2 = Mathf.Min(1463f, offsetAngleApplied2);
			DebrisObject newPickup = LootEngine.SpawnItem(((Component)PickupObjectDatabase.GetById(newID)).gameObject, Vector2.op_Implicit(v), Vector2.zero, 0f, false, false, false);
			Exploder.DoDistortionWave(v, 0.5f, 0.1f, 50f, 0.333f);
			Object.Destroy((Object)(object)((Component)pickupObject).gameObject);
			yield return null;
			p2 = ((Component)newPickup).GetComponent<SquishyBounceWiggler>();
			if (Object.op_Implicit((Object)(object)p2))
			{
				((Behaviour)p2).enabled = false;
			}
			bool b = false;
			e3 = 0f;
			while (e3 < 1f)
			{
				if (e3 > 0.375f && !b)
				{
					b = true;
					((BraveBehaviour)user).spriteAnimator.Play("select_leek_start_reverse");
				}
				e3 += Time.deltaTime * 0.5f;
				((BraveBehaviour)newPickup).transform.position = Vector2.op_Implicit(v);
				((BraveBehaviour)newPickup).transform.localRotation = Quaternion.Euler(0f, 0f, Mathf.Lerp(offsetAngleApplied2, 0f, Easing.DoLerpT(e3, Easing.Ease.OUT)));
				Transform transform3 = ((BraveBehaviour)newPickup).transform;
				transform3.position -= Vector2Extensions.ToVector3ZUp(((BraveBehaviour)newPickup).sprite.WorldCenter, 120f) - ((BraveBehaviour)newPickup).transform.position;
				((BraveBehaviour)newPickup).transform.position = Vector3Extensions.WithZ(((BraveBehaviour)newPickup).transform.position, 120f);
				SpeculativeRigidbody specRigidbody = ((BraveBehaviour)newPickup).specRigidbody;
				if (specRigidbody != null)
				{
					specRigidbody.Reinitialize();
				}
				yield return null;
			}
			if (Object.op_Implicit((Object)(object)p2))
			{
				((Behaviour)p2).enabled = true;
			}
			((BraveBehaviour)newPickup).transform.position = Vector2.op_Implicit(v);
			((PickupObject)this).CanBeDropped = true;
			user.ToggleGunRenderers(true, "Leeking");
			user.ToggleHandRenderers(true, "Leeking");
			user.ClearInputOverride("Leeking");
			((PlayerItem)this).IsCurrentlyActive = false;
		}

		private ItemQuality DetermineNewQuality(PickupObject pickupObject, ref int RollType)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Invalid comparison between Unknown and I4
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: 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_005b: 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)
			RollType = 0;
			if ((int)pickupObject.quality > 1 && Random.value < DetermineHarmonyChance(positive: false))
			{
				RollType = -1;
				return (ItemQuality)(pickupObject.quality - 1);
			}
			if ((int)pickupObject.quality < 5 && Random.value < DetermineHarmonyChance(positive: true))
			{
				RollType = 1;
				return (ItemQuality)(pickupObject.quality + 1);
			}
			return pickupObject.quality;
		}

		public float DetermineHarmonyChance(bool positive)
		{
			SetHarmonyInst();
			if ((Object)(object)mikuHarmony == (Object)null)
			{
				return 0f;
			}
			return mikuHarmony.CurrentHarmonyLevel switch
			{
				0 => positive ? 0f : 0.15f, 
				1 => positive ? 0.0125f : 0.075f, 
				2 => positive ? 0.075f : 0.025f, 
				3 => positive ? 0.125f : 0.0125f, 
				4 => positive ? 0.15f : 0f, 
				_ => 0f, 
			};
		}

		static Leek()
		{
			PickupObject byId = PickupObjectDatabase.GetById(539);
			Impact = ((Gun)((byId is Gun) ? byId : null)).DefaultModule.chargeProjectiles[0].Projectile.hitEffects.enemy;
			PickupObject byId2 = PickupObjectDatabase.GetById(539);
			ImpactSFX = ((Gun)((byId2 is Gun) ? byId2 : null)).DefaultModule.chargeProjectiles[0].Projectile.enemyImpactEventName;
		}
	}
	public class MikuMikuBeam : GunBehaviour
	{
		public static Projectile[] BeamProjectiles;

		public static void Add()
		{
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Expected O, but got Unknown
			//IL_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1188: Unknown result type (might be due to invalid IL or missing references)
			//IL_118f: Expected O, but got Unknown
			//IL_11aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_11af: 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_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_0356: 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_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0542: Unknown result type (might be due to invalid IL or missing references)
			//IL_0552: Unknown result type (might be due to invalid IL or missing references)
			//IL_060f: Unknown result type (might be due to invalid IL or missing references)
			//IL_061e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0632: Unknown result type (might be due to invalid IL or missing references)
			//IL_0646: Unknown result type (might be due to invalid IL or missing references)
			//IL_065f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0673: Unknown result type (might be due to invalid IL or missing references)
			//IL_068c: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0730: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0827: Unknown result type (might be due to invalid IL or missing references)
			//IL_082f: Unknown result type (might be due to invalid IL or missing references)
			//IL_08db: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0908: Unknown result type (might be due to invalid IL or missing references)
			//IL_090d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0921: Unknown result type (might be due to invalid IL or missing references)
			//IL_0926: Unknown result type (might be due to invalid IL or missing references)
			//IL_093f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0944: Unknown result type (might be due to invalid IL or missing references)
			//IL_0958: Unknown result type (might be due to invalid IL or missing references)
			//IL_095d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0976: Unknown result type (might be due to invalid IL or missing references)
			//IL_097b: Unknown result type (might be due to invalid IL or missing references)
			//IL_098f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0994: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a38: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ad8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b7e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b83: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b92: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b97: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bab: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bfb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c00: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c19: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c1e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c32: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c37: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d71: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d8d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e39: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e48: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e5c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e89: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e9d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eb6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f5a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1010: Unknown result type (might be due to invalid IL or missing references)
			//IL_1018: Unknown result type (might be due to invalid IL or missing references)
			//IL_107b: Unknown result type (might be due to invalid IL or missing references)
			//IL_125f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1266: Expected O, but got Unknown
			//IL_12b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_12d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_1302: Unknown result type (might be due to invalid IL or missing references)
			//IL_1321: Unknown result type (might be due to invalid IL or missing references)
			//IL_1326: Unknown result type (might be due to invalid IL or missing references)
			//IL_1340: Unknown result type (might be due to invalid IL or missing references)
			Gun val = Databases.Items.NewGun("Miku (Miku) Beam!!!", "MikuMikuBeam");
			Game.Items.Rename("outdated_gun_mods:miku_(miku)_beam!!!", "miku:miku_(miku)_beam!!!");
			MikuMikuBeam mikuMikuBeam = ((Component)val).gameObject.AddComponent<MikuMikuBeam>();
			GunExt.SetShortDescription((PickupObject)(object)val, "M@gical Cure, Love Shot!");
			GunExt.SetLongDescription((PickupObject)(object)val, "Sing to your hearts content!\n\nGreatly empowered with Harmony.");
			BeamProjectiles = (Projectile[])(object)new Projectile[5];
			((Component)val).GetComponent<tk2dSpriteAnimator>().GetClipByName(val.reloadAnimation).frames[0].eventAudio = "Play_WPN_blackhole_impact_01";
			((Component)val).GetComponent<tk2dSpriteAnimator>().GetClipByName(val.reloadAnimation).frames[0].triggerEvent = true;
			GunInt.SetupSprite(val, StaticSpriteCollections.MikuItemAndGunCollection, "microphone_ammonomicon", 0, (string)null);
			val.m_sprite.Collection = StaticSpriteCollections.MikuItemAndGunCollection;
			((BraveBehaviour)val).spriteAnimator.Library = StaticSpriteCollections.ItemAndWeaponAnimation;
			((BraveBehaviour)val).sprite.SortingOrder = 1;
			val.idleAnimation = "mic_idle";
			val.shootAnimation = "mic_fire";
			val.reloadAnimation = "mic_reload";
			val.emptyAnimation = "mic_empty";
			((PickupObject)val).CanBeDropped = false;
			val.gunHandedness = (GunHandedness)2;
			val.m_defaultSpriteID = StaticSpriteCollections.MikuItemAndGunCollection.GetSpriteIdByName("microphone_idle_001");
			int num = (val.DefaultSpriteID = StaticSpriteCollections.MikuItemAndGunCollection.GetSpriteIdByName("microphone_idle_001"));
			int num2 = num;
			((BraveBehaviour)val).sprite.SetSprite(StaticSpriteCollections.MikuItemAndGunCollection, num2);
			Shader val2 = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTiltedCutoutEmissive");
			Material val3 = new Material(val2);
			val3.mainTexture = StaticSpriteCollections.ProjectileAndBeamCollection.material.mainTexture;
			val3.EnableKeyword("BRIGHTNESS_CLAMP_ON");
			val3.SetFloat("_EmissivePower", 20f);
			val3.SetFloat("_EmissiveColorPower", 5f);
			tk2dSpriteDefinition[] spriteDefinitions = StaticSpriteCollections.ProjectileAndBeamCollection.spriteDefinitions;
			foreach (tk2dSpriteDefinition val4 in spriteDefinitions)
			{
				val4.material = val3;
			}
			val.Volley.ModulesAreTiers = true;
			val.isAudioLoop = true;
			val.gunSwitchGroup = string.Empty;
			for (int j = 0; j < 5; j++)
			{
				PickupObject byId = PickupObjectDatabase.GetById(86);
				GunExt.AddProjectileModuleFrom(val, (Gun)(object)((byId is Gun) ? byId : null), true, false);
			}
			for (int k = 0; k < val.Volley.projectiles.Count; k++)
			{
				ProjectileModule val5 = val.Volley.projectiles[k];
				val5.ammoCost = 10;
				val5.shootStyle = (ShootStyle)2;
				val5.sequenceStyle = (ProjectileSequenceStyle)0;
				val5.cooldownTime = 1f;
				val5.numberOfShotsInClip = 50;
				val5.angleVariance = 0f;
				val5.ammoType = (AmmoType)2;
				switch (k)
				{
				case 0:
				{
					PickupObject byId9 = PickupObjectDatabase.GetById(86);
					Projectile val13 = Object.Instantiate<Projectile>(((Gun)((byId9 is Gun) ? byId9 : null)).DefaultModule.projectiles[0]);
					((Component)val13).gameObject.SetActive(false);
					val13.shouldRotate = true;
					((Object)val13).name = "MikuBeam_1";
					FakePrefab.MarkAsFakePrefab(((Component)val13).gameObject);
					Object.DontDestroyOnLoad((Object)(object)val13);
					BasicBeamController val14 = BeamBuilders.GenerateBeamPrefabBundle(val13, "mikubeam_tier1_impact_001", StaticSpriteCollections.ProjectileAndBeamCollection, StaticSpriteCollections.ProjectileAndBeamAnimation, "mikubeam_1_main_idle", new Vector2(4f, 4f), new Vector2(0f, 0f), "mikubeam_1_impact", (Vector2?)new Vector2(4f, 4f), (Vector2?)new Vector2(0f, 0f), "mikubeam_1_main_idle", (Vector2?)new Vector2(4f, 4f), (Vector2?)new Vector2(0f, 0f), "mikubeam_1_start_idle", (Vector2?)new Vector2(4f, 4f), (Vector2?)new Vector2(0f, 0f), false, true, "mikubeam_1_main_start", "mikubeam_1_start_start", "mikubeam_1_main_start", 0.25f, true, "mikubeam_1_main_dissipate", "mikubeam_1_start_dissipate", "mikubeam_1_main_dissipate", 0.1f);
					val13.baseData.damage = 30f;
					val13.baseData.force = 25f;
					val13.baseData.range = 1000f;
					val13.baseData.speed = 25f;
					((BraveBehaviour)val13).specRigidbody.CollideWithOthers = false;
					val14.boneType = (BeamBoneType)2;
					ref string startAudioEvent3 = ref val14.startAudioEvent;
					PickupObject byId10 = PickupObjectDatabase.GetById(87);
					startAudioEvent3 = ((Component)((Gun)((byId10 is Gun) ? byId10 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().startAudioEvent;
					ref string endAudioEvent3 = ref val14.endAudioEvent;
					PickupObject byId11 = PickupObjectDatabase.GetById(87);
					endAudioEvent3 = ((Component)((Gun)((byId11 is Gun) ? byId11 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().endAudioEvent;
					((BraveBehaviour)val14).projectile.baseData.damage = 16.66f;
					val14.reflections = 0;
					((BeamController)val14).IsReflectedBeam = false;
					val14.DispersalParticleSystemPrefab = ((Component)ParticleBase.MikuBeam_1).gameObject;
					val14.UsesDispersalParticles = true;
					val14.DispersalMinCoherency = 0.1f;
					val14.DispersalMaxCoherency = 0.2f;
					val14.DispersalDensity = 0.0001f;
					val14.DispersalExtraImpactFactor = 3f;
					val14.usesTelegraph = false;
					val14.collisionType = (BeamCollisionType)0;
					val14.collisionRadius = 0.25f;
					val14.TileType = (BeamTileType)0;
					val14.interpolateStretchedBones = false;
					val14.endType = (BeamEndType)0;
					((BeamController)val14).usesChargeDelay = false;
					val14.ContinueBeamArtToWall = true;
					((BraveBehaviour)val14).sprite.usesOverrideMaterial = true;
					val5.projectiles[0] = val13;
					BeamProjectiles[0] = val13;
					break;
				}
				case 1:
				{
					PickupObject byId6 = PickupObjectDatabase.GetById(86);
					Projectile val11 = Object.Instantiate<Projectile>(((Gun)((byId6 is Gun) ? byId6 : null)).DefaultModule.projectiles[0]);
					val11.shouldRotate = true;
					((Object)val11).name = "MikuBeam_2";
					((Component)val11).gameObject.SetActive(false);
					FakePrefab.MarkAsFakePrefab(((Component)val11).gameObject);
					Object.DontDestroyOnLoad((Object)(object)val11);
					BasicBeamController val12 = BeamBuilders.GenerateBeamPrefabBundle(val11, "mikubeam_tier2_impact_001", StaticSpriteCollections.ProjectileAndBeamCollection, StaticSpriteCollections.ProjectileAndBeamAnimation, "mikubeam_2_main_idle", new Vector2(8f, 8f), new Vector2(0f, 0f), "mikubeam_2_impact", (Vector2?)new Vector2(8f, 8f), (Vector2?)new Vector2(0f, 0f), "mikubeam_2_main_idle", (Vector2?)new Vector2(8f, 8f), (Vector2?)new Vector2(0f, 0f), "mikubeam_2_start_idle", (Vector2?)new Vector2(8f, 8f), (Vector2?)new Vector2(0f, 0f), false, true, "mikubeam_2_main_start", "mikubeam_2_start_start", "mikubeam_2_main_start", 0.25f, true, "mikubeam_2_main_dissipate", "mikubeam_2_start_dissipate", "mikubeam_2_main_dissipate", 0.125f);
					val11.baseData.damage = 22.5f;
					val11.baseData.force = 30f;
					val11.baseData.range = 1000f;
					val11.baseData.speed = 37.5f;
					((BraveBehaviour)val11).specRigidbody.CollideWithOthers = false;
					val12.boneType = (BeamBoneType)2;
					ref string startAudioEvent2 = ref val12.startAudioEvent;
					PickupObject byId7 = PickupObjectDatabase.GetById(40);
					startAudioEvent2 = ((Component)((Gun)((byId7 is Gun) ? byId7 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().startAudioEvent;
					ref string endAudioEvent2 = ref val12.endAudioEvent;
					PickupObject byId8 = PickupObjectDatabase.GetById(40);
					endAudioEvent2 = ((Component)((Gun)((byId8 is Gun) ? byId8 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().endAudioEvent;
					((BraveBehaviour)val12).projectile.baseData.damage = 22.5f;
					val12.reflections = 0;
					((BeamController)val12).IsReflectedBeam = false;
					val12.ContinueBeamArtToWall = true;
					val12.collisionType = (BeamCollisionType)0;
					val12.collisionRadius = 0.5f;
					val12.usesTelegraph = false;
					val12.DispersalParticleSystemPrefab = ((Component)ParticleBase.MikuBeam_2).gameObject;
					val12.UsesDispersalParticles = true;
					val12.DispersalMinCoherency = 0.04f;
					val12.DispersalMaxCoherency = 0.1f;
					val12.DispersalDensity = 1E-05f;
					val12.DispersalExtraImpactFactor = 3f;
					val12.TileType = (BeamTileType)0;
					val12.endType = (BeamEndType)0;
					((BraveBehaviour)val12).sprite.usesOverrideMaterial = true;
					val5.projectiles[0] = val11;
					BeamProjectiles[1] = val11;
					break;
				}
				case 2:
				{
					PickupObject byId15 = PickupObjectDatabase.GetById(86);
					Projectile val17 = Object.Instantiate<Projectile>(((Gun)((byId15 is Gun) ? byId15 : null)).DefaultModule.projectiles[0]);
					((Object)val17).name = "MikuBeam_3";
					val17.shouldRotate = true;
					((Component)val17).gameObject.SetActive(false);
					FakePrefab.MarkAsFakePrefab(((Component)val17).gameObject);
					Object.DontDestroyOnLoad((Object)(object)val17);
					BasicBeamController val18 = BeamBuilders.GenerateBeamPrefabBundle(val17, "mikubeam_tier3_impact_001", StaticSpriteCollections.ProjectileAndBeamCollection, StaticSpriteCollections.ProjectileAndBeamAnimation, "mikubeam_3_main_idle", Vector2.op_Implicit(new Vector3(10f, 10f)), Vector2.op_Implicit(new Vector3(0f, 0f)), "mikubeam_3_impact", (Vector2?)Vector2.op_Implicit(new Vector3(10f, 10f)), (Vector2?)Vector2.op_Implicit(new Vector3(0f, 0f)), "mikubeam_3_main_idle", (Vector2?)Vector2.op_Implicit(new Vector3(10f, 10f)), (Vector2?)Vector2.op_Implicit(new Vector3(0f, 0f)), "mikubeam_3_start_idle", (Vector2?)Vector2.op_Implicit(new Vector3(10f, 10f)), (Vector2?)Vector2.op_Implicit(new Vector3(0f, 0f)), false, true, "mikubeam_3_main_start", "mikubeam_3_start_start", "mikubeam_3_main_start", 0.4f, true, "mikubeam_3_main_dissipate", "mikubeam_3_start_dissipate", "mikubeam_3_main_dissipate", 0.15f);
					val17.baseData.damage = 26f;
					val17.baseData.force = 45f;
					val17.baseData.range = 1000f;
					val17.baseData.speed = 40f;
					val18.collisionType = (BeamCollisionType)0;
					val18.collisionRadius = 1f;
					((BraveBehaviour)val17).specRigidbody.CollideWithOthers = false;
					val18.boneType = (BeamBoneType)0;
					ref string startAudioEvent5 = ref val18.startAudioEvent;
					PickupObject byId16 = PickupObjectDatabase.GetById(40);
					startAudioEvent5 = ((Component)((Gun)((byId16 is Gun) ? byId16 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().startAudioEvent;
					ref string endAudioEvent5 = ref val18.endAudioEvent;
					PickupObject byId17 = PickupObjectDatabase.GetById(40);
					endAudioEvent5 = ((Component)((Gun)((byId17 is Gun) ? byId17 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().endAudioEvent;
					((BraveBehaviour)val18).projectile.baseData.damage = 26f;
					val18.reflections = 0;
					((BeamController)val18).IsReflectedBeam = false;
					val18.ContinueBeamArtToWall = true;
					((BraveBehaviour)val18).sprite.usesOverrideMaterial = true;
					val18.TileType = (BeamTileType)0;
					val18.endType = (BeamEndType)0;
					val5.projectiles[0] = val17;
					BeamProjectiles[2] = val17;
					break;
				}
				case 3:
				{
					PickupObject byId12 = PickupObjectDatabase.GetById(86);
					Projectile val15 = Object.Instantiate<Projectile>(((Gun)((byId12 is Gun) ? byId12 : null)).DefaultModule.projectiles[0]);
					((Object)val15).name = "MikuBeam_4";
					val15.shouldRotate = true;
					((Component)val15).gameObject.SetActive(false);
					FakePrefab.MarkAsFakePrefab(((Component)val15).gameObject);
					Object.DontDestroyOnLoad((Object)(object)val15);
					BasicBeamController val16 = BeamBuilders.GenerateBeamPrefabBundle(val15, "mikubeam_tier4_impact_001", StaticSpriteCollections.ProjectileAndBeamCollection, StaticSpriteCollections.ProjectileAndBeamAnimation, "mikubeam_4_main_idle", Vector4.op_Implicit(new Vector4(18f, 12f)), Vector4.op_Implicit(new Vector4(0f, 3f)), "mikubeam_4_impact", (Vector2?)Vector4.op_Implicit(new Vector4(18f, 12f)), (Vector2?)Vector4.op_Implicit(new Vector4(0f, 3f)), "mikubeam_4_main_idle", (Vector2?)Vector4.op_Implicit(new Vector4(18f, 12f)), (Vector2?)Vector4.op_Implicit(new Vector4(0f, 3f)), "mikubeam_4_start_idle", (Vector2?)Vector4.op_Implicit(new Vector4(18f, 12f)), (Vector2?)Vector4.op_Implicit(new Vector4(0f, 3f)), false, true, "mikubeam_4_main_start", "mikubeam_4_start_start", "mikubeam_4_main_start", 0.55f, true, "mikubeam_4_main_dissipate", "mikubeam_4_start_dissipate", "mikubeam_4_main_dissipate", 0.2f);
					val15.baseData.damage = 33f;
					val15.baseData.force = 80f;
					val15.baseData.range = 1000f;
					val15.baseData.speed = 40f;
					((BraveBehaviour)val15).specRigidbody.CollideWithOthers = false;
					val16.boneType = (BeamBoneType)0;
					ref string startAudioEvent4 = ref val16.startAudioEvent;
					PickupObject byId13 = PickupObjectDatabase.GetById(40);
					startAudioEvent4 = ((Component)((Gun)((byId13 is Gun) ? byId13 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().startAudioEvent;
					ref string endAudioEvent4 = ref val16.endAudioEvent;
					PickupObject byId14 = PickupObjectDatabase.GetById(40);
					endAudioEvent4 = ((Component)((Gun)((byId14 is Gun) ? byId14 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().endAudioEvent;
					((BraveBehaviour)val16).projectile.baseData.damage = 33f;
					val16.reflections = 0;
					((BeamController)val16).IsReflectedBeam = false;
					val16.ContinueBeamArtToWall = true;
					val16.startAudioEvent = "Play_ENM_deathray_shot_01";
					val16.endAudioEvent = "Stop_ENM_deathray_loop_01";
					val16.collisionType = (BeamCollisionType)0;
					val16.collisionRadius = 1.25f;
					val16.TileType = (BeamTileType)0;
					val16.endType = (BeamEndType)0;
					((BraveBehaviour)val16).sprite.usesOverrideMaterial = true;
					val5.projectiles[0] = val15;
					BeamProjectiles[3] = val15;
					break;
				}
				case 4:
				{
					PickupObject byId2 = PickupObjectDatabase.GetById(86);
					Projectile val6 = Object.Instantiate<Projectile>(((Gun)((byId2 is Gun) ? byId2 : null)).DefaultModule.projectiles[0]);
					((Component)val6).gameObject.SetActive(false);
					val6.shouldRotate = true;
					((Object)val6).name = "MikuBeam_5";
					FakePrefab.MarkAsFakePrefab(((Component)val6).gameObject);
					Object.DontDestroyOnLoad((Object)(object)val6);
					BasicBeamController val7 = BeamBuilders.GenerateBeamPrefabBundle(val6, "mikubeam_tier5_impact_001", StaticSpriteCollections.ProjectileAndBeamCollection, StaticSpriteCollections.ProjectileAndBeamAnimation, "mikubeam_5_main_idle", new Vector2(28f, 20f), new Vector2(0f, 4f), "mikubeam_5_impact", (Vector2?)new Vector2(28f, 20f), (Vector2?)new Vector2(0f, 4f), "mikubeam_5_main_idle", (Vector2?)new Vector2(28f, 20f), (Vector2?)new Vector2(0f, 4f), "mikubeam_5_start_idle", (Vector2?)new Vector2(28f, 20f), (Vector2?)new Vector2(0f, 4f), false, true, "mikubeam_5_main_start", "mikubeam_5_start_start", "mikubeam_5_main_start", 1.33f, true, "mikubeam_5_main_dissipate", "mikubeam_5_start_dissipate", "mikubeam_5_main_dissipate", 0.2f);
					val6.baseData.damage = 50f;
					val6.baseData.force = 150f;
					val6.baseData.range = 1000f;
					val6.baseData.speed = 40f;
					((BraveBehaviour)val6).specRigidbody.CollideWithOthers = false;
					val7.boneType = (BeamBoneType)0;
					ref string startAudioEvent = ref val7.startAudioEvent;
					PickupObject byId3 = PickupObjectDatabase.GetById(40);
					startAudioEvent = ((Component)((Gun)((byId3 is Gun) ? byId3 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().startAudioEvent;
					ref string endAudioEvent = ref val7.endAudioEvent;
					PickupObject byId4 = PickupObjectDatabase.GetById(40);
					endAudioEvent = ((Component)((Gun)((byId4 is Gun) ? byId4 : null)).DefaultModule.projectiles[0]).GetComponent<BasicBeamController>().endAudioEvent;
					((BraveBehaviour)val7).projectile.baseData.damage = 50f;
					((BraveBehaviour)val7).projectile.baseData.force = 1000f;
					val7.reflections = 0;
					((BeamController)val7).IsReflectedBeam = false;
					val7.ContinueBeamArtToWall = true;
					((BraveBehaviour)val7).sprite.usesOverrideMaterial = true;
					val7.TileType = (BeamTileType)0;
					val7.endType = (BeamEndType)0;
					PickupObject byId5 = PickupObjectDatabase.GetById(519);
					CombineEvaporateEffect component = ((Component)((Gun)((byId5 is Gun) ? byId5 : null)).alternateVolley.projectiles[0].projectiles[0]).GetComponent<CombineEvaporateEffect>();
					CombineEvaporateEffect val8 = ((Component)val7).gameObject.AddComponent<CombineEvaporateEffect>();
					val8.ParticleSystemToSpawn = component.ParticleSystemToSpawn;
					val8.FallbackShader = component.FallbackShader;
					val7.collisionType = (BeamCollisionType)0;
					val7.collisionRadius = 1.66f;
					BeamProjectiles[4] = val6;
					AIActor orLoadByGuid = EnemyDatabase.GetOrLoadByGuid("b98b10fca77d469e80fb45f3c5badec5");
					Component[] componentsInChildren = ((Component)orLoadByGuid).GetComponentsInChildren(typeof(Component));
					foreach (Component val9 in componentsInChildren)
					{
						BossFinalRogueLaserGun val10 = (BossFinalRogueLaserGun)(object)((val9 is BossFinalRogueLaserGun) ? val9 : null);
						if (val10 != null && Object.op_Implicit((Object)(object)val10.beamProjectile))
						{
							val7.startAudioEvent = ((Component)val10.beamProjectile).GetComponent<BasicBeamController>().startAudioEvent;
							val7.endAudioEvent = ((Component)val10.beamProjectile).GetComponent<BasicBeamController>().endAudioEvent;
							break;
						}
					}
					val5.projectiles[0] = val6;
					break;
				}
				}
			}
			((BraveBehaviour)val).sprite.usesOverrideMaterial = true;
			Material val19 = new Material(((BraveBehaviour)((BraveBehaviour)EnemyDatabase.GetOrLoadByName("GunNut")).sprite).renderer.material);
			val19.SetColor("_EmissiveColor", Color32.op_Implicit(new Color32(byte.MaxValue, (byte)225, byte.MaxValue, byte.MaxValue)));
			val19.SetFloat("_EmissiveColorPower", 1.55f);
			val19.SetFloat("_EmissivePower", 100f);
			val19.SetFloat("_EmissiveThresholdSensitivity", 0.2f);
			MeshRenderer component2 = ((Component)val).GetComponent<MeshRenderer>();
			if (!Object.op_Implicit((Object)(object)component2))
			{
				return;
			}
			Material[] array = ((Renderer)component2).sharedMaterials;
			for (int m = 0; m < array.Length; m++)
			{
				if ((Object)(object)array[m].shader == (Object)(object)val19)
				{
					return;
				}
			}
			Array.Resize(ref array, array.Length + 1);
			Material val20 = new Material(val19);
			val20.SetTexture("_MainTex", array[0].GetTexture("_MainTex"));
			array[^1] = val20;
			((Renderer)component2).sharedMaterials = array;
			val.doesScreenShake = false;
			val.InfiniteAmmo = true;
			val.reloadTime = 1.3f;
			val.muzzleFlashEffects.type = (VFXPoolType)0;
			((Component)val.barrelOffset).transform.localPosition = new Vector3(1.125f, 0.5f, 0f);
			val.SetBaseMaxAmmo(360);
			val.ammo = 360;
			val.PreventNormalFireAudio = true;
			val.gunClass = (GunClass)20;
			ref string gunSwitchGroup = ref val.gunSwitchGroup;
			PickupObject byId18 = PickupObjectDatabase.GetById(87);
			gunSwitchGroup = ((Gun)((byId18 is Gun) ? byId18 : null)).gunSwitchGroup;
			val.carryPixelOffset = new IntVector2(3, 0);
			Databases.Items.Add((PickupObject)(object)val, false, "ANY");
			((PickupObject)val).quality = (ItemQuality)(-50);
		}

		public void ToggleInfinityClip(bool value)
		{
			if (value)
			{
				base.gun.ForceImmediateReload(true);
			}
			for (int i = 0; i < base.gun.Volley.projectiles.Count; i++)
			{
				int num = (base.gun.Volley.projectiles[i].ammoCost = ((!value) ? 10 : 0));
			}
		}

		public void OnTierSwitched(int Tier)
		{
			if (base.gun.IsFiring)
			{
				base.gun.CeaseAttack(false, (ProjectileData)null);
			}
			base.gun.ForceImmediateReload(true);
			switch (Tier)
			{
			case 0:
			{
				base.gun.CurrentStrengthTier = 0;
				ref string gunSwitchGroup5 = ref base.gun.gunSwitchGroup;
				PickupObject byId5 = PickupObjectDatabase.GetById(87);
				gunSwitchGroup5 = ((Gun)((byId5 is Gun) ? byId5 : null)).gunSwitchGroup;
				base.gun.m_hasReinitializedAudioSwitch = false;
				break;
			}
			case 1:
			{
				base.gun.CurrentStrengthTier = 1;
				ref string gunSwitchGroup4 = ref base.gun.gunSwitchGroup;
				PickupObject byId4 = PickupObjectDatabase.GetById(40);
				gunSwitchGroup4 = ((Gun)((byId4 is Gun) ? byId4 : null)).gunSwitchGroup;
				base.gun.m_hasReinitializedAudioSwitch = false;
				break;
			}
			case 2:
			{
				base.gun.CurrentStrengthTier = 2;
				ref string gunSwitchGroup3 = ref base.gun.gunSwitchGroup;
				PickupObject byId3 = PickupObjectDatabase.GetById(179);
				gunSwitchGroup3 = ((Gun)((byId3 is Gun) ? byId3 : null)).gunSwitchGroup;
				base.gun.m_hasReinitializedAudioSwitch = false;
				break;
			}
			case 3:
			{
				base.gun.CurrentStrengthTier = 3;
				ref string gunSwitchGroup2 = ref base.gun.gunSwitchGroup;
				PickupObject byId2 = PickupObjectDatabase.GetById(328);
				gunSwitchGroup2 = ((Gun)((byId2 is Gun) ? byId2 : null)).gunSwitchGroup;
				base.gun.m_hasReinitializedAudioSwitch = false;
				break;
			}
			case 4:
			{
				base.gun.CurrentStrengthTier = 4;
				ref string gunSwitchGroup = ref base.gun.gunSwitchGroup;
				PickupObject byId = PickupObjectDatabase.GetById(328);
				gunSwitchGroup = ((Gun)((byId is Gun) ? byId : null)).gunSwitchGroup;
				base.gun.m_hasReinitializedAudioSwitch = false;
				break;
			}
			}
		}

		public override void OnReloadPressed(PlayerController player, Gun gun, bool bSOMETHING)
		{
			if (gun.IsFiring)
			{
				gun.CeaseAttack(false, (ProjectileData)null);
			}
			if (gun.IsReloading)
			{
				gun.CeaseAttack(false, (ProjectileData)null);
				AkSoundEngine.PostEvent("Stop_WPN_All", ((Component)this).gameObject);
				((GunBehaviour)this).OnReloadPressed(player, gun, bSOMETHING);
			}
		}

		public override void OnPostFired(PlayerController player, Gun gun)
		{
		}

		public override void Update()
		{
			((GunBehaviour)this).Update();
			base.gun.ammo = 360;
			if (base.gun.ClipShotsRemaining <= 0 && base.gun.IsFiring)
			{
				base.gun.CeaseAttack(false, (ProjectileData)null);
			}
		}
	}
	public class ParticleBase : MonoBehaviour
	{
		public static ParticleSystem ParticleSystem_Note_1;

		public static ParticleSystem ParticleSystem_Note_2;

		public static ParticleSystem ParticleSystem_Note_3;

		public static ParticleSystem ParticleSystem_Note_4;

		public static ParticleSystem ParticleSystem_Note_1_Noiseless;

		public static ParticleSystem ParticleSystem_Note_2_Noiseless;

		public static ParticleSystem ParticleSystem_Note_3_Noiseless;

		public static ParticleSystem ParticleSystem_Note_4_Noiseless;

		public static ParticleSystem MikuBeam_1;

		public static ParticleSystem MikuBeam_2;

		public static ParticleSystem MikuBeam_3;

		public static ParticleSystem MikuBeam_4;

		public static ParticleSystem MikuBeam_5;

		public static void Init()
		{
			ParticleSystem_Note_1 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem1")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_2 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem2")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_3 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem3")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_4 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem4")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_1_Noiseless = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem1_Noiseless")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_2_Noiseless = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem2_Noiseless")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_3_Noiseless = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem3_Noiseless")).GetComponent<ParticleSystem>();
			ParticleSystem_Note_4_Noiseless = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MusicNoteSystem4_Noiseless")).GetComponent<ParticleSystem>();
			MikuBeam_1 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MikuBeamParticle_1")).GetComponent<ParticleSystem>();
			MikuBeam_2 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MikuBeamParticle_2")).GetComponent<ParticleSystem>();
			MikuBeam_3 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MikuBeamParticle_3")).GetComponent<ParticleSystem>();
			MikuBeam_4 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MikuBeamParticle_4")).GetComponent<ParticleSystem>();
			MikuBeam_5 = Object.Instantiate<GameObject>(StaticSpriteCollections.MikuBundle.LoadAsset<GameObject>("MikuBeamParticle_5")).GetComponent<ParticleSystem>();
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_1);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_2);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_3);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_4);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_1_Noiseless);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_2_Noiseless);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_3_Noiseless);
			Object.DontDestroyOnLoad((Object)(object)ParticleSystem_Note_4_Noiseless);
			Object.DontDestroyOnLoad((Object)(object)MikuBeam_1);
			Object.DontDestroyOnLoad((Object)(object)MikuBeam_2);
			Object.DontDestroyOnLoad((Object)(object)MikuBeam_3);
			Object.DontDestroyOnLoad((Object)(object)MikuBeam_4);
			Object.DontDestroyOnLoad((Object)(object)MikuBeam_5);
		}

		public static void EmitParticle(Vector2 Position, int Level)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			ParticleSystem val = ParticleSystem_Note_1;
			switch (Level)
			{
			case 1:
				val = ParticleSystem_Note_1;
				break;
			case 2:
				val = ParticleSystem_Note_2;
				break;
			case 3:
				val = ParticleSystem_Note_3;
				break;
			case 4:
				val = ParticleSystem_Note_4;
				break;
			}
			ParticleSystem obj = val;
			EmitParams val2 = default(EmitParams);
			((EmitParams)(ref val2)).position = Vector2.op_Implicit(Position);
			obj.Emit(val2, 1);
		}

		public static void EmitNoiselessParticle(Vector2 Position, int Level, float Speed, float Angle, float Lifetime)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			ParticleSystem val = ParticleSystem_Note_1;
			switch (Level)
			{
			case 1:
				val = ParticleSystem_Note_1_Noiseless;
				break;
			case 2:
				val = ParticleSystem_Note_2_Noiseless;
				break;
			case 3:
				val = ParticleSystem_Note_3_Noiseless;
				break;
			case 4:
				val = ParticleSystem_Note_4_Noiseless;
				break;
			}
			ParticleSystem obj = val;
			EmitParams val2 = default(EmitParams);
			((EmitParams)(ref val2)).position = Vector2.op_Implicit(Position);
			((EmitParams)(ref val2)).velocity = Vector2.op_Implicit(Toolbox.GetUnitOnCircle(Angle, Speed));
			((EmitParams)(ref val2)).startLifetime = Lifetime;
			obj.Emit(val2, 1);
		}
	}
	public class MikuHarmony : PassiveItem
	{
		public static ProjectileModule[] MikuPolarisModules;

		private static int itemID;

		public static tk2dSpriteAnimator TextDisplay;

		public int CurrentHarmonyLevel = 0;

		public int Kills;

		public List<tk2dSpriteAnimator> currentEffectsActive = new List<tk2dSpriteAnimator>();

		private StatModifier CoolnessMod;

		private StatModifier AccuracyMod;

		private StatModifier ReloadSpeedMod;

		private StatModifier ChargeSpeedMod;

		public static string[] BlackList = new string[3]
		{
			EnemyGUIDs.Blobulin_GUID,
			EnemyGUIDs.Poisbulin_GUID,
			EnemyGUIDs.Large_Spent_GUID
		};

		public Action<MikuHarmony> OnlevelUp;

		public float durationBetweenNotes = -1f;

		private float E_Note;

		public static void Init()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Expected O, but got Unknown
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			string text = "Musical Harmony";
			GameObject val = new GameObject(text);
			MikuHarmony mikuHarmony = val.AddComponent<MikuHarmony>();
			tk2dSpriteCollectionData mikuItemAndGunCollection = StaticSpriteCollections.MikuItemAndGunCollection;
			ItemBuilder.AddSpriteToObjectAssetbundle(text, mikuItemAndGunCollection.GetSpriteIdByName("mikupassive"), mikuItemAndGunCollection, val);
			string text2 = "The Power Of Music";
			string text3 = "Empowers your abilities with Harmony!\n\nHarmony is increased through enough kills, granting stat boosts and other benefits to your starting gear, and is decreased when hurt.\n\nKeep it up!";
			ItemBuilder.SetupItem((PickupObject)(object)mikuHarmony, text2, text3, "miku");
			((PickupObject)mikuHarmony).quality = (ItemQuality)(-50);
			((PickupObject)mikuHarmony).CanBeDropped = false;
			GameObject val2 = PrefabBuilder.BuildObject("TextDisplay");
			tk2dSprite val3 = val2.gameObject.AddComponent<tk2dSprite>();
			((tk2dBaseSprite)val3).SetSprite(StaticSpriteCollections.MikuItemAndGunCollection, "TIER_001");
			tk2dSpriteAnimator val4 = val2.gameObject.AddComponent<tk2dSpriteAnimator>();
			((BraveBehaviour)val3).renderer.material = new Material(ShaderCache.Acquire("Sprites/Default"));
			TextDisplay = val4;
			val4.library = StaticSpriteCollections.ItemAndWeaponAnimation;
			CustomSynergies.Add("Auditory Attenuation", new List<string> { "miku:musical_harmony" }, new List<string> { "metronome" }, false);
			CustomSynergies.Add("Stunning Performance", new List<string> { "miku:musical_harmony" }, new List<string> { "aged_bell" }, false);
			CustomSynergies.Add("War Horn", new List<string> { "miku:musical_harmony" }, new List<string> { "charm_horn" }, false);
			CustomSynergies.Add("Stars Alike, Shine Bright", new List<string> { "miku:musical_harmony" }, new List<string> { "stuffed_star" }, false);
			CustomSynergies.Add("You're Gonna Need A Bigger Lute", new List<string> { "miku:musical_harmony" }, new List<string> { "really_special_lute" }, false);
			CustomSynergies.Add("Bringing Back The Classics", new List<string> { "miku:musical_harmony" }, new List<string> { "gunzheng" }, false);
			CustomSynergies.Add("Mechanical Love", new List<string> { "miku:musical_harmony" }, new List<string> { "face_melter" }, false);
			CustomSynergies.Add("Star Example", new List<string> { "miku:musical_harmony" }, new List<string> { "polaris" }, false);
			CustomSynergies.Add("Rise To Stardom", new List<string> { "miku:musical_harmony" }, new List<string> { "master_round_1", "master_round_2", "master_round_3", "master_round_4", "master_round_5" }, false);
			ItemsCore.AddChangeSpawnItem((Func<PickupObject, GameObject>)ReturnObj);
			itemID = ((PickupObject)mikuHarmony).PickupObjectId;
			new Hook((MethodBase)typeof(TemporaryInvulnerabilityPlayerItem).GetMethod("HandleDuration", BindingFlags.Instance | BindingFlags.NonPublic), typeof(MikuHarmony).GetMethod("HandleDuration", BindingFlags.Static | BindingFlags.Public));
			PickupObject byId = PickupObjectDatabase.GetById(506);
			LuteUpTheNight luteUpTheNight = ((Component)((byId is Gun) ? byId : null)).gameObject.AddComponent<LuteUpTheNight>();
			luteUpTheNight.AuraRadius = 3.5f;
			luteUpTheNight.CharmEffect = ((Component)PickupObjectDatabase.GetById(527)).GetComponent<BulletStatusEffectItem>().CharmModifierEffect;
			PickupObject byId2 = PickupObjectDatabase.GetById(482);
			((Component)((byId2 is Gun) ? byId2 : null)).gameObject.AddComponent<GunzhengTuah>();
			PickupObject byId3 = PickupObjectDatabase.GetById(149);
			((Component)((byId3 is Gun) ? byId3 : null)).gameObject.AddComponent<FaceMelterLaser>();
			MikuPolarisModules = (ProjectileModule[])(object)new ProjectileModule[4];
			InitNewPolarisModule1();
			InitNewPolarisModule2();
			InitNewPolarisModule3();
			InitNewPolarisModule4();
			PickupObject byId4 = PickupObjectDatabase.GetById(97);
			GunExt.AddProjectileModule((Gun)(object)((byId4 is Gun) ? byId4 : null), MikuPolarisModules[0]);
			PickupObject byId5 = PickupObjectDatabase.GetById(97);
			GunExt.AddProjectileModule((Gun)(object)((byId5 is Gun) ? byId5 : null), MikuPolarisModules[1]);
			PickupObject byId6 = PickupObjectDatabase.GetById(718);
			GunExt.AddProjectileModule((Gun)(object)((byId6 is Gun) ? byId6 : null), MikuPolarisModules[2]);
			PickupObject byId7 = PickupObjectDatabase.GetById(718);
			GunExt.AddProjectileModule((Gun)(object)((byId7 is Gun) ? byId7 : null), MikuPolarisModules[3]);
		}

		public static void InitNewPolarisModule1()
		{
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Expected O, but got Unknown
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: 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_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: 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_02fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Expected O, but got Unknown
			//IL_0330: 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_0358: Unknown result type (might be due to invalid IL or missing references)
			PickupObject byId = PickupObjectDatabase.GetById(97);
			ProjectileModule defaultModule = ((Gun)((byId is Gun) ? byId : null)).DefaultModule;
			ProjectileModule val = ProjectileModule.CreateClone(defaultModule, false, -1);
			val.chargeProjectiles = new List<ChargeProjectile>(defaultModule.chargeProjectiles);
			val.projectiles = new List<Projectile>(defaultModule.projectiles);
			PickupObject byId2 = PickupObjectDatabase.GetById(97);
			Projectile val2 = Object.Instantiate<Projectile>(((Gun)((byId2 is Gun) ? byId2 : null)).DefaultModule.projectiles[0]);
			((Component)val2).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val2).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val2);
			val2.baseData.damage = 27f;
			val2.baseData.speed = 55f;
			val2.baseData.force = 60f;
			val2.shouldRotate = true;
			val2.pierceMinorBreakables = true;
			ProjectileBuilders.SetProjectileCollisionRight(val2, "mikuStar_001", StaticSpriteCollections.ProjectileAndBeamCollection, 22, 15, false, (Anchor)4, (int?)22, (int?)15, true, false, (int?)1, (int?)3, (Projectile)null);
			GameObject val3 = ETGMod.AddChild(((Component)val2).gameObject, "trail object", new Type[0]);
			val3.transform.position = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldTopLeft + new Vector2(0.25f, -0.25f));
			val3.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldTopLeft + new Vector2(0.25f, -0.25f));
			TrailRenderer val4 = val3.AddComponent<TrailRenderer>();
			((Renderer)val4).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val4).receiveShadows = false;
			Material val6 = (((Renderer)val4).material = new Material(Shader.Find("Sprites/Default")));
			val4.minVertexDistance = 0.01f;
			val4.numCapVertices = 640;
			Color val7 = default(Color);
			((Color)(ref val7))..ctor(0f, 2f, 2f, 2f);
			val6.SetColor("_Color", val7);
			val4.startColor = val7;
			val4.endColor = new Color(0f, 1f, 1f, 0.5f);
			val4.time = 0.25f;
			val4.startWidth = 0.1875f;
			val4.endWidth = 0f;
			val4.autodestruct = false;
			ProjectileTrailRendererController val8 = ((Component)val2).gameObject.AddComponent<ProjectileTrailRendererController>();
			val8.trailRenderer = val4;
			val8.desiredLength = 6f;
			GameObject val9 = ETGMod.AddChild(((Component)val2).gameObject, "trail object", new Type[0]);
			val9.transform.position = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			val9.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			TrailRenderer val10 = val9.AddComponent<TrailRenderer>();
			((Renderer)val10).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val10).receiveShadows = false;
			Material val12 = (((Renderer)val10).material = new Material(Shader.Find("Sprites/Default")));
			val10.minVertexDistance = 0.01f;
			val10.numCapVertices = 640;
			val12.SetColor("_Color", val7);
			val10.startColor = val7;
			val10.endColor = new Color(0.8f, 1f, 1f, 0f);
			val10.time = 0.25f;
			val10.startWidth = 0.1875f;
			val10.endWidth = 0f;
			val10.autodestruct = false;
			ProjectileTrailRendererController val13 = ((Component)val2).gameObject.AddComponent<ProjectileTrailRendererController>();
			val13.trailRenderer = val10;
			val13.desiredLength = 6f;
			val.projectiles[0] = val2;
			MikuPolarisModules[0] = val;
		}

		public static void InitNewPolarisModule2()
		{
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Expected O, but got Unknown
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: 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_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: 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_0306: Unknown result type (might be due to invalid IL or missing references)
			//IL_030d: Expected O, but got Unknown
			//IL_0338: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0413: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_0427: Unknown result type (might be due to invalid IL or missing references)
			//IL_042c: Unknown result type (might be due to invalid IL or missing references)
			//IL_045c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0463: Expected O, but got Unknown
			//IL_048e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0498: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
			PickupObject byId = PickupObjectDatabase.GetById(97);
			ProjectileModule defaultModule = ((Gun)((byId is Gun) ? byId : null)).DefaultModule;
			ProjectileModule val = ProjectileModule.CreateClone(defaultModule, false, -1);
			val.chargeProjectiles = new List<ChargeProjectile>(defaultModule.chargeProjectiles);
			val.projectiles = new List<Projectile>(defaultModule.projectiles);
			PickupObject byId2 = PickupObjectDatabase.GetById(97);
			Projectile val2 = Object.Instantiate<Projectile>(((Gun)((byId2 is Gun) ? byId2 : null)).DefaultModule.projectiles[0]);
			((Component)val2).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val2).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val2);
			val2.baseData.damage = 32f;
			val2.baseData.speed = 65f;
			val2.baseData.force = 100f;
			val2.shouldRotate = true;
			val2.pierceMinorBreakables = true;
			ProjectileBuilders.SetProjectileCollisionRight(val2, "mikuStar_002", StaticSpriteCollections.ProjectileAndBeamCollection, 28, 19, false, (Anchor)4, (int?)28, (int?)19, true, false, (int?)null, (int?)null, (Projectile)null);
			GameObject val3 = ETGMod.AddChild(((Component)val2).gameObject, "trail object", new Type[0]);
			val3.transform.position = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldTopLeft - new Vector2(0.25f, 0.25f));
			val3.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldTopLeft - new Vector2(0.25f, 0.25f));
			TrailRenderer val4 = val3.AddComponent<TrailRenderer>();
			((Renderer)val4).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val4).receiveShadows = false;
			Material val6 = (((Renderer)val4).material = new Material(Shader.Find("Sprites/Default")));
			val4.minVertexDistance = 0.01f;
			val4.numCapVertices = 640;
			Color val7 = default(Color);
			((Color)(ref val7))..ctor(0f, 2f, 2f, 2f);
			val6.SetColor("_Color", val7);
			val4.startColor = val7;
			val4.endColor = new Color(0f, 1f, 1f, 0.5f);
			val4.time = 0.25f;
			val4.startWidth = 0.1875f;
			val4.endWidth = 0f;
			val4.autodestruct = false;
			ProjectileTrailRendererController val8 = ((Component)val2).gameObject.AddComponent<ProjectileTrailRendererController>();
			val8.trailRenderer = val4;
			val8.desiredLength = 6f;
			GameObject val9 = ETGMod.AddChild(((Component)val2).gameObject, "trail object", new Type[0]);
			val9.transform.position = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			val9.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			TrailRenderer val10 = val9.AddComponent<TrailRenderer>();
			((Renderer)val10).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val10).receiveShadows = false;
			Material val12 = (((Renderer)val10).material = new Material(Shader.Find("Sprites/Default")));
			val10.minVertexDistance = 0.01f;
			val10.numCapVertices = 640;
			val12.SetColor("_Color", val7);
			val10.startColor = val7;
			val10.endColor = new Color(0.8f, 1f, 1f, 0f);
			val10.time = 0.25f;
			val10.startWidth = 0.1875f;
			val10.endWidth = 0f;
			val10.autodestruct = false;
			ProjectileTrailRendererController val13 = ((Component)val2).gameObject.AddComponent<ProjectileTrailRendererController>();
			val13.trailRenderer = val10;
			val13.desiredLength = 6f;
			GameObject val14 = ETGMod.AddChild(((Component)val2).gameObject, "trail object", new Type[0]);
			val14.transform.position = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldCenter - new Vector2(0.5f, 0f));
			val14.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val2).sprite.WorldCenter - new Vector2(0.5f, 0f));
			TrailRenderer val15 = val14.AddComponent<TrailRenderer>();
			((Renderer)val15).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val15).receiveShadows = false;
			Material val17 = (((Renderer)val15).material = new Material(Shader.Find("Sprites/Default")));
			val15.minVertexDistance = 0.01f;
			val15.numCapVertices = 640;
			val17.SetColor("_Color", val7);
			val15.startColor = val7;
			val15.endColor = new Color(0.8f, 1f, 1f, 0f);
			val15.time = 0.3125f;
			val15.startWidth = 0.25f;
			val15.endWidth = 0f;
			val15.autodestruct = false;
			ProjectileTrailRendererController val18 = ((Component)val2).gameObject.AddComponent<ProjectileTrailRendererController>();
			val18.trailRenderer = val15;
			val18.desiredLength = 8f;
			PierceProjModifier orAddComponent = GameObjectExtensions.GetOrAddComponent<PierceProjModifier>(((Component)val2).gameObject);
			orAddComponent.penetration = 1;
			orAddComponent.penetratesBreakables = true;
			val.projectiles[0] = val2;
			MikuPolarisModules[1] = val;
		}

		public static void InitNewPolarisModule3()
		{
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Expected O, but got Unknown
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_030c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Expected O, but got Unknown
			//IL_033e: 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_0366: Unknown result type (might be due to invalid IL or missing references)
			PickupObject byId = PickupObjectDatabase.GetById(718);
			ProjectileModule val = ((Gun)((byId is Gun) ? byId : null)).Volley.projectiles[2];
			ProjectileModule val2 = ProjectileModule.CreateClone(val, false, -1);
			val2.chargeProjectiles = new List<ChargeProjectile>(val.chargeProjectiles);
			val2.projectiles = new List<Projectile>(val.projectiles);
			PickupObject byId2 = PickupObjectDatabase.GetById(97);
			Projectile val3 = Object.Instantiate<Projectile>(((Gun)((byId2 is Gun) ? byId2 : null)).DefaultModule.projectiles[0]);
			((Component)val3).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val3);
			val3.baseData.damage = 35f;
			val3.baseData.speed = 55f;
			val3.baseData.force = 60f;
			val3.shouldRotate = true;
			val3.pierceMinorBreakables = true;
			ProjectileBuilders.SetProjectileCollisionRight(val3, "mikuStar_001", StaticSpriteCollections.ProjectileAndBeamCollection, 22, 15, false, (Anchor)4, (int?)22, (int?)15, true, false, (int?)1, (int?)3, (Projectile)null);
			GameObject val4 = ETGMod.AddChild(((Component)val3).gameObject, "trail object", new Type[0]);
			val4.transform.position = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldTopLeft + new Vector2(0.25f, -0.25f));
			val4.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldTopLeft + new Vector2(0.25f, -0.25f));
			TrailRenderer val5 = val4.AddComponent<TrailRenderer>();
			((Renderer)val5).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val5).receiveShadows = false;
			Material val7 = (((Renderer)val5).material = new Material(Shader.Find("Sprites/Default")));
			val5.minVertexDistance = 0.01f;
			val5.numCapVertices = 640;
			Color val8 = default(Color);
			((Color)(ref val8))..ctor(0f, 2f, 2f, 2f);
			val7.SetColor("_Color", val8);
			val5.startColor = val8;
			val5.endColor = new Color(0f, 1f, 1f, 0.5f);
			val5.time = 0.25f;
			val5.startWidth = 0.1875f;
			val5.endWidth = 0f;
			val5.autodestruct = false;
			ProjectileTrailRendererController val9 = ((Component)val3).gameObject.AddComponent<ProjectileTrailRendererController>();
			val9.trailRenderer = val5;
			val9.desiredLength = 6f;
			GameObject val10 = ETGMod.AddChild(((Component)val3).gameObject, "trail object", new Type[0]);
			val10.transform.position = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			val10.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			TrailRenderer val11 = val10.AddComponent<TrailRenderer>();
			((Renderer)val11).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val11).receiveShadows = false;
			Material val13 = (((Renderer)val11).material = new Material(Shader.Find("Sprites/Default")));
			val11.minVertexDistance = 0.01f;
			val11.numCapVertices = 640;
			val13.SetColor("_Color", val8);
			val11.startColor = val8;
			val11.endColor = new Color(0.8f, 1f, 1f, 0f);
			val11.time = 0.25f;
			val11.startWidth = 0.1875f;
			val11.endWidth = 0f;
			val11.autodestruct = false;
			ProjectileTrailRendererController val14 = ((Component)val3).gameObject.AddComponent<ProjectileTrailRendererController>();
			val14.trailRenderer = val11;
			val14.desiredLength = 6f;
			val2.projectiles[0] = val3;
			MikuPolarisModules[2] = val2;
		}

		public static void InitNewPolarisModule4()
		{
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Expected O, but got Unknown
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: 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_02b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0314: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Expected O, but got Unknown
			//IL_0346: Unknown result type (might be due to invalid IL or missing references)
			//IL_0350: Unknown result type (might be due to invalid IL or missing references)
			//IL_036e: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Unknown result type (might be due to invalid IL or missing references)
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_0430: Unknown result type (might be due to invalid IL or missing references)
			//IL_0435: Unknown result type (might be due to invalid IL or missing references)
			//IL_043a: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0471: Expected O, but got Unknown
			//IL_049c: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
			PickupObject byId = PickupObjectDatabase.GetById(718);
			ProjectileModule val = ((Gun)((byId is Gun) ? byId : null)).Volley.projectiles[2];
			ProjectileModule val2 = ProjectileModule.CreateClone(val, false, -1);
			val2.chargeProjectiles = new List<ChargeProjectile>(val.chargeProjectiles);
			val2.projectiles = new List<Projectile>(val.projectiles);
			PickupObject byId2 = PickupObjectDatabase.GetById(97);
			Projectile val3 = Object.Instantiate<Projectile>(((Gun)((byId2 is Gun) ? byId2 : null)).DefaultModule.projectiles[0]);
			((Component)val3).gameObject.SetActive(false);
			FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject);
			Object.DontDestroyOnLoad((Object)(object)val3);
			val3.baseData.damage = 40f;
			val3.baseData.speed = 70f;
			val3.baseData.force = 100f;
			val3.shouldRotate = true;
			val3.pierceMinorBreakables = true;
			ProjectileBuilders.SetProjectileCollisionRight(val3, "mikuStar_002", StaticSpriteCollections.ProjectileAndBeamCollection, 28, 19, false, (Anchor)4, (int?)28, (int?)19, true, false, (int?)null, (int?)null, (Projectile)null);
			GameObject val4 = ETGMod.AddChild(((Component)val3).gameObject, "trail object", new Type[0]);
			val4.transform.position = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldTopLeft - new Vector2(0.25f, 0.25f));
			val4.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldTopLeft - new Vector2(0.25f, 0.25f));
			TrailRenderer val5 = val4.AddComponent<TrailRenderer>();
			((Renderer)val5).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val5).receiveShadows = false;
			Material val7 = (((Renderer)val5).material = new Material(Shader.Find("Sprites/Default")));
			val5.minVertexDistance = 0.01f;
			val5.numCapVertices = 640;
			Color val8 = default(Color);
			((Color)(ref val8))..ctor(0f, 2f, 2f, 2f);
			val7.SetColor("_Color", val8);
			val5.startColor = val8;
			val5.endColor = new Color(0f, 1f, 1f, 0.5f);
			val5.time = 0.25f;
			val5.startWidth = 0.1875f;
			val5.endWidth = 0f;
			val5.autodestruct = false;
			ProjectileTrailRendererController val9 = ((Component)val3).gameObject.AddComponent<ProjectileTrailRendererController>();
			val9.trailRenderer = val5;
			val9.desiredLength = 6f;
			GameObject val10 = ETGMod.AddChild(((Component)val3).gameObject, "trail object", new Type[0]);
			val10.transform.position = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			val10.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldBottomLeft + new Vector2(0.25f, 0.25f));
			TrailRenderer val11 = val10.AddComponent<TrailRenderer>();
			((Renderer)val11).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val11).receiveShadows = false;
			Material val13 = (((Renderer)val11).material = new Material(Shader.Find("Sprites/Default")));
			val11.minVertexDistance = 0.01f;
			val11.numCapVertices = 640;
			val13.SetColor("_Color", val8);
			val11.startColor = val8;
			val11.endColor = new Color(0.8f, 1f, 1f, 0f);
			val11.time = 0.25f;
			val11.startWidth = 0.1875f;
			val11.endWidth = 0f;
			val11.autodestruct = false;
			ProjectileTrailRendererController val14 = ((Component)val3).gameObject.AddComponent<ProjectileTrailRendererController>();
			val14.trailRenderer = val11;
			val14.desiredLength = 6f;
			GameObject val15 = ETGMod.AddChild(((Component)val3).gameObject, "trail object", new Type[0]);
			val15.transform.position = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldCenter - new Vector2(0.5f, 0f));
			val15.transform.localPosition = Vector2.op_Implicit(((BraveBehaviour)val3).sprite.WorldCenter - new Vector2(0.5f, 0f));
			TrailRenderer val16 = val15.AddComponent<TrailRenderer>();
			((Renderer)val16).shadowCastingMode = (ShadowCastingMode)0;
			((Renderer)val16).receiveShadows = false;
			Material val18 = (((Renderer)val16).material = new Material(Shader.Find("Sprites/Default")));
			val16.minVertexDistance = 0.01f;
			val16.numCapVertices = 640;
			val18.SetColor("_Color", val8);
			val16.startColor = val8;
			val16.endColor = new Color(0.8f, 1f, 1f, 0f);
			val16.time = 0.3125f;
			val16.startWidth = 0.25f;
			val16.endWidth = 0f;
			val16.autodestruct = false;
			ProjectileTrailRendererController val19 = ((Component)val3).gameObject.AddComponent<ProjectileTrailRendererController>();
			val19.trailRenderer = val16;
			val19.desiredLength = 8f;
			PierceProjModifier orAddComponent = GameObjectExtensions.GetOrAddComponent<PierceProjModifier>(((Component)val3).gameObject);
			orAddComponent.penetration = 1;
			orAddComponent.penetratesBreakables = true;
			val2.projectiles[0] = val3;
			MikuPolarisModules[3] = val2;
		}

		public static IEnumerator HandleDuration(Func<TemporaryInvulnerabilityPlayerItem, IEnumerator, PlayerController, Material> orig, TemporaryInvulnerabilityPlayerItem self, PlayerController user, Material userMaterial)
		{
			((PlayerItem)self).IsCurrentlyActive = true;
			float ela = 0f;
			((PlayerItem)self).m_activeDuration = self.Duration;
			((PlayerItem)self).m_activeElapsed = ela;
			MikuMikuBeam beam = null;
			if (ItemHelpers.PlayerHasActiveSynergy(user, "Stars Alike, Shine Bright") && ((PickupObject)self).PickupObjectId == 433)
			{
				beam = ((Component)user.inventory.AllGuns.Where((Gun __) => (Object)(object)((Component)__).GetComponent<MikuMikuBeam>() != (Object)null).FirstOrDefault()).GetComponent<MikuMikuBeam>();
				beam.ToggleInfinityClip(value: true);
			}
			while (ela < self.Duration)
			{
				ela = (((PlayerItem)self).m_activeElapsed = ela + BraveTime.DeltaTime);
				((BraveBehaviour)user).healthHaver.IsVulnerable = false;
				yield return null;
			}
			if ((Object)(object)beam != (Object)null)
			{
				beam.ToggleInfinityClip(value: false);
			}
			user.ClearOverrideShader();
			((BraveBehaviour)user).healthHaver.IsVulnerable = true;
			((PlayerItem)self).IsCurrentlyActive = false;
			AkSoundEngine.PostEvent("Stop_SND_OBJ", ((Component)user).gameObject);
		}

		public static GameObject ReturnObj(PickupObject pickup)
		{
			PlayerController[] allPlayers = GameManager.Instance.AllPlayers;
			foreach (PlayerController val in allPlayers)
			{
				if (!val.HasPassiveItem(itemID))
				{
					continue;
				}
				HealthPickup component = ((Component)pickup).GetComponent<HealthPickup>();
				if ((Object)(object)component != (Object)null)
				{
					if (component.healAmount == 0.5f)
					{
						pickup = ((Random.value < 0.2f) ? PickupObjectDatabase.GetById(78) : PickupObjectDatabase.GetById(600));
					}
					if (component.healAmount == 1f)
					{
						pickup = ((Random.value < 0.5f) ? PickupObjectDatabase.GetById(78) : PickupObjectDatabase.GetById(600));
					}
				}
			}
			return ((Component)pickup).gameObject;
		}

		private StatModifier AddStat(StatType statType, float amount, ModifyMethod method = 0)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			StatModifier val = new StatModifier
			{
				amount = amount,
				statToBoost = statType,
				modifyType = method
			};
			if (base.passiveStatModifiers == null)
			{
				base.passiveStatModifiers = (StatModifier[])(object)new StatModifier[1] { val };
			}
			else
			{
				base.passiveStatModifiers = base.passiveStatModifiers.Concat((IEnumerable<StatModifier>)(object)new StatModifier[1] { val }).ToArray();
			}
			return val;
		}

		private void RemoveStat(StatModifier statType)
		{
			if (statType == null)
			{
				return;
			}
			List<StatModifier> list = new List<StatModifier>();
			for (int i = 0; i < base.passiveStatModifiers.Length; i++)
			{
				if (base.passiveStatModifiers[i] != statType)
				{
					list.Add(base.passiveStatModifiers[i]);
				}
			}
			base.passiveStatModifiers = list.ToArray();
		}

		public override void Pickup(PlayerController player)
		{
			((PassiveItem)this).Pickup(player);
			player.OnAnyEnemyReceivedDamage = (Action<float, bool, HealthHaver>)Delegate.Combine(player.OnAnyEnemyReceivedDamage, new Action<float, bool, HealthHaver>(OnHurtEnemy));
			player.OnReceivedDamage += Player_OnReceivedDamage;
			if (MikuMikuModule.CopyrightedAudio.Value)
			{
				((BraveBehaviour)player).spriteAnimator.GetClipByName("doorway").frames[2].eventAudio = "Play_Once_Upon_a_Time";
				((BraveBehaviour)player).spriteAnimator.GetClipByName("doorway").frames[2].triggerEvent = true;
			}
		}

		private void Player_OnReceivedDamage(PlayerController obj)
		{
			if (CurrentHarmonyLevel > 0)
			{
				Kills = 0;
				ProcessHarmonyChange(CurrentHarmonyLevel - 2, isPositive: false);
			}
		}

		public void OnHurtEnemy(float a, bool fatal, HealthHaver healthHaver)
		{
			GameActor gameActor = ((BraveBehaviour)healthHaver).gameActor;
			AIActor val = (AIActor)(object)((gameActor is AIActor) ? gameActor : null);
			if (val != null && fatal && (Object)(object)val != (Object)null && !BlackList.Contains(val.EnemyGuid) && CurrentHarmonyLevel < 4)
			{
				Kills++;
				if (Kills >= GetKillThreshold())
				{
					Kills = 0;
					ProcessHarmonyChange(CurrentHarmonyLevel + 1);
				}
			}
		}

		public int GetKillThreshold()
		{
			int num = 10 + CurrentHarmonyLevel * 5;
			foreach (PassiveItem passiveItem in ((PassiveItem)this).Owner.passiveItems)
			{
				BasicStatPickup val = (BasicStatPickup)(object)((passiveItem is BasicStatPickup) ? passiveItem : null);
				if (val != null && val