com.gamethesky.make.game
Schema Diff
+39 -3
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
}