using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BoneLib; using BoneLib.BoneMenu; using BoneLib.Notifications; using BonelabFly; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSLZ.Marrow; using MelonLoader; using MelonLoader.Preferences; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(FlyMod), "Claudesv2fly", "2.4.0.0", "Claude", null)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: AssemblyTitle("ClaudeFlyV2")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClaudeFlyV2")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("bbcc6b16-d3d0-45c7-9d41-3cd32409266b")] [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 BonelabFly; public class FlyMod : MelonMod { private MelonPreferences_Category _prefCat; private MelonPreferences_Entry _prefEnabled; private MelonPreferences_Entry _prefMoveSpeed; private MelonPreferences_Entry _prefVerticalSpeed; private MelonPreferences_Entry _prefDamping; private MelonPreferences_Entry _prefDeadzone; private MelonPreferences_Entry _prefDoublePressDelay; private MelonPreferences_Entry _prefNoclipEnabled; private MelonPreferences_Entry _prefNoclipDoubleTapWindow; private float _lastBPressTime; private Vector3 _currentVelocity; private bool _isFlying; private float[] _savedDrags; private bool _physicsModified; private bool _loggedFirstFly; private List _kinematicArms = new List(); private float _speedStep = 5f; private bool _isNoclip; private float _lastThumbstickPressTime; private bool _thumbstickWasPressed; private List _disabledColliders = new List(); public override void OnInitializeMelon() { _prefCat = MelonPreferences.CreateCategory("BonelabFly"); _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("FlyDamp", 5f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefDeadzone = _prefCat.CreateEntry("Deadzone", 0.15f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); _prefDoublePressDelay = _prefCat.CreateEntry("DoublePressDelay", 0.35f, (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); _prefNoclipDoubleTapWindow = _prefCat.CreateEntry("NoclipDoubleTapWindow", 0.3f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null); try { SetupBoneMenu(); } catch (Exception arg) { ((MelonBase)this).LoggerInstance.Error($"BoneMenu FAILED: {arg}"); } Hooking.OnLevelLoaded += OnLevelWasLoaded; ((MelonBase)this).LoggerInstance.Msg("ClaudesFlyingMod v2.4 ready! Double-tap B to fly. Double-tap R-stick to noclip."); } public override void OnDeinitializeMelon() { Hooking.OnLevelLoaded -= OnLevelWasLoaded; } private void OnLevelWasLoaded(LevelInfo info) { if (_isFlying) { StopFlying(); } } 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) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: 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_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_025b: 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) Page obj = Menu.CurrentPage.CreatePage("ClaudesFlyBone", 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, 0f, 1000f, (Action)delegate(float val) { _prefMoveSpeed.Value = val; _prefCat.SaveToFile(true); }); obj.CreateFloat("Vertical Speed", Color.white, _prefVerticalSpeed.Value, 5f, 0f, 1000f, (Action)delegate(float val) { _prefVerticalSpeed.Value = val; _prefCat.SaveToFile(true); }); obj.CreateFloat("Damping", Color.white, _prefDamping.Value, 0.5f, 0f, 50f, (Action)delegate(float val) { _prefDamping.Value = val; _prefCat.SaveToFile(true); }); obj.CreateFloat("DoubleTap Window", Color.gray, _prefDoublePressDelay.Value, 0.05f, 0.1f, 1f, (Action)delegate(float val) { _prefDoublePressDelay.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(); } }); obj.CreateFloat("Noclip Tap Window", Color.gray, _prefNoclipDoubleTapWindow.Value, 0.05f, 0.1f, 1f, (Action)delegate(float val) { _prefNoclipDoubleTapWindow.Value = val; _prefCat.SaveToFile(true); }); Page obj2 = obj.CreatePage("Speed Step", Color.yellow, 0, true); obj2.CreateFunction("1 per click", Color.white, (Action)delegate { _speedStep = 1f; }); obj2.CreateFunction("5 per click", Color.white, (Action)delegate { _speedStep = 5f; }); obj2.CreateFunction("10 per click", Color.green, (Action)delegate { _speedStep = 10f; }); obj2.CreateFunction("50 per click", Color.yellow, (Action)delegate { _speedStep = 50f; }); obj2.CreateFunction("100 per click", Color.red, (Action)delegate { _speedStep = 100f; }); obj2.CreateFunction("Move Speed +", Color.green, (Action)delegate { _prefMoveSpeed.Value = Mathf.Min(_prefMoveSpeed.Value + _speedStep, 1000f); _prefCat.SaveToFile(true); }); obj2.CreateFunction("Move Speed -", Color.red, (Action)delegate { _prefMoveSpeed.Value = Mathf.Max(_prefMoveSpeed.Value - _speedStep, 0f); _prefCat.SaveToFile(true); }); obj2.CreateFunction("Vert Speed +", Color.green, (Action)delegate { _prefVerticalSpeed.Value = Mathf.Min(_prefVerticalSpeed.Value + _speedStep, 1000f); _prefCat.SaveToFile(true); }); obj2.CreateFunction("Vert Speed -", Color.red, (Action)delegate { _prefVerticalSpeed.Value = Mathf.Max(_prefVerticalSpeed.Value - _speedStep, 0f); _prefCat.SaveToFile(true); }); } private Rigidbody[] GetAllBodyRigidbodies(PhysicsRig physRig) { List list = new List(); PhysTorso torso = physRig.torso; if ((Object)(object)torso != (Object)null) { AddIfNotNull(list, torso.rbPelvis); AddIfNotNull(list, torso.rbSpine); AddIfNotNull(list, torso.rbChest); AddIfNotNull(list, torso.rbNeck); AddIfNotNull(list, torso.rbHead); } PhysSoftBody softbody = physRig.softbody; if ((Object)(object)softbody != (Object)null) { AddIfNotNull(list, softbody.rbArmUpperLf); AddIfNotNull(list, softbody.rbArmUpperRt); AddIfNotNull(list, softbody.rbForearmLf); AddIfNotNull(list, softbody.rbForearmRt); AddIfNotNull(list, softbody.rbSoftHandLf); AddIfNotNull(list, softbody.rbSoftHandRt); } AddIfNotNull(list, physRig.rbKnee); AddIfNotNull(list, physRig.rbFeet); return list.ToArray(); } private Rigidbody[] GetCoreBodyRigidbodies(PhysicsRig physRig) { List list = new List(); PhysTorso torso = physRig.torso; if ((Object)(object)torso != (Object)null) { AddIfNotNull(list, torso.rbPelvis); AddIfNotNull(list, torso.rbSpine); AddIfNotNull(list, torso.rbChest); AddIfNotNull(list, torso.rbNeck); AddIfNotNull(list, torso.rbHead); } AddIfNotNull(list, physRig.rbKnee); AddIfNotNull(list, physRig.rbFeet); return list.ToArray(); } private Rigidbody[] GetArmRigidbodies(PhysicsRig physRig) { List list = new List(); PhysSoftBody softbody = physRig.softbody; if ((Object)(object)softbody != (Object)null) { AddIfNotNull(list, softbody.rbArmUpperLf); AddIfNotNull(list, softbody.rbArmUpperRt); AddIfNotNull(list, softbody.rbForearmLf); AddIfNotNull(list, softbody.rbForearmRt); AddIfNotNull(list, softbody.rbSoftHandLf); AddIfNotNull(list, softbody.rbSoftHandRt); } return list.ToArray(); } private void AddIfNotNull(List list, Rigidbody rb) { if ((Object)(object)rb != (Object)null) { list.Add(rb); } } private void StopFlying() { //IL_002b: 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_0036: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_0057: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Expected O, but got Unknown _isFlying = false; if (_isNoclip) { DisableNoclip(); } RestorePhysics(); ((MelonBase)this).LoggerInstance.Msg("FLY OFF"); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("ClaudesFlyBone"), Message = NotificationText.op_Implicit("Ai slop fly off"), ShowTitleOnPopup = true, PopupLength = 1f, Type = (NotificationType)1 }); } private void RestorePhysics() { try { if (!_physicsModified) { return; } PhysicsRig physicsRig = Player.PhysicsRig; if ((Object)(object)physicsRig == (Object)null) { return; } Rigidbody[] coreBodyRigidbodies = GetCoreBodyRigidbodies(physicsRig); for (int i = 0; i < coreBodyRigidbodies.Length && i < _savedDrags.Length; i++) { coreBodyRigidbodies[i].useGravity = true; coreBodyRigidbodies[i].drag = _savedDrags[i]; } foreach (Rigidbody kinematicArm in _kinematicArms) { if ((Object)(object)kinematicArm != (Object)null) { kinematicArm.isKinematic = false; } } _kinematicArms.Clear(); _physicsModified = false; } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("RestorePhysics: " + ex.Message); } } private void EnableNoclip() { try { 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"); } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("EnableNoclip: " + ex.Message); } } private void DisableNoclip() { try { foreach (Collider disabledCollider in _disabledColliders) { if ((Object)(object)disabledCollider != (Object)null) { disabledCollider.enabled = true; } } _disabledColliders.Clear(); _isNoclip = false; ((MelonBase)this).LoggerInstance.Msg("NOCLIP OFF"); } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("DisableNoclip: " + ex.Message); } } public override void OnUpdate() { //IL_015e: 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_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0179: 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) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Expected O, but got Unknown //IL_00f0: 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) //IL_00fb: 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_010b: 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_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Expected O, but got Unknown try { if (!_prefEnabled.Value || !Player.HandsExist) { return; } if (Player.RightController.GetBButtonDown()) { float unscaledTime = Time.unscaledTime; if (unscaledTime - _lastBPressTime <= _prefDoublePressDelay.Value) { if (_isFlying) { StopFlying(); } else { StartFlying(); } _lastBPressTime = 0f; } else { _lastBPressTime = unscaledTime; } } if (!_prefNoclipEnabled.Value || !_isFlying) { return; } bool flag = false; try { flag = Player.RightController.GetThumbStickDown(); } catch { bool thumbStick = Player.RightController.GetThumbStick(); flag = thumbStick && !_thumbstickWasPressed; _thumbstickWasPressed = thumbStick; } if (!flag) { return; } float unscaledTime2 = Time.unscaledTime; if (unscaledTime2 - _lastThumbstickPressTime <= _prefNoclipDoubleTapWindow.Value) { if (_isNoclip) { DisableNoclip(); try { Notifier.Send(new Notification { Title = NotificationText.op_Implicit("ClaudesFlyBone"), Message = NotificationText.op_Implicit("ai slop no clip off"), ShowTitleOnPopup = true, PopupLength = 1f, Type = (NotificationType)1 }); } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("Noclip OFF notif: " + ex.Message); } } else { EnableNoclip(); try { Notifier.Send(new Notification { Title = NotificationText.op_Implicit("ClaudesFlyBone"), Message = NotificationText.op_Implicit("ai slop no clip on"), ShowTitleOnPopup = true, PopupLength = 1f, Type = (NotificationType)3 }); } catch (Exception ex2) { ((MelonBase)this).LoggerInstance.Error("Noclip ON notif: " + ex2.Message); } } _lastThumbstickPressTime = 0f; } else { _lastThumbstickPressTime = unscaledTime2; } } catch (Exception ex3) { ((MelonBase)this).LoggerInstance.Error("OnUpdate: " + ex3.Message); } } private void StartFlying() { //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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: 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_0108: 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_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_012a: 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_0136: Expected O, but got Unknown try { PhysicsRig physicsRig = Player.PhysicsRig; if ((Object)(object)physicsRig == (Object)null) { return; } _isFlying = true; _currentVelocity = Vector3.zero; Rigidbody[] coreBodyRigidbodies = GetCoreBodyRigidbodies(physicsRig); _savedDrags = new float[coreBodyRigidbodies.Length]; for (int i = 0; i < coreBodyRigidbodies.Length; i++) { _savedDrags[i] = coreBodyRigidbodies[i].drag; coreBodyRigidbodies[i].useGravity = false; coreBodyRigidbodies[i].drag = _prefDamping.Value; } _physicsModified = true; _kinematicArms.Clear(); Rigidbody[] armRigidbodies = GetArmRigidbodies(physicsRig); foreach (Rigidbody val in armRigidbodies) { if (!val.isKinematic) { val.isKinematic = true; _kinematicArms.Add(val); } } ((MelonBase)this).LoggerInstance.Msg($"Physics modified on {coreBodyRigidbodies.Length} core + {_kinematicArms.Count} arms set kinematic."); Notifier.Send(new Notification { Title = NotificationText.op_Implicit("ClaudesFlyBone"), Message = NotificationText.op_Implicit("Ai slop fly on"), ShowTitleOnPopup = true, PopupLength = 1f, Type = (NotificationType)3 }); if (!_loggedFirstFly) { ((MelonBase)this).LoggerInstance.Msg("FLY ON \n L-stick: move, R-stick Y: up/down"); _loggedFirstFly = true; } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("StartFlying: " + ex.Message); } } public override void OnFixedUpdate() { //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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_007d: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: 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_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0161: 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_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) try { if (!_isFlying) { return; } PhysicsRig physicsRig = Player.PhysicsRig; if (!((Object)(object)physicsRig == (Object)null)) { float value = _prefDeadzone.Value; Vector2 thumbStickAxis = Player.LeftController.GetThumbStickAxis(); float num = ((Mathf.Abs(thumbStickAxis.x) > value) ? thumbStickAxis.x : 0f); float num2 = ((Mathf.Abs(thumbStickAxis.y) > value) ? thumbStickAxis.y : 0f); Vector2 thumbStickAxis2 = Player.RightController.GetThumbStickAxis(); float num3 = ((Mathf.Abs(thumbStickAxis2.y) > value) ? thumbStickAxis2.y : 0f); Transform head = Player.Head; Vector3 val = head.forward; Vector3 val2 = head.right; val.y = 0f; val = ((Vector3)(ref val)).normalized; val2.y = 0f; val2 = ((Vector3)(ref val2)).normalized; Vector3 val3 = (val * num2 + val2 * num) * _prefMoveSpeed.Value + Vector3.up * num3 * _prefVerticalSpeed.Value; _currentVelocity = Vector3.Lerp(_currentVelocity, val3, Time.deltaTime * _prefDamping.Value); Rigidbody[] coreBodyRigidbodies = GetCoreBodyRigidbodies(physicsRig); Rigidbody[] array = coreBodyRigidbodies; foreach (Rigidbody val4 in array) { Vector3 val5 = _currentVelocity - val4.velocity; val4.AddForce(val5, (ForceMode)2); } if (!_loggedFirstFly) { ((MelonBase)this).LoggerInstance.Msg($"Flying! velocity={_currentVelocity} bodies={coreBodyRigidbodies.Length}"); } } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("OnFixedUpdate: " + ex.Message); } } }