Downloadable content (DLC) is optional content that can be downloaded by Xbox One console users through Xbox Live Services. Downloadable content can be free or it can be Purchasable/Premium DLC (PDLC). DLC made available for the Xbox One console may be related to specific titles, such as a map-pack for multiplayer, or consumable content such as power ups or in-game currency.
Xbox One DLC scenarios are facilitated by the same packaging system as full titles, with changes to the AppxManifest.xml file to indicate that it is a DLC package. Packages are protected by unique license keys that differ from the base application package.
The following subjects are discussed in this topic.
The following examples are common user DLC scenarios.
| Note |
|---|
| Forced update is not supported for DLC at this time. |
This section outlines the steps title developers must follow to create, publish, and ultimately download their DLC packages.
Title developers use the Make Package (makepkg.exe) tool to package desired content into a DLC XVC.
Makepkg.exe /v /l /f chunk.xml /d inputFolder /pd outXVDFolder
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest"
xmlns:mx="http://schemas.microsoft.com/appx/2013/xbox/manifest"
IgnorableNamespaces="mx">
<Identity Name="MarbleMaze.DLC.Eyeball"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="1.0.0.0" />
<Properties>
<DisplayName>Eyeball Marble DLC</DisplayName>
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
<Logo>logo.png</Logo>
<Description>Eyeball Marble DLC for MarbleMaze</Description>
<mx:ContentPackage>true</mx:ContentPackage>
</Properties>
<Prerequisites>
<OSMinVersion>6.2</OSMinVersion>
<OSMaxVersionTested>6.2</OSMaxVersionTested>
<mx:ApplicationEnvironment>title</mx:ApplicationEnvironment>
<mx:OSName>era</mx:OSName>
</Prerequisites>
<Resources>
<Resource Language="en-US" />
</Resources>
<Extensions>
<mx:PackageExtension Category="xbox.contentpackage">
<mx:ContentPackage>
<mx:AllowedProduct Id="0eafd21d-2911-4be5-95fb-6dc0b50b6152" />
<mx:ContentPackageVisualElements
DisplayName="ATG Sample Durable DLC 1"
Logo="Logo.png"
SmallLogo="Logo.png"
WideLogo="Logo.png"
Description="ATG Sample Durable DLC 1"
ForegroundText="dark"
BackgroundColor="#000040" />
</mx:ContentPackage>
</mx:PackageExtension>
</Extensions>
</Package>
There are several important things to note about the AppxManifest.xml file that are specifically related to DLC.
The content ID is applied by Make Package (makepkg.exe), and depends on the presence or absence of the following tags:
<mx:ApplicationEnvironment>title</mx:ApplicationEnvironment>
<mx:OSName>era</mx:OSName>
| Note |
|---|
| Only those packages marked as exclusive partition DLC are able to have code executed from them, such as a DLL for example. |
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest"
xmlns:mx="http://schemas.microsoft.com/appx/2013/xbox/manifest"
IgnorableNamespaces="mx">
<Extensions>
<mx:PackageExtension Category="xbox.store">
<mx:XboxStore>
<mx:RelatedProducts>
<mx:RelatedProduct Id="0eafd21d-2911-4be5-95fb-6dc0b50b6152" />
<mx:RelatedProduct Id="00000000-0000-0000-0000-000000000000" />
</mx:RelatedProducts>
</mx:XboxStore>
</mx:PackageExtension>
</Extensions>
Note that each product you want to be related would need to be listed here. The above sample would make Marble Maze and the Visual Studio F5 default app deployment (all zeros) related products. The ERA using these nodes in its AppxManifest.xml would then be able to enumerate packages that belong to either product.
Once you have created the package, you can deploy it to the console with the Application Management (xbapp.exe) tool, using the same command prompt:
xbapp install [DestinationOutputDirectory]\[package name]
To delete the package use the following command:
xbapp uninstall [package name]
To view all installed DLC on the console use the following command:
xbapp listdlc
Developer goes to Xbox Developer Portal (XDP) and creates a new DLC item.
| Note |
|---|
| This is also the path for content that people already own, but that hasn’t been downloaded to the Xbox One. The marketplace details are shown, but the content is re-downloaded where the user would normally be prompted to buy the content. To detect whether the user owns something that is not currently installed, a title may query the inventory service using GET (/users/me/inventory). This call will return all things the user owns related to your title. Your title can then compare owned (inventory) items to installed (enumerated) items and detect gaps. |
| Note |
|---|
| Your title must have completed downloading before your DLC downloads. |
void OnPackageInstallCompleted() {
wcout << L"PackageInstalled " << endl; }
void MyAppMethod() {
_manager = ref new DownloadableContentPackageManager();
_manager->DownloadableContentPackageInstallCompleted += ref new DownloadableContentPackageInstallCompletedEventHandler ( &OnPackageInstallCompleted );
return; }
See the DownloadableContentPackageManager Events section for more information.
| Note |
|---|
| Previewing (using the IDownloadableContentPackage.CheckLicense Method) and enumerating (using the DownloadableContentPackageManager.FindPackages Method) are ‘fast and lightweight’ operations. Mounting and unmounting are ‘heavyweight’ operations. Until a DLC package has finished downloading, it will not be returned from enumeration, and will not be mountable. |
| Important |
|---|
| Using this event in August 2013 XDK QFE 3 or earlier may result in either a title crash or DLC packages being left in an unmountable state. Contact your DAM if you need to use this event. |
| Note |
|---|
| A DLC package will not be forcibly unmounted, once mounted. So, if a package goes unlicensed, it is left to the title’s business policy to dictate when a package is unmounted. This is to ensure we never remove a mounted package from a running title. |
The following additional resources are available for working with DLC on Xbox One.
For sample code related to DLC, see the “Downloadable Content” sample located on the XGD site.
For more information about DLC, see the “Creating and Using Downloadable Content on Xbox One” whitepaper located on the Xbox Game Developer (XGD) site.
For details on localization of DLC metadata, see the Localizing Exclusive App DLC topic.