This week I experimented a bit on character clothing, added some character AI behaviors, and improved the greetings/chatter system. Here’s a detailed explanation.
Character Clothing
I experimented more with Marvelous designer and made a “real” scenario. I made the entire thing in Marvelous designer (so no manual sculpting), and got a lot more familiar with sewing patterns and styling. I textured it quickly in Substance Painter and rendered it in Blender. I skipped the retopology because this won’t be a game asset, also I’ve done that a million times and there’s nothing new to learn anyway.
In addition to that, I did some performance tests with real-time cloth sims, because I need it to deform some parts of long dresses and such. It started as a skirt, but then it reminded me of the whirling dervishes (it probably has something to do with my recent visit to Turkey), so I made the NPCs spin just to be a little bit extra lol
The results are far better than I expected, especially because there are 11 NPCs with “player quality” cloth sims. I can reduce the polygon count and simulation quality significantly for most use cases (walking, small movements…etc) so I’m not too concerned about it.
I was also worried about the player’s clothes shoulder deformation, because of the double joint and the twisting, but it looks good enough on the player.
NPC AI
I implemented a new behavior : Leading. It’s basically the same as “Patrol”, but the player has to be close enough before the NPC navigates to the next waypoint, otherwise the NPC waits.
I also implemented several improvements, which are the following :
Target Visualization : a line between the NPC and the target, to show where they’re attempting to navigate.
Run/walk toggle : if the NPCs are too far behind the target/player then they will run until they reach a distance threshold, at which point they’ll start walking again.
Chatter/greeting variables : I added variable support for chatter and greeting lines. Now the NPCs can call the player (or other NPC) by their name. There’s also now a separate $PlayerName$ and $Name$ variable, the latter refers to the NPC/Object you’re currently interacting with. I also added a $time$ variable just for testing custom variables.
I reworked the function and made it part of a Blueprint Function Library, which means the code can be shared by many other blueprints and work consistently.
And lastly, a funny interaction. I placed NPCs to move randomly around the world, and they had the greeting component enabled. I forgot one of them when I added a building and it appeared on top of a wall, so I went back to record the interaction, and it just happened that the NPC randomly picked the funniest greeting line possible for the scenario lol
Misc
Additional stuff not worth talking too long about :
- I attempted to add physics movement to the ears, but I am so far unsuccessful.
- More blockouts, expanded the starting area a little bit more.
- Story writing and some more interactions
- Configured another Backup option, bringing the total up to 4 (local, external, external and in a different physical location, and cloud)
- I started playing some old RPG games like Earthbound and Zelda: a Link to the Past. I’m not having a lot of fun so far (especially with Zelda), so hopefully things will get more exciting soon, but even if they don’t I am doing it to study them.
This marks over a year of development now and it feels surreal! It feels both like I have accomplished very little and also I’ve done so much at the same time.
The game is going slower than anticipated (especially because I never used Unreal Engine before this, and never worked on any serious game project), but I’m happy with all the mechanics I implemented, especially the entire interaction system I’ve built from scratch. I wrote 90% of the main story, detailed some characters stories, started working on the world environment, and I learned about all the workflow I need (character animation, , AI, optimization, cutscenes). Hopefully I will keep the same pace in 2025, if not better.
That’s all for this devlog, thanks for reading!