{
"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": [
"name",
"id",
"version",
"gamelogic",
"attributes"
],
"properties": {
"id": {
"type": "string",
"format": "record-key",
"description": "An ID for this game which will be used to refer to it in technical contexts. Must be the same as the ID of the release in 'replaces' if present, there can be one latestRelease record per ID"
},
"name": {
"type": "string",
"maxLength": 640,
"description": "The name of the game being played. Must match what the blob returns",
"maxGraphemes": 64,
"minGraphemes": 1
},
"assets": {
"type": "array",
"items": {
"ref": "#assets",
"type": "ref"
}
},
"version": {
"type": "string",
"maxLength": 32,
"minLemgth": 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"
},
"attributes": {
"ref": "#attributes",
"type": "ref"
},
"parameters": {
"ref": "#parameters",
"type": "ref"
},
"description": {
"type": "string",
"maxLength": 3000,
"description": "A description of this game, and why people might choose to play it",
"maxGraphemes": 300,
"minGraphemes": 1
}
}
},
"description": "A release of a playable game, and its logic"
},
"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"
},
"attributes": {
"type": "object",
"required": [
"players",
"complexity",
"skill",
"tags"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"knownValues": [
"games.atplay.taxonomy.mechanic#acting",
"games.atplay.taxonomy.mechanic#actionEvent",
"games.atplay.taxonomy.mechanic#actionDrafting",
"games.atplay.taxonomy.mechanic#actionPoints",
"games.atplay.taxonomy.mechanic#actionQueue",
"games.atplay.taxonomy.mechanic#actionRetrieval",
"games.atplay.taxonomy.mechanic#actionTimer",
"games.atplay.taxonomy.mechanic#advantageToken",
"games.atplay.taxonomy.mechanic#alliances",
"games.atplay.taxonomy.mechanic#areaMajorityInfluence",
"games.atplay.taxonomy.mechanic#areaMovement",
"games.atplay.taxonomy.mechanic#areaImpulse",
"games.atplay.taxonomy.mechanic#auctionBidding",
"games.atplay.taxonomy.mechanic#auctionCompensation",
"games.atplay.taxonomy.mechanic#auctionDexterity",
"games.atplay.taxonomy.mechanic#auctionDutch",
"games.atplay.taxonomy.mechanic#auctionDutchPriority",
"games.atplay.taxonomy.mechanic#auctionEnglish",
"games.atplay.taxonomy.mechanic#auctionFixedPlacement",
"games.atplay.taxonomy.mechanic#auctionMultipleLot",
"games.atplay.taxonomy.mechanic#auctionOnceAround",
"games.atplay.taxonomy.mechanic#auctionSealedBid",
"games.atplay.taxonomy.mechanic#auctionTurnOrderUntilPass",
"games.atplay.taxonomy.mechanic#automaticResourceGrowth",
"games.atplay.taxonomy.mechanic#bettingAndBluffing",
"games.atplay.taxonomy.mechanic#bias",
"games.atplay.taxonomy.mechanic#bidsAsWagers",
"games.atplay.taxonomy.mechanic#bingo",
"games.atplay.taxonomy.mechanic#bribery",
"games.atplay.taxonomy.mechanic#campaignBattleCardDriven",
"games.atplay.taxonomy.mechanic#cardPlayConflictResolution",
"games.atplay.taxonomy.mechanic#catchTheLeader",
"games.atplay.taxonomy.mechanic#chaining",
"games.atplay.taxonomy.mechanic#chitPullSystem",
"games.atplay.taxonomy.mechanic#closedDrafting",
"games.atplay.taxonomy.mechanic#closedEconomyAuction",
"games.atplay.taxonomy.mechanic#commandCards",
"games.atplay.taxonomy.mechanic#commoditySpeculation",
"games.atplay.taxonomy.mechanic#communicationLimits",
"games.atplay.taxonomy.mechanic#connections",
"games.atplay.taxonomy.mechanic#constrainedBidding",
"games.atplay.taxonomy.mechanic#contracts",
"games.atplay.taxonomy.mechanic#cooperativeGame",
"games.atplay.taxonomy.mechanic#crayonRailSystem",
"games.atplay.taxonomy.mechanic#criticalHitsAndFailures",
"games.atplay.taxonomy.mechanic#cubeTower",
"games.atplay.taxonomy.mechanic#deckConstruction",
"games.atplay.taxonomy.mechanic#deckBagAndPoolBuilding",
"games.atplay.taxonomy.mechanic#deduction",
"games.atplay.taxonomy.mechanic#delayedPurchase",
"games.atplay.taxonomy.mechanic#diceRolling",
"games.atplay.taxonomy.mechanic#dieIconResolution",
"games.atplay.taxonomy.mechanic#differentDiceMovement",
"games.atplay.taxonomy.mechanic#drawing",
"games.atplay.taxonomy.mechanic#elapsedRealTimeEnding",
"games.atplay.taxonomy.mechanic#enclosure",
"games.atplay.taxonomy.mechanic#endGameBonuses",
"games.atplay.taxonomy.mechanic#events",
"games.atplay.taxonomy.mechanic#finaleEnding",
"games.atplay.taxonomy.mechanic#flicking",
"games.atplay.taxonomy.mechanic#follow",
"games.atplay.taxonomy.mechanic#forceCommitment",
"games.atplay.taxonomy.mechanic#gridCoverage",
"games.atplay.taxonomy.mechanic#gridMovement",
"games.atplay.taxonomy.mechanic#handManagement",
"games.atplay.taxonomy.mechanic#hexagonGrid",
"games.atplay.taxonomy.mechanic#hiddenMovement",
"games.atplay.taxonomy.mechanic#hiddenRoles",
"games.atplay.taxonomy.mechanic#hiddenVictoryPoints",
"games.atplay.taxonomy.mechanic#highestLowestScoring",
"games.atplay.taxonomy.mechanic#hotPotato",
"games.atplay.taxonomy.mechanic#iCutYouChoose",
"games.atplay.taxonomy.mechanic#impulseMovement",
"games.atplay.taxonomy.mechanic#income",
"games.atplay.taxonomy.mechanic#increaseValueOfUnchosenResources",
"games.atplay.taxonomy.mechanic#induction",
"games.atplay.taxonomy.mechanic#interrupts",
"games.atplay.taxonomy.mechanic#investment",
"games.atplay.taxonomy.mechanic#killSteal",
"games.atplay.taxonomy.mechanic#kingOfTheHill",
"games.atplay.taxonomy.mechanic#ladderClimbing",
"games.atplay.taxonomy.mechanic#layering",
"games.atplay.taxonomy.mechanic#legacyGame",
"games.atplay.taxonomy.mechanic#lineDrawing",
"games.atplay.taxonomy.mechanic#lineOfSight",
"games.atplay.taxonomy.mechanic#loans",
"games.atplay.taxonomy.mechanic#loseATurn",
"games.atplay.taxonomy.mechanic#mancala",
"games.atplay.taxonomy.mechanic#mapAddition",
"games.atplay.taxonomy.mechanic#mapDeformation",
"games.atplay.taxonomy.mechanic#mapReduction",
"games.atplay.taxonomy.mechanic#market",
"games.atplay.taxonomy.mechanic#matching",
"games.atplay.taxonomy.mechanic#measurementMovement",
"games.atplay.taxonomy.mechanic#meldingAndSplaying",
"games.atplay.taxonomy.mechanic#memory",
"games.atplay.taxonomy.mechanic#minimapResolution",
"games.atplay.taxonomy.mechanic#modularBoard",
"games.atplay.taxonomy.mechanic#moveThroughDeck",
"games.atplay.taxonomy.mechanic#movementPoints",
"games.atplay.taxonomy.mechanic#movementTemplate",
"games.atplay.taxonomy.mechanic#movingMultipleUnits",
"games.atplay.taxonomy.mechanic#multiUseCards",
"games.atplay.taxonomy.mechanic#multipleMaps",
"games.atplay.taxonomy.mechanic#narrativeChoiceParagraph",
"games.atplay.taxonomy.mechanic#negotiation",
"games.atplay.taxonomy.mechanic#neighborScope",
"games.atplay.taxonomy.mechanic#networkAndRouteBuilding",
"games.atplay.taxonomy.mechanic#oncePerGameAbilities",
"games.atplay.taxonomy.mechanic#openDrafting",
"games.atplay.taxonomy.mechanic#orderCounters",
"games.atplay.taxonomy.mechanic#ordering",
"games.atplay.taxonomy.mechanic#ownership",
"games.atplay.taxonomy.mechanic#paperAndPencil",
"games.atplay.taxonomy.mechanic#passedActionToken",
"games.atplay.taxonomy.mechanic#patternBuilding",
"games.atplay.taxonomy.mechanic#patternMovement",
"games.atplay.taxonomy.mechanic#patternRecognition",
"games.atplay.taxonomy.mechanic#physicalRemoval",
"games.atplay.taxonomy.mechanic#pickUpAndDeliver",
"games.atplay.taxonomy.mechanic#piecesAsMap",
"games.atplay.taxonomy.mechanic#playerElimination",
"games.atplay.taxonomy.mechanic#playerJudge",
"games.atplay.taxonomy.mechanic#pointToPointMovement",
"games.atplay.taxonomy.mechanic#predictiveBid",
"games.atplay.taxonomy.mechanic#prisonersDilemma",
"games.atplay.taxonomy.mechanic#programmedMovement",
"games.atplay.taxonomy.mechanic#pushYourLuck",
"games.atplay.taxonomy.mechanic#questionsAndAnswers",
"games.atplay.taxonomy.mechanic#race",
"games.atplay.taxonomy.mechanic#randomProduction",
"games.atplay.taxonomy.mechanic#ratioCombatResultsTable",
"games.atplay.taxonomy.mechanic#reRollingAndLocking",
"games.atplay.taxonomy.mechanic#realTime",
"games.atplay.taxonomy.mechanic#relativeMovement",
"games.atplay.taxonomy.mechanic#resourceQueue",
"games.atplay.taxonomy.mechanic#resourceToMove",
"games.atplay.taxonomy.mechanic#rockPaperScissors",
"games.atplay.taxonomy.mechanic#rolePlaying",
"games.atplay.taxonomy.mechanic#rolesWithAsymmetricInformation",
"games.atplay.taxonomy.mechanic#rollSpinAndMove",
"games.atplay.taxonomy.mechanic#rondel",
"games.atplay.taxonomy.mechanic#scenarioMissionCampaignGame",
"games.atplay.taxonomy.mechanic#scoreAndResetGame",
"games.atplay.taxonomy.mechanic#secretUnitDeployment",
"games.atplay.taxonomy.mechanic#selectionOrderBid",
"games.atplay.taxonomy.mechanic#semiCooperativeGame",
"games.atplay.taxonomy.mechanic#setCollection",
"games.atplay.taxonomy.mechanic#simulation",
"games.atplay.taxonomy.mechanic#simultaneousActionSelection",
"games.atplay.taxonomy.mechanic#singing",
"games.atplay.taxonomy.mechanic#singleLoserGame",
"games.atplay.taxonomy.mechanic#slidePush",
"games.atplay.taxonomy.mechanic#soloSolitaireGame",
"games.atplay.taxonomy.mechanic#speedMatching",
"games.atplay.taxonomy.mechanic#spelling",
"games.atplay.taxonomy.mechanic#squareGrid",
"games.atplay.taxonomy.mechanic#stackingAndBalancing",
"games.atplay.taxonomy.mechanic#statCheckResolution",
"games.atplay.taxonomy.mechanic#staticCapture",
"games.atplay.taxonomy.mechanic#stockHolding",
"games.atplay.taxonomy.mechanic#storytelling",
"games.atplay.taxonomy.mechanic#suddenDeathEnding",
"games.atplay.taxonomy.mechanic#tags",
"games.atplay.taxonomy.mechanic#takeThat",
"games.atplay.taxonomy.mechanic#targetedClues",
"games.atplay.taxonomy.mechanic#teamBasedGame",
"games.atplay.taxonomy.mechanic#techTreesTechTracks",
"games.atplay.taxonomy.mechanic#threeDimensionalMovement",
"games.atplay.taxonomy.mechanic#tilePlacement",
"games.atplay.taxonomy.mechanic#trackMovement",
"games.atplay.taxonomy.mechanic#trading",
"games.atplay.taxonomy.mechanic#traitorGame",
"games.atplay.taxonomy.mechanic#trickTaking",
"games.atplay.taxonomy.mechanic#tugOfWar",
"games.atplay.taxonomy.mechanic#turnOrderAuction",
"games.atplay.taxonomy.mechanic#turnOrderClaimAction",
"games.atplay.taxonomy.mechanic#turnOrderPassOrder",
"games.atplay.taxonomy.mechanic#turnOrderProgressive",
"games.atplay.taxonomy.mechanic#turnOrderRandom",
"games.atplay.taxonomy.mechanic#turnOrderRoleOrder",
"games.atplay.taxonomy.mechanic#turnOrderStatBased",
"games.atplay.taxonomy.mechanic#turnOrderTimeTrack",
"games.atplay.taxonomy.mechanic#variablePhaseOrder",
"games.atplay.taxonomy.mechanic#variablePlayerPowers",
"games.atplay.taxonomy.mechanic#variableSetUp",
"games.atplay.taxonomy.mechanic#victoryPointsAsAResource",
"games.atplay.taxonomy.mechanic#voting",
"games.atplay.taxonomy.mechanic#workerPlacement",
"games.atplay.taxonomy.mechanic#workerPlacementWithDiceWorkers",
"games.atplay.taxonomy.mechanic#workerPlacementDifferentWorkerTypes",
"games.atplay.taxonomy.mechanic#zoneOfControl",
"games.atplay.taxonomy.category#abstractStrategy",
"games.atplay.taxonomy.category#actionDexterity",
"games.atplay.taxonomy.category#adventure",
"games.atplay.taxonomy.category#ageOfReason",
"games.atplay.taxonomy.category#americanCivilWar",
"games.atplay.taxonomy.category#americanIndianWars",
"games.atplay.taxonomy.category#americanRevolutionaryWar",
"games.atplay.taxonomy.category#americanWest",
"games.atplay.taxonomy.category#ancient",
"games.atplay.taxonomy.category#animals",
"games.atplay.taxonomy.category#arabian",
"games.atplay.taxonomy.category#aviationFlight",
"games.atplay.taxonomy.category#bluffing",
"games.atplay.taxonomy.category#book",
"games.atplay.taxonomy.category#cardGame",
"games.atplay.taxonomy.category#childrensGame",
"games.atplay.taxonomy.category#cityBuilding",
"games.atplay.taxonomy.category#civilWar",
"games.atplay.taxonomy.category#civilization",
"games.atplay.taxonomy.category#collectibleComponents",
"games.atplay.taxonomy.category#comicBookStrip",
"games.atplay.taxonomy.category#deduction",
"games.atplay.taxonomy.category#dice",
"games.atplay.taxonomy.category#economic",
"games.atplay.taxonomy.category#educational",
"games.atplay.taxonomy.category#electronic",
"games.atplay.taxonomy.category#environmental",
"games.atplay.taxonomy.category#exploration",
"games.atplay.taxonomy.category#fantasy",
"games.atplay.taxonomy.category#farming",
"games.atplay.taxonomy.category#fighting",
"games.atplay.taxonomy.category#gameSystem",
"games.atplay.taxonomy.category#horror",
"games.atplay.taxonomy.category#humor",
"games.atplay.taxonomy.category#industryManufacturing",
"games.atplay.taxonomy.category#koreanWar",
"games.atplay.taxonomy.category#mafia",
"games.atplay.taxonomy.category#math",
"games.atplay.taxonomy.category#matureAdult",
"games.atplay.taxonomy.category#maze",
"games.atplay.taxonomy.category#medical",
"games.atplay.taxonomy.category#medieval",
"games.atplay.taxonomy.category#memory",
"games.atplay.taxonomy.category#miniatures",
"games.atplay.taxonomy.category#modernWarfare",
"games.atplay.taxonomy.category#moviesTvRadioTheme",
"games.atplay.taxonomy.category#murderMystery",
"games.atplay.taxonomy.category#music",
"games.atplay.taxonomy.category#mythology",
"games.atplay.taxonomy.category#napoleonic",
"games.atplay.taxonomy.category#nautical",
"games.atplay.taxonomy.category#negotiation",
"games.atplay.taxonomy.category#novelBased",
"games.atplay.taxonomy.category#number",
"games.atplay.taxonomy.category#partyGame",
"games.atplay.taxonomy.category#pikeAndShot",
"games.atplay.taxonomy.category#pirates",
"games.atplay.taxonomy.category#political",
"games.atplay.taxonomy.category#postNapoleonic",
"games.atplay.taxonomy.category#prehistoric",
"games.atplay.taxonomy.category#printAndPlay",
"games.atplay.taxonomy.category#puzzle",
"games.atplay.taxonomy.category#racing",
"games.atplay.taxonomy.category#realTime",
"games.atplay.taxonomy.category#religious",
"games.atplay.taxonomy.category#renaissance",
"games.atplay.taxonomy.category#scienceFiction",
"games.atplay.taxonomy.category#spaceExploration",
"games.atplay.taxonomy.category#spiesSecretAgents",
"games.atplay.taxonomy.category#sports",
"games.atplay.taxonomy.category#territoryBuilding",
"games.atplay.taxonomy.category#trains",
"games.atplay.taxonomy.category#transportation",
"games.atplay.taxonomy.category#travel",
"games.atplay.taxonomy.category#trivia",
"games.atplay.taxonomy.category#videoGameTheme",
"games.atplay.taxonomy.category#vietnamWar",
"games.atplay.taxonomy.category#wargame",
"games.atplay.taxonomy.category#wordGame",
"games.atplay.taxonomy.category#worldWarI",
"games.atplay.taxonomy.category#worldWarII",
"games.atplay.taxonomy.category#zombies"
]
},
"description": "Tags describing the game's style, theme, and mechanics."
},
"skill": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "How much of the outcome is determined by player skill rather than chance. 0 = pure luck (e.g. snakes and ladders), 10 = pure skill (e.g. chess, with no random elements)."
},
"players": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxLength": 3,
"minLength": 1,
"description": "Supported player counts. One element means an exact count (e.g. [2] = exactly two players); two elements mean an inclusive range (e.g. [2, 4] = two to four players); three elements mean a range with the middle number being the recommended number (e.g. [2, 3, 5] = two to five players, plays best with three)."
},
"complexity": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Rules and decision-space complexity, equivalent to BoardGameGeek's complexity weighting. 1 = trivial to learn and play, 5 = heavy ruleset with deep strategy."
}
},
"description": "Static metadata about the game itself, surfaced to potential players when they're deciding whether to play it. Distinct from `parameters`, which configures gameplay."
},
"parameters": {
"type": "object",
"properties": {},
"description": "The configurable parameters for this game. Their defaults when in a game.release, or their values for a given game elsewhere."
},
"webDisplay": {
"type": "token",
"description": "These assets are intended to display this game on the web."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}