feat/single feature file (#887)

* FEATURES: new branch init [skip ci]

* FEATURES: structural changes [skip ci]

* FEATURES: structural changes [skip ci]

* FRAMEWORK: migrating easter_eggs into a reworked splash_screen function

* FRAMEWORK: migrating update_rd_conf into a reworked function with features.json support

* FRAMEWORK: variabilized features.json location

* FEATURES: fixed an invalid value

* FEATURES: added a sample jq to fetch all the resettable emulators for CLI

* FEATURES: added a sample jq to fetch all the resettable emulators for CLI - fix

* FEATURES: added more emulators and placeholders

* FEATURES: added more systems and emulators

* FEATURES: added more systems and emulators - fix

* FEATURES: added more systems and emulators - fix2

* FEATURES: moved libretro cores in retroarch and added more presets

* FEATURES: added the last missing presets

* FEATURES: added the last missing presets - fix

* FEATURES: json fmt

* FEATURES: added more bioses

* FEATURES: removed the bioses

* FEATURES: migrated incompatible_presets

* FEATURES: migrated deploy_helper_files and find_empty_rom_folders

* FEATURES: migrated deploy_helper_files and find_empty_rom_folders

* FEATURES: moved emulators outside system, added all the system pretty names

* FEATURES: fixes due to the new structure

* FEATURES: migrated pretty system names

* FEATURES: migrated compression_targets

* FEATURES: cleanup incompatible_presets

* FEATURES: migrated zip_compressable_extensions

* BIOS_FILE: creating a json (WIP)

* FEATURES: fixed Japanese system names

* FEATURES: fixed incompatible presets
This commit is contained in:
XargonWan 2024-08-15 23:42:40 +09:00 committed by GitHub
parent b8996fdd1c
commit b3e0dbe24a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 1058 additions and 233 deletions

View file

@ -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"
}
}
}

View file

@ -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

View file

@ -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

View file

@ -147,6 +147,119 @@
"location": "$bios_folder/switch/firmware" "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": { "system": {
"3do": { "3do": {
"name": "3DO Interactive Multiplayer" "name": "3DO Interactive Multiplayer"
@ -271,6 +384,9 @@
"dreamcast": { "dreamcast": {
"name": "Sega Dreamcast" "name": "Sega Dreamcast"
}, },
"dc": {
"name": "Sega Dreamcast"
},
"easyrpg": { "easyrpg": {
"name": "EasyRPG Game Engine" "name": "EasyRPG Game Engine"
}, },
@ -310,6 +426,9 @@
"gamegear": { "gamegear": {
"name": "Sega Game Gear" "name": "Sega Game Gear"
}, },
"gg": {
"name": "Sega Game Gear"
},
"gb": { "gb": {
"name": "Nintendo Game Boy" "name": "Nintendo Game Boy"
}, },
@ -365,7 +484,7 @@
"name": "Sega Mega-CD" "name": "Sega Mega-CD"
}, },
"megacdjp": { "megacdjp": {
"name": "Sega Mega-CD" "name": "Sega Mega-CD (Japan)"
}, },
"megadrive": { "megadrive": {
"name": "Sega Mega Drive" "name": "Sega Mega Drive"
@ -428,7 +547,7 @@
"name": "SNK Neo Geo CD" "name": "SNK Neo Geo CD"
}, },
"neogeocdjp": { "neogeocdjp": {
"name": "SNK Neo Geo CD" "name": "SNK Neo Geo CD (Japan)"
}, },
"nes": { "nes": {
"name": "Nintendo Entertainment System" "name": "Nintendo Entertainment System"
@ -509,7 +628,7 @@
"name": "Sega Saturn" "name": "Sega Saturn"
}, },
"saturnjp": { "saturnjp": {
"name": "Sega Saturn" "name": "Sega Saturn (Japan)"
}, },
"scummvm": { "scummvm": {
"name": "ScummVM Game Engine" "name": "ScummVM Game Engine"
@ -521,7 +640,7 @@
"name": "Sega Mega Drive 32X" "name": "Sega Mega Drive 32X"
}, },
"sega32xjp": { "sega32xjp": {
"name": "Sega Super 32X" "name": "Sega Super 32X (Japan)"
}, },
"sega32xna": { "sega32xna": {
"name": "Sega Genesis 32X" "name": "Sega Genesis 32X"

View file

@ -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

View file

@ -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

View file

@ -1,2 +0,0 @@
borders:widescreen
widescreen:borders

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -56,13 +56,19 @@ find_compatible_compression_format() {
local normalized_filename=$(echo "$1" | tr '[:upper:]' '[:lower:]') local normalized_filename=$(echo "$1" | tr '[:upper:]' '[:lower:]')
local system=$(echo "$1" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") 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" 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" 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" 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" echo "cso"
else else
# If no compatible format can be found for the input file # If no compatible format can be found for the input file
@ -70,6 +76,7 @@ find_compatible_compression_format() {
fi fi
} }
validate_for_chd() { validate_for_chd() {
# Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY # Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY
# USAGE: validate_for_chd $input_file # USAGE: validate_for_chd $input_file

View file

@ -44,14 +44,9 @@ find_empty_rom_folders() {
empty_rom_folders_list=() empty_rom_folders_list=()
all_empty_folders=() all_empty_folders=()
all_helper_files=()
while IFS='^' read -r file dest || [[ -n "$file" ]]; # Extract helper file names using jq and populate the all_helper_files array
do all_helper_files=($(jq -r '.helper_files | to_entries | .[] | .value.filename' "$features"))
if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then
all_helper_files=("${all_helper_files[@]}" "$file")
fi
done < "$helper_files_list"
for system in $(find "$roms_folder" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') for system in $(find "$roms_folder" -mindepth 1 -maxdepth 1 -type d -printf '%f\n')
do do
@ -70,8 +65,8 @@ find_empty_rom_folders() {
all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)") all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)")
echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file
elif [[ $count -eq 2 ]] && [[ "$files" =~ "systeminfo.txt" ]]; then elif [[ $count -eq 2 ]] && [[ "$files" =~ "systeminfo.txt" ]]; then
# Directory contains 2 files, one of which is "systeminfo.txt" contains_helper_file="false"
for helper_file in ${all_helper_files[@]} # Compare helper file list to dir file list for helper_file in "${all_helper_files[@]}" # Compare helper file list to dir file list
do do
if [[ "$files" =~ "$helper_file" ]]; then if [[ "$files" =~ "$helper_file" ]]; then
contains_helper_file="true" # Helper file was found contains_helper_file="true" # Helper file was found
@ -87,3 +82,4 @@ find_empty_rom_folders() {
fi fi
done done
} }

View file

@ -27,14 +27,12 @@ config="/app/retrodeck/config"
rd_defaults="$config/retrodeck/retrodeck.cfg" # A default RetroDECK config file 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 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 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 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 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 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 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 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 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 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 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_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 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_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 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" 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 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 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 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 cooker_repository_name="Cooker" # The name of the cooker repository under RetroDECK organization
main_repository_name="RetroDECK" # The name of the main repository under RetroDECK organization main_repository_name="RetroDECK" # The name of the main repository under RetroDECK organization

View file

@ -162,6 +162,15 @@ update_rd_conf() {
# STAGE 3: Eliminate any preset incompatibility with existing user settings and new defaults # 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 while IFS= read -r current_setting_line # Read the existing retrodeck.cfg
do do
if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it 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" set_setting_value "$rd_conf" "$system_name" "false" "retrodeck" "$current_section"
fi fi
fi fi
done < "$incompatible_presets_reference_list" done <<< "$incompatible_presets"
fi fi
fi fi
fi fi
@ -187,6 +196,7 @@ update_rd_conf() {
done < $rd_conf done < $rd_conf
} }
conf_read() { conf_read() {
# This function will read the RetroDECK config file into memory # This function will read the RetroDECK config file into memory
# USAGE: conf_read # USAGE: conf_read
@ -312,16 +322,18 @@ backup_retrodeck_userdata() {
make_name_pretty() { make_name_pretty() {
# This function will take an internal system name (like "gbc") and return a pretty version for user display ("Nintendo GameBoy Color") # 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" # USAGE: make_name_pretty "system name"
local system=$(grep "$1^" "$pretty_system_names_reference_list")
if [[ ! -z "$system" ]]; then local system_name="$1"
IFS='^' read -r internal_name pretty_name < <(echo "$system")
else # Use jq to parse the JSON and find the pretty name
pretty_name="$1" local pretty_name=$(jq -r --arg name "$system_name" '.system[$name].name // $name' "$features")
fi
echo "$pretty_name" echo "$pretty_name"
} }
finit_browse() { finit_browse() {
# Function for choosing data directory location during first/forced init # Function for choosing data directory location during first/forced init
path_selected=false path_selected=false
@ -560,38 +572,42 @@ update_splashscreens() {
} }
deploy_helper_files() { 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 # USAGE: deploy_helper_files
while IFS='^' read -r file dest || [[ -n "$file" ]]; # Extract helper files information using jq
do helper_files=$(jq -r '.helper_files | to_entries | map("\(.value.filename)^\(.value.location)")[]' "$features")
if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then
# Iterate through each helper file entry
while IFS='^' read -r file dest; do
if [[ ! -z "$file" ]] && [[ ! -z "$dest" ]]; then
eval current_dest="$dest" eval current_dest="$dest"
cp -f "$helper_files_folder/$file" "$current_dest/$file" cp -f "$helper_files_folder/$file" "$current_dest/$file"
fi 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 splash_screen() {
# The easter_egg_checklist.cfg file has the current format: $start_date^$end_date^$start_time^$end_time^$splash_file # 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.
# 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 # USAGE: splash_screen
# 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 +"%m%d") # Read the current date in a format that can be calculated in ranges
current_day=$(date +"%0m%0d") # 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
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 # Read the JSON file and extract splash screen data using jq
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 splash_screen=$(jq -r --arg current_day "$current_day" --arg current_time "$current_time" '
do .splash_screens | to_entries[] |
if [[ ! $start_date == "#"* ]] && [[ ! -z "$start_date" ]]; then select(
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 ($current_day | tonumber) >= (.value.start_date | tonumber) and
new_splash_file="$splashscreen_dir/$splash_file" ($current_day | tonumber) <= (.value.end_date | tonumber) and
break ($current_time | tonumber) >= (.value.start_time | tonumber) and
else # When there are no matches, the default splash screen is set to deploy ($current_time | tonumber) <= (.value.end_time | tonumber)
new_splash_file="$default_splash_file" ) | .value.filename' $features)
fi
fi # Determine the splash file to use
done < $easter_egg_checklist if [[ -n "$splash_screen" ]]; then
new_splash_file="$splashscreen_dir/$splash_screen"
else else
new_splash_file="$default_splash_file" new_splash_file="$default_splash_file"
fi fi
@ -870,7 +886,7 @@ quit_retrodeck() {
} }
start_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 ponzu
log i "Starting RetroDECK v$version" log i "Starting RetroDECK v$version"
es-de es-de

View file

@ -70,6 +70,15 @@ build_preset_list_options() {
make_preset_changes() { 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 # 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" IFS="," read -ra choices <<< "$choice"
for emulator in "${all_systems[@]}"; do for emulator in "${all_systems[@]}"; do
if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then
@ -89,7 +98,7 @@ make_preset_changes() {
fi fi
fi fi
fi fi
done < "$incompatible_presets_reference_list" done < <(echo "$incompatible_presets")
fi fi
if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then
changed_systems=("${changed_systems[@]}" "$emulator") changed_systems=("${changed_systems[@]}" "$emulator")

View file

@ -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" 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 read -p "Please enter the component you would like to reset: " component
component=$(echo "$component" | tr '[:upper:]' '[:lower:]') 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 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 read -p "You are about to reset $component to default settings. Enter 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then if [[ $response == [yY] ]]; then

View file

@ -852,7 +852,7 @@ configurator_compress_single_game_dialog() {
} }
configurator_compress_multiple_games_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" find_compatible_games "$1"