An attempt to port Quest games over to PICO.
This replaces the following libs:
- libOculusXRPlugin.so
- libovrplatformloader.so
- libOVRPlugin.so
And replaces them with a proxy, that relays functions/information over to the PICO libs.
Only a limited amount of Unity games are supported.
Unreal games are not supported.
-
Install the Android NDK
Required version: r21e (21.4.7075529).
https://developer.android.com/ndk/downloads
(I recommend you install it via Android Studio) -
Run either the
compile_windows.ps1
powershell script or thecompile_linux.bash
bash script.
Don't forget to add the toolchain /bin/ to your path!
(TODO is to make a Makefile...)
You will need the following
- An APK extractor
apktool - An APK signer
uber-apk-signer or PPTools - My patched libs
You can find prebuilt libs in Actions > Build files.
You'll need the following files (both from my repo):
(Oculus)
- libOculusXRPlugin.so
- libovrplatformloader.so
- libOVRPlugin.so
(Pico)
- libPxrPlatform.so
- libpxr_api.so
- libpxrplatformloader.so
(C++)
- libc++_shared.so
Make sure you take the ones I committed to the repo, they have some patched strings/instructions to make them work.
- Build or download the required libs.
- Decompress the APK file with apktools.
- Replace/add the library files into
/lib/arm64-v8a
- In
AndroidManifest.xml
, inside of<application>...</application>
add:
<meta-data android:name="pvr.app.type" android:value="vr"/>
- Then open
/assets/bin/Data/UnitySubsystems/OculusXRPlugin/UnitySubsystemsManifest.json
- Set the name to
"name": "PxrPlatform",
Game | Works | Doesn't work |
---|---|---|
Keep Talking and Nobody Explodes | Fully functional | / |
Waltz of the Wizard | Sound | No video |
Job Simulator | Video Controllers |
Audio glitches Physics glitches |
I Expect You To Die | / | Won't work without custom implementation |
Currently only a limited amount of Unity games actually functionally work.
Unreal games will not work without further reverse engineering efforts.
Figuring out why certain games don't work is going to require A LOT of reverse engineering.
(Mostly just incompatible API calls with Oculus & PICO, different GUID's, etc, that can not simply just be solved by using a proxy)
Why certain games don't work:
- With some games, a proprietary method is used by Oculus, that requires me to RE the Oculus SDK in massive detail.
- A custom implementation of the: Unity API and the Unreal API will have to be done.
Which includes RE'ing the OpenXR API that is used on PICO systems.
(On the plus side, most parts are open source)