Superseded by v0.3.1
Android users should use v0.3.1. In this build
hd_pack/andmusic_pack/resolve to a
path Android cannot reach, so asset packs do not work at all. Fixed in v0.3.1, which is
otherwise the same engine. The Windows build here is fine, but v0.3.1 also ships a
music_pack/starter folder and corrected controls documentation.
Fixes both reported issues, makes the first run look like unmodified hardware, and adds a replacement soundtrack.
Downloads
| Windows | Resident_Evil_Gaiden_Recomp_v0.3.0_Windows.zip — unzip and run
|
| Android (ARM64) | Resident_Evil_Gaiden_Recomp_v0.3.0_Android.apk — sideload
|
No ROM is included. Supply your own Resident Evil Gaiden (USA).gbc.
Fixed: the flashlight did nothing (#1)
Two separate bugs, and neither was Windows- or Nvidia-specific — it was broken for everyone.
The light cone lookup table is stored with a fixed 336-pixel stride but was walked linearly against the framebuffer, so it only lined up at 21:9. At the shipped default of 16:9, and in native 10:9, the cone was sampled from the wrong coordinates and all you saw was flat ambient darkening. On top of that, flashlight_intensity is a 0–100 percentage but was fed into the blend as a 0–256 fraction, capping the beam at about a third of its intended brightness.
Measured against the old code (cone centre vs corner brightness):
160x144: centre= 63 corner= 63 <- no cone at all
256x144: centre= 63 corner= 63 <- the default; no cone at all
336x144: centre=113 corner= 63 <- present but far too dim
All three now read centre=191 corner=63.
Fixed: flickering item pickups and cutscene faces (#2)
The widescreen renderer re-rendered all 144 scanlines from a single end-of-frame snapshot of VRAM, OAM and the LCD registers, discarding the dot-accurate per-scanline output the PPU had already produced. Anything the game changes part-way through a frame — HBlank HDMA tile streaming on the item viewer, window and palette raster work behind talking-head portraits — was drawn from state that never existed at draw time.
The native viewport now comes verbatim from the PPU; only the newly revealed side columns are re-rendered. Effect composition also happens once per guest frame instead of on every host present, which additionally stops the HD portrait flickering and the film grain reseeding.
Widescreen sides no longer show tile garbage. A Game Boy tilemap is 32 columns wide but only 20 are ever displayed, so on a UI screen the other 12 still hold whatever room you were standing in — the stray font tiles down both sides of the item screen. Those columns are painted black rather than filled with stale data.
Native-first defaults
The game now boots looking like an unmodified Game Boy Color. Widescreen, the flashlight, vignette, film grain, scanlines, the CRT mask, the colour grading and the HD texture pack are all off by default and opt-in from the in-game menu (F10).
Releases also stopped shipping developer settings. The packaged config.ini was a copy of the maintainer's live settings file, which the running game rewrites — so previous releases went out with widescreen forced on, every shader enabled, and the Infinite Health cheat switched on.
New: replacement soundtrack
Drop your own .ogg or .wav files into music_pack/ named track_<id> and they replace the in-game music. Tracks follow the game automatically — the right music plays in the right place, and any id you have not supplied keeps the original music. The in-game menu shows the id currently playing so you can name your files as you go.
Game Boy music and sound effects share the same four channels, so the original audio is ducked rather than muted (default 25%, adjustable) — gunshots, doors and menu blips still come through under your music.
No music is bundled. Like the ROM, the files are yours to supply.
Android fixes
- The release build was broken. All ten launcher icons were JPEG data with a
.pngextension, which AAPT2 rejects — the APK could not be built at all. - Settings now persist.
config.iniwas read from and written to the process working directory, which is not writable on Android, so every launch silently fell back to defaults. versionCode/versionNamewere stale at 0.2.0 while releases shipped as 0.2.1.
Under the hood
Every piece of game-state detection previously keyed off $C800/$C900. Those are not game state — the only ROM code touching them is a save/restore memcpy, and they read as all zeroes even during gameplay. Detection is now based on values measured from the running game: 75/75 snapshots while walking read one WRAM bank, every menu and both intro cutscenes read another, and the sound driver's current-song byte was located at $CE8C and validated across 168 samples.
Also fixed: speed_percent in config.ini was parsed and saved but never actually applied.
Full details in CHANGELOG.md.