Aurelion Sol during Day 1 Worlds

RiotRiot Penrif·10/2/2016, 1:11:37 AM·1 votes·80,205 views

During Worlds Group Stage Day 1: TSM vs RNG, there was an issue that prevented TSM Bjergsen from seeing the missiles orbiting RNG Xiaohu's Aurelion Sol.

http://i.giphy.com/qoCUOLcLOXcoo.gif

In this post I will explain the technical details of why this happened. It's a complex issue, so stick with me - I'll walk you through the necessary foundations then follow the cause of the problem and what we're doing to resolve it.

#Background Technical Information Aurelion Sol's missiles have him as their target object. Usually a missile's target is the object it homes in on, but in the case of orbiting missiles we utilize the target information to convey which unit the missile orbits around.

When the client is told about a missile that's targeting a unit out of vision, it creates a placeholder object to indicate that the client doesn't have proper information about that target. This placeholder prevents the game from utilizing outdated information from a known but not visible unit.

When one of Aurelion Sol's missiles can be seen but he himself cannot, we have a mechanism whereby the server sends positional information of Aurelion to clients so that the missile can be simulated in a reasonably correct position. I'll call this process "secondary synchronization." We had some issues with the missile showing up in the wrong place sometimes, which were fixed by having the missile stay hidden until correct positional information arrives. This can happen either through secondary synchronization or by Aurelion becoming visible.

The final bit of background that you need is that esports spectator clients are not set up like the spectate feature players use. When you spectate a game you're not connecting to the game server directly; you're connecting to a service that takes data from the game server and is able to broadcast it to a wide audience and introduce a delay. Neither of these properties are ideal for the esports broadcast, so those spectators use a specially created mechanism that allows them to connect directly to the game server.

With the background covered, let's dive directly to the root cause and work our way up.

#Root Cause The logic for deciding whether or not the secondary synchronization system should be turned on considers the visibility status of the first 12 clients. They are sorted by account ID value, regardless of if they represent a player or esports spectator. 12 is the maximum number of players in any kind of League of Legends game, so it's a reasonable amount for the secondary synchronization logic to check.

#Sequence Leading to Symptom In the setup we were using on day 1, all of the spectator accounts were older than the players’ accounts. This led to them having lower account ID values, putting them ahead of the players in the client list. As I explained above, the logic for secondary synchronization looks at the visibility state of the first 12 clients. We use more than 12 spectators, so in this state it only considered spectators - and spectators see everything. So, even in a situation where secondary sync should be enabled, it would decide to keep itself disabled forever.

Without the secondary sync system functional, Aurelion's missiles won't appear to follow his motion once he enters fog of war. You can see this happen at the end of this clip:

http://i.giphy.com/tMrCr1qJKq0PS.gif

That’s already troublesome, as the player gets misleading information. It gets worse; the client relies on the secondary synchronization system to resolve the target placeholder put in due to the original lack of vision. This puts the missile in a state where it will never have the correct target. Since the missile will only show itself once it either gets information through secondary sync or through its target becoming visible, the missile is now forever hidden as both of those triggers have been made impossible.

#Workaround Proper fixes for this symptom are easy to identify now that we understand what happened step by step. However, since deploying a new build for an ongoing event is a significant risk on its own, we have decided to work around the issue instead. By using spectator client accounts that are newer than the players' accounts, we're able to consistently and completely bypass the root cause. Our tests have shown this workaround to be reliable.

We will be implementing the proper fixes as a part of our normal release cycle so that future events will not need to utilize this workaround.

Regards, ~Riot Penrif

44 Comments

KittyGotWet10/2/2016, 1:40:22 AM6 votes

Interesting to see how the age of the accounts played a factor in this bug. Could we hear more about the process of finding the causes for the bug? I imagine you guys would have been running all sorts of tests before figuring out what it was.

Linna Excel10/2/2016, 1:15:19 AM5 votes

Didn't this happen before, Aussie's orbs not being seen in a pro match? Correct me if I'm wrong but wasn't that fixed?

JustCallMeSPED3/24/2017, 6:51:16 PM3 votes

As a software engineer, I was genuinely pleased to be able to read the technical information behind this issue. Shouldn't be using magic numbers in your code. ;)

Yaknose10/2/2016, 2:59:32 AM3 votes

Congratulations on tracking the bug down, that's a serious maze to have to go through to find the cause.

TeCoolMage10/2/2016, 3:38:55 PM3 votes

Spaghetti code 101, today it tastes like dragon balls

GerAvos10/5/2016, 1:59:02 PM2 votes

So now spectators will get false information instead of the players?

Lord Blackout10/2/2016, 3:31:53 AM2 votes

To me it sounds as if the issue is the order by for account id's being ascending being the primary sort for ensuring an account is in the top 12 clients. Couldn't a fix for this be an active_player_flag = Y or N based on player/spectator respectively, ensuring players are always included in the 12 clients?

Panda Eight Six10/2/2016, 8:08:45 AM2 votes

Havent tested this, but it happens on Ahri too, her orbs stay on the spot where she disapears in FoW. it stays there for probably about half a second

Kοri10/2/2016, 10:24:53 AM2 votes

gj

ExHentai10/2/2016, 1:31:06 AM1 votes

So, does this workaround mean he is enabled for tomorrow or later?

Popppyseed10/2/2016, 4:10:23 PM1 votes

Does this mean other trail effects( Ekkos ult and deadmans) Sometimes showing up misleadingly will also be fixed?

Ruffybad10/2/2016, 4:18:13 PM1 votes

Do you use secondary sync to hide Sol's information from players lest they use it to maphack or for what reason? The most straightforward implementaion of his W behaviour I could think of is a unit with skin X that has its position updated before any collision checks and then you run collision on all units registered in the game engine, filtered for "is enemy", running a function if there is collision. I would also do visibility on the client side so you do not have to be selective in what info you send to clients, League is not bandwidth capped at all so I do not see the problem with it.

TeeTohr10/3/2016, 7:22:20 AM1 votes

Will the fix be that instead of selecting the 12th first account for the second synchronization, it will select the ID which are playing (as players, not spectators) in the game ?

Realsteel9710/3/2016, 3:26:24 PM1 votes

When is urgot is going to can any love? It's been 4 years since urgot has scene some CONSISTENT play in the LCS and in higher elos. NO ONE FEARS URGOT. That's bad branding by you guys. All the riot employee(s) that work on urgot say fear urgot and urgot will rise ex(ManWolfAxeBoss). Look at the lcs right now, all you see are tanks, urgot would fit perfectly and will strike fear in tanks. I've spammed urgot for the passed two seasons top,mid and sometimes adc. Urgot is missing mobility and needs more team play. All i feel like when playing urgot is a support not a tanky marksman. Why don't u put urgot on your needs love right after Yorick pls. I love watching lcs and hyping over my favorite team. I feel urgot would make lcs less boring, especially with all those tanks just soaking up all the damage, someone needs to put a stop to them #URGOD RISE. Make him destroy tanks and create fear in adc's please, i've been playing this game since early season 3 and its coming to a point where i might stop playing. Atleast make this a priority this season, I have 189k points on him right now. If you care for what i said right hear and read it all than you would help him please, also if you want to ask how urgot feels top right now, please feel free to ask, not that you would need or care for it, but whatever. #URGOT IS LOVE #URGOT IS LIFE #HE WILL RISE #URGOT CANNOT BE STOPPED #URGOT>RIOT PLEASE RESPOND

Aurelion Solari10/6/2016, 10:24:57 AM1 votes

Thanks actually pretty funny :P I mean I knew that AurelionSol might have some kinks and hitches, but I would have been face desking the entire time, I'm pretty sad at finding bugs that interesting, and by interesting I mean infuriating and mind-blowingly edge case [zombie-brand-mindblown] you guys are my bug squashing heros <3 bug zapper the dream <3 thanks for the post ༼∩ •́ ヮ •̀ ༽⊃━☆゚. * ・ 。゚ Penrif . * ・ 。゚☆━੧༼ •́ ヮ •̀ ༽୨

9001Teemos10/2/2016, 1:51:46 AM1 votes

Isn't this only an issue with the Ashen Lord skin?

Troll Armada10/27/2016, 4:21:39 AM1 votes

Interesting.

How long did it take you to track the root cause down? ...or did you immediately have a theory as to the cause?

TheHurricaneGamr10/2/2016, 2:20:34 AM1 votes

PINE SOL BABY!

CLG Dyrus10/2/2016, 3:15:20 AM1 votes

.

Declined10/2/2016, 4:10:48 AM1 votes

Can you tell us what happened to the match? Seeing as this was an official match what is the procedure to handle this?

GeoGamer10/2/2016, 12:04:08 PM1 votes

So that means the players and two spectators (total 12) will see everything but any more spectators might still see the bug, right? Which is fine i guess, as long as the players don't see the bug. I am pretty sure there are more than 2 spectators watching the game during broadcast.

Great workaround guys. Nice job.