LVNAuth - Structuring a visual novel
In LVNAuth, visual novels consist of 3 types of scripts.
The top of the hierarchy are chapters. Below chapters are scenes. Scenes are part of chapters.
Reusable scripts don't belong to chapters or scenes. They are standalone scripts made by the author of the visual novel (ie: you) to help simplify repetitive tasks in your visual novel.
Reusable scripts can be called from chapters and scenes.
Let's say you want to do the following in your visual novel:
The script would look something like this:
<character_show: theo_happy>
<play_sound: excited_sound>
Let's go!
But now let's say you want to do this 20 different times throughout your visual novel. You would need to copy/paste the 3 lines above 20 times throughout your visual novel.
That's where a reusable script comes in. You can create a reusable script called 'happy mood' that contains these 3 lines:
Resuable script name: happy mood
<character_show: theo_happy>
<play_sound: excited_sound>
Let's go!
Now you can call that reusable script using one command:
<call: happy mood>
And that's it! Now you can use the single command above multiple times in your visual novel. It's reusable.
Before using a sprite (image) in your visual novel, it needs to be loaded first.
Loading a sprite does two things:
1) Prepares the sprite for display, in memory.
2) Tells LVNAuth that you're going to use the sprite.
You could have hundreds of sprites in a visual novel project, but if you don't load them from your scripts, then the sprites won't be included in the final visual novel compilation.
Loading sprites is a way of telling LVNAuth that you're going to use the sprites in your visual novel. This is a great way of experimenting with different sprites in your project without having to include them in your final visual novel - just load the sprites you want to include in your final visual novel.
Characters, objects, dialogue sprites are can be loaded with <load_> commands.
| Command | Description |
|---|---|
<load_character> |
Prepares a character sprite for display. |
<load_object> |
Prepares an object sprite for display. |
<load_dialogue_sprite> |
Prepares a dialogue sprite for display. |
Let's say we have a character sprite named 'amy_smile'.
First, we need to prepare that sprite by loading it.
<load_character: amy_smile, amy>
We can load sprites from chapter scripts, scene scripts, or reusable scripts.
The answer is: it depends. See below:
If a sprite is going to be used in multiple scenes, it's best to load a sprite inside the chapter script of those scenes (scenes always have 1 chapter). Each time a scene is played, the chapter script runs automatically. So if you have, say, 5 scenes inside a chapter, then loading a sprite in the chapter script means the sprite can be used in all 5 scenes.
Each time a scene is played, all previous sprites are unloaded automatically, which means they have to be loaded again if you want to use them in a new scene. By loading sprites in a chapter script, the sprites for the scene are loaded automatically, because they're being loaded in the chapter script.
If a sprite is going to be used infrequently or just in one scene, then it would make sense to load that sprite in the scene that it will be used in.
Each time a scene is played, all previous sprites are unloaded automatically, which means they have to be loaded again if you want to use them in a new scene.
If multiple scenes in multiple chapters use the same sprites (for example, your main character), then having the <load_> commands in one reusable script makes the most sense. You can use the <call> command inside all your chapter scripts to call a resusable script that loads your commonly used sprites.
For example, you could have a reusable script named, 'load common sprites'.
Inside the reusable script, load common sprites, you might have something like this:
<load_character: amy_smile, amy>
<load_character: amy_normal, amy>
<load_character: amy_angry: amy>
Then in each of your chapter scripts, you can call that reusable script.
<call: load common sprites>
Note: nested reusable scripts will not be considered when loading sprites. In other words, if a reusable script calls a second reusable script and the second reusable contains the <load_> commands, then those sprites will not be loaded.
A great spot for defining the dialogue rectangle area is in reusable scripts. Your dialogue rectangle will likely be the same throughout your entire visual novel, so it makes sense to define the dialogue rectangle in a reusable script that is called from chapter scripts.
When you're developing a visual novel, you'll generally want to focus on one scene at a time. It's generally not a good idea to make scenes overly long. What I mean by this is: let's say you have a scene that shows a character talking, and the character's speech takes 10 minutes to get to the end. Then at the end of the 10 minute talk, an error occurs in the visual novel and you need to find out what the issue is.
While you're trying to find out what's causing something not to work, you'll end up playing the scene over and over again. Since the error occurs 10 minutes into the scene, you'll need to wait a long time to test if your solution worked or not. So how do we prevent waiting 10 minutes just to test? The solution is to break up a scene into smaller chunks - or more specifically - into multiple hidden scenes.
Continuing with our example above, instead of putting 10 minutes of dialogue text into one scene, put about 1 minute of each dialogue into a separate hidden scene, so you'll end up with 1 visible scene and 9 hidden scenes.
A scene that has a name starting with a period is a hidden scene.
For example:
.At work
The scene name (.At work) starts with a period, so that means it is a hidden scene. To unhide the scene, just remove the period from the name by renaming it.
Hidden scenes will not appear as a scene option on the visual novel launch window. That means that your players will not have the option to start viewing your visual novel at a hidden scene, because hidden scene names won't be presented to your players.
However, you - the visual novel author, will be able to start your visual novel at any scene, including hidden scenes. This is especially useful for skipping parts of your visual novel that you're happy with so you can focus on fixing and focusing on specific parts of your visual novel without having to watch the same scenes over and over again.
Last updated: Tue 12 May 2026