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(); 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("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("mandaloreFullAuto.ogg"); __instance.voiceFuller = Plugin.assets.LoadAsset("mandaloreFullerAuto.ogg"); __instance.voices[0].secondPhase = Plugin.assets.LoadAsset("mandalorePhaseChange1Manda.ogg"); __instance.voices[1].secondPhase = Plugin.assets.LoadAsset("mandalorePhaseChange1Owl.ogg"); __instance.voices[0].thirdPhase = Plugin.assets.LoadAsset("mandalorePhaseChange2Manda.ogg"); __instance.voices[1].thirdPhase = Plugin.assets.LoadAsset("mandalorePhaseChange2Owl.ogg"); __instance.voices[0].finalPhase = Plugin.assets.LoadAsset("mandalorePhaseChangeFinalManda.ogg"); __instance.voices[1].finalPhase = Plugin.assets.LoadAsset("mandalorePhaseChangeFinalOwl.ogg"); __instance.voices[0].death = Plugin.assets.LoadAsset("mandaloreDefeatedManda.ogg"); __instance.voices[1].death = Plugin.assets.LoadAsset("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(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(); 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("mandaloreIntro.ogg"); } } else { val.clip = Plugin.assets.LoadAsset("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(gameObjectChild2, gameObjectChild.transform); val.GetComponent().anchoredPosition = new Vector2(300f, -225f); ((Object)val).name = "Dialogue Dub"; Toggle val2 = CrearToggle(val, "DubToggle", "activeDubbing", "DOBLAJE\n(REQUIERE REINICIAR)"); ((UnityEvent)(object)val2.onValueChanged).AddListener((UnityAction)delegate(bool value) { PlayerPrefs.SetInt("activeDubbing", value ? 1 : 0); PlayerPrefs.Save(); Debug.Log((object)("[AudioDubSlider] Doblaje general: " + value)); }); GameObject val3 = Object.Instantiate(gameObjectChild2, gameObjectChild.transform); val3.GetComponent().anchoredPosition = new Vector2(300f, -265f); ((Object)val3).name = "Cutscene Dub"; Toggle val4 = CrearToggle(val3, "CutsceneDubToggle", "activeCutsceneDubbing", "DOBLAJE INTERMISIONES\n(REQUIERE REINICIAR)"); ((UnityEvent)(object)val4.onValueChanged).AddListener((UnityAction)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(); GameObject val = Object.Instantiate(gameObjectChild, gameObjectChild.transform.parent); ((Object)val).name = toggleName; val.SetActive(true); Toggle component2 = val.GetComponent(); 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(); component2.graphic = (Graphic)(object)gameObjectChild5.GetComponent(); ((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(); } } } [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(); 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(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(true); if (!((Object)(object)componentInChildren == (Object)null)) { componentInChildren.taunt = (AudioClip[])(object)new AudioClip[12] { Plugin.assets.LoadAsset("gabrielTaunt_YouDefyTheLight.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_AMereObject.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_ThereCanBeOnlyLight.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_Foolishness.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_AnImperfection.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_NotEvenMortal.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_YouAreLessThanNothing.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_YoureAnError.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_TheLightIsPerfection.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_YouAreOutclassed.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_YourCrimeIsExistence.ogg"), Plugin.assets.LoadAsset("gabrielTaunt_YouMakeEven.ogg") }; componentInChildren.hurt = (AudioClip[])(object)new AudioClip[4] { Plugin.assets.LoadAsset("gabrielHurt1.ogg"), Plugin.assets.LoadAsset("gabrielHurt2.ogg"), Plugin.assets.LoadAsset("gabrielHurt3.ogg"), Plugin.assets.LoadAsset("gabrielHurt4.ogg") }; componentInChildren.bigHurt = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset("gabrielBigHurt1.ogg") }; componentInChildren.phaseChange = Plugin.assets.LoadAsset("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(); 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(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(); Gabriel componentInParent2 = ((Component)__instance).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { __instance.taunt = (AudioClip[])(object)new AudioClip[7] { Plugin.assets.LoadAsset("gabrielSecondTaunt_IsThisWhatILostTo.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_YoureGettingRusty.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_LetsSettleThis.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_NothingButScrap.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_IllShowYouDivine.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_TimeToRight.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_YouNeedMorePower.ogg") }; __instance.tauntSecondPhase = (AudioClip[])(object)new AudioClip[7] { Plugin.assets.LoadAsset("gabrielSecondTaunt_IveNeverHadAFight.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_ShowMeWhat.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_NowThisIsAFight.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_WhatIsThisFeeling.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_ComeGetSomeBlood.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_ComeOnMachine.ogg"), Plugin.assets.LoadAsset("gabrielSecondTaunt_IllShowYouTrueSplendor.ogg") }; __instance.phaseChange = Plugin.assets.LoadAsset("gabrielSecondPhaseChange.ogg"); __instance.hurt = (AudioClip[])(object)new AudioClip[4] { Plugin.assets.LoadAsset("gabrielSecondHurt1.ogg"), Plugin.assets.LoadAsset("gabrielSecondHurt2.ogg"), Plugin.assets.LoadAsset("gabrielSecondHurt3.ogg"), Plugin.assets.LoadAsset("gabrielSecondHurt4.ogg") }; __instance.bigHurt = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset("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.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(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.Instance != (Object)null && MonoSingleton.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() == (Object)null) && PlayerPrefs.GetInt("activeDubbing", 1) == 1 && !((Object)(object)Plugin.assets == (Object)null)) { string name = ((Object)__instance.clip).name; AudioClip val = Plugin.assets.LoadAsset(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 states = new Dictionary(); [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.Instance != (Object)null && MonoSingleton.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 list = new List(); 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("minosPrimeJudgement1.ogg"), Plugin.assets.LoadAsset("minosPrimeJudgement2.ogg") }; __instance.comboVoice = (AudioClip[])(object)new AudioClip[2] { Plugin.assets.LoadAsset("minosPrimePrepareThyself1.ogg"), Plugin.assets.LoadAsset("minosPrimePrepareThyself2.ogg") }; __instance.boxingVoice = (AudioClip[])(object)new AudioClip[2] { Plugin.assets.LoadAsset("minosPrimeThyEndIsNow1.ogg"), Plugin.assets.LoadAsset("minosPrimeThyEndIsNow2.ogg") }; __instance.riderKickVoice = (AudioClip[])(object)new AudioClip[2] { Plugin.assets.LoadAsset("minosPrimeDie1.ogg"), Plugin.assets.LoadAsset("minosPrimeDie2.ogg") }; __instance.dropAttackVoice = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset("minosPrimeCrush1.ogg") }; __instance.hurtVoice = (AudioClip[])(object)new AudioClip[1] { Plugin.assets.LoadAsset("minosPrimeHurt1.ogg") }; __instance.phaseChangeVoice = Plugin.assets.LoadAsset("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(); 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("minosPrimeIntro.ogg"); break; case "mp_outro": val.clip = AssetBundleManager.assets.LoadAsset("minosPrimeDefeated.ogg"); break; case "mp_deathscream": val.clip = AssetBundleManager.assets.LoadAsset("minosPrimeDeathScream.ogg"); break; case "mp_useless": val.clip = AssetBundleManager.assets.LoadAsset("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(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(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(); 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("MandyPickUp.ogg"); } else if (((Object)val.clip).name == "MandyThrow") { val.clip = Plugin.assets.LoadAsset("MandyThrow.ogg"); } else if (((Object)val.clip).name == "MandyEasterEgg") { val.clip = Plugin.assets.LoadAsset("MandyEasterEgg.ogg"); } else if (((Object)val.clip).name == "HakitaPickUp") { val.clip = Plugin.assets.LoadAsset("HakitaPickUp.ogg"); } else if (((Object)val.clip).name == "HakitaThrow") { val.clip = Plugin.assets.LoadAsset("HakitaThrow.ogg"); } else if (((Object)val.clip).name == "WeytePickUp") { val.clip = Plugin.assets.LoadAsset("WeytePickUp.ogg"); } else if (((Object)val.clip).name == "WeyteThrow") { val.clip = Plugin.assets.LoadAsset("WeyteThrow.ogg"); } else if (((Object)val.clip).name == "LenvalPickUp") { val.clip = Plugin.assets.LoadAsset("LenvalPickUp.ogg"); } else if (((Object)val.clip).name == "LenvalThrow") { val.clip = Plugin.assets.LoadAsset("LenvalThrow.ogg"); } else if (((Object)val.clip).name == "GianniPickUp") { val.clip = Plugin.assets.LoadAsset("GianniPickUp.ogg"); } else if (((Object)val.clip).name == "GianniThrow") { val.clip = Plugin.assets.LoadAsset("GianniThrow.ogg"); } else if (((Object)val.clip).name == "QuetzalPickUp") { val.clip = Plugin.assets.LoadAsset("QuetzalPickUp.ogg"); } else if (((Object)val.clip).name == "RhiaPickup") { val.clip = Plugin.assets.LoadAsset("RhiaPickup.ogg"); } else if (((Object)val.clip).name == "RhiaThrow") { val.clip = Plugin.assets.LoadAsset("RhiaThrow.ogg"); } else if (((Object)val.clip).name == "VyletPickup") { val.clip = Plugin.assets.LoadAsset("VyletPickup.ogg"); } else if (((Object)val.clip).name == "VyletThrow") { val.clip = Plugin.assets.LoadAsset("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("sisyphusBegone1.ogg"), AssetBundleManager.assets.LoadAsset("sisyphusBegone2.ogg") }; __instance.stompComboVoice = (AudioClip[])(object)new AudioClip[2] { AssetBundleManager.assets.LoadAsset("sisyphusYouCantEscape1.ogg"), AssetBundleManager.assets.LoadAsset("sisyphusYouCantEscape2.ogg") }; __instance.uppercutComboVoice = (AudioClip[])(object)new AudioClip[2] { AssetBundleManager.assets.LoadAsset("sisyphusDestroy1.ogg"), AssetBundleManager.assets.LoadAsset("sisyphusDestroy2.ogg") }; __instance.tauntVoice = (AudioClip[])(object)new AudioClip[2] { AssetBundleManager.assets.LoadAsset("sisyphusNiceTry1.ogg"), AssetBundleManager.assets.LoadAsset("sisyphusNiceTry2.ogg") }; __instance.explosionVoice = (AudioClip[])(object)new AudioClip[1] { AssetBundleManager.assets.LoadAsset("sisyphusThisWillHurt.ogg") }; __instance.hurtVoice = (AudioClip[])(object)new AudioClip[1] { AssetBundleManager.assets.LoadAsset("sisyphusGrunt.ogg") }; __instance.phaseChangeVoice = AssetBundleManager.assets.LoadAsset("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(); 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("sisyphusIntro.ogg"); break; case "sp_outro": val.clip = AssetBundleManager.assets.LoadAsset("sisyphusOutro.ogg"); break; case "sp_thisprison": val.clip = AssetBundleManager.assets.LoadAsset("sisyphusThisPrison.ogg"); break; case "sp_keepthemcoming": val.clip = AssetBundleManager.assets.LoadAsset("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() { } }