Managing Dynamic Content Packages - Lumberyard User Guide

Managing Dynamic Content Packages

Open 3D Engine (O3DE), the successor to Lumberyard, is now available in Developer Preview. Download O3DE or visit the AWS Game Tech blog to learn more.

The Dynamic Content Cloud Gem provides an easy way for you to update your game content for your customers. After a release, you can update content without an app submission or traditional patch process. The Dynamic Content Cloud Gem provides a framework for you to group outdated assets into manifests. You can assign groups of assets together into .pak files (.zip files), and distribute these files to customers according to your own rules or schedules.

Prerequisites

To use the Dynamic Content Cloud Gem, you must meet these requirements:

  • You must be using a Lumberyard Editor project that has the Dynamic Content Cloud Gem enabled (in the Project Configurator, select Cloud Gem Dynamic Content).

  • You have a project stack created in Cloud Canvas Resource Manager.

  • You have created a deployment stack in Cloud Canvas Resource Manager.

  • You have created dynamic content packages that contain the updates. For more information, see Using Dynamic Content Manager.

To get a list of uploaded dynamic content packages, enter the following command

$ lmbr_aws dynamic-content list-uploaded-content
[WAF] Engine Root: C:\Amazon\Lumberyard\1.28.0.0\dev\
 
WheelCustomization.manifest.pak PUBLIC {'Hash': 'af6282f22266924e2ac12ac59871e297', 'Size': '2048'}
--->WheelCustomization_assets.shared.pak PUBLIC {'Hash': '9602bde90b5387603c7cdabcfb2eb4dd', 'Size': '416'}
--->WheelCustomization_data.shared.pak PUBLIC {'Hash': '1b5b6dadfa3752d37450ab23bfbebc8e', 'Size': '416'}
            
ColorCustomization.manifest.pak WINDOW {'StagingEnd': None, 'StagingStart': 'Feb 03 2021 12:00', 'Hash': '47b498040eb301c69688b755f8fee2c0', 'Size': '21507'}
--->ColorCustomization_data.pc.pak WINDOW {'StagingEnd': None, 'StagingStart': 'Feb 03 2021 12:00', 'Size':
'51665', 'Hash': 'a86b8e41aa1bf8d25baa482df0eb54df'}

Package Stages

You can use separate deployment stacks to handle different release workflows. For this purpose, the Dynamic Content Cloud Gem supports the following publishing stages.

  • Private – The packages are never downloaded by the game client. When you upload new or altered content to the cloud from Dynamic Content Manager, your packages and manifest are always put in the Private stage. This empowers you to choose when and how your changes are released to customers.

  • Scheduled – The packages are conditionally downloaded by the game client based on a specific date and time.

  • Public – The packages are available to everyone that uses the deployment.

You can use these stages to add an additional layer of protection against inadvertent deployments of dynamic content to your players.

To transition a package from one stage to another, use the set-staging-status command to edit the package's staging status. See Editing Packages later in this topic for an example.

Package Nesting

Each stage includes entries for your manifests and packages. Packages are nested according to the hierarchy that you determine when you create them. In the following example, the root-level manifest package is WheelCustomization.manifest.pak. It has two child asset packages, WheelCustomization_assets.shared.pak and WheelCustomization_data.shared.pak.

WheelCustomization.manifest.pak PUBLIC {'Hash': 'af6282f22266924e2ac12ac59871e297', 'Size': '2048'}
--->WheelCustomization_assets.shared.pak PUBLIC {'Hash': '9602bde90b5387603c7cdabcfb2eb4dd', 'Size': '416'}
--->WheelCustomization_data.shared.pak PUBLIC {'Hash': '1b5b6dadfa3752d37450ab23bfbebc8e', 'Size': '416'}

You can edit or delete root-level packages. However, you cannot edit child packages. You can only delete child packages.

Editing Packages

Use the set-staging-status command to edit the state of an uploaded root-level package. You can transition the content from one stage to another, schedule a window when it is available for download, select which child packages you would like to include in the transition, and much more. See the lmbr_aws dynamic-content set-staging-status CLI documentation for full details.

Example : Transition a package to PUBLIC

This example shows how to transition a package and all its child packages to the public stage, using the filename of the root-level package.

$ lmbr_aws dynamic-content set-staging-status --file-path WheelCustomization.manifest.pak --staging-status PUBLIC --include-children
Important

If you do not use --include-children, the child packages become orphans in the current stage and no longer visible to the game client.

Deleting Manifests and Packages

Use the delete-uploaded-content command to delete an uploaded manifest or package.

Example : Delete a manifest

This example shows how to delete a manifest, using the filename of the uploaded manifest. By including the --confirm-deletion flag, you confirm that you want to perform this deletion. Without this flag, the command will show you what would be deleted.

$ lmbr_aws dynamic-content delete-uploaded-content --file-path WheelCustomization.json --confirm-deletion
[WAF] Engine Root: C:\Amazon\Lumberyard\1.28.0.0\dev\
Removing WheelCustomization.json
{'DeletedFileList': ['WheelCustomization.json'], 'CloudCanvas_request_id': '1e7f4096-d859-45ed-be1a-1411c6c8e068'}
Tip

You can delete a specific version of a manifest using the optional --version-id argument.

Example : Delete a package and any children

This example shows how to delete a root package and all its child packages, using the filename of the uploaded root-level package. Without the --confirm-deletion flag, this command only shows what would be deleted.

$ lmbr_aws dynamic-content delete-uploaded-content --file-path WheelCustomization.manifest.pak
[WAF] Engine Root: C:\Amazon\Lumberyard\1.28.0.0\dev\
Removing WheelCustomization.manifest.pak and any children
Found stack_id DCStack-DCDC-CloudGemDynamicContent-Z9DV5QK8436A-StagingSettingsTable
['WheelCustomization.manifest.pak', 'WheelCustomization_assets.shared.pak', 'WheelCustomization_data.shared.pak'] would be deleted if "confirm_delete" is set
Tip

You can delete a specific version of a package using the optional --version-id argument.