Files
libretro/emulators/corsixth.yml
T

87 lines
3.4 KiB
YAML

emulator: corsixth
type: standalone
core_classification: game_engine
source: "https://github.com/CorsixTH/CorsixTH"
upstream: ~
profiled_date: "2026-10-04"
source_commit: "2d4671e267cae25847432a2e7d4f814b44f91e35"
core_version: "0.70.1"
display_name: "Theme Hospital (CorsixTH)"
cores: [corsixth]
systems: [theme-hospital]
verification: existence
notes: |
CorsixTH is a Lua + C++ reimplementation of Bullfrog's Theme Hospital
engine. It reads graphics, sprites, levels and sounds from an
untouched Theme Hospital install (full retail/GOG or the shareware
demo).
App:checkInstallFolder() in CorsixTH/Lua/app.lua:1450 drives the
install discovery:
1. config.theme_hospital_install (user override) is tried first
(:1453). If unset or wrong, the loader scans a list of common
paths (:1471-1489) looking for a folder that passes
App:isThemeHospitalPath, which demands three subdirectories
named data, levels and qdata (:1435-1447).
2. Once a candidate is accepted, three sentinel files MUST exist
(:1521-1523):
DATA/VBlk-0.tab
LEVELS/Level.L1
QDATA/SPointer.dat
Any missing file aborts init with "Invalid Theme Hospital
folder specified in config file..." (:1526).
3. DataM/Demo.dat (:1535) marks the shareware demo install; its
presence switches a different corruption-size check on
ANIMS/WINLEVEL.SMK (243188), LEVELS/LEVEL.L1 (163948) and
DATA/BUTTON01.DAT (252811) at :1559-1561. Full installs instead
get soft size checks on ANIMS/AREA01V.SMK, WINGAME.SMK,
WINLEVEL.SMK, LOSE1.SMK and INTRO/INTRO.SM4 (:1563-1567).
4. QData/Font00V.dat is read unconditionally (:1576) and its CRC32
picks the charset (mik vs cp437).
Only the four files the loader *reads unconditionally* are tracked
below. The sound/music path uses the game's XMI tracks when a
SoundFont is available (App:findSoundFont at :1589 probes
GeneralUser-GS.sf2, FluidR3_GM.sf2, FluidR3.sf3 and three Linux
system paths); the SoundFont is a user preference, not game data.
Everything else (hundreds of SPR/TAB/DAT files, SMK movies, ADL /
XMI music) is loaded on demand from the install directory and is
not individually verified by the engine; a user who sets up the
Theme Hospital folder once has them all.
exclusion_note: "Theme Hospital install is scanned folder-wide; the engine only hard-checks a handful of sentinel files"
files:
- name: VBlk-0.tab
path: corsixth/Data/VBlk-0.tab
system: theme-hospital
category: game_data
required: true
description: "Theme Hospital core sprite index; sentinel checked at startup"
source_ref: "CorsixTH/Lua/app.lua:1521"
- name: Level.L1
path: corsixth/Levels/Level.L1
system: theme-hospital
category: game_data
required: true
description: "First Theme Hospital level file; sentinel checked at startup"
source_ref: "CorsixTH/Lua/app.lua:1522"
- name: SPointer.dat
path: corsixth/QData/SPointer.dat
system: theme-hospital
category: game_data
required: true
description: "Sprite pointer table; sentinel checked at startup"
source_ref: "CorsixTH/Lua/app.lua:1523"
- name: Font00V.dat
path: corsixth/QData/Font00V.dat
system: theme-hospital
category: game_data
required: true
description: "Theme Hospital font; CRC32 selects charset (mik vs cp437)"
source_ref: "CorsixTH/Lua/app.lua:1576-1584"