Download

Implementation of custom moves in multiplayer

Hi!
I’m wondering if anyone managed to implement special moves in unreal engine, in a way that it doesn’t bug out in multiplayer.

My game has a lot of special moves, dashes, arced jumps, knockbacks, etc. I want a way to control the movement of my character, not just add an impact force, then let physics handle it (in a very buggy way).

Until now I’ve been using RootMotionSources to handle these, and they worked perfectly. Easy to handle, very good control over movement, overall good experience. Except when the game starts lagging. The rollback-resimulation part of RMS seems very off, or maybe I am using it wrong. Would be cool if there were actual documentation about how to use this system.
I could further elaborate the problems I’m facing, if that helps.

Other technique I’ve heard about is implementing custom movement modes in my movement component. While technically it could work, the only implementations I’ve seen involved putting a lot of new variables into the FSavedMove struct. The problem with this approach is that I have a lot of custom movements. Almost every melee weapon has one, maybe too, also skills do have. The final game would include at least 20 special move. I wouldn’t want to shove in parameters for 20 moves into the FSavedMove struct. Not really ideal workflow.

Is there any other way to implement these? Also anybody have experience with implementing these kind of movements? What was your solution?

I can post videos about what kind of movements I want to achieve, if that helps.
Thank you in advance

With what I can tell you, it probably seems like a custom movement component is the way to go, that’s really the purpose of that class, is to allow for creation of your own movement modes and replicating them.

You can create your own FSavedMove like structures and handle that as needed.

Thanks for the reply!
Can you elaborate further on that? What do you mean by custom movement component? Do you mean extending the character movement component? Or do you mean creating a movement component for every move I want, and attaching then dynamically?

Extend CharacterMovementComponent to include new movement modes, and your own replicated FSavedMove type structs. I don’t have a lot of expertise in the area, but I know that’s a thing that a lot of people do.

That’s exactly what I wrote in the description. It kind of works if you have 2-3 special moves, but I cannot see how it can work if I have 20 of them.

i thought you were saying you were changing the engine’s FSavedMove, or extending the engine’s, it doesn’t look like that’s necessary, if that’s what you were saying.

why doesn’t it work?

I meant extending CharacterMovementComponent, extending FSavedMove, and putting variables there. That would mean that for every move I need to put 3-4 variables usually, that would mean 60-90 variables into the struct. thats one huge monolitic struct, which i dont really think is the preferred method.

fwiw, although I’m really not at all familiar with this code, I’ve only done a little bit of debugging that touched on it, the project that I’m on has a rather insanely complex (i think?) movement component, that implements a few custom movement modes, and has it’s own FSavedMove struct that does not extend FSavedMove, which just has a few vectors for positioning some bits, and a few bools for setting some important flags.

What is the nature of these “special moves” versus normal movement?

They are not velocity and acceleration based. instanteous movement, with constant velocity, or custom (like arc), overridden gravity, pauses in-air, etc. all with different timers.
For example walljump:
After pressing space in-air, I check if there is a wall in front of the character. then calculate a mirrored direction. From there, there is an arced upward force for a while, then start blending the gravity in, and keep it until the character touches the ground.