Patch 2.3: Explanation of "Global Cooldown" issue

Forum for mod & macro requests and discussion

Moderator: Demon Hunters

Post Reply
User avatar
Class Leader
Posts: 3797
Location: Orefield, PA
WoW character race: Night Elf
WoW character class: Druid
WoW character gender: Female
WoW character level: 100
WoW character guild: You and Whose Army

Patch 2.3: Explanation of "Global Cooldown" issue

Post by Lealla » Mon Nov 19, 2007 2:54 pm

For those curious about what Oban and some others are concerned about, here's a summary of the changes to spellcasting in 2.3 and how they affect various types of players. For the record, I have no particular prejudice against what I call "key spammers", except that they are the hardest hit by this change.

The Good
Put simply, 2.3 introduced a mechanic that's designed to help players compensate for latency without needing to macro all their spells with /stopcasting and deal with the risk of canceling an in-progress cast.

Mechanically, the check for whether a spell is in progress or not was moved from the client to the server - or to look at it from another perspective, the client no longer blocks spellcast requests from being sent to the server except while the ability is on cooldown or some other circumstance applies (such as being silenced or stunned). It is then up to the server to respond and tell the client whether a spell is in progress or not.

In combination with a casting bar latency meter like Quartz, almost every spellcaster who uses cast-time spells (rather than instants) will benefit significantly from this change, because you can now chain cast your spells with virtually no delay due to latency, and no risk of canceling a spellcast by mistake. With optimal usage, you could see an improvement in casting DPS directly proportional to your latency divided by the cast time of your spells.

Example: Your normal main nuke has a 3 second cast. You typically have 300ms of latency. This means that every spell you cast actually takes 3.3 seconds because of the round-trip to the server; you spend 3/10 of a second waiting for the server to tell the client that it's okay to start casting. Now, you can start your next cast immediately upon finishing your previous cast, potentially improving your casting speed (and therefore DPS) by 0.3/3, or 10 percent.

The Bad
Naturally, this optimization comes at a cost. Since the global cooldown is still determined by the client, the client has to be able to know when you actually started casting each spell - otherwise it would spam the server with requests. Therefore, if you send a spellcast request to the server while a spell is already being cast, the client starts the GCD immediately, whether or not the server validates the request. If the server denies the request (because you were still casting your previous spell, as an example), the client cancels the GCD, but it has to wait for the server's response before this happens.

In a worst case scenario, this could potentially increase the time it takes to get a spellcast off by as much as your latency to the server. For the worst case to occur, you'd have to send a spellcast request at the very end of the cast time of your previous spell, causing the server to reject it. Also, this should have no effect on instants unless you mix them with normal spellcasts, since the GCD for instants is always determined by the client.

(Note: there's a theoretical situation in which instants could be affected by this - if your latency is highly variable, the client could lag behind the server by different amounts at different times, causing the server to reject a valid spellcast because it believes you're still in the global cooldown. I'm pretty sure, however, that the server does not enforce the GCD.)

Example (3 sec spellcast, 300ms latency):
00.00 - Client sends spellcast request, starts GCD
00.15 - Server gets request, starts casting
00.30 - Client gets spellcast event, starts cast bar
01.50 - Client's GCD is over
02.99 - Client sends new spellcast request, starts GCD
03.14 - Server gets request, rejects it because previous spell is still casting
03.29 - Client receives rejection, cancels GCD
03.30 - Client sends new spellcast request, starts GCD
03.45 - Server gets request, starts casting

In the above worst case, you are penalized by exactly the amount of time you would have lost anyway by not having server-side cast detection.

The Ugly
Here's the nasty part. In 2.3, the client now displays text and voice error messages whenever (a) you are in the global cooldown ("That ability is not ready.") , or (b) server-side cast detection tells you that you are still casting your previous spell ("You can't do that yet."). Now the real problem with this (aside from the annoyance) is that the client is perceived to "hiccup" or stutter each time a failure message appears, causing problems for players who repeatedly hit their keys or click their mouse to activate an ability, rather than waiting out the global cooldown.

The Fix
Blizzard has already hotfixed the server to no longer cause the error spam to occur on the client when the server detects a cast in progress and rejects the client's request. The fix to stop the client from giving you error spam while inside the GCD is coming in 2.3.2 (it can't be hotfixed).

The developers have also promised to give significant attention and study to the perception among players that they are no longer able to rapidly cast instant abilities. We'll have a chance to test this when 2.3.2 goes on the PTRs.

Post Reply