mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-21 11:19:11 -05:00
Profiles that read two repositories, a libretro port and its upstream, now prefix each citation with source or upstream, decided by which tree carries the cited value at its pin. The emulator pages use the word to tell libretro glue, emulator code as the port carries it, and the upstream emulator apart.
377 lines
12 KiB
YAML
377 lines
12 KiB
YAML
emulator: OpenTyrian
|
|
type: libretro
|
|
core_classification: game_engine
|
|
source: "https://github.com/trapexit/libretro-opentyrian"
|
|
upstream: "https://github.com/opentyrian/opentyrian"
|
|
profiled_date: "2026-03-24"
|
|
source_commit: "3e9df7a6bc486190ad5085586d0c4e9cb1baf14c"
|
|
core_version: "1.0.0.6"
|
|
display_name: "Tyrian (OpenTyrian)"
|
|
cores: [opentyrian, tyrian]
|
|
systems: [tyrian]
|
|
verification: existence
|
|
|
|
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.
|
|
|
|
files:
|
|
# -----------------------------------------------------------
|
|
# Core data files (required, loaded unconditionally at init)
|
|
# -----------------------------------------------------------
|
|
- name: "tyrian.shp"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Main shape tables (12 sprite banks: fonts, interface, options, game sprites)"
|
|
required: true
|
|
source_ref: "source src/sprite.c:669-722 (JE_loadMainShapeTables)"
|
|
|
|
- name: "palette.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Color palette data (all palettes used by the game)"
|
|
required: true
|
|
source_ref: "source src/palette.c:45 (JE_loadPals)"
|
|
|
|
- name: "tyrian.hdt"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Help and item data (weapons, ships, shields, enemies, help text)"
|
|
required: true
|
|
source_ref: "source src/episodes.c:60 (JE_loadItemDat), source src/helptext.c:184 (JE_loadHelpText)"
|
|
|
|
- name: "tyrian.pic"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Picture data (menu backgrounds, cutscene images)"
|
|
required: true
|
|
source_ref: "source src/picload.c:32 (JE_loadPic)"
|
|
|
|
- name: "tyrian.cdt"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Credits text (encrypted pascal strings)"
|
|
required: true
|
|
source_ref: "source src/mainint.c:2002 (JE_drawCredits)"
|
|
|
|
- name: "tyrian.snd"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Sound effects"
|
|
required: true
|
|
source_ref: "source src/nortsong.c:112, source src/opentyr.c:333 (JE_loadSndFile)"
|
|
|
|
- name: "voices.snd"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Voice samples"
|
|
required: true
|
|
source_ref: "source src/nortsong.c:134, source src/opentyr.c:333 (JE_loadSndFile)"
|
|
|
|
- name: "music.mus"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Music data (all game tracks)"
|
|
required: true
|
|
source_ref: "source src/loudness.c:196 (load_music)"
|
|
|
|
# -----------------------------------------------------------
|
|
# Episode level files (episode 1 required, 2-5 optional)
|
|
# -----------------------------------------------------------
|
|
- name: "tyrian1.lvl"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 1 level data (also used as data directory detection marker)"
|
|
required: true
|
|
source_ref: "source src/file.c:51 (data_dir probe), source src/episodes.c:274 (JE_scanForEpisodes)"
|
|
|
|
- name: "levels1.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 1 level definitions"
|
|
required: true
|
|
source_ref: "source src/episodes.c:263 (JE_initEpisode), source src/tyrian2.c:2434"
|
|
|
|
- name: "cubetxt1.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 1 datacube text (in-game story lore)"
|
|
required: true
|
|
source_ref: "source src/episodes.c:262 (JE_initEpisode), source src/game_menu.c:1723"
|
|
|
|
- name: "tyrian2.lvl"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 2 level data"
|
|
required: false
|
|
source_ref: "source src/episodes.c:274"
|
|
|
|
- name: "levels2.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 2 level definitions"
|
|
required: false
|
|
source_ref: "source src/episodes.c:263"
|
|
|
|
- name: "cubetxt2.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 2 datacube text"
|
|
required: false
|
|
source_ref: "source src/episodes.c:262"
|
|
|
|
- name: "tyrian3.lvl"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 3 level data"
|
|
required: false
|
|
source_ref: "source src/episodes.c:274"
|
|
|
|
- name: "levels3.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 3 level definitions"
|
|
required: false
|
|
source_ref: "source src/episodes.c:263"
|
|
|
|
- name: "cubetxt3.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 3 datacube text"
|
|
required: false
|
|
source_ref: "source src/episodes.c:262"
|
|
|
|
- name: "tyrian4.lvl"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 4 level data"
|
|
required: false
|
|
source_ref: "source src/episodes.c:274"
|
|
|
|
- name: "levels4.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 4 level definitions"
|
|
required: false
|
|
source_ref: "source src/episodes.c:263"
|
|
|
|
- name: "cubetxt4.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 4 datacube text"
|
|
required: false
|
|
source_ref: "source src/episodes.c:262"
|
|
|
|
- name: "tyrian5.lvl"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 5 level data"
|
|
required: false
|
|
source_ref: "source src/episodes.c:274"
|
|
|
|
- name: "levels5.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 5 level definitions"
|
|
required: false
|
|
source_ref: "source src/episodes.c:263"
|
|
|
|
- name: "cubetxt5.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Episode 5 datacube text"
|
|
required: false
|
|
source_ref: "source src/episodes.c:262"
|
|
|
|
# -----------------------------------------------------------
|
|
# Level tileset shapes (loaded per-level from .lvl data)
|
|
# The level file specifies a character via fgetc() at tyrian2.c:3039,
|
|
# which maps to shapes{char}.dat at tyrian2.c:3079.
|
|
# The shipped set is ), W, X, Y, Z. lvlmast.c:128-131 writes } for the
|
|
# Episode 4 tileset, which no distributed file matches.
|
|
# Note: shapeFile[34] in lvlmast.c is a DIFFERENT mechanism:
|
|
# it maps indices to characters for newsh?.shp (enemy sprites),
|
|
# NOT for shapes?.dat (level tilesets).
|
|
# -----------------------------------------------------------
|
|
- name: "shapes).dat"
|
|
category: game_data
|
|
system: tyrian
|
|
required: true
|
|
source_ref: "source src/tyrian2.c:3039, 3079, source src/lvlmast.c:128-131"
|
|
|
|
- name: "shapesw.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
required: true
|
|
source_ref: "source src/tyrian2.c:3039, 3079, source src/lvlmast.c:128-131"
|
|
|
|
- name: "shapesx.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
required: true
|
|
source_ref: "source src/tyrian2.c:3039, 3079, source src/lvlmast.c:128-131"
|
|
|
|
- name: "shapesy.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
required: true
|
|
source_ref: "source src/tyrian2.c:3039, 3079, source src/lvlmast.c:128-131"
|
|
|
|
- name: "shapesz.dat"
|
|
category: game_data
|
|
system: tyrian
|
|
required: true
|
|
source_ref: "source src/tyrian2.c:3039, 3079, source src/lvlmast.c:128-131"
|
|
|
|
# -----------------------------------------------------------
|
|
# Compressed shape files (newshX.shp, loaded per-level)
|
|
# shapeFile[34] in lvlmast.c maps indices to characters for
|
|
# these files via JE_loadCompShapes (sprite.c:469).
|
|
# -----------------------------------------------------------
|
|
- name: "newsh1.shp"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Compressed sprites (arrows, mouse cursor)"
|
|
required: false
|
|
source_ref: "source src/mainint.c:493, source src/mainint.c:884, source src/mainint.c:1462 (JE_loadCompShapes '1')"
|
|
|
|
- name: "newsh6.shp"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Compressed sprites (explosions)"
|
|
required: false
|
|
source_ref: "source src/tyrian2.c:771 (JE_loadCompShapes '6')"
|
|
|
|
- name: "newsh~.shp"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Compressed sprites (destruct mode)"
|
|
required: false
|
|
source_ref: "source src/destruct.c:569 (JE_loadCompShapes '~')"
|
|
|
|
# -----------------------------------------------------------
|
|
# Optional / special mode files
|
|
# -----------------------------------------------------------
|
|
- name: "tyrianc.shp"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Christmas mode shape tables (replaces tyrian.shp at Xmas)"
|
|
required: false
|
|
source_ref: "source src/opentyr.c:301-309"
|
|
|
|
- name: "voicesc.snd"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Christmas mode voice samples (replaces voices.snd at Xmas)"
|
|
required: false
|
|
source_ref: "source src/opentyr.c:301, source src/opentyr.c:333"
|
|
|
|
- name: "tyrend.anm"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Ending animation sequence"
|
|
required: false
|
|
source_ref: "source src/tyrian2.c:2473 (JE_playAnim)"
|
|
|
|
- name: "tshp2.pcx"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Additional ship graphics (PCX image)"
|
|
required: false
|
|
source_ref: "source src/tyrian2.c:2757, source src/pcxload.c:25-29"
|
|
|
|
- name: "estsc.shp"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Ending sequence character sprites"
|
|
required: false
|
|
source_ref: "source src/mainint.c:1995 (load_sprites_file EXTRA_SHAPES)"
|
|
|
|
- name: "demo.1"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Demo replay file 1"
|
|
required: false
|
|
source_ref: "source src/mainint.c:1781-1786"
|
|
|
|
- name: "demo.2"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Demo replay file 2"
|
|
required: false
|
|
source_ref: "source src/mainint.c:1781-1786"
|
|
|
|
- name: "demo.3"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Demo replay file 3"
|
|
required: false
|
|
source_ref: "source src/mainint.c:1781-1786"
|
|
|
|
- name: "demo.4"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Demo replay file 4"
|
|
required: false
|
|
source_ref: "source src/mainint.c:1781-1786"
|
|
|
|
- name: "demo.5"
|
|
category: game_data
|
|
system: tyrian
|
|
description: "Demo replay file 5"
|
|
required: false
|
|
source_ref: "source src/mainint.c:1781-1786"
|