Problem
The Generals Online portable distribution (e.g., GeneralsOnline_portable_081326 from https://cdn.playgenerals.online/manifest.json) includes a GeneralsOnlineGameData directory containing game data patch files (such as 500_900_CommunityPatch_CoreINI.big and related balance/patch archives).
Currently, GeneralsOnlineManifestFactory only creates two manifests:
- 60Hz Game Client (
ContentType.GameClient, variant suffix 60hz)
- QuickMatch MapPack (
ContentType.MapPack, variant suffix quickmatch-maps)
During extraction, UpdateManifestsWithExtractedFiles assigns all non-map files to the GameClient manifest with InstallTarget = ContentInstallTarget.Workspace. This creates two major issues:
- Incorrect Install Target: The Generals Online engine does not read data patch BIG files from the workspace root; it expects them in the user's Zero Hour Documents directory (
%USERPROFILE%\Documents\Command and Conquer Generals Zero Hour Data\GeneralsOnlineGameData\).
- Monolithic Coupling: Bundling the data patch into the GameClient manifest prevents independent versioning, tracking, user data lifecycle management, and clean dependency resolution.
Proposed Approach
1. Update GeneralsOnlineManifestFactory to produce 3 manifests
- Update
CreateManifests and CreateVariantManifestsFromOriginal to create a dedicated GeneralsOnline Data Patch manifest (ContentType.Patch, variant suffix e.g. datapatch or communitypatch-coreini).
- In
UpdateManifestsWithExtractedFiles:
- Partition files in
GeneralsOnlineGameData/ (e.g., *.big, *.ini, *.bmp) into the Data Patch manifest.
- Set
InstallTarget = ContentInstallTarget.UserDataDirectory (or relative path preserved under GeneralsOnlineGameData/) for files in this manifest.
- Exclude
GeneralsOnlineGameData/ files from the GameClient workspace manifest.
2. Update GeneralsOnlineDependencyBuilder
- Add
CreateDataPatchDependency / include the Data Patch manifest as an auto-installed requirement in GetDependenciesFor60Hz (alongside Zero Hour 1.04 installation and the QuickMatch MapPack).
- Ensure
GetDependencies(ContentManifest) properly resolves dependencies for ContentType.Patch.
3. Update Constants & Identification
- Add
DataPatchSuffix, DataPatchDisplayName, DataPatchDescription, and GeneralsOnlineGameDataSubdirectory = "GeneralsOnlineGameData" to GeneralsOnlineConstants.
- Update
GeneralsOnlineManifestFactory.CanHandle to support ContentType.Patch for publisher generalsonline.
Acceptance Criteria
Related
Problem
The Generals Online portable distribution (e.g.,
GeneralsOnline_portable_081326fromhttps://cdn.playgenerals.online/manifest.json) includes aGeneralsOnlineGameDatadirectory containing game data patch files (such as500_900_CommunityPatch_CoreINI.bigand related balance/patch archives).Currently,
GeneralsOnlineManifestFactoryonly creates two manifests:ContentType.GameClient, variant suffix60hz)ContentType.MapPack, variant suffixquickmatch-maps)During extraction,
UpdateManifestsWithExtractedFilesassigns all non-map files to theGameClientmanifest withInstallTarget = ContentInstallTarget.Workspace. This creates two major issues:%USERPROFILE%\Documents\Command and Conquer Generals Zero Hour Data\GeneralsOnlineGameData\).Proposed Approach
1. Update
GeneralsOnlineManifestFactoryto produce 3 manifestsCreateManifestsandCreateVariantManifestsFromOriginalto create a dedicated GeneralsOnline Data Patch manifest (ContentType.Patch, variant suffix e.g.datapatchorcommunitypatch-coreini).UpdateManifestsWithExtractedFiles:GeneralsOnlineGameData/(e.g.,*.big,*.ini,*.bmp) into the Data Patch manifest.InstallTarget = ContentInstallTarget.UserDataDirectory(or relative path preserved underGeneralsOnlineGameData/) for files in this manifest.GeneralsOnlineGameData/files from theGameClientworkspace manifest.2. Update
GeneralsOnlineDependencyBuilderCreateDataPatchDependency/ include the Data Patch manifest as an auto-installed requirement inGetDependenciesFor60Hz(alongside Zero Hour 1.04 installation and the QuickMatch MapPack).GetDependencies(ContentManifest)properly resolves dependencies forContentType.Patch.3. Update Constants & Identification
DataPatchSuffix,DataPatchDisplayName,DataPatchDescription, andGeneralsOnlineGameDataSubdirectory = "GeneralsOnlineGameData"toGeneralsOnlineConstants.GeneralsOnlineManifestFactory.CanHandleto supportContentType.Patchfor publishergeneralsonline.Acceptance Criteria
GeneralsOnlineManifestFactory.CreateManifestsproduces three distinct manifests from portable releases: 60Hz Game Client (GameClient), QuickMatch MapPack (MapPack), and Data Patch (Patch).GeneralsOnlineGameData/(e.g.,500_900_CommunityPatch_CoreINI.big) are assigned exclusively to the Data Patch manifest withInstallTarget = ContentInstallTarget.UserDataDirectory.GameClientmanifest contains only executable, runtime DLLs, EAC files, and plugins targetingContentInstallTarget.Workspace.GeneralsOnlineDependencyBuilder.GetDependenciesFor60Hzincludes the Data Patch dependency asAutoInstall.Related