Installation
Novella is one framework reached three ways: as a Divooka package, as a command-line player for a folder of scripts, and as C# assemblies.
In Divooka
Novella is the Divooka.Novella package, listed as Novella Visual Novels under Game Development in the package picker, beside Glaze. It adds the Novella toolbox, the Novella Application base type for Events graphs, the custom previews that play a game from the Properties panel, and the Plugins > Frameworks > Novella > Run Novella Game menu entry. See Novella in Divooka for how to use them.
| Distribution | How Novella is included |
|---|---|
| Divooka Compute | In the Standard tier and above. The start screen offers the Game Development workload, which brings the platform base, the graph editor essentials, Glaze (realtime games with a frame loop, sprites and input) and Divooka.Novella together for a document that is a game someone plays. |
| Divooka Explore | Always included: Explore ships every package its example pack needs, and the pack has a Visual Novel folder. |
Nothing else needs installing: the package carries its own runtime (drawing, audio decoding and video are managed code, and Python for stories that use it runs on IronPython, with its standard library in PythonLib/ beside the program), and a game's saves go under the user's application data folder (%AppData%/Novella/<game id> on Windows). Previews played from the editor keep their saves in memory and never touch that folder.
See Divooka for how the two distributions differ.
NovellaPlayer, for a folder of scripts
NovellaPlayer runs a game that is only a folder: .novella scripts with the images, sounds, fonts and videos they use. It is the writer's tool when no code is wanted. It lives in the Parcel NExT source tree at Parcel.NExT/Frameworks/Novella/Novella.Player and is not yet part of a Divooka distribution, so build it with the .NET 10 SDK:
dotnet run --project Parcel.NExT/Frameworks/Novella/Novella.Player -- run "C:\Games\The Garden"
Its commands:
| Command | What it does |
|---|---|
NovellaPlayer run <folder> [--label name] [--developer] |
Plays the game in a window; --label starts at a label instead of start, --developer turns on the developer console and reload. |
NovellaPlayer lint <folder> |
Checks the story against its files and prints every problem; exits 2 if any is an error. |
NovellaPlayer shoot <folder> --out <dir> [--steps 40] [--every 1] [--choices 0,1,0] [--input text] [--label name] [--reading 0.5] |
Plays headless through the real controls and saves a PNG of each interaction with a text file describing it, plus a transcript; a skippable movie is pictured and then clicked through after 1.5 seconds. Exits 3 if a file was missing, the script failed, or the story was stuck. |
NovellaPlayer bench <folder> [--frames 120] |
Times frames while a line types out and reports the median and range. |
The game's title defaults to the folder's name until a script sets define config.title.
In C#
Reference the Novella project from a .NET 10 program:
<ItemGroup>
<ProjectReference Include="..\..\Frameworks\Novella\Novella\Novella.csproj" />
</ItemGroup>
Novella brings Novella.Core (the story model, the script language and the runtime, which depends on nothing beyond .NET) and the presentation, which draws with Divooka.Graphics.Canvas and ShadowGUI, decodes audio with Divooka.Audio.IO, plays video through VideoFoundation, and opens its window through SFML. VideoFoundation is an external clone at External/VideoFoundation in the Parcel NExT repository (External/README.md says how to fetch it), so fetch it before building. A program or test that only needs the story runtime can reference Novella.Core alone; the C# story builder is in it too.
A game whose story has Python also references Novella.Python, which runs it through Parcel NExT's Python package (Packages/Divooka.Scripting.Python, on IronPython 3.4.2). That package copies the Python standard library beside the program as PythonLib/, from External/PythonForDivooka_StandardLibraries, which External/Setup.ps1 clones; without the clone the game still builds, with a warning, and its Python runs with only the modules built into IronPython, such as math and time, so import random, os and json fail; a story whose blocks keep nothing beyond story variables runs as usual, but one that leaves data Python must keep, such as a dictionary or an object, stops with an error naming what could not be kept, because keeping it in a save needs the library's pickle. Nothing in the program calls it: the engine finds it by name beside the game when a story has Python, so a game that never writes Python leaves it out and carries no Python. The Divooka package and NovellaPlayer already reference it.
<ItemGroup>
<ProjectReference Include="..\..\Frameworks\Novella\Novella.Python\Novella.Python.csproj" />
</ItemGroup>
See Development for the API, and TestPrograms/Novella.RedThread in the Parcel NExT tree for a complete program.