Actor Slots

Actor slots display characters in VN-style scenes with positioning, animations, and transitions.


How It Works

StepWhat happens
1Define slot templates in Characters > Actor Slots
2Use {actor} action to place characters in slots
3Characters render with enter animations
4Idle animations loop while displayed
5Exit animations play on removal

Features

Actor slots support:

FeatureDescription
PositioningPlace anywhere using x/y percentages, layer with z-index
TransformsScale, rotate, flip (mirror), adjust opacity and blur
Enter transitionsAnimated appearance (fade, slide, zoom, bounce, etc.)
Exit transitionsAnimated removal with same transition options
Idle animationsLooping animations while displayed (float, sway, pulse, etc.)
One-shot animationsPlay once and return to rest (lunge, recoil, hop, flash, etc.)
Filter effectsBrightness, contrast, saturation, sepia, hue rotation
AnchorsControl rotation pivot point

Adding/Removing Actors

Using Actions

ActionDescription
{actor: "my_character->my_slot"}Add character to slot
{actor: "my_character->my_slot(x=30, scale=1.2)"}Add with property overrides
{actor: "alice->left, bob->right"}Add multiple actors
{actor: "!my_character"}Remove character (with exit animation)
{actor: "!my_character(exit=fade)"}Remove with custom exit
{actor: "my_character(alpha=0.5)"}Update existing actor properties
{actor: false}Clear all actors

Example - Two characters talking:

{actor: "alice->left(enter=fadeSlideRight), bob->right(enter=fadeSlideLeft)"}

Example - Character leaves:

{actor: "!alice"}

Example - Move character to different slot:

{actor: "alice->center"}

If a character is already in the scene, using my_character->other_slot moves them smoothly to the new position.


Slot Templates

Create reusable slot positions in Characters > Actor Slots.

Common slot setup:

Slot IDxyDescription
left2050Left side of screen
center5050Center
right8050Right side of screen

Templates define default values. Inline properties override template values.


Transitions

Enter Transitions

CategoryOptions
Fadefade, dissolve, blurIn
SlideslideUp, slideDown, slideLeft, slideRight
Move InmoveInTop, moveInBottom, moveInLeft, moveInRight
Fade SlidefadeSlideUp, fadeSlideDown, fadeSlideLeft, fadeSlideRight
ZoomzoomIn, zoomOut, grow, shrink
Rotaterotate, rotateIn, rotateOut
Flipflip, flipVertical
Bouncebounce, elastic, pop

Exit Transitions

Same types available with directional variants (e.g., slideOutLeft, fadeSlideDown).

Easing Options

linear, power1, power2, power3, power4, back, elastic, bounce, circ, expo, sine


Idle Animations

Continuous looping animations while the character is displayed.

CategoryOptions
Movementfloat, bounce, hop, pan, shake, shimmy
Rotationsway, rock, rotate, nod, lean, wiggle
Scalepulse, breathe
Visualblink, glow, jitter, glitch
Combinedwave
Poseslumped — sinks and sags, then breathes heavily; stays until the idle changes

Switching idles eases through the rest pose instead of snapping, so a slumped actor sinks down and rises back up.

Example - Floating character:

{actor: "ghost->center(idle=float, idle_intensity=0.8)"}

A character's own idle

Give a character the idle trait and it plays that loop wherever it is staged – set float once on a bat, a ghost or a winged girl and every staging line lifts it, with no idle= on the line:

{actor: "bat1->pos6"}            // floats: its idle trait is float
{actor: "bat1->pos6(idle=none)"} // stands still this time
SourceWins over
The staging line's idle (none included)everything
The slot template's idle (anything but inherit)the trait
The idle the actor already has, kept by inherit when it movesthe trait
The idle traitnothing – it fills in when the others are empty

So a cancel sticks: idle=none on one line stays through later moves that set no idle. The trait's loop varies its length a little per actor, so several of them don't bob in step. Battle plugins may read the same trait – rpg_battler uses it for a battle slot that has no battle_idle.


One-Shot Animations

Play once, then the actor returns to rest; the idle loop keeps running underneath. One-shots are events, not state: they are never saved, and loading a save never replays them.

AnimationMotion
lungeDarts toward the stage center and back — attacks, grabs
recoilKnocked back away from the center, then settles — hits, shoves
hopOne quick jump — surprise, glee
shakeShort sideways tremor — anger, pain, struggling
shiverSmall fast trembling — fear, cold
nodDips down and back — agreement
bounceSquash and stretch — playful emphasis
flashQuick red wash on this actor only — taking a hit

lunge and recoil read the actor's side of the stage, so the same word points the right way on either side. intensity (default 1) and duration (seconds) tune any of them.

{actor: "chimera->right(anim=lunge)"}               // stage and lunge once she has entered
{actor: "chimera(anim=lunge)"}                      // an actor already on stage
{animate: "chimera lunge, mc recoil(intensity=1.3)"} // several at once

Events

Actors use the same character visual template as Character Sheet and Character Face. The character_render event applies to all contexts where a character is displayed.

EventWhen it firesParameters
character_renderBefore character layers are built(character)

Use character_render to dynamically modify character.renderedLayers before display.


Quick Reference

I want to...Do this
Add character to slot{actor: "my_character->my_slot"}
Add with animation{actor: "my_character->my_slot(enter=fade)"}
Remove character{actor: "!my_character"}
Move to new slot{actor: "my_character->other_slot"}
Update properties{actor: "my_character(alpha=0.5)"}
Flip horizontallySet mirror: true on slot
Skip the scene grade (a glowing ghost){actor: "my_character->my_slot(grade=false)"}
Add looping animationSet idle: "float" on slot
Play an animation once{animate: "my_character lunge"} or {actor: "my_character(anim=lunge)"}
Clear all actors{actor: false}

Next Steps

  • Overview - Character system basics
  • Assets - Background assets for scenes