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 clips = new Dictionary(); 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; 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(); ((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(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 = "" + text + ""; MonoSingleton.Instance.DisplaySubtitle(text3, (AudioSource)null, false); } else { MonoSingleton.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(); 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 alreadyBurned = new HashSet(); 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 == "CONDUCTOR" && !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()) { 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 == "GUARD BREAK") { 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()) { 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()) { ((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()) { 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()) { ((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"); } } } } }