I am sure everyone in the game has, at some point, been inconvenienced by this game’s awful netcode. The symptoms of it are:
- Using a skill, get stuck on animation, and the skill wasn’t actually released;
- Attacking a monster, get the hit animation, but no damage comes out. The monster was in front of you on your client, but server-side he was standing somewhere else;
- You knockback/knockdown someone. Instead of falling on their asses, they they run off in a random direction and walk back. By the time they did this motion, they’re already on their feet and away from you;
- A party member is invisible. His character got stuck somewhere in the map client-side for you, when in reality he’s still following the group. You see him attack and use skills, but no sprite is visible;
- In PvP, you’re being attacked by someone invisible. This is the same as above, they got stuck in one of the walls on your client, but in reality they’re chasing you and attacking and you cannot see them or fight back;
Above is a video where this happens quite a few times. Perhaps because that player’s ping was high, but he desync positions on my screen several times. If you ever see a Swordsman attacking thin air, this is what’s actually happening.
This problem is tied to the game’s netcode. Like all kMMOs, everything is optimized for people playing within Korea. It was made expecting players to have 20 ping or less. If you’ve ever watched a kTOS video, you’ve probably seen how much faster koreans are able to spam skills, use buffs, and even do auto-attacks. That, too, is because of the ping.
I doubt this will ever be fixed or improved in any way, but we CAN improve the way the Client handles information. The desyncs happen and it cannot be avoided, but the reason the client STAYS desynced entirely client-sided, and could be fixed, in order to mitigate most of the issues I listed.
How it works
A desync happens when there’s a conflict between where a player is standing. Server-side(which is what matters), the player is standing in one place, but on your screen(Client-side), the player is somewhere else. You see this quite a few times on my video: I knockdown the player, and he really was knocked down server-side, but his sprite on my screen keeps moving in whichever direction he intended to head.
This is here things get stupid. It takes a couple instants, but the client actually realizes this mistake. In most games, what usually happens is that the game client will instantly move him from his current positions(which is the incorrect one), straight to his actual correct position on the server-side of things. Instead, Tree of Savior’s client is DUMB AND STUPID, and makes him WALK BACK THE PATH BETWEEN HIS INCORRECT AND CORRECT LOCATIONS. That’s right, instead of fixing the issue as fast as possible, the desynced character manually walks back. This is the reason why, in Team Battle League, you see people walk into walls but attacking you from afar. Your client is trying to fix the desync, but because it tries to do this by manually walking the desynced character, it can never fix the problem.
The solution: Fix this awful design and teach the client that, when it detects a desync between client and server -side, it should instantly snap the character back to the correct position, instead of trying to pretend it never happened.
