Decompiled source of NaturalMags v1.0.1

Mods/naturalmags.dll

Decompiled 36 minutes ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using MagRotator;
using MelonLoader;
using MelonLoader.Preferences;
using ModThatIsNotMod;
using ModThatIsNotMod.BoneMenu;
using StressLevelZero.Interaction;
using StressLevelZero.Props.Weapons;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(Main), "Natural Mags", "1.0.0", "ffba", null)]
[assembly: MelonGame("Stress Level Zero", "BONEWORKS")]
[assembly: AssemblyTitle("bwsuperhot")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HP")]
[assembly: AssemblyProduct("bwsuperhot")]
[assembly: AssemblyCopyright("Copyright © HP 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("7604d8dd-be8b-40a2-afcc-bcd819fa0362")]
[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 MagRotator;

public class Main : MelonMod
{
	private MelonPreferences_Category prefCategory;

	public MelonPreferences_Entry<float> prefOffsetXDegrees;

	public MelonPreferences_Entry<float> prefOffsetYDegrees;

	public MelonPreferences_Entry<float> prefOffsetZDegrees;

	private Quaternion leftCleanRotation;

	private Quaternion rightCleanRotation;

	private bool leftOffsetWasApplied;

	private bool rightOffsetWasApplied;

	public override void OnApplicationStart()
	{
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0088: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
		prefCategory = MelonPreferences.CreateCategory("TacticalMagGrip");
		prefOffsetXDegrees = prefCategory.CreateEntry<float>("OffsetXDegrees", 0f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		prefOffsetYDegrees = prefCategory.CreateEntry<float>("OffsetYDegrees", 20f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		prefOffsetZDegrees = prefCategory.CreateEntry<float>("OffsetZDegrees", 35f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		MenuCategory obj = MenuManager.CreateCategory("Natural Mags", Color.cyan);
		obj.CreateFloatElement("X Rotation", Color.red, prefOffsetXDegrees.Value, (Action<float>)delegate(float v)
		{
			prefOffsetXDegrees.Value = v;
			prefCategory.SaveToFile(true);
		}, 5f, -180f, 180f, true);
		obj.CreateFloatElement("Y Rotation", Color.yellow, prefOffsetYDegrees.Value, (Action<float>)delegate(float v)
		{
			prefOffsetYDegrees.Value = v;
			prefCategory.SaveToFile(true);
		}, 5f, -180f, 180f, true);
		obj.CreateFloatElement("Z Rotation", Color.white, prefOffsetZDegrees.Value, (Action<float>)delegate(float v)
		{
			prefOffsetZDegrees.Value = v;
			prefCategory.SaveToFile(true);
		}, 5f, -180f, 180f, true);
	}

	public override void OnUpdate()
	{
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: 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_005e: 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_00e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)Player.GetRigManager() == (Object)null)
		{
			return;
		}
		if ((Object)(object)Player.leftHand != (Object)null)
		{
			if (leftOffsetWasApplied)
			{
				Quaternion val = Quaternion.Euler(0f - prefOffsetXDegrees.Value, 0f - prefOffsetYDegrees.Value, 0f - prefOffsetZDegrees.Value);
				Transform transform = ((Component)Player.leftHand).transform;
				transform.rotation *= Quaternion.Inverse(val);
			}
			leftCleanRotation = ((Component)Player.leftHand).transform.rotation;
		}
		if ((Object)(object)Player.rightHand != (Object)null)
		{
			if (rightOffsetWasApplied)
			{
				Quaternion val2 = Quaternion.Euler(prefOffsetXDegrees.Value, prefOffsetYDegrees.Value, prefOffsetZDegrees.Value);
				Transform transform2 = ((Component)Player.rightHand).transform;
				transform2.rotation *= Quaternion.Inverse(val2);
			}
			rightCleanRotation = ((Component)Player.rightHand).transform.rotation;
		}
	}

	public override void OnLateUpdate()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)Player.GetRigManager() == (Object)null))
		{
			ProcessHand(Player.leftHand, leftCleanRotation, ref leftOffsetWasApplied, invertOffset: true);
			ProcessHand(Player.rightHand, rightCleanRotation, ref rightOffsetWasApplied, invertOffset: false);
		}
	}

	private void ProcessHand(Hand hand, Quaternion cleanRotation, ref bool offsetWasApplied, bool invertOffset)
	{
		//IL_0095: 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_0078: 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_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)hand == (Object)null))
		{
			if ((Object)(object)Player.GetComponentInHand<Magazine>(hand) != (Object)null)
			{
				float num = (invertOffset ? (0f - prefOffsetXDegrees.Value) : prefOffsetXDegrees.Value);
				float num2 = (invertOffset ? (0f - prefOffsetYDegrees.Value) : prefOffsetYDegrees.Value);
				float num3 = (invertOffset ? (0f - prefOffsetZDegrees.Value) : prefOffsetZDegrees.Value);
				Quaternion val = Quaternion.Euler(num, num2, num3);
				((Component)hand).transform.rotation = cleanRotation * val;
				offsetWasApplied = true;
			}
			else
			{
				((Component)hand).transform.rotation = cleanRotation;
				offsetWasApplied = false;
			}
		}
	}
}