A fix for Championship Manager 01/02 (3.9.68) careers whose save grows past 2 GB. Without it, the game can no longer load the career: an error box appears (comp_stats.cpp 6000/6007, Friendly.cpp and others) and loading hangs. With the fix, saves work up to 4 GB.
- It does not change the exe. It is a small
ddraw.dllyou drop into the game folder. - The save format does not change. A save of up to 2 GB written with the fix opens in any game.
- Works with modified exes. It was tested on the CLZ Leagues Patch (DB 25-26) V5.4, built with NickPatcher.
- Safe on unknown exes. Before acting, it checks the code it depends on. If your exe differs there, it changes nothing.
Get save2gb-1.0.zip from the Releases page.
- Copy
ddraw.dllfrom the zip into the game folder, next tocm0102.exe. - Start the game.
save2gb.log, in the same folder, says:ligado(on): the fix is active;exe diferente...: your exe changed the save code, and the DLL changed nothing.
Remove: delete ddraw.dll.
Already using another ddraw.dll (dgVoodoo, cnc-ddraw...)? Rename yours to ddraw_chain.dll and put this one in its place. The video goes through yours.
cm0102_GDI.exe does not use ddraw.dll, so the fix does not apply to it.
| Saving above 2 GB | Loading above 2 GB | |
|---|---|---|
| Original 3.9.68 | index broken: every part beyond 2 GB gets position 0xFFFFFFFF |
error, loading hangs |
| With save2gb (original 3.9.68) | 2.55 GB save, index correct | loads normally |
| CLZ 25-26 (NickPatcher), without save2gb | — | error |
| CLZ 25-26 (NickPatcher), with save2gb | 2.45 GB save, index correct | loads normally |
Screenshots and the test save's index: docs/SAVE_2GB.en.md, "The proofs".
The cause, the container format, the three routines involved (zopen 0x9326e0, zseek 0x933080, ztell 0x933170) and three ways to integrate the fix into your patch are in docs/SAVE_2GB.en.md. In short: ship the DLL, LoadLibrary it from your own DLL, or rewrite the three routines.
Questions or help integrating: open an issue, or message lucastmpacheco on the champman0102 forum.
Tools in tools/:
assinatura_save.pytells whether the DLL will act on an exe;enchimento.pycreates the 2.2 GB filler used to test a save above 2 GB without playing for years.
The source of each release is in this repository (src/, Cargo.toml): src/conteiner.rs has the three rewritten routines, src/lib.rs the signature check, the hooks and the DirectDrawCreate forwarding. The code and its comments are in Portuguese, like the rest of the project. The repository is updated at each release, not at every change.
Build (Windows, Rust with the 32-bit target): rustup target add i686-pc-windows-msvc, then cargo build --release. The DLL comes out in target/i686-pc-windows-msvc/release/ddraw.dll. Its hash differs from the release's because the compiler embeds folder paths; the code is the same.
Part of the CM 01/02 in Rust project, which rebuilds the game routine by routine. Every rewritten routine is proven identical to the original before it ships. Thanks to the champman0102 community, to davdav, and to everyone keeping 01/02 alive.