CLCTN · TYPE MANIFEST · VIDEO GAME · SEPTEMBER 2026
CIB · THE LIBRARY
SUPERSEDES RETRO GAME
Retro is a date that keeps moving.
A type called retro game has to answer a question the app has no business asking: how old is old enough. In 2026 that line sits somewhere around the PS2, and it will have moved again by the time the type ships. Meanwhile a 1997 Saturn game and a 2019 Switch game are collected by the same person, in the same room, with the same anxieties — completeness, region, edition, and whether the thing still works. So the type is video game, the whole medium, and the era becomes a field rather than a boundary.
Written against vinyl.yml for shape and retro-computer.yml for the clock. This page also settles the signature question raised in One Roof, section 09: the CIB triptych is withdrawn and the game gets the generic ladder instead.
01 · WHY THE OLD CUT WAS WRONG
Four separate failures, each of which on its own would be a reason to widen the type. Together they make "retro" indefensible as a category boundary.
{{ w.b }}
WHAT IT COSTS TO KEEP THE OLD CUT
{{ w.cost }}
02 · FIVE MEDIA, ONE TYPE
The real design problem isn't the date, it's the media: a cartridge, a disc, a big PC box, a handheld card and a download code want different completeness, different lookup and different decay. One field — media — resolves all of it, because the rules that vary are exactly the rules the kit already parameterises.
Pick a medium. The two signatures, the clock, the lookup strategy and the hard part all change; the slots, the verbs and the scale do not.
{{ exTitle }}
{{ exSub }}
{{ exYears }}
SIGNATURE 1 · LADDER · {{ axisCount }} AXES · LAST STEP MEANS MISSING
{{ ladderNote }}
SIGNATURE 2 · SET · WHAT SHOULD BE IN THE BOX
{{ setNote }}
{{ setCount }}
THE ONE CLOCK · RENDERS IN THE STATUS SLOT · ESTIMATE
{{ clockName }}
{{ clockNote }}
HOW IT IS IDENTIFIED
{{ lookupCode }}
Note what stays put across all five: one scale, one clock, two signatures, the same seven slots. The medium changes the content of each, never the count — which is the One Roof contract holding under the widest type in the catalogue.
03 · VIDEO-GAME.YML
Fourteen fields, no new primitive. mediaRules is the only unusual key: a lookup table keyed on the media field that selects which insert slots, which clock formula and which identifier strategy apply. It is data, not code, and it is the reason one type can hold five media without five branches in the app.
RESOURCES/TYPES/VIDEO-GAME.YML
REPLACES RETRO-GAME
id: video-game
name:
singular: Game
plural: Games
collection: The Library
mark: "CIB"
icon: cartridge
gradient: [indigo, claret]
# Same title, different region or print = different object.
duplicates: rows
spine:
title: Title
subtitle: Platform # not the publisher — this is how shelves are read
year: Released # this print, not the game's first release
acquired: Acquired on
paid: Paid
value: Value
# One scale, shared by every axis and every medium. Missing is a step, so
# completeness and condition are the same question asked once.
conditions: [Sealed, Mint, Near mint, Very good, Good, Fair, Poor]
allowMissing: true
# Signatures — see One Roof, section 09. Two is the cap, and the clock
# is not one of them: it renders in the status slot like every other clock.
signatures:
- renderer: ladder
axes: [mediaCondition, boxCondition, manualCondition]
- renderer: set
binds: inserts # slots come from mediaRules, below
# The era is a consequence of the medium, never a boundary. This table is
# what lets one type cover 1977 to now without a second type.
mediaRules:
cartridge:
identifier: catalogueNumber
inserts: [manual, map, insert, regCard, dustSleeve, spineCard]
clock: saveBattery # lithium cell, ~25-35 yrs
optical:
identifier: barcode
inserts: [manual, inlay, regCard, demoDisc, obi]
clock: discRot # pressing-plant dependent, see Q2
floppy:
identifier: catalogueNumber
inserts: [manual, codeWheel, feelies, map, disks]
clock: mediaRot
card:
identifier: barcode
inserts: [manual, insert]
clock: none
code:
identifier: none # a licence is not an object; the card is
inserts: [codeCard, sleeve]
clock: codeExpiry # the only clock that can reach zero
lookup:
symbologies: [ean13, upc-a, jan]
providers: [openvgdb]
localCorpus: releases.json # ~180k releases, region-resolved
ocrFields: [title, platform, catalogueNumber]
identifierPattern: per-platform
searchable: [title, subtitle, year, publisher, region, edition, place]
placeLabel: Where it is
related: [subtitle, publisher, series]
fields:
- key: platform | Platform | text | auto
- key: publisher | Publisher | text | auto
- key: catalogueNumber | Catalogue no. | text | auto · the real id
- key: region | Region | choice | NTSC-U, NTSC-J,
PAL, region-free
- key: media | Media | choice | drives mediaRules
- key: edition | Edition | text | first print, Greatest
Hits, Platinum, budget
- key: revision | Revision | text | cart rev / disc ver
- key: mediaCondition | Cart / disc | scale | ladder axis 1
- key: boxCondition | Box | scale | ladder axis 2
- key: manualCondition | Manual | scale | ladder axis 3
- key: inserts | What's inside | set | slots per medium
- key: slab | Sealed / graded | choice | None, Sealed ungraded,
WATA, VGA
- key: saveBattery | Save battery | date | feeds the clock
- key: playLog | Played | log | [date, note, finished]
supersedes:
- type: official/retro-game@1
fields:
cart -> mediaCondition
box -> boxCondition
manual -> manualCondition
cib -> (derived from the ladder; field removed)
04 · IDENTITY — WHY TWO COPIES ARE NEVER THE SAME COPY
This is the type's hardest problem and the one a title-based lookup gets wrong every time. Four axes of variation, all of which move the price by a multiple, none of which are visible in the title.
AXIS
THE SAME GAME, TWO OBJECTS
HOW THE TYPE SETTLES IT
{{ i.k }}
{{ i.a }}
{{ i.b }}
05 · THE SEALED MARKET — A POSITION, NOT A FEATURE
WHAT THE TYPE DOES
A slab field with four values, and Sealed as the top step of the ordinary condition scale. A graded slab shows as an outline on the ladder's marker — the same treatment comics and trading cards get, because it is the same fact. Nothing else: no price index, no population report, no grading-service integration.
WHY IT STOPS THERE
The sealed-and-graded end of this hobby is a speculative market with a live controversy attached, and building for it would make the app an instrument of that market rather than a catalogue of a collection. Supporting the field is honest — people own slabs. Ranking, valuing or celebrating them is a product decision I would not make for you without asking.
06 · MIGRATION FROM RETRO GAME
Nobody's collection moves. Three of the four fields map by name, the fourth is derived and disappears, and the media field is filled in from the platform — a Mega Drive game is a cartridge, a Dreamcast game is a disc — with a one-screen confirm for the handful of platforms that shipped both.
{{ m.k }}
{{ m.t }}
{{ m.b }}
07 · OPEN QUESTIONS
{{ o.k }}
{{ o.q }}
{{ o.b }}