Devlog Week 71-72

Here’s what I recap of what I workd on this week. I post most of what’s here and more on BlueSky, make sure to follow me there to get the latest updates.

Environment

Blockout

I worked more on the main world map. There’s too much to mention individually, but I expanded some areas and started detailing others, and I spent some time with the lighting and art direction, especially the sun position (more on that later). In the meantime have some screenshots during sunset.

Shaders

I worked more on the blended shader. I started with blending noise, an additional control that makes the transition between layers noisier and sharper, it gets rid of those smooth transitions that I don’t like. The scale and strength and texture can be changed. Here it is in action.

Blending noise

Here are higher resolution screenshots to see it clearer

It was initially just going to be a terrain shader, but I made some changes to make it generic. The main concern was the different texture formats, for the terrain I used one channel-packed Ao-Roughness-Height map, because I assumed there is no need for metalness. For other types of material it’s more apropriate to use the standard Metalness-Roughness-Ao format I use for everything else, and add an additional height texture. I used a static switch to switch between AoRH and MRAo+Height.

Tools

I was annoyed by Unreal’s snapping behavior and the lack of a mesh and transform randomizer, so I looked up how to make them. I discovered Scriptable Tools. It’s in beta and there aren’t many tutorials online and the documentation is basic, so it took a while to figure things out, but after figuring out the initial logic it was just like executing blueprint code during gameplay or from construction scripts but in the editor.

The first tool I made was one to pick assign a random mesh to the selected actors. It’s useful for variations, in this example I have 4 different models of tombstones, and I used the tool to assign them at random. The next tool is to add transform randomness, to give some small variation.

Randomize Mesh and Randomize Transform

Another tool I wasn’t very satisfied with was the snapping down feature, so I made my own tool. It has several modes for snapping : origin, bounds center, lower bounds center, and lower bounds average. It also has Z offset. I also made sure to reorganize the list of selected objects by height, so that it snaps the lowest object first, then the second lowest and so on. By doing so, it can stack objects on top of each other.

Snap down

Here’s an example using all 3 tools above to make a stack of books.

Books

And the last one is a box reflection capture spawner that automatically extends to fill the room, inspired by https://bsky.app/profile/passivestar.bsky.social/post/3lje7frs7bk25

Box Reflection Capture Spawner

And the last tool/helper is the sun position calculator. I needed it because mosques and tombstones all point to the direction of Mecca in Islamic practices, and that’s a minor detail I wanted to include in my game as well. So I had to think about the position in the world and where the north would be. It’s just a minor detail, but I know that someone will overthink this and use the position of the sun and time of day to triangulate the exact location of the village in the world, so I’m going to entertain them.
Luckily unreal had a sun position calculator with 95% of the functionality available. I had to tweak it to work with regular directional lights, and then I added an arrow to point where Mecca would be. I went to a few key locations in the game and set the time of day to different times, mainly sunrise and sunset and afternoon, and changed the direction of the north to see what works best.

Sun Direction

Sounds

I reworked the entire sound system to make it look like the typewriting sounds are actually the sounds of robots, analogous to human speech, and not just UI SFX. For this to work, each word has to sound unique, but when repeated it should be the same. “Cat” should always sound the same, but different from “Dog”, this gives the illusion of a complex communication protocol.

To achieve that, I made a “random” algorithm that assigns each letter in the alphabet a pitch. I also made it possible to pick different sound(s) for consonants, vowels and punctuation. Punctuation and consonants can be sharper than vowels for example.

Sound Parameters

I made the algorithm in C++ because it’s something that repeats a lot, but now that I think about it “once every 3 frames” isn’t really a concern. It’s good to practice C++ though for when I need it. Probably the save system could benefit from some C++ rewrite, especially the entry search part.

Here is my first test of the system. It doesn’t sound that good, because I didn’t make good sound samples yet, but the programming works.

Sound Test #1

I spent almost an entire day just working on the sounds and experimenting. I had the idea of making a “per word” version instead of playing the sound every few characters, but it didn’t go well, so I scrapped it. I made much shorter (~50ms) sound samples in LMMS and Audacity and kept the ones I liked.

The samples and pitch and pitch randomness were enough to give the robots character. I made a few variations for generic NPCs : 8 kids, 4 Adult Feminine, 4 Adult Neutral, 4 Adult Masculine, and 8 Old.

Robot Sounds (Adults)
Robot Sounds (Kids)
Robot Sounds (Old)

These only use the same sound sample for vowels, consonants and punctuation, but important characters will have more thought put into them. Maybe even custom-made sound samples, but I think these are more than enough for the rest of the NPCs in the game.

Social mini-games

I thought about using mini games during interactions for things like childrens’ games (hopscotch, marbles and jacks, rope skipping, clapping games…etc), or cutting fruit while making a recipe and so on. I don’t have anything implemented yet, but all these games will have similar UI and gameplay, and it will play like a rhythm game where you have to click the apropriate button when needed ( similar to Guitar Hero, Dance Dance Revolution, Friday Night Funkin…).
I have this draft

Social games/Universal QTE design

It can be a combo rhythm game, a sequence of scrolling buttons, or just one button that appears in the UI when you have to press it. It can be randomized or predefined, with variable scrolling and “coyote timing” (how late/advanced you can press before it registers as a mistake).

I’m going to implement a basic version of it this week.

And finally I did some story writing and reorganized some notes. That’s all for this week. Thanks for reading, and I hope to see you again next time!

One thought on “Devlog Week 71-72

  1. There are times when I wish you were on hive so I could upvote when I have nothing useful to say (or even if I think I do XD) but at least this way I kind of have to comment about how things look like they’re progressing greeat ;D

    Although I don’t seem to be getting comment notifications o_O

Leave a Reply

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