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.

RumbleModdingAPI
API to Help Modders Get Started and to remove the necessity of GameObject.Find
Date uploaded | 2 weeks ago |
Version | 4.0.0 |
Download link | UlvakSkillz-RumbleModdingAPI-4.0.0.zip |
Downloads | 94 |
Dependency string | UlvakSkillz-RumbleModdingAPI-4.0.0 |
This mod requires the following mods to function

LavaGang-MelonLoader
The World's First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono
Preferred version: 0.6.6README
I created this API to Help others get into the Modding Scene for Rumble.
Video Guide
- https://www.youtube.com/watch?v=t6LmWf-wDtg (outdated)
How to Include the API in your Project:
- Install MelonLoader Version 0.6.6+
- Run Game (This initialized MelonLoader) (Close at T-Pose)
- Put RumbleModdingAPI.dll in your Mods Folder
- Add RumbleModdingAPI.dll as a Reference in your Project.
- Add "using RumbleModdingAPI;" at the top of your code / with the other "using"s
- Call Methods Supplied By Typing "Calls." followed by the Method Name (Visual Studios Supplies the List)
- Calls.IsInitialized() - Use when messing with things in the loader to make sure API is ready
- Calls.Scene.[Methods] - Used to see if scene changed
- Calls.Managers.[Methods] - Used to access Managers
- Calls.Gym.[Methods] - Used to access Gym Specific Objects
- Calls.Park.[Methods] - Used to access Park Specific Objects
- Calls.Pools.Structures.Methods - Used to access Structure Pools
- Calls.Pools.ShiftStones.Methods - Used to access ShiftStone Pools
- Calls.Players.Methods - Used for Quick access to different Players
- Calls.Create.[Methods] - Used to create new Text/Buttons
- Calls.ControllerMap.(Left/Right)Controller.[Methods] - Used to read Controller Inputs
- Calls.onMapInitialized - System.Action to use as a listener to Auto-Run a Method when map is done Loading
- Calls.onPlayerSpawned - System.Action to use as a listener to Auto-Run a Method when a Player Spawns in
- Calls.onMatchStarted - System.Action to use as a listener to Auto-Run a Method when a Matchmaking Match Starts
- Calls.onMatchEnded - System.Action to use as a listener to Auto-Run a Method when a Matchmaking Match Ends
- Calls.onRoundStarted - System.Action to use as a listener to Auto-Run a Method when a Matchmaking Round Starts
- Calls.onRoundEnded - System.Action to use as a listener to Auto-Run a Method when a Matchmaking Round Ends
- Calls.onLocalPlayerHealthChanged - System.Action to use as a listener to Auto-Run a Method when a Local Player's Health Changes
- Calls.onRemotePlayerHealthChanged - System.Action to use as a listener to Auto-Run a Method when a Remote Player's Health Changes
- Calls.onMyModsGathered - System.Action to use as a listener to Auto-Run a Method when your Mods are Gathered in a List.
In-Depth How to Setup a Project to Use the API:
-
Drag the Mods Folder into the RUMBLE Folder
-
Click Create New Project
-
Select Class Library (.NET Framework)
-
Name Project
-
Add References (Browse to "RUMBLE\MelonLoader\Managed" for Rumble References)
- Add MelonLoader.dll (MelonLoader Folder)
- Add RUMBLE.Runtime.dll (Managed Folder)
- Add RumbleModdingAPI.dll (Mods Folder)
-
Open Properties Dropdown and Open (double click) "AssemblyInfo.cs"
-
In AssemblyInfo.cs, Add Usings at the Top:
- using MelonLoader;
- using YourModsName;
- After the Usings, Put:
- [assembly: MelonInfo(typeof(Class1), "YourModsName", "1.0.0", "YourName")]
- [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")]
-
Open Class File (default class name is "Class1")
-
Add usings at the Top:
- using MelonLoader;
- using RumbleModdingAPI;
-
Add " : MelonMod" after the Class Name
-
Inside the Class Add a Function:
- public override void OnSceneWasLoaded(int buildIndex, string sceneName) {}
- (Optional Test) Add Reference to Add this Line inside OnSceneWasLoaded: (On Gym Load, it'll output the player's name)
- if (sceneName == "Gym") { MelonLogger.Msg(Calls.Managers.GetPlayerManager().localPlayer.Data.GeneralData.PublicUsername); }
-
Build Project
-
Open File Explorer to "C:\Users\YOURUSER\source\repos\YOURPROJECT\YOURPROJECT\obj\Debug"
- Copy YOURPROJECT.dll into the Rumble Mods Folder (RUMBLE/Mods)
-
Open Rumble and Load into the Gym. Then Look at the Console (Black Window)
-
Subscribe to UlvakSkillz (and Like this Mod)
Calls:
- Able to be Called Anytime:
- Calls.LoadAssetBundleGameObjectFromFile(string filePath, string assetName)
- .LoadAssetBundleFromFile(string filePath)
- .LoadAssetFromFile<T>(string filePath, string assetName)
- .LoadAssetBundleFromStream(string modName, string modAuthor, string assetPath)
- .LoadAssetBundleFromStream(MelonMod instance, string assetPath)
- .LoadAssetFromStream<T>(MelonMod instance, string path, string assetName)
- .LoadAssetFromStream<T>(string modName, string modAuthor, string path, string assetName)
- Calls.GameObjects.DDOL.*
- Calls.IsInitialized()
- Calls.IsMapInitialized()
- Calls.Scene
- .WhenSceneChanged()
- .GetSceneName()
- Calls.Managers
- .GetGameManager()
- .GetNetworkManager()
- .GetPlayerManager()
- .GetInputManager()
- .GetSceneManager()
- .GetNotificationManager()
- .GetStackManager()
- .GetQualityManager()
- .GetSocialHandler()
- .GetSlabManager()
- .GetRecordingCamera()
- .GetCombatManager()
- .GetBHapticsManager()
- .GetPhotonHandler()
- .GetAudioManager()
- .GetSteamAudioManager()
- .GetUIGameObject()
- .GetPoolManager()
- Calls.Pools.Structures
- .GetPoolDisc()
- .GetPoolPillar()
- .GetPoolBall()
- .GetPoolCube()
- .GetPoolWall()
- .GetPoolSmallRock()
- .GetPoolLargeRock()
- .GetPoolBoulderBall()
- Calls.Pools.ShiftStones
- .GetPoolVolatileStone()
- .GetPoolChargeStone()
- .GetPoolSurgeStone()
- .GetPoolFlowStone()
- .GetPoolGuardStone()
- .GetPoolStubbornStone()
- .GetPoolAdamantStone()
- .GetPoolVigorStone()
- Calls.Players
- .IsHost()
- .GetAllPlayers()
- .GetLocalPlayer()
- .GetLocalLCKTablet()
- .GetPlayerController()
- .GetEnemyPlayers()
- .GetClosestPlayer(UnityEngine.Vector3 pos, bool ignoreLocalController)
- .GetClosestPlayer(UnityEngine.Vector3 pos, PlayerController ignoreController)
- .GetPlayerByControllerType(RUMBLE.Players.ControllerType controllerType)
- .GetPlayerByActorNo(int actorNumber)
- .GetPlayersInActorNoOrder()
- .GetLocalHealthbarGameObject()
- Calls.Create (Callable after first Gym Load)
- .NewText()
- .NewText(string text, float textSize, Color textColor, UnityEngine.Vector3 textPosition, Quaternion textRotation)
- .NewButton()
- .NewButton(UnityEngine.Vector3 buttonPosition, Quaternion buttonRotation)
- .NewButton(Action action)
- .NewButton(UnityEngine.Vector3 buttonPosition, Quaternion buttonRotation, Action action)
- Calls.ControllerMap
- .LeftController.Get(Trigger, Grip, Primary, Secondary, Joystick, JoystickClick)
- .RightController.Get(Trigger, Grip, Primary, Secondary, Joystick, JoystickClick)
- Able to be Called in the Gym:
- Calls.GameObjects.Gym.*
- Calls.Gym
- .GetGymMailTube()
- .GetGymMatchConsole()
- .GetGymRegionSelectorGameObject()
- .GetGymBeltRack()
- .GetGymFriendBoard()
- .GetParkBoardBasicGymVariant()
- .GetGymParkBoardGymVariant()
- .GetGymHoward()
- .GetGymPoseGhostHandler()
- .GetGymDailyLeaderboard()
- .GetGymRankStatusSlabGameObject()
- .GetGymCommunitySlabGameObject()
- .GetGymShiftstoneQuickswapper()
- .GetGymShiftstoneCabinet()
- .GetGymGondolaGameObject()
- .GetGymRanksGameObject()
- .GetGymSpawnPointHandler()
- .GetGymMatchmakingHandler()
- .GetGymRewardHandler()
- Able to be Called in the Park:
- Calls.GameObjects.Park.*
- Calls.Park
- .GetParkSpawnPointHandler()
- .GetParkInstance()
- .GetParkFriendBoard()
- .GetParkBoardBasicParkVariant()
- .GetParkBoardParkVariant()
- .GetParkShiftstoneQuickswapper()
- Able to be Called in Matchmaking (findMyOwnMods anytime Loader+):
- Calls.Mods
- .getMyModString()
- .getOpponentModString()
- .getMyMods()
- .getOpponentMods()
- .findOwnMod(string modName, string ModVersion, bool matchVersion = true)
- .doesOpponentHaveMod(string modName, string modVersion, bool matchVersion = true)
-Calls.Matchmaking
- .GetMatchmakingTypeAsString()
- .GetMatchmakingTypeAsInt()
- Able to be Called in The Ring:
- Calls.GameObjects.Map0.*
- Able to be Called in The Pit:
- Calls.GameObjects.Map1.*
- Actions to Listen to:
- Calls.onMapInitialized (used shortly after scene change when api has scene items)
- Calls.onModStringRecieved (used right after mod list is recieved to check opponents mods)
RPCs
- 1: in order to use RPCs, create a new Component class and inherit from MonoBehaviourPun instead of MonoBehaviour
- 2: inside of your new class create a method and give it the [PunRPC] attribute (RumbleModdingAPI.Calls.PhotonRPCs.PunRPC),
- 3: create a new gameobject or take an existing object,
- 4: give that object a PhotonView, store it in a variable and assign a unique ViewID to it (must be consistent across all players),
- 5: give that object your new components with the RPC,
- 6: use photonView.RPC("your method name here") to send the RPC (for a better explanation go to the photon docs)
RaiseEvent
setup:
1: on your main mod, inherit from RumbleMod instead of MelonMod (RumbleModdingAPI.Calls.Utilities.RumbleMod) 2: the first time you load into the gym call RegisterEvents(), (RumbleMod.RegisterEvents() ) 3: override the OnEvent(List<Il2CppSystem.Object> data) function (RumbleMod.OnEvent(List<Il2CppSystem.Object> data) ) 4: add whatever logic you need to your OnEvent, (if you need to get data such as a Vector3 or Quaternion use .Unbox<Vector3>() or .Unbox<Quaternion>())
- note: if you need to send integers, use a 'short' or 'int16' as normal ints dont work properly
actually raising an event
1: create a new RaiseEventOptions (Il2CppPhoton.Realtime.RaiseEventOptions) and set set the Receivers variable 2: create your data (most variables like Vector3 and Quaternions have a .BoxToIl2CppObject() method to convert them to an Il2CppSystem.Object, the others can be simply cast to it) 3: Call RaiseEvent(List<Il2CppSystem.Object> data, RaiseEventOptions raiseEventOptions, SendOptions sendOptions) (from RumbleMod)
SendOptions.SendReliable will make sure every player actually receives the event but might take a bit longer SendOptions.SendUnreliable does not guarantee that the event will be received, use this for things like position values where losing out on it once every so often isn't too bad
ControllerInputPoller
1: right and left controller are defined by RumbleModdingAPI.Calls.Utilities.ControllerInputPoller.RightController and LeftController respectively 2: each controller contains 5 buttons and the joystick position (Vector2)
the buttons are: primary, secondary, trigger, grip and stick click 3: each button contains 4 variables (float) value: how much pressed in the button is, 0-1 for trigger and grip (bool) pressed: if the button is currently held down (bool) WasPressedThisFrame: if the button was pressed in this frame (bool) WasReleasedThisFrame: if the button was released this frame
- tip: you can add something like "using RC = RumbleModdingLibrary.Utilities.ControllerInputPoller.RightController;" to create a shortcut to the right controller
PlayerController.HasMod()
checks if a player has a mod installed, can be used in matches or the park 1: to use, get a player's PlayerController component, you can do .HasMod()
- PlayerController.HasMod(string modName): checks if the player has a mod regardless of the version
- PlayerController.HasMod(string modName, string modVersion): checks if the player has a mod with the exact version
- PlayerController.HasMod(string modName, string modVersion, bool checkPreviousVersions): checks if the player has a mod with a version equal or lower than the modVersion that was input
Help And Other Resources
Get help and find other resources in the Modding Discord: https://discord.gg/fsbcnZgzfa
CHANGELOG
Version 4.0.2
- Changed when AddModsToLocalProps Method is ran to speed up setting CustomProperties
Version 4.0.1
- Fixed an error that was happening with AddModsToLocalProps Method
Version 4.0.0
- Merged RumbleModdingLibrary (https://github.com/Elmishhh/RumbleModdingLibrary), simple instructions in the ReadMe
- Added the mod list into the player's custom props, this is used to check if other players have a mod in parks
- Added a function in the PlayerController class to check if a player has a mod, simple instructions in the ReadMe
Version 3.7.5
- Fixed Tail Remaining in Scene if I left (FixedCode that I Felt Dumb for Missing)
Version 3.7.4
- Changed API Item Names to not have (Clone)
- Fixed Tail Remaining in Scene if I left
Version 3.7.3
- Changed API Item
- Added Custom Cosmetic Storage to API Items (Forgot Tail)
Version 3.7.2
- Changed Method to remove unused Variable (loading asset bundles)
- Added API Item
Version 3.7.1
- Matched dll Versions
Version 3.7.0
- Added GameObject Calls.Players.GetLocalLCKTablet()
Version 3.6.1
- Forgot to have Recursive Program Bail from Children of Calls.GameObjects.Gym.SCENE.Grass instead of the parent leaving it out
Version 3.6.0
- Created Recurrsive Program to update the Calls.GameObjects lists every update. Some Names have Changed slightly.
Version 3.5.1
- Fixed in-Match Actions not Triggering Properly
Version 3.5.0
- Added Asset Bundle Loading (Calls. -> GameObject LoadAssetBundleGameObjectFromFile(string filePath, string assetName) | AssetBundle LoadAssetBundleFromFile(string filePath) | LoadAssetFromFile<T>(string filePath, string assetName) | LoadAssetBundleFromStream(string modName, string modAuthor, string assetPath, string assetName) | LoadAssetBundleFromStream(MelonMod instance, string assetPath, string assetName) | LoadAssetFromStream<T>(MelonMod instance, string path, string assetName) | LoadAssetFromStream<T>(string modName, string modAuthor, string path, string assetName))
- Readded Personal Items
Version 3.4.2
- Removed Left over Log
- Fixed Tutorials Combat Carvings Change
- Fixed Move Learning Change
Version 3.4.1
- Fixed Matchmaker Differences
- Fixed onMapInit not Triggering
- Fixed Broken Text/Button Creation
Version 3.4.0
- Updated to Game Version 0.4.2
Version 3.3.7
- Changed RPC Codes to Match Dev RPC# Rules
Version 3.3.6
- Fixed Error that Showed up from Title Fix
Version 3.3.5
- Special Title Fix
- Special Item Dressing Room Fix
Version 3.3.4
- Actually Fixed onMatchEnded getting triggered leaving the Park with Someone there already
- Fixed CloneBending Causing API Error (at least for me)
Version 3.3.3
- Fixed onMatchEnded getting triggered entering the Park with Someone there already
Version 3.3.2
- Fixed onMatchStarted and onRoundStarted getting triggered entering the Park with Someone there already
Version 3.3.1
- Added some GameObjects I forgot to include
- Added Calls.Matchmaking.GetMatchmakingTypeAsString() (Callable in Match anytime)
- Added Calls.Matchmaking.GetMatchmakingTypeAsInt() (Callable in Match anytime)
Version 3.3.0
- APARENTLY I Never actually updated past 3.2.8 as I never updated the Dll in the ZIP -_-
Version 3.2.10
- Added onMyModsGathered Action
- Added findOwnMod(string modName, string ModVersion, bool matchVersion = true)
Version 3.2.9
- Fixed a Special thing not showing up.
Version 3.2.8
- Forgot what I fixed.
Version 3.2.7
- Fixed 2nd+ Matches not triggering actions
Version 3.2.6
- Added Actions onPlayerSpawned, onMatchStarted, onMatchEnded, onRoundStarted, onRoundEnded, onLocalPlayerHealthChanged, and onRemotePlayerHealthChanged.
Version 3.2.5
- Fixed Missed Shiftstone Cabinet GameObjects
Version 3.2.4
- Actually Fixed Some Objects Apprearing in 1 Eye
Version 3.2.3
- Fixed Some Objects Apprearing in 1 Eye
Version 3.2.2
- Fixed More Gym Object Ordering
Version 3.2.1
- Forgot Dressing Room Object
Version 3.2.0
- Updated to Game Version 0.4
Version 3.1.3
- Fixed 3.1.2 error :/
Version 3.1.2
- Fixed getLocalHealthBarGameObject giving Host's HealthBar
Version 3.1.1
- Fixed doesOpponentHaveMod Function
Version 3.1.0
- Added Opponent Mod List Grabbing
- Added Calls.Mods.getMyModString()
- Added Calls.Mods.getOpponentModString()
- Added Calls.Mods.getMyMods()
- Added Calls.Mods.getOpponentMods()
- Added Calls.Mods.doesOpponentHaveMod(string modName, string modVersion, bool matchVersion)
- Added Action onModStringRecieved (this is where you add a listener to check matching mods)
Version 3.0.6
- Fixed WorldTurotial/CombatCarving Returns
Version 3.0.5
- (Actually) (ACTUALLY MOVED DLL THIS TIME) Updated to MelonLoader v0.6.2+
Version 3.0.4
- (Actually) Updated to MelonLoader v0.6.2+
Version 3.0.3
- Updated to MelonLoader v0.6.2+
Version 3.0.2
- Fixed ReadMe
- Made MapInitialized Invoke after getting Health
Version 3.0.1
- Log Statements Get their ModName again
Version 3.0.0
- Updated to MelonLoader 0.6.2
Version 2.2.3
- Fixed Calls.GameObjects.Map1.Map1Production.MainStaticGroup calls pointing to wrong spot
- Added Mod Color
Version 2.2.2
- Removed left over Log Message
Version 2.2.1
- Fixed Changelog Formatting
- Changed System.Action isMapInitialized to static System.Action onMapInitialized
Version 2.2.0
- Created Changelog
- Added "Calls.Create" Class with "NewButton" and "NewText" Methods
- Added "System.Action isMapInitialized" so others can add a listener to do something on every scene change after it is done initializing each scene change.
- Added Calls.ControllerMap.(Left/Right)Controller.Get(Trigger, Grip, Primary, Secondary, Joystick, JoystickClick)
- Changed Managers away from GameObject.Find to ManagerType.instance
Version 2.1.4
- Fixed File Pathing to Structure Pools
Version 2.1.3
- Fixed File Pathing to Both Match Slabs in Both Maps
Version 2.1.2
- Added Calls.IsMapInitialized()
- Actually Fixed IsHost()
Version 2.1.1
- Fixed IsHost() Always Returning True (except in Park)
- Removed Unused GameObject.Find() that Eluded Deletion
Version 2.1.0
- Replaced Calls.Scene.SceneChangeDone with Calls.Scene.WhenSceneChanged
- Added "Calls.GameObjects" and Child Calls to get almost any GameObject
Version 2.0.0
- Updated to no longer create an instance of the API for every mod that uses it but instead works as a Data Server.
- Moved Methods into Different Call Paths to Help Organization
- Added Method Calls.IsHost
- Players in Actor Number Order
Help And Other Resources
Get help and find other resources in the Modding Discord: https://discord.gg/fsbcnZgzfa