Devlog Week 15

Another week, another devlog!

Here’s what I did this week:

  1. I discovered a new technology called aye, it’s super cool, you just have to talk to this person in a chat and they respond with everything you want, they can also draw images for you super fast, you just have to describe it! I’m pretty sure there’s no art theft involved in it whatsoever. I asked if this aye can help me make games and it responded it will not just help, it will make them for me instead! How cool is that ? My favorite part of making art and games is the idea and not the process itself, who even likes making art ?
  2. I think my studio is too big, those lazy worthless workers do nothing all day but waste my money. I think it’s time for another layoff, to appease the investors, I need my bonus to get the newest Porsche model, I literally can’t be seen around with the old model, it came out two years ago!
  3. I’ve decided to pivot the game to a dating sim instead, you meet people, talk with them, go on dates…etc. I’ll just find one or two obscure games no one has played and copy from them, it’s super easy and nobody will catch me doing it. I’ll even use this aye thing and buy a tutorial that comes with a project I can just modify and ship it. Gamers don’t care about quality

For legal (and also non-legal) reasons, all the above was a (sad) joke. Here’s the real devlog instead:

1- Oasis Dream Level

I started experimenting with dream sequences, since dreams are going to be a significant enough part of the story. I made blockouts and basic gameplay prototype of two scenes.

The first scene is a desert scene, with an oasis and a huge hourglass. The sand and rocky mountain are almost done, I just need to adjust the shader to blend between the objects and terrain. Everything else is just a blockout at this point.
I adjusted the dream “ascii” and distortion effect to my liking, and also made teleporters with fading effect, nothing fancy or worth detailing.

2- Train Dream Level

The other scene is a long twisted train. At first I was going to change the gravity direction, but Unreal doesn’t expose it as a vector (only a scalar strength), so instead I programmed it to reset the player’s position back to 0 on the Y axis (forward/backward relative to the train), and then I just moved the train itself instead.
As for rotation, I calculated the length of one “unit” of a train and how long it twists by, in my case 180° every 34 meters, and just applied rotation based on the offset.
Collisions and physics can be a bit buggy, so I completely disabled the train collision, and instead I just placed 3 invisible cubes : one for the player to stand on, one on the left, and another on the right, positioned right where the train benches would be.
In the end, it works as intended, you’re always walking on the “floor”.
The environment is still a blockout, but I’m very excited and cannot wait to detail it.

3- NPC Chatter system

Since gossip, small talk and communication is a big part of the daily life in a village, I decided to spend more time and thought on NPC chatter system. The idea is to “hear” (see text) conversations when you’re walking, they won’t be important to the story most of the time. When you get closer to two or more chattering NPCs, the text becomes more opaque (because you can hear better).
I added another alternative dialogue, for when you’re too close. Distance and dialogue lines are adjustable, so it can be something like “shush, someone’s coming, let’s change the subject”, or “oh hello there! nice weather we’re having today?”, or even just start an important conversation I want the player to hear : you are walking closer and closer, and they are talking about some random unrelated things, but when you’re close they switch to “oh btw did you hear about this person doing this important event ?” and they continue talking between each other, and you can eavesdrop.
This is just the ideas I can think of right now, I’m sure I’ll find more uses for this system.

For anyone interested in the technical details : the basic logic is this : I made a chattering NPC class. Each actor of that class has a text array with the dialog lines, and on each tick it checks if the player is within range, and if that actor has the variable “is trigger” set to true (ie. that NPC’s turn to talk). If true, the line is displayed on screen, and when it’s done displaying it will increment the “current line” variable. If the NPC has a chatter partner selected, then trigger will be set to false for the current actor, and set to true for the partner.
Alternatively, if the player is too close, instead of loading the normal text and incrementing the normal “current line” variable, it loads from a separate text array and increments a different variable.

This setup is not limited to two characters, it can be 3 or even more, working one after the other (only one can have trigger=true at a time, and it’s passed from one to another).
The last NPC has to pass trigger back to the first NPC for the conversation to continue. This means speech will always be like : A then B then A then B then A…etc, but if the dialog line happens to be empty then it’s skipped, and it will look as if one NPC talked for two or more lines at once before letting the other one speak.

In the diagram above, in the case of chain chatter, even though the trigger goes sequentially through A B C, the chatter appears to the player as follows :
A: Hi B and C!
B: Hi A!
C: Hi A!
B: My turn to talk
B: My turn again
C: Now it’s my turn
B: Me again!
A: Hey, My turn now!

More complex setups can be built, the only limit is my ability to build and manage such systems. I shouldn’t for example make the entire cafe a single chatter group, because the complexity grows exponentially, but for small groups of about 6 people or so it won’t be an issue. In most cases it’s just between two or three people anyway.

That’s mostly it for this week. Thanks for reading, and I’ll see you next time!

2 thoughts on “Devlog Week 15

  1. I love the text becoming more opaque as you get closer and can hear better XD

    LoL the terrible joke was somewhat unconvincing XD I forgot it was April Fools yesterday but I was also too tired to do something stupid with my progblog. Also it was probably past midnight by the time I posted anyway.

Leave a Reply

Your email address will not be published. Required fields are marked *