Decompiled source of DUBBING SPANISH MOD v1.1.1

DubbingMod/DubbingMod.dll

Decompiled a day ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Logging;
using DubbingMod;
using HarmonyLib;
using SettingsMenu.Components;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DubbingMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DubbingMod")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("bd9fdc13-6da9-4337-aba1-a1f8186a7b2b")]
[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")]
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
internal class JhonnyPatch
{
	private static void Postfix(StockMapInfo __instance)
	{
		AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
		foreach (AudioSource val in array)
		{
			if (Object.op_Implicit((Object)(object)val.clip))
			{
				Debug.Log((object)((Object)val.clip).name);
				string name = ((Object)val.clip).name;
				string text = name;
				if (text == "Death")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("Death.ogg");
				}
			}
		}
	}
}
[HarmonyPatch(typeof(Mandalore), "Start")]
internal class MandalorePatch
{
	public static void Postfix(Mandalore __instance, ref AudioSource ___aud)
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) == 1)
		{
			AudioSource obj = ___aud;
			obj.volume *= 5f;
			__instance.voiceFull = Plugin.assets.LoadAsset<AudioClip>("mandaloreFullAuto.ogg");
			__instance.voiceFuller = Plugin.assets.LoadAsset<AudioClip>("mandaloreFullerAuto.ogg");
			__instance.voices[0].secondPhase = Plugin.assets.LoadAsset<AudioClip>("mandalorePhaseChange1Manda.ogg");
			__instance.voices[1].secondPhase = Plugin.assets.LoadAsset<AudioClip>("mandalorePhaseChange1Owl.ogg");
			__instance.voices[0].thirdPhase = Plugin.assets.LoadAsset<AudioClip>("mandalorePhaseChange2Manda.ogg");
			__instance.voices[1].thirdPhase = Plugin.assets.LoadAsset<AudioClip>("mandalorePhaseChange2Owl.ogg");
			__instance.voices[0].finalPhase = Plugin.assets.LoadAsset<AudioClip>("mandalorePhaseChangeFinalManda.ogg");
			__instance.voices[1].finalPhase = Plugin.assets.LoadAsset<AudioClip>("mandalorePhaseChangeFinalOwl.ogg");
			__instance.voices[0].death = Plugin.assets.LoadAsset<AudioClip>("mandaloreDefeatedManda.ogg");
			__instance.voices[1].death = Plugin.assets.LoadAsset<AudioClip>("mandaloreDefeatedOwl.ogg");
		}
	}
}
[HarmonyPatch(typeof(MandaloreVoice), "Taunt")]
public class MandaloreTauntPatch
{
	private static void Prefix(MandaloreVoice __instance, int num)
	{
		if ((Object)(object)Plugin.assets == (Object)null || PlayerPrefs.GetInt("activeDubbing", 1) != 1 || __instance.taunts == null || num < 0 || num >= __instance.taunts.Length)
		{
			return;
		}
		AudioClip val = __instance.taunts[num];
		if ((Object)(object)val == (Object)null)
		{
			return;
		}
		string name = ((Object)val).name;
		switch (name)
		{
		case "taunt4_mandy":
		case "taunt1_shammy":
		case "taunt2_shammy":
		case "taunt3_shammy":
		case "taunt3_mandy":
		case "taunt1_mandy":
		{
			AudioClip val2 = Plugin.assets.LoadAsset<AudioClip>(name);
			if ((Object)(object)val2 != (Object)null)
			{
				Plugin.Log.LogInfo((object)("[DubbingMod] Mandalore Taunt reemplazado: " + name));
				__instance.taunts[num] = val2;
			}
			break;
		}
		}
	}
}
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
internal class ShammyPatch
{
	private static void Postfix(StockMapInfo __instance)
	{
		AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
		foreach (AudioSource val in array)
		{
			if (!Object.op_Implicit((Object)(object)val.clip))
			{
				continue;
			}
			Debug.Log((object)((Object)val.clip).name);
			string name = ((Object)val.clip).name;
			string text = name;
			if (!(text == "waitingpuzzle_shammy"))
			{
				if (text == "waitingpuzzle2_mandy")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("mandaloreIntro.ogg");
				}
			}
			else
			{
				val.clip = Plugin.assets.LoadAsset<AudioClip>("owlIntro.ogg");
			}
		}
	}
}
namespace DubbingMod;

public static class MainMenuPatches
{
	[HarmonyPatch(typeof(SettingsPageBuilder))]
	public static class AudioPatch
	{
		[HarmonyPatch("BuildPage")]
		[HarmonyPostfix]
		public static void OpcionesPostfijo(SettingsPageBuilder __instance)
		{
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			if (((Object)__instance).name != "Audio" || (Object)(object)((Component)__instance).transform.parent == (Object)null)
			{
				return;
			}
			Debug.Log((object)"[AudioDubSlider] Procesando la página de configuración de Audio");
			if (((Object)((Component)__instance).transform.GetChild(0)).name != "Container")
			{
				return;
			}
			try
			{
				GameObject gameObject = ((Component)__instance).gameObject;
				gameObject.SetActive(true);
				GameObject gameObjectChild = GetGameObjectChild(gameObject, "Container");
				GameObject gameObjectChild2 = GetGameObjectChild(gameObjectChild, "Subtitles");
				GameObject val = Object.Instantiate<GameObject>(gameObjectChild2, gameObjectChild.transform);
				val.GetComponent<RectTransform>().anchoredPosition = new Vector2(300f, -225f);
				((Object)val).name = "Dialogue Dub";
				Toggle val2 = CrearToggle(val, "DubToggle", "activeDubbing", "DOBLAJE\n<size=9>(REQUIERE REINICIAR)</size>");
				((UnityEvent<bool>)(object)val2.onValueChanged).AddListener((UnityAction<bool>)delegate(bool value)
				{
					PlayerPrefs.SetInt("activeDubbing", value ? 1 : 0);
					PlayerPrefs.Save();
					Debug.Log((object)("[AudioDubSlider] Doblaje general: " + value));
				});
				GameObject val3 = Object.Instantiate<GameObject>(gameObjectChild2, gameObjectChild.transform);
				val3.GetComponent<RectTransform>().anchoredPosition = new Vector2(300f, -265f);
				((Object)val3).name = "Cutscene Dub";
				Toggle val4 = CrearToggle(val3, "CutsceneDubToggle", "activeCutsceneDubbing", "<size=13>DOBLAJE INTERMISIONES</size>\n<size=9>(REQUIERE REINICIAR)</size>");
				((UnityEvent<bool>)(object)val4.onValueChanged).AddListener((UnityAction<bool>)delegate(bool value)
				{
					PlayerPrefs.SetInt("activeCutsceneDubbing", value ? 1 : 0);
					PlayerPrefs.Save();
					Debug.Log((object)("[AudioDubSlider] Doblaje en intermisiones: " + value));
				});
				Debug.Log((object)"[AudioDubSlider] Toggles creados correctamente");
			}
			catch (Exception ex)
			{
				Debug.LogError((object)("[AudioDubSlider] Error: " + ex));
			}
		}

		private static Toggle CrearToggle(GameObject slider, string toggleName, string playerPrefKey, string labelText)
		{
			GameObject gameObjectChild = GetGameObjectChild(slider, "Toggle(Clone)");
			Toggle component = gameObjectChild.GetComponent<Toggle>();
			GameObject val = Object.Instantiate<GameObject>(gameObjectChild, gameObjectChild.transform.parent);
			((Object)val).name = toggleName;
			val.SetActive(true);
			Toggle component2 = val.GetComponent<Toggle>();
			GameObject gameObjectChild2 = GetGameObjectChild(GetGameObjectChild(gameObjectChild, "Background"), "Checkmark");
			GameObject gameObjectChild3 = GetGameObjectChild(GetGameObjectChild(gameObjectChild, "Background"), "FakeCheck");
			gameObjectChild2.SetActive(false);
			gameObjectChild3.SetActive(false);
			GameObject gameObjectChild4 = GetGameObjectChild(val, "Background");
			GameObject gameObjectChild5 = GetGameObjectChild(gameObjectChild4, "Checkmark");
			((Selectable)component2).targetGraphic = (Graphic)(object)gameObjectChild4.GetComponent<Image>();
			component2.graphic = (Graphic)(object)gameObjectChild5.GetComponent<Image>();
			((Selectable)component2).transition = (Transition)1;
			if (!PlayerPrefs.HasKey(playerPrefKey))
			{
				PlayerPrefs.SetInt(playerPrefKey, 1);
				PlayerPrefs.Save();
				Debug.Log((object)("[AudioDubSlider] Creando PlayerPref '" + playerPrefKey + "' con valor por defecto: 1"));
			}
			component2.isOn = PlayerPrefs.GetInt(playerPrefKey) == 1;
			Object.Destroy((Object)(object)GetGameObjectChild(slider, "Reset Button Variant(Clone)"));
			((TMP_Text)GetTextMeshProUGUI(GetGameObjectChild(slider, "Text"))).text = labelText;
			return component2;
		}

		public static GameObject GetGameObjectChild(GameObject parent, string childName)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			foreach (Transform item in parent.transform)
			{
				Transform val = item;
				if (((Object)val).name == childName)
				{
					return ((Component)val).gameObject;
				}
			}
			return null;
		}

		public static TextMeshProUGUI GetTextMeshProUGUI(GameObject obj)
		{
			return obj.GetComponent<TextMeshProUGUI>();
		}
	}
}
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
internal class GabrielPatch2
{
	[HarmonyPostfix]
	public static void Postfix()
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) != 1)
		{
			return;
		}
		if ((Object)(object)Plugin.assets == (Object)null)
		{
			Debug.LogError((object)"[DubbingMod] AssetBundle no cargado en GabrielPatch2.");
			return;
		}
		AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
		foreach (AudioSource val in array)
		{
			if (!((Object)(object)val == (Object)null) && !((Object)(object)val.clip == (Object)null))
			{
				switch (((Object)val.clip).name)
				{
				case "gab_Intro1d":
					Swap(val, "gabrielIntro1.ogg");
					break;
				case "gab_Intro2b":
					Swap(val, "gabrielIntro2.ogg");
					break;
				case "gab_Behold":
					Swap(val, "gabrielFightStart.ogg");
					break;
				case "gab_Insignificant2b":
					Swap(val, "gabrielDefeated.ogg");
					break;
				case "gab_Woes":
					Swap(val, "gabrielOutro.ogg");
					break;
				}
			}
		}
	}

	private static void Swap(AudioSource source, string assetName)
	{
		AudioClip val = Plugin.assets.LoadAsset<AudioClip>(assetName);
		if ((Object)(object)val != (Object)null)
		{
			source.clip = val;
		}
	}
}
[HarmonyPatch(typeof(Gabriel), "Start")]
internal class GabrielAct1Patch
{
	[HarmonyPostfix]
	private static void Postfix(Gabriel __instance)
	{
		if (!(((object)__instance).GetType() != typeof(Gabriel)) && PlayerPrefs.GetInt("activeDubbing", 1) == 1 && !((Object)(object)Plugin.assets == (Object)null))
		{
			GabrielVoice componentInChildren = ((Component)__instance).GetComponentInChildren<GabrielVoice>(true);
			if (!((Object)(object)componentInChildren == (Object)null))
			{
				componentInChildren.taunt = (AudioClip[])(object)new AudioClip[12]
				{
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_YouDefyTheLight.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_AMereObject.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_ThereCanBeOnlyLight.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_Foolishness.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_AnImperfection.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_NotEvenMortal.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_YouAreLessThanNothing.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_YoureAnError.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_TheLightIsPerfection.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_YouAreOutclassed.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_YourCrimeIsExistence.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielTaunt_YouMakeEven.ogg")
				};
				componentInChildren.hurt = (AudioClip[])(object)new AudioClip[4]
				{
					Plugin.assets.LoadAsset<AudioClip>("gabrielHurt1.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielHurt2.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielHurt3.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielHurt4.ogg")
				};
				componentInChildren.bigHurt = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset<AudioClip>("gabrielBigHurt1.ogg") };
				componentInChildren.phaseChange = Plugin.assets.LoadAsset<AudioClip>("gabrielPhaseChange.ogg");
			}
		}
	}
}
[HarmonyPatch(typeof(GabrielVoice), "Start")]
internal class GabrielVoicePatch
{
	[HarmonyPatch(typeof(StockMapInfo), "Awake")]
	private class GabrielPatch3
	{
		[HarmonyPostfix]
		private static void Postfix()
		{
			if (PlayerPrefs.GetInt("activeDubbing", 1) != 1)
			{
				return;
			}
			if ((Object)(object)Plugin.assets == (Object)null)
			{
				Debug.LogError((object)"[DubbingMod] AssetBundle no cargado en GabrielPatch3.");
				return;
			}
			AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
			foreach (AudioSource val in array)
			{
				if (!((Object)(object)val == (Object)null) && !((Object)(object)val.clip == (Object)null))
				{
					switch (((Object)val.clip).name)
					{
					case "gab2nd_intro1b":
						Swap(val, "gabrielSecondIntro.ogg");
						break;
					case "gab2nd_intro2":
						Swap(val, "gabrielSecondFightStart.ogg");
						break;
					case "gab_Behold":
						Swap(val, "gabrielFightStart.ogg");
						break;
					case "gab2nd_Woes":
						Swap(val, "gabrielSecondOutro.ogg");
						break;
					case "gab2nd_outro":
						Swap(val, "gabrielSecondDefeated.ogg");
						break;
					case "gab2nd_6-1tease1":
						Swap(val, "gabrielHeresyFirst.ogg");
						break;
					case "gab2nd_6-1tease2":
						Swap(val, "gabrielHeresySecond.ogg");
						break;
					case "gab_Hologram":
					case "gab_HologramFiltered":
						Swap(val, "gabrielBoat.ogg");
						break;
					}
				}
			}
		}

		private static void Swap(AudioSource source, string assetName)
		{
			AudioClip val = Plugin.assets.LoadAsset<AudioClip>(assetName);
			if ((Object)(object)val != (Object)null)
			{
				source.clip = val;
			}
		}
	}

	[HarmonyPostfix]
	private static void Postfix(GabrielVoice __instance)
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) == 1 && !((Object)(object)Plugin.assets == (Object)null))
		{
			GabrielSecond componentInParent = ((Component)__instance).GetComponentInParent<GabrielSecond>();
			Gabriel componentInParent2 = ((Component)__instance).GetComponentInParent<Gabriel>();
			if ((Object)(object)componentInParent != (Object)null)
			{
				__instance.taunt = (AudioClip[])(object)new AudioClip[7]
				{
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_IsThisWhatILostTo.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_YoureGettingRusty.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_LetsSettleThis.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_NothingButScrap.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_IllShowYouDivine.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_TimeToRight.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_YouNeedMorePower.ogg")
				};
				__instance.tauntSecondPhase = (AudioClip[])(object)new AudioClip[7]
				{
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_IveNeverHadAFight.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_ShowMeWhat.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_NowThisIsAFight.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_WhatIsThisFeeling.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_ComeGetSomeBlood.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_ComeOnMachine.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondTaunt_IllShowYouTrueSplendor.ogg")
				};
				__instance.phaseChange = Plugin.assets.LoadAsset<AudioClip>("gabrielSecondPhaseChange.ogg");
				__instance.hurt = (AudioClip[])(object)new AudioClip[4]
				{
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondHurt1.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondHurt2.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondHurt3.ogg"),
					Plugin.assets.LoadAsset<AudioClip>("gabrielSecondHurt4.ogg")
				};
				__instance.bigHurt = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset<AudioClip>("gabrielSecondBigHurt1.ogg") };
			}
		}
	}
}
public static class IntermissionAudio
{
	private static AudioSource audioSource;

	private static bool wasPausedLastFrame;

	private static void EnsureAudioSource()
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Expected O, but got Unknown
		if ((Object)(object)audioSource == (Object)null)
		{
			GameObject val = new GameObject("IntermissionAudioSource");
			Object.DontDestroyOnLoad((Object)(object)val);
			audioSource = val.AddComponent<AudioSource>();
			audioSource.playOnAwake = false;
		}
	}

	public static bool PlayLine(string prefix, int line)
	{
		if (PlayerPrefs.GetInt("activeCutsceneDubbing", 1) != 1)
		{
			return false;
		}
		if ((Object)(object)Plugin.assets == (Object)null)
		{
			Plugin.LoggerInstance.LogError((object)"AssetBundle no cargado.");
			return false;
		}
		if (string.IsNullOrEmpty(prefix))
		{
			Plugin.LoggerInstance.LogWarning((object)"Prefijo vacío al reproducir línea.");
			return false;
		}
		EnsureAudioSource();
		float @float = PlayerPrefs.GetFloat("dubbingVolume", 5f);
		audioSource.volume = @float;
		Plugin.LoggerInstance.LogInfo((object)$"[IntermissionAudio] Volumen aplicado: {@float}");
		string text = $"{prefix}_line{line:D3}".ToLower().Replace("\\", "/");
		AudioClip val = Plugin.assets.LoadAsset<AudioClip>(text);
		if ((Object)(object)val == (Object)null)
		{
			Plugin.LoggerInstance.LogWarning((object)("No se encontró el clip: " + text));
			return false;
		}
		audioSource.clip = val;
		audioSource.Play();
		Plugin.LoggerInstance.LogInfo((object)("Reproduciendo clip: " + text));
		return true;
	}

	public static void StopCurrentAudio()
	{
		if ((Object)(object)audioSource != (Object)null && audioSource.isPlaying)
		{
			audioSource.Stop();
			Plugin.LoggerInstance.LogInfo((object)"Audio detenido (skip).");
		}
	}

	public static void HandlePause()
	{
		bool flag = (Object)(object)MonoSingleton<OptionsManager>.Instance != (Object)null && MonoSingleton<OptionsManager>.Instance.paused;
		if (wasPausedLastFrame && !flag)
		{
			if ((Object)(object)audioSource != (Object)null && (Object)(object)audioSource.clip != (Object)null && !audioSource.isPlaying)
			{
				audioSource.UnPause();
				Plugin.LoggerInstance.LogInfo((object)"Audio resumido después de pausa.");
			}
		}
		else if (!wasPausedLastFrame && flag && (Object)(object)audioSource != (Object)null && audioSource.isPlaying)
		{
			audioSource.Pause();
			Plugin.LoggerInstance.LogInfo((object)"Audio pausado.");
		}
		wasPausedLastFrame = flag;
	}
}
[HarmonyPatch(typeof(AudioSource), "Play", new Type[] { })]
public static class RadioAudioPlayPatch
{
	private static void Prefix(AudioSource __instance)
	{
		if (!((Object)(object)__instance == (Object)null) && !((Object)(object)__instance.clip == (Object)null) && !((Object)(object)((Component)__instance).GetComponentInParent<Radio>() == (Object)null) && PlayerPrefs.GetInt("activeDubbing", 1) == 1 && !((Object)(object)Plugin.assets == (Object)null))
		{
			string name = ((Object)__instance.clip).name;
			AudioClip val = Plugin.assets.LoadAsset<AudioClip>(name + ".ogg");
			if ((Object)(object)val != (Object)null)
			{
				__instance.clip = val;
			}
		}
	}
}
[HarmonyPatch(typeof(IntermissionController))]
public static class DubbingIntermissionPatch
{
	private class State
	{
		public string prefix;

		public int line = 1;

		public bool lastWaitingForInput = true;

		public bool firstPlayed = false;

		public bool isChoices = false;
	}

	private static readonly Dictionary<int, State> states = new Dictionary<int, State>();

	[HarmonyPostfix]
	[HarmonyPatch("Start")]
	public static void Start_Postfix(IntermissionController __instance, ref bool ___waitingForInput)
	{
		if (PlayerPrefs.GetInt("activeCutsceneDubbing", 1) == 1)
		{
			string text = GenerateUniquePrefix(((Component)__instance).transform);
			bool flag = IsChoicesPath(text);
			int instanceID = ((Object)__instance).GetInstanceID();
			states[instanceID] = new State
			{
				prefix = text,
				lastWaitingForInput = ___waitingForInput,
				firstPlayed = false,
				isChoices = flag
			};
			Plugin.LoggerInstance.LogInfo((object)$"Intermission iniciada → prefijo: {text} (choices={flag})");
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch("Update")]
	public static void Update_Postfix(IntermissionController __instance, ref bool ___waitingForInput, ref bool ___skipToInput)
	{
		IntermissionAudio.HandlePause();
		if ((Object)(object)MonoSingleton<OptionsManager>.Instance != (Object)null && MonoSingleton<OptionsManager>.Instance.paused)
		{
			return;
		}
		int instanceID = ((Object)__instance).GetInstanceID();
		if (!states.TryGetValue(instanceID, out var value))
		{
			return;
		}
		if (value.isChoices)
		{
			value.lastWaitingForInput = ___waitingForInput;
		}
		else if (!value.firstPlayed)
		{
			if (!___skipToInput)
			{
				IntermissionAudio.PlayLine(value.prefix, value.line);
				value.line++;
				value.firstPlayed = true;
			}
			value.lastWaitingForInput = ___waitingForInput;
		}
		else if (!___waitingForInput & ___skipToInput)
		{
			IntermissionAudio.StopCurrentAudio();
			value.lastWaitingForInput = ___waitingForInput;
		}
		else
		{
			if (value.lastWaitingForInput && !___waitingForInput && !___skipToInput)
			{
				IntermissionAudio.StopCurrentAudio();
				IntermissionAudio.PlayLine(value.prefix, value.line);
				value.line++;
			}
			value.lastWaitingForInput = ___waitingForInput;
		}
	}

	private static bool IsChoicesPath(string prefix)
	{
		string text = prefix.ToLowerInvariant();
		return text.Contains("_choices") || text.Contains("_choice") || text.Contains("_options") || text.Contains("_option");
	}

	private static string GenerateUniquePrefix(Transform t)
	{
		List<string> list = new List<string>();
		Transform val = t;
		while ((Object)(object)val != (Object)null)
		{
			list.Insert(0, SanitizeName(((Object)val).name));
			val = val.parent;
		}
		string input = string.Join("_", list);
		return Regex.Replace(input, "[^a-zA-Z0-9_\\-]", "");
	}

	private static string SanitizeName(string name)
	{
		char[] invalidChars = Path.GetInvalidFileNameChars();
		return new string(name.Where((char c) => !invalidChars.Contains(c)).ToArray());
	}
}
public static class AssetBundleManager
{
	public static AssetBundle assets;

	public static void LoadAssets()
	{
		if ((Object)(object)assets == (Object)null)
		{
			assets = Plugin.assets;
			if ((Object)(object)assets == (Object)null)
			{
				Debug.LogError((object)"No se pudo cargar el AssetBundle.");
			}
			else
			{
				Debug.Log((object)"AssetBundle cargado correctamente.");
			}
		}
	}
}
[HarmonyPatch(typeof(MinosPrime), "PlayVoice")]
internal class MinosPatch
{
	public static void Prefix(MinosPrime __instance, AudioClip[] voice)
	{
	}
}
[HarmonyPatch(typeof(MinosPrime), "Start")]
internal class MinosPatch1
{
	public static void Postfix(MinosPrime __instance, ref AudioSource ___aud)
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) == 1)
		{
			AudioSource obj = ___aud;
			obj.volume *= 5f;
			__instance.dropkickVoice = (AudioClip[])(object)new AudioClip[2]
			{
				Plugin.assets.LoadAsset<AudioClip>("minosPrimeJudgement1.ogg"),
				Plugin.assets.LoadAsset<AudioClip>("minosPrimeJudgement2.ogg")
			};
			__instance.comboVoice = (AudioClip[])(object)new AudioClip[2]
			{
				Plugin.assets.LoadAsset<AudioClip>("minosPrimePrepareThyself1.ogg"),
				Plugin.assets.LoadAsset<AudioClip>("minosPrimePrepareThyself2.ogg")
			};
			__instance.boxingVoice = (AudioClip[])(object)new AudioClip[2]
			{
				Plugin.assets.LoadAsset<AudioClip>("minosPrimeThyEndIsNow1.ogg"),
				Plugin.assets.LoadAsset<AudioClip>("minosPrimeThyEndIsNow2.ogg")
			};
			__instance.riderKickVoice = (AudioClip[])(object)new AudioClip[2]
			{
				Plugin.assets.LoadAsset<AudioClip>("minosPrimeDie1.ogg"),
				Plugin.assets.LoadAsset<AudioClip>("minosPrimeDie2.ogg")
			};
			__instance.dropAttackVoice = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset<AudioClip>("minosPrimeCrush1.ogg") };
			__instance.hurtVoice = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset<AudioClip>("minosPrimeHurt1.ogg") };
			__instance.phaseChangeVoice = Plugin.assets.LoadAsset<AudioClip>("minosPrimePhaseChange.ogg");
		}
	}
}
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
internal class MinosPatch2
{
	private static void Postfix(StockMapInfo __instance)
	{
		AssetBundleManager.LoadAssets();
		if (PlayerPrefs.GetInt("activeDubbing", 1) != 1 || (Object)(object)AssetBundleManager.assets == (Object)null)
		{
			return;
		}
		AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
		foreach (AudioSource val in array)
		{
			if (Object.op_Implicit((Object)(object)val.clip))
			{
				switch (((Object)val.clip).name)
				{
				case "mp_intro2":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("minosPrimeIntro.ogg");
					break;
				case "mp_outro":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("minosPrimeDefeated.ogg");
					break;
				case "mp_deathscream":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("minosPrimeDeathScream.ogg");
					break;
				case "mp_useless":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("minosPrimeRespawn.ogg");
					break;
				}
			}
		}
	}
}
[HarmonyPatch(typeof(AudioSource), "set_clip")]
public static class PowerAudioSwap
{
	private static ManualLogSource _logger;

	private static bool _isReplacing;

	public static void Init(ManualLogSource logger)
	{
		_logger = logger;
	}

	private static void Postfix(AudioSource __instance, AudioClip value)
	{
		if (_isReplacing || (Object)(object)value == (Object)null || (Object)(object)Plugin.assets == (Object)null || PlayerPrefs.GetInt("activeDubbing", 1) != 1)
		{
			return;
		}
		string name = ((Object)value).name;
		if (name.StartsWith("pow_") && !(name == "pow_ScreamContinuous"))
		{
			AudioClip val = Plugin.assets.LoadAsset<AudioClip>(name);
			if (!((Object)(object)val == (Object)null))
			{
				_isReplacing = true;
				Plugin.Log.LogInfo((object)("[DubbingMod] Reemplazando " + name));
				__instance.clip = val;
				_isReplacing = false;
			}
		}
	}
}
[HarmonyPatch(typeof(PowerVoiceController), "Awake")]
public static class PowerFallScreamFix
{
	private static bool _isReplacing;

	private static void Postfix(PowerVoiceController __instance)
	{
		if (_isReplacing || (Object)(object)Plugin.assets == (Object)null || PlayerPrefs.GetInt("activeDubbing", 1) != 1)
		{
			return;
		}
		string text = "pow_ScreamContinuous";
		AudioClip val = Plugin.assets.LoadAsset<AudioClip>(text);
		if (!((Object)(object)val == (Object)null))
		{
			_isReplacing = true;
			FieldInfo field = typeof(PowerVoiceController).GetField("fallScream", BindingFlags.Instance | BindingFlags.NonPublic);
			if (field != null)
			{
				field.SetValue(__instance, val);
				Plugin.Log.LogInfo((object)("[DubbingMod] Reemplazado " + text + " correctamente"));
			}
			else
			{
				Plugin.Log.LogError((object)"[DubbingMod] No se encontró el campo 'fallScream'");
			}
			_isReplacing = false;
		}
	}
}
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
public static class MuseumPatch
{
	[HarmonyPostfix]
	public static void Postfix(StockMapInfo __instance)
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) != 1)
		{
			return;
		}
		AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
		foreach (AudioSource val in array)
		{
			if (Object.op_Implicit((Object)(object)val.clip))
			{
				Debug.Log((object)((Object)val.clip).name);
				if (((Object)val.clip).name == "MandyPickUp")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("MandyPickUp.ogg");
				}
				else if (((Object)val.clip).name == "MandyThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("MandyThrow.ogg");
				}
				else if (((Object)val.clip).name == "MandyEasterEgg")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("MandyEasterEgg.ogg");
				}
				else if (((Object)val.clip).name == "HakitaPickUp")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("HakitaPickUp.ogg");
				}
				else if (((Object)val.clip).name == "HakitaThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("HakitaThrow.ogg");
				}
				else if (((Object)val.clip).name == "WeytePickUp")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("WeytePickUp.ogg");
				}
				else if (((Object)val.clip).name == "WeyteThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("WeyteThrow.ogg");
				}
				else if (((Object)val.clip).name == "LenvalPickUp")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("LenvalPickUp.ogg");
				}
				else if (((Object)val.clip).name == "LenvalThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("LenvalThrow.ogg");
				}
				else if (((Object)val.clip).name == "GianniPickUp")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("GianniPickUp.ogg");
				}
				else if (((Object)val.clip).name == "GianniThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("GianniThrow.ogg");
				}
				else if (((Object)val.clip).name == "QuetzalPickUp")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("QuetzalPickUp.ogg");
				}
				else if (((Object)val.clip).name == "RhiaPickup")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("RhiaPickup.ogg");
				}
				else if (((Object)val.clip).name == "RhiaThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("RhiaThrow.ogg");
				}
				else if (((Object)val.clip).name == "VyletPickup")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("VyletPickup.ogg");
				}
				else if (((Object)val.clip).name == "VyletThrow")
				{
					val.clip = Plugin.assets.LoadAsset<AudioClip>("VyletThrow.ogg");
				}
			}
		}
	}
}
[BepInPlugin("com.espteam.dubbingmod", "DubbingMod", "1.1")]
public class Plugin : BaseUnityPlugin
{
	public static Plugin Instance;

	public static ManualLogSource Log;

	public static AssetBundle assets;

	public static ManualLogSource LoggerInstance
	{
		get
		{
			Plugin instance = Instance;
			return (instance != null) ? ((BaseUnityPlugin)instance).Logger : null;
		}
	}

	private void Awake()
	{
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Expected O, but got Unknown
		Instance = this;
		Log = ((BaseUnityPlugin)this).Logger;
		assets = AssetBundle.LoadFromMemory(Resource1.doblaje);
		if ((Object)(object)assets == (Object)null)
		{
			((BaseUnityPlugin)this).Logger.LogError((object)"No se pudo cargar el AssetBundle.");
		}
		else
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"AssetBundle cargado correctamente.");
		}
		PowerAudioSwap.Init(((BaseUnityPlugin)this).Logger);
		Harmony val = new Harmony("com.espteam.dubbingmod");
		val.PatchAll();
		((BaseUnityPlugin)this).Logger.LogInfo((object)"DubbingMod inicializado correctamente.");
	}
}
[HarmonyPatch(typeof(SisyphusPrime), "PlayVoice")]
internal class SisyphusPatch
{
	public static void Prefix(SisyphusPrime __instance, AudioClip[] voice)
	{
	}
}
[HarmonyPatch(typeof(SisyphusPrime), "Start")]
internal class SisyphusPatch1
{
	public static void Postfix(SisyphusPrime __instance, ref AudioSource ___aud)
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) == 1)
		{
			AssetBundleManager.LoadAssets();
			if (!((Object)(object)AssetBundleManager.assets == (Object)null))
			{
				AudioSource obj = ___aud;
				obj.volume *= 5f;
				__instance.clapVoice = (AudioClip[])(object)new AudioClip[2]
				{
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusBegone1.ogg"),
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusBegone2.ogg")
				};
				__instance.stompComboVoice = (AudioClip[])(object)new AudioClip[2]
				{
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusYouCantEscape1.ogg"),
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusYouCantEscape2.ogg")
				};
				__instance.uppercutComboVoice = (AudioClip[])(object)new AudioClip[2]
				{
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusDestroy1.ogg"),
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusDestroy2.ogg")
				};
				__instance.tauntVoice = (AudioClip[])(object)new AudioClip[2]
				{
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusNiceTry1.ogg"),
					AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusNiceTry2.ogg")
				};
				__instance.explosionVoice = (AudioClip[])(object)new AudioClip[1] { AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusThisWillHurt.ogg") };
				__instance.hurtVoice = (AudioClip[])(object)new AudioClip[1] { AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusGrunt.ogg") };
				__instance.phaseChangeVoice = AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusYesThatsIt.ogg");
			}
		}
	}
}
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
internal class SisyphusPatch2
{
	private static void Postfix(StockMapInfo __instance)
	{
		if (PlayerPrefs.GetInt("activeDubbing", 1) != 1)
		{
			return;
		}
		AssetBundleManager.LoadAssets();
		if ((Object)(object)AssetBundleManager.assets == (Object)null)
		{
			return;
		}
		AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
		foreach (AudioSource val in array)
		{
			if (Object.op_Implicit((Object)(object)val.clip))
			{
				Debug.Log((object)((Object)val.clip).name);
				switch (((Object)val.clip).name)
				{
				case "sp_intro":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusIntro.ogg");
					break;
				case "sp_outro":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusOutro.ogg");
					break;
				case "sp_thisprison":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusThisPrison.ogg");
					break;
				case "sp_keepthemcoming":
					val.clip = AssetBundleManager.assets.LoadAsset<AudioClip>("sisyphusKeepThemComing.ogg");
					break;
				}
			}
		}
	}
}
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class Resource1
{
	private static ResourceManager resourceMan;

	private static CultureInfo resourceCulture;

	[EditorBrowsable(EditorBrowsableState.Advanced)]
	internal static ResourceManager ResourceManager
	{
		get
		{
			if (resourceMan == null)
			{
				ResourceManager resourceManager = new ResourceManager("DubbingMod.Resource1", typeof(Resource1).Assembly);
				resourceMan = resourceManager;
			}
			return resourceMan;
		}
	}

	[EditorBrowsable(EditorBrowsableState.Advanced)]
	internal static CultureInfo Culture
	{
		get
		{
			return resourceCulture;
		}
		set
		{
			resourceCulture = value;
		}
	}

	internal static byte[] doblaje
	{
		get
		{
			object @object = ResourceManager.GetObject("doblaje", resourceCulture);
			return (byte[])@object;
		}
	}

	internal Resource1()
	{
	}
}