Ren'Py Parity

Novella's feature target is parity with Ren'Py, with its own APIs and programming style. This page records where each area stands in iteration 1, read from the engine's code rather than from plans. Supported works as a Ren'Py user would expect; Partial works with the limits stated; Not yet is absent. Some differences are deliberate and are marked by design.

Area Supported Partial Not yet
Script statements Dialogue with attributes, temporary @ attributes, one-off speakers, line ids and a transition (with) played before the line appears; narration; extend; show, scene, hide with at, behind, zorder, as, onlayer and inline ATL; with; pause and pause hard; menu with a caption, conditions and set; named menus (menu name:), which can be jumped to or called like a label from anywhere in the story; jump, call with arguments, return with a value, and expression targets; label parameters; if/elif/else; while; $ assignments; play, queue, stop; voice and voice sustain; movie; input; window; nvl clear; notify; pass; define and default Custom statements are run commands implemented in C# or Divooka rather than new syntax; call expression takes no arguments Python in any form ($ takes Novella's expression language, and there is no python: or init python:), by design; init priorities; show expression; camera and show layer; image name: with an ATL block
Expressions Numbers, strings, booleans, none, lists and indexing; arithmetic, chained comparisons, in, and/or/not, conditional expressions; about thirty built-in functions and the game's own queries (visited, seen_label, seen_image, heard, achieved, showing); persistent. variables; [expression] interpolation; random draws replayed by rollback Functions are added from C# (RegisterFunction), not from Divooka or the script Dictionaries, objects and classes
ATL Property settings; interpolation with Ren'Py's warpers and the Penner families; pause; repeat and repeat n; block; parallel; transforms included by name with parameters; inline timelines under show and scene; the standard positions The property set covers position, anchor, alignment, offset, zoom, rotation, alpha, blur, saturation, brightness, tint and size, but not crop, polar coordinates, matrixcolor or tiling; timeline expressions read the transform's parameters but not game variables The statements choice, contains, time, on, event and function, which the parser reports as errors; splines and circles
Transitions dissolve, fade, flash, pixellate, move, ease; the movein, moveout, easein, easeout families; slide, slideaway, push, wipe in four directions; irisin, irisout, zoomin, zoomout, vpunch, hpunch, blinds, squares, crossfade; imagedissolve with a mask; named transitions with arguments; transitions on stage statements, on dialogue lines and on show screen and hide screen; a preference to turn transitions off call screen with a transition fades the called screen in over the transition's duration, whatever the transition's kind, because a called screen is not part of the stage MultipleTransition, ComposeTransition, AlphaDissolve and other transition classes
Images and layered images Images defined from file names; the built-in black and white, which need no definition; attribute resolution that keeps current attributes; colour images; placeholders for missing art; movie images; filters (grayscale, sepia, tint, flip, zoom, crop, blur, alpha, brightness, saturation); composite; condition switches; side images; layered images with groups, multiple, defaults and conditions Layered images lack if_any/if_all/if_not, per-layer transforms and offsets, and auto attributes Text, frame and other displayables as image definitions; dynamic displayables
Stage and layers The master, transient, screens and overlay layers, with transient cleared after each line, menu, input and click-to-continue pause; layers made with onlayer under any other name, drawn above master and below transient in name order; z-order and behind; tags with as Layer transforms and the camera
Audio channels music, sound, voice, ambience and audio, plus defined channels with a mixer, looping, a default fade-out and norestore; fades, queues, per-play volume, if_changed, aliases and playlists; music, sound and voice volumes and mute; channels restored on load and rollback; typing sounds; WAV, MP3, AAC, FLAC, Vorbis and Opus decoding Audio filters and panning
Movies Full-screen movie with noskip and keepmusic; looping movie images on the stage; movie sound through the mixer; headless playthroughs that picture a movie and click through it when it is skippable Movies with an alpha mask
Voice voice, voice sustain, automatic voicing from a file pattern by line id or character Replaying a line's voice from the history; per-character voice volume
Screens and screen language Every default screen: main menu, game menu, save, load, preferences, history, choice, input, NVL, quick menu, confirm, notify, gallery, music room, achievements, about and help; a splash label; a main menu written as a label; all styled by the theme Custom screens are C# NovellaScreen classes, shown with show screen and called with call screen, and a called screen the player closes without answering (Escape, or its own Close) returns none; built-in screens other than the main menu are themed but cannot be replaced Ren'Py's screen language as a DSL
Save, load, rollback, skip, auto Paged save slots with thumbnails, deleting a save, rotating autosaves, quick save and load, Continue; saves as readable JSON; after_load; rollback and roll forward with a limit and rollback_past_choices; skip seen text, unseen text and after choices; auto-forward; hiding the window; screenshots Live scripts cannot be saved, loaded or rolled back, and neither can a story label one runs with Call Label; a save's name is stored but the save screen does not ask for one Blocking or fixing rollback from the script; cloud saves
History Lines and choices as shown, translated, with a limit Voice replay; returning to a line from the history
Persistent data persistent. variables with defaults that apply once; seen lines, images, audio and labels; choices made in earlier playthroughs; achievements; preferences, kept apart from saves Data shared between games (Ren'Py's MultiPersistent)
Gallery and music room Gallery entries unlocked when their images are seen, or by a condition, with a viewer; music room tracks unlocked when heard, or by a condition
Achievements Definitions, achieve, hidden achievements, notifications, an Achievements screen, achieved() Steam and other platform backends
Translations Line translations by explicit or derived id; string tables; dropping a line in a language; a language preference; translate() and language(); the engine's interface in Simplified Chinese, Traditional Chinese and Japanese; coverage reported by the lint The Traditional Chinese and Japanese interface tables are incomplete, falling back to English Per-language fonts and styles; a tool that generates translation files
Text Ren'Py's text tags, including ruby, {w}, {p}, {nw}, {fast}, {cps}, inline images and spaces; {a=} links, clickable once the line has finished showing, that jump to a label, call one and come back to the line, or open a web address; interpolation; NVL pages; centered text; per-character fonts, sizes, colours and quotation marks {vspace}, {k} and {clear} are accepted and ignored Custom text tags
Accessibility and self-voicing Text size and window opacity preferences; a transitions toggle; a text shadow on by default Self-voicing: the preference is stored but has no switch in the preferences and no speech synthesizer behind it; an accessibility menu; font and contrast overrides
Developer tools Lint (NovellaPlayer lint, Validate, the console's lint, the Check Story and Check Game nodes); a console (Shift+O) that evaluates expressions, sets variables, lists problems and warps with jump label; reload (Shift+R); starting at a label (--label); headless playthroughs with described screenshots; frame timing with NovellaPlayer bench Reload restarts the current label from its beginning rather than the current line Warping to a file and line; the interactive director; an image location picker; a variable viewer
Distribution and building A game runs as a C# program (built like any .NET 10 application), as a script folder with NovellaPlayer, or as a Divooka document in Divooka Compute or Explore A command that packages a game for distribution; single-click desktop publishing through the Divooka runner templates; Android, iOS and web builds
Live2D, 3D and gamepads Live2D; a 3D stage; gamepad controls (out of scope for iteration 1)

The plans for what is missing are in RFC 170.