A Zig port of CCCaster, the netplay launcher and DLL injector for MELTY BLOOD Actress Again Current Code (MBAACC).
Why the name? First Z from Zig the programming language, second from Z.ai which this project used(almost by its entirety).
ZZCaster consists of two binaries:
-
zzcaster.exe— The launcher. Provides an ImGui-based UI for selecting game modes (Training, Versus, Netplay Host/Join, Spectate), configuring settings, and mapping controllers. Creates the MBAA.exe process in suspended state, injectshook.dllviaCreateRemoteThread(LoadLibraryA), then resumes the main thread. -
hook.dll— The injected DLL. Runs inside MBAA.exe's process space. Patches the game's main loop to call a per-frame callback (frameStep), which handles input reading, network communication (ENet), rollback state management, and SFX deduplication.
This is how CCCaster works too.
| Component | How to install |
|---|---|
| Zig 0.16 | https://ziglang.org/download/ → extract → add to PATH or your package manager |
All C/C++ dependencies (ENet, Dear ImGui, SDL2 MinGW) are
auto-downloaded by scripts/fetch-deps.sh.
./scripts/fetch-deps.sh
zig build -Dtarget=x86-windows-gnu -Doptimize=ReleaseFastOutput appears in zig-out/bin/:
zzcaster.exe— the launcher (32-bit)hook.dll— the injected DLL (32-bit, matches MBAA.exe)
Both binaries are 32-bit (x86-windows-gnu). MBAA.exe is a 32-bit binary,
so hook.dll MUST be 32-bit to be loadable. zzcaster.exe is also built
32-bit so the launcher and DLL share types and ABI for IPC. The build
will refuse to produce a non-x86 Windows target (see build.zig).
./scripts/build-and-deploy.sh --game-dir="/path/to/MBAACC"This copies zzcaster.exe to the MBAACC root and hook.dll + SDL2.dll
to MBAACC/zzcaster/.
zzcaster.exeA window opens with a sidebar menu:
- Netplay / Spectate — Enter IP:port, then click Host, Join, or Spectate
- Offline — Training Mode or Versus Mode
- Game Config — Set win count and rollback frames (text input + Apply)
- Controllers — Per-player controller mapper: bind any button/direction
via click-to-bind, set SOCD mode and analog deadzone, and toggle the
optional Air Dash Macro (see below). Saved to
mapping.iniand loaded byhook.dllon game start.
An optional input macro, enabled per-player in the Controllers tab
(off by default). When enabled, pressing 9AB (up-forward + A+B) or 7AB
(up-back + A+B) will perform a forward or backwards jump then an air dash.
When you play online, you can see if your opponent is using wifi or wired.
| Library | Version | License | Purpose |
|---|---|---|---|
| ENet | 1.3.18 | MIT | Reliable UDP transport |
| Dear ImGui | 1.92.8 | MIT | UI rendering |
| SDL2 | 2.32.10 | zlib | Window, input, gamepad |
ZZCaster cross-compiles from Linux to Windows. Both hook.dll and
zzcaster.exe are 32-bit (-Dtarget=x86-windows-gnu). MBAA.exe is a
32-bit binary so hook.dll MUST be 32-bit; the launcher is also 32-bit
so the two artifacts share types and ABI for the IPC config struct.
The build script rejects any non-x86 Windows target with a clear error.
ZZCaster is a from-scratch rewrite of the CCCaster fork of Rhekar. The original project is a C++ Win32 application that has served the MBAACC community for years. This Zig port aims to modernize the codebase while preserving the same netcode algorithm and game compatibility.
Original project: https://github.com/Rhekar/CCCaster
Key components ported from the original:
- Game memory addresses and ASM hacks (from
legacy_unused/targets/DllAsmHacks.cpp) - Rollback state pool and SFX dedup (from
DllRollbackManager.cpp) - Netplay state machine and input synchronization (from
DllNetplayManager.cpp) - Spectator chain forwarding (from
SpectatorManager.cpp) - Rollback memory regions (from
Generator.cpp)
ZZCaster is released under the same license as the original CCCaster.