com.gamethesky.make.game
Schema Diff
+52 -3
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 11 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#level", src: "com.gamethesky.make.game#level", tgt: "com.gamethesky.make.game#level.rows", kind: "prop", name: Some("rows") }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#chapter.module", sort: "knownValues", old_value: "[\"house\",\"tanks\",\"vortex\"]", new_value: "[\"platformer\",\"house\",\"tanks\",\"vortex\",\"roll\",\"fight\",\"golf\",\"cycles\",\"discs\",\"uplink\",\"canyon\",\"belts\",\"race\",\"gunner\",\"drones\",\"landing\",\"deckgun\",\"minefield\",\"pipes\",\"catch\",\"fence\",\"airdrop\",\"invaders\",\"crossing\"]" }
Non-Breaking Changes (11)
- AddedVertex AddedVertex { vertex_id: "com.atproto.repo.strongRef" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.level" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#level" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#level.rows" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#level.rows:items" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.remixOf" }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.level", kind: "prop", name: Some("level") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.level", tgt: "com.gamethesky.make.game#level", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#level.rows", tgt: "com.gamethesky.make.game#level.rows:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.remixOf", kind: "prop", name: Some("remixOf") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.remixOf", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.atproto.repo.strongRef" }AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.level" }AddedVertex { vertex_id: "com.gamethesky.make.game#level" }AddedVertex { vertex_id: "com.gamethesky.make.game#level.rows" }AddedVertex { vertex_id: "com.gamethesky.make.game#level.rows:items" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.remixOf" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#chapter.module", sort: "knownValues", old_value: "[\"house\",\"tanks\",\"vortex\"]", new_value: "[\"platformer\",\"house\",\"tanks\",\"vortex\",\"roll\",\"fight\",\"golf\",\"cycles\",\"discs\",\"uplink\",\"canyon\",\"belts\",\"race\",\"gunner\",\"drones\",\"landing\",\"deckgun\",\"minefield\",\"pipes\",\"catch\",\"fence\",\"airdrop\",\"invaders\",\"crossing\"]" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#level", src: "com.gamethesky.make.game#level", tgt: "com.gamethesky.make.game#level.rows", kind: "prop", name: Some("rows") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.level", kind: "prop", name: Some("level") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.level", tgt: "com.gamethesky.make.game#level", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#level.rows", tgt: "com.gamethesky.make.game#level.rows:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.remixOf", kind: "prop", name: Some("remixOf") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.remixOf", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"chapter": {
5
5
"properties": {
6
+
"level": {
7
+
"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). A reader runs the module's own checker on it and refuses the game if it fails.",
8
+
"ref": "#level",
9
+
"type": "ref"
10
+
},
6
11
"module": {
7
-
"description": "The engine: house (a haunted floor, first person), tanks (a tank maze), vortex (a tube of lanes).",
12
+
"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.",
8
13
"knownValues": [
14
+
"platformer",
9
15
"house",
10
16
"tanks",
11
-
"vortex"
17
+
"vortex",
18
+
"roll",
19
+
"fight",
20
+
"golf",
21
+
"cycles",
22
+
"discs",
23
+
"uplink",
24
+
"canyon",
25
+
"belts",
26
+
"race",
27
+
"gunner",
28
+
"drones",
29
+
"landing",
30
+
"deckgun",
31
+
"minefield",
32
+
"pipes",
33
+
"catch",
34
+
"fence",
35
+
"airdrop",
36
+
"invaders",
37
+
"crossing"
12
38
],
13
39
"maxLength": 32,
14
40
"type": "string"
15
41
},
16
42
"preset": {
17
-
"description": "The module's own level to start from: house hall, upstairs or basement; tanks m1 to m18; vortex w1 to w16.",
43
+
"description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
18
44
"maxLength": 32,
19
45
"type": "string"
20
46
},
21
47
"settings": {
22
48
"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.",
23
49
"type": "unknown"
24
50
},
25
51
"title": {
26
52
"maxGraphemes": 40,
27
53
"maxLength": 160,
28
54
"type": "string"
29
55
},
30
56
"version": {
31
57
"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.",
32
58
"minimum": 1,
33
59
"type": "integer"
34
60
}
35
61
},
36
62
"required": [
37
63
"module",
38
64
"version",
39
65
"title",
40
66
"preset",
41
67
"settings"
42
68
],
43
69
"type": "object"
44
70
},
71
+
"level": {
72
+
"properties": {
73
+
"rows": {
74
+
"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).",
75
+
"items": {
76
+
"maxLength": 160,
77
+
"type": "string"
78
+
},
79
+
"maxLength": 20,
80
+
"minLength": 8,
81
+
"type": "array"
82
+
}
83
+
},
84
+
"required": [
85
+
"rows"
86
+
],
87
+
"type": "object"
88
+
},
45
89
"main": {
46
90
"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.",
47
91
"key": "tid",
48
92
"record": {
49
93
"properties": {
50
94
"cast": {
51
95
"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.",
52
96
"items": {
53
97
"ref": "#member",
54
98
"type": "ref"
55
99
},
56
100
"maxLength": 7,
57
101
"type": "array"
58
102
},
59
103
"chapters": {
60
104
"description": "Played in order. Clearing one goes on to the next; losing one ends the run.",
61
105
"items": {
62
106
"ref": "#chapter",
63
107
"type": "ref"
64
108
},
65
109
"maxLength": 8,
66
110
"minLength": 1,
67
111
"type": "array"
68
112
},
69
113
"createdAt": {
70
114
"format": "datetime",
71
115
"type": "string"
72
116
},
73
117
"description": {
74
118
"maxGraphemes": 200,
75
119
"maxLength": 800,
76
120
"type": "string"
77
121
},
122
+
"remixOf": {
123
+
"description": "The game this one was remixed from, pinned to the version remixed: credit, shown on the game's page. Absent for an original.",
124
+
"ref": "com.atproto.repo.strongRef",
125
+
"type": "ref"
126
+
},
78
127
"theme": {
79
128
"ref": "#theme",
80
129
"type": "ref"
81
130
},
82
131
"title": {
83
132
"maxGraphemes": 60,
84
133
"maxLength": 240,
85
134
"type": "string"
86
135
}
87
136
},
88
137
"required": [
89
138
"title",
90
139
"theme",
91
140
"chapters",
92
141
"createdAt"
93
142
],
94
143
"type": "object"
95
144
},
96
145
"type": "record"
97
146
},
98
147
"member": {
99
148
"description": "One of the cast: the part they play, the name they're billed under, and their photo.",
100
149
"properties": {
101
150
"image": {
102
151
"accept": [
103
152
"image/png",
104
153
"image/jpeg"
105
154
],
106
155
"description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
107
156
"maxSize": 196608,
108
157
"type": "blob"
109
158
},
110
159
"name": {
111
160
"maxGraphemes": 40,
112
161
"maxLength": 160,
113
162
"type": "string"
114
163
},
115
164
"role": {
116
165
"knownValues": [
117
166
"ghoul",
118
167
"hound",
119
168
"thing",
120
169
"scream",
121
170
"victim",
122
171
"portrait",
123
172
"you"
124
173
],
125
174
"type": "string"
126
175
}
127
176
},
128
177
"required": [
129
178
"role",
130
179
"name",
131
180
"image"
132
181
],
133
182
"type": "object"
134
183
},
135
184
"theme": {
136
185
"properties": {
137
186
"mood": {
138
187
"description": "How the chapters light their worlds.",
139
188
"knownValues": [
140
189
"bright",
141
190
"dusk",
142
191
"cold",
143
192
"neon",
144
193
"space",
145
194
"horror",
146
195
"retro"
147
196
],
148
197
"type": "string"
149
198
},
150
199
"palette": {
151
200
"description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
152
201
"items": {
153
202
"maxLength": 7,
154
203
"type": "string"
155
204
},
156
205
"maxLength": 5,
157
206
"minLength": 5,
158
207
"type": "array"
159
208
},
160
209
"pattern": {
161
210
"knownValues": [
162
211
"none",
163
212
"grid",
164
213
"stripes",
165
214
"dots",
166
215
"checks",
167
216
"waves",
168
217
"stars"
169
218
],
170
219
"type": "string"
171
220
},
172
221
"preset": {
173
222
"description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
174
223
"maxLength": 20,
175
224
"type": "string"
176
225
},
177
226
"type": {
178
227
"description": "The typeface for titles.",
179
228
"knownValues": [
180
229
"anton",
181
230
"creepster",
182
231
"inter"
183
232
],
184
233
"type": "string"
185
234
}
186
235
},
187
236
"required": [
188
237
"palette",
189
238
"pattern",
190
239
"mood",
191
240
"type"
192
241
],
193
242
"type": "object"
194
243
}
195
244
},
196
245
"id": "com.gamethesky.make.game",
197
246
"lexicon": 1
198
247
}