243 lines
8.6 KiB
Markdown
243 lines
8.6 KiB
Markdown
<picture>
|
|
<source media="(prefers-color-scheme: dark)" srcset="banner.png">
|
|
<source media="(prefers-color-scheme: light)" srcset="banner-light.png">
|
|
<img alt="Skate 3 Native PC Recompilation" src="banner-light.png">
|
|
</picture>
|
|
|
|
An unofficial native recompilation of the Xbox 360 version of Skate 3, supporting Windows, Linux, and macOS. Built with a Skate-specific [rexglue SDK](https://github.com/rexglue/rexglue-sdk) fork.
|
|
|
|
The game is currently capable of running at ~165FPS at 4K with MSAA, using an RTX 4090.
|
|
|
|
The project does not include Skate 3 retail game files. To run or build the project, you must provide files from your own legally obtained Xbox 360 copy of Skate 3.
|
|
|
|
Gameplay (click to go to YouTube):
|
|
|
|
<p align="center">
|
|
<a href="https://www.youtube.com/watch?v=FHym2iQROa0">
|
|
<img src="https://img.youtube.com/vi/FHym2iQROa0/maxresdefault.jpg" alt="Skate 3 Recomp gameplay" width="420">
|
|
</a>
|
|
</p>
|
|
|
|
## How Do I Play?
|
|
|
|
Notes:
|
|
|
|
- The Windows version is the most tested, followed by Linux, and then macOS.
|
|
- On some hardware configurations, you may have a better experience running the Windows version through a translation layer like Proton rather than the native Linux build itself.
|
|
- The macOS ARM build is very experimental and therefore much more prone to issues.
|
|
|
|
### Windows
|
|
|
|
1. Download the latest release Skate3Recomp-Windows.zip from the releases page.
|
|
2. Extract it anywhere you like, to a folder you control.
|
|
3. Run skate3.exe.
|
|
4. Click "Select ISO" to select your legally obtained copy of Skate 3.
|
|
5. Wait for the installer to extract the game files.
|
|
6. Click "Start Game".
|
|
|
|
### Linux
|
|
|
|
1. Download the latest release Skate3Recomp-Linux.zip from the releases page.
|
|
2. Extract it anywhere you like, to a folder you control.
|
|
3. Run skate3.
|
|
4. Click "Select ISO" to select your legally obtained copy of Skate 3.
|
|
5. Wait for the installer to extract the game files.
|
|
6. Click "Start Game".
|
|
|
|
### macOS (ARM / Experimental)
|
|
|
|
1. Download the latest release Skate3Recomp-macOS.zip from the releases page.
|
|
2. Extract it anywhere you like, to a folder you control.
|
|
3. Run the game by opening the "Skate 3 Recomp" app (or "./skate3" from a terminal). The app must stay in the extracted folder next to the other files.
|
|
4. The first time, right-click the app and choose Open, or approve it under System Settings > Privacy & Security, before macOS will allow it to run.
|
|
5. Click "Select ISO" to select your legally obtained copy of Skate 3.
|
|
6. Wait for the installer to extract the game files.
|
|
7. Click "Start Game".
|
|
|
|
## Installing DLC
|
|
|
|
To use DLC, you must provide package files from your own legally obtained Xbox 360 DLC.
|
|
|
|
Create a `dlc` folder either beside the executable, inside the installed game folder,
|
|
or in the user data folder. Place the DLC package files in that
|
|
folder and start the game.
|
|
|
|
## True Ultrawide
|
|
|
|
The builds include an experimental true ultrawide mode: the native renderer draws the world at your display's full aspect ratio (21:9 and wider) with a matching wider field of view, while the HUD and menus stay centered and undistorted. Enable it via the Aspect Ratio setting or `skate3_ultrawide = true`. It requires the native renderer; with the emulated renderer the game presents in standard 16:9. Rendering more of the scene costs proportionally more GPU time.
|
|
|
|
## Controls
|
|
|
|
- Standard Xbox controls using an Xbox controller are the preferred and main input method.
|
|
- PlayStation (DualShock/DualSense), Switch and most generic controllers are supported through the SDL controller backend: set Settings > Controls > Controller Backend to SDL and restart the game. Steam Input through XInput also works. On Linux and macOS the SDL backend is always used, so these controllers work out of the box.
|
|
- Keyboard controls can be enabled in the game settings menu.
|
|
- Press Escape on keyboard or (RB + Start) on the controller to open the game settings menu. The chord can be changed in Settings > Controls.
|
|
|
|
### Keyboard Keybinds
|
|
|
|
- Left stick: W/A/S/D
|
|
- Right stick: mouse movement
|
|
- A/B/X/Y: Space/C/E/F
|
|
- LT/RT: RMB/LMB
|
|
- LB/RB: Q/R
|
|
- Left stick press: Shift
|
|
- Right stick press: MMB
|
|
- Back/Start: Tab/Return
|
|
|
|
## Building from Source
|
|
|
|
Clone with submodules:
|
|
|
|
```sh
|
|
git clone --recursive <repo-url> skate3recomp
|
|
cd skate3recomp
|
|
```
|
|
|
|
If you already cloned without submodules:
|
|
|
|
```sh
|
|
git submodule sync --recursive
|
|
git submodule update --init --recursive --jobs "$(nproc 2>/dev/null || echo 4)"
|
|
```
|
|
|
|
The build-time codegen needs an extracted game dump containing `default.xex` and
|
|
`data/webkit/EAWebkit.xex`. Put that dump in `game/`, or pass a path with
|
|
`SKATE3_GAME_DATA_ROOT`.
|
|
|
|
Generate the recompiled source first:
|
|
|
|
```sh
|
|
cmake --preset relwithdebinfo -DSKATE3_GAME_DATA_ROOT="$PWD/game"
|
|
cmake --build --preset relwithdebinfo --target generate-all --parallel
|
|
```
|
|
|
|
Then reconfigure so CMake sees the generated source lists and build:
|
|
|
|
```sh
|
|
cmake --preset relwithdebinfo -DSKATE3_GAME_DATA_ROOT="$PWD/game"
|
|
cmake --build --preset relwithdebinfo --parallel
|
|
```
|
|
|
|
For release packaging, use the `release` preset on Windows or the
|
|
`linux-release` preset on Linux.
|
|
|
|
## Ubuntu/Linux Build
|
|
|
|
These instructions target Ubuntu 24.04 LTS on x86_64. Other distributions need
|
|
the same toolchain shape: CMake, Ninja, Clang 20 or newer, Vulkan development
|
|
headers, GTK 3 development headers, and SDL-compatible audio/input development
|
|
packages.
|
|
|
|
ReXGlue requires Clang. Clang 20 is recommended on Ubuntu because it matches the
|
|
Linux toolchain used by the rexglue SDK CI and avoids Ubuntu 24.04's
|
|
Clang 18/libstdc++ `std::expected` feature-test mismatch.
|
|
|
|
Install LLVM's apt repository and dependencies:
|
|
|
|
```sh
|
|
sudo apt update
|
|
sudo apt install -y wget gnupg lsb-release software-properties-common
|
|
wget https://apt.llvm.org/llvm.sh
|
|
chmod +x llvm.sh
|
|
sudo ./llvm.sh 20
|
|
sudo apt install -y \
|
|
git cmake ninja-build build-essential pkg-config p7zip-full \
|
|
clang-20 lld-20 \
|
|
libgtk-3-dev libx11-xcb-dev \
|
|
libvulkan-dev vulkan-tools mesa-vulkan-drivers \
|
|
libasound2-dev libpulse-dev libpipewire-0.3-dev libudev-dev
|
|
```
|
|
|
|
Optional packages improve controller/input and diagnostics coverage in SDL:
|
|
|
|
```sh
|
|
sudo apt install -y libusb-1.0-0-dev libunwind-dev libibus-1.0-dev liburing-dev
|
|
```
|
|
|
|
Initialize submodules and verify the local environment:
|
|
|
|
```sh
|
|
./scripts/bootstrap-linux.sh
|
|
```
|
|
|
|
Configure, generate, reconfigure, and build a development build:
|
|
|
|
```sh
|
|
cmake --preset linux-relwithdebinfo -DSKATE3_GAME_DATA_ROOT="$PWD/game"
|
|
cmake --build --preset linux-relwithdebinfo --target generate-all --parallel
|
|
cmake --preset linux-relwithdebinfo -DSKATE3_GAME_DATA_ROOT="$PWD/game"
|
|
cmake --build --preset linux-relwithdebinfo --parallel
|
|
```
|
|
|
|
Build a Linux release:
|
|
|
|
```sh
|
|
cmake --preset linux-release -DSKATE3_GAME_DATA_ROOT="$PWD/game"
|
|
cmake --build --preset linux-release --target generate-all --parallel
|
|
cmake --preset linux-release -DSKATE3_GAME_DATA_ROOT="$PWD/game"
|
|
cmake --build --preset linux-release --parallel
|
|
```
|
|
|
|
The release artifacts are:
|
|
|
|
```text
|
|
out/build/linux-release/skate3
|
|
out/build/linux-release/librexruntime.so
|
|
```
|
|
|
|
## Running a Development Build
|
|
|
|
On Linux:
|
|
|
|
```sh
|
|
./scripts/run-linux.sh
|
|
```
|
|
|
|
The launcher sets `LD_LIBRARY_PATH` for development builds, passes
|
|
`--game_data_root="$PWD/game"`, and selects SDL controller input on Linux. To
|
|
use a game dump outside the repository:
|
|
|
|
```sh
|
|
SKATE3_GAME_DATA_ROOT="/path/to/extracted/game" ./scripts/run-linux.sh
|
|
```
|
|
|
|
Keyboard-to-controller emulation is off by default. Pass `--mnk_mode` or set
|
|
`SKATE3_MNK=1` to enable it:
|
|
|
|
```sh
|
|
SKATE3_MNK=1 ./scripts/run-linux.sh
|
|
```
|
|
|
|
Fullscreen is on by default. Pass `--no-fullscreen` to start windowed.
|
|
On Windows, ultrawide displays are detected automatically in fullscreen. For an
|
|
ultrawide window, pass matching `--window_width` and `--window_height` values;
|
|
the native renderer then draws true widescreen frames at that aspect.
|
|
|
|
To run the Linux development executable directly:
|
|
|
|
```sh
|
|
LD_LIBRARY_PATH="$PWD/third_party/rexglue-sdk/out/linux-amd64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" \
|
|
./out/build/linux-relwithdebinfo/skate3 --game_data_root="$PWD/game" --input_backend=sdl
|
|
```
|
|
|
|
## rexglue Fork
|
|
|
|
`third_party/rexglue-sdk` is pinned as a Git submodule to the
|
|
`skate3-sdk-clean` branch of the Skate-specific rexglue fork. Clone
|
|
recursively or run:
|
|
|
|
```sh
|
|
git submodule sync --recursive
|
|
git submodule update --init --recursive --jobs "$(nproc 2>/dev/null || echo 4)"
|
|
```
|
|
|
|
The fork is based on rexglue's 0.8.0 release line and contains the Skate 3
|
|
runtime, codegen, input, graphics, timing, and Linux fixes needed by this
|
|
project.
|
|
|
|
## Credits
|
|
|
|
- [rexglue SDK](https://github.com/rexglue/rexglue-sdk), the recompilation SDK
|
|
used by this project.
|
|
- [Xenia](https://github.com/xenia-project/xenia), whose Xbox 360 research and
|
|
tooling have helped the broader recompilation ecosystem.
|