From 4a0b6f9fbd2297d39139baa7f08aca1fa4d12e24 Mon Sep 17 00:00:00 2001 From: Ben C Date: Wed, 23 Feb 2022 14:23:41 -0500 Subject: [PATCH] Updated Schemas --- NewHorizons/dialogue_schema.xsd | 83 +- NewHorizons/schema.json | 1663 +++++++++++-------------------- NewHorizons/shiplog_schema.xsd | 31 +- 3 files changed, 618 insertions(+), 1159 deletions(-) diff --git a/NewHorizons/dialogue_schema.xsd b/NewHorizons/dialogue_schema.xsd index f956f814..52d71f24 100644 --- a/NewHorizons/dialogue_schema.xsd +++ b/NewHorizons/dialogue_schema.xsd @@ -1,48 +1,55 @@  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NewHorizons/schema.json b/NewHorizons/schema.json index 966be976..a78ba3a7 100644 --- a/NewHorizons/schema.json +++ b/NewHorizons/schema.json @@ -1,5 +1,111 @@ { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$defs": { + "vector3": { + "type": "object", + "properties": { + "x": { + "type": "number", + "default": 0 + }, + "y": { + "type": "number", + "default": 0 + }, + "z": { + "type": "number", + "default": 0 + } + } + }, + "vector2": { + "type": "object", + "properties": { + "x": { + "type": "number", + "default": 0 + }, + "y": { + "type": "number", + "default": 0 + } + } + }, + "wholeVector2": { + "type": "object", + "properties": { + "x": { + "type": "integer", + "default": 0 + }, + "y": { + "type": "integer", + "default": 0 + } + } + }, + "colorPart": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "color": { + "type": "object", + "properties": { + "R": { + "$ref": "#/$defs/colorPart" + }, + "G": { + "$ref": "#/$defs/colorPart" + }, + "B": { + "$ref": "#/$defs/colorPart" + }, + "A": { + "$ref": "#/$defs/colorPart" + } + } + }, + "angle": { + "type": "number", + "default": 0, + "min": 0, + "max": 360 + }, + "curve": { + "type": "array", + "items": { + "type": "object", + "properties": { + "time": { + "type": "integer", + "default": 0 + }, + "value": { + "type": "number", + "default": 0 + } + } + } + }, + "procGen": { + "type": "object", + "properties": { + "scale": { + "type": "number", + "minimum": 0, + "description": "Average surface size" + }, + "colour": { + "$ref": "#/$defs/color", + "description": "Colour of the terrain." + } + } + } + }, "title": "Planet", + "description": "A planet or body to generate", "type": "object", "required": [ "name" @@ -66,7 +172,7 @@ "hasReferenceFrame": { "type": "boolean", "default": true, - "description": "Allows the object to be targetable from the map." + "description": "Allows the object to be targeted on the map." }, "centerOfSolarSystem": { "type": "boolean", @@ -89,33 +195,7 @@ "description": "Scale height of the atmosphere" }, "cloudTint": { - "type": "object", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color" }, "cloud": { "type": "string", @@ -140,34 +220,8 @@ "description": "If the top layer should have shadows" }, "fogTint": { - "type": "object", - "description": "Colour of fog on the planet.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color", + "description": "Colour of fog on the planet." }, "fogDensity": { "type": "number", @@ -176,7 +230,7 @@ }, "fogSize": { "type": "number", - "description": "Radius of fog sphere, independant of the atmosphere", + "description": "Radius of fog sphere, independent of the atmosphere", "minimum": 0 }, "hasRain": { @@ -197,34 +251,8 @@ "description": "Whether we use an atmospheric shader on the planet." }, "atmosphereTint": { - "type": "object", - "description": "Colour of atmospheric shader on the planet.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color", + "description": "Colour of atmospheric shader on the planet." } } }, @@ -238,8 +266,7 @@ "description": "The average distance between the planet and its primary body." }, "inclination": { - "type": "number", - "default": 0, + "$ref": "#/$defs/angle", "description": "The angle (in degrees) between the body's orbit and the plane of the star system" }, "primaryBody": { @@ -262,20 +289,13 @@ "maximum": 0.99 }, "argumentOfPeriapsis": { - "type": "number", - "default": 0, - "minimum": 0, - "maximum": 360 + "$ref": "#/$defs/angle" }, "trueAnomaly": { - "type": "number", - "default": 0, - "minimum": 0, - "maximum": 360 + "$ref": "#/$defs/angle" }, "axialTilt": { - "type": "number", - "default": 0 + "$ref": "#/$defs/angle" }, "siderealPeriod": { "type": "number", @@ -295,34 +315,8 @@ "description": "Is the body meant to stay in one place without moving?" }, "tint": { - "type": "object", - "description": "Colour of the orbitline in the map view.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color", + "description": "Colour of the orbit-line in the map view." } } }, @@ -344,10 +338,7 @@ "default": 0 }, "longitudeOfAscendingNode": { - "type": "number", - "default": 0, - "minimum": 0, - "maximum": 360 + "$ref": "#/$defs/angle" }, "texture": { "type": "string", @@ -358,20 +349,7 @@ "default": 0 }, "curve": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "integer", - "default": 0 - }, - "value": { - "type": "number", - "default": 0 - } - } - } + "$ref": "#/$defs/curve" } } }, @@ -397,44 +375,7 @@ } }, "ProcGen": { - "type": "object", - "properties": { - "scale": { - "type": "number", - "minimum": 0, - "description": "Average surface size" - }, - "colour": { - "type": "object", - "description": "Colour of the terrain.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } - } - } + "$ref": "#/$defs/procGen" }, "AsteroidBelt": { "type": "object", @@ -450,14 +391,10 @@ "minimum": 0 }, "inclination": { - "type": "number", - "default": 0 + "$ref": "#/$defs/angle" }, "longitudeOfAscendingNode": { - "type": "number", - "default": 0, - "minimum": 0, - "maximum": 360 + "$ref": "#/$defs/angle" }, "randomSeed": { "type": "integer", @@ -465,7 +402,7 @@ "description": "Number used to randomize asteroid positions" }, "procGen": { - "type": "object" + "$ref": "#/$defs/procGen" } } }, @@ -478,99 +415,21 @@ "minimum": 0 }, "tint": { - "type": "object", - "description": "Colour of the star.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color", + "description": "Colour of the star." }, "solarFlareTint": { - "type": "object", - "description": "Colour of the solar flares.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color", + "description": "Colour of the solar flares." }, "lightTint": { - "type": "object", - "description": "Colour of the light given off.", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } + "$ref": "#/$defs/color", + "description": "Colour of the light given off." }, "solarLuminosity": { "type": "number", "minimum": 0, - "description": "Relative strenght of the light compared to the sun", + "description": "Relative strength of the light compared to the sun", "default": 1 }, "hasAtmosphere": { @@ -578,20 +437,7 @@ "default": true }, "curve": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "integer", - "default": 0 - }, - "value": { - "type": "number", - "default": 0 - } - } - } + "$ref": "#/$defs/curve" } } }, @@ -626,862 +472,465 @@ }, "assetBundle": { "type": "string", - "description": "Relative filepath to an assetbundle" + "description": "Relative filepath to an asset-bundle" }, "offset": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - }, - "rotation": { - "type": "object", - "description": "Euler angle degrees", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - }, - "scale": { - "type": "number", - "default": 1 - }, - "generateColliders": { - "type": "bool", - "default": false, - "description": "For each mesh filter found here should we make a mesh collider?" - } - } - } - } - }, - "details": { - "type": "array", - "items": { - "type": "object", - "properties": { - "path": { - "type": "string", - "description": "Either the path in the scene hierarchy of the item to copy or the path to the object in the supplied asset bundle" + "$ref": "#/$defs/vector3" }, - "assetBundle": { - "type": "string", - "description": "Relative filepath to an assetbundle" - }, - "position": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - }, - "rotation": { - "type": "object", - "description": "Euler angle degrees", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - }, - "scale": { - "type": "number", - "default": 1 - }, - "alignToNormal": { - "type": "boolean", - "description": "Do we override rotation and try to automatically align this object to stand upright on the body's surface?", - "default": false - }, - "generateColliders": { - "type": "bool", - "default": false, - "description": "For each mesh filter found here should we make a mesh collider?" - } + "rotation": { + "$ref": "#/$defs/vector3", + "description": "Euler angle degrees" }, "scale": { "type": "number", "default": 1 - } - } - } - }, - "dialogue": { - "type": "array", - "items": { - "type": "object", - "properties": { - "position": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } }, - "radius": { - "type": "number", - "default": 0 - }, - "xmlFile": { - "type": "string" - }, - "remoteTriggerPosition": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - } - } - } - }, - "reveal": { - "type": "array", - "description": "A set of volumes that reveal ship log fact", - "items": { - "type": "object", - "properties": { - "revealOn": { - "type": "string", - "description": "'enter', 'observe', or 'snapshot' what needs to be done to the volume to unlock the facts" - }, - "reveals": { - "type": "array", - "description": "A list of facts to reveal", - "items": { - "type": "string" - } - }, - "position": { - "type": "object", - "description": "The position to place the volume at", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - }, - "radius": { - "type": "number", - "description": "The radius of the volume", - "default": 1.0 - }, - "maxDistance": { - "type": "number", - "description": "The max distance the user can be away from the volume to reveal the fact (snapshot and observe only)" - }, - "maxAngle": { - "type": "number", - "description": "The max view angle the player can see the volume with to unlock the fact", - "default": 180.0 - } - } - } - }, - "entryLocation": { - "type": "array", - "description": "A set of locations for ship log entries", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the entry this location is for" - }, - "cloaked": { + "generateColliders": { "type": "bool", - "description": "Whether this entry location is in a cloaking field", - "default": false - }, - "position": { - "type": "object", - "description": "The position of this entry location", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - } - } - } - } - } - }, - "Spawn": { - "type": "object", - "properties": { - "playerSpawnPoint": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - }, - "shipSpawnPoint": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - }, - "starWithSuit": { - "type": "boolean", - "default": false - } - } - }, - "Signal": { - "type": "object", - "properties": { - "signals": { - "type": "array", - "items": { - "type": "object", - "properties": { - "position": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - }, - "frequency": { - "type": "string", - "enum": [ - "Default", - "Traveler", - "Quantum", - "EscapePod", - "Statue", - "WarpCore", - "HideAndSeek", - "Radio" - ] - }, - "name": { - "type": "string" - }, - "audioClip": { - "type": "string", - "description": "Name of an existing AudioClip in the game" - }, - "audioFilePath": { - "type": "string", - "description": "Relative filepath to the .wav file to use as the audio. Mutually exclusive with audioClip" - }, - "reveals": { - "type": "string", - "description": "A ship log fact to reveal when the signal is identified" - }, - "sourceRadius": { - "type": "number", - "default": 1, - "description": "Radius of the sphere giving off the signal" - }, - "detectionRadius": { - "type": "number", - "minimum": 0, - "description": "How close the player must get to the signal to detect it" - }, - "identificationRadius": { - "type": "number", - "minimum": 0, - "description": "How close the player must get to the signal to identify it" - }, - "onlyAudibleToScope": { - "type": "boolean", - "default": true, - "description": "False if the player can hear the signal without equiping the signalscope" - }, - "insideCloak": { - "type": "boolean", "default": false, - "description": "Only set to true if you are putting this signal inside a cloaking field" + "description": "For each mesh filter found here should we make a mesh collider?" } } } } - } - }, - "Singularity": { - "type": "object", - "properties": { - "size": { - "type": "number", - "default": 0, - "minimum": 0 - }, - "pairedSingularity": { - "type": "string", - "description": "The name of the whitehole/blackhole that is paired to this one. If you don't set a value, entering will kill the player" - }, - "targetStarSystem": { - "type": "string", - "description": "If you want a black hole to load a new star system scene, put it's name here. Optional." - }, - "type": { - "type": "string", - "enum": [ - "BlackHole", - "WhiteHole" - ] - }, - "position": { + }, + "details": { + "type": "array", + "items": { "type": "object", "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - }, - "z": { - "type": "number", - "default": 0 - } - } - } - } - }, - "Water": { - "type": "object", - "properties": { - "size": { - "type": "number", - "default": 0 - }, - "tint": { - "type": "object", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } - }, - "curve": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "integer", - "default": 0 - }, - "value": { - "type": "number", - "default": 0 - } - } - } - } - } - }, - "Lava": { - "type": "object", - "properties": { - "size": { - "type": "number", - "default": 0 - }, - "curve": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "integer", - "default": 0 - }, - "value": { - "type": "number", - "default": 0 - } - } - } - } - } - }, - "Sand": { - "type": "object", - "properties": { - "size": { - "type": "number", - "default": 0 - }, - "tint": { - "type": "object", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } - }, - "curve": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "integer", - "default": 0 - }, - "value": { - "type": "number", - "default": 0 - } - } - } - } - } - }, - "Funnel": { - "type": "object", - "properties": { - "target": { - "type": "string", - "description": "The body that the funnel is pouring onto" - }, - "type": { - "type": "string", - "enum": [ - "Sand", - "Water", - "Lava", - "Star" - ], - "default": "Sand" - }, - "tint": { - "type": "object", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } - }, - "curve": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "integer", - "default": 0 - }, - "value": { - "type": "number", - "default": 0 - } - } - } - } - } - }, - "ShipLog": { - "type": "object", - "properties": { - "xmlFile": { - "type": "string", - "description": "The xml file to load ship log entries from" - }, - "spriteFolder": { - "type": "string", - "description": "A path to the folder where entry sprites are stored" - }, - "initialReveal": { - "type": "array", - "description": "A list of fact IDs to reveal when the game starts", - "items": { - "type": "string" - } - }, - "entryPositions": { - "type": "array", - "description": "A set of positions to use instead of automatic layout in rumor mode", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The name of the entry to apply the position" - }, - "position": { - "type": "object", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - } - } - } - } - } - }, - "MapMode": { - "type": "object", - "properties": { - "revealedSprite": { + "path": { "type": "string", - "description": "The path to the sprite to show when the planet is revealed in map mode" + "description": "Either the path in the scene hierarchy of the item to copy or the path to the object in the supplied asset bundle" }, - "outlineSprite": { + "assetBundle": { "type": "string", - "description": "The path to the sprite to show when the planet is unexplored in map mode" + "description": "Relative filepath to an asset-bundle" }, - "manualPosition": { - "type": "object", - "description": "Manually place this planet at the specified position", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - } - } + "position": { + "$ref": "#/$defs/vector3" }, - "manualNavigationPosition": { - "type": "object", - "description": "Specify where this planet is in terms of navigation", - "properties": { - "x": { - "type": "integer", - "default": 0 - }, - "y": { - "type": "integer", - "default": 0 - } - } + "rotation": { + "$ref": "#/$defs/vector3", + "description": "Euler angle degrees" }, "scale": { "type": "number", - "description": "Scale to apply to the planet in map mode", "default": 1 }, - "invisibleWhenHidden": { - "type": "bool", - "description": "Hide the planet completely if unexplored instead of showing an outline", - "default": false - }, - "offset": { - "type": "number", - "description": "Extra distance to apply to this object in map mode", - "default": 0 - }, - "remove": { + "alignToNormal": { "type": "boolean", - "description": "Completely remove this planet (and it's children) from map mode", + "description": "Do we override rotation and try to automatically align this object to stand upright on the body's surface?", "default": false }, - "details": { - "type": "array", - "description": "Place non-selectable object in map mode (like sand funnels)", - "items": { - "type": "object", - "properties": { - "revealedSprite": { - "type": "string", - "description": "The sprite to show when the parent AstroBody is revealed" - }, - "outlineSprite": { - "type": "string", - "description": "The sprite to show when the parent AstroBody is rumored/unexplored" - }, - "rotation": { - "type": "number", - "description": "The angle in degrees to rotate the detail", - "default": 0 - }, - "invisibleWhenHidden": { - "type": "boolean", - "description": "Whether to completely hide this detail when the parent AstroBody is unexplored", - "default": false - }, - "position": { - "type": "object", - "description": "The position (relative to the parent) to place the detail", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - } - } - }, - "scale": { - "type": "object", - "description": "The amount to scale the x and y axis of the detail by", - "properties": { - "x": { - "type": "number", - "default": 0 - }, - "y": { - "type": "number", - "default": 0 - } - } - } + "generateColliders": { + "type": "bool", + "default": false, + "description": "For each mesh filter found here should we make a mesh collider?" + } + }, + "scale": { + "type": "number", + "default": 1 + } + } + } + }, + "dialogue": { + "type": "array", + "items": { + "type": "object", + "properties": { + "position": { + "$ref": "#/$defs/vector3" + }, + "radius": { + "type": "number", + "default": 0 + }, + "xmlFile": { + "type": "string" + }, + "remoteTriggerPosition": { + "$ref": "#/$defs/vector3" + } + } + } + }, + "reveal": { + "type": "array", + "description": "A set of volumes that reveal ship log fact", + "items": { + "type": "object", + "properties": { + "revealOn": { + "type": "string", + "enum": ["enter", "observe", "snapshot"], + "description": "'enter', 'observe', or 'snapshot' what needs to be done to the volume to unlock the facts" + }, + "reveals": { + "type": "array", + "description": "A list of facts to reveal", + "items": { + "type": "string" + } + }, + "position": { + "$ref": "#/$defs/vector3", + "description": "The position to place the volume at" + }, + "radius": { + "type": "number", + "description": "The radius of the volume", + "default": 1.0 + }, + "maxDistance": { + "type": "number", + "description": "The max distance the user can be away from the volume to reveal the fact (snapshot and observe only)" + }, + "maxAngle": { + "$ref": "#/$defs/angle", + "description": "The max view angle (in degrees) the player can see the volume with to unlock the fact", + "default": 180.0 + } + } + } + }, + "entryLocation": { + "type": "array", + "description": "A set of locations for ship log entries", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the entry this location is for" + }, + "cloaked": { + "type": "bool", + "description": "Whether this entry location is in a cloaking field", + "default": false + }, + "position": { + "$ref": "#/$defs/vector3", + "description": "The position of this entry location" + } + } + } + } + }, + "Spawn": { + "type": "object", + "properties": { + "playerSpawnPoint": { + "$ref": "#/$defs/vector3" + }, + "shipSpawnPoint": { + "$ref": "#/$defs/vector3" + }, + "starWithSuit": { + "type": "boolean", + "default": false + } + } + }, + "Signal": { + "type": "object", + "properties": { + "signals": { + "type": "array", + "items": { + "type": "object", + "properties": { + "position": { + "$ref": "#/$defs/vector3" + }, + "frequency": { + "type": "string", + "enum": [ + "Default", + "Traveler", + "Quantum", + "EscapePod", + "Statue", + "WarpCore", + "HideAndSeek", + "Radio" + ] + }, + "name": { + "type": "string" + }, + "audioClip": { + "type": "string", + "description": "Name of an existing AudioClip in the game" + }, + "audioFilePath": { + "type": "string", + "description": "Relative filepath to the .wav file to use as the audio. Mutually exclusive with audioClip" + }, + "reveals": { + "type": "string", + "description": "A ship log fact to reveal when the signal is identified" + }, + "sourceRadius": { + "type": "number", + "default": 1, + "description": "Radius of the sphere giving off the signal" + }, + "detectionRadius": { + "type": "number", + "minimum": 0, + "description": "How close the player must get to the signal to detect it" + }, + "identificationRadius": { + "type": "number", + "minimum": 0, + "description": "How close the player must get to the signal to identify it" + }, + "onlyAudibleToScope": { + "type": "boolean", + "default": true, + "description": "False if the player can hear the signal without equipping the signal-scope" + }, + "insideCloak": { + "type": "boolean", + "default": false, + "description": "Only set to true if you are putting this signal inside a cloaking field" + } + } + } + } + } + }, + "Singularity": { + "type": "object", + "properties": { + "size": { + "type": "number", + "default": 0, + "minimum": 0 + }, + "pairedSingularity": { + "type": "string", + "description": "The name of the white hole or black hole that is paired to this one. If you don't set a value, entering will kill the player" + }, + "targetStarSystem": { + "type": "string", + "description": "If you want a black hole to load a new star system scene, put it's name here. Optional." + }, + "type": { + "type": "string", + "enum": [ + "BlackHole", + "WhiteHole" + ] + }, + "position": { + "$ref": "#/$defs/vector3" + } + } + }, + "Water": { + "type": "object", + "properties": { + "size": { + "type": "number", + "default": 0 + }, + "tint": { + "$ref": "#/$defs/color" + }, + "curve": { + "$ref": "#/$defs/curve" + } + } + }, + "Lava": { + "type": "object", + "properties": { + "size": { + "type": "number", + "default": 0 + }, + "tint": { + "$ref": "#/$defs/color" + }, + "curve": { + "$ref": "#/$defs/curve" + } + } + }, + "Sand": { + "type": "object", + "properties": { + "size": { + "type": "number", + "default": 0 + }, + "tint": { + "$ref": "#/$defs/color" + }, + "curve": { + "$ref": "#/$defs/curve" + } + } + }, + "Funnel": { + "type": "object", + "properties": { + "target": { + "type": "string", + "description": "The body that the funnel is pouring onto" + }, + "type": { + "type": "string", + "enum": [ + "Sand", + "Water", + "Lava", + "Star" + ], + "default": "Sand" + }, + "tint": { + "$ref": "#/$defs/color" + }, + "curve": { + "$ref": "#/$defs/curve" + } + } + }, + "ShipLog": { + "type": "object", + "properties": { + "xmlFile": { + "type": "string", + "description": "The xml file to load ship log entries from" + }, + "spriteFolder": { + "type": "string", + "description": "A path to the folder where entry sprites are stored" + }, + "initialReveal": { + "type": "array", + "description": "A list of fact IDs to reveal when the game starts", + "items": { + "type": "string" + } + }, + "entryPositions": { + "type": "array", + "description": "A set of positions to use instead of automatic layout in rumor mode", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The name of the entry to apply the position to" + }, + "position": { + "$ref": "#/$defs/vector2" + } + } + } + }, + "MapMode": { + "type": "object", + "properties": { + "revealedSprite": { + "type": "string", + "description": "The path to the sprite to show when the planet is revealed in map mode" + }, + "outlineSprite": { + "type": "string", + "description": "The path to the sprite to show when the planet is unexplored in map mode" + }, + "manualPosition": { + "$ref": "#/$defs/vector2", + "description": "Manually place this planet at the specified position" + }, + "manualNavigationPosition": { + "$ref": "#/$defs/wholeVector2", + "description": "Specify where this planet is in terms of navigation" + }, + "scale": { + "type": "number", + "description": "Scale to apply to the planet in map mode", + "default": 1 + }, + "invisibleWhenHidden": { + "type": "bool", + "description": "Hide the planet completely if unexplored instead of showing an outline", + "default": false + }, + "offset": { + "type": "number", + "description": "Extra distance to apply to this object in map mode", + "default": 0 + }, + "remove": { + "type": "boolean", + "description": "Completely remove this planet (and it's children) from map mode", + "default": false + }, + "details": { + "type": "array", + "description": "Place non-selectable object in map mode (like sand funnels)", + "items": { + "type": "object", + "properties": { + "revealedSprite": { + "type": "string", + "description": "The sprite to show when the parent AstroBody is revealed" + }, + "outlineSprite": { + "type": "string", + "description": "The sprite to show when the parent AstroBody is rumored/unexplored" + }, + "rotation": { + "$refs": "#/$defs/angle", + "description": "The angle in degrees to rotate the detail" + }, + "invisibleWhenHidden": { + "type": "boolean", + "description": "Whether to completely hide this detail when the parent AstroBody is unexplored", + "default": false + }, + "position": { + "$ref": "#/$defs/vector2", + "description": "The position (relative to the parent) to place the detail" + }, + "scale": { + "$ref": "#/$defs/vector2", + "description": "The amount to scale the x and y axis of the detail by" } } } } - }, - "Curiosities": { - "type": "array", - "description": "A set of colors to apply to curiosities", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the curiosity to apply the color to" - }, - "color": { - "type": "object", - "description": "The color to apply to entries with this curiosity", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } - }, - "highlightColor": { - "type": "object", - "description": "The color to apply to highlighted entries with this curiosity", - "properties": { - "R": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "G": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "B": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - }, - "A": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 255 - } - } - } + } + }, + "Curiosities": { + "type": "array", + "description": "A set of colors to apply to curiosities", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the curiosity to apply the color to" + }, + "color": { + "$ref": "#/$defs/color", + "description": "The color to apply to entries with this curiosity" + }, + "highlightColor": { + "$ref": "#/$defs/color", + "description": "The color to apply to highlighted entries with this curiosity" } } } } } } -} \ No newline at end of file +} diff --git a/NewHorizons/shiplog_schema.xsd b/NewHorizons/shiplog_schema.xsd index c6b77898..1267cb7d 100644 --- a/NewHorizons/shiplog_schema.xsd +++ b/NewHorizons/shiplog_schema.xsd @@ -5,51 +5,54 @@ - + + + + - + - - + + - - - + + + - + - - + + - + - - + + - +