com.gamethesky.make.game
Schema Diff
+13 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 4 non-breaking changes.
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.textures" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.logo" }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.textures", kind: "prop", name: Some("textures") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.logo", kind: "prop", name: Some("logo") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.textures" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.logo" }
Additional Notes
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.textures", kind: "prop", name: Some("textures") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.logo", kind: "prop", name: Some("logo") }
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). 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), and the arcade classics. 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
],
48
48
"maxLength": 32,
49
49
"type": "string"
50
50
},
51
51
"preset": {
52
52
"description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
53
53
"maxLength": 32,
54
54
"type": "string"
55
55
},
56
56
"settings": {
57
57
"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.",
58
58
"type": "unknown"
59
59
},
60
+
"textures": {
61
+
"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), 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.",
62
+
"type": "unknown"
63
+
},
60
64
"title": {
61
65
"maxGraphemes": 40,
62
66
"maxLength": 160,
63
67
"type": "string"
64
68
},
65
69
"version": {
66
70
"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.",
67
71
"minimum": 1,
68
72
"type": "integer"
69
73
}
70
74
},
71
75
"required": [
72
76
"module",
73
77
"version",
74
78
"title",
75
79
"preset",
76
80
"settings"
77
81
],
78
82
"type": "object"
79
83
},
80
84
"level": {
81
85
"properties": {
82
86
"rows": {
83
87
"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 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.",
84
88
"items": {
85
89
"maxLength": 160,
86
90
"type": "string"
87
91
},
88
92
"maxLength": 24,
89
93
"minLength": 8,
90
94
"type": "array"
91
95
}
92
96
},
93
97
"required": [
94
98
"rows"
95
99
],
96
100
"type": "object"
97
101
},
98
102
"main": {
99
103
"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.",
100
104
"key": "tid",
101
105
"record": {
102
106
"properties": {
103
107
"carryLives": {
104
108
"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.",
105
109
"type": "boolean"
106
110
},
107
111
"cast": {
108
112
"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.",
109
113
"items": {
110
114
"ref": "#member",
111
115
"type": "ref"
112
116
},
113
117
"maxLength": 7,
114
118
"type": "array"
115
119
},
116
120
"chapters": {
117
121
"description": "Played in order. Clearing one goes on to the next; losing one ends the run.",
118
122
"items": {
119
123
"ref": "#chapter",
120
124
"type": "ref"
121
125
},
122
126
"maxLength": 8,
123
127
"minLength": 1,
124
128
"type": "array"
125
129
},
126
130
"cover": {
127
131
"accept": [
128
132
"image/jpeg",
129
133
"image/png"
130
134
],
131
135
"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.",
132
136
"maxSize": 614400,
133
137
"type": "blob"
134
138
},
135
139
"createdAt": {
136
140
"format": "datetime",
137
141
"type": "string"
138
142
},
139
143
"description": {
140
144
"maxGraphemes": 200,
141
145
"maxLength": 800,
142
146
"type": "string"
143
147
},
148
+
"logo": {
149
+
"accept": [
150
+
"image/png",
151
+
"image/jpeg"
152
+
],
153
+
"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.",
154
+
"maxSize": 409600,
155
+
"type": "blob"
156
+
},
144
157
"remixOf": {
145
158
"description": "The game this one was remixed from, pinned to the version remixed: credit, shown on the game's page. Absent for an original.",
146
159
"ref": "com.atproto.repo.strongRef",
147
160
"type": "ref"
148
161
},
149
162
"theme": {
150
163
"ref": "#theme",
151
164
"type": "ref"
152
165
},
153
166
"title": {
154
167
"maxGraphemes": 60,
155
168
"maxLength": 240,
156
169
"type": "string"
157
170
}
158
171
},
159
172
"required": [
160
173
"title",
161
174
"theme",
162
175
"chapters",
163
176
"createdAt"
164
177
],
165
178
"type": "object"
166
179
},
167
180
"type": "record"
168
181
},
169
182
"member": {
170
183
"description": "One of the cast: the part they play, the name they're billed under, and their photo.",
171
184
"properties": {
172
185
"image": {
173
186
"accept": [
174
187
"image/png",
175
188
"image/jpeg"
176
189
],
177
190
"description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
178
191
"maxSize": 196608,
179
192
"type": "blob"
180
193
},
181
194
"name": {
182
195
"maxGraphemes": 40,
183
196
"maxLength": 160,
184
197
"type": "string"
185
198
},
186
199
"role": {
187
200
"knownValues": [
188
201
"ghoul",
189
202
"hound",
190
203
"thing",
191
204
"scream",
192
205
"victim",
193
206
"portrait",
194
207
"you"
195
208
],
196
209
"type": "string"
197
210
}
198
211
},
199
212
"required": [
200
213
"role",
201
214
"name",
202
215
"image"
203
216
],
204
217
"type": "object"
205
218
},
206
219
"theme": {
207
220
"properties": {
208
221
"mood": {
209
222
"description": "How the chapters light their worlds.",
210
223
"knownValues": [
211
224
"bright",
212
225
"dusk",
213
226
"cold",
214
227
"neon",
215
228
"space",
216
229
"horror",
217
230
"retro"
218
231
],
219
232
"type": "string"
220
233
},
221
234
"palette": {
222
235
"description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
223
236
"items": {
224
237
"maxLength": 7,
225
238
"type": "string"
226
239
},
227
240
"maxLength": 5,
228
241
"minLength": 5,
229
242
"type": "array"
230
243
},
231
244
"pattern": {
232
245
"knownValues": [
233
246
"none",
234
247
"grid",
235
248
"stripes",
236
249
"dots",
237
250
"checks",
238
251
"waves",
239
252
"stars"
240
253
],
241
254
"type": "string"
242
255
},
243
256
"preset": {
244
257
"description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
245
258
"maxLength": 20,
246
259
"type": "string"
247
260
},
248
261
"type": {
249
262
"description": "The typeface for titles.",
250
263
"knownValues": [
251
264
"anton",
252
265
"creepster",
253
266
"inter"
254
267
],
255
268
"type": "string"
256
269
}
257
270
},
258
271
"required": [
259
272
"palette",
260
273
"pattern",
261
274
"mood",
262
275
"type"
263
276
],
264
277
"type": "object"
265
278
}
266
279
},
267
280
"id": "com.gamethesky.make.game",
268
281
"lexicon": 1
269
282
}