Visual novel tutorial: effects in Ren’Py.

2018.09.16, written by Kuna.

In the first part of this tutorial for rookie programmers, I’ve summarized a few quick tips that come in handy when enhancing the expressiveness of the narration of a visual novel.

This time I’d like to continue and list some other gimmicks that are easy to code and use, and serve the same purpose. I’ve used them for the coding of the demo of Pitch Black Serenade and since they worked fine with me I thought to share. I hope you’ll be able to find some good inspiration this way too! 🌟


The method I used to show depressed feelings in a character during a comedy scene is to have a layer of purple shade and black lines going up and down in the background.

I prepared a transparent image with such design, equal in height to the size of the visual novel screen (720p) and code it with the ATL language.

My picture is called gaan_animated. I’ll have it shown at the same position of my character but behind him. Then in 0.6 seconds the picture is moving up and in another 0.6 seconds is returning to the original position. I’ll have the animation repeated.

Kinetic lines.

Kinetic lines can help enhance dramatic dialogue lines, situation or characters.

All you need for this animation is one transparent frame with the lines.


A quick way to have animations with Ren’py ATL is to mirror the picture you already have. In my script.rpy doc I define the animation I want.

First, I want to give it an abbreviation to use it quickly. I choose ol (=”overlay”, since it’s going to be layer on top).

My image is called “ol kinetic_animated”. First it shows the “kinetic” picture, then, after 0.2 seconds it shows it again mirrored. The animation is set on repeat and it won’t stop until I type “hide ol” in the script for the actual scene.


Making objects shine to express beauty or luxury may be a good way to improve expressiveness.


I prepare a transparent picture with the sparkles I need. I made a generic one that I can use for many occasions. 

I define the animation in the script.rpy doc similarly as I did for the kinetic lines.

The animation is finally placed in the right location and rotated. It will glitter until I tell it to hide.


A classic way to show a character while fascinated.


I prepare two transparent pictures. The sparkles in the second one are smaller. Pay attention to two details: both pictures have the same size, therefore they will appear in the same position on screen; the smaller sparkles have to be centered in the bigger ones, like in this picture:

As always, I define my animation in the script.rpy file.

And with that, I can use it by placing it in the same position as my character.


This is one of the many ways the “flashback effect” can be achieved.

I use a white frame to enclose the screen within. As for the effects to start the flashback, I use both pixellate and dissolve.

I also have a sound to introduce the flashback. I haven’t mentioned it for the other effects, but I always use a sound for each of them. I think that it communicates the atmosphere even more.

This tutorial ends here. There are a lot of things yet I’d like to share so I’m going to continue it one day. In the meanwhile I hope that it’s going to be helpful to someone! 

Thank you for reading! 🙌💜