Open main menu

Difference between revisions of "Game Packaging"

2,522 bytes added ,  09:33, 14 September 2023
Add documentation for packaging tools and scripts
(Add documentation for packaging tools and scripts)
 
Line 6: Line 6:
# [[Game Packaging/Android|Android]]
# [[Game Packaging/Android|Android]]


== How to extend DLC support to more distribution stores ==
== Packaging tools and scripts ==
The general steps/tips are:
It is a set of tools and scripts to help packaging games in different distribution platform specific formats. Available on [https://github.com/scummvm/scummvm/tree/master/devtools/packaging https://github.com/scummvm/scummvm/tree/master/devtools/packaging].
# Identify if the store have DLC support and have appropriate API or SDK for managing on-demand downloads. You may check [https://docs.google.com/spreadsheets/d/1JMh8SNANgmUq-TZv5KvzNOJFNoVZtuHerza1R_XksHA/edit#gid=0 this] sheet containing information about various distribution stores for reference (might be outdated).
 
# Create a new class that implements <code>backends/dlc/store.h</code>. See <code>backends/dlc/android/playstore.cpp</code> as an example.
There are three main files:
# Set the <code>dlcspath</code> in appropriate backends.
 
# Use <code>#ifdef USE_DLC</code> where applicable. Before building, make sure to enable DLC support by using <code>--enable-dlc</code> with <code>./configure</code>.
1. <code>dlc-games.json</code>: This contains all the metadata required for creating game packages. The games need to have their metadata described here before they can be packaged using package.py.
# Add a new entry to <code>packaging/export-platforms.json</code>. The <code>export-platforms.json</code> consists of the description of scripts that prepare and package the game in a specific format recognized by the distribution store and, if possible, upload the game directly to the distribution store. You can include the 3rd party SDK/scripts/tools or self-written scripts in the <code>packaging/scripts</code> directory. Here is an example for an entry to <code>export-platforms.json</code> (The single $ means variable from <code>packaging/package.py</code> context, double $ means variable from <code>packaging/dlc-games.json</code>, and triple $ means it is an environment variable):
 
You may use the following template to add a new entry (consists of metadata for both ScummVM Cloud and Android Play Store):
 
<syntaxhighlight lang="json">
"beneath-a-steel-sky": {
"name": "Beneath a Steel Sky - Freeware CD Version",
"packname": "beneath_a_steel_sky",
"scummVMConfigData": {
"description": "Beneath a Steel Sky (v0.0372 CD/DOS)",
"engineid": "sky",
"extra": "v0.0372 CD",
"gameid": "sky",
"guioptions": "lang_English (GB) lang_German lang_French lang_English (US) lang_Swedish lang_Italian lang_Portuguese (Brazil) lang_Spanish",
"language": "",
"platform": "pc"
},
"size": "69377781",
"url": "https://downloads.scummvm.org/frs/extras/Beneath%20a%20Steel%20Sky/bass-cd-1.2.zip"
},
</syntaxhighlight>
 
Note: "packname"'s value must start with a letter and can only contain letters, numbers, and underscores [https://developer.android.com/guide/playcore/asset-delivery/integrate-java].
 
2. <code>export-platforms.json</code>: This consists of the description of scripts that prepare/package the game in a specific format recognized by the distribution store and, if possible, upload the game directly to the distribution store. You can include the 3rd party SDK/scripts/tools or self-written scripts in the <code>packaging/scripts</code> directory.
 
Here is an example for an entry to <code>export-platforms.json</code> (The single $ means variable from <code>packaging/package.py</code> context, double $ means variable from <code>packaging/dlc-games.json</code>, and triple $ means it is an environment variable):
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
"android": {
"android": {
Line 48: Line 73:
}
}
</syntaxhighlight>
</syntaxhighlight>
It is possible that you might need to change the schema for <code>export-platforms.json</code> and adapt the <code>packaging/package.py</code> accordingly. For more details and reasoning, you may read [https://blogs.scummvm.org/ankushdutt/2023/06/03/week-1/ this blog].
 
Note: The "bundle" and "upload" are optional. "bundle" scripts are only required if the distribution platform does not support standalone DLC upload. It is possible that you might need to change the schema for <code>export-platforms.json</code> and adapt the <code>packaging/package.py</code> accordingly. For more details and reasoning, you may read [https://blogs.scummvm.org/ankushdutt/2023/06/03/week-1/ this blog].
 
3. <code>package.py</code>: This script utilizes both <code>dlc-games.json</code> and <code>export-platforms.json</code> to get the required metadata and execute the required scripts. The final output is a ready-to-upload file that can be directly uploaded to the distribution platform.
 
To run, use:
<code>python3 package.py --export-platform [platform as per export-platforms.json] --game [game key as per dlc-games.json] --game-location [directory for the extracted game folder] --binary-location [directory for the ScummVM binary]</code>. The <code>--binary-location</code> is optional and is only required if the platform requires bundling the DLCs with the base program (ScummVM). For example, the Android Play Store requires the on-demand assets (DLCs) to be bundled with base APK in AAB format, and thus, we need to first build the ScummVM binary and then provide the <code>--binary-location</code>. 
 
== How to extend DLC support to more distribution stores ==
The general steps/tips are:
# Identify if the store have DLC support and have appropriate API or SDK for managing on-demand downloads. You may check [https://docs.google.com/spreadsheets/d/1JMh8SNANgmUq-TZv5KvzNOJFNoVZtuHerza1R_XksHA/edit#gid=0 this] sheet containing information about various distribution stores for reference (might be outdated).
# Create a new class that implements <code>backends/dlc/store.h</code>. See <code>backends/dlc/android/playstore.cpp</code> as an example.
# Set the <code>dlcspath</code> in appropriate backends.
# Use <code>#ifdef USE_DLC</code> where applicable. Before building, make sure to enable DLC support by using <code>--enable-dlc</code> with <code>./configure</code>.
# Add a new entry to <code>packaging/export-platforms.json</code>.
19

edits