Project Mammut Wiki
Project Mammut is currently in open beta. The UI is being updated a lot during this time, and you may run into bugs. If you'd like to help develop the engine or suggest features, come find us on Bluesky or Discord.

Actions Reference

Written 8 Aug 2026 · Requires Mammut 0.6.2+

Actions are the [Name(args)] tags you write in chapter content. Some are built in and handled directly by the Revealer; anything else dispatches to a handler your scene script registers with Revealer.Register. See Coding for the event-object shape handlers receive.

Flow control

Action Effect
[AwaitClick()] Pauses the reveal until the player clicks.
[ClickClear()] Same as AwaitClick, then wipes the text box (open style tags are re-opened so formatting continues).
[AutoLink(nodeId)] Jumps straight to another node, with no player input.
[LinkOption(nodeId, text)] Collects a player choice. All LinkOptions in a node fire together via the OptionsReady event once the node finishes.
[SwitchScene(name)] / [SwitchScene(name, fadeDuration, fadeHold)] Switches the active scene, with optional fade timing.
[Pause(seconds)] Waits N seconds before continuing (default 1 if omitted or invalid).
[TextSpeed(multiplier)] Changes reveal speed from that point on. 0.5 is twice as fast, 2 is twice as slow.

Characters

Action Effect
[SetCharacter(key)] / [SetCharacter(key, variant=value)] Fires a SetCharacter event and pauses the reveal until the scene calls Revealer.Unpause(). Pass a variant as a kwarg to switch expression/outfit in the same call.
[UnsetCharacter(key)] Fires an UnsetCharacter event, which also pauses until unpaused. There's no built-in logic beyond dispatching; your scene script decides what "unset" means, e.g. playing a leave animation.
[UnsetCharacterAll()] Same as above, for clearing every on-screen character at once.

None of these have dedicated built-in behavior beyond the pausing noted above. They all fall through to the generic custom-action dispatch, so it's entirely up to your scene's Revealer.Register handlers what actually happens on screen.

Audio

Action Effect
[Music(key)] / [Music(key, fadeSeconds)] Plays or crossfades background music.
[StopMusic()] / [StopMusic(fadeSeconds)] Fades out and stops music.
[Ambient(key)] / [Ambient(key, fadeSeconds)] Plays or crossfades an ambient loop.
[StopAmbient()] / [StopAmbient(fadeSeconds)] Fades out and stops the ambient loop.
[SFX(key)] Plays a one-shot sound effect.
[Voice(key)] Plays a one-shot voice line.

Custom actions

Anything not listed above, such as [AnyName(arg1, arg2, key=value)], dispatches to whatever you've registered:

Revealer.Register("AnyName", (event) => {
  event.args;   // ["arg1", "arg2"]
  event.kwargs; // { key: "value" }
});

This is how you build your own game-specific actions (camera shakes, achievements, custom character behavior, anything at all) without touching the Revealer itself.

A note on newlines

If an action tag is immediately followed by a newline in your source text, that newline is swallowed rather than showing up as a blank line in the revealed output. That means you can put one action per line for readability without it affecting spacing on screen.