Skip to content

corsixth - RetroBIOS

Type standalone
Classification Game engines
Source https://github.com/CorsixTH/CorsixTH
Upstream None
Version 0.70.1
Profiled 2026-10-04
Cores corsixth
Systems theme-hospital
Checked by existence
Technical 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.

6 files | 5 required, 1 optional | 6 in repo, 0 missing Categories: 6 game data

corsixth/ required in repo game_data directory
Theme Hospital install directory (full game or demo)

VBLK-0.TAB required in repo game_data
Theme Hospital core sprite index; sentinel checked at startup

LEVEL.L1 required in repo game_data
First Theme Hospital level file; sentinel checked at startup

  • Path: corsixth/LEVELS/LEVEL.L1
  • System: theme-hospital
  • Source: CorsixTH/Lua/app.lua:1522, CorsixTH/Lua/app.lua:1560
  • 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.

SPOINTER.DAT required in repo game_data
Sprite pointer table; sentinel checked at startup

  • Path: corsixth/QDATA/SPOINTER.DAT
  • System: theme-hospital
  • Source: CorsixTH/Lua/app.lua:1523
  • Looked up as QData/SPointer.dat.

FONT00V.DAT required in repo game_data
Theme Hospital font; CRC32 selects charset (mik vs cp437)

DEMO.DAT optional in repo game_data
Demo marker; its presence selects the demo graphics set and the demo size checks

Generated on 2026-10-10T11:26:01Z