feat(filesystem): Implement complete mod loading through -mod (Withdrawn) - #3091
feat(filesystem): Implement complete mod loading through -mod (Withdrawn)#3091Jaredl-Dev wants to merge 1 commit into
Conversation
deae37a to
024b98c
Compare
024b98c to
a3b6a31
Compare
a3b6a31 to
6705fd2
Compare
TheSuperHackers/GeneralsGameCode#3091 gives the Zero Hour client an ordered mod overlay file system, so the launcher no longer has to make mods visible by mutating the user's game folder. Launch is now: verify integrity, resolve and validate mod layers, append one quoted -mod operand per selected mod, patch, and add-on in selection order, then start the process. Nothing is written to the game directory, so there is nothing to journal, back up, clean up, or recover. Removed: - The deployment subsystem: FileSystemDeploymentService, DeploymentStateStore, DeploymentLaunchPreparationService, the file planner, path resolver, result types, and the hard-link creator, plus their ~1,500 lines of tests. - The .gib storage rename. Installed archives keep the .big extension the client globs for; BigFileVariantPath and its call sites are gone. - Base-game script hiding. Mod layers now override game-directory files, which is what that hack existed to work around. - Startup deployment recovery, shutdown cleanup, game-switch cleanup/recovery, and the same-drive recommendation, which only mattered for hard links. - The administrator requirement. Game-folder writes were its only driver, and an elevated launcher handed its integrity level to every game it started. Added: - IModLayerResolutionService and its FileSystem implementation, which validate each layer against the constraints the client enforces: the directory exists, every *.big below it really starts with BIGF, the path is representable in the active ANSI code page, no file exceeds MAX_PATH, and the path carries no double quote. A bad operand otherwise ends in a modal error and _exit(1). - BigArchiveFile, which classifies archives by header the way the client does. Manual import now renames BIGF files to .big and quarantines files named as archives that the client cannot open. - A CLAUDE.md that imports AGENTS.md and points at the per-project ones, so Claude Code loads the same rules every other agent already reads. Symbolic-link rejection coverage is unchanged: it guards launcher-owned storage, not the deleted hard-link path, and matters more now that the client reads that storage in place. Only the two hard-link-specific tests were dropped, and the new mod layer resolver gained the same linked-root test its sibling services already have. Accepted regressions, since the PR is Zero Hour only: Generals keeps the legacy single-operand -mod, GeneralsOnline still launches without arguments, and World Builder starts without mod content and warns before doing so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
6705fd2 to
e01726f
Compare
c98a5d1 to
cd6d9ac
Compare
cd6557a to
78a5f58
Compare
78a5f58 to
44315a4
Compare
|
I’ll be closing this PR toward the end of this month. I need to shift my focus to personal and career-related priorities, so I won’t be able to continue maintaining it beyond this month. |
44315a4 to
3a6fdec
Compare
|
I'd add "BIG-backed mod movies work with ffmpeg but not bink" to known limitations in the description, and maybe update it to say "BIG-backed animated cursors fall back to the base cursor" if that makes sense (maybe omit it altogether as that was the original behavior anyway). Also I'd do a bunch more validation showing all the features work. |
3a6fdec to
d1ab45c
Compare
|
No reviewable files after applying ignore patterns. |
|
This PR was closed because, as I worked on and tested it, I discovered several other areas of the engine that need to be reworked or updated before the implemented functionality can be viable. One critical issue is the engine's inability to support long filesystem paths exceeding 260 characters, which can cause mod files to be silently skipped. |
No description provided.