com.gamethesky.skyvortex.run

gamethesky.com

Schema Diff

+13 -3

From

CID
bafyreifmbwdobe7...
Indexed At
2026-10-21 17:50 UTC
View this version

To

CID
bafyreidjfrhjog2...
Indexed At
2026-10-21 19:57 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.skyvortex.run#face.role" }
  • AddedEdge AddedEdge { src: "com.gamethesky.skyvortex.run#face", tgt: "com.gamethesky.skyvortex.run#face.role", kind: "prop", name: Some("role") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.gamethesky.skyvortex.run#face.role" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.gamethesky.skyvortex.run#face", tgt: "com.gamethesky.skyvortex.run#face.role", kind: "prop", name: Some("role") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "face": {
5 -
      "description": "One of the player's own faces, as the enemies wore it in a run: its place on the ladder, the name under it, and the picture.",
5 +
      "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.",
6 6
      "properties": {
7 7
        "image": {
8 8
          "accept": [
9 9
            "image/jpeg"
10 10
          ],
11 11
          "description": "The face: a 256×256 JPEG, 64 KB at most, cropped to the middle of the photo. Readers refuse a bigger one.",
12 12
          "maxSize": 65536,
13 13
          "type": "blob"
14 14
        },
15 15
        "name": {
16 16
          "description": "The face's name, 40 characters at most.",
17 17
          "maxGraphemes": 40,
18 18
          "maxLength": 160,
19 19
          "type": "string"
20 20
        },
21 +
        "role": {
22 +
          "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.",
23 +
          "knownValues": [
24 +
            "flipper",
25 +
            "tanker",
26 +
            "spiker",
27 +
            "boss"
28 +
          ],
29 +
          "type": "string"
30 +
        },
21 31
        "slot": {
22 -
          "description": "The face's place on the ladder, 0 first. A slot with no face in the record is worn as the plain enemy.",
32 +
          "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.",
23 33
          "maximum": 5,
24 34
          "minimum": 0,
25 35
          "type": "integer"
26 36
        }
27 37
      },
28 38
      "required": [
29 39
        "slot",
30 40
        "name",
31 41
        "image"
32 42
      ],
33 43
      "type": "object"
34 44
    },
35 45
    "main": {
36 46
      "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.",
37 47
      "key": "tid",
38 48
      "record": {
39 49
        "properties": {
40 50
          "cleared": {
41 51
            "description": "Advisory: webs cleared.",
42 52
            "maximum": 16,
43 53
            "minimum": 0,
44 54
            "type": "integer"
45 55
          },
46 56
          "createdAt": {
47 57
            "format": "datetime",
48 58
            "type": "string"
49 59
          },
50 60
          "difficulty": {
51 61
            "description": "The difficulty the run was played at; absent means normal. A verifier must replay at it, and each has its own board.",
52 62
            "knownValues": [
53 63
              "easy",
54 64
              "normal",
55 65
              "hard"
56 66
            ],
57 67
            "type": "string"
58 68
          },
59 69
          "faces": {
60 -
            "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: a face's slot is its place on the ladder (each web wears slot (web - 1) mod the ladder's length, and the last web of each world wears them all), the enemies' play is the sim's, and a verifier ignores this field entirely. Six at most.",
70 +
            "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.",
61 71
            "items": {
62 72
              "ref": "#face",
63 73
              "type": "ref"
64 74
            },
65 75
            "maxLength": 6,
66 76
            "type": "array"
67 77
          },
68 78
          "kills": {
69 79
            "description": "Advisory: enemies shot down.",
70 80
            "minimum": 0,
71 81
            "type": "integer"
72 82
          },
73 83
          "level": {
74 84
            "description": "Advisory: the web the run ended on, 1 to 16, four a world.",
75 85
            "maximum": 16,
76 86
            "minimum": 1,
77 87
            "type": "integer"
78 88
          },
79 89
          "log": {
80 90
            "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`.",
81 91
            "maxLength": 400000,
82 92
            "type": "string"
83 93
          },
84 94
          "score": {
85 95
            "description": "Advisory: points. Higher ranks higher.",
86 96
            "minimum": 0,
87 97
            "type": "integer"
88 98
          },
89 99
          "seed": {
90 100
            "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.",
91 101
            "maxLength": 16,
92 102
            "type": "string"
93 103
          },
94 104
          "simVersion": {
95 105
            "description": "Which rules produced this log. A verifier must replay under the matching version or refuse the run.",
96 106
            "minimum": 1,
97 107
            "type": "integer"
98 108
          },
99 109
          "ticks": {
100 110
            "description": "Advisory: 60 Hz ticks from the first count to the end of the run.",
101 111
            "minimum": 1,
102 112
            "type": "integer"
103 113
          },
104 114
          "won": {
105 115
            "description": "Advisory: all sixteen webs cleared.",
106 116
            "type": "boolean"
107 117
          }
108 118
        },
109 119
        "required": [
110 120
          "simVersion",
111 121
          "seed",
112 122
          "log",
113 123
          "ticks",
114 124
          "score",
115 125
          "level",
116 126
          "createdAt"
117 127
        ],
118 128
        "type": "object"
119 129
      },
120 130
      "type": "record"
121 131
    }
122 132
  },
123 133
  "id": "com.gamethesky.skyvortex.run",
124 134
  "lexicon": 1
125 135
}

Compare Other Versions

Lexicon Garden

@