OpenTyrian - RetroBIOS¶
| Type | libretro |
| Classification | game_engine |
| Source | https://github.com/trapexit/libretro-opentyrian |
| Upstream | https://github.com/opentyrian/opentyrian |
| Version | 1.0.0.6 |
| Profiled | 2026-03-24 |
| Cores | opentyrian |
| 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 from a 34-entry lookup table (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.
66 files | 11 required, 55 optional | 11 in repo, 55 missing Categories: 66 game data
tyrian.shp -required, 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, game_data
: Color palette data (all palettes used by the game)
- System: tyrian
- Source:
palette.c:45 (JE_loadPals)
tyrian.hdt -required, 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, game_data
: Picture data (menu backgrounds, cutscene images)
- System: tyrian
- Source:
picload.c:32 (JE_loadPic)
tyrian.cdt -required, game_data
: Credits text (encrypted pascal strings)
- System: tyrian
- Source:
mainint.c:2002 (JE_drawCredits)
tyrian.snd -required, game_data
: Sound effects
- System: tyrian
- Source:
nortsong.c:112, opentyr.c:333 (JE_loadSndFile)
voices.snd -required, game_data
: Voice samples
- System: tyrian
- Source:
nortsong.c:134, opentyr.c:333 (JE_loadSndFile)
music.mus -required, game_data
: Music data (all game tracks)
- System: tyrian
- Source:
loudness.c:196 (load_music)
tyrian1.lvl -required, 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, game_data
: Episode 1 level definitions
- System: tyrian
- Source:
episodes.c:263 (JE_initEpisode), tyrian2.c:2434
cubetxt1.dat -required, 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, game_data, missing from repo
: Episode 2 level data
- System: tyrian
- Source:
episodes.c:274
levels2.dat -optional, game_data, missing from repo
: Episode 2 level definitions
- System: tyrian
- Source:
episodes.c:263
cubetxt2.dat -optional, game_data, missing from repo
: Episode 2 datacube text
- System: tyrian
- Source:
episodes.c:262
tyrian3.lvl -optional, game_data, missing from repo
: Episode 3 level data
- System: tyrian
- Source:
episodes.c:274
levels3.dat -optional, game_data, missing from repo
: Episode 3 level definitions
- System: tyrian
- Source:
episodes.c:263
cubetxt3.dat -optional, game_data, missing from repo
: Episode 3 datacube text
- System: tyrian
- Source:
episodes.c:262
tyrian4.lvl -optional, game_data, missing from repo
: Episode 4 level data
- System: tyrian
- Source:
episodes.c:274
levels4.dat -optional, game_data, missing from repo
: Episode 4 level definitions
- System: tyrian
- Source:
episodes.c:263
cubetxt4.dat -optional, game_data, missing from repo
: Episode 4 datacube text
- System: tyrian
- Source:
episodes.c:262
tyrian5.lvl -optional, game_data, missing from repo
: Episode 5 level data
- System: tyrian
- Source:
episodes.c:274
levels5.dat -optional, game_data, missing from repo
: Episode 5 level definitions
- System: tyrian
- Source:
episodes.c:263
cubetxt5.dat -optional, game_data, missing from repo
: Episode 5 datacube text
- System: tyrian
- Source:
episodes.c:262
shapes2.dat -optional, game_data, missing from repo
: Level tileset shapes (character '2')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes3.dat -optional, game_data, missing from repo
: Level tileset shapes (character '3')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes4.dat -optional, game_data, missing from repo
: Level tileset shapes (character '4')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes5.dat -optional, game_data, missing from repo
: Level tileset shapes (character '5')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes7.dat -optional, game_data, missing from repo
: Level tileset shapes (character '7')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes8.dat -optional, game_data, missing from repo
: Level tileset shapes (character '8')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes9.dat -optional, game_data, missing from repo
: Level tileset shapes (character '9')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapes0.dat -optional, game_data, missing from repo
: Level tileset shapes (character '0')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesa.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'A')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesb.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'B')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesc.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'C')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesd.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'D')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapese.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'E')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesf.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'F')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesg.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'G')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesh.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'H')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesi.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'I')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesj.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'J')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesk.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'K')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesl.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'L')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesm.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'M')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesn.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'N')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapeso.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'O')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesp.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'P')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesq.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'Q')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesr.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'R')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapess.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'S')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapest.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'T')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesu.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'U')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
shapesv.dat -optional, game_data, missing from repo
: Level tileset shapes (character 'V')
- System: tyrian
- Source:
tyrian2.c:3079, lvlmast.c:23-27
newsh1.shp -optional, game_data, missing from repo
: Compressed sprites (arrows, mouse cursor)
- System: tyrian
- Source:
mainint.c:493,884,1462 (JE_loadCompShapes '1')
newsh6.shp -optional, game_data, missing from repo
: Compressed sprites (explosions)
- System: tyrian
- Source:
tyrian2.c:771 (JE_loadCompShapes '6')
newsh~.shp -optional, game_data, missing from repo
: Compressed sprites (destruct mode)
- System: tyrian
- Source:
destruct.c:569 (JE_loadCompShapes '~')
tyrianc.shp -optional, game_data, missing from repo
: Christmas mode shape tables (replaces tyrian.shp at Xmas)
- System: tyrian
- Source:
opentyr.c:301-309
voicesc.snd -optional, game_data, missing from repo
: Christmas mode voice samples (replaces voices.snd at Xmas)
- System: tyrian
- Source:
opentyr.c:301,333
tyrend.anm -optional, game_data, missing from repo
: Ending animation sequence
- System: tyrian
- Source:
tyrian2.c:2473 (JE_playAnim)
tshp2.pcx -optional, game_data, missing from repo
: Additional ship graphics (PCX image)
- System: tyrian
- Source:
tyrian2.c:2757, pcxload.c:25-29
estsc.shp -optional, game_data, missing from repo
: Ending sequence character sprites
- System: tyrian
- Source:
mainint.c:1995 (load_sprites_file EXTRA_SHAPES)
demo.1 -optional, game_data, missing from repo
: Demo replay file 1
- System: tyrian
- Source:
mainint.c:1781-1786
demo.2 -optional, game_data, missing from repo
: Demo replay file 2
- System: tyrian
- Source:
mainint.c:1781-1786
demo.3 -optional, game_data, missing from repo
: Demo replay file 3
- System: tyrian
- Source:
mainint.c:1781-1786
demo.4 -optional, game_data, missing from repo
: Demo replay file 4
- System: tyrian
- Source:
mainint.c:1781-1786
demo.5 -optional, game_data, missing from repo
: Demo replay file 5
- System: tyrian
- Source:
mainint.c:1781-1786
Generated on 2026-03-25T14:56:43Z