GDK adoption
Each GDK is only supported for one year. While existing games can continue to ship using a retired GDK, this can be problematic for games that ship as a service. Games introducing new features after a GDK has been retired may encounter bugs or integration issues that were not seen in earlier use cases of the GDK. Equally, the game may want to take advantage of features only found in the newest GDKs that are getting released. A game must be built against a single GDK. Games cannot mix components from one GDK with another. On console, the game only includes a single Game OS and the various GDK libraries may have dependencies on that underlying OS. On PC, only one version of the gaming runtime gets loaded into the game process, creating a similar “single version” environment as seen on console. It is recommended that GaaS title periodically update to more recently released GDK that is still supported.Intelligent delivery
GaaS titles can get bigger and bigger over the years with the introduction of new content. Gamers may have limited amounts of storage space. This could impact their ability to install the game’s latest update. While it is true that gamers have the ability to manage their own storage spaces, games built with Intelligent Delivery give the gamer more flexibility and choice in how they use their storage space beyond uninstalling entire games wholesale and enables gamers to keep more games installed on their devices for much longer. Using Intelligent Delivery, games can leverage features and recipes, choosing what is installed by default and giving games the ability to manage what parts of the game they want to keep installed and what parts they may want to remove because they aren’t using it anymore. GaaS titles could choose to put their new content into separate features to enable this kind of management. The idea is that the new content is a durable. Here is one suggestion that would make this easier to manage:- In the game’s layout file, make each durable correspond to a Feature.
- The Feature will declare one or more Tags that can be used to indicate which of the chunks in the layout file should be installed if the gamer has a license for that content.
- Make sure that the layout file includes a Recipe that has a Store ID child. This recipe
should reference a single feature that corresponds to the same Store ID. Adding the recipe will
ensure that if the gamer has previously purchased this content, it will automatically get
installed.
[!NOTE] There may be other features and recipes that have nothing to do with durables.
- Call XPackageEnumerateFeatures to enumerate the features.
- Use the returned Store ID that is in the XPackageFeature to check for the license, query for more details, or invoke store purchase flows.
Downloadable content
Instead of continuously evolving their base package, some GaaS titles may choose to evolve over the years using downloadable content (DLC). Games can choose to place assets or exectutable code into that DLC. With executable code there are two possible paths: DLLs and EXEs. If the game puts DLLs into their DLC, they can:- Mount that DLC using XPackageMountWithUiAsync.
- Use LoadLibraryEx.
- All previously mounted DLC stays mounted.
- Mount that DLC using XPackageMountWithUiAsync.
- Call XLaunchNewGames using the path from the mounted DLC.
- The existing game process will be terminated.
- All DLC except the target of XLaunchNewGames will get unmounted.
- The G: drive will continue to point at the root of the base package and not the newly launched EXE.
Reference API documentation
- XPackage (API contents)
- Functions
- Structures
- xgame (API contents)
- Functions
