Decompiled source of SpidermanMod v9.9.9

Mods/SpiderlectricBoogaloo.dll

Decompiled 8 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using AudioImportLib;
using BoneLib;
using BoneLib.BoneMenu;
using BoneLib.BoneMenu.Elements;
using Boneworks;
using HarmonyLib;
using MelonLoader;
using MelonLoader.Preferences;
using SLZ.Marrow.Data;
using SLZ.Rig;
using SLZ.VRMK;
using SpiderlectricBoogaloo;
using UnhollowerBaseLib;
using UnhollowerRuntimeLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(thew), "SpiderlectricBoogaloo III (the first)", "1.0.0", "joe swan#228 (ill probably forget to set the version properly", null)]
[assembly: AssemblyTitle("SpiderlectricBoogaloo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SpiderlectricBoogaloo")]
[assembly: AssemblyCopyright("Copyright ©  2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("adf5c3a4-c4e2-48ab-a117-db338d47968c")]
[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 SpiderlectricBoogaloo
{
	[HarmonyPatch(typeof(ControllerRig))]
	internal class crigPatch
	{
		public static DateTime? JumpChargeStartedDate;

		[HarmonyPostfix]
		[HarmonyPatch("JumpCharge")]
		public static void Jump(ControllerRig __instance, bool chargeInput)
		{
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			if (!thew.SuperJump.Value)
			{
				return;
			}
			if (chargeInput && !JumpChargeStartedDate.HasValue)
			{
				JumpChargeStartedDate = DateTime.Now;
			}
			else if (!chargeInput && JumpChargeStartedDate.HasValue)
			{
				PhysicsRig val = ((IEnumerable<PhysicsRig>)Object.FindObjectsOfType<PhysicsRig>()).First();
				Vector3 val2 = new Vector3(val.pelvisVelocity.x, 0f, val.pelvisVelocity.z);
				float magnitude = ((Vector3)(ref val2)).magnitude;
				Vector3 val3 = ((Rig)__instance).m_head.forward * magnitude * thew.ForwardLeapMultiplier.Value;
				Vector3 val4 = Vector3.up * thew.UpwardJumpMultiplier.Value;
				PhysGrounder val5 = Object.FindObjectOfType<PhysGrounder>();
				if (val5.isGrounded)
				{
					val.torso.rbPelvis.AddForce((val4 + val3) * thew.LeapMultiplier.Value, (ForceMode)2);
				}
				JumpChargeStartedDate = null;
			}
		}
	}
	public class thew : MelonMod
	{
		private float _LowestLimit = float.PositiveInfinity;

		public LineRenderer rrend;

		public LineRenderer lrend;

		private ConfigurableJoint rjoint;

		private ConfigurableJoint ljoint;

		private GameObject rhint;

		private GameObject lhint;

		private Vector3 rtarget;

		private Vector3 ltarget;

		private bool rgrappled = false;

		private bool lgrappled = false;

		public MelonPreferences_Category categ;

		private MelonPreferences_Entry<float> pull;

		private MelonPreferences_Entry<float> thickness;

		private MelonPreferences_Entry<float> range;

		public static MelonPreferences_Entry<float> ForwardLeapMultiplier;

		public static MelonPreferences_Entry<float> UpwardJumpMultiplier;

		public static MelonPreferences_Entry<float> LeapMultiplier;

		public static MelonPreferences_Entry<float> SpeedMulti;

		public static MelonPreferences_Entry<float> StrengthMulti;

		public static MelonPreferences_Entry<float> VitalityMultiplier;

		public static MelonPreferences_Entry<float> IntelligenceMultiplier;

		public static MelonPreferences_Entry<bool> SuperJump;

		public static MelonPreferences_Entry<bool> SpiderHints;

		public static AssetBundle assets;

		public AudioSource source;

		public GameObject webobj;

		public bool wasgrip;

		public float rdelayBetweenPresses = 0.2f;

		public bool rpressedFirstTime = false;

		public float rlastPressedTime;

		public float ldelayBetweenPresses = 0.2f;

		public bool lpressedFirstTime = false;

		public float llastPressedTime;

		public static Instance loggerInstance;

		private bool GripsSetup = false;

		private static HandPose pose;

		public override void OnUpdate()
		{
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_082d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0846: Unknown result type (might be due to invalid IL or missing references)
			//IL_0850: Unknown result type (might be due to invalid IL or missing references)
			//IL_0855: Unknown result type (might be due to invalid IL or missing references)
			//IL_086e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0978: Unknown result type (might be due to invalid IL or missing references)
			//IL_098c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a22: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a27: Unknown result type (might be due to invalid IL or missing references)
			//IL_033c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0355: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0364: Unknown result type (might be due to invalid IL or missing references)
			//IL_037d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0487: Unknown result type (might be due to invalid IL or missing references)
			//IL_049b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0531: Unknown result type (might be due to invalid IL or missing references)
			//IL_0536: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (!((Object)(object)Player.GetPhysicsRig() != (Object)null) || !((Object)(object)Player.GetPhysicsRig().rightHand != (Object)null))
				{
					return;
				}
				if (!Object.op_Implicit((Object)(object)rhint))
				{
					rhint = setupHint();
				}
				else
				{
					if (Object.op_Implicit((Object)(object)rhint))
					{
						if ((Object)(object)rjoint != (Object)null)
						{
							_ = rtarget;
						}
						else if (SpiderHints.Value)
						{
							RaycastHit val = default(RaycastHit);
							Physics.Raycast(((Component)Player.GetPhysicsRig().rightHand).gameObject.transform.position + ((Component)Player.GetPhysicsRig().rightHand).gameObject.transform.forward / 6f, ((Component)Player.GetPhysicsRig().rightHand).gameObject.transform.forward, ref val, range.Value);
							Transform transform = rhint.transform;
							_ = ((RaycastHit)(ref val)).point;
							transform.position = ((RaycastHit)(ref val)).point;
							rhint.transform.LookAt(Player.playerHead);
							goto IL_014a;
						}
					}
					rhint.transform.position = Vector3.zero;
				}
				goto IL_014a;
				IL_026c:
				BaseController leftController = Player.rigManager.ControllerRig.leftController;
				BaseController rightController = Player.rigManager.ControllerRig.rightController;
				if ((Object)(object)rjoint != (Object)null)
				{
					_ = rtarget;
					if (1 == 0)
					{
					}
				}
				if (Object.op_Implicit((Object)(object)ljoint))
				{
					_ = ltarget;
					if (1 == 0)
					{
					}
				}
				if (rightController.GetThumbStickDown() && rightController.GetGripForce() > 0.5f)
				{
					rgrappled = true;
					if (!Object.op_Implicit((Object)(object)rrend))
					{
						rrend = setupRender();
					}
					if (rgrappled)
					{
						RaycastHit val2 = default(RaycastHit);
						if (Physics.Raycast(((Component)Player.GetPhysicsRig().rightHand).gameObject.transform.position + ((Component)Player.GetPhysicsRig().rightHand).gameObject.transform.forward / 6f, ((Component)Player.GetPhysicsRig().rightHand).gameObject.transform.forward, ref val2, range.Value) && !Object.op_Implicit((Object)(object)rjoint))
						{
							rrend.startWidth = thickness.Value;
							rrend.endWidth = thickness.Value;
							rjoint = ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<ConfigurableJoint>();
							Rigidbody val3 = ((!Object.op_Implicit((Object)(object)((RaycastHit)(ref val2)).rigidbody) || ((RaycastHit)(ref val2)).rigidbody.isKinematic) ? null : ((RaycastHit)(ref val2)).rigidbody);
							if (Object.op_Implicit((Object)(object)((RaycastHit)(ref val2)).rigidbody))
							{
								((Joint)rjoint).connectedBody = ((RaycastHit)(ref val2)).rigidbody;
							}
							float num = (Object.op_Implicit((Object)(object)val3) ? (Mathf.Max(1f, val3.mass) * 10f) : 10f);
							SetWorldAnchor(rjoint, ((Component)Player.GetPhysicsRig().rightHand).transform.position);
							SetWorldConnected(rjoint, ((RaycastHit)(ref val2)).point);
							SetLinearMotion(rjoint, (ConfigurableJointMotion)1);
							SetLinearLimit(rjoint, ((RaycastHit)(ref val2)).distance + 0.1f, 1f);
							SetSpringLimit(rjoint, 500000000f, 500000f * num * 1f);
							SetSpringDrive(rjoint, pull.Value, pull.Value, pull.Value);
							((Joint)rjoint).enableCollision = true;
							rtarget = ((RaycastHit)(ref val2)).point;
							rrend.positionCount = 2;
							try
							{
								string text = Path.Combine(MelonUtils.UserDataDirectory, "WebSounds");
								AudioClip val4 = API.LoadAudioClip(text + "/webSound.wav", true);
								source = (Object.op_Implicit((Object)(object)((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>()) ? ((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>() : ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<AudioSource>());
								source.pitch = Random.Range(0.87f, 1.1f);
								source.PlayOneShot(val4, 1f);
							}
							catch
							{
							}
						}
					}
					else if (!rgrappled)
					{
						rrend.positionCount = 0;
						Object.Destroy((Object)(object)rjoint);
						try
						{
							string text2 = Path.Combine(MelonUtils.UserDataDirectory, "WebSounds");
							AudioClip val5 = API.LoadAudioClip(text2 + "/webRelease.wav", true);
							source = (Object.op_Implicit((Object)(object)((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>()) ? ((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>() : ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<AudioSource>());
							source.pitch = Random.Range(0.87f, 1.1f);
							source.PlayOneShot(val5, 1f);
						}
						catch
						{
						}
					}
				}
				else if (rightController.GetGripForce() < 0.1f && (Object)(object)rjoint != (Object)null)
				{
					rgrappled = false;
					rrend.positionCount = 0;
					Object.Destroy((Object)(object)rjoint);
					try
					{
						string text3 = Path.Combine(MelonUtils.UserDataDirectory, "WebSounds");
						AudioClip val6 = API.LoadAudioClip(text3 + "/webRelease.wav", true);
						source = (Object.op_Implicit((Object)(object)((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>()) ? ((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>() : ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<AudioSource>());
						source.pitch = Random.Range(0.87f, 1.1f);
						source.PlayOneShot(val6, 1f);
					}
					catch
					{
					}
				}
				if (leftController.GetThumbStickDown() && leftController.GetGripForce() > 0.5f)
				{
					lgrappled = true;
					if (!Object.op_Implicit((Object)(object)lrend))
					{
						lrend = setupRender();
					}
					if (lgrappled)
					{
						RaycastHit val7 = default(RaycastHit);
						if (Physics.Raycast(((Component)Player.GetPhysicsRig().leftHand).gameObject.transform.position + ((Component)Player.GetPhysicsRig().leftHand).gameObject.transform.forward / 6f, ((Component)Player.GetPhysicsRig().leftHand).gameObject.transform.forward, ref val7, range.Value) && !Object.op_Implicit((Object)(object)ljoint))
						{
							lrend.startWidth = thickness.Value;
							lrend.endWidth = thickness.Value;
							ljoint = ((Component)Player.GetPhysicsRig().leftHand).gameObject.AddComponent<ConfigurableJoint>();
							Rigidbody val8 = ((!Object.op_Implicit((Object)(object)((RaycastHit)(ref val7)).rigidbody) || ((RaycastHit)(ref val7)).rigidbody.isKinematic) ? null : ((RaycastHit)(ref val7)).rigidbody);
							if (Object.op_Implicit((Object)(object)((RaycastHit)(ref val7)).rigidbody))
							{
								((Joint)ljoint).connectedBody = ((RaycastHit)(ref val7)).rigidbody;
							}
							float num2 = (Object.op_Implicit((Object)(object)val8) ? (Mathf.Max(1f, val8.mass) * 10f) : 10f);
							SetWorldAnchor(ljoint, ((Component)Player.GetPhysicsRig().leftHand).transform.position);
							SetWorldConnected(ljoint, ((RaycastHit)(ref val7)).point);
							SetLinearMotion(ljoint, (ConfigurableJointMotion)1);
							SetLinearLimit(ljoint, ((RaycastHit)(ref val7)).distance + 0.1f, 1f);
							SetSpringLimit(ljoint, 500000000f, 500000f * num2 * 1f);
							SetSpringDrive(ljoint, pull.Value, pull.Value, pull.Value);
							((Joint)ljoint).enableCollision = true;
							ltarget = ((RaycastHit)(ref val7)).point;
							lrend.positionCount = 2;
							try
							{
								string text4 = Path.Combine(MelonUtils.UserDataDirectory, "WebSounds");
								AudioClip val9 = API.LoadAudioClip(text4 + "/webSound.wav", true);
								source = (Object.op_Implicit((Object)(object)((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>()) ? ((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>() : ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<AudioSource>());
								source.pitch = Random.Range(0.87f, 1.1f);
								source.PlayOneShot(val9, 1f);
								return;
							}
							catch
							{
								return;
							}
						}
					}
					else if (!lgrappled)
					{
						lrend.positionCount = 0;
						Object.Destroy((Object)(object)ljoint);
						try
						{
							string text5 = Path.Combine(MelonUtils.UserDataDirectory, "WebSounds");
							AudioClip val10 = API.LoadAudioClip(text5 + "/webRelease.wav", true);
							source = (Object.op_Implicit((Object)(object)((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>()) ? ((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>() : ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<AudioSource>());
							source.pitch = Random.Range(0.87f, 1.1f);
							source.PlayOneShot(val10, 1f);
							return;
						}
						catch (Exception)
						{
							return;
						}
					}
				}
				else if (leftController.GetGripForce() < 0.1f && (Object)(object)ljoint != (Object)null)
				{
					lgrappled = false;
					lrend.positionCount = 0;
					Object.Destroy((Object)(object)ljoint);
					try
					{
						string text6 = Path.Combine(MelonUtils.UserDataDirectory, "WebSounds");
						AudioClip val11 = API.LoadAudioClip(text6 + "/webRelease.wav", true);
						source = (Object.op_Implicit((Object)(object)((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>()) ? ((Component)Player.GetPhysicsRig().rightHand).gameObject.GetComponent<AudioSource>() : ((Component)Player.GetPhysicsRig().rightHand).gameObject.AddComponent<AudioSource>());
						source.pitch = Random.Range(0.87f, 1.1f);
						source.PlayOneShot(val11, 1f);
						return;
					}
					catch
					{
						return;
					}
				}
				return;
				IL_014a:
				if (!Object.op_Implicit((Object)(object)lhint))
				{
					lhint = setupHint();
				}
				else
				{
					if (Object.op_Implicit((Object)(object)lhint))
					{
						if ((Object)(object)ljoint != (Object)null)
						{
							_ = ltarget;
						}
						else if (SpiderHints.Value)
						{
							RaycastHit val12 = default(RaycastHit);
							Physics.Raycast(((Component)Player.GetPhysicsRig().leftHand).gameObject.transform.position + ((Component)Player.GetPhysicsRig().leftHand).gameObject.transform.forward / 6f, ((Component)Player.GetPhysicsRig().leftHand).gameObject.transform.forward, ref val12, range.Value);
							Transform transform2 = lhint.transform;
							_ = ((RaycastHit)(ref val12)).point;
							transform2.position = ((RaycastHit)(ref val12)).point;
							lhint.transform.LookAt(Player.playerHead);
							goto IL_026c;
						}
					}
					lhint.transform.position = Vector3.zero;
				}
				goto IL_026c;
			}
			catch
			{
			}
		}

		public override void OnLateUpdate()
		{
			line();
		}

		private void line()
		{
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: 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_005d: 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)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01df: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.GetPhysicsRig() == (Object)null)
			{
				return;
			}
			if (Object.op_Implicit((Object)(object)rjoint))
			{
				if (!Object.op_Implicit((Object)(object)((Joint)rjoint).connectedBody))
				{
					rrend.SetPositions(Il2CppStructArray<Vector3>.op_Implicit((Vector3[])(object)new Vector3[2]
					{
						((Component)Player.GetPhysicsRig().rightHand).transform.position,
						rtarget
					}));
				}
				else
				{
					Vector3 val = default(Vector3);
					((Vector3)(ref val))..ctor(((Joint)rjoint).connectedAnchor.x, ((Joint)rjoint).connectedAnchor.y, ((Joint)rjoint).connectedAnchor.z);
					Vector3 val2 = ((Component)((Joint)rjoint).connectedBody).gameObject.transform.TransformPoint(val);
					rrend.SetPositions(Il2CppStructArray<Vector3>.op_Implicit((Vector3[])(object)new Vector3[2]
					{
						((Component)Player.GetPhysicsRig().rightHand).transform.position,
						val2
					}));
				}
			}
			if (Object.op_Implicit((Object)(object)ljoint))
			{
				if (!Object.op_Implicit((Object)(object)((Joint)ljoint).connectedBody))
				{
					lrend.SetPositions(Il2CppStructArray<Vector3>.op_Implicit((Vector3[])(object)new Vector3[2]
					{
						((Component)Player.GetPhysicsRig().leftHand).transform.position,
						ltarget
					}));
				}
				else
				{
					Vector3 val3 = default(Vector3);
					((Vector3)(ref val3))..ctor(((Joint)ljoint).connectedAnchor.x, ((Joint)ljoint).connectedAnchor.y, ((Joint)ljoint).connectedAnchor.z);
					Vector3 val4 = ((Component)((Joint)ljoint).connectedBody).gameObject.transform.TransformPoint(val3);
					lrend.SetPositions(Il2CppStructArray<Vector3>.op_Implicit((Vector3[])(object)new Vector3[2]
					{
						((Component)Player.GetPhysicsRig().leftHand).transform.position,
						val4
					}));
				}
			}
		}

		public override void OnDeinitializeMelon()
		{
			categ.SaveToFile(true);
		}

		public override void OnInitializeMelon()
		{
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0509: Unknown result type (might be due to invalid IL or missing references)
			loggerInstance = ((MelonBase)this).LoggerInstance;
			categ = MelonPreferences.CreateCategory("SpiderLab");
			pull = categ.CreateEntry<float>("WebPullStrength", 1500f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			thickness = categ.CreateEntry<float>("WebLineThickness", 0.15f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			range = categ.CreateEntry<float>("WebRange", 1000f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			ForwardLeapMultiplier = categ.CreateEntry<float>("JumpLeapMultiplier", 1f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			UpwardJumpMultiplier = categ.CreateEntry<float>("JumpUpMultiplier", 18f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			LeapMultiplier = categ.CreateEntry<float>("JumpMultiplier", 3f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			SpeedMulti = categ.CreateEntry<float>("SpeedMultiplier", 1.5f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			IntelligenceMultiplier = categ.CreateEntry<float>("IntelligenceMultiplier", 10f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			VitalityMultiplier = categ.CreateEntry<float>("VitalityMultiplier", 7f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			StrengthMulti = categ.CreateEntry<float>("StrengthMultiplier", 20f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			SuperJump = categ.CreateEntry<bool>("SuperJumpEnabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			SpiderHints = categ.CreateEntry<bool>("SpiderHints", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			foreach (MelonPreferences_Entry entry in categ.Entries)
			{
				((MelonBase)this).LoggerInstance.Msg(entry.DisplayName);
			}
			MenuCategory val = MenuManager.CreateCategory("SpiderLab", "#1273de");
			SubPanelElement val2 = val.CreateSubPanel("Web Settings", Color.white);
			val2.CreateFloatElement("Web Pull", Color.white, pull.Value, 50f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				pull.Value = value;
			});
			val2.CreateFloatElement("Web Line Thickness", Color.white, thickness.Value, 0.01f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				thickness.Value = value;
			});
			val2.CreateFloatElement("Web Range", Color.white, range.Value, 50f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				range.Value = value;
			});
			SubPanelElement val3 = val.CreateSubPanel("Avatar Settings", Color.red);
			val3.CreateBoolElement("Super Jump Enabled", "#f31418", SuperJump.Value, (Action<bool>)delegate(bool value)
			{
				SuperJump.Value = value;
			});
			val3.CreateFloatElement("Jump Multi", "#f04b4e", LeapMultiplier.Value, 0.5f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				LeapMultiplier.Value = value;
			});
			val3.CreateFloatElement("Forward Jump Multi", "#ea6d6f", ForwardLeapMultiplier.Value, 0.5f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				ForwardLeapMultiplier.Value = value;
			});
			val3.CreateFloatElement("Upward Jump Multi", "#f29799", UpwardJumpMultiplier.Value, 0.5f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				UpwardJumpMultiplier.Value = value;
			});
			val3.CreateFloatElement("Speed Multi", "#0950fa", SpeedMulti.Value, 0.05f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				SpeedMulti.Value = value;
			});
			val3.CreateFloatElement("Strength Multi", "#306cfb", StrengthMulti.Value, 1f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				StrengthMulti.Value = value;
			});
			val3.CreateFloatElement("Intelligence Multi", "#5c8cff", IntelligenceMultiplier.Value, 1f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				IntelligenceMultiplier.Value = value;
			});
			val3.CreateFloatElement("Vitality Multi", "#86aaff", VitalityMultiplier.Value, 1f, 0f, 2.1474836E+09f, (Action<float>)delegate(float value)
			{
				VitalityMultiplier.Value = value;
			});
			SubPanelElement val4 = val.CreateSubPanel("Misc Settings", "#0046ff");
			val3.CreateBoolElement("SpiderHints Enabled", Color.white, SpiderHints.Value, (Action<bool>)delegate(bool value)
			{
				SpiderHints.Value = value;
			});
			((MelonBase)this).HarmonyInstance.PatchAll();
		}

		public LineRenderer setupRender()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			GameObject val = new GameObject();
			((Object)val).name = "_SPIDERMAN-MOD-RENDERER";
			LineRenderer val2 = val.AddComponent<LineRenderer>();
			Material material = (((Renderer)val2).material = webMaterial());
			val.GetComponent<Renderer>().material = material;
			val2.SetWidth(thickness.Value, thickness.Value);
			return val2;
		}

		public GameObject setupHint()
		{
			string text = Path.Combine(MelonUtils.UserDataDirectory, "WebAssets");
			AssetBundle val = AssetBundle.LoadFromFile(text + "/spiderfx.sres");
			GameObject val2 = ((Il2CppObjectBase)val.LoadAsset("SpiderHint", Il2CppType.Of<GameObject>())).Cast<GameObject>();
			GameObject val3 = Object.Instantiate<GameObject>(val2);
			((Object)val3).hideFlags = (HideFlags)32;
			val.Unload(false);
			return val3;
		}

		public Material webMaterial()
		{
			string text = Path.Combine(MelonUtils.UserDataDirectory, "WebAssets");
			AssetBundle val = AssetBundle.LoadFromFile(text + "/spiderfx.sres");
			GameObject val2 = ((Il2CppObjectBase)val.LoadAsset("SpiderWeb_Renderer", Il2CppType.Of<GameObject>())).Cast<GameObject>();
			GameObject val3 = Object.Instantiate<GameObject>(val2);
			DrawLine2Points component = val3.GetComponent<DrawLine2Points>();
			Material material = ((Renderer)component.Liner).material;
			((Object)material).hideFlags = (HideFlags)32;
			val.Unload(false);
			return material;
		}

		public Material whiteMaterial()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			Material val = new Material(Shader.Find("Universal Render Pipeline/Lit (PBR Workflow)"));
			val.color = Color.white;
			return val;
		}

		public override void OnSceneWasUnloaded(int buildIndex, string sceneName)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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)
			Object.Destroy((Object)(object)ljoint);
			Object.Destroy((Object)(object)rjoint);
			Object.Destroy((Object)(object)rrend);
			Object.Destroy((Object)(object)lrend);
			rtarget = Vector3.zero;
			ltarget = Vector3.zero;
			rgrappled = false;
			lgrappled = false;
		}

		public void SetSpringDrive(ConfigurableJoint joint, float spring, float damper, float max)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_0028: 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_0038: Unknown result type (might be due to invalid IL or missing references)
			JointDrive val = default(JointDrive);
			((JointDrive)(ref val)).positionSpring = spring;
			((JointDrive)(ref val)).positionDamper = damper;
			((JointDrive)(ref val)).maximumForce = max;
			JointDrive zDrive = (joint.yDrive = (joint.xDrive = val));
			joint.zDrive = zDrive;
		}

		public void SetSpringLimit(ConfigurableJoint joint, float spring, float damper)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: 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)
			SoftJointLimitSpring linearLimitSpring = joint.linearLimitSpring;
			((SoftJointLimitSpring)(ref linearLimitSpring)).spring = spring;
			((SoftJointLimitSpring)(ref linearLimitSpring)).damper = damper;
			joint.linearLimitSpring = linearLimitSpring;
		}

		public void SetLinearLimit(ConfigurableJoint joint, float limit, float bounce)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: 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)
			SoftJointLimit linearLimit = joint.linearLimit;
			((SoftJointLimit)(ref linearLimit)).limit = limit;
			((SoftJointLimit)(ref linearLimit)).bounciness = bounce;
			joint.linearLimit = linearLimit;
			if (limit < _LowestLimit)
			{
				_LowestLimit = limit;
			}
		}

		public void SetLinearMotion(ConfigurableJoint joint, ConfigurableJointMotion motion)
		{
			//IL_0002: 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)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			joint.xMotion = motion;
			joint.yMotion = motion;
			joint.zMotion = motion;
		}

		public void SetWorldAnchor(ConfigurableJoint joint, Vector3 anchor)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			((Joint)joint).anchor = ((Component)joint).transform.InverseTransformPoint(anchor);
		}

		public void SetWorldConnected(ConfigurableJoint joint, Vector3 anchor)
		{
			//IL_0025: 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_0017: Unknown result type (might be due to invalid IL or missing references)
			((Joint)joint).autoConfigureConnectedAnchor = false;
			((Joint)joint).connectedAnchor = (Object.op_Implicit((Object)(object)((Joint)joint).connectedBody) ? ((Component)((Joint)joint).connectedBody).transform.InverseTransformPoint(anchor) : anchor);
		}
	}
}
namespace SpiderlectricBoogaloo.Patch
{
	[HarmonyPatch(typeof(Avatar))]
	public static class avatarPatch
	{
		private static bool IsMainRig(Avatar avatar)
		{
			if ((Object)(object)Player.rigManager != (Object)null)
			{
				return (Object)(object)Player.rigManager.avatar == (Object)(object)avatar;
			}
			return false;
		}

		[HarmonyPostfix]
		[HarmonyPatch("ComputeMass")]
		public static void ComputeMass(Avatar __instance)
		{
			if (IsMainRig(__instance))
			{
				__instance._massChest *= thew.StrengthMulti.Value;
				__instance._massHead *= thew.StrengthMulti.Value;
				__instance._massPelvis *= thew.StrengthMulti.Value;
				__instance._massArm *= thew.StrengthMulti.Value;
				__instance._massLeg *= thew.StrengthMulti.Value;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("ComputeBaseStats")]
		public static void ComputeBaseStats(Avatar __instance)
		{
			if (IsMainRig(__instance))
			{
				__instance._strengthUpper *= thew.StrengthMulti.Value;
				__instance._strengthLower *= thew.StrengthMulti.Value;
				__instance._strengthGrip *= thew.StrengthMulti.Value;
				__instance._speed *= thew.SpeedMulti.Value;
				__instance._agility *= thew.SpeedMulti.Value;
				__instance._intelligence *= thew.IntelligenceMultiplier.Value;
				__instance._vitality = thew.VitalityMultiplier.Value;
			}
		}
	}
	[HarmonyPatch(typeof(ControllerRig), "Jump")]
	public static class PlayerPatches
	{
		public static void Postfix(this ControllerRig __instance)
		{
			PhysicsRig val = ((IEnumerable<PhysicsRig>)Object.FindObjectsOfType<PhysicsRig>()).First();
			PhysGrounder val2 = Object.FindObjectOfType<PhysGrounder>();
			if (!val2.isGrounded)
			{
			}
		}
	}
}