{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Celestial Body Schema", "type": "object", "description": "Describes a celestial body to generate", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "Unique name of your planet. If not specified, the file name (without the extension) is used." }, "starSystem": { "type": "string", "description": "Unique star system containing your planet. If you set this to be a custom solar system remember to add a Spawn module to one of the bodies, or else you can't get to the system.", "default": "SolarSystem" }, "isQuantumState": { "type": "boolean", "description": "Does this config describe a quantum state of a custom planet defined in another file?" }, "isStellarRemnant": { "type": "boolean", "description": "Does this config describe a stellar remnant of a custom star defined in another file?" }, "canShowOnTitle": { "type": "boolean", "description": "Should this planet ever be shown on the title screen?", "default": true }, "destroy": { "type": "boolean", "description": "`true` if you want to delete this planet" }, "removeChildren": { "type": "array", "description": "A list of paths to child GameObjects to destroy on this planet", "items": { "type": "string" } }, "AmbientLights": { "type": "array", "description": "Add ambient lights to this body", "items": { "$ref": "#/definitions/AmbientLightModule" } }, "AsteroidBelt": { "description": "Generate asteroids around this body", "$ref": "#/definitions/AsteroidBeltModule" }, "Atmosphere": { "description": "Describes this Body's atmosphere", "$ref": "#/definitions/AtmosphereModule" }, "Base": { "description": "Base Properties of this Body", "$ref": "#/definitions/BaseModule" }, "Bramble": { "description": "Add bramble nodes to this planet and/or make this planet a bramble dimension", "$ref": "#/definitions/BrambleModule" }, "Cloak": { "description": "Add a cloaking field to this planet", "$ref": "#/definitions/CloakModule" }, "Dream": { "description": "Make this planet part of the dream world", "$ref": "#/definitions/DreamModule" }, "FocalPoint": { "description": "Make this body into a focal point (barycenter)", "$ref": "#/definitions/FocalPointModule" }, "Funnel": { "description": "Add funnel from this planet to another", "$ref": "#/definitions/FunnelModule" }, "HeightMap": { "description": "Generate the surface of this planet using a heightmap", "$ref": "#/definitions/HeightMapModule" }, "Lava": { "description": "Add lava to this planet", "$ref": "#/definitions/LavaModule" }, "MapMarker": { "description": "Map marker properties of this body", "$ref": "#/definitions/MapMarkerModule" }, "Orbit": { "description": "Describes this Body's orbit (or lack there of)", "$ref": "#/definitions/OrbitModule" }, "ProcGen": { "description": "Procedural Generation", "$ref": "#/definitions/ProcGenModule" }, "Props": { "description": "Spawn various objects on this body", "$ref": "#/definitions/PropModule" }, "ReferenceFrame": { "description": "Reference frame properties of this body", "$ref": "#/definitions/ReferenceFrameModule" }, "Rings": { "type": "array", "description": "Create rings around the planet", "items": { "$ref": "#/definitions/RingModule" } }, "Sand": { "description": "Add sand to this planet", "$ref": "#/definitions/SandModule" }, "ShipLog": { "description": "Add ship log entries to this planet and describe how it looks in map mode", "$ref": "#/definitions/ShipLogModule" }, "ShockEffect": { "description": "Settings for shock effect on planet when the nearest star goes supernova", "$ref": "#/definitions/ShockEffectModule" }, "Spawn": { "description": "Spawn the player at this planet", "$ref": "#/definitions/SpawnModule" }, "Star": { "description": "Make this body a star", "$ref": "#/definitions/StarModule" }, "Water": { "description": "Add water to this planet", "$ref": "#/definitions/WaterModule" }, "ParticleFields": { "type": "array", "description": "Add particle effects in a field around the planet.\nAlso known as Vection Fields.", "items": { "$ref": "#/definitions/ParticleFieldModule" } }, "Volumes": { "description": "Add various volumes on this body", "$ref": "#/definitions/VolumesModule" }, "CometTail": { "description": "Add a comet tail to this body, like the Interloper", "$ref": "#/definitions/CometTailModule" }, "extras": { "type": "object", "description": "Extra data that may be used by extension mods", "additionalProperties": { "type": "object" } }, "$schema": { "type": "string", "description": "The schema to validate with" } }, "definitions": { "AmbientLightModule": { "type": "object", "additionalProperties": false, "properties": { "outerRadius": { "type": [ "null", "number" ], "description": "The range of the light. Defaults to surfaceSize * 2.", "format": "float", "minimum": 0.0 }, "innerRadius": { "type": [ "null", "number" ], "description": "The lower radius where the light is brightest, fading in from outerRadius. Defaults to surfaceSize.", "format": "float", "minimum": 0.0 }, "intensity": { "type": "number", "description": "The brightness of the light. For reference, Timber Hearth is `1.4`, and Giant's Deep is `0.8`.", "format": "float", "default": 1.0, "minimum": 0.0 }, "tint": { "description": "The tint of the light", "$ref": "#/definitions/MColor" }, "isShell": { "type": "boolean", "description": "If true, the light will work as a shell between inner and outer radius.", "default": false }, "position": { "description": "The position of the light", "$ref": "#/definitions/MVector3" } } }, "MColor": { "type": "object", "additionalProperties": false, "properties": { "r": { "type": "integer", "description": "The red component of this colour from 0-255, higher values will make the colour glow if applicable.", "format": "int32", "maximum": 2147483647.0, "minimum": 0.0 }, "g": { "type": "integer", "description": "The green component of this colour from 0-255, higher values will make the colour glow if applicable.", "format": "int32", "maximum": 2147483647.0, "minimum": 0.0 }, "b": { "type": "integer", "description": "The blue component of this colour from 0-255, higher values will make the colour glow if applicable.", "format": "int32", "maximum": 2147483647.0, "minimum": 0.0 }, "a": { "type": "integer", "description": "The alpha (opacity) component of this colour", "format": "int32", "default": 255, "maximum": 255.0, "minimum": 0.0 } } }, "MVector3": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "float" }, "y": { "type": "number", "format": "float" }, "z": { "type": "number", "format": "float" } } }, "AsteroidBeltModule": { "type": "object", "additionalProperties": false, "properties": { "amount": { "type": "integer", "description": "Amount of asteroids to create.", "format": "int32", "default": -1, "maximum": 200.0, "minimum": -1.0 }, "inclination": { "type": "number", "description": "Angle between the rings and the equatorial plane of the planet.", "format": "float" }, "innerRadius": { "type": "number", "description": "Lowest distance from the planet asteroids can spawn", "format": "float", "minimum": 0.0 }, "longitudeOfAscendingNode": { "type": "number", "description": "Angle defining the point where the rings rise up from the planet's equatorial plane if inclination is nonzero.", "format": "float" }, "maxSize": { "type": "number", "description": "Maximum size of the asteroids.", "format": "float", "default": 50, "minimum": 0.0 }, "minSize": { "type": "number", "description": "Minimum size of the asteroids.", "format": "float", "default": 20, "minimum": 0.0 }, "outerRadius": { "type": "number", "description": "Greatest distance from the planet asteroids can spawn", "format": "float", "minimum": 0.0 }, "procGen": { "description": "How the asteroids are generated", "$ref": "#/definitions/ProcGenModule" }, "randomSeed": { "type": "integer", "description": "Number used to randomize asteroid positions", "format": "int32" } } }, "ProcGenModule": { "type": "object", "additionalProperties": false, "properties": { "color": { "$ref": "#/definitions/MColor" }, "scale": { "type": "number", "format": "float", "minimum": 0.0 } } }, "AtmosphereModule": { "type": "object", "additionalProperties": false, "properties": { "atmosphereTint": { "description": "Colour of atmospheric shader on the planet.", "$ref": "#/definitions/MColor" }, "atmosphereSunIntensity": { "type": "number", "description": "How intense should the sun appear in the sky.\nAlso affects general atmosphere brightness.\nDefault value of 1 matches Timber Hearth.\nIf not set, this will be determined based off the distance to the sun.", "format": "float", "minimum": 0.0 }, "clouds": { "description": "Describes the clouds in the atmosphere", "$ref": "#/definitions/CloudInfo" }, "fogDensity": { "type": "number", "description": "How dense the fog is, if you put fog.", "format": "float", "minimum": 0.0 }, "fogSize": { "type": "number", "description": "Radius of fog sphere, independent of the atmosphere. This has to be set for there to be fog.", "format": "float", "minimum": 0.0 }, "fogTint": { "description": "Colour of fog on the planet, if you put fog.", "$ref": "#/definitions/MColor" }, "fogRampPath": { "type": "string", "description": "Relative filepath to the fog color ramp texture, if you put fog.\nx axis is angle to sun (left at midnight, right at noon), y axis is distance to camera (close at bottom, far at top).\nOptional. If you set fogTint, a default fog ramp will be tinted for you." }, "hasOxygen": { "type": "boolean", "description": "Lets you survive on the planet without a suit." }, "hasTrees": { "type": "boolean", "description": "Does this planet have trees? This will change the notification from \"Oxygen tank refilled\" to \"Trees detected, oxygen tank refilled\"." }, "hasRain": { "type": "boolean", "description": "Does this planet have rain? \nThis is equivalent to effects of setting a rain particle/vection field, rain audio volume, and visor effect volume, combined for convenience.\nFor more control over the rain, use those individual components." }, "size": { "type": "number", "description": "Scale height of the atmosphere", "format": "float" }, "useAtmosphereShader": { "type": "boolean", "description": "Whether we use an atmospheric shader on the planet. Doesn't affect clouds, fog, rain, snow, oxygen, etc. Purely\nvisual." }, "hasShockLayer": { "type": "boolean", "description": "Whether this atmosphere will have flames appear when your ship goes a certain speed.", "default": true }, "minShockSpeed": { "type": "number", "description": "Minimum speed that your ship can go in the atmosphere where flames will appear.", "format": "float", "default": 100.0 }, "maxShockSpeed": { "type": "number", "description": "Maximum speed that your ship can go in the atmosphere where flames will appear at their brightest.", "format": "float", "default": 300.0 }, "allowShipAutoroll": { "type": "boolean", "description": "Will the ship automatically try to orient itself to face upwards while in this volume?", "default": true } } }, "CloudInfo": { "type": "object", "additionalProperties": false, "properties": { "cloudsPrefab": { "description": "Should these clouds be based on Giant's Deep's banded clouds, or the Quantum Moon's non-banded clouds?", "$ref": "#/definitions/CloudPrefabType" }, "capPath": { "type": "string", "description": "Relative filepath to the cloud cap texture, if the planet has clouds." }, "fluidType": { "description": "Fluid type for sounds/effects when colliding with this cloud.", "default": "cloud", "$ref": "#/definitions/NHFluidType" }, "hasLightning": { "type": "boolean", "description": "Add lightning to this planet like on Giant's Deep." }, "innerCloudRadius": { "type": "number", "description": "Radius from the center to the inner layer of the clouds.", "format": "float" }, "lightningGradient": { "type": "array", "description": "Colour gradient of the lightning, time is in seconds.", "items": { "$ref": "#/definitions/MGradient" } }, "outerCloudRadius": { "type": "number", "description": "Radius from the center to the outer layer of the clouds.", "format": "float" }, "rampPath": { "type": "string", "description": "Relative filepath to the cloud ramp texture, if the planet has clouds. If you don't put anything here it will be\nauto-generated." }, "texturePath": { "type": "string", "description": "Relative filepath to the cloud texture, if the planet has clouds." }, "tint": { "description": "Colour of the inner cloud layer.", "$ref": "#/definitions/MColor" }, "unlit": { "type": "boolean", "description": "If the top layer shouldn't have shadows. Set to true if you're making a brown dwarf for example." }, "rotationSpeed": { "type": "number", "description": "How fast the clouds will rotate relative to the planet in degrees per second.", "format": "float", "default": 0.0 } } }, "CloudPrefabType": { "type": "string", "description": "", "x-enumNames": [ "GiantsDeep", "QuantumMoon", "Basic", "Transparent" ], "enum": [ "giantsDeep", "quantumMoon", "basic", "transparent" ] }, "NHFluidType": { "type": "string", "description": "", "x-enumNames": [ "NONE", "AIR", "WATER", "TRACTOR_BEAM", "CLOUD", "SAND", "PLASMA", "FOG", "GEYSER" ], "enum": [ "none", "air", "water", "tractorBeam", "cloud", "sand", "plasma", "fog", "geyser" ] }, "MGradient": { "type": "object", "additionalProperties": false, "properties": { "time": { "type": "number", "format": "float" }, "tint": { "$ref": "#/definitions/MColor" } } }, "BaseModule": { "type": "object", "additionalProperties": false, "properties": { "centerOfSolarSystem": { "type": "boolean", "description": "Set this to true if you are replacing the sun with a different body. Only one object in a star system should ever\nhave this set to true." }, "gravityFallOff": { "description": "How gravity falls off with distance. Most planets use linear but the sun and some moons use inverseSquared.", "default": "linear", "$ref": "#/definitions/GravityFallOff" }, "groundSize": { "type": "number", "description": "Radius of a simple sphere used as the ground for the planet. If you want to use more complex terrain, leave this as\n0.", "format": "float" }, "hasFluidDetector": { "type": "boolean", "description": "Is this planet able to detect fluid volumes? Disabling this means that entering a star or lava volume will not destroy this planet\nMay have adverse effects if anglerfish are added to this planet, disable this if you want those to work (they have fluid volumes in their mouths)", "default": true }, "showMinimap": { "type": "boolean", "description": "Do we show the minimap when walking around this planet?", "default": true }, "soiOverride": { "type": "number", "description": "An override for the radius of the planet's gravitational sphere of influence. Optional", "format": "float" }, "surfaceGravity": { "type": "number", "description": "The acceleration due to gravity felt as the surfaceSize. Timber Hearth has 12 for reference", "format": "float" }, "surfaceSize": { "type": "number", "description": "A scale height used for a number of things. Should be the approximate radius of the body.\n\nAffected settings include: Base sector size, proxy body scaling, surface gravity", "format": "float" }, "gravityVolumePriority": { "type": "integer", "description": "Optional. You can force this planet's gravity to be felt over other gravity/zero-gravity sources by increasing this number.", "format": "int32", "default": 0 }, "pushable": { "type": "boolean", "description": "Apply physics to this planet when you bump into it. Will have a spherical collider the size of surfaceSize. \nFor custom colliders they have to all be convex and you can leave surface size as 0.\nThis is meant for stuff like satellites which are relatively simple and can be de-orbited.\nIf you are using an orbit line but a tracking line, it will be removed when the planet is bumped in to." }, "hideProxy": { "type": "boolean", "description": "Set this to true to have no proxy be generated for this planet. \nThis is a small representation of the planet that appears when it is outside of the regular Unity camera range." } } }, "GravityFallOff": { "type": "string", "description": "", "x-enumNames": [ "Linear", "InverseSquared" ], "enum": [ "linear", "inverseSquared" ] }, "BrambleModule": { "type": "object", "additionalProperties": false, "properties": { "dimension": { "description": "Defining this value will make this body a bramble dimension. Leave it null to not do that.", "$ref": "#/definitions/BrambleDimensionInfo" }, "nodes": { "type": "array", "description": "Place nodes/seeds that take you to other bramble dimensions", "items": { "$ref": "#/definitions/BrambleNodeInfo" } } } }, "BrambleDimensionInfo": { "type": "object", "additionalProperties": false, "properties": { "fogTint": { "description": "The color of the fog inside this dimension. \nLeave blank for the default grayish color: (84, 83, 73)\nThe alpha value has no effect of the fog: Use fogDensity instead!", "$ref": "#/definitions/MColor" }, "fogDensity": { "type": "number", "description": "The density of the fog inside this dimension. The default is 6. If you want no fog, set this to 0.", "format": "float", "default": 6.0 }, "linksTo": { "type": "string", "description": "The name of the *node* that the player is taken to when exiting this dimension." }, "radius": { "type": "number", "description": "The internal radius (in meters) of the dimension. \nThe default is 750 for the Hub, Escape Pod, and Angler Nest dimensions, and 500 for the others.", "format": "float", "default": 750.0 }, "vinePrefab": { "description": "The dimension the vines will be copied from.\nOnly a handful are available due to batched colliders.", "default": "hub", "$ref": "#/definitions/VinePrefabType" }, "allowedEntrances": { "type": "array", "description": "An array of integers from 0-5. By default, all entrances are allowed. To force this dimension to warp players in from only one point (like the anglerfish nest dimension in the base game) set this value to [3], [5], or similar. Values of 0-5 only.", "items": { "type": "integer", "format": "int32" } } } }, "VinePrefabType": { "type": "string", "description": "", "x-enumNames": [ "None", "Hub", "Cluster", "SmallNest", "ExitOnly" ], "enum": [ "none", "hub", "cluster", "smallNest", "exitOnly" ] }, "BrambleNodeInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "scale": { "type": "number", "description": "The physical scale of the node, as a multiplier of the original size. \nNodes are 150m across, seeds are 10m across.", "format": "float", "default": 1.0 }, "linksTo": { "type": "string", "description": "The name of the planet that hosts the dimension this node links to" }, "name": { "type": "string", "description": "The name of this node. Only required if this node should serve as an exit." }, "isSeed": { "type": "boolean", "description": "Set this to true to make this node a seed instead of a node the player can enter", "default": false }, "fogTint": { "description": "The color of the fog inside the node. \nLeave blank for the default yellowish white color: (255, 245, 217, 255)", "$ref": "#/definitions/MColor" }, "lightTint": { "description": "The color of the light from the node. Alpha controls brightness.\nLeave blank for the default white color.", "$ref": "#/definitions/MColor" }, "hasFogLight": { "type": [ "boolean", "null" ], "description": "Should this node have a point of light from afar? \nBy default, nodes will have a foglight, while seeds won't, and neither will if not in a dimension." }, "possibleExits": { "type": "array", "description": "An array of integers from 0-5. By default, all exits are allowed. To force this node to warp players out from only one hole set this value to [3], [5], or similar. Values of 0-5 only.", "items": { "type": "integer", "format": "int32" } }, "preventRecursionCrash": { "type": "boolean", "description": "If your game hard crashes upon entering bramble, it's most likely because you have indirectly recursive dimensions, i.e. one leads to another that leads back to the first one.\nSet this to true for one of the nodes in the recursion to fix this, at the cost of it no longer showing markers for the scout, ship, etc.", "default": false } } }, "CloakModule": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "Radius of the cloaking field around the planet. For the Stranger this is 3000", "format": "float" }, "cloakScaleDist": { "type": [ "null", "number" ], "description": "Not sure what this is. For the Stranger it is 2000. Optional (will default to be proportional to the cloak radius).", "format": "float" }, "innerCloakRadius": { "type": [ "null", "number" ], "format": "float" }, "nearCloakRadius": { "type": [ "null", "number" ], "format": "float" }, "farCloakRadius": { "type": [ "null", "number" ], "format": "float" }, "audio": { "type": "string", "description": "The audio that will play when entering the cloaking field. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." } } }, "DreamModule": { "type": "object", "additionalProperties": false, "properties": { "inDreamWorld": { "type": "boolean", "description": "Setting this value will make this body a dream world style dimension where its contents are only activated while entering it from a dream campfire. Disables the body's map marker." }, "generateSimulationMeshes": { "type": "boolean", "description": "Whether to generate simulation meshes (the models used in the \"tronworld\" or \"matrix\" view) for most objects on this planet by cloning the existing meshes and applying the simulation materials. Leave this off if you are building your own simulation meshes or using existing objects which have them." } } }, "FocalPointModule": { "type": "object", "additionalProperties": false, "properties": { "primary": { "type": "string", "description": "Name of the primary planet in this binary system" }, "secondary": { "type": "string", "description": "Name of the secondary planet in this binary system" } } }, "FunnelModule": { "type": "object", "additionalProperties": false, "properties": { "curve": { "type": "array", "description": "Scale this object over time. Time value is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "target": { "type": "string", "description": "The planet the funnel will flow to" }, "tint": { "description": "Tint of the funnel", "$ref": "#/definitions/MColor" }, "type": { "description": "Type of fluid the funnel transfers", "default": "sand", "$ref": "#/definitions/FunnelType" } } }, "TimeValuePair": { "type": "object", "additionalProperties": false, "properties": { "time": { "type": "number", "description": "A specific point in time", "format": "float" }, "value": { "type": "number", "description": "The value for this point in time", "format": "float" } } }, "FunnelType": { "type": "string", "description": "", "x-enumNames": [ "Sand", "Water", "Lava", "Star" ], "enum": [ "sand", "water", "lava", "star" ] }, "HeightMapModule": { "type": "object", "additionalProperties": false, "properties": { "heightMap": { "type": "string", "description": "Relative filepath to the texture used for the terrain height." }, "maxHeight": { "type": "number", "description": "The highest points on your planet will be at this height.", "format": "float", "minimum": 0.0 }, "minHeight": { "type": "number", "description": "The lowest points on your planet will be at this height.", "format": "float", "minimum": 0.0 }, "stretch": { "description": "The scale of the terrain.", "$ref": "#/definitions/MVector3" }, "resolution": { "type": "integer", "description": "Resolution of the heightmap.\nHigher values means more detail but also more memory/cpu/gpu usage.\nThis value will be 1:1 with the heightmap texture width, but only at the equator.", "format": "int32", "default": 204, "maximum": 2000.0, "minimum": 4.0 }, "textureMap": { "type": "string", "description": "Relative filepath to the texture used for the terrain colors." }, "smoothnessMap": { "type": "string", "description": "Relative filepath to the texture used for the terrain's smoothness and metallic, which are controlled by the texture's alpha and red channels respectively. Optional.\nTypically black with variable transparency, when metallic isn't wanted." }, "smoothness": { "type": "number", "description": "How \"glossy\" the surface is, where 0 is diffuse, and 1 is like a mirror.\nMultiplies with the alpha of the smoothness map if using one.", "format": "float", "default": 0.0, "maximum": 1.0, "minimum": 0.0 }, "metallic": { "type": "number", "description": "How metallic the surface is, from 0 to 1.\nMultiplies with the red of the smoothness map if using one.", "format": "float", "default": 0.0, "maximum": 1.0, "minimum": 0.0 }, "normalMap": { "type": "string", "description": "Relative filepath to the texture used for the normal (aka bump) map. Optional." }, "normalStrength": { "type": "number", "description": "Strength of the normal map. Usually 0-1, but can go above, or negative to invert the map.", "format": "float", "default": 1.0 }, "emissionMap": { "type": "string", "description": "Relative filepath to the texture used for emission. Optional." }, "emissionColor": { "description": "Color multiplier of the emission texture. Defaults to white.", "$ref": "#/definitions/MColor" }, "tileBlendMap": { "type": "string", "description": "Relative filepath to the texture used for blending up to 5 tiles together, using the red, green, blue, and alpha channels, plus a lack of all 4 for a fifth \"base\" tile.\nOptional, even if using tiles (defaults to white, therefore either base or all other channels will be active)." }, "baseTile": { "description": "An optional set of textures that can tile and combine with the main maps. This tile will appear when all other tile channels are absent in the blend map, or when no other tiles are defined.\nNote that tiles will not be active from afar, so it is recommended to make the main textures control the general appearance, and make the tiles handle up close details.", "$ref": "#/definitions/HeightMapTileInfo" }, "redTile": { "description": "An optional set of textures that can tile and combine with the main maps. The distribution of this tile is controlled by red channel of the blend map.\nNote that tiles will not be active from afar, so it is recommended to make the main maps control the general appearance more than the tiles.", "$ref": "#/definitions/HeightMapTileInfo" }, "greenTile": { "description": "An optional set of textures that can tile and combine with the main maps. The distribution of this tile is controlled by green channel of the blend map.\nNote that tiles will not be active from afar, so it is recommended to make the main maps control the general appearance more than the tiles.", "$ref": "#/definitions/HeightMapTileInfo" }, "blueTile": { "description": "An optional set of textures that can tile and combine with the main maps. The distribution of this tile is controlled by blue channel of the blend map.\nNote that tiles will not be active from afar, so it is recommended to make the main maps control the general appearance more than the tiles.", "$ref": "#/definitions/HeightMapTileInfo" }, "alphaTile": { "description": "An optional set of textures that can tile and combine with the main maps. The distribution of this tile is controlled by alpha channel of the blend map.\nNote that tiles will not be active from afar, so it is recommended to make the main maps control the general appearance more than the tiles.", "$ref": "#/definitions/HeightMapTileInfo" } } }, "HeightMapTileInfo": { "type": "object", "additionalProperties": false, "properties": { "size": { "type": "number", "description": "The size, in meters, of each tile.", "format": "float", "default": 1.0, "minimum": 0.0 }, "textureTile": { "type": "string", "description": "Relative filepath to a color texture. Optional.\nNote that this tile texture will be multiplied with the main texture map. This means that white will multiply by 2, black by 0, and grey by 1.\nThus, a texture that stays near (128, 128, 128) will blend nicely with the main texture map below.\nColors other than greyscale can be used, but they might multiply strangely." }, "smoothnessTile": { "type": "string", "description": "Relative filepath to a texture for smoothness and metallic, which are controlled by the texture's alpha and red channels respectively. Optional.\nNote that this tile texture will be multiplied with the main smoothness map and/or values. This means that black/red will multiply by 2, transparent by 0, and half transparent by 1.\nThus, a texture that stays near half alpha/red will blend nicely with the main smoothness map below." }, "normalTile": { "type": "string", "description": "Relative filepath to a normal (aka bump) texture. Optional.\nBlends additively with the main normal map." }, "normalStrength": { "type": "number", "description": "Strength of the tile normal. Usually 0-1, but can go above, or negative to invert the map.", "format": "float", "default": 1.0 } } }, "LavaModule": { "type": "object", "additionalProperties": false, "properties": { "curve": { "type": "array", "description": "Scale this object over time. Time value is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "size": { "type": "number", "description": "Size of the lava sphere", "format": "float" }, "tint": { "description": "Tint of the lava", "$ref": "#/definitions/MColor" } } }, "MapMarkerModule": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "description": "If the body should have a marker on the map screen." }, "minDisplayDistanceOverride": { "type": "number", "description": "Lowest distance away from the body that the marker can be shown. This is automatically set to 0 for all bodies except focal points where it is 5,000.", "format": "float" }, "maxDisplayDistanceOverride": { "type": "number", "description": "Highest distance away from the body that the marker can be shown. For planets and focal points the automatic value is 50,000. Moons and planets in focal points are 5,000. Stars are 1E+10 (10,000,000,000).", "format": "float" } } }, "OrbitModule": { "type": "object", "additionalProperties": false, "properties": { "staticPosition": { "description": "Specify this if you want the body to remain stationary at a given location (ie not orbit its parent). Required for Bramble dimensions", "$ref": "#/definitions/MVector3" }, "primaryBody": { "type": "string", "description": "The name of the body this one will orbit around" }, "isMoon": { "type": "boolean", "description": "Is this the moon of a planet? Used for determining when its name is shown on the map." }, "axialTilt": { "type": "number", "description": "The angle between the normal to the orbital plane and its axis of rotation.", "format": "float" }, "siderealPeriod": { "type": "number", "description": "Rotation period in minutes.", "format": "float" }, "initialRotation": { "type": "number", "description": "Offsets the planet's starting sidereal rotation. In degrees.", "format": "float", "maximum": 360.0, "minimum": 0.0 }, "isTidallyLocked": { "type": "boolean", "description": "Should the body always have one side facing its primary?" }, "isStatic": { "type": "boolean", "description": "Is the body meant to stay in one place without moving? If staticPosition is not set, the initial position\nwill be determined using its orbital parameters." }, "alignmentAxis": { "description": "If it is tidally locked, this direction will face towards the primary. Ex: Interloper uses `0, -1, 0`. Most planets\nwill want something like `-1, 0, 0`.", "$ref": "#/definitions/MVector3" }, "showOrbitLine": { "type": "boolean", "description": "Referring to the orbit line in the map screen.", "default": true }, "dottedOrbitLine": { "type": "boolean", "description": "Should the orbit line be dotted?" }, "tint": { "description": "Colour of the orbit-line in the map view.", "$ref": "#/definitions/MColor" }, "trackingOrbitLine": { "type": "boolean", "description": "Should we just draw a line behind its orbit instead of the entire circle/ellipse?" }, "orbitLineFadeEndDistance": { "type": "number", "description": "If the camera is farther than this distance the orbit line will fade out. Leave empty to not have it fade out.", "format": "float" }, "orbitLineFadeStartDistance": { "type": "number", "description": "If the camera is closer than this distance the orbit line will fade out. Leave empty to not have it fade out.", "format": "float" }, "semiMajorAxis": { "type": "number", "description": "The semi-major axis of the ellipse that is the body's orbit. For a circular orbit this is the radius.", "format": "float", "minimum": 0.0 }, "inclination": { "type": "number", "description": "The angle (in degrees) between the body's orbit and the plane of the star system", "format": "float" }, "longitudeOfAscendingNode": { "type": "number", "description": "An angle (in degrees) defining the point where the orbit of the body rises above the orbital plane if it has\nnonzero inclination.", "format": "float" }, "eccentricity": { "type": "number", "description": "At 0 the orbit is a circle. The closer to 1 it is, the more oval-shaped the orbit is.", "format": "float", "maximum": 1.0, "minimum": 0.0 }, "argumentOfPeriapsis": { "type": "number", "description": "An angle (in degrees) defining the location of the periapsis (the closest distance to it's primary body) if it has\nnonzero eccentricity.", "format": "float" }, "trueAnomaly": { "type": "number", "description": "Where the planet should start off in its orbit in terms of the central angle.", "format": "float" } } }, "PropModule": { "type": "object", "additionalProperties": false, "properties": { "details": { "type": "array", "description": "Place props in predefined positions on the planet", "items": { "$ref": "#/definitions/DetailInfo" } }, "dialogue": { "type": "array", "description": "Add dialogue triggers to this planet", "items": { "$ref": "#/definitions/DialogueInfo" } }, "entryLocation": { "type": "array", "description": "Add ship log entry locations on this planet", "items": { "$ref": "#/definitions/EntryLocationInfo" } }, "geysers": { "type": "array", "description": "Add Geysers to this planet", "items": { "$ref": "#/definitions/GeyserInfo" } }, "translatorText": { "type": "array", "description": "Add translatable text to this planet", "items": { "$ref": "#/definitions/TranslatorTextInfo" } }, "proxyDetails": { "type": "array", "description": "Details which will be shown from 50km away. Meant to be lower resolution.", "items": { "$ref": "#/definitions/DetailInfo" } }, "rafts": { "type": "array", "description": "Add rafts to this planet (requires Echoes of the Eye DLC)", "items": { "$ref": "#/definitions/RaftInfo" } }, "scatter": { "type": "array", "description": "Scatter props around this planet's surface", "items": { "$ref": "#/definitions/ScatterInfo" } }, "slideShows": { "type": "array", "description": "Add slideshows to the planet (requires Echoes of the Eye DLC)", "items": { "$ref": "#/definitions/ProjectionInfo" } }, "quantumGroups": { "type": "array", "description": "A list of quantum groups that props can be added to. An example of a group would be a list of possible locations for a QuantumSocketedObject.", "items": { "$ref": "#/definitions/QuantumGroupInfo" } }, "tornados": { "type": "array", "description": "Add tornadoes to this planet", "items": { "$ref": "#/definitions/TornadoInfo" } }, "volcanoes": { "type": "array", "description": "Add volcanoes to this planet", "items": { "$ref": "#/definitions/VolcanoInfo" } }, "singularities": { "type": "array", "description": "Add black/white-holes to this planet", "items": { "$ref": "#/definitions/SingularityModule" } }, "signals": { "type": "array", "description": "Add signalscope signals to this planet", "items": { "$ref": "#/definitions/SignalInfo" } }, "remotes": { "type": "array", "description": "Add projection pools/platforms, whiteboards, and stones to this planet", "items": { "$ref": "#/definitions/RemoteInfo" } }, "warpReceivers": { "type": "array", "description": "Add warp pad receivers to this planet. These are the warp pads you are sent to from Ash Twin.", "items": { "$ref": "#/definitions/NomaiWarpReceiverInfo" } }, "warpTransmitters": { "type": "array", "description": "Add warp pad transmitters to this planet. These are the warp pads seen on the Ash Twin.", "items": { "$ref": "#/definitions/NomaiWarpTransmitterInfo" } }, "audioSources": { "type": "array", "description": "Add audio point sources to this planet. For audio across an entire area, look for AudioVolumes under the Volumes module.", "items": { "$ref": "#/definitions/AudioSourceInfo" } }, "gravityCannons": { "type": "array", "description": "Add a gravity cannon to this planet. Must be paired to a new shuttle, which can be placed on this planet or elsewhere.", "items": { "$ref": "#/definitions/GravityCannonInfo" } }, "shuttles": { "type": "array", "description": "Add a Nomai shuttle to this planet. Can be paired to a gravity cannon on this planet or elsewhere.", "items": { "$ref": "#/definitions/ShuttleInfo" } }, "dreamCampfires": { "type": "array", "description": "Add campfires that allow you to enter the dream world/simulation (requires Echoes of the Eye DLC). Must be paired with a dream arrival point, which can be placed on this planet or elsewhere.", "items": { "$ref": "#/definitions/DreamCampfireInfo" } }, "dreamArrivalPoints": { "type": "array", "description": "Add the points you will arrive at when entering the dream world/simulation from a paired dream campfire (requires Echoes of the Eye DLC). The planet with the arrival point should be statically positioned to avoid issues with the simulation view materials.", "items": { "$ref": "#/definitions/DreamArrivalPointInfo" } }, "grappleTotems": { "type": "array", "description": "Adds dream world grapple totems to this planet (requires Echoes of the Eye DLC).", "items": { "$ref": "#/definitions/GrappleTotemInfo" } }, "alarmTotems": { "type": "array", "description": "Adds dream world alarm totems to this planet (requires Echoes of the Eye DLC).", "items": { "$ref": "#/definitions/AlarmTotemInfo" } }, "portholes": { "type": "array", "description": "Adds portholes (the windows you can peek through in the Stranger) to this planet (requires Echoes of the Eye DLC).", "items": { "$ref": "#/definitions/PortholeInfo" } }, "dreamCandles": { "type": "array", "description": "Adds dream world candles to this planet (requires Echoes of the Eye DLC).", "items": { "$ref": "#/definitions/DreamCandleInfo" } }, "projectionTotems": { "type": "array", "description": "Adds dream world projection totems (requires Echoes of the Eye DLC).", "items": { "$ref": "#/definitions/ProjectionTotemInfo" } } } }, "DetailInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "assetBundle": { "type": "string", "description": "Relative filepath to an asset-bundle to load the prefab defined in `path` from" }, "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. \nIf empty, will make an empty game object. This can be useful for adding other props to it as its children." }, "removeChildren": { "type": "array", "description": "A list of children to remove from this detail", "items": { "type": "string" } }, "removeComponents": { "type": "boolean", "description": "Do we reset all the components on this object? Useful for certain props that have dialogue components attached to\nthem." }, "scale": { "type": "number", "description": "Scale the prop", "format": "float", "default": 1.0 }, "stretch": { "description": "Scale each axis of the prop. Overrides `scale`.", "$ref": "#/definitions/MVector3" }, "quantumGroupID": { "type": "string", "description": "If this value is not null, this prop will be quantum. Assign this field to the id of the quantum group it should be a part of. The group it is assigned to determines what kind of quantum object it is" }, "keepLoaded": { "type": "boolean", "description": "Should this detail stay loaded (visible and collideable) even if you're outside the sector (good for very large props)?\nAlso makes this detail visible on the map.\nKeeping many props loaded is bad for performance so use this only when it's actually relevant\nMost logic/behavior scripts will still only work inside the sector, as most of those scripts break if a sector is not provided." }, "hasPhysics": { "type": "boolean", "description": "Should this object dynamically move around?\nThis tries to make all mesh colliders convex, as well as adding a sphere collider in case the detail has no others." }, "physicsMass": { "type": "number", "description": "The mass of the physics object.\nMost pushable props use the default value, which matches the player mass.", "format": "float", "default": 0.001 }, "physicsRadius": { "type": "number", "description": "The radius that the added sphere collider will use for physics collision.\nIf there's already good colliders on the detail, you can make this 0.", "format": "float", "default": 1.0 }, "physicsSuspendUntilImpact": { "type": "boolean", "description": "If true, this detail will stay still until it touches something.\nGood for zero-g props.", "default": false }, "ignoreSun": { "type": "boolean", "description": "Set to true if this object's lighting should ignore the effects of sunlight" }, "activationCondition": { "type": "string", "description": "Activates this game object when the dialogue condition is met" }, "deactivationCondition": { "type": "string", "description": "Deactivates this game object when the dialogue condition is met" }, "blinkWhenActiveChanged": { "type": "boolean", "description": "Should the player close their eyes while the activation state changes. Only relevant if activationCondition or deactivationCondition are set.", "default": true }, "item": { "description": "Should this detail be treated as an interactible item", "$ref": "#/definitions/ItemInfo" }, "itemSocket": { "description": "Should this detail be treated as a socket for an interactible item", "$ref": "#/definitions/ItemSocketInfo" } } }, "ItemInfo": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the item to be displayed in the UI. Defaults to the name of the detail object." }, "itemType": { "type": "string", "description": "The type of the item, which determines its orientation when held and what sockets it fits into. This can be a custom string, or a vanilla ItemType (Scroll, WarpCore, SharedStone, ConversationStone, Lantern, SlideReel, DreamLantern, or VisionTorch). Defaults to the item name." }, "interactRange": { "type": "number", "description": "The furthest distance where the player can interact with this item. Defaults to two meters, same as most vanilla items. Set this to zero to disable all interaction by default.", "format": "float", "default": 2.0 }, "colliderRadius": { "type": "number", "description": "The radius that the added sphere collider will use for collision and hover detection.\nIf there's already a collider on the detail, you can make this 0.", "format": "float", "default": 0.5 }, "droppable": { "type": "boolean", "description": "Whether the item can be dropped. Defaults to true.", "default": true }, "dropOffset": { "description": "A relative offset to apply to the item's position when dropping it on the ground.", "$ref": "#/definitions/MVector3" }, "dropNormal": { "description": "The direction the item will be oriented when dropping it on the ground. Defaults to up (0, 1, 0).", "$ref": "#/definitions/MVector3" }, "holdOffset": { "description": "A relative offset to apply to the item's position when holding it. The initial position varies for vanilla item types.", "$ref": "#/definitions/MVector3" }, "holdRotation": { "description": "A relative offset to apply to the item's rotation when holding it.", "$ref": "#/definitions/MVector3" }, "socketOffset": { "description": "A relative offset to apply to the item's position when placing it into a socket.", "$ref": "#/definitions/MVector3" }, "socketRotation": { "description": "A relative offset to apply to the item's rotation when placing it into a socket.", "$ref": "#/definitions/MVector3" }, "pickupAudio": { "type": "string", "description": "The audio to play when this item is picked up. Only applies to custom/non-vanilla item types.\nCan be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "dropAudio": { "type": "string", "description": "The audio to play when this item is dropped. Only applies to custom/non-vanilla item types.\nCan be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "socketAudio": { "type": "string", "description": "The audio to play when this item is inserted into a socket. Only applies to custom/non-vanilla item types.\nCan be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "unsocketAudio": { "type": "string", "description": "The audio to play when this item is removed from a socket. Only applies to custom/non-vanilla item types.\nCan be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "pickupCondition": { "type": "string", "description": "A dialogue condition to set when picking up this item." }, "clearPickupConditionOnDrop": { "type": "boolean", "description": "Whether the pickup condition should be cleared when dropping the item. Defaults to true.", "default": true }, "pickupFact": { "type": "string", "description": "A ship log fact to reveal when picking up this item." }, "pathToInitialSocket": { "type": "string", "description": "A relative path from the planet to a socket that this item will be automatically inserted into." } } }, "ItemSocketInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "socketPath": { "type": "string", "description": "The relative path to a child game object of this detail that will act as the socket point for the item. Will be used instead of this socket's positioning info if set." }, "itemType": { "type": "string", "description": "The type of item allowed in this socket. This can be a custom string, or a vanilla ItemType (Scroll, WarpCode, SharedStone, ConversationStone, Lantern, SlideReel, DreamLantern, or VisionTorch)." }, "interactRange": { "type": "number", "description": "The furthest distance where the player can interact with this item socket. Defaults to two meters, same as most vanilla item sockets. Set this to zero to disable all interaction by default.", "format": "float", "default": 2.0 }, "useGiveTakePrompts": { "type": "boolean", "description": "Whether to use \"Give Item\" / \"Take Item\" prompts instead of \"Insert Item\" / \"Remove Item\"." }, "insertCondition": { "type": "string", "description": "A dialogue condition to set when inserting an item into this socket." }, "clearInsertConditionOnRemoval": { "type": "boolean", "description": "Whether the insert condition should be cleared when removing the socketed item. Defaults to true.", "default": true }, "insertFact": { "type": "string", "description": "A ship log fact to reveal when inserting an item into this socket." }, "removalCondition": { "type": "string", "description": "A dialogue condition to set when removing an item from this socket, or when the socket is empty." }, "clearRemovalConditionOnInsert": { "type": "boolean", "description": "Whether the removal condition should be cleared when inserting a socketed item. Defaults to true.", "default": true }, "removalFact": { "type": "string", "description": "A ship log fact to reveal when removing an item from this socket, or when the socket is empty." }, "colliderRadius": { "type": "number", "description": "Default collider radius when interacting with the socket", "format": "float", "default": 0.0 } } }, "DialogueInfo": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "blockAfterPersistentCondition": { "type": "string", "description": "Prevents the dialogue from being created after a specific persistent condition is set. Useful for remote dialogue\ntriggers that you want to have happen only once." }, "lookAtRadius": { "type": "number", "description": "If a pathToAnimController is supplied, if you are within this distance the character will look at you. If it is set\nto 0, they will only look at you when spoken to.", "format": "float" }, "pathToAnimController": { "type": "string", "description": "If this dialogue is meant for a character, this is the relative path from the planet to that character's\nCharacterAnimController, TravelerController, TravelerEyeController (eye of the universe), FacePlayerWhenTalking, \nHearthianRecorderEffects or SolanumAnimController.\n\nIf it's a Recorder this will also delete the existing dialogue already attached to that prop.\n\nIf none of those components are present it will add a FacePlayerWhenTalking component.\n\n`pathToAnimController` also makes the dialogue into a child of the anim controller. This can be used with `isRelativeToParent`\nto position the dialogue on relative to the speaker. If you also provide `parentPath`, that will instead override which object \nis the parent, but the anim controller will otherwise function as expected." }, "pathToExistingDialogue": { "type": "string", "description": "If this dialogue is adding to existing character dialogue, put a path to the game object with the dialogue on it here" }, "radius": { "type": "number", "description": "Radius of the spherical collision volume where you get the \"talk to\" prompt when looking at. If you use a\nremoteTrigger, you can set this to 0 to make the dialogue only trigger remotely.", "format": "float" }, "range": { "type": "number", "description": "Distance from radius the prompt appears", "format": "float", "default": 2.0 }, "attentionPoint": { "description": "The point that the camera looks at when dialogue advances.", "$ref": "#/definitions/AttentionPointInfo" }, "swappedAttentionPoints": { "type": "array", "description": "Additional points that the camera looks at when dialogue advances through specific dialogue nodes and pages.", "items": { "$ref": "#/definitions/SwappedAttentionPointInfo" } }, "remoteTrigger": { "description": "Allows you to trigger dialogue from a distance when you walk into an area.", "$ref": "#/definitions/RemoteTriggerInfo" }, "xmlFile": { "type": "string", "description": "Relative path to the xml file defining the dialogue." }, "flashlightToggle": { "description": "What type of flashlight toggle to do when dialogue is interacted with", "default": "none", "$ref": "#/definitions/FlashlightToggle" } } }, "AttentionPointInfo": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "offset": { "description": "An additional offset to apply to apply when the camera looks at this attention point.", "$ref": "#/definitions/MVector3" } } }, "SwappedAttentionPointInfo": { "type": "object", "additionalProperties": false, "properties": { "offset": { "description": "An additional offset to apply to apply when the camera looks at this attention point.", "$ref": "#/definitions/MVector3" }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "dialogueNode": { "type": "string", "description": "The name of the dialogue node to activate this attention point for. If null or blank, activates for every node." }, "dialoguePage": { "type": "integer", "description": "The index of the page in the current dialogue node to activate this attention point for, if the node has multiple pages.", "format": "int32" }, "lookEasing": { "type": "number", "description": "The easing factor which determines how 'snappy' the camera is when looking at the attention point.", "format": "float", "default": 1 } } }, "RemoteTriggerInfo": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "radius": { "type": "number", "description": "The radius of the remote trigger volume.", "format": "float" }, "prereqCondition": { "type": "string", "description": "This condition must be met for the remote trigger volume to trigger." } } }, "FlashlightToggle": { "type": "string", "description": "", "x-enumNames": [ "TurnOff", "TurnOffThenOn", "None" ], "enum": [ "turnOff", "turnOffThenOn", "none" ] }, "EntryLocationInfo": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "cloaked": { "type": "boolean", "description": "Whether this location is cloaked" }, "id": { "type": "string", "description": "ID of the entry this location relates to" } } }, "GeyserInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "offset": { "type": "number", "description": "Vertical offset of the geyser. From 0, the bubbles start at a height of 10, the shaft at 67, and the spout at 97.5.", "format": "float", "default": -97.5 }, "force": { "type": "number", "description": "Force of the geyser on objects", "format": "float", "default": 55.0 }, "activeDuration": { "type": "number", "description": "Time in seconds eruptions last for", "format": "float", "default": 10.0 }, "inactiveDuration": { "type": "number", "description": "Time in seconds between eruptions", "format": "float", "default": 19.0 }, "tint": { "description": "Color of the geyser. Alpha sets the particle density.", "$ref": "#/definitions/MColor" }, "disableBubbles": { "type": "boolean", "description": "Disable the individual particle systems of the geyser" }, "disableShaft": { "type": "boolean", "description": "Disable the individual particle systems of the geyser" }, "disableSpout": { "type": "boolean", "description": "Disable the individual particle systems of the geyser" }, "volume": { "type": "number", "description": "Loudness of the geyser", "format": "float", "default": 0.7 } } }, "TranslatorTextInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "arcInfo": { "type": "array", "description": "Additional information about each arc in the text", "items": { "$ref": "#/definitions/NomaiTextArcInfo" } }, "seed": { "type": "integer", "description": "The random seed used to pick what the text arcs will look like.", "format": "int32" }, "normal": { "description": "Only for wall text. Aligns wall text to face towards the given direction, with 'up' oriented relative to its current rotation or alignment.", "$ref": "#/definitions/MVector3" }, "type": { "description": "The type of object this is.", "default": "wall", "$ref": "#/definitions/NomaiTextType" }, "location": { "description": "The location of this object. Arcs will be blue if their locations match the wall, else orange.", "default": "unspecified", "$ref": "#/definitions/NomaiTextLocation" }, "xmlFile": { "type": "string", "description": "The relative path to the xml file for this object." } } }, "NomaiTextArcInfo": { "type": "object", "additionalProperties": false, "properties": { "type": { "description": "The type of text to display.", "default": "adult", "$ref": "#/definitions/NomaiTextArcType" }, "position": { "description": "The local position of this object on the wall. If specified, auto spiral will not touch this arc.", "$ref": "#/definitions/MVector2" }, "zRotation": { "type": [ "null", "number" ], "description": "The z euler angle for this arc. If specified, auto spiral will not touch this arc.", "format": "float", "maximum": 360.0, "minimum": 0.0 }, "mirror": { "type": [ "boolean", "null" ], "description": "Whether to flip the spiral from left-curling to right-curling or vice versa. If specified, auto spiral will not touch this arc." } } }, "NomaiTextArcType": { "type": "string", "description": "", "x-enumNames": [ "Adult", "Child", "Stranger", "Teenager" ], "enum": [ "adult", "child", "stranger", "teenager" ] }, "MVector2": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "float" }, "y": { "type": "number", "format": "float" } } }, "NomaiTextType": { "type": "string", "description": "", "x-enumNames": [ "Wall", "Scroll", "Whiteboard", "Computer", "PreCrashComputer", "Recorder", "PreCrashRecorder", "CairnBrittleHollow", "CairnTimberHearth", "CairnEmberTwin", "Trailmarker" ], "enum": [ "wall", "scroll", "whiteboard", "computer", "preCrashComputer", "recorder", "preCrashRecorder", "cairnBH", "cairnTH", "cairnCT", "trailmarker" ] }, "NomaiTextLocation": { "type": "string", "description": "", "x-enumNames": [ "UNSPECIFIED", "A", "B" ], "enum": [ "unspecified", "a", "b" ] }, "RaftInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "acceleration": { "type": "number", "description": "Acceleration of the raft. Default acceleration is 5.", "format": "float", "default": 5.0 } } }, "ScatterInfo": { "type": "object", "additionalProperties": false, "properties": { "assetBundle": { "type": "string", "description": "Relative filepath to an asset-bundle" }, "count": { "type": "integer", "description": "Number of props to scatter", "format": "int32" }, "offset": { "description": "Offset this prop once it is placed", "$ref": "#/definitions/MVector3" }, "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" }, "rotation": { "description": "Rotate this prop once it is placed", "$ref": "#/definitions/MVector3" }, "scale": { "type": "number", "description": "Scale this prop once it is placed", "format": "float", "default": 1.0 }, "stretch": { "description": "Scale each axis of the prop. Overrides `scale`.", "$ref": "#/definitions/MVector3" }, "seed": { "type": "integer", "description": "The number used as entropy for scattering the props", "format": "int32" }, "minHeight": { "type": [ "null", "number" ], "description": "The lowest height that these object will be placed at (only relevant if there's a heightmap)", "format": "float" }, "maxHeight": { "type": [ "null", "number" ], "description": "The highest height that these objects will be placed at (only relevant if there's a heightmap)", "format": "float" }, "preventOverlap": { "type": "boolean", "description": "Should we try to prevent overlap between the scattered details? True by default. If it's affecting load times turn it off.", "default": true }, "keepLoaded": { "type": "boolean", "description": "Should this detail stay loaded even if you're outside the sector (good for very large props)" }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector). This parent should be at the position where you'd like to scatter (which would usually be zero)." } } }, "ProjectionInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "reveals": { "type": "array", "description": "The ship log facts revealed after finishing this slide reel.", "items": { "type": "string" } }, "conditionsToSet": { "type": "array", "description": "The dialogue conditions to set after finishing this slide reel.", "items": { "type": "string" } }, "persistentConditionsToSet": { "type": "array", "description": "The persistent conditions to set after finishing this slide reel.", "items": { "type": "string" } }, "playWithShipLogFacts": { "type": "array", "description": "The ship log facts that make the reel play when they are displayed in the computer (by selecting entries or arrows).\nYou should probably include facts from `reveals` here.\nIf you only specify a rumor fact, then it would only play in its ship log entry if this has revealed only\nrumor facts because an entry with revealed explore facts doesn't display rumor facts.", "items": { "type": "string" } }, "slides": { "type": "array", "description": "The list of slides for this object.", "items": { "$ref": "#/definitions/SlideInfo" } }, "type": { "description": "The type of object this is.", "default": "slideReel", "$ref": "#/definitions/SlideShowType" }, "reelModel": { "description": "Exclusive to the slide reel type. Model/mesh of the reel. Each model has a different number of slides on it. Whole has 7 slides but a full ring like 8.", "default": "sevenSlides", "$ref": "#/definitions/SlideReelType" }, "reelCondition": { "description": "Exclusive to the slide reel type. Condition/material of the reel. Antique is the Stranger, Pristine is the Dreamworld, Rusted is a burned reel.", "default": "antique", "$ref": "#/definitions/SlideReelCondition" } } }, "SlideInfo": { "type": "object", "additionalProperties": false, "properties": { "imagePath": { "type": "string", "description": "The path to the image file for this slide." }, "ambientLightIntensity": { "type": "number", "description": "Ambient light intensity when viewing this slide.\nSet this to add ambient light module. Base game default is 1.", "format": "float" }, "ambientLightRange": { "type": "number", "description": "Ambient light range when viewing this slide.", "format": "float", "default": 20.0 }, "ambientLightColor": { "description": "Ambient light colour when viewing this slide. Defaults to white.", "$ref": "#/definitions/MColor" }, "spotIntensityMod": { "type": "number", "description": "Spotlight intensity modifier when viewing this slide.", "format": "float", "default": 0.0 }, "backdropAudio": { "type": "string", "description": "The name of the AudioClip that will continuously loop while watching these slides.\nSet this to include backdrop audio module. Base game default is Reel_1_Backdrop_A." }, "backdropFadeTime": { "type": "number", "description": "The time to fade into the backdrop audio.", "format": "float", "default": 2.0 }, "beatAudio": { "type": "string", "description": "The name of the AudioClip for a one-shot sound when opening the slide.\nSet this to include beat audio module. Base game default is Reel_1_Beat_A." }, "beatDelay": { "type": "number", "description": "The time delay until the one-shot audio.", "format": "float", "default": 0.0 }, "blackFrameDuration": { "type": "number", "description": "Before viewing this slide, there will be a black frame for this many seconds.\nSet this to include black frame module. Base game default is 0.", "format": "float" }, "playTimeDuration": { "type": "number", "description": "Play-time duration for auto-projector slides.\nSet this to include play time module. Base game default is 0.", "format": "float" }, "reveal": { "type": "string", "description": "Ship log fact revealed when viewing this slide.\nSet this to include ship log entry module. Base game default is \"\"." }, "rotate": { "type": "boolean", "description": "Exclusive to slide reels. Whether this slide should rotate the reel item while inside a projector.", "default": true } } }, "SlideShowType": { "type": "string", "description": "", "x-enumNames": [ "SlideReel", "AutoProjector", "VisionTorchTarget", "StandingVisionTorch" ], "enum": [ "slideReel", "autoProjector", "visionTorchTarget", "standingVisionTorch" ] }, "SlideReelType": { "type": "string", "description": "", "x-enumNames": [ "SixSlides", "SevenSlides", "EightSlides", "Whole" ], "enum": [ "sixSlides", "sevenSlides", "eightSlides", "whole" ] }, "SlideReelCondition": { "type": "string", "description": "", "x-enumNames": [ "Antique", "Pristine", "Rusted" ], "enum": [ "antique", "pristine", "rusted" ] }, "QuantumGroupInfo": { "type": "object", "additionalProperties": false, "properties": { "type": { "description": "What type of group this is: does it define a list of states a single quantum object could take or a list of sockets one or more quantum objects could share?", "$ref": "#/definitions/QuantumGroupType" }, "id": { "type": "string", "description": "A unique string used by props (that are marked as quantum) use to refer back to this group" }, "sockets": { "type": "array", "description": "Only required if type is `sockets`. This lists all the possible locations for any props assigned to this group.", "items": { "$ref": "#/definitions/QuantumSocketInfo" } }, "hasEmptyState": { "type": "boolean", "description": "Optional. Only used if type is `states`. If this is true, then the first prop made part of this group will be used to construct a visibility box for an empty game object, which will be considered one of the states." }, "sequential": { "type": "boolean", "description": "Optional. Only used if type is `states`. If this is true, then the states will be presented in order, rather than in a random order" }, "loop": { "type": "boolean", "description": "Optional. Only used if type is `states` and `sequential` is true. If this is false, then after the last state has appeared, the object will no longer change state", "default": true } } }, "QuantumGroupType": { "type": "string", "description": "", "x-enumNames": [ "Sockets", "States" ], "enum": [ "sockets", "states" ] }, "QuantumSocketInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "probability": { "type": "number", "description": "The probability any props that are part of this group will occupy this socket", "format": "float", "default": 1.0 } } }, "TornadoInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "elevation": { "type": "number", "description": "Alternative to setting the position. Will choose a random place at this elevation.", "format": "float" }, "height": { "type": "number", "description": "The height of this tornado.", "format": "float", "default": 30.0 }, "tint": { "description": "The colour of the tornado.", "$ref": "#/definitions/MColor" }, "type": { "description": "What type of cyclone should this be? Upwards and downwards are both tornados and will push in that direction.", "default": "upwards", "$ref": "#/definitions/TornadoType" }, "wanderDegreesX": { "type": "number", "description": "Angular distance from the starting position that it will wander, in terms of the angle around the x-axis.", "format": "float", "default": 45.0 }, "wanderDegreesZ": { "type": "number", "description": "Angular distance from the starting position that it will wander, in terms of the angle around the z-axis.", "format": "float", "default": 45.0 }, "wanderRate": { "type": "number", "description": "The rate at which the tornado will wander around the planet. Set to 0 for it to be stationary. Should be around\n0.1.", "format": "float" }, "audioDistance": { "type": "number", "description": "The maximum distance at which you'll hear the sounds of the cyclone. If not set it will scale relative to the size of the cyclone.", "format": "float" }, "fluidType": { "description": "Fluid type for sounds/effects when colliding with this tornado.", "default": "cloud", "$ref": "#/definitions/NHFluidType" }, "hazardType": { "description": "The type of hazard for this volume. Leave empty for this tornado to not be hazardous.", "oneOf": [ { "type": "null" }, { "$ref": "#/definitions/HazardType" } ] }, "damagePerSecond": { "type": "number", "description": "The amount of damage you will take per second while inside this tornado. Only used it hazardType is set.", "format": "float", "default": 10.0 }, "firstContactDamageType": { "description": "The type of damage you will take when you first touch this volume. Leave empty for this tornado to not cause damage on first contact.", "oneOf": [ { "type": "null" }, { "$ref": "#/definitions/InstantDamageType" } ] }, "firstContactDamage": { "type": "number", "description": "The amount of damage you will take when you first touch this volume. Only relevant if firstContactDamageType is set.", "format": "float", "default": 10.0 } } }, "TornadoType": { "type": "string", "description": "", "x-enumNames": [ "Upwards", "Downwards", "Hurricane" ], "enum": [ "upwards", "downwards", "hurricane" ] }, "HazardType": { "type": "string", "description": "", "x-enumNames": [ "NONE", "GENERAL", "DARKMATTER", "HEAT", "FIRE", "SANDFALL", "ELECTRICITY", "RAPIDS", "RIVERHEAT" ], "enum": [ "none", "general", "ghostMatter", "heat", "fire", "sandfall", "electricity", "rapids", "riverHeat" ] }, "InstantDamageType": { "type": "string", "description": "", "x-enumNames": [ "Impact", "Puncture", "Electrical" ], "enum": [ "impact", "puncture", "electrical" ] }, "VolcanoInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "lavaTint": { "description": "The colour of the meteor's lava.", "$ref": "#/definitions/MColor" }, "maxInterval": { "type": "number", "description": "Maximum time between meteor launches.", "format": "float", "default": 20.0 }, "maxLaunchSpeed": { "type": "number", "description": "Maximum random speed at which meteors are launched.", "format": "float", "default": 150.0 }, "minInterval": { "type": "number", "description": "Minimum time between meteor launches.", "format": "float", "default": 5.0 }, "minLaunchSpeed": { "type": "number", "description": "Minimum random speed at which meteors are launched.", "format": "float", "default": 50.0 }, "scale": { "type": "number", "description": "Scale of the meteors.", "format": "float" }, "stoneTint": { "description": "The colour of the meteor's stone.", "$ref": "#/definitions/MColor" } } }, "SingularityModule": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "curve": { "type": "array", "description": "Scale this object over time", "items": { "$ref": "#/definitions/TimeValuePair" } }, "pairedSingularity": { "type": "string", "description": "The uniqueID of the white hole or black hole that is paired to this one. If you don't set a value, entering will kill\nthe player" }, "uniqueID": { "type": "string", "description": "The uniqueID of this white hole or black hole. If not set it will default to the name of the planet" }, "horizonRadius": { "type": "number", "description": "Radius of the event horizon (solid part)", "format": "float", "minimum": 0.0 }, "distortRadius": { "type": "number", "description": "Radius of the distortion effects. Defaults to 2.5 * horizonRadius", "format": "float", "minimum": 0.0 }, "targetStarSystem": { "type": "string", "description": "If you want a black hole to load a new star system scene, put its name here." }, "spawnPointID": { "type": "string", "description": "If this is a black hole loading a new star system, set the ID of the spawn point you want to use\nOtherwise, will use the default spawn" }, "type": { "description": "Type of singularity (white hole or black hole)", "$ref": "#/definitions/SingularityType" }, "hasWarpEffects": { "type": "boolean", "description": "Whether a black hole emits blue particles upon warping. It doesn't scale, so disabling this for small black holes is recommended" }, "renderQueueOverride": { "type": "integer", "description": "Optional override for the render queue. If the singularity is rendering oddly, increasing this to 3000 can help", "format": "int32", "maximum": 3500.0, "minimum": 2501.0 } } }, "SingularityType": { "type": "string", "description": "", "x-enumNames": [ "BlackHole", "WhiteHole" ], "enum": [ "blackHole", "whiteHole" ] }, "SignalInfo": { "type": "object", "additionalProperties": false, "properties": { "audio": { "type": "string", "description": "The audio to use. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "minDistance": { "type": "number", "description": "At this distance the sound is at its loudest.", "format": "float" }, "maxDistance": { "type": "number", "description": "The sound will drop off by this distance (Note: for signals, this only effects when it is heard aloud and not via the signalscope).", "format": "float", "default": 5.0 }, "volume": { "type": "number", "description": "How loud the sound will play", "format": "float", "default": 0.5 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "detectionRadius": { "type": "number", "description": "How close the player must get to the signal to detect it. This is when you get the \"Unknown Signal Detected\"\nnotification.", "format": "float", "minimum": 0.0 }, "frequency": { "type": "string", "description": "The frequency ID of the signal. The built-in game values are `Default`, `Traveler`, `Quantum`, `EscapePod`,\n`Statue`, `WarpCore`, `HideAndSeek`, and `Radio`. You can also put a custom value." }, "identificationRadius": { "type": "number", "description": "How close the player must get to the signal to identify it. This is when you learn its name.", "format": "float", "default": 10.0, "minimum": 0.0 }, "insideCloak": { "type": "boolean", "description": "Only set to `true` if you are putting this signal inside a cloaking field." }, "name": { "type": "string", "description": "The unique ID of the signal." }, "onlyAudibleToScope": { "type": "boolean", "description": "`false` if the player can hear the signal without equipping the signal-scope.", "default": true }, "reveals": { "type": "string", "description": "A ship log fact to reveal when the signal is identified.", "default": "" }, "sourceRadius": { "type": "number", "description": "Radius of the sphere giving off the signal.", "format": "float", "default": 1.0 } } }, "RemoteInfo": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "description": "The unique remote id" }, "decalPath": { "type": "string", "description": "Icon that the will show on the stone, pedastal of the whiteboard, and pedastal of the platform." }, "whiteboard": { "description": "Whiteboard that the stones can put text onto", "$ref": "#/definitions/RemoteWhiteboardInfo" }, "platform": { "description": "Camera platform that the stones can project to and from", "$ref": "#/definitions/RemotePlatformInfo" }, "stones": { "type": "array", "description": "Projection stones", "items": { "$ref": "#/definitions/ProjectionStoneInfo" } } } }, "RemoteWhiteboardInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "nomaiText": { "type": "array", "description": "The text for each stone", "items": { "$ref": "#/definitions/SharedNomaiTextInfo" } }, "disableWall": { "type": "boolean", "description": "Disable the wall, leaving only the pedestal and text." } } }, "SharedNomaiTextInfo": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "description": "The id of the stone this text will appear for" }, "arcInfo": { "type": "array", "description": "Additional information about each arc in the text", "items": { "$ref": "#/definitions/NomaiTextArcInfo" } }, "seed": { "type": "integer", "description": "The random seed used to pick what the text arcs will look like.", "format": "int32" }, "location": { "description": "The location of this object. Arcs will be blue if their locations match the wall, else orange.", "default": "unspecified", "$ref": "#/definitions/NomaiTextLocation" }, "xmlFile": { "type": "string", "description": "The relative path to the xml file for this object." }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "RemotePlatformInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "reveals": { "type": "string", "description": "A ship log fact to reveal when the platform is connected to.", "default": "" }, "disableStructure": { "type": "boolean", "description": "Disable the structure, leaving only the pedestal." }, "disablePool": { "type": "boolean", "description": "Disable the pool that rises when you place a stone." } } }, "ProjectionStoneInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "NomaiWarpReceiverInfo": { "type": "object", "additionalProperties": false, "properties": { "frequency": { "type": "string", "description": "This can be anything. To have a warp pad transmitter send you to a receiver you must give them the same frequency. \nTry to make it something unique so it does not overlap with other warp pad pairs.\nFuthermore, multiple transmitters can send you to the same receiver if they all have the same frequency." }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "alignmentTargetBody": { "type": "string", "description": "The body the transmitter must be aligned with to warp to this receiver.\nDefaults to the body the receiver is on." }, "computer": { "description": "Will create a modern Nomai computer linked to this receiver.", "$ref": "#/definitions/NomaiComputerInfo" }, "detailed": { "type": "boolean", "description": "Set to true if you want to include Nomai ruin details around the warp pad." } } }, "NomaiComputerInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "NomaiWarpTransmitterInfo": { "type": "object", "additionalProperties": false, "properties": { "frequency": { "type": "string", "description": "This can be anything. To have a warp pad transmitter send you to a receiver you must give them the same frequency. \nTry to make it something unique so it does not overlap with other warp pad pairs.\nFuthermore, multiple transmitters can send you to the same receiver if they all have the same frequency." }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "alignmentWindow": { "type": "number", "description": "In degrees. Gives a margin of error for alignments.", "format": "float", "default": 5.0 }, "flipAlignment": { "type": "boolean", "description": "This makes the alignment happen if the destination planet is BELOW you rather than above." } } }, "AudioSourceInfo": { "type": "object", "additionalProperties": false, "properties": { "audio": { "type": "string", "description": "The audio to use. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "minDistance": { "type": "number", "description": "At this distance the sound is at its loudest.", "format": "float" }, "maxDistance": { "type": "number", "description": "The sound will drop off by this distance (Note: for signals, this only effects when it is heard aloud and not via the signalscope).", "format": "float", "default": 5.0 }, "volume": { "type": "number", "description": "How loud the sound will play", "format": "float", "default": 0.5 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "track": { "description": "The audio track of this audio source.\nMost of the time you'll use environment (the default) for sound effects and music for music. ", "default": "environment", "$ref": "#/definitions/NHAudioMixerTrackName" } } }, "NHAudioMixerTrackName": { "type": "string", "description": "", "x-enumNames": [ "Undefined", "Menu", "Music", "Environment", "Environment_Unfiltered", "EndTimes_SFX", "Signal", "Death", "Player", "Player_External", "Ship", "Map", "EndTimes_Music", "MuffleWhileRafting", "MuffleIndoors", "SlideReelMusic" ], "enum": [ "undefined", "menu", "music", "environment", "environmentUnfiltered", "endTimesSfx", "signal", "death", "player", "playerExternal", "ship", "map", "endTimesMusic", "muffleWhileRafting", "muffleIndoors", "slideReelMusic" ] }, "GravityCannonInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "shuttleID": { "type": "string", "description": "Unique ID for the shuttle that pairs with this gravity cannon" }, "retrieveReveal": { "type": "string", "description": "Ship log fact revealed when retrieving the shuttle to this pad. Optional." }, "launchReveal": { "type": "string", "description": "Ship log fact revealed when launching from this pad. Optional." }, "detailed": { "type": "boolean", "description": "Hide the lattice cage around the platform. Defaults to true.", "default": true }, "computer": { "description": "Will create a modern Nomai computer linked to this gravity cannon.", "$ref": "#/definitions/NomaiComputerInfo" }, "controls": { "description": "Position of the interface used to launc the shuttle", "$ref": "#/definitions/GeneralPropInfo" } } }, "GeneralPropInfo": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." } } }, "ShuttleInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "id": { "type": "string", "description": "Unique ID for this shuttle" } } }, "DreamCampfireInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "id": { "type": "string", "description": "Unique ID for this dream-world campfire" } } }, "DreamArrivalPointInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "id": { "type": "string", "description": "Unique ID for this dream-world arrival point" }, "generateSimulationMeshes": { "type": "boolean", "description": "Whether to generate simulation meshes (the models used in the \"tronworld\" or \"matrix\" view) for most objects on the current planet by cloning the existing meshes and applying the simulation materials. Leave this off if you are building your own simulation meshes or using existing objects which have them." } } }, "GrappleTotemInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "minDistance": { "type": "number", "description": "The minimum distance that the player must be from the grapple totem for it to activate.", "format": "float", "default": 10.0 }, "arrivalDistance": { "type": "number", "description": "The distance from the grapple totem that the player will stop at when it activates.", "format": "float", "default": 4.0 }, "maxAngle": { "type": "number", "description": "The maximum angle in degrees allowed between the grapple totem's face and the player's lantern in order to activate the totem.", "format": "float", "default": 45.0 }, "maxDistance": { "type": "number", "description": "The maximum distance allowed between the grapple totem's face and the player's lantern in order to activate the totem.", "format": "float", "default": 29.0 } } }, "AlarmTotemInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "sightDistance": { "type": "number", "description": "The maximum distance of the alarm's vision cone.", "format": "float", "default": 45.0 }, "sightAngle": { "type": "number", "description": "The width of the alarm's vision cone in degrees.", "format": "float", "default": 60.0 }, "stretchVisionCone": { "description": "Scales the visible vision cone in the simulation view (does not affect the actual vision cone detection).", "$ref": "#/definitions/MVector3" } } }, "PortholeInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "revealFacts": { "type": "array", "description": "Fact IDs to reveal when peeking through the porthole.", "items": { "type": "string" } }, "fieldOfView": { "type": "number", "description": "The field of view of the porthole camera.", "format": "float", "default": 90.0 }, "target": { "description": "The location of the camera when the player peeks through the porthole. Can be placed on a different planet.", "$ref": "#/definitions/PortholeTargetInfo" } } }, "PortholeTargetInfo": { "type": "object", "additionalProperties": false, "properties": { "parentBody": { "type": "string", "description": "The name of the planet that will be used with `parentPath`. Must be set if `parentPath` is set." }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "DreamCandleInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "type": { "description": "The type of dream candle this is.", "default": "Ground", "$ref": "#/definitions/DreamCandleType" }, "startLit": { "type": "boolean", "description": "Whether the candle should start lit or extinguished." } } }, "DreamCandleType": { "type": "string", "description": "", "x-enumNames": [ "Ground", "GroundSmall", "GroundLarge", "GroundSingle", "Wall", "WallLargeFlame", "WallBigWick", "Standing", "Pile" ], "enum": [ "ground", "groundSmall", "groundLarge", "groundSingle", "wall", "wallLargeFlame", "wallBigWick", "standing", "pile" ] }, "ProjectionTotemInfo": { "type": "object", "additionalProperties": false, "properties": { "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "startLit": { "type": "boolean", "description": "Whether the totem should start lit or extinguished." }, "extinguishOnly": { "type": "boolean", "description": "Whether the projection totem should be able to extinguished but not be able to be lit again with the artifact. Mainly useful if `startLit` is set to true." }, "pathToAlarmTotem": { "type": "string", "description": "A relative path from this planet to an alarm totem that will be activated or deactivated based on whether this totem is lit." }, "pathsToDreamCandles": { "type": "array", "description": "Relative paths from this planet to objects containing dream candles that will be activated or deactivated based on whether this totem is lit. All dream candles in the selected objects will be connected to this totem, so they do not need to be specified individually if a parent object is specified.", "items": { "type": "string" } }, "pathsToProjectionTotems": { "type": "array", "description": "Relative paths from this planet to projection totems that will be deactivated if this totem is extinguished. All projection totems in the selected objects will be connected to this totem, so they do not need to be specified individually if a parent object is specified.", "items": { "type": "string" } }, "pathsToProjectedObjects": { "type": "array", "description": "Relative paths from this planet to objects that will appear or disappear when this totem is lit or extinguished. Some types of objects and effects are not supported and will remain visible and active.", "items": { "type": "string" } }, "toggleProjectedObjectsActive": { "type": "boolean", "description": "If set, projected objects will be set to fully active or fully disabled instantly instead of smoothly fading lights/renderers/colliders. Use this if the normal behavior is insufficient for the objects you're using." } } }, "ReferenceFrameModule": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean", "description": "Allows the object to be targeted.", "default": true }, "hideInMap": { "type": "boolean", "description": "Stop the object from being targeted on the map." }, "bracketRadius": { "type": "number", "description": "Radius of the brackets that show up when you target this. Defaults to the sphere of influence.", "format": "float", "default": -1.0 }, "targetWhenClose": { "type": "boolean", "description": "If it should be targetable even when super close." }, "maxTargetDistance": { "type": "number", "description": "The maximum distance that the reference frame can be targeted from. Defaults to 100km and cannot be greater than that.", "format": "float" }, "targetColliderRadius": { "type": "number", "description": "The radius of the sphere around the planet which you can click on to target it. Defaults to twice the sphere of influence.", "format": "float" }, "localPosition": { "description": "Position of the reference frame relative to the object.", "$ref": "#/definitions/MVector3" } } }, "RingModule": { "type": "object", "additionalProperties": false, "properties": { "fluidType": { "description": "Fluid type for sounds/effects when colliding with this ring.", "$ref": "#/definitions/NHFluidType" }, "inclination": { "type": "number", "description": "Angle between the rings and the equatorial plane of the planet.", "format": "float" }, "innerRadius": { "type": "number", "description": "Inner radius of the disk", "format": "float", "minimum": 0.0 }, "longitudeOfAscendingNode": { "type": "number", "description": "Angle defining the point where the rings rise up from the planet's equatorial plane if inclination is nonzero.", "format": "float" }, "outerRadius": { "type": "number", "description": "Outer radius of the disk", "format": "float", "minimum": 0.0 }, "rotationSpeed": { "type": "number", "description": "Allows the rings to rotate.", "format": "float" }, "texture": { "type": "string", "description": "Relative filepath to the texture used for the rings." }, "unlit": { "type": "boolean", "description": "Should this ring be unlit?" }, "scaleCurve": { "type": "array", "description": "Scale rings over time. Optional. Value between 0-1, time is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "opacityCurve": { "type": "array", "description": "Fade rings in/out over time. Optional. Value between 0-1, time is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "SandModule": { "type": "object", "additionalProperties": false, "properties": { "curve": { "type": "array", "description": "Scale this object over time. Time value is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "size": { "type": "number", "description": "Size of the sand", "format": "float" }, "tint": { "description": "Tint of the sand", "$ref": "#/definitions/MColor" } } }, "ShipLogModule": { "type": "object", "additionalProperties": false, "properties": { "mapMode": { "description": "Describe what this planet looks and like in map mode", "$ref": "#/definitions/MapModeInfo" }, "spriteFolder": { "type": "string", "description": "A path to the folder where entry sprites are stored." }, "xmlFile": { "type": "string", "description": "The relative path to the xml file to load ship log entries from." } } }, "MapModeInfo": { "type": "object", "additionalProperties": false, "properties": { "details": { "type": "array", "description": "Place non-selectable objects in map mode (like sand funnels).", "items": { "$ref": "#/definitions/ShipLogDetailInfo" } }, "invisibleWhenHidden": { "type": "boolean", "description": "Hide the planet completely if unexplored instead of showing an outline." }, "manualNavigationPosition": { "description": "Specify where this planet is in terms of navigation.", "$ref": "#/definitions/MVector2" }, "manualPosition": { "description": "Manually place this planet at the specified position.", "$ref": "#/definitions/MVector2" }, "offset": { "type": "number", "description": "Extra distance to apply to this object in map mode.", "format": "float" }, "outlineSprite": { "type": "string", "description": "The path to the sprite to show when the planet is unexplored in map mode." }, "remove": { "type": "boolean", "description": "Completely remove this planet (and it's children) from map mode." }, "revealedSprite": { "type": "string", "description": "The path to the sprite to show when the planet is revealed in map mode." }, "scale": { "type": "number", "description": "Scale to apply to the planet in map mode.", "format": "float", "default": 1.0 } } }, "ShipLogDetailInfo": { "type": "object", "additionalProperties": false, "properties": { "invisibleWhenHidden": { "type": "boolean", "description": "Whether to completely hide this detail when the parent AstroBody is unexplored." }, "outlineSprite": { "type": "string", "description": "The sprite to show when the parent AstroBody is rumored/unexplored." }, "position": { "description": "The position (relative to the parent) to place the detail.", "$ref": "#/definitions/MVector2" }, "revealedSprite": { "type": "string", "description": "The sprite to show when the parent AstroBody is revealed." }, "rotation": { "type": "number", "description": "The angle in degrees to rotate the detail.", "format": "float" }, "scale": { "description": "The amount to scale the x and y-axis of the detail by.", "$ref": "#/definitions/MVector2" } } }, "ShockEffectModule": { "type": "object", "additionalProperties": false, "properties": { "hasSupernovaShockEffect": { "type": "boolean", "description": "Does this planet have a shock effect when the nearest star goes supernova? Automatically disabled for stars, focal points, and stellar remnants.", "default": true }, "radius": { "type": [ "null", "number" ], "description": "Override the calculated radius of the shock effect", "format": "float" }, "assetBundle": { "type": "string", "description": "Asset Bundle that contains the shock effect mesh" }, "meshPath": { "type": "string", "description": "Path to the replacement mesh for the planet's supernova shock effect in the supplied asset bundle" } } }, "SpawnModule": { "type": "object", "additionalProperties": false, "properties": { "playerSpawnPoints": { "type": "array", "description": "If you want the player to spawn on the new body, set a value for this.\nDifferent spawns can be unlocked with persistent conditions and facts", "items": { "$ref": "#/definitions/PlayerSpawnPoint" } }, "shipSpawnPoints": { "type": "array", "description": "Required for the system to be accessible by warp drive.\nDifferent spawns can be unlocked with persistent conditions and facts", "items": { "$ref": "#/definitions/ShipSpawnPoint" } } } }, "PlayerSpawnPoint": { "type": "object", "additionalProperties": false, "properties": { "offset": { "description": "Offsets the player/ship by this local vector when spawning. Used to prevent spawning in the floor. Optional: defaults to (0, 4, 0).", "$ref": "#/definitions/MVector3" }, "isDefault": { "type": "boolean", "description": "Whether this planet's spawn point is the one the player/ship will initially spawn at, if multiple spawn points exist.\nDo not use at the same time as makeDefaultIfFactRevealed or makeDefaultIfPersistentCondition\nSpawns unlocked with this have lowest priority" }, "makeDefaultIfFactRevealed": { "type": "string", "description": "If the given ship log fact is revealed, this spawn point will be used\nDo not use at the same time as isDefault or makeDefaultIfPersistentCondition\nSpawns unlocked with this have highest priority" }, "makeDefaultIfPersistentCondition": { "type": "string", "description": "If the given persistent condition is true, this spawn point will be used\nDo not use at the same time as isDefault or makeDefaultIfFactRevealed\nSpawns unlocked with this have second highest priority" }, "id": { "type": "string", "description": "ID used to have a black hole or warp volume bring the player to this spawn specifically" }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "startWithSuit": { "type": "boolean", "description": "If you spawn on a planet with no oxygen, you probably want to set this to true ;;)" } } }, "ShipSpawnPoint": { "type": "object", "additionalProperties": false, "properties": { "offset": { "description": "Offsets the player/ship by this local vector when spawning. Used to prevent spawning in the floor. Optional: defaults to (0, 4, 0).", "$ref": "#/definitions/MVector3" }, "isDefault": { "type": "boolean", "description": "Whether this planet's spawn point is the one the player/ship will initially spawn at, if multiple spawn points exist.\nDo not use at the same time as makeDefaultIfFactRevealed or makeDefaultIfPersistentCondition\nSpawns unlocked with this have lowest priority" }, "makeDefaultIfFactRevealed": { "type": "string", "description": "If the given ship log fact is revealed, this spawn point will be used\nDo not use at the same time as isDefault or makeDefaultIfPersistentCondition\nSpawns unlocked with this have highest priority" }, "makeDefaultIfPersistentCondition": { "type": "string", "description": "If the given persistent condition is true, this spawn point will be used\nDo not use at the same time as isDefault or makeDefaultIfFactRevealed\nSpawns unlocked with this have second highest priority" }, "id": { "type": "string", "description": "ID used to have a black hole or warp volume bring the player to this spawn specifically" }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "StarModule": { "type": "object", "additionalProperties": false, "properties": { "curve": { "type": "array", "description": "Scale this object over time. Time value is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "endTint": { "description": "Colour of the star at the end of its lifespan.", "$ref": "#/definitions/MColor" }, "lifespan": { "type": "number", "description": "How long in minutes this star will last until it supernovas.", "format": "float", "default": 22.0 }, "hasStarController": { "type": "boolean", "description": "Should we add a star controller to this body? If you want clouds to work on a binary brown dwarf system, set this to false.", "default": true }, "hasAtmosphere": { "type": "boolean", "description": "The default sun has its own atmosphere that is different from regular planets. If you want that, set this to\n`true`.", "default": true }, "lightTint": { "description": "Colour of the light given off. Defaults to yellowish.", "$ref": "#/definitions/MColor" }, "size": { "type": "number", "description": "Radius of the star.", "format": "float", "default": 2000.0, "minimum": 0.0 }, "solarLuminosity": { "type": "number", "description": "Relative strength of the light compared to the sun.", "format": "float", "default": 1.0, "minimum": 0.0 }, "supernovaSize": { "type": "number", "description": "Radius of the supernova. Any planets within this will be destroyed.", "format": "float", "default": 50000.0, "minimum": 0.0 }, "supernovaSpeed": { "type": "number", "description": "Speed of the supernova wall in meters per second.", "format": "float", "default": 1000.0, "minimum": 1.0 }, "supernovaTint": { "description": "The tint of the supernova this star creates when it dies.", "$ref": "#/definitions/MColor" }, "tint": { "description": "Colour of the star.", "$ref": "#/definitions/MColor" }, "starRampTexture": { "type": "string", "description": "Path to the texture to put as the star ramp. Optional." }, "starCollapseRampTexture": { "type": "string", "description": "Path to the texture to put as the star ramp while it is collapsing. Optional." }, "lightRadius": { "type": "number", "description": "How far the light from the star can reach.", "format": "float", "default": 50000.0, "minimum": 0.0 }, "stellarDeathType": { "description": "The type of death your star will have.", "default": "default", "$ref": "#/definitions/StellarDeathType" }, "stellarRemnantType": { "description": "The type of stellar remnant your star will leave behind.", "default": "default", "$ref": "#/definitions/StellarRemnantType" }, "solarFlareSettings": { "description": "Allows overriding solar flare graphical settings.", "$ref": "#/definitions/SolarFlareModule" } } }, "StellarDeathType": { "type": "string", "description": "", "x-enumNames": [ "Default", "None", "PlanetaryNebula", "Supernova" ], "enum": [ "default", "none", "planetaryNebula", "supernova" ] }, "StellarRemnantType": { "type": "string", "description": "", "x-enumNames": [ "Default", "WhiteDwarf", "NeutronStar", "BlackHole", "Custom" ], "enum": [ "default", "whiteDwarf", "neutronStar", "blackHole", "custom" ] }, "SolarFlareModule": { "type": "object", "additionalProperties": false, "properties": { "scaleFactor": { "type": "number", "description": "Size multiuplier for solar flares. Defaults to 1.", "format": "float", "default": 1 }, "lifeLength": { "type": "number", "description": "How long a solar flare is visible for. Defaults to 15.", "format": "float", "default": 15.0 }, "minTimeBetweenFlares": { "type": "number", "description": "Solar flares are emitted randomly. This is the minimum ammount of time between solar flares.", "format": "float", "default": 5.0 }, "maxTimeBetweenFlares": { "type": "number", "description": "Solar flares are emitted randomly. This is the maximum ammount of time between solar flares.", "format": "float", "default": 30.0 } } }, "WaterModule": { "type": "object", "additionalProperties": false, "properties": { "curve": { "type": "array", "description": "Scale this object over time. Time value is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "size": { "type": "number", "description": "Size of the water sphere", "format": "float" }, "density": { "type": "number", "description": "Density of the water sphere. The higher the density, the harder it is to go through this fluid.", "format": "float", "default": 30.0 }, "buoyancy": { "type": "number", "description": "Buoyancy density of the water sphere", "format": "float", "default": 1.1 }, "tint": { "description": "Tint of the water", "$ref": "#/definitions/MColor" }, "allowShipAutoroll": { "type": "boolean", "description": "Will the ship automatically try to orient itself to face upwards while in this volume?", "default": true } } }, "ParticleFieldModule": { "type": "object", "additionalProperties": false, "properties": { "type": { "description": "Particle type for this vection field.", "$ref": "#/definitions/ParticleFieldType" }, "followTarget": { "description": "What the particle field activates based on.", "default": "player", "$ref": "#/definitions/FollowTarget" }, "densityByHeightCurve": { "type": "array", "description": "Density by height curve. Determines how many particles are emitted at different heights.\nDefaults to a curve based on minimum and maximum heights of various other modules.", "items": { "$ref": "#/definitions/HeightDensityPair" } }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "ParticleFieldType": { "type": "string", "description": "", "x-enumNames": [ "Rain", "SnowflakesHeavy", "SnowflakesLight", "Embers", "Clouds", "Leaves", "Bubbles", "Fog", "CrystalMotes", "RockMotes", "IceMotes", "SandMotes", "Crawlies", "Fireflies", "Plankton", "Pollen", "Current" ], "enum": [ "rain", "snowflakesHeavy", "snowflakesLight", "embers", "clouds", "leaves", "bubbles", "fog", "crystalMotes", "rockMotes", "iceMotes", "sandMotes", "crawlies", "fireflies", "plankton", "pollen", "current" ] }, "FollowTarget": { "type": "string", "description": "", "x-enumNames": [ "Player", "Probe" ], "enum": [ "player", "probe" ] }, "HeightDensityPair": { "type": "object", "additionalProperties": false, "properties": { "height": { "type": "number", "description": "A specific radius", "format": "float" }, "density": { "type": "number", "description": "The particle count for this radius.", "format": "float" } } }, "VolumesModule": { "type": "object", "additionalProperties": false, "properties": { "audioVolumes": { "type": "array", "description": "Add audio volumes to this planet.", "items": { "$ref": "#/definitions/AudioVolumeInfo" } }, "dayNightAudioVolumes": { "type": "array", "description": "Add day night audio volumes to this planet. These volumes play a different clip depending on the time of day.", "items": { "$ref": "#/definitions/DayNightAudioVolumeInfo" } }, "destructionVolumes": { "type": "array", "description": "Add destruction volumes to this planet.\nDestroys bodies if they enter this volume. Can kill the player and recall the scout probe.", "items": { "$ref": "#/definitions/DestructionVolumeInfo" } }, "fluidVolumes": { "type": "array", "description": "Add fluid volumes to this planet.", "items": { "$ref": "#/definitions/FluidVolumeInfo" } }, "hazardVolumes": { "type": "array", "description": "Add hazard volumes to this planet.\nCauses damage to player when inside this volume.", "items": { "$ref": "#/definitions/HazardVolumeInfo" } }, "interferenceVolumes": { "type": "array", "description": "Add interference volumes to this planet.\nHides HUD markers of ship scout/probe and prevents scout photos if you are not inside the volume together with ship or scout probe.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "insulatingVolumes": { "type": "array", "description": "Add insulating volumes to this planet.\nThese will stop electricty hazard volumes from affecting you (just like the jellyfish).", "items": { "$ref": "#/definitions/VolumeInfo" } }, "lightSourceVolumes": { "type": "array", "description": "Add light source volumes to this planet.\nThese will activate rafts and other light detectors.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "mapRestrictionVolumes": { "type": "array", "description": "Add map restriction volumes to this planet.\nThe map will be disabled when inside this volume.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "notificationVolumes": { "type": "array", "description": "Add notification volumes to this planet.\nSends a notification to the player just like ghost matter does when you get too close\nand also to the ship just like when you damage a component on the ship.", "items": { "$ref": "#/definitions/NotificationVolumeInfo" } }, "oxygenVolumes": { "type": "array", "description": "Add oxygen volumes to this planet.", "items": { "$ref": "#/definitions/OxygenVolumeInfo" } }, "probe": { "description": "Add probe-specific volumes to this planet.", "$ref": "#/definitions/ProbeModule" }, "referenceFrameBlockerVolumes": { "type": "array", "description": "Add reference frame blocker volumes to this planet.\nThese will stop the player from seeing/targeting any reference frames.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "revealVolumes": { "type": "array", "description": "Add triggers that reveal parts of the ship log on this planet.", "items": { "$ref": "#/definitions/RevealVolumeInfo" } }, "reverbVolumes": { "type": "array", "description": "Add reverb volumes to this planet. Great for echoes in caves.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "rulesets": { "description": "Add ruleset volumes to this planet.", "$ref": "#/definitions/RulesetModule" }, "speedTrapVolumes": { "type": "array", "description": "Add speed trap volumes to this planet.\nSlows down the player when they enter this volume.", "items": { "$ref": "#/definitions/SpeedTrapVolumeInfo" } }, "visorEffects": { "description": "Add visor effect volumes to this planet.", "$ref": "#/definitions/VisorEffectModule" }, "zeroGravityVolumes": { "type": "array", "description": "Add zero-gravity volumes to this planet. \nGood for surrounding planets which are using a static position to stop the player being pulled away.", "items": { "$ref": "#/definitions/PriorityVolumeInfo" } }, "solarSystemVolume": { "type": "array", "description": "Entering this volume will load a new solar system.", "items": { "$ref": "#/definitions/ChangeStarSystemVolumeInfo" } }, "creditsVolume": { "type": "array", "description": "Enter this volume to be sent to the end credits scene", "items": { "$ref": "#/definitions/LoadCreditsVolumeInfo" } } } }, "AudioVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "layer": { "type": "integer", "description": "The layer of this volume.\n\nLayers separate the priority system. The priority of volumes in one layer will not affect or override volumes in another. The highest priority volume in each layer will stack like normal.\nThe exception is layer 0. A higher-priority volume in layer 0 will override lower-priority volumes in ALL other layers. A lower-priority volume in layer 0 will stack with other layers like normal.\n \nEx: A player could be affected by the sun on layer 9 priority 0 and planet gravity on layer 3 priority 2. They would experience the gravity of both volumes since they are on different layers.\nIf there was a zero-g volume on layer 0 priority 1, since it is on layer 0 it will override the gravity from the sun (priority 0 which is less than 1) but they will still feel the \ngravity of the planet (priority 2 is greater than 1). The zero-g volume will also still be applied because it is on a different layer.\n \nDefault value here is 0 which means this volume's priority will be evaluated against all other priority volumes regardless of their layer.", "format": "int32", "default": 0 }, "priority": { "type": "integer", "description": "The priority of this volume.\n\nVolumes of higher priority will override volumes of lower priority. Volumes of the same priority will stack like normal.\nEx: A player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity.\n \nDefault value here is 1 instead of 0 so it automatically overrides planet gravity, which is 0 by default. ", "format": "int32", "default": 1 }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "audio": { "type": "string", "description": "The audio to use. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "clipSelection": { "default": "random", "$ref": "#/definitions/NHClipSelectionType" }, "track": { "description": "The audio track of this audio volume.\nMost of the time you'll use environment (the default) for sound effects and music for music. ", "default": "environment", "$ref": "#/definitions/NHAudioMixerTrackName" }, "loop": { "type": "boolean", "description": "Whether to loop this audio while in this audio volume or just play it once", "default": true }, "volume": { "type": "number", "description": "The loudness of the audio", "format": "float", "default": 1.0, "maximum": 1.0, "minimum": 0.0 }, "fadeSeconds": { "type": "number", "description": "How long it will take to fade this sound in and out when entering/exiting this volume.", "format": "float", "default": 2.0 }, "noFadeFromBeginning": { "type": "boolean", "description": "Play the sound instantly without any fading." }, "randomizePlayhead": { "type": "boolean", "description": "Randomize what time the audio starts at." }, "pauseOnFadeOut": { "type": "boolean", "description": "Pause the music when exiting the volume." } } }, "NHClipSelectionType": { "type": "string", "description": "", "x-enumNames": [ "RANDOM", "SEQUENTIAL", "MANUAL" ], "enum": [ "random", "sequential", "manual" ] }, "DayNightAudioVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "layer": { "type": "integer", "description": "The layer of this volume.\n\nLayers separate the priority system. The priority of volumes in one layer will not affect or override volumes in another. The highest priority volume in each layer will stack like normal.\nThe exception is layer 0. A higher-priority volume in layer 0 will override lower-priority volumes in ALL other layers. A lower-priority volume in layer 0 will stack with other layers like normal.\n \nEx: A player could be affected by the sun on layer 9 priority 0 and planet gravity on layer 3 priority 2. They would experience the gravity of both volumes since they are on different layers.\nIf there was a zero-g volume on layer 0 priority 1, since it is on layer 0 it will override the gravity from the sun (priority 0 which is less than 1) but they will still feel the \ngravity of the planet (priority 2 is greater than 1). The zero-g volume will also still be applied because it is on a different layer.\n \nDefault value here is 0 which means this volume's priority will be evaluated against all other priority volumes regardless of their layer.", "format": "int32", "default": 0 }, "priority": { "type": "integer", "description": "The priority of this volume.\n\nVolumes of higher priority will override volumes of lower priority. Volumes of the same priority will stack like normal.\nEx: A player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity.\n \nDefault value here is 1 instead of 0 so it automatically overrides planet gravity, which is 0 by default. ", "format": "int32", "default": 1 }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "dayAudio": { "type": "string", "description": "The audio to use during the day. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list. Leave empty for no daytime audio." }, "nightAudio": { "type": "string", "description": "The audio to use during the day. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list. Leave empty for no nightime audio." }, "sun": { "type": "string", "description": "The name of the astro object used to determine if it is day or night." }, "dayWindow": { "type": "number", "description": "Angle in degrees defining daytime. Inside this window it will be day and outside it will be night.", "format": "float", "default": 180.0, "maximum": 360.0, "minimum": 0.0 }, "volume": { "type": "number", "description": "The loudness of the audio", "format": "float", "default": 1.0, "maximum": 1.0, "minimum": 0.0 }, "track": { "description": "The audio track of this audio volume.\nMost of the time you'll use environment (the default) for sound effects and music for music. ", "default": "environment", "$ref": "#/definitions/NHAudioMixerTrackName" } } }, "DestructionVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "shrinkBodies": { "type": "boolean", "description": "Whether the bodies will shrink when they enter this volume or just disappear instantly.", "default": true }, "onlyAffectsPlayerRelatedBodies": { "type": "boolean", "description": "Whether this volume only affects the player, ship, probe/scout, model rocket ship, and nomai shuttle." }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "deathType": { "description": "The type of death the player will have if they enter this volume.", "default": "default", "$ref": "#/definitions/NHDeathType" } } }, "NHDeathType": { "type": "string", "description": "Some special death types are:\n\nSupernova: Special death type used when the supernova hits you. You will not wake up if in the Dreamworld. \n\nDigestion: Death type used by anglerfish (and cut-content ghosts and water monster)\n\nBig bang: Special death type used at the end of the game\n\nMeditation: Special death type used when skipping to the next loop. You will not wake up if in the Dreamworld. \n\nTimeloop: Special death type used when the time loop ends. You will not wake up if in the Dreamworld. \n\nBlackhole: Special death type used by the ATP blackhole (and custom NH blackholes without whitehole destinations)\n\nDream: Special DLC death type used to kill a player in the real world while in the Dreamworld (i.e., you will loop not wake up)\n\nDreamExplosion: Special DLC death type used by the prototype artifact to kill a player in the real world while in the Dreamworld (i.e., you will loop not wake up)\n\nCrushedByElevator: Similar to the Crushed death type, but much faster", "x-enumNames": [ "Default", "Impact", "Asphyxiation", "Energy", "Supernova", "Digestion", "BigBang", "Crushed", "Meditation", "TimeLoop", "Lava", "BlackHole", "Dream", "DreamExplosion", "CrushedByElevator" ], "enum": [ "default", "impact", "asphyxiation", "energy", "supernova", "digestion", "bigBang", "crushed", "meditation", "timeLoop", "lava", "blackHole", "dream", "dreamExplosion", "crushedByElevator" ] }, "FluidVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "layer": { "type": "integer", "description": "The layer of this volume.\n\nLayers separate the priority system. The priority of volumes in one layer will not affect or override volumes in another. The highest priority volume in each layer will stack like normal.\nThe exception is layer 0. A higher-priority volume in layer 0 will override lower-priority volumes in ALL other layers. A lower-priority volume in layer 0 will stack with other layers like normal.\n \nEx: A player could be affected by the sun on layer 9 priority 0 and planet gravity on layer 3 priority 2. They would experience the gravity of both volumes since they are on different layers.\nIf there was a zero-g volume on layer 0 priority 1, since it is on layer 0 it will override the gravity from the sun (priority 0 which is less than 1) but they will still feel the \ngravity of the planet (priority 2 is greater than 1). The zero-g volume will also still be applied because it is on a different layer.\n \nDefault value here is 0 which means this volume's priority will be evaluated against all other priority volumes regardless of their layer.", "format": "int32", "default": 0 }, "priority": { "type": "integer", "description": "The priority of this volume.\n\nVolumes of higher priority will override volumes of lower priority. Volumes of the same priority will stack like normal.\nEx: A player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity.\n \nDefault value here is 1 instead of 0 so it automatically overrides planet gravity, which is 0 by default. ", "format": "int32", "default": 1 }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "density": { "type": "number", "description": "Density of the fluid. The higher the density, the harder it is to go through this fluid.", "format": "float", "default": 1.2 }, "type": { "description": "The type of fluid for this volume.", "$ref": "#/definitions/NHFluidType" }, "alignmentFluid": { "type": "boolean", "description": "Should the player and rafts align to this fluid.", "default": true }, "allowShipAutoroll": { "type": "boolean", "description": "Should the ship align to the fluid by rolling." }, "disableOnStart": { "type": "boolean", "description": "Disable this fluid volume immediately?" } } }, "HazardVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "type": { "description": "The type of hazard for this volume.", "default": "general", "$ref": "#/definitions/HazardType" }, "damagePerSecond": { "type": "number", "description": "The amount of damage you will take per second while inside this volume.", "format": "float", "default": 10.0 }, "firstContactDamageType": { "description": "The type of damage you will take when you first touch this volume.", "default": "impact", "$ref": "#/definitions/InstantDamageType" }, "firstContactDamage": { "type": "number", "description": "The amount of damage you will take when you first touch this volume.", "format": "float" } } }, "VolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 } } }, "NotificationVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "target": { "description": "What the notification will show for.", "default": "all", "$ref": "#/definitions/NotificationTarget" }, "entryNotification": { "description": "The notification that will play when you enter this volume.", "$ref": "#/definitions/NotificationInfo" }, "exitNotification": { "description": "The notification that will play when you exit this volume.", "$ref": "#/definitions/NotificationInfo" } } }, "NotificationTarget": { "type": "string", "description": "", "x-enumNames": [ "All", "Ship", "Player" ], "enum": [ "all", "ship", "player" ] }, "NotificationInfo": { "type": "object", "additionalProperties": false, "properties": { "displayMessage": { "type": "string", "description": "The message that will be displayed." }, "duration": { "type": "number", "description": "The duration this notification will be displayed.", "format": "float", "default": 5.0 } } }, "OxygenVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "treeVolume": { "type": "boolean", "description": "Does this volume contain trees? This will change the notification from \"Oxygen tank refilled\" to \"Trees detected, oxygen tank refilled\"." }, "playRefillAudio": { "type": "boolean", "description": "Whether to play the oxygen tank refill sound or just fill quietly.", "default": true } } }, "ProbeModule": { "type": "object", "additionalProperties": false, "properties": { "destructionVolumes": { "type": "array", "description": "Add probe destruction volumes to this planet.\nThese will delete your probe just like the eye of the universe does.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "safetyVolumes": { "type": "array", "description": "Add probe safety volumes to this planet.\nThese will stop the probe destruction volumes from working.", "items": { "$ref": "#/definitions/VolumeInfo" } } } }, "RevealVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "maxAngle": { "type": "number", "description": "The max view angle (in degrees) the player can see the volume with to unlock the fact (`observe` only)", "format": "float", "default": 180.0 }, "maxDistance": { "type": "number", "description": "The max distance the user can be away from the volume to reveal the fact (`snapshot` and `observe` only)", "format": "float", "default": -1.0 }, "revealOn": { "description": "What needs to be done to the volume to unlock the facts", "default": "enter", "$ref": "#/definitions/RevealVolumeType" }, "revealFor": { "description": "What can enter the volume to unlock the facts (`enter` only)", "default": "both", "$ref": "#/definitions/EnterType" }, "reveals": { "type": "array", "description": "A list of facts to reveal", "items": { "type": "string" } }, "achievementID": { "type": "string", "description": "An achievement to unlock. Optional." } } }, "RevealVolumeType": { "type": "string", "description": "", "x-enumNames": [ "Enter", "Observe", "Snapshot" ], "enum": [ "enter", "observe", "snapshot" ] }, "EnterType": { "type": "string", "description": "", "x-enumNames": [ "Both", "Player", "Probe" ], "enum": [ "both", "player", "probe" ] }, "RulesetModule": { "type": "object", "additionalProperties": false, "properties": { "antiTravelMusicRulesets": { "type": "array", "description": "Add anti travel music rulesets to this planet.\nThis means no space/traveling music while inside the ruleset/volume.\nUsually used on planets.", "items": { "$ref": "#/definitions/VolumeInfo" } }, "playerImpactRulesets": { "type": "array", "description": "Add player impact rulesets to this planet. ", "items": { "$ref": "#/definitions/PlayerImpactRulesetInfo" } }, "probeRulesets": { "type": "array", "description": "Add probe rulesets to this planet.", "items": { "$ref": "#/definitions/ProbeRulesetInfo" } }, "thrustRulesets": { "type": "array", "description": "Add thrust rulesets to this planet.", "items": { "$ref": "#/definitions/ThrustRulesetInfo" } } } }, "PlayerImpactRulesetInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "minImpactSpeed": { "type": "number", "description": "Minimum player impact speed. Player will take the minimum amount of damage if they impact something at this speed.", "format": "float", "default": 20.0 }, "maxImpactSpeed": { "type": "number", "description": "Maximum player impact speed. Players will die if they impact something at this speed.", "format": "float", "default": 40.0 } } }, "ProbeRulesetInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "overrideProbeSpeed": { "type": "boolean", "description": "Should this ruleset override the probe's speed?" }, "probeSpeed": { "type": "number", "description": "The speed of the probe while in this ruleset volume.", "format": "float" }, "overrideLanternRange": { "type": "boolean", "description": "Should this ruleset override the range of probe's light?" }, "lanternRange": { "type": "number", "description": "The range of probe's light while in this ruleset volume.", "format": "float" }, "ignoreAnchor": { "type": "boolean", "description": "Stop the probe from attaching to anything while in this ruleset volume." } } }, "ThrustRulesetInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "thrustLimit": { "type": "number", "description": "Limit how fast you can fly with your ship while in this ruleset volume.", "format": "float", "default": "Infinity" }, "nerfJetpackBooster": { "type": "boolean", "description": "Nerf the jetpack booster." }, "nerfDuration": { "type": "number", "description": "How long the jetpack booster will be nerfed.", "format": "float", "default": 0.5 } } }, "SpeedTrapVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "speedLimit": { "type": "number", "description": "The speed the volume will slow you down to when you enter it.", "format": "float", "default": 10.0 }, "acceleration": { "type": "number", "description": "How fast it will slow down the player to the speed limit.", "format": "float", "default": 3.0 } } }, "VisorEffectModule": { "type": "object", "additionalProperties": false, "properties": { "frostEffectVolumes": { "type": "array", "description": "Add visor frost effect volumes to this planet. This is the ghost matter effect.", "items": { "$ref": "#/definitions/FrostEffectVolumeInfo" } }, "rainEffectVolumes": { "type": "array", "description": "Add visor rain effect volumes to this planet. You can see this on Giant's Deep.", "items": { "$ref": "#/definitions/RainEffectVolumeInfo" } } } }, "FrostEffectVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "layer": { "type": "integer", "description": "The layer of this volume.\n\nLayers separate the priority system. The priority of volumes in one layer will not affect or override volumes in another. The highest priority volume in each layer will stack like normal.\nThe exception is layer 0. A higher-priority volume in layer 0 will override lower-priority volumes in ALL other layers. A lower-priority volume in layer 0 will stack with other layers like normal.\n \nEx: A player could be affected by the sun on layer 9 priority 0 and planet gravity on layer 3 priority 2. They would experience the gravity of both volumes since they are on different layers.\nIf there was a zero-g volume on layer 0 priority 1, since it is on layer 0 it will override the gravity from the sun (priority 0 which is less than 1) but they will still feel the \ngravity of the planet (priority 2 is greater than 1). The zero-g volume will also still be applied because it is on a different layer.\n \nDefault value here is 0 which means this volume's priority will be evaluated against all other priority volumes regardless of their layer.", "format": "int32", "default": 0 }, "priority": { "type": "integer", "description": "The priority of this volume.\n\nVolumes of higher priority will override volumes of lower priority. Volumes of the same priority will stack like normal.\nEx: A player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity.\n \nDefault value here is 1 instead of 0 so it automatically overrides planet gravity, which is 0 by default. ", "format": "int32", "default": 1 }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "frostRate": { "type": "number", "description": "The rate at which the frost effect will get stronger", "format": "float", "default": 0.5 }, "maxFrost": { "type": "number", "description": "The maximum strength of frost this volume can give", "format": "float", "default": 0.91, "maximum": 1.0, "minimum": 0.0 } } }, "RainEffectVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "layer": { "type": "integer", "description": "The layer of this volume.\n\nLayers separate the priority system. The priority of volumes in one layer will not affect or override volumes in another. The highest priority volume in each layer will stack like normal.\nThe exception is layer 0. A higher-priority volume in layer 0 will override lower-priority volumes in ALL other layers. A lower-priority volume in layer 0 will stack with other layers like normal.\n \nEx: A player could be affected by the sun on layer 9 priority 0 and planet gravity on layer 3 priority 2. They would experience the gravity of both volumes since they are on different layers.\nIf there was a zero-g volume on layer 0 priority 1, since it is on layer 0 it will override the gravity from the sun (priority 0 which is less than 1) but they will still feel the \ngravity of the planet (priority 2 is greater than 1). The zero-g volume will also still be applied because it is on a different layer.\n \nDefault value here is 0 which means this volume's priority will be evaluated against all other priority volumes regardless of their layer.", "format": "int32", "default": 0 }, "priority": { "type": "integer", "description": "The priority of this volume.\n\nVolumes of higher priority will override volumes of lower priority. Volumes of the same priority will stack like normal.\nEx: A player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity.\n \nDefault value here is 1 instead of 0 so it automatically overrides planet gravity, which is 0 by default. ", "format": "int32", "default": 1 }, "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "dropletRate": { "type": "number", "description": "The rate at which the rain droplet effect will happen", "format": "float", "default": 0.1 }, "streakRate": { "type": "number", "description": "The rate at which the rain streak effect will happen", "format": "float", "default": 1.0 } } }, "PriorityVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "layer": { "type": "integer", "description": "The layer of this volume.\n\nLayers separate the priority system. The priority of volumes in one layer will not affect or override volumes in another. The highest priority volume in each layer will stack like normal.\nThe exception is layer 0. A higher-priority volume in layer 0 will override lower-priority volumes in ALL other layers. A lower-priority volume in layer 0 will stack with other layers like normal.\n \nEx: A player could be affected by the sun on layer 9 priority 0 and planet gravity on layer 3 priority 2. They would experience the gravity of both volumes since they are on different layers.\nIf there was a zero-g volume on layer 0 priority 1, since it is on layer 0 it will override the gravity from the sun (priority 0 which is less than 1) but they will still feel the \ngravity of the planet (priority 2 is greater than 1). The zero-g volume will also still be applied because it is on a different layer.\n \nDefault value here is 0 which means this volume's priority will be evaluated against all other priority volumes regardless of their layer.", "format": "int32", "default": 0 }, "priority": { "type": "integer", "description": "The priority of this volume.\n\nVolumes of higher priority will override volumes of lower priority. Volumes of the same priority will stack like normal.\nEx: A player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity.\n \nDefault value here is 1 instead of 0 so it automatically overrides planet gravity, which is 0 by default. ", "format": "int32", "default": 1 } } }, "ChangeStarSystemVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "targetStarSystem": { "type": "string", "description": "The star system that entering this volume will send you to.", "default": "SolarSystem" }, "spawnPointID": { "type": "string", "description": "ID assigned to a spawn point in the other system that the player will be sent to\nUses the default spawn if not set" } } }, "LoadCreditsVolumeInfo": { "type": "object", "additionalProperties": false, "properties": { "radius": { "type": "number", "description": "The radius of this volume.", "format": "float", "default": 1.0 }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "creditsType": { "default": "fast", "$ref": "#/definitions/NHCreditsType" }, "gameOverText": { "type": "string", "description": "Text displayed in orange on game over. For localization, put translations under UI." }, "deathType": { "description": "The type of death the player will have if they enter this volume.", "default": "default", "$ref": "#/definitions/NHDeathType" } } }, "NHCreditsType": { "type": "string", "description": "", "x-enumNames": [ "Fast", "Final", "Kazoo" ], "enum": [ "fast", "final", "kazoo" ] }, "CometTailModule": { "type": "object", "additionalProperties": false, "properties": { "curve": { "type": "array", "description": "Scale this object over time. Time value is in minutes.", "items": { "$ref": "#/definitions/TimeValuePair" } }, "rotationOverride": { "description": "Manually sets the local rotation", "$ref": "#/definitions/MVector3" }, "innerRadius": { "type": [ "null", "number" ], "description": "Inner radius of the comet tail, defaults to match surfaceSize", "format": "float" }, "primaryBody": { "type": "string", "description": "The body that the comet tail should always point away from" }, "dustTint": { "description": "Colour of the dust tail (the shorter part)", "$ref": "#/definitions/MColor" }, "gasTint": { "description": "Colour of the gas tail (the longer part)", "$ref": "#/definitions/MColor" } } } }, "$docs": { "title": "Celestial Body Schema", "description": "Schema for a celestial body in New Horizons" } }