com.gamethesky.hauntthesky.run

gamethesky.com

Documentation

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 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 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 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

cast array of ref #member Optional

The player's own cast from the Foe Booth, included on purpose (the game asks, off by default) so a replay and its card anywhere show them; each photo is a public blob in the player's repo. Looks only: whoever plays a part, the sim's monsters are the same, and a verifier ignores this field entirely. One member a part.

maxLength: 7 items
cleared integer Optional

Advisory: floors cleared.

minimum: 0maximum: 3
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
house ref com.atproto.repo.strongRef Optional

A house somebody made (a com.gamethesky.hauntthesky.house record), pinned to the version this night was played in. Absent, the night is the game's own three floors. A verifier fetches that exact version from its maker's repo and replays the log on it, or refuses; each version of a house has its own board.

kills integer Optional

Advisory: things put down.

minimum: 0
level integer Required

Advisory: the floor the run ended on: 1 the front hall, 2 upstairs, 3 the basement; in a made house, always 1.

minimum: 1maximum: 3
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 4 gives up; k 5 sets the walk to a = (forward + 1) * 3 + (turn + 1), each -1, 0 or 1; k 6 sidesteps (a -1, 0 or 1). Only inputs the sim accepted are logged. Example: `90.5.7,30.1.1,18.1.0`.

maxLength: 400000 bytes
score integer Required

Advisory: points. Higher ranks higher.

minimum: 0
seed string Required

The night: `arcade` (the same house for everyone), or a UTC date `YYYY-MM-DD` for that night's, with things moved around. 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 floor to the end of the run.

minimum: 1
won boolean Optional

Advisory: the Thing put down and the one they came for got out.

View raw schema
{
  "description": "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 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": {
      "cast": {
        "description": "The player's own cast from the Foe Booth, included on purpose (the game asks, off by default) so a replay and its card anywhere show them; each photo is a public blob in the player's repo. Looks only: whoever plays a part, the sim's monsters are the same, and a verifier ignores this field entirely. One member a part.",
        "items": {
          "ref": "#member",
          "type": "ref"
        },
        "maxLength": 7,
        "type": "array"
      },
      "cleared": {
        "description": "Advisory: floors cleared.",
        "maximum": 3,
        "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"
      },
      "house": {
        "description": "A house somebody made (a com.gamethesky.hauntthesky.house record), pinned to the version this night was played in. Absent, the night is the game's own three floors. A verifier fetches that exact version from its maker's repo and replays the log on it, or refuses; each version of a house has its own board.",
        "ref": "com.atproto.repo.strongRef",
        "type": "ref"
      },
      "kills": {
        "description": "Advisory: things put down.",
        "minimum": 0,
        "type": "integer"
      },
      "level": {
        "description": "Advisory: the floor the run ended on: 1 the front hall, 2 upstairs, 3 the basement; in a made house, always 1.",
        "maximum": 3,
        "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 4 gives up; k 5 sets the walk to a = (forward + 1) * 3 + (turn + 1), each -1, 0 or 1; k 6 sidesteps (a -1, 0 or 1). Only inputs the sim accepted are logged. Example: `90.5.7,30.1.1,18.1.0`.",
        "maxLength": 400000,
        "type": "string"
      },
      "score": {
        "description": "Advisory: points. Higher ranks higher.",
        "minimum": 0,
        "type": "integer"
      },
      "seed": {
        "description": "The night: `arcade` (the same house for everyone), or a UTC date `YYYY-MM-DD` for that night's, with things moved around. 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 floor to the end of the run.",
        "minimum": 1,
        "type": "integer"
      },
      "won": {
        "description": "Advisory: the Thing put down and the one they came for got out.",
        "type": "boolean"
      }
    },
    "required": [
      "simVersion",
      "seed",
      "log",
      "ticks",
      "score",
      "level",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}
member object

One of the cast: the part they play, the name they're billed under, and their photo.

Properties

image blob Required

The photo: for a body part, a cutout PNG with the background clear, about 400 pixels tall; for a face, a 256×256 JPEG. 192 KB at most; readers refuse a bigger one.

maxSize: 196.6 KB
name string Required

The name on the poster, 40 characters at most.

maxLength: 160 bytesmaxGraphemes: 40 graphemes
role string Required

The part: the ghouls, the hound, the Thing in the basement, its face up close (the scream), the one the player came for, the portrait in the hall, or the player themselves.

Known values: ghoul, hound, thing, scream, victim, portrait, you
View raw schema
{
  "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": "The photo: for a body part, a cutout PNG with the background clear, about 400 pixels tall; for a face, a 256×256 JPEG. 192 KB at most; readers refuse a bigger one.",
      "maxSize": 196608,
      "type": "blob"
    },
    "name": {
      "description": "The name on the poster, 40 characters at most.",
      "maxGraphemes": 40,
      "maxLength": 160,
      "type": "string"
    },
    "role": {
      "description": "The part: the ghouls, the hound, the Thing in the basement, its face up close (the scream), the one the player came for, the portrait in the hall, or the player themselves.",
      "knownValues": [
        "ghoul",
        "hound",
        "thing",
        "scream",
        "victim",
        "portrait",
        "you"
      ],
      "type": "string"
    }
  },
  "required": [
    "role",
    "name",
    "image"
  ],
  "type": "object"
}

Lexicon Garden

@