mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-11 12:33:53 -06:00
chore: merge the launcher search paths
This commit is contained in:
commit
c69b31cfc0
23 files changed
+2373
-161
No files matched your search
@@ -52,6 +52,9 @@ systems:
|
||||
- atari-system1
|
||||
- efo-cedar-magnet
|
||||
|
||||
standalone_pools:
|
||||
dir_rom: ""
|
||||
|
||||
notes: |
|
||||
MAME 0.106 core (src/version.c:11) carrying its own video layer and driver
|
||||
backports from later MAME releases. Twenty-nine BIOS root sets, each a
|
||||
@@ -156,6 +159,7 @@ files:
|
||||
|
||||
# SNK Neo Geo MVS
|
||||
- name: neogeo.zip
|
||||
path: "neogeo.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: snk-neogeo-mvs
|
||||
@@ -223,6 +227,7 @@ files:
|
||||
|
||||
# IGS PGM
|
||||
- name: pgm.zip
|
||||
path: "pgm.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: igs-pgm
|
||||
@@ -246,6 +251,7 @@ files:
|
||||
|
||||
# Sega ST-V
|
||||
- name: stvbios.zip
|
||||
path: "stvbios.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: sega-stv
|
||||
@@ -302,6 +308,7 @@ files:
|
||||
|
||||
# Sega Mega Play
|
||||
- name: megaplay.zip
|
||||
path: "megaplay.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: sega-megaplay
|
||||
@@ -323,6 +330,7 @@ files:
|
||||
|
||||
# Sega Mega-Tech
|
||||
- name: megatech.zip
|
||||
path: "megatech.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: sega-megatech
|
||||
@@ -335,6 +343,7 @@ files:
|
||||
|
||||
# DECO Cassette System
|
||||
- name: decocass.zip
|
||||
path: "decocass.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: deco-cassette
|
||||
@@ -387,6 +396,7 @@ files:
|
||||
|
||||
# Nintendo PlayChoice-10
|
||||
- name: playch10.zip
|
||||
path: "playch10.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: nintendo-playch10
|
||||
@@ -438,6 +448,7 @@ files:
|
||||
|
||||
# Nintendo Super System
|
||||
- name: nss.zip
|
||||
path: "nss.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: nintendo-nss
|
||||
@@ -466,6 +477,7 @@ files:
|
||||
|
||||
# Super Kaneko Nova System
|
||||
- name: skns.zip
|
||||
path: "skns.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: super-kaneko-nova
|
||||
@@ -501,6 +513,7 @@ files:
|
||||
|
||||
# Konami System GX
|
||||
- name: konamigx.zip
|
||||
path: "konamigx.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: konami-gx
|
||||
@@ -513,6 +526,7 @@ files:
|
||||
|
||||
# Konami Baby Phoenix/GV System
|
||||
- name: konamigv.zip
|
||||
path: "konamigv.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: konami-gv
|
||||
@@ -525,6 +539,7 @@ files:
|
||||
|
||||
# Century Electronics CVS
|
||||
- name: cvs.zip
|
||||
path: "cvs.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: century-cvs
|
||||
@@ -548,6 +563,7 @@ files:
|
||||
|
||||
# Capcom ZN1
|
||||
- name: cpzn1.zip
|
||||
path: "cpzn1.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: capcom-zn1
|
||||
@@ -560,6 +576,7 @@ files:
|
||||
|
||||
# Capcom ZN2
|
||||
- name: cpzn2.zip
|
||||
path: "cpzn2.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: capcom-zn2
|
||||
@@ -572,6 +589,7 @@ files:
|
||||
|
||||
# Tecmo TPS
|
||||
- name: tps.zip
|
||||
path: "tps.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: tecmo-tps
|
||||
@@ -584,6 +602,7 @@ files:
|
||||
|
||||
# Taito FX1
|
||||
- name: taitofx1.zip
|
||||
path: "taitofx1.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: taito-fx1
|
||||
@@ -596,6 +615,7 @@ files:
|
||||
|
||||
# Eighting/Raizing PS Arcade 95
|
||||
- name: psarc95.zip
|
||||
path: "psarc95.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: eighting-zn1
|
||||
@@ -608,6 +628,7 @@ files:
|
||||
|
||||
# Atlus PSX
|
||||
- name: atluspsx.zip
|
||||
path: "atluspsx.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: atlus-zn1
|
||||
@@ -620,6 +641,7 @@ files:
|
||||
|
||||
# Atari PSX
|
||||
- name: atpsx.zip
|
||||
path: "atpsx.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: atari-zn1
|
||||
@@ -632,6 +654,7 @@ files:
|
||||
|
||||
# Acclaim PSX
|
||||
- name: acpsx.zip
|
||||
path: "acpsx.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: acclaim-zn1
|
||||
@@ -644,6 +667,7 @@ files:
|
||||
|
||||
# Video System PSX
|
||||
- name: coh1002v.zip
|
||||
path: "coh1002v.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: videosystem-zn1
|
||||
@@ -656,6 +680,7 @@ files:
|
||||
|
||||
# Seta Aleck64
|
||||
- name: aleck64.zip
|
||||
path: "aleck64.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: nintendo-aleck64
|
||||
@@ -668,6 +693,7 @@ files:
|
||||
|
||||
# Atari System 1
|
||||
- name: atarisy1.zip
|
||||
path: "atarisy1.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: atari-system1
|
||||
@@ -691,6 +717,7 @@ files:
|
||||
|
||||
# EFO Cedar Magnet System
|
||||
- name: cedmag.zip
|
||||
path: "cedmag.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: efo-cedar-magnet
|
||||
@@ -703,6 +730,7 @@ files:
|
||||
|
||||
# Arcadia Systems
|
||||
- name: ar_bios.zip
|
||||
path: "ar_bios.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: arcadia-systems
|
||||
@@ -770,6 +798,7 @@ files:
|
||||
|
||||
# Exidy Max-A-Flex
|
||||
- name: maxaflex.zip
|
||||
path: "maxaflex.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: exidy-maxaflex
|
||||
@@ -793,6 +822,7 @@ files:
|
||||
|
||||
# Brezzasoft Crystal System
|
||||
- name: crysbios.zip
|
||||
path: "crysbios.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: brezzasoft-crystal
|
||||
@@ -805,6 +835,7 @@ files:
|
||||
|
||||
# I'Max Multi Amenity Cassette System
|
||||
- name: macsbios.zip
|
||||
path: "macsbios.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: imax-macs
|
||||
@@ -823,6 +854,7 @@ files:
|
||||
|
||||
# Barcrest MPU4 Video
|
||||
- name: bctvidbs.zip
|
||||
path: "bctvidbs.zip"
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: barcrest-mpu4
|
||||
|
||||
+4
-2
@@ -20,6 +20,8 @@ cores:
|
||||
- cemu
|
||||
- "cemu-sa"
|
||||
systems: [nintendo-wiiu]
|
||||
standalone_directories:
|
||||
- "mlc_path = mlc01"
|
||||
|
||||
data_directories:
|
||||
- ref: cemu-gameprofiles
|
||||
@@ -71,7 +73,7 @@ notes: |
|
||||
directory of that name (saves sorted per core). Standalone Cemu uses the
|
||||
portable directory next to the executable when it exists, otherwise the
|
||||
user data directory given per system in data_root, and the MLC defaults to
|
||||
<user data>/mlc01. path: entries below are
|
||||
<user data>/mlc01, which mlc_path in settings.xml replaces. path: entries below are
|
||||
the libretro destination under the system directory, or under the save
|
||||
directory for the MLC (load_from), and standalone_path: is relative to the
|
||||
Cemu user data directory, which holds the MLC by default (load_from
|
||||
@@ -80,7 +82,7 @@ notes: |
|
||||
ref: src/libretro/CemuLibretro.cpp:2110-2170,
|
||||
src/libretro/CemuLibretro.cpp:4083-4091,
|
||||
src/gui/wxgui/CemuApp.cpp:89-124, src/gui/wxgui/CemuApp.cpp:126-172,
|
||||
src/config/ActiveSettings.cpp:295-321
|
||||
src/config/ActiveSettings.cpp:295-321, src/config/CemuConfig.cpp:25-26
|
||||
|
||||
keys.txt is read once from the user data path. A missing file is created
|
||||
with a comment header and an example key. Each line is stripped of
|
||||
|
||||
@@ -23,6 +23,9 @@ cores:
|
||||
- "dolphin-qt-gc"
|
||||
- "dolphin-qt-wii"
|
||||
systems: [nintendo-gamecube, nintendo-wii, sega-triforce]
|
||||
standalone_directories:
|
||||
- "$XDG_DATA_HOME/dolphin-emu"
|
||||
- "~/.local/share/dolphin-emu"
|
||||
data_root:
|
||||
android:
|
||||
path: "Android/data/org.dolphinemu.dolphinemu/files"
|
||||
|
||||
@@ -29,6 +29,8 @@ cores:
|
||||
systems:
|
||||
- ngage
|
||||
- symbian
|
||||
standalone_directories:
|
||||
- "data-storage = data"
|
||||
|
||||
data_root:
|
||||
android:
|
||||
|
||||
@@ -13,6 +13,9 @@ version_basis:
|
||||
display_name: "GZDoom"
|
||||
cores: ["GZDoom", "gzdoom-sa"]
|
||||
systems: [doom, heretic, hexen, strife, chex]
|
||||
standalone_pools:
|
||||
"[IWADSearch.Directories] Path": ""
|
||||
"[IWADSearch.Directories] RecursivePath": ""
|
||||
|
||||
notes: |
|
||||
Doom-engine source port by Christoph Oelckers. Supports Doom, Heretic,
|
||||
@@ -30,6 +33,14 @@ notes: |
|
||||
The last three are skipped for shareware IWADs and with -noextras.
|
||||
ref: src/d_main.cpp:2050-2071
|
||||
|
||||
BaseFileSearch tries the program directory first for these resources, then
|
||||
the name as given, then each FileSearch.Directories path. The same search
|
||||
serves -file, -deh and -bex arguments and zvox.wad. IWADs are not looked up
|
||||
there: candidates come from the IWADSearch.Directories paths, and the Load
|
||||
files of an IWAD block from the IWAD's own directory.
|
||||
ref: src/common/utility/findfile.cpp:106-115, 224-296,
|
||||
src/d_main.cpp:1802-1803, 2083, src/d_iwad.cpp:456-476, 613-624, 877-901
|
||||
|
||||
Game data is a user-supplied IWAD. iwadinfo.txt declares each known
|
||||
IWAD with its IWADName, MustContain lumps and support files. The
|
||||
search directories are scanned for the file names of its Names block
|
||||
@@ -153,6 +164,7 @@ files:
|
||||
- name: "doom.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659"
|
||||
note: "The Ultimate DOOM and DOOM Registered both use this name and are told apart by their lumps."
|
||||
@@ -160,108 +172,126 @@ files:
|
||||
- name: "doom2.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom2.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:640, 653"
|
||||
|
||||
- name: "doom2f.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom2f.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:625, 657"
|
||||
|
||||
- name: "doombfg.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doombfg.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:332, 666"
|
||||
|
||||
- name: "doom2bfg.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom2bfg.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:560, 667"
|
||||
|
||||
- name: "doomunity.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doomunity.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:369, 661"
|
||||
|
||||
- name: "doom2unity.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom2unity.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:592, 655"
|
||||
|
||||
- name: "doomkex.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doomkex.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 662"
|
||||
|
||||
- name: "doom2kex.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom2kex.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:576, 656"
|
||||
|
||||
- name: "doomxbox.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doomxbox.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:403, 660"
|
||||
|
||||
- name: "doom2xbox.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom2xbox.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:608, 654"
|
||||
|
||||
- name: "doom_complete.pk3"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "doom_complete.pk3"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:389, 652"
|
||||
|
||||
- name: "plutonia.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "plutonia.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:545, 670"
|
||||
|
||||
- name: "plutoniaunity.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "plutoniaunity.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:514, 671"
|
||||
|
||||
- name: "plutoniakex.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "plutoniakex.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:529, 672"
|
||||
|
||||
- name: "tnt.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "tnt.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:499, 673"
|
||||
|
||||
- name: "tntunity.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "tntunity.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:468, 674"
|
||||
|
||||
- name: "tntkex.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "tntkex.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:483, 675"
|
||||
|
||||
- name: "nerve.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "nerve.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:565, 614, src/d_iwad.cpp:877-895"
|
||||
note: "No Rest for the Living. Autoloaded by Doom 2 BFG and Xbox editions."
|
||||
@@ -269,6 +299,7 @@ files:
|
||||
- name: "nerveunity.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "nerveunity.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:598, src/d_iwad.cpp:877-895"
|
||||
note: "Loaded from the IWAD directory by DOOM 2: Unity Edition."
|
||||
@@ -276,6 +307,7 @@ files:
|
||||
- name: "extras.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "extras.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598"
|
||||
note: "Loaded from the IWAD directory by the KEX and Unity editions."
|
||||
@@ -283,6 +315,7 @@ files:
|
||||
- name: "soundtrack"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "soundtrack"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:376, 598, src/d_iwad.cpp:877-895"
|
||||
note: "Loaded from the IWAD directory by the DOOM and DOOM 2 Unity editions."
|
||||
@@ -290,6 +323,7 @@ files:
|
||||
- name: "id24res.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "id24res.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:341, 360, 379, src/d_iwad.cpp:862-875"
|
||||
note: "id24 resource WAD. SupportWAD of every id IWAD block, loaded when found and i_loadsupportwad is set."
|
||||
@@ -299,6 +333,7 @@ files:
|
||||
- name: "freedoom1.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "freedoom1.wad"
|
||||
required: false
|
||||
installed_on: [retropie]
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:307, 676"
|
||||
@@ -306,6 +341,7 @@ files:
|
||||
- name: "freedoom2.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "freedoom2.wad"
|
||||
required: false
|
||||
installed_on: [retropie]
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:294, 677"
|
||||
@@ -313,6 +349,7 @@ files:
|
||||
- name: "freedm.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "freedm.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:281, 680"
|
||||
|
||||
@@ -321,6 +358,7 @@ files:
|
||||
- name: "heretic.wad"
|
||||
category: game_data
|
||||
system: heretic
|
||||
path: "heretic.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681"
|
||||
note: "Both Heretic and Shadow of the Serpent Riders use this name and are told apart by the EXTENDED lump."
|
||||
@@ -329,6 +367,7 @@ files:
|
||||
aliases: ["blasphemer.wad"]
|
||||
category: game_data
|
||||
system: heretic
|
||||
path: "blasphem.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:228, 692-693"
|
||||
|
||||
@@ -337,12 +376,14 @@ files:
|
||||
- name: "hexen.wad"
|
||||
category: game_data
|
||||
system: hexen
|
||||
path: "hexen.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:188, 684"
|
||||
|
||||
- name: "hexdd.wad"
|
||||
category: game_data
|
||||
system: hexen
|
||||
path: "hexdd.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:196-207, 685"
|
||||
note: "Deathkings expansion. Requires hexen.wad (Required = Hexen: Beyond Heretic)."
|
||||
@@ -352,12 +393,14 @@ files:
|
||||
- name: "strife1.wad"
|
||||
category: game_data
|
||||
system: strife
|
||||
path: "strife1.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:151, 688"
|
||||
|
||||
- name: "sve.wad"
|
||||
category: game_data
|
||||
system: strife
|
||||
path: "sve.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689"
|
||||
note: "Veteran Edition. Required = Strife: Quest for the Sigil (loads voices.wad)."
|
||||
@@ -365,6 +408,7 @@ files:
|
||||
- name: "voices.wad"
|
||||
category: game_data
|
||||
system: strife
|
||||
path: "voices.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:142, 155"
|
||||
|
||||
@@ -373,12 +417,14 @@ files:
|
||||
- name: "chex.wad"
|
||||
category: game_data
|
||||
system: chex
|
||||
path: "chex.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:123, 694"
|
||||
|
||||
- name: "chex3.wad"
|
||||
category: game_data
|
||||
system: chex
|
||||
path: "chex3.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:109, 695"
|
||||
|
||||
@@ -387,12 +433,14 @@ files:
|
||||
- name: "hacx.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "hacx.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:83, 698"
|
||||
|
||||
- name: "hacx2.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "hacx2.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:65-75, 699, src/d_iwad.cpp:351-394, src/common/filesystem/source/resourcefile.cpp:156-174"
|
||||
note: "Identified by the MAP01 map and the HACX-E lump, whatever the container: every candidate is opened by its magic, so a zip under this name is read as a pk3. The Hacx 2.0 repository builds that zip from src/, where hacx-e.txt is the HACX-E lump and maps/MAP01.wad the first map."
|
||||
@@ -400,18 +448,21 @@ files:
|
||||
- name: "action2.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "action2.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:97, 696"
|
||||
|
||||
- name: "harm1.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "harm1.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 697"
|
||||
|
||||
- name: "square.pk3"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "square.pk3"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:33"
|
||||
note: "Absent from the Names block: picked up only when named with -iwad."
|
||||
@@ -419,17 +470,20 @@ files:
|
||||
- name: "square1.pk3"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "square1.pk3"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 700"
|
||||
|
||||
- name: "delaweare.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "delaweare.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 701"
|
||||
|
||||
- name: "rotwb.wad"
|
||||
category: game_data
|
||||
system: doom
|
||||
path: "rotwb.wad"
|
||||
required: false
|
||||
source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 702"
|
||||
+1445
File diff suppressed because it is too large.
Load diff
@@ -16,6 +16,10 @@ cores:
|
||||
- psxmame
|
||||
systems:
|
||||
- arcade
|
||||
standalone_pools:
|
||||
rompath: ""
|
||||
"-rompath": ""
|
||||
"-rp": ""
|
||||
|
||||
notes: |
|
||||
MAME build reduced to the PlayStation based arcade boards, with the ZiNc
|
||||
@@ -31,6 +35,9 @@ notes: |
|
||||
zn.c, plus taitogn.c, ksys573.c and konamigv.c. emulatorlauncher runs
|
||||
`mame.exe -skip_gameinfo -rompath <bios>/psxmame/bios;<game folder>
|
||||
... <set>` (emulatorLauncher Generators/PSXMame.Generator.cs:20-110).
|
||||
Each directory of the semicolon-separated rompath is tried in turn and a
|
||||
set is read at its top (src/emu/emuopts.c:36, src/emu/fileio.c:245-249,
|
||||
816-835).
|
||||
|
||||
A ROM missing from its set is fatal unless it is optional or has no good
|
||||
dump (src/emu/romload.c:427-449, src/emu/romload.c:594). Of a set with
|
||||
@@ -40,6 +47,7 @@ notes: |
|
||||
|
||||
files:
|
||||
- name: "cpzn1.zip"
|
||||
path: "cpzn1.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -52,6 +60,7 @@ files:
|
||||
sha1: "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a"
|
||||
|
||||
- name: "cpzn2.zip"
|
||||
path: "cpzn2.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -64,6 +73,7 @@ files:
|
||||
sha1: "66e7e1d4e426466b8f48a2ba055a91b475569504"
|
||||
|
||||
- name: "atpsx.zip"
|
||||
path: "atpsx.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -76,6 +86,7 @@ files:
|
||||
sha1: "815488d8563c85f97fbc3384ff21f08e4c88b7b7"
|
||||
|
||||
- name: "acpsx.zip"
|
||||
path: "acpsx.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -88,6 +99,7 @@ files:
|
||||
sha1: "7ee83d317190bb1cef2f8f01c81eaaae47150ebb"
|
||||
|
||||
- name: "tps.zip"
|
||||
path: "tps.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -100,6 +112,7 @@ files:
|
||||
sha1: "03eb2febfab3fcde716defff291babd9392de965"
|
||||
|
||||
- name: "vspsx.zip"
|
||||
path: "vspsx.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -112,6 +125,7 @@ files:
|
||||
sha1: "8f59314c1093446b9bcb06d232244da6df78e206"
|
||||
|
||||
- name: "taitofx1.zip"
|
||||
path: "taitofx1.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -124,6 +138,7 @@ files:
|
||||
sha1: "e18907cf8c6ba54d96edba0a9a00487a90219e0d"
|
||||
|
||||
- name: "psarc95.zip"
|
||||
path: "psarc95.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -136,6 +151,7 @@ files:
|
||||
sha1: "cd68532967a25f476a6d73473ec6b6f4df2e1689"
|
||||
|
||||
- name: "atluspsx.zip"
|
||||
path: "atluspsx.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -148,6 +164,7 @@ files:
|
||||
sha1: "9511d24bfe25eb180fb2db0835b131cb4a12730e"
|
||||
|
||||
- name: "taitogn.zip"
|
||||
path: "taitogn.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -171,6 +188,7 @@ files:
|
||||
sha1: "f1b10846a8423d9fe021191c5876190857c3d2a4"
|
||||
|
||||
- name: "sys573.zip"
|
||||
path: "sys573.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
@@ -183,6 +201,7 @@ files:
|
||||
sha1: "e1284add4aaddd5337bd7f4e27614460d52b5b48"
|
||||
|
||||
- name: "konamigv.zip"
|
||||
path: "konamigv.zip"
|
||||
system: arcade
|
||||
required: true
|
||||
category: bios_zip
|
||||
|
||||
@@ -931,6 +931,10 @@ platforms:
|
||||
# retroarch/package.mk:115 at v4.8) and setsettings.sh never sets it, so
|
||||
# RetroArch saves beside each game: no single place.
|
||||
save_directory: null
|
||||
# root's home, which every launcher script gets from /etc/profile
|
||||
# (packages/sysutils/busybox/package.mk:168 and
|
||||
# packages/sysutils/busybox/profile.d/98-busybox.conf:4 at v4.8).
|
||||
home_directory: /storage
|
||||
schedule: monthly
|
||||
target_scraper: emuelec_targets
|
||||
target_source: https://github.com/EmuELEC/EmuELEC/blob/dev/packages/sx05re/emuelec/package.mk
|
||||
|
||||
+252
-2
@@ -4442,6 +4442,206 @@ launchers:
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:172-174, packages/sx05re/emulators/hatarisa/config/conf/Atari-ST-default.cfg:200,\
|
||||
\ packages/sx05re/emulators/hatarisa/package.mk:39, packages/sx05re/emulators/hatarisa/scripts/hatari.start:36,\
|
||||
\ 66, 73"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/artwork
|
||||
passes_to: advmame.rc dir_artwork
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/artwork
|
||||
passes_to: advmame.rc dir_artwork
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/diff
|
||||
passes_to: advmame.rc dir_diff
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/diff
|
||||
passes_to: advmame.rc dir_diff
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/hi
|
||||
passes_to: advmame.rc dir_hi
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/hi
|
||||
passes_to: advmame.rc dir_hi
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/image
|
||||
passes_to: advmame.rc dir_image
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/image
|
||||
passes_to: advmame.rc dir_image
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/inp
|
||||
passes_to: advmame.rc dir_inp
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/inp
|
||||
passes_to: advmame.rc dir_inp
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/memcard
|
||||
passes_to: advmame.rc dir_memcard
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/memcard
|
||||
passes_to: advmame.rc dir_memcard
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/nvram
|
||||
passes_to: advmame.rc dir_nvram
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/nvram
|
||||
passes_to: advmame.rc dir_nvram
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame
|
||||
passes_to: advmame.rc dir_rom
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade
|
||||
passes_to: advmame.rc dir_rom
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
@@ -4449,9 +4649,59 @@ launchers:
|
||||
search_dir: /storage/roms/bios/advmame/samples
|
||||
passes_to: advmame.rc dir_sample
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:9,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:9, packages/sx05re/emulators/advancemame/config/advmame.rc:12,\
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/snap
|
||||
passes_to: advmame.rc dir_snap
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/snap
|
||||
passes_to: advmame.rc dir_snap
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/mame/nvram
|
||||
passes_to: advmame.rc dir_sta
|
||||
fails_when_missing: false
|
||||
depends_on_option: system != arcade
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: AdvanceMame
|
||||
systems:
|
||||
- arcade
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: /storage/roms/arcade/nvram
|
||||
passes_to: advmame.rc dir_sta
|
||||
fails_when_missing: false
|
||||
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
|
||||
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
|
||||
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
|
||||
\ 80"
|
||||
- emulator: SCUMMVMSA
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
|
||||
+26
-6
@@ -4718,16 +4718,26 @@ launchers:
|
||||
\ == \"hbmame\", !string.IsNullOrEmpty(AppConfig[\"bios\"]) && Directory.Exists(AppConfig[\"\
|
||||
bios\"])"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:93-96"
|
||||
- emulator: hbmame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: bios/hbmame/samples
|
||||
passes_to: command line -sp bios/hbmame/samples
|
||||
fails_when_missing: false
|
||||
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
|
||||
\ == \"hbmame\", !string.IsNullOrEmpty(samplePath) && Directory.Exists(samplePath)"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:30, 101, 106-107"
|
||||
- emulator: mame64
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: bios/hbmame/samples when hbmame, else bios/mame/samples
|
||||
passes_to: command line -sp bios/hbmame/samples when hbmame, else bios/mame/samples
|
||||
search_dir: bios/mame/samples
|
||||
passes_to: command line -sp bios/mame/samples
|
||||
fails_when_missing: false
|
||||
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
|
||||
\ == \"hbmame\", !string.IsNullOrEmpty(samplePath) && Directory.Exists(samplePath)"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:101, 106-107"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:30, 101, 106-107"
|
||||
- emulator: mame64
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
@@ -4764,16 +4774,26 @@ launchers:
|
||||
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
|
||||
\ == \"hbmame\", !string.IsNullOrEmpty(iniPath) && Directory.Exists(iniPath)"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:74-76, 167-168"
|
||||
- emulator: hbmame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: bios/hbmame/hash
|
||||
passes_to: command line -hash bios/hbmame/hash
|
||||
fails_when_missing: false
|
||||
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
|
||||
\ == \"hbmame\", !string.IsNullOrEmpty(hashPath) && Directory.Exists(hashPath)"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:30, 172, 177-178"
|
||||
- emulator: mame64
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: bios/hbmame/hash when hbmame, else bios/mame/hash
|
||||
passes_to: command line -hash bios/hbmame/hash when hbmame, else bios/mame/hash
|
||||
search_dir: bios/mame/hash
|
||||
passes_to: command line -hash bios/mame/hash
|
||||
fails_when_missing: false
|
||||
depends_on_option: "messMode == null || messMode.Name == \"mame\" || messMode.Name\
|
||||
\ == \"hbmame\", !string.IsNullOrEmpty(hashPath) && Directory.Exists(hashPath)"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:172, 177-178"
|
||||
source_ref: "emulatorLauncher/Generators/Mame64.Generator.cs:30, 172, 177-178"
|
||||
- emulator: mame64
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
|
||||
+71
-88
@@ -16756,6 +16756,24 @@ launchers:
|
||||
passes_to: "settings.ini [BIOS] SearchDirectory"
|
||||
fails_when_missing: false
|
||||
source_ref: "duckstation/component_prepare.sh:15, 33"
|
||||
- emulator: gzdoom
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: $roms_path/doom
|
||||
passes_to: "gzdoom.ini [IWADSearch.Directories] Path"
|
||||
fails_when_missing: false
|
||||
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:9, gzdoom/component_prepare.sh:23,\
|
||||
\ 27-28"
|
||||
- emulator: gzdoom
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: $roms_path/doom
|
||||
passes_to: "gzdoom.ini [FileSearch.Directories] Path"
|
||||
fails_when_missing: false
|
||||
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:18, gzdoom/component_prepare.sh:23,\
|
||||
\ 27-28"
|
||||
- emulator: gzdoom
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
@@ -16765,6 +16783,15 @@ launchers:
|
||||
fails_when_missing: false
|
||||
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:19, gzdoom/component_prepare.sh:23,\
|
||||
\ 28"
|
||||
- emulator: gzdoom
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
names: []
|
||||
search_dir: $roms_path/bios/gzdoom
|
||||
passes_to: "gzdoom.ini [SoundfontSearch.Directories] Path"
|
||||
fails_when_missing: false
|
||||
source_ref: "gzdoom/rd_assets/rd_config/gzdoom.ini:31, gzdoom/component_prepare.sh:23,\
|
||||
\ 27-28"
|
||||
- emulator: mame
|
||||
build: standalone
|
||||
kind: passes_path
|
||||
@@ -16996,8 +17023,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: xroar.conf rompath
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:290, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:290, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17007,8 +17033,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:291, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:291, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17023,8 +17048,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist d64_1
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:292, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:292, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17038,8 +17062,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist d64_2
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:293, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:293, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17052,8 +17075,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist d32
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:294, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:294, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17065,8 +17087,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist d200e_1
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:295, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:295, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17078,8 +17099,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist d200e_2
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:296, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:296, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17095,8 +17115,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon64
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:297, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:297, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17110,8 +17129,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon64_alt
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:298, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:298, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17125,8 +17143,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon32
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:299, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:299, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17145,8 +17162,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon200e
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:300, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:300, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17163,8 +17179,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon200e_alt
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:301, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:301, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17175,8 +17190,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragon200e_charset
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:302, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:302, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17190,8 +17204,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragonpro_boot
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:303, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:303, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17209,8 +17222,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragonpro_basic
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:304, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:304, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17224,8 +17236,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:305, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:305, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17238,8 +17249,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco_ext
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:306, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:306, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17253,8 +17263,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco1
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:307, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:307, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17268,8 +17277,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco1e
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:308, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:308, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17282,8 +17290,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco1e_ext
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:309, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:309, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17297,8 +17304,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco2
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:310, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:310, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17311,8 +17317,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco2_ext
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:311, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:311, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17326,8 +17331,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco2b
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:312, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:312, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17338,8 +17342,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist deluxecoco
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:313, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:313, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17349,8 +17352,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist deluxecoco1
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:314, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:314, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17360,8 +17362,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist deluxecoco2
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:315, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:315, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17372,8 +17373,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist deluxecoco3
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:316, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:316, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17384,8 +17384,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist mx1600
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:317, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:317, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17395,8 +17394,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist mx1600ext
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:318, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:318, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17406,8 +17404,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco3
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:319, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:319, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17417,8 +17414,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist coco3p
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:320, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:320, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17429,8 +17425,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist glenside_ide
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:321, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:321, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17440,8 +17435,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist mc10
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:322, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:322, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17451,8 +17445,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist alice
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:323, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:323, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17467,8 +17460,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragondos
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:324, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:324, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17481,8 +17473,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dosplus
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:325, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:325, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17495,8 +17486,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist superdos
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:326, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:326, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17508,8 +17498,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist cumana
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:327, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:327, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17535,8 +17524,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist dragondos_compat
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:328, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:328, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17547,8 +17535,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist rsdos
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:329, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:329, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17563,8 +17550,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist delta
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:330, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:330, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17574,8 +17560,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist rsdos_becker
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:331, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:331, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17586,8 +17571,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist mcx128
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:332, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:332, xroar/component_prepare.sh:13-15"
|
||||
- emulator: xroar
|
||||
build: standalone
|
||||
kind: names_searched
|
||||
@@ -17598,8 +17582,7 @@ launchers:
|
||||
search_dir: "$roms_path/coco:$roms_path/dragon32:$roms_path/tanodragon:$bios_path"
|
||||
passes_to: romlist mcx128_azerty
|
||||
fails_when_missing: false
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:333, xroar/component_prepare.sh:13,\
|
||||
\ 15"
|
||||
source_ref: "xroar/rd_assets/rd_config/xroar.conf:333, xroar/component_prepare.sh:13-15"
|
||||
- emulator: retroarch
|
||||
build: libretro
|
||||
kind: core_option
|
||||
|
||||
+16
-3
@@ -1646,12 +1646,15 @@ def resolve_local_file(
|
||||
layout = file_entry.get("layout_path")
|
||||
if layout and layout != dest_hint:
|
||||
plain = {k: v for k, v in file_entry.items() if k != "layout_path"}
|
||||
# A destination outside the BIOS tree says nothing of the collection:
|
||||
# EmuELEC's roms/mame/konamigv.zip is not bios/Arcade/MAME's set.
|
||||
outside = file_entry.get("unprefixed") or file_entry.get("root")
|
||||
answers = [
|
||||
resolve_local_file(
|
||||
plain, db, zip_contents, dest_hint=hint, _depth=_depth,
|
||||
data_dir_registry=data_dir_registry,
|
||||
)
|
||||
for hint in (dest_hint, str(layout))
|
||||
for hint in ((str(layout),) if outside else (dest_hint, str(layout)))
|
||||
]
|
||||
for found in answers:
|
||||
if found[0] is not None and (
|
||||
@@ -3098,12 +3101,14 @@ def standalone_layout_path(entry: dict, profile: dict) -> str | None:
|
||||
|
||||
``standalone_path`` when the entry has one. A profile with no libretro
|
||||
build has one layout, so its ``path`` is that layout: UAE4All2 reads
|
||||
kickstarts/kick13.rom below its working directory.
|
||||
kickstarts/kick13.rom below its working directory. So does an entry only
|
||||
the standalone build reads (``mode: standalone``), whose destination is
|
||||
its ``path``: Dolphin's Load/Firmware/rtl_bt/ under its User directory.
|
||||
"""
|
||||
own = entry.get("standalone_path")
|
||||
if own:
|
||||
return own
|
||||
if "libretro" in str(profile.get("type", "")):
|
||||
if "libretro" in str(profile.get("type", "")) and entry.get("mode") != "standalone":
|
||||
return None
|
||||
return entry.get("path") or None
|
||||
|
||||
@@ -3230,6 +3235,14 @@ def platform_layouts(
|
||||
tree, path = placed
|
||||
moved = {**f, "standalone_path": path,
|
||||
"layout_path": standalone_layout_path(f, profile)}
|
||||
if f.get("load_from"):
|
||||
# The build's own root no longer applies: RetroDECK hands
|
||||
# Cemu's MLC, read from its data directory, to bios/cemu.
|
||||
load_from = f["load_from"]
|
||||
moved["load_from"] = {
|
||||
**(load_from if isinstance(load_from, dict) else {"libretro": load_from}),
|
||||
"standalone": "system_dir",
|
||||
}
|
||||
if tree == "install":
|
||||
# Below the roms root inside the install tree (AmberELEC's
|
||||
# /storage/roms): a plain dest the platform prefix skips.
|
||||
|
||||
+74
-16
@@ -312,6 +312,11 @@ def launcher_places(config: dict) -> list[LauncherPlace]:
|
||||
# component scripts $bios_path.
|
||||
BIOS_ROOT_VARIABLES = ("$biosdir", "$home/RetroPie/BIOS", "${biosPath}", "$bios_path")
|
||||
|
||||
# The name a platform's launch code gives its roms root: RetroDECK's
|
||||
# component scripts write $roms_path (retrodeck_launchers), the setting whose
|
||||
# default is the roms root (config/retrodeck/retrodeck.json:5).
|
||||
ROMS_ROOT_VARIABLES = ("$roms_path", "${roms_path}")
|
||||
|
||||
# The kinds that hand an emulator a whole directory. A scans_dir record sets
|
||||
# the directory the emulator picks its file from: ROCKNIX writes ARMSX2's
|
||||
# [Folders] Bios, EmuDeck PCSX2's.
|
||||
@@ -341,20 +346,29 @@ INSTALL_TREE = "install"
|
||||
# A folder of neither tree, which no pack and no installer can fill.
|
||||
OUTSIDE_TREE = "outside"
|
||||
Place = tuple[str, str]
|
||||
# The binding key of a search list standing for the whole layout: the
|
||||
# directories hold the layout's files themselves (XRoar's ROMs, MAME's sets),
|
||||
# never its subfolders.
|
||||
SEARCHED_FILES = "*"
|
||||
|
||||
_HOME = re.compile(r"^(?:\$\{HOME\}|\$HOME|\$home|~)(?=/|$)")
|
||||
# Flatpak sets XDG_DATA_HOME to ~/.var/app/<id>/data inside the sandbox.
|
||||
_FLATPAK_DATA = re.compile(r"^~/\.var/app/[^/]+/data(?=/|$)")
|
||||
|
||||
|
||||
def normalize_handle(token: str) -> str:
|
||||
def normalize_handle(token: str, home: str = "") -> str:
|
||||
"""One spelling for a path, setting or function a launcher record names.
|
||||
|
||||
``$home``, ``$HOME``, ``${HOME}`` and ``~`` are one directory, and a
|
||||
Flatpak's data directory is its ``$XDG_DATA_HOME``.
|
||||
Flatpak's data directory is its ``$XDG_DATA_HOME``. ``home`` is the
|
||||
platform's home directory spelled out (``home_directory``): EmuELEC
|
||||
links /storage/.local/share/flycast, Flycast's ~/.local/share/flycast.
|
||||
"""
|
||||
token = token.strip().strip("\"'").rstrip(",;").rstrip("/")
|
||||
token = token.removesuffix("()")
|
||||
home = home.rstrip("/")
|
||||
if home and _below(token, home) is not None:
|
||||
token = "~" + token[len(home):]
|
||||
token = _HOME.sub("~", token)
|
||||
return _FLATPAK_DATA.sub("$XDG_DATA_HOME", token)
|
||||
|
||||
@@ -438,13 +452,29 @@ def native_systems(config: dict) -> dict[str, str]:
|
||||
return found
|
||||
|
||||
|
||||
def _listed_directories(raw: str) -> list[str] | None:
|
||||
"""The directories of a colon-separated search path, None for one directory.
|
||||
# How the launcher extractors spell the folder holding the launched game:
|
||||
# RetroBat's Path.GetDirectoryName(rom) (retrobat_launchers._KNOWN), KNULLI's
|
||||
# os.path.dirname(rom) and its software list folder (mameGenerator.py:113-116).
|
||||
GAME_FOLDERS = ("<rom directory>", "<romDirname>", "<softDir>")
|
||||
|
||||
XRoar's rompath is such a list (RetroDECK writes four directories), each
|
||||
entry a path or a variable spelling one. A Windows drive letter or a
|
||||
backslash means a single path.
|
||||
|
||||
def _listed_directories(raw: str) -> list[str] | None:
|
||||
"""The directories of a search path, None for one directory.
|
||||
|
||||
XRoar's rompath is a colon-separated list (RetroDECK writes four
|
||||
directories), each entry a path or a variable spelling one. A Windows
|
||||
drive letter or a backslash means a single path. MAME splits its search
|
||||
paths on semicolons whatever the system (src/emu/fileio.cpp:53-58):
|
||||
RetroBat passes `-rp bios;<rom directory>`, KNULLI `-rompath
|
||||
<romDirname>;/userdata/bios/mame;/userdata/bios`. The game's own folder
|
||||
is no folder a pack fills, so it gives no directory.
|
||||
"""
|
||||
if ";" in raw:
|
||||
parts = [p.strip() for p in raw.split(";") if p.strip()]
|
||||
kept = [p for p in parts if p not in GAME_FOLDERS]
|
||||
if kept and all(not re.search(r"[\s,<>]", p) for p in kept):
|
||||
return kept
|
||||
return None
|
||||
if ":" not in raw or "\\" in raw or re.match(r"^[A-Za-z]:", raw):
|
||||
return None
|
||||
parts = [p.strip() for p in raw.split(":")]
|
||||
@@ -464,6 +494,7 @@ def handed_directories(config: dict) -> list[HandedDirectory]:
|
||||
holds <system> gives one directory per system the platform declares.
|
||||
"""
|
||||
base = str(config.get("base_destination") or "bios")
|
||||
home = str(config.get("home_directory") or "")
|
||||
natives = native_systems(config)
|
||||
declared = {d.lower() for d in declared_destinations(config)}
|
||||
found: list[HandedDirectory] = []
|
||||
@@ -490,7 +521,7 @@ def handed_directories(config: dict) -> list[HandedDirectory]:
|
||||
if any(re.search(r"[\s,:;]", part) for part in parts):
|
||||
continue
|
||||
for part in parts:
|
||||
directory = normalize_handle(part)
|
||||
directory = normalize_handle(part, home)
|
||||
if passes_to.startswith(WORKING_DIRECTORY_PASSED):
|
||||
# The program runs from the directory: what its code
|
||||
# reads through getcwd(), or relative to it, is below it.
|
||||
@@ -499,7 +530,7 @@ def handed_directories(config: dict) -> list[HandedDirectory]:
|
||||
handles = frozenset(
|
||||
handle
|
||||
for token in passes_to.split()
|
||||
if (handle := normalize_handle(token)) and handle != directory
|
||||
if (handle := normalize_handle(token, home)) and handle != directory
|
||||
) | ini_keys(passes_to)
|
||||
folder = _folder_in_bios(part, base)
|
||||
for emulator in (e.strip() for e in str(record.get("emulator", "")).split(",")):
|
||||
@@ -565,8 +596,15 @@ def folder_in_roms(directory: str, config: dict) -> str | None:
|
||||
(``roms_root.path``): ROCKNIX's /storage/roms, which holds its BIOS
|
||||
folder and the folders its launchers run programs from.
|
||||
"""
|
||||
from common import ROMS_ROOT # noqa: PLC0415
|
||||
from common import ROMS_ROOT, outer_layout # noqa: PLC0415
|
||||
|
||||
spelled = directory.strip().rstrip("/")
|
||||
for variable in ROMS_ROOT_VARIABLES:
|
||||
if outer_layout(config, ROMS_ROOT) and (
|
||||
spelled == variable or spelled.startswith(variable + "/")
|
||||
):
|
||||
rest = spelled[len(variable) + 1:]
|
||||
return None if re.search(r"[\s<>$:;]", rest) else rest
|
||||
return folder_in_root(directory, config, ROMS_ROOT)
|
||||
|
||||
|
||||
@@ -716,7 +754,13 @@ def _bind(
|
||||
one after the other: openMSX's filepool, XRoar's rompath. A file in any
|
||||
of them is read, so the pool gives one: the directory the platform's own
|
||||
list already fills (Batocera's bios/openmsx beside bios/Machines), else
|
||||
the first of the BIOS tree, else the first a pack can fill.
|
||||
the first of the BIOS tree, else the first a pack can fill. A list that
|
||||
already holds the folder the layout's files take without the launcher
|
||||
keeps them there: KNULLI starts MAME with -rompath
|
||||
<romDirname>;/userdata/bios/mame;/userdata/bios, and the sets at the BIOS
|
||||
root stay. A pool standing for the whole layout holds its files
|
||||
directly, not its folders (SEARCHED_FILES): MAME reads hash/ and
|
||||
samples/ through other settings.
|
||||
"""
|
||||
found: dict[str, set[Place]] = {}
|
||||
pooled: dict[str, list[tuple[bool, Place]]] = {}
|
||||
@@ -750,11 +794,14 @@ def _bind(
|
||||
for rest, place in places or [("", (OUTSIDE_TREE, ""))]:
|
||||
found.setdefault(rest, set()).add(place)
|
||||
for sub, entries in pooled.items():
|
||||
# The directory the platform's own list fills, else the first of the
|
||||
# BIOS tree, else the first a pack fills.
|
||||
# The folder the files already take, else the directory the
|
||||
# platform's own list fills, else the first of the BIOS tree, else
|
||||
# the first a pack fills.
|
||||
unmoved = [p for _held, p in entries if p == (BIOS_TREE, sub)]
|
||||
filled = [p for held, p in entries if held]
|
||||
in_bios = [p for _held, p in entries if p[0] == BIOS_TREE]
|
||||
found.setdefault(sub, set()).add((filled or in_bios or [p for _h, p in entries])[0])
|
||||
chosen = (unmoved or filled or in_bios or [p for _h, p in entries])[0]
|
||||
found.setdefault(sub or SEARCHED_FILES, set()).add(chosen)
|
||||
return found
|
||||
|
||||
|
||||
@@ -844,9 +891,15 @@ def bound_path(path: str, bindings: dict[str, Place]) -> Place | None:
|
||||
|
||||
The longest subfolder that contains the path wins: a link of
|
||||
kickstarts/ places kickstarts/kick13.rom even when the whole layout is
|
||||
bound elsewhere.
|
||||
bound elsewhere. SEARCHED_FILES covers the files at the root of the
|
||||
layout alone.
|
||||
"""
|
||||
for sub in sorted(bindings, key=len, reverse=True):
|
||||
if sub == SEARCHED_FILES:
|
||||
if "/" in path:
|
||||
continue
|
||||
root, folder = bindings[sub]
|
||||
return (root, f"{folder}/{path}" if folder else path)
|
||||
if sub and not path.startswith(sub + "/"):
|
||||
continue
|
||||
rest = path[len(sub) + 1:] if sub else path
|
||||
@@ -1087,7 +1140,9 @@ class LauncherLayer:
|
||||
# core asked for it: the pack puts a file there either way.
|
||||
reported_at: dict[str, dict] = {}
|
||||
for _emulator, _standalone, _entry, report in candidates:
|
||||
if report.get("in_repo"):
|
||||
# A file the layout reads outside the BIOS tree fills no
|
||||
# destination of it.
|
||||
if report.get("in_repo") and not report.get("unplaced"):
|
||||
destination = sanitize_pack_path(report.get("path") or report.get("name", ""))
|
||||
reported_at.setdefault(destination, report)
|
||||
by_layout: dict[tuple[str, bool], list[tuple[dict, dict]]] = {}
|
||||
@@ -1131,6 +1186,9 @@ class LauncherLayer:
|
||||
continue
|
||||
if isinstance(filled, dict):
|
||||
added.append(filled)
|
||||
# The launcher hands the emulator that file from the BIOS
|
||||
# tree: read outside it no more.
|
||||
settled.update(id(report) for _c, report in matched if report.get("unplaced"))
|
||||
if place.stands_for_default:
|
||||
# The emulator opens the launcher's file instead of its
|
||||
# own name, so a copy under that name is read by nobody:
|
||||
|
||||
@@ -1462,7 +1462,7 @@ def _collect_emulator_extras(
|
||||
# covered elsewhere belongs to another program's file.
|
||||
# Nor is one placed outside the BIOS tree by the layout.
|
||||
if (fname not in covered_names or f.get("unsourceable") or f.get("unplaced")
|
||||
or f.get("root") in OUTER_ROOTS or f.get("unprefixed")):
|
||||
or f.get("root") in OUTER_ROOTS):
|
||||
continue
|
||||
# Installed with the emulator or by the platform's package,
|
||||
# as the first pass already decided for the same entry.
|
||||
@@ -1492,7 +1492,12 @@ def _collect_emulator_extras(
|
||||
# of the directory core files go to, which the platform may not
|
||||
# declare (Recalbox has its System Cards under pcenginecd/ only,
|
||||
# geargrafx reads them from the root).
|
||||
full_dest = prefixed_destination(dest, extras_prefix)
|
||||
# A path of the install tree outside the BIOS folder keeps no
|
||||
# prefix: EmuELEC's dolphin/dolphin-emu/GBA/gba_bios.bin.
|
||||
full_dest = (
|
||||
sanitize_pack_path(dest) if f.get("unprefixed")
|
||||
else prefixed_destination(dest, extras_prefix)
|
||||
)
|
||||
if full_dest in seen_dests and full_dest not in taken:
|
||||
continue
|
||||
if full_dest in taken and full_dest not in seen and fname not in platform_names:
|
||||
@@ -1538,6 +1543,8 @@ def _collect_emulator_extras(
|
||||
extra["contents"] = f["contents"]
|
||||
if f.get("system_dir"):
|
||||
extra["system_dir"] = f["system_dir"]
|
||||
if f.get("unprefixed"):
|
||||
extra["unprefixed"] = True
|
||||
extra["claim_order"] = (2, 0, emu_name)
|
||||
if _take(extra, full_dest, seen_dests, taken):
|
||||
extras.append(extra)
|
||||
|
||||
@@ -37,11 +37,13 @@ class Launcher:
|
||||
device: str | None = None
|
||||
# The machines the platform offers under the record's systems.
|
||||
machines: list[str] | None = None
|
||||
# The platform systems the record is written for, none for every one.
|
||||
systems: list[str] | None = None
|
||||
|
||||
def entry(self) -> dict[str, Any]:
|
||||
"""The platform YAML form, in a fixed key order, unset keys left out."""
|
||||
order = (
|
||||
"emulator", "build", "kind", "slot", "names", "expands",
|
||||
"emulator", "systems", "build", "kind", "slot", "names", "expands",
|
||||
"case_insensitive", "search_dir", "passes_to",
|
||||
"fails_when_missing", "fails_scope", "depends_on_option",
|
||||
"device", "machines", "source_ref",
|
||||
|
||||
@@ -38,6 +38,8 @@ EMULATORS = f"{SX05RE}/emulators"
|
||||
LIBRETRO = f"{SX05RE}/libretro"
|
||||
RETROARCH_MK = f"{SX05RE}/libretro_base/retroarch/package.mk"
|
||||
BIOS_ROOT = "/storage/roms/bios"
|
||||
# The roms root that holds it (packages/sx05re/libretro_base/retroarch/package.mk:112,117).
|
||||
ROMS_ROOT = "/storage/roms"
|
||||
|
||||
_EMU_TEST = re.compile(r'\$\{?EMU\}?"?\s*==?\s*"([^"]+)"')
|
||||
_ARM = re.compile(r'^\s*((?:"[^"]+"\|?)+)\)\s*$')
|
||||
@@ -487,8 +489,18 @@ def hatari(tree: RepoTree, runs: Runs) -> list[Launcher]:
|
||||
]
|
||||
|
||||
|
||||
_ADVMAME_SYSTEM = re.compile(r'^\s*if \[\[ "\$\{1\}" = "([\w-]+)" \]\]; then$')
|
||||
_ADVMAME_SED = re.compile(r'^\s*sed -i "s\|([^|]+)\|([^|]+)\|g" \$\{CONFIG_DIR\}/advmame\.rc$')
|
||||
|
||||
|
||||
def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
|
||||
"""Folder keys of the advmame.rc package.mk installs, one per device branch."""
|
||||
"""Folder keys of the advmame.rc package.mk installs, one per device branch.
|
||||
|
||||
A key under the roms root is one too: dir_rom is /storage/roms/mame. The
|
||||
start script rewrites the config for the system it is launched for
|
||||
(advmame.sh:26-30): /roms/mame becomes /roms/arcade for arcade, so that
|
||||
system reads its own record.
|
||||
"""
|
||||
package = f"{EMULATORS}/advancemame"
|
||||
mk = _read(tree, f"{package}/package.mk")
|
||||
installs = [
|
||||
@@ -501,8 +513,8 @@ def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
|
||||
by_value: dict[tuple[tuple[str, str], ...], list[tuple[str, set[int], int]]] = {}
|
||||
for mk_line, file in installs:
|
||||
path = f"{package}/config/{file}"
|
||||
keys = [s for s in settings(tree.read(path), separator=" ") if _under(s.value)]
|
||||
if not keys:
|
||||
keys = [s for s in settings(tree.read(path), separator=" ") if _under(s.value, ROMS_ROOT)]
|
||||
if not any(_under(s.value) for s in keys):
|
||||
raise LauncherPatternMissing(path, f"key naming a folder under {BIOS_ROOT}")
|
||||
value = tuple((s.key, s.value) for s in keys)
|
||||
by_value.setdefault(value, []).append((path, {s.line for s in keys}, mk_line))
|
||||
@@ -511,25 +523,41 @@ def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
|
||||
((value, configs),) = by_value.items()
|
||||
script = _read(tree, f"{package}/bin/advmame.sh")
|
||||
run_line, _ = script.find(r"^\s*(?:\w+=\S+ )*advmame ", "advmame start")
|
||||
test_line, test = script.find(_ADVMAME_SYSTEM.pattern, "system test", end=run_line)
|
||||
sed_line, sed = script.find(_ADVMAME_SED.pattern, "system rewrite", test_line + 1, test_line + 1)
|
||||
name = posixpath.basename(script.path)
|
||||
refs = [
|
||||
runs.ref(name),
|
||||
*((path, lines) for path, lines, _ in configs),
|
||||
(mk.path, {mk_line for _, _, mk_line in configs}),
|
||||
(script.path, {run_line}),
|
||||
]
|
||||
return [
|
||||
Launcher(
|
||||
emulator=runs.emulator(name),
|
||||
build="standalone",
|
||||
kind="passes_path",
|
||||
names=[],
|
||||
source_ref=source_ref(refs),
|
||||
search_dir=folder,
|
||||
passes_to=f"advmame.rc {key}",
|
||||
)
|
||||
for key, folder in value
|
||||
]
|
||||
|
||||
def refs(*lines: int) -> str:
|
||||
return source_ref([
|
||||
runs.ref(name),
|
||||
*((path, lines) for path, lines, _ in configs),
|
||||
(mk.path, {mk_line for _, _, mk_line in configs}),
|
||||
(script.path, {run_line, *lines}),
|
||||
])
|
||||
|
||||
found = []
|
||||
for key, folder in value:
|
||||
rewritten = folder.replace(sed.group(1), sed.group(2))
|
||||
if rewritten != folder:
|
||||
# Every system but the one the script rewrites the key for, and
|
||||
# that system with the rewritten folder.
|
||||
found.append(Launcher(
|
||||
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
|
||||
source_ref=refs(test_line, sed_line), search_dir=folder,
|
||||
passes_to=f"advmame.rc {key}",
|
||||
depends_on_option=f"system != {test.group(1)}",
|
||||
))
|
||||
found.append(Launcher(
|
||||
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
|
||||
source_ref=refs(test_line, sed_line), search_dir=rewritten,
|
||||
passes_to=f"advmame.rc {key}", systems=[test.group(1)],
|
||||
))
|
||||
continue
|
||||
found.append(Launcher(
|
||||
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
|
||||
source_ref=refs(), search_dir=folder, passes_to=f"advmame.rc {key}",
|
||||
))
|
||||
return found
|
||||
|
||||
|
||||
def mame(tree: RepoTree, runs: Runs) -> list[Launcher]:
|
||||
|
||||
@@ -3336,7 +3336,11 @@ def mame(sources: dict[str, Source]) -> list[Record]:
|
||||
raise LauncherPatternMissing(own.path, "MAME folder arguments")
|
||||
records = _covered(
|
||||
own,
|
||||
[_with_conditions(record, conditions) for record, conditions in found],
|
||||
[
|
||||
split
|
||||
for record, conditions in found
|
||||
for split in _per_emulator(own, _with_conditions(record, conditions))
|
||||
],
|
||||
# The bezel artwork folder is read by the launcher, not passed.
|
||||
skip=(_BIOS_GUARD, r"ConfigureBezels\("),
|
||||
)
|
||||
@@ -3424,6 +3428,42 @@ def xroar(sources: dict[str, Source]) -> list[Record]:
|
||||
return _covered(src, records)
|
||||
|
||||
|
||||
_EMULATOR_BRANCH = re.compile(r"([^\s;<>]+) when (\w+), else ([^\s;<>]+)")
|
||||
|
||||
|
||||
def _per_emulator(src: Source, record: Record) -> list[Record]:
|
||||
"""A directory chosen by the emulator the generator runs, one record each.
|
||||
|
||||
Mame64.Generator.cs sets `bool hbmame = emulator == "hbmame";` and passes
|
||||
`-sp bios/hbmame/samples` for it, bios/mame/samples for mame64. A choice
|
||||
on any other condition is left as it reads.
|
||||
"""
|
||||
rendered = str(record.get("search_dir", ""))
|
||||
branch = _EMULATOR_BRANCH.fullmatch(rendered)
|
||||
if branch is None:
|
||||
return [record]
|
||||
chosen, flag, default = branch.groups()
|
||||
declared = re.search(rf'bool {flag} = emulator == "([\w.-]+)";', _code(src))
|
||||
if declared is None:
|
||||
return [record]
|
||||
ref = str(record["source_ref"])
|
||||
if not ref.startswith(src.path + ":"):
|
||||
raise LauncherPatternMissing(src.path, f"source of the directory choice {rendered!r}")
|
||||
spans = [
|
||||
(int(first), int(last or first))
|
||||
for first, _, last in (s.partition("-") for s in ref[len(src.path) + 1:].split(", "))
|
||||
]
|
||||
spans.append(src.lines(declared.start(), declared.end()))
|
||||
prefix = str(record["passes_to"]).removesuffix(rendered).strip()
|
||||
out = []
|
||||
for emulator, directory in ((declared.group(1), chosen), (record["emulator"], default)):
|
||||
split = {k: v for k, v in record.items() if k != "source_ref"}
|
||||
split.update(emulator=emulator, search_dir=directory, passes_to=f"{prefix} {directory}")
|
||||
split["source_ref"] = _path_parts(src, *spans)
|
||||
out.append(split)
|
||||
return out
|
||||
|
||||
|
||||
_SYSTEM_BRANCH = re.compile(r'(\S+), or (\S+) when system == "([\w.-]+)"')
|
||||
|
||||
|
||||
|
||||
@@ -30,6 +30,10 @@ except ImportError:
|
||||
|
||||
BIOS = "$bios_path"
|
||||
PLACEHOLDER = "RETRODECKBIOSDIR"
|
||||
# The roms folder in the same presets: GZDoom's IWADSearch.Directories holds
|
||||
# RETRODECKROMSDIR/doom (gzdoom/rd_assets/rd_config/gzdoom.ini:9), which
|
||||
# gzdoom/component_prepare.sh:27 rewrites to $roms_path.
|
||||
ROMS_PLACEHOLDER = "RETRODECKROMSDIR"
|
||||
CORE_OPTIONS = "retroarch/rd_assets/rd_config/retroarch-core-options.cfg"
|
||||
# The component that runs libretro cores.
|
||||
LIBRETRO_COMPONENT = "retroarch"
|
||||
@@ -282,7 +286,11 @@ class Component:
|
||||
)
|
||||
|
||||
def _preset(self, script: Script, number: int, words: list[str]) -> None:
|
||||
"""`sed -i "s#RETRODECKBIOSDIR#${bios_path}#g" "$cfg"` on a preset copied just above."""
|
||||
"""`sed -i "s#RETRODECKBIOSDIR#${bios_path}#g" "$cfg"` on a preset copied just above.
|
||||
|
||||
Each line naming the BIOS or the roms folder is a record: a search
|
||||
list can mix them (XRoar's rompath, GZDoom's IWAD directories).
|
||||
"""
|
||||
target = words[-1]
|
||||
substitutions = self._substitutions(script, target)
|
||||
copied = None
|
||||
@@ -302,17 +310,25 @@ class Component:
|
||||
stripped = line.strip()
|
||||
if re.fullmatch(r"\[[^\]]+\]", stripped):
|
||||
section = stripped
|
||||
if PLACEHOLDER not in stripped or stripped.startswith("#"):
|
||||
if stripped.startswith("#") or not any(
|
||||
p in stripped for p in (PLACEHOLDER, ROMS_PLACEHOLDER)
|
||||
):
|
||||
continue
|
||||
setting = re.match(r"^([\w.$()-]+)\s*(?:=|\s)\s*(.+)$", stripped)
|
||||
if setting is None:
|
||||
raise LauncherPatternMissing(f"{preset}:{line_no}", f"placeholder in {stripped}")
|
||||
named = [p for p in substitutions if p in stripped]
|
||||
if PLACEHOLDER not in stripped and not named:
|
||||
# A roms placeholder the script leaves as written.
|
||||
continue
|
||||
key, value = setting.group(1), _unquote(setting.group(2))
|
||||
for placeholder, variable in substitutions.items():
|
||||
for placeholder, (variable, _line) in substitutions.items():
|
||||
value = value.replace(placeholder, variable)
|
||||
where = f"{section} {key}" if section else key
|
||||
found += 1
|
||||
applied = [(script.path, copied[0]), (script.path, number)]
|
||||
found += PLACEHOLDER in stripped
|
||||
applied = [(script.path, copied[0]), (script.path, number)] + [
|
||||
(script.path, substitutions[p][1]) for p in named
|
||||
]
|
||||
self.record(
|
||||
"passes_path", [], [(preset, line_no)] + applied,
|
||||
search_dir=value, passes_to=f"{self.config_name(target)} {where}",
|
||||
@@ -324,12 +340,13 @@ class Component:
|
||||
raise LauncherPatternMissing(preset, f"no {PLACEHOLDER} line")
|
||||
|
||||
@staticmethod
|
||||
def _substitutions(script: Script, target: str) -> dict[str, str]:
|
||||
def _substitutions(script: Script, target: str) -> dict[str, tuple[str, int]]:
|
||||
"""Each placeholder sed rewrites in ``target``: (variable, line)."""
|
||||
found = {}
|
||||
for line in script.lines:
|
||||
for line_no, line in enumerate(script.lines, 1):
|
||||
for m in re.finditer(r"s#(RETRODECK\w+)#\$\{?(\w+)\}?#g[\"']?\s+\"([^\"]+)\"", line):
|
||||
if m.group(3) == target:
|
||||
found[m.group(1)] = f"${m.group(2)}"
|
||||
found[m.group(1)] = (f"${m.group(2)}", line_no)
|
||||
return found
|
||||
|
||||
def romlists(
|
||||
|
||||
+4
-1
@@ -809,7 +809,10 @@ def find_undeclared_files(
|
||||
# Read below the roms directory (ROCKNIX's roms/pico-8)
|
||||
# or in an emulator folder (RetroBat's emulators/pico8).
|
||||
entry["root"] = f["root"]
|
||||
elif launcher_layer and not save_root:
|
||||
if launcher_layer and not save_root and f.get("root") not in OUTER_ROOTS:
|
||||
# One read outside the BIOS tree is still served where a
|
||||
# launcher links that very file: RetroDECK links Cemu's
|
||||
# keys.txt to bios/cemu/keys.txt.
|
||||
launcher_candidates.append((emu_name, is_standalone, f, entry))
|
||||
keys = set_keys((emu_name, is_standalone), f)
|
||||
if duplicate:
|
||||
|
||||
@@ -721,5 +721,190 @@ class Quasi88OnRetroPie(unittest.TestCase):
|
||||
)
|
||||
|
||||
|
||||
class FlycastOnEmuELEC(unittest.TestCase):
|
||||
"""EmuELEC links /storage/.local/share/flycast to bios/dc (flycast.sh:11-14),
|
||||
and root's home is /storage (busybox profile.d/98-busybox.conf:4)."""
|
||||
|
||||
def test_the_home_directory_is_spelled_as_home(self) -> None:
|
||||
from launchers import normalize_handle
|
||||
|
||||
self.assertEqual(
|
||||
normalize_handle("/storage/.local/share/flycast", "/storage"), "~/.local/share/flycast"
|
||||
)
|
||||
self.assertEqual(normalize_handle("/storage", "/storage/"), "~")
|
||||
self.assertEqual(normalize_handle("/storagex/a", "/storage"), "/storagex/a")
|
||||
self.assertEqual(
|
||||
normalize_handle("/storage/.local/share/flycast"), "/storage/.local/share/flycast"
|
||||
)
|
||||
|
||||
def test_the_bios_lands_in_dc(self) -> None:
|
||||
profile = load_emulator_profiles(str(REPO_ROOT / "emulators"))["flycast"]
|
||||
config = load_platform_config("emuelec", str(REPO_ROOT / "platforms"))
|
||||
layouts = platform_layouts("flycast", profile, standalone_set(config))
|
||||
(view,) = [v for v, standalone in layouts if standalone]
|
||||
self.assertTrue(view["files"])
|
||||
for entry in view["files"]:
|
||||
self.assertEqual(entry["standalone_path"], "dc/" + entry["layout_path"])
|
||||
|
||||
|
||||
def standalone_view(emulator: str, platform: str) -> dict:
|
||||
profile = load_emulator_profiles(str(REPO_ROOT / "emulators"))[emulator]
|
||||
config = load_platform_config(platform, str(REPO_ROOT / "platforms"))
|
||||
(view,) = [v for v, standalone in platform_layouts(emulator, profile, standalone_set(config))
|
||||
if standalone]
|
||||
return view
|
||||
|
||||
|
||||
class Eka2l1OnRetroBat(unittest.TestCase):
|
||||
"""RetroBat writes data-storage = bios/eka2l1/data (Eka2l1.Generator.cs:153, 156)."""
|
||||
|
||||
def test_the_device_rom_lands_in_eka2l1_data(self) -> None:
|
||||
view = standalone_view("eka2l1", "retrobat")
|
||||
(rom,) = [e for e in view["files"] if e["name"] == "SYM.ROM"]
|
||||
self.assertEqual(rom["standalone_path"], "eka2l1/data/roms/nem-4/SYM.ROM")
|
||||
# Shipped beside the executable, in RetroBat's emulator folder.
|
||||
for entry in view["files"]:
|
||||
if entry.get("mode") == "standalone":
|
||||
self.assertEqual(entry.get("unplaced"), "outside_bios_folder", entry["name"])
|
||||
|
||||
|
||||
class CemuOnRetroDECK(unittest.TestCase):
|
||||
"""RetroDECK sets mlc_path to $bios_path/cemu (cemu/component_prepare.sh:14, 29)
|
||||
and keeps Cemu's user data in its Flatpak's $XDG_DATA_HOME/Cemu."""
|
||||
|
||||
def test_the_mlc_lands_in_cemu(self) -> None:
|
||||
view = standalone_view("cemu", "retrodeck")
|
||||
mlc = [e for e in view["files"] if (e.get("layout_path") or "").startswith("mlc01/")]
|
||||
self.assertTrue(mlc)
|
||||
for entry in mlc:
|
||||
self.assertEqual(
|
||||
entry["standalone_path"], "cemu/" + entry["layout_path"].removeprefix("mlc01/")
|
||||
)
|
||||
(otp,) = [e for e in view["files"] if e["name"] == "otp.bin"]
|
||||
self.assertEqual(otp.get("unplaced"), "outside_bios_folder")
|
||||
|
||||
|
||||
class DolphinUserDirectory(unittest.TestCase):
|
||||
"""EmuELEC runs Dolphin with XDG_DATA_HOME=/storage/roms/dolphin (dolphin.sh:28),
|
||||
RetroDECK links $XDG_DATA_HOME/dolphin-emu/Triforce to bios/Triforce
|
||||
(dolphin/component_prepare.sh:30, 49)."""
|
||||
|
||||
def test_emuelec_installs_the_user_directory_below_its_roms(self) -> None:
|
||||
view = standalone_view("dolphin", "emuelec")
|
||||
placed = {e["name"]: e["standalone_path"] for e in view["files"] if e.get("layout_path")}
|
||||
self.assertEqual(placed["segaboot.gcm"], "dolphin/dolphin-emu/Triforce/segaboot.gcm")
|
||||
# A standalone-only entry's path is its place in the User directory.
|
||||
self.assertEqual(
|
||||
placed["rtl8723a_fw.bin"], "dolphin/dolphin-emu/Load/Firmware/rtl_bt/rtl8723a_fw.bin"
|
||||
)
|
||||
self.assertTrue(all(e.get("unprefixed") for e in view["files"] if e.get("layout_path")))
|
||||
|
||||
def test_retrodeck_places_triforce_alone(self) -> None:
|
||||
view = standalone_view("dolphin", "retrodeck")
|
||||
placed = {e["name"]: e["standalone_path"] for e in view["files"] if e.get("layout_path")}
|
||||
self.assertEqual(placed, {"segaboot.gcm": "Triforce/segaboot.gcm"})
|
||||
(ipl, *_) = [e for e in view["files"] if e["name"] == "IPL.bin"]
|
||||
self.assertEqual(ipl.get("unplaced"), "outside_bios_folder")
|
||||
|
||||
|
||||
class MameSearchPaths(unittest.TestCase):
|
||||
"""MAME reads each semicolon-separated search path in turn
|
||||
(src/emu/fileio.cpp:53-58, 330-392)."""
|
||||
|
||||
def sets(self, view: dict) -> list[dict]:
|
||||
return [e for e in view["files"] if e.get("category") == "bios_zip"]
|
||||
|
||||
def test_retrobat_keeps_the_sets_at_the_bios_root(self) -> None:
|
||||
# -rp bios;<rom directory> (Mame64.Generator.cs:93-96).
|
||||
view = standalone_view("mame", "retrobat")
|
||||
sets = self.sets(view)
|
||||
self.assertGreater(len(sets), 1000)
|
||||
for entry in sets:
|
||||
self.assertEqual(entry["standalone_path"], entry["name"])
|
||||
self.assertNotIn("unplaced", entry)
|
||||
(bbc,) = [e for e in view["files"] if e["name"] == "bbc.zip"]
|
||||
# -sp bios/mame/samples, hbmame's folder being another record
|
||||
# (Mame64.Generator.cs:30, 101, 106-107).
|
||||
self.assertEqual(bbc["standalone_path"], "mame/samples/bbc.zip")
|
||||
|
||||
def test_knulli_keeps_the_root_listed_after_bios_mame(self) -> None:
|
||||
# -rompath <romDirname>;/userdata/bios/mame;/userdata/bios (mameGenerator.py:116-122).
|
||||
view = standalone_view("mame", "knulli")
|
||||
self.assertTrue(all(e["standalone_path"] == e["name"] for e in self.sets(view)))
|
||||
(bbc,) = [e for e in view["files"] if e["name"] == "bbc.zip"]
|
||||
self.assertEqual(bbc["standalone_path"], "mame/samples/bbc.zip")
|
||||
|
||||
def test_retropie_moves_the_sets_to_bios_mame(self) -> None:
|
||||
# rompath $romdir/mame;$romdir/arcade;$biosdir/mame (mame.sh:133).
|
||||
view = standalone_view("mame", "retropie")
|
||||
self.assertTrue(all(
|
||||
e["standalone_path"] == "mame/" + e["name"] for e in self.sets(view)
|
||||
))
|
||||
|
||||
def test_retrodeck_reads_samples_in_mame_sa(self) -> None:
|
||||
# samplepath $bios_path/mame-sa/samples (mame/component_prepare.sh:94, 117).
|
||||
view = standalone_view("mame", "retrodeck")
|
||||
(bbc,) = [e for e in view["files"] if e["name"] == "bbc.zip"]
|
||||
self.assertEqual(bbc["standalone_path"], "mame-sa/samples/bbc.zip")
|
||||
# ES-DE hands -rompath %GAMEDIR%;%ROMPATH%/<system>: no BIOS folder.
|
||||
self.assertTrue(all(
|
||||
e.get("unplaced") == "outside_bios_folder" for e in self.sets(view)
|
||||
))
|
||||
|
||||
def test_psxmame_reads_bios_psxmame_bios(self) -> None:
|
||||
# -rompath bios/psxmame/bios;<rom directory> (PSXMame.Generator.cs:38-48).
|
||||
view = standalone_view("psxmame", "retrobat")
|
||||
self.assertTrue(view["files"])
|
||||
for entry in view["files"]:
|
||||
self.assertEqual(entry["standalone_path"], "psxmame/bios/" + entry["name"])
|
||||
|
||||
|
||||
class GzdoomOnRetroDECK(unittest.TestCase):
|
||||
"""RetroDECK writes RETRODECKROMSDIR/doom into [IWADSearch.Directories]
|
||||
(gzdoom.ini:9, component_prepare.sh:27)."""
|
||||
|
||||
def test_the_iwads_land_in_roms_doom(self) -> None:
|
||||
view = standalone_view("gzdoom", "retrodeck")
|
||||
iwads = [e for e in view["files"] if e.get("system")]
|
||||
self.assertEqual(len(iwads), 43)
|
||||
for entry in iwads:
|
||||
self.assertEqual(entry["standalone_path"], "roms/doom/" + entry["name"])
|
||||
self.assertTrue(entry.get("unprefixed"))
|
||||
# The engine pk3s are read beside the executable first.
|
||||
(pk3,) = [e for e in view["files"] if e["name"] == "gzdoom.pk3"]
|
||||
self.assertNotIn("standalone_path", pk3)
|
||||
|
||||
def test_another_platform_keeps_them(self) -> None:
|
||||
view = standalone_view("gzdoom", "batocera")
|
||||
self.assertFalse(any(e.get("standalone_path") for e in view["files"]))
|
||||
|
||||
|
||||
class AdvanceMameOnEmuELEC(unittest.TestCase):
|
||||
"""advmame.rc sets dir_rom /storage/roms/mame, /storage/roms/arcade for
|
||||
the arcade system (advmame.rc:11, advmame.sh:26-30)."""
|
||||
|
||||
def test_the_sets_land_in_roms_mame(self) -> None:
|
||||
view = standalone_view("advancemame", "emuelec")
|
||||
sets = [e for e in view["files"] if e.get("category") == "bios_zip"]
|
||||
self.assertEqual(len(sets), 29)
|
||||
for entry in sets:
|
||||
self.assertEqual(entry["standalone_path"], "mame/" + entry["name"])
|
||||
self.assertTrue(entry.get("unprefixed"))
|
||||
|
||||
def test_the_roms_folder_is_no_proof_of_content(self) -> None:
|
||||
# bios/Arcade/MAME/konamigv.zip is MAME 0.289's set, not AdvanceMAME's.
|
||||
from common import load_database, resolve_local_file
|
||||
|
||||
db = load_database(str(REPO_ROOT / "database.json"))
|
||||
view = standalone_view("advancemame", "emuelec")
|
||||
(entry,) = [e for e in view["files"] if e["name"] == "konamigv.zip"]
|
||||
moved, _status = resolve_local_file(entry, db, dest_hint=entry["standalone_path"])
|
||||
plain = {k: v for k, v in entry.items()
|
||||
if k not in ("layout_path", "standalone_path", "unprefixed")}
|
||||
root, _status = resolve_local_file(plain, db, dest_hint=entry["name"])
|
||||
self.assertEqual(moved, root)
|
||||
self.assertNotIn("/MAME/", moved)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -313,6 +313,11 @@ ADVMAME_RC = text(
|
||||
|
||||
ADVMAME_SH = text(
|
||||
"""
|
||||
if [[ "${1}" = "arcade" ]]; then
|
||||
sed -i "s|/roms/mame|/roms/arcade|g" ${CONFIG_DIR}/advmame.rc
|
||||
else
|
||||
sed -i "s|/roms/arcade|/roms/mame|g" ${CONFIG_DIR}/advmame.rc
|
||||
fi
|
||||
SDL_AUDIODRIVER=alsa advmame ${ARG} -quiet
|
||||
"""
|
||||
)
|
||||
@@ -580,9 +585,17 @@ class StandaloneRecords(unittest.TestCase):
|
||||
)
|
||||
|
||||
def test_advancemame_one_record_when_every_device_agrees(self):
|
||||
(record,) = records(el.advancemame)
|
||||
self.assertEqual(record["search_dir"], "/storage/roms/bios/advmame/samples")
|
||||
self.assertNotIn("device", record)
|
||||
roms, arcade, samples = records(el.advancemame)
|
||||
self.assertEqual(samples["search_dir"], "/storage/roms/bios/advmame/samples")
|
||||
self.assertNotIn("device", samples)
|
||||
# advmame.sh rewrites /roms/mame to /roms/arcade for the arcade system.
|
||||
self.assertEqual(
|
||||
(roms["search_dir"], roms["passes_to"], roms["depends_on_option"]),
|
||||
("/storage/roms/mame", "advmame.rc dir_rom", "system != arcade"),
|
||||
)
|
||||
self.assertNotIn("systems", roms)
|
||||
self.assertEqual((arcade["search_dir"], arcade["systems"]), ("/storage/roms/arcade", ["arcade"]))
|
||||
self.assertTrue(arcade["source_ref"].endswith("bin/advmame.sh:1-2, 6"))
|
||||
|
||||
def test_advancemame_devices_that_disagree_raise(self):
|
||||
changed = ADVMAME_RC.replace("bios/advmame", "bios/other")
|
||||
@@ -618,7 +631,7 @@ class StandaloneRecords(unittest.TestCase):
|
||||
|
||||
def test_every_extractor_runs_on_the_fixtures(self):
|
||||
found = el.extract_launchers(tree())
|
||||
self.assertEqual(len(found), 26)
|
||||
self.assertEqual(len(found), 28)
|
||||
|
||||
|
||||
class Revision(unittest.TestCase):
|
||||
|
||||
@@ -289,7 +289,7 @@ class Presets(unittest.TestCase):
|
||||
self.assertEqual(lists["dragon64"]["names"][-1], "dragon")
|
||||
self.assertEqual(
|
||||
lists["d64_1"]["source_ref"],
|
||||
"xroar/rd_assets/rd_config/xroar.conf:292, xroar/component_prepare.sh:13, 15",
|
||||
"xroar/rd_assets/rd_config/xroar.conf:292, xroar/component_prepare.sh:13-15",
|
||||
)
|
||||
|
||||
def test_a_reference_to_an_unknown_romlist_raises(self):
|
||||
|
||||
@@ -33,6 +33,7 @@ from common import ( # noqa: E402
|
||||
system_file_index,
|
||||
)
|
||||
from launchers import ( # noqa: E402
|
||||
SEARCHED_FILES,
|
||||
bound_path,
|
||||
handed_directories,
|
||||
normalize_handle,
|
||||
@@ -205,7 +206,38 @@ class SearchLists(unittest.TestCase):
|
||||
self.assertEqual(
|
||||
bind(config(passes("emu", "$roms_path/coco:$bios_path/xroar", "xroar.conf rompath")),
|
||||
[], {"rompath": ""}),
|
||||
{"": ("", "xroar")},
|
||||
{SEARCHED_FILES: ("", "xroar")},
|
||||
)
|
||||
|
||||
def test_a_semicolon_list_leaves_out_the_game_folder(self) -> None:
|
||||
# MAME splits its search paths on semicolons (src/emu/fileio.cpp:53-58).
|
||||
found = handed_directories(config(passes(
|
||||
"emu", "<romDirname>;/userdata/bios/mame;/userdata/bios", "command line -rompath",
|
||||
)))
|
||||
self.assertEqual([h.folder for h in found], ["mame", ""])
|
||||
found = handed_directories(config(passes(
|
||||
"emu", "bios;<rom directory>", "command line -rp bios;<rom directory>",
|
||||
)))
|
||||
self.assertEqual([(h.folder, "-rp" in h.handles) for h in found], [("", True)])
|
||||
|
||||
def test_a_list_holding_the_files_folder_keeps_them_there(self) -> None:
|
||||
# KNULLI lists bios/mame before bios: the sets at the root stay.
|
||||
cfg = config(passes(
|
||||
"emu", "<romDirname>;/userdata/bios/mame;/userdata/bios", "command line -rompath",
|
||||
))
|
||||
cfg["systems"] = {"x": {"files": [{"name": "a.rom", "destination": "mame/a.rom"}]}}
|
||||
self.assertEqual(bind(cfg, [], {"-rompath": ""}), {SEARCHED_FILES: ("", "")})
|
||||
# Without the root, the first folder of the BIOS tree.
|
||||
cfg = config(passes("emu", "$romdir/mame;$biosdir/mame", "rompath in mame.ini"))
|
||||
self.assertEqual(bind(cfg, [], {"rompath": ""}), {SEARCHED_FILES: ("", "mame")})
|
||||
|
||||
def test_a_whole_layout_list_holds_files_not_folders(self) -> None:
|
||||
found = {SEARCHED_FILES: ("", "mame")}
|
||||
self.assertEqual(bound_path("neogeo.zip", found), ("", "mame/neogeo.zip"))
|
||||
self.assertIsNone(bound_path("samples/bbc.zip", found))
|
||||
self.assertEqual(
|
||||
bound_path("samples/bbc.zip", {**found, "samples": ("", "mame-sa/samples")}),
|
||||
("", "mame-sa/samples/bbc.zip"),
|
||||
)
|
||||
|
||||
def test_a_drive_letter_is_one_directory(self) -> None:
|
||||
@@ -241,11 +273,11 @@ class PerSystem(unittest.TestCase):
|
||||
POOLS = {"-rompath": ""}
|
||||
|
||||
def test_the_system_record_wins_for_its_system(self) -> None:
|
||||
self.assertEqual(bind(self.CFG, [], self.POOLS, ("coco",)), {"": ("", "coco")})
|
||||
self.assertEqual(bind(self.CFG, [], self.POOLS, ("coco",)), {SEARCHED_FILES: ("", "coco")})
|
||||
|
||||
def test_another_system_keeps_the_generic_record(self) -> None:
|
||||
self.assertEqual(bind(self.CFG, [], self.POOLS, ("dragon32",)), {"": ("", "dragon")})
|
||||
self.assertEqual(bind(self.CFG, [], self.POOLS), {"": ("", "dragon")})
|
||||
self.assertEqual(bind(self.CFG, [], self.POOLS, ("dragon32",)), {SEARCHED_FILES: ("", "dragon")})
|
||||
self.assertEqual(bind(self.CFG, [], self.POOLS), {SEARCHED_FILES: ("", "dragon")})
|
||||
|
||||
def test_native_names_are_read_as_our_ids(self) -> None:
|
||||
cfg = {
|
||||
@@ -270,7 +302,7 @@ class PerSystem(unittest.TestCase):
|
||||
[("dragon", ["dragon64"]), ("trs80coco", ["coco"])],
|
||||
)
|
||||
self.assertEqual(bind(cfg, [], self.POOLS | {"-rompath": ""}, ("coco",)),
|
||||
{"": ("", "trs80coco")})
|
||||
{SEARCHED_FILES: ("", "trs80coco")})
|
||||
self.assertEqual(bind(cfg, [], {"-rompath": ""}, ("dragon32",)), {})
|
||||
|
||||
def test_an_entry_is_launched_for_the_system_that_declares_its_name(self) -> None:
|
||||
|
||||
Reference in new issue
Block a user