Candy Logo Copyright © 2025-2026 Candy Arts

JML Effects
JML effects (Join, Move, Leave) are animations played automatically on a bust node when an Actor arrives, moves or leaves: a fade-in, a slide from the side, a bounce...
EffectPlayed
JoinOn the Actor's bust node, when VN_Play places an Actor new to the scene on it.
Move FromOn the bust node an Actor leaves, with VN_Move or VN_Swap.
Move ToOn the bust node an Actor arrives at, with VN_Move or VN_Swap, after Move From.
LeaveOn the Actor's bust node, before it's emptied: by VN_Remove, and when every Actor is removed at once (see Leaving All at Once below).
An Actor who changes expression with VN_Play plays no JML effect. Neither does one moved to another bust node by VN_Play (see Busts). Setting Up JML effects play on an AnimationPlayer inside each bust node, named JML (set by the VN Scene's jml_player_name). Add the animations your effects use to that AnimationPlayer. A bust node without one plays no JML effects. After a JML effect, a RESET animation plays, if there is one, so the bust node is restored for the next one. For an animation from a library (such as "JML/Fade_In"), that library's RESET is played; otherwise, the AnimationPlayer's own. The libraries that ship in Candy_DE/Media/Actors/Busts/Animation_Libraries, such as JML, are 'safe' files: updates never overwrite the animations you add to them. Choosing Effects Each effect is written as a pair, ["Method", "Value"]:
  • ["Animation", "Fade_In"] plays the animation Fade_In of the bust node's JML AnimationPlayer.
  • ["", ""] sets nothing: the next level decides.
The effect played is the first one set, in this order:
  • The Line's own effect (see VN_Play, VN_Move, VN_Swap and VN_Remove). A Line can also request no effect at all.
  • The Actor's property: VNJoinEffect, VNMoveFromEffect, VNMoveToEffect or VNLeaveEffect (see Actor Properties).
  • The VN Scene's setting: vn_join_effect, vn_move_from_effect, vn_move_to_effect or vn_leave_effect.
  • The Engine's setting of the same name.
For example, every Actor can fade in through the Engine's vn_join_effect, while a ghost floats in through her own VNJoinEffect. Your own methods "Animation" is the only method built in. Other methods, such as "Tween" (to animate with a Tween rather than an AnimationPlayer), require your own code: add them to the match statement that plays JML effects in VN_UI.gd. Order When a Line places several Actors on screen, moves them or removes them, it can choose whether their JML effects play together or one after another. Each Actor on the Line receives an order number:
  • Actors with the same number play their effects at the same time.
  • Groups play in ascending order: the next group starts once the previous one is done.
By default every Actor has the same number, so all their effects play together. For Alice to appear first, then Bob and Carol together, assign 1 to Alice and 2 to the others. With VN_Swap, both Actors play their Move From effects together, trade bust nodes, then play their Move To effects together. Leaving All at Once Every Actor can be removed at once: when the Dialogue ends, by the UI_Clear command, or by clear_busts_ood() (see Visual Novels). Each of them can either play the Actors' Leave effects first, or remove them silently:
  • At the end of the Dialogue: the Engine's jml_on_end setting.
  • UI_Clear and clear_busts_ood(): their own option.
Leave effects played this way play one Actor after another.