com.gamethesky.make.run

gamethesky.com

Documentation

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 the run exactly. Owning the record is the identity proof and replaying it is the score proof; score and the rest are advisory.

main record

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 the run exactly. Owning the record is the identity proof and replaying it is the score proof; score and the rest are advisory.

Record Key tid Timestamp-based ID

Properties

builds array of ref #build Optional

For a game whose players build their own: the build played with, one a chapter type that takes one. Part of play: a verifier replays with it, and refuses a build the chapter type wouldn't take (or any build on a game without builds). Absent on such a game: each type's default build.

maxLength: 8 items
choices array of integer Optional

For a game whose story branches: the option picked at each choice scene the run reached, in order, counting from 0. With the game, they say which chapters the logs belong to; a verifier walks the path they give and refuses a run whose picks or logs don't fit it. Absent (or empty) for a game without choices.

maxLength: 60 items
cleared integer Optional

Advisory: chapters cleared (on the path taken, in a game that branches).

minimum: 0maximum: 60
createdAt string datetime Required

An RFC 3339 formatted timestamp.

day string Optional

For a daily game's today's run: the day played (YYYY-MM-DD, UTC), whose seeds its chapters played on. A verifier refuses a day on a game that isn't daily, and one later than today. Absent: the run that's the same every time.

maxLength: 10 bytes
difficulty string Optional

For a game with levels: the level played (absent is normal; granny only on a game that offers it). A verifier refuses a level on a game without them.

maxLength: 8 bytes
Known values: granny, easy, normal, hard
game ref com.atproto.repo.strongRef Required

The game (a com.gamethesky.make.game record), pinned to the version played. The game may be edited in place later; a verifier replays the logs on it as it stands, so a rename keeps the run and a change of chapters retires it.

kills integer Optional

No description available.

minimum: 0
logs array of string Required

One log a chapter played, in play order: comma-separated `<dtick>.<k>.<a>` entries, dtick being 60 Hz ticks since the previous entry and k (one digit or two) and a the input as that chapter's module takes it. Every chapter but the last played was cleared. In a game that branches, only the chapters on the path taken are played, so there may be fewer logs than chapters.

maxLength: 60 itemsminLength: 1 items
look string Optional

Cosmetic: the colors the player's build wore (rrggbb.rrggbb.rrggbb: Fight the Sky's body, trim and gloves). Never read by the verifier.

maxLength: 40 bytes
makeVersion integer Required

The rules the run was played under, all told. A verifier must match it or refuse the run.

minimum: 1
score integer Required

Advisory: points, all chapters together.

minimum: 0
ticks integer Required

Advisory: 60 Hz ticks, all chapters together.

minimum: 1
vs ref #vs Optional

A ghost fight: the saved fighter fought, pinned to its version, and the skill it was fought at. A verifier fetches the fighter at that CID and replays against it; it never ranks.

won boolean Optional

Advisory: every chapter cleared (every chapter on the path taken, and the end reached, in a game that branches).

wore ref #wore Optional

Cosmetic: the face the player wore as Hero 1, so a replay and the run's card show it: a Bluesky handle, or a JPEG they chose to include. Never read by the verifier.

View raw schema
{
  "description": "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 the run exactly. Owning the record is the identity proof and replaying it is the score proof; score and the rest are advisory.",
  "key": "tid",
  "record": {
    "properties": {
      "builds": {
        "description": "For a game whose players build their own: the build played with, one a chapter type that takes one. Part of play: a verifier replays with it, and refuses a build the chapter type wouldn't take (or any build on a game without builds). Absent on such a game: each type's default build.",
        "items": {
          "ref": "#build",
          "type": "ref"
        },
        "maxLength": 8,
        "type": "array"
      },
      "choices": {
        "description": "For a game whose story branches: the option picked at each choice scene the run reached, in order, counting from 0. With the game, they say which chapters the logs belong to; a verifier walks the path they give and refuses a run whose picks or logs don't fit it. Absent (or empty) for a game without choices.",
        "items": {
          "maximum": 2,
          "minimum": 0,
          "type": "integer"
        },
        "maxLength": 60,
        "type": "array"
      },
      "cleared": {
        "description": "Advisory: chapters cleared (on the path taken, in a game that branches).",
        "maximum": 60,
        "minimum": 0,
        "type": "integer"
      },
      "createdAt": {
        "format": "datetime",
        "type": "string"
      },
      "day": {
        "description": "For a daily game's today's run: the day played (YYYY-MM-DD, UTC), whose seeds its chapters played on. A verifier refuses a day on a game that isn't daily, and one later than today. Absent: the run that's the same every time.",
        "maxLength": 10,
        "type": "string"
      },
      "difficulty": {
        "description": "For a game with levels: the level played (absent is normal; granny only on a game that offers it). A verifier refuses a level on a game without them.",
        "knownValues": [
          "granny",
          "easy",
          "normal",
          "hard"
        ],
        "maxLength": 8,
        "type": "string"
      },
      "game": {
        "description": "The game (a com.gamethesky.make.game record), pinned to the version played. The game may be edited in place later; a verifier replays the logs on it as it stands, so a rename keeps the run and a change of chapters retires it.",
        "ref": "com.atproto.repo.strongRef",
        "type": "ref"
      },
      "kills": {
        "minimum": 0,
        "type": "integer"
      },
      "logs": {
        "description": "One log a chapter played, in play order: comma-separated `<dtick>.<k>.<a>` entries, dtick being 60 Hz ticks since the previous entry and k (one digit or two) and a the input as that chapter's module takes it. Every chapter but the last played was cleared. In a game that branches, only the chapters on the path taken are played, so there may be fewer logs than chapters.",
        "items": {
          "maxLength": 400000,
          "type": "string"
        },
        "maxLength": 60,
        "minLength": 1,
        "type": "array"
      },
      "look": {
        "description": "Cosmetic: the colors the player's build wore (rrggbb.rrggbb.rrggbb: Fight the Sky's body, trim and gloves). Never read by the verifier.",
        "maxLength": 40,
        "type": "string"
      },
      "makeVersion": {
        "description": "The rules the run was played under, all told. A verifier must match it or refuse the run.",
        "minimum": 1,
        "type": "integer"
      },
      "score": {
        "description": "Advisory: points, all chapters together.",
        "minimum": 0,
        "type": "integer"
      },
      "ticks": {
        "description": "Advisory: 60 Hz ticks, all chapters together.",
        "minimum": 1,
        "type": "integer"
      },
      "vs": {
        "description": "A ghost fight: the saved fighter fought, pinned to its version, and the skill it was fought at. A verifier fetches the fighter at that CID and replays against it; it never ranks.",
        "ref": "#vs",
        "type": "ref"
      },
      "won": {
        "description": "Advisory: every chapter cleared (every chapter on the path taken, and the end reached, in a game that branches).",
        "type": "boolean"
      },
      "wore": {
        "description": "Cosmetic: the face the player wore as Hero 1, so a replay and the run's card show it: a Bluesky handle, or a JPEG they chose to include. Never read by the verifier.",
        "ref": "#wore",
        "type": "ref"
      }
    },
    "required": [
      "makeVersion",
      "game",
      "logs",
      "score",
      "ticks",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}
build object

A player's build for one chapter type (its SimModule.build): each stat's value in the type's own order, and the option picked.

Properties

module string Required

The chapter type (fight).

maxLength: 24 bytes
pick string Optional

The option picked (fight: the special, post, ratio or rush).

maxLength: 24 bytes
stats array of integer Required

Each stat's value, in the chapter type's order (fight: power, speed, reach, guts; 1–5 each, twelve points at most).

maxLength: 8 items
View raw schema
{
  "description": "A player's build for one chapter type (its SimModule.build): each stat's value in the type's own order, and the option picked.",
  "properties": {
    "module": {
      "description": "The chapter type (fight).",
      "maxLength": 24,
      "type": "string"
    },
    "pick": {
      "description": "The option picked (fight: the special, post, ratio or rush).",
      "maxLength": 24,
      "type": "string"
    },
    "stats": {
      "description": "Each stat's value, in the chapter type's order (fight: power, speed, reach, guts; 1–5 each, twelve points at most).",
      "items": {
        "maximum": 99,
        "minimum": 0,
        "type": "integer"
      },
      "maxLength": 8,
      "type": "array"
    }
  },
  "required": [
    "module",
    "stats"
  ],
  "type": "object"
}
vs object

No description available.

Properties

cid string cid Required

Its version, as fought.

skill integer Required

How sharp its CPU was picked to fight.

minimum: 1maximum: 10
style string Optional

Advisory: the fighter's style, copied from the record.

maxLength: 24 bytes
uri string at-uri Required

The com.gamethesky.make.fighter record fought.

View raw schema
{
  "properties": {
    "cid": {
      "description": "Its version, as fought.",
      "format": "cid",
      "type": "string"
    },
    "skill": {
      "description": "How sharp its CPU was picked to fight.",
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    },
    "style": {
      "description": "Advisory: the fighter's style, copied from the record.",
      "maxLength": 24,
      "type": "string"
    },
    "uri": {
      "description": "The com.gamethesky.make.fighter record fought.",
      "format": "at-uri",
      "type": "string"
    }
  },
  "required": [
    "uri",
    "cid",
    "skill"
  ],
  "type": "object"
}
wore object

No description available.

Properties

face blob Optional

A photo face the player chose to include.

maxSize: 196.6 KB
handle string handle Optional

A Bluesky account whose avatar was worn.

name string Required

No description available.

maxLength: 40 bytes
View raw schema
{
  "properties": {
    "face": {
      "accept": [
        "image/jpeg"
      ],
      "description": "A photo face the player chose to include.",
      "maxSize": 196608,
      "type": "blob"
    },
    "handle": {
      "description": "A Bluesky account whose avatar was worn.",
      "format": "handle",
      "type": "string"
    },
    "name": {
      "maxLength": 40,
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "type": "object"
}

Lexicon Garden

@