Alternative Server Solution: Movement

Good day,

Short story:

We are currently developing an Sandbox Game, mostly with MMO-like mechanics.
We are rolling our own server implementation and want to use UE4 as client for it.

Problem:

While developing movement protocol and a C++ client prototypes we encountered
problems understanding how to implement a remotely (using our protocol, not
replication) controlled player
. Requirements for protocol interaction:

  • We need to limit any friction and physics interference to a player except for
    collisions with world objects, like walls and game specific interaction
    .
  • Client prediction for Remote Characters with movement smoothing. (this is easy
    if we know where to put it in C++ code, so we don’t mess up animations)
  • Can’t think of others at the movement, but an MMO-like movement system is
    desired in the end.

We did a lot of research, but the documentation is very limited and C++ parts are
VERY polluted by Replication code. Many question arise like:

  • should we just Spawn custom Pawn, that will move on Tick, if so, can we somehow bring
    animation features from Character class?
  • Should we use MovementComponent and can implementing custom one be enough to achieve the thing we want without rewriting Character class?

Understood so far:

As we were able to understand the Actor’s location is the location of it’s
Root Component, or Capsule in case of a Character. The Capsule is moved by the
MovementComponent, which is simulating movement on TickComponent based on
InputVector, Physic forces, RootMotion OR network input if remotely controlled.
Looking at the implementation of PlayerControlled I can say, that using it will be quite painful cause of all the Replication-relative stuff there (Player for example is more-or-less a network connection). Had an idea of extending
AIController and adding network movement, but it seams that it’s too complicated for the task.

Tried to spawn a Character without Controller and moving it tick by tick, but it just did not spawn (maybe we did something wrong…), though spawning a simple Pawn had no problems. Also tried to move main character (with PlayerController), but could not find a way to maintain animation, it just restarted every time.

So the Question:

If we already have a remote server implementation and a client C++ library that
receives position, rotation and velocities (maybe more) how do we implement a
remotely controlled pawn, that will move according to protocol input. (what needs to be rewritten or just disposed of)

Description of local movement process from keyboard input to character position
movement
would be appreciated (mainly interested in what PlayerController does)