Decompiled source of Scout Voice Lines v1.0.1

ScoutVoiceLines.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using PluginConfig.API;
using PluginConfig.API.Fields;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ScoutVoiceLines")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ScoutVoiceLines")]
[assembly: AssemblyTitle("ScoutVoiceLines")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ScoutVoiceLines
{
	public enum SubtitleColor
	{
		RED,
		BLU
	}
	[BepInPlugin("scout.ultrakill.scoutvoicelines", "Scout Voice Lines", "0.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource Log;

		public static Plugin me;

		public static AudioSource audio;

		public static Dictionary<string, AudioClip> clips = new Dictionary<string, AudioClip>();

		public static string AudioFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Audio");

		public static PluginConfigurator config;

		public static BoolField masterEnabled;

		public static IntField dashChance;

		public static IntField parryChance;

		public static IntField punchChance;

		public static IntField hurtChance;

		public static IntField coinChance;

		public static IntField pumpChance;

		public static IntField waveClearChance;

		public static IntField fireChance;

		public static IntField projectileBoostChance;

		public static IntField sandChance;

		public static IntField wallJumpChance;

		public static IntField jumpPadChance;

		public static IntField cannonballChance;

		public static IntField coreEjectChance;

		public static IntField pickupChance;

		public static IntField failDashChance;

		public static IntField rocketRideChance;

		public static IntField styleChance;

		public static IntField whiplashChance;

		public static IntField railSwitchChance;

		public static BoolField coloredSubtitles;

		public static EnumField<SubtitleColor> subtitleColor;

		private void Awake()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			me = this;
			Log = ((BaseUnityPlugin)this).Logger;
			audio = ((Component)this).gameObject.AddComponent<AudioSource>();
			((MonoBehaviour)this).StartCoroutine(LoadAllClips());
			new Harmony("scout.ultrakill.scoutvoicelines").PatchAll();
			SetupConfig();
			Log.LogInfo((object)"V1 Yapper Revamp loaded!");
		}

		private void SetupConfig()
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Expected O, but got Unknown
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Expected O, but got Unknown
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Expected O, but got Unknown
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Expected O, but got Unknown
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Expected O, but got Unknown
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Expected O, but got Unknown
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Expected O, but got Unknown
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Expected O, but got Unknown
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Expected O, but got Unknown
			//IL_01df: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Expected O, but got Unknown
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Expected O, but got Unknown
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Expected O, but got Unknown
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Expected O, but got Unknown
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_0271: Expected O, but got Unknown
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_0293: Expected O, but got Unknown
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Expected O, but got Unknown
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: Expected O, but got Unknown
			//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f9: Expected O, but got Unknown
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Expected O, but got Unknown
			//IL_0333: Unknown result type (might be due to invalid IL or missing references)
			//IL_033d: Expected O, but got Unknown
			config = PluginConfigurator.Create("Scout Voice Lines", "scout.scoutvoicelines");
			Sprite val = LoadIcon("icon.png");
			if ((Object)(object)val != (Object)null)
			{
				config.image = val;
			}
			masterEnabled = new BoolField(config.rootPanel, "Mod Enabled", "masterEnabled", true);
			coloredSubtitles = new BoolField(config.rootPanel, "Colored Subtitles", "coloredSubtitles", true);
			subtitleColor = new EnumField<SubtitleColor>(config.rootPanel, "Subtitle Color", "subtitleColor", SubtitleColor.RED);
			dashChance = new IntField(config.rootPanel, "Dash rarity (1 in X chance)", "dashChance", 3, 1, 50);
			failDashChance = new IntField(config.rootPanel, "Failed dash rarity (1 in X chance)", "failDashChance", 3, 1, 50);
			wallJumpChance = new IntField(config.rootPanel, "Wall jump rarity (1 in X chance)", "wallJumpChance", 3, 1, 50);
			jumpPadChance = new IntField(config.rootPanel, "Jump pad rarity (1 in X chance)", "jumpPadChance", 3, 1, 50);
			rocketRideChance = new IntField(config.rootPanel, "Rocket ride rarity (1 in X chance)", "rocketRideChance", 3, 1, 50);
			parryChance = new IntField(config.rootPanel, "Parry rarity (1 in X chance)", "parryChance", 3, 1, 50);
			punchChance = new IntField(config.rootPanel, "Punch rarity (1 in X chance)", "punchChance", 3, 1, 50);
			coinChance = new IntField(config.rootPanel, "Coin toss rarity (1 in X chance)", "coinChance", 4, 1, 50);
			pumpChance = new IntField(config.rootPanel, "Pump charge rarity (1 in X chance)", "pumpChance", 3, 1, 50);
			projectileBoostChance = new IntField(config.rootPanel, "Projectile boost rarity (1 in X chance)", "projectileBoostChance", 4, 1, 50);
			sandChance = new IntField(config.rootPanel, "Sanded enemies rarity (1 in X chance)", "sandChance", 3, 1, 50);
			cannonballChance = new IntField(config.rootPanel, "Cannonball rarity (1 in X chance)", "cannonballChance", 3, 1, 50);
			coreEjectChance = new IntField(config.rootPanel, "Core eject  rarity (1 in X chance)", "coreEjectChance", 4, 1, 50);
			railSwitchChance = new IntField(config.rootPanel, "Railcannon switch rarity (1 in X chance)", "railSwitchChance", 5, 1, 50);
			whiplashChance = new IntField(config.rootPanel, "Whiplash rarity (1 in X chance)", "whiplashChance", 2, 1, 50);
			hurtChance = new IntField(config.rootPanel, "Hurt rarity (1 in X chance)", "hurtChance", 2, 1, 50);
			waveClearChance = new IntField(config.rootPanel, "Wave clear rarity (1 in X chance)", "waveClearChance", 3, 1, 50);
			fireChance = new IntField(config.rootPanel, "Fire rarity (1 in X chance)", "fireChance", 3, 1, 50);
			pickupChance = new IntField(config.rootPanel, "Pickup rarity (1 in X chance)", "pickupChance", 3, 1, 50);
			styleChance = new IntField(config.rootPanel, "Style bonus rarity (1 in X chance)", "styleChance", 2, 1, 50);
		}

		private Sprite LoadIcon(string fileName)
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Expected O, but got Unknown
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), fileName);
			if (!File.Exists(text))
			{
				Log.LogWarning((object)("Config icon not found at: " + text));
				return null;
			}
			byte[] array = File.ReadAllBytes(text);
			Texture2D val = new Texture2D(2, 2);
			ImageConversion.LoadImage(val, array);
			return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
		}

		private IEnumerator LoadAllClips()
		{
			if (!Directory.Exists(AudioFolder))
			{
				Log.LogWarning((object)("No Audio folder found at: " + AudioFolder));
				yield break;
			}
			string[] files = Directory.GetFiles(AudioFolder, "*.wav");
			Log.LogInfo((object)("Found " + files.Length + " wav files to load."));
			string[] array = files;
			foreach (string filePath in array)
			{
				string url = "file:///" + filePath.Replace("\\", "/");
				UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(url, (AudioType)20);
				try
				{
					yield return www.SendWebRequest();
					if ((int)www.result != 1)
					{
						Log.LogError((object)("Failed to load " + filePath + " : " + www.error));
						continue;
					}
					AudioClip clip = DownloadHandlerAudioClip.GetContent(www);
					string name = (((Object)clip).name = Path.GetFileNameWithoutExtension(filePath));
					clips[name] = clip;
					Log.LogInfo((object)("Loaded clip: " + name));
				}
				finally
				{
					((IDisposable)www)?.Dispose();
				}
			}
			Log.LogInfo((object)("Finished loading clips. Total in memory: " + clips.Count));
		}

		public static void Play(string clipName)
		{
			if (masterEnabled == null || masterEnabled.value)
			{
				if (!clips.ContainsKey(clipName))
				{
					Log.LogWarning((object)("Tried to play missing clip: " + clipName));
					return;
				}
				audio.Stop();
				audio.clip = clips[clipName];
				audio.Play();
			}
		}

		public static void Subtitle(string text)
		{
			if ((masterEnabled == null || masterEnabled.value) && !string.IsNullOrEmpty(text))
			{
				if (coloredSubtitles != null && coloredSubtitles.value)
				{
					string text2 = ((subtitleColor.value == SubtitleColor.BLU) ? "#5b9bd5" : "#ff3b3b");
					string text3 = "<color=" + text2 + ">" + text + "</color>";
					MonoSingleton<SubtitleController>.Instance.DisplaySubtitle(text3, (AudioSource)null, false);
				}
				else
				{
					MonoSingleton<SubtitleController>.Instance.DisplaySubtitle(text, (AudioSource)null, false);
				}
			}
		}
	}
	public static class EncounterFlags
	{
		public static bool earthmoverIntro;

		public static bool v2GreenArm;

		public static bool v2Enrage;

		public static bool gabriel2Intro;

		public static bool minosHand;

		public static bool minosCorpse;

		public static bool intro11;

		public static bool wickedFinish;

		public static bool pistolPickup;

		public static bool v2SkullSlide;

		public static bool swordsIntro;

		public static bool swordsFlee;

		public static bool geryonIntro;

		public static bool geryonElevator;

		public static bool geryonFall;

		public static bool geryonBoss;

		public static bool geryonPhase2;

		public static bool geryonOutro;

		public static bool geryonReveal;

		public static bool leviathanPhase2;

		public static bool leviathanKill;

		public static bool minotaurFakeKill;

		public static bool minotaurPhase2;

		public static bool tramStop72;

		public static bool heatIntro;

		public static bool heatSpawnEnemies;
	}
	[HarmonyPatch(typeof(HellMap), "Start")]
	public class Patch_ResetEncounterFlags
	{
		private static void Postfix()
		{
			EncounterFlags.earthmoverIntro = false;
			EncounterFlags.v2GreenArm = false;
			EncounterFlags.v2Enrage = false;
			EncounterFlags.gabriel2Intro = false;
			EncounterFlags.minosHand = false;
			EncounterFlags.minosCorpse = false;
			EncounterFlags.intro11 = false;
			EncounterFlags.wickedFinish = false;
			EncounterFlags.pistolPickup = false;
			EncounterFlags.v2SkullSlide = false;
			MaliciousFaceState.fightActive = false;
			MaliciousFaceState.killHandled = false;
			EncounterFlags.swordsIntro = false;
			EncounterFlags.swordsFlee = false;
			SwordsmachineState.barEnableCount = 0;
			SwordsmachineState.fightActive = false;
			SwordsmachineState.killHandled = false;
			EncounterFlags.geryonIntro = false;
			EncounterFlags.geryonElevator = false;
			EncounterFlags.geryonFall = false;
			EncounterFlags.geryonBoss = false;
			EncounterFlags.geryonPhase2 = false;
			EncounterFlags.geryonOutro = false;
			EncounterFlags.geryonReveal = false;
			HideousMassState.fightActive = false;
			HideousMassState.killHandled = false;
			MindflayerState.fightActive = false;
			MindflayerState.killHandled = false;
			SisypheanState.fightActive = false;
			SisypheanState.killHandled = false;
			FerrymanState.fightActive = false;
			FerrymanState.killHandled = false;
			LeviathanState.fightActive = false;
			LeviathanState.killHandled = false;
			EncounterFlags.leviathanPhase2 = false;
			EncounterFlags.leviathanKill = false;
			EncounterFlags.minotaurFakeKill = false;
			EncounterFlags.minotaurPhase2 = false;
			MinotaurState.barEnableCount = 0;
			EncounterFlags.tramStop72 = false;
			EncounterFlags.heatIntro = false;
			EncounterFlags.heatSpawnEnemies = false;
		}
	}
	[HarmonyPatch(typeof(HellMap), "Start")]
	public class Patch_LevelEnter
	{
		private static void Postfix()
		{
			int num = Random.Range(1, 6);
			if (num == 1)
			{
				Plugin.Play("enter1");
				((MonoBehaviour)Plugin.me).StartCoroutine(EnterLine1());
			}
			if (num == 2)
			{
				Plugin.Subtitle("I am so ready for some meatshots!");
				Plugin.Play("enter2");
			}
			if (num == 3)
			{
				Plugin.Subtitle("Let's get a win, guys! I wanna rank up here!");
				Plugin.Play("enter3");
			}
			if (num == 4)
			{
				Plugin.Subtitle("Meatshots! Freakin' meatshots!");
				Plugin.Play("enter4");
			}
			if (num == 5)
			{
				Plugin.Play("enter5");
				((MonoBehaviour)Plugin.me).StartCoroutine(EnterLine5());
			}
		}

		private static IEnumerator EnterLine1()
		{
			Plugin.Subtitle("I've got a bucket of chicken, and I'm here to kick ass!");
			yield return (object)new WaitForSeconds(2.75f);
			Plugin.Subtitle("And I'm all out of chicken, so I lied about the chicken...");
		}

		private static IEnumerator EnterLine5()
		{
			Plugin.Subtitle("Let's win already!");
			yield return (object)new WaitForSeconds(1.1f);
			Plugin.Subtitle("I don't got time for this, I got a date!");
			yield return (object)new WaitForSeconds(1.6f);
			Plugin.Subtitle("A real one!");
			yield return (object)new WaitForSeconds(0.7f);
			Plugin.Subtitle("Don't look into it.");
		}
	}
	[HarmonyPatch(typeof(Punch), "CoinFlip")]
	public class Patch_CoinToss
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.coinChance.value + 1) == 1)
			{
				int num = Random.Range(1, 3);
				if (num == 1)
				{
					Plugin.Subtitle("Catch this!");
					Plugin.Play("coin1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Hey, wimps!");
					Plugin.Play("coin2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Yo, heads up!");
					Plugin.Play("coin3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(NewMovement), "GetHurt")]
	public class Patch_Death
	{
		private static bool alreadyDied;

		private static void Postfix(NewMovement __instance)
		{
			if (__instance.dead)
			{
				if (!alreadyDied)
				{
					alreadyDied = true;
					int num = Random.Range(1, 4);
					if (num == 1)
					{
						Plugin.Subtitle("Scout_paincriticaldeath01.wav");
						Plugin.Play("death1");
					}
					if (num == 2)
					{
						Plugin.Subtitle("Scout_paincriticaldeath02.wav");
						Plugin.Play("death2");
					}
					if (num == 3)
					{
						Plugin.Subtitle("Scout_paincriticaldeath03.wav");
						Plugin.Play("death3");
					}
				}
			}
			else
			{
				alreadyDied = false;
			}
		}
	}
	[HarmonyPatch(typeof(NewMovement), "GetHurt")]
	public class Patch_Hurt
	{
		private static void Postfix(NewMovement __instance)
		{
			if (!__instance.dead && !Plugin.audio.isPlaying && Random.Range(1, Plugin.hurtChance.value + 1) == 1)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("Ah!");
					Plugin.Play("hurt1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Aaaaah!");
					Plugin.Play("hurt2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Ugh!");
					Plugin.Play("hurt3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Uh!");
					Plugin.Play("hurt4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("Nnrg!");
					Plugin.Play("hurt5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Shotgun), "Pump")]
	public class Patch_PumpCharge
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.pumpChance.value + 1) == 1)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("I'm gonna beat on your skull 'till I hit tonsils.");
					Plugin.Play("pump1");
				}
				if (num == 2)
				{
					Plugin.Play("pump2");
					((MonoBehaviour)Plugin.me).StartCoroutine(PumpLine2());
				}
				if (num == 3)
				{
					Plugin.Subtitle("Yeah, come get some, you frickin' wuss!");
					Plugin.Play("pump3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Put 'em up, pal.");
					Plugin.Play("pump4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("What are you lookin at?!");
					Plugin.Play("pump5");
				}
			}
		}

		private static IEnumerator PumpLine2()
		{
			Plugin.Subtitle("I'M GONNA HEADBUTT CHA'!");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("I'M GONNA HEADBUTT CHA'!");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("I'M GONNA HEADBUTT CHA'!");
		}
	}
	[HarmonyPatch(typeof(NewMovement), "Parry")]
	public class Patch_Parry
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.parryChance.value + 1) == 1)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("Batter up!");
					Plugin.Play("parry1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Major league!");
					Plugin.Play("parry2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Think fast, chucklenuts!");
					Plugin.Play("parry3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Good hands, buddy!");
					Plugin.Play("parry4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("Denied!");
					Plugin.Play("parry5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_WaveClear
	{
		private static void Postfix()
		{
			if (!MaliciousFaceState.fightActive && !MaliciousFaceState.killHandled && !MaliciousFaceState.fightActive && !MaliciousFaceState.killHandled && !SwordsmachineState.fightActive && !SwordsmachineState.killHandled && !HideousMassState.fightActive && !HideousMassState.killHandled && !MindflayerState.fightActive && !MindflayerState.killHandled && !SisypheanState.fightActive && !SisypheanState.killHandled && !FerrymanState.fightActive && !FerrymanState.killHandled && !Plugin.audio.isPlaying && Random.Range(1, Plugin.waveClearChance.value + 1) == 1)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("How ya like me now, blockhead?");
					Plugin.Play("wave1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("I did it!");
					Plugin.Play("wave2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("What did we learn? I always win!");
					Plugin.Play("wave3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Remember me? Yeah you do!");
					Plugin.Play("wave4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("You got anything smart to say now?!");
					Plugin.Play("wave5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Punch), "PunchSuccess", new Type[]
	{
		typeof(Vector3),
		typeof(Transform)
	})]
	public class Patch_PunchHit
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.punchChance.value + 1) == 1)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("Bonk!");
					Plugin.Play("punch1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Boink!");
					Plugin.Play("punch2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Eat it, fatty!");
					Plugin.Play("punch3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Ya head's a freakin' bat matgnet!");
					Plugin.Play("punch4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("Man, your skull's so soft you're makin' this easy!");
					Plugin.Play("punch5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Revolver), "LateUpdate")]
	public class Patch_Spin
	{
		private static bool wasSpinning;

		private static float nextAllowedTime;

		private const float COOLDOWN = 4f;

		private static void Postfix(Revolver __instance)
		{
			if (__instance.gunVariation != 2)
			{
				wasSpinning = false;
				return;
			}
			bool value = Traverse.Create((object)__instance).Field("chargingPierce").GetValue<bool>();
			if (value && !wasSpinning && !Plugin.audio.isPlaying && Time.time >= nextAllowedTime)
			{
				nextAllowedTime = Time.time + 4f;
				Plugin.Subtitle("You morons are about to catch a real beatin'.");
				Plugin.Play("spin1");
			}
			wasSpinning = value;
		}
	}
	[HarmonyPatch(typeof(NewMovement), "TryDash")]
	public class Patch_Dash
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.dashChance.value + 1) == 1)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("(Whooshing sound)");
					Plugin.Play("dash1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Woosh!");
					Plugin.Play("dash2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Wa-ha!");
					Plugin.Play("dash3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Haha!");
					Plugin.Play("dash4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("Yoink!");
					Plugin.Play("dash5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(NewMovement), "TryDash")]
	public class Patch_FailDash
	{
		private static void Prefix(NewMovement __instance)
		{
			if (!(__instance.boostCharge >= 100f) && !Plugin.audio.isPlaying && Random.Range(1, Plugin.failDashChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Work, dammit!");
					Plugin.Play("faildash1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("C'mon, c'mon!");
					Plugin.Play("faildash2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("I'm not even winded!");
					Plugin.Play("faildash3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(StyleHUD), "AscendRank")]
	public class Patch_UltrakillRank
	{
		private static void Postfix(StyleHUD __instance)
		{
			if (__instance.rankIndex == 7 && !Plugin.audio.isPlaying)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("Hey look at me, look at me!");
					Plugin.Play("rank1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("You seein' dis?");
					Plugin.Play("rank2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("You see dat?");
					Plugin.Play("rank3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Bang! I make it look easy.");
					Plugin.Play("rank4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("No otha' class gonna do dat!");
					Plugin.Play("rank5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(EnemyIdentifier), "StartBurning")]
	public class Patch_Fire
	{
		private static HashSet<EnemyIdentifier> alreadyBurned = new HashSet<EnemyIdentifier>();

		private static void Postfix(EnemyIdentifier __instance)
		{
			if (alreadyBurned.Contains(__instance))
			{
				return;
			}
			alreadyBurned.Add(__instance);
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.fireChance.value + 1) == 1)
			{
				int num = Random.Range(1, 3);
				if (num == 1)
				{
					Plugin.Subtitle("Hey, who's on fire now?");
					Plugin.Play("fire1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Fire! Fire! Fire!");
					Plugin.Play("fire2");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Punch), "ParryProjectile")]
	public class Patch_ProjectileBoost
	{
		private static void Postfix(Projectile proj)
		{
			if (proj.boosted && !Plugin.audio.isPlaying && Random.Range(1, Plugin.projectileBoostChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Hey, lotta' good that gun didya!");
					Plugin.Play("boost1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("You knuckleheads ain't even worth the effort.");
					Plugin.Play("boost2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Say goodbye to ya kneecaps, chucklehead!");
					Plugin.Play("boost3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(SandificationZone), "Enter")]
	public class Patch_Sand
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.sandChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("This did not just happen!");
					Plugin.Play("sand1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("'Kay this does not look good here, uhmm...");
					Plugin.Play("sand2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("We are screwed!");
					Plugin.Play("sand3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(NewMovement), "HandleInputs")]
	public class Patch_WallJump
	{
		private static int lastWallJumps;

		private static void Postfix(NewMovement __instance)
		{
			int currentWallJumps = __instance.currentWallJumps;
			if (currentWallJumps > lastWallJumps && !Plugin.audio.isPlaying && Random.Range(1, Plugin.wallJumpChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Go go go!");
					Plugin.Play("walljump1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Keep it movin', guys!");
					Plugin.Play("walljump2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Wall climbin'! Yeah!");
					Plugin.Play("walljump3");
				}
			}
			lastWallJumps = currentWallJumps;
		}
	}
	[HarmonyPatch(typeof(JumpPad), "OnTriggerEnter")]
	public class Patch_JumpPad
	{
		private static void Postfix(Component other)
		{
			if (other.gameObject.CompareTag("Player") && !Plugin.audio.isPlaying && Random.Range(1, Plugin.jumpPadChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Look at you chuckleheads down there!");
					Plugin.Play("jumppad1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Hehey, I'm flyin'!");
					Plugin.Play("jumppad2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Hey, I can see my base from here!");
					Plugin.Play("jumppad3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(RocketLauncher), "ShootCannonball")]
	public class Patch_Cannonball
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.cannonballChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Good catch, dummy!");
					Plugin.Play("cannonball1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Play ball!");
					Plugin.Play("cannonball2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Home freakin' run!");
					Plugin.Play("cannonball3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Grenade), "Explode")]
	public class Patch_CoreNuke
	{
		private static void Prefix(ref bool super, ref float sizeMultiplier)
		{
			if (super && sizeMultiplier == 2f && !Plugin.audio.isPlaying)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Head bomb! Head bomb! Comin' through!");
					Plugin.Play("nuke1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Bomb on my head! Bomb on my head!");
					Plugin.Play("nuke2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Blow that up, cyclops.");
					Plugin.Play("nuke3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Shotgun), "ShootSinks")]
	public class Patch_CoreEject
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.coreEjectChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Eat my dust!");
					Plugin.Play("coreeject1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Let's get 'em!");
					Plugin.Play("coreeject2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Let's waste 'em!");
					Plugin.Play("coreeject3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(ItemIdentifier), "PickUp")]
	public class Patch_Pickup
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && Random.Range(1, Plugin.pickupChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Yeah.");
					Plugin.Play("pickup1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Nice.");
					Plugin.Play("pickup2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Haha, aw yeah.");
					Plugin.Play("pickup3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(Railcannon), "OnEnable")]
	public class Patch_Railcannon
	{
		private static float nextAllowedTime;

		private const float COOLDOWN = 6f;

		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying && !(Time.time < nextAllowedTime) && Random.Range(1, Plugin.railSwitchChance.value + 1) == 1)
			{
				nextAllowedTime = Time.time + 6f;
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("Let's do dis.");
					Plugin.Play("railcannon1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Bring it.");
					Plugin.Play("railcannon2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Let's go.");
					Plugin.Play("railcannon3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_FakeExit81
	{
		private static bool alreadyFired;

		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			if (SceneHelper.CurrentScene != "Level 8-1")
			{
				alreadyFired = false;
			}
			else if (!alreadyFired)
			{
				string name = ((Object)((Component)__instance).gameObject).name;
				string text = ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString();
				if (name == "FakeExitOutsideMusicTrigger" && text == "(504.00, -913.50, 689.00)")
				{
					alreadyFired = true;
					((MonoBehaviour)Plugin.me).StartCoroutine(FakeExit());
				}
			}
		}

		private static IEnumerator FakeExit()
		{
			Plugin.Subtitle("IT'S HAPPENING!");
			Plugin.Play("fakeout1");
			yield return (object)new WaitForSeconds(0.85f);
			Plugin.Subtitle(" OH, GOD! IT'S HAPPENING!");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_SpaceyRoom
	{
		private static bool alreadyFired;

		private static void Postfix(ObjectActivator __instance)
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			if (SceneHelper.CurrentScene != "Level 8-3")
			{
				alreadyFired = false;
			}
			else if (!alreadyFired && ((Object)((Component)__instance).gameObject).name == "GravityChanger" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(300.00, 40.00, 615.00)")
			{
				alreadyFired = true;
				Plugin.Play("space1");
				((MonoBehaviour)Plugin.me).StartCoroutine(SpaceLine1());
			}
		}

		private static IEnumerator SpaceLine1()
		{
			yield return (object)new WaitForSeconds(3f);
			Plugin.Subtitle("OH.");
			yield return (object)new WaitForSeconds(0.57f);
			Plugin.Subtitle("MY.");
			yield return (object)new WaitForSeconds(0.43f);
			Plugin.Subtitle("HOLY.");
			yield return (object)new WaitForSeconds(0.6f);
			Plugin.Subtitle("FREAKIN'.");
			yield return (object)new WaitForSeconds(0.5f);
			Plugin.Subtitle("STUPID.");
			yield return (object)new WaitForSeconds(0.7f);
			Plugin.Subtitle("CRAP!");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_FakeStartingRoom83
	{
		private static bool alreadyFired;

		private static void Postfix(ObjectActivator __instance)
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			if (SceneHelper.CurrentScene != "Level 8-3")
			{
				alreadyFired = false;
			}
			else if (!alreadyFired && ((Object)((Component)__instance).gameObject).name == "False Starts" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(0.00, -10.00, 300.00)")
			{
				alreadyFired = true;
				Plugin.Subtitle("What da hell's goin' on?");
				Plugin.Play("8-3");
			}
		}
	}
	[HarmonyPatch(typeof(NewMovement), "Update")]
	public class Patch_MirrorRoom82
	{
		private static bool insideLastFrame;

		private static void Postfix(NewMovement __instance)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			if (SceneHelper.CurrentScene != "Level 8-2")
			{
				insideLastFrame = false;
				return;
			}
			Vector3 position = ((Component)__instance).transform.position;
			bool flag = position.x > 20f && position.x < 30f && position.y > 12f && position.y < 21f && position.z > 498f && position.z < 510f;
			if (flag && !insideLastFrame)
			{
				Plugin.Subtitle("Oh man, that's beautiful.");
				Plugin.Play("mirror1");
			}
			insideLastFrame = flag;
		}
	}
	public static class ReaperState
	{
		public static bool armed;
	}
	[HarmonyPatch(typeof(BossHealthBar), "Awake")]
	public class Patch_MirrorReaper_Arm
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (__instance.bossName == "MIRROR REAPER")
			{
				ReaperState.armed = true;
			}
		}
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_MirrorReaper_Reveal
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 8-2") && !(__instance.bossName != "MIRROR REAPER") && ReaperState.armed)
			{
				ReaperState.armed = false;
				Plugin.Subtitle("OH MY GOD, DAT IS ALMOST AS SCARY AS MY HAT!");
				Plugin.Play("mirrorreaper1");
			}
		}
	}
	[HarmonyPatch(typeof(V2), "Start")]
	public class Patch_V2Intro
	{
		private static void Postfix(V2 __instance)
		{
			if (__instance.inIntro)
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(IntroLine());
			}
		}

		private static IEnumerator IntroLine()
		{
			Plugin.Subtitle("You're like a car crash in slow motion,");
			Plugin.Play("v2intro1");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("It's like I'm watchin' ya fly through a windshield.");
		}
	}
	[HarmonyPatch(typeof(V2), "KnockedOut")]
	public class Patch_V2CoinCheese
	{
		private static void Prefix(V2 __instance)
		{
			if (__instance.inIntro)
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(CheeseLine());
			}
		}

		private static IEnumerator CheeseLine()
		{
			Plugin.Subtitle("Yeah, I dare ya, rage quit.");
			Plugin.Play("v2cheese1");
			yield return (object)new WaitForSeconds(1.45f);
			Plugin.Subtitle("C'mon make us both happy!");
		}
	}
	[HarmonyPatch(typeof(Animator), "Play", new Type[]
	{
		typeof(string),
		typeof(int),
		typeof(float)
	})]
	public class Patch_V2GreenArm
	{
		private static void Postfix(Animator __instance)
		{
			if (!(((Object)((Component)__instance).gameObject).name != "v2_GreenArm") && !EncounterFlags.v2GreenArm)
			{
				EncounterFlags.v2GreenArm = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(GreenArmLine());
			}
		}

		private static IEnumerator GreenArmLine()
		{
			Plugin.Subtitle("Hey, knucklehead, you ain't gonna win.");
			Plugin.Play("v2intro2");
			yield return (object)new WaitForSeconds(1.45f);
			Plugin.Subtitle("This map ain't big enough for the two of us.");
		}
	}
	[HarmonyPatch(typeof(V2), "InstaEnrage")]
	public class Patch_V2Enrage
	{
		private static void Postfix(V2 __instance)
		{
			if (!EncounterFlags.v2Enrage)
			{
				EncounterFlags.v2Enrage = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(EnrageLine());
			}
		}

		private static IEnumerator EnrageLine()
		{
			Plugin.Subtitle("Oh, what, you gonna cry?");
			Plugin.Play("v2enrage1");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("You gonna cry now?");
		}
	}
	[HarmonyPatch(typeof(WeaponPickUp), "GotActivated")]
	public class Patch_V2ArmPickup
	{
		private static void Postfix(WeaponPickUp __instance)
		{
			if (((Object)__instance).name == "RedArmPickup" && SceneHelper.CurrentScene == "Level 1-4")
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(KnuckleLine());
			}
			else if (((Object)__instance).name == "RedArmPickup" && SceneHelper.CurrentScene == "Level 4-4")
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(WhiplashLine());
			}
		}

		private static IEnumerator KnuckleLine()
		{
			Plugin.Subtitle("You.");
			Plugin.Play("v2arm1");
			yield return (object)new WaitForSeconds(0.65f);
			Plugin.Subtitle("Are.");
			yield return (object)new WaitForSeconds(0.65f);
			Plugin.Subtitle("Terrible!");
		}

		private static IEnumerator WhiplashLine()
		{
			Plugin.Subtitle("Not so tough now, are ya?");
			Plugin.Play("v2arm2");
			yield return (object)new WaitForSeconds(1.4f);
			Plugin.Subtitle("Are ya?!");
		}
	}
	[HarmonyPatch(typeof(SlowMo), "OnEnable")]
	public class Patch_V2Death
	{
		private static void Postfix(SlowMo __instance)
		{
			if (((Object)__instance).name == "ToActivate" && SceneHelper.CurrentScene == "Level 4-4")
			{
				Plugin.Subtitle("I am the Scout here!");
				Plugin.Play("v2die1");
			}
		}
	}
	[HarmonyPatch(typeof(HudMessage), "PlayMessage")]
	public class Patch_Maxor
	{
		private static void Postfix(ref string ___message)
		{
			if (___message == "You're not getting away this time.")
			{
				Plugin.Play("maxor1");
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_EarthmoverIntro
	{
		private static void Postfix(ObjectActivator __instance)
		{
			if (!(((Object)((Component)__instance).gameObject).name != "Centaur Full") && !EncounterFlags.earthmoverIntro)
			{
				EncounterFlags.earthmoverIntro = true;
				Plugin.Subtitle("ARE YOU FREAKIN' KIDDING ME?!");
				Plugin.Play("earthmoverintro1");
			}
		}
	}
	[HarmonyPatch(typeof(AddStylePoints), "Activate")]
	public class Patch_EarthmoverOutro
	{
		private static void Postfix(AddStylePoints __instance)
		{
			if (!(__instance.styleName != "RAISON D'ETRE"))
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(EarthmoverOutro());
			}
		}

		private static IEnumerator EarthmoverOutro()
		{
			Plugin.Subtitle("For the first time in my life...");
			Plugin.Play("earthmoveroutro1");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("I'm at a loss for words.");
		}
	}
	[HarmonyPatch(typeof(NewMovement), "Update")]
	public class Patch_RocketRide
	{
		private static int lastRides;

		private static void Postfix(NewMovement __instance)
		{
			int rocketRides = __instance.rocketRides;
			if (rocketRides > lastRides && !Plugin.audio.isPlaying && Random.Range(1, Plugin.rocketRideChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("It's the witchin' hour, let's go!");
					Plugin.Play("rocketride1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("I AM A FREAKIN' WIZARD!");
					Plugin.Play("rocketride2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("I AM FULL OF FREAKIN' MAGIC!");
					Plugin.Play("rocketride3");
				}
			}
			lastRides = rocketRides;
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "OnEnable")]
	public class Patch_Cerberus
	{
		private static bool alreadyFired;

		private static void Postfix(ObjectActivator __instance)
		{
			if (SceneHelper.CurrentScene != "Level 0-5")
			{
				alreadyFired = false;
			}
			else if (!alreadyFired && __instance.delay == 0f && !(((Object)((Component)__instance).gameObject).name != "Cube") && Object.op_Implicit((Object)(object)((Component)__instance).gameObject.GetComponent("ActivateArena")))
			{
				alreadyFired = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(CerberusLine());
			}
		}

		private static IEnumerator CerberusLine()
		{
			Plugin.Subtitle("Hey, Houdini!");
			Plugin.Play("cerberus1");
			yield return (object)new WaitForSeconds(1.5f);
			Plugin.Subtitle("Where ya hidin'?");
			yield return (object)new WaitForSeconds(1.5f);
			Plugin.Subtitle("Where da hell is that wizard?");
			yield return (object)new WaitForSeconds(4f);
			Plugin.Subtitle("Holy crap, you're even taller in person!");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("Is it too late to back out?");
		}
	}
	[HarmonyPatch(typeof(SubtitledAudioSource), "OnEnable")]
	public class Patch_GabrielIntro
	{
		private static void Postfix(SubtitledAudioSource __instance)
		{
			switch (((Object)((Component)__instance).gameObject).name)
			{
			case "gab_Intro1":
				((MonoBehaviour)Plugin.me).StartCoroutine(GabIntro1());
				break;
			case "gab_Intro2":
				((MonoBehaviour)Plugin.me).StartCoroutine(GabIntro2());
				break;
			case "gab_Intro3":
				((MonoBehaviour)Plugin.me).StartCoroutine(GabIntro3());
				break;
			case "Speech":
				if (!EncounterFlags.gabriel2Intro)
				{
					EncounterFlags.gabriel2Intro = true;
					Plugin.Subtitle("Get out here, spellcakes!");
					Plugin.Play("gabriel21");
				}
				break;
			}
		}

		private static IEnumerator GabIntro1()
		{
			Plugin.Subtitle("Where you at, Merasmus?");
			Plugin.Play("gabriel1");
			yield return (object)new WaitForSeconds(1.5f);
			Plugin.Subtitle("Calling you out, ya stupid wizard!");
		}

		private static IEnumerator GabIntro2()
		{
			Plugin.Subtitle("Nobody likes wizards, ya hear me?");
			Plugin.Play("gabriel2");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("You're doomed to die alone!");
		}

		private static IEnumerator GabIntro3()
		{
			Plugin.Subtitle("I am gonna mess...");
			Plugin.Play("gabriel3");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("you...");
			yield return (object)new WaitForSeconds(0.4f);
			Plugin.Subtitle("up!");
		}
	}
	[HarmonyPatch(typeof(GabrielBase), "EnrageNow")]
	public class Patch_GabrielEnrage
	{
		private static void Postfix(GabrielBase __instance)
		{
			if (SceneHelper.CurrentScene == "Level 3-2")
			{
				Plugin.Subtitle("Oh man! I am going to screw that wizard up!");
				Plugin.Play("gabrieltaunt");
			}
			else if (SceneHelper.CurrentScene == "Level 6-2")
			{
				Plugin.Subtitle("Ya know what, you're not scary, you're just weird.");
				Plugin.Play("gabriel22");
			}
		}
	}
	[HarmonyPatch(typeof(GabrielBase), "UnEnrage")]
	public class Patch_GabrielUnenrage
	{
		private static void Postfix(GabrielBase __instance)
		{
			Plugin.Subtitle("I'm gonna cave your little ghost skull in, magic man!");
			Plugin.Play("gabriel2taunt");
		}
	}
	[HarmonyPatch(typeof(GabrielOutro), "Disappear")]
	public class Patch_GabrielOutro
	{
		private static void Postfix()
		{
			((MonoBehaviour)Plugin.me).StartCoroutine(OutroLine());
		}

		private static IEnumerator OutroLine()
		{
			Plugin.Subtitle("Yeah, you better hide, you wand-wavin' moron!");
			Plugin.Play("gabriel4");
			yield return (object)new WaitForSeconds(0f);
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_MinosHand
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 2-4") && !EncounterFlags.minosHand && ((Object)((Component)__instance).gameObject).name == "BossActivator" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(142.50, 5.50, 702.50)")
			{
				EncounterFlags.minosHand = true;
				Plugin.Play("minoshand1");
				((MonoBehaviour)Plugin.me).StartCoroutine(MinosHand());
			}
		}

		private static IEnumerator MinosHand()
		{
			yield return (object)new WaitForSeconds(7f);
			Plugin.Subtitle("Don't look, scary hat!");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_MinosCorpse
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 2-4") && !EncounterFlags.minosCorpse && ((Object)((Component)__instance).gameObject).name == "BlackHoleSpawnPos" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(457.00, 1.00, 570.00)")
			{
				EncounterFlags.minosCorpse = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(MinosCorpse());
			}
		}

		private static IEnumerator MinosCorpse()
		{
			Plugin.Subtitle("AAAHHH!");
			Plugin.Play("minoscorpse1");
			yield return (object)new WaitForSeconds(0.8f);
			Plugin.Subtitle("SAVE YOURSELF, SCARY HAT!");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_Intro11
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 1-1") && !EncounterFlags.intro11 && ((Object)((Component)__instance).gameObject).name == "Cube (1)" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(0.00, 0.00, 296.50)")
			{
				EncounterFlags.intro11 = true;
				Plugin.Subtitle("Oh! Dat is beautiful!");
				Plugin.Play("intro11");
			}
		}
	}
	public static class WickedState
	{
		public static bool inWicked;
	}
	[HarmonyPatch(typeof(HudMessage), "PlayMessage")]
	public class Patch_WickedMessages
	{
		private static void Postfix(ref string ___message)
		{
			if (___message == "Just kidding :)")
			{
				Plugin.Subtitle("You've got to be kidding me!");
				Plugin.Play("wickedtroll1");
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_WickedBlueSkull
	{
		private static bool cubeFired;

		private static int soundCount;

		private static void Postfix(ObjectActivator __instance)
		{
			if (SceneHelper.CurrentScene != "Level 0-S")
			{
				cubeFired = false;
				soundCount = 0;
				return;
			}
			string name = ((Object)((Component)__instance).gameObject).name;
			if (name == "Cube (1)")
			{
				cubeFired = true;
				soundCount = 0;
			}
			else if (cubeFired && name == "SoundActivator")
			{
				soundCount++;
				if (soundCount == 2)
				{
					Plugin.Subtitle("Oh, dis ain't good...");
					Plugin.Play("blueskullwicked1");
				}
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_WickedFinish
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_004c: 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)
			if (!(SceneHelper.CurrentScene != "Level 0-S") && WickedState.inWicked && !EncounterFlags.wickedFinish && ((Object)((Component)__instance).gameObject).name == "Cube" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(-56.60, -21.39, -5.92)")
			{
				EncounterFlags.wickedFinish = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(FinishWicked());
			}
		}

		private static IEnumerator FinishWicked()
		{
			Plugin.Subtitle("We did it, scary hat.");
			Plugin.Play("finishwicked1");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("We did it together.");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_PistolPickup
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 0-1") && !EncounterFlags.pistolPickup && ((Object)((Component)__instance).gameObject).name == "TitleActivator" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(40.00, 13.00, 393.00)")
			{
				EncounterFlags.pistolPickup = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(RevolverPickup());
			}
		}

		private static IEnumerator RevolverPickup()
		{
			Plugin.Subtitle("C'mon, bat.");
			Plugin.Play("pistol1");
			yield return (object)new WaitForSeconds(1.25f);
			Plugin.Subtitle("Let's go introduce you to some skulls.");
		}
	}
	[HarmonyPatch(typeof(WeaponPickUp), "GotActivated")]
	public class Patch_WeaponPickups
	{
		private static void Postfix(WeaponPickUp __instance)
		{
			switch (((Object)__instance).name)
			{
			case "ShotgunPickUp":
				Plugin.Subtitle("Come to daddy.");
				Plugin.Play("shotgunpickup1");
				break;
			case "Weapon Pickup":
				Plugin.Subtitle("Sweet!");
				Plugin.Play("nailgunpickup1");
				break;
			case "Railcannon (1)":
				((MonoBehaviour)Plugin.me).StartCoroutine(RailcannonLine());
				break;
			case "WeaponPickUp":
				Plugin.Subtitle("Ooooh! Yeah!");
				Plugin.Play("rocketpickup1");
				break;
			}
		}

		private static IEnumerator RailcannonLine()
		{
			Plugin.Subtitle("Oh, absolutely!");
			Plugin.Play("railcannonpickup1");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("Abso-freakin-lutely!");
		}
	}
	[HarmonyPatch(typeof(SlowMo), "OnEnable")]
	public class Patch_V2SkullSlide
	{
		private static void Postfix(SlowMo __instance)
		{
			//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)
			if (!(SceneHelper.CurrentScene != "Level 1-4") && !EncounterFlags.v2SkullSlide && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(0.00, -8.00, 507.00)")
			{
				EncounterFlags.v2SkullSlide = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(V2SlideIn());
			}
		}

		private static IEnumerator V2SlideIn()
		{
			Plugin.Play("v2slide1");
			yield return (object)new WaitForSeconds(0.5f);
			Plugin.Subtitle("What the hell was that crap?");
		}
	}
	public static class MaliciousFaceState
	{
		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_MaliciousFace
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(__instance.bossName != "MALICIOUS FACE"))
			{
				MaliciousFaceState.fightActive = true;
				MaliciousFaceState.killHandled = false;
				Plugin.Subtitle("C'mon, tough guy!");
				Plugin.Play("maliciousface1");
			}
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_MaliciousFaceKill
	{
		private static void Postfix()
		{
			if (MaliciousFaceState.fightActive && !MaliciousFaceState.killHandled)
			{
				MaliciousFaceState.killHandled = true;
				MaliciousFaceState.fightActive = false;
				Plugin.Subtitle("I wasted you!");
				Plugin.Play("maliciouskill1");
			}
		}
	}
	public static class SwordsmachineState
	{
		public static int barEnableCount;

		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_SwordsmachineIntro
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 0-3") && !EncounterFlags.swordsIntro && ((Object)((Component)__instance).gameObject).name == "Cube" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(-94.50, -18.00, 413.00)")
			{
				EncounterFlags.swordsIntro = true;
				Plugin.Subtitle("Ooooh yeah, you're real scary!");
				Plugin.Play("swordsintro1");
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_SwordsmachineFlee
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 0-3") && !EncounterFlags.swordsFlee && ((Object)((Component)__instance).gameObject).name == "Cube" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(-88.00, -12.00, 413.00)")
			{
				EncounterFlags.swordsFlee = true;
				Plugin.Subtitle("Wassamatter, y'freakin' stupid?");
				Plugin.Play("swordsflee1");
			}
		}
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_SwordsmachineReappear
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(__instance.bossName != "SWORDSMACHINE"))
			{
				SwordsmachineState.barEnableCount++;
				SwordsmachineState.fightActive = true;
				if (SwordsmachineState.barEnableCount == 2)
				{
					Plugin.Subtitle("Boom! I'm back, dummy!");
					Plugin.Play("swordsreappear1");
				}
			}
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_SwordsmachineKill
	{
		private static void Postfix()
		{
			if (!(SceneHelper.CurrentScene != "Level 0-3") && SwordsmachineState.fightActive && !SwordsmachineState.killHandled)
			{
				SwordsmachineState.killHandled = true;
				SwordsmachineState.fightActive = false;
				Plugin.Subtitle("Don't you ever cross me again!");
				Plugin.Play("swordskill1");
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_Geryon84
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_002b: 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)
			if (SceneHelper.CurrentScene != "Level 8-4")
			{
				return;
			}
			string name = ((Object)((Component)__instance).gameObject).name;
			string text = ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString();
			if (name == "MuffleController" && !EncounterFlags.geryonIntro)
			{
				EncounterFlags.geryonIntro = true;
				Plugin.Subtitle("Wow!");
				Plugin.Play("geryonintro1");
			}
			else if (name == "TeleporterDelay" && text == "(-28.50, 87.83, 63.25)" && !EncounterFlags.geryonElevator)
			{
				EncounterFlags.geryonElevator = true;
				Plugin.Subtitle("Uh oh...");
				Plugin.Play("geryonelevator1");
			}
			else if (name == "The Fall" && text == "(0.00, -10.00, -200.00)" && !EncounterFlags.geryonFall)
			{
				EncounterFlags.geryonFall = true;
				if (Random.Range(1, 4) == 1)
				{
					((MonoBehaviour)Plugin.me).StartCoroutine(FallingLine());
					return;
				}
				Plugin.Subtitle("(Screams of horror)");
				Plugin.Play("geryonfall1");
			}
			else if (name == "GeryonIntro" && !EncounterFlags.geryonBoss)
			{
				EncounterFlags.geryonBoss = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(GeryonBoss());
			}
			else if (name == "RotationStarter" && !EncounterFlags.geryonPhase2)
			{
				EncounterFlags.geryonPhase2 = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(GeryonPhase2());
			}
			else if (name == "OutroDelay" && !EncounterFlags.geryonOutro)
			{
				EncounterFlags.geryonOutro = true;
				Plugin.Subtitle("What?");
				Plugin.Play("geryonoutro1");
			}
			else if (name == "PlayerReactivator" && !EncounterFlags.geryonReveal)
			{
				EncounterFlags.geryonReveal = true;
				Plugin.Subtitle("'Bout time we got a little recognition around here!");
				Plugin.Play("geryontheatre1");
			}
		}

		private static IEnumerator FallingLine()
		{
			Plugin.Subtitle("(Screams of horror)");
			Plugin.Play("geryonfall2");
			yield return (object)new WaitForSeconds(2.7f);
			Plugin.Subtitle("Holy crap, this goes on forever.");
		}

		private static IEnumerator GeryonBoss()
		{
			Plugin.Subtitle("Oh no! I knew dis would happen!");
			Plugin.Play("geryonboss1");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("I FORESAW DIS!");
		}

		private static IEnumerator GeryonPhase2()
		{
			Plugin.Subtitle("IT'S TOO MUCH MAGIC!");
			Plugin.Play("geryonphase2");
			yield return (object)new WaitForSeconds(1.3f);
			Plugin.Subtitle("IT'S TOO MUCH MAGIC!!!");
		}
	}
	public static class HideousMassState
	{
		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_HideousMass
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(__instance.bossName != "HIDEOUS MASS"))
			{
				HideousMassState.fightActive = true;
				HideousMassState.killHandled = false;
				Plugin.Subtitle("Auugghh!");
				Plugin.Play("hideousintro1");
			}
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_HideousMassKill
	{
		private static void Postfix()
		{
			if (!(SceneHelper.CurrentScene != "Level 1-3") && HideousMassState.fightActive && !HideousMassState.killHandled)
			{
				HideousMassState.killHandled = true;
				HideousMassState.fightActive = false;
				Plugin.Subtitle("Dude, you'd get a closed casket at the ugly cemetery.");
				Plugin.Play("hideouskill1");
			}
		}
	}
	public static class MindflayerState
	{
		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_Mindflayer
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 2-3") && !(__instance.bossName != "MINDFLAYER"))
			{
				MindflayerState.fightActive = true;
				MindflayerState.killHandled = false;
				((MonoBehaviour)Plugin.me).StartCoroutine(MindflayerIntro());
			}
		}

		private static IEnumerator MindflayerIntro()
		{
			Plugin.Subtitle("Ppf, this guy's nothin'!");
			Plugin.Play("mindflayerintro1");
			yield return (object)new WaitForSeconds(1.7f);
			Plugin.Subtitle("Can I get your autograph after this?");
			yield return (object)new WaitForSeconds(2f);
			Plugin.Subtitle("...As a joke, obviously.");
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_MindflayerKill
	{
		private static void Postfix()
		{
			if (!(SceneHelper.CurrentScene != "Level 2-3") && MindflayerState.fightActive && !MindflayerState.killHandled)
			{
				MindflayerState.killHandled = true;
				MindflayerState.fightActive = false;
				Plugin.Subtitle("You're all losers!");
				Plugin.Play("mindflayerkill1");
			}
		}
	}
	public static class SisypheanState
	{
		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_Sisyphean
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 4-2") && !(__instance.bossName != "SISYPHEAN INSURRECTIONIST"))
			{
				SisypheanState.fightActive = true;
				SisypheanState.killHandled = false;
				((MonoBehaviour)Plugin.me).StartCoroutine(SisypheanIntro());
			}
		}

		private static IEnumerator SisypheanIntro()
		{
			Plugin.Subtitle("Hey, lard-fat!");
			Plugin.Play("sisypheanintro1");
			yield return (object)new WaitForSeconds(0.9f);
			Plugin.Subtitle("Those hard arteries don't stop bullets, do they?");
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_SisypheanKill
	{
		private static void Postfix()
		{
			if (!(SceneHelper.CurrentScene != "Level 4-2") && SisypheanState.fightActive && !SisypheanState.killHandled)
			{
				SisypheanState.killHandled = true;
				SisypheanState.fightActive = false;
				((MonoBehaviour)Plugin.me).StartCoroutine(SisypheanKill());
			}
		}

		private static IEnumerator SisypheanKill()
		{
			Plugin.Subtitle("Nice hustle, tons-a-fun!");
			Plugin.Play("sisypheankill1");
			yield return (object)new WaitForSeconds(1.25f);
			Plugin.Subtitle("Next time, eat a salad!");
		}
	}
	public static class FerrymanState
	{
		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_Ferryman
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 5-2") && !(__instance.bossName != "FERRYMAN"))
			{
				FerrymanState.fightActive = true;
				FerrymanState.killHandled = false;
				((MonoBehaviour)Plugin.me).StartCoroutine(FerrymanIntro());
			}
		}

		private static IEnumerator FerrymanIntro()
		{
			Plugin.Subtitle("Would you look at you?");
			Plugin.Play("ferrymanintro1");
			yield return (object)new WaitForSeconds(0.8f);
			Plugin.Subtitle("I mean, look at you!");
		}
	}
	[HarmonyPatch(typeof(ActivateNextWave), "EndWaves")]
	public class Patch_FerrymanKill
	{
		private static void Postfix()
		{
			if (!(SceneHelper.CurrentScene != "Level 5-2") && FerrymanState.fightActive && !FerrymanState.killHandled)
			{
				FerrymanState.killHandled = true;
				FerrymanState.fightActive = false;
				Plugin.Subtitle("Don't bring a wrench to a gunfight!");
				Plugin.Play("ferrymankill1");
			}
		}
	}
	[HarmonyPatch(typeof(StyleHUD), "GetLocalizedName")]
	public class Patch_StyleIconoclasm
	{
		private static void Prefix(string id)
		{
			if (id != null && (id == "ultrakill.iconoclasm" || id == "ultrakill.heartbreak") && !Plugin.audio.isPlaying && Random.Range(1, Plugin.styleChance.value + 1) == 1)
			{
				Plugin.Subtitle("I broke your stupid crap, moron!");
				Plugin.Play("iconoclasm1");
			}
		}
	}
	public static class LeviathanState
	{
		public static bool fightActive;

		public static bool killHandled;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_Leviathan
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 5-4") && !(__instance.bossName != "LEVIATHAN"))
			{
				LeviathanState.fightActive = true;
				LeviathanState.killHandled = false;
				((MonoBehaviour)Plugin.me).StartCoroutine(LeviathanIntro());
			}
		}

		private static IEnumerator LeviathanIntro()
		{
			Plugin.Subtitle("Man, every new person I meet is bigger thatn the last!");
			Plugin.Play("leviathanintro1");
			yield return (object)new WaitForSeconds(2.65f);
			Plugin.Subtitle("What do they have you eatin'?");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_LeviathanPhase2
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 5-4") && !EncounterFlags.leviathanPhase2 && ((Object)((Component)__instance).gameObject).name == "BoatExplode" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(640.50, 686.81, 522.29)")
			{
				EncounterFlags.leviathanPhase2 = true;
				Plugin.Subtitle("Holy crap!");
				Plugin.Play("leviathanphase2");
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_LeviathanKill
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 5-4") && !EncounterFlags.leviathanKill && ((Object)((Component)__instance).gameObject).name == "DeathSound" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(641.42, 680.44, 596.91)")
			{
				EncounterFlags.leviathanKill = true;
				LeviathanState.fightActive = false;
				((MonoBehaviour)Plugin.me).StartCoroutine(LeviathanKill());
			}
		}

		private static IEnumerator LeviathanKill()
		{
			Plugin.Subtitle("I am owning you!");
			Plugin.Play("leviathankill1");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("You fat bald fatty fat...");
			yield return (object)new WaitForSeconds(1.5f);
			Plugin.Subtitle("Fat fat!");
		}
	}
	public static class MinotaurState
	{
		public static int barEnableCount;
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_Minotaur
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 7-1") && __instance.bossName != null && __instance.bossName.Contains("MINOTAUR"))
			{
				MinotaurState.barEnableCount++;
				if (MinotaurState.barEnableCount == 1)
				{
					Plugin.Subtitle("(Shrieks)");
					Plugin.Play("minotaurintro1");
				}
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_MinotaurFakeKill
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 7-1") && !EncounterFlags.minotaurFakeKill && ((Object)((Component)__instance).gameObject).name == "PlayerTeleported" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(-242.50, 0.00, 0.00)")
			{
				EncounterFlags.minotaurFakeKill = true;
				Plugin.Subtitle("Nice work, scary hat.");
				Plugin.Play("minotaurkill1");
			}
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_MinotaurPhase2
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 7-1") && !EncounterFlags.minotaurPhase2 && ((Object)((Component)__instance).gameObject).name == "FightStart" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(-242.50, 120.00, -399.75)")
			{
				EncounterFlags.minotaurPhase2 = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(MinotaurPhase2());
			}
		}

		private static IEnumerator MinotaurPhase2()
		{
			Plugin.Subtitle("AAH! SCARY HAT!");
			Plugin.Play("minotaurphase2");
			yield return (object)new WaitForSeconds(1.3f);
			Plugin.Subtitle("THIS IS ALL YOUR FAULT!");
		}
	}
	[HarmonyPatch(typeof(StyleHUD), "GetLocalizedName")]
	public class Patch_StyleConductor
	{
		private static void Prefix(string id)
		{
			if (id != null && id == "<color=#00ffffff>CONDUCTOR</color>" && !Plugin.audio.isPlaying && Random.Range(1, Plugin.styleChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("So much magic!");
					Plugin.Play("conductor1");
				}
				if (num == 2)
				{
					((MonoBehaviour)Plugin.me).StartCoroutine(Conduct2());
				}
				if (num == 3)
				{
					Plugin.Subtitle("I am the lord of all magic!");
					Plugin.Play("conductor3");
				}
			}
		}

		private static IEnumerator Conduct2()
		{
			Plugin.Subtitle("I!");
			Plugin.Play("conductor2");
			yield return (object)new WaitForSeconds(0.75f);
			Plugin.Subtitle("LOVE!");
			yield return (object)new WaitForSeconds(0.75f);
			Plugin.Subtitle("MAGIC!");
		}
	}
	[HarmonyPatch(typeof(HookArm), "Update")]
	public class Patch_WhiplashPull
	{
		private static bool wasPulling;

		private static float nextAllowedTime;

		private const float COOLDOWN = 5f;

		private static void Postfix(HookArm __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			bool flag = (int)__instance.state == 3;
			if (flag && !wasPulling && Time.time >= nextAllowedTime && !Plugin.audio.isPlaying && Random.Range(1, Plugin.whiplashChance.value + 1) == 1)
			{
				nextAllowedTime = Time.time + 5f;
				if (Traverse.Create((object)__instance).Field("lightTarget").GetValue<bool>())
				{
					int num = Random.Range(1, 4);
					if (num == 1)
					{
						Plugin.Subtitle("Would you kindly move ya ass to the freakin' point?");
						Plugin.Play("whiplashpull1");
					}
					if (num == 2)
					{
						Plugin.Subtitle("Get over here and help me defend!");
						Plugin.Play("whiplashpull2");
					}
					if (num == 3)
					{
						Plugin.Subtitle("How's the weather over there, dumbass? Get to the freakin' point!");
						Plugin.Play("whiplashpull3");
					}
				}
				else
				{
					int num2 = Random.Range(1, 4);
					if (num2 == 1)
					{
						Plugin.Subtitle("Yo, incoming!");
						Plugin.Play("whiplashself1");
					}
					if (num2 == 2)
					{
						Plugin.Subtitle("Incoming!");
						Plugin.Play("whiplashself2");
					}
					if (num2 == 3)
					{
						Plugin.Subtitle("Incoming!");
						Plugin.Play("whiplashself3");
					}
				}
			}
			wasPulling = flag;
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_TramStop72
	{
		private static void Postfix(ObjectActivator __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(SceneHelper.CurrentScene != "Level 7-2") && !EncounterFlags.tramStop72 && ((Object)((Component)__instance).gameObject).name == "Trigger" && ((object)((Component)__instance).transform.position/*cast due to .constrained prefix*/).ToString() == "(-218.50, 65.00, 836.50)")
			{
				EncounterFlags.tramStop72 = true;
				Plugin.Subtitle("What da hell, who stopped pushin' the cart?!");
				Plugin.Play("tramstop1");
			}
		}
	}
	[HarmonyPatch(typeof(StyleHUD), "GetLocalizedName")]
	public class Patch_StyleMultikill
	{
		private static void Prefix(string id)
		{
			if (id != null && id == "ultrakill.multikill" && !Plugin.audio.isPlaying && Random.Range(1, Plugin.styleChance.value + 1) == 1)
			{
				int num = Random.Range(1, 9);
				if (num == 1)
				{
					Plugin.Subtitle("That's what I'm talking about!");
					Plugin.Play("multikill1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("(Evil laughter)");
					Plugin.Play("multikill2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("(Happy laughter)");
					Plugin.Play("multikill3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("(Happy laughter)");
					Plugin.Play("multikill4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("(Happy laughter)");
					Plugin.Play("multikill5");
				}
				if (num == 6)
				{
					((MonoBehaviour)Plugin.me).StartCoroutine(Multikill6());
				}
				if (num == 7)
				{
					Plugin.Subtitle("(Insufferable laughter)");
					Plugin.Play("multikill7");
				}
				if (num == 8)
				{
					Plugin.Subtitle("You knuckleheads ain't even worth the effort!");
					Plugin.Play("multikill8");
				}
			}
		}

		private static IEnumerator Multikill6()
		{
			Plugin.Subtitle("(Long laughter)");
			Plugin.Play("multikill6");
			yield return (object)new WaitForSeconds(4f);
			Plugin.Subtitle("Yeah.");
			yield return (object)new WaitForSeconds(1.1f);
			Plugin.Subtitle("Yeah.");
		}
	}
	[HarmonyPatch(typeof(ObjectActivator), "Activate", new Type[] { typeof(bool) })]
	public class Patch_Heat0E
	{
		private static bool resistanceFired;

		private static void Postfix(ObjectActivator __instance)
		{
			if (SceneHelper.CurrentScene != "Level 0-E")
			{
				resistanceFired = false;
				return;
			}
			string name = ((Object)((Component)__instance).gameObject).name;
			if (name == "Hot Stuff Activator" && !EncounterFlags.heatIntro)
			{
				EncounterFlags.heatIntro = true;
				Plugin.Subtitle("Aw crap...");
				Plugin.Play("heatup1");
			}
			else if (name == "Heat Resistance")
			{
				resistanceFired = true;
			}
			else if (name == "HeatActivation" && resistanceFired && !EncounterFlags.heatSpawnEnemies)
			{
				EncounterFlags.heatSpawnEnemies = true;
				((MonoBehaviour)Plugin.me).StartCoroutine(Heatup2());
			}
		}

		private static IEnumerator Heatup2()
		{
			Plugin.Subtitle("OH MY GOD!");
			Plugin.Play("heatup2");
			yield return (object)new WaitForSeconds(0.65f);
			Plugin.Subtitle("OH MY GOD!");
			yield return (object)new WaitForSeconds(0.54f);
			Plugin.Subtitle("OH MY GOD!");
		}
	}
	[HarmonyPatch(typeof(StyleHUD), "GetLocalizedName")]
	public class Patch_StyleGuardBreak
	{
		private static void Prefix(string id)
		{
			if (id != null && id == "<color=green>GUARD BREAK</color>")
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					((MonoBehaviour)Plugin.me).StartCoroutine(GuardBreak1());
				}
				if (num == 2)
				{
					Plugin.Subtitle("I got him!");
					Plugin.Play("guardbreak2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Ooh, ya gonna die now!");
					Plugin.Play("guardbreak3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("You just got marked, muscle man!");
					Plugin.Play("guardbreak4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("I got him!");
					Plugin.Play("guardbreak5");
				}
			}
		}

		private static IEnumerator GuardBreak1()
		{
			Plugin.Subtitle("YOU!");
			Plugin.Play("guardbreak1");
			yield return (object)new WaitForSeconds(0.38f);
			Plugin.Subtitle("HAVE!");
			yield return (object)new WaitForSeconds(0.4f);
			Plugin.Subtitle("BEEN!");
			yield return (object)new WaitForSeconds(0.4f);
			Plugin.Subtitle("MARKED!");
		}
	}
	[HarmonyPatch(typeof(FleshPrison), "Start")]
	public class Patch_FleshIntro
	{
		private static void Postfix(FleshPrison __instance)
		{
			if (!__instance.altVersion)
			{
				Plugin.Subtitle("ARE YOU FREAKIN' KIDDING ME?!");
				Plugin.Play("flesh1");
			}
			else
			{
				Plugin.Subtitle("WE TOILED IN GOD'S DOMAIN!");
				Plugin.Play("flesh2");
			}
		}
	}
	[HarmonyPatch(typeof(MinosPrime), "Start")]
	public class Patch_MinosPrimeIntro
	{
		private static void Postfix(MinosPrime __instance)
		{
			if (Traverse.Create((object)__instance).Field("bossVersion").GetValue<bool>())
			{
				Plugin.Subtitle("All right, let's do this!");
				Plugin.Play("minosintro1");
			}
		}
	}
	[HarmonyPatch(typeof(SisyphusPrime), "Start")]
	public class Patch_SisyphusPrimeIntro
	{
		private static void Postfix(SisyphusPrime __instance)
		{
			if (Traverse.Create((object)__instance).Field("bossVersion").GetValue<bool>())
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(SisyIntro1());
			}
		}

		private static IEnumerator SisyIntro1()
		{
			Plugin.Subtitle("Oh my god..!");
			Plugin.Play("sisyintro1");
			yield return (object)new WaitForSeconds(0.59f);
			Plugin.Subtitle("OH MY GOD!");
			yield return (object)new WaitForSeconds(0.467f);
			Plugin.Subtitle("OH MY GOD!");
			yield return (object)new WaitForSeconds(0.412f);
			Plugin.Subtitle("IT'S SAXTON HALE!");
		}
	}
	[HarmonyPatch(typeof(MinosPrime), "OutroEnd")]
	public class Patch_MinosPrimeOutro
	{
		private static void Postfix(MinosPrime __instance)
		{
			if (Traverse.Create((object)__instance).Field("bossVersion").GetValue<bool>())
			{
				Plugin.Subtitle("Yeah, next time, try two eyes!");
				Plugin.Play("minosoutro1");
			}
		}
	}
	[HarmonyPatch(typeof(SisyphusPrime), "OutroEnd")]
	public class Patch_SisyphusPrimeOutro
	{
		private static void Postfix(SisyphusPrime __instance)
		{
			if (Traverse.Create((object)__instance).Field("bossVersion").GetValue<bool>())
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(SisyphusOutroLine());
			}
		}

		private static IEnumerator SisyphusOutroLine()
		{
			Plugin.Subtitle("Grass grows,");
			Plugin.Play("sisyoutro1");
			yield return (object)new WaitForSeconds(1.1f);
			Plugin.Subtitle("Birds fly,");
			yield return (object)new WaitForSeconds(0.8f);
			Plugin.Subtitle("Sun shines...");
			yield return (object)new WaitForSeconds(0.7f);
			Plugin.Subtitle("And brotha,");
			yield return (object)new WaitForSeconds(0.7f);
			Plugin.Subtitle("We are da freakin' best!");
		}
	}
	[HarmonyPatch(typeof(StyleHUD), "GetLocalizedName")]
	public class Patch_StyleEnraged
	{
		private static void Prefix(string id)
		{
			if (id != null && id == "ultrakill.enraged" && !Plugin.audio.isPlaying && Random.Range(1, Plugin.styleChance.value + 1) == 1)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("'Domination'. Look it up.");
					Plugin.Play("enraged1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("You're gettin' dominated, chucklehead!");
					Plugin.Play("enraged2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("Yeah, that's right!");
					Plugin.Play("enraged3");
				}
			}
		}
	}
	[HarmonyPatch(typeof(StatsManager), "GetFinalRank")]
	public class Patch_LevelComplete
	{
		private static void Postfix(StatsManager __instance)
		{
			if (!Plugin.audio.isPlaying)
			{
				int num = Random.Range(1, 6);
				if (num == 1)
				{
					Plugin.Subtitle("Hey, I was just gettin' started!");
					Plugin.Play("finish1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("Oh, we done already?");
					Plugin.Play("finish2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("We make it look easy!");
					Plugin.Play("finish3");
				}
				if (num == 4)
				{
					Plugin.Subtitle("Yeah, boom! Dat's right!");
					Plugin.Play("finish4");
				}
				if (num == 5)
				{
					Plugin.Subtitle("Dat is how you do it!");
					Plugin.Play("finish5");
				}
			}
		}
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_CancerousRodent
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 1-2") && !(__instance.bossName != "CANCEROUS RODENT"))
			{
				((MonoBehaviour)Plugin.me).StartCoroutine(Rodent1());
			}
		}

		private static IEnumerator Rodent1()
		{
			Plugin.Play("rodent1");
			yield return (object)new WaitForSeconds(1f);
			Plugin.Subtitle("...What?");
		}
	}
	[HarmonyPatch(typeof(BossHealthBar), "OnEnable")]
	public class Patch_VeryCancerousRodent
	{
		private static void Postfix(BossHealthBar __instance)
		{
			if (!(SceneHelper.CurrentScene != "Level 1-2") && !(__instance.bossName != "VERY CANCEROUS RODENT"))
			{
				Plugin.Subtitle("OH MY GOD!");
				Plugin.Play("rodent2");
			}
		}
	}
	[HarmonyPatch(typeof(DualWield), "Start")]
	public class Patch_DualWield
	{
		private static void Postfix()
		{
			if (!Plugin.audio.isPlaying)
			{
				int num = Random.Range(1, 4);
				if (num == 1)
				{
					Plugin.Subtitle("SO MUCH MAGIC!");
					Plugin.Play("dualwield1");
				}
				if (num == 2)
				{
					Plugin.Subtitle("NO! NO, IT'S TOO MUCH MAGIC!");
					Plugin.Play("dualwield2");
				}
				if (num == 3)
				{
					Plugin.Subtitle("CAN'T. STOP. DA MASGIC!");
					Plugin.Play("dualwield3");
				}
			}
		}
	}
}