Bike Race Pro (PS Vita)
Bike Race
About the project
Bike Race es un videojuego de carreras publicado por Top Free Games para Other, lanzado en 2012.
Official project information
Bike Race — PS Vita

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.

- 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
| Accelerate | Cross, or the right half of the touchscreen |
| Brake / reverse | Square, 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 level | Circle |
| Pause | Start |
| Menus: move, choose, back | d-pad or stick; Cross; Circle |
| Bike list | Triangle |
| Quit | Exit, on the start screen |
The buttons always work. Under Settings → Controls you can add any of these on top of them:
| Tilt to lean | Tip 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 drives | Left half of the front screen brakes, right half accelerates, as on Android. On by default. |
| Rear pad | The 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.binordata/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, byscripts/dumplevels.shandscripts/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.vpkso the app has an icon on the home screen.tests/shots/, screenshots of the running game used as visual regression references bymake -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
.soloader 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.