{
"$type": "com.atproto.lexicon.schema",
"defs": {
"credit": {
"properties": {
"did": {
"description": "The person's DID, when one is known.",
"format": "did",
"type": "string"
},
"name": {
"description": "The person's name as text; profiles are looked up by DID, never copied here.",
"maxGraphemes": 200,
"type": "string"
},
"role": {
"description": "What the person did for the map.",
"knownValues": [
"author",
"renewed"
],
"maxGraphemes": 32,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"main": {
"description": "A Galaxius map under a readable slug; its credits name who made it. Content records are immutable: a changed map is a new record under a new slug.",
"key": "any",
"record": {
"properties": {
"createdAt": {
"description": "When this record was created.",
"format": "datetime",
"type": "string"
},
"credits": {
"description": "The people who made the map.",
"items": {
"ref": "#credit",
"type": "ref"
},
"maxLength": 100,
"type": "array"
},
"description": {
"description": "A short description of the map.",
"maxGraphemes": 3000,
"type": "string"
},
"name": {
"description": "The map's name.",
"maxGraphemes": 100,
"type": "string"
},
"players": {
"description": "The number of seats the map is designed for; the engine and the game record decide what a game can seat.",
"ref": "#players",
"type": "ref"
},
"size": {
"description": "The playfield size, in hundredths of a map unit.",
"ref": "#size",
"type": "ref"
},
"stars": {
"description": "The stars, inline: at most 5,000, so the record stays under a PDS's usual 1 MiB request limit.",
"items": {
"ref": "#star",
"type": "ref"
},
"maxLength": 5000,
"minLength": 1,
"type": "array"
}
},
"required": [
"name",
"credits",
"size",
"players",
"stars",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"players": {
"properties": {
"max": {
"description": "The most seats the map is designed for.",
"minimum": 1,
"type": "integer"
},
"min": {
"description": "The fewest seats the map is designed for.",
"minimum": 1,
"type": "integer"
}
},
"required": [
"min",
"max"
],
"type": "object"
},
"size": {
"properties": {
"height": {
"description": "The playfield's height, in hundredths of a map unit.",
"minimum": 1,
"type": "integer"
},
"width": {
"description": "The playfield's width, in hundredths of a map unit.",
"minimum": 1,
"type": "integer"
}
},
"required": [
"width",
"height"
],
"type": "object"
},
"star": {
"properties": {
"asteroids": {
"description": "Asteroids to mine; a mining station yields 3 per asteroid per hour.",
"minimum": 0,
"type": "integer"
},
"defence": {
"description": "Combat multiplier e^(defence/100), in percent, for whoever holds the star. May be negative.",
"type": "integer"
},
"habitable": {
"description": "Whether a colony can be built; mining works either way.",
"type": "boolean"
},
"id": {
"description": "The star's number on the map; unique within the map.",
"minimum": 1,
"type": "integer"
},
"income": {
"description": "Money per game hour, once a colony is built.",
"minimum": 0,
"type": "integer"
},
"name": {
"description": "The star's name.",
"maxGraphemes": 64,
"type": "string"
},
"productivity": {
"description": "Factories beyond this many produce only 40%. May be negative.",
"type": "integer"
},
"start": {
"description": "Whether a player can start here.",
"type": "boolean"
},
"tech": {
"description": "The most labs the star can have.",
"minimum": 0,
"type": "integer"
},
"type": {
"description": "The star's sprite, 1-9 in the original maps; no effect on play.",
"minimum": 1,
"type": "integer"
},
"x": {
"description": "The star's x position, in hundredths of a map unit.",
"minimum": 0,
"type": "integer"
},
"y": {
"description": "The star's y position, in hundredths of a map unit.",
"minimum": 0,
"type": "integer"
}
},
"required": [
"id",
"name",
"x",
"y",
"type",
"income",
"productivity",
"tech",
"asteroids",
"defence",
"habitable",
"start"
],
"type": "object"
}
},
"description": "A Galaxius map: the star field, the seat count and the credits for one playfield.",
"id": "ink.igav.galaxius.temp.map",
"lexicon": 1
}