Files
libretro/schemas/arcade-parents.schema.json
T
Abdessamad Derraz bad9a7f601 feat: follow a clone to its parent set
MAME's search path for a set is the set and every ancestor
(src/emu/driver.cpp:31-38, src/emu/romload.cpp:67-84 at mame0289), so
a clone reads the ROMs it shares with its parent from the parent's
archive. games/arcade/<profile>.json now records, under parents, each
parent game set with ROMs and the clones whose romof chain reaches it
before any BIOS set, and rom_search_sets adds them to what a command
reads. The installer's index leaves them out, as it does the sources.

arcade_parent_importer --all is re-run: every profile gains parents,
and mame0258, mame0278, mame2010, mame2015, mame2016 and fbneo also
gain the sources their committed files lacked.

Manifests, EmuDeck and RetroDECK only: videopac.zip reaches
roms/odyssey2 beside i8244.zip, electron.zip roms/electron, and the 35 parent
sets the profile holds (a7800, apple2e, intv, videopac and others)
reach arcade, consolearcade and mame, the folders whose command starts
any machine. verify --all keeps its severity and status counts.
2026-11-11 15:21:10 +01:00

111 lines
4.7 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://abdess.github.io/retrobios/api/v1/schemas/arcade-parents.schema.json",
"title": "RetroBIOS arcade parent index of one core version",
"description": "games/arcade/<profile>.json, written by python -m scripts.scraper.arcade_parent_importer from the DAT or the driver code the profile pins. A game set needs every BIOS set it is listed under (the romof chain read to its end) and, for the MAME family, every device set with ROMs it is listed under.",
"type": "object",
"additionalProperties": false,
"required": ["schema", "profile", "core_version", "source", "bios", "devices", "chd", "missing_parents", "no_bios", "bios_sets", "counts"],
"$defs": {
"set_name": { "type": "string", "minLength": 1, "pattern": "^[^\\s/\\\\]+$" },
"set_list": {
"type": "array",
"items": { "$ref": "#/$defs/set_name" },
"uniqueItems": true
},
"sets_by_archive": {
"type": "object",
"propertyNames": { "$ref": "#/$defs/set_name" },
"additionalProperties": { "$ref": "#/$defs/set_list", "minItems": 1 }
},
"sha1": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
"count": { "type": "integer", "minimum": 0 }
},
"properties": {
"schema": { "const": 1 },
"profile": { "type": "string", "pattern": "^[a-z0-9][a-z0-9_.-]*$" },
"core_version": { "type": ["string", "null"] },
"source": {
"oneOf": [
{
"type": "object",
"description": "A MAME -listxml release asset.",
"additionalProperties": false,
"required": ["release", "url", "sha256"],
"properties": {
"release": { "type": "string", "minLength": 1 },
"url": { "type": "string", "pattern": "^https://" },
"sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
}
},
{
"type": "object",
"description": "Files or directories of a repository at a commit, each with its git blob or tree sha.",
"additionalProperties": false,
"required": ["repo", "commit", "files"],
"properties": {
"repo": { "type": "string", "pattern": "^https://" },
"commit": { "$ref": "#/$defs/sha1" },
"files": {
"type": "object",
"minProperties": 1,
"additionalProperties": { "$ref": "#/$defs/sha1" }
}
}
}
]
},
"bios": {
"$ref": "#/$defs/sets_by_archive",
"description": "BIOS set -> the game sets whose romof chain reaches it."
},
"parents": {
"$ref": "#/$defs/sets_by_archive",
"description": "Parent game set with ROMs -> the clones whose romof chain reaches it before any BIOS set. A clone reads the ROMs it shares with its parent from the parent's archive."
},
"devices": {
"$ref": "#/$defs/sets_by_archive",
"description": "Device set with ROMs -> the game sets that instantiate it."
},
"chd": {
"$ref": "#/$defs/set_list",
"description": "Game sets that also need a CHD, which is game content and is not installed."
},
"missing_parents": {
"type": "object",
"description": "Game set -> the romof target the DAT does not carry.",
"propertyNames": { "$ref": "#/$defs/set_name" },
"additionalProperties": { "$ref": "#/$defs/set_name" }
},
"no_bios": {
"$ref": "#/$defs/set_list",
"description": "Game sets whose romof chain reaches no BIOS set: a game that needs no BIOS archive."
},
"bios_sets": {
"$ref": "#/$defs/set_list",
"description": "Every BIOS set of the DAT, used by a game or not: an archive of that name on a card is not a game."
},
"sources": {
"type": "object",
"description": "Driver source file -> the game sets and the device sets with ROMs it declares, as the -listxml sourcefile attribute names it.",
"propertyNames": { "type": "string", "minLength": 1 },
"additionalProperties": { "$ref": "#/$defs/set_list", "minItems": 1 }
},
"counts": {
"type": "object",
"additionalProperties": false,
"required": ["sets", "games", "games_with_bios", "bios_sets", "bios_roots_used", "games_with_devices", "chd_games", "missing_parents"],
"properties": {
"sets": { "$ref": "#/$defs/count" },
"games": { "$ref": "#/$defs/count" },
"games_with_bios": { "$ref": "#/$defs/count" },
"bios_sets": { "$ref": "#/$defs/count" },
"bios_roots_used": { "$ref": "#/$defs/count" },
"games_with_devices": { "$ref": "#/$defs/count" },
"chd_games": { "$ref": "#/$defs/count" },
"missing_parents": { "$ref": "#/$defs/count" }
}
}
}
}