June 2025

General

Pinning Module & Deprecated Functions

I forgot to speak about that at the end of May month, I did many processes in the character code and did a lot of cleaning.

• First, you have to know that when a player gets stepped on, he gets pinned to the floor and can’t move. To do that all the logic was directly made inside the character code. Here, I moved all the logic to do that outside the character script. I created a new C++ module that can be plugged into a micro character, exactly like the Situation and the Stuck Zone systems.
This way, I can manage all the logic in this module and make the game more modular. I also created a new custom movement mode for it, like the Situation and the Stuck Zone systems again.

• Now, you have to know that since the early versions of the game with Talas free moving, I added logic to freeze the character’s movements. The code was also added directly in the character script and was used at the start to disable Talas’ collisions and avoid him falling under the floor when using a situation.

Then, it was also used with the stuck zones, with the teleport transitions, and when a character is pinned under a foot. Now, all these systems use their own and better way to freeze character movement with custom movement modes.
So I fully removed the code to freeze a character that is now deprecated. Now the main character logic is outside the character script, and the character script just makes all work together.
Character Example Module Pack

• With that, I also removed the character cinematic mode, which is now useless. Before it was used to preview animations like the anim situations in the editor or play cinematics with a character config and customization, like the animation “Meet Cobble” or the stickers on Discord. But now I can do all this without having to spawn a character, thanks to everything being modular now.

• And I removed the linear moving Character Movement. It was used before by the Situation system to move a character to a position, like when Talas slides before opening a door, but now the Situation system uses its own method. For VR linear movement, I will use a custom method too when I implement it.

• I also did a lot of cleaning and removed deprecated functions.

• And I optimized the SelfSight used to make the AI perception not detect the player behind body parts, as explained in my previous post. I also added controls to disable or enable specific parts if needed.

Memory Leak and AI

Wanting to fix bugs on the player skin customization replication I noticed that at every character spawn or respawn the game creates a new AI controller.

A Player controller is a script that allows the user to control a game character with the inputs you send, space for jump, WASD for movement, etc. And an AI controller is the same but this time controlled by the AI.

In fact I used an option to auto spawn a default AI with the characters. When a micro character spawns, it spawns a generic Micro AI that looks at you and when a macro character spawns, it spawns a Talas AI.
But I didn’t know that it also spawns AI when the character is already controlled by a player, and most importantly I thought the AI was removed with the character when despawned.

So during the game you may have many AI scripts that control nothing and just fly invisibly around you. Literally ghosts that cause memory leaks, and it exponential in multiplayer.
Memory leaks are when the game uses memory but does not free it when it’s no longer needed. So the game will use more and more memory until it crashes or becomes unplayable.

To fix that I disabled the auto spawn and redid the character spawn code to manage the AI myself. I also moved the code for that into C++.

Customization Replication

About the customization replication the issue was that the character loaded a random skin when you joined a server without a valid skin save. It was wrong because for a player it should load the player’s custom skin and if not valid it should load the default one. This was because the character configured itself on the AI controller before the Player Controller took its place. So the code loaded a random skin and not the player one.

I also worked on the customization to make the interaction between modules more fluid.

Before the code had to process each step in order. - Wait for the character script to spawn. - Wait for the character configuration to be replicated and applied. - Wait for the character mesh and material to be setup, etc. - Wait for the player customization to be applied on server side. - And finally apply the customization on the character mesh.

Now regardless of the order each element will take what it needs, cache specific values, and update itself if necessary.

I also revised the way customization data is replicated. Before, everything was constant: if there were 10 of you playing in multiplayer, the server had to replicate everyone’s customizations to the 10 of you. Now replication is directly linked to the character and therefore to their position in 3D space. If the player is far from you their customization will not be unnecessarily replicated. Customization System: Player & Character

Motion Blur review

Fixing bug with the Toycar I noticed that the motion blur was very ugly with the wheels.

So I reviewed the motion blur settings. Now the motion blur amount is dependent on the frame rate.
- If you have a high frame rate that means less motion blur.
- And if you have a low frame rate that means more motion blur.

Of course, I also tested the new settings with other use cases.
Here slow motion of Talas stomps recorded at 60 FPS.
Motion Blur Test: Talas Stomps

Side Tools and Blender Addons

During June I got stuck on long refactoring with my Blender tools and addons. One of my main addons Blender for UnrealEngine used to export assets from Blender to Unreal, it’s also the same source code that’s used to automate character modding export/import from Blender to MMVS.

The addon originally used the FBX file format but now I’m moving to glTF which is more open and modern. This change was deeper than planned and I was finally stuck working on a full refactoring of how the addon manages the assets.

I also reviewed some assets support like the splines that are used for the Digestive System environment in MMVS. I did a preview page in HTML and JS to debug the Unreal clipboard data for the splines.
I may post it on GitHub later if people are interested.

I also did a lot of cleaning in the Python code to use strict typing, in my libraries and in the addons.

Devblog done with Markdown files

I switched from Word Office to Libre Office to be able to work on devblogs using Linux OS.
And finally, I moved from Libre Office to Markdown files in Visual Studio Code.

I got used to working with VS Code. And for creating HTML pages I think Markdown is a good format.

I’m still using my tool to compress media or convert pages with the Pandoc lib.
And for speech synthesis I have my own tool too using the OpenAI Whisper lib.
And now I can preview the page in real time directly in VS Code.

By the way, I also switched from Tortoise SVN to SmartSVN, and from GitKraken to SmartGit.
I want to use the same tools on Windows and Linux so step by step I’m stopping using non cross-platform tools.

Other

Cleaning MMVS hardware. Just because I like showing off my setup. MMVS Baie Server