Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of AdventurousSkinForSonicTheHedgehog v1.0.1
AdventurousSkinForSonicTheHedgehog.dll
Decompiled 3 weeks agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HedgehogUtils.Forms; using HedgehogUtils.Forms.SuperForm; using Microsoft.CodeAnalysis; using MonoMod.RuntimeDetour.HookGen; using On.RoR2; using On.RoR2.UI; using RoR2; using RoR2.ContentManagement; using RoR2.UI; using ShaderSwapper; using SonicTheHedgehog.SkillStates; using UnityEngine; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("AdventurousSkinForSonicTheHedgehog")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+6b86163d135c8c08f2b6027868140f1c67a4fe8b")] [assembly: AssemblyProduct("AdventurousSkinForSonicTheHedgehog")] [assembly: AssemblyTitle("AdventurousSkinForSonicTheHedgehog")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace AdventurousSkinForSonicTheHedgehog { public class AdventurousSkinForSonicTheHedgehogContent : IContentPackProvider { [CompilerGenerated] private sealed class <FinalizeAsync>d__11 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AdventurousSkinForSonicTheHedgehogContent <>4__this; public FinalizeAsyncArgs args; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FinalizeAsync>d__11(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; AdventurousSkinForSonicTheHedgehogContent adventurousSkinForSonicTheHedgehogContent = <>4__this; if (num != 0) { return false; } <>1__state = -1; ShaderSwapping.SwapShaders(); adventurousSkinForSonicTheHedgehogContent.PopulateLoadedAssets(); ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)adventurousSkinForSonicTheHedgehogContent.BodyCatalogInit); SoundReplacements.SetUpHooks(); args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <GenerateContentPackAsync>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GetContentPackAsyncArgs args; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GenerateContentPackAsync>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; ContentPack.Copy(AdventurousSkinForSonicTheHedgehogContentPack, args.output); args.ReportProgress(1f); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <LoadStaticContentAsync>d__9 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LoadStaticContentAsyncArgs args; private AssetBundleCreateRequest <asyncOperation>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LoadStaticContentAsync>d__9(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <asyncOperation>5__2 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <asyncOperation>5__2 = AssetBundle.LoadFromFileAsync(AdventurousSkinForSonicTheHedgehogMain.AssetBundleDir); break; case 1: <>1__state = -1; break; } if (!((AsyncOperation)<asyncOperation>5__2).isDone) { args.ReportProgress(((AsyncOperation)<asyncOperation>5__2).progress); <>2__current = null; <>1__state = 1; return true; } Bundle = <asyncOperation>5__2.assetBundle; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal static AssetBundle Bundle; internal static Dictionary<AssetID, Object> LoadedAssets = new Dictionary<AssetID, Object>(); internal static ContentPack AdventurousSkinForSonicTheHedgehogContentPack { get; } = new ContentPack(); public static ReadOnlyContentPack ReadOnlyContentPack => new ReadOnlyContentPack(AdventurousSkinForSonicTheHedgehogContentPack); public string identifier => "com.MushroomMerchant.AdventurousSkinforSonicTheHedgehog"; [IteratorStateMachine(typeof(<LoadStaticContentAsync>d__9))] public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LoadStaticContentAsync>d__9(0) { args = args }; } [IteratorStateMachine(typeof(<GenerateContentPackAsync>d__10))] public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GenerateContentPackAsync>d__10(0) { args = args }; } [IteratorStateMachine(typeof(<FinalizeAsync>d__11))] public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FinalizeAsync>d__11(0) { <>4__this = this, args = args }; } internal static T GetLoadedAsset<T>(AssetID assetID) where T : Object { return (T)(object)LoadedAssets[assetID]; } private void PopulateLoadedAssets() { LoadedAssets.Add(AssetID.AnimatorOverrideController, (Object)(object)Bundle.LoadAsset<AnimatorOverrideController>("Assets/Animation/SonicAdventurousAnimatorOverrideController.overrideController")); LoadedAssets.Add(AssetID.PortraitIcon, (Object)(object)Bundle.LoadAsset<Texture2D>("Assets/Icons/texSASonicIcon.png")); LoadedAssets.Add(AssetID.SkinIcon, (Object)(object)Bundle.LoadAsset<Sprite>("Assets/Icons/FromColors/texSonicAdventureSkinIcon.png")); LoadedAssets.Add(AssetID.SonicMesh, (Object)(object)Bundle.LoadAsset<Mesh>("Assets/Imports/SASonicMesh.mesh")); LoadedAssets.Add(AssetID.SonicMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASonic.mat")); LoadedAssets.Add(AssetID.SonicBallMesh, (Object)(object)Bundle.LoadAsset<Mesh>("Assets/Imports/SASonicBallMesh.mesh")); LoadedAssets.Add(AssetID.SonicBallMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASonicBall.mat")); LoadedAssets.Add(AssetID.SonicBallVFXPrefab, (Object)(object)Bundle.LoadAsset<GameObject>("Assets/Imports/SASonicBallVFX.prefab")); LoadedAssets.Add(AssetID.SonicBallVFXMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASonicBallVFX.mat")); LoadedAssets.Add(AssetID.SonicBallParticleMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASonicBallParticle.mat")); LoadedAssets.Add(AssetID.SuperSonicMesh, (Object)(object)Bundle.LoadAsset<Mesh>("Assets/Imports/SASuperSonicMesh2.mesh")); LoadedAssets.Add(AssetID.SuperSonicMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASuperSonic.mat")); LoadedAssets.Add(AssetID.SuperSonicBallMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASuperSonicBall.mat")); LoadedAssets.Add(AssetID.SuperSonicBallVFXPrefab, (Object)(object)Bundle.LoadAsset<GameObject>("Assets/Materials/matSASuperSonicBallVFX.mat")); LoadedAssets.Add(AssetID.SuperSonicBallVFXMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASuperSonicBallParticle.mat")); LoadedAssets.Add(AssetID.SuperSonicBallParticleMaterial, (Object)(object)Bundle.LoadAsset<Material>("Assets/Materials/matSASuperSonicBallParticle.mat")); } private void BodyCatalogInit() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex = BodyCatalog.FindBodyIndex("SonicTheHedgehog"); SkinManagement.BodyCatalogInit(); AnimationChanges.BodyCatalogInit(); PortraitChanges.BodyCatalogInit(); } private void AddSelf(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } internal AdventurousSkinForSonicTheHedgehogContent() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(AddSelf); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.MushroomMerchant.AdventurousSkinforSonicTheHedgehog", "AdventurousSkinforSonicTheHedgehog", "1.0.1")] public class AdventurousSkinForSonicTheHedgehogMain : BaseUnityPlugin { public const string GUID = "com.MushroomMerchant.AdventurousSkinforSonicTheHedgehog"; public const string AUTHOR = "MushroomMerchant"; public const string MOD_NAME = "AdventurousSkinforSonicTheHedgehog"; public const string VERSION = "1.0.1"; public const string BODY_NAME = "SonicTheHedgehog"; public const string BODY_NAME_TOKEN = "DS_GAMING_SONIC_THE_HEDGEHOG_BODY_NAME"; internal static BodyIndex SonicBodyIndex; public static PluginInfo PluginInfo { get; private set; } public static AdventurousSkinForSonicTheHedgehogMain Instance { get; private set; } public static ConfigEntry<bool> ReplaceHomingImpactSoundConfig { get; set; } public static ConfigEntry<BasicConfigConditionSetting> ApplyCustomPortraitForSkin { get; set; } public static ConfigEntry<bool> BallFormForGrandSlamConfig { get; set; } public static ConfigEntry<bool> BallFormForHomingAttackConfig { get; set; } public static ConfigEntry<bool> BallFormForJumpConfig { get; set; } public static ConfigEntry<bool> CurlVFXConfig { get; set; } internal static AssetBundle AssetBundle { get; private set; } internal static string AssetBundleDir => Path.Combine(Path.GetDirectoryName(PluginInfo.Location), "adventurousskinforsonicthehedgehogassets"); private void Awake() { Instance = this; PluginInfo = ((BaseUnityPlugin)this).Info; BindConfig(); new AdventurousSkinForSonicTheHedgehogContent(); } private void Start() { LanguageSettings.AddLoadStringsHook(); } private void OnGUI() { if (!((Object)(object)AdventurousSkinForSonicTheHedgehogContent.Bundle == (Object)null)) { PortraitChanges.OnGUI(); } } private void BindConfig() { ReplaceHomingImpactSoundConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Sound Replacements: Homing Attack Impact", "ReplaceHomingImpactSound", true, "Replaces the metallic impact sound from landing a homing attack with a cartoony slap sound.\r\nThis replaces the sound for all skins."); ApplyCustomPortraitForSkin = ((BaseUnityPlugin)this).Config.Bind<BasicConfigConditionSetting>("Texture Replacements: Custom Portrait", "ApplyCustomPortraitForSkin", BasicConfigConditionSetting.Depends, "Replaces Sonic's portrait with a custom one whenever the Adventurous skin is active.\r\nA value of \"Default\" means that under certain circumstances (e.g. portrait-replacing mods are installed) the portrait will not be replaced; otherwise it will be.\r\nThis replaces the texture for the Adventurous skin."); BallFormForGrandSlamConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Mesh Replacements: Ball Form", "BallFormForGrandSlam", true, "Replaces Sonic's mesh with a sphere when performing the spindash at the beginning of his Grand Slam.\r\nThis replaces the mesh for the Adventurous skin."); BallFormForHomingAttackConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Mesh Replacements: Ball Form", "BallFormForHomingAttack", true, "Replaces Sonic's mesh with a sphere when performing his Homing Attack.\r\nThis replaces the mesh for the Adventurous skin."); BallFormForJumpConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Mesh Replacements: Ball Form", "BallFormForJump", false, "Replaces Sonic's mesh with a sphere when jumping.\r\nThis replaces the mesh for the Adventurous skin."); CurlVFXConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("VFX: Curled Up (Jump, Homing Attack, Grand Slam)", "CurlVFX", true, "Adds a blue aura around Sonic when jumping and when performing a Homing Attack or a Grand Slam.\r\nThe aura also leaves a trail behind Sonic.\r\nThis adds the visual effect for the Adventurous skin."); } internal static void LogFatal(object data) { ((BaseUnityPlugin)Instance).Logger.LogFatal(data); } internal static void LogError(object data) { ((BaseUnityPlugin)Instance).Logger.LogError(data); } internal static void LogWarning(object data) { ((BaseUnityPlugin)Instance).Logger.LogWarning(data); } internal static void LogMessage(object data) { ((BaseUnityPlugin)Instance).Logger.LogMessage(data); } internal static void LogInfo(object data) { ((BaseUnityPlugin)Instance).Logger.LogInfo(data); } internal static void LogDebug(object data) { ((BaseUnityPlugin)Instance).Logger.LogDebug(data); } } public class AnimationChanges { private enum AnimatorOverrideInPlace { Yes, No } [CompilerGenerated] private static class <>O { public static hook_Update <0>__Run_Update; public static hook_Start <1>__ModelSkinController_Start; } private static readonly Dictionary<Animator, AnimatorOverrideInPlace> AdventurousSonicAnimators = new Dictionary<Animator, AnimatorOverrideInPlace>(); private static readonly Dictionary<Animator, ModelSkinController> AdventurousSonicAnimatorsToSkinControllers = new Dictionary<Animator, ModelSkinController>(); private static readonly Dictionary<ModelSkinController, Mesh> PreviousMeshesForSkinControllers = new Dictionary<ModelSkinController, Mesh>(); private static readonly Dictionary<ModelSkinController, Material> PreviousMaterialsForSkinControllers = new Dictionary<ModelSkinController, Material>(); private static readonly Dictionary<ModelSkinController, GameObject> PreviousVFXForSkinControllers = new Dictionary<ModelSkinController, GameObject>(); internal static void BodyCatalogInit() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown object obj = <>O.<0>__Run_Update; if (obj == null) { hook_Update val = Run_Update; <>O.<0>__Run_Update = val; obj = (object)val; } Run.Update += (hook_Update)obj; object obj2 = <>O.<1>__ModelSkinController_Start; if (obj2 == null) { hook_Start val2 = ModelSkinController_Start; <>O.<1>__ModelSkinController_Start = val2; obj2 = (object)val2; } ModelSkinController.Start += (hook_Start)obj2; } private static void Run_Update(orig_Update orig, Run self) { ApplyAnimatorOverrideController(); ReplaceMeshWithBall(); ApplyVFX(); orig.Invoke(self); } private static void ModelSkinController_Start(orig_Start orig, ModelSkinController self) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (((ResourceAvailability)(ref BodyCatalog.availability)).available && !((Object)(object)self.characterModel == (Object)null) && !((Object)(object)self.characterModel.body == (Object)null) && self.characterModel.body.bodyIndex == AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex && (Object)(object)self.animator != (Object)null) { AdventurousSonicAnimators.Add(self.animator, AnimatorOverrideInPlace.No); AdventurousSonicAnimatorsToSkinControllers.Add(self.animator, self); } } internal static void ApplyAnimatorOverrideController() { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown if ((Object)(object)AdventurousSkinForSonicTheHedgehogContent.Bundle == (Object)null) { return; } AnimatorOverrideController loadedAsset = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<AnimatorOverrideController>(AssetID.AnimatorOverrideController); Dictionary<Animator, AnimatorOverrideInPlace> dictionary = new Dictionary<Animator, AnimatorOverrideInPlace>(); foreach (KeyValuePair<Animator, AnimatorOverrideInPlace> adventurousSonicAnimator in AdventurousSonicAnimators) { Animator key = adventurousSonicAnimator.Key; AnimatorOverrideInPlace value = adventurousSonicAnimator.Value; if (!((Object)(object)key == (Object)null) && value != 0 && AdventurousSonicAnimatorsToSkinControllers[key].currentSkinIndex == SkinManagement.AdventurousSkinIndex) { AnimatorOverrideController val = new AnimatorOverrideController(key.runtimeAnimatorController); AnimationClip[] animationClips = ((RuntimeAnimatorController)loadedAsset).animationClips; foreach (AnimationClip val2 in animationClips) { val[((Object)val2).name] = loadedAsset[((Object)val2).name]; } key.runtimeAnimatorController = (RuntimeAnimatorController)(object)val; dictionary.Add(key, AnimatorOverrideInPlace.Yes); } } dictionary.ToList().ForEach(delegate(KeyValuePair<Animator, AnimatorOverrideInPlace> update) { AdventurousSonicAnimators[update.Key] = update.Value; }); } internal static void ApplyVFX() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) foreach (KeyValuePair<Animator, ModelSkinController> adventurousSonicAnimatorsToSkinController in AdventurousSonicAnimatorsToSkinControllers) { Animator key = adventurousSonicAnimatorsToSkinController.Key; ModelSkinController value = adventurousSonicAnimatorsToSkinController.Value; if (AdventurousSonicAnimators[key] != 0 || (Object)(object)key == (Object)null || !((Behaviour)key).isActiveAndEnabled) { continue; } AnimatorStateInfo currentAnimatorStateInfo = key.GetCurrentAnimatorStateInfo(0); AnimatorStateInfo currentAnimatorStateInfo2 = key.GetCurrentAnimatorStateInfo(1); bool flag = typeof(HomingAttack).IsAssignableFrom(((object)EntityStateMachine.FindByCustomName(((Component)value.characterModel.body).gameObject, "Body").state).GetType()); if ((((AnimatorStateInfo)(ref currentAnimatorStateInfo2)).IsName("Ball") || ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Jump") || ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("BonusJump") || flag) && AdventurousSkinForSonicTheHedgehogMain.CurlVFXConfig.Value) { GameObject loadedAsset = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<GameObject>(AssetID.SonicBallVFXPrefab); if (!PreviousVFXForSkinControllers.ContainsKey(value)) { PreviousVFXForSkinControllers[value] = Object.Instantiate<GameObject>(loadedAsset, value.characterModel.coreTransform); } if (flag) { PreviousVFXForSkinControllers[value].GetComponent<TrailRenderer>().emitting = true; } else if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Jump") || ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Ball") || ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("BonusJump")) { PreviousVFXForSkinControllers[value].GetComponent<TrailRenderer>().emitting = false; } else { PreviousVFXForSkinControllers[value].GetComponent<TrailRenderer>().emitting = true; } ParticleSystem component = PreviousVFXForSkinControllers[value].GetComponent<ParticleSystem>(); MainModule main = component.main; Particle[] array = (Particle[])(object)new Particle[((MainModule)(ref main)).maxParticles]; int particles = component.GetParticles(array); for (int i = 0; i < particles; i++) { ((Particle)(ref array[i])).position = new Vector3(0f, 0.01f, 0f); } component.SetParticles(array, particles); } else if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Ball") && PreviousVFXForSkinControllers.ContainsKey(value)) { GameObject obj = PreviousVFXForSkinControllers[value]; PreviousVFXForSkinControllers.Remove(value); Object.Destroy((Object)(object)obj); } if (PreviousVFXForSkinControllers.ContainsKey(value)) { if (key.GetFloat("isSuperFloat") == 1f) { ((Renderer)PreviousVFXForSkinControllers[value].GetComponent<TrailRenderer>()).material = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SuperSonicBallVFXMaterial); ((Renderer)((Component)PreviousVFXForSkinControllers[value].GetComponent<ParticleSystem>()).GetComponent<ParticleSystemRenderer>()).material = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SuperSonicBallParticleMaterial); } else { ((Renderer)PreviousVFXForSkinControllers[value].GetComponent<TrailRenderer>()).material = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SonicBallVFXMaterial); ((Renderer)((Component)PreviousVFXForSkinControllers[value].GetComponent<ParticleSystem>()).GetComponent<ParticleSystemRenderer>()).material = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SonicBallParticleMaterial); } } } } internal static void ReplaceMeshWithBall() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) foreach (KeyValuePair<Animator, ModelSkinController> adventurousSonicAnimatorsToSkinController in AdventurousSonicAnimatorsToSkinControllers) { Animator key = adventurousSonicAnimatorsToSkinController.Key; ModelSkinController value = adventurousSonicAnimatorsToSkinController.Value; if (AdventurousSonicAnimators[key] != 0 || (Object)(object)key == (Object)null || !((Behaviour)key).isActiveAndEnabled) { continue; } key.GetCurrentAnimatorStateInfo(0); AnimatorStateInfo currentAnimatorStateInfo = key.GetCurrentAnimatorStateInfo(1); Type type = ((object)EntityStateMachine.FindByCustomName(((Component)value.characterModel.body).gameObject, "Body").state).GetType(); bool flag = typeof(HomingAttack).IsAssignableFrom(type) && ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Ball"); bool num = typeof(GrandSlamSpin).IsAssignableFrom(type) || typeof(GrandSlamDash).IsAssignableFrom(type); bool @bool = key.GetBool("isBall"); bool flag2 = flag && AdventurousSkinForSonicTheHedgehogMain.BallFormForHomingAttackConfig.Value; bool flag3 = @bool && AdventurousSkinForSonicTheHedgehogMain.BallFormForJumpConfig.Value; bool flag4 = num && AdventurousSkinForSonicTheHedgehogMain.BallFormForGrandSlamConfig.Value; if (flag2 || flag3 || flag4) { Mesh loadedAsset = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Mesh>(AssetID.SonicBallMesh); Material val = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SonicBallMaterial); Material loadedAsset2 = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SuperSonicBallMaterial); if (key.GetFloat("isSuperFloat") == 1f) { val = loadedAsset2; } if ((Object)(object)value.characterModel.mainSkinnedMeshRenderer.sharedMesh != (Object)(object)loadedAsset) { PreviousMeshesForSkinControllers[value] = value.characterModel.mainSkinnedMeshRenderer.sharedMesh; value.characterModel.mainSkinnedMeshRenderer.sharedMesh = loadedAsset; PreviousMaterialsForSkinControllers[value] = value.characterModel.baseRendererInfos[0].defaultMaterial; } ((Renderer)value.characterModel.mainSkinnedMeshRenderer).material = val; value.characterModel.baseRendererInfos[0].defaultMaterial = val; } else if (PreviousMeshesForSkinControllers.ContainsKey(value) && PreviousMaterialsForSkinControllers.ContainsKey(value)) { Mesh loadedAsset3 = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Mesh>(AssetID.SonicBallMesh); if ((Object)(object)value.characterModel.mainSkinnedMeshRenderer.sharedMesh == (Object)(object)loadedAsset3) { value.characterModel.mainSkinnedMeshRenderer.sharedMesh = PreviousMeshesForSkinControllers[value]; } if (key.GetFloat("isSuperFloat") < 1f && (Object)(object)PreviousMaterialsForSkinControllers[value] == (Object)(object)AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SuperSonicMaterial)) { PreviousMaterialsForSkinControllers[value] = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SonicMaterial); } else if (key.GetFloat("isSuperFloat") == 1f && (Object)(object)PreviousMaterialsForSkinControllers[value] == (Object)(object)AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SonicMaterial)) { PreviousMaterialsForSkinControllers[value] = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SuperSonicMaterial); } ((Renderer)value.characterModel.mainSkinnedMeshRenderer).material = PreviousMaterialsForSkinControllers[value]; value.characterModel.baseRendererInfos[0].defaultMaterial = PreviousMaterialsForSkinControllers[value]; } } } } public enum AssetID { AnimatorOverrideController, SkinIcon, PortraitIcon, SonicMaterial, SonicMesh, SonicBallMaterial, SonicBallMesh, SonicBallVFXPrefab, SonicBallVFXMaterial, SonicBallParticleMaterial, SuperSonicMaterial, SuperSonicMesh, SuperSonicBallMaterial, SuperSonicBallVFXPrefab, SuperSonicBallVFXMaterial, SuperSonicBallParticleMaterial } public enum BasicConfigConditionSetting { Never, Depends, Always } public class LanguageSettings { internal const string SKIN_NAME_TOKEN = "MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_NAME"; internal const string SKIN_FLAVOUR_TEXT_TOKEN = "MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_DESC"; internal static void AddLoadStringsHook() { HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LoadStrings)); } private static void LoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_NAME", "Adventurous"); self.SetStringByToken("MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_DESC", "Restless by nature, this hedgehog has an intense glint in his eye and an insatiable curiosity. As distinctive as his curved, deep-blue quills are, you'll still miss him if you blink."); } } public class PortraitChanges { [CompilerGenerated] private static class <>O { public static hook_GetSurvivorPortrait <0>__SurvivorCatalog_GetSurvivorPortrait; public static hook_Awake <1>__SurvivorIconController_Awake; public static hook_SetDisplayData <2>__GameEndReportPanelController_SetDisplayData; public static hook_Awake <3>__CharacterBody_Awake; } private static Texture2D SonicSASurvivorIcon; private static Texture2D SonicDefaultSurvivorIcon; private static readonly List<SurvivorIconController> SurvivorIconControllers = new List<SurvivorIconController>(); private static readonly List<CharacterBody> CharacterBodies = new List<CharacterBody>(); private static readonly Dictionary<string, string> PlayerSonicSkinSelected = new Dictionary<string, string>(); internal static bool ApplyingCustomIcon() { if (AdventurousSkinForSonicTheHedgehogMain.ApplyCustomPortraitForSkin.Value == BasicConfigConditionSetting.Never) { return false; } if (Chainloader.PluginInfos.ContainsKey("DTEE.Icons") && AdventurousSkinForSonicTheHedgehogMain.ApplyCustomPortraitForSkin.Value == BasicConfigConditionSetting.Depends) { return false; } return true; } internal static void BodyCatalogInit() { LoadIcons(); IconReplacementHooks(); } internal static void LoadIcons() { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown if ((Object)(object)SonicSASurvivorIcon == (Object)null && (Object)(object)AdventurousSkinForSonicTheHedgehogContent.Bundle != (Object)null) { SonicSASurvivorIcon = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Texture2D>(AssetID.PortraitIcon); } if ((Object)(object)SonicDefaultSurvivorIcon == (Object)null && (Object)(object)BodyCatalog.FindBodyPrefab("SonicTheHedgehog") != (Object)null && (Object)(object)BodyCatalog.FindBodyPrefab("SonicTheHedgehog").GetComponent<CharacterBody>() != (Object)null) { SonicDefaultSurvivorIcon = (Texture2D)BodyCatalog.FindBodyPrefab("SonicTheHedgehog").GetComponent<CharacterBody>().portraitIcon; } } internal static void IconReplacementHooks() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown object obj = <>O.<0>__SurvivorCatalog_GetSurvivorPortrait; if (obj == null) { hook_GetSurvivorPortrait val = SurvivorCatalog_GetSurvivorPortrait; <>O.<0>__SurvivorCatalog_GetSurvivorPortrait = val; obj = (object)val; } SurvivorCatalog.GetSurvivorPortrait += (hook_GetSurvivorPortrait)obj; object obj2 = <>O.<1>__SurvivorIconController_Awake; if (obj2 == null) { hook_Awake val2 = SurvivorIconController_Awake; <>O.<1>__SurvivorIconController_Awake = val2; obj2 = (object)val2; } SurvivorIconController.Awake += (hook_Awake)obj2; object obj3 = <>O.<2>__GameEndReportPanelController_SetDisplayData; if (obj3 == null) { hook_SetDisplayData val3 = GameEndReportPanelController_SetDisplayData; <>O.<2>__GameEndReportPanelController_SetDisplayData = val3; obj3 = (object)val3; } GameEndReportPanelController.SetDisplayData += (hook_SetDisplayData)obj3; object obj4 = <>O.<3>__CharacterBody_Awake; if (obj4 == null) { hook_Awake val4 = CharacterBody_Awake; <>O.<3>__CharacterBody_Awake = val4; obj4 = (object)val4; } CharacterBody.Awake += (hook_Awake)obj4; } private static Texture SurvivorCatalog_GetSurvivorPortrait(orig_GetSurvivorPortrait orig, SurvivorIndex survivorIndex) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (ApplyingCustomIcon() && SkinCatalog.GetSkinDef((SkinIndex)LocalUserManager.GetFirstLocalUser().userProfile.loadout.bodyLoadoutManager.GetSkinIndex(AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex)).nameToken == "MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_NAME") { return (Texture)(object)SonicSASurvivorIcon; } return orig.Invoke(survivorIndex); } private static void SurvivorIconController_Awake(orig_Awake orig, SurvivorIconController self) { orig.Invoke(self); if (ApplyingCustomIcon()) { SurvivorIconControllers.Add(self); } } private static void GameEndReportPanelController_SetDisplayData(orig_SetDisplayData orig, GameEndReportPanelController self, DisplayData newDisplayData) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, newDisplayData); if (ApplyingCustomIcon()) { PlayerInfo val = newDisplayData.runReport.playerInfos[newDisplayData.playerIndex]; if (val.bodyName == "SonicTheHedgehog" && PlayerSonicSkinSelected.ContainsKey(val.name) && PlayerSonicSkinSelected[val.name] == "MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_NAME") { self.playerBodyPortraitImage.texture = (Texture)(object)SonicSASurvivorIcon; } } } private static void CharacterBody_Awake(orig_Awake orig, CharacterBody self) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (ApplyingCustomIcon() && self.bodyIndex == AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex) { CharacterBodies.Add(self); } } internal static void OnGUI() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Invalid comparison between Unknown and I4 //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)SonicSASurvivorIcon == (Object)null || !ApplyingCustomIcon()) { return; } SkinDef[] array = SkinCatalog.FindSkinsForBody(AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex); int num = -1; for (int i = 0; i < array.Length; i++) { if (array[i].nameToken == "MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_NAME") { num = i; } } CharacterBodies.RemoveAll((CharacterBody characterBody) => (Object)(object)characterBody == (Object)null); foreach (CharacterBody characterBody in CharacterBodies) { if (characterBody.skinIndex == num) { characterBody.portraitIcon = (Texture)(object)SonicSASurvivorIcon; } } if ((Object)(object)Run.instance != (Object)null && Run.instance.isRunning && Run.instance.livingPlayerCount > 0) { foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if ((Object)(object)instance == (Object)null || (Object)(object)instance.body == (Object)null || (Object)(object)instance.body.modelLocator == (Object)null || (Object)(object)instance.body.modelLocator.modelTransform == (Object)null || (Object)(object)((Component)instance.body.modelLocator.modelTransform).gameObject == (Object)null) { continue; } ModelSkinController component = ((Component)instance.body.modelLocator.modelTransform).gameObject.GetComponent<ModelSkinController>(); if ((Object)(object)component == (Object)null || (Object)(object)component.characterModel == (Object)null || (Object)(object)component.characterModel.body == (Object)null) { continue; } BodyIndex bodyIndex = component.characterModel.body.bodyIndex; int currentSkinIndex = component.currentSkinIndex; if (currentSkinIndex >= 0) { string nameToken = component.skins[currentSkinIndex].nameToken; string displayName = instance.GetDisplayName(); if (bodyIndex == AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex) { PlayerSonicSkinSelected[displayName] = nameToken; } } } } SurvivorIconControllers.RemoveAll((SurvivorIconController survivorIconController) => (Object)(object)survivorIconController == (Object)null || (Object)(object)survivorIconController.survivorIcon == (Object)null); foreach (SurvivorIconController survivorIconController in SurvivorIconControllers) { if ((int)survivorIconController.survivorIndex != (int)SurvivorCatalog.bodyIndexToSurvivorIndex[AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex]) { continue; } Texture texture = survivorIconController.survivorIcon.texture; foreach (LocalUser localUsers in LocalUserManager.localUsersList) { texture = (Texture)(object)((localUsers.userProfile.loadout.bodyLoadoutManager.GetSkinIndex(AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex) != num) ? SonicDefaultSurvivorIcon : SonicSASurvivorIcon); } foreach (NetworkUser instances in NetworkUser.instancesList) { CharacterBody currentBody = instances.GetCurrentBody(); if (!((Object)(object)currentBody == (Object)null) && instances.networkLoadout.loadout.bodyLoadoutManager.GetSkinIndex(AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex) == num && currentBody.bodyIndex == AdventurousSkinForSonicTheHedgehogMain.SonicBodyIndex) { texture = (Texture)(object)SonicSASurvivorIcon; } } survivorIconController.survivorIcon.texture = texture; } } } public class ShaderSwapping { public static void SwapShaders() { ((MonoBehaviour)AdventurousSkinForSonicTheHedgehogMain.Instance).StartCoroutine(ShaderSwapper.UpgradeStubbedShadersAsync(AdventurousSkinForSonicTheHedgehogContent.Bundle)); } } public class SkinManagement { internal static int AdventurousSkinIndex; internal static void BodyCatalogInit() { AddAdventurousSkin(); } private static void AddAdventurousSkin() { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) string name = "Sonic Adventurous Skin"; GameObject gameObject = ((Component)BodyCatalog.FindBodyPrefab("SonicTheHedgehog").GetComponent<ModelLocator>().modelTransform).gameObject; ModelSkinController component = gameObject.GetComponent<ModelSkinController>(); Renderer[] componentsInChildren = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef val = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams val2 = ScriptableObject.CreateInstance<SkinDefParams>(); ((Object)val).name = name; val.nameToken = "MUSHROOMMERCHANT_SONIC_THE_HEDGEHOG_ADVENTUROUS_SKIN_NAME"; val.icon = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Sprite>(AssetID.SkinIcon); val.rootObject = gameObject; val.baseSkins = (SkinDef[])(object)new SkinDef[1] { ((IEnumerable<SkinDef>)component.skins).FirstOrDefault((Func<SkinDef, bool>)((SkinDef skin) => ((Object)skin).name == "DS_GAMING_SONIC_THE_HEDGEHOG_BODY_NAME")) }; val2.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SonicMaterial), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ((IEnumerable<Renderer>)componentsInChildren).FirstOrDefault((Func<Renderer, bool>)((Renderer renderer) => ((Object)renderer).name == "SonicMesh")) } }; val2.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Mesh>(AssetID.SonicMesh), renderer = ((IEnumerable<Renderer>)componentsInChildren).FirstOrDefault((Func<Renderer, bool>)((Renderer renderer) => ((Object)renderer).name == "SonicMesh")) } }; val.skinDefParams = val2; Array.Resize(ref component.skins, component.skins.Length + 1); component.skins[component.skins.Length - 1] = val; AdventurousSkinIndex = component.skins.Length - 1; AddAdventurousSuperFormSkin(val); } private static void AddAdventurousSuperFormSkin(SkinDef skinDef) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) Forms.AddSkinForForm(skinDef.nameToken, new RenderReplacements { material = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Material>(AssetID.SuperSonicMaterial), mesh = AdventurousSkinForSonicTheHedgehogContent.GetLoadedAsset<Mesh>(AssetID.SuperSonicMesh) }, ref SuperFormDef.superFormDef); } } public class SoundReplacements : MonoBehaviour { [CompilerGenerated] private static class <>O { public static hook_PlaySound_string_GameObject <0>__Util_PlaySound_string_GameObject; } internal static void SetUpHooks() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown if (Chainloader.PluginInfos.ContainsKey("com.bepis.r2api.sound")) { object obj = <>O.<0>__Util_PlaySound_string_GameObject; if (obj == null) { hook_PlaySound_string_GameObject val = Util_PlaySound_string_GameObject; <>O.<0>__Util_PlaySound_string_GameObject = val; obj = (object)val; } Util.PlaySound_string_GameObject += (hook_PlaySound_string_GameObject)obj; } } private static uint Util_PlaySound_string_GameObject(orig_PlaySound_string_GameObject orig, string soundString, GameObject gameObject) { if ((Object)(object)gameObject != (Object)null && (Object)(object)gameObject.GetComponent<CharacterBody>() != (Object)null && gameObject.GetComponent<CharacterBody>().baseNameToken == "DS_GAMING_SONIC_THE_HEDGEHOG_BODY_NAME" && gameObject.GetComponent<CharacterBody>().skinIndex == SkinManagement.AdventurousSkinIndex) { switch (soundString) { case "Play_hedgehogutils_jump_ball": soundString = "Play_sonicadventurous_jump_ball"; break; case "Play_sonicthehedgehog_homing_attack": soundString = "Play_sonicadventurous_homing_attack"; break; case "Play_sonicthehedgehog_spindash_charge": soundString = "Play_sonicadventurous_spindash_charge"; break; case "Play_sonicthehedgehog_spindash_release": soundString = "Play_sonicadventurous_spindash_release"; break; case "Play_char_land": soundString = "Play_sonicadventurous_land"; break; case "Play_player_footstep": soundString = "Play_sonicadventurous_footstep"; break; case "Play_hedgehogutils_brake": soundString = "Play_sonicadventurous_brake"; break; case "Play_hedgehogutils_boost": soundString = "Play_sonicadventurous_boost"; if (gameObject.GetComponent<CharacterBody>().HasBuff(SuperFormDef.superFormDef.buff)) { soundString = "Play_sonicadventurous_super_boost"; } break; case "Play_sonicthehedgehog_swing": soundString = "Play_sonicadventurous_swing"; break; case "Play_sonicthehedgehog_swing_low": soundString = "Play_sonicadventurous_swing_low"; break; case "Play_sonicthehedgehog_swing_strong": soundString = "Play_sonicadventurous_swing_strong"; break; case "Play_hedgehogutils_emerald": soundString = "Play_sonicadventurous_emerald"; break; case "Play_hedgehogutils_super_transform": soundString = "Play_sonicadventurous_super_transform"; break; } } return orig.Invoke(soundString, gameObject); } } }