diff --git a/emulators/freeintv.yml b/emulators/freeintv.yml index e24f3023..06a19643 100644 --- a/emulators/freeintv.yml +++ b/emulators/freeintv.yml @@ -29,6 +29,16 @@ notes: | No ECS support. No ecs.bin loading code in the source. + Per-game controller overlays are read from freeintv_overlays/.png + (or .jpg) in the system directory, only when the multi-screen option is + on (src/libretro.c:278-280, 294). Without one the core draws the keypad + image embedded in the binary (src/libretro.c:321-325). + +data_directories: + - ref: freeintv-overlays + destination: freeintv_overlays + required: false + files: - name: "exec.bin" system: intellivision diff --git a/tests/test_audit_regressions.py b/tests/test_audit_regressions.py index 0c392b3a..b05b3418 100644 --- a/tests/test_audit_regressions.py +++ b/tests/test_audit_regressions.py @@ -5923,6 +5923,28 @@ class RequiredOnlyReachesDataDirectories(unittest.TestCase): "required": False}, ]) + def test_an_alias_reads_the_trees_of_its_core(self): + """An alias is the same binary under another name. FreeIntv declared + no overlay tree while its alias freeintv_ts_overlay did, so the + emulator pack of the core itself left the overlays out.""" + profiles = { + path.stem: yaml.safe_load(path.read_text(encoding="utf-8")) + for path in (ROOT / "emulators").glob("*.yml") + } + + def trees(profile: dict) -> dict: + return { + dd["ref"]: dd.get("required", True) + for dd in profile.get("data_directories") or [] + } + + for name, profile in profiles.items(): + target = profile.get("alias_of") + if not target or target not in profiles: + continue + with self.subTest(alias=name, core=target): + self.assertEqual(trees(profile), trees(profiles[target])) + class InstallerJsonKindsNeverOverwriteEachOther(unittest.TestCase): """Install manifests and target core lists are both .json.