Please disclose if your mod was created primarily 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 Made in Abyss Suits v1.0.0
mia_suits.dll
Decompiled 3 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using Dissonance; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("mia_suits")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("mia_suits")] [assembly: AssemblyTitle("mia_suits")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace ModelReplacement { public class MRNANACHI : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Nanachi"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } protected override void AddModelScripts() { SkinnedMeshRenderer componentInChildren = base.replacementModel.GetComponentInChildren<SkinnedMeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { BlendShapeBlink blendShapeBlink = base.replacementModel.AddComponent<BlendShapeBlink>(); blendShapeBlink.Init(componentInChildren, "05_Eye_Blink", -1, 6f, 12f); BlendShapeMouthSpeak blendShapeMouthSpeak = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak.Init(componentInChildren, ((BodyReplacementBase)this).controller, "08_Mouth_A", -1, 50f); BlendShapeMouthSpeak blendShapeMouthSpeak2 = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak2.Init(componentInChildren, ((BodyReplacementBase)this).controller, "16_Mouth_Smile2", -1, 50f); } } } public class MRMARULK : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Marulk"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } protected override void AddModelScripts() { SkinnedMeshRenderer componentInChildren = base.replacementModel.GetComponentInChildren<SkinnedMeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { BlendShapeBlink blendShapeBlink = base.replacementModel.AddComponent<BlendShapeBlink>(); blendShapeBlink.Init(componentInChildren, "00_Eye_Blink", -1, 6f, 12f); BlendShapeMouthSpeak blendShapeMouthSpeak = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak.Init(componentInChildren, ((BodyReplacementBase)this).controller, "08_Mouth_Damage", -1, 60f); } } } public class MRLYZA : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Lyza"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } protected override void AddModelScripts() { SkinnedMeshRenderer componentInChildren = base.replacementModel.GetComponentInChildren<SkinnedMeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { BlendShapeBlink blendShapeBlink = base.replacementModel.AddComponent<BlendShapeBlink>(); blendShapeBlink.Init(componentInChildren, "Eyes_Blink", -1, 6f, 12f); BlendShapeMouthSpeak blendShapeMouthSpeak = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak.Init(componentInChildren, ((BodyReplacementBase)this).controller, "Mouth_A", -1, 40f); BlendShapeMouthSpeak blendShapeMouthSpeak2 = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak2.Init(componentInChildren, ((BodyReplacementBase)this).controller, "Mouth_Damage", -1, 60f); } } } public class MRFAPUTA : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Faputa"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } protected override void AddModelScripts() { Transform val = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/Shoulder.L"); Transform val2 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/BLeft shoulder"); if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val2)) { ScaledRotationFollower scaledRotationFollower = ((Component)val2).gameObject.AddComponent<ScaledRotationFollower>(); scaledRotationFollower.Init(val, val2, 1f); } Transform val3 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/Shoulder.L/Arms.L"); Transform val4 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/BLeft shoulder/BLeft arm"); if (Object.op_Implicit((Object)(object)val3) && Object.op_Implicit((Object)(object)val4)) { ScaledRotationFollower scaledRotationFollower2 = ((Component)val4).gameObject.AddComponent<ScaledRotationFollower>(); scaledRotationFollower2.Init(val3, val4, 0.35f); } Transform val5 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/Shoulder.L/Arms.L/Elbow.L"); Transform val6 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/BLeft shoulder/BLeft arm/BLeft elbow"); if (Object.op_Implicit((Object)(object)val5) && Object.op_Implicit((Object)(object)val6)) { ScaledRotationFollower scaledRotationFollower3 = ((Component)val6).gameObject.AddComponent<ScaledRotationFollower>(); scaledRotationFollower3.Init(val5, val6, 0.7f); } Transform val7 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/Shoulder.R"); Transform val8 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/BRight shoulder"); if (Object.op_Implicit((Object)(object)val7) && Object.op_Implicit((Object)(object)val8)) { ScaledRotationFollower scaledRotationFollower4 = ((Component)val8).gameObject.AddComponent<ScaledRotationFollower>(); scaledRotationFollower4.Init(val7, val8, 1f); } Transform val9 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/Shoulder.R/Arms.R"); Transform val10 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/BRight shoulder/BRight arm"); if (Object.op_Implicit((Object)(object)val9) && Object.op_Implicit((Object)(object)val10)) { ScaledRotationFollower scaledRotationFollower5 = ((Component)val10).gameObject.AddComponent<ScaledRotationFollower>(); scaledRotationFollower5.Init(val9, val10, 0.35f); } Transform val11 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/Shoulder.R/Arms.R/Elbow.R"); Transform val12 = base.replacementModel.transform.Find("Faputa ToonShading/Faputa ToonShading_arm/ParentNode/Center/Groove/UpperBody/UpperBody2/BRight shoulder/BRight arm/BRight elbow"); if (Object.op_Implicit((Object)(object)val11) && Object.op_Implicit((Object)(object)val12)) { ScaledRotationFollower scaledRotationFollower6 = ((Component)val12).gameObject.AddComponent<ScaledRotationFollower>(); scaledRotationFollower6.Init(val11, val12, 0.7f); } SkinnedMeshRenderer componentInChildren = base.replacementModel.GetComponentInChildren<SkinnedMeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { BlendShapeBlink blendShapeBlink = base.replacementModel.AddComponent<BlendShapeBlink>(); blendShapeBlink.Init(componentInChildren, "Blink", -1, 6f, 12f); BlendShapeMouthSpeak blendShapeMouthSpeak = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak.Init(componentInChildren, ((BodyReplacementBase)this).controller, "▲Triangle"); } } } public class MROZEN : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Ozen"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } } public class MRREG : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "reg"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } } public class MRPRUSHKA : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Prushka"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } protected override void AddModelScripts() { SkinnedMeshRenderer componentInChildren = base.replacementModel.GetComponentInChildren<SkinnedMeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { BlendShapeBlink blendShapeBlink = base.replacementModel.AddComponent<BlendShapeBlink>(); blendShapeBlink.Init(componentInChildren, "07_Eye_Blink", -1, 6f, 12f); BlendShapeMouthSpeak blendShapeMouthSpeak = base.replacementModel.AddComponent<BlendShapeMouthSpeak>(); blendShapeMouthSpeak.Init(componentInChildren, ((BodyReplacementBase)this).controller, "15_Mouth_Damage", -1, 50f); } } } public class MRRIKO : BodyReplacementBase { protected override GameObject LoadAssetsAndReturnModel() { string text = "Riko"; return Assets.MainAssetBundle.LoadAsset<GameObject>(text); } protected override void AddModelScripts() { SkinnedMeshRenderer componentInChildren = base.replacementModel.GetComponentInChildren<SkinnedMeshRenderer>(); if ((Object)(object)componentInChildren != (Object)null) { BlendShapeBlink blendShapeBlink = base.replacementModel.AddComponent<BlendShapeBlink>(); blendShapeBlink.Init(componentInChildren, "Blink", -1, 6f, 12f); BlendShapeMouthSpeakRiko blendShapeMouthSpeakRiko = base.replacementModel.AddComponent<BlendShapeMouthSpeakRiko>(); blendShapeMouthSpeakRiko.Init(componentInChildren, ((BodyReplacementBase)this).controller); } } } public class PositionOnlySync : MonoBehaviour { public Transform sourceBone; public Transform targetBone; private Vector3 initialLocalPosition; private Quaternion initialLocalRotation; private Transform targetParent; public void Init(Transform source, Transform target) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) sourceBone = source; targetBone = target; targetParent = target.parent; initialLocalPosition = target.localPosition; initialLocalRotation = target.localRotation; } private void LateUpdate() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)sourceBone == (Object)null) && !((Object)(object)targetBone == (Object)null)) { targetBone.position = sourceBone.position; targetBone.localRotation = initialLocalRotation; targetBone.localPosition = initialLocalPosition; } } } public class ScaledRotationFollower : MonoBehaviour { public Transform sourceBone; public Transform targetBone; public float rotationScale = 0.5f; private Quaternion sourceInitialLocalRotation; private Quaternion sourceInitialWorldRotation; private Quaternion targetInitialLocalRotation; private Quaternion targetInitialWorldRotation; public bool useWorldSpace = false; public void Init(Transform source, Transform target, float scale) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) sourceBone = source; targetBone = target; rotationScale = scale; targetInitialLocalRotation = target.localRotation; targetInitialWorldRotation = target.rotation; sourceInitialLocalRotation = source.localRotation; sourceInitialWorldRotation = source.rotation; } private void LateUpdate() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)sourceBone == (Object)null) && !((Object)(object)targetBone == (Object)null)) { Quaternion val = Quaternion.Inverse(sourceInitialLocalRotation) * sourceBone.localRotation; Quaternion val2 = Quaternion.Inverse(sourceInitialWorldRotation) * sourceBone.rotation; Quaternion val3 = (useWorldSpace ? val2 : val); Quaternion val4 = Quaternion.Slerp(Quaternion.identity, val3, rotationScale); if (useWorldSpace) { targetBone.rotation = targetInitialWorldRotation * val4; } else { targetBone.localRotation = targetInitialLocalRotation * val4; } } } } public class BlendShapeBlink : MonoBehaviour { [CompilerGenerated] private sealed class <AnimateBlendShape>d__11 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int index; public float from; public float to; public float duration; public BlendShapeBlink <>4__this; private float <t>5__1; private float <normalized>5__2; private float <eased>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <AnimateBlendShape>d__11(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <t>5__1 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__1 < duration) { <t>5__1 += Time.deltaTime; <normalized>5__2 = Mathf.Clamp01(<t>5__1 / duration); <eased>5__3 = Mathf.SmoothStep(from, to, <normalized>5__2); <>4__this.skinnedMeshRenderer.SetBlendShapeWeight(index, <eased>5__3); <>2__current = null; <>1__state = 1; return true; } <>4__this.skinnedMeshRenderer.SetBlendShapeWeight(index, to); 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 <BlinkLoop>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public BlendShapeBlink <>4__this; private Mesh <mesh>5__1; private float <wait>5__2; private float <half>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <BlinkLoop>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <mesh>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Expected O, but got Unknown //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; if ((Object)(object)<>4__this.skinnedMeshRenderer == (Object)null || (Object)(object)<>4__this.skinnedMeshRenderer.sharedMesh == (Object)null || <>4__this.skinnedMeshRenderer.sharedMesh.blendShapeCount == 0) { return false; } if (<>4__this.blendShapeIndex < 0) { <>4__this.blendShapeIndex = <>4__this.ResolveBlendShapeIndex(<>4__this.skinnedMeshRenderer, <>4__this.blendShapeName); } if (<>4__this.blendShapeIndex < 0) { return false; } <mesh>5__1 = <>4__this.skinnedMeshRenderer.sharedMesh; break; case 2: <>1__state = -1; <half>5__3 = Mathf.Max(0.01f, <>4__this.blinkDuration / 2f); <>2__current = <>4__this.AnimateBlendShape(<>4__this.blendShapeIndex, 0f, <>4__this.closedWeight, <half>5__3); <>1__state = 3; return true; case 3: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.02f); <>1__state = 4; return true; case 4: <>1__state = -1; <>2__current = <>4__this.AnimateBlendShape(<>4__this.blendShapeIndex, <>4__this.closedWeight, 0f, <half>5__3); <>1__state = 5; return true; case 5: <>1__state = -1; break; } <wait>5__2 = Random.Range(<>4__this.minInterval, <>4__this.maxInterval); <>2__current = (object)new WaitForSeconds(<wait>5__2); <>1__state = 2; return true; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public SkinnedMeshRenderer skinnedMeshRenderer; public string blendShapeName = "Blink"; public int blendShapeIndex = -1; public float blinkDuration = 0.15f; public float minInterval = 10f; public float maxInterval = 20f; public float closedWeight = 100f; private Coroutine blinkCoroutine; public void Init(SkinnedMeshRenderer smr, string blendShapeName = "Blink", int blendShapeIndex = -1, float minInterval = 10f, float maxInterval = 20f) { skinnedMeshRenderer = smr; this.blendShapeName = blendShapeName; this.blendShapeIndex = blendShapeIndex; this.minInterval = minInterval; this.maxInterval = maxInterval; if (blinkCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(blinkCoroutine); } blinkCoroutine = ((MonoBehaviour)this).StartCoroutine(BlinkLoop()); } private void Start() { if ((Object)(object)skinnedMeshRenderer == (Object)null) { skinnedMeshRenderer = ((Component)this).GetComponentInChildren<SkinnedMeshRenderer>(); } if (blinkCoroutine == null && (Object)(object)skinnedMeshRenderer != (Object)null) { blinkCoroutine = ((MonoBehaviour)this).StartCoroutine(BlinkLoop()); } } [IteratorStateMachine(typeof(<BlinkLoop>d__10))] private IEnumerator BlinkLoop() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <BlinkLoop>d__10(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<AnimateBlendShape>d__11))] private IEnumerator AnimateBlendShape(int index, float from, float to, float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <AnimateBlendShape>d__11(0) { <>4__this = this, index = index, from = from, to = to, duration = duration }; } private int ResolveBlendShapeIndex(SkinnedMeshRenderer smr, string preferredName) { Mesh sharedMesh = smr.sharedMesh; if ((Object)(object)sharedMesh == (Object)null) { return -1; } if (!string.IsNullOrEmpty(preferredName)) { int num = sharedMesh.GetBlendShapeIndex(preferredName); if (num >= 0) { return num; } } string[] array = new string[1] { "Blink" }; string[] array2 = array; foreach (string text in array2) { int num2 = sharedMesh.GetBlendShapeIndex(text); if (num2 >= 0) { return num2; } } if (sharedMesh.blendShapeCount > 0) { return 0; } return -1; } private void OnDisable() { if (blinkCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(blinkCoroutine); } if ((Object)(object)skinnedMeshRenderer != (Object)null && blendShapeIndex >= 0) { skinnedMeshRenderer.SetBlendShapeWeight(blendShapeIndex, 0f); } } } public class BlendShapeMouthSpeak : MonoBehaviour { public SkinnedMeshRenderer skinnedMeshRenderer; public string blendShapeName = "MouthOpen"; public int blendShapeIndex = -1; public float openWeight = 100f; public float closedWeight = 0f; public PlayerControllerB player; protected VoicePlayerState voice; public float sensitivity => Plugin.voiceSensitivity.Value; public void Init(SkinnedMeshRenderer smr, PlayerControllerB player, string blendShapeName = "MouthOpen", int blendShapeIndex = -1, float openWeight = 100f) { skinnedMeshRenderer = smr; this.blendShapeName = blendShapeName; this.blendShapeIndex = blendShapeIndex; this.openWeight = openWeight; this.player = player; } private void Start() { if ((Object)(object)skinnedMeshRenderer == (Object)null) { skinnedMeshRenderer = ((Component)this).GetComponentInChildren<SkinnedMeshRenderer>(); } if ((Object)(object)skinnedMeshRenderer != (Object)null && blendShapeIndex < 0) { blendShapeIndex = ResolveBlendShapeIndex(skinnedMeshRenderer, blendShapeName); } } private void Update() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown if ((Object)StartOfRound.Instance.voiceChatModule == (Object)null) { return; } if (voice == null) { initVoice(); } else { if ((Object)(object)skinnedMeshRenderer == (Object)null || (Object)(object)skinnedMeshRenderer.sharedMesh == (Object)null || skinnedMeshRenderer.sharedMesh.blendShapeCount == 0) { return; } if (blendShapeIndex < 0) { blendShapeIndex = ResolveBlendShapeIndex(skinnedMeshRenderer, blendShapeName); } if (blendShapeIndex >= 0) { float num = closedWeight; if (voice.IsSpeaking && (Object)(object)player != (Object)null && !player.isPlayerDead) { float num2 = Map(voice.Amplitude * sensitivity, 0f, 1f, closedWeight, openWeight); num = Mathf.Clamp(num2, closedWeight, openWeight); } skinnedMeshRenderer.SetBlendShapeWeight(blendShapeIndex, num); } } } private void initVoice() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_0055: Expected O, but got Unknown StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects(); if ((Object)(object)player != (Object)null) { voice = player.voicePlayerState; if (voice == null && (Object)player == (Object)StartOfRound.Instance.localPlayerController) { voice = StartOfRound.Instance.voiceChatModule.FindPlayer(StartOfRound.Instance.voiceChatModule.LocalPlayerName); } } } private int ResolveBlendShapeIndex(SkinnedMeshRenderer smr, string preferredName) { Mesh sharedMesh = smr.sharedMesh; if ((Object)(object)sharedMesh == (Object)null) { return -1; } if (!string.IsNullOrEmpty(preferredName)) { int num = sharedMesh.GetBlendShapeIndex(preferredName); if (num >= 0) { return num; } } string[] array = new string[7] { "MouthOpen", "mouthOpen", "open_mouth", "JawOpen", "jawOpen", "viseme_aa", "vrc.v_aa" }; string[] array2 = array; foreach (string text in array2) { int num2 = sharedMesh.GetBlendShapeIndex(text); if (num2 >= 0) { return num2; } } if (sharedMesh.blendShapeCount > 0) { return 0; } return -1; } private float Map(float value, float min1, float max1, float min2, float max2) { float num = (value - min1) / (max1 - min1); return num * (max2 - min2) + min2; } private void OnDisable() { if ((Object)(object)skinnedMeshRenderer != (Object)null && blendShapeIndex >= 0) { skinnedMeshRenderer.SetBlendShapeWeight(blendShapeIndex, closedWeight); } } } public class BlendShapeMouthSpeakRiko : MonoBehaviour { [CompilerGenerated] private sealed class <PhonemeHoldCoroutine>d__22 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int idx; public float holdDuration; public bool willClose; public BlendShapeMouthSpeakRiko <>4__this; private float <t>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <PhonemeHoldCoroutine>d__22(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <t>5__1 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__1 < holdDuration) { <t>5__1 += Time.deltaTime; <>2__current = null; <>1__state = 1; return true; } if (willClose) { <>4__this.targetWeights[idx] = <>4__this.closedWeight; } 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(); } } public SkinnedMeshRenderer skinnedMeshRenderer; public string[] shapeNames = new string[6] { "a", "o", "i", "e", "u", "a2" }; private int[] shapeIndices; private List<int> validShapeIndices = new List<int>(); public float openWeightMax = 100f; public float closedWeight = 0f; public PlayerControllerB player; protected VoicePlayerState voice; public float minPhonemeInterval = 0.06f; public float maxPhonemeInterval = 0.18f; public float minPhonemeHold = 0.04f; public float maxPhonemeHold = 0.12f; public float closeProbability = 0.8f; public float weightSmoothSpeed = 15f; private Dictionary<int, float> targetWeights = new Dictionary<int, float>(); private Dictionary<int, float> currentWeights = new Dictionary<int, float>(); public float sensitivity => Plugin.voiceSensitivity.Value; public void Init(SkinnedMeshRenderer smr, PlayerControllerB player, float openWeightMax = 100f, float closeProbability = 0.8f) { skinnedMeshRenderer = smr; this.player = player; this.openWeightMax = openWeightMax; this.closeProbability = Mathf.Clamp01(closeProbability); ResolveShapeIndices(); targetWeights.Clear(); currentWeights.Clear(); foreach (int validShapeIndex in validShapeIndices) { targetWeights[validShapeIndex] = closedWeight; currentWeights[validShapeIndex] = closedWeight; skinnedMeshRenderer.SetBlendShapeWeight(validShapeIndex, closedWeight); } } private void Start() { if ((Object)(object)skinnedMeshRenderer == (Object)null) { skinnedMeshRenderer = ((Component)this).GetComponentInChildren<SkinnedMeshRenderer>(); } if ((Object)(object)skinnedMeshRenderer != (Object)null && (shapeIndices == null || shapeIndices.Length == 0)) { ResolveShapeIndices(); } } private void Update() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown if ((Object)StartOfRound.Instance.voiceChatModule == (Object)null) { return; } if (voice == null) { initVoice(); } else { if ((Object)(object)skinnedMeshRenderer == (Object)null || (Object)(object)skinnedMeshRenderer.sharedMesh == (Object)null || skinnedMeshRenderer.sharedMesh.blendShapeCount == 0) { return; } if (validShapeIndices.Count == 0) { ResolveShapeIndices(); if (validShapeIndices.Count == 0) { return; } } if (voice.IsSpeaking && (Object)(object)player != (Object)null && !player.isPlayerDead) { if (!((MonoBehaviour)this).IsInvoking("TriggerRandomPhoneme")) { TriggerRandomPhoneme(); float num = Random.Range(minPhonemeInterval, maxPhonemeInterval); ((MonoBehaviour)this).Invoke("TriggerRandomPhoneme", num); } } else { ((MonoBehaviour)this).CancelInvoke("TriggerRandomPhoneme"); foreach (int validShapeIndex in validShapeIndices) { targetWeights[validShapeIndex] = closedWeight; } } List<int> list = new List<int>(targetWeights.Keys); foreach (int item in list) { float num2 = (currentWeights.ContainsKey(item) ? currentWeights[item] : 0f); float num3 = targetWeights[item]; float num4 = Mathf.Lerp(num2, num3, 1f - Mathf.Exp((0f - weightSmoothSpeed) * Time.deltaTime)); currentWeights[item] = num4; skinnedMeshRenderer.SetBlendShapeWeight(item, num4); } } } private void TriggerRandomPhoneme() { if (voice == null || (Object)(object)skinnedMeshRenderer == (Object)null || !voice.IsSpeaking || !((Object)(object)player != (Object)null) || player.isPlayerDead || validShapeIndices.Count == 0) { return; } int num = validShapeIndices[Random.Range(0, validShapeIndices.Count)]; foreach (int validShapeIndex in validShapeIndices) { targetWeights[validShapeIndex] = closedWeight; } float num2 = Map(voice.Amplitude * sensitivity, 0f, 1f, closedWeight, openWeightMax); float value = Mathf.Clamp(num2, closedWeight, openWeightMax); targetWeights[num] = value; bool willClose = Random.value < closeProbability; float holdDuration = Random.Range(minPhonemeHold, maxPhonemeHold); ((MonoBehaviour)this).StartCoroutine(PhonemeHoldCoroutine(num, holdDuration, willClose)); if (voice.IsSpeaking) { float num3 = Random.Range(minPhonemeInterval, maxPhonemeInterval); ((MonoBehaviour)this).Invoke("TriggerRandomPhoneme", num3); } } [IteratorStateMachine(typeof(<PhonemeHoldCoroutine>d__22))] private IEnumerator PhonemeHoldCoroutine(int idx, float holdDuration, bool willClose) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <PhonemeHoldCoroutine>d__22(0) { <>4__this = this, idx = idx, holdDuration = holdDuration, willClose = willClose }; } private void initVoice() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_0055: Expected O, but got Unknown StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects(); if ((Object)(object)player != (Object)null) { voice = player.voicePlayerState; if (voice == null && (Object)player == (Object)StartOfRound.Instance.localPlayerController) { voice = StartOfRound.Instance.voiceChatModule.FindPlayer(StartOfRound.Instance.voiceChatModule.LocalPlayerName); } } } private void ResolveShapeIndices() { validShapeIndices.Clear(); if ((Object)(object)skinnedMeshRenderer == (Object)null || (Object)(object)skinnedMeshRenderer.sharedMesh == (Object)null) { return; } Mesh sharedMesh = skinnedMeshRenderer.sharedMesh; shapeIndices = new int[shapeNames.Length]; for (int i = 0; i < shapeNames.Length; i++) { string text = shapeNames[i]; int blendShapeIndex = sharedMesh.GetBlendShapeIndex(text); shapeIndices[i] = blendShapeIndex; if (blendShapeIndex >= 0) { validShapeIndices.Add(blendShapeIndex); } } if (validShapeIndices.Count == 0 && sharedMesh.blendShapeCount > 0) { validShapeIndices.Add(0); } targetWeights.Clear(); currentWeights.Clear(); foreach (int validShapeIndex in validShapeIndices) { targetWeights[validShapeIndex] = closedWeight; currentWeights[validShapeIndex] = closedWeight; } } private float Map(float value, float min1, float max1, float min2, float max2) { float num = 0f; if (max1 - min1 != 0f) { num = (value - min1) / (max1 - min1); } return num * (max2 - min2) + min2; } private void OnDisable() { ((MonoBehaviour)this).CancelInvoke("TriggerRandomPhoneme"); ((MonoBehaviour)this).StopAllCoroutines(); if (!((Object)(object)skinnedMeshRenderer != (Object)null)) { return; } foreach (int validShapeIndex in validShapeIndices) { skinnedMeshRenderer.SetBlendShapeWeight(validShapeIndex, closedWeight); } } } [BepInPlugin("2floor.madeinabysssuits", "madeinabysssuits", "0.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static ConfigFile config; public static ConfigEntry<bool> enableModelForAllSuits { get; private set; } public static ConfigEntry<bool> enableModelAsDefault { get; private set; } public static ConfigEntry<string> suitNamesToEnableModel { get; private set; } public static ConfigEntry<float> voiceSensitivity { get; private set; } private static void InitConfig() { enableModelForAllSuits = config.Bind<bool>("Suits to Replace Settings", "Enable Model for all Suits", false, "Enable to model replace every suit. Set to false to specify suits"); enableModelAsDefault = config.Bind<bool>("Suits to Replace Settings", "Enable Model as default", false, "Enable to model replace every suit that hasn't been otherwise registered."); suitNamesToEnableModel = config.Bind<string>("Suits to Replace Settings", "Suits to enable Model for", "Default,Orange suit", "Enter a comma separated list of suit names.(Additionally, [Green suit,Pajama suit,Hazard suit])"); voiceSensitivity = config.Bind<float>("Voice Sensitivity For Models Jaw", "Sensitivity Value", 10f, "Number from 5 to 20"); } private void Awake() { //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Expected O, but got Unknown config = ((BaseUnityPlugin)this).Config; InitConfig(); Assets.PopulateAssets(); if (enableModelForAllSuits.Value) { ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRNANACHI)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRFAPUTA)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MROZEN)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRREG)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRPRUSHKA)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRRIKO)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRMARULK)); ModelReplacementAPI.RegisterModelReplacementOverride(typeof(MRLYZA)); } if (enableModelAsDefault.Value) { ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRNANACHI)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRFAPUTA)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MROZEN)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRREG)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRPRUSHKA)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRRIKO)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRMARULK)); ModelReplacementAPI.RegisterModelReplacementDefault(typeof(MRLYZA)); } ModelReplacementAPI.RegisterSuitModelReplacement("Nanachi", typeof(MRNANACHI)); ModelReplacementAPI.RegisterSuitModelReplacement("Faputa", typeof(MRFAPUTA)); ModelReplacementAPI.RegisterSuitModelReplacement("Ozen", typeof(MROZEN)); ModelReplacementAPI.RegisterSuitModelReplacement("Reg", typeof(MRREG)); ModelReplacementAPI.RegisterSuitModelReplacement("Prushka", typeof(MRPRUSHKA)); ModelReplacementAPI.RegisterSuitModelReplacement("Riko", typeof(MRRIKO)); ModelReplacementAPI.RegisterSuitModelReplacement("Marulk", typeof(MRMARULK)); ModelReplacementAPI.RegisterSuitModelReplacement("Lyza", typeof(MRLYZA)); Harmony val = new Harmony("2floor.madeinabysssuits"); val.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin 2floor.madeinabysssuits is loaded!"); } } public static class Assets { public static string mainAssetBundleName = "madeinabyssbundle"; public static AssetBundle MainAssetBundle = null; private static string GetAssemblyName() { return Assembly.GetExecutingAssembly().GetName().Name.Replace(" ", "_"); } public static void PopulateAssets() { if ((Object)(object)MainAssetBundle == (Object)null) { Console.WriteLine(GetAssemblyName() + "." + mainAssetBundleName); using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetAssemblyName() + "." + mainAssetBundleName); MainAssetBundle = AssetBundle.LoadFromStream(stream); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }