Hello again everyone, in this post i'll be explaining how the current swing delay system functions followed by some criticisms I have, finishing up with a proposed solution to these criticisms.
Although this post is purely targeted towards Starvault and their coding team or whoever handles the networking, I chose to post it here anyway for two reasons, one to aid public knowledge of a current game system and to create a location for any potential discussion on this topic, and two because it's easier to format information like this into a forum post than a discord PM.
A fair warning, this is a rather long and in depth post.
In order to get started, we must first establish some basics about networking and how information travels between our client PCs and the Mortal 2 server.
To aid this explanation I will enlist the help of an ms paint drawing I made. Each step in the explanation will add an element to the drawing.
Starting with the basics:
In the above picture, I am displaying the communication between my PC, the MO2 server and one other client PC.
My PC has a ping of 300ms to the MO2 server, as I live in Australia. My PC is represented by my name "Valoran", in blue.
The time it takes to travel between the devices is represented by the yellow line and ms numbers.
The MO2 server is represented by the name "Server" in orange.
The other client PC connected to the server has a ping of 20ms to the server, as they are located in Europe. The European client PC is represented by "P2" in green.
Because ping is a measurement of the response time between two devices ( or round trip time if you want to be technical ) we can divide this number by 2 in order to get the one way trip time between two devices, or in other terms the time it takes to go from just my PC to the server, once.
Looking at the image we can see information from my PC takes an average of 150ms to travel to the server, and then the server will redistribute that information to all the connected clients.
In order for the information I sent to reach P2, it will take 150ms + 10ms to arrive. As it first must reach the server, then be distributed to the connected clients.
Now that we can visualise the communication between devices, we will add in another element to the image.
In figure 1.2 we can now see a labelled timeline of actions, starting from the left.
Chronologically,
1. I release my left mouse button and send an update to the server that I am releasing my swing.
2. This update travels for 150ms before arriving at the server.
3. The server registers that I want to release my swing, and then distributes this information to all connected clients.
4. This update from the server travels for 10ms before arriving at P2's client PC.
5. P2 sees me release my swing in game.
This action of releasing a swing is the main topic of this post.
A few patches ago, Starvault implemented a patch that changes the above steps slightly, which we will now see.
Let's add another element to the image.
In this new element labelled "Swing delay" or figure 1.3, we can visualise the new system.
As before we will break it down in chronological steps:
1. I release my left mouse button and send an update to the server that I am releasing my swing.
1.1. My swing is now in standby mode, and will remain unreleased until the server tells me I may release it
2. This update travels for 150ms before arriving at the server.
3. The server registers that I want to release my swing, and then distributes this information to all connected clients.
3.1. The server send an "Okay to release" message back to me, indicating that I may now release my swing.
4. The update to P2 from the server travels for 10ms before arriving at P2's client PC.
5. P2 sees me release my swing in game. ( Total time passed at this point: 160ms )
6. The "Okay to release" update travels for 150ms before arriving at my PC, allowing me to release my swing and perform the animation. ( Total time passed: 300ms )
I know this part can be a little tricky to understand at first, but what this means is that in this particular situation where I, with 300 ping am fighting someone who has much lower ping, they will actually see me release my swing on their screen before I do on my own.
This results in the person with lower ping having an extreme advantage in reaction time to my swings, as well as severely reduced attack speed for myself, as every single one of my attacks must first go through a 300ms waiting period before it may be released.
NA players also feel this difference when fighting Europeans, but to a much lesser extent than I do.
This has resulted in my melon timer scores going from 11.4 seconds minimum, to 14.5 seconds minimum, with the exact same weapon.
Now that we understand how the system works, let's understand why it was implemented.
This system was designed to perform two functions:
1. To prevent people from abusing artificially increased high latency to gain an advantage in PVP.
2. To keep players in sync with each other visually.
Let's understand how it achieves function 2.
It's time for a new image element.
In this new scenario, everyone involved has 150ms ping to the server.
With the current delay system in place, by the time I get the "Okay to release" message from the server, I'll be releasing my swing on my screen at the exact same time everyone else sees me release the swing on their screens, as a total of 150ms will have passed for everyone before the swing is visually released.
This is fantastic, but only works if everyone has an average of the same ping.
So, regarding function one, the system works very well.
You can no longer artificially increase your ping to 1000 and cause massive issues in the game that allow you to hit other people when they are unable to fight you properly.
However, at the same time the system has made it impossible to play properly for people like me that simply have a high ping naturally, and are not increasing it maliciously.
Regarding function two however, the system only works to keep players in sync with each other if all the players involved have roughly the same ping.
Which means the system is effectively self defeating, as if everyone has the same ping there will be no advantage imbalance.
As Mortal is a game accessible world wide, it is not only highly likely but inevitable that people will encounter other players with drastically different ping to their own.
Now that we have established an understanding of how the system works, the problems it intends to solve as well as my criticisms of it, we come to my proposed solution to this problem.
My proposed solution is a relatively simple one, that should keep everyone involved happy.
In order to avoid the crippling swing delay added by the system, my solution would be to remove the need for a response from the server before the swing is released, but still maintain the added delay, meaning only the one way trip time will be added to the swing as a buffer.
This can be achieved through any number of methods, one simple suggestion would be to monitor a players average ping over the last few seconds, divide it by 2 to get the one way trip time and add that to every swing. Like I said that that's just a simple brainstorm and i'm sure Starvault would come up with a better way of achieving this.
The resulting system would still meet the criteria of preventing people from abusing high ping, as they will still have an immense amount of delay added to their swing if they artificially increase their ping to the point where it would cause issues.
However, players would have exactly half the delay they currently see in game, making the game immensely more balanced and competitive as people outside Europe will be able to play at a closer level to the Europeans, without affecting the Europeans in any way.
The system will also still help to keep players more in sync than without it, as players will now be perfectly in sync with the server itself.
I know this was a very long post, I appreciate and congratulate anyone who had the patience to read through all of it.
Hopefully my diagrams and explanations were sufficient in explaining the issue present here, and my solution a tangible one.
If anything is not clear enough I will make more effort to explain in the comments should it be necessary.
I have been studying networking professionally for the past two and a half years, and I know it can be tough at times to explain things in a manner that people are receptive to. I tried to be as straight forward as possible, obviously omitting loads of important technical aspects, as I don't believe they are relevant to understanding this post as a whole.
Thank you, and have a wonderful day.
P.S If I have made any mistakes or incorrect statements regarding how the current system works, please let me know so I may correct them.
Too long didn't read:
Currently everyone has their ping in milliseconds added in the form of a delay to every swing.
So if I want to release a swing and I have 300 ping, it will add 300ms to the beginning of every swing.
This should be tweaked to only half of our ping, which will close the gap between EU and NA players making the game more competitive for people with high ping while not affecting low ping players at all.
Currently NA players with 150 ping will have 150ms added to their swings, with my proposed solution they will only have 75ms.
The proposed change does not detract from the purpose of the implemented system, in that it still stops people with high ping from abusing it, and keeps players in sync better.
Although this post is purely targeted towards Starvault and their coding team or whoever handles the networking, I chose to post it here anyway for two reasons, one to aid public knowledge of a current game system and to create a location for any potential discussion on this topic, and two because it's easier to format information like this into a forum post than a discord PM.
A fair warning, this is a rather long and in depth post.
In order to get started, we must first establish some basics about networking and how information travels between our client PCs and the Mortal 2 server.
To aid this explanation I will enlist the help of an ms paint drawing I made. Each step in the explanation will add an element to the drawing.
Starting with the basics:
In the above picture, I am displaying the communication between my PC, the MO2 server and one other client PC.
My PC has a ping of 300ms to the MO2 server, as I live in Australia. My PC is represented by my name "Valoran", in blue.
The time it takes to travel between the devices is represented by the yellow line and ms numbers.
The MO2 server is represented by the name "Server" in orange.
The other client PC connected to the server has a ping of 20ms to the server, as they are located in Europe. The European client PC is represented by "P2" in green.
Because ping is a measurement of the response time between two devices ( or round trip time if you want to be technical ) we can divide this number by 2 in order to get the one way trip time between two devices, or in other terms the time it takes to go from just my PC to the server, once.
Looking at the image we can see information from my PC takes an average of 150ms to travel to the server, and then the server will redistribute that information to all the connected clients.
In order for the information I sent to reach P2, it will take 150ms + 10ms to arrive. As it first must reach the server, then be distributed to the connected clients.
Now that we can visualise the communication between devices, we will add in another element to the image.
In figure 1.2 we can now see a labelled timeline of actions, starting from the left.
Chronologically,
1. I release my left mouse button and send an update to the server that I am releasing my swing.
2. This update travels for 150ms before arriving at the server.
3. The server registers that I want to release my swing, and then distributes this information to all connected clients.
4. This update from the server travels for 10ms before arriving at P2's client PC.
5. P2 sees me release my swing in game.
This action of releasing a swing is the main topic of this post.
A few patches ago, Starvault implemented a patch that changes the above steps slightly, which we will now see.
Let's add another element to the image.
In this new element labelled "Swing delay" or figure 1.3, we can visualise the new system.
As before we will break it down in chronological steps:
1. I release my left mouse button and send an update to the server that I am releasing my swing.
1.1. My swing is now in standby mode, and will remain unreleased until the server tells me I may release it
2. This update travels for 150ms before arriving at the server.
3. The server registers that I want to release my swing, and then distributes this information to all connected clients.
3.1. The server send an "Okay to release" message back to me, indicating that I may now release my swing.
4. The update to P2 from the server travels for 10ms before arriving at P2's client PC.
5. P2 sees me release my swing in game. ( Total time passed at this point: 160ms )
6. The "Okay to release" update travels for 150ms before arriving at my PC, allowing me to release my swing and perform the animation. ( Total time passed: 300ms )
I know this part can be a little tricky to understand at first, but what this means is that in this particular situation where I, with 300 ping am fighting someone who has much lower ping, they will actually see me release my swing on their screen before I do on my own.
This results in the person with lower ping having an extreme advantage in reaction time to my swings, as well as severely reduced attack speed for myself, as every single one of my attacks must first go through a 300ms waiting period before it may be released.
NA players also feel this difference when fighting Europeans, but to a much lesser extent than I do.
This has resulted in my melon timer scores going from 11.4 seconds minimum, to 14.5 seconds minimum, with the exact same weapon.
Now that we understand how the system works, let's understand why it was implemented.
This system was designed to perform two functions:
1. To prevent people from abusing artificially increased high latency to gain an advantage in PVP.
2. To keep players in sync with each other visually.
Let's understand how it achieves function 2.
It's time for a new image element.
In this new scenario, everyone involved has 150ms ping to the server.
With the current delay system in place, by the time I get the "Okay to release" message from the server, I'll be releasing my swing on my screen at the exact same time everyone else sees me release the swing on their screens, as a total of 150ms will have passed for everyone before the swing is visually released.
This is fantastic, but only works if everyone has an average of the same ping.
So, regarding function one, the system works very well.
You can no longer artificially increase your ping to 1000 and cause massive issues in the game that allow you to hit other people when they are unable to fight you properly.
However, at the same time the system has made it impossible to play properly for people like me that simply have a high ping naturally, and are not increasing it maliciously.
Regarding function two however, the system only works to keep players in sync with each other if all the players involved have roughly the same ping.
Which means the system is effectively self defeating, as if everyone has the same ping there will be no advantage imbalance.
As Mortal is a game accessible world wide, it is not only highly likely but inevitable that people will encounter other players with drastically different ping to their own.
Now that we have established an understanding of how the system works, the problems it intends to solve as well as my criticisms of it, we come to my proposed solution to this problem.
My proposed solution is a relatively simple one, that should keep everyone involved happy.
In order to avoid the crippling swing delay added by the system, my solution would be to remove the need for a response from the server before the swing is released, but still maintain the added delay, meaning only the one way trip time will be added to the swing as a buffer.
This can be achieved through any number of methods, one simple suggestion would be to monitor a players average ping over the last few seconds, divide it by 2 to get the one way trip time and add that to every swing. Like I said that that's just a simple brainstorm and i'm sure Starvault would come up with a better way of achieving this.
The resulting system would still meet the criteria of preventing people from abusing high ping, as they will still have an immense amount of delay added to their swing if they artificially increase their ping to the point where it would cause issues.
However, players would have exactly half the delay they currently see in game, making the game immensely more balanced and competitive as people outside Europe will be able to play at a closer level to the Europeans, without affecting the Europeans in any way.
The system will also still help to keep players more in sync than without it, as players will now be perfectly in sync with the server itself.
I know this was a very long post, I appreciate and congratulate anyone who had the patience to read through all of it.
Hopefully my diagrams and explanations were sufficient in explaining the issue present here, and my solution a tangible one.
If anything is not clear enough I will make more effort to explain in the comments should it be necessary.
I have been studying networking professionally for the past two and a half years, and I know it can be tough at times to explain things in a manner that people are receptive to. I tried to be as straight forward as possible, obviously omitting loads of important technical aspects, as I don't believe they are relevant to understanding this post as a whole.
Thank you, and have a wonderful day.
P.S If I have made any mistakes or incorrect statements regarding how the current system works, please let me know so I may correct them.
Too long didn't read:
Currently everyone has their ping in milliseconds added in the form of a delay to every swing.
So if I want to release a swing and I have 300 ping, it will add 300ms to the beginning of every swing.
This should be tweaked to only half of our ping, which will close the gap between EU and NA players making the game more competitive for people with high ping while not affecting low ping players at all.
Currently NA players with 150 ping will have 150ms added to their swings, with my proposed solution they will only have 75ms.
The proposed change does not detract from the purpose of the implemented system, in that it still stops people with high ping from abusing it, and keeps players in sync better.
Last edited: