using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BoneLib; using BoneLib.BoneMenu; using Il2CppSLZ.Marrow; using MelonLoader; using MelonLoader.Preferences; using Microsoft.CodeAnalysis; using RagdollToggle; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(Mod), "RagdollToggle", "1.4.0", "mitch", null)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("RagdollToggle")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RagdollToggle")] [assembly: AssemblyTitle("RagdollToggle")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 RagdollToggle { public class Mod : MelonMod { public enum ControllerSide { Left, Right, Both } public enum RagdollMode { Limp, ArmControl } public enum HeldMode { Drop, Keep, KeepGrip } private MelonPreferences_Category _prefs; private MelonPreferences_Entry _enabled; private MelonPreferences_Entry _side; private MelonPreferences_Entry _mode; private MelonPreferences_Entry _heldMode; private MelonPreferences_Entry _keyboardFallback; public override void OnInitializeMelon() { _prefs = MelonPreferences.CreateCategory("RagdollToggle"); _enabled = _prefs.CreateEntry("Enabled", true, (string)null, "Master on/off switch for the mod.", false, false, (ValueValidator)null, (string)null); _side = _prefs.CreateEntry("Controller", ControllerSide.Right, (string)null, "Which thumbstick toggles ragdoll: Left, Right, or Both (either stick).", false, false, (ValueValidator)null, (string)null); _mode = _prefs.CreateEntry("Mode", RagdollMode.Limp, (string)null, "Limp = full flop, no arm control. ArmControl = flop but keep arm control.", false, false, (ValueValidator)null, (string)null); _heldMode = _prefs.CreateEntry("HeldItems", HeldMode.Drop, (string)null, "Held items on ragdoll: Drop, Keep, or KeepGrip (keep hands awake to hold/release/regrab).", false, false, (ValueValidator)null, (string)null); _keyboardFallback = _prefs.CreateEntry("KeyboardFallback", (KeyCode)98, (string)null, "Desktop testing fallback key. Set to None to disable.", false, false, (ValueValidator)null, (string)null); SetupBoneMenu(); ((MelonBase)this).LoggerInstance.Msg($"RagdollToggle ready. Controller = {_side.Value}, Mode = {_mode.Value}"); } private void SetupBoneMenu() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) Page obj = Page.Root.CreatePage("RagDoll Toggle", Color.green, 0, true); obj.CreateBool("Enabled", Color.yellow, _enabled.Value, (Action)OnSetEnabled); obj.CreateEnum("Controller", Color.cyan, (Enum)_side.Value, (Action)OnSetSide); obj.CreateEnum("Mode", Color.red, (Enum)_mode.Value, (Action)OnSetMode); obj.CreateEnum("Held Items", Color.green, (Enum)_heldMode.Value, (Action)OnSetHeldMode); } private void OnSetEnabled(bool v) { _enabled.Value = v; _prefs.SaveToFile(false); } private void OnSetHeldMode(Enum v) { _heldMode.Value = (HeldMode)(object)v; _prefs.SaveToFile(false); } private void OnSetSide(Enum v) { _side.Value = (ControllerSide)(object)v; _prefs.SaveToFile(false); } private void OnSetMode(Enum v) { _mode.Value = (RagdollMode)(object)v; _prefs.SaveToFile(false); } public override void OnUpdate() { if (!_enabled.Value) { return; } RigManager rigManager = Player.RigManager; if (!Object.op_Implicit((Object)(object)rigManager) || Object.op_Implicit((Object)(object)rigManager.activeSeat) || !TogglePressed()) { return; } PhysicsRig physicsRig = rigManager.physicsRig; if (Object.op_Implicit((Object)(object)physicsRig)) { if (physicsRig.torso.shutdown || !physicsRig.ballLocoEnabled) { Unragdoll(physicsRig); } else { Ragdoll(physicsRig); } } } private bool TogglePressed() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (_side.Value != ControllerSide.Right && Object.op_Implicit((Object)(object)Player.LeftController)) { flag |= Player.LeftController.GetThumbStickDown(); } if (_side.Value != ControllerSide.Left && Object.op_Implicit((Object)(object)Player.RightController)) { flag |= Player.RightController.GetThumbStickDown(); } if ((int)_keyboardFallback.Value != 0 && Input.GetKeyDown(_keyboardFallback.Value)) { flag = true; } return flag; } private void Ragdoll(PhysicsRig physRig) { if (_heldMode.Value == HeldMode.Drop) { if (Object.op_Implicit((Object)(object)physRig.leftHand) && physRig.leftHand.HasAttachedObject()) { physRig.leftHand.DetachObject(); } if (Object.op_Implicit((Object)(object)physRig.rightHand) && physRig.rightHand.HasAttachedObject()) { physRig.rightHand.DetachObject(); } } if (_mode.Value == RagdollMode.Limp) { physRig.ShutdownRig(); } physRig.RagdollRig(); if (_mode.Value == RagdollMode.ArmControl) { physRig.DisableBallLoco(); physRig.PhysicalLegs(); physRig.legLf.ShutdownLimb(); physRig.legRt.ShutdownLimb(); } } private void Unragdoll(PhysicsRig physRig) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_003b: 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) //IL_0042: Unknown result type (might be due to invalid IL or missing references) Transform transform = physRig.feet.transform; Transform transform2 = physRig.knee.transform; Transform transform3 = ((Component)((Rig)physRig).m_pelvis).transform; physRig.TurnOnRig(); physRig.UnRagdollRig(); Vector3 position = transform3.position; Quaternion rotation = transform3.rotation; transform2.SetPositionAndRotation(position, rotation); transform.SetPositionAndRotation(position, rotation); } } }