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.

Character Manager

Written 8 Aug 2026 · Updated 15 Nov 2026 · Requires Mammut 0.9.0+

Characters are stored as their own files (.mmch), created from the File Manager via Create → Character File. Opening one loads it into the Character Manager, the same per-file editor pattern used by scenes and chapters. This page covers the editor itself; for how a character's fields map to runtime data and dialogue, see Characters.

Identity

A new character file starts with its Key and Name already filled in from the filename: the key is the sanitized filename itself, and the name is a title-cased version with underscores turned into spaces. Both stay editable afterward. The key is what everything else refers to, [SetCharacter(key)] in dialogue, Assets.GetCharacter(key) in code, so it's kept sanitized to lowercase and underscores as you type.

Idle image and sub-scene

Every character has a default portrait (the Idle Image), used whenever no variant is specified, plus an optional Idle Sub-Scene for characters that need more than a single static image on screen by default. Any image field, here and throughout the editor, opens as a searchable dropdown of every image asset already in your project rather than a raw file path.

Variables

Beyond the built-in fields, a character can carry its own Variables. They're edited the same way as in the Variables Manager: add one, name it, then pick its type (String, Number, Boolean, File, Array or Object) and value. Use them for anything specific to your game that doesn't fit the built-in fields, like a relationship stat, a nickname or a theme colour.

Scene scripts read them as plain values:

const alice = Assets.GetCharacter("alice");
const nickname = alice.variables.nickname;

Chapters can read and change them too, with $char and $variant (see Logic). Changes are saved with the game, and Assets.GetCharacter(key).variables always holds the current values.

Variants

Variants are named alternates, typically different expressions or outfits, each with its own image. A variant can also carry its own Variables, separate from the character's own, letting a specific expression have a value (like a distinct voice line key) without affecting the character's default. Read them with Assets.GetVariant(key, variantName).variables.

[SetCharacter(alice, variant=smiling)]

Notes and Tags

Notes is a free-text field for your own reference, never shown in-game. Tags are free-form labels for organizing and filtering your character files, useful once a project has more than a handful of them.

Saving

Changes aren't written to disk until you save, either the save button in the breadcrumb bar (which lights up while there are unsaved changes) or its keyboard shortcut. The bar also shows the character's current name and a saving/failed status while a save is in flight.