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 RainbowGuard v3.1.1
Mods/RainbowGuard.dll
Decompiled a day agousing System; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using MelonLoader; using MelonLoader.Preferences; using MelonLoader.Utils; using Microsoft.CodeAnalysis; using RainbowGuard; using RumbleModdingAPI.RMAPI; using UIFramework; using UIFramework.UiExtensions; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(global::RainbowGuard.RainbowGuard), "RainbowGuard", "3.1.1", "ninjaguardian", "https://thunderstore.io/c/rumble/p/ninjaguardian/RainbowGuard")] [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")] [assembly: MelonColor(255, 0, 160, 230)] [assembly: MelonAuthorColor(255, 0, 160, 230)] [assembly: MelonPlatformDomain(/*Could not decode attribute arguments.*/)] [assembly: VerifyLoaderVersion("0.7.2", true)] [assembly: MelonOptionalDependencies(new string[] { "UIFramework" })] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("ninjaguardian")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright © 2026 ninjaguardian")] [assembly: AssemblyDescription("Changes the color of the guard effect")] [assembly: AssemblyFileVersion("3.1.1.0")] [assembly: AssemblyInformationalVersion("3.1.1")] [assembly: AssemblyProduct("RainbowGuard")] [assembly: AssemblyTitle("RainbowGuard")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/ninjaguardian/RainbowGuard")] [assembly: AssemblyVersion("3.1.1.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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 RainbowGuard { public static class BuildInfo { public const string ModName = "RainbowGuard"; public const string ModVersion = "3.1.1"; public const string MLVersion = "0.7.2"; public const string Author = "ninjaguardian"; public const string DownloadLink = "https://thunderstore.io/c/rumble/p/ninjaguardian/RainbowGuard"; public const string ConfigFile = "config.cfg"; } [Obsolete("RainbowGuard has been replaced by RainbowEffects")] public class RainbowGuard : MelonMod { private const float Phase120 = (float)Math.PI * 2f / 3f; private const float Phase240 = 4.1887903f; private static readonly string ConfigDir = Path.Combine(MelonEnvironment.UserDataDirectory, "RainbowGuard"); private static readonly string Config = Path.Combine(ConfigDir, "config.cfg"); private Effect? _mainEffect; private Effect? _particles; public override void OnLateInitializeMelon() { AssetBundle obj = AssetBundles.LoadAssetBundleFromStream((MelonMod)(object)this, "RainbowGuard.rainbowGuard"); Shader val = obj.LoadAsset<Shader>("guard.shader"); Shader val2 = obj.LoadAsset<Shader>("guard2.shader"); obj.Unload(false); ((Object)val).hideFlags = (HideFlags)61; ((Object)val2).hideFlags = (HideFlags)61; foreach (Material item in Resources.FindObjectsOfTypeAll<Material>()) { if (!((Object)(object)item == (Object)null)) { if (((Object)item).name == "Hidden/VFX/Guardstone VFX/System/Output Particle Shader Graph Quad - Unlit") { item.shader = val; } else if (((Object)item).name == "Hidden/VFX/Guardstone VFX/System (1)/Output Particle Unlit Quad") { item.shader = val2; } } } } [MethodImpl(MethodImplOptions.AggressiveOptimization)] public override void OnUpdate() { //IL_0087: 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) if (_mainEffect.Mode.Value == ColorMode.Rainbow) { float num = Time.time * _mainEffect.Speed.Value + _mainEffect.Offset.Value; _mainEffect.SetShader(new Vector4(Mathf.Sin(num) * 0.5f + 0.5f, Mathf.Sin(num + (float)Math.PI * 2f / 3f) * 0.5f + 0.5f, Mathf.Sin(num + 4.1887903f) * 0.5f + 0.5f, 0f)); } if (_particles.Mode.Value == ColorMode.Rainbow) { float num2 = Time.time * _particles.Speed.Value + _particles.Offset.Value; _particles.SetShader(new Vector4(Mathf.Sin(num2) * 0.5f + 0.5f, Mathf.Sin(num2 + (float)Math.PI * 2f / 3f) * 0.5f + 0.5f, Mathf.Sin(num2 + 4.1887903f) * 0.5f + 0.5f, 0f)); } } public override void OnInitializeMelon() { MelonLogger.Error("RainbowGuard has been replaced by RainbowEffects at https://thunderstore.io/c/rumble/p/ninjaguardian/RainbowEffects/"); bool num = (Effect.UIPresent = MelonTypeBase<MelonMod>.RegisteredMelons.Any((MelonMod m) => ((MelonBase)m).Info.Name == "UIFramework")); if (!Directory.Exists(ConfigDir)) { Directory.CreateDirectory(ConfigDir); } _mainEffect = new Effect("Main Effect", "rainbowGuard"); _particles = new Effect("Particles", "rainbowGuard2"); if (num) { RegisterUI(); } } public override void OnEarlyInitializeMelon() { MelonLogger.Error("RainbowGuard has been replaced by RainbowEffects at https://thunderstore.io/c/rumble/p/ninjaguardian/RainbowEffects/"); } [MethodImpl(MethodImplOptions.NoInlining)] private void RegisterUI() { UI.RegisterMelon((MelonBase)(object)this, (MelonPreferences_Category[])(object)new MelonPreferences_Category[2] { _mainEffect.Category, _particles.Category }); } internal static MelonPreferences_Category CreateCategory(string categoryID, string categoryName) { MelonPreferences_Category obj = MelonPreferences.CreateCategory("RainbowGuard_" + categoryID, categoryName); obj.SetFilePath(Config); return obj; } internal static MelonPreferences_Entry<T> CreateEntry<T>(MelonPreferences_Category category, string entryID, T defaultValue, string entryName, string description, ValueValidator? validator = null) { return category.CreateEntry<T>(category.Identifier + "_" + entryID, defaultValue, entryName, description, false, false, validator, (string)null); } } internal enum ColorMode { Rainbow, Static } internal class Effect { public static bool UIPresent; private readonly int _shaderID; internal readonly MelonPreferences_Category Category; internal readonly MelonPreferences_Entry<float> Speed; internal readonly MelonPreferences_Entry<float> Offset; internal readonly MelonPreferences_Entry<Vector3> Color; internal readonly MelonPreferences_Entry<ColorMode> Mode; internal Effect(string name, string property) { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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) _shaderID = Shader.PropertyToID(property); string text = name.ToLower(); Category = RainbowGuard.CreateCategory(name.Replace(" ", null), name); Speed = RainbowGuard.CreateEntry(Category, "Speed", 1f, "Speed", "Speed of the rainbow"); Offset = RainbowGuard.CreateEntry(Category, "Offset", 0f, "Offset", "Offset of the rainbow"); Color = RainbowGuard.CreateEntry<Vector3>(Category, "Color", new Vector3(1f, 0.20507877f, 0f), "Color", "The color of the " + text, (ValueValidator?)(object)new VectorRange(0f, 1f)); ((MelonEventBase<LemonAction<Vector3, Vector3>>)(object)Color.OnEntryValueChanged).Subscribe((LemonAction<Vector3, Vector3>)delegate(Vector3 _, Vector3 newColor) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) SetShader(Vector4.op_Implicit(newColor)); }, 0, false); Mode = RainbowGuard.CreateEntry(Category, "Mode", ColorMode.Rainbow, "Mode", "The color mode of the " + text, UIPresent ? Ui() : null); ((MelonEventBase<LemonAction<ColorMode, ColorMode>>)(object)Mode.OnEntryValueChanged).Subscribe((LemonAction<ColorMode, ColorMode>)delegate(ColorMode _, ColorMode newMode) { //IL_000b: 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) if (newMode == ColorMode.Static) { SetShader(Vector4.op_Implicit(Color.Value)); } }, 0, false); ModeToggled(Mode.Value); if (Mode.Value == ColorMode.Static) { SetShader(Vector4.op_Implicit(Color.Value)); } } [MethodImpl(MethodImplOptions.NoInlining)] private ValueValidator Ui() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown return (ValueValidator)new UserEditNotifier { OnUserEdit = ModeToggled }; } internal void SetShader(Vector4 v) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader.SetGlobalVector(_shaderID, v); } private void ModeToggled(object newValue) { if (newValue is ColorMode colorMode) { switch (colorMode) { case ColorMode.Rainbow: ((MelonPreferences_Entry)Speed).IsHidden = false; ((MelonPreferences_Entry)Offset).IsHidden = false; ((MelonPreferences_Entry)Color).IsHidden = true; return; case ColorMode.Static: ((MelonPreferences_Entry)Speed).IsHidden = true; ((MelonPreferences_Entry)Offset).IsHidden = true; ((MelonPreferences_Entry)Color).IsHidden = false; return; } } throw new ArgumentOutOfRangeException("newValue", newValue, "Value not present in enum ColorMode"); } } internal class VectorRange : ValueValidator { private readonly float _minValue; private readonly float _maxValue; public VectorRange(float minValue, float maxValue) { if (maxValue < minValue) { throw new ArgumentException($"Min value ({minValue}) must be less than or equal to max value ({maxValue})!"); } _minValue = minValue; _maxValue = maxValue; } public override bool IsValid(object value) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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_0053: 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_008f: 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 (!(value is Vector4 val)) { if (!(value is Vector3 val2)) { if (value is Vector2 val3) { return IsValid(val3.x) && IsValid(val3.y); } throw new ArgumentException($"Unsupported type: {value.GetType()}"); } return IsValid(val2.x) && IsValid(val2.y) && IsValid(val2.z); } return IsValid(val.x) && IsValid(val.y) && IsValid(val.z) && IsValid(val.w); } private bool IsValid(float value) { if (value >= _minValue) { return value <= _maxValue; } return false; } private float EnsureValid(float value) { if (!(value < _minValue)) { if (!(value > _maxValue)) { return value; } return _maxValue; } return _minValue; } public override object EnsureValid(object value) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_00b5: 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_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) if (!(value is Vector4 val)) { if (!(value is Vector3 val2)) { if (value is Vector2 val3) { val3.x = EnsureValid(val3.x); val3.y = EnsureValid(val3.y); return val3; } throw new ArgumentException($"Unsupported type: {value.GetType()}"); } val2.x = EnsureValid(val2.x); val2.y = EnsureValid(val2.y); val2.z = EnsureValid(val2.z); return val2; } val.x = EnsureValid(val.x); val.y = EnsureValid(val.y); val.z = EnsureValid(val.z); val.w = EnsureValid(val.w); return val; } } }