Guidance on creating a multiplatform (Android-friendly) DLC cooking scheme

Hello,

Our studio is looking to create a game for multiple platforms, including Android. We want to set the game up so that the base game is almost nothing, and almost everything is DLC (thereby avoiding excessive store-based updates).

The current idea is (roughly) to have certain “core” DLC that will always need to be up-to-date, as well as optional DLC such as levels. Large, shared assets such as texture atlases or environment sets will go in core chunks, and “leaf” DLC such as levels , cosmetics, or new game modes will go in optional DLC chunks. The motivation for this is to A) avoid the friction of users having to go back to an app store to update the app, B) avoid duplication of large assets into multiple chunks, and B) allow different DLC to work together simultaneously.

There appear to be two potential ways to accomplish this, although I’m running into issues with both:

1) Keep content in your game’s content folder and set up asset chunk assignment rules

2) Use Game Feature plugins

With #1, the primary issue I’ve encountered so far is not being able to exclude chunks other than chunk 0 from the the Android apk. And we would prefer to not cook DLC assets at all when cooking a release of the base game. Is there a way to do this? Also, this approach allows messy reference spaghetti which #2 would help prevent, so we would like to use plugins if possible.

The main issue I’m having with #2 is that, if I run the cooker with -dlcname=<pluginname>, then it will complain about other DLC plugins:

Uncooked Engine or Game content ../../../TestGame/Plugins/GameFeatures/DLCCore/Content/DLCCore.uasset is being referenced by DLC!

In this case, DLCCore is a game feature plugin upon which the plugin that I was cooking depends (via the .uplugin file). And if I cook DLCCore, it similarly complains about the dependent plugin. And if I specify -dlcname=<randomstring>, then it will complain about assets in both plugins.

The other thing is that we would like to do a global DLC cook for all plugins. We want any dependent plugins to be able to hard reference content in the “core” plugins, but each asset will be cooked into the chunk associated with the plugin it lives in rather than that of the referencing DLC or primary asset--we are experimenting with a custom Asset Manager that has a folder->chunk mapping for this purpose.

Now perhaps there is a better way to do this, but this is what’s seeming to make sense so far, based on the stated objectives:

  1. Very minimal base game
    1. Core game is itself a DLC
  2. Avoid duplicating assets into different chunks
  3. Multiple DLCs can be mounted and loaded simultaneously

Is there a reasonable way to achieve these high-level goals and/or the general implementation approach that we are looking at?

[Attachment Removed]

Steps to Reproduce[Attachment Removed]

Hi Dan Holbert,

There wouldn’t be any platform specific guidance when it comes to cooking schemes applying to Android. The primary platform differentiator would like the the DLC’s delivery whether it’s done via Play Asset Delivery on the Play Store or some custom downloader. However, for the cook side, general guidance would apply here. Your proposed approach seems sound overall.

Best regards.

[Attachment Removed]