Decompiled source of RagDoll Mod v1.4.0

Mods\RagdollToggle.dll

Decompiled 3 days ago
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<bool> _enabled;

		private MelonPreferences_Entry<ControllerSide> _side;

		private MelonPreferences_Entry<RagdollMode> _mode;

		private MelonPreferences_Entry<HeldMode> _heldMode;

		private MelonPreferences_Entry<KeyCode> _keyboardFallback;

		public override void OnInitializeMelon()
		{
			_prefs = MelonPreferences.CreateCategory("RagdollToggle");
			_enabled = _prefs.CreateEntry<bool>("Enabled", true, (string)null, "Master on/off switch for the mod.", false, false, (ValueValidator)null, (string)null);
			_side = _prefs.CreateEntry<ControllerSide>("Controller", ControllerSide.Right, (string)null, "Which thumbstick toggles ragdoll: Left, Right, or Both (either stick).", false, false, (ValueValidator)null, (string)null);
			_mode = _prefs.CreateEntry<RagdollMode>("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<HeldMode>("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<KeyCode>("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<bool>)OnSetEnabled);
			obj.CreateEnum("Controller", Color.cyan, (Enum)_side.Value, (Action<Enum>)OnSetSide);
			obj.CreateEnum("Mode", Color.red, (Enum)_mode.Value, (Action<Enum>)OnSetMode);
			obj.CreateEnum("Held Items", Color.green, (Enum)_heldMode.Value, (Action<Enum>)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);
		}
	}
}