1.8 KiB
1.8 KiB
Migration from legacy packs
This project is meant to replace legacy .pck or EterPack-style content
delivery gradually, not through a single risky cutover.
Target state
- Linux builds produce
.m2p - the client loads
.m2pfirst - runtime master key delivery is required
- silent fallback to legacy packs is disabled in production
Suggested migration phases
Phase 1: parallel loader
- keep the legacy loader in the client
- add
.m2psupport beside it - verify the new loader against real content sets
- keep fallback only in development if needed
Phase 2: pipeline validation
- build
.m2pfrom the same source tree as legacy packs - run
verifyfor every archive - run
diffbetween the source tree and.m2p - compare in-game behavior between legacy and
.m2p
Phase 3: runtime delivery
- stop embedding a real content key in the client
- deliver the runtime key through launcher, environment, or mapping
- verify startup failure behavior when the runtime key is missing
Phase 4: production cutover
- package only
.m2pfor release clients - disable silent fallback to legacy packs
- remove stale pack generation from release CI
- keep extract/debug tools only for internal use
Recommended checks
- duplicate normalized paths
- invalid relative paths
- case-collision problems on Windows
- decompression failures
- manifest signature failures
- key mismatch by
key_id
Practical migration loop
- Pick one legacy pack group.
- Rebuild it as
.m2p. - Verify it.
- Diff it against the source tree.
- Boot the client with runtime keys.
- Validate asset loads in logs and in-game.
- Move to the next pack group.
Risk notes
- Do not mix silent fallback with production security claims.
- Do not ship a client that accepts
.m2pwithout runtime key enforcement. - Do not keep real secret keys inside the repository.