Skip to content

feat(online): Mount archives by priority and read the data pack layers from settings - #648

Open
tintinhamans wants to merge 9 commits into
GeneralsOnlineDevelopmentTeam:mainfrom
tintinhamans:arctic/go/feat/data-layer
Open

tintinhamans wants to merge 9 commits into
GeneralsOnlineDevelopmentTeam:mainfrom
tintinhamans:arctic/go/feat/data-layer

Conversation

@tintinhamans

@tintinhamans tintinhamans commented Oct 24, 2026 •

Copy link
Copy Markdown

Merge after #653.

Archive priority was an accident of file names, and the core pack and community patch were hard coded. Every archive now has an explicit priority, and data_packs in settings.json has three layers: user, generals_online and community_patch. From the top the lookup is loose files in the game folder, -mod / -modDir, non-retail BIGs in the game folders, user, generals_online, community_patch, then retail.

"data_packs": {
  "user": { "enabled": true, "include_paths": [], "exclude_paths": [] },
  "generals_online": { "enabled": true, "include_paths": ["user:GeneralsOnlineGameData/GeneralsOnline_Core.big"] },
  "community_patch": { "enabled": true, "include_paths": ["user:GeneralsOnlineGameData/500_900_CommunityPatch_CoreINI.big"] }
}

include_paths entries are BIGs, folders of BIGs or *.big patterns (game:, user: or absolute), mounted in list order with the first one winning. exclude_paths exists on user only. It hides loose files and BIGs of the game folders, never the retail archives. A missing or invalid field keeps its default, and invalid entries are dropped and logged.

use_community_data_patch is read once as community_patch.enabled and dropped on save. -disableCommunityDataPatch turns the community_patch layer off for that launch only. Settings now load before the archives mount. The second commit mounts the Generals data once, where Steam installs used to mount it twice, and ranks it below the Zero Hour archives. scripts/pack_go_data.py builds the core BIG.

CRC handling is untouched. Deployment: the updater ships GeneralsOnline_Core.big to <user data>\GeneralsOnlineGameData\, and the Launcher's community patch checkbox should write data_packs.community_patch.enabled (the old key is still migrated).

@tintinhamans
tintinhamans force-pushed the arctic/go/feat/data-layer branch from b454e9c to aaea4c1 Compare October 24, 2026 17:59
@tintinhamans tintinhamans changed the title feat(online): Load archives by tier instead of by file name feat(online): Mount archives by priority and read the archives list from settings Oct 24, 2026
xezon added 7 commits October 24, 2026 23:10
…ile::getFileInfo(), StdBIGFile::getFileInfo() (TheSuperHackers#3415)

(cherry picked from commit b805c12)
…File (TheSuperHackers#3505)

Both classes are identical apart from their name and contain no platform specific code.
Nothing in them depends on the BIG format either: they open a file from an offset and a
size inside the archive file. ArchiveFile takes over their functions and is no longer an
abstract class.

(cherry picked from commit 52a777a)
…ystem into BIGFileSystem (TheSuperHackers#3505)

Both classes are identical apart from their name and go through the local file system
for all file access. The one class that remains sits next to ArchiveFileSystem in
Core/GameEngine.

(cherry picked from commit e4b4d1e)
…e loadBigFilesFromDirectory (TheSuperHackers#3505)

loadMods refers to BIG files, which nothing else in ArchiveFileSystem does. It becomes a
virtual function that BIGFileSystem implements. loadBigFilesFromDirectory is renamed to
loadArchiveFilesFromDirectory, because the base class is not tied to one archive format.

(cherry picked from commit f299561)
@tintinhamans
tintinhamans force-pushed the arctic/go/feat/data-layer branch from 6ef5fa6 to 1f2a608 Compare October 25, 2026 11:15
@tintinhamans tintinhamans changed the title feat(online): Mount archives by priority and read the archives list from settings feat(online): Mount archives by priority and read the data pack layers from settings Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants