Making a Visual Novel

Talk about music, movies, television, books, and other media. No religious or political discussion allowed.
DaHeckIzDat
Posts: 3147
Joined: April 9th, 2015, 1:41 pm

Making a Visual Novel

Postby DaHeckIzDat » September 5th, 2026, 10:13 pm

I've decided to try making my own visual novel. As both an author and a gamer, this seems like the kind of project I could really get into! I'll be using Ren'Py to make the VN itself, and a program called Mannequin Character Generator for the models since I can't afford an artist to draw everything for me, plus a few bundles of free backgrounds I was able to find on itch.io. Ren'Py operates based on a highly simplified version of Python, so maybe I'll end up learning how to code out of this too!

For anyone who doesn't know, visual novels are a type of game that's been popular in Japan for a while now, and is starting to gain popularity over here in the west as well. They are, as the name would imply, mostly vehicles for telling stories where the cast is represented by a series of still images. Most of them operate like Choose Your Own Adventure stories, where the player is given choices throughout the game that effect how to story plays out. Other, more ambitious examples like Phoenix Wright or Utawarerumono might incorporate more traditional gameplay elements, like puzzle solving or Fire Emblem-esque tactical combat, but the main focus is always the story it's telling.

Image

Image

If nothing else, this should at least be an interesting experience! I'll provide updates as I progress to share how things are going and any interesting info I come across.

Oh, and if anyone's interested in trying it out for themselves, these are the tools I'm using. Both are either free, or offer free demos.
Ren'Py: https://www.renpy.org/
Mannequin: https://store.steampowered.com/app/1385420/Mannequin_Character_Generator_Free/

User avatar
Crummylion
Posts: 371
Joined: February 10th, 2017, 11:20 pm

Re: Making a Visual Novel

Postby Crummylion » September 6th, 2026, 9:29 pm

I heard that Twine is pretty good too. From what I understand, it's also built on Python, so it boils down to preference, I guess. It's been used on a fair bit of relatively known VNs, like Netflix's Bandersnatch.

https://twinery.org/

Would love to see more threads on open source retro game engines. I think the closest we came was the Grimace Shake gbc game??? Which happened to have been made with visual coding on something called the GBStudio.

DaHeckIzDat
Posts: 3147
Joined: April 9th, 2015, 1:41 pm

Re: Making a Visual Novel

Postby DaHeckIzDat » September 6th, 2026, 10:03 pm

Crummylion wrote:I heard that Twine is pretty good too.

I've worked with Twine, and while it's surprisingly easy to use, you can't use images with it without going deep into the code and making some major changes. Otherwise, Twine games are text only. If it let you make parser-based text adventures like Zork, I'd be all over it. As it is, you're basically just making visual novels without the visuals.

DaHeckIzDat
Posts: 3147
Joined: April 9th, 2015, 1:41 pm

Re: Making a Visual Novel

Postby DaHeckIzDat » September 11th, 2026, 5:44 am

I haven't had a ton of time to devote to this over the past week, but I finally got to sit down and go through a little bit of the tutorial tonight. So far Ren'Py seems pretty straight forward. Here are the notes I've been taking, in case anyone is following along. These are for writing dialogue, so 90% of your game is going to come from these commands.

“label start:” (no quotes)
Marks where the VN will begin.

Regular dialogue is entered like this:
“Name” “Words you want the character to say.”
Ex:
“Luke” “Wait a minute! Where am I?”

If there is no character name, only put the dialogue.
This is good for writing narration.
Ex:
“I slowly back away from the talking cartoon narwhal.”

Special characters, like using quotation marks in the dialogue itself, are preceded by a backslash.
Ex:
“Luke” “Um…did she just call me a \”Sasquatch\”?”

You can define character names with a shortcut. Ren’Py will then automatically assign any dialogue using that shortcut to the designated character. You can also change the color of their name with color = “#------”
Note: spaces before and after character “=”, but no spaces for color “=”
Also note: definitions are case sensitive, so “n” and “N” will be considered different characters.
Also also note: you don’t have to put quotes around the shortened name.
Ex:
define n = Character(“Narwhal”, color=“ffcccc”)
n “Narwhal narwhal narwhal narwhal!”

All together now!

define l = Character(“Luke”)

define n = Character(“Narwhal”)

define t = Character(“Trixie”)

label start:

“I back away slowly from the giant cartoon narwhal.”

l “Please don't eat me! I swear, I taste like expired baloney!”

n “Narwhal narwhal narwhal narwhal!”

t “Narwhal! What did I tell you about eating Sasquatches?”

l “WOULD YOU PLEASE STOP CALLING ME A \”SASQUATCH\”?!”

DaHeckIzDat
Posts: 3147
Joined: April 9th, 2015, 1:41 pm

Re: Making a Visual Novel

Postby DaHeckIzDat » September 11th, 2026, 11:16 pm

Some more notes on inserting images and inserting images and creating new positions.

INSERTING IMAGES

First step is to choose image names and add those images to the images directory.
Image names should be simple, like “bg city street” or “luke scared”.
Parts of the name should be separated by spaces.
Must only consist of lower case letters, numbers, and underscores.
The first part is the tag, IE “bg” or “luke”
You can open the images directory from the Ren’Py launcher.
File names should must the same names as the image in the image directory.
Image types must be jpg, png, or webp.
Ex:
bg city street.png
luke scared.jpg
luke_happy.png

Backgrounds are designated by “scene”
The character pic shown is designated by “show”
If you want to position the character anywhere besides the default spot, designate positioning after character pic with “at [position]”
Ex:
scene bg city street
show luke scared
show narwhal happy at right

You can also designate special positions and layer images.
Ex:
show luke scared
show trixie scary at centerleft behind luke scared

You can temporarily hide images with “hide”.
Ex:
show trixie scary at centerleft behind luke scared
hide trixie scary

“Hide” is usually used when a character or prop leaves the scene before the scene is over.

If a new image is placed where another image already is, the new image will replace the old one.

Changes happen instantly, so…
scene bg city street
show luke scared
show narwhal happy at right
…will all appear at the same time.

All together now!

define l = Character(“Luke”)

define n = Character(“Narwhal”)

define t = Character(“Trixie”)

label start:

scene bg city street

show luke scared

show narwhal at right

l “Wh- Where did Trixie go?”

n “Narwhal narwhal narwhal.”

show trixie scary at centerleft behind luke scared

t “BOO!”

l “AAAAAH!”

hide trixie scary

l “Aaah! She disappeared into thin air!”


CREATING NEW POSITIONS

Positions besides left, right, and the default center are designated by the x and y axis.
Ex:
xalign: 0.75
yalign: 1.0

Assign the position to a character by putting a colon behind the character’s intro.
Ex:
show luke scared:
xalign: 0.75
yalign: 1.0

xalign positions horizontally
yalign positions vertically

xalign 0.0 is far left of screen
xalign 0.5 is center of screen
xalign 1.0 is far right of screen
Note: must use decimal point. Just “1” will not work.

yalign 0.0 is top of the screen
yalign 1.0 is bottom of the screen
Note: most character images default to yalign 1.0. You will rarely change this.

To keep you from having to repeatedly enter position alignments, you can define shortcuts.
These are made using “transform”.
They are defined at the top of the file, right after the characters.
Ex:
transform centerleft:
xalign: 0.25
yalign: 1.0

After the shortcut has been defined, you can enter it in the “at” clause of the “show” statement.
Ex:
show trixie scary at centerleft

Transforms are sticky. If you do not designate a new transform when you replace the character image with another, it will stay where the previous image was.

All together now!

define l = Character(“Luke”)

define t = Character(“Trixie”)

transform centerleft:
xalign: 0.25
yalign: 1.0

transform farright:
xalign 1.0
yalign: 1.0

label start:

scene bg city street

show luke annoyed

show trixie happy at centerleft behind luke annoyed

l “Trixie, can you please not stand so close behind me?”

t “Your shampoo smells nice.”

show trixie scared

t “LUKE, THERE’S A SPIDER IN YOUR HAIR!”

show luke scared at farright

l “AAAAAAAAAH GET IT OFF GET IT OFF GET IT OFF!”



Let me know if you guys are enjoying this, and I'll keep updating this with new notes.

DaHeckIzDat
Posts: 3147
Joined: April 9th, 2015, 1:41 pm

Re: Making a Visual Novel

Postby DaHeckIzDat » September 19th, 2026, 8:48 am

Update: my vn is now narwhal% complete
Image


Return to “Other Media”