Clicked on a cannon minion, saw anti-turret socks. Apparently they're a little stinky, but effective. This is truly the greatest discovery of our generation.
External link →Clicked on a cannon minion, saw anti-turret socks. Apparently they're a little stinky, but effective. This is truly the greatest discovery of our generation.
External link →/u/Shynkr0 did the design for these way back when they were an intern (They're now a non-intern Rioter). This has been out for awhile, actually. :)
There's also a fun bit of tech design story to these that's a good example of "building something right" to get more gameplay space:
We avoid syncing quite a bit of data when relating to minions since they are quite frequent and there's just a lot of information to cross the wire. With item inventory in particular, every character CAN have an inventory, but only champions and towers ever had it fully synced. This was mostly just to avoid the overhead of anything else.
Well, we actually found some success of people finding the tower icons when they were just starting to get more into the game and that helped to subtly seep the more nuanced mechanic information out there.
When we started looking into it though we didn't want to take the perf hit with syncing inventories.
But why does the server even need to know about these items? The behavior is inherent to the minions. Making a "client only inventory" was definitely NOT a thing that could just be stapled onto the current code without it being a complete mess.
So, we did a large refactor and abstraction of the item inventory system. Started by /u/Shynkr0 at the end of their internship then finished by myself.
Once the game was going through the abstraction, we could introduce the client side only inventory and never have to sync anything.
Why take on something like that just for minion socks? Well, minion socks is cool. But also, it let us fix some other subtle bugs by at the same time by giving champion clones their own inventory behavior that let them kind of just "borrow" what had already existed. It may also open up future cool design space...
Like Neeko's disguise item inventory. The more and more "system interactive" gameplay designs are super reliant on things built (or rebuilt / refactored!) well to access.
Do you guys have a blog or something about how you actually architect your code? The number of interactions and edge cases seems crazy. Wasn't there a bug that affected other champions that only occurred when Lulu was on the map? (Something about auto attack modifications i presume)
There's an tech blog here: https://technology.riotgames.com/
The most significant one I can remember involving Lulu wasn't really a lulu bug in particular. It was a series of bugs that Lulu was just best equipped to unveil.
For most of those ones, those have to deal with how character stats actually works. AD, AP, etc.
Every 0.25s (minimum), a character's stats get rebuilt from nothing. Everything on them gets reset, then the game readds character base stats, character per level stats, all items, all script based stats (e.g. from buffs), and then there's an optional "conversion" step (e.g. for Pyke). This process is pretty fast, it's all pretty straightforward number-y stuff, which computers are good at. The reason it was done that way primarily though is because it prevents "leaky" stats from happening. It's a lot more difficult to get in a situation where something needs to add a stat and later remove it, but forgets to remove it.
Unfortunately, "the script based stats" presents a problem. League has a very flexible and VERY powerful scripting engine. It allows a LOT more than is usual for a scripting engine. And especially when League was young, without a lot of safety checks to discourage you from misusing things. And so "UpdateStats" was misused long long ago to have things occur outside of stats every 0.25s. Not much of a problem then, but bit later when we needed some things to cause the stats update to happen immediately.
Lulu's ultimate causes an immediate change in stats. This forcefully reveals any older script that was misusing the update stats process.
Most of these have been caught and fixed and lots of validation and helpful guidance are in the scripting tools now. We also try to cause more things to force a stats update more frequently because it helps makes existing bugs more obvious. For example, a few years ago I changed items such that every inventory change caused a character's stats to immediately update. This "introduced" a bug where using a potion would regen a large burst of extra mana on Viktor. We didn't change the item code, we fixed what was wrong within Viktor. Before the item case came along, nobody had actually noticed that Lulu's ultimate was also granting Viktor free mana.
[deleted]
Please don't leak our patch notes.