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()
{
}
}