@retropak/schema 1.0.0-draft
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/locales/en.json +397 -0
- package/package.json +29 -0
- package/schemas/v1/retropak.schema.json +918 -0
package/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Retropak
|
|
2
|
+
|
|
3
|
+
> A modern container format for retro software preservation
|
|
4
|
+
|
|
5
|
+
Retropak (`.rpk`) is an open standard for distributing retro software with everything in one place: ROMs, artwork, soundtracks, manuals, and metadata.
|
|
6
|
+
|
|
7
|
+
## Quick Links
|
|
8
|
+
|
|
9
|
+
- **[Read the Specification](docs/specification.md)**: Complete technical specification
|
|
10
|
+
- **[Visit the Website](https://retropak.org)**: Documentation and guides
|
|
11
|
+
- **[View the Schema](docs/schemas/v1/retropak.schema.json)**: JSON Schema for validation
|
|
12
|
+
- **[Contributing](CONTRIBUTING.md)**: How to build and contribute to the docs
|
|
13
|
+
|
|
14
|
+
## What is Retropak?
|
|
15
|
+
|
|
16
|
+
A `.rpk` file is a ZIP archive containing:
|
|
17
|
+
|
|
18
|
+
- **Software**: ROMs, disc images, executables
|
|
19
|
+
- **Metadata**: Title, platform, genre, developer, release date
|
|
20
|
+
- **Artwork**: Box art, screenshots, logos
|
|
21
|
+
- **Documentation**: Manuals, maps, guides
|
|
22
|
+
- **Audio**: Soundtracks and music
|
|
23
|
+
- **Configuration**: Emulator settings
|
|
24
|
+
|
|
25
|
+
Everything needed to preserve and present retro software in one self-contained package.
|
|
26
|
+
|
|
27
|
+
## Features
|
|
28
|
+
|
|
29
|
+
- **92 supported platforms**: From Atari 2600 to Xbox Series X
|
|
30
|
+
- **Rich metadata**: Genre, players, features, ratings, credits
|
|
31
|
+
- **Multi-disc support**: CD swapping, boot disks, compilations
|
|
32
|
+
- **ROM verification**: MD5/SHA1/CRC32 checksums for database/DAT file validation
|
|
33
|
+
- **Cryptographic signing**: GPG and SSH signatures for authenticity
|
|
34
|
+
- **Accessibility**: Alt text support for all images
|
|
35
|
+
- **Preservation-focused**: Version tracking, dump status, source attribution
|
|
36
|
+
|
|
37
|
+
## License
|
|
38
|
+
|
|
39
|
+
This specification is released under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). Use it however you like.
|
package/locales/en.json
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
{
|
|
2
|
+
"platform": {
|
|
3
|
+
"32x": "Sega 32X",
|
|
4
|
+
"3do": "3DO Interactive Multiplayer",
|
|
5
|
+
"3ds": "Nintendo 3DS",
|
|
6
|
+
"a2600": "Atari 2600",
|
|
7
|
+
"a5200": "Atari 5200",
|
|
8
|
+
"a7800": "Atari 7800",
|
|
9
|
+
"a800": "Atari 800",
|
|
10
|
+
"amiga": "Commodore Amiga",
|
|
11
|
+
"apple2": "Apple II",
|
|
12
|
+
"aquarius": "Mattel Aquarius",
|
|
13
|
+
"archimedes": "Acorn Archimedes",
|
|
14
|
+
"arduboy": "Arduboy",
|
|
15
|
+
"astrocade": "Bally Astrocade",
|
|
16
|
+
"bbc": "BBC Micro",
|
|
17
|
+
"c128": "Commodore 128",
|
|
18
|
+
"c64": "Commodore 64",
|
|
19
|
+
"cd32": "Amiga CD32",
|
|
20
|
+
"cdi": "Philips CD-i",
|
|
21
|
+
"cdtv": "Commodore CDTV",
|
|
22
|
+
"channelf": "Fairchild Channel F",
|
|
23
|
+
"coco": "TRS-80 Color Computer",
|
|
24
|
+
"coleco": "ColecoVision",
|
|
25
|
+
"cpc": "Amstrad CPC",
|
|
26
|
+
"dos": "MS-DOS",
|
|
27
|
+
"dragon": "Dragon 32/64",
|
|
28
|
+
"dreamcast": "Sega Dreamcast",
|
|
29
|
+
"einstein": "Tatung Einstein",
|
|
30
|
+
"electron": "Acorn Electron",
|
|
31
|
+
"emerson": "Emerson Arcadia 2001",
|
|
32
|
+
"enterprise": "Enterprise 64/128",
|
|
33
|
+
"fds": "Famicom Disk System",
|
|
34
|
+
"fmtowns": "FM Towns",
|
|
35
|
+
"gamecom": "Tiger Game.com",
|
|
36
|
+
"gamecube": "Nintendo GameCube",
|
|
37
|
+
"gamewave": "ZAPiT Games GameWavE",
|
|
38
|
+
"gamate": "Bit Corporation Gamate",
|
|
39
|
+
"gb": "Game Boy",
|
|
40
|
+
"gba": "Game Boy Advance",
|
|
41
|
+
"gbc": "Game Boy Color",
|
|
42
|
+
"gg": "Game Gear",
|
|
43
|
+
"gizmondo": "Gizmondo",
|
|
44
|
+
"gnw": "Game & Watch",
|
|
45
|
+
"gp2x": "GP2X",
|
|
46
|
+
"gp32": "GP32",
|
|
47
|
+
"gx4000": "Amstrad GX4000",
|
|
48
|
+
"hyperscan": "Mattel HyperScan",
|
|
49
|
+
"intellivision": "Intellivision",
|
|
50
|
+
"jaguar": "Atari Jaguar",
|
|
51
|
+
"jaguarcd": "Atari Jaguar CD",
|
|
52
|
+
"laseractive": "Pioneer LaserActive",
|
|
53
|
+
"lynx": "Atari Lynx",
|
|
54
|
+
"markiii": "Sega Mark III",
|
|
55
|
+
"mcd": "Sega CD",
|
|
56
|
+
"md": "Sega Genesis / Mega Drive",
|
|
57
|
+
"megaduck": "Mega Duck",
|
|
58
|
+
"microvision": "Milton Bradley Microvision",
|
|
59
|
+
"mp1000": "Mattel MP1000",
|
|
60
|
+
"msx": "MSX",
|
|
61
|
+
"msx2": "MSX2",
|
|
62
|
+
"n64": "Nintendo 64",
|
|
63
|
+
"nds": "Nintendo DS",
|
|
64
|
+
"nes": "Nintendo Entertainment System",
|
|
65
|
+
"ng": "Neo Geo AES",
|
|
66
|
+
"ngage": "Nokia N-Gage",
|
|
67
|
+
"ngcd": "Neo Geo CD",
|
|
68
|
+
"ngp": "Neo Geo Pocket",
|
|
69
|
+
"ngpc": "Neo Geo Pocket Color",
|
|
70
|
+
"nuon": "VM Labs NUON",
|
|
71
|
+
"o2": "Magnavox Odyssey 2",
|
|
72
|
+
"oric": "Oric",
|
|
73
|
+
"pc88": "NEC PC-8801",
|
|
74
|
+
"pc98": "NEC PC-9801",
|
|
75
|
+
"pce": "TurboGrafx-16 / PC Engine",
|
|
76
|
+
"pcecd": "TurboGrafx-CD / PC Engine CD",
|
|
77
|
+
"pcfx": "PC-FX",
|
|
78
|
+
"pet": "Commodore PET",
|
|
79
|
+
"pico": "Sega Pico",
|
|
80
|
+
"pippin": "Apple Pippin",
|
|
81
|
+
"playdate": "Playdate",
|
|
82
|
+
"plus4": "Commodore Plus/4",
|
|
83
|
+
"pokemini": "Pokémon Mini",
|
|
84
|
+
"ps2": "PlayStation 2",
|
|
85
|
+
"ps3": "PlayStation 3",
|
|
86
|
+
"ps4": "PlayStation 4",
|
|
87
|
+
"ps5": "PlayStation 5",
|
|
88
|
+
"psp": "PlayStation Portable",
|
|
89
|
+
"psx": "PlayStation",
|
|
90
|
+
"pv1000": "Casio PV-1000",
|
|
91
|
+
"ql": "Sinclair QL",
|
|
92
|
+
"sam": "SAM Coupé",
|
|
93
|
+
"saturn": "Sega Saturn",
|
|
94
|
+
"scv": "Epoch Super Cassette Vision",
|
|
95
|
+
"sg1000": "Sega SG-1000",
|
|
96
|
+
"sgx": "SuperGrafx",
|
|
97
|
+
"sms": "Sega Master System",
|
|
98
|
+
"snes": "Super Nintendo Entertainment System",
|
|
99
|
+
"spectrum": "ZX Spectrum",
|
|
100
|
+
"st": "Atari ST",
|
|
101
|
+
"studio2": "RCA Studio II",
|
|
102
|
+
"supervision": "Watara Supervision",
|
|
103
|
+
"switch": "Nintendo Switch",
|
|
104
|
+
"thomson": "Thomson MO/TO",
|
|
105
|
+
"ti994a": "Texas Instruments TI-99/4A",
|
|
106
|
+
"tigerhandheld": "Tiger Electronics Handheld",
|
|
107
|
+
"trs80": "TRS-80",
|
|
108
|
+
"tutor": "Tomy Tutor",
|
|
109
|
+
"vb": "Virtual Boy",
|
|
110
|
+
"vcg": "VTech CreatiVision",
|
|
111
|
+
"vectrex": "Vectrex",
|
|
112
|
+
"vic20": "Commodore VIC-20",
|
|
113
|
+
"videopac": "Videopac / Odyssey 2",
|
|
114
|
+
"vita": "PlayStation Vita",
|
|
115
|
+
"wii": "Nintendo Wii",
|
|
116
|
+
"wiiu": "Nintendo Wii U",
|
|
117
|
+
"ws": "WonderSwan",
|
|
118
|
+
"wsc": "WonderSwan Color",
|
|
119
|
+
"x360": "Xbox 360",
|
|
120
|
+
"x68000": "Sharp X68000",
|
|
121
|
+
"xavix": "XaviXPORT",
|
|
122
|
+
"xbox": "Xbox",
|
|
123
|
+
"xone": "Xbox One",
|
|
124
|
+
"xsx": "Xbox Series X|S",
|
|
125
|
+
"zeebo": "Zeebo",
|
|
126
|
+
"zx80": "Sinclair ZX80",
|
|
127
|
+
"zx81": "Sinclair ZX81"
|
|
128
|
+
},
|
|
129
|
+
"genre": {
|
|
130
|
+
"action_rpg": "Action RPG",
|
|
131
|
+
"action": "Action",
|
|
132
|
+
"adventure": "Adventure",
|
|
133
|
+
"american_football": "American Football",
|
|
134
|
+
"arcade": "Arcade",
|
|
135
|
+
"artillery": "Artillery",
|
|
136
|
+
"athletics": "Athletics",
|
|
137
|
+
"baseball": "Baseball",
|
|
138
|
+
"basketball": "Basketball",
|
|
139
|
+
"beat_em_up": "Beat 'em Up",
|
|
140
|
+
"billiards": "Billiards",
|
|
141
|
+
"block_puzzle": "Block Puzzle",
|
|
142
|
+
"board_game": "Board Game",
|
|
143
|
+
"bowling": "Bowling",
|
|
144
|
+
"boxing": "Boxing",
|
|
145
|
+
"bullet_hell": "Bullet Hell",
|
|
146
|
+
"card_game": "Card Game",
|
|
147
|
+
"casino": "Casino",
|
|
148
|
+
"casual": "Casual",
|
|
149
|
+
"cricket": "Cricket",
|
|
150
|
+
"cute_em_up": "Cute 'em Up",
|
|
151
|
+
"dating_sim": "Dating Sim",
|
|
152
|
+
"dungeon_crawler": "Dungeon Crawler",
|
|
153
|
+
"educational": "Educational",
|
|
154
|
+
"endless_runner": "Endless Runner",
|
|
155
|
+
"extreme_sports": "Extreme Sports",
|
|
156
|
+
"fighting": "Fighting",
|
|
157
|
+
"fishing": "Fishing",
|
|
158
|
+
"flight": "Flight",
|
|
159
|
+
"fps": "First-Person Shooter",
|
|
160
|
+
"golf": "Golf",
|
|
161
|
+
"hack_and_slash": "Hack and Slash",
|
|
162
|
+
"hockey": "Hockey",
|
|
163
|
+
"horror": "Horror",
|
|
164
|
+
"horse_racing": "Horse Racing",
|
|
165
|
+
"life_sim": "Life Simulation",
|
|
166
|
+
"light_gun": "Light Gun",
|
|
167
|
+
"logic_puzzle": "Logic Puzzle",
|
|
168
|
+
"mahjong": "Mahjong",
|
|
169
|
+
"management": "Management",
|
|
170
|
+
"match_3": "Match-3",
|
|
171
|
+
"maze": "Maze",
|
|
172
|
+
"mech": "Mech",
|
|
173
|
+
"metroidvania": "Metroidvania",
|
|
174
|
+
"minigames": "Minigames",
|
|
175
|
+
"mmorpg": "MMORPG",
|
|
176
|
+
"moba": "MOBA",
|
|
177
|
+
"music_rhythm": "Music / Rhythm",
|
|
178
|
+
"open_world": "Open World",
|
|
179
|
+
"pachinko": "Pachinko",
|
|
180
|
+
"party": "Party",
|
|
181
|
+
"pinball": "Pinball",
|
|
182
|
+
"platformer": "Platformer",
|
|
183
|
+
"point_and_click": "Point and Click",
|
|
184
|
+
"pool": "Pool",
|
|
185
|
+
"puzzle": "Puzzle",
|
|
186
|
+
"quiz": "Quiz",
|
|
187
|
+
"racing": "Racing",
|
|
188
|
+
"rail_shooter": "Rail Shooter",
|
|
189
|
+
"real_time_strategy": "Real-Time Strategy",
|
|
190
|
+
"roguelike": "Roguelike",
|
|
191
|
+
"rpg": "RPG",
|
|
192
|
+
"run_and_gun": "Run and Gun",
|
|
193
|
+
"sandbox": "Sandbox",
|
|
194
|
+
"shoot_em_up": "Shoot 'em Up",
|
|
195
|
+
"shooter": "Shooter",
|
|
196
|
+
"simulation": "Simulation",
|
|
197
|
+
"skateboarding": "Skateboarding",
|
|
198
|
+
"skiing": "Skiing",
|
|
199
|
+
"snooker": "Snooker",
|
|
200
|
+
"snowboarding": "Snowboarding",
|
|
201
|
+
"soccer": "Soccer",
|
|
202
|
+
"sports": "Sports",
|
|
203
|
+
"stealth": "Stealth",
|
|
204
|
+
"strategy": "Strategy",
|
|
205
|
+
"surfing": "Surfing",
|
|
206
|
+
"survival": "Survival",
|
|
207
|
+
"tactical_rpg": "Tactical RPG",
|
|
208
|
+
"tennis": "Tennis",
|
|
209
|
+
"text_adventure": "Text Adventure",
|
|
210
|
+
"tower_defense": "Tower Defense",
|
|
211
|
+
"trivia": "Trivia",
|
|
212
|
+
"turn_based_strategy": "Turn-Based Strategy",
|
|
213
|
+
"twin_stick": "Twin Stick Shooter",
|
|
214
|
+
"vehicle_combat": "Vehicle Combat",
|
|
215
|
+
"visual_novel": "Visual Novel",
|
|
216
|
+
"volleyball": "Volleyball",
|
|
217
|
+
"word_puzzle": "Word Puzzle",
|
|
218
|
+
"wrestling": "Wrestling"
|
|
219
|
+
},
|
|
220
|
+
"category": {
|
|
221
|
+
"addon": "Add-on",
|
|
222
|
+
"application": "Application",
|
|
223
|
+
"beta": "Beta",
|
|
224
|
+
"bios": "BIOS",
|
|
225
|
+
"compilation": "Compilation",
|
|
226
|
+
"coverdisk": "Coverdisk",
|
|
227
|
+
"demo": "Demo",
|
|
228
|
+
"educational": "Educational",
|
|
229
|
+
"firmware": "Firmware",
|
|
230
|
+
"freeware": "Freeware",
|
|
231
|
+
"game": "Game",
|
|
232
|
+
"homebrew": "Homebrew",
|
|
233
|
+
"multimedia": "Multimedia",
|
|
234
|
+
"promotional": "Promotional",
|
|
235
|
+
"prototype": "Prototype",
|
|
236
|
+
"scene_demo": "Scene Demo",
|
|
237
|
+
"shareware": "Shareware",
|
|
238
|
+
"unlicensed": "Unlicensed",
|
|
239
|
+
"utility": "Utility"
|
|
240
|
+
},
|
|
241
|
+
"feature": {
|
|
242
|
+
"analog_stick": "Analog Stick",
|
|
243
|
+
"arcade_stick": "Arcade Stick",
|
|
244
|
+
"balance_board": "Balance Board",
|
|
245
|
+
"bongos": "Bongos",
|
|
246
|
+
"buzzer": "Buzzer",
|
|
247
|
+
"camera": "Camera",
|
|
248
|
+
"crank": "Crank",
|
|
249
|
+
"dance_mat": "Dance Mat",
|
|
250
|
+
"dongle": "Dongle",
|
|
251
|
+
"drums": "Drums",
|
|
252
|
+
"fishing_rod": "Fishing Rod",
|
|
253
|
+
"flight_stick": "Flight Stick",
|
|
254
|
+
"gamepad": "Gamepad",
|
|
255
|
+
"guitar": "Guitar",
|
|
256
|
+
"instrument": "Instrument",
|
|
257
|
+
"keyboard_controller": "Keyboard Controller",
|
|
258
|
+
"keyboard": "Keyboard",
|
|
259
|
+
"light_gun": "Light Gun",
|
|
260
|
+
"link_cable": "Link Cable",
|
|
261
|
+
"maracas": "Maracas",
|
|
262
|
+
"mech_controller": "Mech Controller",
|
|
263
|
+
"microphone": "Microphone",
|
|
264
|
+
"motion_controls": "Motion Controls",
|
|
265
|
+
"mouse": "Mouse",
|
|
266
|
+
"multitap": "Multitap",
|
|
267
|
+
"nfc_portal": "NFC Portal",
|
|
268
|
+
"online": "Online",
|
|
269
|
+
"paddle": "Paddle",
|
|
270
|
+
"pedals": "Pedals",
|
|
271
|
+
"pointer": "Pointer",
|
|
272
|
+
"rumble": "Rumble",
|
|
273
|
+
"save_file": "Save File",
|
|
274
|
+
"spinner": "Spinner",
|
|
275
|
+
"steering_wheel": "Steering Wheel",
|
|
276
|
+
"stylus": "Stylus",
|
|
277
|
+
"touch_screen": "Touch Screen",
|
|
278
|
+
"trackball": "Trackball",
|
|
279
|
+
"train_controller": "Train Controller",
|
|
280
|
+
"turntable": "Turntable",
|
|
281
|
+
"twin_stick": "Twin Stick",
|
|
282
|
+
"vr_headset": "VR Headset",
|
|
283
|
+
"zapper": "Zapper"
|
|
284
|
+
},
|
|
285
|
+
"mediaType": {
|
|
286
|
+
"archive": "Archive",
|
|
287
|
+
"bluray": "Blu-ray",
|
|
288
|
+
"cartridge": "Cartridge",
|
|
289
|
+
"cdrom": "CD-ROM",
|
|
290
|
+
"download": "Download",
|
|
291
|
+
"dvd": "DVD",
|
|
292
|
+
"floppy": "Floppy Disk",
|
|
293
|
+
"gd_rom": "GD-ROM",
|
|
294
|
+
"hdd_image": "Hard Disk Image",
|
|
295
|
+
"laserdisc": "LaserDisc",
|
|
296
|
+
"memory_card": "Memory Card",
|
|
297
|
+
"tape": "Tape",
|
|
298
|
+
"umd": "UMD"
|
|
299
|
+
},
|
|
300
|
+
"region": {
|
|
301
|
+
"asia": "Asia",
|
|
302
|
+
"australia": "Australia",
|
|
303
|
+
"brazil": "Brazil",
|
|
304
|
+
"canada": "Canada",
|
|
305
|
+
"china": "China",
|
|
306
|
+
"europe": "Europe",
|
|
307
|
+
"france": "France",
|
|
308
|
+
"germany": "Germany",
|
|
309
|
+
"hong-kong": "Hong Kong",
|
|
310
|
+
"india": "India",
|
|
311
|
+
"italy": "Italy",
|
|
312
|
+
"japan": "Japan",
|
|
313
|
+
"korea": "Korea",
|
|
314
|
+
"mexico": "Mexico",
|
|
315
|
+
"netherlands": "Netherlands",
|
|
316
|
+
"ntsc-j": "NTSC-J (Japan)",
|
|
317
|
+
"ntsc-u": "NTSC-U (North America)",
|
|
318
|
+
"pal-a": "PAL-A (Australia)",
|
|
319
|
+
"pal-b": "PAL-B (Western Europe)",
|
|
320
|
+
"pal-g": "PAL-G (Rest of Europe)",
|
|
321
|
+
"pal": "PAL",
|
|
322
|
+
"russia": "Russia",
|
|
323
|
+
"scandinavia": "Scandinavia",
|
|
324
|
+
"spain": "Spain",
|
|
325
|
+
"taiwan": "Taiwan",
|
|
326
|
+
"uk": "United Kingdom",
|
|
327
|
+
"usa": "United States",
|
|
328
|
+
"world": "World"
|
|
329
|
+
},
|
|
330
|
+
"dumpStatus": {
|
|
331
|
+
"alternate": "Alternate",
|
|
332
|
+
"bad": "Bad Dump",
|
|
333
|
+
"good": "Good Dump",
|
|
334
|
+
"hacked": "Hacked",
|
|
335
|
+
"overdump": "Overdump",
|
|
336
|
+
"pirate": "Pirate",
|
|
337
|
+
"prototype": "Prototype",
|
|
338
|
+
"trained": "Trained",
|
|
339
|
+
"translated": "Translated",
|
|
340
|
+
"underdump": "Underdump",
|
|
341
|
+
"unknown": "Unknown",
|
|
342
|
+
"unlicensed": "Unlicensed"
|
|
343
|
+
},
|
|
344
|
+
"esrb": {
|
|
345
|
+
"ec": "Early Childhood",
|
|
346
|
+
"e": "Everyone",
|
|
347
|
+
"e10": "Everyone 10+",
|
|
348
|
+
"t": "Teen",
|
|
349
|
+
"m": "Mature 17+",
|
|
350
|
+
"ao": "Adults Only 18+",
|
|
351
|
+
"rp": "Rating Pending"
|
|
352
|
+
},
|
|
353
|
+
"cero": {
|
|
354
|
+
"a": "All Ages",
|
|
355
|
+
"b": "Ages 12 and up",
|
|
356
|
+
"c": "Ages 15 and up",
|
|
357
|
+
"d": "Ages 17 and up",
|
|
358
|
+
"z": "Ages 18 and up only"
|
|
359
|
+
},
|
|
360
|
+
"acb": {
|
|
361
|
+
"g": "General",
|
|
362
|
+
"pg": "Parental Guidance",
|
|
363
|
+
"m": "Mature",
|
|
364
|
+
"ma15": "Mature Accompanied 15+",
|
|
365
|
+
"r18": "Restricted 18+",
|
|
366
|
+
"rc": "Refused Classification"
|
|
367
|
+
},
|
|
368
|
+
"grac": {
|
|
369
|
+
"all": "All Ages",
|
|
370
|
+
"12": "Ages 12 and up",
|
|
371
|
+
"15": "Ages 15 and up",
|
|
372
|
+
"18": "Ages 18 and up"
|
|
373
|
+
},
|
|
374
|
+
"bbfc": {
|
|
375
|
+
"u": "Universal",
|
|
376
|
+
"pg": "Parental Guidance",
|
|
377
|
+
"12": "12",
|
|
378
|
+
"12a": "12A",
|
|
379
|
+
"15": "15",
|
|
380
|
+
"18": "18",
|
|
381
|
+
"r18": "R18"
|
|
382
|
+
},
|
|
383
|
+
"pegi": {
|
|
384
|
+
"3": "PEGI 3",
|
|
385
|
+
"7": "PEGI 7",
|
|
386
|
+
"12": "PEGI 12",
|
|
387
|
+
"16": "PEGI 16",
|
|
388
|
+
"18": "PEGI 18"
|
|
389
|
+
},
|
|
390
|
+
"usk": {
|
|
391
|
+
"0": "USK 0",
|
|
392
|
+
"6": "USK 6",
|
|
393
|
+
"12": "USK 12",
|
|
394
|
+
"16": "USK 16",
|
|
395
|
+
"18": "USK 18"
|
|
396
|
+
}
|
|
397
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@retropak/schema",
|
|
3
|
+
"version": "1.0.0-draft",
|
|
4
|
+
"description": "Metadata specification for Retropak software containers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
"./schema": "./schemas/v1/retropak.schema.json",
|
|
8
|
+
"./locales/en": "./locales/en.json",
|
|
9
|
+
"./package.json": "./package.json"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"schemas",
|
|
13
|
+
"locales"
|
|
14
|
+
],
|
|
15
|
+
"keywords": [
|
|
16
|
+
"retropak",
|
|
17
|
+
"schema"
|
|
18
|
+
],
|
|
19
|
+
"author": "piers@retropak.org",
|
|
20
|
+
"license": "CC0-1.0",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/piersroberts/retropak.git"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/piersroberts/retropak/issues"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://retropak.org"
|
|
29
|
+
}
|
|
@@ -0,0 +1,918 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://retropak.org/schemas/v1/retropak.schema.json",
|
|
4
|
+
"version": "1-0-0",
|
|
5
|
+
"title": "Retropak Manifest",
|
|
6
|
+
"description": "Metadata specification for Retropak software containers",
|
|
7
|
+
"$defs": {
|
|
8
|
+
"platform": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Platform identifier.",
|
|
11
|
+
"enum": [
|
|
12
|
+
"32x",
|
|
13
|
+
"3do",
|
|
14
|
+
"3ds",
|
|
15
|
+
"a2600",
|
|
16
|
+
"a5200",
|
|
17
|
+
"a7800",
|
|
18
|
+
"a800",
|
|
19
|
+
"amiga",
|
|
20
|
+
"apple2",
|
|
21
|
+
"aquarius",
|
|
22
|
+
"archimedes",
|
|
23
|
+
"arduboy",
|
|
24
|
+
"astrocade",
|
|
25
|
+
"bbc",
|
|
26
|
+
"c128",
|
|
27
|
+
"c64",
|
|
28
|
+
"cd32",
|
|
29
|
+
"cdi",
|
|
30
|
+
"cdtv",
|
|
31
|
+
"channelf",
|
|
32
|
+
"coco",
|
|
33
|
+
"coleco",
|
|
34
|
+
"cpc",
|
|
35
|
+
"dos",
|
|
36
|
+
"dragon",
|
|
37
|
+
"dreamcast",
|
|
38
|
+
"einstein",
|
|
39
|
+
"electron",
|
|
40
|
+
"emerson",
|
|
41
|
+
"enterprise",
|
|
42
|
+
"fds",
|
|
43
|
+
"fmtowns",
|
|
44
|
+
"gamecom",
|
|
45
|
+
"gamecube",
|
|
46
|
+
"gamewave",
|
|
47
|
+
"gamate",
|
|
48
|
+
"gb",
|
|
49
|
+
"gba",
|
|
50
|
+
"gbc",
|
|
51
|
+
"gg",
|
|
52
|
+
"gizmondo",
|
|
53
|
+
"gnw",
|
|
54
|
+
"gp2x",
|
|
55
|
+
"gp32",
|
|
56
|
+
"gx4000",
|
|
57
|
+
"hyperscan",
|
|
58
|
+
"intellivision",
|
|
59
|
+
"jaguar",
|
|
60
|
+
"jaguarcd",
|
|
61
|
+
"laseractive",
|
|
62
|
+
"lynx",
|
|
63
|
+
"markiii",
|
|
64
|
+
"mcd",
|
|
65
|
+
"md",
|
|
66
|
+
"megaduck",
|
|
67
|
+
"microvision",
|
|
68
|
+
"mp1000",
|
|
69
|
+
"msx",
|
|
70
|
+
"msx2",
|
|
71
|
+
"n64",
|
|
72
|
+
"nds",
|
|
73
|
+
"nes",
|
|
74
|
+
"ng",
|
|
75
|
+
"ngage",
|
|
76
|
+
"ngcd",
|
|
77
|
+
"ngp",
|
|
78
|
+
"ngpc",
|
|
79
|
+
"nuon",
|
|
80
|
+
"o2",
|
|
81
|
+
"oric",
|
|
82
|
+
"pc88",
|
|
83
|
+
"pc98",
|
|
84
|
+
"pce",
|
|
85
|
+
"pcecd",
|
|
86
|
+
"pcfx",
|
|
87
|
+
"pet",
|
|
88
|
+
"pico",
|
|
89
|
+
"pippin",
|
|
90
|
+
"playdate",
|
|
91
|
+
"plus4",
|
|
92
|
+
"pokemini",
|
|
93
|
+
"ps2",
|
|
94
|
+
"ps3",
|
|
95
|
+
"ps4",
|
|
96
|
+
"ps5",
|
|
97
|
+
"psp",
|
|
98
|
+
"psx",
|
|
99
|
+
"pv1000",
|
|
100
|
+
"ql",
|
|
101
|
+
"sam",
|
|
102
|
+
"saturn",
|
|
103
|
+
"scv",
|
|
104
|
+
"sg1000",
|
|
105
|
+
"sgx",
|
|
106
|
+
"sms",
|
|
107
|
+
"snes",
|
|
108
|
+
"spectrum",
|
|
109
|
+
"st",
|
|
110
|
+
"studio2",
|
|
111
|
+
"supervision",
|
|
112
|
+
"switch",
|
|
113
|
+
"thomson",
|
|
114
|
+
"ti994a",
|
|
115
|
+
"tigerhandheld",
|
|
116
|
+
"trs80",
|
|
117
|
+
"tutor",
|
|
118
|
+
"vb",
|
|
119
|
+
"vcg",
|
|
120
|
+
"vectrex",
|
|
121
|
+
"vic20",
|
|
122
|
+
"videopac",
|
|
123
|
+
"vita",
|
|
124
|
+
"wii",
|
|
125
|
+
"wiiu",
|
|
126
|
+
"ws",
|
|
127
|
+
"wsc",
|
|
128
|
+
"x360",
|
|
129
|
+
"x68000",
|
|
130
|
+
"xavix",
|
|
131
|
+
"xbox",
|
|
132
|
+
"xone",
|
|
133
|
+
"xsx",
|
|
134
|
+
"zeebo",
|
|
135
|
+
"zx80",
|
|
136
|
+
"zx81"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"genre": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"description": "Genre classification.",
|
|
142
|
+
"enum": [
|
|
143
|
+
"action_rpg",
|
|
144
|
+
"action",
|
|
145
|
+
"adventure",
|
|
146
|
+
"american_football",
|
|
147
|
+
"arcade",
|
|
148
|
+
"artillery",
|
|
149
|
+
"athletics",
|
|
150
|
+
"baseball",
|
|
151
|
+
"basketball",
|
|
152
|
+
"beat_em_up",
|
|
153
|
+
"billiards",
|
|
154
|
+
"block_puzzle",
|
|
155
|
+
"board_game",
|
|
156
|
+
"bowling",
|
|
157
|
+
"boxing",
|
|
158
|
+
"bullet_hell",
|
|
159
|
+
"card_game",
|
|
160
|
+
"casino",
|
|
161
|
+
"casual",
|
|
162
|
+
"cricket",
|
|
163
|
+
"cute_em_up",
|
|
164
|
+
"dating_sim",
|
|
165
|
+
"dungeon_crawler",
|
|
166
|
+
"educational",
|
|
167
|
+
"endless_runner",
|
|
168
|
+
"extreme_sports",
|
|
169
|
+
"fighting",
|
|
170
|
+
"fishing",
|
|
171
|
+
"flight",
|
|
172
|
+
"fps",
|
|
173
|
+
"golf",
|
|
174
|
+
"hack_and_slash",
|
|
175
|
+
"hockey",
|
|
176
|
+
"horror",
|
|
177
|
+
"horse_racing",
|
|
178
|
+
"life_sim",
|
|
179
|
+
"light_gun",
|
|
180
|
+
"logic_puzzle",
|
|
181
|
+
"mahjong",
|
|
182
|
+
"management",
|
|
183
|
+
"match_3",
|
|
184
|
+
"maze",
|
|
185
|
+
"mech",
|
|
186
|
+
"metroidvania",
|
|
187
|
+
"minigames",
|
|
188
|
+
"mmorpg",
|
|
189
|
+
"moba",
|
|
190
|
+
"music_rhythm",
|
|
191
|
+
"open_world",
|
|
192
|
+
"pachinko",
|
|
193
|
+
"party",
|
|
194
|
+
"pinball",
|
|
195
|
+
"platformer",
|
|
196
|
+
"point_and_click",
|
|
197
|
+
"pool",
|
|
198
|
+
"puzzle",
|
|
199
|
+
"quiz",
|
|
200
|
+
"racing",
|
|
201
|
+
"rail_shooter",
|
|
202
|
+
"real_time_strategy",
|
|
203
|
+
"roguelike",
|
|
204
|
+
"rpg",
|
|
205
|
+
"run_and_gun",
|
|
206
|
+
"sandbox",
|
|
207
|
+
"shoot_em_up",
|
|
208
|
+
"shooter",
|
|
209
|
+
"simulation",
|
|
210
|
+
"skateboarding",
|
|
211
|
+
"skiing",
|
|
212
|
+
"snooker",
|
|
213
|
+
"snowboarding",
|
|
214
|
+
"soccer",
|
|
215
|
+
"sports",
|
|
216
|
+
"stealth",
|
|
217
|
+
"strategy",
|
|
218
|
+
"surfing",
|
|
219
|
+
"survival",
|
|
220
|
+
"tactical_rpg",
|
|
221
|
+
"tennis",
|
|
222
|
+
"text_adventure",
|
|
223
|
+
"tower_defense",
|
|
224
|
+
"trivia",
|
|
225
|
+
"turn_based_strategy",
|
|
226
|
+
"twin_stick",
|
|
227
|
+
"vehicle_combat",
|
|
228
|
+
"visual_novel",
|
|
229
|
+
"volleyball",
|
|
230
|
+
"word_puzzle",
|
|
231
|
+
"wrestling"
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
"category": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"description": "A classification for the type/nature of the software.",
|
|
237
|
+
"enum": [
|
|
238
|
+
"addon",
|
|
239
|
+
"application",
|
|
240
|
+
"beta",
|
|
241
|
+
"bios",
|
|
242
|
+
"compilation",
|
|
243
|
+
"coverdisk",
|
|
244
|
+
"demo",
|
|
245
|
+
"educational",
|
|
246
|
+
"firmware",
|
|
247
|
+
"freeware",
|
|
248
|
+
"game",
|
|
249
|
+
"homebrew",
|
|
250
|
+
"multimedia",
|
|
251
|
+
"promotional",
|
|
252
|
+
"prototype",
|
|
253
|
+
"scene_demo",
|
|
254
|
+
"shareware",
|
|
255
|
+
"unlicensed",
|
|
256
|
+
"utility"
|
|
257
|
+
]
|
|
258
|
+
},
|
|
259
|
+
"feature": {
|
|
260
|
+
"type": "string",
|
|
261
|
+
"description": "Input device, peripheral, or capability.",
|
|
262
|
+
"enum": [
|
|
263
|
+
"analog_stick",
|
|
264
|
+
"arcade_stick",
|
|
265
|
+
"balance_board",
|
|
266
|
+
"bongos",
|
|
267
|
+
"buzzer",
|
|
268
|
+
"camera",
|
|
269
|
+
"crank",
|
|
270
|
+
"dance_mat",
|
|
271
|
+
"dongle",
|
|
272
|
+
"drums",
|
|
273
|
+
"fishing_rod",
|
|
274
|
+
"flight_stick",
|
|
275
|
+
"gamepad",
|
|
276
|
+
"guitar",
|
|
277
|
+
"instrument",
|
|
278
|
+
"keyboard_controller",
|
|
279
|
+
"keyboard",
|
|
280
|
+
"light_gun",
|
|
281
|
+
"link_cable",
|
|
282
|
+
"maracas",
|
|
283
|
+
"mech_controller",
|
|
284
|
+
"microphone",
|
|
285
|
+
"motion_controls",
|
|
286
|
+
"mouse",
|
|
287
|
+
"multitap",
|
|
288
|
+
"nfc_portal",
|
|
289
|
+
"online",
|
|
290
|
+
"paddle",
|
|
291
|
+
"pedals",
|
|
292
|
+
"pointer",
|
|
293
|
+
"rumble",
|
|
294
|
+
"save_file",
|
|
295
|
+
"spinner",
|
|
296
|
+
"steering_wheel",
|
|
297
|
+
"stylus",
|
|
298
|
+
"touch_screen",
|
|
299
|
+
"trackball",
|
|
300
|
+
"train_controller",
|
|
301
|
+
"turntable",
|
|
302
|
+
"twin_stick",
|
|
303
|
+
"vr_headset",
|
|
304
|
+
"zapper"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
"mediaType": {
|
|
308
|
+
"type": "string",
|
|
309
|
+
"description": "The format/medium type of the file.",
|
|
310
|
+
"enum": [
|
|
311
|
+
"archive",
|
|
312
|
+
"bluray",
|
|
313
|
+
"cartridge",
|
|
314
|
+
"cdrom",
|
|
315
|
+
"download",
|
|
316
|
+
"dvd",
|
|
317
|
+
"floppy",
|
|
318
|
+
"gd_rom",
|
|
319
|
+
"hdd_image",
|
|
320
|
+
"laserdisc",
|
|
321
|
+
"memory_card",
|
|
322
|
+
"tape",
|
|
323
|
+
"umd"
|
|
324
|
+
]
|
|
325
|
+
},
|
|
326
|
+
"region": {
|
|
327
|
+
"type": "string",
|
|
328
|
+
"description": "Region encoding.",
|
|
329
|
+
"enum": [
|
|
330
|
+
"asia",
|
|
331
|
+
"australia",
|
|
332
|
+
"brazil",
|
|
333
|
+
"canada",
|
|
334
|
+
"china",
|
|
335
|
+
"europe",
|
|
336
|
+
"france",
|
|
337
|
+
"germany",
|
|
338
|
+
"hong-kong",
|
|
339
|
+
"india",
|
|
340
|
+
"italy",
|
|
341
|
+
"japan",
|
|
342
|
+
"korea",
|
|
343
|
+
"mexico",
|
|
344
|
+
"netherlands",
|
|
345
|
+
"ntsc-j",
|
|
346
|
+
"ntsc-u",
|
|
347
|
+
"pal-a",
|
|
348
|
+
"pal-b",
|
|
349
|
+
"pal-g",
|
|
350
|
+
"pal",
|
|
351
|
+
"russia",
|
|
352
|
+
"scandinavia",
|
|
353
|
+
"spain",
|
|
354
|
+
"taiwan",
|
|
355
|
+
"uk",
|
|
356
|
+
"usa",
|
|
357
|
+
"world"
|
|
358
|
+
]
|
|
359
|
+
},
|
|
360
|
+
"dumpStatus": {
|
|
361
|
+
"type": "string",
|
|
362
|
+
"description": "Quality/status of the ROM dump.",
|
|
363
|
+
"enum": [
|
|
364
|
+
"alternate",
|
|
365
|
+
"bad",
|
|
366
|
+
"good",
|
|
367
|
+
"hacked",
|
|
368
|
+
"overdump",
|
|
369
|
+
"pirate",
|
|
370
|
+
"prototype",
|
|
371
|
+
"trained",
|
|
372
|
+
"translated",
|
|
373
|
+
"underdump",
|
|
374
|
+
"unknown",
|
|
375
|
+
"unlicensed"
|
|
376
|
+
]
|
|
377
|
+
},
|
|
378
|
+
"ageRating": {
|
|
379
|
+
"type": "object",
|
|
380
|
+
"description": "Age/content ratings from various rating boards.",
|
|
381
|
+
"properties": {
|
|
382
|
+
"nsfw": {
|
|
383
|
+
"type": "boolean",
|
|
384
|
+
"description": "Whether the title contains adult or explicit content.",
|
|
385
|
+
"default": false
|
|
386
|
+
},
|
|
387
|
+
"minimum": {
|
|
388
|
+
"type": "integer",
|
|
389
|
+
"description": "Generic minimum recommended age when no official rating exists.",
|
|
390
|
+
"minimum": 0,
|
|
391
|
+
"maximum": 21
|
|
392
|
+
},
|
|
393
|
+
"esrb": {
|
|
394
|
+
"type": "string",
|
|
395
|
+
"description": "ESRB rating (North America).",
|
|
396
|
+
"enum": [
|
|
397
|
+
"ec",
|
|
398
|
+
"e",
|
|
399
|
+
"e10",
|
|
400
|
+
"t",
|
|
401
|
+
"m",
|
|
402
|
+
"ao",
|
|
403
|
+
"rp"
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
"pegi": {
|
|
407
|
+
"type": "string",
|
|
408
|
+
"description": "PEGI rating (Europe).",
|
|
409
|
+
"enum": [
|
|
410
|
+
"3",
|
|
411
|
+
"7",
|
|
412
|
+
"12",
|
|
413
|
+
"16",
|
|
414
|
+
"18"
|
|
415
|
+
]
|
|
416
|
+
},
|
|
417
|
+
"cero": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"description": "CERO rating (Japan).",
|
|
420
|
+
"enum": [
|
|
421
|
+
"a",
|
|
422
|
+
"b",
|
|
423
|
+
"c",
|
|
424
|
+
"d",
|
|
425
|
+
"z"
|
|
426
|
+
]
|
|
427
|
+
},
|
|
428
|
+
"usk": {
|
|
429
|
+
"type": "string",
|
|
430
|
+
"description": "USK rating (Germany).",
|
|
431
|
+
"enum": [
|
|
432
|
+
"0",
|
|
433
|
+
"6",
|
|
434
|
+
"12",
|
|
435
|
+
"16",
|
|
436
|
+
"18"
|
|
437
|
+
]
|
|
438
|
+
},
|
|
439
|
+
"acb": {
|
|
440
|
+
"type": "string",
|
|
441
|
+
"description": "ACB rating (Australia).",
|
|
442
|
+
"enum": [
|
|
443
|
+
"g",
|
|
444
|
+
"pg",
|
|
445
|
+
"m",
|
|
446
|
+
"ma15",
|
|
447
|
+
"r18",
|
|
448
|
+
"rc"
|
|
449
|
+
]
|
|
450
|
+
},
|
|
451
|
+
"grac": {
|
|
452
|
+
"type": "string",
|
|
453
|
+
"description": "GRAC rating (South Korea).",
|
|
454
|
+
"enum": [
|
|
455
|
+
"all",
|
|
456
|
+
"12",
|
|
457
|
+
"15",
|
|
458
|
+
"18"
|
|
459
|
+
]
|
|
460
|
+
},
|
|
461
|
+
"bbfc": {
|
|
462
|
+
"type": "string",
|
|
463
|
+
"description": "BBFC rating (United Kingdom).",
|
|
464
|
+
"enum": [
|
|
465
|
+
"u",
|
|
466
|
+
"pg",
|
|
467
|
+
"12",
|
|
468
|
+
"12a",
|
|
469
|
+
"15",
|
|
470
|
+
"18",
|
|
471
|
+
"r18"
|
|
472
|
+
]
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
},
|
|
476
|
+
"configFile": {
|
|
477
|
+
"type": "object",
|
|
478
|
+
"description": "An external configuration file for emulator or platform-specific settings.",
|
|
479
|
+
"required": [
|
|
480
|
+
"file"
|
|
481
|
+
],
|
|
482
|
+
"properties": {
|
|
483
|
+
"file": {
|
|
484
|
+
"type": "string",
|
|
485
|
+
"description": "Path to the configuration file."
|
|
486
|
+
},
|
|
487
|
+
"target": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"description": "Target emulator, core, or platform (e.g. 'retroarch', 'mame', 'dolphin')."
|
|
490
|
+
},
|
|
491
|
+
"description": {
|
|
492
|
+
"type": "string",
|
|
493
|
+
"description": "What this config file does or overrides."
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
"image": {
|
|
498
|
+
"type": "object",
|
|
499
|
+
"description": "An image file with optional alt text for accessibility.",
|
|
500
|
+
"required": [
|
|
501
|
+
"file"
|
|
502
|
+
],
|
|
503
|
+
"properties": {
|
|
504
|
+
"file": {
|
|
505
|
+
"type": "string",
|
|
506
|
+
"description": "Path to the image file."
|
|
507
|
+
},
|
|
508
|
+
"alt": {
|
|
509
|
+
"type": "string",
|
|
510
|
+
"description": "Alternative text describing the image for accessibility."
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
},
|
|
514
|
+
"creditEntry": {
|
|
515
|
+
"type": "object",
|
|
516
|
+
"description": "A person credited for work on the title.",
|
|
517
|
+
"required": [
|
|
518
|
+
"name"
|
|
519
|
+
],
|
|
520
|
+
"properties": {
|
|
521
|
+
"name": {
|
|
522
|
+
"type": "string",
|
|
523
|
+
"description": "Person's name."
|
|
524
|
+
},
|
|
525
|
+
"roles": {
|
|
526
|
+
"type": "array",
|
|
527
|
+
"description": "Job titles or roles (e.g. 'Director', 'Lead Programmer', 'Composer').",
|
|
528
|
+
"items": {
|
|
529
|
+
"type": "string"
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
"musicTrack": {
|
|
535
|
+
"type": "object",
|
|
536
|
+
"description": "A soundtrack or audio file from the title.",
|
|
537
|
+
"required": [
|
|
538
|
+
"file"
|
|
539
|
+
],
|
|
540
|
+
"properties": {
|
|
541
|
+
"title": {
|
|
542
|
+
"type": "string",
|
|
543
|
+
"description": "Display name of the music track."
|
|
544
|
+
},
|
|
545
|
+
"file": {
|
|
546
|
+
"type": "string",
|
|
547
|
+
"description": "Path to the audio file."
|
|
548
|
+
},
|
|
549
|
+
"background": {
|
|
550
|
+
"type": "boolean",
|
|
551
|
+
"description": "Whether this track is suitable for background/menu music when browsing titles.",
|
|
552
|
+
"default": false
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
"physicalMediaImage": {
|
|
557
|
+
"type": "object",
|
|
558
|
+
"description": "An image of physical media (cartridge, disc, tape, etc.).",
|
|
559
|
+
"required": [
|
|
560
|
+
"file"
|
|
561
|
+
],
|
|
562
|
+
"properties": {
|
|
563
|
+
"file": {
|
|
564
|
+
"type": "string",
|
|
565
|
+
"description": "Path to the physical media image file."
|
|
566
|
+
},
|
|
567
|
+
"alt": {
|
|
568
|
+
"type": "string",
|
|
569
|
+
"description": "Alternative text describing the image for accessibility."
|
|
570
|
+
},
|
|
571
|
+
"mediaId": {
|
|
572
|
+
"type": "string",
|
|
573
|
+
"description": "References the 'id' field of a media item, if specific to one disc/cart."
|
|
574
|
+
},
|
|
575
|
+
"type": {
|
|
576
|
+
"$ref": "#/$defs/mediaType"
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
},
|
|
580
|
+
"mediaItem": {
|
|
581
|
+
"type": "object",
|
|
582
|
+
"description": "A media file (ROM, disc image, tape, etc.).",
|
|
583
|
+
"required": [
|
|
584
|
+
"filename",
|
|
585
|
+
"type"
|
|
586
|
+
],
|
|
587
|
+
"properties": {
|
|
588
|
+
"id": {
|
|
589
|
+
"type": "string",
|
|
590
|
+
"description": "Unique identifier for this media item, used for referencing in other fields."
|
|
591
|
+
},
|
|
592
|
+
"filename": {
|
|
593
|
+
"type": "string",
|
|
594
|
+
"description": "Relative path to the media file within the archive."
|
|
595
|
+
},
|
|
596
|
+
"label": {
|
|
597
|
+
"type": "string",
|
|
598
|
+
"description": "Display name for this specific media item (e.g. 'Disc 1')."
|
|
599
|
+
},
|
|
600
|
+
"type": {
|
|
601
|
+
"$ref": "#/$defs/mediaType"
|
|
602
|
+
},
|
|
603
|
+
"bootable": {
|
|
604
|
+
"type": "boolean",
|
|
605
|
+
"description": "Whether the title can be started from this media. Set to false for data-only discs.",
|
|
606
|
+
"default": true
|
|
607
|
+
},
|
|
608
|
+
"index": {
|
|
609
|
+
"type": "integer",
|
|
610
|
+
"description": "Sequence number for multi-part media."
|
|
611
|
+
},
|
|
612
|
+
"region": {
|
|
613
|
+
"$ref": "#/$defs/region"
|
|
614
|
+
},
|
|
615
|
+
"md5": {
|
|
616
|
+
"type": "string",
|
|
617
|
+
"pattern": "^[a-fA-F0-9]{32}$",
|
|
618
|
+
"description": "MD5 checksum of the media file for verification."
|
|
619
|
+
},
|
|
620
|
+
"sha1": {
|
|
621
|
+
"type": "string",
|
|
622
|
+
"pattern": "^[a-fA-F0-9]{40}$",
|
|
623
|
+
"description": "SHA-1 checksum of the media file for verification."
|
|
624
|
+
},
|
|
625
|
+
"crc32": {
|
|
626
|
+
"type": "string",
|
|
627
|
+
"pattern": "^[a-fA-F0-9]{8}$",
|
|
628
|
+
"description": "CRC32 checksum of the media file for verification."
|
|
629
|
+
},
|
|
630
|
+
"version": {
|
|
631
|
+
"type": "string",
|
|
632
|
+
"description": "Version identifier for this ROM/media (e.g. 'Rev A', '1.1', 'v1.0')."
|
|
633
|
+
},
|
|
634
|
+
"status": {
|
|
635
|
+
"$ref": "#/$defs/dumpStatus"
|
|
636
|
+
},
|
|
637
|
+
"verified": {
|
|
638
|
+
"type": "boolean",
|
|
639
|
+
"description": "Whether this dump has been verified against a known database (No-Intro, Redump, etc.)."
|
|
640
|
+
},
|
|
641
|
+
"source": {
|
|
642
|
+
"type": "string",
|
|
643
|
+
"description": "Source database or group that verified the dump (e.g. 'No-Intro', 'Redump', 'TOSEC')."
|
|
644
|
+
},
|
|
645
|
+
"serial": {
|
|
646
|
+
"type": "string",
|
|
647
|
+
"description": "Official product serial/catalog number from the original media."
|
|
648
|
+
},
|
|
649
|
+
"notes": {
|
|
650
|
+
"type": "string",
|
|
651
|
+
"description": "Additional notes about this specific media file (e.g. distribution method, requirements, known issues)."
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
"compilationTitle": {
|
|
656
|
+
"type": "string",
|
|
657
|
+
"description": "Name of a title included in a compilation release."
|
|
658
|
+
},
|
|
659
|
+
"players": {
|
|
660
|
+
"type": "object",
|
|
661
|
+
"description": "Multiplayer capabilities.",
|
|
662
|
+
"properties": {
|
|
663
|
+
"min": {
|
|
664
|
+
"type": "integer",
|
|
665
|
+
"description": "Minimum number of players required to play.",
|
|
666
|
+
"default": 1
|
|
667
|
+
},
|
|
668
|
+
"max": {
|
|
669
|
+
"type": "integer",
|
|
670
|
+
"description": "Maximum number of simultaneous players supported."
|
|
671
|
+
},
|
|
672
|
+
"coop": {
|
|
673
|
+
"type": "boolean",
|
|
674
|
+
"description": "Whether cooperative play is supported."
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
"features": {
|
|
679
|
+
"type": "object",
|
|
680
|
+
"description": "Input devices, peripherals, and capabilities.",
|
|
681
|
+
"properties": {
|
|
682
|
+
"required": {
|
|
683
|
+
"type": "array",
|
|
684
|
+
"description": "Features required to use this title.",
|
|
685
|
+
"items": {
|
|
686
|
+
"$ref": "#/$defs/feature"
|
|
687
|
+
}
|
|
688
|
+
},
|
|
689
|
+
"supported": {
|
|
690
|
+
"type": "array",
|
|
691
|
+
"description": "Optional features the title supports.",
|
|
692
|
+
"items": {
|
|
693
|
+
"$ref": "#/$defs/feature"
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"type": "object",
|
|
700
|
+
"required": [
|
|
701
|
+
"schemaVersion",
|
|
702
|
+
"info",
|
|
703
|
+
"media"
|
|
704
|
+
],
|
|
705
|
+
"properties": {
|
|
706
|
+
"schemaVersion": {
|
|
707
|
+
"type": "string",
|
|
708
|
+
"pattern": "^\\d+-\\d+-\\d+$",
|
|
709
|
+
"description": "The schema version this manifest conforms to, using schemaver format MODEL-REVISION-ADDITION (e.g., '1-0-0')."
|
|
710
|
+
},
|
|
711
|
+
"manifestVersion": {
|
|
712
|
+
"type": "string",
|
|
713
|
+
"pattern": "^\\d+(\\.\\d+)*$",
|
|
714
|
+
"description": "Version of this manifest file, for tracking revisions (e.g., '1', '2.1')."
|
|
715
|
+
},
|
|
716
|
+
"info": {
|
|
717
|
+
"type": "object",
|
|
718
|
+
"description": "Title metadata and information.",
|
|
719
|
+
"required": [
|
|
720
|
+
"title",
|
|
721
|
+
"platform"
|
|
722
|
+
],
|
|
723
|
+
"properties": {
|
|
724
|
+
"title": {
|
|
725
|
+
"type": "string",
|
|
726
|
+
"description": "The primary display name of the title."
|
|
727
|
+
},
|
|
728
|
+
"alternativeTitles": {
|
|
729
|
+
"type": "array",
|
|
730
|
+
"description": "Alternative names (e.g. regional titles, translated names).",
|
|
731
|
+
"items": {
|
|
732
|
+
"type": "string"
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
"platform": {
|
|
736
|
+
"$ref": "#/$defs/platform",
|
|
737
|
+
"description": "Unique identifier for the platform."
|
|
738
|
+
},
|
|
739
|
+
"developer": {
|
|
740
|
+
"type": "string",
|
|
741
|
+
"description": "The studio or individual who developed the title."
|
|
742
|
+
},
|
|
743
|
+
"publisher": {
|
|
744
|
+
"type": "string",
|
|
745
|
+
"description": "The company that published the title."
|
|
746
|
+
},
|
|
747
|
+
"country": {
|
|
748
|
+
"type": "string",
|
|
749
|
+
"pattern": "^[a-z]{2}$",
|
|
750
|
+
"description": "Country of origin where the title was developed (ISO 3166-1 alpha-2 code, e.g. 'jp', 'us', 'gb')."
|
|
751
|
+
},
|
|
752
|
+
"releaseDate": {
|
|
753
|
+
"type": "string",
|
|
754
|
+
"format": "date",
|
|
755
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
756
|
+
"description": "Original release date in ISO 8601 format (YYYY-MM-DD)."
|
|
757
|
+
},
|
|
758
|
+
"description": {
|
|
759
|
+
"type": "string",
|
|
760
|
+
"description": "A text summary or synopsis of the title."
|
|
761
|
+
},
|
|
762
|
+
"category": {
|
|
763
|
+
"type": "array",
|
|
764
|
+
"description": "One or more classifications for the type/nature of the software.",
|
|
765
|
+
"items": {
|
|
766
|
+
"$ref": "#/$defs/category"
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
"genre": {
|
|
770
|
+
"type": "array",
|
|
771
|
+
"description": "One or more genre classifications.",
|
|
772
|
+
"items": {
|
|
773
|
+
"$ref": "#/$defs/genre"
|
|
774
|
+
}
|
|
775
|
+
},
|
|
776
|
+
"players": {
|
|
777
|
+
"$ref": "#/$defs/players"
|
|
778
|
+
},
|
|
779
|
+
"features": {
|
|
780
|
+
"$ref": "#/$defs/features"
|
|
781
|
+
},
|
|
782
|
+
"languages": {
|
|
783
|
+
"type": "array",
|
|
784
|
+
"description": "Languages supported (ISO 639-1 codes, e.g. 'en', 'ja', 'de').",
|
|
785
|
+
"items": {
|
|
786
|
+
"type": "string",
|
|
787
|
+
"pattern": "^[a-z]{2}$"
|
|
788
|
+
}
|
|
789
|
+
},
|
|
790
|
+
"credits": {
|
|
791
|
+
"type": "array",
|
|
792
|
+
"description": "People who worked on the title.",
|
|
793
|
+
"items": {
|
|
794
|
+
"$ref": "#/$defs/creditEntry"
|
|
795
|
+
}
|
|
796
|
+
},
|
|
797
|
+
"contents": {
|
|
798
|
+
"type": "array",
|
|
799
|
+
"description": "For compilations: list of titles included in this release. Include \"compilation\" in the category array when using this field.",
|
|
800
|
+
"items": {
|
|
801
|
+
"$ref": "#/$defs/compilationTitle"
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
"externalIds": {
|
|
805
|
+
"type": "object",
|
|
806
|
+
"description": "Identifiers from external databases for cross-referencing.",
|
|
807
|
+
"properties": {
|
|
808
|
+
"igdb": {
|
|
809
|
+
"type": "integer",
|
|
810
|
+
"description": "IGDB (Internet Game Database) ID."
|
|
811
|
+
},
|
|
812
|
+
"mobygames": {
|
|
813
|
+
"type": "integer",
|
|
814
|
+
"description": "MobyGames ID."
|
|
815
|
+
},
|
|
816
|
+
"thegamesdb": {
|
|
817
|
+
"type": "integer",
|
|
818
|
+
"description": "TheGamesDB ID."
|
|
819
|
+
},
|
|
820
|
+
"screenscraper": {
|
|
821
|
+
"type": "integer",
|
|
822
|
+
"description": "ScreenScraper ID."
|
|
823
|
+
},
|
|
824
|
+
"rawg": {
|
|
825
|
+
"type": "integer",
|
|
826
|
+
"description": "RAWG ID."
|
|
827
|
+
},
|
|
828
|
+
"gamefaqs": {
|
|
829
|
+
"type": "integer",
|
|
830
|
+
"description": "GameFAQs ID."
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
},
|
|
834
|
+
"rating": {
|
|
835
|
+
"$ref": "#/$defs/ageRating"
|
|
836
|
+
},
|
|
837
|
+
"notes": {
|
|
838
|
+
"type": "string",
|
|
839
|
+
"description": "Additional notes, warnings, or information (e.g. access codes, compatibility notes, copy protection details)."
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
},
|
|
843
|
+
"media": {
|
|
844
|
+
"type": "array",
|
|
845
|
+
"description": "The media files (ROMs, disc images, tapes, etc.) included in this package.",
|
|
846
|
+
"minItems": 1,
|
|
847
|
+
"items": {
|
|
848
|
+
"$ref": "#/$defs/mediaItem"
|
|
849
|
+
}
|
|
850
|
+
},
|
|
851
|
+
"assets": {
|
|
852
|
+
"type": "object",
|
|
853
|
+
"description": "Artwork, documentation, and other supplementary files.",
|
|
854
|
+
"properties": {
|
|
855
|
+
"boxFront": {
|
|
856
|
+
"$ref": "#/$defs/image",
|
|
857
|
+
"description": "Front box/case cover image."
|
|
858
|
+
},
|
|
859
|
+
"boxBack": {
|
|
860
|
+
"$ref": "#/$defs/image",
|
|
861
|
+
"description": "Back box/case cover image."
|
|
862
|
+
},
|
|
863
|
+
"boxSpine": {
|
|
864
|
+
"$ref": "#/$defs/image",
|
|
865
|
+
"description": "Box/case spine image."
|
|
866
|
+
},
|
|
867
|
+
"physicalMedia": {
|
|
868
|
+
"type": "array",
|
|
869
|
+
"description": "Images of the physical media (cartridge, disc, tape, floppy, etc.).",
|
|
870
|
+
"items": {
|
|
871
|
+
"$ref": "#/$defs/physicalMediaImage"
|
|
872
|
+
}
|
|
873
|
+
},
|
|
874
|
+
"logo": {
|
|
875
|
+
"$ref": "#/$defs/image",
|
|
876
|
+
"description": "Logo/wordmark with transparent background."
|
|
877
|
+
},
|
|
878
|
+
"backdrop": {
|
|
879
|
+
"$ref": "#/$defs/image",
|
|
880
|
+
"description": "Widescreen background artwork for TV/big screen interfaces. Should be free of text or logos."
|
|
881
|
+
},
|
|
882
|
+
"titleScreen": {
|
|
883
|
+
"$ref": "#/$defs/image",
|
|
884
|
+
"description": "Title screen screenshot."
|
|
885
|
+
},
|
|
886
|
+
"gameplay": {
|
|
887
|
+
"type": "array",
|
|
888
|
+
"description": "Gameplay screenshots.",
|
|
889
|
+
"items": {
|
|
890
|
+
"$ref": "#/$defs/image"
|
|
891
|
+
}
|
|
892
|
+
},
|
|
893
|
+
"manual": {
|
|
894
|
+
"type": "string",
|
|
895
|
+
"description": "Path to the manual (PDF, image, html or text)."
|
|
896
|
+
},
|
|
897
|
+
"map": {
|
|
898
|
+
"$ref": "#/$defs/image",
|
|
899
|
+
"description": "Map or world chart image."
|
|
900
|
+
},
|
|
901
|
+
"music": {
|
|
902
|
+
"type": "array",
|
|
903
|
+
"description": "Soundtrack or audio files from the game.",
|
|
904
|
+
"items": {
|
|
905
|
+
"$ref": "#/$defs/musicTrack"
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
},
|
|
910
|
+
"config": {
|
|
911
|
+
"type": "array",
|
|
912
|
+
"description": "External configuration files for emulators or platforms.",
|
|
913
|
+
"items": {
|
|
914
|
+
"$ref": "#/$defs/configFile"
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
}
|