FolioTier 2
@dissolve
Cross-fade the changes it is scoped to - one line's own `with dissolve`, or every change inside a `transition dissolve:` block. Never an effect line.
Dissolve cross-fades whatever it's attached to, blending the old frame into the new one instead of cutting. It's the default choice for background changes, sprite swaps, or full scene transitions where you want continuity rather than a jarring pop - a new time of day, a character walking off and another taking their place, or wrapping several simultaneous changes in a transition dissolve block.
Use the shorter end of the duration range for quick beats like sprite mood swaps, and the longer end for scene-level changes like a location or time skip. Shorter feels responsive, longer feels deliberate.
Dissolve only applies to changes, not to standalone effect lines - it rides along with a bg, show, or hide, or wraps a group of them in a transition block. Setting wait to false lets the fade play out while the next lines already execute, which is how you layer a dissolve under dialogue that starts immediately rather than waiting for the fade to finish.
Demo
@dissolve
Hello.
A triangular opacity dip on the stage layer - backdrop and sprites fade through black to the player surface and return. The textbox stays at full opacity throughout.
Parameters
| Parameter | Kind | Required | Default | Notes |
|---|---|---|---|---|
| duration | number | no | 0.5 | 0.05-3 seconds. Default 0.5. |
| wait | boolean | no | true | Block for the effect's duration when true; false fires and continues so effects can overlap. |
Canonical example
bg bg-kitchen-morning with dissolve(0.5)
say "Emma": "Morning, already?"scene bg kitchen_morning
with Dissolve(0.5)
e "Morning, already?"@dissolve is the runtime effect a dissolve transition lowers to. It
is always scoped to the changes it was written for - one line's own
with dissolve, or the body of a transition dissolve: block: those
changes fade in over the duration while the prior state fades out, and
anything changed outside that scope cuts. Then the next line runs.
Notes
There is no @dissolve(...) line. The effect has one parameter,
duration, and both transition spellings carry it in full, so the
effect-line form would be a second door to the same thing that no
inspector could create. The parser rejects an @dissolve line as an
error. Write one of:
bg <image> with dissolve(0.8)- the backdrop arrives under the crossfade (the Background event's Transition field in Forge).transition dissolve(0.8):with an indented body - every change in that body crossfades together (the Transition block in Forge). Baredissolve= the 0.5s default.
The importer keeps bare with dissolve as the bare call and carries a
parameterized with Dissolve(N) as dissolve(N); a standalone Ren'Py
with dissolve line becomes a transition dissolve: block around the
changes pending since the last interaction.
Dissolve is the most-used transition in the corpus - 8502 hits across
two sampled games alone. Defaulting duration to 0.5s
matches Ren'Py's Dissolve() default and reads cleanly in both
narrative events and montages.
See also
@fade- fade-out through a color, then fade-in (different shape, similar role)transition- the standalone verb that spells this effectbg- the verb most often paired with@dissolve