com.gamethesky.make.game
Schema Diff
+3 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 0 non-breaking changes.
Breaking Changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#scene.music", sort: "knownValues", old_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\"]", new_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\",\"island\",\"heist\"]" }
Migration Guidance
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#scene.music", sort: "knownValues", old_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\"]", new_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\",\"island\",\"heist\"]" }
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
53
"next": {
54
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
55
"maxLength": 8,
56
56
"type": "string"
57
57
},
58
58
"preset": {
59
59
"description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
60
60
"maxLength": 32,
61
61
"type": "string"
62
62
},
63
63
"settings": {
64
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.",
65
65
"type": "unknown"
66
66
},
67
67
"textures": {
68
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.",
69
69
"type": "unknown"
70
70
},
71
71
"title": {
72
72
"maxGraphemes": 40,
73
73
"maxLength": 160,
74
74
"type": "string"
75
75
},
76
76
"version": {
77
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.",
78
78
"minimum": 1,
79
79
"type": "integer"
80
80
}
81
81
},
82
82
"required": [
83
83
"module",
84
84
"version",
85
85
"title",
86
86
"preset",
87
87
"settings"
88
88
],
89
89
"type": "object"
90
90
},
91
91
"choice": {
92
92
"description": "One way on from a scene's choice.",
93
93
"properties": {
94
94
"label": {
95
95
"description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
96
96
"maxGraphemes": 60,
97
97
"maxLength": 240,
98
98
"type": "string"
99
99
},
100
100
"to": {
101
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
102
"maxLength": 8,
103
103
"type": "string"
104
104
}
105
105
},
106
106
"required": [
107
107
"label",
108
108
"to"
109
109
],
110
110
"type": "object"
111
111
},
112
112
"level": {
113
113
"properties": {
114
114
"rows": {
115
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.",
116
116
"items": {
117
117
"maxLength": 160,
118
118
"type": "string"
119
119
},
120
120
"maxLength": 24,
121
121
"minLength": 8,
122
122
"type": "array"
123
123
}
124
124
},
125
125
"required": [
126
126
"rows"
127
127
],
128
128
"type": "object"
129
129
},
130
130
"main": {
131
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.",
132
132
"key": "tid",
133
133
"record": {
134
134
"properties": {
135
135
"carryLives": {
136
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.",
137
137
"type": "boolean"
138
138
},
139
139
"cast": {
140
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.",
141
141
"items": {
142
142
"ref": "#member",
143
143
"type": "ref"
144
144
},
145
145
"maxLength": 15,
146
146
"type": "array"
147
147
},
148
148
"chapters": {
149
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.",
150
150
"items": {
151
151
"ref": "#chapter",
152
152
"type": "ref"
153
153
},
154
154
"maxLength": 8,
155
155
"minLength": 1,
156
156
"type": "array"
157
157
},
158
158
"cover": {
159
159
"accept": [
160
160
"image/jpeg",
161
161
"image/png"
162
162
],
163
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.",
164
164
"maxSize": 614400,
165
165
"type": "blob"
166
166
},
167
167
"createdAt": {
168
168
"format": "datetime",
169
169
"type": "string"
170
170
},
171
171
"description": {
172
172
"maxGraphemes": 200,
173
173
"maxLength": 800,
174
174
"type": "string"
175
175
},
176
176
"logo": {
177
177
"accept": [
178
178
"image/png",
179
179
"image/jpeg"
180
180
],
181
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.",
182
182
"maxSize": 409600,
183
183
"type": "blob"
184
184
},
185
185
"remixOf": {
186
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.",
187
187
"ref": "com.atproto.repo.strongRef",
188
188
"type": "ref"
189
189
},
190
190
"scenes": {
191
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.",
192
192
"items": {
193
193
"ref": "#scene",
194
194
"type": "ref"
195
195
},
196
196
"maxLength": 10,
197
197
"type": "array"
198
198
},
199
199
"theme": {
200
200
"ref": "#theme",
201
201
"type": "ref"
202
202
},
203
203
"title": {
204
204
"maxGraphemes": 60,
205
205
"maxLength": 240,
206
206
"type": "string"
207
207
}
208
208
},
209
209
"required": [
210
210
"title",
211
211
"theme",
212
212
"chapters",
213
213
"createdAt"
214
214
],
215
215
"type": "object"
216
216
},
217
217
"type": "record"
218
218
},
219
219
"member": {
220
220
"description": "One of the cast: the part they play, the name they're billed under, and their photo.",
221
221
"properties": {
222
222
"image": {
223
223
"accept": [
224
224
"image/png",
225
225
"image/jpeg"
226
226
],
227
227
"description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
228
228
"maxSize": 196608,
229
229
"type": "blob"
230
230
},
231
231
"name": {
232
232
"maxGraphemes": 40,
233
233
"maxLength": 160,
234
234
"type": "string"
235
235
},
236
236
"role": {
237
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.",
238
238
"knownValues": [
239
239
"ghoul",
240
240
"hound",
241
241
"thing",
242
242
"scream",
243
243
"victim",
244
244
"portrait",
245
245
"you",
246
246
"m1",
247
247
"m2",
248
248
"m3",
249
249
"m4",
250
250
"m5",
251
251
"m6",
252
252
"m7",
253
253
"m8"
254
254
],
255
255
"type": "string"
256
256
}
257
257
},
258
258
"required": [
259
259
"role",
260
260
"name",
261
261
"image"
262
262
],
263
263
"type": "object"
264
264
},
265
265
"scene": {
266
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.",
267
267
"properties": {
268
268
"at": {
269
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.",
270
270
"knownValues": [
271
271
"before",
272
272
"win",
273
273
"lose"
274
274
],
275
275
"maxLength": 16,
276
276
"type": "string"
277
277
},
278
278
"bg": {
279
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.",
280
280
"knownValues": [
281
281
"replay",
282
282
"flyby",
283
283
"picture",
284
284
"plain"
285
285
],
286
286
"maxLength": 16,
287
287
"type": "string"
288
288
},
289
289
"chapter": {
290
290
"description": "For a scene before a chapter: which one, counting from 0 (0 is the opening, before the first chapter's card).",
291
291
"maximum": 7,
292
292
"minimum": 0,
293
293
"type": "integer"
294
294
},
295
295
"choices": {
296
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
297
"items": {
298
298
"ref": "#choice",
299
299
"type": "ref"
300
300
},
301
301
"maxLength": 3,
302
302
"minLength": 2,
303
303
"type": "array"
304
304
},
305
305
"lines": {
306
306
"description": "Typed out one at a time; the player moves on line by line.",
307
307
"items": {
308
308
"ref": "#sceneLine",
309
309
"type": "ref"
310
310
},
311
311
"maxLength": 6,
312
312
"type": "array"
313
313
},
314
314
"music": {
315
315
"description": "A mood of music under the scene. Absent: none.",
316
316
"knownValues": [
317
317
"musicbox",
318
318
"heartbeat",
319
319
"unease",
320
320
"dread",
321
321
"tension",
322
322
"groove",
323
323
"pulse",
324
324
"drift",
325
-
"alarm"
325
+
"alarm",
326
+
"island",
327
+
"heist"
326
328
],
327
329
"maxLength": 32,
328
330
"type": "string"
329
331
},
330
332
"picture": {
331
333
"accept": [
332
334
"image/jpeg",
333
335
"image/png"
334
336
],
335
337
"description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
336
338
"maxSize": 716800,
337
339
"type": "blob"
338
340
},
339
341
"sting": {
340
342
"description": "A recorded sound as the scene opens, from the horror pack. Absent: none.",
341
343
"knownValues": [
342
344
"creepy_hello",
343
345
"creepy_laugh",
344
346
"female_scream",
345
347
"intrigue_event",
346
348
"jump_scare",
347
349
"jump_scare_horn",
348
350
"lets_play"
349
351
],
350
352
"maxLength": 32,
351
353
"type": "string"
352
354
},
353
355
"title": {
354
356
"maxGraphemes": 60,
355
357
"maxLength": 240,
356
358
"type": "string"
357
359
}
358
360
},
359
361
"required": [
360
362
"at",
361
363
"bg"
362
364
],
363
365
"type": "object"
364
366
},
365
367
"sceneLine": {
366
368
"properties": {
367
369
"text": {
368
370
"maxGraphemes": 160,
369
371
"maxLength": 640,
370
372
"type": "string"
371
373
},
372
374
"who": {
373
375
"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.",
374
376
"knownValues": [
375
377
"ghoul",
376
378
"hound",
377
379
"thing",
378
380
"scream",
379
381
"victim",
380
382
"portrait",
381
383
"you",
382
384
"m1",
383
385
"m2",
384
386
"m3",
385
387
"m4",
386
388
"m5",
387
389
"m6",
388
390
"m7",
389
391
"m8"
390
392
],
391
393
"maxLength": 16,
392
394
"type": "string"
393
395
}
394
396
},
395
397
"required": [
396
398
"text"
397
399
],
398
400
"type": "object"
399
401
},
400
402
"theme": {
401
403
"properties": {
402
404
"mood": {
403
405
"description": "How the chapters light their worlds.",
404
406
"knownValues": [
405
407
"bright",
406
408
"dusk",
407
409
"cold",
408
410
"neon",
409
411
"space",
410
412
"horror",
411
413
"retro"
412
414
],
413
415
"type": "string"
414
416
},
415
417
"palette": {
416
418
"description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
417
419
"items": {
418
420
"maxLength": 7,
419
421
"type": "string"
420
422
},
421
423
"maxLength": 5,
422
424
"minLength": 5,
423
425
"type": "array"
424
426
},
425
427
"pattern": {
426
428
"knownValues": [
427
429
"none",
428
430
"grid",
429
431
"stripes",
430
432
"dots",
431
433
"checks",
432
434
"waves",
433
435
"stars"
434
436
],
435
437
"type": "string"
436
438
},
437
439
"preset": {
438
440
"description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
439
441
"maxLength": 20,
440
442
"type": "string"
441
443
},
442
444
"type": {
443
445
"description": "The typeface for titles.",
444
446
"knownValues": [
445
447
"anton",
446
448
"creepster",
447
449
"inter"
448
450
],
449
451
"type": "string"
450
452
}
451
453
},
452
454
"required": [
453
455
"palette",
454
456
"pattern",
455
457
"mood",
456
458
"type"
457
459
],
458
460
"type": "object"
459
461
}
460
462
},
461
463
"id": "com.gamethesky.make.game",
462
464
"lexicon": 1
463
465
}