using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = "")] [assembly: AssemblyCompany("GravityControl")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("GravityControl")] [assembly: AssemblyTitle("GravityControl")] [assembly: AssemblyVersion("1.0.0.0")] [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 GravityControl { [BepInPlugin("tim.peak.gravitycontrol", "Gravity Control", "2.1.0")] public class GravityControlPlugin : BaseUnityPlugin { private const string PluginGuid = "tim.peak.gravitycontrol"; private const string PluginName = "Gravity Control"; private const string PluginVersion = "2.1.0"; private ConfigEntry _toggleKeyConfig; private ConfigEntry _minMultiplierConfig; private ConfigEntry _maxMultiplierConfig; private bool _menuOpen; private Rect _windowRect = new Rect(24f, 24f, 300f, 190f); private float _gravityMultiplier = 1f; private CharacterMovement _movementTarget; private float _origJumpGravity; private float _origMaxGravity; private bool _hasSnapshot; private CursorLockMode _previousCursorLockMode; private bool _previousCursorVisible; private bool _cursorOverridden; private GUISkin _skin; private void Awake() { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) _toggleKeyConfig = ((BaseUnityPlugin)this).Config.Bind("General", "ToggleKey", (KeyCode)105, "Key that opens/closes the Gravity Control window. Edit this in the .cfg file (or with a config-manager mod) - it is intentionally not a control inside the window itself."); _minMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind("General", "MinGravityMultiplier", -1f, "Lowest value the slider can reach. Negative values reverse gravity."); _maxMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind("General", "MaxGravityMultiplier", 1f, "Highest value the slider can reach."); ((BaseUnityPlugin)this).Logger.LogInfo((object)("Gravity Control v2.1.0 loaded. Toggle key: " + ((object)_toggleKeyConfig.Value/*cast due to .constrained prefix*/).ToString())); } private void Update() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(_toggleKeyConfig.Value)) { _menuOpen = !_menuOpen; if (!_menuOpen) { RestoreCursorState(); } } ApplyGravityTuning(); } private void LateUpdate() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (_menuOpen) { if (!_cursorOverridden) { _previousCursorLockMode = Cursor.lockState; _previousCursorVisible = Cursor.visible; _cursorOverridden = true; } Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; } } private void OnDestroy() { RestoreGravityDefaults(); RestoreCursorState(); } private void OnGUI() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) if (_menuOpen) { EnsureSkin(); GUI.depth = 0; GUI.backgroundColor = Color.white; GUI.color = Color.white; GUISkin skin = GUI.skin; GUI.skin = _skin; _windowRect = GUI.Window(869271, _windowRect, new WindowFunction(DrawWindow), "GRAVITY CONTROL"); ((Rect)(ref _windowRect)).x = Mathf.Clamp(((Rect)(ref _windowRect)).x, 0f, Mathf.Max(0f, (float)Screen.width - ((Rect)(ref _windowRect)).width)); ((Rect)(ref _windowRect)).y = Mathf.Clamp(((Rect)(ref _windowRect)).y, 0f, Mathf.Max(0f, (float)Screen.height - ((Rect)(ref _windowRect)).height)); GUI.skin = skin; } } private void DrawWindow(int windowId) { float num = Mathf.Min(_minMultiplierConfig.Value, _maxMultiplierConfig.Value); float num2 = Mathf.Max(_minMultiplierConfig.Value, _maxMultiplierConfig.Value); GUILayout.BeginVertical(Array.Empty()); GUILayout.Space(4f); GUILayout.Label($"Multiplier: {_gravityMultiplier:F2}x", _skin.label, Array.Empty()); _gravityMultiplier = GUILayout.HorizontalSlider(_gravityMultiplier, num, num2, Array.Empty()); GUILayout.Space(10f); GUILayout.BeginHorizontal(Array.Empty()); if (GUILayout.Button("1x", Array.Empty())) { _gravityMultiplier = 1f; } if (GUILayout.Button("0.75x", Array.Empty())) { _gravityMultiplier = 0.75f; } if (GUILayout.Button("0.5x", Array.Empty())) { _gravityMultiplier = 0.5f; } GUILayout.EndHorizontal(); GUILayout.Space(4f); GUILayout.BeginHorizontal(Array.Empty()); if (GUILayout.Button("0.25x", Array.Empty())) { _gravityMultiplier = 0.25f; } if (GUILayout.Button("0x", Array.Empty())) { _gravityMultiplier = 0f; } if (GUILayout.Button("-1x", Array.Empty())) { _gravityMultiplier = -1f; } GUILayout.EndHorizontal(); GUILayout.Space(8f); GUILayout.Label("v2.1.0", _skin.customStyles[0], Array.Empty()); GUILayout.EndVertical(); GUI.DragWindow(); } private void ApplyGravityTuning() { Character localCharacter = GetLocalCharacter(); CharacterMovement val = (((Object)(object)localCharacter != (Object)null) ? localCharacter.refs.movement : null); if ((Object)(object)val == (Object)null) { RestoreGravityDefaults(); return; } if ((Object)(object)val != (Object)(object)_movementTarget) { RestoreGravityDefaults(); _movementTarget = val; _origJumpGravity = val.jumpGravity; _origMaxGravity = val.maxGravity; _hasSnapshot = true; } val.jumpGravity = _origJumpGravity * _gravityMultiplier; val.maxGravity = _origMaxGravity * _gravityMultiplier; } private void RestoreGravityDefaults() { if ((Object)(object)_movementTarget != (Object)null && _hasSnapshot) { _movementTarget.jumpGravity = _origJumpGravity; _movementTarget.maxGravity = _origMaxGravity; } _movementTarget = null; _hasSnapshot = false; } private static Character GetLocalCharacter() { if ((Object)(object)Character.localCharacter != (Object)null) { return Character.localCharacter; } if (!((Object)(object)Player.localPlayer != (Object)null)) { return null; } return Player.localPlayer.character; } private void RestoreCursorState() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) if (_cursorOverridden) { Cursor.lockState = _previousCursorLockMode; Cursor.visible = _previousCursorVisible; _cursorOverridden = false; } } private void EnsureSkin() { if ((Object)(object)_skin == (Object)null || _skin.window == null || (Object)(object)_skin.window.normal.background == (Object)null) { _skin = BuildPurpleSkin(); } } private static Texture2D MakeTex(int width, int height, Color color) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(width, height, (TextureFormat)4, false); ((Object)val).hideFlags = (HideFlags)61; Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < array.Length; i++) { array[i] = color; } val.SetPixels(array); val.Apply(); return val; } private static Texture2D MakeBorderedTex(Color fill, Color border) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(8, 8, (TextureFormat)4, false); ((Object)val).hideFlags = (HideFlags)61; Color[] array = (Color[])(object)new Color[64]; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { bool flag = j == 0 || i == 0 || j == 7 || i == 7; array[i * 8 + j] = (flag ? border : fill); } } val.SetPixels(array); val.Apply(); return val; } private GUISkin BuildPurpleSkin() { //IL_0087: 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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_00e8: 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_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Expected O, but got Unknown //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Expected O, but got Unknown //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: 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_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Expected O, but got Unknown //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Expected O, but got Unknown //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Expected O, but got Unknown //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Expected O, but got Unknown //IL_0321: 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_0377: Unknown result type (might be due to invalid IL or missing references) //IL_037e: Expected O, but got Unknown //IL_038e: Unknown result type (might be due to invalid IL or missing references) Color fill = default(Color); ((Color)(ref fill))..ctor(0.1f, 0.07f, 0.16f, 0.97f); Color val = default(Color); ((Color)(ref val))..ctor(0.58f, 0.36f, 0.95f, 1f); Color val2 = default(Color); ((Color)(ref val2))..ctor(0.4f, 0.24f, 0.62f, 1f); Color fill2 = default(Color); ((Color)(ref fill2))..ctor(0.19f, 0.13f, 0.28f, 1f); Color fill3 = default(Color); ((Color)(ref fill3))..ctor(0.3f, 0.19f, 0.46f, 1f); Color fill4 = val; Color textColor = default(Color); ((Color)(ref textColor))..ctor(0.9f, 0.85f, 1f, 1f); GUISkin val3 = ScriptableObject.CreateInstance(); ((Object)val3).hideFlags = (HideFlags)61; val3.font = GUI.skin.font; val3.window = new GUIStyle(GUI.skin.window); val3.window.normal.background = MakeBorderedTex(fill, val); val3.window.onNormal.background = val3.window.normal.background; val3.window.border = new RectOffset(3, 3, 22, 3); val3.window.padding = new RectOffset(12, 12, 22, 10); val3.window.normal.textColor = textColor; val3.window.fontStyle = (FontStyle)1; val3.window.fontSize = 13; val3.window.alignment = (TextAnchor)1; val3.label = new GUIStyle(GUI.skin.label); val3.label.normal.textColor = textColor; val3.label.fontStyle = (FontStyle)1; val3.label.fontSize = 12; val3.button = new GUIStyle(GUI.skin.button); val3.button.normal.background = MakeBorderedTex(fill2, val2); val3.button.hover.background = MakeBorderedTex(fill3, val); val3.button.active.background = MakeBorderedTex(fill4, val); val3.button.onNormal.background = val3.button.normal.background; val3.button.border = new RectOffset(2, 2, 2, 2); val3.button.normal.textColor = textColor; val3.button.hover.textColor = Color.white; val3.button.active.textColor = Color.white; val3.button.fontStyle = (FontStyle)1; val3.button.padding = new RectOffset(4, 4, 6, 6); val3.horizontalSlider = new GUIStyle(GUI.skin.horizontalSlider); val3.horizontalSlider.normal.background = MakeBorderedTex(fill2, val2); val3.horizontalSlider.fixedHeight = 10f; val3.horizontalSliderThumb = new GUIStyle(GUI.skin.horizontalSliderThumb); val3.horizontalSliderThumb.normal.background = MakeTex(14, 18, val); val3.horizontalSliderThumb.hover.background = MakeTex(14, 18, Color.white); val3.horizontalSliderThumb.fixedWidth = 14f; val3.horizontalSliderThumb.fixedHeight = 18f; GUIStyle val4 = new GUIStyle(GUI.skin.label); val4.fontSize = 9; val4.normal.textColor = val2; val4.alignment = (TextAnchor)8; val3.customStyles = (GUIStyle[])(object)new GUIStyle[1] { val4 }; return val3; } } }