Body Model Additions API

v2.2.0·Updated 2025-11-19

Adds a system for developers to load custom objects onto characters in game and in lobby. Model additions can require selected skins, skills, skins and skills or custom condition.

About this mod Author’s original text

How to use

Create a new Scriptable Object "ModelPartDef". You need to input a body name and an object you want to add to the body. You can input bone name of the Child Locator or find string to place object there, skin and skill required for object to be spawned, existing ModelPart to override it, delegate to run after model part instantiating, delegate for custom condition. You can subscribe to "beforeApplyingEvent" event that invokes before applying model parts.

After you created yout model part def run "Register" method or add it to "modelParsDefs" list

This can also add new skinned objects that deform with the main armature if you change bones to match main armature using a delegate. (No example yet sorry!)

CodeAfterApplying delegate gives you your object as "modelObject", ChildLocator of the body (make sure to null check it before using it), CharacterModel of the body and ActiveBodyParts component.

If you are gonna add components in this delegate please add them to the components list in the ActivePartsComponent component from the given delegate.

CustomCondition gives you CharacterModel of your body.

ModelPartDef:

ModelPartDef modelPartDef = ScriptableObject.CreateInstance()

modelPartDef.bodyName = ""; //Body name of the charater you want to add model part to

modelPartDef.gameObject = null; //Prefab of your model part

modelPartDef.inputString = ""; // string to find where to place your model part. If it's "", then it will be placed alongside your body model

modelPartDef.trueToChildLocatorFalseToFindString = true; // If "trueToChildLocatorFalseToFindString" is true: you input Child Locator transform name in inputString. if false: you input transform find string in inputString

modelPartDef.skinDef = null; // Skin condition. Checks for a selected skin if the value is not null

modelPartDef.position = Vector.zero; //Place instantiated gameObjected

modelPartDef.rotation = Vector.zero; //Rotate instantiated gameObjected

modelPartDef.scale = Vector.one; //Scale instantiated gameObjected

modelPartDef.skinName = ""; // String skin condition by its name if skinDef condition is null.

modelPartDef.skillDef = null; // Skill condition. Checks for a selected skill if the value is not null

modelPartDef.modelPartOverride = null; // Prevents other model part from from applying

modelPartDef.CodeAfterApplying codeAfterApplying = null; // Void delegate to run after model part instantiation

modelPartDef.CustomCondition customCondition = null; // Boolean delegate for a custom condition if it's not null

modelPartDef.ModelPartLocation modelPartLocation = ModelPartLocation.All; // Pick where model part appears: Lobby, Game or All

After you created your ModelPartDef run "Register" method:

modelPartDef.Register();

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-HookGenPatcher

File & checksum

Filename
Body_Model_Additions_API-2.2.0.zip
File size
58.4 KiB