
More features for advanced Godot third person controller!
This video documents new features we developed during our enemy series project, as well as some important bug fixes and technical debt liquidation. The two main differences this version brings are:
Migration is important but is actually non-existent; Only some meta information is changed. It means that this codebase can be opened by both 4.2 and 4.3 executables, and all behaviors will be exactly the same. The version doesn't use any of 4.3's new functionality.
<aside>
This is legit and can be used as godot learning materials, but corresponding videos were recorded prior to godot 4.3. Godot 4.3 introduced new SkeletonModifier3D class and it literally destroyed all my worries about animation problems and solutions listed below.
Watch other videos about SkeletonModifier3D for more details.
</aside>
With it, we created a new subclass for Move: TorsoPartialMove that uses composition with a new class, LegsBehavior.
TorsoPartialMove represents an action that is being performed by a higher part of our character, for example, lifting the shield to block, gesturing, or sheathing a weapon.
This class manages its activity while delegating processing of the lower body to another entity.
This LegsBehavior entity is also a SM but a much less complex one than our primary one, and LegsBehavior actually uses our old moves as its states.

I have two examples of LegsBehavior implementations:
Animations are not ideal, but that's partly a problem of assets and partly a problem of a skeleton not integrated well.
But in Godot 4.3, "skeleton post-modification" is changed to better, and a natural time and place to fix this will occur once we talk about "skeleton modifier" in parkour or in its own series.
These TorsoPartialMove and LegsBehavior abstractions can't live in a vacuum and are supported by a new animation technique to animate parts of the skeleton differently.
I tried several approaches to solve this problem, we will use two AnimationPlayers. Here's the node structure: I use one AnimationPlayer for the torso and one for the legs, and I mask them by a simple node that also directs their behavior, like synchronizations, blending, transition mode switching, etc. The code works and it is polished.