Skip to content

Aurelion Sol during Day 1 Worlds

RiotRiot Penrif··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

KittyGotWet6 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.

RiotRiot Penrif22 votes

Oh yes it was quite the voyage of discovery. We had QA-folk trying anything to reproduce it, attacking from any conceivable angle, engineers staring at code trying to make any sense of the evidence and many other Rioters offering any help they could. We were finally able to reproduce it on a development machine late in the night and were eventually able to trace a narrative back to root cause early the next day.

Teamwork makes the dream work.

TauntyArmordillo1 votes

Why are you guys hard-coding everything in your game?

Psaltus1 votes

I imagine it's to save on processing power. Resources are extremely valuable in always-online businesses

Delioth4 votes

Because calculating one more number every tick takes resources. When that number hasn't come up until S6 Worlds, it is a non-issue. Some things need to be hard coded for performance, some need to be hard coded for consistency, and some should be hard coded because it isn't worth it to be dynamic. This one fits in 1 and 3.

NottBrandon3 votes

[{quoted}](name=Riot Penrif,realm=NA,application-id=A7LBtoKc,discussion-id=7KgXRu3X,comment-id=00020000,timestamp=2016-10-02T01:50:40.509+0000)

Oh yes it was quite the voyage of discovery. We had QA-folk trying anything to reproduce it, attacking from any conceivable angle, engineers staring at code trying to make any sense of the evidence and many other Rioters offering any help they could. We were finally able to reproduce it on a development machine late in the night and were eventually able to trace a narrative back to root cause early the next day.

Teamwork makes the dream work.

So was this only reproducible when all of the first 12 clients for secondary synch were NOT one of the 5 members on the enemy team (the 5 players that don't have vision of ASol)?

RiotRiot Penrif5 votes

That is correct

Ben R4mZ1 votes

[{quoted}](name=Riot Penrif,realm=NA,application-id=A7LBtoKc,discussion-id=7KgXRu3X,comment-id=00020000,timestamp=2016-10-02T01:50:40.509+0000)

Oh yes it was quite the voyage of discovery. We had QA-folk trying anything to reproduce it, attacking from any conceivable angle, engineers staring at code trying to make any sense of the evidence and many other Rioters offering any help they could. We were finally able to reproduce it on a development machine late in the night and were eventually able to trace a narrative back to root cause early the next day.

Teamwork makes the dream work.

What I wouldn't give.....

Linna Excel5 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?

Kritty6 votes

[{quoted}](name=Linna Excel,realm=NA,application-id=A7LBtoKc,discussion-id=7KgXRu3X,comment-id=0000,timestamp=2016-10-02T01:15:19.903+0000)

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?

The previous issue was his orbs sitting where he last disappeared into FoW until he reappeared. That was fixed, but has apparently shown a new bug (this one), that needed a new fix.

Linna Excel1 votes

Ah, okay. Thanks for letting me know.

I wonder if his orbs have any more bugs lurking in them.

gyyyr1 votes

I'm pretty sure they do They just haven't been found yet.

RiotRiot Exgeniar6 votes

No, it was a separate issue, and it was fixed.

Flemman6 votes

speaking of that previous issue with something obvserve by a player long after it is irrelevant, are you open to use the same tool for ekko timeclone who show for a short time on his old know possition even if it's more than 4 sec and he just appear on the opposite side of the map

isn't that the same issue of false info than the aurelion star's one?

DeathBurst2 votes

^This please!

Yaknose3 votes

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

TeCoolMage3 votes

Spaghetti code 101, today it tastes like dragon balls

JustCallMeSPED3 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. ;)

Lord Blackout2 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 Six2 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οri2 votes

gj

GerAvos2 votes

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

Aurelion Solari1 votes

Nope! from what I understand, everybody sees all the things!!!!!! ALL THE THINGS!!!!!!! unless they actually shouldn't, like my fail flashes in base

gyyyr1 votes

they would, if they were unable to have vision of everyone at the same time. The spectator gets all the information about the location of the champions, even if they have FOW for only one team. The false information is only produced when the used client doesn't get the information of aurelion sols location(the player of the enemy team)

ExHentai1 votes

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

RiotRiot Penrif6 votes

Yes, Aurelion Sol will be available for play on day 4.

https://twitter.com/lolesports/status/782113765932175360

9001Teemos1 votes

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

RiotRiot Penrif4 votes

No, it applies to the champion as a whole.

TheHurricaneGamr1 votes

PINE SOL BABY!

CLG Dyrus1 votes

.

Declined1 votes

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

zaire901 votes

{quoted}

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

there was a remake and the redid the match

GeoGamer1 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.

AlienTree1 votes

From the post, I believe he said there are more than 12 spectators in the game even! But the key thing about the bug is that it only becomes relevant when Au Sol enters fog of war, so that the "secondary sync" can keep up with his position without directly showing the opposing player where he is. Fortunately, spectators rarely (or even never in some cases?) have fog of war disabled - so they won't need secondary sync in the first place. Bug solved for everybody!

Popppyseed1 votes

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

Delioth1 votes

Did you read? It only affects when there are >12 clients (players, spectators) and NONE or ALL of the top 12 would be able to see it. It wouldn't have a fix for normal games at all, since there is no way to have more than 12 players (spectators don't count since they're different anyways). Additionally, they didn't push though a fix for it, they found a workaround.

Ruffybad1 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.

Delioth3 votes

NO! Don't do visibility client-side. That means you're sending the CLIENT all the data on where everything is- which means it can be hacked.

Aurelion Solari1 votes

I'm not sure you are getting what he means, it would not be hackable, the server is deciding everything, the only thing the client is doing is displaying what the server is processing. What the client should see is only the result of that, you cannot obtain more information about the game from this, likely even with heavy, and very detectable client side modification.

TLDR; can't hack this server brah

Delioth3 votes

I would also do visibility on the client side so you** do not have to be selective in what info you send to clients**

They're not saying to calculate the visibility on the server and send that down- they're saying to send everything to the client and let the client decide what to show. That can be hacked.

TeeTohr1 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 ?

Realsteel971 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 Solari1 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 . * ・ 。゚☆━੧༼ •́ ヮ •̀ ༽୨

Troll Armada1 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?

More from Dev Corner

More by Riot Penrif