Skip to content

Instantly share code, notes, and snippets.

@Bwc9876
Created July 5, 2023 21:54
Show Gist options
  • Save Bwc9876/d54b0a1185f223cac6fdc0110832f929 to your computer and use it in GitHub Desktop.
Save Bwc9876/d54b0a1185f223cac6fdc0110832f929 to your computer and use it in GitHub Desktop.
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Celestial Body Schema",
"type": "object",
"description": "Describes a celestial body to generate",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Unique name of your planet",
"minLength": 1
},
"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"
},
"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"
},
"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"
},
"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",
"maximum": 1.0,
"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"
},
"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?"
},
"hasSnow": {
"type": "boolean",
"description": "Does this planet have snow?"
},
"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
}
}
},
"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"
},
"hasMapMarker": {
"type": "boolean",
"description": "If the body should have a marker on the map screen."
},
"invulnerableToSun": {
"type": "boolean",
"description": "Can this planet survive entering a star?"
},
"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.",
"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
}
}
},
"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)",
"$ref": "#/definitions/MColor"
},
"fogDensity": {
"type": "number",
"description": "The density of the fog inside this dimension. The default is 6.",
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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. It's a bit finicky so experiment with different values. If you\ndon't want a cloak, leave this as 0.",
"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."
}
}
},
"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"
}
}
},
"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"
},
"isTidallyLocked": {
"type": "boolean",
"description": "Should the body always have one side facing its primary?"
},
"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?"
},
"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."
},
"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?"
},
"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",
"default": 5000.0,
"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",
"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 (from the DLC) to the planet",
"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"
}
}
}
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"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 even if you're outside the sector (good for very large props)"
},
"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
},
"ignoreSun": {
"type": "boolean",
"description": "Set to true if this object's lighting should ignore the effects of sunlight"
}
}
},
"DialogueInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"position": {
"description": "Position of the object",
"$ref": "#/definitions/MVector3"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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."
},
"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
},
"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"
}
}
},
"RemoteTriggerInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"position": {
"description": "Position of the object",
"$ref": "#/definitions/MVector3"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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)"
}
}
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
},
"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"
}
}
},
"SlideInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"ambientLightColor": {
"description": "Ambient light colour when viewing this slide.",
"$ref": "#/definitions/MColor"
},
"ambientLightIntensity": {
"type": "number",
"description": "Ambient light intensity when viewing this slide.",
"format": "float"
},
"ambientLightRange": {
"type": "number",
"description": "Ambient light range when viewing this slide.",
"format": "float"
},
"backdropAudio": {
"type": "string",
"description": "The name of the AudioClip that will continuously play while watching these slides"
},
"backdropFadeTime": {
"type": "number",
"description": "The time to fade into the backdrop audio",
"format": "float"
},
"beatAudio": {
"type": "string",
"description": "The name of the AudioClip for a one-shot sound when opening the slide."
},
"beatDelay": {
"type": "number",
"description": "The time delay until the one-shot audio",
"format": "float"
},
"blackFrameDuration": {
"type": "number",
"description": "Before viewing this slide, there will be a black frame for this many seconds.",
"format": "float"
},
"imagePath": {
"type": "string",
"description": "The path to the image file for this slide."
},
"playTimeDuration": {
"type": "number",
"description": "Play-time duration for auto-projector slides.",
"format": "float"
},
"reveal": {
"type": "string",
"description": "Ship log fact revealed when viewing this slide"
},
"spotIntensityMod": {
"type": "number",
"description": "Spotlight intensity modifier when viewing this slide.",
"format": "float"
}
}
},
"SlideShowType": {
"type": "string",
"description": "",
"x-enumNames": [
"SlideReel",
"AutoProjector",
"VisionTorchTarget",
"StandingVisionTorch"
],
"enum": [
"slideReel",
"autoProjector",
"visionTorchTarget",
"standingVisionTorch"
]
},
"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",
"FailedValidation"
],
"enum": [
"sockets",
"states",
"FailedValidation"
]
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
}
},
"TornadoType": {
"type": "string",
"description": "",
"x-enumNames": [
"Upwards",
"Downwards",
"Hurricane"
],
"enum": [
"upwards",
"downwards",
"hurricane"
]
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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/PlatformInfo"
},
"stones": {
"type": "array",
"description": "Projection stones",
"items": {
"$ref": "#/definitions/StoneInfo"
}
}
}
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
}
},
"PlatformInfo": {
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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."
}
}
},
"StoneInfo": {
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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/NomaiWarpComputerLoggerInfo"
},
"detailed": {
"type": "boolean",
"description": "Set to true if you want to include Nomai ruin details around the warp pad."
}
}
},
"NomaiWarpComputerLoggerInfo": {
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
]
},
"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.",
"x-file-path": true
}
}
},
"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": {
"playerSpawn": {
"description": "If you want the player to spawn on the new body, set a value for this.",
"$ref": "#/definitions/PlayerSpawnPoint"
},
"shipSpawn": {
"description": "Required for the system to be accessible by warp drive.",
"$ref": "#/definitions/ShipSpawnPoint"
}
}
},
"PlayerSpawnPoint": {
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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 ;;)"
},
"isDefault": {
"type": "boolean",
"description": "Whether this planet's spawn point is the one the player will initially spawn at, if multiple spawn points exist."
}
}
},
"ShipSpawnPoint": {
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
}
},
"StellarDeathType": {
"type": "string",
"description": "",
"x-enumNames": [
"Default",
"None",
"PlanetaryNebula",
"Supernova"
],
"enum": [
"default",
"none",
"planetaryNebula",
"supernova"
]
},
"StellarRemnantType": {
"type": "string",
"description": "",
"x-enumNames": [
"Default",
"WhiteDwarf",
"NeutronStar",
"Pulsar",
"BlackHole",
"Custom"
],
"enum": [
"default",
"whiteDwarf",
"neutronStar",
"pulsar",
"blackHole",
"custom"
]
},
"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"
}
}
},
"VolumesModule": {
"type": "object",
"additionalProperties": false,
"properties": {
"audioVolumes": {
"type": "array",
"description": "Add audio volumes to this planet.",
"items": {
"$ref": "#/definitions/AudioVolumeInfo"
}
},
"destructionVolumes": {
"type": "array",
"description": "Add destruction volumes to this planet.",
"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.",
"items": {
"$ref": "#/definitions/HazardVolumeInfo"
}
},
"interferenceVolumes": {
"type": "array",
"description": "Add interference volumes to this planet.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"insulatingVolumes": {
"type": "array",
"description": "Add insulating volumes to this planet. These 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. These will activate rafts and other light detectors.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"mapRestrictionVolumes": {
"type": "array",
"description": "Add map restriction volumes to this planet.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"notificationVolumes": {
"type": "array",
"description": "Add notification volumes to this planet.",
"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. These 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. Slows 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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
]
},
"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
},
"onlyAffectsPlayerAndShip": {
"type": "boolean",
"description": "Whether this volume only affects the player and ship."
},
"radius": {
"type": "number",
"description": "The radius of this volume.",
"format": "float",
"default": 1.0
},
"position": {
"description": "Position of the object",
"$ref": "#/definitions/MVector3"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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": "",
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
}
},
"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"
]
},
"VolumeInfo": {
"type": "object",
"additionalProperties": false,
"properties": {
"position": {
"description": "Position of the object",
"$ref": "#/definitions/MVector3"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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. These will delete your probe.",
"items": {
"$ref": "#/definitions/VolumeInfo"
}
},
"safetyVolumes": {
"type": "array",
"description": "Add probe safety volumes to this planet. These 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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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.",
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
}
},
"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"
},
"parentPath": {
"type": "string",
"description": "The relative path from the planet to the parent of this object. Optional (will default to the root sector)."
},
"isRelativeToParent": {
"type": "boolean",
"description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object."
},
"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"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment