# com.gamethesky.hatsoff.run

> Published by [gamethesky.com](https://lexicon.garden/identity/did:plc:fpi7mvknwqh264gz6kug7pmk)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:fpi7mvknwqh264gz6kug7pmk/com.gamethesky.hatsoff.run)
- [Documentation](https://lexicon.garden/lexicon/did:plc:fpi7mvknwqh264gz6kug7pmk/com.gamethesky.hatsoff.run/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:fpi7mvknwqh264gz6kug7pmk/com.gamethesky.hatsoff.run/examples)

## Definitions

### `com.gamethesky.hatsoff.run`

**Type**: `record`

One Hats Off run, published by the player into their own repo. The record stores every shot rather than a score: the sim is deterministic, so re-running the fire log against the same seed on the same level reproduces the run exactly. Owning the record is the identity proof, and replaying it is the score proof — wave, cured and the rest are advisory and never trusted by a leaderboard.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `createdAt` | `string` (datetime) | Yes |  |
| `cured` | `integer` | Yes | Advisory: hats removed. |
| `dawn` | `boolean` | No | Advisory: the night was won — the President's hat came off, or the night's cap was reached. |
| `fires` | `string` | Yes | The whole run as the only input the game takes. Comma-separated `<dtick>.<weapon>.<x>.<z>` entries: dtick is 60 Hz ticks since the previous entry, weapon is 0 mist, 1 pulse, 2 drop, 3 for giving up (the run ends on that entry; x and z are 0), or 4 for a heading on an airlift level (x and z are then the direction in tenths, 0 and 0 to hover), x and z are otherwise the ground point in tenths of a unit (x east, z south, origin at the Washington Monument). Only shots the sim accepted are logged; a verifier applies the same rate, heat and cooldown rules and refuses a log that fires faster than they allow. Example: `120.0.-402.12,5.0.-398.14,30.1.-390.10`. |
| `holdPeak` | `integer` | No | Advisory: the most people sheltering at once. |
| `level` | `string` | Yes | The level the run was played on. Ids are append-only. |
| `rehatted` | `integer` | No | Advisory: cured people the horde caught again. |
| `rules` | `integer` | No | The level's own rules version the run was played under. A verifier must replay under the matching version or refuse the run. Absent means 1. |
| `seed` | `string` | Yes | Which horde: a date (YYYY-MM-DD, local to the player) for the nightly horde, or any word for a practice one. The sim seeds from the FNV-1a hash of this string. |
| `simVersion` | `integer` | Yes | Which rules produced these shots. A verifier must replay under the matching version or refuse the run. |
| `stage` | `integer` | No | Deprecated: an earlier build's stage index. Superseded by level. |
| `ticks` | `integer` | No | Advisory: the tick the steps fell. |
| `wave` | `integer` | Yes | Advisory: the wave the steps fell in. |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "One Hats Off run, published by the player into their own repo. The record stores every shot rather than a score: the sim is deterministic, so re-running the fire log against the same seed on the same level reproduces the run exactly. Owning the record is the identity proof, and replaying it is the score proof — wave, cured and the rest are advisory and never trusted by a leaderboard.",
      "key": "tid",
      "record": {
        "properties": {
          "createdAt": {
            "format": "datetime",
            "type": "string"
          },
          "cured": {
            "description": "Advisory: hats removed.",
            "minimum": 0,
            "type": "integer"
          },
          "dawn": {
            "description": "Advisory: the night was won — the President's hat came off, or the night's cap was reached.",
            "type": "boolean"
          },
          "fires": {
            "description": "The whole run as the only input the game takes. Comma-separated `<dtick>.<weapon>.<x>.<z>` entries: dtick is 60 Hz ticks since the previous entry, weapon is 0 mist, 1 pulse, 2 drop, 3 for giving up (the run ends on that entry; x and z are 0), or 4 for a heading on an airlift level (x and z are then the direction in tenths, 0 and 0 to hover), x and z are otherwise the ground point in tenths of a unit (x east, z south, origin at the Washington Monument). Only shots the sim accepted are logged; a verifier applies the same rate, heat and cooldown rules and refuses a log that fires faster than they allow. Example: `120.0.-402.12,5.0.-398.14,30.1.-390.10`.",
            "maxLength": 400000,
            "type": "string"
          },
          "holdPeak": {
            "description": "Advisory: the most people sheltering at once.",
            "minimum": 0,
            "type": "integer"
          },
          "level": {
            "description": "The level the run was played on. Ids are append-only.",
            "knownValues": [
              "liberty",
              "goldengate",
              "alamo",
              "rushmore",
              "raid",
              "airlift",
              "mall",
              "whitehouse"
            ],
            "maxLength": 32,
            "type": "string"
          },
          "rehatted": {
            "description": "Advisory: cured people the horde caught again.",
            "minimum": 0,
            "type": "integer"
          },
          "rules": {
            "description": "The level's own rules version the run was played under. A verifier must replay under the matching version or refuse the run. Absent means 1.",
            "minimum": 1,
            "type": "integer"
          },
          "seed": {
            "description": "Which horde: a date (YYYY-MM-DD, local to the player) for the nightly horde, or any word for a practice one. The sim seeds from the FNV-1a hash of this string.",
            "maxLength": 64,
            "type": "string"
          },
          "simVersion": {
            "description": "Which rules produced these shots. A verifier must replay under the matching version or refuse the run.",
            "minimum": 1,
            "type": "integer"
          },
          "stage": {
            "description": "Deprecated: an earlier build's stage index. Superseded by level.",
            "minimum": 1,
            "type": "integer"
          },
          "ticks": {
            "description": "Advisory: the tick the steps fell.",
            "minimum": 1,
            "type": "integer"
          },
          "wave": {
            "description": "Advisory: the wave the steps fell in.",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "seed",
          "level",
          "simVersion",
          "fires",
          "wave",
          "cured",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "com.gamethesky.hatsoff.run",
  "lexicon": 1
}
```
