com.gamethesky.make.game
Schema Diff
+407 -81
Compatibility Analysis
Breaking Changes Detected
20 breaking changes, 89 non-breaking changes.
Breaking Changes (20)
- 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") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#member", src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.slot", kind: "prop", name: Some("slot") }
- 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#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") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "com.gamethesky.make.game#member", src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.role", kind: "prop", name: Some("role") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "com.gamethesky.make.game#member", src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.image", kind: "prop", name: Some("image") }
- RemovedVertex RemovedVertex { vertex_id: "com.gamethesky.make.game#member.image" }
- RemovedVertex RemovedVertex { vertex_id: "com.gamethesky.make.game#member.role" }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#message.who", sort: "knownValues", old_value: "[\"ghoul\",\"hound\",\"thing\",\"scream\",\"victim\",\"portrait\",\"you\",\"m1\",\"m2\",\"m3\",\"m4\",\"m5\",\"m6\",\"m7\",\"m8\"]", new_value: "[\"hero1\",\"hero2\",\"hero3\",\"foe1\",\"foe2\",\"foe3\",\"foe4\",\"foe5\",\"foe6\",\"villain1\",\"villain2\",\"villain3\",\"extra1\",\"extra2\",\"extra3\",\"extra4\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#sceneLine.who", sort: "knownValues", old_value: "[\"ghoul\",\"hound\",\"thing\",\"scream\",\"victim\",\"portrait\",\"you\",\"m1\",\"m2\",\"m3\",\"m4\",\"m5\",\"m6\",\"m7\",\"m8\"]", new_value: "[\"hero1\",\"hero2\",\"hero3\",\"foe1\",\"foe2\",\"foe3\",\"foe4\",\"foe5\",\"foe6\",\"villain1\",\"villain2\",\"villain3\",\"extra1\",\"extra2\",\"extra3\",\"extra4\"]" }
- 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\",\"kart\",\"grift\",\"f47\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#starring.who", sort: "knownValues", old_value: "[\"ghoul\",\"hound\",\"thing\",\"scream\",\"victim\",\"portrait\",\"you\",\"m1\",\"m2\",\"m3\",\"m4\",\"m5\",\"m6\",\"m7\",\"m8\"]", new_value: "[\"hero1\",\"hero2\",\"hero3\",\"foe1\",\"foe2\",\"foe3\",\"foe4\",\"foe5\",\"foe6\",\"villain1\",\"villain2\",\"villain3\",\"extra1\",\"extra2\",\"extra3\",\"extra4\"]" }
Non-Breaking Changes (89)
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.castMap" }
- 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#chapter.rivals" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.world" }
- 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#member.body" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#member.face" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#member.handle" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#member.slot" }
- 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#theme.card" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#theme.ladder" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#theme.native" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#theme.title" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.builds" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.campaign" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.daily" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.ghost" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.ghostFights" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.gift" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.granny" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.levels" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.rivals" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.video" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.worldLife" }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.castMap", kind: "prop", name: Some("castMap") }
- 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", tgt: "com.gamethesky.make.game#chapter.rivals", kind: "prop", name: Some("rivals") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.world", kind: "prop", name: Some("world") }
- 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#member", tgt: "com.gamethesky.make.game#member.body", kind: "prop", name: Some("body") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.face", kind: "prop", name: Some("face") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.handle", kind: "prop", name: Some("handle") }
- 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#theme", tgt: "com.gamethesky.make.game#theme.card", kind: "prop", name: Some("card") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#theme", tgt: "com.gamethesky.make.game#theme.ladder", kind: "prop", name: Some("ladder") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#theme", tgt: "com.gamethesky.make.game#theme.native", kind: "prop", name: Some("native") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game#theme", tgt: "com.gamethesky.make.game#theme.title", kind: "prop", name: Some("title") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.builds", kind: "prop", name: Some("builds") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.campaign", kind: "prop", name: Some("campaign") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.daily", kind: "prop", name: Some("daily") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.ghost", kind: "prop", name: Some("ghost") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.ghostFights", kind: "prop", name: Some("ghostFights") }
- 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", tgt: "com.gamethesky.make.game:body.granny", kind: "prop", name: Some("granny") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.levels", kind: "prop", name: Some("levels") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.rivals", kind: "prop", name: Some("rivals") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.video", kind: "prop", name: Some("video") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.worldLife", kind: "prop", name: Some("worldLife") }
- AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.gift", tgt: "com.gamethesky.make.game#gift", kind: "ref", name: None }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "com.gamethesky.make.game#scene.chapter", sort: "maximum", old_value: "7", new_value: "59" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "com.gamethesky.make.game#member.image" }RemovedVertex { vertex_id: "com.gamethesky.make.game#member.role" }
Added Elements
AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.castMap" }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#chapter.rivals" }AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.world" }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#member.body" }AddedVertex { vertex_id: "com.gamethesky.make.game#member.face" }AddedVertex { vertex_id: "com.gamethesky.make.game#member.handle" }AddedVertex { vertex_id: "com.gamethesky.make.game#member.slot" }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#theme.card" }AddedVertex { vertex_id: "com.gamethesky.make.game#theme.ladder" }AddedVertex { vertex_id: "com.gamethesky.make.game#theme.native" }AddedVertex { vertex_id: "com.gamethesky.make.game#theme.title" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.builds" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.campaign" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.daily" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.ghost" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.ghostFights" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.gift" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.granny" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.levels" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.rivals" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.video" }AddedVertex { vertex_id: "com.gamethesky.make.game:body.worldLife" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#starring.who", sort: "knownValues", old_value: "[\"ghoul\",\"hound\",\"thing\",\"scream\",\"victim\",\"portrait\",\"you\",\"m1\",\"m2\",\"m3\",\"m4\",\"m5\",\"m6\",\"m7\",\"m8\"]", new_value: "[\"hero1\",\"hero2\",\"hero3\",\"foe1\",\"foe2\",\"foe3\",\"foe4\",\"foe5\",\"foe6\",\"villain1\",\"villain2\",\"villain3\",\"extra1\",\"extra2\",\"extra3\",\"extra4\"]" }
- 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\",\"kart\",\"grift\",\"f47\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#sceneLine.who", sort: "knownValues", old_value: "[\"ghoul\",\"hound\",\"thing\",\"scream\",\"victim\",\"portrait\",\"you\",\"m1\",\"m2\",\"m3\",\"m4\",\"m5\",\"m6\",\"m7\",\"m8\"]", new_value: "[\"hero1\",\"hero2\",\"hero3\",\"foe1\",\"foe2\",\"foe3\",\"foe4\",\"foe5\",\"foe6\",\"villain1\",\"villain2\",\"villain3\",\"extra1\",\"extra2\",\"extra3\",\"extra4\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "com.gamethesky.make.game#message.who", sort: "knownValues", old_value: "[\"ghoul\",\"hound\",\"thing\",\"scream\",\"victim\",\"portrait\",\"you\",\"m1\",\"m2\",\"m3\",\"m4\",\"m5\",\"m6\",\"m7\",\"m8\"]", new_value: "[\"hero1\",\"hero2\",\"hero3\",\"foe1\",\"foe2\",\"foe3\",\"foe4\",\"foe5\",\"foe6\",\"villain1\",\"villain2\",\"villain3\",\"extra1\",\"extra2\",\"extra3\",\"extra4\"]" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "com.gamethesky.make.game#scene.chapter", sort: "maximum", old_value: "7", new_value: "59" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#member", src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.slot", kind: "prop", name: Some("slot") }
- 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") }
- 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#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#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: RequiredEdgeRemoved { vertex_id: "com.gamethesky.make.game#member", src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.role", kind: "prop", name: Some("role") }
- Breaking: RequiredEdgeRemoved { vertex_id: "com.gamethesky.make.game#member", src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.image", kind: "prop", name: Some("image") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.castMap", kind: "prop", name: Some("castMap") }
- 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", tgt: "com.gamethesky.make.game#chapter.rivals", kind: "prop", name: Some("rivals") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.world", kind: "prop", name: Some("world") }
- 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#member", tgt: "com.gamethesky.make.game#member.body", kind: "prop", name: Some("body") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.face", kind: "prop", name: Some("face") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#member", tgt: "com.gamethesky.make.game#member.handle", kind: "prop", name: Some("handle") }
- 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#theme", tgt: "com.gamethesky.make.game#theme.card", kind: "prop", name: Some("card") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#theme", tgt: "com.gamethesky.make.game#theme.ladder", kind: "prop", name: Some("ladder") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#theme", tgt: "com.gamethesky.make.game#theme.native", kind: "prop", name: Some("native") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game#theme", tgt: "com.gamethesky.make.game#theme.title", kind: "prop", name: Some("title") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.builds", kind: "prop", name: Some("builds") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.campaign", kind: "prop", name: Some("campaign") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.daily", kind: "prop", name: Some("daily") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.ghost", kind: "prop", name: Some("ghost") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.ghostFights", kind: "prop", name: Some("ghostFights") }
- 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", tgt: "com.gamethesky.make.game:body.granny", kind: "prop", name: Some("granny") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.levels", kind: "prop", name: Some("levels") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.rivals", kind: "prop", name: Some("rivals") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.video", kind: "prop", name: Some("video") }
- Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.worldLife", kind: "prop", name: Some("worldLife") }
- 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
+
"castMap": {
16
+
"description": "Who plays the chapter type's parts in this chapter, where the builder changed it from the type's own: an object of slots (hero1…extra4) by part (the type's own names: guard, boss, rival, ghoul…; \"in this chapter, the guards are Foe 3\"). A reader keeps only parts its module has. Looks only.",
17
+
"type": "unknown"
18
+
},
19
+
"hunt": {
20
+
"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.",
21
+
"items": {
22
+
"ref": "#huntRoom",
23
+
"type": "ref"
24
+
},
25
+
"maxLength": 5,
26
+
"type": "array"
27
+
},
15
28
"level": {
16
29
"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
30
"ref": "#level",
18
31
"type": "ref"
19
32
},
20
33
"messages": {
21
34
"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
35
"items": {
23
36
"ref": "#message",
24
37
"type": "ref"
25
38
},
26
39
"maxLength": 24,
27
40
"type": "array"
28
41
},
29
42
"module": {
30
-
"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.",
43
+
"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), kart (a kart race on a 3D course, with items), grift (Grift Chaser, a speed platformer side on), and f47 (an isometric strike mission in a stealth fighter-bomber). The list grows as games are added; a reader refuses a module it doesn't have.",
31
44
"knownValues": [
32
45
"platformer",
33
46
"house",
34
47
"tanks",
35
48
"vortex",
36
49
"roll",
37
50
"fight",
38
51
"golf",
39
52
"cycles",
40
53
"discs",
41
54
"uplink",
42
55
"canyon",
43
56
"belts",
44
57
"race",
45
58
"gunner",
46
59
"drones",
47
60
"landing",
48
61
"deckgun",
49
62
"minefield",
50
63
"pipes",
51
64
"catch",
52
65
"fence",
53
66
"airdrop",
54
67
"invaders",
55
68
"crossing",
56
69
"walk",
57
-
"fps"
70
+
"fps",
71
+
"trivia",
72
+
"hunt",
73
+
"puzzle",
74
+
"chase",
75
+
"kart",
76
+
"grift",
77
+
"f47"
58
78
],
59
79
"maxLength": 32,
60
80
"type": "string"
61
81
},
62
82
"next": {
63
83
"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
84
"maxLength": 8,
65
85
"type": "string"
66
86
},
67
87
"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.",
88
+
"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
89
"type": "unknown"
70
90
},
71
91
"posters": {
72
92
"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
93
"items": {
74
94
"ref": "#poster",
75
95
"type": "ref"
76
96
},
77
97
"maxLength": 24,
78
98
"type": "array"
79
99
},
80
100
"preset": {
81
101
"description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
82
102
"maxLength": 32,
83
103
"type": "string"
84
104
},
105
+
"quiz": {
106
+
"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.",
107
+
"items": {
108
+
"ref": "#question",
109
+
"type": "ref"
110
+
},
111
+
"maxLength": 20,
112
+
"type": "array"
113
+
},
114
+
"rivals": {
115
+
"description": "This chapter's own rule for who its rivals wear, in place of the game's ('cast' here says the cast even in a game of follows). Looks only.",
116
+
"knownValues": [
117
+
"cast",
118
+
"follows",
119
+
"both"
120
+
],
121
+
"maxLength": 16,
122
+
"type": "string"
123
+
},
85
124
"settings": {
86
125
"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
126
"type": "unknown"
88
127
},
89
128
"sounds": {
90
129
"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
130
"type": "unknown"
92
131
},
93
132
"textures": {
94
133
"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
134
"type": "unknown"
96
135
},
97
136
"title": {
98
137
"maxGraphemes": 40,
99
138
"maxLength": 160,
100
139
"type": "string"
101
140
},
102
141
"version": {
103
142
"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
143
"minimum": 1,
105
144
"type": "integer"
106
145
},
107
146
"words": {
108
147
"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
148
"type": "unknown"
149
+
},
150
+
"world": {
151
+
"description": "A new world (or section) starts at this chapter: its name (\"The Deep\"), shown as a banner on the chapter card and grouping the chapters after it, up to the next chapter that starts one. Empty is a world named by its number. Looks only.",
152
+
"maxGraphemes": 40,
153
+
"maxLength": 160,
154
+
"type": "string"
110
155
}
111
156
},
112
157
"required": [
113
158
"module",
114
159
"version",
115
160
"title",
116
161
"preset",
117
162
"settings"
118
163
],
119
164
"type": "object"
120
165
},
121
166
"choice": {
122
167
"description": "One way on from a scene's choice.",
123
168
"properties": {
124
169
"label": {
125
170
"description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
126
171
"maxGraphemes": 60,
127
172
"maxLength": 240,
128
173
"type": "string"
129
174
},
130
175
"to": {
131
176
"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
177
"maxLength": 8,
133
178
"type": "string"
134
179
}
135
180
},
136
181
"required": [
137
182
"label",
138
183
"to"
139
184
],
140
185
"type": "object"
141
186
},
142
187
"credits": {
143
188
"properties": {
144
189
"lines": {
145
190
"description": "The builder's own lines (\"Made by Todd for the Lambert family reunion\").",
146
191
"items": {
147
192
"maxGraphemes": 80,
148
193
"maxLength": 320,
149
194
"type": "string"
150
195
},
151
196
"maxLength": 12,
152
197
"type": "array"
153
198
},
154
199
"loop": {
155
200
"description": "The credits' sound plays over and over under the whole roll (a music bed).",
156
201
"type": "boolean"
157
202
},
158
203
"picture": {
159
204
"accept": [
160
205
"image/jpeg",
161
206
"image/png"
162
207
],
163
208
"description": "A picture at the end of the roll (at most 1600×900). Public once published. Looks only.",
164
209
"maxSize": 716800,
165
210
"type": "blob"
166
211
},
167
212
"sound": {
168
213
"description": "One of the game's own sounds (its id), played as the credits start to roll.",
169
214
"maxLength": 12,
170
215
"type": "string"
171
216
},
172
217
"starring": {
173
218
"description": "The cast, in order, each once: shown with their photo and the name they go by in the game.",
174
219
"items": {
175
220
"ref": "#starring",
176
221
"type": "ref"
177
222
},
178
223
"maxLength": 15,
179
224
"type": "array"
180
225
}
181
226
},
182
227
"type": "object"
183
228
},
229
+
"gift": {
230
+
"properties": {
231
+
"as": {
232
+
"description": "The slot of the game's cast they play (the star, a Hero slot, or the villain, Villain 1): the gift card shows that slot's photo.",
233
+
"knownValues": [
234
+
"hero1",
235
+
"hero2",
236
+
"hero3",
237
+
"foe1",
238
+
"foe2",
239
+
"foe3",
240
+
"foe4",
241
+
"foe5",
242
+
"foe6",
243
+
"villain1",
244
+
"villain2",
245
+
"villain3",
246
+
"extra1",
247
+
"extra2",
248
+
"extra3",
249
+
"extra4"
250
+
],
251
+
"maxLength": 16,
252
+
"type": "string"
253
+
},
254
+
"from": {
255
+
"description": "Who it's from, as they'd sign it; absent, the card names the account that made it.",
256
+
"maxGraphemes": 40,
257
+
"maxLength": 160,
258
+
"type": "string"
259
+
},
260
+
"message": {
261
+
"description": "The builder's message to them (\"Happy 50th, Ray! Love, Todd\"), shown on the gift card.",
262
+
"maxGraphemes": 300,
263
+
"maxLength": 1200,
264
+
"type": "string"
265
+
},
266
+
"to": {
267
+
"description": "Who the game is for, by the name they go by (\"Ray\").",
268
+
"maxGraphemes": 40,
269
+
"maxLength": 160,
270
+
"type": "string"
271
+
}
272
+
},
273
+
"required": [
274
+
"to",
275
+
"message"
276
+
],
277
+
"type": "object"
278
+
},
279
+
"huntRoom": {
280
+
"properties": {
281
+
"name": {
282
+
"description": "What the picture is called (\"Grandma's kitchen\"). Looks only.",
283
+
"maxGraphemes": 40,
284
+
"maxLength": 160,
285
+
"type": "string"
286
+
},
287
+
"pic": {
288
+
"description": "Which of the chapter's pictures it is (its pictures' room1 to room5).",
289
+
"maximum": 5,
290
+
"minimum": 1,
291
+
"type": "integer"
292
+
},
293
+
"targets": {
294
+
"items": {
295
+
"ref": "#huntTarget",
296
+
"type": "ref"
297
+
},
298
+
"maxLength": 8,
299
+
"minLength": 1,
300
+
"type": "array"
301
+
}
302
+
},
303
+
"required": [
304
+
"pic",
305
+
"targets"
306
+
],
307
+
"type": "object"
308
+
},
309
+
"huntTarget": {
310
+
"properties": {
311
+
"label": {
312
+
"description": "What it is, on the list of what to find (\"Grandpa\", \"the cat\"). Looks only.",
313
+
"maxGraphemes": 40,
314
+
"maxLength": 160,
315
+
"type": "string"
316
+
},
317
+
"r": {
318
+
"description": "How far from its middle a tap still finds it, in the same space.",
319
+
"maximum": 250,
320
+
"minimum": 12,
321
+
"type": "integer"
322
+
},
323
+
"s": {
324
+
"description": "How tall the cast member stands, in the picture's space. Looks only.",
325
+
"maximum": 800,
326
+
"minimum": 40,
327
+
"type": "integer"
328
+
},
329
+
"who": {
330
+
"description": "One of the game's cast (any slot) stood in the picture here as a cut-out, to be found. Looks only.",
331
+
"knownValues": [
332
+
"hero1",
333
+
"hero2",
334
+
"hero3",
335
+
"foe1",
336
+
"foe2",
337
+
"foe3",
338
+
"foe4",
339
+
"foe5",
340
+
"foe6",
341
+
"villain1",
342
+
"villain2",
343
+
"villain3",
344
+
"extra1",
345
+
"extra2",
346
+
"extra3",
347
+
"extra4"
348
+
],
349
+
"maxLength": 16,
350
+
"type": "string"
351
+
},
352
+
"x": {
353
+
"description": "Its middle, across the picture, in the picture's own space: its longer side runs 0 to 999 and the shorter in proportion.",
354
+
"maximum": 999,
355
+
"minimum": 0,
356
+
"type": "integer"
357
+
},
358
+
"y": {
359
+
"description": "Its middle, down the picture, in the same space.",
360
+
"maximum": 999,
361
+
"minimum": 0,
362
+
"type": "integer"
363
+
}
364
+
},
365
+
"required": [
366
+
"x",
367
+
"y",
368
+
"r",
369
+
"label"
370
+
],
371
+
"type": "object"
372
+
},
184
373
"level": {
185
374
"properties": {
186
375
"rows": {
187
-
"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.",
376
+
"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, and ⑴ to ⒃ one of the cast placed by hand: hero1 to extra4), 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. The walk-through, First person, the puzzle room and the street chase take ⑴ to ⒃: one of the cast, by slot (hero1, hero2, hero3, foe1 to foe6, villain1 to villain3, extra1 to extra4), placed by hand.",
188
377
"items": {
189
378
"maxLength": 160,
190
379
"type": "string"
191
380
},
192
381
"maxLength": 24,
193
382
"minLength": 8,
194
383
"type": "array"
195
384
}
196
385
},
197
386
"required": [
198
387
"rows"
199
388
],
200
389
"type": "object"
201
390
},
202
391
"main": {
203
392
"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
393
"key": "tid",
205
394
"record": {
206
395
"properties": {
396
+
"builds": {
397
+
"description": "Players build their own for the chapter types that take one (Fight the Sky's fighter: points over its stats and a special), chosen before a run; each run carries its build (`builds` on the run). Part of play.",
398
+
"type": "boolean"
399
+
},
400
+
"campaign": {
401
+
"description": "With daily: a week's campaign. Today's run is one chapter, tonight's (the last chapter, the finale, on Saturdays and Sundays; the others in turn through the week), and the week's board adds up each account's nights Monday to Sunday (UTC). Part of play.",
402
+
"type": "boolean"
403
+
},
207
404
"carryLives": {
208
405
"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
406
"type": "boolean"
210
407
},
211
408
"cast": {
212
-
"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.",
409
+
"description": "The maker's own cast, by slot (Heroes 1–3: the player and their allies; Foes 1–6: the regular enemies; Villains 1–3: the bosses; Extras 1–4: the rescued, faces on portraits, a host, a crowd), each once, with both of a person's pictures (a face and a cut-out figure). Each chapter type says which of its parts each slot plays (a chapter's castMap can change it). Optional: a game published without one is played with each player's own. Looks only.",
213
410
"items": {
214
411
"ref": "#member",
215
412
"type": "ref"
216
413
},
217
-
"maxLength": 15,
414
+
"maxLength": 16,
218
415
"type": "array"
219
416
},
220
417
"chapters": {
221
418
"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
419
"items": {
223
420
"ref": "#chapter",
224
421
"type": "ref"
225
422
},
226
-
"maxLength": 8,
423
+
"maxLength": 60,
227
424
"minLength": 1,
228
425
"type": "array"
229
426
},
230
427
"cover": {
231
428
"accept": [
232
429
"image/jpeg",
233
430
"image/png"
234
431
],
235
432
"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
433
"maxSize": 614400,
237
434
"type": "blob"
238
435
},
239
436
"createdAt": {
240
437
"format": "datetime",
241
438
"type": "string"
242
439
},
243
440
"credits": {
244
441
"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
442
"ref": "#credits",
246
443
"type": "ref"
247
444
},
445
+
"daily": {
446
+
"description": "The game offers today's run: its chapters on seeds of the day (a run names its `day`, a board a day), besides the run that's the same every time. Part of play.",
447
+
"type": "boolean"
448
+
},
248
449
"description": {
249
450
"maxGraphemes": 200,
250
451
"maxLength": 800,
251
452
"type": "string"
252
453
},
454
+
"ghost": {
455
+
"description": "Race your best: where a chapter type can show one (the rolling ball), the player's best run of that chapter rolls alongside them, see-through. Looks only.",
456
+
"type": "boolean"
457
+
},
458
+
"ghostFights": {
459
+
"description": "Players can save their fighter (a com.gamethesky.make.fighter record) and anyone can fight it as a ghost: one bout on the game's first chapter whose type takes a ghost, the chapter's CPU driving the saved build and style at a skill the challenger picks. A run against a ghost pins the fighter's version (`vs` on the run), verifies and never ranks. Part of play.",
460
+
"type": "boolean"
461
+
},
462
+
"gift": {
463
+
"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.",
464
+
"ref": "#gift",
465
+
"type": "ref"
466
+
},
467
+
"granny": {
468
+
"description": "With levels: a fourth level, Granny, easier than Easy (a board of its own). Part of play.",
469
+
"type": "boolean"
470
+
},
471
+
"levels": {
472
+
"description": "The game offers Easy, Normal and Hard: each chapter's settings moved toward the easy or the hard end of their ranges (a run names its `difficulty`, a board each). Part of play.",
473
+
"type": "boolean"
474
+
},
253
475
"logo": {
254
476
"accept": [
255
477
"image/png",
256
478
"image/jpeg"
257
479
],
258
480
"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
481
"maxSize": 409600,
260
482
"type": "blob"
261
483
},
262
484
"remixOf": {
263
485
"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
486
"ref": "com.atproto.repo.strongRef",
265
487
"type": "ref"
266
488
},
489
+
"rivals": {
490
+
"description": "Who the enemies and rivals wear: 'cast', the game's cast (the default); 'follows', the faces of the people the player follows on Bluesky, on every foe part (the cast keeps you, the one you came for and the builder's own members); 'both', the cast where it has a photo and follows in the parts left uncast. Looks only: play, boards and the verifier never read it.",
491
+
"knownValues": [
492
+
"cast",
493
+
"follows",
494
+
"both"
495
+
],
496
+
"maxLength": 16,
497
+
"type": "string"
498
+
},
267
499
"scenes": {
268
500
"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
501
"items": {
270
502
"ref": "#scene",
271
503
"type": "ref"
272
504
},
273
-
"maxLength": 10,
505
+
"maxLength": 62,
274
506
"type": "array"
275
507
},
276
508
"sounds": {
277
509
"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
510
"items": {
279
511
"ref": "#sound",
280
512
"type": "ref"
281
513
},
282
514
"maxLength": 8,
283
515
"type": "array"
284
516
},
285
517
"theme": {
286
518
"ref": "#theme",
287
519
"type": "ref"
288
520
},
289
521
"title": {
290
522
"maxGraphemes": 60,
291
523
"maxLength": 240,
292
524
"type": "string"
293
525
},
294
526
"titleCard": {
295
527
"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
528
"ref": "#titleCard",
297
529
"type": "ref"
298
530
},
531
+
"video": {
532
+
"description": "The page records each chapter as it's played, so a player can save a video of their run (it never leaves their device unless they share it). Looks only.",
533
+
"type": "boolean"
534
+
},
299
535
"weapons": {
300
536
"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
537
"items": {
302
538
"ref": "#weapon",
303
539
"type": "ref"
304
540
},
305
541
"maxLength": 8,
306
542
"type": "array"
543
+
},
544
+
"worldLife": {
545
+
"description": "With carryLives: each chapter that starts a new world (after the first chapter) gives a life back, up to 5 (never fewer than carried). Part of play, with where the worlds start: a game with it has its own board.",
546
+
"type": "boolean"
307
547
}
308
548
},
309
549
"required": [
310
550
"title",
311
551
"theme",
312
552
"chapters",
313
553
"createdAt"
314
554
],
315
555
"type": "object"
316
556
},
317
557
"type": "record"
318
558
},
319
559
"member": {
320
-
"description": "One of the cast: the part they play, the name they're billed under, and their photo.",
560
+
"description": "One of the cast: their slot, the name they're billed under, and their pictures (a face and a cut-out figure, both made from one photo), or a Bluesky person by their handle (no picture uploaded: players fetch the avatar live from the public profile). At least one picture or a handle.",
321
561
"properties": {
322
-
"image": {
562
+
"body": {
323
563
"accept": [
324
-
"image/png",
564
+
"image/png"
565
+
],
566
+
"description": "A cut-out PNG of them head to toe, the background clear. 192 KB at most.",
567
+
"maxSize": 196608,
568
+
"type": "blob"
569
+
},
570
+
"face": {
571
+
"accept": [
325
572
"image/jpeg"
326
573
],
327
-
"description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
574
+
"description": "A 256×256 JPEG of their face. 192 KB at most.",
328
575
"maxSize": 196608,
329
576
"type": "blob"
330
577
},
578
+
"handle": {
579
+
"description": "A Bluesky person: their handle. Players' pages fetch their avatar live (app.bsky.actor.getProfile on the public AppView) and wear it as the face, on a drawn body where a figure is wanted; an account that's gone leaves the name and the chapter's own look. Usually with no face or body. A hidden game shows neither the name nor the handle.",
580
+
"format": "handle",
581
+
"type": "string"
582
+
},
331
583
"name": {
332
584
"maxGraphemes": 40,
333
585
"maxLength": 160,
334
586
"type": "string"
335
587
},
336
-
"role": {
337
-
"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.",
588
+
"slot": {
589
+
"description": "Which slot they're in: hero1 (you), hero2–3, foe1–6, villain1–3, extra1–4.",
338
590
"knownValues": [
339
-
"ghoul",
340
-
"hound",
341
-
"thing",
342
-
"scream",
343
-
"victim",
344
-
"portrait",
345
-
"you",
346
-
"m1",
347
-
"m2",
348
-
"m3",
349
-
"m4",
350
-
"m5",
351
-
"m6",
352
-
"m7",
353
-
"m8"
591
+
"hero1",
592
+
"hero2",
593
+
"hero3",
594
+
"foe1",
595
+
"foe2",
596
+
"foe3",
597
+
"foe4",
598
+
"foe5",
599
+
"foe6",
600
+
"villain1",
601
+
"villain2",
602
+
"villain3",
603
+
"extra1",
604
+
"extra2",
605
+
"extra3",
606
+
"extra4"
354
607
],
608
+
"maxLength": 16,
355
609
"type": "string"
356
610
}
357
611
},
358
612
"required": [
359
-
"role",
360
-
"name",
361
-
"image"
613
+
"slot",
614
+
"name"
362
615
],
363
616
"type": "object"
364
617
},
365
618
"message": {
366
619
"properties": {
367
620
"again": {
368
621
"description": "Shown every time the player steps back onto it, not only the first.",
369
622
"type": "boolean"
370
623
},
371
624
"sting": {
372
625
"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
626
"knownValues": [
374
627
"creepy_hello",
375
628
"creepy_laugh",
376
629
"female_scream",
377
630
"intrigue_event",
378
631
"jump_scare",
379
632
"jump_scare_horn",
380
633
"lets_play",
381
634
"radio"
382
635
],
383
636
"maxLength": 32,
384
637
"type": "string"
385
638
},
386
639
"text": {
387
640
"maxGraphemes": 160,
388
641
"maxLength": 640,
389
642
"type": "string"
390
643
},
391
644
"who": {
392
-
"description": "Who says it: one of the game's cast (shown with their photo and name), or absent for a note or the narrator.",
645
+
"description": "Who says it: one of the game's cast's slots (shown with their photo and name), or absent for a note or the narrator.",
393
646
"knownValues": [
394
-
"ghoul",
395
-
"hound",
396
-
"thing",
397
-
"scream",
398
-
"victim",
399
-
"portrait",
400
-
"you",
401
-
"m1",
402
-
"m2",
403
-
"m3",
404
-
"m4",
405
-
"m5",
406
-
"m6",
407
-
"m7",
408
-
"m8"
647
+
"hero1",
648
+
"hero2",
649
+
"hero3",
650
+
"foe1",
651
+
"foe2",
652
+
"foe3",
653
+
"foe4",
654
+
"foe5",
655
+
"foe6",
656
+
"villain1",
657
+
"villain2",
658
+
"villain3",
659
+
"extra1",
660
+
"extra2",
661
+
"extra3",
662
+
"extra4"
409
663
],
410
664
"maxLength": 16,
411
665
"type": "string"
412
666
},
413
667
"x": {
414
668
"description": "The square's column, as the level's rows have it.",
415
669
"minimum": 0,
416
670
"type": "integer"
417
671
},
418
672
"y": {
419
673
"description": "The square's row.",
420
674
"minimum": 0,
421
675
"type": "integer"
422
676
}
423
677
},
424
678
"required": [
425
679
"x",
426
680
"y",
427
681
"text"
428
682
],
429
683
"type": "object"
430
684
},
431
685
"poster": {
432
686
"properties": {
433
687
"pic": {
434
688
"description": "Which of the chapter's poster pictures it shows: 1 is pictures.poster1, and so on.",
435
689
"maximum": 6,
436
690
"minimum": 1,
437
691
"type": "integer"
438
692
},
439
693
"x": {
440
694
"description": "The wall square's column, as the level's rows have it (the drawn level's, or the preset's own map).",
441
695
"minimum": 0,
442
696
"type": "integer"
443
697
},
444
698
"y": {
445
699
"description": "The wall square's row.",
446
700
"minimum": 0,
447
701
"type": "integer"
448
702
}
449
703
},
450
704
"required": [
451
705
"x",
452
706
"y",
453
707
"pic"
454
708
],
455
709
"type": "object"
456
710
},
711
+
"question": {
712
+
"properties": {
713
+
"answers": {
714
+
"description": "Two to four answers, shown in this order.",
715
+
"items": {
716
+
"maxGraphemes": 60,
717
+
"maxLength": 240,
718
+
"type": "string"
719
+
},
720
+
"maxLength": 4,
721
+
"minLength": 2,
722
+
"type": "array"
723
+
},
724
+
"pic": {
725
+
"description": "The chapter's picture shown with it (its pictures' q1 to q20). Looks only.",
726
+
"maximum": 20,
727
+
"minimum": 1,
728
+
"type": "integer"
729
+
},
730
+
"q": {
731
+
"description": "What's asked (\"What year did Grandpa buy the station wagon?\").",
732
+
"maxGraphemes": 160,
733
+
"maxLength": 640,
734
+
"type": "string"
735
+
},
736
+
"right": {
737
+
"description": "Which answer is right, counting from 0.",
738
+
"maximum": 3,
739
+
"minimum": 0,
740
+
"type": "integer"
741
+
},
742
+
"time": {
743
+
"description": "Its own clock in seconds, in place of the chapter's setting.",
744
+
"maximum": 60,
745
+
"minimum": 5,
746
+
"type": "integer"
747
+
}
748
+
},
749
+
"required": [
750
+
"q",
751
+
"answers",
752
+
"right"
753
+
],
754
+
"type": "object"
755
+
},
457
756
"scene": {
458
757
"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
758
"properties": {
460
759
"at": {
461
760
"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
761
"knownValues": [
463
762
"before",
464
763
"win",
465
764
"lose"
466
765
],
467
766
"maxLength": 16,
468
767
"type": "string"
469
768
},
470
769
"bg": {
471
770
"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
771
"knownValues": [
473
772
"replay",
474
773
"flyby",
475
774
"picture",
476
775
"plain"
477
776
],
478
777
"maxLength": 16,
479
778
"type": "string"
480
779
},
481
780
"chapter": {
482
781
"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
-
"maximum": 7,
782
+
"maximum": 59,
484
783
"minimum": 0,
485
784
"type": "integer"
486
785
},
487
786
"choices": {
488
787
"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
788
"items": {
490
789
"ref": "#choice",
491
790
"type": "ref"
492
791
},
493
792
"maxLength": 3,
494
793
"minLength": 2,
495
794
"type": "array"
496
795
},
497
796
"lines": {
498
797
"description": "Typed out one at a time; the player moves on line by line.",
499
798
"items": {
500
799
"ref": "#sceneLine",
501
800
"type": "ref"
502
801
},
503
802
"maxLength": 6,
504
803
"type": "array"
505
804
},
506
805
"music": {
507
806
"description": "A mood of music under the scene. Absent: none.",
508
807
"knownValues": [
509
808
"musicbox",
510
809
"heartbeat",
511
810
"unease",
512
811
"dread",
513
812
"tension",
514
813
"groove",
515
814
"pulse",
516
815
"drift",
517
816
"alarm",
518
817
"island",
519
818
"heist"
520
819
],
521
820
"maxLength": 32,
522
821
"type": "string"
523
822
},
524
823
"picture": {
525
824
"accept": [
526
825
"image/jpeg",
527
826
"image/png"
528
827
],
529
828
"description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
530
829
"maxSize": 716800,
531
830
"type": "blob"
532
831
},
533
832
"sting": {
534
833
"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
834
"knownValues": [
536
835
"creepy_hello",
537
836
"creepy_laugh",
538
837
"female_scream",
539
838
"intrigue_event",
540
839
"jump_scare",
541
840
"jump_scare_horn",
542
841
"lets_play"
543
842
],
544
843
"maxLength": 32,
545
844
"type": "string"
546
845
},
547
846
"title": {
548
847
"maxGraphemes": 60,
549
848
"maxLength": 240,
550
849
"type": "string"
551
850
}
552
851
},
553
852
"required": [
554
853
"at",
555
854
"bg"
556
855
],
557
856
"type": "object"
558
857
},
559
858
"sceneLine": {
560
859
"properties": {
561
860
"text": {
562
861
"maxGraphemes": 160,
563
862
"maxLength": 640,
564
863
"type": "string"
565
864
},
566
865
"who": {
567
-
"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.",
866
+
"description": "Who says it: one of the cast's slots (their photo and name show beside the line). Absent: narration.",
568
867
"knownValues": [
569
-
"ghoul",
570
-
"hound",
571
-
"thing",
572
-
"scream",
573
-
"victim",
574
-
"portrait",
575
-
"you",
576
-
"m1",
577
-
"m2",
578
-
"m3",
579
-
"m4",
580
-
"m5",
581
-
"m6",
582
-
"m7",
583
-
"m8"
868
+
"hero1",
869
+
"hero2",
870
+
"hero3",
871
+
"foe1",
872
+
"foe2",
873
+
"foe3",
874
+
"foe4",
875
+
"foe5",
876
+
"foe6",
877
+
"villain1",
878
+
"villain2",
879
+
"villain3",
880
+
"extra1",
881
+
"extra2",
882
+
"extra3",
883
+
"extra4"
584
884
],
585
885
"maxLength": 16,
586
886
"type": "string"
587
887
}
588
888
},
589
889
"required": [
590
890
"text"
591
891
],
592
892
"type": "object"
593
893
},
594
894
"sound": {
595
895
"description": "One of the builder's own sounds.",
596
896
"properties": {
597
897
"blob": {
598
898
"accept": [
599
899
"audio/*",
600
900
"video/mp4"
601
901
],
602
902
"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
903
"maxSize": 204800,
604
904
"type": "blob"
605
905
},
606
906
"id": {
607
907
"description": "Lowercase letters and digits, unique in the game: how the rest of the record names it.",
608
908
"maxLength": 12,
609
909
"type": "string"
610
910
},
611
911
"mime": {
612
912
"description": "What it is, as the maker made it.",
613
913
"knownValues": [
614
914
"audio/mp4",
615
915
"audio/wav"
616
916
],
617
917
"maxLength": 32,
618
918
"type": "string"
619
919
},
620
920
"ms": {
621
921
"description": "How long it is, in milliseconds.",
622
922
"maximum": 5000,
623
923
"minimum": 1,
624
924
"type": "integer"
625
925
},
626
926
"name": {
627
927
"description": "What the builder calls it (\"Grandpa's yell\").",
628
928
"maxGraphemes": 40,
629
929
"maxLength": 160,
630
930
"type": "string"
631
931
}
632
932
},
633
933
"required": [
634
934
"id",
635
935
"blob",
636
936
"mime",
637
937
"ms"
638
938
],
639
939
"type": "object"
640
940
},
641
941
"starring": {
642
942
"properties": {
643
943
"as": {
644
944
"description": "Who they play (\"Grandma\"), shown as \"as Grandma\".",
645
945
"maxGraphemes": 40,
646
946
"maxLength": 160,
647
947
"type": "string"
648
948
},
649
949
"who": {
650
-
"description": "One of the game's cast: a part or one of the builder's own members.",
950
+
"description": "One of the game's cast's slots.",
651
951
"knownValues": [
652
-
"ghoul",
653
-
"hound",
654
-
"thing",
655
-
"scream",
656
-
"victim",
657
-
"portrait",
658
-
"you",
659
-
"m1",
660
-
"m2",
661
-
"m3",
662
-
"m4",
663
-
"m5",
664
-
"m6",
665
-
"m7",
666
-
"m8"
952
+
"hero1",
953
+
"hero2",
954
+
"hero3",
955
+
"foe1",
956
+
"foe2",
957
+
"foe3",
958
+
"foe4",
959
+
"foe5",
960
+
"foe6",
961
+
"villain1",
962
+
"villain2",
963
+
"villain3",
964
+
"extra1",
965
+
"extra2",
966
+
"extra3",
967
+
"extra4"
667
968
],
668
969
"maxLength": 16,
669
970
"type": "string"
670
971
}
671
972
},
672
973
"required": [
673
974
"who"
674
975
],
675
976
"type": "object"
676
977
},
677
978
"theme": {
678
979
"properties": {
980
+
"card": {
981
+
"description": "The share card's layout: the game card (absent), a movie poster billing the cast (Haunt the Sky's), or a fight poster: faces in rings, VS, a red slash (Fight the Sky's). Looks only.",
982
+
"knownValues": [
983
+
"card",
984
+
"poster",
985
+
"fight"
986
+
],
987
+
"type": "string"
988
+
},
989
+
"ladder": {
990
+
"description": "Faces worn as Sky Vortex wears them: one face a web, in turn, and every face at once on a world's last web (the faces not cast in a part, then the people the player follows). Looks only.",
991
+
"type": "boolean"
992
+
},
679
993
"mood": {
680
994
"description": "How the chapters light their worlds.",
681
995
"knownValues": [
682
996
"bright",
683
997
"dusk",
684
998
"cold",
685
999
"neon",
686
1000
"space",
687
1001
"horror",
688
1002
"retro"
689
1003
],
690
1004
"type": "string"
691
1005
},
1006
+
"native": {
1007
+
"description": "Each level in its own look and song, where its chapter type has looks by level (the vortex's and the tank maze's worlds, the house's floors), as the standalone games show them; else the mood picks one look for the whole game. Looks only.",
1008
+
"type": "boolean"
1009
+
},
692
1010
"palette": {
693
1011
"description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
694
1012
"items": {
695
1013
"maxLength": 7,
696
1014
"type": "string"
697
1015
},
698
1016
"maxLength": 5,
699
1017
"minLength": 5,
700
1018
"type": "array"
701
1019
},
702
1020
"pattern": {
703
1021
"knownValues": [
704
1022
"none",
705
1023
"grid",
706
1024
"stripes",
707
1025
"dots",
708
1026
"checks",
709
1027
"waves",
710
1028
"stars"
711
1029
],
712
1030
"type": "string"
713
1031
},
714
1032
"preset": {
715
1033
"description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
716
1034
"maxLength": 20,
717
1035
"type": "string"
718
1036
},
1037
+
"title": {
1038
+
"description": "How the game's title is lettered: plain (absent), or in stripes from the palette (accent, words, white, words, accent: TRAN's flag). Looks only.",
1039
+
"knownValues": [
1040
+
"plain",
1041
+
"stripes"
1042
+
],
1043
+
"type": "string"
1044
+
},
719
1045
"type": {
720
1046
"description": "The typeface for titles.",
721
1047
"knownValues": [
722
1048
"anton",
723
1049
"creepster",
724
1050
"inter"
725
1051
],
726
1052
"type": "string"
727
1053
}
728
1054
},
729
1055
"required": [
730
1056
"palette",
731
1057
"pattern",
732
1058
"mood",
733
1059
"type"
734
1060
],
735
1061
"type": "object"
736
1062
},
737
1063
"titleCard": {
738
1064
"properties": {
739
1065
"line": {
740
1066
"description": "A line under the title.",
741
1067
"maxGraphemes": 120,
742
1068
"maxLength": 480,
743
1069
"type": "string"
744
1070
},
745
1071
"picture": {
746
1072
"accept": [
747
1073
"image/jpeg",
748
1074
"image/png"
749
1075
],
750
1076
"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
1077
"maxSize": 716800,
752
1078
"type": "blob"
753
1079
},
754
1080
"sound": {
755
1081
"description": "One of the game's own sounds (its id), played as the card fades in.",
756
1082
"maxLength": 12,
757
1083
"type": "string"
758
1084
},
759
1085
"title": {
760
1086
"description": "In place of the game's title on the card; absent, the game's own.",
761
1087
"maxGraphemes": 60,
762
1088
"maxLength": 240,
763
1089
"type": "string"
764
1090
}
765
1091
},
766
1092
"type": "object"
767
1093
},
768
1094
"weapon": {
769
1095
"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
1096
"properties": {
771
1097
"damage": {
772
1098
"description": "Health off a guard per round that lands (a guard has 4 at the default toughness, the boss 28). Lethal weapons only.",
773
1099
"maximum": 10,
774
1100
"minimum": 1,
775
1101
"type": "integer"
776
1102
},
777
1103
"delay": {
778
1104
"description": "A non-lethal weapon's: 60 Hz ticks a guard staggers before it drops (0: at once).",
779
1105
"maximum": 300,
780
1106
"minimum": 0,
781
1107
"type": "integer"
782
1108
},
783
1109
"lethal": {
784
1110
"description": "False: a hit knocks a guard out (unconscious) instead of hurting it.",
785
1111
"type": "boolean"
786
1112
},
787
1113
"look": {
788
1114
"description": "The built-in model it wears. Looks only.",
789
1115
"knownValues": [
790
1116
"pistol",
791
1117
"silenced",
792
1118
"smg",
793
1119
"shotgun",
794
1120
"sniper",
795
1121
"taser",
796
1122
"tranq"
797
1123
],
798
1124
"maxLength": 16,
799
1125
"type": "string"
800
1126
},
801
1127
"magazine": {
802
1128
"description": "Rounds (or charges) in a magazine.",
803
1129
"maximum": 60,
804
1130
"minimum": 1,
805
1131
"type": "integer"
806
1132
},
807
1133
"name": {
808
1134
"maxGraphemes": 24,
809
1135
"maxLength": 96,
810
1136
"type": "string"
811
1137
},
812
1138
"noise": {
813
1139
"description": "How far guards hear a shot, in squares (0: silent).",
814
1140
"maximum": 14,
815
1141
"minimum": 0,
816
1142
"type": "integer"
817
1143
},
818
1144
"pellets": {
819
1145
"description": "Rounds a pull of the trigger (a shotgun's several).",
820
1146
"maximum": 9,
821
1147
"minimum": 1,
822
1148
"type": "integer"
823
1149
},
824
1150
"range": {
825
1151
"description": "How far a round goes, in squares.",
826
1152
"maximum": 24,
827
1153
"minimum": 1,
828
1154
"type": "integer"
829
1155
},
830
1156
"rate": {
831
1157
"description": "60 Hz ticks between shots.",
832
1158
"maximum": 120,
833
1159
"minimum": 4,
834
1160
"type": "integer"
835
1161
},
836
1162
"reload": {
837
1163
"description": "60 Hz ticks to reload.",
838
1164
"maximum": 300,
839
1165
"minimum": 20,
840
1166
"type": "integer"
841
1167
},
842
1168
"skin": {
843
1169
"accept": [
844
1170
"image/jpeg",
845
1171
"image/png"
846
1172
],
847
1173
"description": "The builder's picture on its body (a square JPEG, 256×256, at most 120 KB). Public once published. Looks only.",
848
1174
"maxSize": 122880,
849
1175
"type": "blob"
850
1176
},
851
1177
"spare": {
852
1178
"description": "Spare magazines carried at the start.",
853
1179
"maximum": 9,
854
1180
"minimum": 0,
855
1181
"type": "integer"
856
1182
},
857
1183
"spread": {
858
1184
"description": "How far a round can stray either way, in 1024ths of a turn.",
859
1185
"maximum": 60,
860
1186
"minimum": 0,
861
1187
"type": "integer"
862
1188
}
863
1189
},
864
1190
"required": [
865
1191
"name",
866
1192
"look",
867
1193
"damage",
868
1194
"rate",
869
1195
"range",
870
1196
"magazine",
871
1197
"lethal"
872
1198
],
873
1199
"type": "object"
874
1200
}
875
1201
},
876
1202
"id": "com.gamethesky.make.game",
877
1203
"lexicon": 1
878
1204
}