Obliteration is an experimental PS4 emulator using Kyty and Uplift as a reference. The project is under development and cannot run any games that Kyty is able to run yet.
The original author of Kyty is not involved in the development of Obliteration in any way. Obliteration is a completely separate project. The reason you see the author of Kyty in the contributor list is because this project contains commits from Kyty.
You can download binaries from the latest commits here. You MUST sign in to GitHub otherwise you will not be able to download files.
Thanks to VocalFan for the awesome icon!
We have a Discord server for discussion about Obliteration and its development. You can join the server here.
- Cross-platform with native binary for each platform.
- Built-in FTP client to pull the decrypted firmware from jailbroken PS4.
- Built-in PKG file supports for Fake PKG.
- Game library.
- Emulate system calls instead of user-space libraries.
- Supports AArch64 CPU.
- Windows 10, Linux or macOS.
- x86-64 CPU.
- A jailbroken PS4 with FTP server that supports SELF decryption.
- Microsoft Visual C++ 2022 Redistributable. If there is an error related to
msvcp140.dll,vcruntime140.dll, orvcruntime140_1.dllthat means you need to install this manually. It's likely your system already has it, so try to run Obliteration first.
Obliteration supports only 4KB/8KB/16KB pages. Most people should not have any problem with this because 4KB is the default for most distros.
- Visual Studio 2022
Desktop development with C++workload is required
- Rust on the latest stable channel
- CMake 3.21+
- Make sure you have
Add CMake to the system PATHselected when installing
- Make sure you have
- Python 3.6+
- Make sure you have
Add python.exe to PATHselected when installing
- Make sure you have
- GCC 9.4+
- Rust on the latest stable channel
- CMake 3.21+
- macOS 12+
- Homebrew
- Clang 13+
- Rust on the latest stable channel
- CMake 3.21+
You need to install Qt 6 on your system before you proceed. The minimum version is 6.5.
You need Qt Online Installer for open-source to install Qt, downloaded from https://www.qt.io. The installer will ask you to sign in with a Qt account, which you can create for free. You need to check Custom installation and do not check Qt for desktop development that is using the MinGW toolchain. Make sure you have checked the MSVC 2019 64-bit component in the Select Components page for the version you wish to install and uncheck all of the other components.
Once installation is completed you need to set the CMAKE_PREFIX_PATH environment variable to the full path of the installed version (e.g. C:\Qt\6.5.1\msvc2019_64). To set an environment variable:
- Open a run dialog with Win + R.
- Enter
sysdm.cplthen clickOK. - Go to the
Advancedtab then click onEnvironment Variables.... - Click
New...to create a new environment variable. Just create for eitherUser variablesorSystem variables, not both. - Restart your terminal or IDE to load the new PATH.
brew install qt@6cmake --preset PRESET .The value of PRESET will depend on your platform and the build configuration you want to use. The current available presets are:
- windows-release
- windows-debug
- linux-release
- linux-debug
- mac-release
- mac-debug
If all you want is to use the emulator, choose [YOUR-PLATFORM]-release for optimized outputs. But if you want to edit the code, choose *-debug.
cmake --build buildYou can use -j to enable parallel building (e.g. cmake --build build -j 2). Each parallel build on Linux consumes a lot of memory so don't use the number of your CPU cores otherwise your system might crash due to out of memory. On Windows it seems like it is safe to use the number of your CPU cores.
Before proceeding, make sure the build preset you are using is *-debug. We recommend Visual Studio Code as a code editor with the following extensions:
Then open this folder with VS Code. It will ask which CMake preset to use and you need to choose the same one that you were using when building. Everything should work out of the box (e.g. code completion, debugging, etc).
If you don't have a PS4 application for testing you can download PS Scene Quiz for free here.
- Use unsafe code only when you know what you are doing. When you do try to wrap it in a safe function so other people who are not familiar with unsafe code can have a safe life.
- Don't chain method calls without an intermediate variable if the result code is hard to follow. We encourage code readability as a pleasure when writing so try to make it easy to read and understand for other people.
- Do not blindly cast an integer. Make sure the value can fit in a destination type. We don't have any plans to support non-64-bit systems so the pointer size and its related types like
usizeare always 64-bits.
Just follow how Qt is written (e.g. coding style, etc.). Always prefers Qt classes over std when possible so you don't need to handle exceptions. Do not use the Qt ui file to design the UI because it will break on a high-DPI screen.
The application consists of 2 binaries:
- Main application. This is what users will see when they launch Obliteration. Its entry point is inside
src/main.cpp. - Emulator kernel. This is where emulation takes place. Its entry point is inside
src/kernel/src/main.rs.
Create .kernel-debug in the root of the repository. The contents of this file is YAML and the kernel will deserialize it to the Args struct in src/kernel/src/main.rs when passing the --debug flag to the kernel.
- game: (Folder Path) | Where is the game to load?
- system: (Folder Path) | Where is the system firmware?
- debug-dump: (Folder Path) | Where should the debug log be saved?
- clear-debug-dump: (boolean) | Should we remove the old debug log?
We already provide a launch configuration for VS Code so all you need to do is choose Kernel as the configuration and start debugging.
We use icons from https://materialdesignicons.com for UI (e.g. on the menu and toolbar).
PS4 Developer Wiki has a lot of useful information about the PS4 internal. We also have a PS4 reverse engineering project.
If you want to make some contributions but don't know what to work on you can look for TODO comment or todo! macro invocation in the source code. You can also take a look on the unassigned issues.
src/ansi_escape.hpp,src/ansi_escape.cpp,src/log_formatter.hppandsrc/log_formatter.cppare licensed under GPL-3.0 only.src/param,src/pfsandsrc/pkgare licensed under LGPL-3.0 license.- All other source code is licensed under MIT license.
- All release binaries are under GPL-3.0 license.

