com.gamethesky.make.game

gamethesky.com

Schema Diff

+39 -3

From

CID
bafyreia2lpwazs3...
Indexed At
2026-10-22 05:57 UTC
View this version

To

CID
bafyreibhzzlgbyi...
Indexed At
2026-10-22 07:00 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 10 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.label", kind: "prop", name: Some("label") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.to", kind: "prop", name: Some("to") }
Non-Breaking Changes (10)
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.next" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#choice" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#choice.label" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#choice.to" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#scene.choices" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#scene.choices:items" }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.next", kind: "prop", name: Some("next") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#scene", tgt: "com.gamethesky.make.game#scene.choices", kind: "prop", name: Some("choices") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#scene.choices", tgt: "com.gamethesky.make.game#scene.choices:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#scene.choices:items", tgt: "com.gamethesky.make.game#choice", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.next" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#choice" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#choice.label" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#choice.to" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#scene.choices" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#scene.choices:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.label", kind: "prop", name: Some("label") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.to", kind: "prop", name: Some("to") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.next", kind: "prop", name: Some("next") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#scene", tgt: "com.gamethesky.make.game#scene.choices", kind: "prop", name: Some("choices") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#scene.choices", tgt: "com.gamethesky.make.game#scene.choices:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#scene.choices:items", tgt: "com.gamethesky.make.game#choice", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "chapter": {
5 5
      "properties": {
6 6
        "backdrop": {
7 7
          "accept": [
8 8
            "image/jpeg",
9 9
            "image/png"
10 10
          ],
11 11
          "description": "A picture for this chapter's sky or backdrop, drawn behind the play where the chapter type can (at most 1600×900). Public once published. Looks only: play, boards and the verifier never read it.",
12 12
          "maxSize": 716800,
13 13
          "type": "blob"
14 14
        },
15 15
        "level": {
16 16
          "description": "A level the builder drew in the maker, in place of the preset's own map, for modules whose levels can be drawn (platformer, house, tank maze, vortex, walk-through). A reader runs the module's own checker on it and refuses the game if it fails.",
17 17
          "ref": "#level",
18 18
          "type": "ref"
19 19
        },
20 20
        "module": {
21 21
          "description": "The engine, one of Game the Sky's games made a chapter: platformer, house (a haunted floor), tanks (a tank maze), vortex (a tube of lanes), roll (a tilting course), fight (a bout), golf (a hole), cycles, discs, uplink and canyon (the grid), belts (the counter), race (a sling race), gunner (the door gunner), the arcade classics, walk (a haunted walk-through: no gun, a nerve meter), and fps (first person, armed, in a place such as a military facility: guards, keycards, intel, extraction). The list grows as games are added; a reader refuses a module it doesn't have.",
22 22
          "knownValues": [
23 23
            "platformer",
24 24
            "house",
25 25
            "tanks",
26 26
            "vortex",
27 27
            "roll",
28 28
            "fight",
29 29
            "golf",
30 30
            "cycles",
31 31
            "discs",
32 32
            "uplink",
33 33
            "canyon",
34 34
            "belts",
35 35
            "race",
36 36
            "gunner",
37 37
            "drones",
38 38
            "landing",
39 39
            "deckgun",
40 40
            "minefield",
41 41
            "pipes",
42 42
            "catch",
43 43
            "fence",
44 44
            "airdrop",
45 45
            "invaders",
46 46
            "crossing",
47 47
            "walk",
48 48
            "fps"
49 49
          ],
50 50
          "maxLength": 32,
51 51
          "type": "string"
52 52
        },
53 +
        "next": {
54 +
          "description": "Where the path goes once this chapter is cleared, when it isn't simply the next chapter: a later chapter's index counting from 0, written in digits (\"3\"), or \"end\" (the ending). Forward only: a reader lets go of a value that isn't later than this chapter or is past the last, and the chapter goes on to the next as if it had none. Absent: the next chapter, or the ending after the last. Part of play.",
55 +
          "maxLength": 8,
56 +
          "type": "string"
57 +
        },
53 58
        "preset": {
54 59
          "description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
55 60
          "maxLength": 32,
56 61
          "type": "string"
57 62
        },
58 63
        "settings": {
59 64
          "description": "The module's knobs as an object of whole numbers by key (for example {\"lives\": 3, \"speed\": 120}). Each module declares its keys and ranges; readers clamp to them, and a missing key takes its default.",
60 65
          "type": "unknown"
61 66
        },
62 67
        "textures": {
63 68
          "description": "The builder's own art for the pieces of the chapter's level, by piece (the module's own names: the platformer's ground, bricks and ledge; the house's and the tank maze's wall and floor; the walk-through's wall, floor, ceiling and portrait), each a blob: a square JPEG (256×256, at most 120 KB) drawn tiled, one a square of the level. Public once published. Looks only.",
64 69
          "type": "unknown"
65 70
        },
66 71
        "title": {
67 72
          "maxGraphemes": 40,
68 73
          "maxLength": 160,
69 74
          "type": "string"
70 75
        },
71 76
        "version": {
72 77
          "description": "The module's rules this chapter was built on. A reader that doesn't have that version refuses the game rather than playing it differently.",
73 78
          "minimum": 1,
74 79
          "type": "integer"
75 80
        }
76 81
      },
77 82
      "required": [
78 83
        "module",
79 84
        "version",
80 85
        "title",
81 86
        "preset",
82 87
        "settings"
83 88
      ],
84 89
      "type": "object"
85 90
    },
91 +
    "choice": {
92 +
      "description": "One way on from a scene's choice.",
93 +
      "properties": {
94 +
        "label": {
95 +
          "description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
96 +
          "maxGraphemes": 60,
97 +
          "maxLength": 240,
98 +
          "type": "string"
99 +
        },
100 +
        "to": {
101 +
          "description": "Where it goes: a chapter's index counting from 0, written in digits (\"2\"), this scene's own chapter or a later one; or \"end\", the ending (not from the opening scene: a run plays at least one chapter). Arriving at another chapter plays that chapter's own scene (and its choice) first.",
102 +
          "maxLength": 8,
103 +
          "type": "string"
104 +
        }
105 +
      },
106 +
      "required": [
107 +
        "label",
108 +
        "to"
109 +
      ],
110 +
      "type": "object"
111 +
    },
86 112
    "level": {
87 113
      "properties": {
88 114
        "rows": {
89 115
          "description": "The grid, top row first, one character a square, every row the same length. The characters are the module's own. The platformer: . air, # ground, = bricks, - ledge, o coin, ^ spikes, w walker, h hopper, B boss, + extra life, S start, D door. The house: Make a House's tiles. The walk-through: the house's walls, portraits, windows, start, key and doors, E the way out, jump-outs (g h f x V T, 1 to 8 the maker's members), sounds (A L R I J N Y), F a fog machine, props (s Z C t H c j w b). The tank maze: a square, # block, . floor, S you, r a rival. The vortex: o the rim, one square a lane, a loop for a closed tube or a line for an open one.",
90 116
          "items": {
91 117
            "maxLength": 160,
92 118
            "type": "string"
93 119
          },
94 120
          "maxLength": 24,
95 121
          "minLength": 8,
96 122
          "type": "array"
97 123
        }
98 124
      },
99 125
      "required": [
100 126
        "rows"
101 127
      ],
102 128
      "type": "object"
103 129
    },
104 130
    "main": {
105 -
      "description": "A game somebody made in Make the Sky, published into their own repo: a title, a line about it, its look, and one to eight chapters, each one of Game the Sky's engines (a module) on one of its levels (a preset) with its knobs set. Play is decided by the chapters alone. A game is edited in place (the same record, a new version): its board belongs to its way of playing (the chapters' modules, versions, presets and settings), so renaming or restyling it keeps the board, and changing a chapter starts a fresh one. A run pins the version it was played on; a verifier replays it on the game as it stands and takes it only if it replays the same.",
131 +
      "description": "A game somebody made in Make the Sky, published into their own repo: a title, a line about it, its look, and one to eight chapters, each one of Game the Sky's engines (a module) on one of its levels (a preset) with its knobs set. Play is decided by the chapters alone (and, in a game whose story branches, where its choices and jumps go). A game is edited in place (the same record, a new version): its board belongs to its way of playing (the chapters' modules, versions, presets and settings, and its paths), so renaming or restyling it keeps the board, and changing a chapter starts a fresh one. A run pins the version it was played on; a verifier replays it on the game as it stands and takes it only if it replays the same.",
106 132
      "key": "tid",
107 133
      "record": {
108 134
        "properties": {
109 135
          "carryLives": {
110 136
            "description": "Lives carry over: each chapter with lives after the first starts with the lives the player had left (at most 9), not its own lives setting; chapters without lives pass them along. Part of play: a game with it has its own board.",
111 137
            "type": "boolean"
112 138
          },
113 139
          "cast": {
114 140
            "description": "The maker's own Foe Booth cast, included on purpose (off by default): each photo is a public blob in the maker's repo. Looks only: a verifier ignores it. Absent, players see their own cast or the engines' own monsters.",
115 141
            "items": {
116 142
              "ref": "#member",
117 143
              "type": "ref"
118 144
            },
119 145
            "maxLength": 15,
120 146
            "type": "array"
121 147
          },
122 148
          "chapters": {
123 -
            "description": "Played in order. Clearing one goes on to the next; losing one ends the run.",
149 +
            "description": "Played in order, unless the game branches: clearing one goes on to the next (or where its next says, and a scene's choice can send the player ahead); losing one ends the run.",
124 150
            "items": {
125 151
              "ref": "#chapter",
126 152
              "type": "ref"
127 153
            },
128 154
            "maxLength": 8,
129 155
            "minLength": 1,
130 156
            "type": "array"
131 157
          },
132 158
          "cover": {
133 159
            "accept": [
134 160
              "image/jpeg",
135 161
              "image/png"
136 162
            ],
137 163
            "description": "The game's picture: its page, its share card, its tile in the gallery. 1200×630, cropped by the maker. Public once published. Looks only: play, boards and the verifier never read it.",
138 164
            "maxSize": 614400,
139 165
            "type": "blob"
140 166
          },
141 167
          "createdAt": {
142 168
            "format": "datetime",
143 169
            "type": "string"
144 170
          },
145 171
          "description": {
146 172
            "maxGraphemes": 200,
147 173
            "maxLength": 800,
148 174
            "type": "string"
149 175
          },
150 176
          "logo": {
151 177
            "accept": [
152 178
              "image/png",
153 179
              "image/jpeg"
154 180
            ],
155 181
            "description": "The game's title as a picture (a PNG with a clear background, at most 1200×400), shown in place of the typed title on its page, its chapter cards and its share card; the typed title stays for readers. Public once published. Looks only.",
156 182
            "maxSize": 409600,
157 183
            "type": "blob"
158 184
          },
159 185
          "remixOf": {
160 186
            "description": "The game this one was remixed from, pinned to the version remixed: credit, shown on the game's page. Absent for an original.",
161 187
            "ref": "com.atproto.repo.strongRef",
162 188
            "type": "ref"
163 189
          },
164 190
          "scenes": {
165 -
            "description": "The story told between chapters: cut-scenes, one at most before each chapter (the first is the opening) and one each for winning and losing at the end. A scene a reader can't use is skipped, never the game. Words and looks only: not part of play, so adding or editing scenes keeps the game's board, and a verifier never reads them.",
191 +
            "description": "The story told between chapters: cut-scenes, one at most before each chapter (the first is the opening) and one each for winning and losing at the end. A scene a reader can't use is skipped, never the game. Words and looks only (not part of play, so adding or editing scenes keeps the game's board, and a verifier never reads them), except a scene's choices: where each goes is part of play.",
166 192
            "items": {
167 193
              "ref": "#scene",
168 194
              "type": "ref"
169 195
            },
170 196
            "maxLength": 10,
171 197
            "type": "array"
172 198
          },
173 199
          "theme": {
174 200
            "ref": "#theme",
175 201
            "type": "ref"
176 202
          },
177 203
          "title": {
178 204
            "maxGraphemes": 60,
179 205
            "maxLength": 240,
180 206
            "type": "string"
181 207
          }
182 208
        },
183 209
        "required": [
184 210
          "title",
185 211
          "theme",
186 212
          "chapters",
187 213
          "createdAt"
188 214
        ],
189 215
        "type": "object"
190 216
      },
191 217
      "type": "record"
192 218
    },
193 219
    "member": {
194 220
      "description": "One of the cast: the part they play, the name they're billed under, and their photo.",
195 221
      "properties": {
196 222
        "image": {
197 223
          "accept": [
198 224
            "image/png",
199 225
            "image/jpeg"
200 226
          ],
201 227
          "description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
202 228
          "maxSize": 196608,
203 229
          "type": "blob"
204 230
        },
205 231
        "name": {
206 232
          "maxGraphemes": 40,
207 233
          "maxLength": 160,
208 234
          "type": "string"
209 235
        },
210 236
        "role": {
211 237
          "description": "One of the fixed parts, or m1 to m8: one of the maker's own cast members, placed by hand in levels that take them (the walk-through's 1 to 8). A member's photo says what they are: a cutout PNG is a figure, a JPEG a face.",
212 238
          "knownValues": [
213 239
            "ghoul",
214 240
            "hound",
215 241
            "thing",
216 242
            "scream",
217 243
            "victim",
218 244
            "portrait",
219 245
            "you",
220 246
            "m1",
221 247
            "m2",
222 248
            "m3",
223 249
            "m4",
224 250
            "m5",
225 251
            "m6",
226 252
            "m7",
227 253
            "m8"
228 254
          ],
229 255
          "type": "string"
230 256
        }
231 257
      },
232 258
      "required": [
233 259
        "role",
234 260
        "name",
235 261
        "image"
236 262
      ],
237 263
      "type": "object"
238 264
    },
239 265
    "scene": {
240 266
      "description": "A cut-scene: a title and a few lines typed out over a letterboxed screen, each said by one of the cast or by nobody (narration), over a background of the builder's choosing.",
241 267
      "properties": {
242 268
        "at": {
243 269
          "description": "Where it plays: before a chapter (see chapter), or at the end, after the last chapter is cleared (win) or after a chapter is lost (lose), before the results.",
244 270
          "knownValues": [
245 271
            "before",
246 272
            "win",
247 273
            "lose"
248 274
          ],
249 275
          "maxLength": 16,
250 276
          "type": "string"
251 277
        },
252 278
        "bg": {
253 279
          "description": "What plays behind the words: replay, the last moments of the chapter just played, slowed down, dimmed and silent (a flyby before the first chapter, where nothing's been played yet); flyby, a slow look round the next chapter's level; picture, the builder's own (see picture); plain, the game's theme.",
254 280
          "knownValues": [
255 281
            "replay",
256 282
            "flyby",
257 283
            "picture",
258 284
            "plain"
259 285
          ],
260 286
          "maxLength": 16,
261 287
          "type": "string"
262 288
        },
263 289
        "chapter": {
264 290
          "description": "For a scene before a chapter: which one, counting from 0 (0 is the opening, before the first chapter's card).",
265 291
          "maximum": 7,
266 292
          "minimum": 0,
267 293
          "type": "integer"
268 294
        },
295 +
        "choices": {
296 +
          "description": "For a scene before a chapter: a choice of two or three ways, shown as buttons after its last line. Picking one plays where it goes instead of this scene's chapter. A reader that can't take every option (one going backward, past the last chapter, or to the ending from the opening) plays the scene without a choice. Where the ways go is part of play; their labels are words.",
297 +
          "items": {
298 +
            "ref": "#choice",
299 +
            "type": "ref"
300 +
          },
301 +
          "maxLength": 3,
302 +
          "minLength": 2,
303 +
          "type": "array"
304 +
        },
269 305
        "lines": {
270 306
          "description": "Typed out one at a time; the player moves on line by line.",
271 307
          "items": {
272 308
            "ref": "#sceneLine",
273 309
            "type": "ref"
274 310
          },
275 311
          "maxLength": 6,
276 312
          "type": "array"
277 313
        },
278 314
        "music": {
279 315
          "description": "A mood of music under the scene. Absent: none.",
280 316
          "knownValues": [
281 317
            "musicbox",
282 318
            "heartbeat",
283 319
            "unease",
284 320
            "dread",
285 321
            "tension",
286 322
            "groove",
287 323
            "pulse",
288 324
            "drift",
289 325
            "alarm"
290 326
          ],
291 327
          "maxLength": 32,
292 328
          "type": "string"
293 329
        },
294 330
        "picture": {
295 331
          "accept": [
296 332
            "image/jpeg",
297 333
            "image/png"
298 334
          ],
299 335
          "description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
300 336
          "maxSize": 716800,
301 337
          "type": "blob"
302 338
        },
303 339
        "sting": {
304 340
          "description": "A recorded sound as the scene opens, from the horror pack. Absent: none.",
305 341
          "knownValues": [
306 342
            "creepy_hello",
307 343
            "creepy_laugh",
308 344
            "female_scream",
309 345
            "intrigue_event",
310 346
            "jump_scare",
311 347
            "jump_scare_horn",
312 348
            "lets_play"
313 349
          ],
314 350
          "maxLength": 32,
315 351
          "type": "string"
316 352
        },
317 353
        "title": {
318 354
          "maxGraphemes": 60,
319 355
          "maxLength": 240,
320 356
          "type": "string"
321 357
        }
322 358
      },
323 359
      "required": [
324 360
        "at",
325 361
        "bg"
326 362
      ],
327 363
      "type": "object"
328 364
    },
329 365
    "sceneLine": {
330 366
      "properties": {
331 367
        "text": {
332 368
          "maxGraphemes": 160,
333 369
          "maxLength": 640,
334 370
          "type": "string"
335 371
        },
336 372
        "who": {
337 373
          "description": "Who says it: one of the cast's parts or the maker's own members (their photo and name show beside the line). Absent: narration.",
338 374
          "knownValues": [
339 375
            "ghoul",
340 376
            "hound",
341 377
            "thing",
342 378
            "scream",
343 379
            "victim",
344 380
            "portrait",
345 381
            "you",
346 382
            "m1",
347 383
            "m2",
348 384
            "m3",
349 385
            "m4",
350 386
            "m5",
351 387
            "m6",
352 388
            "m7",
353 389
            "m8"
354 390
          ],
355 391
          "maxLength": 16,
356 392
          "type": "string"
357 393
        }
358 394
      },
359 395
      "required": [
360 396
        "text"
361 397
      ],
362 398
      "type": "object"
363 399
    },
364 400
    "theme": {
365 401
      "properties": {
366 402
        "mood": {
367 403
          "description": "How the chapters light their worlds.",
368 404
          "knownValues": [
369 405
            "bright",
370 406
            "dusk",
371 407
            "cold",
372 408
            "neon",
373 409
            "space",
374 410
            "horror",
375 411
            "retro"
376 412
          ],
377 413
          "type": "string"
378 414
        },
379 415
        "palette": {
380 416
          "description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
381 417
          "items": {
382 418
            "maxLength": 7,
383 419
            "type": "string"
384 420
          },
385 421
          "maxLength": 5,
386 422
          "minLength": 5,
387 423
          "type": "array"
388 424
        },
389 425
        "pattern": {
390 426
          "knownValues": [
391 427
            "none",
392 428
            "grid",
393 429
            "stripes",
394 430
            "dots",
395 431
            "checks",
396 432
            "waves",
397 433
            "stars"
398 434
          ],
399 435
          "type": "string"
400 436
        },
401 437
        "preset": {
402 438
          "description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
403 439
          "maxLength": 20,
404 440
          "type": "string"
405 441
        },
406 442
        "type": {
407 443
          "description": "The typeface for titles.",
408 444
          "knownValues": [
409 445
            "anton",
410 446
            "creepster",
411 447
            "inter"
412 448
          ],
413 449
          "type": "string"
414 450
        }
415 451
      },
416 452
      "required": [
417 453
        "palette",
418 454
        "pattern",
419 455
        "mood",
420 456
        "type"
421 457
      ],
422 458
      "type": "object"
423 459
    }
424 460
  },
425 461
  "id": "com.gamethesky.make.game",
426 462
  "lexicon": 1
427 463
}

Compare Other Versions

Lexicon Garden

@