2024-02-23 23:32:32 +02:00
<!--
SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
2024-06-04 20:55:16 +02:00
< h1 align = "center" >
< br >
< a href = "https://shadps4.net/" > < img src = "https://github.com/shadps4-emu/shadPS4/blob/main/.github/shadps4.png" width = "220" > < / a >
< br >
< b > shadPS4< / b >
< br >
2024-06-23 08:57:32 +02:00
< / h1 >
2024-06-04 20:55:16 +02:00
2024-06-23 08:57:32 +02:00
< h1 align = "center" >
2024-09-20 11:38:42 +02:00
< a href = "https://discord.gg/bFJxfftGW6" >
2024-06-04 20:55:16 +02:00
< img src = "https://img.shields.io/discord/1080089157554155590?color=5865F2&label=shadPS4 Discord&logo=Discord&logoColor=white" width = "240" >
< a href = "https://github.com/shadps4-emu/shadPS4/releases/latest" >
< img src = "https://img.shields.io/github/downloads/shadps4-emu/shadPS4/total.svg" width = "140" >
< a href = "https://shadps4.net/" >
< img src = "https://img.shields.io/badge/shadPS4-website-8A2BE2" width = "150" >
< a href = "https://x.com/shadps4" >
< img src = "https://img.shields.io/badge/-Join%20us-black?logo=X&logoColor=white" width = "100" >
< a href = "https://github.com/shadps4-emu/shadPS4/stargazers" >
< img src = "https://img.shields.io/github/stars/shadps4-emu/shadPS4" width = "120" >
2024-06-23 08:57:32 +02:00
< / h1 >
2024-06-04 20:55:16 +02:00
2024-06-14 14:53:18 +02:00
< p align = "center" >
< a href = "https://shadps4.net/" >
2024-09-28 15:17:11 +02:00
< img src = "https://github.com/shadps4-emu/shadPS4/blob/main/documents/Screenshots/1.png" width = "400" >
< img src = "https://github.com/shadps4-emu/shadPS4/blob/main/documents/Screenshots/2.png" width = "400" >
< img src = "https://github.com/shadps4-emu/shadPS4/blob/main/documents/Screenshots/3.png" width = "400" >
< img src = "https://github.com/shadps4-emu/shadPS4/blob/main/documents/Screenshots/4.png" width = "400" >
2024-06-23 08:57:32 +02:00
< / p >
2024-06-05 07:17:02 +02:00
2024-08-25 02:53:13 +02:00
# General information
2023-06-12 11:00:30 +03:00
2024-09-28 23:01:15 +02:00
**shadPS4** is an early **PlayStation 4** emulator for **Windows** , **Linux** and **macOS** written in C++.
2023-06-20 15:42:36 +03:00
2024-10-13 14:03:19 +02:00
If you encounter problems or have doubts, do not hesitate to look at the [**Quickstart** ](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Quickstart/Quickstart.md ).\
To verify that a game works, you can look at [**shadPS4 Game Compatibility** ](https://github.com/shadps4-emu/shadps4-game-compatibility ).\
To discuss shadPS4 development, suggest ideas or to ask for help, join our [**Discord server** ](https://discord.gg/bFJxfftGW6 ).\
To get the latest news, go to our [**X (Twitter)** ](https://x.com/shadps4 ) or our [**website** ](https://shadps4.net/ ).\
2024-09-28 23:01:15 +02:00
For those who'd like to donate to the project, we now have a [**Kofi page** ](https://ko-fi.com/shadps4 )!
2024-09-23 20:15:14 +02:00
2023-06-12 11:00:30 +03:00
# Status
2024-08-25 02:53:13 +02:00
> [!IMPORTANT]
2024-09-02 21:31:41 -03:00
> shadPS4 is early in development, don't expect a flawless experience.
2024-08-25 02:53:13 +02:00
2024-10-13 14:03:19 +02:00
Currently, the emulator can successfully run games like [**Bloodborne** ](https://www.youtube.com/watch?v=wC6s0avpQRE ), [**Dark Souls Remastered** ](https://www.youtube.com/watch?v=-3PA-Xwszts ), [**Red Dead Redemption** ](https://www.youtube.com/watch?v=Al7yz_5nLag ) and many other games.
2024-06-04 22:43:10 +02:00
2024-07-31 13:43:30 +02:00
# Why
2023-06-12 11:00:30 +03:00
2024-08-25 02:53:13 +02:00
This project began as a fun project. Given our limited free time, it may take some time before shadPS4 can run more complex games, but we're committed to making small, regular updates.
2023-06-12 11:00:30 +03:00
2024-08-25 02:54:46 +02:00
# Building
2023-06-12 11:00:30 +03:00
2025-01-30 13:06:55 +01:00
> [!IMPORTANT]
> If you want to use shadPS4 to play your games, you don't have to follow the build instructions, you can simply download the emulator from either the [**release tab**](https://github.com/shadps4-emu/shadPS4/releases) or the [**action tab**](https://github.com/shadps4-emu/shadPS4/actions).
2023-06-22 22:48:55 -03:00
## Windows
2024-06-11 21:14:18 +02:00
Check the build instructions for [**Windows** ](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-windows.md ).
2023-06-22 22:48:55 -03:00
## Linux
2024-06-12 18:09:54 +02:00
Check the build instructions for [**Linux** ](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-linux.md ).
2023-08-08 22:31:21 +03:00
2024-09-02 22:24:24 -07:00
## macOS
Check the build instructions for [**macOS** ](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-macos.md ).
2024-09-25 11:22:09 +02:00
> [!IMPORTANT]
2025-04-03 12:44:12 -07:00
> macOS users need at least macOS 15.4 to run shadPS4. Due to GPU issues there are currently heavy bugs on Intel Macs.
2024-09-02 23:19:22 -07:00
2024-08-21 21:13:06 +02:00
# Debugging and reporting issues
2024-09-28 23:01:15 +02:00
For more information on how to test, debug and report issues with the emulator or games, read the [**Debugging documentation** ](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Debugging/Debugging.md ).
2024-08-21 21:13:06 +02:00
Added keyboard and mouse input remapping, mouse movement to joystick logic, GUI and more (#1356)
* added support for loading keyboard config from file
* final minor update before pull request
* fix messing up the merge
* fix waitEvent to correctly handle mouse inputs
* add license
* Applied coding style fixes
* clang-format fucked up the .ini file
* actually fix clang changing ini syntax
use relative path for the ini file
* remove big commented out code blocks,
and fixed platform-dependent code
* fix windows hating me
* added mouse config option
* added toggle for mouse movement input (f7)
* fix license and style
* add numpad support i accidentally left out
* added support for mouse wheel (to buttons only)
* if keyboard config doesn't exist, autogenerate it
* added keybinds for "walk mode"
* Mouse movement input is now off by default
* code cleanup and misc fixes
* delete config file since it is now autogenerated
* F6 = F7 + F9
* added better mouse handling with config options
* Added capslock support
* fix clang-format
* Added support for mod key toggle key
* F6 and F7 are removed, F9 captures and enables the mouse
* Encapsulated globals and new classes in a new namespace
* Added mouse side button support
* Added per-game config
* relocated input parser to the new namespace
* changed parser parameters to make it possible to use it from the gui
* added home, end, pgup and pgdown
* Resolved merge conflict and refactored code
* Updated default keybindings
* Changed input handling to be single-threaded
* General code cleanup
* Start working on new backend
* Mouse polling, CMakeLists, and basic framework
* Output update handling, and reworked file creating, reading and parsing
* Parsing works now
* Single key button inputs work now
* Axis outputs work now
* Wheel works now (for me), l2/r2 handling improvements, and misc bugfixes
* Downgraded prints to log_debug, and implemented input hierarchy
* Implemented key toggle
* Added mouse parameter parsing
* clang-format
* Fixed clang and added a const keyword for mac
* Fix input hierarchy
* Fixed joysick halfmodes, and possibly the last update on input hierarchy
* clang-format
* Rewrote the default config to reflect new changes
* clang
* Update code style
* Updated sorting to accomodate for that one specific edge case
* Fix default config and the latest bug with input hiearchy
* Fix typo
* Temporarily added my GUI
* Update cmakelists
* Possible fix for Gravity Rush
* Update Help text, default config, and clang
* Updated README with the new keybind info
* okay so maybe the gravity rush fix might have slightly broken the joystick halfmode and key toggle
* Fixed mistakenly overwriting the last opened config with the default one if the GUI is opened multiple times in a session
* Updated Help descriptions and fixed mouse movement default parameters
* Fix crash if the Help dialog was opened a second time
If it's closed with the top right close button instead of clicking the Help button again, a required flag wasn't reset, making the next click on Help try to close a nonexistent window and segfault
* Added closing the config also closing the Help window, and fixed more segfaults due to mismatched flags
* Initial controller support
* clang and debug print cleanup
* Initial axis-to-button logic
* Updated Help text
* Added 'Reset to Default' button in GUI
* Minor text and description updates + fixed an issue with Help text box rendering
* Fix button-to-touchpad logic and l2/r2 handling, as they are both axes and buttons
The touchpad's button state was correctly handled, so games that use that were fine, but the touchDown flag was always set to true, so games that use this flag had problems, like Gravity Rush
* Fix merge conflict
* Clang
* Added back back button to touchpad binding
* Added touchpad button handling
* Added end-of-line comments and fixed some crashes happening with the VS debugger
* Apply recent changes from kbm-only
* Deadzone + initial directional axis-to-button mapping
* Added that one missing space in the README. Are you all happy now?
* Fixups from making everything use SDL
* Revert directional joystick code and fix a memory leak
* Change config directory name again to conform to project standards
* Clang
* Revert the old deeadzone code and properly add the new one
* Clang
2025-01-31 15:36:14 +01:00
# Keyboard and Mouse Mappings
2024-08-25 02:53:13 +02:00
2025-01-30 00:09:11 -08:00
> [!NOTE]
> Some keyboards may also require you to hold the Fn key to use the F\* keys. Mac users should use the Command key instead of Control, and need to use Command+F11 for full screen to avoid conflicting with system key bindings.
2024-12-15 11:30:53 -03:00
| Button | Function |
|-------------|-------------|
F10 | FPS Counter
Ctrl+F10 | Video Debug Info
F11 | Fullscreen
F12 | Trigger RenderDoc Capture
2024-08-25 02:53:13 +02:00
> [!NOTE]
2024-08-25 14:37:17 +02:00
> Xbox and DualShock controllers work out of the box.
2024-07-01 18:27:22 +02:00
2025-02-01 00:34:41 -08:00
| Controller button | Keyboard equivalent |
|-------------|-------------|
LEFT AXIS UP | W |
LEFT AXIS DOWN | S |
LEFT AXIS LEFT | A |
LEFT AXIS RIGHT | D |
RIGHT AXIS UP | I |
RIGHT AXIS DOWN | K |
RIGHT AXIS LEFT | J |
RIGHT AXIS RIGHT | L |
TRIANGLE | Numpad 8 or C |
CIRCLE | Numpad 6 or B |
CROSS | Numpad 2 or N |
SQUARE | Numpad 4 or V |
PAD UP | UP |
PAD DOWN | DOWN |
PAD LEFT | LEFT |
PAD RIGHT | RIGHT |
OPTIONS | RETURN |
BACK BUTTON / TOUCH PAD | SPACE |
L1 | Q |
R1 | U |
L2 | E |
R2 | O |
L3 | X |
R3 | M |
Keyboard and mouse inputs can be customized in the settings menu by clicking the Controller button, and further details and help on controls are also found there. Custom bindings are saved per-game. Inputs support up to three keys per binding, mouse buttons, mouse movement mapped to joystick input, and more.
Added keyboard and mouse input remapping, mouse movement to joystick logic, GUI and more (#1356)
* added support for loading keyboard config from file
* final minor update before pull request
* fix messing up the merge
* fix waitEvent to correctly handle mouse inputs
* add license
* Applied coding style fixes
* clang-format fucked up the .ini file
* actually fix clang changing ini syntax
use relative path for the ini file
* remove big commented out code blocks,
and fixed platform-dependent code
* fix windows hating me
* added mouse config option
* added toggle for mouse movement input (f7)
* fix license and style
* add numpad support i accidentally left out
* added support for mouse wheel (to buttons only)
* if keyboard config doesn't exist, autogenerate it
* added keybinds for "walk mode"
* Mouse movement input is now off by default
* code cleanup and misc fixes
* delete config file since it is now autogenerated
* F6 = F7 + F9
* added better mouse handling with config options
* Added capslock support
* fix clang-format
* Added support for mod key toggle key
* F6 and F7 are removed, F9 captures and enables the mouse
* Encapsulated globals and new classes in a new namespace
* Added mouse side button support
* Added per-game config
* relocated input parser to the new namespace
* changed parser parameters to make it possible to use it from the gui
* added home, end, pgup and pgdown
* Resolved merge conflict and refactored code
* Updated default keybindings
* Changed input handling to be single-threaded
* General code cleanup
* Start working on new backend
* Mouse polling, CMakeLists, and basic framework
* Output update handling, and reworked file creating, reading and parsing
* Parsing works now
* Single key button inputs work now
* Axis outputs work now
* Wheel works now (for me), l2/r2 handling improvements, and misc bugfixes
* Downgraded prints to log_debug, and implemented input hierarchy
* Implemented key toggle
* Added mouse parameter parsing
* clang-format
* Fixed clang and added a const keyword for mac
* Fix input hierarchy
* Fixed joysick halfmodes, and possibly the last update on input hierarchy
* clang-format
* Rewrote the default config to reflect new changes
* clang
* Update code style
* Updated sorting to accomodate for that one specific edge case
* Fix default config and the latest bug with input hiearchy
* Fix typo
* Temporarily added my GUI
* Update cmakelists
* Possible fix for Gravity Rush
* Update Help text, default config, and clang
* Updated README with the new keybind info
* okay so maybe the gravity rush fix might have slightly broken the joystick halfmode and key toggle
* Fixed mistakenly overwriting the last opened config with the default one if the GUI is opened multiple times in a session
* Updated Help descriptions and fixed mouse movement default parameters
* Fix crash if the Help dialog was opened a second time
If it's closed with the top right close button instead of clicking the Help button again, a required flag wasn't reset, making the next click on Help try to close a nonexistent window and segfault
* Added closing the config also closing the Help window, and fixed more segfaults due to mismatched flags
* Initial controller support
* clang and debug print cleanup
* Initial axis-to-button logic
* Updated Help text
* Added 'Reset to Default' button in GUI
* Minor text and description updates + fixed an issue with Help text box rendering
* Fix button-to-touchpad logic and l2/r2 handling, as they are both axes and buttons
The touchpad's button state was correctly handled, so games that use that were fine, but the touchDown flag was always set to true, so games that use this flag had problems, like Gravity Rush
* Fix merge conflict
* Clang
* Added back back button to touchpad binding
* Added touchpad button handling
* Added end-of-line comments and fixed some crashes happening with the VS debugger
* Apply recent changes from kbm-only
* Deadzone + initial directional axis-to-button mapping
* Added that one missing space in the README. Are you all happy now?
* Fixups from making everything use SDL
* Revert directional joystick code and fix a memory leak
* Change config directory name again to conform to project standards
* Clang
* Revert the old deeadzone code and properly add the new one
* Clang
2025-01-31 15:36:14 +01:00
2024-07-01 18:27:22 +02:00
2024-03-23 10:05:45 +02:00
# Main team
2023-06-12 11:00:30 +03:00
2024-06-11 21:14:18 +02:00
- [**georgemoralis** ](https://github.com/georgemoralis )
- [**raphaelthegreat** ](https://github.com/raphaelthegreat )
- [**psucien** ](https://github.com/psucien )
- [**skmp** ](https://github.com/skmp )
- [**wheremyfoodat** ](https://github.com/wheremyfoodat )
- [**raziel1000** ](https://github.com/raziel1000 )
2024-12-28 13:05:53 +02:00
- [**viniciuslrangel** ](https://github.com/viniciuslrangel )
2024-12-28 13:06:51 +02:00
- [**roamic** ](https://github.com/vladmikhalin )
- [**poly** ](https://github.com/polybiusproxy )
2024-12-28 13:05:53 +02:00
- [**squidbus** ](https://github.com/squidbus )
2024-12-28 13:16:25 +02:00
- [**frodo** ](https://github.com/baggins183 )
2024-03-28 16:38:14 +02:00
2024-06-11 21:14:18 +02:00
Logo is done by [**Xphalnos** ](https://github.com/Xphalnos )
2023-06-12 11:00:30 +03:00
2024-06-11 21:14:18 +02:00
# Contributing
2023-06-12 11:00:30 +03:00
2024-10-13 14:03:19 +02:00
If you want to contribute, please look the [**CONTRIBUTING.md** ](https://github.com/shadps4-emu/shadPS4/blob/main/CONTRIBUTING.md ) file.\
2024-06-11 21:14:18 +02:00
Open a PR and we'll check it :)
2023-02-24 11:10:30 +02:00
2025-02-13 16:13:33 +02:00
# Translations
If you want to translate shadPS4 to your language we use [**crowdin** ](https://crowdin.com/project/shadps4-emulator ).
2024-06-04 20:55:16 +02:00
# Contributors
< a href = "https://github.com/shadps4-emu/shadPS4/graphs/contributors" >
2024-07-31 13:43:30 +02:00
< img src = "https://contrib.rocks/image?repo=shadps4-emu/shadPS4&max=15" >
2024-06-04 20:55:16 +02:00
< / a >
2024-09-07 00:14:51 +03:00
# Special Thanks
A few noteworthy teams/projects who've helped us along the way are:
- [**Panda3DS** ](https://github.com/wheremyfoodat/Panda3DS ): A multiplatform 3DS emulator from our co-author wheremyfoodat. They have been incredibly helpful in understanding and solving problems that came up from natively executing the x64 code of PS4 binaries
- [**fpPS4** ](https://github.com/red-prig/fpPS4 ): The fpPS4 team has assisted massively with understanding some of the more complex parts of the PS4 operating system and libraries, by helping with reverse engineering work and research.
- **yuzu**: Our shader compiler has been designed with yuzu's Hades compiler as a blueprint. This allowed us to focus on the challenges of emulating a modern AMD GPU while having a high-quality optimizing shader compiler implementation as a base.
2025-02-21 00:30:40 +02:00
- [**felix86** ](https://github.com/OFFTKP/felix86 ): A new x86-64 → RISC-V Linux userspace emulator
2024-09-07 00:14:51 +03:00
2024-07-10 19:01:59 +02:00
# License
2024-08-25 02:53:13 +02:00
- [**GPL-2.0 license** ](https://github.com/shadps4-emu/shadPS4/blob/main/LICENSE )