Home Artists Posts Import Register

Content

Alright, v0.4.0 has been out for a few weeks, and while the primary purpose of these development logs has always been to keep you all up to date on what I've been up to, I think it wouldn't hurt to do a write-up on everything that's been added for the sake of chronicling the progress on the game. Here we go!

Improving on the Dialogue in front of and behind the scenes

I've done quite a lot of work on the dialogue system the game runs on, from internal things, to the way things look and the way they handle. Let's start with the pretty pictures!

Breathing a bit more life into the UI

The dialogue UI has always looked somewhat barebones, ever since it was added to the game. This wouldn't have been much of an issue if it was just an aesthetic short-coming, however it made reading the heaps of text a little muddled, especially when it came to discerning who was currently speaking. So let's fix that!

(Who doesn't like a good before and after?)

As you can see, I added a small animation to the names coming in, as well as a funky little line behind it that pops in and changes color based on who is speaking!

The color aspect is something that a lot of other visual novel interfaces do, and it's something I've wanted to do for a while, however I didn't want to bother having to assign colors to each character one by one... turns out I didn't need to do that!

(Well would you look at that?)

I've actually been doing it for most of the characters this whole time! You see, during battles, the text that contains the more important information uses bold and colored names to increase readability, and these colors are unique to each opponent. I could've just used the same color info the whole time!

Are these magic tricks as clever as I think they are?

You may have noticed a new option in the settings aside from the "Warn before fight" discussed in earlier logs. This new setting is the wordy "Stop Dialogue F. Forward at Interest Points"... really there was no better way to describe this.

This is something I've noticed while going over dialogue a bunch of time while rewriting it, as well as replaying the game to add new scenes to existing content: there is a lot of repetitive generic dialogue for all the activities. Which is fine, that's just the nature of repeatable activities in a game. However, I ran into an issue where the fast forwarding feature, which quickly skips over all dialogue for replay purposes, ended up being far too convenient. I found myself not only skipping over dialogue I had already seen, but I also new dialogue that appeared when the next condition has been met for a storyline to continue.

The fix to that? It's of course related to this new setting. There are now "interest points" laid out across the various dialogue scripts, which stop an active fast forward. I've placed these interest points mainly at the start of new story events happening, so that it will prevent anyone from accidentally skipping through new things happening.

Is this feature as clever as I think it is? Only time will tell... of course, I also needed to add an option to disable this feature, for people who truly have already seen all of the dialogue and do not want to have to re-activate the fast forward.

And a little something for me

Have you ever wondered how all of the dialogue in the game is actually stored? Have a peek:

model;BorikModel;0.75
model;BorikModel;0.8;0.7
expression;BorikModel;mouth_smile
if;flag;Norman;5;==;0
    say;;Or maybe it could be this guy? Well, now you're just judging a book by its cover, but he did have that [i]rowdy[/i] kind of look to him. He seemed to be minding his own business, enjoying his food as he watched people in the room walk by.
else
    say;;One of the patrons also stood out a bit: he had a rowdy kind of look to him, what with the tattoos and stuff. He seemed to be minding his own business, enjoying his food as he watched people in the room walk by.

if;flag;Norman;5;==;0
    say;;Could it be any of these people..?
else
    say;;... Cedric still hasn't said anything, so you decide to look closer at one of these people.

menu
    Left person.;General;0;0
    Middle person.;General;0;1
    Right person.;General;0;2

(An excerpt from the new main quest.)

They're actually just plain .txt files! As you can see, everything that happens during the scene is written down here: from the text that is spoken, spawning and moving the character sprite, changing its expression, to branching logic and choices. There are a bunch more commands that you don't even see in this short excerpt!

To anyone familiar with coding, you may be asking yourself: this almost looks like a script, what language is this? It's actually an extremely simple scripting language I made up myself for the game! (You could probably tell that from some of the questionable design choices in the excerpt...) As you can see in the use of indents, the syntax is heavily inspired by Python, which was also a large inspiration for GDScript, the custom scripting language that the game engine Cards of Gluttony uses.

Why am I bringing this up now? You see, until now, I've been writing all of the dialogue by hand in a simple text editor, which has worked well enough for a while, but it became very clear I needed to step it up if I'm going to continue working on the game. Which brings us to today:

(UX is my passion.)

This is the one new thing I can talk about in this this log as it's what I've been working on ever since v0.4 was released. You see, a pretty major time sink while working on the new content has been writing all of the dialogue, especially because of the large amount of branching. The script that the excerpt from earlier comes from contains an egregious 762 lines, and that is just for that one scene of the storyline alone.

Combine that with a shoddily designed scripting language without any kind of auto-completion and error-checking, a lot of my writing sessions consisted of me repeatedly checking my syntax manual, writing a chunk of dialogue, and then running it through the game to make sure I didn't make any typos or errors.

If I did anything visual like changing expressions on the character sprites, or animating their movement, I would have to wait until running it in-game to see what the values like positioning and speed looked like. Repeat that every 2 minutes or so and you probably get the idea of just how bad this workflow was.

(I used to have to manually check the file names of each separate facial expression sprite every time I wanted to change them, and without even seeing what they would look like on the actual model, dear god...)

And so I decided I needed to create a tool to help me write dialogue without all of these issues weighing me down. It's still very much in the early stages and I'll have to make sure I design it in a way where it's actually fool-proof and less error-prone than writing them by hand. That combined with the fact that the dialogue system has a ton of capabilities, many of which were slowly added over time, means that this is going to be quite a massive undertaking. It'll be well worth the time though, you might even say it's necessary at this point in the game's growth.

Not quite modding

Now this also brings up an interesting possibility: releasing this tool for public use. Since the point of this tool is to make it user-friendly and convenient, it shouldn't be too difficult for someone other than me to use it. With the way things work, the tool can only be used to create one-off, self-contained dialogue that can be played on its own for fun. Would you be interested in something like that?

This isn't the first time I have thought about letting people make their own custom content for the game though. The occasional shower thought about letting people load in their own art for custom characters has also passed by me from time to time... that might be looking too far ahead, but I just wanted to give you a peek into the kind of random thoughts and ideas I have regarding the game's future.

Significant change to the philosophy of card acquisition and crafting

Alright, after all of that hefty dialogue talk, we could use some discussion about gameplay for a change! And boy do I have a story for you:

All the duct tape has caught up to me

As I added more cards into the crafting pool, I realized something. I've largely shifted away from giving away cards as a reward, opting to instead give materials that then have to be turned into an actual card. This has two advantages:

  • Actually making use of the crafting system. When it was first introduced, I just plopped in most of the cards that were in the game at the time and moved on. However, I later realized that since most desirable cards come as rewards from battles, this was an issue as the crafting system quickly became obsolete. Now it works quite nicely in tandem with the battle rewards!
  • A choice in rewards. You may have noticed in the update that both Norman and Ratko give a crafting material that can be used for 2 different cards. In an earlier update, Arnold did the same thing, except one card needed 2 of his material. In other words, this design naturally lead to a more flexible reward system, allowing the player the choice in which card they wanted.

But here's the problem!

As I added the new cards to the system, I realized something: Norman's watch is the material required to craft one of the two cards it offers. However, seeing Norman's watch on the material list would immediately spoil not only the fact that he was a Fattener you were going to fight at some point, it also pretty much spoiled the entire build-up of Main Quest 3.

(That which would've been a spoiler.)

And so I thought to myself: "Oh, easy! I'll just hide the crafting option until the storyline is finished!" So I did just that, and suddenly something clicked: why don't I do that for every card in the game? A lot of the cards are, in fact, designed for the Opponents first: I tend to think of a deck theme and create cards that work well in combination with each other. Alright, so the idea now is: what if each card becomes craftable after you finish a battle with the Opponent that "introduces" it? And indeed that is the result you can see in the game.

Aside from having a "signature" card that you can only make one of using a special material, Opponents will also unlock "basic" cards that you can create repeatedly without needing a unique, limited resource. And so, as you progress through the game, the crafting menu gets slowly expanded with more options, which also adds a really neat sense of progression, while at the same time keeping the pool of cards smaller at the beginning to avoid overwhelming the player.

And that's it!

Turns out I had quite a lot to say, because a lot of thought had gone into the many changes that took place within this update. Seeing as all of the new cards are already visible in the update, I'll skip out on the Card of the Month this time.

You probably already know how I end these by now: thank you for reading this and supporting the project!

Comments

nonyabizmkay

You read my mind with the "What language is that?" bit. We've all been down that road: "YAML? JSON? Nah, we're gonna do our own thing." Ah well, if it works, it works. Got a name for the format yet?

oakfells

I haven't even thought about giving a name! But now that you mention it, I kinda want to. I'm sure some kind of clever pun on cogs will come to me at some point.

Julian Wren

Keep up the good work!