Overview
No code, more effects. Custom Effects is a library for mod authors: twelve new SL_Effect types and one SL_ItemExtension, each one usable straight from your XML.
Effects and extensions
Name — What it does
SL_UseSkill — Casts a skill for a character, as if from their quickslot
SL_LearnSkillHidden — Teaches a skill that never shows in the skill menu
SL_Banish — Takes a character out of the fight for a set time
SL_PlayVFXOnWeapon — Plays a weapon VFX on bows and off-hand weapons too
SL_PlayVFXOnChar — Anchors a VFX to the character it affects
SL_PlayVFXPulsed — Makes a VFX flicker at chosen moments
SL_PlayTimedSound — Plays a sound that ends on your schedule
SL_ReliableVisuals — Plays a status's VFX and sounds on every client in co-op
SL_RemoveStatusParentOwner — Removes a status from whoever fired or swung, not the one hit
SL_Blind — Makes a character's next blow miss entirely
SL_Stumble — Gives each step a chance to make a character stagger
SL_Fear — Makes enemies run from their target, can make players cower or flee
SL_ItemVFX — Gives any item a vanilla weapon's particles
SLUseSkill
Makes a character cast a skill they already know, either the one who triggered the effect or the one it hit, waiting until they are free to act.
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.
On a projectile or blast, SL_UseSkill fails part of the time in co-op. To make another player cast a skill from one, have the hit give them a short hidden status that carries it.
SLLearnSkillHidden
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. Skill-limit mods count those same display lists, so they do not see it either.
The hiding is not saved: 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.
SLBanish
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. If the character dies while banished, the banish ends early and it returns 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 banish rather than running a clock of its own.
Why you need this
Nothing in stock XML does this. 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.
SLPlayVFXOnWeapon
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 — Lets it work on skinned weapons such as bows. 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 such as 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, silently: it skips skinned weapons such as bows, and reads only the hand the prefab was made for. When it gives u