MoonstormSharedUtils

v2.6.0·Updated 2026-10-08

An API focused with the intention of working in an editor enviroment using ThunderKit, MSU is a modular API system designed for ease of use and simplicity.

Screenshots 7 screenshots

About this mod Author’s original text

Moonstorm Shared Utils - Content Loading and General Utility Framework for Large Content Mods.

MoonstormSharedUtils, otherwise known as MSU, is an API designed to work around the ThunderKit system for creating Content Mods.

Originally part of the API and Framework built for updating Starstorm2 to a ThunderKit setup for a better development experience, it has grown exponentially into it's own separate library so anyone with the desire to create large Content mods with thunderkit can use it.

Goals of the API

MSU strifes for the following goals regarding mod development and management.

  • Simple but powerful systems for managing and loading content for the game in an Asynchronous fashion.
  • A robust framework built upon modules that allows you to automate various parts of the modding workflow, such as equipment execution, monster and interactable spawning, and more.
  • Simplification of the ThunderKit workflow by providing a custom set of CompossableObjects for managing Manifests, Paths and Pipelines.
  • A High enphasis on utilizing the systems provided by the game over hooks whenever possible, such as default provided delegates, base item behaviours, and more.
  • Utilization of the Existing R2API Framework to power systems such as Director modifications.
  • Emphasis on working within the Editor instead of working on code for the creation of assets.

Key Features

The IContentPiece, IContentPieceProvider and Module Framework

While Code only mods create their Content (Prefabs, ScriptableObjects, etc) at Runtime and usually at Awake, this causes the issues known as "Forever Black Screen", where most of the mod's systems are initialized before the Loading Screen of the game starts. this gives the idea that the game is frozen and not responsive to oblivious users. And while this is true, managing the loading and interactions between custom made content from Assetbundles and the game's systems is difficult.

MSU solves this by the triad of the ContentPiece, the ContentPiece Provider, and the Module framework. This triad is utilized to allow mods to Load their assets Asynchronously during the loading screen, and have them working properly with the base game's systems.

IContentPiece

  • Represents some form of Content that a mod is adding
  • Each ContentPiece is tied to a specific Module which handles loading and the implementation of the Content.
  • ContentPieces have Availability systems, which the module uses to know what content to load and initialize.
  • A ContentPiece has an Asynchronous loading method which the module uses during initialization, which is used to Asynchronously load assets for your content.
  • Being an interface, the API provides further implementations:
  • `IContentPiece, which represents a Content that's tied to a specific UnityEngine.Object`.
  • MSU includes the following interfaces that implement `IContentPiece`
  • `IArtifactContentPiece, for ArtifactDefs`
  • `IEquipmentContentPiece for EquipmentDefs`
  • A sub-interface called `IEliteContentPiece manages EliteDefs` associated to a specific Equipment.
  • `IItemContentPiece for ItemDefs`.
  • A sub-interface called `IVoidItemContentPiece` manages the Item Corruption system added in Survivors of the Void.
  • `IItemTierContentPiecefor ItemTierDefs`
  • `ISceneContentPiece for SceneDefs`.
  • `IGameObjectContentPiece, which represents a Content that's tied to a specific type of UnityEngine.MonoBehaviour`
  • MSU includes the following interfaces that implement `IGameObjectContentPiece`
  • `ICharacterContentPiece for CharacterBodies`
  • The sub-interface called `IMonsterContentPiece` can be used for managing hostile monsters
  • The sub-interface called `ISurvivorContentPiece`can be used for managing new Survivors.
  • `IInteractableContentPiece for Interactables`.
  • `IVanillaSurvivorContentPiece`, which represents modifications for a Vanilla survivor.
  • `IContentPiece classes can also implement the IContentPackModifier`, which is used for directly interfacing with your mod's C

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:

RiskofThunder-R2API_ArtifactCodeRiskofThunder-R2API_StringSerializerExtensionsSmooth_Salad-ShaderSwapperRiskofThunder-R2API_ColorsRiskofThunder-R2API_DamageTypeRiskofThunder-R2API_StagesRiskofThunder-R2API_NetworkingRiskofThunder-R2API_Dot

File & checksum

Filename
MoonstormSharedUtils-2.6.0.zip
File size
506.4 KiB