Note These instructions are for testing purposes only. For retail scenarios, this data is auto-configured based on the metadata in XDP. The options selected in the compilation disc creation flow are what control install order, auto play, etc. You do not submit the test metadata or json config files to us directly when you submit your games for ingestion.
This topic explains how to create test discs. You can create the following types of test discs:
To create and test a compilation disc, you need to create a catalog.js metadata file and a disc layout as described bellow.
Create a disc layout that looks like this:
- Disc Root
- Licenses (folder) - (Not needed for ERA Devkits - make sure to use XVCs created with /LT flag)
License0.xml (file) - (Not needed for ERA Devkits - make sure to use XVCs created with /LT flag)
- MSXC (folder)
- Package1.xvc (file)
- Package2.xvc (file)
- Metadata (folder)
- catalog.js (file)
- Bundle (folder)
- Bundle images (files)
- Package1.xvc (folder)
- Package 1 images (files)
- Package2.xvc (folder)
- Package 2 images (files)
Where the directories have the following content:
In the Metadata folder you need to create a file called catalog.js. You will need to edit this file to reflect the names of your packages and images in the other folders. This file must be utf-8 encoded. It is recommended to use a json validator on the web to make sure that the json is valid, copy it into a text editor and then save the file in utf-8 format.
{
"version": "2.0", // don't adjust this value
"bundle": {
"productId": "02670f2e-1054-42c2-b16e-2dcf67d2c147", // replace with your bundle product id
"titles": [
{
"locale": "default",
"title": "Bundle Title" // replace with bundle title
}
],
"vui": [
{
"locale": "default",
"title": "Bundle Voice title" // bundle vui title (can just be the same as title above)
}
],
"images": [
{
"size": "100x100", // don't change the size values
"image": "100x100_1.png" // must match the image file names in MSXC\Metadata\Bundle\
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
]
},
"packages": [ // This is an array of packages.
{
"packageName": "Package1.xvc", // Match your package name in MSXC\<package name> and MSXC\Metdata\<package name>
"productId": "8b4cfd5d-52ff-4ca0-b5e2-112d7fd09830", // Product id for package 1
"contentId": "2b05043b-4043-4ba0-80ed-fd4811c4b333", //content id for package 1. Must match the content id of the package file.
"titleId": "037C3A1D", // Title id for package 1
"titles": [
{
"locale": "default",
"title": "Killer Instinct" // Package 1 title
}
],
"vui": [
{
"locale": "default",
"title": "Killer Instinct" // Package 1 vui title (can match title above)
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png" // Match file names in MSXC\Metadata\<Package1>\
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
],
"ratings": [
{
"system": "OFLC",
"value": "M"
},
{
"system": "DJCTQ",
"value": "14"
},
{
"system": "PCBP",
"value": "Unrated"
},
{
"system": "USK",
"value": "16"
},
{
"system": "ESRB",
"value": "T"
},
{
"system": "CERO",
"value": "Unrated"
},
{
"system": "CSRR",
"value": "Unrated"
},
{
"system": "COB",
"value": "M"
},
{
"system": "GRB",
"value": "Unrated"
},
{
"system": "PEGI",
"value": "16"
},
{
"system": "PEGIPortugal",
"value": "Unrated"
}
],
"size": 7336562688,
"type": "Game"
},
{
"packageName": "Package2.xvc",
"productId": "85e5ffc6-8595-4066-b1e5-5fbe7779dddd",
"contentId": "4a6cb1d0-5ad3-47b7-9583-7480098b4a26",
"titleId": "669E1864",
"titles": [
{
"locale": "default",
"title": "LocoCycle"
}
],
"vui": [
{
"locale": "default",
"title": "LocoCycle"
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png"
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
],
"ratings": [
{
"system": "OFLC",
"value": "PG"
},
{
"system": "DJCTQ",
"value": "10"
},
{
"system": "USK",
"value": "12"
},
{
"system": "ESRB",
"value": "T"
},
{
"system": "PEGI",
"value": "12"
},
{
"system": "COB",
"value": "PG"
}
],
"size": 14141276160,
"type": "Game"
}
]
}
{
"version": "2.0", // don't change this value
"bundle": {
"productId": "f5f5ff22-b124-4b0b-b502-e1555b5fa317", // replace with bundle product id
"titles": [
{
"locale": "default",
"title": "Game + DLC Bundle Title" // replace with bundle name
}
],
"vui": [
{
"locale": "default",
"title": "Game + DLC Bundle Voice Title" // replace with bundle voice name
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png" // must match the image file names in MSXC\Metadata\Bundle\
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
]
},
"launchPackage": {
"contentId": "5519355c-bff9-40b4-92bb-b5473fd9c577" // should match the content id of the game package. This is the package that will be launched when game disc is inserted
},
"packages": [
{
"packageName": "Package1.xvc", // Match folder name in MSXC\Metadata\<folder name>
"productId": "2342716f-c00a-4a8c-a528-4d8e3b2bc48d", // Replace with DLC 1 product id
"contentId": "ace6ef3b-0c5b-4f17-a651-390e75169d5c", // Replace with DLC 1 content id. This must match the content id of the package file.
"allowedProductIds": [
"fa3f1854-4706-495d-bbf8-b65c79264d2a" // Should match the product id of the game that will load this DLC
],
"titles": [
{
"locale": "default",
"title": "DLC Title 1"
}
],
"vui": [
{
"locale": "default",
"title": "DLC Voice Title 1"
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png" // Match file names in MSXC\Metadata\Package1.xvc\
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
],
"ratings": [
{
"system": "ESRB",
"value": "E"
}
],
"size": 20024,
"type": "Durable" // Indicates this is a DLC package
},
{
"packageName": "Package2.xvc",
"productId": "4716b00f-bd31-4133-86d4-f3594a1a72c8",
"contentId": "b0f77189-d74c-4005-b351-955d380cb875",
"allowedProductIds": [
"fa3f1854-4706-495d-bbf8-b65c79264d2a"
],
"titles": [
{
"locale": "en-US",
"title": "DLC Title 2"
}
],
"vui": [
{
"locale": "en-US",
"title": "DLC Voice Title 2"
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png"
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
],
"ratings": [
{
"system": "ESRB",
"value": "E"
}
],
"size": 20024,
"type": "Durable"
},
{
"packageName": "Package3.xvc",
"productId": "fa3f1854-4706-495d-bbf8-b65c79264d2a",
"contentId": "5519355c-bff9-40b4-92bb-b5473fd9c577",
"titleId": "35c8f637",
"titles": [
{
"locale": "default",
"title": "Game Title"
}
],
"vui": [
{
"locale": "default",
"title": "Game Voice Title"
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png"
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
],
"ratings": [
{
"system": "ESRB",
"value": "E"
}
],
"size": 20024,
"type": "Game" // Indicates main game package
}
]
}
DLC installation notifications are usually triggered when a DLC package completes installation. There are cases for certain game disc types when this is not desired, as it would create a large number of notifications in a very short timespan. For example, a Game of the Year edition game might include a large number of small DLC packages on the disc. To handle this situation, notifications for DLC are only triggered when the game they apply to is already installed.
For games with a large number of small DLC packages, it is recommended to order the packages on the disc so that the DLC are installed before the game. This will ensure the user is not inundated with notifications when the DLC packages are installed.
For games with a small number of large DLC packages, it is recommended to install the DLC after the main game so that a user is not blocked from playing the game until all the DLC packages are installed.
To control the order in which the DLC and game are installed, simply adjust their order in the “Packages” json array in the catalog.js. This array is what controls the default order of installation.
To deploy the compilation disc burn the directory structure to a disc. When you insert the disc into a dev-kit it will start up just a release version would on a retail console.
To create test multi-discs, split your existing XVC into two files.
Note XVCs can be split only on individual Chunk boundaries, as defined in your Layout.xml file. This means that XVCs with extremely large chunks (greater than 45 gigabytes) might be impossible to publish using the multi-disc facility. In general, it’s best to keep your title’s chunks smaller than 45 GB.
To split an XVC across two discs, create a DiscLayout.xml file like the following.
<Packages>
<Package Name="MultiDisc" Description="Package published on 2 discs" MaxDiscs="2">
</Package>
</Packages>
Next, invoke SplitPkg to produce the individual files that will be burned to disc. This will produce two files with your original XVC filename suffixed with “.MultiDisc.1” and “.MultiDisc.2.”
SplitPkg /f DiscLayout.xml /psourceXVC /s Multidisc /pdoutputDir
To simulate installing from multiple discs, use xbapp install for the first disc and then use xbapp install for the second disc. After content from Disc 1 has finished installing the console will prompt you to insert Disc 2.
To burn these test discs, a Catalog.json file needs to be created with the new discNumber, discCount, and discSetId fields. Please note that every disc will need all of this metadata; the only difference in the Catalog.json files on each disc is the value of the discNumber field. Disc 1 should have a value of 1, Disc 2 should have a value of 2, and so on. 0 is a reserved value and should not be used.
{
"version": "2.0", // Don't adjust this value
"discNumber": 1, // 1 for Disc 1, 2 for Disc 2
"discCount": 2, // Same on all discs
"discSetId": "00000001", // For test purposes, this can be 00000001, on retail discs, this value is unique for each published disc set.
// Do not mix installs of test discs from different sets if they share this value. Cancel your install before starting a new one.
"packages": [ // This is an array of packages.
{
"packageName": "Package1.xvc", // Match your package name in MSXC\package-name and MSXC\Metdata\package-name
"productId": "8b4cfd5d-52ff-4ca0-b5e2-112d7fd09830", // Product id for package 1
"contentId": "2b05043b-4043-4ba0-80ed-fd4811c4b333", //content id for package 1. Must match the content id of the package file.
"titleId": "037C3A1D", // Title id for package 1
"titles": [
{
"locale": "default",
"title": "Killer Instinct" // Package 1 title
}
],
"vui": [
{
"locale": "default",
"title": "Killer Instinct" // Package 1 vui title (can match title above)
}
],
"images": [
{
"size": "100x100",
"image": "100x100_1.png" // Match file names in MSXC\Metadata\Package1\
},
{
"size": "208x208",
"image": "208x208_1.png"
},
{
"size": "480x480",
"image": "480x480_1.png"
}
],
"ratings": [
{
"system": "OFLC",
"value": "M"
},
{
"system": "DJCTQ",
"value": "14"
},
{
"system": "PCBP",
"value": "Unrated"
},
{
"system": "USK",
"value": "16"
},
{
"system": "ESRB",
"value": "T"
},
{
"system": "CERO",
"value": "Unrated"
},
{
"system": "CSRR",
"value": "Unrated"
},
{
"system": "COB",
"value": "M"
},
{
"system": "GRB",
"value": "Unrated"
},
{
"system": "PEGI",
"value": "16"
},
{
"system": "PEGIPortugal",
"value": "Unrated"
}
],
"size": 7336562688,
"type": "Game"
}
]
}