Custom Effects

v1.2.0·Updated 2026-10-08

A modder's tool: adds a new library of custom SideLoader effects for XML mods.

About this mod Author’s original text

Overview

A standalone SideLoader library for mod authors. It adds SL_UseSkill, SL_LearnSkillHidden, SL_Banish, SL_PlayVFXOnWeapon, SL_PlayVFXOnChar, SL_PlayVFXPulsed, SL_PlayTimedSound and SL_ReliableVisuals you can use from XML.

SL_UseSkill

Makes a character cast a skill they already know.

0

OwnerSync

None

8100102

Owner

3

| Field | Meaning |

|---|---|

| SkillID | Item ID of the skill. The target must already know it |

| Target | Owner (the caster) or AffectedCharacter |

| MaxWait | Seconds to wait for the character to be free before giving up |

It goes through Item.TryQuickSlotUse() — the same path as pressing a quickslot key — so the game

handles requirements, cooldown, costs, animation and networking.

SL_LearnSkillHidden

Teaches a skill permanently without it appearing in the skill menu. For skills your mod triggers

itself rather than ones the player casts.

0

OwnerSync

None

-88002

The skill is genuinely learned, castable and networked — it simply never shows in the menu.

It survives saves and reloads.

Why you need this.

SL_UseSkill cannot cast a skill the character has not learned — Item.TryQuickSlotUse refuses one

outright. Without a way to teach invisibly, a mod that fires its own skill must either put it in the

player's menu or not work at all.

The learning is vanilla's TryUnlockSkill. Only the display lists are patched; the authoritative

knowledge is left alone. So the skill is genuinely learned, castable and networked — it simply is not

listed, and skill-limit mods, which count those same display lists, do not see it.

Nothing is persisted: the display lists are rebuilt from scratch every session, which is why

uninstalling this library just makes the skill visible again rather than corrupting a save.

SL_Banish

Sends a character beyond the veil (inert, untouchable, untargetable and unseen) for a duration, then

returns it exactly as it was.

0

MasterSync

None

10

Use MasterSync on enemies. Ends early if the character dies, restoring it as a lootable corpse.

A banished character is silent, and cannot start an attack while it is away. An attack it had already

begun is not cancelled — it is held exactly as it was and resolves normally when the banish ends.

Damage already under way still lands: DoTs applied before the banish keep ticking, and

a banished creature can die from them. What it cannot take is a fresh hit — its hitboxes are gone.

Loading a save mid-banish releases the creature immediately rather than starting the duration over,

and in co-op a client that joins while a banish is running follows the host's rather than running a

clock of its own.

Why you need this.

Vanilla has no equivalent. SL_Stun is cancelled by almost any state change, and SL_Petrify

makes the target count as dead and revivable. Neither gives you a timed removal from the fight

that returns the character untouched.

There are no toggles: Duration is the only field.

SL_PlayVFXOnWeapon

SL_PlayVFX, but able to land on weapons the vanilla hook silently refuses.

0

OwnerSync

None

VFXRunicBlade

false

This

false

true

Keep

| Field | Meaning |

|---|---|

| VFXPrefab | Same list as SL_PlayVFX |

| AllowSkinnedMesh | Let the emitters find a SkinnedMeshRenderer. Default true |

| Slot | Keep (the prefab's own value), MainHand or OffHand |

Everything else behaves exactly as SL_PlayVFX.

Why you need this.

A weapon VFX like VFXRunicBlade has no position of its own. Its particle systems each carry a

VFXParticlesOnWeapon, which does not follow the hand — it takes the weapon's mesh and makes it the

particle emission shape.

Two things make it give up, and both are silent. When it gives up, the particle system keeps

whatever shape the prefab was authored with and the effect still plays — just in the wrong place

and the wrong form, with nothing logged. That fallback looks exactly like a positioning bug, which

it is not: no Position, Rotation, ParentMode or Delay can affect it, because position was

never the mechanism.

This ef

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_Outwardsinai-dev-SideLoader

File & checksum

Filename
Custom_Effects-1.2.0.zip
File size
59.7 KiB