Reviving Nexus Blitz

Hey there! I'm Derek "Riot Derkese" Nguyen, a Gameplay engineer currently working on the League of Legends game modes team. Since joining Riot, most of my work has involved helping to build new game modes. This is why reviving Nexus Blitz presented such a unique challenge. Instead of creating something entirely new from the ground up, this project focused on upgrading older systems and making them more accessible for future developers to work with.

How Did We Get Here?

A little bit of context: the last time Nexus Blitz was released was during Patch 11.11 in 2021. Since then, there have been a slew of player-facing gameplay system changes and under-the-hood changes to the game engine. League of Legends receives major gameplay updates every year and smaller gameplay changes every 2 weeks throughout the year.

Due to the compounding effects of these updates over the past couple years, Nexus Blitz eventually fell to a point where it was unplayable. Our approach to reviving Nexus Blitz was guided by three fundamental principles: Feature Parity, Player Experience, and Sustainability. We’ll take a look at how we used these principles to fix the two primary blockers for the return of Nexus Blitz.

Rebuilding the UI

Nexus Blitz, as a game mode, introduced 5 unique pieces of UI in addition to those already on Summoner’s Rift:

  • Event Card UI, used to notify player of upcoming events and rewards

  • Team Fight UI, used in Arena type events

  • Team Score UI, used in events like Scuttle Racing

  • Boss Health Bar, used in Loot Goblin events

  • Cinematic Bars, used for Sudden Death

Back when Nexus Blitz was originally built, the League of Legends UI code relied on hardcoded file paths to the UI game data. This wasn't ideal for a number of reasons: any changes to UI required the involvement of an engineer, it created hard dependencies with names and object links, and it did not gracefully support error handling.

An update to the game engine in early 2022 transitioned away from hardcoded strings, in favor of linking objects in Game Data. This work required updating every piece of game UI, but since Nexus Blitz wasn't a priority at the time, its UI was deprecated and removed. Our aim was to replicate the functionality that they had during the original release. 

Re-Creating the ViewControllers

Our first priority was to make all the ViewControllers functional. Each piece of UI existed in various states of outdated or outright removed from the game. Luckily, the League Team’s use of source control allowed us to easily replicate old UI behaviors. However, we couldn’t just get back the UI 1:1 due to how the modern League UI is linked together and built. It’s like putting a bike wheel on a motorcycle. Let's explore what the conversion process looks like for converting one of the key pieces of UI: the Event Cards. 


Event Card for the "Prize Fight" event

The very first step of creating any UI in the game is the creation of a ViewController. The current approach to the construction of UI closely resembles the MVC(Model/View/Controller) architecture. While some UI elements occasionally followed this pattern before the UI overhaul, it wasn’t a hard set rule. This meant various pieces of UI could be implemented completely differently depending on the developer. After the overhaul, there is now a standardized way that UI should be structured and authored.

The next step was to convert any old API calls and data to the new standard. As mentioned earlier, there was a big change where links to UI elements were moved into game data rather than having hard coded strings. Below is a small snippet of the consolidation and cleanup that happened:


Old


New

As you can see, most of our efforts that went into re-creating the ViewControllers was spent on adapting and understanding the differences between the old and modern way of authoring it.

Setting Up Data

The next order of business is setting up the UI in data. Not only have there been changes to how all the data is linked together, but there have also been changes in the data structures that held and represented the UI components. Here’s a peek at what the old JSON blob looked like and what it looks like now.


Old


New

Doing the conversion manually for one doesn’t look too bad, but this was probably the most tedious part of the entire revival project. Each of the 5 pieces of Nexus Blitz UI contains 20-40 elements like these, and they required engineers to constantly iterate, going back and forth comparing and adjusting the elements until it matched the original UI. . While there are some shared characteristics between the old and the new, in most cases, manually converting the JSON blobs proved to be more labor intensive than just recreating the elements with the new data structures.

Looking Ahead

One sacrifice that we had to make in order to revive the game mode involved breaking UI coding conventions. Whenever a Nexus Blitz specific UI is activated, the gameplay script directly sends packets to a specific piece of UI on the player’s client. This breaks MVC principles, but it was a shortcut that had to be made in order for Nexus Blitz to release this year. Centralizing and removing this antipattern undoubtedly will be part of future sustainability improvements.

Polishing Gameplay

Once we had the barebones of the UI in, we could actually get into the game and start addressing the gameplay features that needed work. A majority of the issues that we had to solve stemmed from the large amounts of gameplay changes since the last run.

For example, Nexus Blitz was not updated when jungle pets were implemented in Preseason 2023. So several seconds into a game, the game server would crash and players would be kicked out due to not properly loading in jungle pets.

Feature Compromise

As mentioned earlier, one of our guiding principles was achieving feature parity with the last release of Nexus Blitz. However, we had to make a few judgment calls when it came to the jungle. Last time Nexus Blitz ran was before the introduction of the current jungle items, pets, and the implementation of jungle patience to Summoner’s Rift (League’s primary game map). Here, we were faced with two options: either find and revive the old Nexus Blitz Jungle implementation or adopt the newer Summoner’s Rift Jungle Improvements.

Creating exceptions exclusively for Nexus Blitz and using the old Jungle Implementation is incredibly expensive; if there are more Jungle changes in the future, Nexus Blitz will have to be taken into consideration and a decision will need to be made if the changes will be adopted or not. In order to make it easier for future designers, we decided to adopt the modern Summoner’s Rift’s Jungle Improvements and make any necessary adjustments and balance tweaks. This allows the mode to be more sustainable without creating constant exceptions.

Game Mode Polish

After getting all the features in and getting the game mode to a shippable state, there was still some time for us to make improvements to the game mode. We weren’t going to be able to build new events or overhaul parts of the game mode for this release, but we could add adjustments and improve the experience in existing gameplay spaces. 

Items were one potential avenue to improve player experience. Since the last release, all the Nexus Blitz items had their game data and scripts completely removed. Luckily, a majority of the Nexus Blitz exclusive items were already back in the game due to work on the Arena game mode earlier this year. The items were relatively easy to implement, as most of the cost comes from creating new art assets and ideating on the shape that items would take and we already had a blueprint from the previous iterations. 

We made another adjustment to neutralize event spawn locations. A  common pain point for players in the past was that the spawn locations would favor the team that was ahead. The reason for this skew was that when the game was at a near-neutral state, rather than giving a true neutral position at the center of the map, it picked a random spot in a wide “neutral zone”. For example, if the losing team were being pushed into their inhibitor, and a rolled “neutral” spawn appeared in the enemy jungle, this “randomness” would feel unfair, despite the intention being neutrality. By closing this neutral zone to be the center of the map and making it so that the losing team has a lower chance to roll a neutral spawn, it allows for less “randomness” which was the main contributing factor to player frustration.


Revised "neutral zone" for this iteration of Nexus Blitz

Conclusion

There’s a lot to consider when it comes to reviving an old game mode. We encountered some other issues, like out-of-game systems, or champion and event combinations, but those types of problems are typical live product maintenance work, not Nexus Blitz specific. 

Nexus Blitz is now in a state that is more sustainable and easier to bring back without gameplay improvements as an RGM(Rotating Game Mode). That said, future work is still required to update the UI to follow MVC standards, and future core system changes may also require large updates to Nexus Blitz.

The work to revive Nexus Blitz will also benefit future engineers and projects. Future teams will better understand the expectations around reviving old game modes, including the principles to guide development, required teams to collaborate with, and the costs of a revival project.

I hope this was an interesting peek behind the scenes of this project and I hope to see you in whichever game mode you prefer!

Posted by Derek Nguyen