com.gamethesky.make.game

gamethesky.com

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "chapter": {
      "properties": {
        "backdrop": {
          "accept": [
            "image/jpeg",
            "image/png"
          ],
          "description": "A picture for this chapter's sky or backdrop, drawn behind the play where the chapter type can (at most 1600×900). Public once published. Looks only: play, boards and the verifier never read it.",
          "maxSize": 716800,
          "type": "blob"
        },
        "level": {
          "description": "A level the builder drew in the maker, in place of the preset's own map, for modules whose levels can be drawn (platformer, house, tank maze, vortex, walk-through). A reader runs the module's own checker on it and refuses the game if it fails.",
          "ref": "#level",
          "type": "ref"
        },
        "module": {
          "description": "The engine, one of Game the Sky's games made a chapter: platformer, house (a haunted floor), tanks (a tank maze), vortex (a tube of lanes), roll (a tilting course), fight (a bout), golf (a hole), cycles, discs, uplink and canyon (the grid), belts (the counter), race (a sling race), gunner (the door gunner), the arcade classics, walk (a haunted walk-through: no gun, a nerve meter), and fps (first person, armed, in a place such as a military facility: guards, keycards, intel, extraction). The list grows as games are added; a reader refuses a module it doesn't have.",
          "knownValues": [
            "platformer",
            "house",
            "tanks",
            "vortex",
            "roll",
            "fight",
            "golf",
            "cycles",
            "discs",
            "uplink",
            "canyon",
            "belts",
            "race",
            "gunner",
            "drones",
            "landing",
            "deckgun",
            "minefield",
            "pipes",
            "catch",
            "fence",
            "airdrop",
            "invaders",
            "crossing",
            "walk",
            "fps"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "next": {
          "description": "Where the path goes once this chapter is cleared, when it isn't simply the next chapter: a later chapter's index counting from 0, written in digits (\"3\"), or \"end\" (the ending). Forward only: a reader lets go of a value that isn't later than this chapter or is past the last, and the chapter goes on to the next as if it had none. Absent: the next chapter, or the ending after the last. Part of play.",
          "maxLength": 8,
          "type": "string"
        },
        "preset": {
          "description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
          "maxLength": 32,
          "type": "string"
        },
        "settings": {
          "description": "The module's knobs as an object of whole numbers by key (for example {\"lives\": 3, \"speed\": 120}). Each module declares its keys and ranges; readers clamp to them, and a missing key takes its default.",
          "type": "unknown"
        },
        "textures": {
          "description": "The builder's own art for the pieces of the chapter's level, by piece (the module's own names: the platformer's ground, bricks and ledge; the house's and the tank maze's wall and floor; the walk-through's wall, floor, ceiling and portrait), each a blob: a square JPEG (256×256, at most 120 KB) drawn tiled, one a square of the level. Public once published. Looks only.",
          "type": "unknown"
        },
        "title": {
          "maxGraphemes": 40,
          "maxLength": 160,
          "type": "string"
        },
        "version": {
          "description": "The module's rules this chapter was built on. A reader that doesn't have that version refuses the game rather than playing it differently.",
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "module",
        "version",
        "title",
        "preset",
        "settings"
      ],
      "type": "object"
    },
    "choice": {
      "description": "One way on from a scene's choice.",
      "properties": {
        "label": {
          "description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
          "maxGraphemes": 60,
          "maxLength": 240,
          "type": "string"
        },
        "to": {
          "description": "Where it goes: a chapter's index counting from 0, written in digits (\"2\"), this scene's own chapter or a later one; or \"end\", the ending (not from the opening scene: a run plays at least one chapter). Arriving at another chapter plays that chapter's own scene (and its choice) first.",
          "maxLength": 8,
          "type": "string"
        }
      },
      "required": [
        "label",
        "to"
      ],
      "type": "object"
    },
    "level": {
      "properties": {
        "rows": {
          "description": "The grid, top row first, one character a square, every row the same length. The characters are the module's own. The platformer: . air, # ground, = bricks, - ledge, o coin, ^ spikes, w walker, h hopper, B boss, + extra life, S start, D door. The house: Make a House's tiles. The walk-through: the house's walls, portraits, windows, start, key and doors, E the way out, jump-outs (g h f x V T, 1 to 8 the maker's members), sounds (A L R I J N Y), F a fog machine, props (s Z C t H c j w b). The tank maze: a square, # block, . floor, S you, r a rival. The vortex: o the rim, one square a lane, a loop for a closed tube or a line for an open one.",
          "items": {
            "maxLength": 160,
            "type": "string"
          },
          "maxLength": 24,
          "minLength": 8,
          "type": "array"
        }
      },
      "required": [
        "rows"
      ],
      "type": "object"
    },
    "main": {
      "description": "A game somebody made in Make the Sky, published into their own repo: a title, a line about it, its look, and one to eight chapters, each one of Game the Sky's engines (a module) on one of its levels (a preset) with its knobs set. Play is decided by the chapters alone (and, in a game whose story branches, where its choices and jumps go). A game is edited in place (the same record, a new version): its board belongs to its way of playing (the chapters' modules, versions, presets and settings, and its paths), so renaming or restyling it keeps the board, and changing a chapter starts a fresh one. A run pins the version it was played on; a verifier replays it on the game as it stands and takes it only if it replays the same.",
      "key": "tid",
      "record": {
        "properties": {
          "carryLives": {
            "description": "Lives carry over: each chapter with lives after the first starts with the lives the player had left (at most 9), not its own lives setting; chapters without lives pass them along. Part of play: a game with it has its own board.",
            "type": "boolean"
          },
          "cast": {
            "description": "The maker's own Foe Booth cast, included on purpose (off by default): each photo is a public blob in the maker's repo. Looks only: a verifier ignores it. Absent, players see their own cast or the engines' own monsters.",
            "items": {
              "ref": "#member",
              "type": "ref"
            },
            "maxLength": 15,
            "type": "array"
          },
          "chapters": {
            "description": "Played in order, unless the game branches: clearing one goes on to the next (or where its next says, and a scene's choice can send the player ahead); losing one ends the run.",
            "items": {
              "ref": "#chapter",
              "type": "ref"
            },
            "maxLength": 8,
            "minLength": 1,
            "type": "array"
          },
          "cover": {
            "accept": [
              "image/jpeg",
              "image/png"
            ],
            "description": "The game's picture: its page, its share card, its tile in the gallery. 1200×630, cropped by the maker. Public once published. Looks only: play, boards and the verifier never read it.",
            "maxSize": 614400,
            "type": "blob"
          },
          "createdAt": {
            "format": "datetime",
            "type": "string"
          },
          "description": {
            "maxGraphemes": 200,
            "maxLength": 800,
            "type": "string"
          },
          "logo": {
            "accept": [
              "image/png",
              "image/jpeg"
            ],
            "description": "The game's title as a picture (a PNG with a clear background, at most 1200×400), shown in place of the typed title on its page, its chapter cards and its share card; the typed title stays for readers. Public once published. Looks only.",
            "maxSize": 409600,
            "type": "blob"
          },
          "remixOf": {
            "description": "The game this one was remixed from, pinned to the version remixed: credit, shown on the game's page. Absent for an original.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "scenes": {
            "description": "The story told between chapters: cut-scenes, one at most before each chapter (the first is the opening) and one each for winning and losing at the end (and, in a game whose story branches, an ending of a way's own: see the scene's chapter). A scene a reader can't use is skipped, never the game. Words and looks only (not part of play, so adding or editing scenes keeps the game's board, and a verifier never reads them), except a scene's choices: where each goes is part of play.",
            "items": {
              "ref": "#scene",
              "type": "ref"
            },
            "maxLength": 10,
            "type": "array"
          },
          "theme": {
            "ref": "#theme",
            "type": "ref"
          },
          "title": {
            "maxGraphemes": 60,
            "maxLength": 240,
            "type": "string"
          }
        },
        "required": [
          "title",
          "theme",
          "chapters",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "member": {
      "description": "One of the cast: the part they play, the name they're billed under, and their photo.",
      "properties": {
        "image": {
          "accept": [
            "image/png",
            "image/jpeg"
          ],
          "description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
          "maxSize": 196608,
          "type": "blob"
        },
        "name": {
          "maxGraphemes": 40,
          "maxLength": 160,
          "type": "string"
        },
        "role": {
          "description": "One of the fixed parts, or m1 to m8: one of the maker's own cast members, placed by hand in levels that take them (the walk-through's 1 to 8). A member's photo says what they are: a cutout PNG is a figure, a JPEG a face.",
          "knownValues": [
            "ghoul",
            "hound",
            "thing",
            "scream",
            "victim",
            "portrait",
            "you",
            "m1",
            "m2",
            "m3",
            "m4",
            "m5",
            "m6",
            "m7",
            "m8"
          ],
          "type": "string"
        }
      },
      "required": [
        "role",
        "name",
        "image"
      ],
      "type": "object"
    },
    "scene": {
      "description": "A cut-scene: a title and a few lines typed out over a letterboxed screen, each said by one of the cast or by nobody (narration), over a background of the builder's choosing.",
      "properties": {
        "at": {
          "description": "Where it plays: before a chapter (see chapter), or at the end, after the last chapter is cleared (win) or after a chapter is lost (lose), before the results.",
          "knownValues": [
            "before",
            "win",
            "lose"
          ],
          "maxLength": 16,
          "type": "string"
        },
        "bg": {
          "description": "What plays behind the words: replay, the last moments of the chapter just played, slowed down, dimmed and silent (a flyby before the first chapter, where nothing's been played yet); flyby, a slow look round the next chapter's level; picture, the builder's own (see picture); plain, the game's theme.",
          "knownValues": [
            "replay",
            "flyby",
            "picture",
            "plain"
          ],
          "maxLength": 16,
          "type": "string"
        },
        "chapter": {
          "description": "For a scene before a chapter: which one, counting from 0 (0 is the opening, before the first chapter's card). For an ending (win or lose) in a game whose story branches: the ending for the way whose last chapter played was this one; the ending without a chapter plays wherever no way's own matches. Looks only.",
          "maximum": 7,
          "minimum": 0,
          "type": "integer"
        },
        "choices": {
          "description": "For a scene before a chapter: a choice of two or three ways, shown as buttons after its last line. Picking one plays where it goes instead of this scene's chapter. A reader that can't take every option (one going backward, past the last chapter, or to the ending from the opening) plays the scene without a choice. Where the ways go is part of play; their labels are words.",
          "items": {
            "ref": "#choice",
            "type": "ref"
          },
          "maxLength": 3,
          "minLength": 2,
          "type": "array"
        },
        "lines": {
          "description": "Typed out one at a time; the player moves on line by line.",
          "items": {
            "ref": "#sceneLine",
            "type": "ref"
          },
          "maxLength": 6,
          "type": "array"
        },
        "music": {
          "description": "A mood of music under the scene. Absent: none.",
          "knownValues": [
            "musicbox",
            "heartbeat",
            "unease",
            "dread",
            "tension",
            "groove",
            "pulse",
            "drift",
            "alarm",
            "island",
            "heist"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "picture": {
          "accept": [
            "image/jpeg",
            "image/png"
          ],
          "description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
          "maxSize": 716800,
          "type": "blob"
        },
        "sting": {
          "description": "A recorded sound as the scene opens, from the horror pack. Absent: none.",
          "knownValues": [
            "creepy_hello",
            "creepy_laugh",
            "female_scream",
            "intrigue_event",
            "jump_scare",
            "jump_scare_horn",
            "lets_play"
          ],
          "maxLength": 32,
          "type": "string"
        },
        "title": {
          "maxGraphemes": 60,
          "maxLength": 240,
          "type": "string"
        }
      },
      "required": [
        "at",
        "bg"
      ],
      "type": "object"
    },
    "sceneLine": {
      "properties": {
        "text": {
          "maxGraphemes": 160,
          "maxLength": 640,
          "type": "string"
        },
        "who": {
          "description": "Who says it: one of the cast's parts or the maker's own members (their photo and name show beside the line). Absent: narration.",
          "knownValues": [
            "ghoul",
            "hound",
            "thing",
            "scream",
            "victim",
            "portrait",
            "you",
            "m1",
            "m2",
            "m3",
            "m4",
            "m5",
            "m6",
            "m7",
            "m8"
          ],
          "maxLength": 16,
          "type": "string"
        }
      },
      "required": [
        "text"
      ],
      "type": "object"
    },
    "theme": {
      "properties": {
        "mood": {
          "description": "How the chapters light their worlds.",
          "knownValues": [
            "bright",
            "dusk",
            "cold",
            "neon",
            "space",
            "horror",
            "retro"
          ],
          "type": "string"
        },
        "palette": {
          "description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
          "items": {
            "maxLength": 7,
            "type": "string"
          },
          "maxLength": 5,
          "minLength": 5,
          "type": "array"
        },
        "pattern": {
          "knownValues": [
            "none",
            "grid",
            "stripes",
            "dots",
            "checks",
            "waves",
            "stars"
          ],
          "type": "string"
        },
        "preset": {
          "description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
          "maxLength": 20,
          "type": "string"
        },
        "type": {
          "description": "The typeface for titles.",
          "knownValues": [
            "anton",
            "creepster",
            "inter"
          ],
          "type": "string"
        }
      },
      "required": [
        "palette",
        "pattern",
        "mood",
        "type"
      ],
      "type": "object"
    }
  },
  "id": "com.gamethesky.make.game",
  "lexicon": 1
}

Validate Record

Validate a record against com.gamethesky.make.game

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:fpi7mvknwqh264gz6kug7pmk
CID
bafyreidbdzkm56w6h35z74rwhldj73kfxhsbiidecuxi73kh742gkfy77u
Indexed At
2026-10-23 07:55 UTC
AT-URI
at://did:plc:fpi7mvknwqh264gz6kug7pmk/com.atproto.lexicon.schema/com.gamethesky.make.game

Version History (18 versions)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • One play of a Make the Sky game, published by the player into their own repo. It stores every input rather than trusting a score: each chapter's engine is deterministic, so replaying its log on the same game reproduces …

  • lol.folk.game record

    A game, published by the developer that made it. One per repo: the record lives in the developer's own repository and is the canonical, self-asserted definition of the game. Player-side records reference it by AT-URI.

  • One night of Haunt the Sky, published by the player into their own repo. The record stores every input rather than trusting a score: the sim is deterministic, so replaying the log on the same seed reproduces the run exa…

Lexicon Garden

@