RUMBLE does not support other mod managers. If you want to use a manager, you must use the RUMBLE Mod Manager, a manager specifically designed for this game.
Decompiled source of SpeedEffects v1.0.2
Mods/SpeedEffects.dll
Decompiled a month agousing System; using System.Collections; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppRUMBLE.Interactions.InteractionBase; using Il2CppRUMBLE.Managers; using Il2CppRUMBLE.Players; using Il2CppRUMBLE.Players.Subsystems; using Il2CppRUMBLE.Utilities; using MelonLoader; using Microsoft.CodeAnalysis; using RumbleModUI; using RumbleModdingAPI; using SpeedEffects; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(SEClass), "SpeedEffects", "1.0.2", "TacoSlayer36", null)] [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")] [assembly: MelonColor(255, 255, 248, 231)] [assembly: MelonAuthorColor(255, 255, 248, 231)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("SpeedEffects")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SpeedEffects")] [assembly: AssemblyTitle("SpeedEffects")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace SpeedEffects { public static class BuildInfo { public const string ModName = "SpeedEffects"; public const string ModVersion = "1.0.2"; public const string Description = "Zoom"; public const string Author = "TacoSlayer36"; public const string Company = ""; } public class SEClass : MelonMod { private bool init = false; private bool hasFlatLand = false; private bool hasVoidLand = false; private string scene = "Loader"; private GameObject recordingCameraGO; private Camera recordingCameraCAM; private RecordingCamera recordingCameraRC; private Rigidbody playerRB; private PlayerMovement playerM; private Material speedLinesMaterial; private GameObject speedLinesOverlay; private bool referencesGot = false; private Mod Mod = new Mod(); private bool doDynamicFOV = true; private float fovEffectMultiplier = 4f; private float interpolationSpeed = 0.24f; private float maxFOV = 130f; private bool doSpeedLines = true; private float speedLinesPowerMultiplier = 0.19f; private Vector4 speedLinesColor = Color.op_Implicit(Color.white); private bool includeUpwardSpeed = false; private bool isRainbow = false; private float rainbowHue = 0f; private float speed; private float fovVelocity = 0f; private float baseFOV = 90f; private float minimumSpeed = 6f; private bool airBias = false; public override void OnLateInitializeMelon() { //IL_0060: 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_0072: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Expected O, but got Unknown //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Expected O, but got Unknown //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Expected O, but got Unknown //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Expected O, but got Unknown //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Expected O, but got Unknown UI.instance.UI_Initialized += OnUIInit; Mod.ModName = "SpeedEffects"; Mod.ModVersion = "1.0.2"; Mod.SetFolder("SpeedEffects"); Mod.AddDescription("Description", "", "Zoom", new Tags { IsSummary = true }); Mod.AddToList("Do Dynamic FOV", true, 0, "Set to enable the speed-based field of view", new Tags()); Mod.AddToList("FOV Effect Multiplier", 5.5f, "The strength of the FOV effect\nCalculated as: (base FOV + meters per second * multiplier)", new Tags()); Mod.AddToList("FOV Smoothing", 0.24f, "The speed at which the FOV interpolates to the target value", new Tags()); Mod.AddToList("Max FOV", 145f, "The maximum FOV value", new Tags()); Mod.AddToList("Do Speed Lines", true, 0, "Set to enable anime speed lines", new Tags()); Mod.AddToList("Speed Lines Strength", 0.19f, "The strength of the speed lines", new Tags()); Mod.AddToList("Speed Lines Color", "#FFFFFF", "The hex color code for the speed lines, or type \"Rainbow\"", new Tags()); Mod.AddToList("Include Upward Speed", false, 0, "Set to allow moving upwards to trigger the effects", new Tags()); Mod.AddToList("Minimum Speed", 8f, "The minimum speed required before the speed effects start their calculations", new Tags()); Mod.AddToList("Air Bias", false, 0, "Set to reduce speed effects when you're grounded", new Tags()); Mod.GetFromFile(); Mod.ModSaved += Save; Save(); Calls.onMapInitialized += OnMapInitialized; Calls.onMyModsGathered += checkMods; } private void checkMods() { hasFlatLand = Mods.findOwnMod("FlatLand", "1.6.0", false); hasVoidLand = Mods.findOwnMod("VoidLand", "1.0.0", false); } public void OnUIInit() { UI.instance.AddMod(Mod); } public void Save() { //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: 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) doDynamicFOV = (bool)Mod.Settings[1].SavedValue; fovEffectMultiplier = (float)Mod.Settings[2].SavedValue; interpolationSpeed = (float)Mod.Settings[3].SavedValue; maxFOV = (float)Mod.Settings[4].SavedValue; doSpeedLines = (bool)Mod.Settings[5].SavedValue; speedLinesPowerMultiplier = (float)Mod.Settings[6].SavedValue; Color val = default(Color); speedLinesColor = Color.op_Implicit(ColorUtility.TryParseHtmlString((string)Mod.Settings[7].SavedValue, ref val) ? val : Color.white); if (((string)Mod.Settings[7].SavedValue).ToLower() == "rainbow") { isRainbow = true; } else { isRainbow = false; } includeUpwardSpeed = (bool)Mod.Settings[8].SavedValue; minimumSpeed = (float)Mod.Settings[9].SavedValue; airBias = (bool)Mod.Settings[10].SavedValue; resetEffects(); } public override void OnUpdate() { //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_021b: 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_0083: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: 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_005c: Unknown result type (might be due to invalid IL or missing references) if (!init || !referencesGot) { return; } float num = 0f; if (airBias && playerM.WasGrounded) { num = 6f; } try { Vector3 val; if (includeUpwardSpeed) { val = playerRB.velocity; speed = ((Vector3)(ref val)).magnitude; } else { val = new Vector3(playerRB.velocity.x, Mathf.Clamp(playerRB.velocity.y, float.MinValue, 0f) * 0.6f, playerRB.velocity.z); speed = ((Vector3)(ref val)).magnitude; } speed = Mathf.Clamp(speed - minimumSpeed - num, 0f, float.MaxValue); } catch { } try { baseFOV = recordingCameraRC.fovSlider.value; } catch { } if (doDynamicFOV) { try { float num2 = baseFOV + speed * fovEffectMultiplier; float fieldOfView = recordingCameraCAM.fieldOfView; float num3 = Mathf.SmoothDamp(fieldOfView, num2, ref fovVelocity, interpolationSpeed); recordingCameraCAM.fieldOfView = Mathf.Clamp(num3, float.MinValue, maxFOV); } catch { } } if (!doSpeedLines) { return; } if (isRainbow) { float num4 = Mathf.Lerp(2f / 3f, 5f, Mathf.InverseLerp(5f, 9f, speed)); rainbowHue += Time.deltaTime * num4; if (rainbowHue > 1f) { rainbowHue -= 1f; } speedLinesColor = Color.op_Implicit(Color.HSVToRGB(rainbowHue, 1f, 1f)); } try { updateSpeedLinesShader(); } catch { } } public override void OnSceneWasInitialized(int buildIndex, string sceneName) { scene = sceneName; if (scene == "Gym" && !init) { init = true; getReferences(); speedLinesOverlay = LoadAssetBundle("SpeedEffects.assetbundles.speedeffects", "SpeedLines"); Object.DontDestroyOnLoad((Object)(object)speedLinesOverlay); speedLinesMaterial = ((Graphic)((Component)speedLinesOverlay.transform.GetChild(0)).GetComponent<Image>()).material; speedLinesMaterial.renderQueue = 3000; } } public override void OnSceneWasUnloaded(int buildIndex, string sceneName) { referencesGot = false; } public void OnMapInitialized() { if (scene == "Gym") { MelonCoroutines.Start(listenForLandButtons()); } if (init) { getReferences(); } } private IEnumerator listenForLandButtons() { yield return (object)new WaitForSeconds(1f); try { if (hasFlatLand) { GameObject.Find("FlatLand/FlatLandButton/Button").GetComponent<InteractionButton>().onPressed.AddListener(UnityAction.op_Implicit((Action)delegate { MelonCoroutines.Start(toLandMap()); })); } } catch (Exception ex2) { ((MelonBase)this).LoggerInstance.Error((object)ex2); } try { if (hasVoidLand) { GameObject.Find("VoidLand/VoidLandButton/Button").GetComponent<InteractionButton>().onPressed.AddListener(UnityAction.op_Implicit((Action)delegate { MelonCoroutines.Start(toLandMap()); })); } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error((object)ex); } } private IEnumerator toLandMap() { yield return (object)new WaitForSeconds(1f); if (doSpeedLines) { speedLinesOverlay.active = true; } } private void getReferences() { recordingCameraGO = GameObject.Find("RecordingCamera"); recordingCameraCAM = recordingCameraGO.GetComponent<Camera>(); recordingCameraRC = recordingCameraGO.GetComponent<RecordingCamera>(); PlayerController controller = Singleton<PlayerManager>.Instance.localPlayer.Controller; playerRB = ((Component)((Component)controller).transform.GetChild(1)).GetComponent<Rigidbody>(); playerM = ((Component)controller).GetComponent<PlayerMovement>(); referencesGot = true; } private void updateSpeedLinesShader() { //IL_0042: 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) float num = Mathf.Clamp(speed, 0.15f, 100f); speedLinesMaterial.SetFloat("_MaskScale", 1f / (num * speedLinesPowerMultiplier)); speedLinesMaterial.SetColor("_Colour", Color.op_Implicit(speedLinesColor)); } private void resetEffects() { if (!doDynamicFOV) { recordingCameraCAM.fieldOfView = baseFOV; } if (!doSpeedLines) { speedLinesMaterial.SetFloat("_MaskScale", 10f); } } private GameObject? LoadAssetBundle(string bundleName, string objectName) { using Stream stream = ((MelonBase)this).MelonAssembly.Assembly.GetManifestResourceStream(bundleName); byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); Il2CppStructArray<byte> val = new Il2CppStructArray<byte>((long)array.Length); for (int i = 0; i < array.Length; i++) { ((Il2CppArrayBase<byte>)(object)val)[i] = array[i]; } Il2CppAssetBundle val2 = Il2CppAssetBundleManager.LoadFromMemory(val); return Object.Instantiate<GameObject>(val2.LoadAsset<GameObject>(objectName)); } } }