Skip to content

Novel

The novel plugin turns your screenplay and artwork into a playable visual novel. It moves the reader through the story, loads beats and PSDs, chooses cues and camera framing, draws each scene, and manages saves.

Every novel command can be decorated.

PageWhat it covers
NavigationMoving through the story and the call stack
State and savesUpdating and committing beats, and quicksaves
Menus and inputThe menu and scope stacks, and input bindings
AssetsLoading screenplays and PSDs, and choosing images, cues, and locales
DrawingDrawing scenes and menus, layer by layer

Novel adds these fields to the shared view state, so your interface can show the story:

interface ViewState {
activeCue: null | ActiveCue;
content: Array<ContentLine>;
isRewinding: boolean;
menuSchema: null | MenuSchema;
}
interface ContentLine {
lexia: ContentLexia;
showName: boolean;
}
FieldDescription
activeCueThe cue that should be playing.
contentThe dialogue and narration lines to show, in screenplay order, and whether to show each speaker’s name.
isRewindingWhether the reader has stepped back from the latest point in their history.
menuSchemaThe schema of the menu on top of the menu stack, or null.
Example
const { content, menuSchema } = getViewState();

A speaker’s name shows when the speaker changes, so a character who speaks several lines in a row is named once, even across beats. While the reader is rewinding, every line shows its speaker’s name. Loading a bookmark starts the naming fresh.

Novel draws into two slots:

Frame keyShows
sceneThe current beat
menuThe menu on top of the menu stack

Novel also declares a timer for each slot. While a menu is open, the scene timer is paused, so the story waits, including any transition in progress, until the menu closes.

To position your own interface against the artwork in these slots, use Web UI’s useLayerBounds hook.

Novel decorates Core’s suspendSession and resumeSession, so the reader returns to the same place in the story after a hot reload during development.