Dev Blog: The Hunt | Server Corrections
Our programming team made some improvements to how our game handles server corrections during charges in the upcoming Sun & Moon Update, and some things may feel a bit different on the Champions you play regularly.
TLDR: We made some changes to the charges that greatly reduced the amount of server corrections (rubber banding) that you get. They should feel better overall.
Champions & abilities that will feel changes:
- Androxus | Nether Step
- Ash | Shoulder Bash
- Barik | Rocket Boots
- Bomb King | King Bomb
- Cassie | Dodge Roll
- Drogoz | Thrust
- Fernando | Charge
- Furia | Wings of Wrath
- Khan | Commander's Grab
- Koga | Shadow Step
- Koga | Skewer
- Lex | Combat Slide
- Lian | Grace
- Maeve | Pounce
- Makoa | Shell Spin
- Mal'Damba | Slither
- Ruckus | Advance
- Sha Lin | Withdraw
- Talus | Blitz Upper
- Zhin | Whirl
- Zhin | Spite
Everything below this line is a more in-depth version of what we did. I did my best to explain it in a way that non-programmers like you and me would understand, but it’s still a bit dev-knowledge heavy... so tread carefully, all ye tech un-savy Champions!
What is a Server correction?
So, first off, there are two different entities that are involved with deciding what goes on in the game. Those are your individual client, and the game server. Your individual client handles your direct inputs (I pressed the spacebar, now I jump) and what you see on your monitor (Khan has stepped out in front of me). The server handles interactions between players and makes sure what’s going on on everyone’s screen is as close as technically possible.
Servers make little checks at incredibly tiny increments during your game to ensure that everyone’s client is on the same page. Sometimes, if something’s looking a bit wonky, a server may correct something coming from someone’s client. This is something that is standard throughout the industry, and goes a long way to prevent hacking. You may have hackermaned your individual client to trick it into thinking that your Koga moves at 9,000x the speed of a normal Koga. The server will see that input from your client, and will realize that something isn’t quite right here, and foil your epic ninja plans by not allowing that to actually happen in anyone’s games.
These corrections also come in to play during your normal, non-hackerman, Paladins experience. With 10 players per match all sending info to the server at different ping rates, there’s a lot for the server to check and adjust.
Why did we need to make adjustments to this system?
Most of the time, you don’t notice this at all, but when you’re dashing (moving from one spot to another very quickly with an ability) that fast movement means the server would correct you in a more noticeable way.
Before we made these adjustments, the server was basically handling movement abilities… well ... wrong. Client and server each were doing fundamentally the same thing, but sometimes with different inputs and outputs based on certain variables including player position, latency, and differences between the client and server tick rates. Many times these discrepancies were minor, but minor discrepancies when the character is moving quickly could sometimes result in major errors. And that’s, obviously, not an ideal situation.
The second issue we ran into was that the server was not checking and correcting your client during the middle of dashes.Several charges had movement corrections turned off during the charge, and re-enabled after the charge. For example, if Ash dashed, the server would correct her before she started her dash, and after she ended her dash, but not along the way. Dashes travel a good distance, so the client and server could then think that Ash was in two very different places. Since the server overrides the client, players would see Ash jerked in the other direction to the location the server believes she should be in. This is an example of what you sometimes call “rubber banding.”
That still may be hard to visualize, so I drew a little picture (you’re welcome).
This was what was happening before in your games. The Server & Client agree where you started, because it is checking and making minute corrections up to the start of the dash. Then you dash, and it doesn't correct you at all. If the server and client think you’re going to different places (potentially for any of the reasons explained above), the server and the client will think you’ve ended up in a different place. Then, the server tries to get the client in line and on your screen you will see Ash being yanked from the end of the blue line to the end of the red one. That’s rubber banding! And disorienting! And again… less than ideal.
Now, this is a pretty extreme and super rare example, most of the time this would be a little more like the below picture, and result in some minor jittering rather than a huge correction like up top.
Ok, I’m following. What did you do to fix it?
So looking back to the Ash example, where she didn’t get corrected mid charge so she ended up in different places, and it looked to our player she got pulled across the map? Now, the game server corrects during all charges (except Drogoz, because he's really complicated and we’re still working on optimizing him), which allows the client to correct problems as soon as it gets the information. Going from the above pictured situations to something like this:
It will feel a lot smoother in game than it looks here. I literally could not draw as many lines as I would need to accurately depict what is happening.
In addition to this main change, we found a few issues that were only affecting specific characters. We’ve cleaned instances like this up as well. For example, when you were chaining Koga's dashes together sometimes it would get really wonky. Or how Ruckus's previous dash implementation was, in layman’s terms, super broken, and now it works like how all other charges work, resulting in a much smoother experience. Or how Androxus previously had issues with how his slow fall between his dashes would cause even more corrections and issues. There were quite a few examples. All fixed now!
Also, these changes allow us to fix other issues surrounding charges in better ways. Previously, there was not a great way of measuring when a charge is about to end. Now there is, which allowed us to fix some issues with Androxus's dash! The client can now fire weapons earlier following dashes without the server discarding it, which would create a false fire (a shot that on your end looks like it happened, but deals no damage). Remember when we attempted fix to the “Androxus dash false fire” issue by adding a client lockout, and then reverted it because everyone universally hated it, including our own team. Now, we’ve addressed that issue in a way that will suck a lot less.
You made it to the end, awesome! Thanks so much for taking the time to check this out, feel free to leave questions in the comments and I’ll try to clear up any confusion.
See you in the Realm!
A fellow tech un-savy Champion AKA Molly
The pictures helped:D
@CMS Glad to hear it! I know it's a daunting topic, so I tried to break it down as well as I could... and that just happened to be with pictures.
@Borvik Me too.
GeSteYiam last edited by GeSteYiam
Cannot we give back the momentum the way you did for maeve on the last hotfix to the rest of the cast? or you did just revent this change for maeve ?
Gao Shun last edited by
Does this also improve delay effect when we play outside of our optimal server?
Does this improve killcam weird animation?
@Gao-Shun I heard recently that something is being done to correct a lot of things in the killcam.
scardeo last edited by
@GeSteYiam they did it for the rest of the champs in the next patch
scardeo last edited by
Man this is awesome. It is going to help the game feel much better to play can you also do it when mounted? I get my largest rubber banding when riding to point and i can be a few seconds behind on that initial point fight.