VN Others [DevLog, sweat and cry] Athendeis' diary for his first project

Athendeis

New Member
Sep 16, 2024
1
0
Hey!
This thread will serve as my log: a way to track my progress, vent my frustrations, and who knows, maybe one day it will help another beginner as a guide to all the mistakes to avoid.

I've known about adult games for a long time, but it was really during the COVID period that I got seriously into them, probably spending way too much time on them instead of working.
Like many, the idea of creating my own game eventually sprouted in my mind.
However, one small detail: I have absolutely no artistic talent. So, it’s an impossible task, right?
Well, at least it would have been before the rise of AI. Nowadays, everything seems easier, almost magical! Or not.

A bad artist, a poor writer (who also speaks terrible English), and a middling programmer can create a game that’s not too bad?
Spoiler: probably not, but I’m going to try anyway!


So, I want to make a game... Where do I start?
"Hey Siri, how do you create a video game?"
"Hey ChatGPT, Siri sucks. Can you help? "

Failure, end of thread.


In reality having spent a lot of time on these games has already given me some initial insight. I’ve often dug into files to unlock certain scenes.
Moreover, I consider myself a false beginner. Even though I haven't coded anything from scratch since my studies, I have an engineering background, so going through documentation isn't an issue, and I know the basics of programming.

I already know that it is better that I start by doing a visual novel because it's probably the least complex to create. I also want to avoid Renpy, as it naturally encourages awful design patterns.
So, my choices are: Unity, Godot, or creating my own engine from scratch (which I considered for about 25 seconds before getting a headache).
Unity recently stirred up some controversy with its licensing model, and besides, I have no knowledge of C#.
Godot, on the other hand, seems more intuitive, flexible, and it uses GDscript, which is "similar" to Python.
(Note that ChatGPT is really bad with GDscript, so don’t count on it for help with that!)


So, Godot, here we go!
"Hey Siri, how do..." Okay, I’ll stop.
"Hello YouTube, Godot tutorial: how to create a game."


After a whole day of watching tutorials, 10 hours spent making poor Mario clones, I should finally be able to start... Lol.
Personally, I can’t fully grasp something unless I dive in directly. A few hours spent exploring the menus, the different nodes, testing a few things by myself with the help of the documentation proved much more effective than YouTube for getting familiar with the engine.

Finally! I can make things! Ugly and somewhat broken things, but they’re mine! The VN creation can now begin.
Where do I start?

The central element of a VN is probably the "novel" part, so the text display.
I need a dialogue box!
This shouldn’t be too hard, right? It’s just a box that contains text.
I quickly decide to store my dialogues in a JSON file as a dictionary array, and my dialogue box will just need to fetch the text. I also add a few features inspired by Renpy, like the ability to go back, fast forward, etc.
To make the text a bit livelier, I use a timer to display the characters one by one.
And... It works! I’m happy, programming is super easy.

Problem #1: If the text is too long for the box, it looks ugly.
Solution: I store my dialogue lines ahead of time and, if they’re too long, split them into "pages" while managing the indices so my box doesn’t get lost. This breaks my backtracking system a bit, but overall it works.

Day two with Godot: I go to bed happy with my progress.
But just before falling asleep, a little voice in my head reminds me that I haven’t tested what happens with text that has tags. I ignore it, telling myself I’ll look into it tomorrow.

The next day, I test the tags.
Problem #2: The tags work, but due to the character-by-character display, they appear on the screen until they fully load.
After some struggle, I come up with a system using dictionaries to differentiate between words and tags, and display everything correctly.
It works... almost.
Remember how I split long texts into "pages"? Now, the system counts the characters in the tags, which aren’t displayed, and everything is broken again.

And this is where the nightmare began, and the idea of this devlog came to me to share just how much I’ve raged.

At this point, my code contains tons of variables to manage where the text is, what "page" we’re on, and what the previous non-tag character index was.
And because I suck, my first variables are decently named "index", "index_page", but the others, due to lack of inspiration, are called things like "test", "test2", "toto", "tata"...
Over 300 lines of code later, it’s become too hard to navigate, and solving my index problem is going to be a nightmare.
So, reluctantly, I decide to scrap everything and start over, this time with a cleaner approach.


And after more troubles, let's return to the present
I am proud to present to you the very first element of my game (and I hope not the last):
The dialog box!

image_2024-09-17_005018543.png
After two and a half days of work, and around 250 lines of code, it:

Reads JSON files to display the text, no matter the length, thanks to a full reconstruction system.
If there is :
[{"name" : "Name", "mood":"happy", "text": "I am a cool Dialogue Box!"},
{"name" : "Name", "mood":"happy", "text": "blabla blablablabla blablablabla blablablabla blablablabla blablablabla blabla"}]

there will automatically transform to:

[{"name" : "Name", "mood":"happy", "text": "I am a cool Dialogue Box!"},
{"name" : "Name", "mood":"happy", "text": "blabla blablablabla blablablabla blablablabla"},
{"name" : "Name", "mood":"happy", "text": "blablablabla blablablabla blabla"}]

Handles tags and variables (e.g., "Hello, my name is $name").
Sends signals for character or mood changes (and I can easily add more).
Fully supports backtracking and fast-forwarding.
The character-by-character scrolling effect works (a click reveals the whole text), and I won’t let anyone disable it after all the trouble it caused me!

In short, for now, I don’t see what more I could add.
(If someone tells me there was an easy way to do all this with a built-in Godot function: I’ll shoot.)

Here’s a rough to-do list for the next steps:
Research design patterns for VNs (no idea where to find this, maybe by digging through the files of other games made with Godot, but I don’t know any).
Create a settings menu.
Start looking into AI models for sounds and music.
Maybe finally start the VN?