Files
libretro/emulators/corsixth.yml
T

112 lines
4.6 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).
The install root is read as a tree. FileSystem:setRoot() lists the
root, each subdirectory is listed the first time a path crosses it,
and every name is matched after normalise() upper-cases it
(CorsixTH/Lua/filesystem.lua:59-76, 93-117, 243-272). Graphics,
sprites, levels, sounds and movies are opened from that tree on
demand, so the install is declared as one directory. The files the
loader names at startup keep their own entries, written with the
upper-case names the DOS release ships and the lookup normalises to.
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.
files:
- name: "corsixth/"
path: "corsixth/"
type: directory
system: theme-hospital
category: game_data
required: true
description: "Theme Hospital install directory (full game or demo)"
source_ref: "CorsixTH/Lua/filesystem.lua:64-76, CorsixTH/Lua/app.lua:1435-1447, 1454, 1499"
note: "Accepted as an install when it holds data, levels and qdata subdirectories; the rest of the tree is opened by name on demand."
- 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"
note: "Looked up as Data/VBlk-0.tab."
- 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, 1560"
note: "Looked up as Levels/Level.L1. With the demo marker present, a size more than 1024 bytes away from 163948 is reported as corrupt and the game still starts."
- 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"
note: "Looked up as QData/SPointer.dat."
- 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"
note: "Looked up as QData/Font00V.dat."
- name: "DEMO.DAT"
path: "corsixth/DATAM/DEMO.DAT"
system: theme-hospital
category: game_data
required: false
description: "Demo marker; its presence selects the demo graphics set and the demo size checks"
source_ref: "CorsixTH/Lua/app.lua:1535-1539, 1558-1561"
note: "Looked up as DataM/Demo.dat. Absent from a full install."