com.gamethesky.make.game

gamethesky.com

Schema Diff

+832 -55

From

CID
bafyreia2lpwazs3...
Indexed At
2026-10-22 05:57 UTC
View this version

To

CID
bafyreifnpteohf3...
Indexed At
2026-10-26 07:46 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

39 breaking changes, 203 non-breaking changes.

Breaking Changes (39)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#message", src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.x", kind: "prop", name: Some("x") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#message", src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.text", kind: "prop", name: Some("text") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#message", src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.y", kind: "prop", name: Some("y") }
  • 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#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.blob", kind: "prop", name: Some("blob") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.id", kind: "prop", name: Some("id") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.ms", kind: "prop", name: Some("ms") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.mime", kind: "prop", name: Some("mime") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#starring", src: "com.gamethesky.make.game#starring", tgt: "com.gamethesky.make.game#starring.who", kind: "prop", name: Some("who") }
  • 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#poster", src: "com.gamethesky.make.game#poster", tgt: "com.gamethesky.make.game#poster.pic", kind: "prop", name: Some("pic") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#poster", src: "com.gamethesky.make.game#poster", tgt: "com.gamethesky.make.game#poster.x", kind: "prop", name: Some("x") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#poster", src: "com.gamethesky.make.game#poster", tgt: "com.gamethesky.make.game#poster.y", kind: "prop", name: Some("y") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.rate", kind: "prop", name: Some("rate") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.magazine", kind: "prop", name: Some("magazine") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.damage", kind: "prop", name: Some("damage") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.lethal", kind: "prop", name: Some("lethal") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.look", kind: "prop", name: Some("look") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.name", kind: "prop", name: Some("name") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.range", kind: "prop", name: Some("range") }
  • 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#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.label", kind: "prop", name: Some("label") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.to", kind: "prop", name: Some("to") }
  • 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#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") }
  • 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#scene.music", sort: "knownValues", old_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\"]", new_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\",\"island\",\"heist\"]" }
  • 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\"]" }
Non-Breaking Changes (203)
  • 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.messages" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.messages:items" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.next" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.pictures" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.posters" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.posters: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.sounds" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.words" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.world" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#choice" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#choice.label" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#choice.to" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.lines" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.lines:items" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.loop" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.picture" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.sound" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.starring" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#credits.starring: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#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#message" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#message.again" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#message.sting" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#message.text" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#message.who" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#message.x" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#message.y" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#poster" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#poster.pic" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#poster.x" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#poster.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#scene.choices" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#scene.choices:items" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#sound" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#sound.blob" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#sound.id" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#sound.mime" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#sound.ms" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#sound.name" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#starring" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#starring.as" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#starring.who" }
  • 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#titleCard" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.line" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.picture" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.sound" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.title" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.damage" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.delay" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.lethal" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.look" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.magazine" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.name" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.noise" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.pellets" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.range" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.rate" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.reload" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.skin" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.spare" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.spread" }
  • 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.credits" }
  • 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.sounds" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.sounds:items" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.titleCard" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.video" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.weapons" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.weapons:items" }
  • 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.messages", kind: "prop", name: Some("messages") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.next", kind: "prop", name: Some("next") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.pictures", kind: "prop", name: Some("pictures") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.posters", kind: "prop", name: Some("posters") }
  • 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.sounds", kind: "prop", name: Some("sounds") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.words", kind: "prop", name: Some("words") }
  • 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.messages", tgt: "com.gamethesky.make.game#chapter.messages:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.messages:items", tgt: "com.gamethesky.make.game#message", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.posters", tgt: "com.gamethesky.make.game#chapter.posters:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#chapter.posters:items", tgt: "com.gamethesky.make.game#poster", 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#credits", tgt: "com.gamethesky.make.game#credits.lines", kind: "prop", name: Some("lines") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.loop", kind: "prop", name: Some("loop") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.picture", kind: "prop", name: Some("picture") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.sound", kind: "prop", name: Some("sound") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.starring", kind: "prop", name: Some("starring") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits.lines", tgt: "com.gamethesky.make.game#credits.lines:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits.starring", tgt: "com.gamethesky.make.game#credits.starring:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#credits.starring:items", tgt: "com.gamethesky.make.game#starring", 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#message", tgt: "com.gamethesky.make.game#message.again", kind: "prop", name: Some("again") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.sting", kind: "prop", name: Some("sting") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.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#scene", tgt: "com.gamethesky.make.game#scene.choices", kind: "prop", name: Some("choices") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#scene.choices", tgt: "com.gamethesky.make.game#scene.choices:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#scene.choices:items", tgt: "com.gamethesky.make.game#choice", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.name", kind: "prop", name: Some("name") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#starring", tgt: "com.gamethesky.make.game#starring.as", kind: "prop", name: Some("as") }
  • 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#titleCard", tgt: "com.gamethesky.make.game#titleCard.line", kind: "prop", name: Some("line") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#titleCard", tgt: "com.gamethesky.make.game#titleCard.picture", kind: "prop", name: Some("picture") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#titleCard", tgt: "com.gamethesky.make.game#titleCard.sound", kind: "prop", name: Some("sound") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#titleCard", tgt: "com.gamethesky.make.game#titleCard.title", kind: "prop", name: Some("title") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.delay", kind: "prop", name: Some("delay") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.noise", kind: "prop", name: Some("noise") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.pellets", kind: "prop", name: Some("pellets") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.reload", kind: "prop", name: Some("reload") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.skin", kind: "prop", name: Some("skin") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.spare", kind: "prop", name: Some("spare") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.spread", kind: "prop", name: Some("spread") }
  • 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.credits", kind: "prop", name: Some("credits") }
  • 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.sounds", kind: "prop", name: Some("sounds") }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.titleCard", kind: "prop", name: Some("titleCard") }
  • 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.weapons", kind: "prop", name: Some("weapons") }
  • 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.credits", tgt: "com.gamethesky.make.game#credits", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.gift", tgt: "com.gamethesky.make.game#gift", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.sounds", tgt: "com.gamethesky.make.game:body.sounds:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.sounds:items", tgt: "com.gamethesky.make.game#sound", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.titleCard", tgt: "com.gamethesky.make.game#titleCard", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.weapons", tgt: "com.gamethesky.make.game:body.weapons:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.gamethesky.make.game:body.weapons:items", tgt: "com.gamethesky.make.game#weapon", 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.messages" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.messages:items" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.next" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.pictures" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.posters" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.posters: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.sounds" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.words" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.world" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#choice" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#choice.label" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#choice.to" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.lines" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.lines:items" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.loop" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.picture" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.sound" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.starring" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#credits.starring: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#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#message" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#message.again" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#message.sting" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#message.text" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#message.who" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#message.x" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#message.y" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#poster" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#poster.pic" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#poster.x" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#poster.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#scene.choices" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#scene.choices:items" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#sound" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#sound.blob" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#sound.id" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#sound.mime" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#sound.ms" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#sound.name" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#starring" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#starring.as" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#starring.who" }
  • 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#titleCard" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.line" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.picture" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.sound" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#titleCard.title" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.damage" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.delay" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.lethal" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.look" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.magazine" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.name" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.noise" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.pellets" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.range" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.rate" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.reload" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.skin" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.spare" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#weapon.spread" }
  • 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.credits" }
  • 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.sounds" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.sounds:items" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.titleCard" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.video" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.weapons" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.weapons:items" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.worldLife" }

Constraint Changes

  • 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#scene.music", sort: "knownValues", old_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\"]", new_value: "[\"musicbox\",\"heartbeat\",\"unease\",\"dread\",\"tension\",\"groove\",\"pulse\",\"drift\",\"alarm\",\"island\",\"heist\"]" }
  • 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\"]" }
  • 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#message", src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.x", kind: "prop", name: Some("x") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#message", src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.text", kind: "prop", name: Some("text") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#message", src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.y", kind: "prop", name: Some("y") }
  • 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#starring", src: "com.gamethesky.make.game#starring", tgt: "com.gamethesky.make.game#starring.who", kind: "prop", name: Some("who") }
  • 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#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.label", kind: "prop", name: Some("label") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#choice", src: "com.gamethesky.make.game#choice", tgt: "com.gamethesky.make.game#choice.to", kind: "prop", name: Some("to") }
  • 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#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.blob", kind: "prop", name: Some("blob") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.id", kind: "prop", name: Some("id") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.ms", kind: "prop", name: Some("ms") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#sound", src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.mime", kind: "prop", name: Some("mime") }
  • 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#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.rate", kind: "prop", name: Some("rate") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.magazine", kind: "prop", name: Some("magazine") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.damage", kind: "prop", name: Some("damage") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.lethal", kind: "prop", name: Some("lethal") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.look", kind: "prop", name: Some("look") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.name", kind: "prop", name: Some("name") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#weapon", src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.range", kind: "prop", name: Some("range") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#poster", src: "com.gamethesky.make.game#poster", tgt: "com.gamethesky.make.game#poster.pic", kind: "prop", name: Some("pic") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#poster", src: "com.gamethesky.make.game#poster", tgt: "com.gamethesky.make.game#poster.x", kind: "prop", name: Some("x") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.make.game#poster", src: "com.gamethesky.make.game#poster", tgt: "com.gamethesky.make.game#poster.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: 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.messages", kind: "prop", name: Some("messages") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.next", kind: "prop", name: Some("next") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.pictures", kind: "prop", name: Some("pictures") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.posters", kind: "prop", name: Some("posters") }
  • 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.sounds", kind: "prop", name: Some("sounds") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter", tgt: "com.gamethesky.make.game#chapter.words", kind: "prop", name: Some("words") }
  • 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.messages", tgt: "com.gamethesky.make.game#chapter.messages:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.messages:items", tgt: "com.gamethesky.make.game#message", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.posters", tgt: "com.gamethesky.make.game#chapter.posters:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#chapter.posters:items", tgt: "com.gamethesky.make.game#poster", 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#credits", tgt: "com.gamethesky.make.game#credits.lines", kind: "prop", name: Some("lines") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.loop", kind: "prop", name: Some("loop") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.picture", kind: "prop", name: Some("picture") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.sound", kind: "prop", name: Some("sound") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits", tgt: "com.gamethesky.make.game#credits.starring", kind: "prop", name: Some("starring") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits.lines", tgt: "com.gamethesky.make.game#credits.lines:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits.starring", tgt: "com.gamethesky.make.game#credits.starring:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#credits.starring:items", tgt: "com.gamethesky.make.game#starring", 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#message", tgt: "com.gamethesky.make.game#message.again", kind: "prop", name: Some("again") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.sting", kind: "prop", name: Some("sting") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#message", tgt: "com.gamethesky.make.game#message.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#scene", tgt: "com.gamethesky.make.game#scene.choices", kind: "prop", name: Some("choices") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#scene.choices", tgt: "com.gamethesky.make.game#scene.choices:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#scene.choices:items", tgt: "com.gamethesky.make.game#choice", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#sound", tgt: "com.gamethesky.make.game#sound.name", kind: "prop", name: Some("name") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#starring", tgt: "com.gamethesky.make.game#starring.as", kind: "prop", name: Some("as") }
  • 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#titleCard", tgt: "com.gamethesky.make.game#titleCard.line", kind: "prop", name: Some("line") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#titleCard", tgt: "com.gamethesky.make.game#titleCard.picture", kind: "prop", name: Some("picture") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#titleCard", tgt: "com.gamethesky.make.game#titleCard.sound", kind: "prop", name: Some("sound") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#titleCard", tgt: "com.gamethesky.make.game#titleCard.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.delay", kind: "prop", name: Some("delay") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.noise", kind: "prop", name: Some("noise") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.pellets", kind: "prop", name: Some("pellets") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.reload", kind: "prop", name: Some("reload") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.skin", kind: "prop", name: Some("skin") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.spare", kind: "prop", name: Some("spare") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game#weapon", tgt: "com.gamethesky.make.game#weapon.spread", kind: "prop", name: Some("spread") }
  • 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.credits", kind: "prop", name: Some("credits") }
  • 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.sounds", kind: "prop", name: Some("sounds") }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body", tgt: "com.gamethesky.make.game:body.titleCard", kind: "prop", name: Some("titleCard") }
  • 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.weapons", kind: "prop", name: Some("weapons") }
  • 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.credits", tgt: "com.gamethesky.make.game#credits", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.gift", tgt: "com.gamethesky.make.game#gift", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.sounds", tgt: "com.gamethesky.make.game:body.sounds:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.sounds:items", tgt: "com.gamethesky.make.game#sound", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.titleCard", tgt: "com.gamethesky.make.game#titleCard", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.weapons", tgt: "com.gamethesky.make.game:body.weapons:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.gamethesky.make.game:body.weapons:items", tgt: "com.gamethesky.make.game#weapon", 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
        },
33 +
        "messages": {
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.",
35 +
          "items": {
36 +
            "ref": "#message",
37 +
            "type": "ref"
38 +
          },
39 +
          "maxLength": 24,
40 +
          "type": "array"
41 +
        },
20 42
        "module": {
21 -
          "description": "The engine, one of Game the Sky's games made a chapter: platformer, house (a haunted floor), tanks (a tank maze), vortex (a tube of lanes), roll (a tilting course), fight (a bout), golf (a hole), cycles, discs, uplink and canyon (the grid), belts (the counter), race (a sling race), gunner (the door gunner), the arcade classics, walk (a haunted walk-through: no gun, a nerve meter), and fps (first person, armed, in a place such as a military facility: guards, keycards, intel, extraction). The list grows as games are added; a reader refuses a module it doesn't have.",
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.",
22 44
          "knownValues": [
23 45
            "platformer",
24 46
            "house",
25 47
            "tanks",
26 48
            "vortex",
27 49
            "roll",
28 50
            "fight",
29 51
            "golf",
30 52
            "cycles",
31 53
            "discs",
32 54
            "uplink",
33 55
            "canyon",
34 56
            "belts",
35 57
            "race",
36 58
            "gunner",
37 59
            "drones",
38 60
            "landing",
39 61
            "deckgun",
40 62
            "minefield",
41 63
            "pipes",
42 64
            "catch",
43 65
            "fence",
44 66
            "airdrop",
45 67
            "invaders",
46 68
            "crossing",
47 69
            "walk",
48 -
            "fps"
70 +
            "fps",
71 +
            "trivia",
72 +
            "hunt",
73 +
            "puzzle",
74 +
            "chase",
75 +
            "kart",
76 +
            "grift",
77 +
            "f47"
49 78
          ],
50 79
          "maxLength": 32,
51 80
          "type": "string"
52 81
        },
82 +
        "next": {
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.",
84 +
          "maxLength": 8,
85 +
          "type": "string"
86 +
        },
87 +
        "pictures": {
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.",
89 +
          "type": "unknown"
90 +
        },
91 +
        "posters": {
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.",
93 +
          "items": {
94 +
            "ref": "#poster",
95 +
            "type": "ref"
96 +
          },
97 +
          "maxLength": 24,
98 +
          "type": "array"
99 +
        },
53 100
        "preset": {
54 101
          "description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
55 102
          "maxLength": 32,
56 103
          "type": "string"
57 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 +
        },
58 124
        "settings": {
59 -
          "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.",
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).",
60 126
          "type": "unknown"
61 127
        },
128 +
        "sounds": {
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.",
130 +
          "type": "unknown"
131 +
        },
62 132
        "textures": {
63 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.",
64 134
          "type": "unknown"
65 135
        },
66 136
        "title": {
67 137
          "maxGraphemes": 40,
68 138
          "maxLength": 160,
69 139
          "type": "string"
70 140
        },
71 141
        "version": {
72 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.",
73 143
          "minimum": 1,
74 144
          "type": "integer"
145 +
        },
146 +
        "words": {
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.",
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"
75 155
        }
76 156
      },
77 157
      "required": [
78 158
        "module",
79 159
        "version",
80 160
        "title",
81 161
        "preset",
82 162
        "settings"
83 163
      ],
84 164
      "type": "object"
85 165
    },
166 +
    "choice": {
167 +
      "description": "One way on from a scene's choice.",
168 +
      "properties": {
169 +
        "label": {
170 +
          "description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
171 +
          "maxGraphemes": 60,
172 +
          "maxLength": 240,
173 +
          "type": "string"
174 +
        },
175 +
        "to": {
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.",
177 +
          "maxLength": 8,
178 +
          "type": "string"
179 +
        }
180 +
      },
181 +
      "required": [
182 +
        "label",
183 +
        "to"
184 +
      ],
185 +
      "type": "object"
186 +
    },
187 +
    "credits": {
188 +
      "properties": {
189 +
        "lines": {
190 +
          "description": "The builder's own lines (\"Made by Todd for the Lambert family reunion\").",
191 +
          "items": {
192 +
            "maxGraphemes": 80,
193 +
            "maxLength": 320,
194 +
            "type": "string"
195 +
          },
196 +
          "maxLength": 12,
197 +
          "type": "array"
198 +
        },
199 +
        "loop": {
200 +
          "description": "The credits' sound plays over and over under the whole roll (a music bed).",
201 +
          "type": "boolean"
202 +
        },
203 +
        "picture": {
204 +
          "accept": [
205 +
            "image/jpeg",
206 +
            "image/png"
207 +
          ],
208 +
          "description": "A picture at the end of the roll (at most 1600×900). Public once published. Looks only.",
209 +
          "maxSize": 716800,
210 +
          "type": "blob"
211 +
        },
212 +
        "sound": {
213 +
          "description": "One of the game's own sounds (its id), played as the credits start to roll.",
214 +
          "maxLength": 12,
215 +
          "type": "string"
216 +
        },
217 +
        "starring": {
218 +
          "description": "The cast, in order, each once: shown with their photo and the name they go by in the game.",
219 +
          "items": {
220 +
            "ref": "#starring",
221 +
            "type": "ref"
222 +
          },
223 +
          "maxLength": 15,
224 +
          "type": "array"
225 +
        }
226 +
      },
227 +
      "type": "object"
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 +
    },
86 373
    "level": {
87 374
      "properties": {
88 375
        "rows": {
89 -
          "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.",
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.",
90 377
          "items": {
91 378
            "maxLength": 160,
92 379
            "type": "string"
93 380
          },
94 381
          "maxLength": 24,
95 382
          "minLength": 8,
96 383
          "type": "array"
97 384
        }
98 385
      },
99 386
      "required": [
100 387
        "rows"
101 388
      ],
102 389
      "type": "object"
103 390
    },
104 391
    "main": {
105 -
      "description": "A game somebody made in Make the Sky, published into their own repo: a title, a line about it, its look, and one to eight chapters, each one of Game the Sky's engines (a module) on one of its levels (a preset) with its knobs set. Play is decided by the chapters alone. A game is edited in place (the same record, a new version): its board belongs to its way of playing (the chapters' modules, versions, presets and settings), so renaming or restyling it keeps the board, and changing a chapter starts a fresh one. A run pins the version it was played on; a verifier replays it on the game as it stands and takes it only if it replays the same.",
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.",
106 393
      "key": "tid",
107 394
      "record": {
108 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 +
          },
109 404
          "carryLives": {
110 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.",
111 406
            "type": "boolean"
112 407
          },
113 408
          "cast": {
114 -
            "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.",
115 410
            "items": {
116 411
              "ref": "#member",
117 412
              "type": "ref"
118 413
            },
119 -
            "maxLength": 15,
414 +
            "maxLength": 16,
120 415
            "type": "array"
121 416
          },
122 417
          "chapters": {
123 -
            "description": "Played in order. Clearing one goes on to the next; losing one ends the run.",
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.",
124 419
            "items": {
125 420
              "ref": "#chapter",
126 421
              "type": "ref"
127 422
            },
128 -
            "maxLength": 8,
423 +
            "maxLength": 60,
129 424
            "minLength": 1,
130 425
            "type": "array"
131 426
          },
132 427
          "cover": {
133 428
            "accept": [
134 429
              "image/jpeg",
135 430
              "image/png"
136 431
            ],
137 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.",
138 433
            "maxSize": 614400,
139 434
            "type": "blob"
140 435
          },
141 436
          "createdAt": {
142 437
            "format": "datetime",
143 438
            "type": "string"
144 439
          },
440 +
          "credits": {
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.",
442 +
            "ref": "#credits",
443 +
            "type": "ref"
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 +
          },
145 449
          "description": {
146 450
            "maxGraphemes": 200,
147 451
            "maxLength": 800,
148 452
            "type": "string"
149 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 +
          },
150 475
          "logo": {
151 476
            "accept": [
152 477
              "image/png",
153 478
              "image/jpeg"
154 479
            ],
155 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.",
156 481
            "maxSize": 409600,
157 482
            "type": "blob"
158 483
          },
159 484
          "remixOf": {
160 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.",
161 486
            "ref": "com.atproto.repo.strongRef",
162 487
            "type": "ref"
163 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 +
          },
164 499
          "scenes": {
165 -
            "description": "The story told between chapters: cut-scenes, one at most before each chapter (the first is the opening) and one each for winning and losing at the end. A scene a reader can't use is skipped, never the game. Words and looks only: not part of play, so adding or editing scenes keeps the game's board, and a verifier never reads them.",
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.",
166 501
            "items": {
167 502
              "ref": "#scene",
168 503
              "type": "ref"
169 504
            },
170 -
            "maxLength": 10,
505 +
            "maxLength": 62,
506 +
            "type": "array"
507 +
          },
508 +
          "sounds": {
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.",
510 +
            "items": {
511 +
              "ref": "#sound",
512 +
              "type": "ref"
513 +
            },
514 +
            "maxLength": 8,
171 515
            "type": "array"
172 516
          },
173 517
          "theme": {
174 518
            "ref": "#theme",
175 519
            "type": "ref"
176 520
          },
177 521
          "title": {
178 522
            "maxGraphemes": 60,
179 523
            "maxLength": 240,
180 524
            "type": "string"
525 +
          },
526 +
          "titleCard": {
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.",
528 +
            "ref": "#titleCard",
529 +
            "type": "ref"
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 +
          },
535 +
          "weapons": {
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.",
537 +
            "items": {
538 +
              "ref": "#weapon",
539 +
              "type": "ref"
540 +
            },
541 +
            "maxLength": 8,
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"
181 547
          }
182 548
        },
183 549
        "required": [
184 550
          "title",
185 551
          "theme",
186 552
          "chapters",
187 553
          "createdAt"
188 554
        ],
189 555
        "type": "object"
190 556
      },
191 557
      "type": "record"
192 558
    },
193 559
    "member": {
194 -
      "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.",
195 561
      "properties": {
196 -
        "image": {
562 +
        "body": {
563 +
          "accept": [
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": {
197 571
          "accept": [
198 -
            "image/png",
199 572
            "image/jpeg"
200 573
          ],
201 -
          "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.",
202 575
          "maxSize": 196608,
203 576
          "type": "blob"
204 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 +
        },
205 583
        "name": {
206 584
          "maxGraphemes": 40,
207 585
          "maxLength": 160,
208 586
          "type": "string"
209 587
        },
210 -
        "role": {
211 -
          "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.",
212 590
          "knownValues": [
213 -
            "ghoul",
214 -
            "hound",
215 -
            "thing",
216 -
            "scream",
217 -
            "victim",
218 -
            "portrait",
219 -
            "you",
220 -
            "m1",
221 -
            "m2",
222 -
            "m3",
223 -
            "m4",
224 -
            "m5",
225 -
            "m6",
226 -
            "m7",
227 -
            "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"
228 607
          ],
608 +
          "maxLength": 16,
229 609
          "type": "string"
230 610
        }
231 611
      },
232 612
      "required": [
233 -
        "role",
234 -
        "name",
235 -
        "image"
613 +
        "slot",
614 +
        "name"
615 +
      ],
616 +
      "type": "object"
617 +
    },
618 +
    "message": {
619 +
      "properties": {
620 +
        "again": {
621 +
          "description": "Shown every time the player steps back onto it, not only the first.",
622 +
          "type": "boolean"
623 +
        },
624 +
        "sting": {
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>\".",
626 +
          "knownValues": [
627 +
            "creepy_hello",
628 +
            "creepy_laugh",
629 +
            "female_scream",
630 +
            "intrigue_event",
631 +
            "jump_scare",
632 +
            "jump_scare_horn",
633 +
            "lets_play",
634 +
            "radio"
635 +
          ],
636 +
          "maxLength": 32,
637 +
          "type": "string"
638 +
        },
639 +
        "text": {
640 +
          "maxGraphemes": 160,
641 +
          "maxLength": 640,
642 +
          "type": "string"
643 +
        },
644 +
        "who": {
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.",
646 +
          "knownValues": [
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"
663 +
          ],
664 +
          "maxLength": 16,
665 +
          "type": "string"
666 +
        },
667 +
        "x": {
668 +
          "description": "The square's column, as the level's rows have it.",
669 +
          "minimum": 0,
670 +
          "type": "integer"
671 +
        },
672 +
        "y": {
673 +
          "description": "The square's row.",
674 +
          "minimum": 0,
675 +
          "type": "integer"
676 +
        }
677 +
      },
678 +
      "required": [
679 +
        "x",
680 +
        "y",
681 +
        "text"
682 +
      ],
683 +
      "type": "object"
684 +
    },
685 +
    "poster": {
686 +
      "properties": {
687 +
        "pic": {
688 +
          "description": "Which of the chapter's poster pictures it shows: 1 is pictures.poster1, and so on.",
689 +
          "maximum": 6,
690 +
          "minimum": 1,
691 +
          "type": "integer"
692 +
        },
693 +
        "x": {
694 +
          "description": "The wall square's column, as the level's rows have it (the drawn level's, or the preset's own map).",
695 +
          "minimum": 0,
696 +
          "type": "integer"
697 +
        },
698 +
        "y": {
699 +
          "description": "The wall square's row.",
700 +
          "minimum": 0,
701 +
          "type": "integer"
702 +
        }
703 +
      },
704 +
      "required": [
705 +
        "x",
706 +
        "y",
707 +
        "pic"
708 +
      ],
709 +
      "type": "object"
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"
236 753
      ],
237 754
      "type": "object"
238 755
    },
239 756
    "scene": {
240 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.",
241 758
      "properties": {
242 759
        "at": {
243 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.",
244 761
          "knownValues": [
245 762
            "before",
246 763
            "win",
247 764
            "lose"
248 765
          ],
249 766
          "maxLength": 16,
250 767
          "type": "string"
251 768
        },
252 769
        "bg": {
253 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.",
254 771
          "knownValues": [
255 772
            "replay",
256 773
            "flyby",
257 774
            "picture",
258 775
            "plain"
259 776
          ],
260 777
          "maxLength": 16,
261 778
          "type": "string"
262 779
        },
263 780
        "chapter": {
264 -
          "description": "For a scene before a chapter: which one, counting from 0 (0 is the opening, before the first chapter's card).",
265 -
          "maximum": 7,
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.",
782 +
          "maximum": 59,
266 783
          "minimum": 0,
267 784
          "type": "integer"
268 785
        },
786 +
        "choices": {
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.",
788 +
          "items": {
789 +
            "ref": "#choice",
790 +
            "type": "ref"
791 +
          },
792 +
          "maxLength": 3,
793 +
          "minLength": 2,
794 +
          "type": "array"
795 +
        },
269 796
        "lines": {
270 797
          "description": "Typed out one at a time; the player moves on line by line.",
271 798
          "items": {
272 799
            "ref": "#sceneLine",
273 800
            "type": "ref"
274 801
          },
275 802
          "maxLength": 6,
276 803
          "type": "array"
277 804
        },
278 805
        "music": {
279 806
          "description": "A mood of music under the scene. Absent: none.",
280 807
          "knownValues": [
281 808
            "musicbox",
282 809
            "heartbeat",
283 810
            "unease",
284 811
            "dread",
285 812
            "tension",
286 813
            "groove",
287 814
            "pulse",
288 815
            "drift",
289 -
            "alarm"
816 +
            "alarm",
817 +
            "island",
818 +
            "heist"
290 819
          ],
291 820
          "maxLength": 32,
292 821
          "type": "string"
293 822
        },
294 823
        "picture": {
295 824
          "accept": [
296 825
            "image/jpeg",
297 826
            "image/png"
298 827
          ],
299 828
          "description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
300 829
          "maxSize": 716800,
301 830
          "type": "blob"
302 831
        },
303 832
        "sting": {
304 -
          "description": "A recorded sound as the scene opens, from the horror pack. Absent: none.",
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.",
305 834
          "knownValues": [
306 835
            "creepy_hello",
307 836
            "creepy_laugh",
308 837
            "female_scream",
309 838
            "intrigue_event",
310 839
            "jump_scare",
311 840
            "jump_scare_horn",
312 841
            "lets_play"
313 842
          ],
314 843
          "maxLength": 32,
315 844
          "type": "string"
316 845
        },
317 846
        "title": {
318 847
          "maxGraphemes": 60,
319 848
          "maxLength": 240,
320 849
          "type": "string"
321 850
        }
322 851
      },
323 852
      "required": [
324 853
        "at",
325 854
        "bg"
326 855
      ],
327 856
      "type": "object"
328 857
    },
329 858
    "sceneLine": {
330 859
      "properties": {
331 860
        "text": {
332 861
          "maxGraphemes": 160,
333 862
          "maxLength": 640,
334 863
          "type": "string"
335 864
        },
336 865
        "who": {
337 -
          "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.",
338 867
          "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"
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"
354 884
          ],
355 885
          "maxLength": 16,
356 886
          "type": "string"
357 887
        }
358 888
      },
359 889
      "required": [
360 890
        "text"
361 891
      ],
362 892
      "type": "object"
363 893
    },
894 +
    "sound": {
895 +
      "description": "One of the builder's own sounds.",
896 +
      "properties": {
897 +
        "blob": {
898 +
          "accept": [
899 +
            "audio/*",
900 +
            "video/mp4"
901 +
          ],
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.)",
903 +
          "maxSize": 204800,
904 +
          "type": "blob"
905 +
        },
906 +
        "id": {
907 +
          "description": "Lowercase letters and digits, unique in the game: how the rest of the record names it.",
908 +
          "maxLength": 12,
909 +
          "type": "string"
910 +
        },
911 +
        "mime": {
912 +
          "description": "What it is, as the maker made it.",
913 +
          "knownValues": [
914 +
            "audio/mp4",
915 +
            "audio/wav"
916 +
          ],
917 +
          "maxLength": 32,
918 +
          "type": "string"
919 +
        },
920 +
        "ms": {
921 +
          "description": "How long it is, in milliseconds.",
922 +
          "maximum": 5000,
923 +
          "minimum": 1,
924 +
          "type": "integer"
925 +
        },
926 +
        "name": {
927 +
          "description": "What the builder calls it (\"Grandpa's yell\").",
928 +
          "maxGraphemes": 40,
929 +
          "maxLength": 160,
930 +
          "type": "string"
931 +
        }
932 +
      },
933 +
      "required": [
934 +
        "id",
935 +
        "blob",
936 +
        "mime",
937 +
        "ms"
938 +
      ],
939 +
      "type": "object"
940 +
    },
941 +
    "starring": {
942 +
      "properties": {
943 +
        "as": {
944 +
          "description": "Who they play (\"Grandma\"), shown as \"as Grandma\".",
945 +
          "maxGraphemes": 40,
946 +
          "maxLength": 160,
947 +
          "type": "string"
948 +
        },
949 +
        "who": {
950 +
          "description": "One of the game's cast's slots.",
951 +
          "knownValues": [
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"
968 +
          ],
969 +
          "maxLength": 16,
970 +
          "type": "string"
971 +
        }
972 +
      },
973 +
      "required": [
974 +
        "who"
975 +
      ],
976 +
      "type": "object"
977 +
    },
364 978
    "theme": {
365 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 +
        },
366 993
        "mood": {
367 994
          "description": "How the chapters light their worlds.",
368 995
          "knownValues": [
369 996
            "bright",
370 997
            "dusk",
371 998
            "cold",
372 999
            "neon",
373 1000
            "space",
374 1001
            "horror",
375 1002
            "retro"
376 1003
          ],
377 1004
          "type": "string"
378 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 +
        },
379 1010
        "palette": {
380 1011
          "description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
381 1012
          "items": {
382 1013
            "maxLength": 7,
383 1014
            "type": "string"
384 1015
          },
385 1016
          "maxLength": 5,
386 1017
          "minLength": 5,
387 1018
          "type": "array"
388 1019
        },
389 1020
        "pattern": {
390 1021
          "knownValues": [
391 1022
            "none",
392 1023
            "grid",
393 1024
            "stripes",
394 1025
            "dots",
395 1026
            "checks",
396 1027
            "waves",
397 1028
            "stars"
398 1029
          ],
399 1030
          "type": "string"
400 1031
        },
401 1032
        "preset": {
402 1033
          "description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
403 1034
          "maxLength": 20,
404 1035
          "type": "string"
405 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 +
        },
406 1045
        "type": {
407 1046
          "description": "The typeface for titles.",
408 1047
          "knownValues": [
409 1048
            "anton",
410 1049
            "creepster",
411 1050
            "inter"
412 1051
          ],
413 1052
          "type": "string"
414 1053
        }
415 1054
      },
416 1055
      "required": [
417 1056
        "palette",
418 1057
        "pattern",
419 1058
        "mood",
420 1059
        "type"
421 1060
      ],
422 1061
      "type": "object"
1062 +
    },
1063 +
    "titleCard": {
1064 +
      "properties": {
1065 +
        "line": {
1066 +
          "description": "A line under the title.",
1067 +
          "maxGraphemes": 120,
1068 +
          "maxLength": 480,
1069 +
          "type": "string"
1070 +
        },
1071 +
        "picture": {
1072 +
          "accept": [
1073 +
            "image/jpeg",
1074 +
            "image/png"
1075 +
          ],
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.",
1077 +
          "maxSize": 716800,
1078 +
          "type": "blob"
1079 +
        },
1080 +
        "sound": {
1081 +
          "description": "One of the game's own sounds (its id), played as the card fades in.",
1082 +
          "maxLength": 12,
1083 +
          "type": "string"
1084 +
        },
1085 +
        "title": {
1086 +
          "description": "In place of the game's title on the card; absent, the game's own.",
1087 +
          "maxGraphemes": 60,
1088 +
          "maxLength": 240,
1089 +
          "type": "string"
1090 +
        }
1091 +
      },
1092 +
      "type": "object"
1093 +
    },
1094 +
    "weapon": {
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).",
1096 +
      "properties": {
1097 +
        "damage": {
1098 +
          "description": "Health off a guard per round that lands (a guard has 4 at the default toughness, the boss 28). Lethal weapons only.",
1099 +
          "maximum": 10,
1100 +
          "minimum": 1,
1101 +
          "type": "integer"
1102 +
        },
1103 +
        "delay": {
1104 +
          "description": "A non-lethal weapon's: 60 Hz ticks a guard staggers before it drops (0: at once).",
1105 +
          "maximum": 300,
1106 +
          "minimum": 0,
1107 +
          "type": "integer"
1108 +
        },
1109 +
        "lethal": {
1110 +
          "description": "False: a hit knocks a guard out (unconscious) instead of hurting it.",
1111 +
          "type": "boolean"
1112 +
        },
1113 +
        "look": {
1114 +
          "description": "The built-in model it wears. Looks only.",
1115 +
          "knownValues": [
1116 +
            "pistol",
1117 +
            "silenced",
1118 +
            "smg",
1119 +
            "shotgun",
1120 +
            "sniper",
1121 +
            "taser",
1122 +
            "tranq"
1123 +
          ],
1124 +
          "maxLength": 16,
1125 +
          "type": "string"
1126 +
        },
1127 +
        "magazine": {
1128 +
          "description": "Rounds (or charges) in a magazine.",
1129 +
          "maximum": 60,
1130 +
          "minimum": 1,
1131 +
          "type": "integer"
1132 +
        },
1133 +
        "name": {
1134 +
          "maxGraphemes": 24,
1135 +
          "maxLength": 96,
1136 +
          "type": "string"
1137 +
        },
1138 +
        "noise": {
1139 +
          "description": "How far guards hear a shot, in squares (0: silent).",
1140 +
          "maximum": 14,
1141 +
          "minimum": 0,
1142 +
          "type": "integer"
1143 +
        },
1144 +
        "pellets": {
1145 +
          "description": "Rounds a pull of the trigger (a shotgun's several).",
1146 +
          "maximum": 9,
1147 +
          "minimum": 1,
1148 +
          "type": "integer"
1149 +
        },
1150 +
        "range": {
1151 +
          "description": "How far a round goes, in squares.",
1152 +
          "maximum": 24,
1153 +
          "minimum": 1,
1154 +
          "type": "integer"
1155 +
        },
1156 +
        "rate": {
1157 +
          "description": "60 Hz ticks between shots.",
1158 +
          "maximum": 120,
1159 +
          "minimum": 4,
1160 +
          "type": "integer"
1161 +
        },
1162 +
        "reload": {
1163 +
          "description": "60 Hz ticks to reload.",
1164 +
          "maximum": 300,
1165 +
          "minimum": 20,
1166 +
          "type": "integer"
1167 +
        },
1168 +
        "skin": {
1169 +
          "accept": [
1170 +
            "image/jpeg",
1171 +
            "image/png"
1172 +
          ],
1173 +
          "description": "The builder's picture on its body (a square JPEG, 256×256, at most 120 KB). Public once published. Looks only.",
1174 +
          "maxSize": 122880,
1175 +
          "type": "blob"
1176 +
        },
1177 +
        "spare": {
1178 +
          "description": "Spare magazines carried at the start.",
1179 +
          "maximum": 9,
1180 +
          "minimum": 0,
1181 +
          "type": "integer"
1182 +
        },
1183 +
        "spread": {
1184 +
          "description": "How far a round can stray either way, in 1024ths of a turn.",
1185 +
          "maximum": 60,
1186 +
          "minimum": 0,
1187 +
          "type": "integer"
1188 +
        }
1189 +
      },
1190 +
      "required": [
1191 +
        "name",
1192 +
        "look",
1193 +
        "damage",
1194 +
        "rate",
1195 +
        "range",
1196 +
        "magazine",
1197 +
        "lethal"
1198 +
      ],
1199 +
      "type": "object"
423 1200
    }
424 1201
  },
425 1202
  "id": "com.gamethesky.make.game",
426 1203
  "lexicon": 1
427 1204
}

Compare Other Versions

Lexicon Garden

@