diff --git a/config/retrodeck/reference_lists/bios.json b/config/retrodeck/reference_lists/bios.json new file mode 100644 index 00000000..77df3c46 --- /dev/null +++ b/config/retrodeck/reference_lists/bios.json @@ -0,0 +1,850 @@ +{ + "bios": { + "panafz1.bin": { + "hash": "f47264dd47fe30f73ab3c010015c155b", + "system": "3do", + "description": "Panasonic FZ-1" + }, + "panafz10.bin": { + "hash": "51f2f43ae2f3508a14d9f56597e2d3ce", + "system": "3do", + "description": "Panasonic FZ-10" + }, + "panafz10-norsa.bin": { + "hash": "1477bda80dc33731a65468c1f5bcbee9", + "system": "3do", + "description": "Panasonic FZ-10 [RSA Patch]" + }, + "panafz10e-anvil.bin": { + "hash": "a48e6746bd7edec0f40cff078f0bb19f", + "system": "3do", + "description": "Panasonic FZ-10-E [Anvil]" + }, + "panafz10e-anvil-norsa.bin": { + "hash": "cf11bbb5a16d7af9875cca9de9a15e09", + "system": "3do", + "description": "Panasonic FZ-10-E [Anvil RSA Patch]" + }, + "panafz1j.bin": { + "hash": "a496cfdded3da562759be3561317b605", + "system": "3do", + "description": "Panasonic FZ-1J" + }, + "panafz1j-norsa.bin": { + "hash": "f6c71de7470d16abe4f71b1444883dc8", + "system": "3do", + "description": "Panasonic FZ-1J [RSA Patch]" + }, + "goldstar.bin": { + "hash": "8639fd5e549bd6238cfee79e3e749114", + "system": "3do", + "description": "Goldstar GDO-101M" + }, + "sanyotry.bin": { + "hash": "35fa1a1ebaaeea286dc5cd15487c13ea", + "system": "3do", + "description": "Sanyo IMP-21J TRY" + }, + "3do_arcade_saot.bin": { + "hash": "8970fc987ab89a7f64da9f8a8c4333ff", + "system": "3do", + "description": "Shootout At Old Tucson" + }, + "panafz1-kanji.bin": { + "hash": "b8dc97f778a6245c58e064b0312e8281", + "system": "3do", + "description": "Panasonic FZ-1 Kanji Font ROM", + "required" : "Required for some Japanese games. Optional otherwise" + }, + "panafz10ja-anvil-kanji.bin": { + "hash": "428577250f43edc902ea239c50d2240d", + "system": "3do", + "description": "Panasonic FZ-10JA Kanji Font ROM", + "required" : "Required for some Japanese games. Optional otherwise" + }, + "panafz1j-kanji.bin": { + "hash": "c23fb5d5e6bb1c240d02cf968972be37", + "system": "3do", + "description": "Panasonic FZ-1J Kanji Font ROM", + "required" : "Required for some Japanese games. Optional otherwise" + }, + "neogeo.zip": { + "hash": "00dad01abdbf8ea9e79ad2fe11bdb182", + "system": "fbneo", + "description": "Neo Geo BIOS", + "required" : "required" + }, + "neocdz.zip": { + "hash": "c733b4b7bd30fa849874d96c591c8639", + "system": "fbneo", + "description": "Neo Geo CDZ BIOS", + "required" : "required" + }, + "decocass.zip": { + "hash": "b7e1189b341bf6a8e270017c096d21b0", + "system": "fbneo", + "description": "DECO Cassette System BIOS", + "required" : "required" + }, + "isgsm.zip": { + "hash": "4a56d56e2219c5e2b006b66a4263c01c", + "system": "fbneo", + "description": "ISG Selection Master Type 2006 System BIOS", + "required" : "required" + }, + "midssio.zip": { + "hash": "5904b0de768d1d506e766aa7e18994c1", + "system": "fbneo", + "description": "Midway SSIO Sound Board Internal ROM", + "required" : "required" + }, + "nmk004.zip": { + "hash": "bfacf1a68792d5348f93cf724d2f1dda", + "system": "fbneo", + "description": "NMK004 Internal ROM", + "required" : "required" + }, + "pgm.zip": { + "hash": "87cc944eef4c671aa2629a8ba48a08e0", + "system": "fbneo", + "description": "PGM System BIOS", + "required" : "required" + }, + "skns.zip": { + "hash": "3f956c4e7008804cb47cbde49bd5b908", + "system": "fbneo", + "description": "Super Kaneko Nova System BIOS", + "required" : "required" + }, + "ym2608.zip": { + "hash": "79ae0d2bb1901b7e606b6dc339b79a97", + "system": "fbneo", + "description": "YM2608 Internal ROM", + "required" : "required" + }, + "cchip.zip": { + "hash": "df6f8a3d83c028a5cb9f2f2be60773f3", + "system": "fbneo", + "description": "C-Chip Internal ROM", + "required" : "required" + }, + "bubsys.zip": { + "hash": "f81298afd68a1a24a49a1a2d9f087964", + "system": "fbneo", + "description": "Bubble System BIOS", + "required" : "required" + }, + "namcoc69.zip": { + "system": "fbneo", + "description": "Namco C69 BIOS", + "required" : "required" + }, + "namcoc70.zip": { + "system": "fbneo", + "description": "Namco C70 BIOS", + "required" : "required" + }, + "namcoc75.zip": { + "system": "fbneo", + "description": "Namco C75 BIOS", + "required" : "required" + }, + "coleco.zip": { + "system": "fbneo", + "description": "ColecoVision System BIOS", + "required" : "required" + }, + "fdsbios.zip": { + "system": "fbneo", + "description": "FDS System BIOS", + "required" : "required" + }, + "msx.zip": { + "system": "fbneo", + "description": "MSX1 System BIOS", + "required" : "required" + }, + "ngp.zip": { + "system": "fbneo", + "description": "NeoGeo Pocket BIOS", + "required" : "required" + }, + "spectrum.zip": { + "system": "fbneo", + "description": "ZX Spectrum BIOS", + "required" : "required" + }, + "spec128.zip": { + "system": "fbneo", + "description": "ZX Spectrum 128 BIOS", + "required" : "required" + }, + "spec1282a.zip": { + "system": "fbneo", + "description": "ZX Spectrum 128 +2a BIOS", + "required" : "required" + }, + "channelf.zip": { + "system": "fbneo", + "description": "Fairchild Channel F BIOS", + "required" : "required" + }, + "5200.rom": { + "hash": "281f20ea4320404ec820fb7ec0693b38", + "system": "atari5200", + "description": "Atari 5200 BIOS", + "required" : "required" + }, + "ATARIXL.ROM": { + "hash": "06daac977823773a3eea3422fd26a703", + "system": "atari5200", + "description": "Atari XL/XE OS BIOS ", + "required" : "required" + }, + "ATARIBAS.ROM": { + "hash": "0bac0c6a50104045d902df4503a4c30b", + "system": "atari5200", + "description": "BASIC interpreter BIOS ", + "required" : "required" + }, + "ATARIOSA.ROM": { + "hash": "eb1f32f5d9f382db1bbfb8d7f9cb343a", + "system": "atari5200", + "description": "atari800", + "required" : "required" + }, + "ATARIOSB.ROM": { + "hash": "a3e8d617c95d08031fe1b20d541434b2", + "system": "atari5200", + "description": "BIOS for Atari 400/800 NTSC ", + "required" : "required" + }, + "tos.img": { + "hash": "c1c57ce48e8ee4135885cee9e63a68a2", + "system": "atarist", + "description": "TOS Boot Image", + "required" : "required" + }, + "lynxboot.img": { + "hash": "fcd403db69f54290b51035d82f835e7b", + "system": "atarilynx", + "description": "Atari Lynx Boot Image", + "required" : "required" + }, + "o2rom.bin": { + "hash": "562d5ebf9e030a40d6fabfc2f33139fd", + "system": ["odyssey2", "videopac"], + "description": "Odyssey2 BIOS - G7000 model", + "required" : "required" + }, + "c52.bin": { + "hash": "f1071cdb0b6b10dde94d3bc8a6146387", + "system": ["odyssey2", "videopac"], + "description": "Videopac+ French BIOS - G7000 model", + "required" : "required" + }, + "g7400.bin": { + "hash": "c500ff71236068e0dc0d0603d265ae76", + "system": ["odyssey2", "videopac"], + "description": "Videopac+ European BIOS - G7400 model", + "required" : "required" + }, + "jopac.bin": { + "hash": "279008e4a0db2dc5f1c048853b033828", + "system": ["odyssey2", "videopac"], + "description": "Videopac+ French BIOS - G7400 model", + "required" : "required" + }, + "exec.bin": { + "hash": "62e761035cb657903761800f4437b8af", + "system": "intellivision", + "description": "Executive ROM", + "required" : "required" + }, + "grom.bin": { + "hash": "0cd5946c6473e42e8e4c2137785e427f", + "system": "intellivision", + "description": "Graphics ROM", + "required" : "required" + }, + "MSX.ROM": { + "hash": "364a1a579fe5cb8dba54519bcfcdac0d", + "system": "msx", + "description": "MSX BIOS", + "required" : "required" + }, + "MSX2.ROM": { + "hash": "ec3a01c91f24fbddcbcab0ad301bc9ef", + "system": "msx", + "description": "MSX2 BIOS", + "required" : "required" + }, + "MSX2EXT.ROM": { + "hash": "2183c2aff17cf4297bdb496de78c2e8a", + "system": "msx", + "description": "MSX2 ExtROM", + "required" : "required" + }, + "MSX2P.ROM": { + "hash": "847cc025ffae665487940ff2639540e5", + "system": "msx", + "description": "MSX2+ BIOS", + "required" : "required" + }, + "MSX2PEXT.ROM": { + "hash": "7c8243c71d8f143b2531f01afa6a05dc", + "system": "msx", + "description": "MSX2+ ExtROM", + "required" : "required" + }, + "DISK.ROM": { + "hash": "80dcd1ad1a4cf65d64b7ba10504e8190", + "system": "msx", + "description": "DiskROM/BDOS" + }, + "FMPAC.ROM": { + "hash": "6f69cc8b5ed761b03afd78000dfb0e19", + "system": "msx", + "description": "FMPAC BIOS" + }, + "MSXDOS2.ROM": { + "hash": "6418d091cd6907bbcf940324339e43bb", + "system": "msx", + "description": "MSX-DOS 2" + }, + "PAINTER.ROM": { + "hash": "403cdea1cbd2bb24fae506941f8f655e", + "system": "msx", + "description": "Yamaha Painter" + }, + "KANJI.ROM": { + "hash": "febe8782b466d7c3b16de6d104826b34", + "system": "msx", + "description": "Kanji Font" + }, + "mcpx_1.0.bin": { + "hash": "d49c52a4102f6df7bcf8d0617ac475ed", + "system": "xbox", + "description": "Used by XEMU emulator" + }, + "Complex.bin": { + "system": "xbox", + "description": "Used by XEMU emulator" + }, + "Complex_4627v1.03.bin": { + "system": "xbox", + "description": "Used by XEMU emulator" + }, + "Complex_4627.bin": { + "system": "xbox", + "description": "Used by XEMU emulator" + }, + "syscard3.pce": { + "hash": "38179df8f4ac870017db21ebcbf53114", + "system": ["pcengine", "pcenginecd"], + "description": "Super CD-ROM2 System V3.xx", + "required" : "required" + }, + "syscard2.pce": { + "hash": "3cdd6614a918616bfc41c862e889dd79", + "system": ["pcengine", "pcenginecd"], + "description": "CD-ROM System V2.xx" + }, + "syscard1.pce": { + "hash": "2b7ccb3d86baa18f6402c176f3065082", + "system": ["pcengine", "pcenginecd"], + "description": "CD-ROM System V1.xx" + }, + "gexpress.pce": { + "hash": "6d2cb14fc3e1f65ceb135633d1694122", + "system": ["pcengine", "pcenginecd"], + "description": "Game Express CD Card" + }, + "font.bmp": { + "hash": "7da1e5b7c482d4108d22a5b09631d967", + "system": "pc98", + "description": "Needed to display text", + "required" : "required" + }, + "FONT.ROM": { + "hash": "2af6179d7de4893ea0b705c00e9a98d6", + "system": "pc98", + "description": "Alternative font file", + "required": "Required if normal font file is missing" + }, + "bios.rom": { + "hash": "e246140dec5124c5e404869a84caefce", + "system": "pc98", + "description": "BIOS file", + "required" : "required" + }, + "itf.rom": { + "hash": "e9fc3890963b12cf15d0a2eea5815b72", + "system": "pc98", + "description": "BIOS file", + "required" : "required" + }, + "sound.rom": { + "hash": "caf90f22197aed6f14c471c21e64658d", + "system": "pc98", + "description": "BIOS file", + "required" : "required" + }, + "bios9821.rom": { + "system": "pc98", + "description": "Optional BIOS file" + }, + "d8000.rom": { + "system": "pc98", + "description": "Optional BIOS file" + }, + "2608_BD.WAV": { + "hash": "d94546e70f17fd899be8df3544ab6cbb", + "system": "pc98", + "description": "YM2608 RYTHM sample" + }, + "2608_SD.WAV": { + "hash": "d71004351c8bbfdad53b18222c061d49", + "system": "pc98", + "description": "YM2608 RYTHM sample" + }, + "2608_TOP.WAV": { + "hash": "593cff6597ab9380d822b8f824fd2c28", + "system": "pc98", + "description": "YM2608 RYTHM sample" + }, + "2608_HH.WAV": { + "hash": "08c54a0c1f774a5538a848a6665a34b4", + "system": "pc98", + "description": "YM2608 RYTHM sample" + }, + "2608_TOM.WAV": { + "hash": "96a4ead13f364734f79b0c58af2f0e1f", + "system": "pc98", + "description": "YM2608 RYTHM sample" + }, + "2608_RIM.WAV": { + "hash": "465ea0768b27da404aec45dfc501404b", + "system": "pc98", + "description": "YM2608 RYTHM sample" + }, + "n88.rom": { + "hash": "4f984e04a99d56c4cfe36115415d6eb8", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "BIOS File", + "required" : "required" + }, + "n88n.rom": { + "hash": "2ff07b8769367321128e03924af668a0", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Required for PC-8000 series emulation. (N BASIC mode)" + }, + "disk.rom": { + "hash": "793f86784e5608352a5d7f03f03e0858", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Required for loading disk images" + }, + "n88knj1.rom": { + "hash": "d81c6d5d7ad1a4bbbd6ae22a01257603", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Required for viewing kanji" + }, + "n88_0.rom": { + "hash": "d675a2ca186c6efcd6277b835de4c7e5", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Required for viewing kanji" + }, + "n88_1.rom": { + "hash": "e844534dfe5744b381444dbe61ef1b66", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Optional BIOS file" + }, + "n88_2.rom": { + "hash": "6548fa45061274dee1ea8ae1e9e93910", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Optional BIOS file" + }, + "n88_3.rom": { + "hash": "fc4b76a402ba501e6ba6de4b3e8b4273", + "system": "NEC PC-8000 / PC-8800 series (QUASI88)", + "description": "Optional BIOS file" + }, + "neocd_f.rom": { + "hash": "8834880c33164ccbe6476b559f3e37de", + "system": "Neo Geo CD", + "description": "Front Loader BIOS", + "required": "at least one" + }, + "neocd_sf.rom": { + "hash": "043d76d5f0ef836500700c34faef774d", + "system": "Neo Geo CD", + "description": "Front Loader BIOS (SMKDAN 0.7b DEC 2010)", + "required": "at least one" + }, + "neocd_t.rom": { + "hash": "de3cf45d227ad44645b22aa83b49f450", + "system": "Neo Geo CD", + "description": "Top Loader BIOS", + "required": "at least one" + }, + "neocd_st.rom": { + "hash": "f6325a33c6d63ea4b9162a3fa8c32727", + "system": "Neo Geo CD", + "description": "Top Loader BIOS (SMKDAN 0.7b DEC 2010)", + "required": "at least one" + }, + "neocd_z.rom": { + "hash": "11526d58d4c524daef7d5d677dc6b004", + "system": "Neo Geo CD", + "description": "CDZ BIOS", + "required": "at least one" + }, + "neocd_sz.rom": { + "hash": "971ee8a36fb72da57aed01758f0a37f5", + "system": "Neo Geo CD", + "description": "CDZ BIOS (SMKDAN 0.7b DEC 2010)", + "required": "at least one" + }, + "front-sp1.bin": { + "hash": "5c2366f25ff92d71788468ca492ebeca", + "system": "Neo Geo CD", + "description": "Front Loader BIOS (MAME)", + "required": "at least one" + }, + "top-sp1.bin": { + "hash": "122aee210324c72e8a11116e6ef9c0d0", + "system": "Neo Geo CD", + "description": "Top Loader BIOS (MAME)", + "required": "at least one" + }, + "neocd.bin": { + "hash": "f39572af7584cb5b3f70ae8cc848aba2", + "system": "Neo Geo CD", + "description": "CDZ BIOS (MAME)", + "required": "at least one" + }, + "uni-bioscd.rom": { + "hash": "08ca8b2dba6662e8024f9e789711c6fc", + "system": "Neo Geo CD", + "description": "Universe BIOS CD 3.3" + }, + "gb_bios.bin": { + "hash": "32fbbd84168d3482956eb3c5051637f5", + "system": "Game Boy", + "description": "Optional BIOS file (used to display the Nintendo logo at boot)" + }, + "gbc_bios.bin": { + "hash": "dbfce9db9deaa2567f6a84fde55f9680", + "system": "Game Boy Color", + "description": "Optional BIOS file (used to display the Nintendo logo at boot)" + }, + "gba_bios.bin": { + "hash": "a860e8c0b6d573d191e4ec7db1b1e4f6", + "system": "Game Boy Advance", + "description": "Optional BIOS file (used to display the Nintendo logo at boot)" + }, + "aes_keys.txt": { + "system": "Nintendo 3DS", + "description": "Decryption keys used by Citra emulator" + }, + "bios7.bin": { + "hash": "df692a80a5b1bc90728bc3dfc76cd948", + "system": "Nintendo DS", + "description": "Used by MelonDS emulator (Required, see Wiki)" + }, + "bios9.bin": { + "hash": "a392174eb3e572fed6447e956bde4b25", + "system": "Nintendo DS", + "description": "Used by MelonDS emulator (Required, see Wiki)" + }, + "firmware.bin": { + "hash": "e45033d9b0fa6b0de071292bba7c9d13", + "system": "Nintendo DS", + "description": "Used by MelonDS emulator (Required, see Wiki)" + }, + "disksys.rom": { + "hash": "ca30b50f880eb660a320674ed365ef7a", + "system": "Nintendo NES / Famicom", + "description": "Family Computer Disk System BIOS - Required for Family Computer Disk System emulation" + }, + "bios.min": { + "hash": "1e4fb124a3a886865acb574f388c803d", + "system": "Nintendo Pokemon Mini", + "description": "Pokémon Mini BIOS - Optional" + }, + "prod.keys": { + "system": "Nintendo Switch", + "description": "A file for Switch emulation in Ryujinx", + "required" : "required" + }, + "title.keys": { + "system": "Nintendo Switch", + "description": "A file for Switch emulation in Ryujinx", + "required" : "required" + }, + "pico8": { + "system": "PICO-8", + "description": "The PICO-8 executable", + "required" : "required" + }, + "pico8.dat": { + "system": "PICO-8", + "description": "A PICO-8 system file", + "required" : "required" + }, + "pico8_dyn": { + "system": "PICO-8", + "description": "A PICO-8 system file", + "required" : "required" + }, + "bios_CD_E.bin": { + "hash": "e66fa1dc5820d254611fdcdba0662372", + "system": "Sega CD", + "description": "MegaCD EU BIOS", + "required": "at least one" + }, + "bios_CD_U.bin": { + "hash": "2efd74e3232ff260e371b99f84024f7f", + "system": "Sega CD", + "description": "SegaCD US BIOS", + "required": "at least one" + }, + "bios_CD_J.bin": { + "hash": "278a9397d192149e84e820ac621a8edd", + "system": "Sega CD", + "description": "MegaCD JP BIOS", + "required": "at least one" + }, + "dc_boot.bin": { + "hash": "e10c53c2f8b90bab96ead2d368858623", + "system": "Sega Dreamcast", + "description": "Dreamcast BIOS", + "required" : "required" + }, + "naomi.zip": { + "hash": "0ea6d3650ce4a7608a589e5df21a1f2f", + "system": "Sega Dreamcast", + "description": "Naomi BIOS" + }, + "naomi2.zip": { + "hash": "9b85e0de6ef359e5006c9b79a5a266b0", + "system": "Sega Dreamcast", + "description": "Naomi BIOS" + }, + "naomi_boot.bin": { + "hash": "96cb91c4a0bedd86e5a6965cfe6c0148", + "system": "Sega Dreamcast", + "description": "Naomi BIOS" + }, + "hod2bios.zip": { + "hash": "629bb0552463ba116ccf23d9a468a9f0", + "system": "Sega Dreamcast", + "description": "Naomi The House of the Dead 2 BIOS" + }, + "f355dlx.zip": { + "hash": "4b5bb177cbd760477598f85531dbe7fd", + "system": "Sega Dreamcast", + "description": "Naomi Ferrari F355 Challenge Deluxe BIOS" + }, + "f355bios.zip": { + "hash": "882f2c1cf8ec030955c48fe6aa6929ea", + "system": "Sega Dreamcast", + "description": "Naomi Ferrari F355 Challenge Twin/Deluxe BIOS" + }, + "airlbios.zip": { + "hash": "09ef4b8dea6cd8db2de1c13d510a6a87", + "system": "Sega Dreamcast", + "description": "Naomi Airline Pilots Deluxe BIOS" + }, + "awbios.zip": { + "hash": "b2f122e091da223beb824efafc3d6a36", + "system": "Sega Dreamcast", + "description": "Naomi Atomiswave BIOS" + }, + "bios.sms": { + "hash": "840481177270d5642a14ca71ee72844c", + "system": "Sega Master System / GameGear", + "description": "Master System BIOS" + }, + "BIOS.col": { + "hash": "2c66f5911e5b42b8ebe113403548eee7", + "system": "Sega Master System / GameGear", + "description": "Colecovision BIOS" + }, + "sega_101.bin": { + "hash": "85ec9ca47d8f6807718151cbcca8b964", + "system": "Sega Saturn", + "description": "Saturn JP BIOS", + "required": "at least one" + }, + "mpr-17933.bin": { + "hash": "3240872c70984b6cbfda1586cab68dbe", + "system": "Sega Saturn", + "description": "Saturn US.mdEU BIOS", + "required": "at least one" + }, + "mpr-18811-mx.ic1": { + "hash": "255113ba943c92a54facd25a10fd780c", + "system": "Sega Saturn", + "description": "The King of Fighters 95 ROM Cartridge (Required for this game)" + }, + "mpr-19367-mx.ic1": { + "hash": "1cd19988d1d72a3e7caa0b73234c96b4", + "system": "Sega Saturn", + "description": "Ultraman: Hikari no Kyojin Densetsu ROM Cartridge (Required for this game)" + }, + "iplrom.dat": { + "hash": "7fd4caabac1d9169e289f0f7bbf71d8e", + "system": "Sharp X68000", + "description": "X68000 BIOS", + "required" : "required" + }, + "cgrom.dat": { + "hash": "cb0a5cfcf7247a7eab74bb2716260269", + "system": "Sharp X68000", + "description": "Font file", + "required" : "required" + }, + "iplrom30.dat": { + "hash": "f373003710ab4322642f527f567e020a", + "system": "Sharp X68000", + "description": "X68000 BIOS 2" + }, + "iplromco.dat": { + "hash": "cc78d4f4900f622bd6de1aed7f52592f", + "system": "Sharp X68000", + "description": "X68000 BIOS 3" + }, + "iplromxv.dat": { + "hash": "0617321daa182c3f3d6f41fd02fb3275", + "system": "Sharp X68000", + "description": "X68000 BIOS 4" + }, + "psxonpsp660.bin": { + "hash": "c53ca5908936d412331790f4426c6c33", + "system": "Sony PSX", + "description": "PS1 BIOS from PSP", + "required": "at least one" + }, + "scph5500.bin": { + "hash": "8dd7d5296a650fac7319bce665a6a53c", + "system": "Sony PSX", + "description": "PS1 JP BIOS", + "required": "at least one" + }, + "scph5501.bin": { + "hash": "490f666e1afb15b7362b406ed1cea246", + "system": "Sony PSX", + "description": "PS1 US BIOS", + "required": "at least one" + }, + "scph5502.bin": { + "hash": "32736f17079d0b2b7024407c39bd3050", + "system": "Sony PSX", + "description": "PS1 EU BIOS", + "required": "at least one" + }, + "scph7001.bin": { + "hash": "1e68c231d0896b7eadcad1d7d8e76129", + "system": "Sony PSX", + "description": "PS1 BIOS", + "required": "at least one" + }, + "scph7002.bin": { + "hash": "b9d9a0286c33dc6b7237bb13cd46fdee", + "system": "Sony PSX", + "description": "PS1 BIOS", + "required": "at least one" + }, + "scph7003.bin": { + "hash": "490f666e1afb15b7362b406ed1cea246", + "system": "Sony PSX", + "description": "PS1 BIOS", + "required": "at least one" + }, + "scph7502.bin": { + "hash": "b9d9a0286c33dc6b7237bb13cd46fdee", + "system": "Sony PSX", + "description": "PS1 BIOS", + "required": "at least one" + }, + "scph9002(7502).bin": { + "hash": "b9d9a0286c33dc6b7237bb13cd46fdee", + "system": "Sony PSX", + "description": "PS1 BIOS", + "required": "at least one" + }, + "ps1_rom.bin": { + "hash": "81bbe60ba7a3d1cea1d48c14cbcc647b", + "system": "Sony PSX", + "description": "PS1 BIOS", + "required": "at least one" + }, + "ps2-0200a-20040614.bin": { + "hash": "d333558cc14561c1fdc334c75d5f37b7", + "system": "Sony PS2", + "description": "PS2 US BIOS", + "required": "at least one" + }, + "ps2-0200e-20040614.bin": { + "hash": "dc752f160044f2ed5fc1f4964db2a095", + "system": "Sony PS2", + "description": "PS2 EU BIOS", + "required": "at least one" + }, + "ps2-0200j-20040614.bin": { + "hash": "0eee5d1c779aa50e94edd168b4ebf42e", + "system": "Sony PS2", + "description": "PS2 JP BIOS", + "required": "at least one" + }, + "128p-0.rom": { + "hash": "a249565f03b98d004ee7f019570069cd", + "system": "ZX Spectrum", + "description": "Pentagon 128K/512K/1024 ROM", + "required" : "required" + }, + "128p-1.rom": { + "hash": "6e09e5d3c4aef166601669feaaadc01c", + "system": "ZX Spectrum", + "description": "Pentagon 128K/512K/1024 ROM", + "required" : "required" + }, + "trdos.rom": { + "hash": "0da70a5d2a0e733398e005b96b7e4ba6", + "system": "ZX Spectrum", + "description": "Pentagon 128K/512K/1024 ROM", + "required" : "required" + }, + "gluck.rom": { + "hash": "d5869034604dbfd2c1d54170e874fd0a", + "system": "ZX Spectrum", + "description": "Pentagon 512K/1024 ROM", + "required" : "required" + }, + "256s-0.rom": { + "hash": "b9fda5b6a747ff037365b0e2d8c4379a", + "system": "ZX Spectrum", + "description": "Scorpion 256K ROM", + "required" : "required" + }, + "256s-1.rom": { + "hash": "643861ad34831b255bf2eb64e8b6ecb8", + "system": "ZX Spectrum", + "description": "Scorpion 256K ROM", + "required" : "required" + }, + "256s-2.rom": { + "hash": "d8ad507b1c915a9acfe0d73957082926", + "system": "ZX Spectrum", + "description": "Scorpion 256K ROM", + "required" : "required" + }, + "256s-3.rom": { + "hash": "ce0723f9bc02f4948c15d3b3230ae831", + "system": "ZX Spectrum", + "description": "Scorpion 256K ROM", + "required" : "required" + } + } +} diff --git a/config/retrodeck/reference_lists/compression_targets.cfg b/config/retrodeck/reference_lists/compression_targets.cfg deleted file mode 100644 index 4ae00365..00000000 --- a/config/retrodeck/reference_lists/compression_targets.cfg +++ /dev/null @@ -1,43 +0,0 @@ -[chd] -3do -amigacd32 -dreamcast -megacd -neogeocd -pcenginecd -pcfx -psp -psx -ps2 -saturn -saturnjp -segacd -tg-cd -[rvz] -gc -wii -[zip] -atari2600 -atari5200 -atari7800 -atari800 -atarijaguar -atarilynx -atarist -gamegear -gb -gba -gbc -genesis -mastersystem -n64 -nds -nes -ngp -ngpc -sega32x -sega32xjp -sega32xna -snes -snesna -tg16 diff --git a/config/retrodeck/reference_lists/easter_egg_checklist.cfg b/config/retrodeck/reference_lists/easter_egg_checklist.cfg deleted file mode 100644 index e70139e3..00000000 --- a/config/retrodeck/reference_lists/easter_egg_checklist.cfg +++ /dev/null @@ -1,6 +0,0 @@ -1201^1231^0000^2359^rd-xmas-splash.svg -0209^0212^0000^2359^rd-lunar-dragon-splash.svg -0214^0214^0001^2359^rd-valentines-splash.svg -0304^0304^0000^2359^rd-gm-bday-splash.svg -0317^0317^0000^2359^rd-stpatricks-splash.svg -0429^0505^0000^2359^rd-kodomo-golden.svg diff --git a/config/retrodeck/reference_lists/features.json b/config/retrodeck/reference_lists/features.json index f071eb2a..d9199bd1 100644 --- a/config/retrodeck/reference_lists/features.json +++ b/config/retrodeck/reference_lists/features.json @@ -147,6 +147,119 @@ "location": "$bios_folder/switch/firmware" } }, + "compression_targets": { + "chd": [ + "3do", + "amigacd32", + "dreamcast", + "megacd", + "neogeocd", + "pcenginecd", + "pcfx", + "psp", + "psx", + "ps2", + "saturn", + "saturnjp", + "segacd", + "tg-cd" + ], + "rvz": [ + "gc", + "wii" + ], + "zip": [ + "atari2600", + "atari5200", + "atari7800", + "atari800", + "atarijaguar", + "atarilynx", + "atarist", + "gamegear", + "gb", + "gba", + "gbc", + "genesis", + "mastersystem", + "n64", + "nds", + "nes", + "ngp", + "ngpc", + "sega32x", + "sega32xjp", + "sega32xna", + "snes", + "snesna", + "tg16" + ] + }, + "zip_compressable_extensions": [ + ".32x", + ".68k", + ".NDS", + ".a26", + ".a52", + ".a78", + ".abs", + ".agb", + ".atr", + ".atx", + ".bin", + ".bml", + ".bms", + ".bs", + ".bsx", + ".cas", + ".cdm", + ".cgb", + ".cof", + ".col", + ".dim", + ".dmg", + ".dx2", + ".fds", + ".fig", + ".gb", + ".gba", + ".gbc", + ".gd3", + ".gd7", + ".gen", + ".gg", + ".ipf", + ".j64", + ".jag", + ".lnx", + ".md", + ".mdx", + ".mgd", + ".msa", + ".nds", + ".nes", + ".ngc", + ".o", + ".pce", + ".prg", + ".rom", + ".sfc", + ".sg", + ".sgb", + ".sgd", + ".smc", + ".smd", + ".sms", + ".st", + ".st", + ".stx", + ".swc", + ".unf", + ".unif", + ".xex", + ".xfd", + ".z64" + ], "system": { "3do": { "name": "3DO Interactive Multiplayer" @@ -271,6 +384,9 @@ "dreamcast": { "name": "Sega Dreamcast" }, + "dc": { + "name": "Sega Dreamcast" + }, "easyrpg": { "name": "EasyRPG Game Engine" }, @@ -310,6 +426,9 @@ "gamegear": { "name": "Sega Game Gear" }, + "gg": { + "name": "Sega Game Gear" + }, "gb": { "name": "Nintendo Game Boy" }, diff --git a/config/retrodeck/reference_lists/finit_options_list.cfg b/config/retrodeck/reference_lists/finit_options_list.cfg deleted file mode 100644 index fdf9f19b..00000000 --- a/config/retrodeck/reference_lists/finit_options_list.cfg +++ /dev/null @@ -1,3 +0,0 @@ -true^RetroDECK Steam Controller Profiles Install^Install RetroDECK Steam Input profiles to Steam - Recommended^rd_controller_profile -false^RPCS3 Firmware Install^Install firmware needed for PS3 emulation^rpcs3_firmware -false^Vita3K Firmware Install^Install firmware needed for Vita3K emulation^vita3k_firmware diff --git a/config/retrodeck/reference_lists/helper_files_list.cfg b/config/retrodeck/reference_lists/helper_files_list.cfg deleted file mode 100644 index 10630974..00000000 --- a/config/retrodeck/reference_lists/helper_files_list.cfg +++ /dev/null @@ -1,20 +0,0 @@ -# The proper format of this file is -# FILE NAME^DESTINATION -# The destination can be an internal variable name like $roms_folder if needed -# The FILE name can have spaces in it, but the DESTINATION cannot, even in variable form - -# mods -how-to-install-dolphin-mods.txt^$mods_folder/Dolphin -how-to-install-primehack-mods.txt^$mods_folder/Primehack - -# textures -how-to-install-Mesen-textures.txt^$texture_packs_folder/RetroArch-Mesen -how-to-install-PPSSPP-textures.txt^$texture_packs_folder/PPSSPP -how-to-install-PCSX2-textures.txt^$texture_packs_folder/PCSX2 -how-to-install-Mupen64Plus-textures.txt^$texture_packs_folder/RetroArch-Mupen64Plus/cache -how-to-install-Mupen64Plus-textures.txt^$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture -how-to-install-Duckstation-textures.txt^$texture_packs_folder/Duckstation - -# emulators -how-to-install-psvita-games.txt^$roms_folder/psvita -Install-firmware-through-Ryujinx.txt^$bios_folder/switch/firmware diff --git a/config/retrodeck/reference_lists/incompatible_presets.cfg b/config/retrodeck/reference_lists/incompatible_presets.cfg deleted file mode 100644 index 417ab816..00000000 --- a/config/retrodeck/reference_lists/incompatible_presets.cfg +++ /dev/null @@ -1,2 +0,0 @@ -borders:widescreen -widescreen:borders diff --git a/config/retrodeck/reference_lists/pretty_system_names.cfg b/config/retrodeck/reference_lists/pretty_system_names.cfg deleted file mode 100644 index 309b38fa..00000000 --- a/config/retrodeck/reference_lists/pretty_system_names.cfg +++ /dev/null @@ -1,23 +0,0 @@ -cemu^Cemu (Nintendo Wii U Standalone Emulator) -citra^Citra (Nintendo 3DS Standalone Emulator, via Ponzu) -dolphin^Dolphin (Nintendo GameCube / Wii Standalone Emulator) -duckstation^Duckstation (Sony Playstation Standalone Emulator) -gb^Nintendo GameBoy -gba^Nintendo GameBoy Advance -gbc^Nintendo GameBoy Color -genesis^Sega Genesis/Master System -gg^Sega GameGear -mame^MAME (Multi-Arcade Machine Standalone Emulator) -melonds^MelonDS (Nintendo DS Standalone Emulator) -n64^Nintendo 64 -pcsx2^PCSX2 (Sony Playstation 2 Standalone Emulator) -ppsspp^PPSSPP (Sony PSP Standalone Emulator) -primehack^Primehack (Metroid Prime Standalone Emulator) -psx_ra^Sony Playstation (RetroArch Core) -retroarch^RetroArch (Multi-emulator Frontend) -rpcs3^RPCS3 (Sony Playstation 3 Standalone Emulator) -ryujinx^Ryujinx (Nintendo Switch Standalone Emulator) -snes^Nintendo Super Nintendo -vita3k^Vita3K (Sony PSVita Standalone Emulator) -xemu^XEMU (Microsoft Xbox Standalone Emulator) -yuzu^Yuzu (Nintendo Switch Standalone Emulator, via Ponzu) diff --git a/config/retrodeck/reference_lists/supported_emulators.cfg b/config/retrodeck/reference_lists/supported_emulators.cfg deleted file mode 100644 index 17f51083..00000000 --- a/config/retrodeck/reference_lists/supported_emulators.cfg +++ /dev/null @@ -1,15 +0,0 @@ -cemu^/app/bin/Cemu-wrapper -citra^/var/data/ponzu/Citra/bin/citra-qt -dolphin^/app/bin/dolphin-emu -duckstation^/app/bin/duckstation-qt -mame^/app/bin/mame -melonds^/app/bin/melonds -pcsx2^/app/bin/pcsx2-qt -ppsspp^/app/bin/PPSSPPSDL -primehack^/app/bin/primehack-wrapper -retroarch^/app/bin/retroarch -rpcs3^/app/bin/rpcs3 -ryujinx^/app/bin/Ryujinx.sh -vita3k^/app/bin/Vita3K -xemu^/app/bin/xemu -yuzu^/var/data/ponzu/Yuzu/bin/yuzu diff --git a/config/retrodeck/reference_lists/zip_compressable_extensions.cfg b/config/retrodeck/reference_lists/zip_compressable_extensions.cfg deleted file mode 100644 index 72966ab7..00000000 --- a/config/retrodeck/reference_lists/zip_compressable_extensions.cfg +++ /dev/null @@ -1,63 +0,0 @@ -.32x -.68k -.NDS -.a26 -.a52 -.a78 -.abs -.agb -.atr -.atx -.bin -.bml -.bms -.bs -.bsx -.cas -.cdm -.cgb -.cof -.col -.dim -.dmg -.dx2 -.fds -.fig -.gb -.gba -.gbc -.gd3 -.gd7 -.gen -.gg -.ipf -.j64 -.jag -.lnx -.md -.mdx -.mgd -.msa -.nds -.nes -.ngc -.o -.pce -.prg -.rom -.sfc -.sg -.sgb -.sgd -.smc -.smd -.sms -.st -.st -.stx -.swc -.unf -.unif -.xex -.xfd -.z64 diff --git a/functions/compression.sh b/functions/compression.sh index 4b0bcdd8..15455e09 100644 --- a/functions/compression.sh +++ b/functions/compression.sh @@ -56,13 +56,19 @@ find_compatible_compression_format() { local normalized_filename=$(echo "$1" | tr '[:upper:]' '[:lower:]') local system=$(echo "$1" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") - if [[ $(validate_for_chd "$1") == "true" ]] && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "chd" ]]; then + # Extract the relevant lists from the JSON file + local chd_systems=$(jq -r '.compression_targets.chd[]' $features) + local rvz_systems=$(jq -r '.compression_targets.rvz[]' $features) + local zip_systems=$(jq -r '.compression_targets.zip[]' $features) + local zip_compressable_extensions=$(jq -r '.zip_compressable_extensions[]' $features) + + if [[ $(validate_for_chd "$1") == "true" ]] && echo "$chd_systems" | grep -q "\b$system\b"; then echo "chd" - elif grep -qF ".${normalized_filename##*.}" $zip_compressable_extensions && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "zip" ]]; then + elif echo "$zip_compressable_extensions" | grep -qF ".${normalized_filename##*.}" && echo "$zip_systems" | grep -q "\b$system\b"; then echo "zip" - elif echo "$normalized_filename" | grep -qE '\.iso|\.gcm' && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "rvz" ]]; then + elif echo "$normalized_filename" | grep -qE '\.iso|\.gcm' && echo "$rvz_systems" | grep -q "\b$system\b"; then echo "rvz" - elif echo "$normalized_filename" | grep -qE '\.iso' && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "cso" ]]; then + elif echo "$normalized_filename" | grep -qE '\.iso' && echo "$chd_systems" | grep -q "\b$system\b"; then echo "cso" else # If no compatible format can be found for the input file @@ -70,6 +76,7 @@ find_compatible_compression_format() { fi } + validate_for_chd() { # Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY # USAGE: validate_for_chd $input_file diff --git a/functions/configurator_functions.sh b/functions/configurator_functions.sh index 768215b8..32f11a7f 100644 --- a/functions/configurator_functions.sh +++ b/functions/configurator_functions.sh @@ -44,14 +44,9 @@ find_empty_rom_folders() { empty_rom_folders_list=() all_empty_folders=() - all_helper_files=() - while IFS='^' read -r file dest || [[ -n "$file" ]]; - do - if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then - all_helper_files=("${all_helper_files[@]}" "$file") - fi - done < "$helper_files_list" + # Extract helper file names using jq and populate the all_helper_files array + all_helper_files=($(jq -r '.helper_files | to_entries | .[] | .value.filename' "$features")) for system in $(find "$roms_folder" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') do @@ -70,8 +65,8 @@ find_empty_rom_folders() { all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)") echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file elif [[ $count -eq 2 ]] && [[ "$files" =~ "systeminfo.txt" ]]; then - # Directory contains 2 files, one of which is "systeminfo.txt" - for helper_file in ${all_helper_files[@]} # Compare helper file list to dir file list + contains_helper_file="false" + for helper_file in "${all_helper_files[@]}" # Compare helper file list to dir file list do if [[ "$files" =~ "$helper_file" ]]; then contains_helper_file="true" # Helper file was found @@ -87,3 +82,4 @@ find_empty_rom_folders() { fi done } + diff --git a/functions/global.sh b/functions/global.sh index 1eb39f12..7e3ae470 100644 --- a/functions/global.sh +++ b/functions/global.sh @@ -27,14 +27,12 @@ config="/app/retrodeck/config" rd_defaults="$config/retrodeck/retrodeck.cfg" # A default RetroDECK config file rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates bios_checklist="$config/retrodeck/reference_lists/bios_checklist.cfg" # A config file listing BIOS file information that can be verified -compression_targets="$config/retrodeck/reference_lists/compression_targets.cfg" # A config file containing supported compression types per system -zip_compressable_extensions="$config/retrodeck/reference_lists/zip_compressable_extensions.cfg" # A config file containing every file extension that is allowed to be compressed to .zip format, because there are a lot! -easter_egg_checklist="$config/retrodeck/reference_lists/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up input_validation="$config/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs finit_options_list="$config/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit splashscreen_dir="/var/config/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens current_splash_file="/var/config/ES-DE/resources/graphics/splash.svg" # The active splash file that will be shown on boot default_splash_file="/var/config/ES-DE/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen +# TODO: instead of this maybe we can iterate the features.json multi_user_emulator_config_dirs="$config/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg" # A list of emulator config folders that can be safely linked/unlinked entirely in multi-user mode rd_es_themes="/app/share/es-de/themes" # The directory where themes packaged with RetroDECK are stored lockfile="/var/config/retrodeck/.lock" # Where the lockfile is located @@ -46,13 +44,10 @@ remote_network_target_1="https://flathub.org" remote_network_target_2="$rd_repo" # The URL of a common internet target for testing network access remote_network_target_3="https://one.one.one.one" # The URL of a common internet target for testing network access helper_files_folder="$config/retrodeck/helper_files" # The parent folder of RetroDECK documentation files for deployment -helper_files_list="$config/retrodeck/reference_lists/helper_files_list.cfg" # The list of files to be deployed and where they go rd_appdata="/app/share/appdata/net.retrodeck.retrodeck.appdata.xml" # The shipped appdata XML file for this version rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2023_0228_05fe32f5dc8c78acbcd84d36ee7fdc5b/PS3UPDAT.PUP" RA_API_URL="https://retroachievements.org/dorequest.php" # API URL for RetroAchievements.org presets_dir="$config/retrodeck/presets" # Repository for all system preset config files -incompatible_presets_reference_list="$config/retrodeck/reference_lists/incompatible_presets.cfg" # A config file listing all incompatible presets for reference (eg. cannot have borders and widescreen enabled simultaniously) -pretty_system_names_reference_list="$config/retrodeck/reference_lists/pretty_system_names.cfg" # An internal translation list for turning internal names (eg. gbc) to "pretty" names (Nintendo GameBoy Color) git_organization_name="RetroDECK" # The name of the organization in our git repository such as GitHub cooker_repository_name="Cooker" # The name of the cooker repository under RetroDECK organization features="$config/retrodeck/reference_lists/features.json" # A file where all the RetroDECK and component capabilities are kept for querying diff --git a/functions/other_functions.sh b/functions/other_functions.sh index 4676c174..d84ad230 100644 --- a/functions/other_functions.sh +++ b/functions/other_functions.sh @@ -162,6 +162,15 @@ update_rd_conf() { # STAGE 3: Eliminate any preset incompatibility with existing user settings and new defaults + # Fetch incompatible presets from JSON and create a lookup list + incompatible_presets=$(jq -r ' + .incompatible_presets | to_entries[] | + [ + "\(.key):\(.value)", + "\(.value):\(.key)" + ] | join("\n") + ' $features) + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg do if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it @@ -179,7 +188,7 @@ update_rd_conf() { set_setting_value "$rd_conf" "$system_name" "false" "retrodeck" "$current_section" fi fi - done < "$incompatible_presets_reference_list" + done <<< "$incompatible_presets" fi fi fi @@ -187,6 +196,7 @@ update_rd_conf() { done < $rd_conf } + conf_read() { # This function will read the RetroDECK config file into memory # USAGE: conf_read @@ -312,16 +322,18 @@ backup_retrodeck_userdata() { make_name_pretty() { # This function will take an internal system name (like "gbc") and return a pretty version for user display ("Nintendo GameBoy Color") + # If the name is nout found it only returns the short name such as "gbc" # USAGE: make_name_pretty "system name" - local system=$(grep "$1^" "$pretty_system_names_reference_list") - if [[ ! -z "$system" ]]; then - IFS='^' read -r internal_name pretty_name < <(echo "$system") - else - pretty_name="$1" - fi + + local system_name="$1" + + # Use jq to parse the JSON and find the pretty name + local pretty_name=$(jq -r --arg name "$system_name" '.system[$name].name // $name' "$features") + echo "$pretty_name" } + finit_browse() { # Function for choosing data directory location during first/forced init path_selected=false @@ -560,38 +572,42 @@ update_splashscreens() { } deploy_helper_files() { - # This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list + # This script will distribute helper documentation files throughout the filesystem according to the JSON configuration # USAGE: deploy_helper_files - while IFS='^' read -r file dest || [[ -n "$file" ]]; - do - if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then + # Extract helper files information using jq + helper_files=$(jq -r '.helper_files | to_entries | map("\(.value.filename)^\(.value.location)")[]' "$features") + + # Iterate through each helper file entry + while IFS='^' read -r file dest; do + if [[ ! -z "$file" ]] && [[ ! -z "$dest" ]]; then eval current_dest="$dest" cp -f "$helper_files_folder/$file" "$current_dest/$file" fi - done < "$helper_files_list" + done <<< "$helper_files" } -easter_eggs() { - # This function will replace the RetroDECK startup splash screen with a different image if the day and time match a listing in easter_egg_checklist.cfg - # The easter_egg_checklist.cfg file has the current format: $start_date^$end_date^$start_time^$end_time^$splash_file - # Ex. The line "1001^1031^0000^2359^spooky.svg" would show the file "spooky.svg" during any time of day in the month of October - # The easter_egg_checklist.cfg is read in order, so lines higher in the file will have higher priority in the event of an overlap - # USAGE: easter_eggs - current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges - current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges - if [[ ! -z $(cat $easter_egg_checklist) ]]; then - while IFS="^" read -r start_date end_date start_time end_time splash_file || [[ -n "$start_date" ]]; # Read Easter Egg checklist file and separate values - do - if [[ ! $start_date == "#"* ]] && [[ ! -z "$start_date" ]]; then - if [[ "$((10#$current_day))" -ge "$((10#$start_date))" && "$((10#$current_day))" -le "$((10#$end_date))" && "$((10#$current_time))" -ge "$((10#$start_time))" && "$((10#$current_time))" -le "$((10#$end_time))" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed - new_splash_file="$splashscreen_dir/$splash_file" - break - else # When there are no matches, the default splash screen is set to deploy - new_splash_file="$default_splash_file" - fi - fi - done < $easter_egg_checklist + +splash_screen() { + # This function will replace the RetroDECK startup splash screen with a different image if the day and time match a listing in the JSON data. + # USAGE: splash_screen + + current_day=$(date +"%m%d") # Read the current date in a format that can be calculated in ranges + current_time=$(date +"%H%M") # Read the current time in a format that can be calculated in ranges + + # Read the JSON file and extract splash screen data using jq + splash_screen=$(jq -r --arg current_day "$current_day" --arg current_time "$current_time" ' + .splash_screens | to_entries[] | + select( + ($current_day | tonumber) >= (.value.start_date | tonumber) and + ($current_day | tonumber) <= (.value.end_date | tonumber) and + ($current_time | tonumber) >= (.value.start_time | tonumber) and + ($current_time | tonumber) <= (.value.end_time | tonumber) + ) | .value.filename' $features) + + # Determine the splash file to use + if [[ -n "$splash_screen" ]]; then + new_splash_file="$splashscreen_dir/$splash_screen" else new_splash_file="$default_splash_file" fi @@ -770,7 +786,7 @@ quit_retrodeck() { } start_retrodeck() { - easter_eggs # Check if today has a surprise splashscreen and load it if so + splash_screen # Check if today has a surprise splashscreen and load it if so ponzu log i "Starting RetroDECK v$version" es-de diff --git a/functions/presets.sh b/functions/presets.sh index aac3c321..18f25dad 100644 --- a/functions/presets.sh +++ b/functions/presets.sh @@ -70,6 +70,15 @@ build_preset_list_options() { make_preset_changes() { # This function will take an array $choices, which contains the names of systems that have been enabled for this preset and enable them in the backend + # Fetch incompatible presets from JSON and create a lookup list + incompatible_presets=$(jq -r ' + .incompatible_presets | to_entries[] | + [ + "\(.key):\(.value)", + "\(.value):\(.key)" + ] | join("\n") + ' $features) + IFS="," read -ra choices <<< "$choice" for emulator in "${all_systems[@]}"; do if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then @@ -89,7 +98,7 @@ make_preset_changes() { fi fi fi - done < "$incompatible_presets_reference_list" + done < "$incompatible_presets" fi if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then changed_systems=("${changed_systems[@]}" "$emulator") diff --git a/retrodeck.sh b/retrodeck.sh index 1c2b1f85..72177781 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -59,6 +59,14 @@ https://retrodeck.net echo "Available options are: es-de, retroarch, cemu, dolphin, duckstation, gzdoom, melonds, pcsx3, pico8, ppsspp, primehack, rpcs3, ryujinx, xemu, vita3k, mame, all" read -p "Please enter the component you would like to reset: " component component=$(echo "$component" | tr '[:upper:]' '[:lower:]') + + # TODO: this is the jq to get all the resettable emulators list, generic component is missing + # jq -r ' + # [(.emulator | to_entries[]) | + # select(.value.core == null and .value.resettable != false) | + # .key] | sort | join("|") + # ' "$features" + if [[ "$component" =~ ^(es-de|retroarch|cemu|dolphin|duckstation|gzdoom|mame|melonds|pcsx2|ppsspp|primehack|ryujinx|rpcs3|vita3k|xemu|all)$ ]]; then read -p "You are about to reset $component to default settings. Enter 'y' to continue, 'n' to stop: " response if [[ $response == [yY] ]]; then diff --git a/tools/configurator.sh b/tools/configurator.sh index 466f8a55..9287e5f5 100644 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -852,7 +852,7 @@ configurator_compress_single_game_dialog() { } configurator_compress_multiple_games_dialog() { - # This dialog will display any games it finds to be compressable, from the systems listed under each compression type in compression_targets.cfg + # This dialog will display any games it finds to be compressable, from the systems listed under each compression type in features.json find_compatible_games "$1"