Create a Visual Novel Using Ren’Py
Ren’Py is a visual novel game engine developed in Python
What You’ll Learn
This blog is a tutorial for learning how to create a visual novel with basic functionality using Ren’Py.
You will learn:
- what a visual novel is
- what Ren’Py is
- how to install Ren’Py
- how to create a basic visual novel using Ren’Py, which includes: characters, inner dialog, character dialog, simple character animation, decisions, music, and sound effects
What is a Visual Novel?
A visual novel is a video game genre in which a player goes through an interactive story described through text and images. It may be a static story or a dynamic one, in which a player can make decisions that change the storyline.
Visual novels are very popular in Japan (some examples include School Days, Danganronpa), and they have gained popularity in the United States as app games (some examples of these apps are Choices, Episode, Chapters, and Stories). There is also a popular american visual novel which came out in 2017, and was developed using Ren’Py, called Doki Doki Literature Club!
What is Ren’Py?
Ren’Py is an opensource visual novel game engine developed in Python. It has a simple syntax, making it easy and accessible to use for people with varying degrees of programming knowledge and in different age groups. I find it to be a fun and simple introduction to programming.
Ren’Py allows for exporting the created visual game as an Android or iOS app.
For this tutorial I created a short visual novel with two characters called Square-san and Circle-sempai, which I drew using GIMP.
These characters live in the world of shapes. Square-san has been in love with Circle-sempai since childhood, but Circle-sempai is now dating Triangle-san, who is kind of a jerk. Square-san and Circle-sempai meet up by chance, and Circle-sempai tells Square-san that she got stood up by her boyfriend. Square-san must decide what to do next.
At the end of the tutorial you can watch a video of the playthrough of the game.
Let’s Get Started
Install and Run Ren’Py
Download the latest version of Ren’Py from here. Unzip the downloaded folder and move it to a folder of your choice (I moved it to my Desktop folder). Open your terminal, move to the downloaded folder, and run the script
renpy.sh (in Linux, run by writting
To create a project, click on “+ Create New Project”, which is to the bottom left of the launcher. To launch/run an existing project, select the project in the “PROJECTS” list, then click on “Launch Project”, present to the bottom right of the launcher.
Once you create a project, a folder will be created within the Ren’Py folder. To develop the game’s logic, you must modify the file
script.rpy which is present in the
/game folder within the project’s folder.
Visual novels have background images in order to set different scenes. To display a background image, write:
scene imageFileName, where
imageFileName is the name (excluding file extension) of an image file present within the
/images folder (present within the
By default, Ren’Py searches for images within the
/images folder. It’s expected that you keep background and character images in that folder, but it can be placed elsewhere, just remember to add the path to the
scene statement. The
scene statement does not require a file extension. Avoid having multiple image files of different extensions with the same file name.
The recommended background image size is of width 1280px and height 720px.
Character images should be saved in the folder
images which is within the folder
game. A good size for the character image files is a width of 320px and a height of 720px. Feel free to test different sizes until you find the look you want in your game.
Display a character on screen by writing
show and the name of the image file within the
/images folder. The name of the file does not need to include its extension, Ren’Py will grab the image it finds.
For example, if I have an image for a character in the
/images folder called
character.png, then I can display this character in the middle of the screen by writing the line:
You can specify where on the screen you want the character to appear. If you want the character to appear on the left, write
show character at left. If you want the character to appear on the right, write
show character at right.
To remove a character from the scene, write
The background image can fade in or out by writing
scene town with fade.
Character can fade in or out by writing
show character with dissolve.
To define a character which will be involved in dialog, write the following code:
define characterVarName = Character(“CharacterName”). For example, in the game I made I defined the Square-san character by writing
define square = Character("Square-chan").
For a defined character to speak (have dialog) in the game, write the character’s variable name followed by a string with the text the character will say:
characterVarName “Dialog to speak”. For example, for Square-chan to say one line, I wrote
square “Hi. What are you doing this weekend?”
To write thoughts, inner dialog, or narration, you just add the string on its own, without the character variable preceding it. For example:
“Triangle sama is Circle’s on-and-off boyfriend.”“I hate that guy.”
Decisions are placed inside a
menu statement. Each decision is specified as a string followed by a colon, a new line, an indentation, and the instructions to follow if the particular decision is chosen.
In the code above, each decision has a
jump statement. The
jump statement transfers control to the specified label, which is defined in the code using the
If the menu choice does not contain a
jump statement, once the instructions within it finish running, Ren’Py will run the code of the next choice. So it is necessary to have
jump statements within decisions to maintain the intended logic. It is unnecessary to have a
jump statement in the last decision, since there are no decisions after it, but it does not hurt to use it.
Music and Sound Effects
Visual novels usually have background music and some sound effects.
To play a music file, write
play music “/audio/bensound-buddy.mp3”. The music file will loop indefinitely, unless stopped in the code.
To stop playing the music file, write
To play a sound effect, write
play sound “/audio/church.mp3”. Sound effects differ from music because they do not loop.
As you have read, you can quickly get started with programming a visual novel, for free! Now, if you haven’t already, you need to: create a story, create different decisions and storylines (if you want a player to make choices), and design and draw characters!
Get more information on Ren’Py functionality by visiting Ren’Py’s documentation.
Feel free to share a link to your visual novel in the comments!
My favorite part of visual novels is making bad decisions and being an awful protagonist (doing what I shouldn’t do in real life).
If you enjoyed this article please recommend and share.