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
Bike Race Pro (PS Vita)
PORTSNATIVE

Bike Race Pro (PS Vita)

NATIVE PORTRACING / DRIVINGBETA

Bike Race Pro (PS Vita)

Bike Race

OriginOther

TechnologyNative C/C++ port (engine reimplementation)

View official project

About the project

Bike Race es un videojuego de carreras publicado por Top Free Games para Other, lanzado en 2012.

Official project information

Author's original READMEOpen on GitHub ↗

Bike Race — PS Vita

Start screen

A from-scratch port of Bike Race Pro 4.3 (Top Free Games, 2014) to the PlayStation Vita and PlayStation TV.

The original ships no native code at all. It's Java on a GLSurfaceView, so there was nothing at the ABI level to hook or wrap. This is a full rewrite in C, built against the decompiled sources and rendered through vitaGL. The physics is copied over quirks and all: a point-mass-and-spring model that was never a real solver, kept exactly as it was because reproducing it precisely is what makes the game still feel like itself.

Racing through world 1

  • All 19 worlds, 152 levels, built straight from the original's own level factories.
  • 60 FPS, vsync locked.
  • Runs on PS Vita and PlayStation TV. Touch works everywhere but isn't required anywhere; every tap has a button next to it.
  • Ghost replays: your best run on a level plays back beside you, faded out.
  • Progress, star gating and best times, following the original's own rules.
  • A controller-first interface, since the original was touch-only and shipped no button prompts at all.

Controls

AccelerateCross, or the right half of the touchscreen
Brake / reverseSquare, or the left half of the touchscreen
Lean forward (nose down)R, left stick right, or d-pad right
Lean back (wheelie)L, left stick left, or d-pad left
Reset the levelCircle
PauseStart
Menus: move, choose, backd-pad or stick; Cross; Circle
Bike listTriangle
QuitExit, on the start screen

The buttons always work. Under Settings → Controls you can add any of these on top of them:

Tilt to leanTip the Vita like a steering wheel: right side down leans forward. Low, Normal or High sensitivity; Normal matches the Android original, reaching full lean at 30°.
Touchscreen drivesLeft half of the front screen brakes, right half accelerates, as on Android. On by default.
Rear padThe rear touchpad's two halves, doing whichever job you pick: Lean (left leans back, right leans forward) or Brake and throttle (left brakes, right accelerates).

Tilt, the stick, the triggers and the rear pad all add together, so you can mix them. A PlayStation TV has no touchscreens and no motion sensor, so it doesn't show these options; it plays with the pad alone.

Times are shown to the thousandth of a second.


Legal

This repository contains no copyrighted game code, artwork, audio, or APK. What's here is the C source of an independent reimplementation, plus scripts that pull data out of a copy of the original game that you supply yourself.

It does not contain, and never will contain:

  • the APK, or any part of it
  • classes.dex, or any Java decompiled from it
  • the game's textures, sprites, audio or fonts
  • data/levels.bin or data/font_*.bin, the level geometry and font atlases baked out of the original. These are required to build, and are generated locally, from your own copy of the APK, by scripts/dumplevels.sh and scripts/makefonts.sh.

Two things here are derived from the original and are included on purpose, because a Vita homebrew package can't work or be documented without them:

  • sce_sys/, the LiveArea icon and background built from the game's own art. These get baked into the .vpk so the app has an icon on the home screen.
  • tests/shots/, screenshots of the running game used as visual regression references by make -C tests shots.

This project isn't affiliated with, endorsed by, or connected to Top Free Games. Bike Race and its artwork are still theirs. You need to own the original game to use this port; without a copy of it, the port does nothing.


Installing

You need the original 2014 APK. The port reads the game's art and audio off the memory card at runtime; it ships none of it.

1. Install the VPK

Grab BikeRace.vpk from the Releases tab, copy it to your Vita (VitaShell over FTP or USB), press Cross on it and confirm the install.

No kernel plugins needed here. This is a native vitaGL build, not an .so loader port, so kubridge and fd_fix don't apply.

2. Get the original APK

Download Bike Race 4.3 (com.topfreegames.bikeraceproworld, 2014):

https://bike-race.en.uptodown.com/android/download/122951516

Rename .apk to .zip and extract it.

3. Convert the assets

You can't just copy the APK's files across. There's no usable assets/ folder in it: the art sits in res/drawable-nodpi and res/drawable-xhdpi, the audio is in res/raw as MP3s and as WAVs at sample rates the Vita's mixer won't take, and three of the wheel sprites only exist as regions cropped out of a bigger atlas. A script handles all of it:

git clone https://github.com/franciscoclou/bikerace-vita.git
cd bikerace-vita
mkdir apk && unzip /path/to/bike-race.zip -d apk
./scripts/extract_assets.sh

This needs ffmpeg, ImageMagick and python3 with Pillow. If you don't already have them:

Debian / Ubuntu

sudo apt install ffmpeg imagemagick python3-pil

macOS (Homebrew)

brew install ffmpeg imagemagick
python3 -m pip install --user Pillow

(If pip refuses with "externally managed environment," add --break-system-packages to that command, or install Pillow into a venv instead.)

Windows

choco install ffmpeg imagemagick python
python -m pip install Pillow

Without Chocolatey, install each by hand instead: ffmpeg, ImageMagick and Python (tick "Add python.exe to PATH" in its installer), then pip install Pillow.

Current ImageMagick (7.x, which is what Homebrew and newer Linux distros install by default) replaced the standalone convert and identify commands with magick convert / magick identify. The script detects whichever your system has and uses that, so either version works.

It writes assets_out/, about 24 MB.

4. Copy the assets to the Vita

Copy everything inside assets_out/ (not the folder itself) into ux0:data/bikerace/ with VitaShell, so you end up with:

ux0:data/bikerace/textures/
ux0:data/bikerace/ui/
ux0:data/bikerace/sfx/
ux0:data/bikerace/music/      <- optional, 8.8 MB menu track

The menu music is the largest single file, and the game runs fine without it.

Launch it from the LiveArea. Progress is saved to ux0:data/bikerace/save.bin, and ghost replays to ghosts.bin beside it.


Building

The toolchain runs in Docker, so nothing else needs installing:

./scripts/setup.sh      # jadx, vita-parse-core, the vitasdk image
./scripts/decompile.sh  # jadx over apk/classes.dex
./scripts/dumplevels.sh # -> data/levels.bin   (19 worlds, 152 levels)
./scripts/makefonts.sh  # -> data/font_*.bin
./scripts/build.sh      # -> build/BikeRace.vpk

The first four steps all need apk/ in place; see step 2 above.

make -C tests run compiles the game's own sources natively, with GL and the logger stubbed, and runs the real physics over all 152 levels. It runs twice: once as a handheld, once as a PlayStation TV.

While developing

./scripts/log.sh            # live UDP debug log -> debug.log
./scripts/getdump.sh        # pull the newest crash dump off the Vita
./scripts/parsedump.sh      # symbolise it against build/bikerace
./scripts/find.sh <Class>   # locate decompiled Java by original class name
./scripts/deploy.sh         # print the curl commands to copy a build over

The Vita has no console, so the game sends every log line as a UDP datagram to your PC and mirrors it to ux0:data/bikerace/debug.log, which survives a crash that takes the network with it.

Network addresses, title id and paths live in scripts/env.sh. Override them in scripts/env.local.sh (gitignored) rather than editing a tracked file.

docs/ARCHITECTURE.md explains how the engine fits together, and docs/PORTING.md tracks what's done.


Credits

  • VitaSDK, the open toolchain this whole thing is built with.
  • Rinnegatamante for vitaGL, the GXM-backed OpenGL implementation this port renders through. Its fixed-function path lines up almost exactly with what the original's engine expected.
  • TheOfficialFloW and Rinnegatamante again, for the packaging, asset-layout and debugging conventions most Vita homebrew ports follow, this one included. (Their .so loader work doesn't apply here, since the original never had a native library to load, but the conventions around it do.)
  • Top Free Games, for the original game.

Licence

The C source here is MIT licensed. That covers the port only, not Bike Race itself or anything extracted from it.

Read official guide
CALIFICACIÓN
—
Loading votes…
Advertisement

PROJECT FILE

Project type
NATIVE PORT
Genre
Racing / Driving
Status
beta
Original platform
Other
Technology
Native C/C++ port (engine reimplementation)
Version
—
Updated
—

Target platforms 0

View on GitHub
Advertisement