Tourist Trophy
OrigenPlayStation 2
TecnologíaPort Nativo C/C++ (Reimplementación de Motor)
Disponible paraWindows, Linux, macOS
Ver proyecto oficialSobre el proyecto
Tourist Trophy es un juego simulador de motocicletas para la consola PlayStation 2 de Sony desarrollado por Polyphony Digital, los creadores de Gran Turismo. En China fue sacado al mercado el 26 de enero de 2006, en Japón el 2 de febrero de ese año, en Europa el 29 de mayo y en Australia el 1 de junio.
Información oficial del proyecto
Tourist Trophy decompilation
A work-in-progress matching decompilation of Polyphony Digital's Tourist Trophy (PS2, CORE.TT,
NTSC-U SCUS-97502 v1.00): C++ source that compiles, with the original compiler, to the exact same
instructions as the game. The long-term goal is a native port.
Tourist Trophy is built on Gran Turismo 4's code base. It is a sister project of the Gran Turismo 4 decompilation: same compiler, same tools, and many functions that are identical in both games. Format documentation comes from the Gran Turismo Modding Hub.
This repository contains no game data. You need your own copy of the game.
Status
- The executable is understood:
CORE.TTis Salsa20-encrypted and raw-deflate compressed, loading at0x00100000with entry0x00100008; 14,866 functions are reached by calls. - The compiler family is the same as GT4's (Sony's ee-gcc 2.96, gcc 2.x C++ mangling, the same
PDISTDlibrary). - 3,232 functions (23%) are identical to a function already matched in the GT4 project, and 2,880
more are identical to GT4 functions still open: one match settles both games. See
knowledge/tt.md.
- Progress (October 2026, commit
2935e55bc607): 22,501 of 31,593 functions match (71.2%), 32.3% of the code bytes; 86.1% of the sources are clean. Clean source: 86.1% of the 22,501 function sources are free of m2c macros, raw offset casts, temp_/var_ names and pasted headers (tools/clean_report.py). The live numbers are on theprogressbranch (objdiff report format); this paragraph is written bytools/update_readme.pyfromprogress/report.json, never by hand. - The full build reproduces the original executable (both loaded segments, SHA-1 checked):
21,432 functions, 29.0% of the code bytes, are linked from C/C++
source at their original addresses, and the rest is assembled from splat's disassembly of your own
executable. 1,072 of 2,284,744 data bytes (0.05%;
.dataplus.bss) are the constants of 47 functions, placed from source at their original addresses. 0 functions that were hand-written assembly in the original are listed inconfig/asm_functions.txtand not counted.
Credits
Started and maintained by Gustavo Canepa (@gustavocanepa), with AI agents (Anthropic's Claude) doing the bulk of the matching. Thanks to Nenkai and the Gran Turismo modding community, whose research made the file formats understandable.
If you use these tools or this work elsewhere, please credit this project (MIT, see LICENSE).
This license covers the tools, documentation and the source code written for this project. Tourist Trophy is a trademark of Sony Interactive Entertainment; this project is not affiliated with or endorsed by Sony Interactive Entertainment or Polyphony Digital. It contains no game data, and you need your own copy of the game to use it.
Contributing
Help is welcome: matching functions, naming them, reconstructing structs and classes, or improving the tools. Start with CONTRIBUTING.md.
Setup
Requirements: Python 3.11+ with rabbitizer (pip install rabbitizer), and Linux or WSL (Ubuntu).
- Dump your disc and place the image as described in
orig/README.md, then extract, decrypt and convert the executable (commands there). - Set up the Linux side once:
bash tools/setup_linux.sh(compiler, MIPS binutils, permuter). - Split the executable with splat (assembly for every function, under
build/splat/):bash tools/splat.sh(in WSL/Linux). - Check that the full build reproduces your executable:
python tools/build.py. - Build the function list and the duplicate groups:
python tools/find_functions.py orig/SCUS-97502/files/CORE.TT build/functions.csvandpython tools/dedup.py scan.
The tools and how to reuse them for another game are described in TOOLS.md.
Working on a function
python tools/match.py asm 100220 # show the original
python tools/match.py check 100220 src/func_00100220.c # compile and compare
A function is done when check prints MATCH and python tools/build.py still reproduces the
original (it links every function at its real address and compares SHA-1).