5.8 KiB
My Novel — the starting point for your own visual novel
My Novel is the smallest complete visual novel in the game: an evening town, a bar and a home, connected by choices. It has no characters, items or battles — only scenes, short scenario files and their translations. It is meant to be copied: rename it, then grow your own story from these three places.
Play it from Play → My Novel → New game. It is the content of the My Novel game (collection novel_template).
What it contains
my_novel_game/
├── manifest.json
├── scenes/
│ ├── my_novel_town.json town entrance, the game starts here
│ ├── my_novel_bar.json bar with its ambient sound
│ └── my_novel_home.json home vestibule
├── scenarios/
│ ├── my_novel_town.scenario
│ ├── my_novel_bar.scenario
│ └── my_novel_home.scenario
└── locale/
├── en.properties mod name and description
└── scenarios_<lang>.properties translations of the scenario lines
The pictures and the bar sound are not in this mod: they come from Town Pack, so the template stays small and shows how a game reuses shared content. The music comes from Music Pack; the engine mods are the 2D Shell, Dialog Engine and Audio Engine.
How the story flows
The town is the hub. Every visit shows the same choice; the bar and the home each lead back.
┌────────────────────┐
│ my_novel_town │ (start)
│ "Where to go?" │
└──┬──────────────┬──┘
Go into the bar Go back home
▼ ▼
┌──────────────┐ ┌──────────────┐
│ my_novel_bar │ │ my_novel_home│
└──────┬───────┘ └──────┬───────┘
└─ Back to the town ─┘
A scene file names the background and the ambient sound:
{
"name": "my_novel_bar",
"defaultBackground": "bar/bar",
"defaultAmbient": "bar/bar_ambient"
}
The scenario with the same scene name runs when the scene is entered:
scene: my_novel_town
priority: 10
---
# The town is the hub: every visit shows the same choice.
text "Evening town. The street lamps are already lit and a cool draught runs along the cobbles." key=my_novel/town/intro
select "Where to go?" key=my_novel/town/prompt
option "Go into the bar" key=my_novel/town/opt_bar -> :bar
option "Go back home" key=my_novel/town/opt_home -> :home
:bar
switch_scene my_novel_bar
end
:home
switch_scene my_novel_home
end
The English text is written directly in the scenario. Each key= names the line's translation in locale/scenarios_<lang>.properties, for example the Spanish one:
my_novel/town/intro = La ciudad al anochecer. Las farolas ya están encendidas y una corriente fresca recorre los adoquines.
Make it your own
- Copy and rename the mod. Name it after your game with the
_gamesuffix, for exampleharbor_game. Change the folder name andidinmanifest.jsonto the same value, and rename themod_my_novel_game_name/_desckeys inlocale/*.propertiestomod_harbor_game_name/_desc. - Make a game for it. In Mods & Collections → Collections, open My Novel's scheme and press Duplicate, then replace
my_novel_gamewith your mod in the Story block. The entry scene is set in the collection ("entry": { "scene": "my_novel_town" }). - Rename the scenes if you like: the scene's
name, its file, thescene:header of its scenario and everyswitch_scenethat leads to it must match. - Keep or replace the art. Leave
town_packindependsto keep the town, or add your ownbackgrounds/andsounds/and pointdefaultBackground/defaultAmbientat them.
A first change: add a place
This is a real session in the editors, run inside My Novel with the Editor Tools mod added. The scene editor created a my_novel_park scene, and one option plus one label were typed into the town's scenario:
option "Go to the park" -> :park
:park
switch_scene my_novel_park
end
After saving, the town immediately offers the new way, and choosing it opens the new scene:
To get the editors in your own game, add the Editor Tools mod to it in the scheme, or launch the game for one session with them:
godot --path . -- --game=novel_template --new --with-mods=editor_tools
A new line without key= shows its literal text in every language; add a key and translations when the story is ready to be translated.
If something does not work
- A choice leads nowhere. The
switch_scenename must equal the target scene'sname, including case. - A scene has no text. Its scenario's
scene:header must name that scene. - The text is English in another language. The line has no
key=, or the key is missing in that language'sscenarios_<lang>.properties. - A black background. The background name is misspelt, or the mod that has the picture is not in
depends.



