using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using Gravity;
using PluginConfig.API;
using PluginConfig.API.Decorators;
using PluginConfig.API.Fields;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("UltraGravity")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UltraGravity")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("d24676a8-4da0-4d43-a77a-48484b461e2c")]
[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 UltraGravity;
public static class F_Utils
{
[CompilerGenerated]
private sealed class <DelayCoroutine>d__0 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public float delayInSeconds;
public Action action;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DelayCoroutine>d__0(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(delayInSeconds);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
action();
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();
}
}
[CompilerGenerated]
private sealed class <NextFrameCoroutine>d__1 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public Action action;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <NextFrameCoroutine>d__1(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForEndOfFrame();
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
action();
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();
}
}
[IteratorStateMachine(typeof(<DelayCoroutine>d__0))]
public static IEnumerator DelayCoroutine(float delayInSeconds, Action action)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DelayCoroutine>d__0(0)
{
delayInSeconds = delayInSeconds,
action = action
};
}
[IteratorStateMachine(typeof(<NextFrameCoroutine>d__1))]
public static IEnumerator NextFrameCoroutine(Action action)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <NextFrameCoroutine>d__1(0)
{
action = action
};
}
public static bool Try_GetFrom_Config(BoolField boolField, bool regular = false)
{
try
{
if (boolField != null)
{
return boolField.value;
}
}
catch
{
}
return regular;
}
public static float Try_GetFrom_Config(IntField intField, int regular = 1)
{
try
{
if (intField != null)
{
return intField.value;
}
}
catch
{
}
return regular;
}
public static float Try_GetFrom_Config(FloatField floatField, float regular = 1f)
{
try
{
if (floatField != null)
{
return floatField.value;
}
}
catch
{
}
return regular;
}
public static KeyCode Try_GetFrom_Config(KeyCodeField keyCodeField, KeyCode regular = 0)
{
//IL_0004: 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)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
try
{
if (keyCodeField != null)
{
return keyCodeField.value;
}
}
catch
{
}
return regular;
}
public static T Try_GetFrom_Config<T>(EnumField<T> enumField, T regular) where T : struct
{
try
{
if (enumField != null)
{
return enumField.value;
}
}
catch
{
}
return regular;
}
}
public static class UltraGravity_Settings
{
public enum GravityVector
{
Up,
Down,
Left,
Right,
Forward,
Back,
Random
}
public static Dictionary<GravityVector, Vector3> RotationKeys = new Dictionary<GravityVector, Vector3>
{
[GravityVector.Up] = Vector3.up,
[GravityVector.Down] = Vector3.down,
[GravityVector.Left] = Vector3.left,
[GravityVector.Right] = Vector3.right,
[GravityVector.Forward] = Vector3.forward,
[GravityVector.Back] = Vector3.back,
[GravityVector.Random] = Vector3.zero
};
public static BoolField V__Varb_Mod_Enabled;
public static EnumField<GravityVector> V__Varb_Default_Gravity;
public static BoolField V__Varb_Rotate_OnCollision;
public static BoolField V__Varb_Rotate_Inverted;
public static BoolField V__Varb_AnyLayer_CollisionTrigger;
public static EnumField<LMD> V__Varb_SpecificCollision_LayerTrigger;
public static FloatField V__Varb_Delay_AfterCollision;
public static BoolField V__Varb_Rotate_OnBind;
public static KeyCodeField K__Key_Return_DefaultGravity;
public static KeyCodeField K__Key_ChangeGravity_AtLook;
public static bool Mod_Enabled => F_Utils.Try_GetFrom_Config(V__Varb_Mod_Enabled, regular: true);
public static GravityVector Default_Gravity => F_Utils.Try_GetFrom_Config(V__Varb_Default_Gravity, GravityVector.Down);
public static bool Rotate_OnCollision => F_Utils.Try_GetFrom_Config(V__Varb_Rotate_OnCollision, regular: true);
public static bool Rotate_Inverted => F_Utils.Try_GetFrom_Config(V__Varb_Rotate_Inverted);
public static bool AnyLayer_CollisionTrigger => F_Utils.Try_GetFrom_Config(V__Varb_AnyLayer_CollisionTrigger, regular: true);
public static LMD SpecificLayer_CollisionTrigger => F_Utils.Try_GetFrom_Config<LMD>(V__Varb_SpecificCollision_LayerTrigger, (LMD)6);
public static float Delay_AfterCollision => F_Utils.Try_GetFrom_Config(V__Varb_Delay_AfterCollision, 0.05f);
public static bool Rotate_OnBind => F_Utils.Try_GetFrom_Config(V__Varb_Rotate_OnBind, regular: true);
public static KeyCode K_Return_DefaultGravity => F_Utils.Try_GetFrom_Config(K__Key_Return_DefaultGravity, (KeyCode)116);
public static KeyCode K_Change_AtLookGravity => F_Utils.Try_GetFrom_Config(K__Key_ChangeGravity_AtLook, (KeyCode)103);
public static Vector3 GetDefaultRotation()
{
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: 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_0021: 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_002d: 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_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: 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_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
if (Default_Gravity == GravityVector.Random)
{
Vector3[] array = (Vector3[])(object)new Vector3[6]
{
Vector3.up,
Vector3.down,
Vector3.left,
Vector3.right,
Vector3.forward,
Vector3.back
};
return array[Random.Range(0, array.Length)];
}
return RotationKeys[Default_Gravity];
}
}
[BepInPlugin("com.enragedone.ultragravity", "UltraGravity", "1.0.3")]
public class UltraGravity_Loader : BaseUnityPlugin
{
public const string GUID = "com.enragedone.ultragravity";
public const string Name = "UltraGravity";
public const string Version = "1.0.3";
public const string Set_Guid = "com.enragedone.ultragravity.settings";
public PluginConfigurator config;
public bool Confing_Loaded;
public static ManualLogSource _Logger;
public static UltraGravity_Loader _Instance;
public void Awake()
{
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Expected O, but got Unknown
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Expected O, but got Unknown
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Expected O, but got Unknown
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Expected O, but got Unknown
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
//IL_01d8: Expected O, but got Unknown
//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Expected O, but got Unknown
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0218: Expected O, but got Unknown
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Expected O, but got Unknown
_Instance = this;
_Logger = ((BaseUnityPlugin)this).Logger;
_Logger.LogInfo((object)"UltraGravity_Loader v1.0.3 has started.");
try
{
config = PluginConfigurator.Create("UltraGravity", "com.enragedone.ultragravity.settings");
string text = Path.Combine(Path.GetDirectoryName(typeof(UltraGravity_Loader).Assembly.Location), "icon.png");
config.SetIconWithURL("file://" + text);
new ConfigHeader(config.rootPanel, "Main / Global Settings", 24).textColor = Color32.op_Implicit(new Color32((byte)105, (byte)172, byte.MaxValue, byte.MaxValue));
UltraGravity_Settings.V__Varb_Mod_Enabled = new BoolField(config.rootPanel, "Mod Enabled", "com.enragedone.ultragravity.settings.V__Varb_Mod_Enabled", true);
UltraGravity_Settings.V__Varb_Default_Gravity = new EnumField<UltraGravity_Settings.GravityVector>(config.rootPanel, "Default Gravity", "com.enragedone.ultragravity.settings.V__Varb_Default_Gravity", UltraGravity_Settings.GravityVector.Down);
new ConfigHeader(config.rootPanel, "Bind Settings", 24).textColor = Color32.op_Implicit(new Color32((byte)140, (byte)185, byte.MaxValue, byte.MaxValue));
UltraGravity_Settings.V__Varb_Rotate_OnBind = new BoolField(config.rootPanel, "Rotate On Binds", "com.enragedone.ultragravity.settings.V__Varb_Rotate_OnBind", true);
UltraGravity_Settings.K__Key_Return_DefaultGravity = new KeyCodeField(config.rootPanel, "Return Default Gravity", "com.enragedone.ultragravity.settings.K__Key_Return_DefaultGravity", (KeyCode)116);
UltraGravity_Settings.K__Key_ChangeGravity_AtLook = new KeyCodeField(config.rootPanel, "Change Gravity At Look", "com.enragedone.ultragravity.settings.K__Key_ChangeGravity_AtLook", (KeyCode)103);
new ConfigHeader(config.rootPanel, "Collision Settings", 24).textColor = Color32.op_Implicit(new Color32((byte)0, (byte)200, byte.MaxValue, byte.MaxValue));
UltraGravity_Settings.V__Varb_Rotate_OnCollision = new BoolField(config.rootPanel, "Rotate On Collision", "com.enragedone.ultragravity.settings.V__Varb_Rotate_OnCollision", true);
UltraGravity_Settings.V__Varb_Rotate_Inverted = new BoolField(config.rootPanel, "Reverse Rotation", "com.enragedone.ultragravity.settings.V__Varb_Rotate_Inverted", false);
UltraGravity_Settings.V__Varb_AnyLayer_CollisionTrigger = new BoolField(config.rootPanel, "Any Collision Layer Triggers Rotation", "com.enragedone.ultragravity.settings.V__Varb_AnyLayer_CollisionTrigger", true);
UltraGravity_Settings.V__Varb_SpecificCollision_LayerTrigger = new EnumField<LMD>(config.rootPanel, "Specific Collision Layer Trigger", "com.enragedone.ultragravity.settings.V__Varb_SpecificCollision_LayerTrigger", (LMD)6);
UltraGravity_Settings.V__Varb_Delay_AfterCollision = new FloatField(config.rootPanel, "Delay After Collision", "com.enragedone.ultragravity.settings.V__Varb_Delay_AfterCollision", 0.05f);
_Logger.LogInfo((object)"Config v1.0.3 loaded successfully");
Confing_Loaded = true;
}
catch
{
_Logger.LogError((object)"UltraGravity_Loader v1.0.3 !!!---!!! ERROR With PluginConfigurator Init");
}
UltraGravity_Core.Boot_Core();
_Logger.LogInfo((object)"UltraGravity_Loader v1.0.3 loaded successfully without error.");
}
}
public static class UltraGravity_Core
{
public class Waiter : MonoBehaviour
{
public void FixedUpdate()
{
//IL_0016: 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)
//IL_0020: 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)
if (MonoSingleton<NewMovement>.Instance.activated)
{
((Component)PlayerRotator.GravityVolume).transform.rotation = Quaternion.FromToRotation(UltraGravity_Settings.GetDefaultRotation(), Vector3.down);
MonoSingleton<NewMovement>.Instance.SwitchGravity(PlayerRotator.GravityVolume.GravityVector, false, true);
Object.Destroy((Object)(object)this);
}
}
}
public class PlayerRotator : MonoBehaviour
{
public static GravityVolume GravityVolume;
public float Waiter;
public bool Pressed;
public void Start()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Expected O, but got Unknown
GravityVolume = GameObjectExtensions.GetOrAddComponent<GravityVolume>(new GameObject("Custom PlayerRotator GravityVolume"));
MonoSingleton<NewMovement>.Instance.gravityVolumes.Add(GravityVolume);
}
public void Update()
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: 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_00b3: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
if (!UltraGravity_Settings.Mod_Enabled)
{
return;
}
Waiter = Mathf.MoveTowards(Waiter, 0f, Time.deltaTime);
if (!UltraGravity_Settings.Rotate_OnBind)
{
return;
}
if (UnityInput.Current.GetKeyDown(UltraGravity_Settings.K_Return_DefaultGravity))
{
if (!Pressed)
{
((Component)GravityVolume).transform.rotation = Quaternion.FromToRotation(UltraGravity_Settings.GetDefaultRotation(), Vector3.down);
MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector, false, true);
}
Pressed = true;
}
else if (UnityInput.Current.GetKeyDown(UltraGravity_Settings.K_Change_AtLookGravity))
{
if (!Pressed)
{
Transform transform = ((Component)MonoSingleton<CameraController>.Instance).transform;
Vector3 val = transform.forward;
Vector3 val2 = -((Vector3)(ref val)).normalized;
val = Vector3.Cross(transform.right, val2);
Vector3 normalized = ((Vector3)(ref val)).normalized;
((Component)GravityVolume).transform.rotation = Quaternion.LookRotation(normalized, val2);
MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector, false, false);
}
Pressed = true;
}
else
{
Pressed = false;
}
}
public void OnCollisionEnter(Collision collision)
{
//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_0065: 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_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: 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_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: 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_007d: Unknown result type (might be due to invalid IL or missing references)
if (!UltraGravity_Settings.Mod_Enabled || !UltraGravity_Settings.Rotate_OnCollision || Waiter != 0f)
{
return;
}
ContactPoint contact;
if (!UltraGravity_Settings.AnyLayer_CollisionTrigger)
{
contact = collision.GetContact(0);
if (!LayerMaskDefaults.IsMatchingLayer(((Component)((ContactPoint)(ref contact)).thisCollider).gameObject.layer, UltraGravity_Settings.SpecificLayer_CollisionTrigger))
{
return;
}
}
Waiter = UltraGravity_Settings.Delay_AfterCollision;
contact = collision.GetContact(0);
Vector3 val = ((ContactPoint)(ref contact)).normal;
if (UltraGravity_Settings.Rotate_Inverted)
{
val *= -1f;
}
((Component)GravityVolume).transform.rotation = Quaternion.FromToRotation(((Component)this).transform.up, val) * ((Component)GravityVolume).transform.rotation;
MonoSingleton<NewMovement>.Instance.SwitchGravity(GravityVolume.GravityVector, false, true);
}
}
public static void Boot_Core()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
public static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
string currentScene = SceneHelper.CurrentScene;
if (currentScene != "Main Menu" && currentScene != "Intro" && currentScene != "Bootstrap")
{
ComponentExtensions.GetOrAddComponent<PlayerRotator>((Component)(object)MonoSingleton<NewMovement>.Instance);
if (UltraGravity_Settings.Mod_Enabled)
{
ComponentExtensions.GetOrAddComponent<Waiter>((Component)(object)MonoSingleton<NewMovement>.Instance);
}
}
}
}