com.gamethesky.skyvortex.run

gamethesky.com

Documentation

One Sky Vortex run, 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 exactly. Owning the record is the identity proof, and replaying it is the score proof; score, ticks, level and the rest are advisory and never trusted by a board.

main record

One Sky Vortex run, 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 exactly. Owning the record is the identity proof, and replaying it is the score proof; score, ticks, level and the rest are advisory and never trusted by a board.

Record Key tid Timestamp-based ID

Properties

cleared integer Optional

Advisory: webs cleared.

minimum: 0maximum: 16
createdAt string datetime Required

An RFC 3339 formatted timestamp.

difficulty string Optional

The difficulty the run was played at; absent means normal. A verifier must replay at it, and each has its own board.

Known values: easy, normal, hard
faces array of ref #face Optional

The player's own photo faces the enemies wore, included on purpose (the game asks, off by default) so a replay anywhere shows them; each photo is a public blob in the player's repo. Looks only: the enemies' play is the sim's, and a verifier ignores this field entirely. Faces with a `role` were cast in the Foe Booth as a kind of enemy or the boss; the rest are the ladder. Six at most.

maxLength: 6 items
kills integer Optional

Advisory: enemies shot down.

minimum: 0
level integer Required

Advisory: the web the run ended on, 1 to 16, four a world.

minimum: 1maximum: 16
log string Required

The whole run as the only input the game takes. Comma-separated `<dtick>.<k>.<a>` entries: dtick is 60 Hz ticks since the previous entry; k 1 holds (a 1) or lets go (a 0) of the trigger; k 2 fires the superzapper (a 0); k 4 gives up; k 5 spins the claw (a -1, 0 or 1, held); k 6 sends the claw to lane a (or -1 for none). Only inputs the sim accepted are logged. Example: `100.6.3,2.1.1,40.5.-1`.

maxLength: 400000 bytes
score integer Required

Advisory: points. Higher ranks higher.

minimum: 0
seed string Required

The vortex: `arcade` (the same for everyone), or a UTC date `YYYY-MM-DD` for that day's waves. Each has its own board.

maxLength: 16 bytes
simVersion integer Required

Which rules produced this log. A verifier must replay under the matching version or refuse the run.

minimum: 1
ticks integer Required

Advisory: 60 Hz ticks from the first count to the end of the run.

minimum: 1
won boolean Optional

Advisory: all sixteen webs cleared.

View raw schema
{
  "description": "One Sky Vortex run, 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 exactly. Owning the record is the identity proof, and replaying it is the score proof; score, ticks, level and the rest are advisory and never trusted by a board.",
  "key": "tid",
  "record": {
    "properties": {
      "cleared": {
        "description": "Advisory: webs cleared.",
        "maximum": 16,
        "minimum": 0,
        "type": "integer"
      },
      "createdAt": {
        "format": "datetime",
        "type": "string"
      },
      "difficulty": {
        "description": "The difficulty the run was played at; absent means normal. A verifier must replay at it, and each has its own board.",
        "knownValues": [
          "easy",
          "normal",
          "hard"
        ],
        "type": "string"
      },
      "faces": {
        "description": "The player's own photo faces the enemies wore, included on purpose (the game asks, off by default) so a replay anywhere shows them; each photo is a public blob in the player's repo. Looks only: the enemies' play is the sim's, and a verifier ignores this field entirely. Faces with a `role` were cast in the Foe Booth as a kind of enemy or the boss; the rest are the ladder. Six at most.",
        "items": {
          "ref": "#face",
          "type": "ref"
        },
        "maxLength": 6,
        "type": "array"
      },
      "kills": {
        "description": "Advisory: enemies shot down.",
        "minimum": 0,
        "type": "integer"
      },
      "level": {
        "description": "Advisory: the web the run ended on, 1 to 16, four a world.",
        "maximum": 16,
        "minimum": 1,
        "type": "integer"
      },
      "log": {
        "description": "The whole run as the only input the game takes. Comma-separated `<dtick>.<k>.<a>` entries: dtick is 60 Hz ticks since the previous entry; k 1 holds (a 1) or lets go (a 0) of the trigger; k 2 fires the superzapper (a 0); k 4 gives up; k 5 spins the claw (a -1, 0 or 1, held); k 6 sends the claw to lane a (or -1 for none). Only inputs the sim accepted are logged. Example: `100.6.3,2.1.1,40.5.-1`.",
        "maxLength": 400000,
        "type": "string"
      },
      "score": {
        "description": "Advisory: points. Higher ranks higher.",
        "minimum": 0,
        "type": "integer"
      },
      "seed": {
        "description": "The vortex: `arcade` (the same for everyone), or a UTC date `YYYY-MM-DD` for that day's waves. Each has its own board.",
        "maxLength": 16,
        "type": "string"
      },
      "simVersion": {
        "description": "Which rules produced this log. A verifier must replay under the matching version or refuse the run.",
        "minimum": 1,
        "type": "integer"
      },
      "ticks": {
        "description": "Advisory: 60 Hz ticks from the first count to the end of the run.",
        "minimum": 1,
        "type": "integer"
      },
      "won": {
        "description": "Advisory: all sixteen webs cleared.",
        "type": "boolean"
      }
    },
    "required": [
      "simVersion",
      "seed",
      "log",
      "ticks",
      "score",
      "level",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}
face object

One of the player's own faces, as the enemies wore it in a run: its place among the run's faces, the part it was cast in (if any), the name under it, and the picture.

Properties

image blob Required

The face: a 256×256 JPEG, 64 KB at most, cropped to the middle of the photo. Readers refuse a bigger one.

maxSize: 65.5 KB
name string Required

The face's name, 40 characters at most.

maxLength: 160 bytesmaxGraphemes: 40 graphemes
role string Optional

Cast in the Foe Booth as one part: every enemy of that kind wears this face (flipper, tanker, spiker), or, for the boss, every enemy on the last web of each world. Absent, the face is on the ladder, one web at a time. One face a part.

Known values: flipper, tanker, spiker, boss
slot integer Required

The face's place among the run's faces, 0 first. The faces without a `role` are the ladder, in slot order: web n wears the ladder's slot (n - 1) mod its length, and the last web of each world wears them all. A ladder slot with no face in the record is worn as the plain enemy.

minimum: 0maximum: 5
View raw schema
{
  "description": "One of the player's own faces, as the enemies wore it in a run: its place among the run's faces, the part it was cast in (if any), the name under it, and the picture.",
  "properties": {
    "image": {
      "accept": [
        "image/jpeg"
      ],
      "description": "The face: a 256×256 JPEG, 64 KB at most, cropped to the middle of the photo. Readers refuse a bigger one.",
      "maxSize": 65536,
      "type": "blob"
    },
    "name": {
      "description": "The face's name, 40 characters at most.",
      "maxGraphemes": 40,
      "maxLength": 160,
      "type": "string"
    },
    "role": {
      "description": "Cast in the Foe Booth as one part: every enemy of that kind wears this face (flipper, tanker, spiker), or, for the boss, every enemy on the last web of each world. Absent, the face is on the ladder, one web at a time. One face a part.",
      "knownValues": [
        "flipper",
        "tanker",
        "spiker",
        "boss"
      ],
      "type": "string"
    },
    "slot": {
      "description": "The face's place among the run's faces, 0 first. The faces without a `role` are the ladder, in slot order: web n wears the ladder's slot (n - 1) mod its length, and the last web of each world wears them all. A ladder slot with no face in the record is worn as the plain enemy.",
      "maximum": 5,
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "slot",
    "name",
    "image"
  ],
  "type": "object"
}

Lexicon Garden

@