using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BoneLib; using BoneLib.BoneMenu; using BoneLib.Notifications; using DynamicFlight; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSLZ.Marrow; using MelonLoader; using MelonLoader.Preferences; using UnityEngine; using UnityEngine.XR; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(DynamicFlightMod), "DynamicFlight", "1.0.0", "Astronoz", null)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: AssemblyTitle("DynamicFlight")] [assembly: AssemblyDescription("Dynamic flight mod for BONELAB")] [assembly: MelonInfo(typeof(DynamicFlightMod), "DynamicFlight", "1.1.0", "Astronoz", null)] [assembly: TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace DynamicFlight; public class DynamicFlightMod : MelonMod { private const string CategoryName = "DynamicFlight"; private MelonPreferences_Category _prefCat; private MelonPreferences_Entry _prefEnabled; private MelonPreferences_Entry _prefMoveSpeed; private MelonPreferences_Entry _prefVerticalSpeed; private MelonPreferences_Entry _prefDamping; private MelonPreferences_Entry _prefNoclipEnabled; private MelonPreferences_Entry _prefSpeedMultiplier; private MelonPreferences_Entry _prefSonicBoomSpeed; private MelonPreferences_Entry _prefSonicBoomEnabled; private bool _isFlying; private Vector3 _currentVelocity = Vector3.zero; private float _lastBPressTime; private float _doubleTapDelay = 0.35f; private bool _isSpeedBoosted; private float _currentSpeedMultiplier = 1f; private float _speedBuildUp; private float _speedBuildUpRate = 2f; private float _lastLeftTriggerPressTime; private float _lastRightTriggerPressTime; private bool _leftTriggerPressed; private bool _rightTriggerPressed; private bool _isNoclip; private float _lastThumbstickPressTime; private List _disabledColliders = new List(); private float[] _savedDrags; private bool _physicsModified; private float _currentSpeed; private bool _hasTriggeredSonicBoom; private float _sonicBoomCooldown; private float _sonicBoomCooldownTime = 10f; private float _repeatingShockwaveTimer; private float _repeatingShockwaveInterval = 1f; private bool _isInSonicBoomMode; public override void OnInitializeMelon() { _prefCat = MelonPreferences.CreateCategory("DynamicFlight"); _prefEnabled = _prefCat.CreateEntry("Enabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefMoveSpeed = _prefCat.CreateEntry("MoveSpeed", 15f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefVerticalSpeed = _prefCat.CreateEntry("VerticalSpeed", 10f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefDamping = _prefCat.CreateEntry("Damping", 3f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefNoclipEnabled = _prefCat.CreateEntry("NoclipEnabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefSpeedMultiplier = _prefCat.CreateEntry("SpeedMultiplier", 2f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefSonicBoomSpeed = _prefCat.CreateEntry("SonicBoomSpeed", 100f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefSonicBoomEnabled = _prefCat.CreateEntry("SonicBoomEnabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); try { SetupBoneMenu(); } catch (Exception value) { ((MelonBase)this).LoggerInstance.Error($"BoneMenu FAILED: {value}"); } ((MelonBase)this).LoggerInstance.Msg("DynamicFlight initialized! Double-tap B to fly. Double-tap BOTH triggers for speed boost."); } private void SetupBoneMenu() { //IL_000a: 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_0044: 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_00b2: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) Page obj = Menu.CurrentPage.CreatePage("Dynamic Flight", Color.cyan, 0, true); obj.CreateBool("Mod Enabled", Color.green, _prefEnabled.Value, (Action)delegate(bool val) { _prefEnabled.Value = val; _prefCat.SaveToFile(true); if (!val && _isFlying) { StopFlying(); } }); obj.CreateFloat("Move Speed", Color.white, _prefMoveSpeed.Value, 5f, 5f, 100f, (Action)delegate(float val) { _prefMoveSpeed.Value = val; _prefCat.SaveToFile(true); }); obj.CreateFloat("Vertical Speed", Color.white, _prefVerticalSpeed.Value, 5f, 5f, 100f, (Action)delegate(float val) { _prefVerticalSpeed.Value = val; _prefCat.SaveToFile(true); }); obj.CreateFloat("Damping", Color.white, _prefDamping.Value, 1f, 0f, 30f, (Action)delegate(float val) { _prefDamping.Value = val; _prefCat.SaveToFile(true); }); obj.CreateFloat("Speed Multiplier", Color.magenta, _prefSpeedMultiplier.Value, 1f, 1f, 5f, (Action)delegate(float val) { _prefSpeedMultiplier.Value = val; _prefCat.SaveToFile(true); }); obj.CreateBool("Sonic Boom", Color.cyan, _prefSonicBoomEnabled.Value, (Action)delegate(bool val) { _prefSonicBoomEnabled.Value = val; _prefCat.SaveToFile(true); if (!val) { _isInSonicBoomMode = false; _repeatingShockwaveTimer = 0f; } }); obj.CreateFloat("Sonic Boom Speed", Color.cyan, _prefSonicBoomSpeed.Value, 50f, 50f, 300f, (Action)delegate(float val) { _prefSonicBoomSpeed.Value = val; _prefCat.SaveToFile(true); }); obj.CreateBool("Noclip Enabled", Color.green, _prefNoclipEnabled.Value, (Action)delegate(bool val) { _prefNoclipEnabled.Value = val; _prefCat.SaveToFile(true); if (!val && _isNoclip) { DisableNoclip(); } }); ((MelonBase)this).LoggerInstance.Msg("BoneMenu created!"); } public override void OnUpdate() { SonicBoomShockwave.Tick(); if (!_prefEnabled.Value || !Player.HandsExist) { return; } if (Player.RightController.GetBButtonDown()) { float unscaledTime = Time.unscaledTime; if (unscaledTime - _lastBPressTime <= _doubleTapDelay) { if (_isFlying) { StopFlying(); } else { StartFlying(); } _lastBPressTime = 0f; } else { _lastBPressTime = unscaledTime; } } if (_isFlying) { bool triggerPressed = GetTriggerPressed((XRNode)4); bool triggerPressed2 = GetTriggerPressed((XRNode)5); if (triggerPressed && !_leftTriggerPressed) { float unscaledTime2 = Time.unscaledTime; if (unscaledTime2 - _lastLeftTriggerPressTime <= _doubleTapDelay) { if (triggerPressed2) { ToggleSpeedBoost(); } _lastLeftTriggerPressTime = 0f; } else { _lastLeftTriggerPressTime = unscaledTime2; } _leftTriggerPressed = true; } else if (!triggerPressed) { _leftTriggerPressed = false; } if (triggerPressed2 && !_rightTriggerPressed) { float unscaledTime3 = Time.unscaledTime; if (unscaledTime3 - _lastRightTriggerPressTime <= _doubleTapDelay) { if (triggerPressed) { ToggleSpeedBoost(); } _lastRightTriggerPressTime = 0f; } else { _lastRightTriggerPressTime = unscaledTime3; } _rightTriggerPressed = true; } else if (!triggerPressed2) { _rightTriggerPressed = false; } } if (!_prefNoclipEnabled.Value || !_isFlying || !Player.RightController.GetThumbStickDown()) { return; } float unscaledTime4 = Time.unscaledTime; if (unscaledTime4 - _lastThumbstickPressTime <= _doubleTapDelay) { if (_isNoclip) { DisableNoclip(); } else { EnableNoclip(); } _lastThumbstickPressTime = 0f; } else { _lastThumbstickPressTime = unscaledTime4; } } private bool GetTriggerPressed(XRNode node) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) InputDevice deviceAtXRNode = InputDevices.GetDeviceAtXRNode(node); float num = default(float); if (((InputDevice)(ref deviceAtXRNode)).isValid && ((InputDevice)(ref deviceAtXRNode)).TryGetFeatureValue(CommonUsages.trigger, ref num)) { return num > 0.5f; } return false; } public override void OnFixedUpdate() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_002a: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_00c4: 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_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) if (!_isFlying) { return; } PhysicsRig physicsRig = Player.PhysicsRig; if ((Object)(object)physicsRig == (Object)null) { return; } Transform head = Player.Head; Vector3 forward = head.forward; Vector3 right = head.right; Vector2 thumbStickAxis = Player.LeftController.GetThumbStickAxis(); Vector2 thumbStickAxis2 = Player.RightController.GetThumbStickAxis(); UpdateSpeedBoost(); float num = _prefMoveSpeed.Value * _currentSpeedMultiplier; float num2 = _prefVerticalSpeed.Value * _currentSpeedMultiplier; Vector3 zero = Vector3.zero; zero += forward * thumbStickAxis.y * num; zero += right * thumbStickAxis.x * num; zero += Vector3.up * thumbStickAxis2.y * num2; float value = _prefDamping.Value; _currentVelocity = Vector3.Lerp(_currentVelocity, zero, Time.fixedDeltaTime * value * 2f); _currentSpeed = ((Vector3)(ref _currentVelocity)).magnitude; if (_prefSonicBoomEnabled.Value) { CheckSonicBoom(); if (_isInSonicBoomMode) { _repeatingShockwaveTimer += Time.fixedDeltaTime; if (_repeatingShockwaveTimer >= _repeatingShockwaveInterval) { _repeatingShockwaveTimer = 0f; TriggerRepeatingShockwave(); } } } Rigidbody[] allBodyRigidbodies = GetAllBodyRigidbodies(physicsRig); foreach (Rigidbody val in allBodyRigidbodies) { if ((Object)(object)val != (Object)null) { val.velocity = _currentVelocity; val.useGravity = false; val.angularVelocity = Vector3.zero; } } } private void CheckSonicBoom() { if (_sonicBoomCooldown > 0f) { _sonicBoomCooldown -= Time.fixedDeltaTime; } float value = _prefSonicBoomSpeed.Value; if (_currentSpeed >= value && _sonicBoomCooldown <= 0f && !_hasTriggeredSonicBoom) { _hasTriggeredSonicBoom = true; _sonicBoomCooldown = _sonicBoomCooldownTime; _isInSonicBoomMode = true; _repeatingShockwaveTimer = 0f; TriggerSonicBoom(); } else if (_currentSpeed < value && _isInSonicBoomMode) { _isInSonicBoomMode = false; _repeatingShockwaveTimer = 0f; } else if (_currentSpeed < value) { _hasTriggeredSonicBoom = false; } } private void TriggerSonicBoom() { //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) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Transform head = Player.Head; if (!((Object)(object)head == (Object)null)) { Vector3 position = head.position; float radius = Mathf.Clamp(_currentSpeed / 10f, 5f, 30f) * 9f; SonicBoomShockwave.Spawn(position, radius); ApplyShockwaveForce(position, radius); } } private void TriggerRepeatingShockwave() { //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) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Transform head = Player.Head; if (!((Object)(object)head == (Object)null)) { Vector3 position = head.position; float radius = Mathf.Clamp(_currentSpeed / 12f, 4f, 25f) * 9f; SonicBoomShockwave.Spawn(position, radius); ApplyShockwaveForce(position, radius); } } private void ApplyShockwaveForce(Vector3 position, float radius) { //IL_001c: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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_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_00bc: 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_00c5: 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) float num = Mathf.Clamp(_currentSpeed * 0.5f, 50f, 500f); Collider[] array = Il2CppArrayBase.op_Implicit((Il2CppArrayBase)(object)Physics.OverlapSphere(position, radius)); HashSet hashSet = new HashSet(); Collider[] array2 = array; foreach (Collider val in array2) { if (!((Object)(object)val == (Object)null) && !val.isTrigger) { Rigidbody componentInParent = ((Component)val).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && !componentInParent.isKinematic && hashSet.Add(((Object)componentInParent).GetInstanceID())) { float num2 = Vector3.Distance(position, componentInParent.position); float num3 = 1f - Mathf.Clamp01(num2 / radius); float num4 = num * num3 * 2f; Vector3 val2 = componentInParent.position - position; Vector3 normalized = ((Vector3)(ref val2)).normalized; componentInParent.AddForce(normalized * num4, (ForceMode)1); } } } } private void UpdateSpeedBoost() { float num = (_isSpeedBoosted ? _prefSpeedMultiplier.Value : 1f); if (_isSpeedBoosted) { _speedBuildUp += Time.fixedDeltaTime * _speedBuildUpRate; _speedBuildUp = Mathf.Min(_speedBuildUp, 1f); _currentSpeedMultiplier = Mathf.Lerp(1f, num, _speedBuildUp); } else { _speedBuildUp -= Time.fixedDeltaTime * _speedBuildUpRate * 1.5f; _speedBuildUp = Mathf.Max(_speedBuildUp, 0f); _currentSpeedMultiplier = Mathf.Lerp(1f, num, _speedBuildUp); } _currentSpeedMultiplier = Mathf.Clamp(_currentSpeedMultiplier, 1f, _prefSpeedMultiplier.Value); } private void ToggleSpeedBoost() { //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_0080: 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_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_00cd: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Expected O, but got Unknown _isSpeedBoosted = !_isSpeedBoosted; if (_isSpeedBoosted) { _speedBuildUp = 0f; ((MelonBase)this).LoggerInstance.Msg($"SPEED BOOST ON - Building up to {_prefSpeedMultiplier.Value}x"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Speed Boost"), Message = NotificationText.op_Implicit($"BOOSTING to {_prefSpeedMultiplier.Value}x!"), ShowTitleOnPopup = true, PopupLength = 1.5f, Type = (NotificationType)3 }); } else { ((MelonBase)this).LoggerInstance.Msg("SPEED BOOST OFF - Returning to 1x"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Speed Boost"), Message = NotificationText.op_Implicit("Returning to normal speed"), ShowTitleOnPopup = true, PopupLength = 1.5f, Type = (NotificationType)2 }); } } private Rigidbody[] GetAllBodyRigidbodies(PhysicsRig physRig) { List list = new List(); if ((Object)(object)physRig.torso != (Object)null) { AddIfNotNull(list, physRig.torso.rbPelvis); AddIfNotNull(list, physRig.torso.rbSpine); AddIfNotNull(list, physRig.torso.rbChest); AddIfNotNull(list, physRig.torso.rbNeck); AddIfNotNull(list, physRig.torso.rbHead); } if ((Object)(object)physRig.softbody != (Object)null) { AddIfNotNull(list, physRig.softbody.rbArmUpperLf); AddIfNotNull(list, physRig.softbody.rbArmUpperRt); AddIfNotNull(list, physRig.softbody.rbForearmLf); AddIfNotNull(list, physRig.softbody.rbForearmRt); AddIfNotNull(list, physRig.softbody.rbSoftHandLf); AddIfNotNull(list, physRig.softbody.rbSoftHandRt); } AddIfNotNull(list, physRig.rbKnee); AddIfNotNull(list, physRig.rbFeet); return list.ToArray(); } private void AddIfNotNull(List list, Rigidbody rb) { if ((Object)(object)rb != (Object)null) { list.Add(rb); } } private void StartFlying() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_00c9: 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) //IL_00d9: 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_00e4: 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_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Expected O, but got Unknown PhysicsRig physicsRig = Player.PhysicsRig; if (!((Object)(object)physicsRig == (Object)null)) { _isFlying = true; _currentVelocity = Vector3.zero; _currentSpeedMultiplier = 1f; _isSpeedBoosted = false; _speedBuildUp = 0f; _hasTriggeredSonicBoom = false; _sonicBoomCooldown = 0f; _isInSonicBoomMode = false; _repeatingShockwaveTimer = 0f; Rigidbody[] allBodyRigidbodies = GetAllBodyRigidbodies(physicsRig); _savedDrags = new float[allBodyRigidbodies.Length]; for (int i = 0; i < allBodyRigidbodies.Length; i++) { _savedDrags[i] = allBodyRigidbodies[i].drag; allBodyRigidbodies[i].useGravity = false; allBodyRigidbodies[i].drag = 0f; } _physicsModified = true; ((MelonBase)this).LoggerInstance.Msg("FLY ON"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Dynamic Flight"), Message = NotificationText.op_Implicit("Flight ON"), ShowTitleOnPopup = true, PopupLength = 1.5f, Type = (NotificationType)3 }); } } private void StopFlying() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown _isFlying = false; _isSpeedBoosted = false; _currentSpeedMultiplier = 1f; _speedBuildUp = 0f; _hasTriggeredSonicBoom = false; _isInSonicBoomMode = false; _repeatingShockwaveTimer = 0f; if (_isNoclip) { DisableNoclip(); } RestorePhysics(); ((MelonBase)this).LoggerInstance.Msg("FLY OFF"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Dynamic Flight"), Message = NotificationText.op_Implicit("Flight OFF"), ShowTitleOnPopup = true, PopupLength = 1.5f, Type = (NotificationType)2 }); } private void RestorePhysics() { if (!_physicsModified) { return; } PhysicsRig physicsRig = Player.PhysicsRig; if (!((Object)(object)physicsRig == (Object)null)) { Rigidbody[] allBodyRigidbodies = GetAllBodyRigidbodies(physicsRig); for (int i = 0; i < allBodyRigidbodies.Length && i < _savedDrags.Length; i++) { allBodyRigidbodies[i].useGravity = true; allBodyRigidbodies[i].drag = _savedDrags[i]; } _physicsModified = false; } } private void EnableNoclip() { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: 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_00f3: Expected O, but got Unknown PhysicsRig physicsRig = Player.PhysicsRig; if ((Object)(object)physicsRig == (Object)null) { return; } _disabledColliders.Clear(); Collider[] array = Il2CppArrayBase.op_Implicit(((Component)physicsRig).gameObject.GetComponentsInChildren(true)); foreach (Collider val in array) { if ((Object)(object)val != (Object)null && val.enabled) { val.enabled = false; _disabledColliders.Add(val); } } _isNoclip = true; ((MelonBase)this).LoggerInstance.Msg($"NOCLIP ON - disabled {_disabledColliders.Count} colliders"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Dynamic Flight"), Message = NotificationText.op_Implicit("Noclip ON"), ShowTitleOnPopup = true, PopupLength = 1.5f, Type = (NotificationType)3 }); } private void DisableNoclip() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown foreach (Collider disabledCollider in _disabledColliders) { if ((Object)(object)disabledCollider != (Object)null) { disabledCollider.enabled = true; } } _disabledColliders.Clear(); _isNoclip = false; ((MelonBase)this).LoggerInstance.Msg("NOCLIP OFF"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("Dynamic Flight"), Message = NotificationText.op_Implicit("Noclip OFF"), ShowTitleOnPopup = true, PopupLength = 1.5f, Type = (NotificationType)2 }); } } public static class SonicBoomShockwave { private static GameObject _obj = null; private static float _timer = 0f; private static float _scale = 0f; private static float _targetRadius = 8f; public static void Spawn(Vector3 pos, float radius) { //IL_0041: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown //IL_00bb: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_obj != (Object)null) { Object.Destroy((Object)(object)_obj); _obj = null; } _obj = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)_obj).name = "SonicBoom_Shockwave"; _obj.transform.position = pos; _obj.transform.localScale = Vector3.one * 0.1f; Collider component = _obj.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } MeshRenderer component2 = _obj.GetComponent(); if ((Object)(object)component2 != (Object)null) { Material val = new Material(Shader.Find("Sprites/Default")); val.color = new Color(0.6f, 0.8f, 1f, 0.4f); val.SetFloat("_Mode", 3f); val.SetInt("_SrcBlend", 5); val.SetInt("_DstBlend", 10); val.SetInt("_ZWrite", 0); val.EnableKeyword("_ALPHABLEND_ON"); val.renderQueue = 3000; ((Renderer)component2).material = val; } _scale = 0.1f; _timer = 0.3f; _targetRadius = radius; } public static void Tick() { //IL_0050: 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_00a5: Unknown result type (might be due to invalid IL or missing references) if (_timer <= 0f) { return; } _timer -= Time.deltaTime; _scale += Time.deltaTime * _targetRadius * 3f; if ((Object)(object)_obj != (Object)null) { _obj.transform.localScale = Vector3.one * _scale; MeshRenderer component = _obj.GetComponent(); if ((Object)(object)component != (Object)null) { float num = Mathf.Clamp01(_timer / 0.3f) * 0.4f; ((Renderer)component).material.color = new Color(0.6f, 0.8f, 1f, num); } } if (_timer <= 0f && (Object)(object)_obj != (Object)null) { Object.Destroy((Object)(object)_obj); _obj = null; } } }