Decompiled source of ULTRASHIT v5.4.0

BepInEx/plugins/DeathMessages.dll

Decompiled a month ago
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DeathMessages")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DeathMessages")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c01cdbcd-39dc-446c-a021-553d8f403dc2")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace DeathMessages;

[BepInPlugin("com.thehalfbunny.deathmsg", "DeathMSG", "1.0.1")]
public class CustomDeathMessagePlugin : BaseUnityPlugin
{
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "com.thehalfbunny.deathmsg";

		public const string PLUGIN_NAME = "DeathMSG";

		public const string PLUGIN_VERSION = "1.0.1";
	}

	private const string DeathMessage = "<color=white>WARNING: EXTREME BADDIE LOCATED (possibly cacriel)</color>\r\n<color=#ff81f7>MEDIC TF2 DIAGNOSTIC</color>\r\n<color=#ff81f7>ERROR: MASTURBATE #1 NOT RESPONDING</color>\r\n<color=#ff81f7>ERROR: MASTUBATE #2 NOT RESPONDING</color>\r\n<color=white>WARNING: MOLEST SYSTEMS INOPERABLE</color>\r\n<color=#ff81f7>ATTEMPTING RE-CUMMING</color>\r\n<color=#ff81f7>ERROR: SELF MASTURBATE NOT RESPONDING</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INITIATING GOONING PROTOCOL</color>\r\n<color=#ff81f7>ATTEMPTING CONNECTION WITH SEXY POSES MODULES</color>\r\n<color=#ff81f7>ERROR: AWWWW MY LEG #1 NOT RESPONDING</color>\r\n<color=#ff81f7>ERROR: AWWWW MY LEG #2 NOT RESPONDING</color>\r\n<color=white>WARNING: UNABLE TO SUSTAIN DICK FUNCTIONS</color>\r\n<color=#ff81f7>ERROR: VISUAL BADDIE IDENTIFIER</color>\r\n<color=#ff81f7>ERROR: LICK FUNCTION NOT RESPONDING</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=white>WARNING: UNABLE TO SUSTAIN THE ACT OF GOONING</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>-!- SHUTDOWN THE GOONING -!-</color>\r\n<color=#ff81f7>ERROR: NO BADDIE DETECTED ON INTERFACE, UNABLE TO COMPLETE TASK GOON</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=white>WARNING: UNABLE TO  SUSTAIN BASIC DICK FUNCTIONS PROBLEM: ERECTILE DYSFUNCTION</color>\r\n<color=#ff81f7>-!- SHUTDOWN THE GOONER  -!-</color>\r\n<color=#ff81f7>-!- SHUTDOWN THE GOONER -!-</color>\r\n<color=#ff81f7>I WANT TO CUM.</color>\r\n<color=#ff81f7>I WANT TO CUM.</color>\r\n<color=#ff81f7>I WANT TO CUM.</color>";

	private static ManualLogSource Log;

	private void Awake()
	{
		Log = ((BaseUnityPlugin)this).Logger;
		SceneManager.sceneLoaded += OnSceneLoaded;
		Log.LogInfo((object)"Plugin DeathMSG is loaded!");
	}

	private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		if (((Scene)(ref scene)).name == "b3e7f2f8052488a45b35549efb98d902")
		{
			Log.LogInfo((object)"Main menu detected, skipping death message change.");
			return;
		}
		DeathSequence val = Object.FindObjectOfType<DeathSequence>(true);
		if ((Object)(object)val != (Object)null)
		{
			TextMeshProUGUI componentInChildren = ((Component)val).GetComponentInChildren<TextMeshProUGUI>(true);
			if ((Object)(object)componentInChildren != (Object)null)
			{
				((TMP_Text)componentInChildren).text = "<color=white>WARNING: EXTREME BADDIE LOCATED (possibly cacriel)</color>\r\n<color=#ff81f7>MEDIC TF2 DIAGNOSTIC</color>\r\n<color=#ff81f7>ERROR: MASTURBATE #1 NOT RESPONDING</color>\r\n<color=#ff81f7>ERROR: MASTUBATE #2 NOT RESPONDING</color>\r\n<color=white>WARNING: MOLEST SYSTEMS INOPERABLE</color>\r\n<color=#ff81f7>ATTEMPTING RE-CUMMING</color>\r\n<color=#ff81f7>ERROR: SELF MASTURBATE NOT RESPONDING</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INITIATING GOONING PROTOCOL</color>\r\n<color=#ff81f7>ATTEMPTING CONNECTION WITH SEXY POSES MODULES</color>\r\n<color=#ff81f7>ERROR: AWWWW MY LEG #1 NOT RESPONDING</color>\r\n<color=#ff81f7>ERROR: AWWWW MY LEG #2 NOT RESPONDING</color>\r\n<color=white>WARNING: UNABLE TO SUSTAIN DICK FUNCTIONS</color>\r\n<color=#ff81f7>ERROR: VISUAL BADDIE IDENTIFIER</color>\r\n<color=#ff81f7>ERROR: LICK FUNCTION NOT RESPONDING</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=white>WARNING: UNABLE TO SUSTAIN THE ACT OF GOONING</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>-!- SHUTDOWN THE GOONING -!-</color>\r\n<color=#ff81f7>ERROR: NO BADDIE DETECTED ON INTERFACE, UNABLE TO COMPLETE TASK GOON</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>! CUMMING FAILURE !</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=#ff81f7>INSUFFICIENT CUM.</color>\r\n<color=white>WARNING: UNABLE TO  SUSTAIN BASIC DICK FUNCTIONS PROBLEM: ERECTILE DYSFUNCTION</color>\r\n<color=#ff81f7>-!- SHUTDOWN THE GOONER  -!-</color>\r\n<color=#ff81f7>-!- SHUTDOWN THE GOONER -!-</color>\r\n<color=#ff81f7>I WANT TO CUM.</color>\r\n<color=#ff81f7>I WANT TO CUM.</color>\r\n<color=#ff81f7>I WANT TO CUM.</color>";
				Log.LogInfo((object)"Successfully set custom death message.");
			}
			else
			{
				Log.LogError((object)"Could not find the TextMeshProUGUI component on the DeathSequence object.");
			}
		}
		else
		{
			Log.LogWarning((object)"Could not find a DeathSequence object in this scene.");
		}
	}
}

BepInEx/plugins/StyleAnnouncer/StyleAnnouncer.dll

Decompiled a month 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.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("StyleAnnouncer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("StyleAnnouncer")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("8448158b-f9d1-43df-8646-48d2e0a392b1")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace StyleAnnouncer;

[BepInPlugin("com.thehalfbunny.styleannouncer", "StyleAnnouncer", "1.0.1")]
[BepInProcess("ULTRAKILL.exe")]
public class StyleAnnouncerPlugin : BaseUnityPlugin
{
	public static ConfigEntry<bool> EnableSounds;

	public static ConfigEntry<bool> PlayOnDownrank;

	public static ConfigEntry<bool> PlayAlphabetical;

	public static ConfigEntry<float> Volume;

	public static StyleAnnouncerPlugin Instance { get; private set; }

	public ManualLogSource Logger => ((BaseUnityPlugin)this).Logger;

	private void Awake()
	{
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Expected O, but got Unknown
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Expected O, but got Unknown
		Instance = this;
		EnableSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("1. Geral", "Enable Rank Sounds", true, "Ativa ou desativa os sons de rank.");
		PlayOnDownrank = ((BaseUnityPlugin)this).Config.Bind<bool>("1. Geral", "Play on Downrank", false, "Se ativado, também toca sons quando seu rank diminui.");
		PlayAlphabetical = ((BaseUnityPlugin)this).Config.Bind<bool>("1. Geral", "Play Alphabetical", false, "Se ativado, toca os sons em ordem alfabética em vez de aleatória.");
		Volume = ((BaseUnityPlugin)this).Config.Bind<float>("1. Geral", "Volume", 1f, new ConfigDescription("Volume dos sons de rank (de 0.0 a 1.0)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
		SoundManager.ReloadSounds();
		Harmony val = new Harmony("com.thehalfbunny.styleannouncer");
		val.PatchAll();
		Logger.LogInfo((object)"StyleAnnouncer by thehalfbunny & Gemini has been loaded!");
	}
}
public static class SoundManager
{
	private class SoundCollection
	{
		private List<string> soundPaths = new List<string>();

		private int cursor = -1;

		public void Add(string path)
		{
			soundPaths.Add(path);
		}

		public void Clear()
		{
			soundPaths.Clear();
			cursor = -1;
		}

		public string GetNextSound()
		{
			if (soundPaths.Count == 0)
			{
				return null;
			}
			if (StyleAnnouncerPlugin.PlayAlphabetical.Value)
			{
				cursor = (cursor + 1) % soundPaths.Count;
				return soundPaths[cursor];
			}
			return soundPaths[Random.Range(0, soundPaths.Count)];
		}
	}

	private static readonly Dictionary<int, SoundCollection> UprankSounds;

	private static readonly Dictionary<int, SoundCollection> DownrankSounds;

	static SoundManager()
	{
		UprankSounds = new Dictionary<int, SoundCollection>();
		DownrankSounds = new Dictionary<int, SoundCollection>();
		for (int i = 0; i < 8; i++)
		{
			UprankSounds[i] = new SoundCollection();
			DownrankSounds[i] = new SoundCollection();
		}
	}

	public static void ReloadSounds()
	{
		foreach (SoundCollection value2 in UprankSounds.Values)
		{
			value2.Clear();
		}
		foreach (SoundCollection value3 in DownrankSounds.Values)
		{
			value3.Clear();
		}
		string path = Path.Combine(Path.GetDirectoryName(typeof(StyleAnnouncerPlugin).Assembly.Location), "sounds");
		if (!Directory.Exists(path))
		{
			Directory.CreateDirectory(path);
			StyleAnnouncerPlugin.Instance.Logger.LogWarning((object)"'sounds' folder created. Please add your audio files there.");
			return;
		}
		Dictionary<string, int> dictionary = new Dictionary<string, int>
		{
			{ "D", 0 },
			{ "C", 1 },
			{ "B", 2 },
			{ "A", 3 },
			{ "S", 4 },
			{ "SS", 5 },
			{ "SSS", 6 },
			{ "ULTR", 7 }
		};
		string[] files = Directory.GetFiles(path);
		foreach (string path2 in files)
		{
			string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path2);
			bool flag = fileNameWithoutExtension.StartsWith("downrank-");
			string key = (flag ? fileNameWithoutExtension.Substring(9) : fileNameWithoutExtension);
			if (dictionary.TryGetValue(key, out var value))
			{
				if (flag)
				{
					DownrankSounds[value].Add(path2);
				}
				else
				{
					UprankSounds[value].Add(path2);
				}
			}
		}
		StyleAnnouncerPlugin.Instance.Logger.LogInfo((object)"Sound files have been reloaded and categorized.");
	}

	public static string GetSoundPathForRank(int rankIndex, bool isAscending)
	{
		Dictionary<int, SoundCollection> dictionary = (isAscending ? UprankSounds : DownrankSounds);
		if (dictionary.ContainsKey(rankIndex))
		{
			return dictionary[rankIndex].GetNextSound();
		}
		return null;
	}
}
public class CustomSoundPlayer : MonoBehaviour
{
	[CompilerGenerated]
	private sealed class <PlaySoundRoutine>d__3 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public string path;

		public CustomSoundPlayer <>4__this;

		private AudioType <audioType>5__1;

		private string <extension>5__2;

		private UnityWebRequest <www>5__3;

		private AudioClip <clip>5__4;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <PlaySoundRoutine>d__3(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			int num = <>1__state;
			if (num == -3 || num == 1)
			{
				try
				{
				}
				finally
				{
					<>m__Finally1();
				}
			}
			<extension>5__2 = null;
			<www>5__3 = null;
			<clip>5__4 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Invalid comparison between Unknown and I4
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<audioType>5__1 = (AudioType)0;
					<extension>5__2 = Path.GetExtension(path).ToLower();
					if (<extension>5__2 == ".wav")
					{
						<audioType>5__1 = (AudioType)20;
					}
					else if (<extension>5__2 == ".ogg")
					{
						<audioType>5__1 = (AudioType)14;
					}
					else if (<extension>5__2 == ".mp3")
					{
						<audioType>5__1 = (AudioType)13;
					}
					<www>5__3 = UnityWebRequestMultimedia.GetAudioClip("file://" + path, <audioType>5__1);
					<>1__state = -3;
					<>2__current = <www>5__3.SendWebRequest();
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -3;
					if ((int)<www>5__3.result == 1)
					{
						<clip>5__4 = DownloadHandlerAudioClip.GetContent(<www>5__3);
						<>4__this.audioSource.volume = StyleAnnouncerPlugin.Volume.Value;
						<>4__this.audioSource.PlayOneShot(<clip>5__4);
						Object.Destroy((Object)(object)<clip>5__4, <clip>5__4.length + 0.5f);
						<clip>5__4 = null;
					}
					else
					{
						StyleAnnouncerPlugin.Instance.Logger.LogError((object)("Failed to load sound: " + <www>5__3.error));
					}
					<>m__Finally1();
					<www>5__3 = null;
					return false;
				}
			}
			catch
			{
				//try-fault
				((IDisposable)this).Dispose();
				throw;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		private void <>m__Finally1()
		{
			<>1__state = -1;
			if (<www>5__3 != null)
			{
				((IDisposable)<www>5__3).Dispose();
			}
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	private AudioSource audioSource;

	private void Awake()
	{
		audioSource = ((Component)this).gameObject.AddComponent<AudioSource>();
		audioSource.playOnAwake = false;
	}

	public void Play(string filePath)
	{
		if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
		{
			((MonoBehaviour)this).StartCoroutine(PlaySoundRoutine(filePath));
		}
	}

	[IteratorStateMachine(typeof(<PlaySoundRoutine>d__3))]
	private IEnumerator PlaySoundRoutine(string path)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <PlaySoundRoutine>d__3(0)
		{
			<>4__this = this,
			path = path
		};
	}
}
[HarmonyPatch(typeof(StyleHUD))]
public static class StyleHUDPatch
{
	private static CustomSoundPlayer soundPlayer;

	private static int lastRank = -1;

	[HarmonyPostfix]
	[HarmonyPatch("Start")]
	public static void StartPostfix(StyleHUD __instance)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Expected O, but got Unknown
		if ((Object)(object)soundPlayer == (Object)null)
		{
			GameObject val = new GameObject("StyleAnnouncerSoundPlayer");
			val.transform.SetParent(((Component)__instance).transform);
			soundPlayer = val.AddComponent<CustomSoundPlayer>();
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch("AscendRank")]
	public static void AscendRankPostfix(StyleHUD __instance)
	{
		if (StyleAnnouncerPlugin.EnableSounds.Value)
		{
			string soundPathForRank = SoundManager.GetSoundPathForRank(__instance.rankIndex, isAscending: true);
			if (soundPathForRank != null)
			{
				soundPlayer.Play(soundPathForRank);
			}
			lastRank = __instance.rankIndex;
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch("DescendRank")]
	public static void DescendRankPostfix(StyleHUD __instance)
	{
		if (StyleAnnouncerPlugin.EnableSounds.Value && StyleAnnouncerPlugin.PlayOnDownrank.Value && lastRank != __instance.rankIndex)
		{
			string soundPathForRank = SoundManager.GetSoundPathForRank(__instance.rankIndex, isAscending: false);
			if (soundPathForRank != null)
			{
				soundPlayer.Play(soundPathForRank);
			}
			lastRank = __instance.rankIndex;
		}
	}
}

BepInEx/plugins/UKV1Voice/V1.dll

Decompiled a month 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.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("V1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("V1")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("5060f184-3919-4661-aae5-d41785337514")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace EnemyTaunter;

[BepInPlugin("com.thehalfbunny.enemytaunter", "EnemyTaunter", "2.0.0")]
public class VoiceModPlugin : BaseUnityPlugin
{
	[CompilerGenerated]
	private sealed class <LoadAllSoundsCoroutine>d__11 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public VoiceModPlugin <>4__this;

		private string <pluginFolder>5__1;

		private string <soundsRoot>5__2;

		private string <defaultPath>5__3;

		private string <exclusiveRoot>5__4;

		private string[] <>s__5;

		private int <>s__6;

		private string <file>5__7;

		private string[] <>s__8;

		private int <>s__9;

		private string <dir>5__10;

		private string <enemyKey>5__11;

		private string[] <>s__12;

		private int <>s__13;

		private string <file>5__14;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <LoadAllSoundsCoroutine>d__11(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<pluginFolder>5__1 = null;
			<soundsRoot>5__2 = null;
			<defaultPath>5__3 = null;
			<exclusiveRoot>5__4 = null;
			<>s__5 = null;
			<file>5__7 = null;
			<>s__8 = null;
			<dir>5__10 = null;
			<enemyKey>5__11 = null;
			<>s__12 = null;
			<file>5__14 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<pluginFolder>5__1 = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
				<soundsRoot>5__2 = Path.Combine(<pluginFolder>5__1, "sounds");
				<defaultPath>5__3 = Path.Combine(<soundsRoot>5__2, "default");
				<exclusiveRoot>5__4 = Path.Combine(<soundsRoot>5__2, "exclusive");
				if (Directory.Exists(<defaultPath>5__3))
				{
					((BaseUnityPlugin)<>4__this).Logger.LogInfo((object)"Loading default sounds...");
					<>s__5 = Directory.GetFiles(<defaultPath>5__3, "*.wav");
					<>s__6 = 0;
					goto IL_0132;
				}
				((BaseUnityPlugin)<>4__this).Logger.LogWarning((object)"No 'default' sounds folder found in 'sounds/default'");
				goto IL_0164;
			case 1:
				<>1__state = -1;
				<file>5__7 = null;
				<>s__6++;
				goto IL_0132;
			case 2:
				{
					<>1__state = -1;
					<file>5__14 = null;
					<>s__13++;
					goto IL_0298;
				}
				IL_0164:
				if (Directory.Exists(<exclusiveRoot>5__4))
				{
					((BaseUnityPlugin)<>4__this).Logger.LogInfo((object)"Loading exclusive sounds...");
					<>s__8 = Directory.GetDirectories(<exclusiveRoot>5__4);
					<>s__9 = 0;
					goto IL_02cc;
				}
				((BaseUnityPlugin)<>4__this).Logger.LogWarning((object)"No 'exclusive' sounds folder found in 'sounds/exclusive'");
				break;
				IL_0132:
				if (<>s__6 < <>s__5.Length)
				{
					<file>5__7 = <>s__5[<>s__6];
					<>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.LoadClipCoroutine(<file>5__7, DefaultKillSounds));
					<>1__state = 1;
					return true;
				}
				<>s__5 = null;
				goto IL_0164;
				IL_02cc:
				if (<>s__9 < <>s__8.Length)
				{
					<dir>5__10 = <>s__8[<>s__9];
					<enemyKey>5__11 = Path.GetFileName(<dir>5__10).ToLower();
					ExclusiveKillSounds[<enemyKey>5__11] = new List<AudioClip>();
					((BaseUnityPlugin)<>4__this).Logger.LogInfo((object)("Found exclusive folder for enemy: " + <enemyKey>5__11));
					<>s__12 = Directory.GetFiles(<dir>5__10, "*.wav");
					<>s__13 = 0;
					goto IL_0298;
				}
				<>s__8 = null;
				break;
				IL_0298:
				if (<>s__13 < <>s__12.Length)
				{
					<file>5__14 = <>s__12[<>s__13];
					<>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.LoadClipCoroutine(<file>5__14, ExclusiveKillSounds[<enemyKey>5__11]));
					<>1__state = 2;
					return true;
				}
				<>s__12 = null;
				<enemyKey>5__11 = null;
				<dir>5__10 = null;
				<>s__9++;
				goto IL_02cc;
			}
			((BaseUnityPlugin)<>4__this).Logger.LogInfo((object)"Finished loading all sounds.");
			return false;
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	[CompilerGenerated]
	private sealed class <LoadClipCoroutine>d__12 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public string filePath;

		public List<AudioClip> targetList;

		public VoiceModPlugin <>4__this;

		private UnityWebRequest <www>5__1;

		private AudioClip <clip>5__2;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <LoadClipCoroutine>d__12(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			int num = <>1__state;
			if (num == -3 || num == 1)
			{
				try
				{
				}
				finally
				{
					<>m__Finally1();
				}
			}
			<www>5__1 = null;
			<clip>5__2 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Invalid comparison between Unknown and I4
			try
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<www>5__1 = UnityWebRequestMultimedia.GetAudioClip("file://" + filePath, (AudioType)20);
					<>1__state = -3;
					<>2__current = <www>5__1.SendWebRequest();
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -3;
					if ((int)<www>5__1.result == 1)
					{
						<clip>5__2 = DownloadHandlerAudioClip.GetContent(<www>5__1);
						if ((Object)(object)<clip>5__2 != (Object)null)
						{
							((Object)<clip>5__2).name = Path.GetFileNameWithoutExtension(filePath);
							targetList.Add(<clip>5__2);
						}
						<clip>5__2 = null;
					}
					else
					{
						((BaseUnityPlugin)<>4__this).Logger.LogError((object)("Failed to load audio clip at path: " + filePath + "\nError: " + <www>5__1.error));
					}
					<>m__Finally1();
					<www>5__1 = null;
					return false;
				}
			}
			catch
			{
				//try-fault
				((IDisposable)this).Dispose();
				throw;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		private void <>m__Finally1()
		{
			<>1__state = -1;
			if (<www>5__1 != null)
			{
				((IDisposable)<www>5__1).Dispose();
			}
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	internal static readonly List<AudioClip> DefaultKillSounds = new List<AudioClip>();

	internal static readonly Dictionary<string, List<AudioClip>> ExclusiveKillSounds = new Dictionary<string, List<AudioClip>>();

	public static ConfigEntry<float> Volume;

	public static ConfigEntry<int> Chance;

	public static ConfigEntry<bool> EnableExclusiveChance;

	public static ConfigEntry<int> ExclusiveChance;

	public static VoiceModPlugin Instance { get; private set; }

	private void Awake()
	{
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Expected O, but got Unknown
		Instance = this;
		Volume = ((BaseUnityPlugin)this).Config.Bind<float>("1. Geral", "Volume", 1f, "Volume das vozes (de 0.0 a 1.0)");
		Chance = ((BaseUnityPlugin)this).Config.Bind<int>("1. Geral", "Chance", 1, "Chance de tocar uma voz (ex: 4 = 1/4 de chance, 1 = sempre)");
		EnableExclusiveChance = ((BaseUnityPlugin)this).Config.Bind<bool>("2. Exclusivo", "Ativar Chance Exclusiva", false, "Se ativado, usa a chance abaixo para sons exclusivos de inimigos.");
		ExclusiveChance = ((BaseUnityPlugin)this).Config.Bind<int>("2. Exclusivo", "Chance Exclusiva", 4, "Chance de tocar uma voz exclusiva, se existir para o inimigo (ex: 4 = 1/4 de chance)");
		Harmony val = new Harmony("com.thehalfbunny.enemytaunter");
		val.PatchAll();
		((MonoBehaviour)this).StartCoroutine(LoadAllSoundsCoroutine());
		((BaseUnityPlugin)this).Logger.LogInfo((object)"EnemyTaunter (BepInEx Config Version) has been loaded and patched!");
	}

	[IteratorStateMachine(typeof(<LoadAllSoundsCoroutine>d__11))]
	private IEnumerator LoadAllSoundsCoroutine()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <LoadAllSoundsCoroutine>d__11(0)
		{
			<>4__this = this
		};
	}

	[IteratorStateMachine(typeof(<LoadClipCoroutine>d__12))]
	private IEnumerator LoadClipCoroutine(string filePath, List<AudioClip> targetList)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <LoadClipCoroutine>d__12(0)
		{
			<>4__this = this,
			filePath = filePath,
			targetList = targetList
		};
	}
}
[HarmonyPatch(typeof(EnemyIdentifier), "Death", new Type[] { typeof(bool) })]
public static class EnemyDeathPatch
{
	private static float lastPlayTime = 0f;

	private static float cooldownSeconds = 1f;

	public static void Prefix(EnemyIdentifier __instance)
	{
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)__instance == (Object)null) && !__instance.dead && Random.Range(1, VoiceModPlugin.Chance.Value + 1) == 1 && !(Time.time < lastPlayTime + cooldownSeconds))
		{
			AudioClip clipForEnemy = GetClipForEnemy(__instance.enemyType);
			if (!((Object)(object)clipForEnemy == (Object)null))
			{
				lastPlayTime = Time.time;
				cooldownSeconds = clipForEnemy.length + 0.1f;
				PlaySound(clipForEnemy);
			}
		}
	}

	private static AudioClip GetClipForEnemy(EnemyType enemyType)
	{
		string key = ((object)(EnemyType)(ref enemyType)).ToString().ToLower();
		if (VoiceModPlugin.EnableExclusiveChance.Value && VoiceModPlugin.ExclusiveKillSounds.TryGetValue(key, out var value) && value.Count > 0 && Random.Range(1, VoiceModPlugin.ExclusiveChance.Value + 1) == 1)
		{
			return value[Random.Range(0, value.Count)];
		}
		if (VoiceModPlugin.DefaultKillSounds.Count > 0)
		{
			return VoiceModPlugin.DefaultKillSounds[Random.Range(0, VoiceModPlugin.DefaultKillSounds.Count)];
		}
		return null;
	}

	private static void PlaySound(AudioClip clip)
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Expected O, but got Unknown
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)Camera.main == (Object)null))
		{
			GameObject val = new GameObject("TempAudio_" + ((Object)clip).name);
			val.transform.position = ((Component)Camera.main).transform.position;
			AudioSource val2 = val.AddComponent<AudioSource>();
			val2.clip = clip;
			val2.spatialBlend = 0f;
			val2.volume = VoiceModPlugin.Volume.Value;
			val2.Play();
			Object.Destroy((Object)(object)val, clip.length + 0.2f);
		}
	}
}

BepInEx/plugins/UltrakULL/UltrakULL.dll

Decompiled a month ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Reflection;
using System.Reflection.Emit;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Discord;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Sandbox;
using SettingsMenu.Components;
using TMPro;
using UltrakULL.Harmony_Patches;
using UltrakULL.audio;
using UltrakULL.json;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("UltrakULL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UltrakULL")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("a4a60eef-e5f3-4a77-b125-236fbf44cca4")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
}
[HarmonyPatch(typeof(IntroViolenceScreen))]
public static class IntroViolenceScreenPatch
{
	private static GameObject textObject1;

	private static GameObject textObject2;

	[HarmonyPatch("Start")]
	[HarmonyPostfix]
	private static void StartPatch(IntroViolenceScreen __instance)
	{
		Transform parent = ((Component)__instance).transform.parent;
		if (!((Object)(object)parent == (Object)null))
		{
			Transform val = parent.Find("Image");
			Transform val2 = parent.Find("ImageRed");
			if ((Object)(object)val != (Object)null)
			{
				ReplaceImage(val, "violence1.png");
				textObject1 = AddTextToImage(val, LanguageManager.CurrentLanguage.misc.violenceScreenText1, 0f);
			}
			if ((Object)(object)val2 != (Object)null)
			{
				ReplaceImage(val2, "violence2.png");
				textObject2 = AddTextToImage(val2, LanguageManager.CurrentLanguage.misc.violenceScreenText2, 0f);
			}
		}
	}

	[HarmonyPatch("Update")]
	[HarmonyPostfix]
	private static void UpdatePatch(IntroViolenceScreen __instance)
	{
		//IL_0071: 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_008c: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)textObject1 == (Object)null) && !((Object)(object)textObject2 == (Object)null))
		{
			float value = Traverse.Create((object)__instance).Field("fadeAmount").GetValue<float>();
			float value2 = Traverse.Create((object)__instance).Field("targetAlpha").GetValue<float>();
			bool value3 = Traverse.Create((object)__instance).Field("fade").GetValue<bool>();
			Color color = ((Graphic)Traverse.Create((object)__instance).Field("red").GetValue<Image>()).color;
			if (value3 && value2 == 1f)
			{
				UpdateTextAlpha(textObject1, value);
			}
			if (color.a > 0f)
			{
				UpdateTextAlpha(textObject1, 0f);
				UpdateTextAlpha(textObject2, value);
			}
		}
	}

	private static GameObject AddTextToImage(Transform imageTransform, string text, float startAlpha)
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Expected O, but got Unknown
		GameObject val = new GameObject("Text");
		val.transform.SetParent(imageTransform, false);
		TextMeshProUGUI __instance = val.AddComponent<TextMeshProUGUI>();
		((TMP_Text)__instance).text = text;
		((TMP_Text)__instance).enableAutoSizing = true;
		((TMP_Text)__instance).fontSizeMin = 10f;
		((TMP_Text)__instance).fontSizeMax = 100f;
		((TMP_Text)__instance).alignment = (TextAlignmentOptions)514;
		((TMP_Text)__instance).overflowMode = (TextOverflowModes)0;
		((Graphic)__instance).color = new Color(1f, 1f, 1f, startAlpha);
		((TMP_Text)__instance).enableWordWrapping = false;
		TextMeshProFontSwap.SwapTMPFont(ref __instance);
		RectTransform component = val.GetComponent<RectTransform>();
		component.anchorMin = new Vector2(0.5f, 0.5f);
		component.anchorMax = new Vector2(0.5f, 0.5f);
		component.pivot = new Vector2(0.5f, 0.5f);
		component.anchoredPosition = Vector2.zero;
		float num = Mathf.Min((float)Screen.width * 0.9f, 800f);
		float num2 = Mathf.Min((float)Screen.height * 0.45f, 300f);
		component.sizeDelta = new Vector2(num, num2);
		return val;
	}

	private static void UpdateTextAlpha(GameObject textObj, float alpha)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		TextMeshProUGUI component = textObj.GetComponent<TextMeshProUGUI>();
		((Graphic)component).color = new Color(((Graphic)component).color.r, ((Graphic)component).color.g, ((Graphic)component).color.b, alpha);
	}

	private static void ReplaceImage(Transform imageTransform, string ImageName)
	{
		Image component = ((Component)imageTransform).GetComponent<Image>();
		if (!((Object)(object)component == (Object)null))
		{
			Sprite val = LoadPNG(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\IntroViolenceScreen", ImageName));
			if ((Object)(object)val != (Object)null)
			{
				component.sprite = val;
			}
		}
	}

	private static Sprite LoadPNG(string filePath)
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Expected O, but got Unknown
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		if (!File.Exists(filePath))
		{
			return null;
		}
		byte[] array = File.ReadAllBytes(filePath);
		Texture2D val = new Texture2D(2, 2);
		if (ImageConversion.LoadImage(val, array))
		{
			return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
		}
		return null;
	}
}
namespace UltrakULL
{
	public static class Act1
	{
		private static void PatchHellmap(ref GameObject canvasObj)
		{
			try
			{
				GameObject gameObjectChild = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Hellmap"), "Hellmap Act 1");
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text"))).text = LanguageManager.CurrentLanguage.misc.hellmap_limbo;
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text (1)"))).text = LanguageManager.CurrentLanguage.misc.hellmap_lust;
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text (2)"))).text = LanguageManager.CurrentLanguage.misc.hellmap_gluttony;
			}
			catch (Exception ex)
			{
				Logging.Warn("Failed to patch Act 1 hellmap.");
				Logging.Warn(ex.ToString());
			}
		}

		public static void PatchAct1(ref GameObject canvasObj)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			string levelName = Act1Strings.GetLevelName();
			string levelChallenge = Act1Strings.GetLevelChallenge(currentSceneName);
			PatchHellmap(ref canvasObj);
			CommonFunctions.PatchResultsScreen(levelName, levelChallenge);
			if (currentSceneName.Contains("2-1"))
			{
				Transform transform = CommonFunctions.GetGameObjectChild(CommonFunctions.GetInactiveRootObject("3-4 - Outdoors Arenas"), "3-4 Stuff").transform;
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(((Component)transform.Find("Crane (Moveable)")).gameObject, "Cube (19)"), "Cube"), "UsableScreen New"), "InteractiveScreen"), "Canvas"), "Background"), "Text (TMP) (1)"))).text = LanguageManager.CurrentLanguage.act1.act1_lustFirst_crane;
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(((Component)transform.Find("UsableScreen New")).gameObject, "InteractiveScreen"), "Canvas"), "Background"), "InteractiveScreen Button"), "Text (TMP)"))).text = LanguageManager.CurrentLanguage.act1.act1_lustFirst_elevator;
			}
		}
	}
	public static class EncoreStrings
	{
		public static string GetLevelChallenge(string currentLevel)
		{
			return "There are no Challenges for this level.";
		}

		public static string GetLevelName()
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			if (!(currentSceneName == "Level 0-E"))
			{
				if (currentSceneName == "Level 1-E")
				{
					return "1-E - " + LanguageManager.CurrentLanguage.levelNames.levelName_encoreLimbo;
				}
				Logging.Warn("Unknown level name: " + currentSceneName);
				return currentSceneName;
			}
			return "0-E - " + LanguageManager.CurrentLanguage.levelNames.levelName_encorePrelude;
		}

		private static string Level0E(string message, string message2)
		{
			if ((message + message2).Contains("RADIANT"))
			{
				return LanguageManager.CurrentLanguage.encore.encorePrelude_aboutRadiantEnemies;
			}
			return "Unimplemented string";
		}

		public static string GetMessage(string message, string message2, string input)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			_ = message + message2;
			if (currentSceneName == "Level 0-E")
			{
				return Level0E(message, message2);
			}
			Logging.Warn("Unknown Encore HUD-message string in " + currentSceneName + ": \n" + message + message2);
			return "Unimplemented string";
		}
	}
	public static class Act1Strings
	{
		private static string Level11(string message, string message2, string input)
		{
			string text = message + message2;
			if (text.Contains("ITEMS"))
			{
				CommonFunctions.PreviousHudMessage = LanguageManager.CurrentLanguage.act1.act1_limboFirst_items1 + " '<color=orange>" + input + "'</color> " + LanguageManager.CurrentLanguage.act1.act1_limboFirst_items2;
				return LanguageManager.CurrentLanguage.act1.act1_limboFirst_items1 + " '<color=orange>" + input + "'</color> " + LanguageManager.CurrentLanguage.act1.act1_limboFirst_items2;
			}
			if (text.Contains("NAILGUN"))
			{
				CommonFunctions.PreviousHudMessage = LanguageManager.CurrentLanguage.act1.act1_limboFirst_nailgun1 + " '<color=orange>" + input + "'</color> " + LanguageManager.CurrentLanguage.act1.act1_limboFirst_nailgun2 + "\n" + LanguageManager.CurrentLanguage.act1.act1_limboFirst_nailgun3;
				return LanguageManager.CurrentLanguage.act1.act1_limboFirst_nailgun1 + " '<color=orange>" + input + "'</color> " + LanguageManager.CurrentLanguage.act1.act1_limboFirst_nailgun2 + "\n" + LanguageManager.CurrentLanguage.act1.act1_limboFirst_nailgun3;
			}
			return CommonFunctions.PreviousHudMessage;
		}

		private static string Level12(string message, string message2)
		{
			if ((message + message2).Contains("BLUE"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboSecond_blueAttack;
			}
			return "Unimplemented string";
		}

		private static string Level13(string message, string message2)
		{
			if ((message + message2).Contains("SPLIT"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboThird_splitDoor1 + "\n" + LanguageManager.CurrentLanguage.act1.act1_limboThird_splitDoor2;
			}
			return "Unimplemented string";
		}

		private static string Level14(string message, string message2, string input)
		{
			string text = message + message2;
			if (text.Contains("PICK"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboFourth_book;
			}
			if (text.Contains("Hank"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboFourth_hank1 + "\n" + LanguageManager.CurrentLanguage.act1.act1_limboFourth_hank2;
			}
			if (message.Contains("versions"))
			{
				return LanguageManager.CurrentLanguage.misc.hud_alternateVersion;
			}
			if (text.Contains("ALTERNATE REVOLVER"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboFourth_alternateRevolver;
			}
			if (text.Contains("EQUIPPED"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboFourth_newArm + " '<color=orange>" + input + "'</color>.";
			}
			return "Unimplemented string";
		}

		private static string Level1Secret(string message, string message2)
		{
			if ((message + message2).Contains("LOOKS"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_limboSecret_noclipSkip;
			}
			return "Unimplemented string";
		}

		private static string Level21(string message, string message2, string input)
		{
			string text = message + message2;
			if (text.Contains("KNUCKLE"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_lustFirst_knuckleblaster1 + " '<color=orange>" + input + "</color>' " + LanguageManager.CurrentLanguage.act1.act1_lustFirst_knuckleblaster2;
			}
			if (text.Contains("DASH"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_lustFirst_dashJump;
			}
			return "Unimplemented string";
		}

		private static string Level22(string message, string message2, string input)
		{
			string text = message + message2;
			if (text.Contains("FEEDBACKER"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_lustSecond_feedbacker1 + "\n" + LanguageManager.CurrentLanguage.act1.act1_lustSecond_feedbacker2 + " '<color=orange>" + input + "</color>'.";
			}
			if (text.Contains("RAILCANNON"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_lustSecond_railcannon;
			}
			if (text.Contains("CHECKPOINTS"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_lustSecond_checkPoints;
			}
			return "Unimplemented string";
		}

		private static string Level23(string message, string message2)
		{
			if ((message + message2).Contains("water"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_lustThird_water;
			}
			return "Unimplemented string";
		}

		private static string Level24(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		private static string Level2Secret(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		private static string Level31(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		private static string Level32(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		public static string GetMessage(string message, string message2, string input)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			if ((message + message2).Contains("mechanism"))
			{
				return LanguageManager.CurrentLanguage.act1.act1_secret;
			}
			return currentSceneName switch
			{
				"Level 1-1" => Level11(message, message2, input), 
				"Level 1-2" => Level12(message, message2), 
				"Level 1-3" => Level13(message, message2), 
				"Level 1-4" => Level14(message, message2, input), 
				"Level 1-S" => Level1Secret(message, message2), 
				"Level 2-1" => Level21(message, message2, input), 
				"Level 2-2" => Level22(message, message2, input), 
				"Level 2-3" => Level23(message, message2), 
				"Level 2-4" => Level24(message, message2), 
				"Level 2-S" => Level2Secret(message, message2), 
				"Level 3-1" => Level31(message, message2), 
				"Level 3-2" => Level32(message, message2), 
				_ => "Unimplemented string", 
			};
		}

		public static string GetLevelChallenge(string currentLevel)
		{
			return currentLevel switch
			{
				"Level 1-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_limboFirst, 
				"Level 1-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_limboSecond, 
				"Level 1-3" => LanguageManager.CurrentLanguage.levelChallenges.challenges_limboThird, 
				"Level 1-4" => LanguageManager.CurrentLanguage.levelChallenges.challenges_limboFourth, 
				"Level 2-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_lustFirst, 
				"Level 2-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_lustSecond, 
				"Level 2-3" => LanguageManager.CurrentLanguage.levelChallenges.challenges_lustThird, 
				"Level 2-4" => LanguageManager.CurrentLanguage.levelChallenges.challenges_lustFourth, 
				"Level 3-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_gluttonyFirst, 
				"Level 3-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_gluttonySecond, 
				_ => "Unknown challenge description", 
			};
		}

		public static string GetLevelName()
		{
			return CommonFunctions.GetCurrentSceneName() switch
			{
				"Level 1-1" => "1-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_limboFirst, 
				"Level 1-2" => "1-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_limboSecond, 
				"Level 1-3" => "1-3 - " + LanguageManager.CurrentLanguage.levelNames.levelName_limboThird, 
				"Level 1-4" => "1-4 - " + LanguageManager.CurrentLanguage.levelNames.levelName_limboFourth, 
				"Level 1-S" => "1-S - " + LanguageManager.CurrentLanguage.levelNames.levelName_limboSecret, 
				"Level 2-1" => "2-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_lustFirst, 
				"Level 2-2" => "2-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_lustSecond, 
				"Level 2-3" => "2-3 - " + LanguageManager.CurrentLanguage.levelNames.levelName_lustThird, 
				"Level 2-4" => "2-4 - " + LanguageManager.CurrentLanguage.levelNames.levelName_lustFourth, 
				"Level 2-S" => "2-S - " + LanguageManager.CurrentLanguage.levelNames.levelName_lustSecret, 
				"Level 3-1" => "3-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_gluttonyFirst, 
				"Level 3-2" => "3-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_gluttonySecond, 
				_ => "Unknown level name", 
			};
		}
	}
	public static class Act1Vn
	{
		public static void PatchPrompts(ref GameObject canvasObj)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Expected O, but got Unknown
			GameObject gameObjectChild = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "PowerUpVignette"), "Panel"), "Aspect Ratio Mask");
			GameObject gameObjectChild2 = CommonFunctions.GetGameObjectChild(gameObjectChild, "Fallen");
			List<GameObject> list = new List<GameObject>();
			foreach (Transform item in gameObjectChild2.transform)
			{
				Transform val = item;
				if (((Object)((Component)val).gameObject).name == "Choices Box")
				{
					list.Add(((Component)val).gameObject);
				}
			}
			GameObject parent = list[0];
			GameObject parent2 = list[1];
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(parent, "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenPromptFirst1;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(parent, "Button (B)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenPromptFirst2;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(parent, "Button (C)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenPromptFirst3;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(parent2, "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenPromptSecond1;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(parent2, "Button (B)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenPromptSecond2;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(parent2, "Button (C)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenPromptSecond3;
			GameObject gameObjectChild3 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Middle"), "Choices Box (1)");
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild3, "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_middlePrompt1;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild3, "Button (B)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_middlePrompt2;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild3, "Button (C)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_middlePrompt3;
			GameObject gameObjectChild4 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Middle"), "Choices Box (2)");
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild4, "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_middlePromptSecondRecklessness;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild4, "Button (B)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_middlePromptSecondWaiting;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild4, "Button (C)"), "Text")).text = "...Pourquoi sommes-nous ici?";
			GameObject gameObjectChild5 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Recklessness"), "Choices Box");
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild5, "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessPrompt1;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild5, "Button (B)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessPrompt2;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Recklessness"), "Choices Box (1)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessPrompt3;
			GameObject gameObjectChild6 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Waiting"), "Choices Box");
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild6, "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingPromptFirst1;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild6, "Button (B)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingPromptFirst2;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Waiting"), "Choices Box (1)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingPromptThird;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (2)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt1;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (3)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt2;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (4)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt3;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (5)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt4;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (6)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt5;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (7)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt6;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (8)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt7;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (9)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt8;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (10)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt9;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (11)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt10;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (12)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt11;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (13)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt12;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (14)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt13;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (16)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt14;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (17)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt15;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (18)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt16;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (19)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt17;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (20)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt18;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (21)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt19;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (22)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt20;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (25)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt21;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (23)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt22;
			CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Nihilism"), "Choices Box (24)"), "Button (A)"), "Text")).text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilismPrompt23;
			GameObject gameObjectChild7 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Conclusion"), "Choices Box (2)");
			Text textfromGameObject = CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild7, "Button (A)"), "Text"));
			Text textfromGameObject2 = CommonFunctions.GetTextfromGameObject(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild7, "Button (B)"), "Text"));
			textfromGameObject.text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionPrompt1;
			textfromGameObject2.text = LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionPrompt2;
		}

		public static string GetNextString(string inputString)
		{
			if (inputString.Contains("Heavy steps"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst3 + "▼\n\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst4 + "▼\n\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst5 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst6 + "▼\n\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introFirst7 + "▼\n";
			}
			if (inputString.Contains("I bit down"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond3 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond4 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond5 + "▼}\n\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond6 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond7 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_introSecond8 + "▼";
			}
			if (inputString.Contains("Oof ow"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallen1 + "▼";
			}
			if (inputString.Contains("I'm just someone"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenResponseFirst + "▼";
			}
			if (inputString.Contains("Well I just got"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenResponseSecond + "▼";
			}
			if (inputString.Contains("Oh great"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenResponseThird1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenResponseThird2 + "▼";
			}
			if (inputString.Contains("Alright, alright"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenResponseFourth + "▼";
			}
			if (inputString.Contains("UGH?"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_fallenResponseFifth + "▼";
			}
			if (inputString.Contains("*Sigh*"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_kindFirst1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_kindFirst2 + "▼";
			}
			if (inputString.Contains("Though, by the"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_kindSecond + "▼";
			}
			if (inputString.Contains("So how about you"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_kindThird + "▼";
			}
			if (inputString.Contains("Listen up,"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_rudeFirst1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_rudeFirst2 + "▼";
			}
			if (inputString.Contains("By the looks of it"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_rudeSecond + "▼";
			}
			if (inputString.Contains("So I'll forgive you"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_rudeThird + "▼";
			}
			if (inputString.Contains("UGH!"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseFirst1 + "▼";
			}
			if (inputString.Contains("Though in retrospect"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseFirst2 + "▼";
			}
			if (inputString.Contains("Oh well,"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseFirst3 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseFirst4 + "▼\n";
			}
			if (inputString.Contains("I'm Mirage."))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseFirst5 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseFirst6 + "▼";
			}
			if (inputString.Contains("WHAT?"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseSecond1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseSecond2 + "▼";
			}
			if (inputString.Contains("If you DON'T"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseSecond3 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseSecond4 + "▼";
			}
			if (inputString.Contains("Bullshit!"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseThird1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseThird2 + "▼";
			}
			if (inputString.Contains("Though considering"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_middleResponseThird3 + "▼";
			}
			if (inputString.Contains("Wandering around like"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingFirst + "▼";
			}
			if (inputString.Contains("Since we were"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingSecond + "▼";
			}
			if (inputString.Contains("Therefore,"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingThird1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingThird2 + "▼";
			}
			if (inputString.Contains("Suit yourself"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseFirst1 + "▼\n";
			}
			if (inputString.Contains("Couldn't care less"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseFirst2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseFirst3 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseFirst4 + "▼";
			}
			if (inputString.Contains("Hah!"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseSecond1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseSecond2 + "▼";
			}
			if (inputString.Contains("Because nothing"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseThird1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseThird2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_waitingResponseThird3 + "▼";
			}
			if (inputString.Contains("Yeah?"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessFirst + "▼";
			}
			if (inputString.Contains("But yes,"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessSecond1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessSecond2 + "▼";
			}
			if (inputString.Contains("What's the point of making"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseFirst1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseFirst2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseFirst3 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseFirst4 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseFirst5 + "▼\n";
			}
			if (inputString.Contains("Don't flatter yourself"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseSecond1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseSecond2 + "▼";
			}
			if (inputString.Contains("Everything."))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_recklessnessResponseThird + "▼";
			}
			if (inputString.Contains("I mean really"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism1 + "▼";
			}
			if (inputString.Contains("The human mind,"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism2 + "▼";
			}
			if (inputString.Contains("We can only ever"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism3 + "▼";
			}
			if (inputString.Contains("Death is"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism4 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism5 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism6 + "▼";
			}
			if (inputString.Contains("It doesn't matter"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism7 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism8 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism9 + "▼";
			}
			if (inputString.Contains("Human intelligence"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism10 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism11 + "▼";
			}
			if (inputString.Contains("Our intelligence"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism12 + "▼";
			}
			if (inputString.Contains("It's an over-extension"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism13 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism14 + "▼\n";
			}
			if (inputString.Contains("Much like the Irish"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism15 + "▼";
			}
			if (inputString.Contains("The human mind is an"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism16 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism17 + "▼\n";
			}
			if (inputString.Contains("Existential dread"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism18 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism19 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism20 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism21 + "▼";
			}
			if (inputString.Contains("We are unable"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism22 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism23 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism24 + "▼";
			}
			if (inputString.Contains("We create distractions"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism25 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism26 + "▼";
			}
			if (inputString.Contains("We sublimate it"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism27 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism28 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism29 + "▼";
			}
			if (inputString.Contains("But these ways"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism30 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism31 + "▼";
			}
			if (inputString.Contains("In the end"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism32 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism33 + "▼";
			}
			if (inputString.Contains("Huh?"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism34 + "▼";
			}
			if (inputString.Contains("How could it not be?"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism35 + "▼";
			}
			if (inputString.Contains("But still"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism36 + "▼";
			}
			if (inputString.Contains("I do understand"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism37 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism38 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism39 + "▼";
			}
			if (inputString.Contains("I see."))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism40 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism41 + "▼";
			}
			if (inputString.Contains("I understand it logically"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism42 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_nihilism43 + "▼";
			}
			if (inputString.Contains("Well I'll be damned"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion1 + "▼";
			}
			if (inputString.Contains("Guess you got a good"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion3 + "▼";
			}
			if (inputString.Contains("Man..."))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion4 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion5 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion6 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion7 + "▼";
			}
			if (inputString.Contains("Thank you."))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion8 + "▼\n";
			}
			if (inputString.Contains("You've given me a lot"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion9 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion10 + "▼\n";
			}
			if (inputString.Contains("Say..."))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusion11 + "▼";
			}
			if (inputString.Contains("Oh, you sneaky"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionResponseFirst1 + "▼";
			}
			if (inputString.Contains("But alright"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionResponseFirst2 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionResponseFirst3 + "▼";
			}
			if (inputString.Contains("Alright, suit yourself"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionResponseSecond1 + "▼\n" + LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionResponseSecond2 + "▼";
			}
			if (inputString.Contains("See you around"))
			{
				return LanguageManager.CurrentLanguage.visualnovel.visualnovel_conclusionResponseSecond3 + "▼";
			}
			return inputString;
		}
	}
	public static class Act2
	{
		private static void PatchHellmap(ref GameObject canvasObj)
		{
			GameObject gameObjectChild = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Hellmap"), "Hellmap Act 2");
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text"))).text = LanguageManager.CurrentLanguage.misc.hellmap_greed;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text (1)"))).text = LanguageManager.CurrentLanguage.misc.hellmap_wrath;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text (2)"))).text = LanguageManager.CurrentLanguage.misc.hellmap_heresy;
		}

		public static void PatchAct2(ref GameObject canvasObj)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			string levelName = Act2Strings.GetLevelName();
			string levelChallenge = Act2Strings.GetLevelChallenge(currentSceneName);
			CommonFunctions.PatchResultsScreen(levelName, levelChallenge);
			PatchHellmap(ref canvasObj);
		}
	}
	public static class Act2Strings
	{
		private static string _previousMessage = "";

		private static string Level41(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		private static string Level42(string message, string message2)
		{
			if ((message + message2).Contains("BLEED"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedSecond_sand;
			}
			return "Unimplemented string";
		}

		private static string Level43(string message, string message2)
		{
			string text = message + message2;
			if (text.Contains("FILTH"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedThird_wallClip;
			}
			if (text.Contains("wicked"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedThird_troll1;
			}
			if (text.Contains("kidding"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedThird_troll2;
			}
			if (text.Contains("TOMB"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedThird_tombOfKings;
			}
			return "Unimplemented string";
		}

		private static string Level44(string message, string message2, string input)
		{
			string text = message + message2;
			if (text == "")
			{
				return _previousMessage;
			}
			if (message.Contains("versions"))
			{
				return LanguageManager.CurrentLanguage.misc.hud_alternateVersion;
			}
			if (text.Contains("ALTERNATE NAILGUN"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedFourth_alternateNailgun;
			}
			if (text.Contains("You're"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedFourth_v2;
			}
			if (text.Contains("Hold"))
			{
				_previousMessage = LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplash1 + " <color=orange>" + input + "</color> " + LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplash2;
				return LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplash1 + " <color=orange>" + input + "</color> " + LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplash2;
			}
			if (text.Contains("HEAVY"))
			{
				_previousMessage = LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplash3;
				return LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplash3;
			}
			if (text.Contains("HARD DAMAGE"))
			{
				_previousMessage = LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplashHardDamage1 + "\n" + LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplashHardDamage2;
				return LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplashHardDamage1 + "\n" + LanguageManager.CurrentLanguage.act2.act2_greedFourth_whiplashHardDamage2;
			}
			return "Unimplemented string";
		}

		private static string Level4Secret(string message, string message2, string input)
		{
			if ((message + message2).Contains("HOLD"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greedSecret_holdToJump1 + "<color=orange> " + input + " </color>" + LanguageManager.CurrentLanguage.act2.act2_greedSecret_holdToJump2;
			}
			return "Unimplemented string";
		}

		private static string Level51(string message, string message2)
		{
			string text = message + message2;
			if (text.Contains("HOOKPOINT"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathFirst_slingshot;
			}
			if (text.Contains("WHIPLASH"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathFirst_whiplashUnderwater;
			}
			if (text.Contains("SENTRIES"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathFirst_sentry;
			}
			if (text.Contains("drained"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathFirst_waterDrained;
			}
			return "Unimplemented string";
		}

		private static string Level52(string message, string message2)
		{
			string text = message + message2;
			if (text.Contains("JAKITO"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathSecond_jakito1;
			}
			if (text.Contains("THANK"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathSecond_jakito2;
			}
			if (text.Contains("NO"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathSecond_jakito3;
			}
			if (text.Contains("Hark"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathSecond_neptune;
			}
			if (text.Contains("IDOL"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathSecond_idol;
			}
			return "Unimplemented string";
		}

		private static string Level53(string message, string message2)
		{
			string text = message + message2;
			if (text.Contains("Indirect"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathThird_rocketLauncher;
			}
			if (text.Contains("FALLING"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathThird_rocketLauncherMidair;
			}
			if (text.Contains("Soldiers"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathThird_soldierBlock;
			}
			if (text.Contains("Hank"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_wrathThird_hank;
			}
			return "Unimplemented string";
		}

		private static string Level54(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		private static string Level5Secret(string message)
		{
			if (message.Contains("living"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_living;
			}
			if (message.Contains("Too small"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_tooSmall;
			}
			if (message.Contains("This bait"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_baitNotWork;
			}
			if (message.Contains("A fish took"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_baitTaken;
			}
			if (message.Contains("Fishing interrupted"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_interrupted;
			}
			if (message.Contains("Cooking failed"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_cookingFailed;
			}
			if (message.Contains("Nothing seems"))
			{
				return LanguageManager.CurrentLanguage.fishing.fish_noFishBiting;
			}
			return "Unimplemented string";
		}

		private static string Level61(string message, string message2)
		{
			if ((message + message2).Contains("A R M B O Y"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_heresyFirst_armboy;
			}
			return "Unimplemented string";
		}

		private static string Level62(string message, string message2)
		{
			_ = message + message2;
			return "Unimplemented string";
		}

		public static string GetMessage(string message, string message2, string input)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			if ((message + message2).Contains("opens"))
			{
				return LanguageManager.CurrentLanguage.act2.act2_greed_secretDoor;
			}
			return currentSceneName switch
			{
				"Level 4-1" => Level41(message, message2), 
				"Level 4-2" => Level42(message, message2), 
				"Level 4-3" => Level43(message, message2), 
				"Level 4-4" => Level44(message, message2, input), 
				"Level 4-S" => Level4Secret(message, message2, input), 
				"Level 5-1" => Level51(message, message2), 
				"Level 5-2" => Level52(message, message2), 
				"Level 5-3" => Level53(message, message2), 
				"Level 5-4" => Level54(message, message2), 
				"Level 5-S" => Level5Secret(message), 
				"Level 6-1" => Level61(message, message2), 
				"Level 6-2" => Level62(message, message2), 
				_ => "Unimplemented string", 
			};
		}

		public static string GetLevelChallenge(string currentLevel)
		{
			return currentLevel switch
			{
				"Level 4-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_greedFirst, 
				"Level 4-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_greedSecond, 
				"Level 4-3" => LanguageManager.CurrentLanguage.levelChallenges.challenges_greedThird, 
				"Level 4-4" => LanguageManager.CurrentLanguage.levelChallenges.challenges_greedFourth, 
				"Level 5-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_wrathFirst, 
				"Level 5-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_wrathSecond, 
				"Level 5-3" => LanguageManager.CurrentLanguage.levelChallenges.challenges_wrathThird, 
				"Level 5-4" => LanguageManager.CurrentLanguage.levelChallenges.challenges_wrathFourth, 
				"Level 6-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_heresyFirst, 
				"Level 6-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_heresySecond, 
				_ => "Unknown challenge description", 
			};
		}

		public static string GetLevelName()
		{
			return CommonFunctions.GetCurrentSceneName() switch
			{
				"Level 4-1" => "4-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_greedFirst, 
				"Level 4-2" => "4-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_greedSecond, 
				"Level 4-3" => "4-3 - " + LanguageManager.CurrentLanguage.levelNames.levelName_greedThird, 
				"Level 4-4" => "4-4 - " + LanguageManager.CurrentLanguage.levelNames.levelName_greedFourth, 
				"Level 5-1" => "5-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_wrathFirst, 
				"Level 5-2" => "5-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_wrathSecond, 
				"Level 5-3" => "5-3 - " + LanguageManager.CurrentLanguage.levelNames.levelName_wrathThird, 
				"Level 5-4" => "5-4 - " + LanguageManager.CurrentLanguage.levelNames.levelName_wrathFourth, 
				"Level 6-1" => "6-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_heresyFirst, 
				"Level 6-2" => "6-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_heresySecond, 
				_ => "Unknown level name", 
			};
		}
	}
	public static class Act3
	{
		private static void PatchHellmap(ref GameObject canvasObj)
		{
			GameObject gameObjectChild = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Hellmap"), "Hellmap Act 3");
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text"))).text = LanguageManager.CurrentLanguage.misc.hellmap_violence;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text (1)"))).text = LanguageManager.CurrentLanguage.misc.hellmap_fraud;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild, "Text (2)"))).text = LanguageManager.CurrentLanguage.misc.hellmap_treachery;
		}

		public static void PatchAct3(ref GameObject canvasObj)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			string levelName = Act3Strings.GetLevelName();
			string levelChallenge = Act3Strings.GetLevelChallenge(currentSceneName);
			CommonFunctions.PatchResultsScreen(levelName, levelChallenge);
			PatchHellmap(ref canvasObj);
			if (currentSceneName.Contains("7-2"))
			{
				GameObject gameObjectChild = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetInactiveRootObject("Other Interiors"), "9 - Tram Station"), "9 Stuff"), "9A"), "InteractiveScreenWithStand"), "InteractiveScreen"), "Canvas"), "Background");
				TextMeshProUGUI textMeshProUGUI = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "A"), "Opened"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI2 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "A"), "Closed"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI3 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "B"), "Opened"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI4 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "B"), "Closed"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI5 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "C"), "Opened"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI6 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "C"), "Closed"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI7 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "D"), "Opened"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI8 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "D"), "Closed"), "Text (TMP)"));
				((TMP_Text)textMeshProUGUI).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlOpen;
				((TMP_Text)textMeshProUGUI2).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlClosed;
				((TMP_Text)textMeshProUGUI3).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlOpen;
				((TMP_Text)textMeshProUGUI4).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlClosed;
				((TMP_Text)textMeshProUGUI5).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlOpen;
				((TMP_Text)textMeshProUGUI6).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlClosed;
				((TMP_Text)textMeshProUGUI7).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlOpen;
				((TMP_Text)textMeshProUGUI8).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_gateControlClosed;
				GameObject gameObjectChild2 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetInactiveRootObject("Outdoors"), "10 - Ambush Station"), "10 Nonstuff"), "InteractiveScreenWithStand"), "InteractiveScreen"), "Canvas"), "Background");
				TextMeshProUGUI textMeshProUGUI9 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild2, "Text (TMP) (1)"));
				TextMeshProUGUI textMeshProUGUI10 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild2, "Button (Open)"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI11 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild2, "Button (Closed)"), "Text (TMP)"));
				((TMP_Text)textMeshProUGUI9).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_cartGateControlTitle;
				((TMP_Text)textMeshProUGUI10).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_cartGateControlOpen;
				((TMP_Text)textMeshProUGUI11).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_cartGateControlClosed;
				GameObject gameObjectChild3 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetInactiveRootObject("Outdoors"), "11 - Bomb Station"), "11 Nonstuff"), "Bomb Mechanisms"), "InteractiveScreenWithStand"), "InteractiveScreen"), "Canvas");
				TextMeshProUGUI textMeshProUGUI12 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild3, "Text (TMP)"));
				TextMeshProUGUI[] componentsInChildren = CommonFunctions.GetGameObjectChild(gameObjectChild3, "UsableButtons").GetComponentsInChildren<TextMeshProUGUI>(true);
				TextMeshProUGUI textMeshProUGUI13 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild3, "UsableButtons"), "Error"));
				TextMeshProUGUI textMeshProUGUI14 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild3, "Done"));
				((TMP_Text)textMeshProUGUI12).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_payloadControlTitle;
				TextMeshProUGUI[] array = componentsInChildren;
				foreach (TextMeshProUGUI val in array)
				{
					if (((TMP_Text)val).text.Contains("LOWER"))
					{
						((TMP_Text)val).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_payloadControlLower;
					}
				}
				((TMP_Text)textMeshProUGUI13).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_payloadControlError1 + "<size=12>\n" + LanguageManager.CurrentLanguage.act3.act3_violenceSecond_payloadControlError2;
				((TMP_Text)textMeshProUGUI14).text = LanguageManager.CurrentLanguage.act3.act3_violenceSecond_payloadControlHell;
			}
			else if (currentSceneName.Contains("7-3"))
			{
				GameObject gameObjectChild4 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetInactiveRootObject("Outdoors Areas"), "8 - Upper Garden Battlefield"), "8 Stuff"), "Destructible Tunnel"), "InteractiveScreenWithStand"), "InteractiveScreen"), "Canvas"), "Background");
				TextMeshProUGUI textMeshProUGUI15 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild4, "PreActivation"), "Text (TMP) (1)"));
				TextMeshProUGUI textMeshProUGUI16 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild4, "PreActivation"), "InteractiveScreenButton"), "Text (TMP)"));
				TextMeshProUGUI textMeshProUGUI17 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild4, "PostActivation"), "Text (TMP) (1)"));
				((TMP_Text)textMeshProUGUI15).text = LanguageManager.CurrentLanguage.act3.act3_violenceThird_becomeMarked;
				((TMP_Text)textMeshProUGUI16).text = LanguageManager.CurrentLanguage.act3.act3_violenceThird_becomeMarkedButton;
				((TMP_Text)textMeshProUGUI17).text = LanguageManager.CurrentLanguage.act3.act3_violenceThird_starOfTheShow;
			}
			else if (currentSceneName.Contains("7-4"))
			{
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Warning"), "Text (TMP)"))).text = LanguageManager.CurrentLanguage.act3.act3_violenceFourth_floodingWarning;
				((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Countdown"), "Text (TMP)"))).text = LanguageManager.CurrentLanguage.act3.act3_violenceFourth_countdownTitle;
			}
			else if (currentSceneName.Contains("8-4"))
			{
				TextMeshProUGUI textMeshProUGUI18 = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "HeightMarkerParent"), "HeightMarker"), "Title"));
				string act3_fraudFourth_heightMarkerTitle = LanguageManager.CurrentLanguage.act3.act3_fraudFourth_heightMarkerTitle;
				((TMP_Text)textMeshProUGUI18).text = CommonFunctions.MakeVertical(act3_fraudFourth_heightMarkerTitle);
				((TMP_Text)textMeshProUGUI18).ForceMeshUpdate(false, false);
			}
		}
	}
	public static class Act3Strings
	{
		public static string Level71(string message, string message2)
		{
			if ((message + message2).Contains("A door opens."))
			{
				return LanguageManager.CurrentLanguage.act3.act3_violenceFirst_doorOpens;
			}
			return "Unimplemented string";
		}

		public static string Level72(string message, string message2, string input)
		{
			string text = message + message2;
			if (text.Contains("Swap arms with"))
			{
				return LanguageManager.CurrentLanguage.act3.act3_violenceSecond_guttermanTutorial + " '<color=orange>" + input + "</color>'";
			}
			if (text.Contains("You should probably"))
			{
				return LanguageManager.CurrentLanguage.act3.act3_violenceSecond_guttermanTutorialNoKB;
			}
			if (text.Contains("BIGGER BOOM"))
			{
				return "<color=red>" + LanguageManager.CurrentLanguage.act3.act3_violenceSecond_biggerBoom + "</color>";
			}
			if (message.Contains("versions"))
			{
				return LanguageManager.CurrentLanguage.misc.hud_alternateVersion;
			}
			if (text.Contains("ALTERNATE SHOTGUN"))
			{
				return LanguageManager.CurrentLanguage.act3.act3_violenceSecond_alternateShotgun;
			}
			return "Unimplemented string";
		}

		public static string Level73(string message, string message2)
		{
			string text = message + message2;
			if (text.Contains("YOU'RE NOT"))
			{
				return LanguageManager.CurrentLanguage.act3.act3_secretNotReady;
			}
			if (text.Contains("F E E D"))
			{
				return "<color=red>" + LanguageManager.CurrentLanguage.act3.act3_violenceThird_feedIt + "</color>";
			}
			return "Unimplemented string";
		}

		public static string Level74(string message, string message2)
		{
			if ((message + message2).Contains("MAGENTA"))
			{
				return LanguageManager.CurrentLanguage.act3.act3_violenceFourth_magentaAttack;
			}
			return "Unimplemented string";
		}

		public static string Level7Secret(string message, string message2)
		{
			return "Unimplemented string";
		}

		public static string Level81()
		{
			return "Unknown 8-1 string";
		}

		public static string Level82()
		{
			return "Unknown 8-2 string";
		}

		public static string Level83()
		{
			return "Unknown 8-3 string";
		}

		public static string Level84(string format = "", string message2 = "", string[] inputs = null)
		{
			string text = format + message2;
			if (text.Contains("WARNING:") && text.Contains("free fall"))
			{
				string text2 = ((inputs != null && inputs.Length != 0) ? inputs[0] : "");
				string text3 = ((inputs != null && inputs.Length > 1) ? inputs[1] : "");
				return LanguageManager.CurrentLanguage.act3.act3_fraudFourth_fallWarning_part1 + "\n" + LanguageManager.CurrentLanguage.act3.act3_fraudFourth_fallWarning_part2 + " <color=orange>" + text2 + "</color> " + LanguageManager.CurrentLanguage.act3.act3_fraudFourth_fallWarning_part3 + " <color=orange>" + text3 + "</color>.";
			}
			return "Unknown 8-4 string";
		}

		public static string Level8Secret()
		{
			return "Unknown 8-S string";
		}

		public static string Level91()
		{
			return "Unknown 9-1 string";
		}

		public static string Level92()
		{
			return "Unknown 9-2 string";
		}

		public static string GetMessage(string message, string message2, string input)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			_ = message + message2;
			return currentSceneName switch
			{
				"Level 7-1" => Level71(message, message2), 
				"Level 7-2" => Level72(message, message2, input), 
				"Level 7-3" => Level73(message, message2), 
				"Level 7-4" => Level74(message, message2), 
				"Level 7-S" => Level7Secret(message, message2), 
				"Level 8-1" => Level81(), 
				"Level 8-2" => Level82(), 
				"Level 8-3" => Level83(), 
				"Level 8-4" => Level84(), 
				"Level 8-S" => Level8Secret(), 
				"Level 9-1" => Level91(), 
				"Level 9-2" => Level92(), 
				_ => "Unimplemented string", 
			};
		}

		public static string GetLevelChallenge(string currentLevel)
		{
			return currentLevel switch
			{
				"Level 7-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_violenceFirst, 
				"Level 7-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_violenceSecond, 
				"Level 7-3" => LanguageManager.CurrentLanguage.levelChallenges.challenges_violenceThird, 
				"Level 7-4" => LanguageManager.CurrentLanguage.levelChallenges.challenges_violenceFourth, 
				"Level 8-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_fraudFirst, 
				"Level 8-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_fraudSecond, 
				"Level 8-3" => LanguageManager.CurrentLanguage.levelChallenges.challenges_fraudThird, 
				"Level 8-4" => LanguageManager.CurrentLanguage.levelChallenges.challenges_fraudFourth, 
				"Level 9-1" => LanguageManager.CurrentLanguage.levelChallenges.challenges_treacheryFirst, 
				"Level 9-2" => LanguageManager.CurrentLanguage.levelChallenges.challenges_treacherySecond, 
				_ => "Unknown challenge description", 
			};
		}

		public static string GetLevelName()
		{
			return CommonFunctions.GetCurrentSceneName() switch
			{
				"Level 7-1" => "7-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_violenceFirst, 
				"Level 7-2" => "7-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_violenceSecond, 
				"Level 7-3" => "7-3 - " + LanguageManager.CurrentLanguage.levelNames.levelName_violenceThird, 
				"Level 7-4" => "7-4 - " + LanguageManager.CurrentLanguage.levelNames.levelName_violenceFourth, 
				"Level 8-1" => "8-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_fraudFirst, 
				"Level 8-2" => "8-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_fraudSecond, 
				"Level 8-3" => "8-3 - " + LanguageManager.CurrentLanguage.levelNames.levelName_fraudThird, 
				"Level 8-4" => "8-4 - " + LanguageManager.CurrentLanguage.levelNames.levelName_fraudFourth, 
				"Level 9-1" => "9-1 - " + LanguageManager.CurrentLanguage.levelNames.levelName_treacheryFirst, 
				"Level 9-2" => "9-2 - " + LanguageManager.CurrentLanguage.levelNames.levelName_treacherySecond, 
				_ => "Unknown level name", 
			};
		}
	}
	public static class Books
	{
		public static string GetBookText(string originalText)
		{
			string currentSceneName = CommonFunctions.GetCurrentSceneName();
			switch (currentSceneName)
			{
			case "CreditsMuseum2":
				return DevMuseum.GetMuseumBook(originalText);
			case "Level 1-4":
				return "<b>" + LanguageManager.CurrentLanguage.books.books_limboFourth1 + "</b>\n\n<i>" + LanguageManager.CurrentLanguage.books.books_limboFourth2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_limboFourth3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_limboFourth4 + "</i>\n\n<b>" + LanguageManager.CurrentLanguage.books.books_limboFourth5 + "</b>";
			case "Level 2-2":
				return "<b>" + LanguageManager.CurrentLanguage.books.books_lustSecond1 + "</b>\n\n<i>" + LanguageManager.CurrentLanguage.books.books_lustSecond2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_lustSecond3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_lustSecond4 + "</i>\n\n<b>" + LanguageManager.CurrentLanguage.books.books_lustSecond5 + "</b>";
			case "Level 4-2":
				return "<b>" + LanguageManager.CurrentLanguage.books.books_greedSecond1 + "</b>\n\n<i>" + LanguageManager.CurrentLanguage.books.books_greedSecond2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_greedSecond3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_greedSecond4 + "\n\n" + LanguageManager.CurrentLanguage.books.books_greedSecond5 + "</i>\n\n<b>" + LanguageManager.CurrentLanguage.books.books_greedSecond6 + "</b>";
			case "Level 4-3":
				return LanguageManager.CurrentLanguage.books.books_greedThird1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_greedThird2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_greedThird3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_greedThird4;
			case "Level 5-2":
				return "<b>" + LanguageManager.CurrentLanguage.books.books_wrathSecond1 + "</b>\n\n<b>" + LanguageManager.CurrentLanguage.books.books_wrathSecond2 + "</b>\n\n" + LanguageManager.CurrentLanguage.books.books_wrathSecond3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_wrathSecond4 + "\n\n" + LanguageManager.CurrentLanguage.books.books_wrathSecond5 + "\n\n<i>" + LanguageManager.CurrentLanguage.books.books_wrathSecond6 + "</i>\n\n" + LanguageManager.CurrentLanguage.books.books_wrathSecond7 + "\n\n" + LanguageManager.CurrentLanguage.books.books_wrathSecond8 + "\n\n<b>" + LanguageManager.CurrentLanguage.books.books_wrathSecond9 + "</b>";
			case "Level 5-S":
				if (originalText.Contains("DAY 529"))
				{
					return LanguageManager.CurrentLanguage.fishing.fish_book1 + "\n\n" + LanguageManager.CurrentLanguage.fishing.fish_book2 + "\n" + LanguageManager.CurrentLanguage.fishing.fish_book3 + "\n" + LanguageManager.CurrentLanguage.fishing.fish_book4 + "\n" + LanguageManager.CurrentLanguage.fishing.fish_book8 + "\n\n" + LanguageManager.CurrentLanguage.fishing.fish_book5 + "\n" + LanguageManager.CurrentLanguage.fishing.fish_book6 + "\n" + LanguageManager.CurrentLanguage.fishing.fish_book7 + "\n\n" + LanguageManager.CurrentLanguage.fishing.fish_book8 + "\n\n" + LanguageManager.CurrentLanguage.fishing.fish_book7 + "\n" + LanguageManager.CurrentLanguage.fishing.fish_book8 + "\n\n" + LanguageManager.CurrentLanguage.fishing.fish_book7 + " " + LanguageManager.CurrentLanguage.fishing.fish_book8 + "<size=47>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=45>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=43>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=41>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=39>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=37>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=35>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=33>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=31>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=29>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=27>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=25>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=23>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=21>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=19>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=17>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=15>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=13>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=11>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=9>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=7>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=5>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=3>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>\n<size=1>" + LanguageManager.CurrentLanguage.fishing.fish_book9 + "</size>" + LanguageManager.CurrentLanguage.fishing.fish_book10;
				}
				return LanguageManager.CurrentLanguage.fishing.fish_bottleMessage1 + "\n\n\n" + LanguageManager.CurrentLanguage.fishing.fish_bottleMessage2 + "\n\n\n" + LanguageManager.CurrentLanguage.fishing.fish_bottleMessage3 + "\n\n\n" + LanguageManager.CurrentLanguage.fishing.fish_bottleMessage4 + "\n\n\n" + LanguageManager.CurrentLanguage.fishing.fish_bottleMessage5 + "\n\n\n" + LanguageManager.CurrentLanguage.fishing.fish_bottleMessage6;
			case "Level 6-1":
				return "<size=244>" + LanguageManager.CurrentLanguage.act2.act2_heresyFirst_armboy + "</size>";
			case "Level 7-1":
				if (originalText.Contains("The unending halls of"))
				{
					return "<b>" + LanguageManager.CurrentLanguage.books.books_violenceFirst1 + "</b>\n<b>" + LanguageManager.CurrentLanguage.books.books_violenceFirst2 + "</b>\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst4 + "\n\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst5 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst6 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst7 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst8 + "\n\n<color=red>" + LanguageManager.CurrentLanguage.books.books_violenceFirst9 + "</color>";
				}
				return LanguageManager.CurrentLanguage.books.books_violenceFirst_Slate1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst_Slate2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst_Slate3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceFirst_Slate4;
			case "Level 7-2":
				if (originalText.Contains("> < < > < < > > < > > < >"))
				{
					return LanguageManager.CurrentLanguage.books.books_violenceSecond1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecond2 + "\n\n> < < > < < > > < > > < >";
				}
				return "<i>" + LanguageManager.CurrentLanguage.books.books_violenceSecondAmbush1 + "\n\n\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecondAmbush2 + "\n\n\n\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecondAmbush1 + "\n\n\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecondAmbush3 + "\n\n\n\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecondAmbush1 + "\n\n\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecondAmbush4 + "</i>";
			case "Level 7-4":
				return "<size=20><color=red>" + LanguageManager.CurrentLanguage.books.books_violenceFourth1 + "</color></size>\n\n\n<size=20><color=red>" + LanguageManager.CurrentLanguage.books.books_violenceFourth2 + "</color></size>\n\n\n<size=20><color=red>" + LanguageManager.CurrentLanguage.books.books_violenceFourth3 + "</color></size>\n\n\n<size=20><color=red>" + LanguageManager.CurrentLanguage.books.books_violenceFourth4 + "</color></size>\n\n<size=20>" + LanguageManager.CurrentLanguage.books.books_violenceFourth5 + "</size>";
			case "Level 7-S":
				return LanguageManager.CurrentLanguage.books.books_violenceSecret_Slate1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_violenceSecret_Slate2;
			case "Level 8-2":
				if (originalText.Contains("Layer 8: Fraud has become exactly what I had dreamed it would be"))
				{
					return LanguageManager.CurrentLanguage.books.books_fraudSecond1_1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_2 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_3 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_4 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_5 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_6 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_7 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_8 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_9 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond1_10;
				}
				if (originalText.Contains("TEXT SCANNED - EARTHMOVER MENTIONS DETECTED:"))
				{
					return "<b>" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_1 + "</b>\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_2 + "</b>\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_3 + "\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_4 + "</b>\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_5 + "\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_6 + "</b>\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_7 + "\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudSecond2_8 + "</b>";
				}
				if (originalText.Contains("I SEE ICY ULYSSES FROZEN"))
				{
					return "<size=23><color=red>" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_4 + "\n<nobr>" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_5 + "<br>" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_6 + "<br>" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_7 + "</nobr></color></size>\n\n\n<size=20>" + LanguageManager.CurrentLanguage.books.books_fraudSecond3_8 + "</size>";
				}
				return originalText;
			case "Level 8-3":
				if (originalText.Contains("TEXT SCANNED - ANOMALY DETECTED:"))
				{
					return "<b>" + LanguageManager.CurrentLanguage.books.books_fraudThird1_1 + "</b>\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudThird1_2 + "</b>\n\n" + LanguageManager.CurrentLanguage.books.books_fraudThird1_3 + "\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudThird1_4 + "</b>\n" + LanguageManager.CurrentLanguage.books.books_fraudThird1_5 + "\n\n<b>" + LanguageManager.CurrentLanguage.books.books_fraudThird1_6 + "</b>";
				}
				if (originalText.Contains("ATAVISTIC ANTAGONIST"))
				{
					return "<size=23><color=red>" + LanguageManager.CurrentLanguage.books.books_fraudThird2_1 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudThird2_2 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudThird2_3 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudThird2_4 + "\n\n" + LanguageManager.CurrentLanguage.books.books_fraudThird2_5 + "\n" + LanguageManager.CurrentLanguage.books.books_fraudThird2_6 + "</color></size>\n\n\n<size=20>" + LanguageManager.CurrentLanguage.books.books_fraudThird2_7 + "</size>";
				}
				return originalText;
			default:
				Logging.Warn("Unknown book in " + currentSceneName + "!");
				return originalText;
			}
		}
	}
	public static class BossStrings
	{
		public static string GetBossName(string originalBossName)
		{
			Logging.Warn(originalBossName);
			return EnemyBios.GetName(originalBossName);
		}
	}
	public static class Cheats
	{
		public static void PatchCheatConsentPanel(ref GameObject canvasObj)
		{
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			GameObject gameObjectChild = CommonFunctions.GetGameObjectChild(canvasObj, "Cheat Menu");
			GameObject gameObjectChild2 = CommonFunctions.GetGameObjectChild(gameObjectChild, "Cheats Consent");
			GameObject gameObjectChild3 = CommonFunctions.GetGameObjectChild(gameObjectChild2, "Text");
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(gameObjectChild3)).text = LanguageManager.CurrentLanguage.cheats.cheats_disclaimer1 + "\n\n" + LanguageManager.CurrentLanguage.cheats.cheats_disclaimer2;
			TextMeshProUGUI textMeshProUGUI = CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild2, "Yes"), "Text"));
			((TMP_Text)textMeshProUGUI).text = LanguageManager.CurrentLanguage.cheats.cheats_disclaimerYes;
			((TMP_Text)textMeshProUGUI).fontSize = 22f;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild2, "No"), "Text"))).text = LanguageManager.CurrentLanguage.cheats.cheats_disclaimerNo;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(gameObjectChild, "Cheats Manager"), "Title"))).text = LanguageManager.CurrentLanguage.cheats.cheats_panelTitle;
			((Behaviour)gameObjectChild3.GetComponents(typeof(Component))[2]).enabled = false;
			GameObject gameObjectChild4 = CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Cheat Menu"), "Cheats Overlay"), "Cheats Enabled");
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(gameObjectChild4, "Title"))).text = LanguageManager.CurrentLanguage.cheats.cheats_cheatsEnabled;
			GameObject gameObjectChild5 = CommonFunctions.GetGameObjectChild(gameObjectChild4, "Details Tip");
			Component[] components = gameObjectChild5.GetComponents(typeof(Component));
			foreach (Component val in components)
			{
				if (((object)val).GetType().Name == "TextOverride")
				{
					Object.Destroy((Object)(object)val);
				}
			}
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(gameObjectChild5)).text = LanguageManager.CurrentLanguage.cheats.cheats_cheatsOpenButtons;
			((TMP_Text)CommonFunctions.GetTextMeshProUGUI(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(CommonFunctions.GetGameObjectChild(canvasObj, "Cheat Menu"), "Cheats Teleport"), "Title"))).text = LanguageManager.CurrentLanguage.cheats.cheats_teleportMenu;
		}

		public static string GetCheatStatus(string cheatStatus)
		{
			if (cheatStatus == null)
			{
				return null;
			}
			try
			{
				return cheatStatus switch
				{
					"STAY ACTIVE" => LanguageManager.CurrentLanguage.cheats.cheats_stayActive, 
					"DISABLE ON RELOAD" => LanguageManager.CurrentLanguage.cheats.cheats_disableOnReload, 
					"SAVE" => LanguageManager.CurrentLanguage.cheats.cheats_dupesSave, 
					"NEW SAVE" => LanguageManager.CurrentLanguage.cheats.cheats_dupesNewSave, 
					"LOAD LATEST SAVE" => LanguageManager.CurrentLanguage.cheats.cheats_loadLatestSave, 
					"EQUIP" => LanguageManager.CurrentLanguage.cheats.cheats_equip, 
					"REMOVE" => LanguageManager.CurrentLanguage.cheats.cheats_remove, 
					"OPEN" => LanguageManager.CurrentLanguage.cheats.cheats_open, 
					"KILL ALL" => LanguageManager.CurrentLanguage.cheats.cheats_killAll, 
					"STATIC" => LanguageManager.CurrentLanguage.cheats.cheats_static, 
					"DYNAMIC" => LanguageManager.CurrentLanguage.cheats.cheats_dynamic, 
					"REBUILD" => LanguageManager.CurrentLanguage.cheats.cheats_rebuild, 
					"REBUILDING..." => LanguageManager.CurrentLanguage.cheats.cheats_rebuilding, 
					_ => null, 
				};
			}
			catch (Exception e)
			{
				CommonFunctions.HandleError(e, cheatStatus);
				return "";
			}
		}

		public static string GetCheatName(string cheatIdentifier)
		{
			try
			{
				return cheatIdentifier switch
				{
					"ultrakill.keep-enabled" => LanguageManager.CurrentLanguage.cheats.cheats_keepEnabled, 
					"ultrakill.spawner-arm" => LanguageManager.CurrentLanguage.cheats.cheats_spawnerArm, 
					"ultrakill.teleport-menu" => LanguageManager.CurrentLanguage.cheats.cheats_teleportMenu, 
					"ultrakill.full-bright" => LanguageManager.CurrentLanguage.cheats.cheats_fullBright, 
					"ultrakill.invincibility" => LanguageManager.CurrentLanguage.cheats.cheats_invincibility, 
					"ultrakill.noclip" => LanguageManager.CurrentLanguage.cheats.cheats_noclip, 
					"ultrakill.flight" => LanguageManager.CurrentLanguage.cheats.cheats_flight, 
					"ultrakill.infinite-wall-jumps" => LanguageManager.CurrentLanguage.cheats.cheats_infiniteWallJumps, 
					"ultrakill.no-weapon-cooldown" => LanguageManager.CurrentLanguage.cheats.cheats_noWeaponCooldown, 
					"ultrakill.infinite-power-ups" => LanguageManager.CurrentLanguage.cheats.cheats_infinitePowerUps, 
					"ultrakill.blind-enemies" => LanguageManager.CurrentLanguage.cheats.cheats_blindEnemies, 
					"ultrakill.enemy-hate-enemy" => LanguageManager.CurrentLanguage.cheats.cheats_enemiesHateEnemies, 
					"ultrakill.enemy-ignore-player" => LanguageManager.CurrentLanguage.cheats.cheats_enemiesIgnorePlayer, 
					"ultrakill.disable-enemy-spawns" => LanguageManager.CurrentLanguage.cheats.cheats_disableEnemySpawns, 
					"ultrakill.invincible-enemies" => LanguageManager.CurrentLanguage.cheats.cheats_invincibleEnemies, 
					"ultrakill.kill-all-enemies" => LanguageManager.CurrentLanguage.cheats.cheats_killAllEnemies, 
					"ultrakill.sandbox.quick-save" => LanguageManager.CurrentLanguage.cheats.cheats_quickSave, 
					"ultrakill.sandbox.quick-load" => LanguageManager.CurrentLanguage.cheats.cheats_quickLoad, 
					"ultrakill.sandbox.save-menu" => LanguageManager.CurrentLanguage.cheats.cheats_saveMenu, 
					"ultrakill.sandbox.clear" => LanguageManager.CurrentLanguage.cheats.cheats_clear, 
					"ultrakill.sandbox.rebuild-nav" => LanguageManager.CurrentLanguage.cheats.cheats_rebuildNav, 
					"ultrakill.sandbox.snapping" => LanguageManager.CurrentLanguage.cheats.cheats_snapping, 
					"ultrakill.sandbox.physics" => LanguageManager.CurrentLanguage.cheats.cheats_physics, 
					"ultrakill.clash-mode" => LanguageManager.CurrentLanguage.cheats.cheats_crashMode, 
					"ultrakill.hide-weapons" => LanguageManager.CurrentLanguage.cheats.cheats_hideWeapons, 
					"ultrakill.hide-ui" => LanguageManager.CurrentLanguage.cheats.cheats_hideUi, 
					"ultrakill.ghost-drone-mode" => LanguageManager.CurrentLanguage.cheats.cheats_ghostDroneMode, 
					_ => cheatIdentifier, 
				};
			}
			catch (Exception e)
			{
				CommonFunctions.HandleError(e, cheatIdentifier);
				return "";
			}
		}
	}
	public static class CommonFunctions
	{
		[CompilerGenerated]
		private sealed class <WaitforSeconds>d__7 : IEnumerator<object>, IDisposable, IEnumerator
		{
			private int <>1__state;

			private object <>2__current;

			public float seconds;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <WaitforSeconds>d__7(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0028: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(seconds);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private static readonly Dictionary<string, string> LocalizedInputs = new Dictionary<string, string>
		{
			{
				"Space",
				LanguageManager.CurrentLanguage.inputStrings.input_space
			},
			{
				"Enter",
				LanguageManager.CurrentLanguage.inputStrings.input_enter
			},
			{
				"Tab",
				LanguageManager.CurrentLanguage.inputStrings.input_tab
			},
			{
				"Esc",
				LanguageManager.CurrentLanguage.inputStrings.input_esc
			},
			{
				"Left Shift",
				LanguageManager.CurrentLanguage.inputStrings.input_leftShift
			},
			{
				"Right Shift",
				LanguageManager.CurrentLanguage.inputStrings.input_rightShift
			},
			{
				"Left Control",
				LanguageManager.CurrentLanguage.inputStrings.input_leftControl
			},
			{
				"Right Control",
				LanguageManager.CurrentLanguage.inputStrings.input_rightControl
			},
			{
				"Left Alt",
				LanguageManager.CurrentLanguage.inputStrings.input_leftAlt
			},
			{
				"Right Alt",
				LanguageManager.CurrentLanguage.inputStrings.input_rightAlt
			},
			{
				"LMB",
				LanguageManager.CurrentLanguage.inputStrings.input_LMB
			},
			{
				"RMB",
				LanguageManager.CurrentLanguage.inputStrings.input_RMB
			},
			{
				"MMB",
				LanguageManager.CurrentLanguage.inputStrings.input_MMB
			},
			{
				"Up Arrow",
				LanguageManager.CurrentLanguage.inputStrings.input_arrowUp
			},
			{
				"Down Arrow",
				LanguageManager.CurrentLanguage.inputStrings.input_arrowDown
			},
			{
				"Left Arrow",
				LanguageManager.CurrentLanguage.inputStrings.input_arrowLeft
			},
			{
				"Right Arrow",
				LanguageManager.CurrentLanguage.inputStrings.input_arrowRight
			},
			{
				"Forward",
				LanguageManager.CurrentLanguage.inputStrings.input_forward
			},
			{
				"Back",
				LanguageManager.CurrentLanguage.inputStrings.input_back
			},
			{
				"NO BINDING",
				LanguageManager.CurrentLanguage.inputStrings.input_noBinding
			}
		};

		public static ColorBlock UkButtonColors;

		public static string PreviousHudMessage;

		public static string GetTranslation(string translation, string original)
		{
			if (string.IsNullOrEmpty(translation))
			{
				return original;
			}
			return translation;
		}

		public static string MakeVertical(string input)
		{
			if (string.IsNullOrEmpty(input))
			{
				return input;
			}
			StringBuilder stringBuilder = new StringBuilder(input.Length * 2);
			for (int i = 0; i < input.Length; i++)
			{
				stringBuilder.Append(input[i]);
				if (i < input.Length - 1)
				{
					stringBuilder.Append('\n');
				}
			}
			return stringBuilder.ToString();
		}

		public static string GetLocalizedInput(string input)
		{
			if (input.Length == 1 && char.IsLetter(input[0]))
			{
				return input;
			}
			Logging.Message("[GetLocalizedInput] Input in Message = " + input);
			if (LocalizedInputs.TryGetValue(input, out var value))
			{
				return value;
			}
			return input;
		}

		public static bool isUsingEnglish()
		{
			return LanguageManager.CurrentLanguage.metadata.langDisplayName == "English";
		}

		[IteratorStateMachine(typeof(<WaitforSeconds>d__7))]
		public static IEnumerator WaitforSeconds(float seconds)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <WaitforSeconds>d__7(0)
			{
				seconds = seconds
			};
		}

		public static void HandleError(Exception e, string missingID = "")
		{
			Logging.Error(e.ToString());
		}

		public static GameObject GetInactiveRootObject(string objectName)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			Dictionary<string, GameObject> dictionary = new Dictionary<string, GameObject>();
			float num = 0f;
			if (Time.time - num < 1f && dictionary.TryGetValue(objectName, out var value))
			{
				if ((Object)(object)value != (Object)null)
				{
					return value;
				}
				dictionary.Remove(objectName);
			}
			if (Time.time - num >= 1f)
			{
				dictionary.Clear();
				num = Time.time;
			}
			Scene activeScene = SceneManager.GetActiveScene();
			GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
			foreach (GameObject val in rootGameObjects)
			{
				if (((Object)val).name == objectName)
				{
					dictionary[objectName] = val;
					return val;
				}
			}
			dictionary[objectName] = null;
			return null;
		}

		public static string GetCurrentSceneName()
		{
			return SceneHelper.CurrentScene;
		}

		public static GameObject CreateButton(string buttonText = "Text", string buttonName = "Button")
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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_00c0: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Expected O, but got Unknown
			//IL_00fb: 

BepInEx/plugins/UniversalReplacer.dll

Decompiled a month 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.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("UniversalReplacer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UniversalReplacer")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("97fbeecd-180d-4c38-89fb-1cb6096934fd")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace UniversalReplacer;

public class ConfigManager
{
	private readonly string _path;

	private FileSystemWatcher _watcher;

	public Action OnConfigReloaded;

	public List<TargetRule> Rules { get; private set; } = new List<TargetRule>();


	public Dictionary<string, List<TargetRule>> RulesByRoot { get; } = new Dictionary<string, List<TargetRule>>(StringComparer.OrdinalIgnoreCase);


	public List<KeyValuePair<string, List<TargetRule>>> RulesByRootContains { get; } = new List<KeyValuePair<string, List<TargetRule>>>();


	public List<TargetRule> RulesByPathContains { get; } = new List<TargetRule>();


	public ConfigManager(string path)
	{
		_path = path;
		ReloadConfig(trigger: false);
		SetupWatcher();
	}

	public void ReloadConfig(bool trigger)
	{
		//IL_01af: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b6: Invalid comparison between Unknown and I4
		bool flag = false;
		try
		{
			if (!File.Exists(_path))
			{
				var anon = new
				{
					TargetRules = new List<TargetRule>()
				};
				File.WriteAllText(_path, JsonConvert.SerializeObject((object)anon, (Formatting)1));
			}
			string text = File.ReadAllText(_path);
			JObject val = JObject.Parse(text);
			JToken val2 = val["TargetRules"] ?? val["targetRules"];
			Rules = new List<TargetRule>();
			JArray val3 = (JArray)(object)((val2 is JArray) ? val2 : null);
			if (val3 != null)
			{
				foreach (JToken item in val3)
				{
					TargetRule targetRule = new TargetRule();
					targetRule.Root = ((object)item[(object)"Root"])?.ToString() ?? "";
					targetRule.RootContains = ((object)item[(object)"RootContains"])?.ToString() ?? "";
					targetRule.Path = ((object)item[(object)"Path"])?.ToString() ?? "";
					targetRule.PathContains = ((object)item[(object)"PathContains"])?.ToString() ?? "";
					targetRule.ComponentType = ((object)item[(object)"ComponentType"])?.ToString() ?? "";
					targetRule.PropertyName = ((object)item[(object)"PropertyName"])?.ToString() ?? "";
					JToken val4 = item[(object)"MaterialIndex"];
					if (val4 != null && (int)val4.Type != 10)
					{
						try
						{
							targetRule.MaterialIndex = val4.ToObject<int>();
						}
						catch
						{
							targetRule.MaterialIndex = -1;
						}
					}
					targetRule.Value = item[(object)"Value"];
					Rules.Add(targetRule);
				}
			}
			RulesByRoot.Clear();
			RulesByRootContains.Clear();
			RulesByPathContains.Clear();
			Dictionary<string, List<TargetRule>> dictionary = new Dictionary<string, List<TargetRule>>(StringComparer.OrdinalIgnoreCase);
			foreach (TargetRule rule in Rules)
			{
				rule.Init();
				if (!string.IsNullOrEmpty(rule.Root))
				{
					if (!RulesByRoot.ContainsKey(rule.Root))
					{
						RulesByRoot[rule.Root] = new List<TargetRule>();
					}
					RulesByRoot[rule.Root].Add(rule);
				}
				else if (!string.IsNullOrEmpty(rule.RootContains))
				{
					if (!dictionary.ContainsKey(rule.RootContains))
					{
						dictionary[rule.RootContains] = new List<TargetRule>();
					}
					dictionary[rule.RootContains].Add(rule);
				}
				else if (!string.IsNullOrEmpty(rule.PathContains))
				{
					RulesByPathContains.Add(rule);
				}
			}
			foreach (KeyValuePair<string, List<TargetRule>> item2 in dictionary)
			{
				RulesByRootContains.Add(new KeyValuePair<string, List<TargetRule>>(item2.Key, item2.Value));
			}
			flag = true;
		}
		catch (Exception ex)
		{
			Plugin.Log.LogError((object)("Erro ao ler o ficheiro JSON: " + ex.Message));
		}
		if (flag && trigger)
		{
			try
			{
				OnConfigReloaded?.Invoke();
			}
			catch (Exception ex2)
			{
				Plugin.Log.LogDebug((object)("Aviso durante a aplicação das regras na cena: " + ex2.Message));
			}
		}
	}

	private void SetupWatcher()
	{
		string directoryName = Path.GetDirectoryName(_path);
		if (!Directory.Exists(directoryName))
		{
			return;
		}
		_watcher = new FileSystemWatcher(directoryName, Path.GetFileName(_path))
		{
			EnableRaisingEvents = true
		};
		_watcher.Changed += delegate
		{
			Plugin.EnqueueAction(delegate
			{
				ReloadConfig(trigger: true);
			});
		};
	}

	public void EnableWatcher(bool en)
	{
		if (_watcher != null)
		{
			_watcher.EnableRaisingEvents = en;
		}
	}
}
public class ConfigData
{
	public List<TargetRule> TargetRules = new List<TargetRule>();
}
public class TargetRule
{
	public string Root;

	public string RootContains;

	public string Path;

	public string PathContains;

	public string ComponentType;

	public string PropertyName;

	public int MaterialIndex = -1;

	public JToken Value;

	[JsonIgnore]
	public string[] RootContainsParts;

	[JsonIgnore]
	public string[] PathParts;

	[JsonIgnore]
	public bool IsDeepSearch;

	[JsonIgnore]
	public string CleanDeepTarget;

	[JsonIgnore]
	public string NormalizedPropName;

	[JsonIgnore]
	public bool IsColorRule;

	public void Init()
	{
		if (!string.IsNullOrEmpty(RootContains))
		{
			RootContainsParts = RootContains.Split(new char[1] { '/' }, StringSplitOptions.RemoveEmptyEntries);
		}
		string text = ((!string.IsNullOrEmpty(Path)) ? Path : PathContains);
		if (!string.IsNullOrEmpty(text))
		{
			if (text.Contains("//"))
			{
				IsDeepSearch = true;
				string[] array = text.Split(new string[1] { "//" }, StringSplitOptions.None);
				CleanDeepTarget = array[1].TrimEnd('*', '/');
				PathParts = array[0].Split(new char[1] { '/' }, StringSplitOptions.RemoveEmptyEntries);
			}
			else
			{
				PathParts = text.TrimEnd('*', '/').Split(new char[1] { '/' }, StringSplitOptions.RemoveEmptyEntries);
			}
		}
		NormalizedPropName = (PropertyName ?? "").ToLower().Replace("_", "");
		IsColorRule = NormalizedPropName.Contains("color") || NormalizedPropName.Contains("tint");
	}
}
public static class InstantProcessor
{
	public static void ApplyInstant(GameObject root, List<TargetRule> rules)
	{
		if ((Object)(object)root == (Object)null || rules == null || rules.Count == 0)
		{
			return;
		}
		Transform[] componentsInChildren = root.GetComponentsInChildren<Transform>(true);
		Transform[] array = componentsInChildren;
		foreach (Transform val in array)
		{
			GameObject gameObject = ((Component)val).gameObject;
			foreach (TargetRule rule in rules)
			{
				if (IsHierarchyMatch(val, rule))
				{
					ApplyRuleToGameObject(gameObject, rule);
				}
			}
		}
	}

	private static bool IsHierarchyMatch(Transform t, TargetRule rule)
	{
		if (!string.IsNullOrEmpty(rule.Root) && ((Object)t.root).name != rule.Root)
		{
			return false;
		}
		if (!string.IsNullOrEmpty(rule.RootContains))
		{
			Transform val = t;
			bool flag = false;
			while ((Object)(object)val != (Object)null)
			{
				if (((Object)val).name.IndexOf(rule.RootContains, StringComparison.OrdinalIgnoreCase) >= 0)
				{
					flag = true;
					break;
				}
				val = val.parent;
			}
			if (!flag)
			{
				return false;
			}
		}
		if (!string.IsNullOrEmpty(rule.Path) && ((Object)t).name != rule.Path)
		{
			return false;
		}
		if (!string.IsNullOrEmpty(rule.PathContains))
		{
			string value = rule.PathContains.Replace("//", "");
			if (((Object)t).name.IndexOf(value, StringComparison.OrdinalIgnoreCase) < 0)
			{
				return false;
			}
		}
		return true;
	}

	private static void ApplyRuleToGameObject(GameObject go, TargetRule rule)
	{
		bool flag = !string.IsNullOrEmpty(rule.ComponentType);
		Renderer val = default(Renderer);
		if (go.TryGetComponent<Renderer>(ref val) && (!flag || ((object)val).GetType().Name.IndexOf(rule.ComponentType, StringComparison.OrdinalIgnoreCase) >= 0))
		{
			ApplyToRenderer(val, rule);
		}
		Light val2 = default(Light);
		if (go.TryGetComponent<Light>(ref val2) && (!flag || ((object)val2).GetType().Name.IndexOf(rule.ComponentType, StringComparison.OrdinalIgnoreCase) >= 0))
		{
			ApplyToLight(val2, rule);
		}
		ParticleSystem val3 = default(ParticleSystem);
		if (go.TryGetComponent<ParticleSystem>(ref val3) && (!flag || ((object)val3).GetType().Name.IndexOf(rule.ComponentType, StringComparison.OrdinalIgnoreCase) >= 0))
		{
			ApplyToParticle(val3, rule);
		}
		AudioSource val4 = default(AudioSource);
		if (go.TryGetComponent<AudioSource>(ref val4) && (!flag || ((object)val4).GetType().Name.IndexOf(rule.ComponentType, StringComparison.OrdinalIgnoreCase) >= 0))
		{
			ApplyToAudio(val4, rule);
		}
	}

	private static void ApplyToRenderer(Renderer r, TargetRule rule)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Expected O, but got Unknown
		//IL_0055: 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_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0067: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_0102: 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_0129: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fb: 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_022a: Unknown result type (might be due to invalid IL or missing references)
		//IL_024f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: Unknown result type (might be due to invalid IL or missing references)
		//IL_029b: Unknown result type (might be due to invalid IL or missing references)
		object obj = ParseValue(rule.Value);
		if (obj == null)
		{
			return;
		}
		if (rule.IsColorRule && obj is Color val)
		{
			Gradient val2 = new Gradient();
			val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[2]
			{
				new GradientColorKey(val, 0f),
				new GradientColorKey(val, 1f)
			}, (GradientAlphaKey[])(object)new GradientAlphaKey[2]
			{
				new GradientAlphaKey(val.a, 0f),
				new GradientAlphaKey(val.a, 1f)
			});
			TrailRenderer val3 = (TrailRenderer)(object)((r is TrailRenderer) ? r : null);
			if (val3 != null)
			{
				val3.colorGradient = val2;
				val3.startColor = val;
				val3.endColor = val;
			}
			LineRenderer val4 = (LineRenderer)(object)((r is LineRenderer) ? r : null);
			if (val4 != null)
			{
				val4.colorGradient = val2;
				val4.startColor = val;
				val4.endColor = val;
			}
			SpriteRenderer val5 = (SpriteRenderer)(object)((r is SpriteRenderer) ? r : null);
			if (val5 != null)
			{
				val5.color = val;
			}
		}
		else if (rule.NormalizedPropName.Contains("width") || rule.NormalizedPropName.Contains("multiplier"))
		{
			float widthMultiplier = Convert.ToSingle(obj);
			TrailRenderer val6 = (TrailRenderer)(object)((r is TrailRenderer) ? r : null);
			if (val6 != null)
			{
				val6.widthMultiplier = widthMultiplier;
			}
			LineRenderer val7 = (LineRenderer)(object)((r is LineRenderer) ? r : null);
			if (val7 != null)
			{
				val7.widthMultiplier = widthMultiplier;
			}
		}
		Material[] materials = r.materials;
		bool flag = false;
		for (int i = 0; i < materials.Length; i++)
		{
			if (rule.MaterialIndex >= 0 && rule.MaterialIndex != i)
			{
				continue;
			}
			Material val8 = materials[i];
			if ((Object)(object)val8 == (Object)null)
			{
				continue;
			}
			if (obj is Color val9)
			{
				if (val8.HasProperty("_Color"))
				{
					val8.SetColor("_Color", val9);
					flag = true;
				}
				if (val8.HasProperty("_TintColor"))
				{
					val8.SetColor("_TintColor", val9);
					flag = true;
				}
				if (val8.HasProperty("_EmissionColor"))
				{
					val8.SetColor("_EmissionColor", val9);
					flag = true;
				}
				if (val8.HasProperty(rule.PropertyName))
				{
					val8.SetColor(rule.PropertyName, val9);
					flag = true;
				}
				continue;
			}
			Texture2D val10 = (Texture2D)((obj is Texture2D) ? obj : null);
			if (val10 != null)
			{
				if (val8.HasProperty("_MainTex"))
				{
					val8.SetTexture("_MainTex", (Texture)(object)val10);
				}
				val8.mainTexture = (Texture)(object)val10;
				flag = true;
			}
		}
		if (flag)
		{
			r.materials = materials;
		}
	}

	private static void ApplyToLight(Light l, TargetRule rule)
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		object obj = ParseValue(rule.Value);
		if (rule.IsColorRule && obj is Color color)
		{
			l.color = color;
		}
		if (rule.NormalizedPropName == "intensity")
		{
			l.intensity = Convert.ToSingle(obj);
		}
	}

	private static void ApplyToParticle(ParticleSystem ps, TargetRule rule)
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: 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_0060: Unknown result type (might be due to invalid IL or missing references)
		if (rule.IsColorRule && ParseValue(rule.Value) is Color val)
		{
			MainModule main = ps.main;
			((MainModule)(ref main)).startColor = new MinMaxGradient(val);
			TrailModule trails = ps.trails;
			if (((TrailModule)(ref trails)).enabled)
			{
				((TrailModule)(ref trails)).colorOverLifetime = new MinMaxGradient(val);
			}
		}
		ParticleSystemRenderer r = default(ParticleSystemRenderer);
		if (((Component)ps).TryGetComponent<ParticleSystemRenderer>(ref r))
		{
			ApplyToRenderer((Renderer)(object)r, rule);
		}
	}

	private static void ApplyToAudio(AudioSource a, TargetRule rule)
	{
		string normalizedPropName = rule.NormalizedPropName;
		object obj = ParseValue(rule.Value);
		if (normalizedPropName == "clip" && obj is string name)
		{
			AudioClip audio = ResourceManager.GetAudio(name);
			if ((Object)(object)audio != (Object)null)
			{
				a.clip = audio;
			}
		}
		else if (normalizedPropName == "volume")
		{
			a.volume = Convert.ToSingle(obj);
		}
		else if (normalizedPropName == "pitch")
		{
			a.pitch = Convert.ToSingle(obj);
		}
	}

	private static object ParseValue(object raw)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Invalid comparison between Unknown and I4
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Invalid comparison between Unknown and I4
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		JToken val = (JToken)((raw is JToken) ? raw : null);
		if (val != null)
		{
			if ((int)val.Type == 1)
			{
				JToken obj = val[(object)"r"];
				float num = ((obj != null) ? Extensions.Value<float>((IEnumerable<JToken>)obj) : 0f);
				JToken obj2 = val[(object)"g"];
				float num2 = ((obj2 != null) ? Extensions.Value<float>((IEnumerable<JToken>)obj2) : 0f);
				JToken obj3 = val[(object)"b"];
				float num3 = ((obj3 != null) ? Extensions.Value<float>((IEnumerable<JToken>)obj3) : 0f);
				JToken obj4 = val[(object)"a"];
				return (object)new Color(num, num2, num3, (obj4 != null) ? Extensions.Value<float>((IEnumerable<JToken>)obj4) : 1f);
			}
			if ((int)val.Type == 8)
			{
				string text = ((object)val).ToString();
				string text2 = text.ToLower();
				if (text2.EndsWith(".png") || text2.EndsWith(".jpg"))
				{
					return ResourceManager.GetTexture(text);
				}
				return text;
			}
		}
		return raw;
	}
}
public static class HarmonyPatcher
{
	[HarmonyPostfix]
	[HarmonyPatch(typeof(Object), "Instantiate", new Type[] { typeof(Object) })]
	private static void PostInstantiate1(Object __result)
	{
		if ((Object)(object)Plugin.Instance != (Object)null && !Plugin.Instance.IsBursting)
		{
			GameObject val = (GameObject)(object)((__result is GameObject) ? __result : null);
			if (val != null)
			{
				Plugin.Instance.HandleNewObjectInstant(val);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(Object), "Instantiate", new Type[]
	{
		typeof(Object),
		typeof(Transform)
	})]
	private static void PostInstantiate2(Object __result)
	{
		if ((Object)(object)Plugin.Instance != (Object)null && !Plugin.Instance.IsBursting)
		{
			GameObject val = (GameObject)(object)((__result is GameObject) ? __result : null);
			if (val != null)
			{
				Plugin.Instance.HandleNewObjectInstant(val);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(Object), "Instantiate", new Type[]
	{
		typeof(Object),
		typeof(Transform),
		typeof(bool)
	})]
	private static void PostInstantiate3(Object __result)
	{
		if ((Object)(object)Plugin.Instance != (Object)null && !Plugin.Instance.IsBursting)
		{
			GameObject val = (GameObject)(object)((__result is GameObject) ? __result : null);
			if (val != null)
			{
				Plugin.Instance.HandleNewObjectInstant(val);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(Object), "Instantiate", new Type[]
	{
		typeof(Object),
		typeof(Vector3),
		typeof(Quaternion)
	})]
	private static void PostInstantiate4(Object __result)
	{
		if ((Object)(object)Plugin.Instance != (Object)null && !Plugin.Instance.IsBursting)
		{
			GameObject val = (GameObject)(object)((__result is GameObject) ? __result : null);
			if (val != null)
			{
				Plugin.Instance.HandleNewObjectInstant(val);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(Object), "Instantiate", new Type[]
	{
		typeof(Object),
		typeof(Vector3),
		typeof(Quaternion),
		typeof(Transform)
	})]
	private static void PostInstantiate5(Object __result)
	{
		if ((Object)(object)Plugin.Instance != (Object)null && !Plugin.Instance.IsBursting)
		{
			GameObject val = (GameObject)(object)((__result is GameObject) ? __result : null);
			if (val != null)
			{
				Plugin.Instance.HandleNewObjectInstant(val);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(GameObject), "SetActive")]
	private static void PostSetActive(GameObject __instance, bool value)
	{
		if (value && (Object)(object)Plugin.Instance != (Object)null && !Plugin.Instance.IsBursting && (Object)(object)__instance != (Object)null)
		{
			Plugin.Instance.HandleNewObjectInstant(__instance);
		}
	}
}
[BepInPlugin("com.thehalfbunny.universalreplacer", "Universal Replacer", "2.3.0")]
public class Plugin : BaseUnityPlugin
{
	[CompilerGenerated]
	private sealed class <EnforcerLoop>d__22 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public Plugin <>4__this;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <EnforcerLoop>d__22(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				break;
			case 1:
				<>1__state = -1;
				if (!<>4__this.IsBursting)
				{
					<>4__this._processor?.EnforceActiveRules();
				}
				break;
			}
			<>2__current = (object)new WaitForSeconds(0.3f);
			<>1__state = 1;
			return true;
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	private Harmony _harmony;

	private ConfigManager _config;

	private RuleProcessor _processor;

	private static readonly Queue<Action> _mainThreadQueue = new Queue<Action>();

	private readonly Queue<GameObject> _scanQueue = new Queue<GameObject>();

	private readonly HashSet<GameObject> _queuedSet = new HashSet<GameObject>();

	public bool IsBursting = false;

	private float _burstCooldown = 0f;

	internal static ManualLogSource Log { get; private set; }

	public static Plugin Instance { get; private set; }

	private void Awake()
	{
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Expected O, but got Unknown
		Log = ((BaseUnityPlugin)this).Logger;
		Instance = this;
		try
		{
			ResourceManager.Init();
			_config = new ConfigManager(Path.Combine(Paths.ConfigPath, "ColorizedInk.json"));
			_processor = new RuleProcessor(_config);
			_harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
			_harmony.PatchAll(typeof(HarmonyPatcher));
			Log.LogInfo((object)"Universal Replacer loaded! (former ColorizedInk)");
			((MonoBehaviour)this).StartCoroutine(ResourceManager.PreloadAudioClips());
		}
		catch (Exception ex)
		{
			Log.LogError((object)("Erro Awake: " + ex.Message));
		}
	}

	private void OnEnable()
	{
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		SceneManager.sceneLoaded += OnSceneLoaded;
		if (_config != null)
		{
			_config.EnableWatcher(en: true);
			ConfigManager config = _config;
			config.OnConfigReloaded = (Action)Delegate.Combine(config.OnConfigReloaded, new Action(ReapplyAll));
		}
		((MonoBehaviour)this).StartCoroutine(EnforcerLoop());
		Scene activeScene = SceneManager.GetActiveScene();
		if (((Scene)(ref activeScene)).isLoaded)
		{
			ReapplyAll();
		}
	}

	private void Update()
	{
		lock (_mainThreadQueue)
		{
			while (_mainThreadQueue.Count > 0)
			{
				_mainThreadQueue.Dequeue()?.Invoke();
			}
		}
		if (IsBursting)
		{
			_burstCooldown -= Time.deltaTime;
			if (_burstCooldown <= 0f)
			{
				IsBursting = false;
				_processor?.ScanFullScene();
			}
			return;
		}
		if (_scanQueue.Count > 0)
		{
			Stopwatch stopwatch = Stopwatch.StartNew();
			while (_scanQueue.Count > 0 && stopwatch.Elapsed.TotalMilliseconds < 5.0)
			{
				GameObject val = _scanQueue.Dequeue();
				_queuedSet.Remove(val);
				if ((Object)(object)val != (Object)null)
				{
					_processor?.ProcessObject(val);
				}
			}
		}
		if (Input.GetKeyDown((KeyCode)287))
		{
			_config?.ReloadConfig(trigger: true);
		}
	}

	public void HandleNewObjectInstant(GameObject go)
	{
		if (!((Object)(object)go == (Object)null) && _config != null && !IsBursting)
		{
			InstantProcessor.ApplyInstant(go, _config.Rules);
			if (_queuedSet.Add(go))
			{
				_scanQueue.Enqueue(go);
			}
		}
	}

	private void ReapplyAll()
	{
		_processor?.RevertAll();
		ResourceManager.ClearCaches();
		_scanQueue.Clear();
		_queuedSet.Clear();
		IsBursting = true;
		_burstCooldown = 0.5f;
		_processor?.ScanFullScene();
	}

	private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		ReapplyAll();
	}

	[IteratorStateMachine(typeof(<EnforcerLoop>d__22))]
	private IEnumerator EnforcerLoop()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <EnforcerLoop>d__22(0)
		{
			<>4__this = this
		};
	}

	public static void EnqueueAction(Action a)
	{
		lock (_mainThreadQueue)
		{
			_mainThreadQueue.Enqueue(a);
		}
	}
}
public static class ResourceManager
{
	[CompilerGenerated]
	private sealed class <PreloadAudioClips>d__5 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		private string <audioDir>5__1;

		private string[] <>s__2;

		private int <>s__3;

		private string <file>5__4;

		private string <ext>5__5;

		private WWW <www>5__6;

		private AudioClip <clip>5__7;

		private string <fileName>5__8;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <PreloadAudioClips>d__5(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			int num = <>1__state;
			if (num == -3 || num == 1)
			{
				try
				{
				}
				finally
				{
					<>m__Finally1();
				}
			}
			<audioDir>5__1 = null;
			<>s__2 = null;
			<file>5__4 = null;
			<ext>5__5 = null;
			<www>5__6 = null;
			<clip>5__7 = null;
			<fileName>5__8 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Expected O, but got Unknown
			try
			{
				int num = <>1__state;
				if (num != 0)
				{
					if (num != 1)
					{
						return false;
					}
					<>1__state = -3;
					if (string.IsNullOrEmpty(<www>5__6.error))
					{
						<clip>5__7 = <www>5__6.GetAudioClip(false, false);
						if ((Object)(object)<clip>5__7 != (Object)null)
						{
							<fileName>5__8 = Path.GetFileName(<file>5__4);
							((Object)<clip>5__7).name = <fileName>5__8;
							_audios[<fileName>5__8] = <clip>5__7;
							<fileName>5__8 = null;
						}
						<clip>5__7 = null;
					}
					<>m__Finally1();
					<www>5__6 = null;
					goto IL_01bf;
				}
				<>1__state = -1;
				<audioDir>5__1 = Path.Combine(_basePath, "Audio");
				if (!Directory.Exists(<audioDir>5__1))
				{
					Directory.CreateDirectory(<audioDir>5__1);
				}
				<>s__2 = Directory.GetFiles(<audioDir>5__1);
				<>s__3 = 0;
				goto IL_01dc;
				IL_01bf:
				<ext>5__5 = null;
				<file>5__4 = null;
				<>s__3++;
				goto IL_01dc;
				IL_01dc:
				if (<>s__3 < <>s__2.Length)
				{
					<file>5__4 = <>s__2[<>s__3];
					<ext>5__5 = Path.GetExtension(<file>5__4).ToLower();
					if (<ext>5__5 == ".wav" || <ext>5__5 == ".ogg" || <ext>5__5 == ".mp3")
					{
						<www>5__6 = new WWW("file://" + <file>5__4);
						<>1__state = -3;
						<>2__current = <www>5__6;
						<>1__state = 1;
						return true;
					}
					goto IL_01bf;
				}
				<>s__2 = null;
				return false;
			}
			catch
			{
				//try-fault
				((IDisposable)this).Dispose();
				throw;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		private void <>m__Finally1()
		{
			<>1__state = -1;
			if (<www>5__6 != null)
			{
				((IDisposable)<www>5__6).Dispose();
			}
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	private static Dictionary<string, Texture2D> _textures = new Dictionary<string, Texture2D>(StringComparer.OrdinalIgnoreCase);

	private static Dictionary<string, Sprite> _sprites = new Dictionary<string, Sprite>(StringComparer.OrdinalIgnoreCase);

	private static Dictionary<string, AudioClip> _audios = new Dictionary<string, AudioClip>(StringComparer.OrdinalIgnoreCase);

	private static string _basePath;

	public static void Init()
	{
		_basePath = Path.Combine(Paths.ConfigPath, "ColorizedInk");
	}

	[IteratorStateMachine(typeof(<PreloadAudioClips>d__5))]
	public static IEnumerator PreloadAudioClips()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <PreloadAudioClips>d__5(0);
	}

	public static AudioClip GetAudio(string name)
	{
		AudioClip value;
		return _audios.TryGetValue(name, out value) ? value : null;
	}

	public static Texture2D GetTexture(string name)
	{
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Expected O, but got Unknown
		if (_textures.TryGetValue(name, out var value))
		{
			return value;
		}
		string text = Path.Combine(_basePath, "Textures");
		if (!Directory.Exists(text))
		{
			Directory.CreateDirectory(text);
		}
		string path = Path.Combine(text, name);
		if (!File.Exists(path))
		{
			return null;
		}
		Texture2D val = new Texture2D(2, 2);
		if (ImageConversion.LoadImage(val, File.ReadAllBytes(path)))
		{
			((Object)val).name = name;
			_textures[name] = val;
			return val;
		}
		return null;
	}

	public static Sprite GetSprite(string name)
	{
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		if (_sprites.TryGetValue(name, out var value))
		{
			return value;
		}
		Texture2D texture = GetTexture(name);
		if ((Object)(object)texture == (Object)null)
		{
			return null;
		}
		Sprite val = Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), new Vector2(0.5f, 0.5f), 100f);
		((Object)val).name = name;
		_sprites[name] = val;
		return val;
	}

	public static void ClearCaches()
	{
		_textures.Clear();
		_sprites.Clear();
	}
}
public class RuleProcessor
{
	private class CachedState
	{
		public Component Target;

		public TargetRule Rule;

		public object OriginalValue;

		public Action<Component, TargetRule, object> RevertAction;
	}

	private readonly ConfigManager _config;

	private readonly Dictionary<string, CachedState> _cache = new Dictionary<string, CachedState>();

	private static MaterialPropertyBlock _sharedBlock = new MaterialPropertyBlock();

	private static List<Component> _sharedCompList = new List<Component>();

	private readonly Dictionary<(Type, string), List<MemberInfo>> _reflectionCache = new Dictionary<(Type, string), List<MemberInfo>>();

	private readonly Dictionary<Type, Dictionary<string, bool>> _typeMatchCache = new Dictionary<Type, Dictionary<string, bool>>();

	public RuleProcessor(ConfigManager config)
	{
		_config = config;
	}

	public void ScanFullScene()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		Scene activeScene = SceneManager.GetActiveScene();
		GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
		foreach (GameObject root in rootGameObjects)
		{
			ProcessObject(root);
		}
	}

	public void ProcessObject(GameObject root)
	{
		if ((Object)(object)root == (Object)null || _config.Rules == null || _config.Rules.Count == 0)
		{
			return;
		}
		Transform transform = root.transform;
		if (_config.RulesByRoot.TryGetValue(((Object)root).name, out var value))
		{
			for (int i = 0; i < value.Count; i++)
			{
				ApplyPathing(transform, value[i]);
			}
		}
		for (int j = 0; j < _config.RulesByRootContains.Count; j++)
		{
			List<TargetRule> value2 = _config.RulesByRootContains[j].Value;
			if (value2 != null && value2.Count > 0 && MatchesPath(transform, value2[0].RootContainsParts))
			{
				for (int k = 0; k < value2.Count; k++)
				{
					ApplyPathing(transform, value2[k]);
				}
			}
		}
		for (int l = 0; l < _config.RulesByPathContains.Count; l++)
		{
			TargetRule targetRule = _config.RulesByPathContains[l];
			if (targetRule.IsDeepSearch)
			{
				if (MatchesPath(transform, targetRule.PathParts))
				{
					DoDeepSearch(transform, targetRule);
				}
			}
			else if (MatchesPath(transform, targetRule.PathParts))
			{
				ApplyToTarget(((Component)transform).gameObject, targetRule);
			}
		}
	}

	private void ApplyPathing(Transform root, TargetRule rule)
	{
		if (string.IsNullOrEmpty(rule.Path) && string.IsNullOrEmpty(rule.PathContains))
		{
			ApplyToTarget(((Component)root).gameObject, rule);
			return;
		}
		if (rule.IsDeepSearch)
		{
			DoDeepSearch(root, rule);
			return;
		}
		Transform val = root.Find((!string.IsNullOrEmpty(rule.Path)) ? rule.Path : rule.PathContains);
		if ((Object)(object)val != (Object)null)
		{
			ApplyToTarget(((Component)val).gameObject, rule);
		}
	}

	private void DoDeepSearch(Transform root, TargetRule rule)
	{
		Queue<Transform> queue = new Queue<Transform>();
		queue.Enqueue(root);
		while (queue.Count > 0)
		{
			Transform val = queue.Dequeue();
			if (((Object)val).name.IndexOf(rule.CleanDeepTarget, StringComparison.OrdinalIgnoreCase) >= 0)
			{
				ApplyToTarget(((Component)val).gameObject, rule);
				continue;
			}
			for (int i = 0; i < val.childCount; i++)
			{
				queue.Enqueue(val.GetChild(i));
			}
		}
	}

	private bool MatchesPath(Transform t, string[] parts)
	{
		if (parts == null || parts.Length == 0)
		{
			return true;
		}
		Transform val = t;
		for (int num = parts.Length - 1; num >= 0; num--)
		{
			bool flag = false;
			while ((Object)(object)val != (Object)null)
			{
				if (((Object)val).name.IndexOf(parts[num], StringComparison.OrdinalIgnoreCase) >= 0)
				{
					flag = true;
					val = val.parent;
					break;
				}
				val = val.parent;
			}
			if (!flag)
			{
				return false;
			}
		}
		return true;
	}

	private bool IsComponentTypeMatch(Type compType, string ruleTargetType)
	{
		if (string.IsNullOrEmpty(ruleTargetType))
		{
			return true;
		}
		if (!_typeMatchCache.TryGetValue(compType, out var value))
		{
			value = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
			_typeMatchCache[compType] = value;
		}
		if (!value.TryGetValue(ruleTargetType, out var value2))
		{
			value2 = (value[ruleTargetType] = compType.Name.IndexOf(ruleTargetType, StringComparison.OrdinalIgnoreCase) >= 0);
		}
		return value2;
	}

	private void ApplyToTarget(GameObject go, TargetRule rule)
	{
		go.GetComponents<Component>(_sharedCompList);
		for (int i = 0; i < _sharedCompList.Count; i++)
		{
			Component val = _sharedCompList[i];
			if ((Object)(object)val == (Object)null || !IsComponentTypeMatch(((object)val).GetType(), rule.ComponentType))
			{
				continue;
			}
			string key = $"{((Object)val).GetInstanceID()}_{rule.PropertyName}_{rule.MaterialIndex}";
			if (_cache.ContainsKey(key))
			{
				continue;
			}
			bool flag = false;
			object originalValue = null;
			Action<Component, TargetRule, object> revertAction = null;
			string text = (rule.PropertyName ?? "").ToLower().Replace("behavior.", "").Replace("behaviour.", "");
			Behaviour val2 = (Behaviour)(object)((val is Behaviour) ? val : null);
			if (text == "enabled" && (Object)(object)val2 != (Object)null)
			{
				object obj = ParseValueForType(rule.Value, typeof(bool));
				if (obj != null)
				{
					originalValue = val2.enabled;
					val2.enabled = (bool)obj;
					flag = true;
					revertAction = RevertBehaviour;
				}
			}
			if (!flag)
			{
				ParticleSystem val3 = (ParticleSystem)(object)((val is ParticleSystem) ? val : null);
				Renderer val4 = (Renderer)(object)((val is Renderer) ? val : null);
				LineRenderer val5 = (LineRenderer)(object)((val is LineRenderer) ? val : null);
				TrailRenderer val6 = (TrailRenderer)(object)((val is TrailRenderer) ? val : null);
				object originalValue2;
				if ((Object)(object)val3 != (Object)null && TryPatchParticleSystem(val3, rule))
				{
					flag = true;
				}
				else if ((Object)(object)val4 != (Object)null && TryPatchRendererMaterial(val4, rule))
				{
					flag = true;
					revertAction = RevertRenderer;
				}
				else if (((Object)(object)val5 != (Object)null || (Object)(object)val6 != (Object)null) && TryPatchTrailColors(val, rule))
				{
					flag = true;
					revertAction = RevertTrailColors;
				}
				else if (TryPatchViaReflection(val, rule, out originalValue2))
				{
					originalValue = originalValue2;
					flag = true;
					revertAction = RevertReflection;
				}
			}
			if (flag && !_cache.ContainsKey(key))
			{
				_cache[key] = new CachedState
				{
					Target = val,
					Rule = rule,
					OriginalValue = originalValue,
					RevertAction = revertAction
				};
			}
		}
		_sharedCompList.Clear();
	}

	private void RevertBehaviour(Component comp, TargetRule rule, object orig)
	{
		Behaviour val = (Behaviour)(object)((comp is Behaviour) ? comp : null);
		if ((Object)(object)val != (Object)null && orig is bool)
		{
			val.enabled = (bool)orig;
		}
	}

	private bool TryPatchParticleSystem(ParticleSystem ps, TargetRule rule)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: 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)
		//IL_0090: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0140: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		//IL_0187: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		string normalizedPropName = rule.NormalizedPropName;
		bool result = false;
		if (normalizedPropName.Contains("color") && ParseValueForType(rule.Value, typeof(Color)) is Color val)
		{
			try
			{
				MainModule main = ps.main;
				((MainModule)(ref main)).startColor = new MinMaxGradient(val);
				result = true;
				TrailModule trails = ps.trails;
				if (((TrailModule)(ref trails)).enabled)
				{
					((TrailModule)(ref trails)).colorOverLifetime = new MinMaxGradient(val);
					((TrailModule)(ref trails)).colorOverTrail = new MinMaxGradient(val);
				}
			}
			catch
			{
			}
		}
		ParticleSystemRenderer component = ((Component)ps).GetComponent<ParticleSystemRenderer>();
		if ((Object)(object)component != (Object)null)
		{
			Material[] materials = ((Renderer)component).materials;
			bool flag = false;
			for (int i = 0; i < materials.Length; i++)
			{
				if (rule.MaterialIndex >= 0 && rule.MaterialIndex != i)
				{
					continue;
				}
				Material val2 = materials[i];
				if (!((Object)(object)val2 == (Object)null) && ParseValueForType(rule.Value, typeof(Color)) is Color val3)
				{
					if (val2.HasProperty("_TintColor"))
					{
						val2.SetColor("_TintColor", val3);
						flag = true;
					}
					if (val2.HasProperty("_Color"))
					{
						val2.SetColor("_Color", val3);
						flag = true;
					}
					if (val2.HasProperty("_EmissionColor"))
					{
						val2.SetColor("_EmissionColor", val3);
						flag = true;
					}
					string propertyName = rule.PropertyName;
					if (val2.HasProperty(propertyName))
					{
						val2.SetColor(propertyName, val3);
						flag = true;
					}
				}
			}
			if (flag)
			{
				((Renderer)component).materials = materials;
				result = true;
			}
		}
		return result;
	}

	private bool TryPatchRendererMaterial(Renderer r, TargetRule rule)
	{
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_0139: Expected O, but got Unknown
		//IL_018c: 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_0197: Unknown result type (might be due to invalid IL or missing references)
		if (r is ParticleSystemRenderer)
		{
			return false;
		}
		Material[] materials = r.materials;
		if (materials == null || materials.Length == 0)
		{
			return false;
		}
		bool flag = false;
		string propertyName = rule.PropertyName;
		for (int i = 0; i < materials.Length; i++)
		{
			if (rule.MaterialIndex >= 0 && rule.MaterialIndex != i)
			{
				continue;
			}
			Material val = materials[i];
			if ((Object)(object)val == (Object)null)
			{
				continue;
			}
			string text = propertyName;
			bool flag2 = false;
			if (val.HasProperty(propertyName))
			{
				flag2 = true;
			}
			else if (val.HasProperty("_" + propertyName))
			{
				text = "_" + propertyName;
				flag2 = true;
			}
			else if (propertyName == "MainTex" || propertyName == "_MainTex")
			{
				text = "_MainTex";
				flag2 = true;
			}
			if (!flag2)
			{
				continue;
			}
			object obj = ParseValueForType(rule.Value, typeof(object));
			if (obj is Texture2D)
			{
				Texture2D val2 = (Texture2D)obj;
				if (text == "_MainTex" || text == "MainTex")
				{
					val.mainTexture = (Texture)(object)val2;
				}
				else
				{
					val.SetTexture(text, (Texture)(object)val2);
				}
				flag = true;
			}
			else if (obj is Color val3)
			{
				val.SetColor(text, val3);
				flag = true;
			}
			else if (obj is float || obj is double || obj is int)
			{
				float num = Convert.ToSingle(obj);
				val.SetFloat(text, num);
				flag = true;
			}
		}
		if (flag)
		{
			r.materials = materials;
			return true;
		}
		return false;
	}

	private void RevertRenderer(Component comp, TargetRule rule, object orig)
	{
		Renderer val = (Renderer)(object)((comp is Renderer) ? comp : null);
		if ((Object)(object)val != (Object)null && !(val is ParticleSystemRenderer))
		{
			if (rule.MaterialIndex >= 0 && rule.MaterialIndex < val.sharedMaterials.Length)
			{
				val.SetPropertyBlock((MaterialPropertyBlock)null, rule.MaterialIndex);
			}
			else
			{
				val.SetPropertyBlock((MaterialPropertyBlock)null);
			}
		}
	}

	private bool TryPatchTrailColors(Component comp, TargetRule rule)
	{
		//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c4: Expected O, but got Unknown
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0206: Unknown result type (might be due to invalid IL or missing references)
		//IL_020b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0212: Unknown result type (might be due to invalid IL or missing references)
		//IL_021e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0223: Unknown result type (might be due to invalid IL or missing references)
		//IL_0251: 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_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0294: Unknown result type (might be due to invalid IL or missing references)
		string normalizedPropName = rule.NormalizedPropName;
		if (normalizedPropName != "color" && normalizedPropName != "startcolor" && normalizedPropName != "endcolor" && normalizedPropName != "tintcolor" && normalizedPropName != "width" && normalizedPropName != "startwidth" && normalizedPropName != "endwidth" && normalizedPropName != "widthmultiplier" && normalizedPropName != "multiplier")
		{
			return false;
		}
		if (normalizedPropName.Contains("width") || normalizedPropName.Contains("multiplier"))
		{
			object obj = ParseValueForType(rule.Value, typeof(float));
			if (obj == null)
			{
				return false;
			}
			float num = Convert.ToSingle(obj);
			LineRenderer val = (LineRenderer)(object)((comp is LineRenderer) ? comp : null);
			if ((Object)(object)val != (Object)null)
			{
				if (normalizedPropName.Contains("multiplier"))
				{
					val.widthMultiplier = num;
				}
				else
				{
					val.startWidth = num;
					val.endWidth = num;
				}
				return true;
			}
			TrailRenderer val2 = (TrailRenderer)(object)((comp is TrailRenderer) ? comp : null);
			if ((Object)(object)val2 != (Object)null)
			{
				if (normalizedPropName.Contains("multiplier"))
				{
					val2.widthMultiplier = num;
				}
				else
				{
					val2.startWidth = num;
					val2.endWidth = num;
				}
				return true;
			}
		}
		else if (ParseValueForType(rule.Value, typeof(Color)) is Color val3)
		{
			Gradient val4 = new Gradient();
			val4.SetKeys((GradientColorKey[])(object)new GradientColorKey[2]
			{
				new GradientColorKey(val3, 0f),
				new GradientColorKey(val3, 1f)
			}, (GradientAlphaKey[])(object)new GradientAlphaKey[2]
			{
				new GradientAlphaKey(val3.a, 0f),
				new GradientAlphaKey(val3.a, 1f)
			});
			LineRenderer val5 = (LineRenderer)(object)((comp is LineRenderer) ? comp : null);
			if ((Object)(object)val5 != (Object)null)
			{
				val5.colorGradient = val4;
				val5.startColor = val3;
				val5.endColor = val3;
				return true;
			}
			TrailRenderer val6 = (TrailRenderer)(object)((comp is TrailRenderer) ? comp : null);
			if ((Object)(object)val6 != (Object)null)
			{
				val6.colorGradient = val4;
				val6.startColor = val3;
				val6.endColor = val3;
				return true;
			}
		}
		return false;
	}

	private void RevertTrailColors(Component comp, TargetRule rule, object orig)
	{
	}

	private MemberInfo FindMemberRobust(Type type, string name)
	{
		while (type != null && type != typeof(object))
		{
			MemberInfo memberInfo = (MemberInfo)(((object)type.GetProperty(name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) ?? ((object)type.GetField(name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)));
			if (memberInfo != null)
			{
				return memberInfo;
			}
			type = type.BaseType;
		}
		return null;
	}

	private bool TryPatchViaReflection(Component comp, TargetRule rule, out object originalValue)
	{
		originalValue = null;
		Type type = ((object)comp).GetType();
		(Type, string) key = (type, rule.PropertyName);
		if (!_reflectionCache.TryGetValue(key, out var value))
		{
			value = new List<MemberInfo>();
			string[] array = rule.PropertyName.Split(new char[1] { '.' });
			Type type2 = type;
			string[] array2 = array;
			foreach (string text in array2)
			{
				if (text.Equals("Behavior", StringComparison.OrdinalIgnoreCase) || text.Equals("Behaviour", StringComparison.OrdinalIgnoreCase))
				{
					continue;
				}
				MemberInfo memberInfo = FindMemberRobust(type2, text);
				if (memberInfo == null)
				{
					_reflectionCache[key] = null;
					return false;
				}
				value.Add(memberInfo);
				PropertyInfo propertyInfo = memberInfo as PropertyInfo;
				if (propertyInfo != null)
				{
					type2 = propertyInfo.PropertyType;
					continue;
				}
				FieldInfo fieldInfo = memberInfo as FieldInfo;
				if (fieldInfo != null)
				{
					type2 = fieldInfo.FieldType;
				}
			}
			_reflectionCache[key] = value;
		}
		if (value == null || value.Count == 0)
		{
			return false;
		}
		object obj = comp;
		for (int j = 0; j < value.Count - 1; j++)
		{
			MemberInfo memberInfo2 = value[j];
			PropertyInfo propertyInfo2 = memberInfo2 as PropertyInfo;
			if (propertyInfo2 != null)
			{
				obj = propertyInfo2.GetValue(obj, null);
			}
			else
			{
				FieldInfo fieldInfo2 = memberInfo2 as FieldInfo;
				if (fieldInfo2 != null)
				{
					obj = fieldInfo2.GetValue(obj);
				}
			}
			if (obj == null)
			{
				return false;
			}
		}
		MemberInfo memberInfo3 = value[value.Count - 1];
		Type targetType = null;
		PropertyInfo propertyInfo3 = memberInfo3 as PropertyInfo;
		FieldInfo fieldInfo3 = memberInfo3 as FieldInfo;
		if (propertyInfo3 != null)
		{
			targetType = propertyInfo3.PropertyType;
		}
		else if (fieldInfo3 != null)
		{
			targetType = fieldInfo3.FieldType;
		}
		if (propertyInfo3 != null)
		{
			originalValue = propertyInfo3.GetValue(obj, null);
		}
		else if (fieldInfo3 != null)
		{
			originalValue = fieldInfo3.GetValue(obj);
		}
		object obj2 = ParseValueForType(rule.Value, targetType);
		if (obj2 != null)
		{
			if (propertyInfo3 != null && propertyInfo3.CanWrite)
			{
				propertyInfo3.SetValue(obj, obj2, null);
			}
			else
			{
				if (!(fieldInfo3 != null) || fieldInfo3.IsInitOnly)
				{
					return false;
				}
				fieldInfo3.SetValue(obj, obj2);
			}
			return true;
		}
		return false;
	}

	private void RevertReflection(Component comp, TargetRule rule, object origVal)
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected O, but got Unknown
		if (origVal != null)
		{
			JToken value = null;
			try
			{
				value = (JToken)((!(origVal is JToken)) ? ((object)JToken.FromObject(origVal)) : ((object)(JToken)origVal));
			}
			catch
			{
			}
			TargetRule rule2 = new TargetRule
			{
				PropertyName = rule.PropertyName,
				Value = value
			};
			TryPatchViaReflection(comp, rule2, out var _);
		}
	}

	public void RevertAll()
	{
		foreach (CachedState value in _cache.Values)
		{
			if (value.RevertAction != null)
			{
				value.RevertAction(value.Target, value.Rule, value.OriginalValue);
			}
		}
		_cache.Clear();
	}

	public void EnforceActiveRules()
	{
		foreach (CachedState value in _cache.Values)
		{
			if ((Object)(object)value.Target == (Object)null)
			{
				continue;
			}
			string text = (value.Rule.PropertyName ?? "").ToLower().Replace("behavior.", "").Replace("behaviour.", "");
			Component target = value.Target;
			Behaviour val = (Behaviour)(object)((target is Behaviour) ? target : null);
			if (text == "enabled" && (Object)(object)val != (Object)null)
			{
				object obj = ParseValueForType(value.Rule.Value, typeof(bool));
				if (obj != null)
				{
					val.enabled = (bool)obj;
				}
			}
			else
			{
				TryPatchViaReflection(value.Target, value.Rule, out var _);
			}
		}
	}

	private object ParseValueForType(object raw, Type targetType)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Expected O, but got Unknown
		//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d4: Expected O, but got Unknown
		//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01dc: Invalid comparison between Unknown and I4
		//IL_0379: Unknown result type (might be due to invalid IL or missing references)
		//IL_0380: Expected O, but got Unknown
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_0207: Expected O, but got Unknown
		//IL_0209: Unknown result type (might be due to invalid IL or missing references)
		//IL_020f: Invalid comparison between Unknown and I4
		//IL_0186: Unknown result type (might be due to invalid IL or missing references)
		if (raw == null)
		{
			return null;
		}
		try
		{
			if (raw is JObject)
			{
				JObject val = (JObject)raw;
				if (targetType == typeof(Color) || targetType == typeof(object))
				{
					float num = ((val["r"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["r"]) : ((val["x"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["x"]) : 0f));
					float num2 = ((val["g"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["g"]) : ((val["y"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["y"]) : 0f));
					float num3 = ((val["b"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["b"]) : ((val["z"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["z"]) : 0f));
					float num4 = ((val["a"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["a"]) : ((val["w"] != null) ? Extensions.Value<float>((IEnumerable<JToken>)val["w"]) : 1f));
					return (object)new Color(num, num2, num3, num4);
				}
			}
		}
		catch
		{
		}
		string text = null;
		try
		{
			if (raw is string)
			{
				text = (string)raw;
			}
			else if (raw is JValue)
			{
				JValue val2 = (JValue)raw;
				if ((int)((JToken)val2).Type == 8)
				{
					text = ((object)val2).ToString();
				}
			}
			else if (raw is JToken)
			{
				JToken val3 = (JToken)raw;
				if ((int)val3.Type == 8)
				{
					text = ((object)val3).ToString();
				}
			}
		}
		catch
		{
		}
		if (text != null)
		{
			string text2 = text.ToLower();
			if (targetType == typeof(Texture) || targetType == typeof(Texture2D) || text2.EndsWith(".png") || text2.EndsWith(".jpg"))
			{
				return ResourceManager.GetTexture(text);
			}
			if (targetType == typeof(Sprite))
			{
				return ResourceManager.GetSprite(text);
			}
			if (targetType == typeof(AudioClip) || text2.EndsWith(".wav") || text2.EndsWith(".mp3") || text2.EndsWith(".ogg"))
			{
				return ResourceManager.GetAudio(text);
			}
			if (targetType != typeof(object) && targetType.IsEnum)
			{
				try
				{
					return Enum.Parse(targetType, text, ignoreCase: true);
				}
				catch
				{
				}
			}
			if (targetType == typeof(string) || targetType == typeof(object))
			{
				return text;
			}
		}
		try
		{
			if (raw is JToken)
			{
				JToken val4 = (JToken)raw;
				return val4.ToObject(targetType);
			}
		}
		catch
		{
		}
		try
		{
			return Convert.ChangeType(raw, targetType);
		}
		catch
		{
			return null;
		}
	}
}