com.gamethesky.make.game
Schema Diff
+216 -2
Compatibility Analysis
Breaking Changes Detected
12 breaking changes, 47 non-breaking changes.
Breaking Changes (12)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#gift", src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.to", kind: "prop", name: Some("to") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#gift", src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.message", kind: "prop", name: Some("message") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntRoom", src: "com.gamethesky.make.game#huntRoom", tgt: "com.gamethesky.make.game#huntRoom.pic", kind: "prop", name: Some("pic") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntRoom", src: "com.gamethesky.make.game#huntRoom", tgt: "com.gamethesky.make.game#huntRoom.targets", kind: "prop", name: Some("targets") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#question", src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.answers", kind: "prop", name: Some("answers") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#question", src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.q", kind: "prop", name: Some("q") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#question", src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.right", kind: "prop", name: Some("right") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.label", kind: "prop", name: Some("label") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.r", kind: "prop", name: Some("r") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.x", kind: "prop", name: Some("x") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.y", kind: "prop", name: Some("y") }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#chapter.module", sort: "knownValues", old_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\",\"walk\",\"fps\"]", 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\",\"walk\",\"fps\",\"trivia\",\"hunt\",\"puzzle\",\"chase\"]" }
Non-Breaking Changes (47)
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.hunt" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.hunt:items" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.quiz" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.quiz:items" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#gift" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#gift.as" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#gift.from" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#gift.message" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#gift.to" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.name" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.pic" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.targets" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.targets:items" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.label" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.r" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.s" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.who" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.x" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.y" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question.answers" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question.answers:items" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question.pic" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question.q" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question.right" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#question.time" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.gift" }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.hunt", kind: "prop", name: Some("hunt") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.quiz", kind: "prop", name: Some("quiz") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.hunt", tgt: "com.gamethesky.make.game#chapter.hunt:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.hunt:items", tgt: "com.gamethesky.make.game#huntRoom", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.quiz", tgt: "com.gamethesky.make.game#chapter.quiz:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.quiz:items", tgt: "com.gamethesky.make.game#question", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.as", kind: "prop", name: Some("as") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.from", kind: "prop", name: Some("from") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#huntRoom", tgt: "com.gamethesky.make.game#huntRoom.name", kind: "prop", name: Some("name") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#huntRoom.targets", tgt: "com.gamethesky.make.game#huntRoom.targets:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#huntRoom.targets:items", tgt: "com.gamethesky.make.game#huntTarget", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.s", kind: "prop", name: Some("s") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.who", kind: "prop", name: Some("who") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.pic", kind: "prop", name: Some("pic") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.time", kind: "prop", name: Some("time") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#question.answers", tgt: "com.gamethesky.make.game#question.answers:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.gift", kind: "prop", name: Some("gift") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.gift", tgt: "com.gamethesky.make.game#gift", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.hunt" }AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.hunt:items" }AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.quiz" }AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.quiz:items" }AddedVertex { vertex_id: "com.gamethesky.make.game#gift" }AddedVertex { vertex_id: "com.gamethesky.make.game#gift.as" }AddedVertex { vertex_id: "com.gamethesky.make.game#gift.from" }AddedVertex { vertex_id: "com.gamethesky.make.game#gift.message" }AddedVertex { vertex_id: "com.gamethesky.make.game#gift.to" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.name" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.pic" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.targets" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntRoom.targets:items" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.label" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.r" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.s" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.who" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.x" }AddedVertex { vertex_id: "com.gamethesky.make.game#huntTarget.y" }AddedVertex { vertex_id: "com.gamethesky.make.game#question" }AddedVertex { vertex_id: "com.gamethesky.make.game#question.answers" }AddedVertex { vertex_id: "com.gamethesky.make.game#question.answers:items" }AddedVertex { vertex_id: "com.gamethesky.make.game#question.pic" }AddedVertex { vertex_id: "com.gamethesky.make.game#question.q" }AddedVertex { vertex_id: "com.gamethesky.make.game#question.right" }AddedVertex { vertex_id: "com.gamethesky.make.game#question.time" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.gift" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#chapter.module", sort: "knownValues", old_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\",\"walk\",\"fps\"]", 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\",\"walk\",\"fps\",\"trivia\",\"hunt\",\"puzzle\",\"chase\"]" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#question", src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.answers", kind: "prop", name: Some("answers") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#question", src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.q", kind: "prop", name: Some("q") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#question", src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.right", kind: "prop", name: Some("right") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntRoom", src: "com.gamethesky.make.game#huntRoom", tgt: "com.gamethesky.make.game#huntRoom.pic", kind: "prop", name: Some("pic") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntRoom", src: "com.gamethesky.make.game#huntRoom", tgt: "com.gamethesky.make.game#huntRoom.targets", kind: "prop", name: Some("targets") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#gift", src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.to", kind: "prop", name: Some("to") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#gift", src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.message", kind: "prop", name: Some("message") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.label", kind: "prop", name: Some("label") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.r", kind: "prop", name: Some("r") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.x", kind: "prop", name: Some("x") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#huntTarget", src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.y", kind: "prop", name: Some("y") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.hunt", kind: "prop", name: Some("hunt") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.quiz", kind: "prop", name: Some("quiz") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.hunt", tgt: "com.gamethesky.make.game#chapter.hunt:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.hunt:items", tgt: "com.gamethesky.make.game#huntRoom", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.quiz", tgt: "com.gamethesky.make.game#chapter.quiz:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.quiz:items", tgt: "com.gamethesky.make.game#question", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.as", kind: "prop", name: Some("as") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#gift", tgt: "com.gamethesky.make.game#gift.from", kind: "prop", name: Some("from") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#huntRoom", tgt: "com.gamethesky.make.game#huntRoom.name", kind: "prop", name: Some("name") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#huntRoom.targets", tgt: "com.gamethesky.make.game#huntRoom.targets:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#huntRoom.targets:items", tgt: "com.gamethesky.make.game#huntTarget", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.s", kind: "prop", name: Some("s") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#huntTarget", tgt: "com.gamethesky.make.game#huntTarget.who", kind: "prop", name: Some("who") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.pic", kind: "prop", name: Some("pic") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#question", tgt: "com.gamethesky.make.game#question.time", kind: "prop", name: Some("time") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#question.answers", tgt: "com.gamethesky.make.game#question.answers:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.gift", kind: "prop", name: Some("gift") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.gift", tgt: "com.gamethesky.make.game#gift", 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
+
"hunt": {
16
+
"description": "A photo hunt chapter's own pictures and what to find in them, in the order shown (absent: its preset's painted scenes). Part of play: where the spots are decides the score. A reader lets go of a spot it can't place and of a picture with none left.",
17
+
"items": {
18
+
"ref": "#huntRoom",
19
+
"type": "ref"
20
+
},
21
+
"maxLength": 5,
22
+
"type": "array"
23
+
},
15
24
"level": {
16
25
"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
26
"ref": "#level",
18
27
"type": "ref"
19
28
},
20
29
"messages": {
21
30
"description": "Story beats placed on squares of the chapter's level (drawn or the preset's own), for modules whose levels take them (house, walk, fps, platformer, tanks): each shown in a strip as the player reaches its square, without stopping play. Looks only: play, boards and the verifier never read them.",
22
31
"items": {
23
32
"ref": "#message",
24
33
"type": "ref"
25
34
},
26
35
"maxLength": 24,
27
36
"type": "array"
28
37
},
29
38
"module": {
30
39
"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.",
31
40
"knownValues": [
32
41
"platformer",
33
42
"house",
34
43
"tanks",
35
44
"vortex",
36
45
"roll",
37
46
"fight",
38
47
"golf",
39
48
"cycles",
40
49
"discs",
41
50
"uplink",
42
51
"canyon",
43
52
"belts",
44
53
"race",
45
54
"gunner",
46
55
"drones",
47
56
"landing",
48
57
"deckgun",
49
58
"minefield",
50
59
"pipes",
51
60
"catch",
52
61
"fence",
53
62
"airdrop",
54
63
"invaders",
55
64
"crossing",
56
65
"walk",
57
-
"fps"
66
+
"fps",
67
+
"trivia",
68
+
"hunt",
69
+
"puzzle",
70
+
"chase"
58
71
],
59
72
"maxLength": 32,
60
73
"type": "string"
61
74
},
62
75
"next": {
63
76
"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.",
64
77
"maxLength": 8,
65
78
"type": "string"
66
79
},
67
80
"pictures": {
68
-
"description": "The chapter's own pictures, by key, each a blob: a JPEG or PNG that fits inside 512×512 keeping its own shape (at most 200 KB). poster1 to poster6 are the pictures its posters hang on the level's walls; objective, keycard, ammo, medkit and coin are the faces of what the player picks up, where the chapter type has them (objective: first person's intel and evidence, the house's and the walk-through's key and the sign over their way out, the platformer's door; coin: first person's and the platformer's coins), shown on the pickup, on the HUD and in its banner. Public once published. Looks only: play, boards and the verifier never read them.",
81
+
"description": "The chapter's own pictures, by key, each a blob: a JPEG or PNG that fits inside 512×512 keeping its own shape (at most 200 KB). poster1 to poster6 are the pictures its posters hang on the level's walls; q1 to q20 are a trivia chapter's pictures for its questions (by a question's pic); room1 to room5 are a photo hunt's rooms (by a room's pic), which may be up to 1024 across; objective, keycard, ammo, medkit and coin are the faces of what the player picks up, where the chapter type has them (objective: first person's intel and evidence, the house's and the walk-through's key and the sign over their way out, the platformer's door; coin: first person's and the platformer's coins), shown on the pickup, on the HUD and in its banner. Public once published. Looks only: play, boards and the verifier never read them.",
69
82
"type": "unknown"
70
83
},
71
84
"posters": {
72
85
"description": "The builder's pictures hung on the level's walls (a wanted poster, a family photo, a logo, a sign), for chapter types whose levels have walls to see (the house, the walk-through, first person, the tank maze): one a wall square, framed on the face that looks onto the most open floor. A poster on a square that isn't a wall, or whose picture is missing, isn't shown. Looks only: not part of play.",
73
86
"items": {
74
87
"ref": "#poster",
75
88
"type": "ref"
76
89
},
77
90
"maxLength": 24,
78
91
"type": "array"
79
92
},
80
93
"preset": {
81
94
"description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
82
95
"maxLength": 32,
83
96
"type": "string"
84
97
},
98
+
"quiz": {
99
+
"description": "A trivia chapter's own questions, in the order asked (absent: its preset's). Part of play: the right answers decide the score, so they're in the record for the verifier (anyone reading the record can see them). A reader lets go of a question it can't play (no words, fewer than two answers, the right one empty) and plays the preset's if none is left.",
100
+
"items": {
101
+
"ref": "#question",
102
+
"type": "ref"
103
+
},
104
+
"maxLength": 20,
105
+
"type": "array"
106
+
},
85
107
"settings": {
86
108
"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. First person's include, all optional: stealth, guards, bodies (guards find bodies), rally (after you're down: back at the last checkpoint, topped up), kit (the built-in weapons carried besides the rifle, a bit each: pistol, suppressed pistol, SMG, shotgun, sniper rifle, taser, tranquilizer), custom (the game's own weapons carried, a bit each), coins and emps (the gadgets).",
87
109
"type": "unknown"
88
110
},
89
111
"sounds": {
90
112
"description": "The game's own sounds in place of the chapter's, by the noise (an object of sound ids by key): the walk-through's jump-outs (ghoul, thing, face, hound, victim, drop, member) and sound pieces (cueA, cueL, cueR, cueI, cueJ, cueN, cueY); First person's alerts (spotted, alarm, caught, checkpoint). A reader takes only the keys its module names and the sounds the game has. Looks only.",
91
113
"type": "unknown"
92
114
},
93
115
"textures": {
94
116
"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.",
95
117
"type": "unknown"
96
118
},
97
119
"title": {
98
120
"maxGraphemes": 40,
99
121
"maxLength": 160,
100
122
"type": "string"
101
123
},
102
124
"version": {
103
125
"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.",
104
126
"minimum": 1,
105
127
"type": "integer"
106
128
},
107
129
"words": {
108
130
"description": "The builder's own words in place of the chapter's: an object of strings by key (for example {\"objective\": \"Grandma's recipe\", \"boss\": \"AUNT MARGE\"}). Each module declares its keys (its banners, toasts, HUD labels, the hint) and how long each may be; a reader keeps only keys it knows, trims each to its limit, and says the rest in the module's own words. A word may hold placeholders such as {n} and {total}, filled with the numbers as it's said. Looks only: play, boards and the verifier never read it.",
109
131
"type": "unknown"
110
132
}
111
133
},
112
134
"required": [
113
135
"module",
114
136
"version",
115
137
"title",
116
138
"preset",
117
139
"settings"
118
140
],
119
141
"type": "object"
120
142
},
121
143
"choice": {
122
144
"description": "One way on from a scene's choice.",
123
145
"properties": {
124
146
"label": {
125
147
"description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
126
148
"maxGraphemes": 60,
127
149
"maxLength": 240,
128
150
"type": "string"
129
151
},
130
152
"to": {
131
153
"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.",
132
154
"maxLength": 8,
133
155
"type": "string"
134
156
}
135
157
},
136
158
"required": [
137
159
"label",
138
160
"to"
139
161
],
140
162
"type": "object"
141
163
},
142
164
"credits": {
143
165
"properties": {
144
166
"lines": {
145
167
"description": "The builder's own lines (\"Made by Todd for the Lambert family reunion\").",
146
168
"items": {
147
169
"maxGraphemes": 80,
148
170
"maxLength": 320,
149
171
"type": "string"
150
172
},
151
173
"maxLength": 12,
152
174
"type": "array"
153
175
},
154
176
"loop": {
155
177
"description": "The credits' sound plays over and over under the whole roll (a music bed).",
156
178
"type": "boolean"
157
179
},
158
180
"picture": {
159
181
"accept": [
160
182
"image/jpeg",
161
183
"image/png"
162
184
],
163
185
"description": "A picture at the end of the roll (at most 1600×900). Public once published. Looks only.",
164
186
"maxSize": 716800,
165
187
"type": "blob"
166
188
},
167
189
"sound": {
168
190
"description": "One of the game's own sounds (its id), played as the credits start to roll.",
169
191
"maxLength": 12,
170
192
"type": "string"
171
193
},
172
194
"starring": {
173
195
"description": "The cast, in order, each once: shown with their photo and the name they go by in the game.",
174
196
"items": {
175
197
"ref": "#starring",
176
198
"type": "ref"
177
199
},
178
200
"maxLength": 15,
179
201
"type": "array"
180
202
}
181
203
},
182
204
"type": "object"
183
205
},
206
+
"gift": {
207
+
"properties": {
208
+
"as": {
209
+
"description": "The part of the game's cast they play (the star or the villain): the gift card shows that part's photo.",
210
+
"knownValues": [
211
+
"ghoul",
212
+
"hound",
213
+
"thing",
214
+
"scream",
215
+
"victim",
216
+
"portrait",
217
+
"you",
218
+
"m1",
219
+
"m2",
220
+
"m3",
221
+
"m4",
222
+
"m5",
223
+
"m6",
224
+
"m7",
225
+
"m8"
226
+
],
227
+
"maxLength": 16,
228
+
"type": "string"
229
+
},
230
+
"from": {
231
+
"description": "Who it's from, as they'd sign it; absent, the card names the account that made it.",
232
+
"maxGraphemes": 40,
233
+
"maxLength": 160,
234
+
"type": "string"
235
+
},
236
+
"message": {
237
+
"description": "The builder's message to them (\"Happy 50th, Ray! Love, Todd\"), shown on the gift card.",
238
+
"maxGraphemes": 300,
239
+
"maxLength": 1200,
240
+
"type": "string"
241
+
},
242
+
"to": {
243
+
"description": "Who the game is for, by the name they go by (\"Ray\").",
244
+
"maxGraphemes": 40,
245
+
"maxLength": 160,
246
+
"type": "string"
247
+
}
248
+
},
249
+
"required": [
250
+
"to",
251
+
"message"
252
+
],
253
+
"type": "object"
254
+
},
255
+
"huntRoom": {
256
+
"properties": {
257
+
"name": {
258
+
"description": "What the picture is called (\"Grandma's kitchen\"). Looks only.",
259
+
"maxGraphemes": 40,
260
+
"maxLength": 160,
261
+
"type": "string"
262
+
},
263
+
"pic": {
264
+
"description": "Which of the chapter's pictures it is (its pictures' room1 to room5).",
265
+
"maximum": 5,
266
+
"minimum": 1,
267
+
"type": "integer"
268
+
},
269
+
"targets": {
270
+
"items": {
271
+
"ref": "#huntTarget",
272
+
"type": "ref"
273
+
},
274
+
"maxLength": 8,
275
+
"minLength": 1,
276
+
"type": "array"
277
+
}
278
+
},
279
+
"required": [
280
+
"pic",
281
+
"targets"
282
+
],
283
+
"type": "object"
284
+
},
285
+
"huntTarget": {
286
+
"properties": {
287
+
"label": {
288
+
"description": "What it is, on the list of what to find (\"Grandpa\", \"the cat\"). Looks only.",
289
+
"maxGraphemes": 40,
290
+
"maxLength": 160,
291
+
"type": "string"
292
+
},
293
+
"r": {
294
+
"description": "How far from its middle a tap still finds it, in the same space.",
295
+
"maximum": 250,
296
+
"minimum": 12,
297
+
"type": "integer"
298
+
},
299
+
"s": {
300
+
"description": "How tall the cast member stands, in the picture's space. Looks only.",
301
+
"maximum": 800,
302
+
"minimum": 40,
303
+
"type": "integer"
304
+
},
305
+
"who": {
306
+
"description": "One of the game's cast stood in the picture here as a cut-out, to be found. Looks only.",
307
+
"knownValues": [
308
+
"you",
309
+
"portrait",
310
+
"victim",
311
+
"thing",
312
+
"ghoul",
313
+
"hound",
314
+
"scream",
315
+
"m1",
316
+
"m2",
317
+
"m3",
318
+
"m4",
319
+
"m5",
320
+
"m6",
321
+
"m7",
322
+
"m8"
323
+
],
324
+
"maxLength": 16,
325
+
"type": "string"
326
+
},
327
+
"x": {
328
+
"description": "Its middle, across the picture, in the picture's own space: its longer side runs 0 to 999 and the shorter in proportion.",
329
+
"maximum": 999,
330
+
"minimum": 0,
331
+
"type": "integer"
332
+
},
333
+
"y": {
334
+
"description": "Its middle, down the picture, in the same space.",
335
+
"maximum": 999,
336
+
"minimum": 0,
337
+
"type": "integer"
338
+
}
339
+
},
340
+
"required": [
341
+
"x",
342
+
"y",
343
+
"r",
344
+
"label"
345
+
],
346
+
"type": "object"
347
+
},
184
348
"level": {
185
349
"properties": {
186
350
"rows": {
187
351
"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. First person also takes weapon pickups (ⓟ pistol, ⓢ suppressed pistol, ⓜ SMG, ⓖ shotgun, ⓝ sniper rifle, ⓣ taser, ⓓ tranquilizer, ① to ⑧ the game's own weapons), gadgets (ⓒ a coin, ⓔ an EMP) and ⚑ a checkpoint.",
188
352
"items": {
189
353
"maxLength": 160,
190
354
"type": "string"
191
355
},
192
356
"maxLength": 24,
193
357
"minLength": 8,
194
358
"type": "array"
195
359
}
196
360
},
197
361
"required": [
198
362
"rows"
199
363
],
200
364
"type": "object"
201
365
},
202
366
"main": {
203
367
"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.",
204
368
"key": "tid",
205
369
"record": {
206
370
"properties": {
207
371
"carryLives": {
208
372
"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.",
209
373
"type": "boolean"
210
374
},
211
375
"cast": {
212
376
"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.",
213
377
"items": {
214
378
"ref": "#member",
215
379
"type": "ref"
216
380
},
217
381
"maxLength": 15,
218
382
"type": "array"
219
383
},
220
384
"chapters": {
221
385
"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.",
222
386
"items": {
223
387
"ref": "#chapter",
224
388
"type": "ref"
225
389
},
226
390
"maxLength": 8,
227
391
"minLength": 1,
228
392
"type": "array"
229
393
},
230
394
"cover": {
231
395
"accept": [
232
396
"image/jpeg",
233
397
"image/png"
234
398
],
235
399
"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.",
236
400
"maxSize": 614400,
237
401
"type": "blob"
238
402
},
239
403
"createdAt": {
240
404
"format": "datetime",
241
405
"type": "string"
242
406
},
243
407
"credits": {
244
408
"description": "The game's end credits, rolled after the ending and before the results, skippable. Present means they're on. Looks only: not part of play.",
245
409
"ref": "#credits",
246
410
"type": "ref"
247
411
},
248
412
"description": {
249
413
"maxGraphemes": 200,
250
414
"maxLength": 800,
251
415
"type": "string"
252
416
},
417
+
"gift": {
418
+
"description": "A game made for someone: who it's for, a message to them, and who it's from. Its link opens on a gift card (\"A game for Ray\", the message, their photo, a big Play button) and its share card says so. Words only: not part of play.",
419
+
"ref": "#gift",
420
+
"type": "ref"
421
+
},
253
422
"logo": {
254
423
"accept": [
255
424
"image/png",
256
425
"image/jpeg"
257
426
],
258
427
"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.",
259
428
"maxSize": 409600,
260
429
"type": "blob"
261
430
},
262
431
"remixOf": {
263
432
"description": "The game this one was remixed from, pinned to the version remixed: credit, shown on the game's page. Absent for an original.",
264
433
"ref": "com.atproto.repo.strongRef",
265
434
"type": "ref"
266
435
},
267
436
"scenes": {
268
437
"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 (and, in a game whose story branches, an ending of a way's own: see the scene's chapter). 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.",
269
438
"items": {
270
439
"ref": "#scene",
271
440
"type": "ref"
272
441
},
273
442
"maxLength": 10,
274
443
"type": "array"
275
444
},
276
445
"sounds": {
277
446
"description": "The builder's own sounds, recorded or uploaded in the maker: at most eight, five seconds each. Used by id where the game makes a noise: a scene's sting and a message's sound (as \"sound:<id>\"), a chapter's sounds (the walk-through's jump-outs and sound pieces, First person's alerts), the title card's and the credits' sound. Only the ones the game uses are published. Public once published; looks only: play, boards and the verifier never read them. A hidden game's are withheld.",
278
447
"items": {
279
448
"ref": "#sound",
280
449
"type": "ref"
281
450
},
282
451
"maxLength": 8,
283
452
"type": "array"
284
453
},
285
454
"theme": {
286
455
"ref": "#theme",
287
456
"type": "ref"
288
457
},
289
458
"title": {
290
459
"maxGraphemes": 60,
291
460
"maxLength": 240,
292
461
"type": "string"
293
462
},
294
463
"titleCard": {
295
464
"description": "The game's own title card, shown before the opening scene or the first chapter's card, with a short fade. Present means it's on. Looks only: not part of play.",
296
465
"ref": "#titleCard",
297
466
"type": "ref"
298
467
},
299
468
"weapons": {
300
469
"description": "The builder's own weapons, for First person chapters: a chapter carries the ones its `custom` setting ticks (a bit each, the first weapon bit 0), and a drawn level places them as pickups (① to ⑧). Their numbers are part of play (changing one gives the game a fresh board); their names, looks and pictures are words and looks. A reader takes eight at most and clamps each number to its range.",
301
470
"items": {
302
471
"ref": "#weapon",
303
472
"type": "ref"
304
473
},
305
474
"maxLength": 8,
306
475
"type": "array"
307
476
}
308
477
},
309
478
"required": [
310
479
"title",
311
480
"theme",
312
481
"chapters",
313
482
"createdAt"
314
483
],
315
484
"type": "object"
316
485
},
317
486
"type": "record"
318
487
},
319
488
"member": {
320
489
"description": "One of the cast: the part they play, the name they're billed under, and their photo.",
321
490
"properties": {
322
491
"image": {
323
492
"accept": [
324
493
"image/png",
325
494
"image/jpeg"
326
495
],
327
496
"description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
328
497
"maxSize": 196608,
329
498
"type": "blob"
330
499
},
331
500
"name": {
332
501
"maxGraphemes": 40,
333
502
"maxLength": 160,
334
503
"type": "string"
335
504
},
336
505
"role": {
337
506
"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.",
338
507
"knownValues": [
339
508
"ghoul",
340
509
"hound",
341
510
"thing",
342
511
"scream",
343
512
"victim",
344
513
"portrait",
345
514
"you",
346
515
"m1",
347
516
"m2",
348
517
"m3",
349
518
"m4",
350
519
"m5",
351
520
"m6",
352
521
"m7",
353
522
"m8"
354
523
],
355
524
"type": "string"
356
525
}
357
526
},
358
527
"required": [
359
528
"role",
360
529
"name",
361
530
"image"
362
531
],
363
532
"type": "object"
364
533
},
365
534
"message": {
366
535
"properties": {
367
536
"again": {
368
537
"description": "Shown every time the player steps back onto it, not only the first.",
369
538
"type": "boolean"
370
539
},
371
540
"sting": {
372
541
"description": "A sound as it shows: one of the horror pack's recordings, a radio's blip, or one of the game's own sounds as \"sound:<id>\".",
373
542
"knownValues": [
374
543
"creepy_hello",
375
544
"creepy_laugh",
376
545
"female_scream",
377
546
"intrigue_event",
378
547
"jump_scare",
379
548
"jump_scare_horn",
380
549
"lets_play",
381
550
"radio"
382
551
],
383
552
"maxLength": 32,
384
553
"type": "string"
385
554
},
386
555
"text": {
387
556
"maxGraphemes": 160,
388
557
"maxLength": 640,
389
558
"type": "string"
390
559
},
391
560
"who": {
392
561
"description": "Who says it: one of the game's cast (shown with their photo and name), or absent for a note or the narrator.",
393
562
"knownValues": [
394
563
"ghoul",
395
564
"hound",
396
565
"thing",
397
566
"scream",
398
567
"victim",
399
568
"portrait",
400
569
"you",
401
570
"m1",
402
571
"m2",
403
572
"m3",
404
573
"m4",
405
574
"m5",
406
575
"m6",
407
576
"m7",
408
577
"m8"
409
578
],
410
579
"maxLength": 16,
411
580
"type": "string"
412
581
},
413
582
"x": {
414
583
"description": "The square's column, as the level's rows have it.",
415
584
"minimum": 0,
416
585
"type": "integer"
417
586
},
418
587
"y": {
419
588
"description": "The square's row.",
420
589
"minimum": 0,
421
590
"type": "integer"
422
591
}
423
592
},
424
593
"required": [
425
594
"x",
426
595
"y",
427
596
"text"
428
597
],
429
598
"type": "object"
430
599
},
431
600
"poster": {
432
601
"properties": {
433
602
"pic": {
434
603
"description": "Which of the chapter's poster pictures it shows: 1 is pictures.poster1, and so on.",
435
604
"maximum": 6,
436
605
"minimum": 1,
437
606
"type": "integer"
438
607
},
439
608
"x": {
440
609
"description": "The wall square's column, as the level's rows have it (the drawn level's, or the preset's own map).",
441
610
"minimum": 0,
442
611
"type": "integer"
443
612
},
444
613
"y": {
445
614
"description": "The wall square's row.",
446
615
"minimum": 0,
447
616
"type": "integer"
448
617
}
449
618
},
450
619
"required": [
451
620
"x",
452
621
"y",
453
622
"pic"
454
623
],
455
624
"type": "object"
456
625
},
626
+
"question": {
627
+
"properties": {
628
+
"answers": {
629
+
"description": "Two to four answers, shown in this order.",
630
+
"items": {
631
+
"maxGraphemes": 60,
632
+
"maxLength": 240,
633
+
"type": "string"
634
+
},
635
+
"maxLength": 4,
636
+
"minLength": 2,
637
+
"type": "array"
638
+
},
639
+
"pic": {
640
+
"description": "The chapter's picture shown with it (its pictures' q1 to q20). Looks only.",
641
+
"maximum": 20,
642
+
"minimum": 1,
643
+
"type": "integer"
644
+
},
645
+
"q": {
646
+
"description": "What's asked (\"What year did Grandpa buy the station wagon?\").",
647
+
"maxGraphemes": 160,
648
+
"maxLength": 640,
649
+
"type": "string"
650
+
},
651
+
"right": {
652
+
"description": "Which answer is right, counting from 0.",
653
+
"maximum": 3,
654
+
"minimum": 0,
655
+
"type": "integer"
656
+
},
657
+
"time": {
658
+
"description": "Its own clock in seconds, in place of the chapter's setting.",
659
+
"maximum": 60,
660
+
"minimum": 5,
661
+
"type": "integer"
662
+
}
663
+
},
664
+
"required": [
665
+
"q",
666
+
"answers",
667
+
"right"
668
+
],
669
+
"type": "object"
670
+
},
457
671
"scene": {
458
672
"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.",
459
673
"properties": {
460
674
"at": {
461
675
"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.",
462
676
"knownValues": [
463
677
"before",
464
678
"win",
465
679
"lose"
466
680
],
467
681
"maxLength": 16,
468
682
"type": "string"
469
683
},
470
684
"bg": {
471
685
"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.",
472
686
"knownValues": [
473
687
"replay",
474
688
"flyby",
475
689
"picture",
476
690
"plain"
477
691
],
478
692
"maxLength": 16,
479
693
"type": "string"
480
694
},
481
695
"chapter": {
482
696
"description": "For a scene before a chapter: which one, counting from 0 (0 is the opening, before the first chapter's card). For an ending (win or lose) in a game whose story branches: the ending for the way whose last chapter played was this one; the ending without a chapter plays wherever no way's own matches. Looks only.",
483
697
"maximum": 7,
484
698
"minimum": 0,
485
699
"type": "integer"
486
700
},
487
701
"choices": {
488
702
"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.",
489
703
"items": {
490
704
"ref": "#choice",
491
705
"type": "ref"
492
706
},
493
707
"maxLength": 3,
494
708
"minLength": 2,
495
709
"type": "array"
496
710
},
497
711
"lines": {
498
712
"description": "Typed out one at a time; the player moves on line by line.",
499
713
"items": {
500
714
"ref": "#sceneLine",
501
715
"type": "ref"
502
716
},
503
717
"maxLength": 6,
504
718
"type": "array"
505
719
},
506
720
"music": {
507
721
"description": "A mood of music under the scene. Absent: none.",
508
722
"knownValues": [
509
723
"musicbox",
510
724
"heartbeat",
511
725
"unease",
512
726
"dread",
513
727
"tension",
514
728
"groove",
515
729
"pulse",
516
730
"drift",
517
731
"alarm",
518
732
"island",
519
733
"heist"
520
734
],
521
735
"maxLength": 32,
522
736
"type": "string"
523
737
},
524
738
"picture": {
525
739
"accept": [
526
740
"image/jpeg",
527
741
"image/png"
528
742
],
529
743
"description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
530
744
"maxSize": 716800,
531
745
"type": "blob"
532
746
},
533
747
"sting": {
534
748
"description": "A recorded sound as the scene opens: one of the horror pack's, or one of the game's own sounds as \"sound:<id>\". Absent: none.",
535
749
"knownValues": [
536
750
"creepy_hello",
537
751
"creepy_laugh",
538
752
"female_scream",
539
753
"intrigue_event",
540
754
"jump_scare",
541
755
"jump_scare_horn",
542
756
"lets_play"
543
757
],
544
758
"maxLength": 32,
545
759
"type": "string"
546
760
},
547
761
"title": {
548
762
"maxGraphemes": 60,
549
763
"maxLength": 240,
550
764
"type": "string"
551
765
}
552
766
},
553
767
"required": [
554
768
"at",
555
769
"bg"
556
770
],
557
771
"type": "object"
558
772
},
559
773
"sceneLine": {
560
774
"properties": {
561
775
"text": {
562
776
"maxGraphemes": 160,
563
777
"maxLength": 640,
564
778
"type": "string"
565
779
},
566
780
"who": {
567
781
"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.",
568
782
"knownValues": [
569
783
"ghoul",
570
784
"hound",
571
785
"thing",
572
786
"scream",
573
787
"victim",
574
788
"portrait",
575
789
"you",
576
790
"m1",
577
791
"m2",
578
792
"m3",
579
793
"m4",
580
794
"m5",
581
795
"m6",
582
796
"m7",
583
797
"m8"
584
798
],
585
799
"maxLength": 16,
586
800
"type": "string"
587
801
}
588
802
},
589
803
"required": [
590
804
"text"
591
805
],
592
806
"type": "object"
593
807
},
594
808
"sound": {
595
809
"description": "One of the builder's own sounds.",
596
810
"properties": {
597
811
"blob": {
598
812
"accept": [
599
813
"audio/*",
600
814
"video/mp4"
601
815
],
602
816
"description": "The sound: AAC in an MP4, or 16-bit PCM in a WAV, mono, at most five seconds and 200 KB. (A data server may name an MP4 video/mp4 or audio/x-m4a, and a WAV audio/x-wav or audio/vnd.wave, by its bytes.)",
603
817
"maxSize": 204800,
604
818
"type": "blob"
605
819
},
606
820
"id": {
607
821
"description": "Lowercase letters and digits, unique in the game: how the rest of the record names it.",
608
822
"maxLength": 12,
609
823
"type": "string"
610
824
},
611
825
"mime": {
612
826
"description": "What it is, as the maker made it.",
613
827
"knownValues": [
614
828
"audio/mp4",
615
829
"audio/wav"
616
830
],
617
831
"maxLength": 32,
618
832
"type": "string"
619
833
},
620
834
"ms": {
621
835
"description": "How long it is, in milliseconds.",
622
836
"maximum": 5000,
623
837
"minimum": 1,
624
838
"type": "integer"
625
839
},
626
840
"name": {
627
841
"description": "What the builder calls it (\"Grandpa's yell\").",
628
842
"maxGraphemes": 40,
629
843
"maxLength": 160,
630
844
"type": "string"
631
845
}
632
846
},
633
847
"required": [
634
848
"id",
635
849
"blob",
636
850
"mime",
637
851
"ms"
638
852
],
639
853
"type": "object"
640
854
},
641
855
"starring": {
642
856
"properties": {
643
857
"as": {
644
858
"description": "Who they play (\"Grandma\"), shown as \"as Grandma\".",
645
859
"maxGraphemes": 40,
646
860
"maxLength": 160,
647
861
"type": "string"
648
862
},
649
863
"who": {
650
864
"description": "One of the game's cast: a part or one of the builder's own members.",
651
865
"knownValues": [
652
866
"ghoul",
653
867
"hound",
654
868
"thing",
655
869
"scream",
656
870
"victim",
657
871
"portrait",
658
872
"you",
659
873
"m1",
660
874
"m2",
661
875
"m3",
662
876
"m4",
663
877
"m5",
664
878
"m6",
665
879
"m7",
666
880
"m8"
667
881
],
668
882
"maxLength": 16,
669
883
"type": "string"
670
884
}
671
885
},
672
886
"required": [
673
887
"who"
674
888
],
675
889
"type": "object"
676
890
},
677
891
"theme": {
678
892
"properties": {
679
893
"mood": {
680
894
"description": "How the chapters light their worlds.",
681
895
"knownValues": [
682
896
"bright",
683
897
"dusk",
684
898
"cold",
685
899
"neon",
686
900
"space",
687
901
"horror",
688
902
"retro"
689
903
],
690
904
"type": "string"
691
905
},
692
906
"palette": {
693
907
"description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
694
908
"items": {
695
909
"maxLength": 7,
696
910
"type": "string"
697
911
},
698
912
"maxLength": 5,
699
913
"minLength": 5,
700
914
"type": "array"
701
915
},
702
916
"pattern": {
703
917
"knownValues": [
704
918
"none",
705
919
"grid",
706
920
"stripes",
707
921
"dots",
708
922
"checks",
709
923
"waves",
710
924
"stars"
711
925
],
712
926
"type": "string"
713
927
},
714
928
"preset": {
715
929
"description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
716
930
"maxLength": 20,
717
931
"type": "string"
718
932
},
719
933
"type": {
720
934
"description": "The typeface for titles.",
721
935
"knownValues": [
722
936
"anton",
723
937
"creepster",
724
938
"inter"
725
939
],
726
940
"type": "string"
727
941
}
728
942
},
729
943
"required": [
730
944
"palette",
731
945
"pattern",
732
946
"mood",
733
947
"type"
734
948
],
735
949
"type": "object"
736
950
},
737
951
"titleCard": {
738
952
"properties": {
739
953
"line": {
740
954
"description": "A line under the title.",
741
955
"maxGraphemes": 120,
742
956
"maxLength": 480,
743
957
"type": "string"
744
958
},
745
959
"picture": {
746
960
"accept": [
747
961
"image/jpeg",
748
962
"image/png"
749
963
],
750
964
"description": "The builder's picture for the card (at most 1600×900); absent, the game's logo if it has one. Public once published. Looks only.",
751
965
"maxSize": 716800,
752
966
"type": "blob"
753
967
},
754
968
"sound": {
755
969
"description": "One of the game's own sounds (its id), played as the card fades in.",
756
970
"maxLength": 12,
757
971
"type": "string"
758
972
},
759
973
"title": {
760
974
"description": "In place of the game's title on the card; absent, the game's own.",
761
975
"maxGraphemes": 60,
762
976
"maxLength": 240,
763
977
"type": "string"
764
978
}
765
979
},
766
980
"type": "object"
767
981
},
768
982
"weapon": {
769
983
"description": "One of the builder's own weapons: what it's called, which built-in model it wears, and what it does. Every number is a whole number in its range (a reader clamps it).",
770
984
"properties": {
771
985
"damage": {
772
986
"description": "Health off a guard per round that lands (a guard has 4 at the default toughness, the boss 28). Lethal weapons only.",
773
987
"maximum": 10,
774
988
"minimum": 1,
775
989
"type": "integer"
776
990
},
777
991
"delay": {
778
992
"description": "A non-lethal weapon's: 60 Hz ticks a guard staggers before it drops (0: at once).",
779
993
"maximum": 300,
780
994
"minimum": 0,
781
995
"type": "integer"
782
996
},
783
997
"lethal": {
784
998
"description": "False: a hit knocks a guard out (unconscious) instead of hurting it.",
785
999
"type": "boolean"
786
1000
},
787
1001
"look": {
788
1002
"description": "The built-in model it wears. Looks only.",
789
1003
"knownValues": [
790
1004
"pistol",
791
1005
"silenced",
792
1006
"smg",
793
1007
"shotgun",
794
1008
"sniper",
795
1009
"taser",
796
1010
"tranq"
797
1011
],
798
1012
"maxLength": 16,
799
1013
"type": "string"
800
1014
},
801
1015
"magazine": {
802
1016
"description": "Rounds (or charges) in a magazine.",
803
1017
"maximum": 60,
804
1018
"minimum": 1,
805
1019
"type": "integer"
806
1020
},
807
1021
"name": {
808
1022
"maxGraphemes": 24,
809
1023
"maxLength": 96,
810
1024
"type": "string"
811
1025
},
812
1026
"noise": {
813
1027
"description": "How far guards hear a shot, in squares (0: silent).",
814
1028
"maximum": 14,
815
1029
"minimum": 0,
816
1030
"type": "integer"
817
1031
},
818
1032
"pellets": {
819
1033
"description": "Rounds a pull of the trigger (a shotgun's several).",
820
1034
"maximum": 9,
821
1035
"minimum": 1,
822
1036
"type": "integer"
823
1037
},
824
1038
"range": {
825
1039
"description": "How far a round goes, in squares.",
826
1040
"maximum": 24,
827
1041
"minimum": 1,
828
1042
"type": "integer"
829
1043
},
830
1044
"rate": {
831
1045
"description": "60 Hz ticks between shots.",
832
1046
"maximum": 120,
833
1047
"minimum": 4,
834
1048
"type": "integer"
835
1049
},
836
1050
"reload": {
837
1051
"description": "60 Hz ticks to reload.",
838
1052
"maximum": 300,
839
1053
"minimum": 20,
840
1054
"type": "integer"
841
1055
},
842
1056
"skin": {
843
1057
"accept": [
844
1058
"image/jpeg",
845
1059
"image/png"
846
1060
],
847
1061
"description": "The builder's picture on its body (a square JPEG, 256×256, at most 120 KB). Public once published. Looks only.",
848
1062
"maxSize": 122880,
849
1063
"type": "blob"
850
1064
},
851
1065
"spare": {
852
1066
"description": "Spare magazines carried at the start.",
853
1067
"maximum": 9,
854
1068
"minimum": 0,
855
1069
"type": "integer"
856
1070
},
857
1071
"spread": {
858
1072
"description": "How far a round can stray either way, in 1024ths of a turn.",
859
1073
"maximum": 60,
860
1074
"minimum": 0,
861
1075
"type": "integer"
862
1076
}
863
1077
},
864
1078
"required": [
865
1079
"name",
866
1080
"look",
867
1081
"damage",
868
1082
"rate",
869
1083
"range",
870
1084
"magazine",
871
1085
"lethal"
872
1086
],
873
1087
"type": "object"
874
1088
}
875
1089
},
876
1090
"id": "com.gamethesky.make.game",
877
1091
"lexicon": 1
878
1092
}