Hello, there my lovely patrons, how are you all doing? Today I'm here to talk about the software I use for writing text, what do I use to put the text inside the game, how the game reads those files and the language Godot uses, why I choose Godot over Ren'py, and so on. So let's go through topics, shall we?
What software do I use to write the game's story?
I use a piece of software meant to write books, documentaries, essays, comic scripts, screenplay, and so on. Its name is Scrivener and it's one of the very best writing tools you can find. If you want to write concise stories and be able to check on notes, important info about world-building, what character is narrating your story, set goals for your documents, link your documents to go to other documents inside the project use a narrator to actually speak the words you're writing on your story so you can see if they feel natural and spot more issues, Scrivener is your best option. Actually, Scrivener just got updated to version 3.0 for Windows and I did buy it as soon as I saw that, I'm always saving money to spend on this game and Scrivener is what makes it possible for me to find myself into so many routes.

For example, in the image above I actually linked the answers to their respective route documents, as soon as I click on one of them Scrivener will divide the screen into two and open the next file I need to access or edit. See it below.

You can see that the title on the top left one is ACT2, while the title on the top right is "ACT2-Set2-F-Answer" which means I just clicked on the first blue line with the text: "To the hotel, on the lounge maybe?" That's actually one of the possible answers Aiden can tell Wagner, so the same way when you as the player chooses that answer you will go through the new route, I also need to create a new document and make a link between the text and the document for easy access.

In the image above you can see all the documents, some of them are inside folders, I could click those folders and Scrivener would show me all the documents inside in the format of little squares with the titles and some information inside them if I want to know a resume of what it's written on them. They can also be separated by the narrator, for example (if you're writing a story where more than one Person narrates the book, it even creates a timeline for you, just check the example below).

So, in a way, if my game had Wagner and Karnal also narrating stuff instead of the player, and if instead of a game it was only a book, I could arrange the documents by chapters and select Wagner to be the Greenline, Karnal the Redline and Aiden the White line. This is one of the most interesting ways to arrange and show the files more understandably. Of course, I don't use that feature in my game because of the structure of the files I choose, but it's an option. Instead, I use status. The labels which are responsible for the colored lines you see above are used more to differentiate the Acts from the Answers, from the Conditional Answers type of file. They are more aesthetic to me, but they help me know as soon as I click a folder, like Answers, if there's an ACT file inside of it, since ACT files are labeled in Blue, and they should be inside the ACT folder.
In my case, I use the Status way more than Labels to identify the stage of a document on Scrivener, like this:

So, Scrivener lets me create all the files I need, organize them in a folder, see up to four documents at a time if needed, let me click on hyperlinks, and open other files directly instead of making me navigate through the folders every time I need to check something. I have inside my project one document that describes all the areas of the resort and every single thing the resort has or do in specific hours so I can always check that if I need to know what to say in some cases. I also have another section just to describe the profiles of every character this way I'll never just create stuff without remembering if I wrote it before or not. It's easier to make the story without plot holes, and it's very useful. The status (the text you see in the boxes looking like a watermark) tells me if the document is finished (AKA I already put them on the game), if I need to start them, and so on.
Any time I need to create a new document, I can literally press Cntrl+D and duplicate an empty layout and keep doing it then renaming their titles while necessary.
So in the end, using this software like this, which have so many cool features just to help us not to get lost inside our stories, and even have some productivity tools like Word counts and goals of how many words you need to write to be happy with a document length and even having a narrator narrating your text is a godsend. It's way easier than using any kind of basic text editor. I hope that with those few things I have shown you guys you can now understand why I work with Scrivener. If you're interested in learning more about Scrivener for Windows, here are some videos for you guys:
Scrivener 3 for Windows: Top 10 Best New Features - YouTube
Outlining and Structuring - Tracking Threads on the Corkboard - YouTube
Scrivener | Literature & Latte (literatureandlatte.com)
What I can say to you is this: If you want to make something that involves you writing a lot of complex stuff where you need to keep track of changes in the world, dictionary for words you create, name creator (yes, Scrivener has a Name generator), and you know, be sure you're not forgetting anything because everything is easy to access as long as you organize things well with what the software gives you, which is a lot, by the way, I recommend Scrivener. You can test it for free for 30 days and as far as I could tell when I bought Version 3, I paid around 35 bucks. So it's not that expensive either.
What kind of text files does my game use?
Ok, so first of all, Scrivener creates a project with the extension scvr. This means that's not text, nor it should be. Scrivener can export to any format you want, in any way you want. However, in my case, my game needs to receive the text as Data, not just common text. Programming is way more about a language you can work with rather than just asking some magic software to read the text and throw it on the screen for you, everything needs to be organized in a way the engine can understand, then read and display the correct data.
In my case, the format my game reads is JSON. I can explain really quickly what a JSON is, but I'll let a link for the full explanation at their website. But essentially, JSON (JavaScript Object Notation) is a file format that stores data in a simple way so other codes can read it. You can organize and create the data the way you want as long as you always respect the rules of the file. In my case, you can say that JSON serves as a sort of Library, where all the text for the game is stored, but not only the text, with every text you see on the screen the game also needs more information: Who is talking that text? Does it have any sprites that need to be shown? Is there any music to be played or whatever is playing right now can continue playing? Do I need to change the background? On what side the sprite should be put, does it have any animation that needs to be played? With JSON I can encapsulate every information the game needs, and in return, the game will be able to read that information, compare them with the correct files, load everything, and display to you, what you should be seeing.
Let me show you a simple example:

In this image, you can see Karnal worried on Day1 (Day2 ingame), while Aiden says to him he's sorry for being on the tiger's way.
In the JSON file, this is what is stored on that single dialogue:

You can see that there's TEXT, SPEAKER, and CHARACTER sections in blue, while they each have values corresponding to them, Text is the text you will read, Speaker, if the character's who's playing and Character is actually referring to the sprite that should be displayed onscreen. Note that Character Section has subcategories, such as Name, Head, Body, Side, and Animation. The name refers to who the sprite belongs, the head refers to what expression the sprite will have, the body actually means what kind of clothing he will be using, side means where the sprite should be displayed and animation means what kind of animation the sprite will do. I tend to use shake a lot in this game, but I am trying to insert Jump and Zoom In animations too.
Let's see another example:

Here we see Aiden saying "Well..." while three options are displayed on the screen for you, the player, to choose from.
Here's what's in the same section as a JSON file.

You can see that the speaker and text are below while the Answers are above, this is just the way the editor I created organizes the information, the order does not matter here, what matters is the content inside each key in blue. Note that I have a square bracket opening after Decisions -[- and just after that I have a curly bracket opening below it -{-, in JSON, a square bracket means we have an array - [] - with multiples objects -{}- which as represented by square brackets and curly brackets. Each object can have multiple values inside, in this case, each "decisions" have multiple objects containing the Option: The text on the option you will choose, Affinity: an object which contains the character that will receive the affinity and the points the affinity will receive too. The Points could be negative, meaning they will be decreased inside the game. Anchors: an object that can have multiple route objects, my code usually check in order from top to bottom, so if you could access a route with more points, you would have more route objects inside the Anchor. See it below:

Take the example above, on Day 4 (Day5 ingame), when you answer an S TYPE option, you will receive 2 points for the character that answer belongs to and then note that Anchors now have more than one object inside (remember an object starts when a curly bracket opens{, and ends when it closes }.) Since my code reads the routes from top to bottom, the first route always is a conditional one, which makes the game check if you have enough affinity to access that route. In this case, you need 36 points to access the S Route, 19 points or more to access the A route or, if you don't have enough points, you always will enter the base route which is the last.
How do I make an scrv project transform into a JSON file?
So you can see that, from a Scrivener project where I only write text, suddenly I need to grab any information I'm writing on Scrivener, such as who is talking, what expression they have, do they perform any animation, what route should that answer lead, is there any more routes to add or just one? All those info's I break down in a special software I created inside Godot, which will then save them in those formats.
Remember, there's no software you can use to write a JSON file, you have to do it by yourself. And even if someone makes that software, the chances the software will work to your desired way to save info is minimal to zero. That's because as long as you respect all the brackets and commas and dots you need, a JSON file can have any form you want. Meaning you could make it simple or extremely complex depending on how you need the information to be delivered to your project. In my case, I need a file my game can read, and have the data split easily to each corresponding variable.
So this means that the only way I can convert the text from any source to JSON is literally doing it manually and always checking for any error, a JSON file without a comma won't open. A JSON file with a missing bracket won't work. There is software online that actually checks your JSON file and tells you where you forgot to put a comma or bracket or anything. However, this method is too risky, too time-consuming, and frankly a pain in the ass. That's why, since Godot reads JSON files natively, I created a program inside Godot that will read, create and edit JSON files created specifically for my game.

You can see above the exact same things you saw on the last image I've shown you on the JSON file. Go check it. You can see the decisions, the anchors, and more information. All of that is actually inside the JSON that my software reads and organizes correctly so I can edit or delete information if needed. It took me around three months to make this software, so if you think it's overly complicated when you look at the JSON file I showed you, believe me, it is. But it also makes sense when you start to understand it. Sadly, writing a JSON with your hands and making software actually make it for you is quite different, and takes a long time, especially because, as I said, there's not a magic potion for you to throw at your CPU and it will make whatever you ask it. You need to understand the code, and it takes patience and a lot of will to do stuff like this without prior knowledge.
So, yeah, I literally copy the text from Scrivener, check for typos on Grammarly, then I throw the corrected piece to Scrivener again and little by little I start creating the routes, the Dialogs inside each route, the Decisions, the Backgrounds, music, sprites inside each dialog, the anchors and the points gained inside each decision and so on. It may look complicated but believe me, it's way easier than writing each entry inside the JSON file. Believe me when I say this: You WILL forget something, and you WILL have problems trying to open a JSON file that will never run because something is missing. It's better to have something more visual and more organized like the editor I created.
To know more about JSON go here: JSON
How the game reads those files?
Well, Godot reads the JSON file and then he places every single information inside a Dictionary, a kind of variable that can hold lots of pieces of information on Phyton/Gdscript, with the JSON file opened and converted into readable data inside a Dictionary variable on Godot, I can then with my code, which is very complex and essentially it's the brain of my game, read that info in the correct order and display them on your screen. Remember that, the order of some info inside an object on JSON doesn't matter to my code, but the position of the Dialogs does. When Godot converts JSON to a Dictionary, it does in the exact same order on the JSON file, meaning the first Dialogue will always be first on a route, and so on. That's why no matter how the data is there, it will always display to you the correct text in the correct order.
I know it's weird, but that's the best way I can explain to you: Godot can read the data inside the JSON, then he can convert that data into variables inside a Dictionary which will then be read by my code and put into your screen for you to read and see.
What language does Godot use?
Godot has two kinds of scripts that can be used to create a game, one is C# which is a new feature for Godot 3.0 and another is GDScript, which is based on Phyton. Meaning essentially that GDScript and Phyton use a very similar Syntax, making them very friendly to one another, you can even say they are the same language even if they are not. You can use C# to create your game on Godot too, but since Just Friends started on Godot 2.0, it's always been made in GDScript.
For more about GDscript, you can access this page: GDScript basics — Godot Engine (stable) documentation in English
Why Godot instead of RPGMaker or Ren'py?
Now we are getting more personal.
The short answer is: Because I prefer using Godot.
But the more complex answer will take time but if you're reading up until here, I guess you want to understand the machinations behind my choice.
Ok, when I was projecting Just Friends, I wanted to make a Visual Novel where I could easily fix text typos and mistakes. Meaning I needed a piece of Software that could essentially create the game text in an organized way. I see a lot of games falling into the trap of being so absurdly huge with more text than a Game of Thrones book, and even in their revision 3.0 those games still have misspellings such as "I could care less" which is wrong by the way, and other grotesque errors. I wanted a piece of software that would allow me to program inside it, a way for my patrons to tell me where I was wrong on my text, what words have I spelled wrong, what corrections I could not see while putting the text into the game but you guys could. Instead of having you coming here and saying 'The text inside that part is wrong, fix it and I would be spending hours just to find the place where the text was just to fix one or two words.
I tested Ren'py, and I quickly disliked the way I would have to program just to make the game have that feeling of being a game that's not generic on Ren'py. You can see when you play any game, that the game is made on Ren'py without too much trouble, after all, it's hard to modify stuff there. I would have to study way too much just to understand the working machinations of Ren'py.
There are also examples such as Camp Buddy (Which is an awesome game by the way) where a lot of YouTubers who played it complained about the game struggling to run, freezing every three dialogs because of the sheer size of the game, and Ren'py freaking out. I just figured out that if I ever make a game that big I want it to be optimized, and to optimize a game on Ren'py means literally trying to fix Ren'py source code. A thing I'm not into.
Visual Novel Maker, which is made by the same developers of RPG MAKER, is overly complex and less user-friendly than Ren'py or even RPG Maker. Yes, making a Visual Novel on RPG Maker MV is way easier than using their software made to create Visual Novels. And it's very expensive, so I kissed that software goodbye.
Then, there was Godot: An engine created for 2D and 3D gaming, open-source which is in a constant influx of updates, the team behind Godot, just like me, gets their revenue over from Patreon from a lot of game developers who want too much to be free from the shackles of Unity and Unreal Engines, which are paid engines that consume a very large chunk of your work if you make money with it. Have you ever noticed that no Visual Novel is ever made in Unity or Unreal, hell, most or all Indie developed games do not use Unity or Unreal. It's too expensive to do so.
Godot however was a tool I was familiarized with, I was already using it to create and study game development for a good while at the time, and after a lot of brainstorming here, I came with the decision that if I needed something specific, it would be way easier to make on Godot, which is way more friendly than Ren'py and other engines to make Visual Novels.
That being said, Godot is not a Visual Novel Engine, it's a Game Engine, it creates games. Any kind of games. Which means it could create a Visual Novel too. All I needed was to create the brain of the system. So I decided to use JSON as the file that would contain any written information, so if a character would appear on that dialogue, I would put it on the JSON inside the Dialogue that information belonged.
After creating the JSON architecture, deciding how the information should be stored there, I started to create a reading system inside Godot, that system would literally read the file, split the information into the correct variables, run through it every dialogue, and display it on the screen for the player. The concept was easy enough, but you need to remember that any kind of system you need to make from scratch, especially into a game engine no one did it before, you would have no information anywhere. Just to make Just Friends work on Godot (It was first made on Flixel), took me around seven months. Seven months just to make sure Godot could read the JSON correctly and the information could be displayed for you guys.
But after the brain of the game was done, all I needed to do was to create the menus, create their individual scripts, what happens when you click on a button, how can I send the information to the brain so it could continue to the correct route, what would happen if you click on the Save Button, etc. Every screen on Godot, every visual you see, Godot is responsible, and frankly, I could arrange the menus the way I wanted, and it was easy. To edit menus and create concepts of UI on Godot is a breeze. Godot is easy to use especially for simple stuff, and after all the information is loaded and ready to be used, all you need to do is to create the shell that will be used to display that data, and the shell is easier to do than the brain. The script that reads the JSON file and segments its information is complex and very long and well done. Godot already has everything you need to create menus, use physics for your game, to make your dream platformer if you want. It's not an engine made just for one type of game, but for any type of game, which means you have to do some things your way instead of relying on other people's code.
Once a Patron asked me: "Why Godot?" and I answered him "Because I want to control my project, and not be controlled by it". Maybe the way I said it felt harsh, but it's true: By using a Visual Novel Maker, I'm putting my project into other people's view of a Visual Novel, since it's their engine to make a Visual Novel. By putting my project into an engine that is made for you to make games, and not ONE TYPE of game, I'm relying way more on my code, on my brain, and on my guts rather than relying on other people's code. I would have to rely on what the Ren'py team thought was good to use as a Script Editor, I would have to rely on their system to edit, correct, and create texts, I would have to learn the way they wanted the code to work for the game to work. In exchange they would have given me all the UI elements programmed, an editor they did for me to edit scenes, and so on. But I thought it was confusing and frankly, not practical for big projects it would be way easier to lose myself later on the project.
Every time a Patron comes to me and says "there's an issue on this part" I can figure out where it is and what's happening so quickly because probably I forgot to add one data on the JSON file. Every time a Patron wants to suggest me a correction I can go to a specific Website where your suggestions go and I can compare the original text with the new text and decide if that correction makes sense. I would never be able to put that kind of system on Ren'py. You would never see this kind of system on Visual Novels, and if they do, they had to go through hell to make it, while I did it in two days without headaches. That's how easy it is to use Godot sometimes, once you do the heavy part, the rest is easy.
Now, is Godot perfect? No. I don't think any Game engine is. In any engine, you will suffer hardships and will have to work your ass off to make something good. But is Godot perfect enough for me? Yes.
That's why I decided to use Godot. My game still has lots of bugs and issues I need to address, I love programming but I'm not the best developer and I'm not the most versed one in the world. If you ask me how the game read a file I would need to go to my game and read my code for a while to remember, I tend to forget those stuff because those are things I do once or twice and then I forget because I do other things. Of course, all I need to do is run through my code for ten minutes and I understand what's happening, then I can continue working on it, but you see, would be great if I could remember stuff without having to consult the work before haha.
Anyway, that's your reason over there. I think Godot works better for me, for my project, I use all the languages I want to use and I do it my way, I don't have to bend to a system that I have no control over, and if my game starts glitching or having trouble to run every five seconds like some other big games, I can just check my code and find what is making the game behave bad, and fix that. Instead of being tied to a system that I don't agree with it.
Will you be able to make a Visual Novel with Godot? You can do any game with Godot, you just need to do your research, and try it. You can do it with Ren'py, VN Maker, Unity, anything really. Whatever suits your needs.
I prefer to have control over the code I write rather than rely on other people's work that may not work the way I want. Even if it's harder, in the end, it works better for me.
What about the future of the game?
Well, Just Friends is now on alpha 0.26.1, I pretend to make some new Demos with more content for Itch.io eventually, I'm just thinking about what should I do, but I probably will create specific modifications od the third and fourth days that end earlier than what you guys have so people outside patreon can have access to newer builds. However I doubt that the Itch io builds will pass over the fourth day (Day 5 ingame), that's because technically Day4 is the middle of this game. I don't know how I will do it or if I'll do it, I'm still thinking about it. For now, and always, you guys here on Patreon will be my main concern and focus. I'll be working no what you guys prefer to have me working, so Tier 3 and 4 patrons, go on and vote on the next month's workload, the pool will end in less than a week already.
There are artworks to be completed, another character route I need to create, music I need to fetch and buy, sound effects, other menus, and even make an overhaul on how the Gallery should be working. I'm still thinking about those things you know. For now, the music in the game is all royalty-free with links for the source and credits are given, but if possible one day I will pay someone to make an OST, again, if possible, for this game.
There's also a possible fourth route, but that would be a Patron-exclusive tier and frankly, I would only do this after all backgrounds and characters are done on the art department. There are lots of rules I need to think about for this to work, and frankly, there are also the artist costs to be included in the tier besides the money that I need to work on it so yeah. That's a thing for the future if it ever happens.
So for now, I'll continue working on the game every week, every day, sometimes more than you guys can see me working because I'm always trying to find ways to bring more patrons here, to bring you guys content, and all that. This is by far, the longest Development Update I did so far, I've been working a lot with the story of the game, and I thought it would be fun to tell you guys, or at least try to tell you all, as far as my knowledge goes, in a simple but interesting and informative way how my work is done, what I use and how the machinations of the project work.
Lots of people think that Visual Novels are simple and easy because it's just images and text, there's nothing much in it, but they have no idea of how hard it is sometimes to make everything work properly without issues. Yeah, it's a simple game, but not without its shortcomings and troubles to do so. If making a VN was simple, it wouldn't require so many people working together, and we wouldn't have more than half of them never seeing the light of day. Remember, no game is easy to do, and for some creators like myself, we do it alone with only the income of you guys as help. And it's because of your help here as a patron that I can actually work on this game and you know, have a living out of it somehow.
So thank you all for your help. Remember that by the end of this month I'll be making another Monthly Thanks Message unless something urgent happens, but I'm sure I'll be able to.
For now, that's it, I hope you all have a nice day over there, and just FYI, this post alone has around 5.298 words.