PDA

View Full Version : MMORPG movement lag



Setharian
13-07-2006, 08:20 PM
Hi all, first of all I'm not sure if this is the best section to create a topic like this in, but I think it is also network-related.

So my problem description:
I and a few of my friends are writing an MMORPG server (actually an emulator) and we've ran into a problem and that is - as the topic suggests - laggy movement. Even with 3ms latency. The type of movement observed from the client made us believe that the client itself has no built-in dead-reckoning algorithm and in the original design (probably) the server carries this burden. After receiving a movement packet, it's resent to all other players in the visible range, who see the player. From the client's view the moving objects starts running, runs for an about 1 second and then stops (with the running animation) until another packet is sent from the moving player to be dispatched. This creates a very jerky movement. I wanted to ask if you can tell what can I do/implement on the server-side to remove these lags, if you had any experiences with a problem such as this or have any ideas how to solve this. The main problem with implementing it is that I have only 3 things - starting coordinates, ending coordinates and current velocity, nothing else.
All suggestions are welcome. :)

Smotsholle
17-07-2006, 09:35 AM
Don't know the game style, but I suspect point & click.

I'm not sure what the effect of this suggestion will be, but since you know your own code best, you'll know what it does..

You told me you know 3 things.
Starting position.
Ending position.
Velocity.

Let's rule out the ending position and replace it with a direction.
Then you have
Starting position.
velocity.
Direction.

You can let the client calculate the movement until it recieves a new packet. This makes the movement smooth, but if the lag remains, the character can suddenly jump to a new set of coordinates when it changes direction.

Packets a client can send to the server are simply the new commands:
Stop (velocity=0), moving.

Recieving packets should be done in a seperate thread, not in the main thread, this tends to remove lots of lag.

I hope I understood the problem and supplied you with a good solution.

Setharian
21-07-2006, 10:46 AM
hi smotsholle,
well you did not entirely understand the problem....we're making an emulator, we don't have the client's sources so the only thing we can change is the server-side(aka our code :) )...we've tried to implement bezier curves and though the curves are calculated ok in the test app we've made, in the game it looks weird...also using bezier curves is quite a punch for the network traffic since sending 5-6 movement packets per second per moving object is quite a lot....the method you've described would work (will try testing it out), but as you said big lags will cause players teleporting around....