feat: add category field to emulator profiles, source missing BIOS

Add category: game_data to sdlpal, nxengine, opentyrian, easyrpg,
mkxp_z profiles. verify.py separates game_data from bios in core
gap metrics for cleaner coverage numbers.

New BIOS files: Cemu fonts (4), QEMU bios-256k + vgabios-stdvga,
GAM4980 ROMs (2), SC-3000 Export variant.
This commit is contained in:
Abdessamad Derraz
2026-03-21 07:31:33 +01:00
parent 13a2938dc7
commit 74f17694c2
17 changed files with 249 additions and 18 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,7 +1,7 @@
{
"generated_at": "2026-03-20T22:38:29Z",
"total_files": 6724,
"total_size": 5256877310,
"generated_at": "2026-03-20T23:11:20Z",
"total_files": 6733,
"total_size": 5288642642,
"files": {
"520d3d1b5897800af47f92efd2444a26b7a7dead": {
"path": "bios/3DO Company/3DO/3do_arcade_saot.bin",
@@ -22683,6 +22683,24 @@
"sha256": "f5e2f7499cf57ae6ccecda961763ad8a9e9c913dae8061323c03811679c0bf4d",
"crc32": "8bcf073d"
},
"dddb2d3b42e8d99911c6bfd523f0020a08f44f9d": {
"path": "bios/BBK/GAM4980/gam4980/8.BIN",
"name": "8.BIN",
"size": 2097152,
"sha1": "dddb2d3b42e8d99911c6bfd523f0020a08f44f9d",
"md5": "ea26b08e67511a34460c103b8b669154",
"sha256": "7663735609c416025b2738c80cedaf11528ff8cb5a7c74c7c31c1f46e43e9caf",
"crc32": "95ec0f62"
},
"159b7e65f3f3dd67f435085be1e154316ba139e0": {
"path": "bios/BBK/GAM4980/gam4980/E.BIN",
"name": "E.BIN",
"size": 2097152,
"sha1": "159b7e65f3f3dd67f435085be1e154316ba139e0",
"md5": "f812738e5ae75de0f4faae78a3829866",
"sha256": "3e12d40948fd50710cef8c6d14acea26ad69f47312125a61bd1003912893fcad",
"crc32": "7a9039f4"
},
"8641b09be090c0dc45f4ee5459fec3cc6fb9d78e": {
"path": "bios/Bally/Astrocade/astrocde.zip",
"name": "astrocde.zip",
@@ -30324,6 +30342,42 @@
"sha256": "3ed66f7e82df79922739c6c2d34de90bc36a48d13acdff24f9d51013bd8c0677",
"crc32": "77cacffb"
},
"2d95227b9b3eaf1c74d9293ecd0d190ec7ffbbe3": {
"path": "bios/Nintendo/Wii U/CafeCn.ttf",
"name": "CafeCn.ttf",
"size": 9664448,
"sha1": "2d95227b9b3eaf1c74d9293ecd0d190ec7ffbbe3",
"md5": "88e8040854b406680406875df51995f2",
"sha256": "6afd751a9bb76bc788efb50a138c6f3765624ee84d8d8203be04d871ade40a6a",
"crc32": "d734cea1"
},
"f0ef38fcc6133c24f4f38ff9b5c06b37e970d3cc": {
"path": "bios/Nintendo/Wii U/CafeKr.ttf",
"name": "CafeKr.ttf",
"size": 5626464,
"sha1": "f0ef38fcc6133c24f4f38ff9b5c06b37e970d3cc",
"md5": "ba18ba58dab47b4f739e0ec28f29f413",
"sha256": "c3c326f6ce1899e391dc4996b10a0c30558c5b8f36dfbaa418976862b3e2dffb",
"crc32": "fc4cc829"
},
"da0d4bcc3b13339179bee946eba16adfd731b4d3": {
"path": "bios/Nintendo/Wii U/CafeStd.ttf",
"name": "CafeStd.ttf",
"size": 5363768,
"sha1": "da0d4bcc3b13339179bee946eba16adfd731b4d3",
"md5": "8ca7dae3bd89ce56087d437932c33656",
"sha256": "59e2494727b8e7a7bbf48c8749f2dbc07d438c9fabeaa9847a08ec690f9888a1",
"crc32": "bc7f3500"
},
"8ec796192ebc710f23ab6bd55453cae523b70444": {
"path": "bios/Nintendo/Wii U/CafeTw.ttf",
"name": "CafeTw.ttf",
"size": 6593548,
"sha1": "8ec796192ebc710f23ab6bd55453cae523b70444",
"md5": "bf8fbf9a200affc4428bf4fc2bb22b67",
"sha256": "c8f9e16345dbc3b6e165fe12435486a748e730ebe6002b5d713efe73d171d51c",
"crc32": "aaf8df7b"
},
"9edc52be45201ec99f6e4ceb5dc6abfc633c4eae": {
"path": "bios/Nintendo/Wii U/keys.txt",
"name": "keys.txt",
@@ -30648,6 +30702,15 @@
"sha256": "c709ca1e74be6bd4b7917d258d81824d33c38a1a9a0287ec693b6459f58fc27a",
"crc32": "d23be573"
},
"2d539603665b8194c671ef5189c5a2b6db3ac645": {
"path": "bios/Other/QEMU/bios-256k.bin",
"name": "bios-256k.bin",
"size": 262144,
"sha1": "2d539603665b8194c671ef5189c5a2b6db3ac645",
"md5": "e8dcffae189b20fbe2722b857faa487c",
"sha256": "ae6f6aa973aaccc143f57aa960fb035fd9de4daee4ad0cd713322f8c259e7650",
"crc32": "7db5c908"
},
"cb1bd2cf5f89741900061955ac1a3b7cbd7a1ce9": {
"path": "bios/Other/QEMU/bios.bin",
"name": "bios.bin",
@@ -30657,6 +30720,15 @@
"sha256": "3dfd946d0c03ab0e022f84f10c3eb5f1dd507761f73e7d8067511ba35a10f776",
"crc32": "e7e3ac4c"
},
"359becb4c1dcd61c139ab3786983da9640677701": {
"path": "bios/Other/QEMU/vgabios-stdvga.bin",
"name": "vgabios-stdvga.bin",
"size": 39424,
"sha1": "359becb4c1dcd61c139ab3786983da9640677701",
"md5": "07ec9c82c2ac93d091f46236e93c8bbb",
"sha256": "e8fc9e55790dbe3cb31f019a3deb57206ba6c54f5e581adb2ab2677a9d391472",
"crc32": "e3f1ee0a"
},
"214f09a25012e8702783d3ab9a22796071de5374": {
"path": "bios/Other/QEMU/vgabios.bin",
"name": "vgabios.bin",
@@ -56883,6 +56955,15 @@
"sha256": "e184f5982a99c6ebf7799383f16a8624221755786056a3573944598283a4b8cf",
"crc32": "4dcfd55c"
},
"c983bfa2f4c6d077e70e6ff9c7ed59b72368e355": {
"path": "bios/Sega/SC-3000/.variants/sc3000.zip.a43aef36",
"name": "sc3000.zip",
"size": 21232,
"sha1": "c983bfa2f4c6d077e70e6ff9c7ed59b72368e355",
"md5": "52adbcbef759756a5b97cafda75b922c",
"sha256": "258b08eafabed889970445adadcc483f91c31205e8c9a75dfa2efceab2f1c43f",
"crc32": "48decddc"
},
"12de390be2595ad17015310085eaec57ad2b953f": {
"path": "bios/Sega/SC-3000/sc3000.zip",
"name": "sc3000.zip",
@@ -63042,6 +63123,8 @@
"e5ea0f216fb446f1c4a4f476bc5f03d4": "27dcdb31b0951af99023b2fb8c370d8447ba6ebc",
"ac6ca0f0ed42a1603dfd409c4bf8eb89": "4f0b344231719e80c2a4d4ade3769d7f0d0629b6",
"c4551d5effaed8f5658fc27e7b643441": "54a12c7aa78696ed310aca04faef642bc332c72d",
"ea26b08e67511a34460c103b8b669154": "dddb2d3b42e8d99911c6bfd523f0020a08f44f9d",
"f812738e5ae75de0f4faae78a3829866": "159b7e65f3f3dd67f435085be1e154316ba139e0",
"f58a3823ab308ef0a02b498d126e5d96": "8641b09be090c0dc45f4ee5459fec3cc6fb9d78e",
"f313610ff87d27a8859950a497c5dc33": "b3a26e21574395a279a37922238802b349c303b7",
"320bf3d4142fa1043255db7ff87d17c7": "e99667ea5cfe6a5eceb53faaa39cdda0cbf69c69",
@@ -63891,6 +63974,10 @@
"a43cbd0ab271990f434412fc5c500eff": "369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de",
"31fda6c3678507b12631dfd01b0415ef": "c146b651696d25287241f4bab18226e488bc45b3",
"f65367650f88124362922994b78ede77": "bfee8e708dc4c8f27bfe51a12d57caaa0b7f74de",
"88e8040854b406680406875df51995f2": "2d95227b9b3eaf1c74d9293ecd0d190ec7ffbbe3",
"ba18ba58dab47b4f739e0ec28f29f413": "f0ef38fcc6133c24f4f38ff9b5c06b37e970d3cc",
"8ca7dae3bd89ce56087d437932c33656": "da0d4bcc3b13339179bee946eba16adfd731b4d3",
"bf8fbf9a200affc4428bf4fc2bb22b67": "8ec796192ebc710f23ab6bd55453cae523b70444",
"9b60696402ca3524a707f3974370f74a": "9edc52be45201ec99f6e4ceb5dc6abfc633c4eae",
"64a95a4a884cf4cc15a566b856603193": "34e5be43effe08435b4535b68b45bb9e61d384e9",
"5f3cd5a4307fed7a9dfe8faa4c044273": "746a2996967282281a980842a93642ad7d740f9e",
@@ -63927,7 +64014,9 @@
"07fe095d8cc120b8293e7f776dfee90e": "af896c25e6efeeb6dfd4cc7345362b4b29a85324",
"a1e73e0586ce715ab7daaedfe9b98595": "39825b5d69a07232d91886da68d217465a74695c",
"bdfeb89707fac1dd319a17e43328de2b": "63ff6b55caeda529f69983a342618c84cba5addf",
"e8dcffae189b20fbe2722b857faa487c": "2d539603665b8194c671ef5189c5a2b6db3ac645",
"8bef06d1aa74c9ff45b268a18efcc954": "cb1bd2cf5f89741900061955ac1a3b7cbd7a1ce9",
"07ec9c82c2ac93d091f46236e93c8bbb": "359becb4c1dcd61c139ab3786983da9640677701",
"eb49484ba96ce09cdf4e60da747eceb1": "214f09a25012e8702783d3ab9a22796071de5374",
"14ee98e77ec06638bfef782a2ab8a063": "d459d59b4d603d4cf733dd0fe34b7951f7c8165b",
"9da101cd2317830649a31f8fa46debec": "cea669f6d740f29ca248d2e8837a4b4f86fbe75a",
@@ -66842,6 +66931,7 @@
"ff4a3572475236e859e3e9ac5c87d1f1": "02c287d10da6de579af7a4ce73b134bbdf23c970",
"4ea493ea4e9f6c9ebfccbdb15110367e": "88d6499d874dcb5721ff58d76fe1b9af811192e3",
"b4e76e416b887f4e7413ba76fa735f16": "70429f1d80503a0632f603bf762fe0bbaa881d22",
"52adbcbef759756a5b97cafda75b922c": "c983bfa2f4c6d077e70e6ff9c7ed59b72368e355",
"48e8821fb9087ab60a2a3b1465ee5124": "12de390be2595ad17015310085eaec57ad2b953f",
"0306c0e408d6682dd2d86324bd4ac661": "8c031bf9908fd0142fdd10a9cdd79389f8a3f2fc",
"9992f2761b0f6e83b3e923451ab8057b": "999ed28cfbf18103a4963b0d3797af3dcf67db05",
@@ -74509,6 +74599,12 @@
"tt.img": [
"4f0b344231719e80c2a4d4ade3769d7f0d0629b6"
],
"8.BIN": [
"dddb2d3b42e8d99911c6bfd523f0020a08f44f9d"
],
"E.BIN": [
"159b7e65f3f3dd67f435085be1e154316ba139e0"
],
"astrocde.zip": [
"8641b09be090c0dc45f4ee5459fec3cc6fb9d78e"
],
@@ -76566,6 +76662,18 @@
"title.keys": [
"bfee8e708dc4c8f27bfe51a12d57caaa0b7f74de"
],
"CafeCn.ttf": [
"2d95227b9b3eaf1c74d9293ecd0d190ec7ffbbe3"
],
"CafeKr.ttf": [
"f0ef38fcc6133c24f4f38ff9b5c06b37e970d3cc"
],
"CafeStd.ttf": [
"da0d4bcc3b13339179bee946eba16adfd731b4d3"
],
"CafeTw.ttf": [
"8ec796192ebc710f23ab6bd55453cae523b70444"
],
"keys.txt": [
"9edc52be45201ec99f6e4ceb5dc6abfc633c4eae"
],
@@ -76675,9 +76783,15 @@
"voices.snd": [
"63ff6b55caeda529f69983a342618c84cba5addf"
],
"bios-256k.bin": [
"2d539603665b8194c671ef5189c5a2b6db3ac645"
],
"bios.bin": [
"cb1bd2cf5f89741900061955ac1a3b7cbd7a1ce9"
],
"vgabios-stdvga.bin": [
"359becb4c1dcd61c139ab3786983da9640677701"
],
"vgabios.bin": [
"214f09a25012e8702783d3ab9a22796071de5374"
],
@@ -84618,6 +84732,7 @@
"70429f1d80503a0632f603bf762fe0bbaa881d22"
],
"sc3000.zip": [
"c983bfa2f4c6d077e70e6ff9c7ed59b72368e355",
"12de390be2595ad17015310085eaec57ad2b953f"
],
"hisaturn_v103.bin": [
@@ -88305,6 +88420,15 @@
"5b922ed9de07d2a729bdf1da7b57c50ddf08809a",
"063609dd518c124a4fc9ba35d1bae35771666a34"
],
"N88JISHO.ROM": [
"deef0cc2a9734ba891a6d6c022aa70ffc66f783e"
],
"JISYO.ROM": [
"deef0cc2a9734ba891a6d6c022aa70ffc66f783e"
],
"jisyo.rom": [
"deef0cc2a9734ba891a6d6c022aa70ffc66f783e"
],
"iplromcdc_flash.bino.dat": [
"77511fc58798404701f66b6bbc9cbde06596eba7"
],
@@ -88416,15 +88540,6 @@
"kanji2.rom": [
"b86b932cb4ce34472e0fe0f01a4a4350e15dcb53"
],
"N88JISHO.ROM": [
"deef0cc2a9734ba891a6d6c022aa70ffc66f783e"
],
"JISYO.ROM": [
"deef0cc2a9734ba891a6d6c022aa70ffc66f783e"
],
"jisyo.rom": [
"deef0cc2a9734ba891a6d6c022aa70ffc66f783e"
],
"FONT.BMP": [
"b4f14e58030ed40fff2dc312b58ea4440bdf8cc5"
],
@@ -90998,6 +91113,8 @@
"028b561d": "27dcdb31b0951af99023b2fb8c370d8447ba6ebc",
"1fb32c3c": "4f0b344231719e80c2a4d4ade3769d7f0d0629b6",
"8bcf073d": "54a12c7aa78696ed310aca04faef642bc332c72d",
"95ec0f62": "dddb2d3b42e8d99911c6bfd523f0020a08f44f9d",
"7a9039f4": "159b7e65f3f3dd67f435085be1e154316ba139e0",
"6cad8a0b": "8641b09be090c0dc45f4ee5459fec3cc6fb9d78e",
"1b43f22d": "b3a26e21574395a279a37922238802b349c303b7",
"23de1c25": "e99667ea5cfe6a5eceb53faaa39cdda0cbf69c69",
@@ -91847,6 +91964,10 @@
"4c866029": "369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de",
"a65c13ca": "c146b651696d25287241f4bab18226e488bc45b3",
"77cacffb": "bfee8e708dc4c8f27bfe51a12d57caaa0b7f74de",
"d734cea1": "2d95227b9b3eaf1c74d9293ecd0d190ec7ffbbe3",
"fc4cc829": "f0ef38fcc6133c24f4f38ff9b5c06b37e970d3cc",
"bc7f3500": "da0d4bcc3b13339179bee946eba16adfd731b4d3",
"aaf8df7b": "8ec796192ebc710f23ab6bd55453cae523b70444",
"d6d5725f": "9edc52be45201ec99f6e4ceb5dc6abfc633c4eae",
"343a0710": "34e5be43effe08435b4535b68b45bb9e61d384e9",
"efc88d2b": "746a2996967282281a980842a93642ad7d740f9e",
@@ -91883,7 +92004,9 @@
"60dd487f": "af896c25e6efeeb6dfd4cc7345362b4b29a85324",
"06ce2efe": "39825b5d69a07232d91886da68d217465a74695c",
"d23be573": "63ff6b55caeda529f69983a342618c84cba5addf",
"7db5c908": "2d539603665b8194c671ef5189c5a2b6db3ac645",
"e7e3ac4c": "cb1bd2cf5f89741900061955ac1a3b7cbd7a1ce9",
"e3f1ee0a": "359becb4c1dcd61c139ab3786983da9640677701",
"e8256af7": "214f09a25012e8702783d3ab9a22796071de5374",
"c068031c": "d459d59b4d603d4cf733dd0fe34b7951f7c8165b",
"a975efe4": "cea669f6d740f29ca248d2e8837a4b4f86fbe75a",
@@ -94798,6 +94921,7 @@
"c94e8c8b": "02c287d10da6de579af7a4ce73b134bbdf23c970",
"0658f691": "88d6499d874dcb5721ff58d76fe1b9af811192e3",
"4dcfd55c": "70429f1d80503a0632f603bf762fe0bbaa881d22",
"48decddc": "c983bfa2f4c6d077e70e6ff9c7ed59b72368e355",
"62fb7d82": "12de390be2595ad17015310085eaec57ad2b953f",
"6abfefea": "8c031bf9908fd0142fdd10a9cdd79389f8a3f2fc",
"0ab1c9ec": "999ed28cfbf18103a4963b0d3797af3dcf67db05",

View File

@@ -65,6 +65,7 @@ files:
# ================================================================
- name: "easyrpg.soundfont"
category: game_data
path: "easyrpg.soundfont"
required: false
hle_fallback: true
@@ -81,6 +82,7 @@ files:
# ================================================================
- name: "wildmidi.cfg"
category: game_data
path: "wildmidi.cfg"
required: false
hle_fallback: true
@@ -96,6 +98,7 @@ files:
# ================================================================
- name: "RPG Maker 2000 RTP"
category: game_data
path: "rtp/2000/"
required: false
hle_fallback: true
@@ -115,6 +118,7 @@ files:
# ================================================================
- name: "RPG Maker 2003 RTP"
category: game_data
path: "rtp/2003/"
required: false
hle_fallback: true

View File

@@ -76,6 +76,7 @@ files:
# ================================================================
- name: "RPG Maker XP RTP (Standard)"
category: game_data
path: "mkxp-z/RTP/Standard/"
required: false
type: directory
@@ -93,6 +94,7 @@ files:
# ================================================================
- name: "RPG Maker VX RTP (RPGVX)"
category: game_data
path: "mkxp-z/RTP/RPGVX/"
required: false
type: directory
@@ -109,6 +111,7 @@ files:
# ================================================================
- name: "RPG Maker VX Ace RTP (RPGVXAce)"
category: game_data
path: "mkxp-z/RTP/RPGVXAce/"
required: false
type: directory

View File

@@ -43,6 +43,7 @@ notes: |
files:
- name: "Doukutsu.exe"
category: game_data
system: cave-story
description: "Cave Story freeware executable (data source for music, sfx, bitmaps, wavetable)"
required: true
@@ -53,6 +54,7 @@ files:
notes: "Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable.dat from this binary at each launch."
- name: "data/npc.tbl"
category: game_data
system: cave-story
description: "NPC attribute table (entity behavior flags, HP, damage, display rect offsets)"
required: true
@@ -60,6 +62,7 @@ files:
notes: "Located in system/nxengine/data/. The core uses this file to verify the data directory is present."
- name: "data/"
category: game_data
system: cave-story
description: "Full game asset directory tree (399 files: sprites, NPC sheets, stage maps, scripts, backgrounds)"
required: true

View File

@@ -70,48 +70,56 @@ 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: "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: "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: "episodes.c:60 (JE_loadItemDat), helptext.c:184 (JE_loadHelpText)"
- name: "tyrian.pic"
category: game_data
system: tyrian
description: "Picture data (menu backgrounds, cutscene images)"
required: true
source_ref: "picload.c:32 (JE_loadPic)"
- name: "tyrian.cdt"
category: game_data
system: tyrian
description: "Credits text (encrypted pascal strings)"
required: true
source_ref: "mainint.c:2002 (JE_drawCredits)"
- name: "tyrian.snd"
category: game_data
system: tyrian
description: "Sound effects"
required: true
source_ref: "nortsong.c:112, opentyr.c:333 (JE_loadSndFile)"
- name: "voices.snd"
category: game_data
system: tyrian
description: "Voice samples"
required: true
source_ref: "nortsong.c:134, opentyr.c:333 (JE_loadSndFile)"
- name: "music.mus"
category: game_data
system: tyrian
description: "Music data (all game tracks)"
required: true
@@ -121,90 +129,105 @@ files:
# 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: "file.c:51 (data_dir probe), episodes.c:274 (JE_scanForEpisodes)"
- name: "levels1.dat"
category: game_data
system: tyrian
description: "Episode 1 level definitions"
required: true
source_ref: "episodes.c:263 (JE_initEpisode), tyrian2.c:2434"
- name: "cubetxt1.dat"
category: game_data
system: tyrian
description: "Episode 1 datacube text (in-game story lore)"
required: true
source_ref: "episodes.c:262 (JE_initEpisode), game_menu.c:1723"
- name: "tyrian2.lvl"
category: game_data
system: tyrian
description: "Episode 2 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels2.dat"
category: game_data
system: tyrian
description: "Episode 2 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt2.dat"
category: game_data
system: tyrian
description: "Episode 2 datacube text"
required: false
source_ref: "episodes.c:262"
- name: "tyrian3.lvl"
category: game_data
system: tyrian
description: "Episode 3 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels3.dat"
category: game_data
system: tyrian
description: "Episode 3 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt3.dat"
category: game_data
system: tyrian
description: "Episode 3 datacube text"
required: false
source_ref: "episodes.c:262"
- name: "tyrian4.lvl"
category: game_data
system: tyrian
description: "Episode 4 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels4.dat"
category: game_data
system: tyrian
description: "Episode 4 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt4.dat"
category: game_data
system: tyrian
description: "Episode 4 datacube text"
required: false
source_ref: "episodes.c:262"
- name: "tyrian5.lvl"
category: game_data
system: tyrian
description: "Episode 5 level data"
required: false
source_ref: "episodes.c:274"
- name: "levels5.dat"
category: game_data
system: tyrian
description: "Episode 5 level definitions"
required: false
source_ref: "episodes.c:263"
- name: "cubetxt5.dat"
category: game_data
system: tyrian
description: "Episode 5 datacube text"
required: false
@@ -214,180 +237,210 @@ files:
# Shape data files (loaded per-level, character from lookup)
# -----------------------------------------------------------
- name: "shapes2.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '2')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes3.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '3')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes4.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '4')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes5.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '5')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes7.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '7')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes8.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '8')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes9.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '9')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapes0.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character '0')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesa.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'A')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesb.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'B')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesc.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'C')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesd.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'D')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapese.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'E')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesf.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'F')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesg.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'G')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesh.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'H')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesi.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'I')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesj.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'J')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesk.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'K')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesl.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'L')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesm.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'M')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesn.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'N')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapeso.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'O')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesp.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'P')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesq.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'Q')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesr.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'R')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapess.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'S')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapest.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'T')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesu.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'U')"
required: false
source_ref: "tyrian2.c:3079, lvlmast.c:23-27"
- name: "shapesv.dat"
category: game_data
system: tyrian
description: "Level tileset shapes (character 'V')"
required: false
@@ -397,18 +450,21 @@ files:
# Compressed shape files (newshX.shp, loaded per-level)
# -----------------------------------------------------------
- name: "newsh1.shp"
category: game_data
system: tyrian
description: "Compressed sprites (arrows, mouse cursor)"
required: false
source_ref: "mainint.c:493,884,1462 (JE_loadCompShapes '1')"
- name: "newsh6.shp"
category: game_data
system: tyrian
description: "Compressed sprites (explosions)"
required: false
source_ref: "tyrian2.c:771 (JE_loadCompShapes '6')"
- name: "newsh~.shp"
category: game_data
system: tyrian
description: "Compressed sprites (destruct mode)"
required: false
@@ -418,60 +474,70 @@ files:
# 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: "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: "opentyr.c:301,333"
- name: "tyrend.anm"
category: game_data
system: tyrian
description: "Ending animation sequence"
required: false
source_ref: "tyrian2.c:2473 (JE_playAnim)"
- name: "tshp2.pcx"
category: game_data
system: tyrian
description: "Additional ship graphics (PCX image)"
required: false
source_ref: "tyrian2.c:2757, pcxload.c:25-29"
- name: "estsc.shp"
category: game_data
system: tyrian
description: "Ending sequence character sprites"
required: false
source_ref: "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: "mainint.c:1781-1786"
- name: "demo.2"
category: game_data
system: tyrian
description: "Demo replay file 2"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.3"
category: game_data
system: tyrian
description: "Demo replay file 3"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.4"
category: game_data
system: tyrian
description: "Demo replay file 4"
required: false
source_ref: "mainint.c:1781-1786"
- name: "demo.5"
category: game_data
system: tyrian
description: "Demo replay file 5"
required: false

View File

@@ -47,6 +47,7 @@ files:
# ================================================================
- name: "abc.mkf"
category: game_data
path: "sdlpal/abc.mkf"
required: true
source_ref: "util.c:734, battle.c:879, global.c:55"
@@ -55,6 +56,7 @@ files:
and character animations.
- name: "ball.mkf"
category: game_data
path: "sdlpal/ball.mkf"
required: true
source_ref: "util.c:734, global.c:177"
@@ -62,6 +64,7 @@ files:
Ball/magic effect graphics archive.
- name: "data.mkf"
category: game_data
path: "sdlpal/data.mkf"
required: true
source_ref: "util.c:734, global.c:178"
@@ -69,6 +72,7 @@ files:
Core game data archive containing scripts, events, and game logic.
- name: "f.mkf"
category: game_data
path: "sdlpal/f.mkf"
required: true
source_ref: "util.c:734, global.c:179"
@@ -76,6 +80,7 @@ files:
Face/portrait graphics archive for character dialog.
- name: "fbp.mkf"
category: game_data
path: "sdlpal/fbp.mkf"
required: true
source_ref: "util.c:735, global.c:175"
@@ -83,6 +88,7 @@ files:
Full-screen background picture archive (cutscenes, title screen).
- name: "fire.mkf"
category: game_data
path: "sdlpal/fire.mkf"
required: true
source_ref: "util.c:735, global.c:180"
@@ -90,6 +96,7 @@ files:
Fire/spell effect graphics archive.
- name: "gop.mkf"
category: game_data
path: "sdlpal/gop.mkf"
required: true
source_ref: "util.c:735, res.c:234"
@@ -97,6 +104,7 @@ files:
GOP (game object palette/graphics) archive.
- name: "map.mkf"
category: game_data
path: "sdlpal/map.mkf"
required: true
source_ref: "util.c:735, res.c:233, global.c:55"
@@ -104,6 +112,7 @@ files:
Map tile and layout data archive for all game locations.
- name: "mgo.mkf"
category: game_data
path: "sdlpal/mgo.mkf"
required: true
source_ref: "util.c:736, global.c:176"
@@ -111,6 +120,7 @@ files:
Map graphic object (sprite overlay) archive.
- name: "pat.mkf"
category: game_data
path: "sdlpal/pat.mkf"
required: true
source_ref: "util.c:736, palette.c:53"
@@ -118,6 +128,7 @@ files:
Palette data archive for color management.
- name: "rgm.mkf"
category: game_data
path: "sdlpal/rgm.mkf"
required: true
source_ref: "util.c:736, global.c:181"
@@ -125,6 +136,7 @@ files:
RGM graphics archive.
- name: "rng.mkf"
category: game_data
path: "sdlpal/rng.mkf"
required: true
source_ref: "util.c:736, rngplay.c:402"
@@ -132,6 +144,7 @@ files:
RNG animation/cutscene sequence archive.
- name: "sss.mkf"
category: game_data
path: "sdlpal/sss.mkf"
required: true
source_ref: "util.c:737, global.c:182"
@@ -144,6 +157,7 @@ files:
# ================================================================
- name: "word.dat"
category: game_data
path: "sdlpal/word.dat"
required: true
source_ref: "util.c:741, text.c:719, global.c:197"
@@ -152,6 +166,7 @@ files:
strings. Either word.dat or m.msg is needed depending on game version.
- name: "m.msg"
category: game_data
path: "sdlpal/m.msg"
required: false
source_ref: "util.c:740"
@@ -166,6 +181,7 @@ files:
# ================================================================
- name: "voc.mkf"
category: game_data
path: "sdlpal/voc.mkf"
required: false
source_ref: "util.c:743, sound.c:969"
@@ -174,6 +190,7 @@ files:
sounds.mkf is needed for sound effects.
- name: "sounds.mkf"
category: game_data
path: "sdlpal/sounds.mkf"
required: false
source_ref: "util.c:743, sound.c:964"
@@ -187,6 +204,7 @@ files:
# ================================================================
- name: "midi.mkf"
category: game_data
path: "sdlpal/midi.mkf"
required: false
source_ref: "util.c:744, midi.c:78, midi_tsf.c:68"
@@ -194,6 +212,7 @@ files:
MIDI music archive. Used when Music type is set to MIDI.
- name: "mus.mkf"
category: game_data
path: "sdlpal/mus.mkf"
required: false
source_ref: "util.c:744, audio.c:305"

View File

@@ -49,6 +49,7 @@ notes: |
files:
- name: "xrick/data.zip"
category: game_data
system: rick-dangerous
description: "Rick Dangerous sound data (29 WAV files: sfx and music tracks)"
required: true

View File

@@ -241,6 +241,7 @@ def find_undeclared_files(
"name": fname,
"required": f.get("required", False),
"hle_fallback": f.get("hle_fallback", False),
"category": f.get("category", "bios"),
"in_repo": in_repo,
"note": f.get("note", ""),
})
@@ -454,11 +455,14 @@ def print_platform_result(result: dict, group: list[str]) -> None:
# Cross-reference: undeclared files used by cores
undeclared = result.get("undeclared_files", [])
if undeclared:
req_not_in_repo = [u for u in undeclared if u["required"] and not u["in_repo"] and not u.get("hle_fallback")]
req_hle_not_in_repo = [u for u in undeclared if u["required"] and not u["in_repo"] and u.get("hle_fallback")]
req_in_repo = [u for u in undeclared if u["required"] and u["in_repo"]]
opt_in_repo = [u for u in undeclared if not u["required"] and u["in_repo"]]
opt_not_in_repo = [u for u in undeclared if not u["required"] and not u["in_repo"]]
bios_files = [u for u in undeclared if u.get("category", "bios") == "bios"]
game_data = [u for u in undeclared if u.get("category", "bios") == "game_data"]
req_not_in_repo = [u for u in bios_files if u["required"] and not u["in_repo"] and not u.get("hle_fallback")]
req_hle_not_in_repo = [u for u in bios_files if u["required"] and not u["in_repo"] and u.get("hle_fallback")]
req_in_repo = [u for u in bios_files if u["required"] and u["in_repo"]]
opt_in_repo = [u for u in bios_files if not u["required"] and u["in_repo"]]
opt_not_in_repo = [u for u in bios_files if not u["required"] and not u["in_repo"]]
summary_parts = []
if req_not_in_repo:
@@ -471,9 +475,16 @@ def print_platform_result(result: dict, group: list[str]) -> None:
summary_parts.append(f"{len(opt_in_repo)} optional in repo")
if opt_not_in_repo:
summary_parts.append(f"{len(opt_not_in_repo)} optional NOT in repo")
if game_data:
gd_missing = [u for u in game_data if not u["in_repo"]]
gd_present = [u for u in game_data if u["in_repo"]]
if gd_missing:
summary_parts.append(f"{len(gd_missing)} game_data NOT in repo")
if gd_present:
summary_parts.append(f"{len(gd_present)} game_data in repo")
print(f" Core gaps: {len(undeclared)} undeclared ({', '.join(summary_parts)})")
# Show critical gaps (required + no HLE + not in repo)
# Show critical gaps (required bios + no HLE + not in repo)
for u in req_not_in_repo:
print(f" {u['emulator']}{u['name']} (required, NOT in repo)")
# Show required with HLE (core works but not ideal)