A dual-screen mod of The Legend of Zelda: The Minish Cap for the AYN Thor. The handheld's bottom panel becomes a live map, quest status and touch inventory, so the top screen can be nothing but the game.
The dual-screen mod was made with the help of Claude Code and opencode.
Everything on the panel is decoded from your own ROM as the game runs — the map artwork, the menu chrome, the item icons, the font. No game data is stored in this repository.
- Map — Hyrule with a follow cam. ZOOM steps out to the whole kingdom; tap a region to open the game's own enlarged map of it. Windcrest warps show as pins.
- Dungeon — the real automap: floor plaques, explored rooms, Link's position, and the small-key count beside your rupees.
- Quest — the pause menu's quest screen, reflowed for a square panel. Tap the kinstone bag or the technique scroll to open those lists.
- Items — tap a ring to arm it, then tap an item to equip that slot.
- Settings — hide the top HUD (the panel takes over your vitals), true widescreen, and the port-wide toggles the desktop build puts behind F8.
- Download the APK from the Releases page and install it. It is debug-signed, so Android will warn about an unknown developer.
- Put your own
baserom.gba(USA, SHA-1b4bd50e4131b027c334547b4524e2dbbd4227130) inAndroid/data/dev.picori.tmc/files/on internal storage. - Launch. The panel appears on the second display automatically.
Built for the Thor, but it is a plain Android Presentation — any device with
a second display will do.
The native port detects the region from the ROM header and switches its data
tables at runtime, so the released USA APK also loads a EU (BZMP, SHA-1
cff199b36ff173fb6faf152653d1bccf87c26fb7) or JP (BZMJ) ROM — name it
baserom_eu.gba / baserom_jp.gba or just baserom.gba.
It is not the same as a EU build, though. Each APK is compiled against one
region's baseline: the blob-offset headers in build/<region>/assets/ and the
region #ifdefs in src/ that have not yet been converted to the port's
runtime REGION_IS_* form. On a baseline mismatch those compile-time sites
keep following the baseline region, so a USA APK running a EU ROM is a hybrid —
expect region-specific text, menu graphics and RNG to be off. The port logs
which combination it is on startup:
$ adb logcat -s tmc | grep 'Region baseline'
Region baseline: build=USA rom=EU (MISMATCH). ...
For a faithful EU port, build the EU APK (below). JP additionally needs the
data tables described in docs/JP_PORT_ENABLEMENT.md.
Needs the Android SDK and NDK r26. Build the native library for both ABIs, then package:
for abi in arm64-v8a x86_64; do
xmake f -y -p android -a $abi --ndk=$ANDROID_NDK_HOME \
--game_version=USA --gpu_renderer=y --widescreen_width=384
xmake -y
done
cd android && ./gradlew assembleRelease--widescreen_width=384 is what compiles the wide render paths in; without it
the WIDESCREEN row is hidden because the setting would have nothing to switch.
The APK lands in android/app/build/outputs/apk/release/.
Swap --game_version=USA for --game_version=EU to build the EU APK; the
tracked build/EU/assets/*_offsets.h mean that is the only change needed. For a
region with no tracked headers (JP, the demos) generate them on the host first —
the Android toolchain cannot produce them, since asset_processor has to run
on your machine:
xmake f -P . -y -p linux # your host platform
xmake build -P . -y asset_processor
tools/bin/asset_processor extract JP build/JP/assetsThe build does this for you when it can and otherwise stops with these
instructions, rather than failing on a missing assets/map_offsets.h.
For the desktop port, see INSTALL.md.
- Project Picori — the native Minish Cap port this mod extends (SDL3, software PPU, agbplay audio).
- Raekwon1603/tmc-android — the Android packaging and second-screen scaffold this forked from.
- zeldaret/tmc — the decompilation underneath all of it.
GPL-3.0 — see LICENSE. Bundled and linked third-party components
keep their own GPL-compatible licenses, listed in
THIRD-PARTY-LICENSES.md; notably agbplay is
LGPL-3.0 and is not relicensed by being linked here.
This builds on a decompilation of a copyrighted game. All Nintendo intellectual property remains Nintendo's, and a legitimately-owned ROM is required to play.