Files
libretro/emulators/tr2x.yml
T
Abdessamad Derraz df6ee485de chore: advance tr2x to 3d39911
Gameflow lines moved with the PS1 blend injections. The music backend
now reads multi-name catalog rows, track names and extensions unchanged.
2026-10-23 15:52:34 +02:00

743 lines
22 KiB
YAML

emulator: TR2X
display_name: "TR2X"
type: standalone
core_classification: game_engine
source: "https://github.com/LostArtefacts/TRX"
upstream: "https://github.com/LostArtefacts/TRX"
source_commit: "3d39911a1b839c753b6efad236db67d9fb2b273e"
upstream_commit: "3d39911a1b839c753b6efad236db67d9fb2b273e"
profiled_date: "2026-10-23"
cores: []
systems:
- tomb-raider-2
notes: |
Enhanced engine for Tomb Raider 2 (1997), part of the TRX monorepo
that also hosts TR1X and TR3X. Loads retail .tr2 level files, the
main.sfx soundbank, music tracks and FMV cutscenes from a Steam, GOG
or disc install of TR2.
Path resolution (src/trx/game/paths.c):
levels %mod_dir%/levels/<file> GAME_DYNAMIC_PATH_LEVEL_FILE
sfx %mod_dir%/<file> GAME_DYNAMIC_PATH_SFX_FILE
fmv %mod_dir%/fmv/<file><ext> GAME_DYNAMIC_PATH_FMV_FILE
music %mod_dir%/music/<name><ext> GAME_DYNAMIC_PATH_MUSIC_DIR
with %mod_dir% = games/tr2 under the TRX root. The gameflow.json5,
the catalog_*.csv tables, string tables, injections, images and
shaders ship inside the TRX zip (data/trx/ship/) and are not user
files.
main.sfx is TR2's sample bank. The gameflow sets sfx_path to it
(data/trx/ship/games/tr2/gameflow.json5:35) and the level pipeline
reads it per level (src/trx/game/level/pipeline.c:179).
FMV extension probing (src/trx/game/paths.c:76-79):
.mp4 .mkv .mpeg .avi .webm .ogv .rpl .fmv .bik
The retail Core/Eidos cutscenes are .rpl. The gameflow still names
them .AVI, resolution picks whichever extension exists.
Music backend (src/trx/game/music/backend_files.c:33-35, 108-134):
extensions .flac .ogg .mp3 .wav .wma
file name trackNN.<ext> (two-digit) or N.<ext>
Retail TR2 CD rips yield 2.mp3 through 61.mp3 (bare-number form,
per docs/trx/INSTALLING.md ship tree).
files:
# Soundbank
- name: "main.sfx"
path: "games/tr2/main.sfx"
unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:35"
note: "Shared sample bank, loaded for every level."
# Levels
# Enumerated by data/trx/ship/games/tr2/gameflow.json5 "levels" array.
- name: "title.tr2"
path: "games/tr2/levels/title.tr2"
unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:15"
- name: "assault.tr2"
path: "games/tr2/levels/assault.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:57"
note: "Lara's Home / assault course."
- name: "wall.tr2"
path: "games/tr2/levels/wall.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:89"
note: "The Great Wall"
- name: "boat.tr2"
path: "games/tr2/levels/boat.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:125"
note: "Venice"
- name: "venice.tr2"
path: "games/tr2/levels/venice.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:151"
note: "Bartoli's Hideout"
- name: "opera.tr2"
path: "games/tr2/levels/opera.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:179"
note: "Opera House"
- name: "rig.tr2"
path: "games/tr2/levels/rig.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:211"
note: "Offshore Rig"
- name: "platform.tr2"
path: "games/tr2/levels/platform.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:241"
note: "Diving Area"
- name: "unwater.tr2"
path: "games/tr2/levels/unwater.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:271"
note: "40 Fathoms"
- name: "keel.tr2"
path: "games/tr2/levels/keel.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:301"
note: "Wreck of the Maria Doria"
- name: "living.tr2"
path: "games/tr2/levels/living.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:334"
note: "Living Quarters"
- name: "deck.tr2"
path: "games/tr2/levels/deck.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:365"
note: "The Deck"
- name: "skidoo.tr2"
path: "games/tr2/levels/skidoo.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:398"
note: "Tibetan Foothills"
- name: "monastry.tr2"
path: "games/tr2/levels/monastry.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:427"
note: "Barkhang Monastery"
- name: "catacomb.tr2"
path: "games/tr2/levels/catacomb.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:457"
note: "Catacombs of the Talion"
- name: "icecave.tr2"
path: "games/tr2/levels/icecave.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:486"
note: "Ice Palace"
- name: "emprtomb.tr2"
path: "games/tr2/levels/emprtomb.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:515"
note: "Temple of Xian"
- name: "floating.tr2"
path: "games/tr2/levels/floating.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:546"
note: "Floating Islands"
- name: "xian.tr2"
path: "games/tr2/levels/xian.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:573"
note: "The Dragon's Lair"
- name: "house.tr2"
path: "games/tr2/levels/house.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:600"
note: "Home Sweet Home"
- name: "cut1.tr2"
path: "games/tr2/levels/cut1.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:714"
note: "Cutscene level 1"
- name: "cut2.tr2"
path: "games/tr2/levels/cut2.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:729"
note: "Cutscene level 2"
- name: "cut3.tr2"
path: "games/tr2/levels/cut3.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:744"
note: "Cutscene level 3"
- name: "cut4.tr2"
path: "games/tr2/levels/cut4.tr2"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:761"
note: "Cutscene level 4"
# FMV cutscenes
# Enumerated by data/trx/ship/games/tr2/gameflow.json5 "fmvs" array.
# The retail files on disc carry a .rpl extension. The gameflow still
# lists .AVI, resolution picks whichever extension is present.
- name: "LOGO.AVI"
aliases: [logo.rpl]
path: "games/tr2/fmv/logo.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:781"
note: "Eidos legal screen."
- name: "ANCIENT.AVI"
aliases: [ancient.rpl]
path: "games/tr2/fmv/ancient.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:782"
note: "Intro cutscene."
- name: "MODERN.AVI"
aliases: [modern.rpl]
path: "games/tr2/fmv/modern.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:783"
- name: "LANDING.AVI"
aliases: [landing.rpl]
path: "games/tr2/fmv/landing.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:784"
- name: "MS.AVI"
aliases: [ms.rpl]
path: "games/tr2/fmv/ms.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:785"
- name: "CRASH.AVI"
aliases: [crash.rpl]
path: "games/tr2/fmv/crash.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:786"
- name: "JEEP.AVI"
aliases: [jeep.rpl]
path: "games/tr2/fmv/jeep.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:787"
- name: "END.AVI"
aliases: [end.rpl]
path: "games/tr2/fmv/end.rpl"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:788"
# Music tracks (retail CD audio, ripped as N.<ext>).
# Enumerated by the ship tree in docs/trx/INSTALLING.md (TR2 uses the
# bare-number form, not the trackNN form, and the loader accepts either).
- name: "2.mp3"
path: "games/tr2/music/2.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "3.mp3"
path: "games/tr2/music/3.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "4.mp3"
path: "games/tr2/music/4.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "5.mp3"
path: "games/tr2/music/5.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "6.mp3"
path: "games/tr2/music/6.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "7.mp3"
path: "games/tr2/music/7.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "8.mp3"
path: "games/tr2/music/8.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "9.mp3"
path: "games/tr2/music/9.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "10.mp3"
path: "games/tr2/music/10.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "11.mp3"
path: "games/tr2/music/11.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "12.mp3"
path: "games/tr2/music/12.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "13.mp3"
path: "games/tr2/music/13.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "14.mp3"
path: "games/tr2/music/14.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "15.mp3"
path: "games/tr2/music/15.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "16.mp3"
path: "games/tr2/music/16.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "17.mp3"
path: "games/tr2/music/17.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "18.mp3"
path: "games/tr2/music/18.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "19.mp3"
path: "games/tr2/music/19.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "20.mp3"
path: "games/tr2/music/20.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "21.mp3"
path: "games/tr2/music/21.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "22.mp3"
path: "games/tr2/music/22.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "23.mp3"
path: "games/tr2/music/23.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "24.mp3"
path: "games/tr2/music/24.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "25.mp3"
path: "games/tr2/music/25.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "26.mp3"
path: "games/tr2/music/26.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "27.mp3"
path: "games/tr2/music/27.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "28.mp3"
path: "games/tr2/music/28.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "29.mp3"
path: "games/tr2/music/29.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "30.mp3"
path: "games/tr2/music/30.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "31.mp3"
path: "games/tr2/music/31.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "32.mp3"
path: "games/tr2/music/32.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "33.mp3"
path: "games/tr2/music/33.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "34.mp3"
path: "games/tr2/music/34.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "35.mp3"
path: "games/tr2/music/35.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "36.mp3"
path: "games/tr2/music/36.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "37.mp3"
path: "games/tr2/music/37.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "38.mp3"
path: "games/tr2/music/38.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "39.mp3"
path: "games/tr2/music/39.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "40.mp3"
path: "games/tr2/music/40.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "41.mp3"
path: "games/tr2/music/41.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "42.mp3"
path: "games/tr2/music/42.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "43.mp3"
path: "games/tr2/music/43.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "44.mp3"
path: "games/tr2/music/44.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "45.mp3"
path: "games/tr2/music/45.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "46.mp3"
path: "games/tr2/music/46.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "47.mp3"
path: "games/tr2/music/47.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "48.mp3"
path: "games/tr2/music/48.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "49.mp3"
path: "games/tr2/music/49.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "50.mp3"
path: "games/tr2/music/50.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "51.mp3"
path: "games/tr2/music/51.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "52.mp3"
path: "games/tr2/music/52.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "53.mp3"
path: "games/tr2/music/53.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "54.mp3"
path: "games/tr2/music/54.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "55.mp3"
path: "games/tr2/music/55.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "56.mp3"
path: "games/tr2/music/56.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "57.mp3"
path: "games/tr2/music/57.mp3"
required: false
bundled: true
size: 386864
sha1: "0873bc661731f6daa8c8a76af4259228b1cbf8ef"
md5: "423c7e39256ef8fd82193fefacdb14aa"
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
note: "The one music track the TRX 1.11.1 Windows and Linux zips ship."
- name: "58.mp3"
path: "games/tr2/music/58.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "59.mp3"
path: "games/tr2/music/59.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "60.mp3"
path: "games/tr2/music/60.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
- name: "61.mp3"
path: "games/tr2/music/61.mp3"
required: false
category: game_data
source_ref: "src/trx/game/music/backend_files.c:128"
# The Golden Mask expansion
# Known game tr2-gm, extends tr2 (src/trx/game/shell/mod.c:37-38).
# Enumerated by data/trx/ship/games/tr2-gm/gameflow.json5 "levels" array.
# Its FMVs and music fall back to games/tr2.
# tools/download_assets and the installer fetch tr2-gm.zip from the
# project's host. It holds games/tr2-gm/main.sfx and games/tr2-gm/levels/*.tr2.
# The TRX 1.11.1 Windows and Linux zips ship those seven files, so they
# arrive with the install.
# Installing from a retail directory maps data/main_gm.sfx to
# games/tr2-gm/main_gm.sfx and data/*.tr2 to games/tr2-gm/levels/.
- name: "main.sfx"
path: "games/tr2-gm/main.sfx"
aliases: ["main_gm.sfx"]
required: false
bundled: true
size: 7609670
sha1: "9de9423b6f12875b8d02dd783d5c1547f15e36fc"
md5: "b9045310d16b80638970978a9ce8489e"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:35, src/trx/game/game_flow/reader.c:198-219, src/trx/game/paths.c:203-212, tools/download_assets:71, tools/installer/TRX_Installer/InstallMappings.cs:35-40"
note: "Sample bank of the expansion. main_gm.sfx is tried first, each name in the expansion directory then in games/tr2."
- name: "title.tr2"
path: "games/tr2-gm/levels/title.tr2"
aliases: ["title_gm.tr2"]
required: false
bundled: true
size: 611892
sha1: "b7dadcbaf38cefdc89a692e85b290caf6409b163"
md5: "c5a329491190227bc09ec19317b45f56"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:16, src/trx/game/game_flow/reader.c:198-219, 903-909, src/trx/game/paths.c:123-132, tools/download_assets:71, tools/installer/TRX_Installer/InstallMappings.cs:35-40"
note: "Title level of the expansion. title_gm.tr2 is tried first, each name in the expansion levels directory then in games/tr2/levels."
- name: "level1.tr2"
path: "games/tr2-gm/levels/level1.tr2"
required: false
bundled: true
size: 4134916
sha1: "8d8109c1afbb2b443c1c1f57add4676f17b5dc84"
md5: "04ad2f33e48081a6b27a7f0ebf90968d"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:58"
note: "The Cold War"
- name: "level2.tr2"
path: "games/tr2-gm/levels/level2.tr2"
required: false
bundled: true
size: 4128016
sha1: "6c9417d3b03cc2fd9fac62cea0910d9ef107ee1b"
md5: "d9b53b88dd70eec1e4b31182f3286bf5"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:90"
note: "Fool's Gold"
- name: "level3.tr2"
path: "games/tr2-gm/levels/level3.tr2"
required: false
bundled: true
size: 4357268
sha1: "e92f045520d6e0aaec2c42dd2c28d34a0677df70"
md5: "ca4294e3bd8835ebf06e114b479a22c2"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:115"
note: "Furnace of the Gods"
- name: "level4.tr2"
path: "games/tr2-gm/levels/level4.tr2"
required: false
bundled: true
size: 4165986
sha1: "83ffcd559e656186bc807e1040485f72956dbc00"
md5: "63ff8be5c7abf37d7065456afeda029f"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:140"
note: "Kingdom"
- name: "level5.tr2"
path: "games/tr2-gm/levels/level5.tr2"
required: false
bundled: true
size: 4098568
sha1: "4508d23e8475ef6afd7a1756763dd606f23c15a9"
md5: "88c8124b6d152b9f3fe1c4eeec4428a5"
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:177"
note: "Nightmare in Vegas"