Decompiled source of Play as V2 v2.3.5

v2Ultrakill/v2Ultrakill.dll

Decompiled 3 days 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 System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using Configgy;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Sandbox.Arm;
using TMPro;
using ULTRAKILL.Cheats;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;

[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("v2Ultrakill")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Play as V2 from ULTRAKILL in the hit game ULTRAKILL.")]
[assembly: AssemblyFileVersion("2.3.5.0")]
[assembly: AssemblyInformationalVersion("2.3.5")]
[assembly: AssemblyProduct("Play as V2")]
[assembly: AssemblyTitle("v2Ultrakill")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.3.5.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace v2Ultrakill
{
	[BepInPlugin("v2Ultrakill", "Play as V2", "2.3.5")]
	public class Plugin : BaseUnityPlugin
	{
		[HarmonyPatch(typeof(NewMovement), "Start")]
		private class SpawnHealth
		{
			private static void Postfix(NewMovement __instance)
			{
				if (((ConfigValueElement<int>)(object)spawnHealth).Value > 1000)
				{
					__instance.hp = 1000;
				}
				else if (((ConfigValueElement<int>)(object)spawnHealth).Value < 1)
				{
					__instance.hp = 1;
				}
				else
				{
					__instance.hp = ((ConfigValueElement<int>)(object)spawnHealth).Value;
				}
				spawnAllocatedHp = __instance.hp;
				revolverShotNumber = dualWieldCount * 3 - 1;
				rocketShotNumber = 0;
				bloodPouchValue = 0f;
				bloodPouchActivated = false;
			}
		}

		[HarmonyPatch(typeof(NewMovement), "Respawn")]
		private class RespawnHealth
		{
			private static void Postfix(NewMovement __instance)
			{
				if (((ConfigValueElement<int>)(object)respawnHealth).Value > 1000)
				{
					__instance.hp = 1000;
				}
				else if (((ConfigValueElement<int>)(object)respawnHealth).Value < 1)
				{
					__instance.hp = 1;
				}
				else
				{
					__instance.hp = ((ConfigValueElement<int>)(object)respawnHealth).Value;
				}
				respawnAllocatedHp = __instance.hp;
				revolverShotNumber = dualWieldCount * 3 - 1;
				rocketShotNumber = 0;
				bloodPouchValue = 0f;
				bloodPouchActivated = false;
			}
		}

		[HarmonyPatch(typeof(NewMovement), "GetHealth")]
		private class NoHealing
		{
			private static int healthPreBlood;

			private static void Prefix(NewMovement __instance)
			{
				healthPreBlood = __instance.hp;
			}

			private static void Postfix(NewMovement __instance)
			{
				if (__instance.hp != healthPreBlood)
				{
					__instance.hp = healthPreBlood;
				}
			}
		}

		[HarmonyPatch(typeof(NewMovement), "SuperCharge")]
		private class BloodOrbHealth
		{
			private static int healthPreOrb;

			private static void Prefix(NewMovement __instance)
			{
				healthPreOrb = __instance.hp;
			}

			private static void Postfix(NewMovement __instance)
			{
				if (__instance.sameCheckpointRestarts > 0)
				{
					if ((float)(healthPreOrb + 200) <= respawnAllocatedHp)
					{
						__instance.hp = healthPreOrb + 200;
					}
					else if (respawnAllocatedHp > 1000f && healthPreOrb + 200 > 1000)
					{
						__instance.hp = 1000;
					}
					else
					{
						__instance.hp = Mathf.RoundToInt(respawnAllocatedHp);
					}
				}
				else if ((float)(healthPreOrb + 200) <= spawnAllocatedHp)
				{
					__instance.hp = healthPreOrb + 200;
				}
				else if (spawnAllocatedHp > 1000f && healthPreOrb + 200 > 1000)
				{
					__instance.hp = 1000;
				}
				else
				{
					__instance.hp = Mathf.RoundToInt(spawnAllocatedHp);
				}
			}
		}

		[HarmonyPatch(typeof(NewMovement), "GetHurt")]
		private class StyleDamageReduction
		{
			private static int healthPreDamage;

			private static int playerDamage;

			private static bool shouldaDied;

			private static void Prefix(NewMovement __instance, int damage)
			{
				healthPreDamage = __instance.hp;
				int rankIndex = MonoSingleton<StyleHUD>.Instance.rankIndex;
				float num = (((ConfigValueElement<bool>)(object)generalReductionToggle).Value ? (1f - (float)((ConfigValueElement<int>)(object)generalReduction).Value / 100f) : (rankIndex switch
				{
					7 => 1f - (float)((ConfigValueElement<int>)(object)ultrakillReduction).Value / 100f, 
					6 => 1f - (float)((ConfigValueElement<int>)(object)ssshitstormReduction).Value / 100f, 
					5 => 1f - (float)((ConfigValueElement<int>)(object)ssadisticReduction).Value / 100f, 
					4 => 1f - (float)((ConfigValueElement<int>)(object)supremeReduction).Value / 100f, 
					3 => 1f - (float)((ConfigValueElement<int>)(object)anarchicReduction).Value / 100f, 
					2 => 1f - (float)((ConfigValueElement<int>)(object)brutalReduction).Value / 100f, 
					1 => 1f - (float)((ConfigValueElement<int>)(object)chaoticReduction).Value / 100f, 
					_ => 1f - (float)((ConfigValueElement<int>)(object)destructiveReduction).Value / 100f, 
				}));
				playerDamage = Mathf.RoundToInt((float)damage * num);
				if (healthPreDamage - damage <= 0 && healthPreDamage - playerDamage > 0)
				{
					shouldaDied = true;
					__instance.hp += damage + 1;
				}
				else
				{
					shouldaDied = false;
				}
			}

			private static void Postfix(NewMovement __instance)
			{
				int num = healthPreDamage - __instance.hp;
				if ((__instance.hp > 0 || shouldaDied) && num != 0)
				{
					__instance.hp = healthPreDamage - playerDamage;
				}
			}
		}

		[HarmonyPatch(typeof(HealthBar), "Start")]
		private class CreateStandardGUIHealthBars
		{
			private static void Postfix(HealthBar __instance)
			{
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("Health Slider")))
				{
					Array.Resize(ref __instance.hpSliders, 10);
					Array.Resize(ref __instance.afterImageSliders, 10);
					hpBars[0] = ((Component)((Component)__instance).transform.Find("Health Slider")).gameObject;
					hpBars[1] = ((Component)((Component)__instance).transform.Find("Supercharge Slider")).gameObject;
					afterHpBars[0] = ((Component)((Component)__instance).transform.Find("AfterHealth Slider")).gameObject;
					afterHpBars[1] = ((Component)((Component)__instance).transform.Find("SuperAfterHealth Slider")).gameObject;
					((Component)hpBars[0].transform.Find("Fill Area").Find("Fill").Find("GreenHPFlash")).gameObject.SetActive(false);
					for (int i = 2; i <= 9; i++)
					{
						hpBars[i] = Object.Instantiate<GameObject>(hpBars[1]);
						((Object)hpBars[i]).name = i * 100 + 100 + " Health Slider";
						hpBars[i].transform.SetParent(((Component)__instance).transform, false);
						hpBars[i].GetComponent<Slider>().minValue = i * 100;
						hpBars[i].GetComponent<Slider>().maxValue = i * 100 + 100;
						__instance.hpSliders[i] = hpBars[i].GetComponent<Slider>();
						afterHpBars[i] = Object.Instantiate<GameObject>(afterHpBars[1]);
						((Object)afterHpBars[i]).name = i * 100 + 100 + " AfterHealth Slider";
						afterHpBars[i].transform.SetParent(((Component)__instance).transform, false);
						afterHpBars[i].GetComponent<Slider>().minValue = i * 100;
						afterHpBars[i].GetComponent<Slider>().maxValue = i * 100 + 100;
						__instance.afterImageSliders[i] = afterHpBars[i].GetComponent<Slider>();
						afterHpBars[i].transform.SetSiblingIndex(2 * i + 1);
						hpBars[i].transform.SetSiblingIndex(2 * i + 2);
					}
				}
			}
		}

		[HarmonyPatch(typeof(HealthBar), "Update")]
		private class ClassicGUIHealth
		{
			private static void Postfix(HealthBar __instance)
			{
				//IL_0211: Unknown result type (might be due to invalid IL or missing references)
				//IL_0216: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_0277: Unknown result type (might be due to invalid IL or missing references)
				//IL_024a: Unknown result type (might be due to invalid IL or missing references)
				//IL_013b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0200: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00af: Unknown result type (might be due to invalid IL or missing references)
				if (!Object.op_Implicit((Object)(object)__instance.hpText))
				{
					return;
				}
				TextMeshProUGUI component = ((Component)__instance.hpText).GetComponent<TextMeshProUGUI>();
				if (MonoSingleton<NewMovement>.Instance.sameCheckpointRestarts > 0)
				{
					if (!__instance.antiHpText)
					{
						if (__instance.changeTextColor)
						{
							if ((float)MonoSingleton<NewMovement>.Instance.hp <= respawnAllocatedHp / 4f)
							{
								((Graphic)component).color = Color.red;
							}
							else if ((float)MonoSingleton<NewMovement>.Instance.hp <= respawnAllocatedHp / 2f && __instance.yellowColor)
							{
								((Graphic)component).color = Color.yellow;
							}
							else
							{
								((Graphic)component).color = __instance.normalTextColor;
							}
						}
						else if (__instance.normalTextColor == Color.white)
						{
							if ((float)MonoSingleton<NewMovement>.Instance.hp <= respawnAllocatedHp / 4f)
							{
								((Graphic)component).color = Color.red;
								return;
							}
							object value = Traverse.Create((object)__instance).Field("colorBlindSettings").GetValue();
							ColorBlindSettings val = (ColorBlindSettings)((value is ColorBlindSettings) ? value : null);
							((Graphic)component).color = val.GetHudColor((HudColorType)4);
						}
					}
					else
					{
						((TMP_Text)component).text = "/" + respawnAllocatedHp;
					}
				}
				else if (!__instance.antiHpText)
				{
					if (__instance.changeTextColor)
					{
						if ((float)MonoSingleton<NewMovement>.Instance.hp <= spawnAllocatedHp / 4f)
						{
							((Graphic)component).color = Color.red;
						}
						else if ((float)MonoSingleton<NewMovement>.Instance.hp <= spawnAllocatedHp / 2f && __instance.yellowColor)
						{
							((Graphic)component).color = Color.yellow;
						}
						else
						{
							((Graphic)component).color = __instance.normalTextColor;
						}
					}
					else if (__instance.normalTextColor == Color.white)
					{
						if ((float)MonoSingleton<NewMovement>.Instance.hp <= spawnAllocatedHp / 4f)
						{
							((Graphic)component).color = Color.red;
							return;
						}
						object value2 = Traverse.Create((object)__instance).Field("colorBlindSettings").GetValue();
						ColorBlindSettings val2 = (ColorBlindSettings)((value2 is ColorBlindSettings) ? value2 : null);
						((Graphic)component).color = val2.GetHudColor((HudColorType)4);
					}
				}
				else
				{
					((TMP_Text)component).text = "/" + spawnAllocatedHp;
				}
			}
		}

		[HarmonyPatch(typeof(FistControl), "TutorialCheckForArmThatCanPunch")]
		private class KBForIntro
		{
			[HarmonyPrefix]
			private static bool SkipThisCodeHaha()
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
				{
					return false;
				}
				return true;
			}

			private static void Prefix(FistControl __instance)
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value && MonoSingleton<PrefsManager>.Instance.GetInt("weapon.arm0", 1) == 0 && MonoSingleton<PrefsManager>.Instance.GetInt("weapon.arm1", 1) == 0)
				{
					MonoSingleton<PrefsManager>.Instance.SetInt("weapon.arm1", 1);
					__instance.ResetFists();
				}
			}
		}

		[HarmonyPatch(typeof(Bootstrap), "Start")]
		private class KBForIntro2
		{
			[HarmonyPrefix]
			private static bool SkipThisCodeHaha()
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
				{
					return false;
				}
				return true;
			}

			private static void Prefix()
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
				{
					Debug.Log((object)Addressables.RuntimePath);
					GameBuildSettings instance = GameBuildSettings.GetInstance();
					if (!instance.noTutorial && (!GameProgressSaver.GetTutorial() || !GameProgressSaver.GetIntro()))
					{
						GameProgressSaver.AddGear("arm1");
						MonoSingleton<PrefsManager>.Instance.SetInt("weapon.arm1", 1);
						SceneHelper.LoadScene("Tutorial", true);
					}
					else if (instance.startScene != null)
					{
						SceneHelper.LoadScene(instance.startScene, true);
					}
					else
					{
						SceneHelper.LoadScene("Intro", true);
					}
				}
			}
		}

		[HarmonyPatch(typeof(ProgressChecker), "Awake")]
		private class KBForIntro3
		{
			private static void Postfix()
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value && (!GameProgressSaver.GetTutorial() || !GameProgressSaver.GetIntro()))
				{
					GameProgressSaver.AddGear("arm1");
					MonoSingleton<PrefsManager>.Instance.SetInt("weapon.arm1", 1);
					MonoSingleton<PrefsManager>.Instance.SetInt("weapon.arm0", 0);
				}
			}
		}

		[HarmonyPatch(typeof(WeaponPickUp), "Awake")]
		private class FBForClairDeLune
		{
			private static void Prefix(WeaponPickUp __instance)
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value && __instance.pPref == "arm1")
				{
					__instance.pPref = "arm0";
					__instance.inventorySlot = 0;
				}
			}
		}

		[HarmonyPatch(typeof(FistControl), "ForceArm")]
		private class FBForClairDeLune2
		{
			private static void Postfix(FistControl __instance, int varNum, bool animation)
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value && varNum == 0 && animation)
				{
					List<GameObject> list = Traverse.Create((object)__instance).Field("spawnedArms").GetValue() as List<GameObject>;
					int value = Traverse.Create((object)__instance).Field("currentOrderNum").GetValue<int>();
					Punch punch = default(Punch);
					if (list[value].TryGetComponent<Punch>(ref punch))
					{
						((MonoBehaviour)__instance).StartCoroutine((IEnumerator)FeedbackerPunches(punch));
					}
				}
			}
		}

		[HarmonyPatch(typeof(ObjectActivator), "Start")]
		private class FBForClairDeLune3
		{
			private static void Prefix(ObjectActivator __instance)
			{
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Unknown result type (might be due to invalid IL or missing references)
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value && ((Object)((Component)__instance).transform).name == "V2 Deactivator")
				{
					SkinnedMeshRenderer component = ((Component)((Component)__instance).transform.parent.Find("RedArmPickup").Find("redarmlp").Find("arm_lp")).GetComponent<SkinnedMeshRenderer>();
					if (Object.op_Implicit((Object)(object)component))
					{
						component.rootBone = null;
						component.sharedMesh = funnyAssets.LoadAsset<Mesh>("Feedbacker");
						((Renderer)component).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("T_Feedbacker");
						((Component)component).transform.localScale = new Vector3(4f, 4f, 4f);
						((Component)component).transform.localRotation = Quaternion.Euler(55f, 180f, 180f);
					}
				}
			}
		}

		[HarmonyPatch(typeof(Machine), "GetHurt")]
		private class FBEnrageClairDeSoleil
		{
			private static void Prefix(Machine __instance)
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
				{
					object value = Traverse.Create((object)__instance).Field("v2").GetValue();
					V2 val = (V2)((value is V2) ? value : null);
					object value2 = Traverse.Create((object)__instance).Field("eid").GetValue();
					EnemyIdentifier val2 = (EnemyIdentifier)((value2 is EnemyIdentifier) ? value2 : null);
					if (Object.op_Implicit((Object)(object)val) && val.secondEncounter && val2.hitter == "heavypunch")
					{
						kbPunchCheck = true;
					}
					else
					{
						kbPunchCheck = false;
					}
					if (Object.op_Implicit((Object)(object)val) && val.secondEncounter && val2.hitter == "punch")
					{
						kbPunchCheck = false;
						val.InstaEnrage();
					}
				}
			}
		}

		[HarmonyPatch(typeof(V2), "InstaEnrage")]
		private class FBEnrageClairDeSoleil2
		{
			[HarmonyPrefix]
			private static bool SkipThisCodeHaha()
			{
				if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
				{
					if (kbPunchCheck)
					{
						return false;
					}
					return true;
				}
				return true;
			}
		}

		[HarmonyPatch(typeof(Revolver), "Update")]
		private class V1ArmRevolver
		{
			private static void Postfix(Revolver __instance)
			{
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("Revolver_Rerigged_Alternate")))
				{
					revolverArmRenderer = ((Component)((Component)__instance).transform.Find("Revolver_Rerigged_Alternate").Find("RightArm")).GetComponent<SkinnedMeshRenderer>();
				}
				else if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("Revolver_Rerigged_Standard")))
				{
					revolverArmRenderer = ((Component)((Component)__instance).transform.Find("Revolver_Rerigged_Standard").Find("RightArm")).GetComponent<SkinnedMeshRenderer>();
				}
				else
				{
					revolverArmRenderer = null;
				}
			}
		}

		[HarmonyPatch(typeof(SandboxArm), "Update")]
		private class V1ArmSpawner
		{
			private static void Postfix(SandboxArm __instance)
			{
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("MainArm")))
				{
					spawnerArmRenderer = ((Component)((Component)__instance).transform.Find("MainArm")).GetComponent<SkinnedMeshRenderer>();
				}
				else
				{
					spawnerArmRenderer = null;
				}
			}
		}

		[HarmonyPatch(typeof(PlatformerMovement), "Update")]
		private class V1ClashMode
		{
			private static void Postfix(PlatformerMovement __instance)
			{
				if (!clashDancer)
				{
					clashModeRenderer = ((Component)((Component)__instance).transform.Find("v1_combined").Find("v1_mdl")).GetComponent<SkinnedMeshRenderer>();
				}
			}
		}

		[HarmonyPatch(typeof(ClashModePickup), "Activate")]
		private class V1ClashModeDanceStart
		{
			private static void Postfix(ClashModePickup __instance)
			{
				clashDancer = true;
				object value = Traverse.Create((object)__instance).Field("dancer").GetValue();
				GameObject val = (GameObject)((value is GameObject) ? value : null);
				clashModeRenderer = ((Component)val.transform.Find("v1_combined").Find("v1_mdl")).GetComponent<SkinnedMeshRenderer>();
			}
		}

		[HarmonyPatch(typeof(PlatformerDancer), "DanceEnd")]
		private class V1ClashModeDanceEnd
		{
			private static void Postfix()
			{
				clashDancer = false;
			}
		}

		[HarmonyPatch(typeof(V2), "Awake")]
		private class V2BossFights
		{
			private static void Prefix(V2 __instance)
			{
				//IL_0154: Unknown result type (might be due to invalid IL or missing references)
				v2 = __instance;
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("v2_GreenArm")))
				{
					v2Renderer = ((Component)((Component)__instance).transform.Find("v2_GreenArm").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
					enemySimplifier = ((Component)((Component)__instance).transform.Find("v2_GreenArm").Find("v2_mdl")).GetComponent<EnemySimplifier>();
				}
				else if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("v2_combined")))
				{
					v2Renderer = ((Component)((Component)__instance).transform.Find("v2_combined").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
					enemySimplifier = ((Component)((Component)__instance).transform.Find("v2_combined").Find("v2_mdl")).GetComponent<EnemySimplifier>();
					opportunisticMaterial = ((Renderer)v2Renderer).materials[2];
					opportunisticMaterial2 = enemySimplifier.simplifiedMaterial3;
					if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
					{
						GenerateFeedbacker(v2Renderer, enemySimplifier);
					}
					else
					{
						enemySimplifier.simplifiedMaterial3.mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_armtex");
						enemySimplifier.simplifiedMaterial3.color = new Color(1.3f, 0.6f, 0.6f, 1f);
					}
				}
				else
				{
					v2Renderer = null;
					enemySimplifier = null;
				}
				if (((ConfigValueElement<bool>)(object)v2Textures).Value && ((Object)((Component)__instance).transform).name != "V3")
				{
					__instance.wingTextures[0] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex_new");
					__instance.wingTextures[1] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex 1_new");
					__instance.wingTextures[2] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex 2_new");
					__instance.wingTextures[3] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex 3_new");
				}
			}

			private static void Postfix(V2 __instance)
			{
				if (((ConfigValueElement<bool>)(object)v2Textures).Value && ((Object)((Component)__instance).transform).name != "V3")
				{
					((Renderer)v2Renderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex");
					enemySimplifier.enragedMaterial = ((Renderer)v2Renderer).materials[0];
					object value = Traverse.Create((object)__instance).Field("bhb").GetValue();
					BossHealthBar val = (BossHealthBar)((value is BossHealthBar) ? value : null);
					if (Object.op_Implicit((Object)(object)val) && val.bossName == "V2")
					{
						val.bossName = "V1";
					}
				}
			}
		}

		[HarmonyPatch(typeof(V2), "Enrage")]
		private class V2Enrage
		{
			private static void Postfix()
			{
				//IL_0030: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				if (((ConfigValueElement<bool>)(object)v2Textures).Value)
				{
					((Renderer)v2Renderer).materials[0].color = new Color(2f, 0f, 0f, 1f);
					((Renderer)v2Renderer).materials[1].color = new Color(2f, 0f, 0f, 1f);
				}
				if (Object.op_Implicit((Object)(object)feedbacker))
				{
					((Renderer)feedbacker.GetComponent<SkinnedMeshRenderer>()).materials[0].color = new Color(2f, 0f, 0f, 1f);
				}
			}
		}

		[HarmonyPatch(typeof(V2), "UnEnrage")]
		private class V2UnEnrage
		{
			private static void Postfix()
			{
				//IL_0030: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				if (((ConfigValueElement<bool>)(object)v2Textures).Value)
				{
					((Renderer)v2Renderer).materials[0].color = new Color(1f, 1f, 1f, 1f);
					((Renderer)v2Renderer).materials[1].color = new Color(1f, 1f, 1f, 1f);
				}
				if (Object.op_Implicit((Object)(object)feedbacker))
				{
					((Renderer)feedbacker.GetComponent<SkinnedMeshRenderer>()).materials[0].color = new Color(1f, 1f, 1f, 1f);
				}
			}
		}

		[HarmonyPatch(typeof(V2), "SwitchPattern")]
		private class V2GetPattern
		{
			private static void Postfix(int pattern)
			{
				v2Pattern = pattern;
			}
		}

		[HarmonyPatch(typeof(ObjectActivator), "Start")]
		private class V2Cutscenes
		{
			private static void Postfix(ObjectActivator __instance)
			{
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform.parent) && ((Object)((Component)__instance).transform.parent).name == "V2 Event")
				{
					v2Renderer = ((Component)((Component)__instance).transform.parent.Find("Fake V2").Find("v2_combined").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
				}
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform) && ((Object)((Component)__instance).transform).name == "7 Stuff(Clone)")
				{
					v2Renderer = ((Component)((Component)__instance).transform.Find("BossIntro").Find("v2_GreenArm").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
					if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("v2_GreenArm").Find("v2_mdl")))
					{
						v2Renderer2 = ((Component)((Component)__instance).transform.Find("v2_GreenArm").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
					}
				}
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform) && ((Object)((Component)__instance).transform).name == "7 Stuff(Clone)(Clone)")
				{
					v2Renderer = ((Component)((Component)__instance).transform.Find("v2_GreenArm").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
				}
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform) && ((Object)((Component)__instance).transform).name == "8 - Outro")
				{
					if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("8 Stuff(Clone)(Clone)")))
					{
						v2Renderer = ((Component)((Component)__instance).transform.Find("8 Stuff(Clone)(Clone)").Find("v2_GreenArm").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
					}
					else if (Object.op_Implicit((Object)(object)((Component)__instance).transform.Find("8 Stuff")))
					{
						v2Renderer = ((Component)((Component)__instance).transform.Find("8 Stuff").Find("v2_GreenArm").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
					}
				}
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform) && ((Object)((Component)__instance).transform).name == "The Water Ups")
				{
					GameObject gameObject = ((Component)((Component)__instance).transform.Find("v2Martini")).gameObject;
					((Object)gameObject).name = "V1Martini";
					((Object)((Component)gameObject.transform.Find("V2_Remains")).gameObject).name = "V1_Remains";
					((Object)((Component)__instance).transform.Find("V2 break")).name = "V1 break";
				}
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform) && ((Object)((Component)__instance).transform).name == "v2 fucking off")
				{
					v2Renderer = ((Component)((Component)__instance).transform.Find("V2 Preview Variant").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
				}
				if (Object.op_Implicit((Object)(object)((Component)__instance).transform) && ((Object)((Component)__instance).transform).name == "trigger")
				{
					v2Renderer = ((Component)((Component)__instance).transform.parent.parent.Find("V2 Intro").Find("v2_mdl")).GetComponent<SkinnedMeshRenderer>();
				}
			}
		}

		[HarmonyPatch(typeof(Revolver), "Update")]
		private class V2sRevolver
		{
			private static void Postfix(Revolver __instance)
			{
				if (Time.timeScale == 0f || !((ConfigValueElement<bool>)(object)v2Revolver).Value)
				{
					return;
				}
				altVersion = __instance.altVersion;
				if (altVersion)
				{
					return;
				}
				__instance.shootCharge = shootCharge;
				if (revolverShotNumber < dualWieldCount * 3 - 1)
				{
					if (__instance.shootCharge + 575f * Time.deltaTime >= 100f)
					{
						__instance.shootCharge = 100f;
						Traverse.Create((object)__instance).Field("gunReady").SetValue((object)true);
					}
				}
				else if (__instance.shootCharge + 75f * Time.deltaTime >= 100f)
				{
					__instance.shootCharge = 100f;
					Traverse.Create((object)__instance).Field("gunReady").SetValue((object)true);
				}
			}
		}

		[HarmonyPatch(typeof(Revolver), "Shoot")]
		private class V2sRevolver2
		{
			private static void Prefix(Revolver __instance, int shotType)
			{
				if (!((ConfigValueElement<bool>)(object)v2Revolver).Value)
				{
					return;
				}
				if (shotType == 1)
				{
					shotTypeCheck = true;
				}
				else
				{
					shotTypeCheck = false;
				}
				revolverTimer = 0f;
				if (altVersion)
				{
					return;
				}
				shootCharge = 0f;
				if (revolverShotNumber < dualWieldCount * 3 - 1)
				{
					if (shotTypeCheck)
					{
						revolverShotNumber++;
					}
				}
				else if (shotTypeCheck)
				{
					revolverShotNumber = 0;
				}
				if (revolverShotNumber == dualWieldCount * 3 - 1 && __instance.gunVariation == 0 && __instance.pierceCharge >= 50f)
				{
					Traverse.Create((object)__instance).Field("pierceReady").SetValue((object)false);
					__instance.pierceCharge = 50f;
				}
			}
		}

		[HarmonyPatch(typeof(RocketLauncher), "Shoot")]
		private class JohninatorRocket
		{
			private static void Prefix(RocketLauncher __instance)
			{
				if (((ConfigValueElement<bool>)(object)johninatorRocket).Value)
				{
					rocketTimer = 1f;
					if (rocketShotNumber < 2)
					{
						rocketShotNumber++;
						__instance.rateOfFire = 0.2f;
					}
					else
					{
						rocketShotNumber = 0;
						__instance.rateOfFire = 3.5f;
						rocketOverheated = true;
					}
				}
			}
		}

		[HarmonyPatch(typeof(RocketLauncher), "Update")]
		private class JohninatorRocket2
		{
			private static void Prefix(RocketLauncher __instance)
			{
				if (Time.timeScale != 0f)
				{
					if (!Object.op_Implicit((Object)(object)overheatGameObject))
					{
						InstantiateSmoke(__instance);
					}
					if (((ConfigValueElement<bool>)(object)johninatorRocket).Value)
					{
						if (rocketTimer == 0f && rocketShotNumber > 0)
						{
							Traverse.Create((object)__instance).Field("cooldown").SetValue((object)0);
							rocketShotNumber = 0;
						}
						if (rocketOverheated && !overheatAud.isPlaying)
						{
							overheatAud.Play();
							overheatParticle.Play();
						}
					}
					else
					{
						__instance.rateOfFire = 1f;
					}
					if (rocketOverheated && Traverse.Create((object)__instance).Field("cooldown").GetValue<float>() == 0f)
					{
						rocketOverheated = false;
						overheatParticle.Stop();
						if (overheatAud.isPlaying)
						{
							overheatAud.Stop();
						}
					}
				}
				else
				{
					overheatAud.Pause();
				}
			}
		}

		[HarmonyPatch(typeof(RocketLauncher), "OnEnable")]
		private class JohninatorRocket3
		{
			private static void Postfix(RocketLauncher __instance)
			{
				if (!Object.op_Implicit((Object)(object)overheatGameObject))
				{
					InstantiateSmoke(__instance);
				}
				if (Traverse.Create((object)__instance).Field("cooldown").GetValue<float>() == 0.25f || !((ConfigValueElement<bool>)(object)johninatorRocket).Value)
				{
					rocketOverheated = false;
					overheatParticle.Stop();
					if (overheatAud.isPlaying)
					{
						overheatAud.Stop();
					}
				}
				if (((ConfigValueElement<bool>)(object)johninatorRocket).Value && !rocketOverheated)
				{
					__instance.rateOfFire = 0.2f;
				}
				else
				{
					__instance.rateOfFire = 1f;
				}
			}
		}

		[HarmonyPatch(typeof(RocketLauncher), "OnDisable")]
		private class JohninatorRocket4
		{
			private static void Postfix()
			{
				if (Object.op_Implicit((Object)(object)overheatGameObject))
				{
					Object.Destroy((Object)(object)overheatGameObject);
					overheatGameObject = null;
					overheatAud = null;
					overheatParticle = null;
				}
			}
		}

		[HarmonyPatch(typeof(RocketLauncher), "ShootCannonball")]
		private class JohninatorRocket5
		{
			private static void Prefix(RocketLauncher __instance)
			{
				if (((ConfigValueElement<bool>)(object)johninatorRocket).Value && (!rocketOverheated || (rocketOverheated && Traverse.Create((object)__instance).Field("cooldown").GetValue<float>() <= 1f)))
				{
					__instance.rateOfFire = 1f;
				}
			}
		}

		[HarmonyPatch(typeof(NewMovement), "GetHealth")]
		private class BloodPouch
		{
			private static void Prefix(int health)
			{
				if (!((ConfigValueElement<bool>)(object)bloodPouch).Value)
				{
					return;
				}
				switch (health)
				{
				default:
					if (health != 999)
					{
						if (bloodPouchValue + (float)health * 0.015f <= 100f)
						{
							bloodPouchValue += (float)health * 0.015f;
						}
						else
						{
							bloodPouchValue = 100f;
						}
						return;
					}
					break;
				case 100:
					break;
				case 0:
					return;
				}
				if (health == 999)
				{
					if (bloodPouchValue + 3f <= 100f)
					{
						bloodPouchValue += 3f;
					}
					else
					{
						bloodPouchValue = 100f;
					}
				}
			}
		}

		[HarmonyPatch(typeof(HudController), "Awake")]
		private class BloodPouch2
		{
			private static void Prefix(HudController __instance)
			{
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Expected O, but got Unknown
				//IL_007f: Unknown result type (might be due to invalid IL or missing references)
				//IL_024e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0263: Unknown result type (might be due to invalid IL or missing references)
				//IL_0270: Unknown result type (might be due to invalid IL or missing references)
				//IL_0284: Unknown result type (might be due to invalid IL or missing references)
				//IL_0207: Unknown result type (might be due to invalid IL or missing references)
				//IL_021c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0229: Unknown result type (might be due to invalid IL or missing references)
				//IL_023d: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_015b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0170: Unknown result type (might be due to invalid IL or missing references)
				//IL_017d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0191: Unknown result type (might be due to invalid IL or missing references)
				//IL_0adb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0ae5: Expected O, but got Unknown
				//IL_0b41: Unknown result type (might be due to invalid IL or missing references)
				//IL_0b5d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0b74: Unknown result type (might be due to invalid IL or missing references)
				//IL_0b8b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0ba2: Unknown result type (might be due to invalid IL or missing references)
				//IL_0bb9: Unknown result type (might be due to invalid IL or missing references)
				//IL_0bd0: Unknown result type (might be due to invalid IL or missing references)
				//IL_0c34: Unknown result type (might be due to invalid IL or missing references)
				//IL_0c5c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0c63: Expected O, but got Unknown
				//IL_0caa: Unknown result type (might be due to invalid IL or missing references)
				//IL_0cc6: Unknown result type (might be due to invalid IL or missing references)
				//IL_0cdd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0cf4: Unknown result type (might be due to invalid IL or missing references)
				//IL_0d0b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0d22: Unknown result type (might be due to invalid IL or missing references)
				//IL_0d3e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0e09: Unknown result type (might be due to invalid IL or missing references)
				//IL_0e13: Expected O, but got Unknown
				//IL_0e69: Unknown result type (might be due to invalid IL or missing references)
				//IL_0e85: Unknown result type (might be due to invalid IL or missing references)
				//IL_0e9c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0eb3: Unknown result type (might be due to invalid IL or missing references)
				//IL_0eca: Unknown result type (might be due to invalid IL or missing references)
				//IL_0ee6: Unknown result type (might be due to invalid IL or missing references)
				//IL_029c: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02de: Unknown result type (might be due to invalid IL or missing references)
				//IL_0342: Unknown result type (might be due to invalid IL or missing references)
				//IL_0380: Unknown result type (might be due to invalid IL or missing references)
				//IL_0395: Unknown result type (might be due to invalid IL or missing references)
				//IL_039c: Expected O, but got Unknown
				//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_0401: Unknown result type (might be due to invalid IL or missing references)
				//IL_0411: Unknown result type (might be due to invalid IL or missing references)
				//IL_0418: Expected O, but got Unknown
				//IL_045d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0479: Unknown result type (might be due to invalid IL or missing references)
				//IL_0490: Unknown result type (might be due to invalid IL or missing references)
				//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_04be: Unknown result type (might be due to invalid IL or missing references)
				//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
				//IL_053a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0562: Unknown result type (might be due to invalid IL or missing references)
				//IL_0569: Expected O, but got Unknown
				//IL_059d: Unknown result type (might be due to invalid IL or missing references)
				//IL_05b9: Unknown result type (might be due to invalid IL or missing references)
				//IL_05d0: Unknown result type (might be due to invalid IL or missing references)
				//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_05fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_060e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0618: Expected O, but got Unknown
				//IL_0661: Unknown result type (might be due to invalid IL or missing references)
				//IL_067d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0694: Unknown result type (might be due to invalid IL or missing references)
				//IL_06ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_06c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_06e5: Unknown result type (might be due to invalid IL or missing references)
				//IL_06ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_06fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0708: Unknown result type (might be due to invalid IL or missing references)
				//IL_070f: Expected O, but got Unknown
				//IL_0746: Unknown result type (might be due to invalid IL or missing references)
				//IL_0762: Unknown result type (might be due to invalid IL or missing references)
				//IL_0779: Unknown result type (might be due to invalid IL or missing references)
				//IL_0790: Unknown result type (might be due to invalid IL or missing references)
				//IL_07a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_07b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_07be: Expected O, but got Unknown
				//IL_0803: Unknown result type (might be due to invalid IL or missing references)
				//IL_081a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0831: Unknown result type (might be due to invalid IL or missing references)
				//IL_0887: Unknown result type (might be due to invalid IL or missing references)
				//IL_08cd: Unknown result type (might be due to invalid IL or missing references)
				//IL_08d7: Expected O, but got Unknown
				//IL_0937: Unknown result type (might be due to invalid IL or missing references)
				//IL_0953: Unknown result type (might be due to invalid IL or missing references)
				//IL_096a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0981: Unknown result type (might be due to invalid IL or missing references)
				//IL_0998: Unknown result type (might be due to invalid IL or missing references)
				//IL_09af: Unknown result type (might be due to invalid IL or missing references)
				//IL_0a6b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0fbf: Unknown result type (might be due to invalid IL or missing references)
				//IL_0fc9: Expected O, but got Unknown
				//IL_1025: Unknown result type (might be due to invalid IL or missing references)
				//IL_1041: Unknown result type (might be due to invalid IL or missing references)
				//IL_1058: Unknown result type (might be due to invalid IL or missing references)
				//IL_106f: Unknown result type (might be due to invalid IL or missing references)
				//IL_1086: Unknown result type (might be due to invalid IL or missing references)
				//IL_109d: Unknown result type (might be due to invalid IL or missing references)
				//IL_10b4: Unknown result type (might be due to invalid IL or missing references)
				//IL_1118: Unknown result type (might be due to invalid IL or missing references)
				//IL_1140: Unknown result type (might be due to invalid IL or missing references)
				//IL_1147: Expected O, but got Unknown
				//IL_118e: Unknown result type (might be due to invalid IL or missing references)
				//IL_11aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_11c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_11d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_11ef: Unknown result type (might be due to invalid IL or missing references)
				//IL_1206: Unknown result type (might be due to invalid IL or missing references)
				//IL_1222: Unknown result type (might be due to invalid IL or missing references)
				//IL_12ed: Unknown result type (might be due to invalid IL or missing references)
				//IL_12f7: Expected O, but got Unknown
				//IL_134d: Unknown result type (might be due to invalid IL or missing references)
				//IL_1369: Unknown result type (might be due to invalid IL or missing references)
				//IL_1380: Unknown result type (might be due to invalid IL or missing references)
				//IL_1397: Unknown result type (might be due to invalid IL or missing references)
				//IL_13ae: Unknown result type (might be due to invalid IL or missing references)
				//IL_13ca: Unknown result type (might be due to invalid IL or missing references)
				if (!Object.op_Implicit((Object)(object)__instance))
				{
					return;
				}
				if (!Object.op_Implicit((Object)(object)bloodPouchPanel) && ((Object)__instance).name == "HUD")
				{
					bloodPouchPanel = new GameObject("BloodPouchPanel");
					bloodPouchPanel.transform.SetParent(((Component)__instance).transform.Find("GunCanvas"), false);
					bloodPouchPanel.transform.localScale = new Vector3(4f, 4f, 4f);
					bloodPouchPanel.layer = 13;
					GameObject[] array = Traverse.Create((object)MonoSingleton<PlayerActivatorRelay>.Instance).Field("toActivate").GetValue() as GameObject[];
					Array.Resize(ref array, 9);
					array[8] = bloodPouchPanel;
					Traverse.Create((object)MonoSingleton<PlayerActivatorRelay>.Instance).Field("toActivate").SetValue((object)array);
					RectTransform val = bloodPouchPanel.AddComponent<RectTransform>();
					bloodPouchPanel.AddComponent<CanvasRenderer>();
					Image val2 = bloodPouchPanel.AddComponent<Image>();
					HudOpenEffect val3 = bloodPouchPanel.AddComponent<HudOpenEffect>();
					bloodPouchPanel.GetComponent<CanvasRenderer>().cullTransparentMesh = false;
					if (!MonoSingleton<PrefsManager>.Instance.GetBool("weaponIcons", false))
					{
						if (MonoSingleton<PrefsManager>.Instance.GetInt("speedometer", 0) == 0)
						{
							val.anchoredPosition = new Vector2(val.anchoredPosition.x - 79f, 187f);
							val.anchoredPosition3D = new Vector3(val.anchoredPosition.x, 187f, 45f);
						}
						else
						{
							val.anchoredPosition = new Vector2(val.anchoredPosition.x - 79f, 293f);
							val.anchoredPosition3D = new Vector3(val.anchoredPosition.x, 293f, 45f);
						}
					}
					else if (MonoSingleton<PrefsManager>.Instance.GetInt("speedometer", 0) == 0)
					{
						val.anchoredPosition = new Vector2(val.anchoredPosition.x - 79f, 590f);
						val.anchoredPosition3D = new Vector3(val.anchoredPosition.x, 590f, 45f);
					}
					else
					{
						val.anchoredPosition = new Vector2(val.anchoredPosition.x - 79f, 693f);
						val.anchoredPosition3D = new Vector3(val.anchoredPosition.x, 693f, 45f);
					}
					val.anchorMax = new Vector2(0f, 0f);
					val.anchorMin = new Vector2(0f, 0f);
					val.pivot = new Vector2(0f, 0f);
					val.sizeDelta = new Vector2(200f, 30f);
					Image component = ((Component)((Component)__instance).transform.Find("GunCanvas").Find("StatsPanel")).GetComponent<Image>();
					val2.sprite = component.sprite;
					val2.overrideSprite = component.overrideSprite;
					val2.pixelsPerUnitMultiplier = 5.4f;
					val2.type = (Type)1;
					((Graphic)val2).color = ((Graphic)component).color;
					((Graphic)val2).material = ((Graphic)component).material;
					((Graphic)val2).raycastTarget = false;
					Traverse.Create((object)val3).Field("originalDimensions").SetValue((object)new Vector2(4f, 4f));
					GameObject val4 = new GameObject("Filler");
					val4.transform.SetParent(bloodPouchPanel.transform, false);
					val4.layer = 13;
					RectTransform val5 = val4.AddComponent<RectTransform>();
					val5.anchorMax = new Vector2(1f, 1f);
					val5.anchorMin = new Vector2(0f, 0f);
					val5.sizeDelta = new Vector2(-10f, -10f);
					GameObject val6 = new GameObject("Panel");
					val6.transform.SetParent(val4.transform, false);
					val6.layer = 13;
					RectTransform val7 = val6.AddComponent<RectTransform>();
					val6.AddComponent<CanvasRenderer>();
					Image val8 = val6.AddComponent<Image>();
					val7.anchoredPosition = new Vector2(0f, -1f);
					val7.anchoredPosition3D = new Vector3(0f, -1f, 0f);
					val7.anchorMax = new Vector2(1f, 0f);
					val7.anchorMin = new Vector2(0f, 0f);
					val7.pivot = new Vector2(0.5f, 0f);
					val7.sizeDelta = new Vector2(0f, 22f);
					val8.sprite = funnyAssets.LoadAsset<Sprite>("Round_FillSmall");
					val8.overrideSprite = funnyAssets.LoadAsset<Sprite>("Round_FillSmall");
					val8.pixelsPerUnitMultiplier = 5.4f;
					val8.type = (Type)1;
					((Graphic)val8).color = new Color(0f, 0f, 0f, 0.502f);
					((Graphic)val8).material = ((Graphic)val2).material;
					((Graphic)val8).raycastTarget = false;
					GameObject val9 = new GameObject("Filler");
					val9.transform.SetParent(val6.transform, false);
					val9.layer = 13;
					RectTransform val10 = val9.AddComponent<RectTransform>();
					val10.anchoredPosition = new Vector2(-0.0001f, 0f);
					val10.anchoredPosition3D = new Vector3(-0.0001f, 0f, 0.0001f);
					val10.anchorMax = new Vector2(1f, 0.5f);
					val10.anchorMin = new Vector2(0f, 0.5f);
					val10.sizeDelta = new Vector2(0f, 100f);
					bloodPouchSlider = new GameObject("Blood Pouch Slider");
					bloodPouchSlider.transform.SetParent(val9.transform, false);
					bloodPouchSlider.layer = 13;
					RectTransform val11 = bloodPouchSlider.AddComponent<RectTransform>();
					Slider val12 = bloodPouchSlider.AddComponent<Slider>();
					val11.anchoredPosition = new Vector2(0f, 0f);
					val11.anchoredPosition3D = new Vector3(0f, 0f, 0f);
					val11.anchorMax = new Vector2(1f, 0.5f);
					val11.anchorMin = new Vector2(0f, 0.5f);
					val11.sizeDelta = new Vector2(0f, 22f);
					val12.maxValue = 100f;
					((Selectable)val12).interactable = false;
					ColorBlock colors = ((Selectable)val12).colors;
					((ColorBlock)(ref colors)).colorMultiplier = 2f;
					((Selectable)val12).colors = colors;
					GameObject val13 = new GameObject("Fill Area");
					val13.transform.SetParent(bloodPouchSlider.transform, false);
					val13.layer = 13;
					RectTransform val14 = val13.AddComponent<RectTransform>();
					val14.anchoredPosition = new Vector2(0f, 0f);
					val14.anchoredPosition3D = new Vector3(0f, 0f, 0f);
					val14.anchorMax = new Vector2(1f, 0.75f);
					val14.anchorMin = new Vector2(0f, 0.25f);
					val14.sizeDelta = new Vector2(0f, 10f);
					GameObject val15 = new GameObject("Fill");
					val15.transform.SetParent(val13.transform, false);
					val15.layer = 13;
					RectTransform val16 = val15.AddComponent<RectTransform>();
					val15.AddComponent<CanvasRenderer>();
					Image val17 = val15.AddComponent<Image>();
					val16.anchorMax = new Vector2(1f, 1f);
					val16.anchorMin = new Vector2(0f, 0f);
					val16.sizeDelta = new Vector2(0f, 0f);
					val17.sprite = funnyAssets.LoadAsset<Sprite>("Round_FillSmall");
					val17.overrideSprite = funnyAssets.LoadAsset<Sprite>("Round_FillSmall");
					val17.pixelsPerUnitMultiplier = 5.4f;
					val17.type = (Type)1;
					((Graphic)val17).color = ((ConfigValueElement<Color>)(object)bloodPouchColor).Value;
					((Graphic)val17).material = ((Graphic)val2).material;
					((Graphic)val17).raycastTarget = false;
					val12.fillRect = val16;
					((Selectable)val12).image = val17;
					((Selectable)val12).targetGraphic = (Graphic)(object)val17;
					sliderText = new GameObject("Slider Text");
					sliderText.transform.SetParent(val9.transform, false);
					sliderText.layer = 13;
					RectTransform val18 = sliderText.AddComponent<RectTransform>();
					sliderText.AddComponent<CanvasRenderer>();
					ColorBlindGet val19 = sliderText.AddComponent<ColorBlindGet>();
					TextMeshProUGUI val20 = sliderText.AddComponent<TextMeshProUGUI>();
					val18.anchoredPosition = new Vector2(15.0002f, 0f);
					val18.anchoredPosition3D = new Vector3(15.0002f, 0f, 0.0004f);
					val18.anchorMax = new Vector2(0f, 0.5f);
					val18.anchorMin = new Vector2(0f, 0.5f);
					val18.pivot = new Vector2(0f, 0.5f);
					val18.sizeDelta = new Vector2(154.5f, 15f);
					TextMeshProUGUI component2 = ((Component)((Component)__instance).transform.Find("GunCanvas").Find("SpeedometerPanel").Find("Text (TMP)")).GetComponent<TextMeshProUGUI>();
					((TMP_Text)val20).alignment = (TextAlignmentOptions)4097;
					((TMP_Text)val20).characterSpacing = -10f;
					((TMP_Text)val20).enableAutoSizing = true;
					((TMP_Text)val20).font = ((TMP_Text)component2).font;
					((TMP_Text)val20).fontSizeMax = 200f;
					((TMP_Text)val20).fontSizeMin = 5f;
					((TMP_Text)val20).fontStyle = (FontStyles)1;
					((TMP_Text)val20).text = Mathf.RoundToInt(bloodPouchValue) + "%";
					((Graphic)val20).raycastTarget = false;
					val19.hct = (HudColorType)4;
					Array.Resize(ref __instance.hudBackgrounds, 13);
					__instance.hudBackgrounds[12] = val2;
					Array.Resize(ref __instance.textElements, 4);
					__instance.textElements[3] = (TMP_Text)(object)val20;
					bloodPouchPanel.SetActive(false);
				}
				if (!Object.op_Implicit((Object)(object)bloodPouchPanel2) && ((Object)__instance).name == "AltHud")
				{
					bloodPouchPanel2 = new GameObject("BloodPouch");
					bloodPouchPanel2.transform.SetParent(((Component)__instance).transform.Find("Filler"), false);
					bloodPouchPanel2.layer = 5;
					RectTransform val21 = bloodPouchPanel2.AddComponent<RectTransform>();
					bloodPouchPanel2.AddComponent<CanvasRenderer>();
					Image val22 = bloodPouchPanel2.AddComponent<Image>();
					val21.anchoredPosition = new Vector2(-360f, 0f);
					val21.anchoredPosition3D = new Vector3(-360f, 0f, 0f);
					val21.anchorMax = new Vector2(0.5f, 0f);
					val21.anchorMin = new Vector2(0.5f, 0f);
					val21.pivot = new Vector2(0.5f, 0f);
					val21.sizeDelta = new Vector2(80f, 80f);
					((Transform)val21).localPosition = new Vector3(360f, -360f);
					Image component3 = ((Component)((Component)__instance).transform.Find("Filler").Find("Speedometer")).GetComponent<Image>();
					val22.sprite = component3.sprite;
					val22.overrideSprite = component3.overrideSprite;
					val22.pixelsPerUnitMultiplier = 5.4f;
					val22.type = (Type)1;
					((Graphic)val22).color = ((Graphic)component3).color;
					((Graphic)val22).material = ((Graphic)component3).material;
					((Graphic)val22).raycastTarget = false;
					GameObject val23 = new GameObject("Title");
					val23.transform.SetParent(bloodPouchPanel2.transform, false);
					val23.layer = 5;
					RectTransform val24 = val23.AddComponent<RectTransform>();
					val23.AddComponent<CanvasRenderer>();
					TextMeshProUGUI val25 = val23.AddComponent<TextMeshProUGUI>();
					val24.anchoredPosition = new Vector2(0f, -2.8571f);
					val24.anchoredPosition3D = new Vector3(0f, -2.8571f, 0f);
					val24.anchorMax = new Vector2(0.5f, 1f);
					val24.anchorMin = new Vector2(0.5f, 1f);
					val24.pivot = new Vector2(0.5f, 1f);
					val24.sizeDelta = new Vector2(70f, 24f);
					((Transform)val24).localPosition = new Vector3(0f, 77.1429f, 0f);
					TextMeshProUGUI component4 = ((Component)((Component)__instance).transform.Find("Filler").Find("Speedometer").Find("Title")).GetComponent<TextMeshProUGUI>();
					((TMP_Text)val25).alignment = (TextAlignmentOptions)258;
					((TMP_Text)val25).characterWidthAdjustment = 50f;
					((TMP_Text)val25).enableAutoSizing = true;
					((TMP_Text)val25).enableKerning = true;
					((TMP_Text)val25).enableWordWrapping = true;
					((TMP_Text)val25).font = ((TMP_Text)component4).font;
					((TMP_Text)val25).fontMaterial = ((TMP_Text)component4).fontMaterial;
					((TMP_Text)val25).fontSize = 24f;
					((TMP_Text)val25).fontSizeMax = 24f;
					((TMP_Text)val25).fontSizeMin = 24f;
					((TMP_Text)val25).horizontalAlignment = (HorizontalAlignmentOptions)2;
					((TMP_Text)val25).text = "BLOOD";
					bloodPouchPanel2Text = new GameObject("Text (TMP)");
					bloodPouchPanel2Text.transform.SetParent(bloodPouchPanel2.transform, false);
					bloodPouchPanel2Text.layer = 5;
					RectTransform val26 = bloodPouchPanel2Text.AddComponent<RectTransform>();
					bloodPouchPanel2Text.AddComponent<CanvasRenderer>();
					TextMeshProUGUI val27 = bloodPouchPanel2Text.AddComponent<TextMeshProUGUI>();
					val26.anchoredPosition = new Vector2(0f, -17.5002f);
					val26.anchoredPosition3D = new Vector3(0f, -17.5002f, 0f);
					val26.anchorMax = new Vector2(1f, 1f);
					val26.anchorMin = new Vector2(0f, 0f);
					val26.sizeDelta = new Vector2(0f, -34.9996f);
					((Transform)val26).localPosition = new Vector3(0f, 22.4998f, 0f);
					((TMP_Text)val27).alignment = (TextAlignmentOptions)258;
					((TMP_Text)val27).enableAutoSizing = true;
					((TMP_Text)val27).font = ((TMP_Text)component4).font;
					((TMP_Text)val27).fontSize = 36f;
					((TMP_Text)val27).fontSizeMax = 36f;
					((TMP_Text)val27).fontSizeMin = 18f;
					((TMP_Text)val27).horizontalAlignment = (HorizontalAlignmentOptions)2;
					((TMP_Text)val27).text = Mathf.RoundToInt(bloodPouchValue) + "%";
					Array.Resize(ref __instance.hudBackgrounds, 10);
					__instance.hudBackgrounds[9] = val22;
					bloodPouchPanel2.SetActive(false);
				}
				if (!Object.op_Implicit((Object)(object)bloodPouchPanel3) && ((Object)__instance).name == "AltHud (2)")
				{
					bloodPouchPanel3 = new GameObject("BloodPouch");
					bloodPouchPanel3.transform.SetParent(((Component)__instance).transform.Find("Filler"), false);
					bloodPouchPanel3.layer = 5;
					RectTransform val28 = bloodPouchPanel3.AddComponent<RectTransform>();
					bloodPouchPanel3.AddComponent<CanvasRenderer>();
					Image val29 = bloodPouchPanel3.AddComponent<Image>();
					val28.anchoredPosition = new Vector2(-360f, 0f);
					val28.anchoredPosition3D = new Vector3(-360f, 0f, 0f);
					val28.anchorMax = new Vector2(0.5f, 0f);
					val28.anchorMin = new Vector2(0.5f, 0f);
					val28.pivot = new Vector2(0.5f, 0f);
					val28.sizeDelta = new Vector2(80f, 80f);
					((Transform)val28).localPosition = new Vector3(360f, -360f);
					Image component5 = ((Component)((Component)__instance).transform.Find("Filler").Find("Speedometer")).GetComponent<Image>();
					val29.sprite = component5.sprite;
					val29.overrideSprite = component5.overrideSprite;
					val29.pixelsPerUnitMultiplier = 5.4f;
					val29.type = (Type)1;
					((Graphic)val29).color = ((Graphic)component5).color;
					((Graphic)val29).material = ((Graphic)component5).material;
					((Graphic)val29).raycastTarget = false;
					GameObject val30 = new GameObject("Title");
					val30.transform.SetParent(bloodPouchPanel3.transform, false);
					val30.layer = 5;
					RectTransform val31 = val30.AddComponent<RectTransform>();
					val30.AddComponent<CanvasRenderer>();
					TextMeshProUGUI val32 = val30.AddComponent<TextMeshProUGUI>();
					val31.anchoredPosition = new Vector2(0f, -2.8571f);
					val31.anchoredPosition3D = new Vector3(0f, -2.8571f, 0f);
					val31.anchorMax = new Vector2(0.5f, 1f);
					val31.anchorMin = new Vector2(0.5f, 1f);
					val31.pivot = new Vector2(0.5f, 1f);
					val31.sizeDelta = new Vector2(70f, 24f);
					((Transform)val31).localPosition = new Vector3(0f, 77.1429f, 0f);
					TextMeshProUGUI component6 = ((Component)((Component)__instance).transform.Find("Filler").Find("Speedometer").Find("Title")).GetComponent<TextMeshProUGUI>();
					((TMP_Text)val32).alignment = (TextAlignmentOptions)258;
					((TMP_Text)val32).characterWidthAdjustment = 50f;
					((TMP_Text)val32).enableAutoSizing = true;
					((TMP_Text)val32).enableKerning = true;
					((TMP_Text)val32).enableWordWrapping = true;
					((TMP_Text)val32).font = ((TMP_Text)component6).font;
					((TMP_Text)val32).fontMaterial = ((TMP_Text)component6).fontMaterial;
					((TMP_Text)val32).fontSize = 24f;
					((TMP_Text)val32).fontSizeMax = 24f;
					((TMP_Text)val32).fontSizeMin = 24f;
					((TMP_Text)val32).horizontalAlignment = (HorizontalAlignmentOptions)2;
					((TMP_Text)val32).text = "BLOOD";
					bloodPouchPanel3Text = new GameObject("Text (TMP)");
					bloodPouchPanel3Text.transform.SetParent(bloodPouchPanel3.transform, false);
					bloodPouchPanel3Text.layer = 5;
					RectTransform val33 = bloodPouchPanel3Text.AddComponent<RectTransform>();
					bloodPouchPanel3Text.AddComponent<CanvasRenderer>();
					TextMeshProUGUI val34 = bloodPouchPanel3Text.AddComponent<TextMeshProUGUI>();
					val33.anchoredPosition = new Vector2(0f, -17.5002f);
					val33.anchoredPosition3D = new Vector3(0f, -17.5002f, 0f);
					val33.anchorMax = new Vector2(1f, 1f);
					val33.anchorMin = new Vector2(0f, 0f);
					val33.sizeDelta = new Vector2(0f, -34.9996f);
					((Transform)val33).localPosition = new Vector3(0f, 22.4998f, 0f);
					((TMP_Text)val34).alignment = (TextAlignmentOptions)258;
					((TMP_Text)val34).enableAutoSizing = true;
					((TMP_Text)val34).font = ((TMP_Text)component6).font;
					((TMP_Text)val34).fontSize = 36f;
					((TMP_Text)val34).fontSizeMax = 36f;
					((TMP_Text)val34).fontSizeMin = 18f;
					((TMP_Text)val34).horizontalAlignment = (HorizontalAlignmentOptions)2;
					((TMP_Text)val34).text = Mathf.RoundToInt(bloodPouchValue) + "%";
					Array.Resize(ref __instance.hudBackgrounds, 10);
					__instance.hudBackgrounds[9] = val29;
					bloodPouchPanel3.SetActive(false);
				}
			}
		}

		[HarmonyPatch(typeof(Speedometer), "OnPrefChanged")]
		private class BloodPouch3
		{
			private static void Postfix()
			{
				//IL_0134: Unknown result type (might be due to invalid IL or missing references)
				//IL_0143: Unknown result type (might be due to invalid IL or missing references)
				//IL_0150: Unknown result type (might be due to invalid IL or missing references)
				//IL_0164: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
				//IL_0102: Unknown result type (might be due to invalid IL or missing references)
				//IL_010f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0123: Unknown result type (might be due to invalid IL or missing references)
				//IL_0094: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c4: 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_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_006f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0083: Unknown result type (might be due to invalid IL or missing references)
				if (!Object.op_Implicit((Object)(object)bloodPouchPanel))
				{
					return;
				}
				RectTransform component = bloodPouchPanel.GetComponent<RectTransform>();
				if (MonoSingleton<PrefsManager>.Instance.GetInt("speedometer", 0) == 1)
				{
					if (!MonoSingleton<PrefsManager>.Instance.GetBool("weaponIcons", false))
					{
						component.anchoredPosition = new Vector2(component.anchoredPosition.x, 293f);
						component.anchoredPosition3D = new Vector3(component.anchoredPosition.x, 293f, 45f);
					}
					else
					{
						component.anchoredPosition = new Vector2(component.anchoredPosition.x, 693f);
						component.anchoredPosition3D = new Vector3(component.anchoredPosition.x, 693f, 45f);
					}
				}
				else if (!MonoSingleton<PrefsManager>.Instance.GetBool("weaponIcons", false))
				{
					component.anchoredPosition = new Vector2(component.anchoredPosition.x, 187f);
					component.anchoredPosition3D = new Vector3(component.anchoredPosition.x, 187f, 45f);
				}
				else
				{
					component.anchoredPosition = new Vector2(component.anchoredPosition.x, 590f);
					component.anchoredPosition3D = new Vector3(component.anchoredPosition.x, 590f, 45f);
				}
			}
		}

		[HarmonyPatch(typeof(IntroText), "Start")]
		private class ChangeIntroText
		{
			private static void Postfix(IntroText __instance)
			{
				if (((Object)__instance).name == "Page 2")
				{
					Traverse.Create((object)__instance).Field("fullString").SetValue((object)" STATUS UPDATE:½\r\n\r\n MACHINE ID:            V2½½\r\n LOCATION:              APPROACHING HELL½½@\r\n CURRENT OBJECTIVE:     FIND A WEAPON½½\r\n\r\n*MANKIND IS DEAD._½½\r\n*BLOOD IS FUEL._½½\r\n*HELL IS FULL._½½&");
				}
			}
		}

		[HarmonyPatch(typeof(EndlessGrid), "NextWave")]
		private class CyberGrindBalance
		{
			private static void Postfix(EndlessGrid __instance)
			{
				if (__instance.currentWave % 5 == 0)
				{
					MonoSingleton<NewMovement>.Instance.hp = Mathf.RoundToInt(spawnAllocatedHp);
				}
			}
		}

		[HarmonyPatch(typeof(LeaderboardController), "SubmitCyberGrindScore")]
		private class DisableCyberGrindScore
		{
			[HarmonyPrefix]
			private static bool SkipThisCodeHaha()
			{
				return false;
			}
		}

		[HarmonyPatch(typeof(LeaderboardController), "SubmitLevelScore")]
		private class DisableLevelScore
		{
			[HarmonyPrefix]
			private static bool SkipThisCodeHaha()
			{
				return false;
			}
		}

		private readonly Harmony harmony = new Harmony("v2Ultrakill");

		private ConfigBuilder configgy;

		private static AssetBundle funnyAssets;

		internal static ManualLogSource Logger;

		private static float spawnAllocatedHp;

		private static float respawnAllocatedHp;

		private static readonly GameObject[] hpBars = (GameObject[])(object)new GameObject[10];

		private static readonly GameObject[] afterHpBars = (GameObject[])(object)new GameObject[10];

		private static readonly Color[] hpBarColors = (Color[])(object)new Color[10];

		private static GameObject feedbacker;

		private static Material opportunisticMaterial;

		private static Material opportunisticMaterial2;

		private static bool kbPunchCheck;

		private static SkinnedMeshRenderer revolverArmRenderer;

		private static SkinnedMeshRenderer spawnerArmRenderer;

		private static SkinnedMeshRenderer clashModeRenderer;

		private static bool clashDancer = false;

		private static V2 v2;

		private static SkinnedMeshRenderer v2Renderer;

		private static SkinnedMeshRenderer v2Renderer2;

		private static EnemySimplifier enemySimplifier;

		private static int v2Pattern;

		private static int revolverShotNumber;

		private static float revolverTimer;

		private static float shootCharge;

		private static bool shotTypeCheck;

		private static bool altVersion;

		private static int dualWieldCount;

		private static int rocketShotNumber;

		private static float rocketTimer;

		private static bool rocketOverheated;

		private static GameObject overheatGameObject;

		private static AudioSource overheatAud;

		private static ParticleSystem overheatParticle;

		private static float bloodPouchValue;

		private static bool bloodPouchActivated;

		private static float bloodPouchTimer;

		private static GameObject bloodPouchPanel;

		private static GameObject bloodPouchSlider;

		private static GameObject sliderText;

		private static GameObject bloodPouchPanel2;

		private static GameObject bloodPouchPanel2Text;

		private static GameObject bloodPouchPanel3;

		private static GameObject bloodPouchPanel3Text;

		[Configgable("", "Spawn Health", 0, "Amount of health the player receives upon spawning.\r\nOnly accepts values between 1 and 1000.")]
		private static readonly ConfigInputField<int> spawnHealth = new ConfigInputField<int>(400, (Func<int, bool>)null, (Func<string, ValueTuple<bool, int>>)null);

		[Configgable("", "Respawn Health", 0, "Amount of health the player receives upon respawning.\r\nOnly accepts values between 1 and 1000.")]
		private static readonly ConfigInputField<int> respawnHealth = new ConfigInputField<int>(400, (Func<int, bool>)null, (Func<string, ValueTuple<bool, int>>)null);

		[Configgable("", "Start with Knuckleblaster", 0, "Will start the player with the Knuckleblaster upon starting a new save, or when starting the full tutorial with no arms equipped.\r\nThis also changes the Knuckleblaster pickup in 1-4 to be a Feedbacker pickup, even though the Feedbacker is always available at game start.")]
		private static readonly ConfigToggle kbForIntro = new ConfigToggle(true);

		[Configgable("", "V1 Texture Swaps", 0, "Changes the textures of the player to V2.\r\nIncludes the right arm when holding weapons and Clash Mode.")]
		private static readonly ConfigToggle v1Textures = new ConfigToggle(true);

		[Configgable("", "V2 Texture Swaps", 0, "Changes the textures of V2 encounters throughout the game to V1.\r\nFunctionally and mechanically, the boss itself remains the same.")]
		private static readonly ConfigToggle v2Textures = new ConfigToggle(true);

		[Configgable("", "V2's Revolver Mode", 0, "Allows the default Revolver to fire a burst of three shots with a longer cooldown afterwards.")]
		private static readonly ConfigToggle v2Revolver = new ConfigToggle(true);

		[Configgable("", "Johninator Rocket Mode", 0, "Allows the Rocket Launcher to fire a burst of three shots with a long cooldown afterwards.")]
		private static readonly ConfigToggle johninatorRocket = new ConfigToggle(true);

		[Configgable("Blood Pouch", "Blood Pouch Enabled", 0, "Enables a reservoir of blood that can be used to regenerate health between combat encounters.\r\nBlood is collected during battles, and regeneration also depletes style points.")]
		private static readonly ConfigToggle bloodPouch = new ConfigToggle(true);

		[Configgable("Blood Pouch", "Blood Pouch Keybind", 0, "Keybind to start or stop health regeneration from the blood pouch.")]
		private static readonly ConfigKeybind bloodPouchHotkey = new ConfigKeybind((KeyCode)116);

		[Configgable("Blood Pouch", "Blood Pouch Meter", 0, "Enables GUI indicating how filled the blood pouch is.\r\nGUI only appears if Blood Pouch is also enabled.")]
		private static readonly ConfigToggle bloodPouchGUI = new ConfigToggle(true);

		[Configgable("Blood Pouch", "Blood Pouch Meter Color", 0, "Color of the meter used to indicate how filled the blood pouch is.")]
		private static readonly ConfigColor bloodPouchColor = new ConfigColor(new Color(0.35f, 0f, 0f, 1f));

		[Configgable("Damage Reduction", "DESTRUCTIVE (%)", 0, "Percentage of incoming damage reduced at style rank DESTRUCTIVE.")]
		private static readonly IntegerSlider destructiveReduction = new IntegerSlider(0, 0, 100);

		[Configgable("Damage Reduction", "CHAOTIC (%)", 0, "Percentage of incoming damage reduced at style rank CHAOTIC.")]
		private static readonly IntegerSlider chaoticReduction = new IntegerSlider(0, 0, 100);

		[Configgable("Damage Reduction", "BRUTAL (%)", 0, "Percentage of incoming damage reduced at style rank BRUTAL.")]
		private static readonly IntegerSlider brutalReduction = new IntegerSlider(0, 0, 100);

		[Configgable("Damage Reduction", "ANARCHIC (%)", 0, "Percentage of incoming damage reduced at style rank ANARCHIC.")]
		private static readonly IntegerSlider anarchicReduction = new IntegerSlider(15, 0, 100);

		[Configgable("Damage Reduction", "SUPREME (%)", 0, "Percentage of incoming damage reduced at style rank SUPREME.")]
		private static readonly IntegerSlider supremeReduction = new IntegerSlider(30, 0, 100);

		[Configgable("Damage Reduction", "SSADISTIC (%)", 0, "Percentage of incoming damage reduced at style rank SSADISTIC.")]
		private static readonly IntegerSlider ssadisticReduction = new IntegerSlider(45, 0, 100);

		[Configgable("Damage Reduction", "SSSHITSTORM (%)", 0, "Percentage of incoming damage reduced at style rank SSSHITSTORM.")]
		private static readonly IntegerSlider ssshitstormReduction = new IntegerSlider(60, 0, 100);

		[Configgable("Damage Reduction", "ULTRAKILL (%)", 0, "Percentage of incoming damage reduced at style rank ULTRAKILL.")]
		private static readonly IntegerSlider ultrakillReduction = new IntegerSlider(80, 0, 100);

		[Configgable("Damage Reduction", "Overall Reduction Toggle", 0, "If enabled, incoming damage is reduced by a flat rate at all times, based on the below slider.\r\nWill not stack with the above style reductions, and in fact overrides them.")]
		private static readonly ConfigToggle generalReductionToggle = new ConfigToggle(false);

		[Configgable("Damage Reduction", "Overall Reduction (%)", 0, "Percentage of incoming damage reduced.\r\nOnly functions if the above option is enabled.")]
		private static readonly IntegerSlider generalReduction = new IntegerSlider(0, 0, 100);

		[Configgable("Healthbar Colors", "Healthbar 1 (1-100 HP)", 0, null)]
		private static readonly ConfigColor hp100ColorSlider = new ConfigColor(new Color(1f, 0f, 0f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 2 (101-200 HP)", 0, null)]
		private static readonly ConfigColor hp200ColorSlider = new ConfigColor(new Color(0.7843f, 0.2941f, 0f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 3 (201-300 HP)", 0, null)]
		private static readonly ConfigColor hp300ColorSlider = new ConfigColor(new Color(1f, 1f, 0f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 4 (301-400 HP)", 0, null)]
		private static readonly ConfigColor hp400ColorSlider = new ConfigColor(new Color(0f, 1f, 0f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 5 (401-500 HP)", 0, null)]
		private static readonly ConfigColor hp500ColorSlider = new ConfigColor(new Color(0f, 0.5882f, 0f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 6 (501-600 HP)", 0, null)]
		private static readonly ConfigColor hp600ColorSlider = new ConfigColor(new Color(0f, 0.5882f, 0.3529f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 7 (601-700 HP)", 0, null)]
		private static readonly ConfigColor hp700ColorSlider = new ConfigColor(new Color(0f, 0.3922f, 0.5882f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 8 (701-800 HP)", 0, null)]
		private static readonly ConfigColor hp800ColorSlider = new ConfigColor(new Color(0f, 0f, 0.6863f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 9 (801-900 HP)", 0, null)]
		private static readonly ConfigColor hp900ColorSlider = new ConfigColor(new Color(0.3922f, 0f, 0.3922f, 1f));

		[Configgable("Healthbar Colors", "Healthbar 10 (901-1000 HP)", 0, null)]
		private static readonly ConfigColor hp1000ColorSlider = new ConfigColor(new Color(0.7843f, 0f, 0.5882f, 1f));

		private void Awake()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			harmony.PatchAll();
			configgy = new ConfigBuilder("v2Ultrakill", "Play as V2");
			configgy.BuildAll();
			funnyAssets = AssetBundle.LoadFromFile(Path.Combine(ModPath(), "funnyassets"));
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"Plugin v2Ultrakill, version 2.3.5, is loaded. You can now play as V2.");
		}

		public static string ModPath()
		{
			return Assembly.GetExecutingAssembly().Location.Substring(0, Assembly.GetExecutingAssembly().Location.LastIndexOf(Path.DirectorySeparatorChar));
		}

		private void Update()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: 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)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0afe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b39: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b64: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0906: Unknown result type (might be due to invalid IL or missing references)
			//IL_0931: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_095a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf4: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_1240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0998: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a2f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a72: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ade: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)hpBars[0]))
			{
				hpBarColors[0] = ((ConfigValueElement<Color>)(object)hp100ColorSlider).Value;
				hpBarColors[1] = ((ConfigValueElement<Color>)(object)hp200ColorSlider).Value;
				hpBarColors[2] = ((ConfigValueElement<Color>)(object)hp300ColorSlider).Value;
				hpBarColors[3] = ((ConfigValueElement<Color>)(object)hp400ColorSlider).Value;
				hpBarColors[4] = ((ConfigValueElement<Color>)(object)hp500ColorSlider).Value;
				hpBarColors[5] = ((ConfigValueElement<Color>)(object)hp600ColorSlider).Value;
				hpBarColors[6] = ((ConfigValueElement<Color>)(object)hp700ColorSlider).Value;
				hpBarColors[7] = ((ConfigValueElement<Color>)(object)hp800ColorSlider).Value;
				hpBarColors[8] = ((ConfigValueElement<Color>)(object)hp900ColorSlider).Value;
				hpBarColors[9] = ((ConfigValueElement<Color>)(object)hp1000ColorSlider).Value;
				for (int i = 0; i <= 9; i++)
				{
					if (!CheckColor(hpBars[i], hpBarColors[i]))
					{
						UpdateColor(hpBars[i], hpBarColors[i]);
					}
				}
			}
			if (((ConfigValueElement<bool>)(object)kbForIntro).Value)
			{
				if (!Object.op_Implicit((Object)(object)feedbacker) && Object.op_Implicit((Object)(object)v2Renderer))
				{
					if (Object.op_Implicit((Object)(object)v2))
					{
						if (((Object)((Component)v2).transform).name == "V2" || ((Object)((Component)v2).transform).name == "V2(Clone)")
						{
							GenerateFeedbacker(v2Renderer, enemySimplifier);
						}
					}
					else if (((Object)((Component)v2Renderer).transform.parent.parent).name == "Fake V2")
					{
						GenerateFeedbacker(v2Renderer, null);
					}
				}
			}
			else if (Object.op_Implicit((Object)(object)feedbacker) && Object.op_Implicit((Object)(object)v2Renderer))
			{
				if (Object.op_Implicit((Object)(object)enemySimplifier))
				{
					KillFeedbacker(v2Renderer, enemySimplifier);
				}
				else
				{
					KillFeedbacker(v2Renderer, null);
				}
			}
			if (Object.op_Implicit((Object)(object)revolverArmRenderer))
			{
				if (((ConfigValueElement<bool>)(object)v1Textures).Value)
				{
					if ((Object)(object)((Renderer)revolverArmRenderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm_V2"))
					{
						((Renderer)revolverArmRenderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm_V2");
					}
				}
				else if ((Object)(object)((Renderer)revolverArmRenderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm") && ((Object)((Renderer)revolverArmRenderer).materials[0].mainTexture).name != "V3-hand")
				{
					((Renderer)revolverArmRenderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm");
				}
			}
			if (Object.op_Implicit((Object)(object)spawnerArmRenderer))
			{
				if (((ConfigValueElement<bool>)(object)v1Textures).Value)
				{
					if ((Object)(object)((Renderer)spawnerArmRenderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm_V2"))
					{
						((Renderer)spawnerArmRenderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm_V2");
					}
				}
				else if ((Object)(object)((Renderer)spawnerArmRenderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm") && ((Object)((Renderer)spawnerArmRenderer).materials[0].mainTexture).name != "V3-hand")
				{
					((Renderer)spawnerArmRenderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("T_MainArm");
				}
			}
			if (Object.op_Implicit((Object)(object)clashModeRenderer))
			{
				if (((ConfigValueElement<bool>)(object)v1Textures).Value)
				{
					if ((Object)(object)((Renderer)clashModeRenderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1"))
					{
						for (int j = 0; j <= 8; j++)
						{
							if (j == 0)
							{
								((Renderer)clashModeRenderer).materials[j].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1");
							}
							else
							{
								((Renderer)clashModeRenderer).materials[j].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex_new");
							}
						}
					}
				}
				else if ((Object)(object)((Renderer)clashModeRenderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex"))
				{
					for (int k = 0; k <= 8; k++)
					{
						if (k == 0)
						{
							((Renderer)clashModeRenderer).materials[k].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex");
						}
						else
						{
							((Renderer)clashModeRenderer).materials[k].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex");
						}
					}
				}
			}
			if (Object.op_Implicit((Object)(object)v2Renderer))
			{
				if (Object.op_Implicit((Object)(object)v2) && ((Object)((Component)v2).transform).name != "V3")
				{
					object value = Traverse.Create((object)v2).Field("bhb").GetValue();
					BossHealthBar val = (BossHealthBar)((value is BossHealthBar) ? value : null);
					if (((ConfigValueElement<bool>)(object)v2Textures).Value)
					{
						if ((Object)(object)v2.wingTextures[0] != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex_new"))
						{
							v2.wingTextures[0] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex_new");
							v2.wingTextures[1] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex 1_new");
							v2.wingTextures[2] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex 2_new");
							v2.wingTextures[3] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex 3_new");
						}
						if ((Object)(object)((Renderer)v2Renderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex"))
						{
							((Renderer)v2Renderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex");
						}
						if (Object.op_Implicit((Object)(object)val) && val.bossName == "V2")
						{
							val.bossName = "V1";
						}
					}
					else
					{
						if ((Object)(object)v2.wingTextures[0] != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex"))
						{
							v2.wingTextures[0] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex");
							v2.wingTextures[1] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex 1");
							v2.wingTextures[2] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex 2");
							v2.wingTextures[3] = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex 3");
						}
						if ((Object)(object)((Renderer)v2Renderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1"))
						{
							((Renderer)v2Renderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1");
						}
						if (Object.op_Implicit((Object)(object)val) && val.bossName == "V1")
						{
							val.bossName = "V2";
						}
					}
					if ((Object)(object)((Renderer)v2Renderer).materials[1].mainTexture != (Object)(object)v2.wingTextures[v2Pattern])
					{
						((Renderer)v2Renderer).materials[1].mainTexture = v2.wingTextures[v2Pattern];
					}
					if (v2.isEnraged)
					{
						if (((ConfigValueElement<bool>)(object)v2Textures).Value && ((Renderer)v2Renderer).materials[0].color.r != 2f)
						{
							((Renderer)v2Renderer).materials[0].color = new Color(2f, 0f, 0f, 1f);
							((Renderer)v2Renderer).materials[1].color = new Color(2f, 0f, 0f, 1f);
						}
						else if (!((ConfigValueElement<bool>)(object)v2Textures).Value && ((Renderer)v2Renderer).materials[0].color.r != 1f)
						{
							((Renderer)v2Renderer).materials[0].color = new Color(1f, 1f, 1f, 1f);
							((Renderer)v2Renderer).materials[1].color = new Color(1f, 1f, 1f, 1f);
						}
						if (Object.op_Implicit((Object)(object)feedbacker) && ((Renderer)feedbacker.GetComponent<SkinnedMeshRenderer>()).materials[0].color.r != 2f)
						{
							((Renderer)feedbacker.GetComponent<SkinnedMeshRenderer>()).materials[0].color = new Color(2f, 0f, 0f, 1f);
							if (Object.op_Implicit((Object)(object)((Renderer)v2Renderer).materials[2]))
							{
								((Renderer)v2Renderer).materials[2].color = new Color(1.3f, 0.6f, 0.6f, 0f);
							}
						}
						else if (((Renderer)v2Renderer).materials.Length == 3 && ((Renderer)v2Renderer).materials[2].color.r != 1.3f)
						{
							((Renderer)v2Renderer).materials[2].color = new Color(1.3f, 0.6f, 0.6f, 1f);
						}
					}
					else
					{
						if (((Renderer)v2Renderer).materials[0].color.r != 1f)
						{
							((Renderer)v2Renderer).materials[0].color = new Color(1f, 1f, 1f, 1f);
							((Renderer)v2Renderer).materials[1].color = new Color(1f, 1f, 1f, 1f);
						}
						if (((Renderer)v2Renderer).materials.Length == 3 && !((ConfigValueElement<bool>)(object)kbForIntro).Value && (Object)(object)((Renderer)v2Renderer).materials[2] != (Object)(object)opportunisticMaterial)
						{
							Material[] materials = ((Renderer)v2Renderer).materials;
							materials[2] = opportunisticMaterial;
							((Renderer)v2Renderer).materials = materials;
							((Renderer)v2Renderer).materials[2].color = new Color(1f, 1f, 1f, 1f);
						}
					}
				}
				else if (((ConfigValueElement<bool>)(object)v2Textures).Value)
				{
					if ((Object)(object)((Renderer)v2Renderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex"))
					{
						V2TexturesCutscenes(v2Renderer);
					}
				}
				else if ((Object)(object)((Renderer)v2Renderer).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1"))
				{
					UndoV2TexturesCutscenes(v2Renderer);
				}
			}
			if (Object.op_Implicit((Object)(object)v2Renderer2))
			{
				if (((ConfigValueElement<bool>)(object)v2Textures).Value)
				{
					if ((Object)(object)((Renderer)v2Renderer2).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex"))
					{
						V2TexturesCutscenes(v2Renderer2);
					}
				}
				else if ((Object)(object)((Renderer)v2Renderer2).materials[0].mainTexture != (Object)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1"))
				{
					UndoV2TexturesCutscenes(v2Renderer2);
				}
			}
			if (((ConfigValueElement<bool>)(object)bloodPouch).Value && ((ConfigValueElement<bool>)(object)bloodPouchGUI).Value)
			{
				int value2 = Traverse.Create((object)MonoSingleton<PlayerActivatorRelay>.Instance).Field("index").GetValue<int>();
				if (Object.op_Implicit((Object)(object)bloodPouchPanel) && !bloodPouchPanel.activeSelf && value2 >= 9)
				{
					bloodPouchPanel.SetActive(true);
				}
				if (Object.op_Implicit((Object)(object)bloodPouchPanel2) && !bloodPouchPanel2.activeSelf)
				{
					bloodPouchPanel2.SetActive(true);
				}
				if (Object.op_Implicit((Object)(object)bloodPouchPanel3) && !bloodPouchPanel3.activeSelf)
				{
					bloodPouchPanel3.SetActive(true);
				}
				if (Object.op_Implicit((Object)(object)bloodPouchPanel) && bloodPouchPanel.activeSelf)
				{
					Slider component = bloodPouchSlider.GetComponent<Slider>();
					((Graphic)((Selectable)component).image).color = ((ConfigValueElement<Color>)(object)bloodPouchColor).Value;
					if (Time.timeScale != 0f)
					{
						component.value = bloodPouchValue;
						((TMP_Text)sliderText.GetComponent<TextMeshProUGUI>()).text = Mathf.RoundToInt(bloodPouchValue) + "%";
					}
				}
				if (Object.op_Implicit((Object)(object)bloodPouchPanel2) && bloodPouchPanel2.activeSelf && Time.timeScale != 0f)
				{
					((TMP_Text)bloodPouchPanel2Text.GetComponent<TextMeshProUGUI>()).text = Mathf.RoundToInt(bloodPouchValue) + "%";
				}
				if (Object.op_Implicit((Object)(object)bloodPouchPanel3) && bloodPouchPanel3.activeSelf && Time.timeScale != 0f)
				{
					((TMP_Text)bloodPouchPanel3Text.GetComponent<TextMeshProUGUI>()).text = Mathf.RoundToInt(bloodPouchValue) + "%";
				}
			}
			else if (!((ConfigValueElement<bool>)(object)bloodPouch).Value || !((ConfigValueElement<bool>)(object)bloodPouchGUI).Value)
			{
				if (bloodPouchPanel.activeSelf)
				{
					bloodPouchPanel.SetActive(false);
				}
				if (bloodPouchPanel2.activeSelf)
				{
					bloodPouchPanel2.SetActive(false);
				}
				if (bloodPouchPanel3.activeSelf)
				{
					bloodPouchPanel3.SetActive(false);
				}
			}
			if (Time.timeScale == 0f)
			{
				return;
			}
			if (NoWeaponCooldown.NoCooldown)
			{
				revolverShotNumber = 0;
				rocketShotNumber = 0;
			}
			if (Object.op_Implicit((Object)(object)MonoSingleton<GunControl>.Instance))
			{
				dualWieldCount = MonoSingleton<GunControl>.Instance.dualWieldCount + 1;
			}
			if (Object.op_Implicit((Object)(object)MonoSingleton<NewMovement>.Instance) && MonoSingleton<NewMovement>.Instance.antiHp != 0f)
			{
				MonoSingleton<NewMovement>.Instance.antiHp = 0f;
			}
			if (((ConfigValueElement<bool>)(object)v2Revolver).Value)
			{
				revolverTimer += 200f * Time.deltaTime;
				if (shootCharge != 100f)
				{
					if (revolverShotNumber < dualWieldCount * 3 - 1)
					{
						if (shootCharge + 575f * Time.deltaTime < 100f)
						{
							shootCharge += 575f * Time.deltaTime;
						}
						else
						{
							shootCharge = 100f;
						}
					}
					else if (shootCharge + 75f * Time.deltaTime < 100f)
					{
						shootCharge += 75f * Time.deltaTime;
					}
					else
					{
						shootCharge = 100f;
					}
				}
				if (revolverTimer >= 100f)
				{
					revolverTimer = 0f;
					if (revolverShotNumber < dualWieldCount * 3 - 1)
					{
						revolverShotNumber = dualWieldCount * 3 - 1;
					}
				}
			}
			if (((ConfigValueElement<bool>)(object)johninatorRocket).Value)
			{
				if (rocketTimer > 0f)
				{
					rocketTimer = Mathf.MoveTowards(rocketTimer, 0f, Time.deltaTime);
				}
				else if (rocketTimer == 0f && rocketShotNumber > 0)
				{
					rocketShotNumber = 0;
				}
			}
			if (!Object.op_Implicit((Object)(object)MonoSingleton<NewMovement>.Instance) || !((ConfigValueElement<bool>)(object)bloodPouch).Value)
			{
				return;
			}
			if (bloodPouchValue > 0f && Input.GetKeyDown(((ConfigValueElement<KeyCode>)(object)bloodPouchHotkey).Value))
			{
				bloodPouchTimer = 0f;
				if (!bloodPouchActivated && MonoSingleton<MusicManager>.Instance.requestedThemes == 0f)
				{
					if ((MonoSingleton<NewMovement>.Instance.sameCheckpointRestarts > 0 && (float)MonoSingleton<NewMovement>.Instance.hp < respawnAllocatedHp) || (float)MonoSingleton<NewMovement>.Instance.hp < spawnAllocatedHp)
					{
						bloodPouchActivated = true;
					}
				}
				else
				{
					bloodPouchActivated = false;
				}
			}
			if (!bloodPouchActivated)
			{
				return;
			}
			if (MonoSingleton<MusicManager>.Instance.requestedThemes == 1f)
			{
				bloodPouchTimer = 0f;
				bloodPouchActivated = false;
				return;
			}
			bloodPouchTimer = Mathf.MoveTowards(bloodPouchTimer, 100f, Time.deltaTime * 5f);
			bloodPouchValue = Mathf.MoveTowards(bloodPouchValue, 0f, Time.deltaTime * 5f);
			if (MonoSingleton<NewMovement>.Instance.sameCheckpointRestarts > 0)
			{
				if (bloodPouchTimer >= 100f / respawnAllocatedHp)
				{
					bloodPouchTimer -= 100f / respawnAllocatedHp;
					NewMovement instance = MonoSingleton<NewMovement>.Instance;
					instance.hp++;
					StatsManager instance2 = MonoSingleton<StatsManager>.Instance;
					instance2.stylePoints -= 10;
				}
			}
			else if (bloodPouchTimer >= 100f / spawnAllocatedHp)
			{
				bloodPouchTimer -= 100f / spawnAllocatedHp;
				NewMovement instance3 = MonoSingleton<NewMovement>.Instance;
				instance3.hp++;
				StatsManager instance4 = MonoSingleton<StatsManager>.Instance;
				instance4.stylePoints -= 10;
			}
			if (bloodPouchValue == 0f)
			{
				bloodPouchTimer = 0f;
				bloodPouchActivated = false;
			}
			else if ((float)MonoSingleton<NewMovement>.Instance.hp >= respawnAllocatedHp && MonoSingleton<NewMovement>.Instance.sameCheckpointRestarts > 0)
			{
				MonoSingleton<NewMovement>.Instance.hp = Mathf.RoundToInt(respawnAllocatedHp);
				bloodPouchTimer = 0f;
				bloodPouchActivated = false;
				if (bloodPouchValue <= 0.5f)
				{
					bloodPouchValue = 0f;
					StatsManager instance5 = MonoSingleton<StatsManager>.Instance;
					instance5.stylePoints -= 10;
				}
			}
			else if ((float)MonoSingleton<NewMovement>.Instance.hp >= spawnAllocatedHp && MonoSingleton<NewMovement>.Instance.sameCheckpointRestarts == 0)
			{
				MonoSingleton<NewMovement>.Instance.hp = Mathf.RoundToInt(spawnAllocatedHp);
				bloodPouchTimer = 0f;
				bloodPouchActivated = false;
				if (bloodPouchValue <= 0.5f)
				{
					bloodPouchValue = 0f;
					StatsManager instance6 = MonoSingleton<StatsManager>.Instance;
					instance6.stylePoints -= 10;
				}
			}
		}

		private static bool CheckColor(GameObject y, Color z)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			if (((Graphic)((Component)y.transform.Find("Fill Area").Find("Fill")).GetComponent<Image>()).color == z)
			{
				return true;
			}
			return false;
		}

		private static void UpdateColor(GameObject y, Color z)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			((Graphic)((Component)y.transform.Find("Fill Area").Find("Fill")).GetComponent<Image>()).color = z;
		}

		private static IEnumerator<WaitForSecondsRealtime> FeedbackerPunches(Punch punch)
		{
			object value = Traverse.Create((object)punch).Field("aud").GetValue();
			AudioSource aud = (AudioSource)((value is AudioSource) ? value : null);
			punch.anim.Play("Jab", 0, 0f);
			aud.Play();
			yield return new WaitForSecondsRealtime(1f);
			punch.anim.Play("Hook", 0, 0.05f);
			aud.Play();
		}

		private static void GenerateFeedbacker(SkinnedMeshRenderer renderer, EnemySimplifier enemySimplifier)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Expected O, but got Unknown
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			opportunisticMaterial = ((Renderer)v2Renderer).materials[2];
			Material[] materials = ((Renderer)renderer).materials;
			materials[2] = funnyAssets.LoadAsset<Material>("Smoke");
			((Renderer)renderer).materials = materials;
			((Renderer)renderer).materials[2].color = new Color(1f, 1f, 1f, 0f);
			if (Object.op_Implicit((Object)(object)enemySimplifier))
			{
				opportunisticMaterial2 = enemySimplifier.simplifiedMaterial3;
				enemySimplifier.simplifiedMaterial3 = funnyAssets.LoadAsset<Material>("Smoke");
				enemySimplifier.simplifiedMaterial3.color = new Color(1.3f, 0.6f, 0.6f, 0f);
			}
			feedbacker = new GameObject("LeftArm");
			feedbacker.transform.SetParent(((Component)renderer).transform.parent.Find("metarig").Find("spine").Find("spine.001")
				.Find("spine.002")
				.Find("spine.003")
				.Find("shoulder.L")
				.Find("upper_arm.L"), false);
			feedbacker.transform.localScale = new Vector3(4f, 4f, 4f);
			feedbacker.transform.localPosition = new Vector3(0.02f, 0f, 0f);
			feedbacker.transform.localRotation = Quaternion.Euler(90f, 180f, 0f);
			SkinnedMeshRenderer val = feedbacker.AddComponent<SkinnedMeshRenderer>();
			((Renderer)val).material.mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("T_Feedbacker");
			((Renderer)val).material.color = new Color(1f, 1f, 1f, 1f);
			((Renderer)val).material.shader = ((Renderer)renderer).material.shader;
			val.sharedMesh = funnyAssets.LoadAsset<Mesh>("Feedbacker");
		}

		private static void KillFeedbacker(SkinnedMeshRenderer renderer, EnemySimplifier enemySimplifier)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			Object.Destroy((Object)(object)feedbacker);
			Material[] materials = ((Renderer)renderer).materials;
			materials[2] = opportunisticMaterial;
			((Renderer)renderer).materials = materials;
			((Renderer)renderer).materials[2].color = new Color(1f, 1f, 1f, 1f);
			if (Object.op_Implicit((Object)(object)enemySimplifier))
			{
				enemySimplifier.simplifiedMaterial3 = opportunisticMaterial2;
				enemySimplifier.simplifiedMaterial3.mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_armtex");
				enemySimplifier.simplifiedMaterial3.color = new Color(1.3f, 0.6f, 0.6f, 1f);
			}
		}

		private static void V2TexturesCutscenes(SkinnedMeshRenderer renderer)
		{
			((Renderer)renderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1colour_tex");
			((Renderer)renderer).materials[1].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v1_wingcolour_tex_new");
		}

		private static void UndoV2TexturesCutscenes(SkinnedMeshRenderer renderer)
		{
			((Renderer)renderer).materials[0].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2colour_tex 1");
			((Renderer)renderer).materials[1].mainTexture = (Texture)(object)funnyAssets.LoadAsset<Texture2D>("v2_wingcolour_tex");
		}

		private static void InstantiateSmoke(RocketLauncher __instance)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Expected O, but got Unknown
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			overheatGameObject = new GameObject("JohninatorParticleSystem");
			overheatAud = overheatGameObject.AddComponent<AudioSource>();
			overheatParticle = overheatGameObject.AddComponent<ParticleSystem>();
			ParticleSystemRenderer component = overheatGameObject.GetComponent<ParticleSystemRenderer>();
			((Renderer)component).material = funnyAssets.LoadAsset<Material>("Smoke");
			((Renderer)component).material.color = new Color(1f, 1f, 1f, 0.5f);
			((Renderer)component).material.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)4;
			overheatAud.clip = funnyAssets.LoadAsset<AudioClip>("steamLoop3.wav");
			overheatAud.loop = true;
			overheatAud.panStereo = 0.1f;
			overheatAud.pitch = 0.75f;
			overheatAud.playOnAwake = false;
			overheatAud.volume = 0.75f;
			overheatAud.outputAudioMixerGroup = ((Component)((Component)__instance).transform).GetComponent<AudioSource>().outputAudioMixerGroup;
			ColorOverLifetimeModule colorOverLifetime = overheatParticle.colorOverLifetime;
			((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = true;
			Gradient val = new Gradient();
			val.SetKeys((Gr