November 2024
The October and November DevBlogs were done at the same time.
I'm taking into account that you've already read the October edition.
MMVS Addon and Rig Backward Compatibility
In the October devblogs I told you how I updated my Rig generator and the Talas Rig itself.
Next I need to update the animations that are no longer compatible with the new Rigs.
As you may have read, the biggest change was the tongue rig, which was completely changed.
In these cases I'm going to have to redo the animations. (I'll tell you about it later)
But for the rest, it's simply a matter of changing the name or axis in the bones.
My MMVS blender add-ons already lets me do this. All I have to do is open a scene, click on a button and the animation is updated.
So I listed all the changes and added them to the configuration file that manages the backward compatibility of Rigs
Characters Rigs Update
Next I need to update the Rig of the other characters.
As a reminder, all the characters in the game use a very similar and standardised Rig, which means I can use the same basic animation script to manage all the characters in the game.
Base MMVS Character is the base skeleton.
It contains the base bone hierarchy used by all the other characters and now also the base Rig configuration.
The other characters: Talas, Cobble, Tesy and Talas's shoes (animate and follow versions).
They all use an instantiated version of Base MMVS Character, which allows me to manage the Rig configuration of all the characters in a single place.
To make sure that the Rig configuration fits all the characters I need to make some nodes more evolutive.
For example, Talas and Cobble don't have the same length of bone in their tails, which will cause problems at the time of generation.
I've since added a node that will check whether ‘Tail_00’ exists. From there, the node will check and automatically deduce the size of the tail.
It can also stop the branch from here if necessary.
This makes it much easier to adapt the configuration to several characters.
New rig animations updates
As I said earlier, because the Rigs have changed I have to update some animations manually.
With the tongue rig update, I completely changed the way the Curves are handled.
So I've redone the animation of the straps when Talas puts on or takes off his shoes.
But the most complicated part was having to redo the tongue animation of all the Vore animations with the new Rig.
In the case of the Vore, I have a total of 24 animations that take Talas and Cobble into consideration.
I've also migrated to Ubuntu. Not completely, because unfortunately some software only works on Windows, so I'm using a dual boot.
So I had to update some pipelines to manage cross-compatibility.
All the animations were made on Ubuntu.
In the case of Cobble I had to reanimate the whole body several times to get the movements on Talas's tongue to work properly.
After several changes and tests all the animations work in the game, but as you can see in the following video they get a bit out of sync and cut off at the end.
This is because I don't have a real master/slave process in my situation system.
So, when Talas loads the animation from the situation system, Cobble can wait a few frames before starting its animation and it cuts itself off a few frames before the end.
I'll tell you more about this below.
Assets Update and Automatized Script
I've updated my multi export script.
I've already told you about it in previous devblogs.
As a reminder, this tool allows me to export all the animations in the project from the files and source to Unreal Engine, managing the updating of the animations with Backward Compatibility.
I've fixed many bugs and now it will check all files and provide more details to avoid problems.
For example if the export fails or blender crashes during the process it will retry.
Here the tool exported 687 animations from 201 files in 37 minutes, updating the animations with the new Rig without me having to do it manually.
Situation System Refactoring
During this month I started refactoring my situation system to handle several characters.
As a reminder, the situation system allows you to manage the triggering of animations, artificial intelligence and other things related to a situation.
It's something I created in version 0.3 of the game which is used a lot. So it took me a long time to refactor it.
A situation could, for example, be a simple chair.
- The chair will have an entrance allowing the character to sit down.
- A position for the character to remain seated.
- And an exit if the character wants to get up.
In this example, I have 2 actions and a single position.
The situation will manage the triggering of the animations, the blending and transitions, as well as the movement and attachment of the character.
I can enhance my situation by adding new positions and moving between positions.
Now I have 4 actions and 2 positions and the diagram of the situation can be represented like this :
Rather than modifying the configuration files by hand, I use nodes via the editor that allow me to configure and preview a situation.
This is very practical for complex situations and at the same time allows me to immediately identify problems.
For example, here's the situation used for Talas’s chair.
Animation management is fairly modular, allowing other animations to be added and mixed, and works with native animation scripts.
This is what allows Talas, for example, to look around while seated or to lift his foot when leaning against a wall.
With the built-in libraries, the artificial intelligence can automatically move around a situation and anticipate the actions to be taken, for example if Talas wants to get up from the chair.
The artificial intelligence will also have access to certain contexts, in particular areas of importance.
In the case of the chair, if a player is in the green zone, Talas will be able to know in advance that if he enters the situation there is a risk of crushing him.
He'll also know that if you're in the yellow zone while he's sitting, depending on his position, you're close to his feet.
Artificial intelligence can therefore make the right decisions.
Some situations are much more in-depth, such as Talas's sofa.
Or the bed situation.
I've made my situation system modular and configurable enough to be used in a huge number of contexts, but only for one character at a time.
The aim of the refactoring is precisely to make the system usable with several characters at the same time.
At first I started to explain the different modules and interactions, but I prefer to keep things simple and make it as easy to understand as possible.
In the case of the Vore, when Talas decided to throw Cobble into his beak, the situation system only executed Talas's animation, but Cobble's animation was executed via overlay code, which isn't very clean and causes several timing problems as well as making the procedure unnecessarily complicated.
So I started by refactoring the system's source code to separate path management and execution.
This way I have a sort of track with the different entrances, exits, stations and paths. And I've got the trains that are going to run on them.
In the following example I have 2 characters who are going to use the same situation in different ways.
Another advantage of this is that it allows me to centralise the net code and replication in the characters, so I don't have to replicate standard objects like chairs in multiplayer.
This also corrects the bug that causes Talas to stand when a player is too far away from the chair he's supposed to be sitting on in multiplayer.
Then I need a master/slave system to manage the execution of one character in a situation from another character.
It's as if I had the rails, the locomotive and I added my wagons, but with their own animations.
Now it's all managed directly by the situation system.
And in game, it looks like this:
Translation project moved to Crowdin
I've migrated from POEditor to Crowdin for collaborative translation management.
I've also made the project publicly visible so that you can see the progress made by the translators:
https://crowdin.com/project/MMVS
Dutch (Nederlands) Translation
The game is now translated in Dutch (Nederlands)
Thanks to Michael100104 !
More side work
I've continued to work on my addons for version 5.5 of Unreal Engine.
And I've updated my Blocking Starter Pack for Unreal Engine 5.5.
For the moment I'm not planning to move the game to Unreal Engine 5.5, I want to keep a stable version before 0.4.6.
I use a graphics tablet to work on animations but the pen on my tablet broke for no reason, and when I opened it I discovered that the solder had broken.
As I don't have a soldering iron and no time to wait for a delivery in 5 days, I improvised and soldered it with copper wire.
It took me about 2 hours because I'm terrible and I don't have any soldering wire, but now it works just as before. I thought it was funny to add it.
The copper knot gives me thermal inertia.
See more: Devblogs - Wips Telegram Chanel - Discord Chanel - Support the game - MMVS game