diff --git a/bios/BBK/GAM4980/gam4980/8.BIN b/bios/BBK/GAM4980/gam4980/8.BIN new file mode 100644 index 00000000..2e2ada94 Binary files /dev/null and b/bios/BBK/GAM4980/gam4980/8.BIN differ diff --git a/bios/BBK/GAM4980/gam4980/E.BIN b/bios/BBK/GAM4980/gam4980/E.BIN new file mode 100644 index 00000000..53a1d9bf Binary files /dev/null and b/bios/BBK/GAM4980/gam4980/E.BIN differ diff --git a/bios/Nintendo/Wii U/CafeCn.ttf b/bios/Nintendo/Wii U/CafeCn.ttf new file mode 100644 index 00000000..dab84818 Binary files /dev/null and b/bios/Nintendo/Wii U/CafeCn.ttf differ diff --git a/bios/Nintendo/Wii U/CafeKr.ttf b/bios/Nintendo/Wii U/CafeKr.ttf new file mode 100644 index 00000000..aed5fb86 Binary files /dev/null and b/bios/Nintendo/Wii U/CafeKr.ttf differ diff --git a/bios/Nintendo/Wii U/CafeStd.ttf b/bios/Nintendo/Wii U/CafeStd.ttf new file mode 100644 index 00000000..08a8bac6 Binary files /dev/null and b/bios/Nintendo/Wii U/CafeStd.ttf differ diff --git a/bios/Nintendo/Wii U/CafeTw.ttf b/bios/Nintendo/Wii U/CafeTw.ttf new file mode 100644 index 00000000..09bf3bcd Binary files /dev/null and b/bios/Nintendo/Wii U/CafeTw.ttf differ diff --git a/bios/Other/QEMU/bios-256k.bin b/bios/Other/QEMU/bios-256k.bin new file mode 100644 index 00000000..509f3988 Binary files /dev/null and b/bios/Other/QEMU/bios-256k.bin differ diff --git a/bios/Other/QEMU/vgabios-stdvga.bin b/bios/Other/QEMU/vgabios-stdvga.bin new file mode 100644 index 00000000..5b48ca86 Binary files /dev/null and b/bios/Other/QEMU/vgabios-stdvga.bin differ diff --git a/bios/Sega/SC-3000/.variants/sc3000.zip.a43aef36 b/bios/Sega/SC-3000/.variants/sc3000.zip.a43aef36 new file mode 100644 index 00000000..81e5edcf Binary files /dev/null and b/bios/Sega/SC-3000/.variants/sc3000.zip.a43aef36 differ diff --git a/database.json b/database.json index 37e2e51c..8aa04093 100644 --- a/database.json +++ b/database.json @@ -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", diff --git a/emulators/easyrpg.yml b/emulators/easyrpg.yml index 767d244f..7b758755 100644 --- a/emulators/easyrpg.yml +++ b/emulators/easyrpg.yml @@ -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 diff --git a/emulators/mkxp_z.yml b/emulators/mkxp_z.yml index 291cdea5..3ddf9ba0 100644 --- a/emulators/mkxp_z.yml +++ b/emulators/mkxp_z.yml @@ -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 diff --git a/emulators/nxengine.yml b/emulators/nxengine.yml index 9e303401..b5933cb4 100644 --- a/emulators/nxengine.yml +++ b/emulators/nxengine.yml @@ -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 diff --git a/emulators/opentyrian.yml b/emulators/opentyrian.yml index cca37260..4e37ec14 100644 --- a/emulators/opentyrian.yml +++ b/emulators/opentyrian.yml @@ -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 diff --git a/emulators/sdlpal.yml b/emulators/sdlpal.yml index 4e45fb3f..7d2f9123 100644 --- a/emulators/sdlpal.yml +++ b/emulators/sdlpal.yml @@ -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" diff --git a/emulators/xrick.yml b/emulators/xrick.yml index c47025cc..324ea0ba 100644 --- a/emulators/xrick.yml +++ b/emulators/xrick.yml @@ -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 diff --git a/scripts/verify.py b/scripts/verify.py index 2bbee3ff..9acb1467 100644 --- a/scripts/verify.py +++ b/scripts/verify.py @@ -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)