Decompiled source of GorillaMovement v1.0.0

Mods/Monkey.dll

Decompiled 14 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using GorillaMovement;
using MelonLoader;
using MelonLoader.Preferences;
using ModThatIsNotMod;
using ModThatIsNotMod.BoneMenu;
using StressLevelZero.Interaction;
using StressLevelZero.Rig;
using StressLevelZero.VRMK;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(Main), "Gorilla Movement", "1.0.0", "ffba", null)]
[assembly: MelonGame("Stress Level Zero", "BONEWORKS")]
[assembly: AssemblyTitle("bwmodtest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HP")]
[assembly: AssemblyProduct("bwmodtest")]
[assembly: AssemblyCopyright("Copyright © HP 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ccd630c4-aea7-4b16-8b51-00e3cc2e217e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace GorillaMovement;

public class Main : MelonMod
{
	[CompilerGenerated]
	private sealed class <LegDisableTimer>d__7 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public Main <>4__this;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <LegDisableTimer>d__7(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			int num = <>1__state;
			Main main = <>4__this;
			switch (num)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				main.isWaitingToDisable = true;
				main.UpdateLegColliders(state: true);
				<>2__current = (object)new WaitForSeconds(1f);
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				main.isWaitingToDisable = false;
				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();
		}
	}

	private MelonPreferences_Category prefCategory;

	public MelonPreferences_Entry<float> prefStrengthMulti;

	public MelonPreferences_Entry<bool> prefLegsEnabledDebug;

	private bool rigModified;

	private bool isWaitingToDisable;

	public override void OnApplicationStart()
	{
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: 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)
		prefCategory = MelonPreferences.CreateCategory("GorillaMovement");
		prefStrengthMulti = prefCategory.CreateEntry<float>("StrengthMulti", 5f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		prefLegsEnabledDebug = prefCategory.CreateEntry<bool>("LegsEnabledDebug", false, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		MenuCategory obj = MenuManager.CreateCategory("Gorilla Movement", Color.red);
		obj.CreateFloatElement("Strength Multiplier", Color.cyan, prefStrengthMulti.Value, (Action<float>)delegate(float v)
		{
			prefStrengthMulti.Value = v;
			prefCategory.SaveToFile(true);
		}, 1f, 0.1f, 50f, false);
		obj.CreateBoolElement("Leg Colliders", Color.white, prefLegsEnabledDebug.Value, (Action<bool>)delegate(bool v)
		{
			prefLegsEnabledDebug.Value = v;
			prefCategory.SaveToFile(true);
			UpdateLegColliders(v);
		});
	}

	public override void OnSceneWasLoaded(int buildIndex, string sceneName)
	{
		rigModified = false;
		MelonCoroutines.Start(LegDisableTimer());
	}

	[IteratorStateMachine(typeof(<LegDisableTimer>d__7))]
	private IEnumerator LegDisableTimer()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <LegDisableTimer>d__7(0)
		{
			<>4__this = this
		};
	}

	public override void OnUpdate()
	{
		if (!((Object)(object)Player.GetRigManager() == (Object)null))
		{
			if (!rigModified)
			{
				ModifyRig();
			}
			if (!isWaitingToDisable && !prefLegsEnabledDebug.Value)
			{
				UpdateLegColliders(state: false);
			}
			ApplyStrength();
		}
	}

	private void ModifyRig()
	{
		GameObject rigManager = Player.GetRigManager();
		RigManager component = rigManager.GetComponent<RigManager>();
		Transform val = rigManager.transform.Find("[PhysicsRig]");
		if (!((Object)(object)val != (Object)null) || !((Object)(object)component != (Object)null))
		{
			return;
		}
		component.ControllerRig.maxAcceleration = 0f;
		component.ControllerRig.maxVelocity = 0f;
		Rigidbody rbPelvis = component.physicsRig.physBody.rbPelvis;
		if ((Object)(object)rbPelvis != (Object)null)
		{
			rbPelvis.mass = 1f;
		}
		Transform obj = val.Find("Feet");
		object obj2;
		if (obj == null)
		{
			obj2 = null;
		}
		else
		{
			Collider component2 = ((Component)obj).GetComponent<Collider>();
			obj2 = ((component2 != null) ? component2.material : null);
		}
		PhysicMaterial val2 = (PhysicMaterial)obj2;
		Transform val3 = val.Find("Pelvis");
		if ((Object)(object)val3 != (Object)null && (Object)(object)val2 != (Object)null)
		{
			Transform val4 = val3.Find("Chest");
			if ((Object)(object)val4 != (Object)null)
			{
				foreach (Collider component4 in ((Component)val4).GetComponents<Collider>())
				{
					component4.material = val2;
				}
			}
			Transform val5 = val3.Find("pelvisCol");
			if ((Object)(object)val5 != (Object)null)
			{
				Collider component3 = ((Component)val5).GetComponent<Collider>();
				if ((Object)(object)component3 != (Object)null)
				{
					component3.material = val2;
				}
			}
		}
		rigModified = true;
	}

	private void UpdateLegColliders(bool state)
	{
		GameObject rigManager = Player.GetRigManager();
		if ((Object)(object)rigManager == (Object)null)
		{
			return;
		}
		Transform val = rigManager.transform.Find("[PhysicsRig]");
		if ((Object)(object)val == (Object)null)
		{
			return;
		}
		Transform val2 = val.Find("Knee");
		if ((Object)(object)val2 != (Object)null)
		{
			SphereCollider component = ((Component)val2).GetComponent<SphereCollider>();
			if ((Object)(object)component != (Object)null)
			{
				((Collider)component).enabled = state;
			}
			Transform val3 = val2.Find("KneetoPelvis");
			if ((Object)(object)val3 != (Object)null)
			{
				CapsuleCollider component2 = ((Component)val3).GetComponent<CapsuleCollider>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Collider)component2).enabled = state;
				}
			}
		}
		Transform val4 = val.Find("Feet");
		if ((Object)(object)val4 != (Object)null)
		{
			SphereCollider component3 = ((Component)val4).GetComponent<SphereCollider>();
			if ((Object)(object)component3 != (Object)null)
			{
				((Collider)component3).enabled = state;
			}
		}
	}

	private void ApplyStrength()
	{
		float value = prefStrengthMulti.Value;
		Hand leftHand = Player.leftHand;
		if ((Object)(object)((leftHand != null) ? leftHand.physHand : null) != (Object)null)
		{
			UpdatePhysHand(Player.leftHand.physHand, value);
		}
		Hand rightHand = Player.rightHand;
		if ((Object)(object)((rightHand != null) ? rightHand.physHand : null) != (Object)null)
		{
			UpdatePhysHand(Player.rightHand.physHand, value);
		}
	}

	private void UpdatePhysHand(PhysHand hand, float m)
	{
		hand.zPosForce = 340f * m;
		hand.zNegForce = 360f * m;
		hand.yPosForce = 90f * m;
		hand.yNegForce = 200f * m;
		hand.xPosForce = 90f * m;
		hand.xNegForce = 90f * m;
		hand.maxTorque = 30f * m;
		hand.newtonDamp = 80f * m;
	}
}