com.gamethesky.make.game

gamethesky.com

Schema Diff

+416 -3

From

CID
bafyreidbdzkm56w...
Indexed At
2026-10-23 07:55 UTC
View this version

To

CID
bafyreigsf3tma42...
Indexed At
2026-10-23 15:22 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

18 breaking changes, 104 non-breaking changes.

Breaking Changes (18)
  • 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#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#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#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#starring", src: "com.gamethesky.make.game#starring", tgt: "com.gamethesky.make.game#starring.who", kind: "prop", name: Some("who") }
Non-Breaking Changes (104)
  • 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.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.sounds" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.words" }
  • 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#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#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#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.credits" }
  • 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.weapons" }
  • AddedVertex AddedVertex { vertex_id: "com.gamethesky.make.game:body.weapons:items" }
  • 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.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.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.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#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#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#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#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.credits", kind: "prop", name: Some("credits") }
  • 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.weapons", kind: "prop", name: Some("weapons") }
  • 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.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 }

Migration Guidance

Added Elements

  • 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.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.sounds" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game#chapter.words" }
  • 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#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#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#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.credits" }
  • 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.weapons" }
  • AddedVertex { vertex_id: "com.gamethesky.make.game:body.weapons:items" }

Additional Notes

  • 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#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#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#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#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") }
  • 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.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.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.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#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#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#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#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.credits", kind: "prop", name: Some("credits") }
  • 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.weapons", kind: "prop", name: Some("weapons") }
  • 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.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 15
        "level": {
16 16
          "description": "A level the builder drew in the maker, in place of the preset's own map, for modules whose levels can be drawn (platformer, house, tank maze, vortex, walk-through). A reader runs the module's own checker on it and refuses the game if it fails.",
17 17
          "ref": "#level",
18 18
          "type": "ref"
19 19
        },
20 +
        "messages": {
21 +
          "description": "Story beats placed on squares of the chapter's level (drawn or the preset's own), for modules whose levels take them (house, walk, fps, platformer, tanks): each shown in a strip as the player reaches its square, without stopping play. Looks only: play, boards and the verifier never read them.",
22 +
          "items": {
23 +
            "ref": "#message",
24 +
            "type": "ref"
25 +
          },
26 +
          "maxLength": 24,
27 +
          "type": "array"
28 +
        },
20 29
        "module": {
21 30
          "description": "The engine, one of Game the Sky's games made a chapter: platformer, house (a haunted floor), tanks (a tank maze), vortex (a tube of lanes), roll (a tilting course), fight (a bout), golf (a hole), cycles, discs, uplink and canyon (the grid), belts (the counter), race (a sling race), gunner (the door gunner), the arcade classics, walk (a haunted walk-through: no gun, a nerve meter), and fps (first person, armed, in a place such as a military facility: guards, keycards, intel, extraction). The list grows as games are added; a reader refuses a module it doesn't have.",
22 31
          "knownValues": [
23 32
            "platformer",
24 33
            "house",
25 34
            "tanks",
26 35
            "vortex",
27 36
            "roll",
28 37
            "fight",
29 38
            "golf",
30 39
            "cycles",
31 40
            "discs",
32 41
            "uplink",
33 42
            "canyon",
34 43
            "belts",
35 44
            "race",
36 45
            "gunner",
37 46
            "drones",
38 47
            "landing",
39 48
            "deckgun",
40 49
            "minefield",
41 50
            "pipes",
42 51
            "catch",
43 52
            "fence",
44 53
            "airdrop",
45 54
            "invaders",
46 55
            "crossing",
47 56
            "walk",
48 57
            "fps"
49 58
          ],
50 59
          "maxLength": 32,
51 60
          "type": "string"
52 61
        },
53 62
        "next": {
54 63
          "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.",
55 64
          "maxLength": 8,
56 65
          "type": "string"
57 66
        },
67 +
        "pictures": {
68 +
          "description": "The chapter's own pictures, by key, each a blob: a JPEG or PNG that fits inside 512×512 keeping its own shape (at most 200 KB). poster1 to poster6 are the pictures its posters hang on the level's walls; objective, keycard, ammo, medkit and coin are the faces of what the player picks up, where the chapter type has them (objective: first person's intel and evidence, the house's and the walk-through's key and the sign over their way out, the platformer's door; coin: first person's and the platformer's coins), shown on the pickup, on the HUD and in its banner. Public once published. Looks only: play, boards and the verifier never read them.",
69 +
          "type": "unknown"
70 +
        },
71 +
        "posters": {
72 +
          "description": "The builder's pictures hung on the level's walls (a wanted poster, a family photo, a logo, a sign), for chapter types whose levels have walls to see (the house, the walk-through, first person, the tank maze): one a wall square, framed on the face that looks onto the most open floor. A poster on a square that isn't a wall, or whose picture is missing, isn't shown. Looks only: not part of play.",
73 +
          "items": {
74 +
            "ref": "#poster",
75 +
            "type": "ref"
76 +
          },
77 +
          "maxLength": 24,
78 +
          "type": "array"
79 +
        },
58 80
        "preset": {
59 81
          "description": "The module's own level to start from (or, with a drawn level, the look it's drawn in).",
60 82
          "maxLength": 32,
61 83
          "type": "string"
62 84
        },
63 85
        "settings": {
64 -
          "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.",
86 +
          "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).",
65 87
          "type": "unknown"
66 88
        },
89 +
        "sounds": {
90 +
          "description": "The game's own sounds in place of the chapter's, by the noise (an object of sound ids by key): the walk-through's jump-outs (ghoul, thing, face, hound, victim, drop, member) and sound pieces (cueA, cueL, cueR, cueI, cueJ, cueN, cueY); First person's alerts (spotted, alarm, caught, checkpoint). A reader takes only the keys its module names and the sounds the game has. Looks only.",
91 +
          "type": "unknown"
92 +
        },
67 93
        "textures": {
68 94
          "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.",
69 95
          "type": "unknown"
70 96
        },
71 97
        "title": {
72 98
          "maxGraphemes": 40,
73 99
          "maxLength": 160,
74 100
          "type": "string"
75 101
        },
76 102
        "version": {
77 103
          "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.",
78 104
          "minimum": 1,
79 105
          "type": "integer"
106 +
        },
107 +
        "words": {
108 +
          "description": "The builder's own words in place of the chapter's: an object of strings by key (for example {\"objective\": \"Grandma's recipe\", \"boss\": \"AUNT MARGE\"}). Each module declares its keys (its banners, toasts, HUD labels, the hint) and how long each may be; a reader keeps only keys it knows, trims each to its limit, and says the rest in the module's own words. A word may hold placeholders such as {n} and {total}, filled with the numbers as it's said. Looks only: play, boards and the verifier never read it.",
109 +
          "type": "unknown"
80 110
        }
81 111
      },
82 112
      "required": [
83 113
        "module",
84 114
        "version",
85 115
        "title",
86 116
        "preset",
87 117
        "settings"
88 118
      ],
89 119
      "type": "object"
90 120
    },
91 121
    "choice": {
92 122
      "description": "One way on from a scene's choice.",
93 123
      "properties": {
94 124
        "label": {
95 125
          "description": "What the button says. Words only: a hidden game's read \"Option 1\", \"Option 2\"…",
96 126
          "maxGraphemes": 60,
97 127
          "maxLength": 240,
98 128
          "type": "string"
99 129
        },
100 130
        "to": {
101 131
          "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.",
102 132
          "maxLength": 8,
103 133
          "type": "string"
104 134
        }
105 135
      },
106 136
      "required": [
107 137
        "label",
108 138
        "to"
109 139
      ],
110 140
      "type": "object"
111 141
    },
142 +
    "credits": {
143 +
      "properties": {
144 +
        "lines": {
145 +
          "description": "The builder's own lines (\"Made by Todd for the Lambert family reunion\").",
146 +
          "items": {
147 +
            "maxGraphemes": 80,
148 +
            "maxLength": 320,
149 +
            "type": "string"
150 +
          },
151 +
          "maxLength": 12,
152 +
          "type": "array"
153 +
        },
154 +
        "loop": {
155 +
          "description": "The credits' sound plays over and over under the whole roll (a music bed).",
156 +
          "type": "boolean"
157 +
        },
158 +
        "picture": {
159 +
          "accept": [
160 +
            "image/jpeg",
161 +
            "image/png"
162 +
          ],
163 +
          "description": "A picture at the end of the roll (at most 1600×900). Public once published. Looks only.",
164 +
          "maxSize": 716800,
165 +
          "type": "blob"
166 +
        },
167 +
        "sound": {
168 +
          "description": "One of the game's own sounds (its id), played as the credits start to roll.",
169 +
          "maxLength": 12,
170 +
          "type": "string"
171 +
        },
172 +
        "starring": {
173 +
          "description": "The cast, in order, each once: shown with their photo and the name they go by in the game.",
174 +
          "items": {
175 +
            "ref": "#starring",
176 +
            "type": "ref"
177 +
          },
178 +
          "maxLength": 15,
179 +
          "type": "array"
180 +
        }
181 +
      },
182 +
      "type": "object"
183 +
    },
112 184
    "level": {
113 185
      "properties": {
114 186
        "rows": {
115 -
          "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.",
187 +
          "description": "The grid, top row first, one character a square, every row the same length. The characters are the module's own. The platformer: . air, # ground, = bricks, - ledge, o coin, ^ spikes, w walker, h hopper, B boss, + extra life, S start, D door. The house: Make a House's tiles. The walk-through: the house's walls, portraits, windows, start, key and doors, E the way out, jump-outs (g h f x V T, 1 to 8 the maker's members), sounds (A L R I J N Y), F a fog machine, props (s Z C t H c j w b). The tank maze: a square, # block, . floor, S you, r a rival. The vortex: o the rim, one square a lane, a loop for a closed tube or a line for an open one. First person also takes weapon pickups (ⓟ pistol, ⓢ suppressed pistol, ⓜ SMG, ⓖ shotgun, ⓝ sniper rifle, ⓣ taser, ⓓ tranquilizer, ① to ⑧ the game's own weapons), gadgets (ⓒ a coin, ⓔ an EMP) and ⚑ a checkpoint.",
116 188
          "items": {
117 189
            "maxLength": 160,
118 190
            "type": "string"
119 191
          },
120 192
          "maxLength": 24,
121 193
          "minLength": 8,
122 194
          "type": "array"
123 195
        }
124 196
      },
125 197
      "required": [
126 198
        "rows"
127 199
      ],
128 200
      "type": "object"
129 201
    },
130 202
    "main": {
131 203
      "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.",
132 204
      "key": "tid",
133 205
      "record": {
134 206
        "properties": {
135 207
          "carryLives": {
136 208
            "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.",
137 209
            "type": "boolean"
138 210
          },
139 211
          "cast": {
140 212
            "description": "The maker's own Foe Booth cast, included on purpose (off by default): each photo is a public blob in the maker's repo. Looks only: a verifier ignores it. Absent, players see their own cast or the engines' own monsters.",
141 213
            "items": {
142 214
              "ref": "#member",
143 215
              "type": "ref"
144 216
            },
145 217
            "maxLength": 15,
146 218
            "type": "array"
147 219
          },
148 220
          "chapters": {
149 221
            "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.",
150 222
            "items": {
151 223
              "ref": "#chapter",
152 224
              "type": "ref"
153 225
            },
154 226
            "maxLength": 8,
155 227
            "minLength": 1,
156 228
            "type": "array"
157 229
          },
158 230
          "cover": {
159 231
            "accept": [
160 232
              "image/jpeg",
161 233
              "image/png"
162 234
            ],
163 235
            "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.",
164 236
            "maxSize": 614400,
165 237
            "type": "blob"
166 238
          },
167 239
          "createdAt": {
168 240
            "format": "datetime",
169 241
            "type": "string"
170 242
          },
243 +
          "credits": {
244 +
            "description": "The game's end credits, rolled after the ending and before the results, skippable. Present means they're on. Looks only: not part of play.",
245 +
            "ref": "#credits",
246 +
            "type": "ref"
247 +
          },
171 248
          "description": {
172 249
            "maxGraphemes": 200,
173 250
            "maxLength": 800,
174 251
            "type": "string"
175 252
          },
176 253
          "logo": {
177 254
            "accept": [
178 255
              "image/png",
179 256
              "image/jpeg"
180 257
            ],
181 258
            "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.",
182 259
            "maxSize": 409600,
183 260
            "type": "blob"
184 261
          },
185 262
          "remixOf": {
186 263
            "description": "The game this one was remixed from, pinned to the version remixed: credit, shown on the game's page. Absent for an original.",
187 264
            "ref": "com.atproto.repo.strongRef",
188 265
            "type": "ref"
189 266
          },
190 267
          "scenes": {
191 268
            "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.",
192 269
            "items": {
193 270
              "ref": "#scene",
194 271
              "type": "ref"
195 272
            },
196 273
            "maxLength": 10,
197 274
            "type": "array"
198 275
          },
276 +
          "sounds": {
277 +
            "description": "The builder's own sounds, recorded or uploaded in the maker: at most eight, five seconds each. Used by id where the game makes a noise: a scene's sting and a message's sound (as \"sound:<id>\"), a chapter's sounds (the walk-through's jump-outs and sound pieces, First person's alerts), the title card's and the credits' sound. Only the ones the game uses are published. Public once published; looks only: play, boards and the verifier never read them. A hidden game's are withheld.",
278 +
            "items": {
279 +
              "ref": "#sound",
280 +
              "type": "ref"
281 +
            },
282 +
            "maxLength": 8,
283 +
            "type": "array"
284 +
          },
199 285
          "theme": {
200 286
            "ref": "#theme",
201 287
            "type": "ref"
202 288
          },
203 289
          "title": {
204 290
            "maxGraphemes": 60,
205 291
            "maxLength": 240,
206 292
            "type": "string"
293 +
          },
294 +
          "titleCard": {
295 +
            "description": "The game's own title card, shown before the opening scene or the first chapter's card, with a short fade. Present means it's on. Looks only: not part of play.",
296 +
            "ref": "#titleCard",
297 +
            "type": "ref"
298 +
          },
299 +
          "weapons": {
300 +
            "description": "The builder's own weapons, for First person chapters: a chapter carries the ones its `custom` setting ticks (a bit each, the first weapon bit 0), and a drawn level places them as pickups (① to ⑧). Their numbers are part of play (changing one gives the game a fresh board); their names, looks and pictures are words and looks. A reader takes eight at most and clamps each number to its range.",
301 +
            "items": {
302 +
              "ref": "#weapon",
303 +
              "type": "ref"
304 +
            },
305 +
            "maxLength": 8,
306 +
            "type": "array"
207 307
          }
208 308
        },
209 309
        "required": [
210 310
          "title",
211 311
          "theme",
212 312
          "chapters",
213 313
          "createdAt"
214 314
        ],
215 315
        "type": "object"
216 316
      },
217 317
      "type": "record"
218 318
    },
219 319
    "member": {
220 320
      "description": "One of the cast: the part they play, the name they're billed under, and their photo.",
221 321
      "properties": {
222 322
        "image": {
223 323
          "accept": [
224 324
            "image/png",
225 325
            "image/jpeg"
226 326
          ],
227 327
          "description": "A cutout PNG for a body part, a 256×256 JPEG for a face. 192 KB at most.",
228 328
          "maxSize": 196608,
229 329
          "type": "blob"
230 330
        },
231 331
        "name": {
232 332
          "maxGraphemes": 40,
233 333
          "maxLength": 160,
234 334
          "type": "string"
235 335
        },
236 336
        "role": {
237 337
          "description": "One of the fixed parts, or m1 to m8: one of the maker's own cast members, placed by hand in levels that take them (the walk-through's 1 to 8). A member's photo says what they are: a cutout PNG is a figure, a JPEG a face.",
238 338
          "knownValues": [
239 339
            "ghoul",
240 340
            "hound",
241 341
            "thing",
242 342
            "scream",
243 343
            "victim",
244 344
            "portrait",
245 345
            "you",
246 346
            "m1",
247 347
            "m2",
248 348
            "m3",
249 349
            "m4",
250 350
            "m5",
251 351
            "m6",
252 352
            "m7",
253 353
            "m8"
254 354
          ],
255 355
          "type": "string"
256 356
        }
257 357
      },
258 358
      "required": [
259 359
        "role",
260 360
        "name",
261 361
        "image"
262 362
      ],
263 363
      "type": "object"
264 364
    },
365 +
    "message": {
366 +
      "properties": {
367 +
        "again": {
368 +
          "description": "Shown every time the player steps back onto it, not only the first.",
369 +
          "type": "boolean"
370 +
        },
371 +
        "sting": {
372 +
          "description": "A sound as it shows: one of the horror pack's recordings, a radio's blip, or one of the game's own sounds as \"sound:<id>\".",
373 +
          "knownValues": [
374 +
            "creepy_hello",
375 +
            "creepy_laugh",
376 +
            "female_scream",
377 +
            "intrigue_event",
378 +
            "jump_scare",
379 +
            "jump_scare_horn",
380 +
            "lets_play",
381 +
            "radio"
382 +
          ],
383 +
          "maxLength": 32,
384 +
          "type": "string"
385 +
        },
386 +
        "text": {
387 +
          "maxGraphemes": 160,
388 +
          "maxLength": 640,
389 +
          "type": "string"
390 +
        },
391 +
        "who": {
392 +
          "description": "Who says it: one of the game's cast (shown with their photo and name), or absent for a note or the narrator.",
393 +
          "knownValues": [
394 +
            "ghoul",
395 +
            "hound",
396 +
            "thing",
397 +
            "scream",
398 +
            "victim",
399 +
            "portrait",
400 +
            "you",
401 +
            "m1",
402 +
            "m2",
403 +
            "m3",
404 +
            "m4",
405 +
            "m5",
406 +
            "m6",
407 +
            "m7",
408 +
            "m8"
409 +
          ],
410 +
          "maxLength": 16,
411 +
          "type": "string"
412 +
        },
413 +
        "x": {
414 +
          "description": "The square's column, as the level's rows have it.",
415 +
          "minimum": 0,
416 +
          "type": "integer"
417 +
        },
418 +
        "y": {
419 +
          "description": "The square's row.",
420 +
          "minimum": 0,
421 +
          "type": "integer"
422 +
        }
423 +
      },
424 +
      "required": [
425 +
        "x",
426 +
        "y",
427 +
        "text"
428 +
      ],
429 +
      "type": "object"
430 +
    },
431 +
    "poster": {
432 +
      "properties": {
433 +
        "pic": {
434 +
          "description": "Which of the chapter's poster pictures it shows: 1 is pictures.poster1, and so on.",
435 +
          "maximum": 6,
436 +
          "minimum": 1,
437 +
          "type": "integer"
438 +
        },
439 +
        "x": {
440 +
          "description": "The wall square's column, as the level's rows have it (the drawn level's, or the preset's own map).",
441 +
          "minimum": 0,
442 +
          "type": "integer"
443 +
        },
444 +
        "y": {
445 +
          "description": "The wall square's row.",
446 +
          "minimum": 0,
447 +
          "type": "integer"
448 +
        }
449 +
      },
450 +
      "required": [
451 +
        "x",
452 +
        "y",
453 +
        "pic"
454 +
      ],
455 +
      "type": "object"
456 +
    },
265 457
    "scene": {
266 458
      "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.",
267 459
      "properties": {
268 460
        "at": {
269 461
          "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.",
270 462
          "knownValues": [
271 463
            "before",
272 464
            "win",
273 465
            "lose"
274 466
          ],
275 467
          "maxLength": 16,
276 468
          "type": "string"
277 469
        },
278 470
        "bg": {
279 471
          "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.",
280 472
          "knownValues": [
281 473
            "replay",
282 474
            "flyby",
283 475
            "picture",
284 476
            "plain"
285 477
          ],
286 478
          "maxLength": 16,
287 479
          "type": "string"
288 480
        },
289 481
        "chapter": {
290 482
          "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.",
291 483
          "maximum": 7,
292 484
          "minimum": 0,
293 485
          "type": "integer"
294 486
        },
295 487
        "choices": {
296 488
          "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.",
297 489
          "items": {
298 490
            "ref": "#choice",
299 491
            "type": "ref"
300 492
          },
301 493
          "maxLength": 3,
302 494
          "minLength": 2,
303 495
          "type": "array"
304 496
        },
305 497
        "lines": {
306 498
          "description": "Typed out one at a time; the player moves on line by line.",
307 499
          "items": {
308 500
            "ref": "#sceneLine",
309 501
            "type": "ref"
310 502
          },
311 503
          "maxLength": 6,
312 504
          "type": "array"
313 505
        },
314 506
        "music": {
315 507
          "description": "A mood of music under the scene. Absent: none.",
316 508
          "knownValues": [
317 509
            "musicbox",
318 510
            "heartbeat",
319 511
            "unease",
320 512
            "dread",
321 513
            "tension",
322 514
            "groove",
323 515
            "pulse",
324 516
            "drift",
325 517
            "alarm",
326 518
            "island",
327 519
            "heist"
328 520
          ],
329 521
          "maxLength": 32,
330 522
          "type": "string"
331 523
        },
332 524
        "picture": {
333 525
          "accept": [
334 526
            "image/jpeg",
335 527
            "image/png"
336 528
          ],
337 529
          "description": "The builder's own picture for a picture background (at most 1600×900). Public once published. Looks only.",
338 530
          "maxSize": 716800,
339 531
          "type": "blob"
340 532
        },
341 533
        "sting": {
342 -
          "description": "A recorded sound as the scene opens, from the horror pack. Absent: none.",
534 +
          "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.",
343 535
          "knownValues": [
344 536
            "creepy_hello",
345 537
            "creepy_laugh",
346 538
            "female_scream",
347 539
            "intrigue_event",
348 540
            "jump_scare",
349 541
            "jump_scare_horn",
350 542
            "lets_play"
351 543
          ],
352 544
          "maxLength": 32,
353 545
          "type": "string"
354 546
        },
355 547
        "title": {
356 548
          "maxGraphemes": 60,
357 549
          "maxLength": 240,
358 550
          "type": "string"
359 551
        }
360 552
      },
361 553
      "required": [
362 554
        "at",
363 555
        "bg"
364 556
      ],
365 557
      "type": "object"
366 558
    },
367 559
    "sceneLine": {
368 560
      "properties": {
369 561
        "text": {
370 562
          "maxGraphemes": 160,
371 563
          "maxLength": 640,
372 564
          "type": "string"
373 565
        },
374 566
        "who": {
375 567
          "description": "Who says it: one of the cast's parts or the maker's own members (their photo and name show beside the line). Absent: narration.",
376 568
          "knownValues": [
377 569
            "ghoul",
378 570
            "hound",
379 571
            "thing",
380 572
            "scream",
381 573
            "victim",
382 574
            "portrait",
383 575
            "you",
384 576
            "m1",
385 577
            "m2",
386 578
            "m3",
387 579
            "m4",
388 580
            "m5",
389 581
            "m6",
390 582
            "m7",
391 583
            "m8"
392 584
          ],
393 585
          "maxLength": 16,
394 586
          "type": "string"
395 587
        }
396 588
      },
397 589
      "required": [
398 590
        "text"
399 591
      ],
400 592
      "type": "object"
401 593
    },
594 +
    "sound": {
595 +
      "description": "One of the builder's own sounds.",
596 +
      "properties": {
597 +
        "blob": {
598 +
          "accept": [
599 +
            "audio/*",
600 +
            "video/mp4"
601 +
          ],
602 +
          "description": "The sound: AAC in an MP4, or 16-bit PCM in a WAV, mono, at most five seconds and 200 KB. (A data server may name an MP4 video/mp4 or audio/x-m4a, and a WAV audio/x-wav or audio/vnd.wave, by its bytes.)",
603 +
          "maxSize": 204800,
604 +
          "type": "blob"
605 +
        },
606 +
        "id": {
607 +
          "description": "Lowercase letters and digits, unique in the game: how the rest of the record names it.",
608 +
          "maxLength": 12,
609 +
          "type": "string"
610 +
        },
611 +
        "mime": {
612 +
          "description": "What it is, as the maker made it.",
613 +
          "knownValues": [
614 +
            "audio/mp4",
615 +
            "audio/wav"
616 +
          ],
617 +
          "maxLength": 32,
618 +
          "type": "string"
619 +
        },
620 +
        "ms": {
621 +
          "description": "How long it is, in milliseconds.",
622 +
          "maximum": 5000,
623 +
          "minimum": 1,
624 +
          "type": "integer"
625 +
        },
626 +
        "name": {
627 +
          "description": "What the builder calls it (\"Grandpa's yell\").",
628 +
          "maxGraphemes": 40,
629 +
          "maxLength": 160,
630 +
          "type": "string"
631 +
        }
632 +
      },
633 +
      "required": [
634 +
        "id",
635 +
        "blob",
636 +
        "mime",
637 +
        "ms"
638 +
      ],
639 +
      "type": "object"
640 +
    },
641 +
    "starring": {
642 +
      "properties": {
643 +
        "as": {
644 +
          "description": "Who they play (\"Grandma\"), shown as \"as Grandma\".",
645 +
          "maxGraphemes": 40,
646 +
          "maxLength": 160,
647 +
          "type": "string"
648 +
        },
649 +
        "who": {
650 +
          "description": "One of the game's cast: a part or one of the builder's own members.",
651 +
          "knownValues": [
652 +
            "ghoul",
653 +
            "hound",
654 +
            "thing",
655 +
            "scream",
656 +
            "victim",
657 +
            "portrait",
658 +
            "you",
659 +
            "m1",
660 +
            "m2",
661 +
            "m3",
662 +
            "m4",
663 +
            "m5",
664 +
            "m6",
665 +
            "m7",
666 +
            "m8"
667 +
          ],
668 +
          "maxLength": 16,
669 +
          "type": "string"
670 +
        }
671 +
      },
672 +
      "required": [
673 +
        "who"
674 +
      ],
675 +
      "type": "object"
676 +
    },
402 677
    "theme": {
403 678
      "properties": {
404 679
        "mood": {
405 680
          "description": "How the chapters light their worlds.",
406 681
          "knownValues": [
407 682
            "bright",
408 683
            "dusk",
409 684
            "cold",
410 685
            "neon",
411 686
            "space",
412 687
            "horror",
413 688
            "retro"
414 689
          ],
415 690
          "type": "string"
416 691
        },
417 692
        "palette": {
418 693
          "description": "Five #rrggbb colors: the page, its panels, the accent, danger, and the words.",
419 694
          "items": {
420 695
            "maxLength": 7,
421 696
            "type": "string"
422 697
          },
423 698
          "maxLength": 5,
424 699
          "minLength": 5,
425 700
          "type": "array"
426 701
        },
427 702
        "pattern": {
428 703
          "knownValues": [
429 704
            "none",
430 705
            "grid",
431 706
            "stripes",
432 707
            "dots",
433 708
            "checks",
434 709
            "waves",
435 710
            "stars"
436 711
          ],
437 712
          "type": "string"
438 713
        },
439 714
        "preset": {
440 715
          "description": "The look it started from (haunted, neon, storybook, space, retro, frozen, sunset), or custom.",
441 716
          "maxLength": 20,
442 717
          "type": "string"
443 718
        },
444 719
        "type": {
445 720
          "description": "The typeface for titles.",
446 721
          "knownValues": [
447 722
            "anton",
448 723
            "creepster",
449 724
            "inter"
450 725
          ],
451 726
          "type": "string"
452 727
        }
453 728
      },
454 729
      "required": [
455 730
        "palette",
456 731
        "pattern",
457 732
        "mood",
458 733
        "type"
459 734
      ],
460 735
      "type": "object"
736 +
    },
737 +
    "titleCard": {
738 +
      "properties": {
739 +
        "line": {
740 +
          "description": "A line under the title.",
741 +
          "maxGraphemes": 120,
742 +
          "maxLength": 480,
743 +
          "type": "string"
744 +
        },
745 +
        "picture": {
746 +
          "accept": [
747 +
            "image/jpeg",
748 +
            "image/png"
749 +
          ],
750 +
          "description": "The builder's picture for the card (at most 1600×900); absent, the game's logo if it has one. Public once published. Looks only.",
751 +
          "maxSize": 716800,
752 +
          "type": "blob"
753 +
        },
754 +
        "sound": {
755 +
          "description": "One of the game's own sounds (its id), played as the card fades in.",
756 +
          "maxLength": 12,
757 +
          "type": "string"
758 +
        },
759 +
        "title": {
760 +
          "description": "In place of the game's title on the card; absent, the game's own.",
761 +
          "maxGraphemes": 60,
762 +
          "maxLength": 240,
763 +
          "type": "string"
764 +
        }
765 +
      },
766 +
      "type": "object"
767 +
    },
768 +
    "weapon": {
769 +
      "description": "One of the builder's own weapons: what it's called, which built-in model it wears, and what it does. Every number is a whole number in its range (a reader clamps it).",
770 +
      "properties": {
771 +
        "damage": {
772 +
          "description": "Health off a guard per round that lands (a guard has 4 at the default toughness, the boss 28). Lethal weapons only.",
773 +
          "maximum": 10,
774 +
          "minimum": 1,
775 +
          "type": "integer"
776 +
        },
777 +
        "delay": {
778 +
          "description": "A non-lethal weapon's: 60 Hz ticks a guard staggers before it drops (0: at once).",
779 +
          "maximum": 300,
780 +
          "minimum": 0,
781 +
          "type": "integer"
782 +
        },
783 +
        "lethal": {
784 +
          "description": "False: a hit knocks a guard out (unconscious) instead of hurting it.",
785 +
          "type": "boolean"
786 +
        },
787 +
        "look": {
788 +
          "description": "The built-in model it wears. Looks only.",
789 +
          "knownValues": [
790 +
            "pistol",
791 +
            "silenced",
792 +
            "smg",
793 +
            "shotgun",
794 +
            "sniper",
795 +
            "taser",
796 +
            "tranq"
797 +
          ],
798 +
          "maxLength": 16,
799 +
          "type": "string"
800 +
        },
801 +
        "magazine": {
802 +
          "description": "Rounds (or charges) in a magazine.",
803 +
          "maximum": 60,
804 +
          "minimum": 1,
805 +
          "type": "integer"
806 +
        },
807 +
        "name": {
808 +
          "maxGraphemes": 24,
809 +
          "maxLength": 96,
810 +
          "type": "string"
811 +
        },
812 +
        "noise": {
813 +
          "description": "How far guards hear a shot, in squares (0: silent).",
814 +
          "maximum": 14,
815 +
          "minimum": 0,
816 +
          "type": "integer"
817 +
        },
818 +
        "pellets": {
819 +
          "description": "Rounds a pull of the trigger (a shotgun's several).",
820 +
          "maximum": 9,
821 +
          "minimum": 1,
822 +
          "type": "integer"
823 +
        },
824 +
        "range": {
825 +
          "description": "How far a round goes, in squares.",
826 +
          "maximum": 24,
827 +
          "minimum": 1,
828 +
          "type": "integer"
829 +
        },
830 +
        "rate": {
831 +
          "description": "60 Hz ticks between shots.",
832 +
          "maximum": 120,
833 +
          "minimum": 4,
834 +
          "type": "integer"
835 +
        },
836 +
        "reload": {
837 +
          "description": "60 Hz ticks to reload.",
838 +
          "maximum": 300,
839 +
          "minimum": 20,
840 +
          "type": "integer"
841 +
        },
842 +
        "skin": {
843 +
          "accept": [
844 +
            "image/jpeg",
845 +
            "image/png"
846 +
          ],
847 +
          "description": "The builder's picture on its body (a square JPEG, 256×256, at most 120 KB). Public once published. Looks only.",
848 +
          "maxSize": 122880,
849 +
          "type": "blob"
850 +
        },
851 +
        "spare": {
852 +
          "description": "Spare magazines carried at the start.",
853 +
          "maximum": 9,
854 +
          "minimum": 0,
855 +
          "type": "integer"
856 +
        },
857 +
        "spread": {
858 +
          "description": "How far a round can stray either way, in 1024ths of a turn.",
859 +
          "maximum": 60,
860 +
          "minimum": 0,
861 +
          "type": "integer"
862 +
        }
863 +
      },
864 +
      "required": [
865 +
        "name",
866 +
        "look",
867 +
        "damage",
868 +
        "rate",
869 +
        "range",
870 +
        "magazine",
871 +
        "lethal"
872 +
      ],
873 +
      "type": "object"
461 874
    }
462 875
  },
463 876
  "id": "com.gamethesky.make.game",
464 877
  "lexicon": 1
465 878
}

Compare Other Versions

Lexicon Garden

@