Jump to content
Site Stability Read more... ×
  • Advertisement
Sign in to follow this  

Abilities involving movement + state sync

This topic is 786 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Server Authoritative 

What I'm doing right now is syncing the players position periodically and using some interpolation while any ability the player uses gets sent and played as soon as possible. Everything seems to work ok in parallel if the abilities don't involve the player moving. If I were to use the same system for movement based skills I would have some trouble syncing VFX with the movement part of the skill because movement would only be managed by state sync. So my question is what would be the best approach to deal with this issue? Should the players position get "locked" at the start of the ability so the ability code could take care of the movement instead, should the state sync take care of both: positions and abilities or is there a better solution? I understand I can't just have state sync take care of the movement and ability code take care of the VFX because of abilities such as teleport for example.

Edited by Sparta

Share this post

Link to post
Share on other sites

I don't know what your network code looks like, but assuming you use something like a traditional "command" model, the best solution I know if is to have your "play ability X" command carry the state necessary to sync up the presentation of the relevant actor.

That's a mouthful, so here's a concrete example:

  • You have an ability "lunge" which starts with a rapid forward movement and then ends with a damage-dealing blast.
  • Player One is at position x0,y0,z0 at frame N
  • Player One sends an input packet from their PC to the server stating they wish to use the lunge
  • Server validates the ability as normal (e.g. is it off cooldown, whatever)
  • Assuming the input is valid, the server issues a command packet back to all the relevant players
  • The command contains the actual ability (lunge), combined with any position, velocity, acceleration, etc. necessary to describe the server's perspective of where Player One was at the time of frame N
  • Other players apply latency compensation as desired
  • Player Two's machine will now interpolate from "Player Two's idea of where One is at" -> "Server authoritative state of One" over suitable number of frames


Note that some parts of this may vary depending on your netcode, your simulation model, and your desired tradeoffs (e.g. is it ok to trade accurate positions for faster response times? etc.)

Share this post

Link to post
Share on other sites

First, make sure your simulation runs at a fixed step rate (whatever -- 30 Hz, 60 Hz, 120 Hz, 1000 Hz, ...)

You can run graphics asynchronously from physics -- check out the canonical game loop for one way of doing that. (On the server, there's no graphics, but time still needs to advance using a real clock.)

Then, timestamp both movement, and action commands, using "this takes effect at physics step X."

Then, you should be able to make positions and actions sync up, because you can play actions and positions back at the same timestep. Now, whether that timestep is the "global" time step X, or the "local" time step X for the viewer, or some time step X+Q where the lag from sender to receiver is Q, depends on the specifics of your networking and simulation models.


Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!