# BombermanRecomp Native recompilation of the headerless North American release of *Super Bomberman*. The pinned `snesrecomp` engine is included as a Git submodule. This repository and its releases do not contain the game ROM or generated ROM-derived C sources. You must provide your own legally obtained copy. ## Supported ROM The ROM is never copied into this repository. Both generation and runtime accept only this payload (an optional 512-byte copier header is removed): - Size: 524,288 bytes - SHA-256: `4efab3f49cbe91ec77b6cba747ddfedfdc0b080c755a8b6ba51234f0676c000f` - MD5: `d83699a009a62480a7e7e9f1bb5bff6e` - Internal title: `SUPER BOMBERMAN` - Mapping: HiROM ## Generate and build From PowerShell: ```powershell git clone --recurse-submodules https://github.com/elliotttate/BombermanRecomp.git cd BombermanRecomp python .\scripts\generate.py --rom "D:\path\Super Bomberman (USA).sfc" .\build.ps1 ``` Source generation requires Python 3 and a Rust toolchain. The Windows host build requires Visual Studio 2022 with the Desktop development with C++ workload. `generate.py` builds the native analyzer automatically. This produces: - `build\BombermanRecomp.exe` — interactive Win32 host with video, audio, keyboard input, and SRAM persistence. - `build\bomberman_headless.exe` — deterministic validation host. Run the desktop build with the ROM path, or omit it to use the file picker: ```powershell .\build\BombermanRecomp.exe "D:\path\Super Bomberman (USA).sfc" ``` Controls: arrows for the D-pad, `Z`/`X` for B/Y, `S`/`A` for A/X, `Q`/`W` for L/R, Enter for Start, Right Shift for Select, and Escape to quit. ## Validate The deterministic host exits nonzero if the screen never becomes visible: ```powershell .\build\bomberman_headless.exe ` "D:\path\Super Bomberman (USA).sfc" 1200 build\frame1200.ppm ``` Its optional final arguments inject a one-frame controller pulse. This example presses Start (`$008`) at frame 1200 and runs long enough to enter the game: ```powershell .\build\bomberman_headless.exe ` "D:\path\Super Bomberman (USA).sfc" 2400 build\gameplay.ppm 1200 0x008 ``` The retail ROM is verified again at runtime. The earlier Sample ROM is intentionally rejected. Set `BOMBERMAN_BENCHMARK=1` to include core throughput, frame deadline, and framebuffer-change measurements in headless output. Set `BOMBERMAN_BENCHMARK_START` to exclude boot/menu frames. The desktop host shows its measured presentation rate in the title bar; setting `BOMBERMAN_FPS_STATS=1` prints detailed cadence statistics when it exits. See [BENCHMARKS.md](BENCHMARKS.md) for baseline and fixed-pacer results. The generated C under `generated/` is private ROM-derived output and is ignored by Git. Do not redistribute it without permission. ## Licensing and trademarks The bundled `snesrecomp` engine is distributed under the PolyForm Noncommercial License 1.0.0; see `snesrecomp/LICENSE` and `snesrecomp/THIRD_PARTY_ATTRIBUTION.md`. This project is an unofficial fan project and is not affiliated with or endorsed by Hudson Soft, Konami, or Nintendo. *Super Bomberman* and its assets remain the property of their respective rights holders. ## Disassembly symbols `config\bank00.cfg` contains 3,304 C-safe labels imported from the retail-US build of `LIJI32/superbomberman`. Guest labels use an `_SB` suffix to avoid colliding with host/runtime symbols while retaining SNESRecomp's data-label classification. To recreate the import from an sfcasm symbol map: ```powershell python .\tools\import_superbomberman_symbols.py ` --symbols "C:\path\superbomberman\build\superbomberman.sym" ` --output .\config\bank00.cfg ```