Skip to content
PORTSNATIVE.
HomeCatalog
Web GamesEmulatorsToolsNews
PORTSNATIVE.

A catalog for discovering ports and related projects. We link to official sources and do not host original game files.

ExploreCatalogMy list
InformationAbout usSuggest a portSupportDonationsLegal notice
© 2026 PortsNative
Back to catalog
Tomba! 2: The Evil Swine Return · Tomba Recomp DS (Dual Screen)
PORTSNATIVE

Tomba! 2: The Evil Swine Return · Tomba Recomp DS (Dual Screen)

NATIVE PORTPLATFORMERANDROIDBETA

Tomba! 2: The Evil Swine Return · Tomba Recomp DS (Dual Screen)

Tomba! 2: The Evil Swine Return

OriginPlayStation

TechnologyStatic recompilation (native C/C++)

Available forAndroid

View official project

About the project

Tombi! 2: Contra los cerdiablos, también conocido en inglés como Tomba! 2: The Evil Swine Return en région NTSC, simplemente Tombi! 2 en la región PAL (europea) o トンバ! ザ・ワイルドアドベンチャー en Japón), es un videojuego de acción y aventuras de plataformas, desarrollado por Whoopee Camp y publicado por Sony Computer Entertainment para la videoconsola PlayStation. Salió a la venta en el año 1999 para Japón y Norteamérica, y en el año 2000 para la región PAL. El juego es una secuela de Tombi!

2 versions of Tomba! 2: The Evil Swine Return

You're viewing: Tomba Recomp DS (Dual Screen)

Tomba Recomp DS (Dual Screen)github.com/igawa6/Tomba2RecompDS
Android
Current
Tomba2Recompgithub.com/mstan/Tomba2Recomp
Windows
Linux
macOS
›

Official project information

Author's original READMEOpen on GitHub ↗

Tomba! 2 Recompiled — Android / dual-screen fork

Static recompilation of Tomba! 2 — The Evil Swine Return (USA) (serial SCUS-94454) running natively on Android handhelds, with a second-screen companion for clamshell devices.

This is a fork. The recompilation itself, the psxrecomp framework and every part of the hard work that makes a PS1 game run as native code are mstan/Tomba2Recomp and mstan/psxrecomp. This repository adds an Android port and the handheld-specific features below, and tracks upstream. Framework-level fixes found here belong upstream — see Contributing back.


What this fork adds

Android appNative launcher, on-screen pad with a custom layout editor, physical-controller mapping, memory-card import/export
Second screenA live companion page on clamshell handhelds (developed on the AYN Thor): items, events, status, and a walkthrough reader — driven by the game's own memory, not a static overlay
Native widescreen16:9 / adaptive rendering that reveals more of the world instead of stretching it; movies and 2D screens stay pillarboxed at their authored 4:3
Frame interpolationOptional 60 FPS presentation built from true intermediate geometry (primitives moved halfway), not blended images — guest timing, input and audio stay at the original cadence
CRT RoyaleA multi-pass tube simulation — a luma-dependent electron-beam profile, aperture-grille phosphor mask, halation and bloom, in Curved or Flat — usable on the top screen, the bottom panel, or both
On-device speedA prebuilt native code cache ships with the APK, so the game dispatches compiled ARM64 instead of interpreting

Everything above is off by default. The stock experience is the authentic 4:3, 30 FPS presentation.

Status

Playable end to end on the target hardware, and still a preview. Honest notes:

  • Works: full playthrough, widescreen, 60 FPS interpolation, the companion page, touch and physical controls, memory cards, movies at full speed.
  • Rough: the second screen does not yet mirror the game's colour-modulation fades (area changes, wings, bells, Baron) — it mirrors full-screen fade rects only. Several approaches were built, measured and removed rather than left half-working; the commit history records what was tried and why each failed.
  • Known: the released APK is ~118 MB because it carries the prebuilt native code cache. A cache-free build is ~12 MB but drops every overlay to the interpreter, which is slow enough to misrepresent the port.
  • Device coverage: developed and tested on an AYN Thor (dual screen) and a OnePlus phone. Other devices should work; refresh-rate behaviour varies by vendor (see Frame interpolation).

Requirements

You must supply your own copy of the game. This repository and its releases contain no game code, assets or disc data — only the tooling that runs them.

  • A Tomba! 2 (USA, SCUS-94454) disc image: .chd, or .cue + .bin
  • Android 9 (API 28) or newer, arm64
  • No PlayStation BIOS needed — the MIT-licensed OpenBIOS from PCSX-Redux is used

Installing

Grab the APK from Releases.

  1. Install the APK.
  2. Open it, choose Add your disc, and pick your disc image. It is copied into the app's own storage once; the picker is not needed again.
  3. Press Play.

First launch unpacks the native code cache, so it takes noticeably longer than later ones.

Settings

Video — renderer, resolution scale, CRT filter, FPS counter.

Experimental

  • Aspect — Widescreen (default) or 4:3.
  • Frame Interpolation — Off (default) or 60 FPS.

Controller — button mapping, on-screen pad size/position, layout editor.

Memory Card — import/export raw .mcd cards.

Help / Guide — load any plain-text walkthrough (GameFAQs-style files work unmodified). It appears on the bottom screen's HELP tab with detected sections, a tappable index, and a remembered reading position.

Frame interpolation

The presenter builds real intermediate frames by re-projecting geometry, so motion genuinely moves at 60 FPS — it is not image blending, and the game logic still runs at its original rate.

Two device notes, both measured rather than assumed:

  • Some vendors pin a game's window to a refresh rate of their own choosing (one test device forces 90 Hz and ignores every API request to change it). 60 FPS content on a 90 Hz panel cannot divide evenly, so a little judder is inherent there; a 60 or 120 Hz panel is clean.
  • Heavy scenes cost more GPU time per interpolated frame. If a busy area dips, lower Resolution one step.

Second screen

On a clamshell device the bottom panel shows a companion page built from live game memory: inventory (filtered by Equip / Usable / Key), event progress, status, and the guide reader. Items can be equipped or used by tapping, using the game's own routines — and items the game would refuse (wrong posture, blocking status ailment) are dimmed by the very predicate that refuses the tap, so what looks unavailable and what is unavailable cannot disagree.

The page art and font are learned from the game's own book pages as you play.

Building

git clone --recurse-submodules https://github.com/igawa6/Tomba2RecompDS.git
cd Tomba2RecompDS

ANDROID_HOME=/path/to/android-sdk \
JAVA_HOME=/path/to/jdk \
TOMBA2_KEYSTORE=/path/to/your.keystore \
./android/scripts/build-apk.sh

The psxrecomp framework is checked in under psxrecomp-v4/ rather than pinned as a submodule, so this repository is self-contained. Its own two libraries (recomp-net, retcomm-rbengine) remain submodules, which is why --recurse-submodules matters.

The script builds the native libraries, stages them, runs Gradle, then aligns and signs the APK. docs/ANDROID_PORT.md covers the full pipeline, including regenerating the native code cache (a fresh clone cannot produce one without your own disc — see that document).

Desktop builds follow upstream's instructions and are unaffected by this fork.

Contributing back

Changes here that are not Android-specific belong upstream, and are kept separable for that reason. Good candidates:

  • The build-time guard that catches a shard whose only undefined symbol is a direct extern call — a silent failure class that degrades a whole shard to the interpreter with no error.
  • Widescreen culling-site compensation, including the instruction guard that prevents an address-only match from corrupting an unrelated overlay variant.
  • Present-path fixes measured on device: gating geometry interpolation during MDEC movies, and rate-capping a second display that would otherwise be redrawn once per present.

Issues and PRs about the recompilation itself are better raised upstream.

Credits

  • mstan — Tomba2Recomp and the psxrecomp framework: the recompiler, runtime, and the mod tier this port builds on.
  • PCSX-Redux — OpenBIOS (MIT), bundled in place of a retail BIOS.
  • SDL — host windowing, input and audio.
  • The Tomba community, and the author of the in-game debug-menu cheat this port's developer tooling reuses.

License

PolyForm Noncommercial 1.0.0, inherited from upstream and retained here. Non-commercial use only.

This repository contains no Tomba! 2 game assets or disc data. Release packages include OpenBIOS under the MIT notice in bios/OpenBIOS.LICENSE; they contain no retail PlayStation BIOS.

View official project
CALIFICACIÓN
—
Loading votes…
Advertisement

PROJECT FILE

Project type
NATIVE PORT
Genre
Platformer
Status
beta
Original platform
PlayStation
Technology
Static recompilation (native C/C++)
Version
—
Updated
—

Target platforms 1

Android
View on GitHub
Advertisement