← Back
freefrank

freefrank/LostOdysseyRecomp

Experimental native PC port of Lost Odyssey using static recompilation. No game assets included.

View on GitHub ↗
Stars
440
Forks
18
Watchers
440
Open issues
20
Contributors
4
Language
C++
License
GNU General Public License v3.0
Default branch
main
Created Sep 5, 2026Updated Oct 2, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

Lost Odyssey Recomp logo

Lost Odyssey Recomp

An experimental native PC port of Lost Odyssey for Xbox 360.

Windows x64 · Linux x64 · Direct3D 12 · Vulkan

Download · Installation guide · 简体中文

Features · Controls · Debug Menu

Changelog · Report an issue · Project board · Build from source

Important

The port is still in early testing. Opening areas and selected scenes have been tested; a complete playthrough has not. Rendering and stability issues remain. Supply your own supported game files.

Start playing

Choose a package from the latest release. The current published version is v0.7.25.

Platform Package First launch
Windows x64 LostOdysseyRecomp-windows-x64-v0.7.25.zip Extract the complete ZIP to a writable folder, then run LostOdysseyRecomp.exe. Requires an AVX-capable CPU; Direct3D 12 is the default backend, with Vulkan available.
Linux x64 LostOdysseyRecomp-linux-x64-v0.7.25.AppImage Make the file executable with chmod +x, then run it. Uses Vulkan.
Linux x64 LostOdysseyRecomp-linux-x64-v0.7.25.flatpak Install the Freedesktop 26.08 runtime, then the downloaded bundle. See the Flatpak commands. Uses Vulkan.
  1. Import your game data. The built-in importer opens when no usable game installation is found. Use Files or Folder to select an extracted game folder, default.xex, an XDVDFS ISO or GOD data.
  2. Choose the interface language, game language and graphics options. The game starts after setup and shader preparation. Later launches reuse the shader cache.
  3. Add the remaining discs and DLC when needed. Open Gameplay → Import discs & DLC in Settings. With all four matching discs imported, the game selects the requested disc automatically.

Disc 1 is required to start. Use one of the audited Asian multilingual or USA/Europe four-disc sets; do not mix editions. The installation guide covers disc identification, Linux setup, file locations and updates. Release packages need neither Python nor Visual Studio. Keep your saves and profiles when updating.

macOS Apple Silicon (experimental, build from source)

This branch includes an experimental arm64 macOS path using Metal. Local Windows and Mac runtime builds now compile and link, and a limited new-game/first-battle test has passed. There is no published macOS package yet. Use the macOS build instructions to build it locally. Long play, broader scenes, image quality and performance validation are still pending.

Latest changes

v0.7.25 adds an F1 button that restores RB party switching after a split-party Save Anywhere load (#74), fixes the Legacy of the Eastern Tribe sky flicker with TAA or FSR (#102) and logs similar flicker suspects, hardens the runtime against malformed game requests, writes SHA-256 values into Windows ZIP manifests for older updaters (#105), and explains Flatpak updates in every interface language. The source also gains the experimental Apple Silicon macOS path above; no macOS package is published. See the changelog for earlier releases and the development status for validation coverage.

Current features

Feature Available controls and behavior
Import and setup Folder, XEX, ISO and GOD sources; supported DLC; selective disc replacement; language and graphics setup before the first game launch. Original source files remain untouched.
Languages English, Japanese, Korean, Traditional Chinese and Simplified Chinese interface options. Game languages depend on the installed edition.
Display and image quality 16:9 and 21:9 resolution presets, a Widescreen toggle, Off/FXAA/SMAA/experimental TAA, DLSS or FSR 3.1 upscaling, filtering and RGB Range options.
Frame rate 30/60/90/120 FPS targets and FreeSync / G-SYNC Compatible VRR controls. Actual performance depends on the scene and hardware.
Frame generation Windows D3D12 offers Off/DLSS/FSR, supported DLSS multipliers and fixed 2× FSR. Save applies supported changes; switching from DLSS FG to FSR FG requires a restart. Unreleased source also offers Off/DLSS with fixed 2×–6× on Windows Vulkan (enabling it after starting with it off, or switching providers, needs a restart), plus experimental Vulkan FSR 2× (source builds only) and experimental macOS MetalFX 2× (not run on Mac hardware); see the technical note.
Settings Original game fonts, scrollable lists, and Save/apply controls. On the Graphics page, Start/Enter moves focus to Save; confirm that item to save. Options that require a restart offer Now/Later.
Shader preparation Bundled portable Vulkan shaders, parallel compilation, a skip option and cache reuse. The optional v0.7.10 DX12 pack belongs at shaders/portable_dx12.lospd; it is not a separate v0.7.25 asset.
Mods Mod API v1, LOTEX1/PNG tools, native-menu atlas and font-page replacements, and PlayStation button prompts. See the modding guide for supported replacements and installation.
Input and tools SDL-mapped controllers, keyboard input and rumble; an English/Simplified Chinese Debug Menu for captures, same-map teleport, speed controls and game-data editing.

Fullscreen, mixed-DPI displays, broader upscaler coverage, Linux hardware and later-disc progression still need more testing. Current work is tracked in the roadmap and Project board.

Controls

SDL-mapped controllers and the keyboard can be used together for player 1. Unmapped joysticks need an SDL controller mapping; see the input reference.

Game action Keyboard
Start / Back Enter / Backspace
A / B / X / Y Z / X / A / S
D-pad / left stick Arrow keys / I, J, K, L
Left / right shoulder Q / W
Left / right trigger E / R
Debug Menu F1

For Ring actions, use the controller's right trigger or R. Rumble is enabled by default; set LO_CONTROLLER_RUMBLE=0 to disable it.

Debug menu

Press F1, or LB+RB on a controller (L1+R1 on PlayStation layouts), to open or close the Debug Menu. The game pauses while it is open. It has three pages: Overview, Teleport and Cheats. This overlay is separate from the normal Settings menu and uses keyboard or controller input, not the mouse.

Action Keyboard Controller
Select a row ↑ / ↓ D-pad up / down
Change a value ← / → D-pad left / right
Confirm Enter A
Return or close Esc B
Previous / next page Q or Tab / E LB / RB
Change Cheats category Select the category row, then ← / → LT / RT
Open or close the overlay F1 LB+RB

Overview: captures and game actions

Overview shows the current map name and ID. It also contains the menu language, Capture render state, Save Anywhere, and actions to request a win for the current battle or cancel a pending win request.

To record a rendering problem, select Capture render state, confirm, then close the menu so rendering can continue. The capture collects three frames and creates an archive in captures/ in the background. The status message gives its absolute path: .zip on Windows or .tar.gz on Linux. If archiving fails, the original capture directory remains available. Captures include screenshots, rendering data, shaders and logs; review the contents before sharing.

Save Anywhere enables the original game's System → Save action. Close the Debug Menu and reopen the game's System menu to use it. It does not create a separate quicksave.

Warning

Save Anywhere has a known party-state limitation. Loading a save made after the party splits can lose RB character switching (#74). Keep a separate normal save. Since v0.7.25, Save Anywhere stays off while the party is split, and the F1 menu's Force RB Party Switch button turns switching back on after loading an older save of this kind.

Teleport: positions within the current map

The Teleport page provides a position bookmark, editable X/Y/Z coordinates and step size, and the current map's available points of interest. On the coordinate row, press Enter to select X, Y or Z, then use ←/→ to adjust that axis by the selected step. Confirm the teleport action or a point of interest, then close the menu to move. A scene change clears the bookmark and cancels a pending teleport.

Cheats: speed and game-data tools

The Cheats page groups its tools into six categories:

Category What it does
Quick tools Fast-forward mode and multiplier, Allow memory edits, gold and HP/MP actions.
Characters Character HP/MP, EXP values from 0–99, and skills. The EXP field is not a level selector.
Inventory Item and material quantities of 1, 10, 50 or 99, plus fill actions for known categories. Use the game's inventory sort to refresh the display when needed.
Equipment Experimental weapon, ring and existing accessory-slot changes.
Party Experimental five-slot party composition, front/back row and field-character controls. Some changes may need a reload to appear.
Developer Experimental access to the original EDIT MENU. Enable it, close F1, then press LT+RT. Turn the option off after leaving the editor.

Fast-forward works independently of memory editing and currently requires a controller. Choose Hold to accelerate while holding LT, or Toggle to switch acceleration on and off with each LT press. Select a multiplier of 2×, 3×, 4×, 6× or 8×, then close the overlay to use it. Acceleration stops while a menu is open, the window is unfocused or the scene editor is active; LT+RT does not accelerate. Audio is not time-stretched.

Memory editing is off by default. To change game data, first back up your save and enter a controllable scene outside battle. Enable Allow memory edits, choose an action, then confirm Yes. When the status shows a pending change, close F1 to let the action run. Reopen the menu to check the result. A scene change cancels a pending edit.

The menu language and Save Anywhere option are written to settings.ini. Fast-forward settings and memory-edit permission reset when the program restarts. Changes to game values can become part of a normal game save.

Files and folders

The Windows ZIP is portable: everything stays in the folder you extracted it to. A Linux build whose own folder is writable, such as a source build or an extracted AppImage, is portable too. The AppImage, the Flatpak and a macOS .app cannot write next to the program, so they keep your files in per-user folders.

Package Config folder Data folder Log folder
Windows ZIP folder with LostOdysseyRecomp.exe same same
Linux, writable program folder program folder same same
Linux AppImage ~/.config/lost-odyssey-recomp/ ~/.local/share/lost-odyssey-recomp/ ~/.local/state/lost-odyssey-recomp/
Linux Flatpak ~/.var/app/io.github.freefrank.LostOdysseyRecomp/config/lost-odyssey-recomp/ ~/.var/app/io.github.freefrank.LostOdysseyRecomp/data/ (/var/data inside the sandbox) ~/.var/app/io.github.freefrank.LostOdysseyRecomp/.local/state/lost-odyssey-recomp/
macOS .app (experimental) ~/Library/Application Support/LostOdysseyRecomp/ same ~/Library/Logs/LostOdysseyRecomp/

On Linux, set XDG_CONFIG_HOME, XDG_DATA_HOME or XDG_STATE_HOME to move the AppImage folders.

Content Location Notes
Imported game data data folder: game/ with disc1/–disc4/ and dlc/ The importer's default destination. You can import elsewhere.
Chosen game folder game-path.txt: beside the program when portable, otherwise in the config folder Written by the importer.
Settings config folder: settings.ini and taa-collection.ini Without settings.ini, the first-launch setup runs.
Saves data folder: save/ Keep when updating.
Profiles data folder: profile/ Keep when updating. LO_PROFILE_DIR overrides it.
Shader and pipeline cache data folder: cache/shaders/ Rebuilt if deleted. LO_SHADER_CACHE_DIR overrides it.
Logs log folder: logs/runtime-*.log and logs/shader-*.jsonl The current run and the two previous runs are kept.
F1 render captures config folder: captures/ .zip on Windows, .tar.gz on Linux and macOS.
Mods mods/: beside the program when portable, otherwise in the data folder LO_MODS_DIR overrides it.
Bundled shader packs program folder: shaders/portable_vk.lospv Place the optional DX12 pack at shaders/portable_dx12.lospd.
Updater work files Windows: .update\ beside the program. AppImage: log folder .update/ Flatpak and macOS packages are updated manually.

How the game is found when --game is not given:

  1. The program reads game-path.txt.
  2. If that file is absent, it looks for default.xex in the data folder's game/ (per-user packages only).
  3. Then it checks game/, the program folder and ../game next to the program.
  4. If nothing is found, the importer opens.

Launching with --game keeps the current working directory. In a portable layout, settings, saves, profiles, cache, logs and captures then follow the folder you start from. In per-user packages only captures/ does.

Command-line options

Option Effect
--game <path> Uses this game: a folder that contains default.xex or disc1/, or the default.xex file itself. Skips game-path.txt, the search and the automatic importer, and exits with an error if no default.xex is found.
--install Opens the importer even when a game is already set up, then exits: 0 after a successful import, 1 if cancelled or failed. Gameplay → Import discs & DLC relaunches with this option.
--setup Runs the first-launch setup again, then starts the game. On Windows this is the setup dialog. Linux and macOS have no setup screen yet, so it only saves the current settings.
--setup-only Like --setup, then exits.
--prepare-shaders-only Loads the game data, prepares shaders and pipelines, then exits without starting the game: 0 on success, 1 on failure. Use it to warm the shader cache.
--quiet-kernel Leaves kernel trace lines out of the log.

Options must be spelled exactly. Write --game <path> as two arguments; --game=<path> is ignored, along with any other unknown argument. There is no --help or --version. The updater and restart logic use internal arguments (--apply-plan, --wait-process, --restart-ready, --restart-parent-fd, --restart-ready-fd); do not pass them yourself. LostOdysseyRecomp.exe is a GUI program and prints nothing to a console; check the log instead.

LostOdysseyRecomp.exe --game "D:\Games\Lost Odyssey"
./LostOdysseyRecomp-linux-x64-v0.7.25.AppImage --game ~/Games/LostOdyssey
flatpak run io.github.freefrank.LostOdysseyRecomp --game ~/Games/LostOdyssey
LostOdysseyRecomp.app/Contents/MacOS/LostOdysseyRecomp --game ~/Games/LostOdyssey

Environment variables give more launch options. Each one overrides the saved setting for that run.

Variable Effect
LO_GRAPHICS_API d3d12 or vulkan on Windows. Linux always uses Vulkan and macOS always uses Metal.
LO_FPS Frame-rate cap from 0 to 1000; 0 means uncapped.
LO_FG_PROVIDER, LO_FG_MODE, LO_FG_MULTIPLIER, LO_FG_TARGET_FPS Frame generation on Windows: off/dlss/fsr; off/fixed/dynamic; 2–6; target FPS. In unreleased source, Vulkan accepts DLSS fixed 2–6 and, in builds with LO_ENABLE_VULKAN_FSR_FG, FSR fixed 2; macOS accepts metalfx (fixed 2, experimental). Dynamic mode is D3D12 DLSS only. Details.
LO_OPTISCALER_PATH Experimental Windows OptiScaler loading: absolute path to your OptiScaler.dll. Requires DLSS/NGX in the build and LO_FG_PROVIDER=off; select DLSS in-game. Setup and limits.
LO_NO_UPDATE Any value other than 0 skips the update check.
LO_PROFILE_DIR, LO_SHADER_CACHE_DIR, LO_MODS_DIR Use another profile, shader cache or mods folder. An empty LO_SHADER_CACHE_DIR disables the shader cache.
LO_MODS 0 or false disables mods.
LO_LOG_FILE Write the log to this path, or 0 for no log file.
LO_AUDIO_MUTE, LO_CONTROLLER_RUMBLE LO_AUDIO_MUTE=1 mutes audio; LO_CONTROLLER_RUMBLE=0 turns rumble off.

Reporting a problem

Include the exact package or source version, operating system, graphics backend, GPU/driver, game edition and disc, and the steps or scene that reproduce the problem. Attach the complete current logs/runtime-<timestamp>.log; it records startup and graphics details. LO_LOG_FILE=<path> selects another log path, and LO_LOG_FILE=0 disables the duplicate file sink.

For a visual defect, use the capture procedure while the problem is visible. Share the resulting archive only after reviewing it. Do not attach game executables, resource archives, saves or personal data.

Optional diagnostics are off by default and can be disabled in Settings. See Privacy for the data collected and sharing controls.

In-game screenshots

Lost Odyssey title screen — Press START

Ring combat City exploration
Kaim attacking with the Ring timing interface Exploring the industrial city

Unmodified screenshots from development builds leading up to v0.1.

Development

See Building for dependencies and build commands, Developer tools for the available utilities, and the documentation index for current references and historical notes.

Directory Contents
LostOdysseyRecomp/ Host kernel, graphics, audio, input and debugging
LostOdysseyRecompLib/ Configuration; ignored private/ game data and generated ppc/ code
tools/ Recompilers, dependency patches, Ghidra scripts and the optional assembly profiler
thirdparty/ Rendering, audio and other dependencies
docs/ Current status, guides, research and historical archives

Sponsors

Thank you to Cristian and Whitesun for supporting the project on Ko-fi.

Credits and game data

With research and tools from UnleashedRecomp, re:Blue, XenonRecomp, XenosRecomp, plume and Xenia. Audio uses the pinned Xenia FFmpeg fork, with its license.

Lost Odyssey and its assets belong to their respective owners. This is an unofficial project. Supply data extracted from your own discs; do not commit game executables, resource archives, textures, audio, video, generated game code or captures to this repository. Dependencies retain their respective licenses.