Releases: ogdanimal/Goemon64Recomp-Android
Release list
Goemon64Recomp Android v1.0.5
Attack While Moving: upgraded weapons and Yae's bazooka
Attack While Moving did nothing once a weapon was fully upgraded. A character carrying
a level 3 weapon still rooted in place for the whole swing — identical to the setting
being off — on all four characters, with nothing to indicate why. Each upgrade tier has
its own set of attack states and only the first two were recognised. All three are now
covered, confirmed in play.
Yae's bazooka is now covered too, including its charged variant. The level 2 dash
attack was missing from the same list and is covered as well.
Jump attacks are still unaffected by design, and Goemon's chain pipe stays excluded since
it anchors to a fixed point in the world. Attack While Moving remains off by default.
Nothing else changed. This updates over 1.0.4 normally, and your saves, settings and ROM
are untouched.
If you are coming from 1.0.3 or earlier
1.0.4 landed a day before this one, so it is easy to miss. Its headline fix was the
Adreno launch crash: on some Adreno devices the app closed itself a few seconds after
starting the game, every time, before the title screen ever appeared. The fault is in the
Qualcomm Vulkan driver rather than the game, so 1.0.4 added two independent ways around
it — Graphics -> Framebuffer Effects (On/Off), which works on any device and needs
nothing installed, and Settings -> GPU Driver, which lets you run a Vulkan driver you
supply yourself on Adreno hardware.
1.0.4 also fixed the DualSense Edge on Android 12 and earlier, where Circle, R1, Create
and Options did nothing, and changed how native libraries are packaged: the download
dropped from 38.6 MB to 25.4 MB, while the installed size grew by roughly 8 MB.
Full details are in the 1.0.4 release notes.
Goemon64Recomp Android v1.0.4
Before you update: download and install size
This release packages its native libraries differently, because the new GPU driver
feature cannot work any other way — the libraries have to be unpacked at install time
rather than read straight out of the APK.
That pulls the two sizes in opposite directions:
- The download is smaller: 25.4 MB, down from 38.6 MB in 1.0.3, because the
libraries are now compressed inside the APK rather than stored uncompressed. - The installed size is larger, by roughly 8 MB, because those same libraries then
exist both inside the APK and unpacked alongside it.
This applies to every device, including hardware that cannot use the driver feature at
all. Nothing else about the install changes: it updates over 1.0.3 normally, and your
saves, settings and ROM are untouched.
The Adreno launch crash
Fixed the crash a few seconds after starting the game on some Adreno devices. On
affected hardware the app closed itself before the title screen appeared, every time.
It was first reported on a Motorola G60 and reproduced here on an Adreno 630.
This is a bug in the Qualcomm Vulkan driver on those devices, not in the game. That is
not a guess: the same build, on the same device, minutes apart, crashes within three
seconds under the system driver and runs under a third-party one. The crash lands inside
the driver on a call the renderer makes to copy the rendered image back into emulated
console memory.
Since the fault is in the driver, this release adds two independent ways around it.
Either is enough on its own.
Graphics -> Framebuffer Effects (On/Off), default On. Turning it off stops the
renderer making the call that crashes. It works on any device and needs nothing
installed. The cost is that visual effects which read back or draw directly into the
rendered image stop working, which is why it ships on: the fidelity is only ever given
up by someone who deliberately turns it off, and the reason to do that is that the game
otherwise will not launch at all.
Settings -> GPU Driver. Run the game on a Vulkan driver you supply instead of your
device's own. Described below.
Both are reachable on an affected device. The crash happens once the game itself starts
rendering, while the app's own menu screen comes up before that and is unaffected.
GPU Driver
New: the game can run on a Vulkan driver you provide, instead of the one your device
ships. This is aimed squarely at the case above, where the system driver is the broken
part.
It is a per-app choice. Nothing about your device is modified, no root is required, and
no other app on the device is affected.
Import a driver .adpkg package or a bare .so through the Android file picker, select
it, and restart the app when prompted. The Mesa Turnip builds by Mr. Purple
(https://github.com/MrPurple666/purple-turnip/releases) are the ones commonly used on
Adreno handhelds, and are what this was developed and tested against; other Turnip
builds packaged the same way should work too. Import rejects anything that is not a
64-bit Arm shared library, and any package missing the library its meta.json names,
and tells you which. Whether a file is genuinely a Vulkan driver is only known when it
loads; if it is not, the game says so and carries on with the system driver.
Which build to start with. Mr. Purple's Turnip builds, as tested on the Adreno 630
device this was developed on, running Android 12:
| Build | Driver version | Result |
|---|---|---|
| T21 | 25.2.0-devel-Unified-1.4.318 |
Works |
| T24 | 26.0.0-T24-1.4.335 |
Works, and is the build the game was actually played on |
| T29 | 26.2.0-T29-1.4.354 |
Does not load on Android 12; needs a C library function that Android 12 does not provide, so expect it to want Android 13 or newer |
The package's own minApi field will not warn you about the T29 case, since all three
declare the same value. If a driver will not load, the game tells you and falls back to
the system driver, so trying another costs nothing but a restart.
That is one GPU on one Android version, so treat it as a starting point rather than a
compatibility list. Newer builds generally want newer Android.
A driver you select has to be confirmed before it is kept. Once the game is running
on it, it asks "Keep this graphics driver?". A driver that black-screens or hangs never
reaches that question, so it is switched back to the system driver on the next launch
and the launcher tells you it did. A driver that does not work therefore costs you one
restart, not your ability to get back into the settings menu. Confirmed drivers are not
asked about again.
The system driver remains the default, and nothing changes unless you import something.
Two limits, both deliberate. A driver that works at first and breaks later while
still producing frames is not detected automatically; switch back by hand. And if
Android kills the app very early in a session, for example by swiping it away from
recents almost immediately, a driver you had already confirmed may ask again on the next
launch. That case is indistinguishable from fleeing a hung driver, and being asked twice
is a much smaller cost than a driver that cannot be reverted.
The tab is not gated on your GPU. It appears on Mali and other hardware too, but the
replacement drivers that exist are Adreno/Qualcomm builds, so there is nothing useful to
import on those devices.
Controllers
Fixed the DualSense Edge on Android 12 and earlier, where Circle, R1, Create and
Options did nothing and could not be reached by remapping.
The pad is newer than those Android releases, so Android has no layout for it and hands
it over as a generic HID device. Four buttons land in slots that carry no meaning, and
are dropped before the game ever sees them. The fix is a controller-database entry that
names the layout explicitly.
It is self-scoping: the entry matches only pads that enumerate in this broken way, so a
DualSense Edge on Android 13 or newer, which Android already handles correctly, is
untouched.
The four buttons above were confirmed on hardware. The triggers, stick clicks, PS button
and touchpad click follow the same sequential pattern and are expected to work, but were
not individually verified.
Also
The Mali fix shipped in 1.0.3 has now been confirmed by the original reporter on a
Retroid Pocket 4 Pro (Mali-G77), which was the device it was reported from and the one
piece of hardware it had never been tested on. No change was needed.
What this was tested on
The Adreno crash workaround was verified as a closed loop on an Adreno 630: the game
crashes with Framebuffer Effects on, plays with it off, and crashes again when it is
switched back on. It was separately checked on a Mali-G57 to confirm the default path is
unchanged on hardware that was already working.
The driver feature was verified end to end on that same Adreno 630: importing a real
driver package and a bare library, rejecting invalid files, playing the game on the
imported driver, both answers to the confirmation prompt, removing a driver, and
reverting correctly after the app was killed mid-session, which is the path a driver
that hangs or black-screens takes. It has not been tested on any other device, and this
is the first release built with the loader compiled in.
Goemon64Recomp Android v1.0.3
Mali GPU support
Fixed the white screen on devices with Mali GPUs (#15). On affected devices the
game booted and played audio, but rendered almost entirely white with most textures
missing.
The renderer required a Vulkan feature called dual-source blending, which no Mali GPU
supports. The driver accepted the resulting pipeline anyway and then produced undefined
output, which is why nothing appeared in any log. This release adds a fallback rendering
path that is selected automatically on devices without that feature.
Devices that do support dual-source blending, including every Adreno device, take
exactly the same code path as before and are unaffected.
Known limitation: on GPUs without dual-source blending, N64 coverage-based effects
such as anti-aliased edges are approximated rather than exact, because the fallback
reuses the channel that would otherwise carry coverage. No visible difference was found
in testing, but if you see edge or transparency artifacts on a Mali device, this is the
first thing to report.
What this was tested on. The fix was developed and verified on a Samsung Galaxy A15
(Mali-G57). It has not been tested on the Retroid Pocket 4 Pro (Mali-G77) that the
issue was reported from, because that hardware is not available here. Both are Arm Mali
GPUs built on the Valhall architecture, but they are different models with different
drivers, so this is a related device rather than an equivalent one.
What makes the fix likely to carry across anyway is that it is not keyed to any device
model: it asks the GPU at startup whether it supports dual-source blending and picks the
fallback when the answer is no. No Mali GPU reports support for it. So the fallback
should engage on any Mali device, including the G77 — but "should" is the honest word
until someone confirms it on one.
Adreno hardware was checked separately, on an Adreno 650, to confirm this release changes
nothing for devices that were already working.
Stability
v1.0.2 shipped the major crash fixes from the code review. These are the remaining
items from the same review — smaller, rarer cases, in some of the same areas.
- A failed settings write no longer destroys your configuration. If saving settings
failed partway through, for example with storage full, the truncated temporary file
could replace the existing good one. It is now discarded instead. - Fixed a hang when cancelling a prompt that opened another prompt.
- Fixed a crash when closing the settings menu if the data directory had gone away
while the app was running — for example if the SD card was removed mid-session. This
is a different case from the cold-start SD card fix in v1.0.2. - The app now recovers if Android recreates it mid-session, for example under memory
pressure or with the "don't keep activities" developer option enabled. This previously
gave a black screen or an error about missing symbols. v1.0.2 stopped the app closing
on an accessibility font or display-size change; this covers the remaining cases,
which needed a different fix. - Fixed further races between the UI, input and render threads when opening and
closing menus, and when controllers are added or removed. v1.0.2 fixed the
connect/disconnect race; these are additional ones found in the same sweep, including
a stale entry left behind by a removed controller.
Fixes
- Autosave no longer runs while you are in the settings menu.
- Fixed a decorative background layer keeping the wrong scale after the aspect ratio
changed while the game was running. - Fixed the analog camera being able to latch onto the wrong angle when first engaged,
which left the free-look camera offset for the rest of the area. - Quickly toggling the config menu no longer shows a spurious error dialog.
Notes
Installing over an existing release keeps your saves. This build is signed with the same
key as v1.0.0 through v1.0.2.
Goemon64Recomp Android v1.0.2
Goemon 64: Recompiled — v1.0.2
This is a significant stability release. It's the first build to include the full two-pass code-review remediation, so it fixes several crashes present in v1.0.0 and v1.0.1 — most importantly a crash when resuming the game from the background. It also moves first-run work off the UI thread and adds the Attack While Moving option.
Update recommended for everyone. Your saves and settings carry over.
Crash & stability fixes
- Fixed a crash when resuming the game after backgrounding it or re-locking/unlocking the device (a use-after-free on the render surface). This affected v1.0.0 and v1.0.1.
- The app no longer hangs and needs a force-close when you swipe it away from Recents during play.
- A corrupt or hand-edited config file no longer crash-loops the app on launch — bad values now fall back to safe defaults instead.
- Fixed a controller connect/disconnect race and a crash when rapidly rebinding inputs.
- The app no longer closes on an accessibility font-size / display-size change.
- Fixed a crash on cold relaunch from Recents when the SD card wasn't yet available.
Performance
- First launch no longer freezes — the ROM copy and asset extraction now run off the UI thread.
- Faster resume when relaunching from the icon (skips a redundant ROM re-verify).
New
- Attack While Moving (Settings → off by default): keep moving during a ground attack instead of rooting in place. Now covers level-2 (upgraded) weapons in addition to base weapons.
Notes
- Attack While Moving and Autosave are off by default — enable them in Settings if you want them. Both are experimental novelties.
- Hardened numeric settings and input validation against out-of-range values.
Goemon64Recomp Android v1.0.1
Goemon 64 Recompiled — Android 1.0.1
A small patch release. If you're on 1.0.0, updating is straightforward and keeps your saves and settings.
What's fixed
- Autosave settings text showed the wrong quicksave shortcut. The Autosave description said to press L + R + D-Pad Up to save immediately, but that combo stopped existing when the 1.0 controller layout moved the D-pad to the C-buttons. The setting now correctly shows the real combo, L + R + Z. This was a text fix only — the manual quicksave itself already worked on L + R + Z.
Install / update
- Download
Goemon64Recomp-1.0.1-arm64-v8a.apkbelow and install it over your existing 1.0.0 — same signing key, so it updates in place. Saves, configs, and your imported ROM are untouched. - On first launch after updating, the corrected UI text appears automatically.
Requirements (unchanged)
- An arm64 (
arm64-v8a) Android device, Android 9.0+ (API 28) - A working Vulkan driver — tested mainly on Snapdragon/Adreno handhelds. Other GPUs may need a newer or custom (Turnip) driver.
Full 1.0 feature list is in the 1.0.0 release notes. Please report device-specific issues on the issue tracker.
Goemon64Recomp Android v1.0.0
Goemon 64 Recompiled — Android 1.0.0
First public release. A native Android port of Mystical Ninja Starring Goemon via static recompilation (Zelda64Recomp / N64Recomp lineage) — not an emulator. You provide your own ROM; the app never ships game data.
Install
- Download
Goemon64Recomp-1.0.0-arm64-v8a.apkbelow and install it (allow "install from unknown sources" if your file manager asks). - Launch it — on first run, choose a data location and import your own ROM (the original North American Mystical Ninja Starring Goemon cartridge). The ROM is verified and copied into the app's storage.
Requirements
- An arm64 (
arm64-v8a) Android device, Android 9.0+ (API 28) - A working Vulkan driver — tested mainly on Snapdragon/Adreno handhelds (Retroid Pocket 5, AYN Thor). Other GPUs may need a newer or custom (Turnip) driver.
Features
The port
- Native arm64 APK with RT64 Vulkan rendering
- Physical controller support (SDL)
- ROM import through the Android file picker — no manual folder setup or storage permissions
- Fullscreen, landscape-locked
Extras added on top (all optional, in the settings menu)
- Analog free-look camera on the right stick — orbit, zoom (hold R + right stick), per-axis invert, sensitivity, R3 to recenter. The original game has no free camera.
- Autosave using the game's own save system, plus a manual quicksave combo (L + R + Z)
- Swap characters while moving (no need to stop first)
- Cheats — infinite health / money / lives
- Restart to title screen or app menu without closing the app
- Higher internal resolutions (up to 8x) and higher framerates (interpolated, up to your display's refresh)
Notes
This is a 1.0 — there may still be device-specific Vulkan/driver issues. Please report bugs on the issue tracker.
Credits
Built on klorfmorf's Goemon 64: Recompiled, the Zelda64Recomp and N64: Recompiled projects, RT64, and linkzenic's Zelda64Recomp-Android, which paved the way. Thank you all.