{
"id": "games.atplay.game.release",
"defs": {
"file": {
"type": "object",
"properties": {
"path": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "The path this file should be accessible at"
},
"contents": {
"type": "blob",
"maxSize": 2097152
}
}
},
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"title",
"version",
"gamelogic"
],
"properties": {
"title": {
"type": "string",
"format": "at-uri",
"maxLength": 512,
"description": "The game this is a release of. A plain AT-URI rather than a strongRef, because a title's CID changes whenever its `latest` pointer moves and this names the game, not a version of the record. Must be in the same repo as this release; readers ignore releases that name a title belonging to another DID."
},
"assets": {
"type": "array",
"items": {
"ref": "#assets",
"type": "ref"
}
},
"version": {
"type": "string",
"maxLength": 32,
"minLength": 3,
"description": "The game logic's version number in the format 'X.Y' or 'X.Y-alpha'. An increment in X means gameplay is intentionally (likely incompatibly) different, an increment in Y means a compatible fix (players could and may wish to upgrade mid-game). The presence of a hyphen + alpha string means unstable game logic, which may or may not be compatible with the subsequently released game logic vX.Y."
},
"replaces": {
"ref": "#replaces",
"type": "ref"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When this version of this game was released"
},
"gamelogic": {
"type": "blob",
"accept": [
"application/javascript"
],
"description": "Javascript IIFE module containing game logic conforming to the AtPlay standard"
}
}
},
"description": "One published build of a game: its logic, its display, and what it replaces. Everything that doesn't change between builds lives on the game's title instead (ADR 0037)."
},
"assets": {
"type": "object",
"required": [
"intent",
"files"
],
"properties": {
"files": {
"type": "array",
"items": {
"ref": "#file",
"type": "ref"
},
"minLength": 1
},
"intent": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "The intended purpose of these assets.",
"knownValues": [
"games.atplay.game.release#webDisplay"
]
}
}
},
"replaces": {
"type": "object",
"required": [
"previous",
"changeNotes"
],
"properties": {
"previous": {
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"changeNotes": {
"type": "string",
"maxLength": 10000,
"description": "A description of what changed between the referenced previous version, and this one. Supports markdown.",
"maxGraphemes": 1000
}
},
"description": "A statement that this game logic is intended to replace this previous version for new games"
},
"webDisplay": {
"type": "token",
"description": "These assets are intended to display this game on the web."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}