Skip to content

OpenTyrian - RetroBIOS

Type libretro
Classification Game engines
Source https://github.com/trapexit/libretro-opentyrian
Upstream https://github.com/opentyrian/opentyrian
Version 1.0.0.6
Profiled 2026-03-24
Cores opentyrian, tyrian
Systems tyrian
Verification mode existence
Technical notes

OpenTyrian is a source port of the DOS vertical scrolling shooter Tyrian, ported to libretro. It loads the Tyrian 2.1 freeware game data directly. Tyrian 1.x, 2.0, and Tyrian 2000 data files are NOT compatible.

The core's .info file sets supports_no_game = true. The core locates the data directory by probing for tyrian1.lvl in several paths (file.c:33-58): 1. custom_data_dir (set via --data= CLI argument, params.c:120) 2. TYRIAN_DIR (compile-time constant, Makefile:5-8) 3. "data" (relative subdirectory) 4. "." (current working directory) The first path containing tyrian1.lvl wins.

On startup (opentyr.c:270-388), the core: - Scans for episodes by checking tyrian1.lvl through tyrian5.lvl (episodes.c:270-277) - Loads palette data from palette.dat (palette.c:45) - Loads main shape tables from tyrian.shp (sprite.c:669-722, 12 sprite banks packed in one file: fonts, interface, option sprites, game sprites, weapon sprites, etc.) - Loads sound effects from tyrian.snd and voice samples from voices.snd (nortsong.c:112-134, opentyr.c:333) - Loads music from music.mus (loudness.c:196) - Loads help/item data from tyrian.hdt (helptext.c:184, episodes.c:60) - Loads picture data from tyrian.pic (picload.c:32) - Loads credits from tyrian.cdt (mainint.c:2002)

Each episode loads additional files dynamically (episodes.c:261-263): - tyrianN.lvl (level data, N=1-5) - levelsN.dat (episode level definitions) - cubetxtN.dat (datacube text for story mode)

The game engine also loads shape files on demand: - shapesX.dat where X is a character read from the level file (5 used: ), W, X, Y, Z) (lvlmast.c:23-27, tyrian2.c:3079). Characters used: 2,4,7,8,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,5,#,V,0,@,3,^,9 - newshX.shp loaded via JE_loadCompShapes (sprite.c:469-481) using the same character set plus '~' for destruct mode (destruct.c:569) and '1' for arrow/mouse cursor sprites (mainint.c:493,884,1462) and '6' for explosion sprites (tyrian2.c:771)

Additional optional files: - tyrianc.shp and voicesc.snd for Christmas mode (opentyr.c:301-309) - tyrend.anm for ending animation (tyrian2.c:2473) - tshp2.pcx loaded during gameplay (tyrian2.c:2757, pcxload.c:25) - estsc.shp for ending sequence sprites (mainint.c:1995) - demo.1 through demo.5 for demo playback (mainint.c:1781-1786)

All filenames must be lowercase on case-sensitive filesystems. The repo includes lower-script.sh for batch renaming.

The Tyrian 2.1 freeware data is available at: https://camanis.net/tyrian/tyrian21.zip

No separate BIOS or firmware is needed. The freeware game data set is the sole system requirement.

41 files | 16 required, 25 optional | 41 in repo, 0 missing Categories: 41 game data

tyrian.shp required in repo game_data
Main shape tables (12 sprite banks: fonts, interface, options, game sprites)

  • System: tyrian
  • Source: sprite.c:669-722 (JE_loadMainShapeTables)

palette.dat required in repo game_data
Color palette data (all palettes used by the game)

  • System: tyrian
  • Source: palette.c:45 (JE_loadPals)

tyrian.hdt required in repo game_data
Help and item data (weapons, ships, shields, enemies, help text)

  • System: tyrian
  • Source: episodes.c:60 (JE_loadItemDat), helptext.c:184 (JE_loadHelpText)

tyrian.pic required in repo game_data
Picture data (menu backgrounds, cutscene images)

  • System: tyrian
  • Source: picload.c:32 (JE_loadPic)

tyrian.cdt required in repo game_data
Credits text (encrypted pascal strings)

  • System: tyrian
  • Source: mainint.c:2002 (JE_drawCredits)

tyrian.snd required in repo game_data
Sound effects

  • System: tyrian
  • Source: nortsong.c:112, opentyr.c:333 (JE_loadSndFile)

voices.snd required in repo game_data
Voice samples

  • System: tyrian
  • Source: nortsong.c:134, opentyr.c:333 (JE_loadSndFile)

music.mus required in repo game_data
Music data (all game tracks)

  • System: tyrian
  • Source: loudness.c:196 (load_music)

tyrian1.lvl required in repo game_data
Episode 1 level data (also used as data directory detection marker)

  • System: tyrian
  • Source: file.c:51 (data_dir probe), episodes.c:274 (JE_scanForEpisodes)

levels1.dat required in repo game_data
Episode 1 level definitions

  • System: tyrian
  • Source: episodes.c:263 (JE_initEpisode), tyrian2.c:2434

cubetxt1.dat required in repo game_data
Episode 1 datacube text (in-game story lore)

  • System: tyrian
  • Source: episodes.c:262 (JE_initEpisode), game_menu.c:1723

tyrian2.lvl optional in repo game_data
Episode 2 level data

  • System: tyrian
  • Source: episodes.c:274

levels2.dat optional in repo game_data
Episode 2 level definitions

  • System: tyrian
  • Source: episodes.c:263

cubetxt2.dat optional in repo game_data
Episode 2 datacube text

  • System: tyrian
  • Source: episodes.c:262

tyrian3.lvl optional in repo game_data
Episode 3 level data

  • System: tyrian
  • Source: episodes.c:274

levels3.dat optional in repo game_data
Episode 3 level definitions

  • System: tyrian
  • Source: episodes.c:263

cubetxt3.dat optional in repo game_data
Episode 3 datacube text

  • System: tyrian
  • Source: episodes.c:262

tyrian4.lvl optional in repo game_data
Episode 4 level data

  • System: tyrian
  • Source: episodes.c:274

levels4.dat optional in repo game_data
Episode 4 level definitions

  • System: tyrian
  • Source: episodes.c:263

cubetxt4.dat optional in repo game_data
Episode 4 datacube text

  • System: tyrian
  • Source: episodes.c:262

tyrian5.lvl optional in repo game_data
Episode 5 level data

  • System: tyrian
  • Source: episodes.c:274

levels5.dat optional in repo game_data
Episode 5 level definitions

  • System: tyrian
  • Source: episodes.c:263

cubetxt5.dat optional in repo game_data
Episode 5 datacube text

  • System: tyrian
  • Source: episodes.c:262

shapes).dat required in repo game_data

  • System: tyrian
  • Source: tyrian2.c:3039-3079

shapesw.dat required in repo game_data

  • System: tyrian
  • Source: tyrian2.c:3039-3079

shapesx.dat required in repo game_data

  • System: tyrian
  • Source: tyrian2.c:3039-3079

shapesy.dat required in repo game_data

  • System: tyrian
  • Source: tyrian2.c:3039-3079

shapesz.dat required in repo game_data

  • System: tyrian
  • Source: tyrian2.c:3039-3079

newsh1.shp optional in repo game_data
Compressed sprites (arrows, mouse cursor)

  • System: tyrian
  • Source: mainint.c:493,884,1462 (JE_loadCompShapes '1')

newsh6.shp optional in repo game_data
Compressed sprites (explosions)

  • System: tyrian
  • Source: tyrian2.c:771 (JE_loadCompShapes '6')

newsh~.shp optional in repo game_data
Compressed sprites (destruct mode)

  • System: tyrian
  • Source: destruct.c:569 (JE_loadCompShapes '~')

tyrianc.shp optional in repo game_data
Christmas mode shape tables (replaces tyrian.shp at Xmas)

  • System: tyrian
  • Source: opentyr.c:301-309

voicesc.snd optional in repo game_data
Christmas mode voice samples (replaces voices.snd at Xmas)

  • System: tyrian
  • Source: opentyr.c:301,333

tyrend.anm optional in repo game_data
Ending animation sequence

  • System: tyrian
  • Source: tyrian2.c:2473 (JE_playAnim)

tshp2.pcx optional in repo game_data
Additional ship graphics (PCX image)

  • System: tyrian
  • Source: tyrian2.c:2757, pcxload.c:25-29

estsc.shp optional in repo game_data
Ending sequence character sprites

  • System: tyrian
  • Source: mainint.c:1995 (load_sprites_file EXTRA_SHAPES)

demo.1 optional in repo game_data
Demo replay file 1

  • System: tyrian
  • Source: mainint.c:1781-1786

demo.2 optional in repo game_data
Demo replay file 2

  • System: tyrian
  • Source: mainint.c:1781-1786

demo.3 optional in repo game_data
Demo replay file 3

  • System: tyrian
  • Source: mainint.c:1781-1786

demo.4 optional in repo game_data
Demo replay file 4

  • System: tyrian
  • Source: mainint.c:1781-1786

demo.5 optional in repo game_data
Demo replay file 5

  • System: tyrian
  • Source: mainint.c:1781-1786

Generated on 2026-04-18T08:05:07Z