Prince of Persia Classic (PS Vita)
Prince of Persia Classic
Sobre el proyecto
Prince of Persia Classic es un videojuego de acción y aventura en 2007.
Información oficial del proyecto
Prince of Persia Classic is a 2012 release for Android and iOS devices that recreates the levels of the legendary 1989 classic game with modernized 3D graphics.
This repository contains a wrapper/loader for the Android version of Prince of Persia Classic (based on Cocos2d-x), adapting the environment to run the native ARM dynamic libraries (.so) on the PS Vita using TheFloW's Android SO Loader base.
This is my first PS Vita port and my first homebrew project of this scale — see Beta Testing / Contributing below, I could really use the help.
⚠️ Legal & DMCA Disclaimer
Prince of Persia Classic is the intellectual property of Ubisoft Entertainment. This repository does NOT contain any original code, executables, protected binaries, or game assets. It strictly provides the open-source "wrapper" code. The included LiveArea assets are AI-generated or open-source images, free from copyright restrictions. On-screen text is currently rendered with a bundled open-source font (DejaVu Serif, Bitstream Vera license) instead of the game's original typeface — see Known Issues.
To play the game, you MUST possess a legitimate, legally obtained copy of the Android game. Users must manually extract and provide their own files (the .so libraries, plus the game's data — either as .apk/.obb, or as the equivalent files extracted loose, see step 5 below). None of that copyrighted content is tracked in this repository — see .gitignore (*.so, *.apk, *.obb, *.suprx, ux0_data/, original/, bin/).
Known Issues / Current Limitations
This is an early, actively-developed port. Please read this list before reporting a bug — it may already be a known/tracked issue (see Docs/Fixes_Log.md and Docs/plan_portabilidad.md for the full technical history).
- Exit crash fix: Fixed an issue where selecting 'Yes' in the game's in-game Exit dialog crashed instead of returning cleanly to the LiveArea (
Cocos2dxActivity_terminateProcess). - In-game controls remapping overlay: Press START + SELECT at any time to open the configuration menu. Allows remapping any action, binding PS Vita rear touch quadrants (L2/R2/L3/R3), tuning analog deadzone, and saving directly to
ux0:data/popclassic/controls.txt. - Native PS Vita trophies (v01.55): 18 trophies (17 + Platinum) install on first launch and pop the system notification when unlocked. Requires
NoTrpDrm.suprx(see Setup). - Store without real money (v01.55): life potions/revives are bought with coins, and coins are earned from in-game score (1 point = 1 coin, paid out when the main or pause menu opens). Screens that asked for real-money purchases are no longer shown.
- Not using the game's official fonts yet. Since Sony's native font APIs (
ScePvf/ScePgf) aren't implemented on Vita3K and pulling in the original Android font assets raised licensing questions, text is currently rendered with the open-source, freely-licensed DejaVu Serif font viastb_truetype. On-screen text would look closer to the original Ubisoft style with the real font. - Not compatible with Vita3K (emulator). This is a confirmed bug in Vita3K itself, not in this port: the menu, text, and audio all work correctly, but starting a real game ("New Game"/"Quick Game") crashes because Vita3K's renderer mishandles non-power-of-2 swizzled textures (confirmed by reading Vita3K's own source, reproducible 3/3 times, and still present on Vita3K's latest
masterat the time of testing). This port targets real PS Vita hardware. Technical details inDocs/plan_portabilidad.md§9.17.
As of the current build (v01.55), controls remapping, exit crash fixes, full Simplified Chinese text, native trophies and the coin store are functional.
Found something not on this list? Please open an issue — see Beta Testing / Contributing.
Installation Instructions
Choosing a VPK: Debug vs. Play build
This project can produce two different VPK builds from the same source, controlled by the CMake option ENABLE_VERBOSE_LOG:
| Build | CMake flag | Use it for | Notes |
|---|---|---|---|
| Play (recommended) | -DENABLE_VERBOSE_LOG=OFF (default) | Actually playing the game | Best performance, no logging overhead. |
| Debug | -DENABLE_VERBOSE_LOG=ON | Reporting a bug / helping test | Writes a detailed, timestamped trace (module loads, JNI calls, audio/video/scene events) to a log file on the memory card, at the cost of extra I/O and occasional FPS drops. |
If you're not sure which one you need: install the Play build. Only switch to the Debug build if something is going wrong and you want to grab a log file to attach to a bug report.
Steps
To install the port on a real PS Vita:
- Ensure your console is running a CFW that allows signed homebrew (Enso, HENkaku/h-encore², etc. — firmware 3.60/3.65 or the currently supported h-encore² range).
- Install the kubridge, FdFix, and NoTrpDrm plugins by adding them to your
config.txt:*KERNEL ur0:tai/kubridge.skprx ur0:tai/fd_fix.skprx *main ur0:tai/NoTrpDrm.suprx⚠️ Important for Trophies:
NoTrpDrm.suprxis required under*mainfor the console to install and pop native PS Vita trophies without DRM errors (NP-6185-0). Be sure to reboot the console after editingconfig.txt. - Install
libshacccg.suprx(Sony's shader compiler). You can obtain a legitimate copy from your own console using the ShaRKBR33D homebrew — it can never be redistributed, so it is not included in this repository (.gitignore:*.suprx). - Install the generated
.vpk(see the table above for Debug vs. Play). - Obtain your own legal copy of the Android game. Extract its data and lay it out on the console under
ux0:data/popclassic/with exactly this structure —original.apk/the.obbare not needed at all, just the loose files below:ux0:data/popclassic/ ├── libcocos2d.so ├── libcocosdenshion.so ├── libgame_logic.so ├── appConfig.txt <- required (either here or inside Data_960_576/) ├── controls.txt <- optional: custom controller mapping (auto-generated) ├── save/ <- empty folder, the game writes its saves here ├── logs/ <- only used by the Debug build; created automatically if missing ├── Data/ │ ├── Audio/ <- Ambiance/, Music/, SFX/ (mirrors the game's own folder layout, .mp3 files) │ ├── font/ <- .ttf files, flat (no subfolders) │ └── Video/Mid/ <- cutscenes as .mp4, flat (no subfolders) └── Data_960_576/ <- Animations, Effects, Localization, Logo, Maps, Particles, Texture, appConfig.txtEverything the game needs is now served loose from the memory card — the engine's own file-loading function used to route every relative-path request straight into the
.apk/.obbZIP with no loose-file check, unlike textures/maps/animations which already worked loose; this port now hooks that function to serve a loose file for anything, so the.apk/.obbare never consulted as long asData_960_576/(withLocalization/andappConfig.txt) is present. You can still point it atoriginal.apk/the.obbinstead if you'd rather not extract the full loose tree — both paths remain supported, the hook falls back to them automatically if a loose file isn't found. SeeDocs/Fixes_Log.md#19 for the technical detail. - Extract the three native libraries from the
lib/armeabi/(orlib/armeabi-v7a/) folder of your.apkand place them directly underux0:data/popclassic/as shown above:libcocos2d.solibcocosdenshion.solibgame_logic.so
For a full step-by-step FTP transfer walkthrough (using VitaShell), see Docs/en/INSTALL_HARDWARE.md.
(Note: check community forums for patching scripts and tools to prepare your legal APK/OBB files, or extract the equivalent loose folder structure directly.)
Controls
The port includes a full physical controls remapping system and an in-game configuration overlay:
In-Game Remapping Menu
- Press START + SELECT together at any time to open the remapping overlay.
- Navigate with D-Pad Up/Down.
- Press Cross to replace a button binding, Square to add a secondary button binding, or Triangle to unbind.
- Adjust Analog Stick Deadzone (left/right to calibrate).
- Supports Vita physical buttons, PlayStation TV controllers (DualShock 3/4 with native L2/R2), and PS Vita Rear Touch quadrants (
L2,R2,L3,R3). - Bindings are saved automatically to
ux0:data/popclassic/controls.txt.
Default Controls
| Button | Platform mode | Combat mode |
|---|---|---|
| Left Analog Stick / D-Pad | Move Prince — tap for one careful step, hold to run | same |
| Cross | Jump | Attack |
| Square | Crouch | Defend / parry |
| Triangle | Interact (grab, levers) | Sheath sword |
| Circle / Down | Crouch / Roll | — |
| Up | Jump / climb | — |
| Start | Pause Menu (Android KEYCODE_BACK) | Pause Menu |
| Select | Menu (Android KEYCODE_MENU) | Menu |
| Start + Select | Open Controls Configuration Overlay | same |
| L + R together | Show/hide the on-screen touch buttons | same |
| Cross / Start | Skip cutscene (during video playback) | — |
| Touchscreen | Still works for menu navigation | — |
Coming from v01.20 or earlier: Square used to be a "walk" modifier and is now crouch/defend. Walking no longer needs a modifier. Full details in
Docs/RELEASE_v01.28.md.
Build Instructions (For Developers)
You need the PS Vita SDK compiled with softfp support:
git clone https://github.com/vitasdk-softfp/vdpm
Development workflow used for this port:
- Set up the toolchain. Install
vitasdk(softfp) and exportVITASDKto point to it. - Clone this repo and, to run it on your own hardware, rebuild the
ux0_data/popclassic/asset tree from your own legal APK/OBB (see Installation Instructions — this folder is gitignored and never shipped). - Build.
This generatescmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DENABLE_VERBOSE_LOG=OFF cmake --build buildbuild/popclassic_audio.vpk. See Known Issues regarding real gameplay on Vita3K. - Deploy to real hardware over FTP with VitaShell and iterate on just the
eboot.bin(no full reinstall needed per change) — full walkthrough inDocs/en/INSTALL_HARDWARE.md. - Debug. Build with
-DENABLE_VERBOSE_LOG=ONfor a detailed trace log on the memory card; if the game crashes with no dialog, use thedumpCMake target (make dump) to pull a core dump over FTP and symbolize it againstbuild/so_loader.elfwithvita-parse-core. - Check
Docs/CHANGELOG.mdandDocs/Fixes_Log.mdbefore starting work on a bug — there's a good chance it's already been investigated.
Beta Testing / Contributing
This is my first time porting anything to a console, and my first Vita homebrew project — I'm sure there's a lot of room for improvement. I'm actively looking for beta testers on real PS Vita hardware to help chase down the issues listed above (especially the action-loop bug, cutscene playback, and D-Pad running). Bug reports with a log file from the Debug build are extremely helpful.
Pull requests are very welcome — fixes, cleanups, documentation, translations, anything. If you're picking up one of the Known Issues, feel free to open an issue first to say you're on it, but it's not required.
Credits
Port / wrapper development: MetalSyntax
This project is built on top of soloader-boilerplate by v-atamanenko, itself based on TheFloW's Android SO Loader approach for the PS Vita. Please keep this credit if you fork or redistribute this wrapper.
This port was made with AI support, using the following models: Claude Sonnet 5, Fable 5, and Gemini Pro 3.1.
License
This loader is distributed under the MIT License. See the LICENSE file for more details.
