This is my guide on making visual novels as director and manager of two game projects we made:
I’m Raven, the director & co-founder from Morrow Shore creator agency & studios.
I act as creative director for our own (first-party) projects, and as manager/QA for hire for third-party projects.
Although a degree in organizational psychology has helped, I believe most of my theories come from studying master’s degree books on management and organization that I’ve pirated in my younger years.
This post, although somewhat structured, will look more similar to a stream of consciousness, as I currently do not intend to make a hyper-polished post. (I’ve been basically peer-pressured to write this.)
I was advised by many to not make a wholly objective guide because it’d seem dogmatic, so instead I wrote my secret sauce down here in a more subjective way.
You should not treat anything you read here as gospel or even entertain the idea of incorporating them without considerations and perhaps consultation.
I did not know what processes are conventionally involved in making a visual novel, so I stuck to a mixture of my experience writing a novel, and my experience doing project management and QA for other games.
The following stuff is how I’d do things now. About 80% of them are what I decided to do from the very beginning, but I’ve obviously improved them over the course of the projects.
Here are the processes that I’ve decided on doing prior to project start:
An outline is an extreme condensation of your story. The entries can either be abstract or technical.
Either case, it should be concise; each entry should be ideally be a line or less, and should immediately remind of you everything that happens.
Ideally, each entry should tell roughly the same “amount” of the story in your head.
Here’s an example of 3 outline entries from Phantom Echoes:
- Rana dreams about Verdantian fire, startled awake, introduced to forest animals and villagers.
- Ventures into forest to forage, find dead villager, alert others but there's nothing. Soured relations.
- She sneaks out, trips and passes out. Rana's friend cuts ties after helping her. Imperium soldier introduced.
Needless to say, writing a proper outline is absolutely a necessity when making any creative project, especially visual novels that are mostly narration or dialogue.
The goal is to get the NARRATIVE down as soon and concisely as possible. Less words and it won’t tell the narrative, more words and it’ll not tell it efficiently.
It is extremely important for outline entries to be short and concise as you’ll find out in the section below.
Please do not be vain enough to skip over writing an outline.
If you don’t prepare outlines for your creative projects, this is your single most important takeaway from this post:
Learn why outlines are needed, learn how to write good outlines, and actually write the damn outlines.
FIRST OF ALL, I make sure I’ve reached a solid decision on WHAT I WANT.
I decide on the art style, project’s tone, and ….
Once I actually know what I’m looking for, I write up a post, and post it on various recruitment places!
The post should include:
Sounds simple enough, right?
Here’s an example for our project:
https://www.reddit.com/r/vndevs/comments/1f9gwsb/new_recruitment_for_project_r_spooktober_visual/
Here’s a list of places to advertise, ordered by how grateful I am for them.
Twitter’s organic outreach is horrendous, and unlikely to yield anything; don’t bother unless you want your fans to know or smth.
If you did recruitment posts right, you should be receiving quite a few applications!
Here’s how I select between the applications:
Roles in my projects are two types, core and assistant. I am open to recruit an infinite number of assistant roles, but that won’t work alone. I need to find core members for each role, people who are able to get things done, and have enough time to do that.
In my opinion, the most challenging part of making a visual novel game is their “visual” illustration, and their “game” programming.
I can handle the novel side just fine, so I prioritize on finding competent programmers and illustrators.
As a director, you should prioritize recruiting roles that you can’t do well on your own.
The most “make it or break it” aspect of VNs I believe is background CGs. Why?
Background artists are rather rare, for volunteer positions at least.
A lot of visual novels use a lot of backgrounds (often unnecessarily), and it’s a lot of work to make each one.
To upkeep style consistency, I obviously would need to have a single artist make all of them, or get VERY lucky and find more than a single background artist with the same style.
So anyway I recruit more than 1 and have them style match each other. I study their portfolio, and try to find a shared artstyle in their bodies of work.
Looking for artists that match your VN’s style and tone can be difficult, but it’s definitely doable.
I mention tone as well as style, because some artists are physically incapable of illustrating serious / depressing themes, and some artists are physically incapable of illustration comical / lighthearted content. In our studio alone there are 5 prime examples of this.
Keep in mind that if your VN contains animals, furries, aliens, or things that differ enough from a human, you probably need to find an separate sprite artist for each.
Recruiting good writers is very difficult, especially given how… “intangible” their portfolio or bodies of work can be.
They’re the highest risk of project delay, since they’re supposed to unfold outline and flesh it out into a script under 7 days.
I strongly recommend you be careful with who you recruit, or learn writing yourself to not be at risk.
I think I’ve been very lucky with the programmers I’ve recruited.
Don’t take my word for it, but I wouldn’t worry too much about finding a competent developer.
Many talented musicians are in the gaming scene, which includes VNs.
Quite frankly a lot of the musicians I see are simply smurfing by doing game jams.
I wouldn’t worry about finding a good musician. Just have a compelling idea, and they’ll definitely come to your aid.
There are MANY talented voice actors in the VN scene, and a lot of them would love to star in your project. I’ll later share a “Hack” to implement voice in your RenPy games in a super easy way, so definitely consider recruiting voice actors.
Just remind them the correct workflow (it often needs a reminder):
I STRONGLY recommend recruiting voice actors for their natural voice, and not what fancy things they can do with their voice, unless there are special circumstances.
Feel free to contact Cody in the devtalk Discord server for specialized guidance.
I try to respect my characters’ identity, ethnicity and general vibe when selecting voice actors, and that’s about all I can say.
You can find out more about how we implement voice in RenPy later.
By this point, the VN still hasn’t started yet, so this stage is the buffer one.
I try to leave at least a few days for this.
Once I select someone for a core role, I talk to them about what they’d be able to do, how their schedule will look like, and establish the game’s art style.
We talk about what we’d like to see, identify worthwhile opportunities for scope creep, and worthwhile opportunities to scope knife.
It’s important to know what to do if you can be extra, and what you must cut out if you can’t afford the normal progression.
Here, you should already be done with testing the artstyle of the artists you’ve picked, and testing the writing methodology of the writers you’ve found.
If you have guidelines for the art or writing style, the appropriate time to convey them is in this preparation phase.
For example, we don’t do narration for our writing, and that’s what 95% of writers do, so this will be a shock to most, and therefore, it’s important to challenge the writers a little.
Remember that almost everyone will start off with an almost complete certainty and faith in their ability to produce assets at not only the appropriate schedule, but also at the required quality. This often does not match reality, and I as a director, should be not only aware, but also prepared for it.
It’s my job as director to have faith in my own members, so testing my members prior to the jam launch is very much necessary.
Sometimes I can tell some creators are smurfing, but equally sometimes you can tell some have zero experience of working in a team.
Testing doesn’t need to be grand, just a paragraph or two from writers is enough to know if they’re able to adjust or write well, and just a sketch or two is enough to know if artists are able to match your style and tone requirements.
By the end of the preparation phase, and by the start of the project, I should already have prepared these and publicized them to my members:
I make sure I prepare a foldered google drive (or anything else really) that is prepared to accommodate all the deliveries.
Btw It’s important to have everyone know where they should be putting stuff.
And definitely remember to set up some ground rules, even though it may be unnecessary.
I outright ban any and all politics, and ban everyone from making any finalized asset prior to the project start.
I also make it clear that if a member flakes in the middle of the project, we still reserve the right to use the assets they’ve made, and they’d still be credited according to what they’ve done.
I believe this has definitely saved me some issues. Remember: Communication is key to good leadership.
Here’s my general schedule for the project
And just a redundant reminder, you really need to already know what you want by the end of the prep phase. You can’t start a project and then freeze if an artist asks you if you want a fullbody or halfbody sprite. Decide on everything you can before the project starts to leave little room for chaos!
We need to start with the delegation of visual assets, as well as the story writing, as soon as the project starts! Delegate tasks for art, for writing, for music, and for programming minigames/mechanics asap!
The practice I strongly recommend is treating the outline entries each as a title header, and expanding it into a full fledged script by injecting everything in between the entries.
Keep track of the word count of each segment, and try to have them roughly the same size.
To reiterate, you need to expand the outline into a fully fledged script.
The way of expanding I recommend is what I call “unfolding”.
Imagine you fold a piece of paper vertically many times… that’s your outline. Now, you need to unfold that by 1 level first everywhere.
Start unfolding from top to bottom.
Keep in mind that when you unfold outlines, you need to unfold all outlines the same amount.
If you come across an outline that isn’t going to unfold, and clearly will be a lot smaller than other segments, either merge it with the outline above and below, or add story depth to it manually.
Take for example the outline entries from above, after putting them in our Google doc (or other text editing app), we will unfold it.
Rana is conflicted and paints verdantian buildings as an emotional outlet.
Rana is in a small coastal village. She has a best friend who’s her neighbor. The village is being overrun by Thornvale (kudzu influence).
She's gifted a necklace, told to collect the herbs as told by the elder.
Rana meets a critters, and a girl with her head into the soil, presumably tripped over. An animal distracts her, and the girl vanishes.
Her parents catch her sneaking out to do the elder's biddings and reprimand her for going too far inside the forest
She draws spirits she saw before and hangs the canvas on a wall.
She goes out to find shrooms. Bringing her friend. With spear. Ventures too far again.
she finds a dead villager. She fetches her friend who wasn’t in the same screen, but when they arrive, there is no body.
Rana runs back with her friend, a little banged up from her frantic running. Friend alerts parents and elder.
Parents try to ban her from going too deep into the forest but she remains stubborn that she'll be fine, and the spirits she seldom sees are neutral.
Rana is sandwiched between her parent’s genuine concern and worry about her well-being and her peer's judgment.
Rana sneaks out during the night to the forest to the same scene, but finds nothing.
Rana trips and conks herself out for a brief moment.
A raven appears with her necklace in its beak. Rana asks it to drop it, but the Raven hops. Finally Jumpscared by raven lord.
Rana wakes up, tripped into the dirt. clothes all dirt and ragged, but necklace in hand.
Rana's friend cuts ties after helping her clean up. And still, she is weirded out and tells Rana off
The elder calls for her, she meets her parents, Mentioning that the imperium agent is there to negotiate a deal
As you can see, we’ve unfolded each of the 3 outline entries to roughly the same amount.
If the entry is header 2, then the unfolded sub-entries would be header 3.
Now, it has become incredibly easy to write the script! All you need to do is to just fill in the gaps really!
Just remember that you’re probably not allowed to unfold your outline outside timed jams’ duration.
I won’t tell you how to write your script, because there’s way too many valid styles.
The way we do it is with zero narration. We wrote our novel with a lot of narration, but because of the VISUAL aspect of visual novels, we decided to completely invest in a more literal “show, not tell” approach. We do not utilize narration. Instead, we use Rana (the main character)’s internal monologue and thoughts to tell things if needed. We decided to rely more on ATL and less on player imagination. You can play Phantom Echoes, Heaven’s Binds, and future games, to get a better understanding of what we prefer doing.
Regarding structure, we’d write the canon path first, then segment it out by what “day” it is for the main character.
So it would all be the same file in google doc, and we’d attribute a number to the segment, and make it a header so it’s easier to track. If you’re curious, The – stands for its progress, it’s a little silly but we use ++ for those not done at all, +- / -+ for those half done, and – for those finalized. It helps writers know where they should be visiting. Google doc comments help a lot too.
And then, we’d add alternative branches or arc as separate tabs
That’s just how we do it,
Here’s our latest syntax recommendation for writing a script (specifically concerning RenPy).
c state "Dialogue."
Use ##/ for actions or ATL
Use ##> for locations or states
Use ##$ for inventory or items
##? for choices
Here’s an example of our script with that guideline in mind:
##$ remove necklace from inventory
##> Forest Background (spirit realm). Rana flopped into the dirt Sprite.
r neutral : “Ugh…”
##/ Rana wakes up and kneels
r neutral : “What?”
##/ Rana stands up
ri : “... where am I?”
##/ With SFX, a raven appears before her, with her necklace in its beak.
##?
menu:
"Ask Nicely":
r anxious : “Hello little bird… is that my necklace in your beak?”
"Ask Aggressively":
r angry: “GIVE THAT BACK!”
"Attempt to grab it":
##/ Rana suddenly moves forward but kneels
##/ With SFX, raven hops away, out of screen
In this example, r stands for our main character, Rana!
You can add guidelines like these in the google doc header or footer, along with character names, so people are never confused.
You don’t have to follow it. I recommended talking to your programmer and making sure they’re accommodated.
What this does that it makes it much easier for your RenPy developer to program the game.
The hashtags at the start will comment things out, so it won’t cause errors, and you developer can always search for things that are meant to be implemented.
I’m not sure what system is the convention / default but looking at it gave me a headache, and I was certain I could do it easier with a script, so I did.
So, I kindly asked my friend Loom, the principle developer of Drawpile, to help me with writing a script that injects voice commands, and he blessed me with this perl script.
#!/usr/bin/env perl
use 5.020;
use warnings;
use utf8;
use Encode;
my %counts;
while (<>) {
my $line = decode('UTF-8', $_);
$line =~ s/[“”„«»]/"/g;
if ($line =~ /(\w+)\s+"/) {
my $key = $1;
my $i = ++$counts{$key};
print encode('UTF-8', qq{#play sound "audio/vo/$key$i.ogg" volume 1\n});
}
elsif ($line =~ /"/) {
warn "Line $. has a quote in it but no prefix\n";
}
print encode('UTF-8', $line);
}
Save that as script.pl
Now that you’ve done that, all you need to do is to inflict the script.
So install Strawberry perl, then open CMD where your script.txt is located, and run the following:
perl script.pl input.txt > output.txt
Your end result by running the script would be the same script, but with voice line commands ready to serve.
#play sound "audio/vo/m1.ogg" volume 1
m "What have you decided to do this time?"
#play sound "audio/vo/m2.ogg" volume 1
m "It will never matter."
#play sound "audio/vo/r2.ogg" volume 1
r "Since you're so adamant…"
###/ Rana enters spirit form
#play sound "audio/vo/r3.ogg" volume 1
r "I'll make sure that fate ends here."
#play sound "audio/vo/m3.ogg" volume 1
m "Try as you might!"
Ideally, you should add a new sound channel to your RenPy project to avoid conflict with sound effects. I won’t cover that here, but all you need to do is to just define a new channel for voice lines, and mass replace what you have in the script.
Oh, and the reason why we don’t use the “voice” channel is because they do not support the “volume x” parameter.
Now to complement this, you should remember to mass replace all the volumes of a specific character.
When a voice actor uploads their voice files, even if they’re normalized, because of their equipment differences, some are going to be louder or quieter than the other.
You should playtest the game a little and see which voice actor’s files are ALL too loud or too quiet, and mass replace them with the following regex replace trick in VSCode.
Search pattern:
(#play sound "audio/vo/.*r.*\.ogg" volume )\d+
Replace with:
$12
This will change all the voiceline commands for a specific character (in this case “r”) with the volume you’ve entered (in this case “2”)
You see the “r” in search pattern? Replace that with the character who you’d like to mass-adjust volume for. And you see the “2” in replacement? Change that to the volume you’d like that character’s voices to be.
1 is default, 2 is more, 0.5 is less.
In our recent project for example, Veyana’s voicelines were all much quieter than everyone else, so we just mass changed all of veyana’s lines’ volume to 4.
If you want to do it like how we did, then here you go! It’s a little extra, but allows you to change things around more easily.
Your script would obviously be segmented, right?
So, copy the segments of the script that you’ve written, and make separate .txt files out of it.
For example,
canon day 1
canon day 2
canon day 3
...
death branch 1
death branch 2
...
Then edit the original script in the following line:
print encode('UTF-8', qq{#play sound "A$key$i.ogg" volume 1\n});
and change A according to what the script will be running it on. So, to add voiceline commands to canon day 1, I would edit A to become c1
print encode('UTF-8', qq{#play sound "c1$key$i.ogg" volume 1\n});
Here’s the end result of running different script variations for different script segments:
#play sound "audio/vo/c1m1.ogg" volume 1
m "What have you decided to do this time?"
#play sound "audio/vo/c1m2.ogg" volume 1
m "It will never matter."
#play sound "audio/vo/c1r2.ogg" volume 1
r "Since you're so adamant…"
###/ Rana enters spirit form
#play sound "audio/vo/c1r3.ogg" volume 1
r "I'll make sure that fate ends here."
#play sound "audio/vo/c1m3.ogg" volume 1
m "Try as you might!"
Now when you see a .ogg voice file, you know exactly where it is from.
You can obviously expand upon this method, but it has worked really well for us.
Now the voice actors just need to record their lines, normalize it, then mass export into the .ogg files with the filenames, and dump them all into a single google drive folder.
This makes it extremely easy.
I’ve already decided on my game resolution, in our case, it’s always gonna be 1920 by 1080.
That should be the resolution of all the background assets, rather obviously. If it’s a single chair, it should still be exported in a transparent 1920 by 1080 canvas.
This will allow my programmer to make the game with a lot less annoying asset editorial.
Now for character sprites, I also put them on a 1920 by 1080 canvas!
This might seem counter intuitive, but by centering my assets in the same resolution, not only does ATL become a lot simpler, but also, my programmer won’t have to manually adjust every sprite for every scenario.
They’ll know exactly what coordinate would be for them, and can hot-swap assets really easily, which is the most important boon for doing this.
I export them all as individual transparent .webp files to save a lot of size on my final game.
This way, you can just use placeholders, and never face issues when trying to convey character heights relative to one another, or face issues with resolution/quality discrepancy.
I’m also not a fan of raw expression files. I’d rather make many copies of the same sprites with different emotions as separate .webp files. They’re super light .webp files anyway.
But that’s not something I can recommend doing in good faith so take that with a big grain of salt.
That’s about the best tip I can give you when it comes to visuals.
Obviously, you should try to match the style of your character sprites with the backgrounds, or vice versa, but it’s a lot more important for the art style to at least be consistent among character sprites, or backgrounds.
In other words:
Importance of style consistency in each CG category >>>>>>> Importance of style consistency between different CG categories
I recommend explaining these to your musician when delegating a task to them: 1- What is the music being made for? A location? A story? A character? 2- What does the music represent? What instruments would you like featured? 3- In what manner will it be played in the game and where? Will it be played as loop in the menu? 4- What does the music need to do? Should it be a passive background music? Should it grab attention? Should it be heroic?
I give musicians all that information, and afterwards, I give feedback to the music pieces as soon as I receive them. I compliment the portions I are think are good, and I articulate why some portions must change. With music, you get the best results with a lot of communication. Most musicians I’ve worked with prefer to talk in voice over chat, which coincidentally is what I prefer as well. I recommend vc because they’ve been VERY productive, for me at least. As I’ve said before, a lot of musicians in the jam scene are actually smurfing, so odds are, you’ll be fine even if you don’t know how to give good direction when it comes to music.
Just make sure to remind your musician that their music needs to loop, if it’s a background music.
Well, they probably will. Shit happens, all the time.
My only countermeasure is to be mentally prepared, and have someone on hand who could help me.
I cut my losses early with people who are way behind schedule.
For example, if my game needs 5 background CGs, and the artist has made not a single one in 8 days, I begin finding another background artist, either core or assistant.
I don’t care what the original artist thinks, or even if they agree.
I find another artist whose art style is close enough, and I just delegate different background CGs to them so there won’t be any conflict.
The more the merrier, really.
So get to know a lot of people even outside projects and jams, and don’t burn bridges.
I know a lot of newbie directors are either too mild, or too aggressive.
I cannot believe this I’m saying this again, but please do NOT get verbal with your team members, even if they disappoint you..
I’ve seen many projects that have gone under for petty squabbles.
The best “punishment” for not doing well enough in a jam project is getting new colleagues!
Remember, these are my personal opinion. I don’t think others must follow them. This is simply how I think.
Work the hardest in your team.
Nobody should be able to question if the director is putting in work.
You don’t need to show off that you’re working the hardest, in fact don’t. Just actually work the hardest.
Your team members will talk to each other and piece together what you’ve been doing anyway.
I can say a bunch of pretentious stuff here but at the end of the day, a project’s leader should be someone hardworking and capable.
I don’t want to state the obvious, nor do I wanna act holier than thou, so I’ll keep it short when it comes to behavior.
Be polite to your team, especially if they’re volunteering. It’s very important that you communicate your appreciation.
As a director, you are responsible and accountable for finishing a project with the labor you’re receiving.
You’re not volunteering, you’re assembling effort!
You’re directing a project not for “let’s see what happens” but for “I’m certainly gonna finish this game”.
Don’t be lazy, and don’t take it for granted.
At the end of the day, the project’s success is mostly on you!
Now to reiterate that into something more meaningful:
As a director, you’re responsible for making sure when people give you labor, their labor is turned into product. Okay?
This also extends to your team members and staff!
If you have people who genuinely care and are doing their part in your project, YOUR role is to make sure THEIR efforts come to fruition.
If you have 15 people doing their best in your project, and then a person not doing anything and taking nothing seriously, you’re betraying the trust of those 15 people!
There’s no sugar coating this.
If you were let’s say a musician, and you put your heart and soul for 20 days to make the game’s beautiful OST, and the game goes under because a background artist suddenly went “idc it’s volunteer anyway”, how would you feel? and who would you blame?
If I was that musician, I would feel atrocious, and I would blame the director.
If background art was an issue, why didn’t the director recruit more?
If the director couldn’t recruit, why didn’t they use some free assets to make it work out?
If none of this was possible or thought about, why did the project even start? Why wasn’t I notified sooner?
I would ask these questions if I was that musician. Obviously, I would also feel angry at the apathetic person, but mainly I’d feel disappointed in the director.
Recruiting people who do not want to contribute meaningfully is okay for assistant roles, but I absolutely would not recruit any of them for core roles.
Yes, my bad. I absolutely scope creeped this post, then had to scope knife it.
I really love the game jam scene, and I’m very grateful for the helpful community.
It’s a very powerful and beautiful thing to see people come together and trust one another.
I hope to work on more projects, and get to meet more talents.
Here’s a bulletpoint of random suggestions. I believe at least one would be helpful to you.
Thank you for reading my unpolished ramblings.
Feel free to contact us here if you need more tips or have questions:
https://discord.gg/2sbnwze753
Did you like this post? Tell us
Leave a comment
Log in with your itch.io account to leave a comment.