Static recompilation of **Eternal Sonata** (Xbox 360) for Windows
and Linux, built on the [ReXGlue SDK](https://github.com/birabittoh/rexglue-sdk/tree/thedarkness).
This project converts the Xbox 360 PowerPC `default.xex` into native x86_64
code at build time, then wraps it with a small host runtime (logging,
overlays, hooks) so the game runs natively and can be modded like a PC port.
**You must own the game.** This project does **not** ship any copyrighted code, data, or assets. You provide your own legally dumped game.
# Get the game on [Goopie](https://goopie.xyz/#/library/eternalsonata)!
Join the community on [Discord](https://discord.gg/DJe2pXMH7S).
## Using a pre-built release
Get the latest stable build from the [Releases](../../releases/latest) page.
Nightly builds are available from [CI artifacts](https://nightly.link/birabittoh/EternalSonataReprise/workflows/ci/main?preview).
Just extract the archive, run the executable and it will prompt you to extract the game.
**This project can load assets from the PAL, USA and JAP releases of the game. However, building the actual executable requires the PAL version of `default.xex`.**
## Making it portable
By default saves, options and caches live in your platform user folder. To keep
them next to the executable instead, create an empty `portable.txt` beside it.
The root cvars in `eternalsonata.toml` (or `--name=value` on the command line)
override each location. Any root left empty falls back to its default.
```toml
game_data_root = "assets" # extracted game files (default: assets)
user_data_root = "user" # saves and profiles (default: Documents/eternalsonata)
cache_root = "cache" # shader cache (default: /cache)
mods_data_root = "mods" # mod folders (default: mods)
mods_dump_root = "dumps" # dumped textures and shaders (default: dumps)
update_data_root = "update" # extracted title update files (default: update)
```
## Troubleshooting
### Black screen before the window title appears
On some Windows systems, SDL's DirectInput device scan can block while Windows
queries an unresponsive HID device. The window stays black and unresponsive
for a while, then starts normally after the HID request times out.
To bypass the DirectInput scan for one launch, start the game from PowerShell:
```powershell
$env:SDL_JOYSTICK_DIRECTINPUT = "0"
.\eternalsonata.exe
```
This setting disables support for controllers that require DirectInput.
## Building from scratch
### 0. Install dependencies
#### Linux (Arch/CachyOS)
```bash
paru -S clang20 cmake ninja vulkan-headers wayland libxcb
```
#### Linux (Debian/Ubuntu)
```bash
sudo apt install clang cmake ninja-build libvulkan-dev libwayland-dev libxcb1-dev
```
#### Windows
```powershell
scoop install llvm cmake ninja extract-xiso
```
### 1. Clone
```bash
git clone --recursive https://github.com/birabittoh/EternalSonataReprise
cd EternalSonataReprise
```
If you already cloned without `--recursive`, fetch the `plume` submodule with:
```bash
git submodule update --init --recursive
```
### 2. Download the ReXGlue SDK
```bash
python scripts/download-sdk.py --pinned # Fetches the Release version
```
### 3. Provide your game
Extract your legally dumped ISO directly into `assets/`:
```bash
extract-xiso -d assets "Eternal Sonata.iso"
```
`assets/default.xex` must exist before running codegen.
### 4. Build
For an optimized release build:
```bash
python scripts/build.py --release
```
Without `--release` the script builds RelWithDebInfo.
## Contribution Policy
AI-assisted contributions will be judged exactly like human-written ones.
Basically, if I like the code you submitted, and I feel like the PR is in
line with the project's goals, I will gladly accept it, no matter how that
code was produced.
Things that make me not like your code are:
* emdashes;
* comments with useless narrative ("this used to do this, now it does this");
* Claude/Codex/Jules/whatever as a co-author in commit messages.
## Credits
- [ReXGlue SDK](https://github.com/rexglue/rexglue-sdk)
- [Eternal Sonata Studio](https://github.com/mimofixe/eternal-sonata-studio)
## License
The host-side source in `src/`, build scripts, and CI config are available
under the MIT License.