Last month, those responsible at Blizzard published two articles to provide internal insights into the implementation of certain WoW content or features:

Im fresh on the official WoW page The new part of the "Behind the Scenes" series published this time revolves around the creation or further development of the Companion App so that it can still serve us well after the launch of the new Shadowlands expansion.

One of the biggest tech upgrades we're for Shadowlands to the WoW Companion App is the support of several extensions. Many players have asked for this feature, so today we want to talk about some of the challenges and decisions that come with making such a major technical change.

A couple of historical facts

The Companion App was originally developed to support an extension: legion. Before publishing Battle for Azeroth we decided to prioritize several major backend improvements, including the ability to share code between the app and the PC client. This enables us to take advantage of numerous features and tools in the main game's user interface that the app was previously unable to access. The downside was that we couldn't develop the kind of framework that would have been necessary to support more than one extension at a time. So we replace legion as the only extension the app supported through the latest extension Battle for Azeroth.

We know gamers were disappointed with the access after switching legion-Lose content through the app. That's why we opted for Shadowlands made to support more than one extension at a time. In addition, the mobile team endeavored to bring the content of legion return.

We briefly considered the option of only supporting some of the functionality from previous extensions in order to focus on the content for Shadowlands to be able to concentrate. But we quickly decided that we wanted to restore as much of the functionality as possible. We also knew players with Shadowlands would have the option to stand up with their supporting characters legion Ascend levels via time-wandering campaigns. So we wanted to make sure these players had full mobile support for this.

<img src = "" alt = "With the Companion App, players can register from the preparation patch for & nbsp; Shadowlands& nbsp; between & nbsp; legion& nbsp; and & nbsp; Battle for Azeroth& nbsp; decide. Contents of & nbsp; Shadowlands& nbsp; will be available when the expansion is released.”/>

With the Companion App, players can sign up for the Shadowlands between legion and Battle for Azeroth decide. Contents of Shadowlands will be available when the expansion is released.

Source: Blizzard

A double-edged sword was that much of the legion– specific code was still present in the app and we used the original legionHad assets still in our source control. This stopped adding the legion-Content for the perfect test for our new framework for several extensions. There wasn't much to implement, but we had a lot of work to do to get it legion and Battle for Azeroth cleanly separated from each other.

Three prerequisites had to be met for the framework for multiple extensions:

  1. The app had to delete all data for the content of your current extension and request data for a new extension from the server.
  2. To separate functionality, we had to separate extension-specific user interface code.
  3. We had to break down extension-specific assets to minimize the app's resource usage.

Extension data

When the Legion Companion app was originally developed, much of the server code for handling requests from the app was specifically for issuing legion-Data developed. When it was time to switch to Battle for Azeroth we changed these features to use them instead Battle for Azeroth-Data output. This time, however, we needed the ability to store data for each selected extension. So we had to go through all of the server functions for mobile device requests and modify them to accept parameters specifying which extension to get data for. For example, the request for trailer data had to be able to specify a trailer type (e.g. legion– trailer or Battle for AzerothTrailer) and the request for world quests had to contain the information for which zones quest data is required.

Also in the app itself, some places have been specifically designed to support Battle for Azeroth expanded. In legion the app asked specifically about your order resources. For Battle for Azeroth we just added war resources to this message. Instead of for Shadowlands simply adding more currencies to the same message, we decided to port the PC client's currency system to the new shared code framework designed for Battle for Azeroth was developed. This means that each extension can now automatically request its own currency types instead of manually specifying which currencies are required.

Before: The app requested specific currencies from the server.

Before: The app requested specific currencies from the server.

Source: Blizzard

<img src = "" alt = "After: Each extension can query its own currencies. If you are looking at add-ons that support the monetary system in & nbsp; Shadowlands& nbsp;, the code may seem familiar to you. This is due to the shared code framework which enables the WoW Companion App to share features with the main game.”/>

After: Each extension can query its own currencies. If you're looking at add-ons that use the monetary system in Shadowlands the code may seem familiar to you. This is due to the shared code framework which enables the WoW Companion App to share features with the main game.

Source: Blizzard

UI code

Much of the code to support the extension Battle for Azeroth was added to the existing legionCode, which made it difficult to understand which code was being actively used. For example, the trailer list in Battle for Azeroth still the ability to display weapons, but the weapon button was hidden so that the code was never called. The functionality of the extensions legion and Battle for Azeroth was similar enough that this wasn't a big problem. However, we knew the new features were for Shadowlands would not be feasible to keep this type of architecture. If code that starts with legion and Battle for Azeroth shared, suddenly had to support things like soul bonds and pacts, it would only become more complex than it already was.

Instead, we went through all of the scripts and determined which features were shared and which belonged only to a particular extension. We split extension-specific code into sub-classes or completely new components, kept only the shared basic functionality in the higher-level classes and created new game objects for each extension using these new sub-classes. Although they are based on the same system and share a large part of their functions, only the missions list in legion a comrade-in-arms button and the adventure list in Shadowlands now comes in without that legion and Battle for Azeroth uses a two-tab design and displays portraits of enemies instead of mission type icons.

<img src = "" alt = "Direct comparison between the mission list from & nbsp; legion& nbsp; and the adventure list of & nbsp; Shadowlands.”/>

Direct comparison between the mission list of legion and the adventure list of Shadowlands.

Source: Blizzard

Another major change we're making for Shadowlands behind the scenes on the app is the way we generate database files. The Companion App will now build your database code and data files using the same pipeline as the PC. This has proven useful, among other things, with the code that determines which map each world quest is displayed on. The app originally made this decision using manual logic for each card ID, which wasn't a problem if only Argus and the Broken Isles needed to be supported. However, after we have further zones for Battle for Azeroth added it quickly became tedious. Instead of this code for Shadowlands We could just use the UI map database tables that we needed to make the system fully dynamic. We converted a large piece of code that had to handle zones for all three expansions into a single lean function that any world quest can handle automatically without any expansion-specific logic.

Asset files

One big difference between developing for mobile devices and developing for PCs is that with mobile devices we have to remember that users of the app may have limited data usage or a poor connection. We need to ensure that players are fun and free from frustration when they use the app, regardless of their internet connection. One of the ways we do this is by limiting the amount of data that players have to download in order to use the app.

Each extension is associated with numerous asset files that can add up very quickly. Since we have the app from an extension with legion and Battle for Azeroth to support three extensions with Shadowlands expand, that would mean three times the amount of data required by the app. However, many assets are used by just one extension, e.g. B. high-resolution world map textures, backgrounds of mission locations as well as portraits of supporters and opponents. So we decided to split these assets into different packages for each expansion. This means that the app only has to load those assets into the main memory that are used by the currently active extension. This will reduce the amount of memory used by the app.

We also decided early on to split all the expansions into their own game scenes, which allows us to maintain a clean separation of functionality between the expansions. The game scene for legion does not need pages for pacts and the game scene for Shadowlands has no window to dispatch troops. As with the changes we've made to the code, this also makes it easier to understand what's happening in the app at all times. By separating the assets and game scenes in this way, each expansion is self-contained, which also allows for some more user-friendly download options.

We wanted to give players more control over when to download assets for the app. You can either download everything at the same time if you have a stable connection or download assets for other extensions later so you can use the app faster. And if you choose not to interact with a particular extension, you will never be forced to download assets for it. At 30 to 40 MB per extension, that's a considerable amount of data that you don't have to download!

By separating the individual expansions, you have a smaller download and can start playing faster!

By separating the individual expansions, you have a smaller download and can start playing faster!

Source: Blizzard

Changes to the pipeline

The division of our assets after expansion required changes to two parts of our pipeline: our asset curation tool needed to know which assets belong to which expansion, and our asset package creation tool had to be able to group those assets when creating the final packages . The asset curation tool was another aspect that went a long way in helping legion and then for Battle for Azeroth was specialized. So we had to rewrite it to make it less extension dependent. The new version of the tool goes through the list of extensions with content that the Companion App might need (through iterations of the GarrisonType numbering) and outputs assets for each extension in separate folders. Modifying the curation tool to use the entire list of extensions also means that it will automatically pick up values ​​that will be added to that list in the future. This makes it easier to add new content to the Companion App without constantly having to update our tools.

Our asset file creation and runtime loading make heavy use of Unity's AssetBundle variant feature, which allows the app to treat different versions of a single package file as if they were the same package. The package creation pipeline creates its own variant of each package for each extension based on the extension-specific folder output of the curation tool. These asset packages will be exchanged during the runtime if you change the extensions in the app. Since all variants of a package can be treated in the same way, for example any code for calling up trailer portraits can call them up without having to worry about which specific set of trailer portraits is currently loaded. This means we don't have to worry about the practicalities of loading and deleting assets in our feature code – each extension can pretend it's the only extension in the app.

Supports buffed – it only takes a minute. Thank you!

All readers receive daily free news, articles, guides, videos and podcasts on World of Warcraft, Pokémon Go and other favorite games. So far we have financed this site through advertising and kept it as free of paid items as possible, but since COVID-19 this has become increasingly difficult. Many companies are cutting or cutting their advertising budgets for 2020. Budgets that we are unfortunately dependent on if we want to offer buffed free of charge in the usual form in the future.

For this reason we turn to you now. As a buffed supporter, you can support us so that we can continue to offer our content in the usual form for free, without introducing a paywall or publishing misleading news. Every contribution, large or small, is valuable. Supports buffed – it only takes a minute.

Support now

We thank you in advance.

Read these interesting stories too WoW: Dark and atmospheric! New login screen and muskit for Shadowlands (3) "src ="

Wow: Even more new music from the Shadowlands beta

With us you can see the brand new login screen and listen to the soundtrack of WoW: Shadowlands. WoW Classic: Register now for the "Fall Conquest" PvP tournament (1) "src ="

WoW Classic: Register now for the "Fall Conquest" PvP tournament

Fancy an official PvP event for WoW Classic? The "Classic Fall Conquest" tournament starts in October! WoW Classic: The number of cheaters punished daily is in the thousands (1) "src ="

WoW Classic: Thousands of cheaters are punished every day

WoW Classic's anti-cheat team is supposed to focus primarily on places like Dire Maul, which are particularly popular with bots.

WoW Legion: The Companion App – start and end missions, world quests and more

(*) We have marked affiliate links with an asterisk. We receive a small commission for a purchase via our link and can thus partially finance the free website with this income. There are no costs for the user.