UnboundLib

v3.2.14·Updated 2025-01-13

This is a helpful utility for ROUNDS modders aimed at simplifying common tasks.

About this mod Author’s original text

Join Us!

For more mods, news, and support join us on discord here:

UnboundLib

This is a helpful utility for ROUNDS modders aimed at simplifying certain common tasks.

Usage

NetworkingManager

The NetworkingManager abstracts the default Photon networking capabilities away into an easy-to-use interface you can use for communication between clients.

Example usage:

private const string MessageEvent = "YourMod_MessageEvent";

NetworkingManager.RegisterEvent(MessageEvent, (data) =>

{

ModLoader.BuildInfoPopup("Test Event Message: " + (string)data[0]); // should print "Test Event Message: Hello World!"

});

// send event to other clients only

NetworkingManager.RaiseEventOthers(MessageEvent, "Hello World!");

// send event to other clients AND yourself

NetworkingManager.RaiseEvent(MessageEvent, "Hello World!");

CustomCard Framework

Create a class for your card, extend the CustomCard class, implement its methods, and then in your mod initialization register your card like so:

void Start()

{

CustomCard.BuildCard();

}

CustomMap Framework

First create a map in unity by using the package and export your scene to a AssetBundle. Then in your mod initialization register your map like so:

void Start()

{

LevelManager.RegisterLevels(TestAssetBundle);

}

Credits Framework

Registering credits for a mod is as simple as:

void Start()

{

Unbound.RegisterCredits(string modName, string credits, string linkText, string linkURL);

}

GameMode Framework

The GameMode framework provides a modding-friendly API for custom game modes, allowing mods to target them without having to know about their existence.

Custom game modes are defined in two layers: the actual game mode class that does all the heavy gameplay logic, and a handler class that provides an interface

between mods and the game mode.

Hooks

The framework offers a flexible hook system. With hooks, mods can trigger actions at specific points of time as a game is running, without needing to know

anything about the specific game mode or its implementation.

Triggering hooks

Game modes can trigger async hooks whenever they wish:

private IEnumerator RoundStart()

{

// Hook keys are case-insensitive

yield return GameModeManager.TriggerHook("RoundStart");

// A healthy set of predefined keys is provided to make hooking on to them easier.

// Predefined keys should be used in favour of custom ones when possible.

yield return GameModeManager.TriggerHook(GameModeHooks.HookRoundStart);

}

Registering hooks

Mods can register hook listeners wherever they wish:

private void Init()

{

// Hooks are called with the game mode that triggered the hook, which is always the currently active game mode

GameModeManager.AddHook(GameModeHooks.HookRoundStart, this.OnRoundStart);

}

private IEnumerator OnRoundStart(IGameModeHandler gm)

{

// Triggers are IEnumerators so they support yields

yield return new WaitForSeconds(2f);

UnityEngine.Debug.Log(gm.Name);

/* Since triggers are IEnumerators, they must be executed within a coroutine. This means triggers are guaranteed to

  • be able to disrupt the execution of the current game mode.

*/

gm.GameMode.StopAllCoroutines();

}

The existing game modes in ROUNDS, namely Arms Race and Sandbox, have also been patched to trigger hooks.

Settings

The framework also adds a setting system to help mods change common game mode settings easily. Settings provide an easy-to-use method for mods to change gameplay,

but they place a lot of responsibility onto game modes to provide sufficient settings.

Using settings in a game mode

private void CheckPoints()

{

if (p1Points >= (int)GameModeManager.CurrentHandler.Settings["pointsToWinRound"])

{

WinRound();

}

}

Changing settings (in a mod)

private void Init()

{

GameModeManager.AddHook(GameModeHooks.HookInitEnd, this.OnInitEnd);

}

private IEnumerator OnInitEnd(GameModeHandler gm)

{

gm.ChangeSetting("pointsToWinRound", 10);

}

See /UnboundLib/GameModes for implementation details and example GameModeHandlers.

Install & use Install: BepInEx plugin

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.

Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.

Dependencies

Install these first, or the mod will not work:

BepInEx-BepInExPack_ROUNDSwillis81808-MMHook

File & checksum

Filename
UnboundLib-3.2.14.zip
File size
1.7 MiB
SHA-256
0c1f87cfde10a67bfb2b802ea4ae222f9bb98adfc20fd5d689d847c4c45d383f
Stored at
2026-10-06 19:24