I was going to post this on the official SWTOR forums but since they're overloaded at the moment I'll dump this here:

This is a post about how Server - Client communication feels like in SWTOR, and why it's unresponsive and laggy.


Client PC: Yo, sup dawg. My master here wants to trigger “Force Sweep”

100ms later

Server: I hear you brother. Just tell me again when your animation is at the point where it actually deals damage.

100ms later

Client PC: For realz man? Aww right, yu da boss.

500ms into the animation

Client PC: Ok boss, animation is now dealing damage. Plz calaculate!

100ms later

Server: Yo dawg, tell your master your ability did XYZ damage! …Oh no hold it there. Seems like his target left the area of effect.

100ms later

Client PC: For realz?! My master is going to be pissed. I just told him the dude’s right beside him.

100ms later

Server: Aww, I’m sorry man. But people who wrote this code clearly had no idea how to create good netcode.

This is what latency currently feels like in this game.



But so this is more than a whine post, let me share how it SHOULD be.

1. Animations should be entirely client-side. It’s ok for abilities not to deal damage instantly, but don’t tie it to the animations.
2. Animations should take latency into consideration, assuming that most players have at least 100ms latency.

This is what should happen, assuming Force Sweep animation needs 500ms to play out.

Client: Yo server, my master is using “Force Sweep”. Please calculate the damage in 400ms.

100ms later

Server: Ok dude, will get back to you in 300ms

300ms later

Server: Ok dude, Force Sweep did XYZ damage.

100ms later

Client: Ok thanks man. Will tell my master right away.

What I’m trying to convey here is that, assuming an ability has a 500ms (half a second) animation, the netcode should accommodate for it by including latency delays into their “delayed” calculation.

Ergo, although the server knows Force Sweep has a 500ms animation period before dealing damage, it also knows that the signal took ~100ms to reach him and will require another 100ms to return to the client. This the server will only “hold” the damage calculation for 300ms, instead of the standard 500ms dictated by the animation process.