PSVita Home
What's New
Homebrew
Plugins

Riptide GP Vita v1.0.1 by MetalSyntax
Last Release: Oct 5, 2026
Downloads: 62

so-loader port of the Android version (1.6.3) of Riptide GP (Vector Unit). It runs the original libBlue.so + libfmodex.so + libfmodevent.so with an emulated Java layer (FalsoJNI).
Name Version Released Hits DL Link QR
riptidegp.vpk v1.0.1 10/05/26 8 Download QR
# Riptide GP — PS Vita · v1.0.1

> Paste the section below into the GitHub release description. The title above goes in the
> release-title field; suggested tag: `v1.0.1`.

---

**Your progress is now saved — quit and continue a championship where you left off —
and tilt steering works with the Vita's accelerometer. Locked 60 FPS.**

## What's new in 1.0.1

- **Progress is kept between launches.** v1.0.0 wrote the profile but never managed to read it
back, so every launch started a fresh profile and overwrote the old one. The engine read the
save file's size through a field that only exists in Android's `FILE` struct, got 0 and treated
the profile as empty. The loader now measures the file size itself (hook on
`VuGenericFile::size`).
- **Accelerometer.** The Vita's motion sensor now feeds the game's accelerometer, so the
tilt control method steers by tilting the console (confirmed on real hardware).
Configurable in `config.txt` (`accelerometer`, `invert_tilt`).
- `AMotionEvent_getAxisValue` implemented (it was the last unresolved symbol in the log).
- Your save lives in `ux0:data/riptidegp/files/profile`. A `saves/` folder is not needed; you can
keep a manual backup copy of `profile` anywhere (e.g. `ux0:data/riptidegp/saves/`) and copy it
back to `files/` with VitaShell while the game is closed.

**Updating from 1.0.0:** install the new `riptidegp.vpk` over the old one; the data files in
`ux0:data/riptidegp/` stay as they are. Progress made on 1.0.0 was being reset on every launch,
so it cannot be recovered; from 1.0.1 on, it is kept.

## Requirements

- PS Vita / PS TV with HENkaku/Enso (3.60–3.74 with a kernel plugin loader).
- `kubridge.skprx` in `*KERNEL` of your taiHEN config.
- `libshacccg.suprx` in `ur0:data/` (use ShaRKBR33D).
- Your own copy of the game APK (Android 1.6.3, `armeabi-v7a`).

## Install

1. Install `riptidegp.vpk` with VitaShell.
2. Create `ux0:data/riptidegp/` and copy into it:
- `libBlue.so`, `libfmodex.so`, `libfmodevent.so` from the APK's `lib/armeabi-v7a/`
- `assets/Base.apf` from the APK's `assets/`
3. Launch.

## What works

- Boot through the NativeActivity lifecycle (`OnInitApp`/`OnInitWindow`), full asset loading
from `assets/Base.apf` (textures, shaders, sounds).
- All 57 shader programs compile and link on real hardware (confirmed in the console
log, zero link failures, zero crashes across the run).
- Main menu and racing, confirmed playable on real hardware.
- FMOD music and sound effects (AudioTrack output).
- Progress saved and restored across launches (`ux0:data/riptidegp/files/profile`): continue
championships, keep unlocked boats and upgrades.
- Locked 60 FPS in races.
- Tilt steering with the Vita's accelerometer.
- Logs per run in `ux0:data/riptidegp/logs/`.

## Controls

| Vita | Action |
|---|---|
| Touch screen | Original touch controls |
| Tilt the console | Accelerometer (tilt steering) |
| Left / Right sticks | MOGA analog axes |
| Cross / Circle / Square / Triangle | MOGA A / B / X / Y |
| L / R (+ L2 / R2 on PSTV/DS4) | MOGA shoulder buttons / trigger axes |
| D-pad, Select, Start, L3, R3 | MOGA D-pad, Select, Start, thumb buttons |

## Options

`ux0:data/riptidegp/config.txt` (one `key value` per line):

- `accelerometer 1` — Vita motion sensor drives tilt steering (`0` = no tilt).
- `invert_tilt 0` — `1` swaps left/right tilt.

## Under the hood

Three bugs stood between the APK and a fully playable game, each found on real hardware:

- **Crash in `glBindAttribLocation` on the first shader.** The engine binds its ~10 attribute
locations right after `glCreateProgram()`, before attaching any shader -- legal GLES2, but
vitaGL dereferences the program's vertex shader without a `NULL` check (upstream has the same
bug). The loader now queues those bindings and replays them inside `glLinkProgram`, where the
shaders are already attached; a link failure is reported with the program info log.
- **Permanent black screen with music playing.** The prebuilt `libvitaGL.a` in VitaSDK is not
built with `SOFTFP_ABI=1`, but the loader is softfp (the Android `.so` requires it), so floats
crossing loader<->vitaGL arrived garbled. vitaGL is now vendored (`vendor/vitaGL`, same tree as
the Carnivores Vita ports) and built with the softfp ABI. Same root cause as Carnivores
logs 004-007.
- **Progress reset on every launch (fixed in 1.0.1).** `VuGenericFile::size()` inlines
`fileno()` as a read of bionic's `FILE::_file` (offset `0x0E`) and passes it to `fstat()`. The
loader's `FILE*` comes from SceLibc with a different layout, so it always got fd 0, `fstat`
failed and the profile looked empty. `source/patch.c` hooks the function and computes the size
with `ftell`/`fseek`.

## Known issues

- **Physical buttons and sticks only work with the *Simple* control method.** With tilt
steering selected in the game's options, tilting steers the boat but the buttons/sticks stop
responding. Switch back to *Simple* to use them.

Report anything else you find with the log from `ux0:data/riptidegp/logs/`.
Name Version Released Hits DL Link QR
Riptide GP Vita v1.0.0 10/01/26 54 Download QR