scratch-parser/lib/sb3_definitions.json

447 lines
14 KiB
JSON
Raw Normal View History

{
"$id": "https://scratch.mit.edu/sb3_definitions.json",
"$schema": "http://json-schema.org/schema#",
"description": "Scratch 3.0 Project and Sprite Schema Definitions",
"definitions": {
"optionalString": {
"oneOf": [
{"type": "string"},
{"type": "null"}
]
},
"optionalNumber": {
"oneOf": [
{"type": "number"},
{"type": "null"}
]
},
"boolOrOptBoolString": {
"oneOf": [
{"type": "string",
"enum": ["true", "false", "null"]},
{"type": "boolean"},
{"type": "null"}
]
},
"stringOrNumber": {
"oneOf": [
{"type": "string"},
{"type": "number"}
]
},
"scalarVal": {
"oneOf": [
{"$ref":"#/definitions/stringOrNumber"},
{"type": "boolean"}
]
},
"assetId": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}$"
},
"costume": {
"type": "object",
"properties": {
"assetId": { "$ref": "#/definitions/assetId"},
"bitmapResolution": {
"type": "integer"
},
"dataFormat": {
"type": "string",
"enum": ["png", "svg", "jpeg", "jpg", "bmp", "gif"]
},
"md5ext": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}\\.[a-zA-Z]+$"
},
"name": {
"type": "string"
},
"rotationCenterX": {
"type": "number",
"description": "This property is not required, but is highly recommended."
},
"rotationCenterY": {
"type": "number",
"description": "This property is not required, but is highly recommended."
}
},
"required": [
"assetId",
"dataFormat",
"name"
]
},
"sound": {
"type": "object",
"properties": {
"assetId": { "$ref": "#/definitions/assetId"},
"dataFormat": {
"type": "string",
"enum": ["wav", "wave", "mp3"]
},
"md5ext": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}\\.[a-zA-Z0-9]+$"
},
"name": {
"type": "string"
},
"rate": {
"type": "integer"
},
"sampleCount": {
"type": "integer"
}
},
"required": [
"assetId",
"dataFormat",
"name"
]
},
"scalar_variable": {
"type": "array",
"items": [
{"type": "string", "description": "name of the variable"},
{"$ref":"#/definitions/scalarVal", "description": "value of the variable"}
],
"additionalItems": {"type": "boolean", "enum": [true], "description": "Whether this is a cloud variable"},
"maxItems": 3
},
"list": {
"type": "array",
"items": [
{"type":"string", "description": "name of the list"},
{
"type": "array",
"description": "contents of the list",
"items": {"$ref":"#/definitions/scalarVal"}
}
],
"additionalItems": false
},
"broadcast_message": {
"type": "string",
"description": "the message being broadcasted"
},
"num_primitive": {
"type": "array",
"items": [
{
"type": "number",
"enum": [4,5,6,7,8]
},
{"$ref":"#/definitions/stringOrNumber"}
],
"additionalItems": false
},
"color_primitive": {
"type": "array",
"items": [
{
"type": "number",
"enum": [9]
},
{
"type": "string",
"pattern": "^#[a-fA-F0-9]{6}$"
}
],
"additionalItems": false
},
"text_primitive": {
"type": "array",
"items": [
{
"type": "number",
"enum": [10]
},
{"$ref":"#/definitions/stringOrNumber"}
],
"additionalItems": false
},
"broadcast_primitive": {
"type": "array",
"items": [
{
"type": "number",
"enum": [11]
},
{"type": "string", "description": "broadcast message"},
{"type": "string", "description": "broadcast message id"}
],
"additionalItems": false
},
"variable_primitive": {
"type": "array",
"items": [
{
"type": "number",
"enum": [12]
},
{"type": "string", "description": "variable name"},
{"type": "string", "description": "variable id"}
],
"additionalItems": {
"type": "number"
},
"minItems": 3,
"maxItems": 5
},
"list_primitive": {
"type": "array",
"items": [
{
"type": "number",
"enum": [13]
},
{"type": "string", "description": "list name"},
{"type": "string", "description": "list id"}
],
"additionalItems": {
"type": "number"
},
"minItems": 3,
"maxItems": 5
},
"topLevelPrimitive": {
"oneOf": [
{"$ref":"#/definitions/variable_primitive"},
{"$ref":"#/definitions/list_primitive"}
]
},
"inputPrimitive": {
"oneOf": [
{"$ref":"#/definitions/num_primitive"},
{"$ref":"#/definitions/color_primitive"},
{"$ref":"#/definitions/text_primitive"},
{"$ref":"#/definitions/broadcast_primitive"},
{"$ref":"#/definitions/variable_primitive"},
{"$ref":"#/definitions/list_primitive"}
]
},
"block": {
"type": "object",
"properties": {
"opcode": {
"type": "string"
},
"comment": {
"type": "string"
},
"inputs": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": [
{
"type":"number",
"enum":[1,2,3],
"description": "1 = unobscured shadow, 2 = no shadow, 3 = obscured shadow"
}
],
"additionalItems": {
"oneOf": [
{"$ref":"#/definitions/optionalString"},
{"$ref":"#/definitions/inputPrimitive"}
]
}
}
},
"fields": {
"type": "object"
},
"next": {"$ref":"#/definitions/optionalString"},
"topLevel": {
"type": "boolean"
},
"parent": {"$ref":"#/definitions/optionalString"},
"shadow": {
"type": "boolean"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"mutation": {
"type": "object",
"properties": {
"tagName": {
"type": "string",
"enum": ["mutation"]
},
"children": {
"type": "array"
},
"proccode": {
"type": "string"
},
"argumentids": {
"type": "string"
},
"warp": {"$ref":"#/definitions/boolOrOptBoolString"},
"hasnext": {"$ref":"#/definitions/boolOrOptBoolString"}
}
}
},
"required": [
"opcode"
]
},
"comment": {
"type": "object",
"properties": {
"blockId": {"$ref": "#/definitions/optionalString"},
"text": {
"type": "string",
"maxLength": 8000
},
"minimized": {"type": "boolean"},
"x": {"$ref": "#/definitions/optionalNumber"},
"y": {"$ref": "#/definitions/optionalNumber"},
"width": {"type": "number"},
"height": {"type": "number"}
},
"required": [
"text"
]
},
"stage": {
"type": "object",
"description": "Description of property (and/or property/value pairs) that are unique to the stage.",
"properties": {
"name": {
"type": "string",
"enum": ["Stage"]
},
"isStage": {
"type": "boolean",
"enum": [true]
},
"tempo": {
"type": "number"
},
"videoTransparency": {
"type": "number"
},
"videoState": {
"type": "string",
"enum": ["on", "off", "on-flipped"]
},
"layerOrder": {
"type": "integer",
"enum": [0],
"description": "The layer order of the stage should be 0, if specified."
}
},
"required": [
"name",
"isStage"
]
},
"sprite": {
"type": "object",
"description": "Description of property (and/or property/value pairs) for sprites.",
"properties": {
"name": {
"type": "string",
"not": {"enum": ["_stage_"]}
},
"isStage": {
"type": "boolean",
"enum": [false]
},
"visible": {
"type": "boolean"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"size": {
"type": "number"
},
"direction": {
"type": "number"
},
"draggable": {
"type": "boolean"
},
"rotationStyle": {
"type": "string",
"enum": ["all around", "don't rotate", "left-right"]
},
"layerOrder": {
"type": "integer",
"minimum": 1,
"description": "The layer order of a sprite should be a positive number, if specified."
}
},
"required": [
"name",
"isStage"
]
},
"target": {
"type": "object",
"description" : "Properties common to both Scratch 3.0 Stage and Sprite",
"properties": {
"currentCostume": {
"type": "integer",
"minimum": 0
},
"blocks": {
"type": "object",
"additionalProperties": {
"oneOf": [
{"$ref":"#/definitions/block"},
{"$ref":"#/definitions/topLevelPrimitive"}
]
}
},
"variables": {
"type": "object",
"additionalProperties": {"$ref":"#/definitions/scalar_variable"}
},
"lists": {
"type": "object",
"additionalProperties": {"$ref":"#/definitions/list"}
},
"broadcasts": {
"type": "object",
"additionalProperties": {"$ref":"#/definitions/broadcast_message"}
},
"comments": {
"type": "object",
"additionalProperties": {"$ref": "#/definitions/comment"}
},
"costumes": {
"type": "array",
"items": {"$ref":"#/definitions/costume"},
"minItems": 1,
"uniqueItems": true
},
"sounds": {
"type": "array",
"items": {"$ref":"#/definitions/sound"},
"uniqueItems": true
},
"volume": {
"type": "number"
}
},
"required": [
"variables",
"costumes",
"sounds",
"blocks"
]
}
}
}