{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Star System Schema", "type": "object", "description": "Configuration for a specific star system", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "Unique name of your system. If not specified, the file name (without the extension) is used." }, "allowOutsideItems": { "type": "boolean", "description": "When changing star systems are you allowed to bring items into this system?", "default": true }, "freeMapAngle": { "type": "boolean", "description": "In this system should the player be able to rotate their map camera freely or be stuck above the plane of the solar system?" }, "returnToSolarSystemWhenTooFar": { "type": "boolean", "description": "When well past the furthest orbit, should the player be summoned back to the star?" }, "farClipPlaneOverride": { "type": "number", "description": "An override value for the far clip plane. Allows you to see farther.", "format": "float" }, "canEnterViaWarpDrive": { "type": "boolean", "description": "Whether this system can be warped to via the warp drive. If you set `factRequiredForWarp`, this should be true.\nDoes NOT effect the base SolarSystem. For that, see `canExitViaWarpDrive` and `factRequiredToExitViaWarpDrive`", "default": true }, "factRequiredForWarp": { "type": "string", "description": "The FactID that must be revealed before it can be warped to. Don't set `canEnterViaWarpDrive` to `false` if\nyou're using this, because it will be overwritten." }, "canExitViaWarpDrive": { "type": "boolean", "description": "Can you use the warp drive to leave this system? If you set `factRequiredToExitViaWarpDrive`\nthis should be true.", "default": true }, "factRequiredToExitViaWarpDrive": { "type": "string", "description": "The FactID that must be revealed for you to warp back to the main solar system from here. Don't set `canExitViaWarpDrive`\nto `false` if you're using this, because it will be overwritten." }, "destroyStockPlanets": { "type": "boolean", "description": "Do you want a clean slate for this star system? Or will it be a modified version of the original.", "default": true }, "enableTimeLoop": { "type": "boolean", "description": "Should the time loop be enabled in this system?", "default": true }, "loopDuration": { "type": "number", "description": "The duration of the time loop in minutes. This is the time the sun explodes. End Times plays 85 seconds before this time, and your memories get sent back about 40 seconds after this time.", "format": "float", "default": 22.0 }, "mapRestricted": { "type": "boolean", "description": "Should the player not be able to view the map in this system?" }, "Skybox": { "description": "Customize the skybox for this system", "$ref": "#/definitions/SkyboxModule" }, "startHere": { "type": "boolean", "description": "Set to `true` if you want to spawn here after dying, not Timber Hearth. You can still warp back to the main star system." }, "respawnHere": { "type": "boolean", "description": "Set to `true` if you want the player to stay in this star system if they die in it." }, "optOutWarpDriveModel": { "type": "boolean", "description": "Whether to disable the warp drive model on the ship in your system. (and ignore your system in the warp drive model visibility logic for other systems)" }, "GlobalMusic": { "description": "Replace music that plays globally", "$ref": "#/definitions/GlobalMusicModule" }, "Vessel": { "description": "Configure warping to this system with the vessel", "$ref": "#/definitions/VesselModule" }, "StarChart": { "description": "Configure how this system will appear in the Interstellar Mode in the ship log.", "$ref": "#/definitions/StarChartModule" }, "entryPositions": { "type": "array", "description": "Manually layout ship log entries in detective mode", "items": { "$ref": "#/definitions/EntryPositionInfo" } }, "initialReveal": { "type": "array", "description": "A list of fact IDs to reveal when the game starts.", "items": { "type": "string" } }, "shipLogStartingPlanetID": { "type": "string", "description": "The planet to focus on when entering the ship log for the first time in a loop. If not set this will be the planet at navtigation position (1, 0)" }, "curiosities": { "type": "array", "description": "List colors of curiosity entries", "items": { "$ref": "#/definitions/CuriosityColorInfo" } }, "conditionalChecks": { "type": "array", "description": "A list of conditional checks to be performed while in this star system.", "items": { "$ref": "#/definitions/ConditionalCheckInfo" } }, "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": { "SkyboxModule": { "type": "object", "additionalProperties": false, "properties": { "destroyStarField": { "type": "boolean", "description": "Whether to destroy the star field around the player" }, "useCube": { "type": "boolean", "description": "Whether to use a cube for the skybox instead of a smooth sphere" }, "rightPath": { "type": "string", "description": "Relative filepath to the texture to use for the skybox's positive X direction" }, "leftPath": { "type": "string", "description": "Relative filepath to the texture to use for the skybox's negative X direction" }, "topPath": { "type": "string", "description": "Relative filepath to the texture to use for the skybox's positive Y direction" }, "bottomPath": { "type": "string", "description": "Relative filepath to the texture to use for the skybox's negative Y direction" }, "frontPath": { "type": "string", "description": "Relative filepath to the texture to use for the skybox's positive Z direction" }, "backPath": { "type": "string", "description": "Relative filepath to the texture to use for the skybox's negative Z direction" } } }, "GlobalMusicModule": { "type": "object", "additionalProperties": false, "properties": { "travelAudio": { "type": "string", "description": "The audio that will play when travelling in space. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "endTimesAudio": { "type": "string", "description": "The audio that will play right before the loop ends. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "endTimesDreamAudio": { "type": "string", "description": "The audio that will play right before the loop ends while inside the dreamworld. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "brambleDimensionAudio": { "type": "string", "description": "The audio that will play when travelling through a bramble dimension. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "finalEndTimesIntroAudio": { "type": "string", "description": "The audio that will play when you leave the ash twin project after taking out the advanced warp core. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "finalEndTimesLoopAudio": { "type": "string", "description": "The audio that will loop after the final end times intro. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." }, "finalEndTimesBrambleDimensionAudio": { "type": "string", "description": "The audio that will loop after the final end times intro while inside a bramble dimension. Can be a path to a .wav/.ogg/.mp3 file, or taken from the AudioClip list." } } }, "VesselModule": { "type": "object", "additionalProperties": false, "properties": { "coords": { "description": "Coordinates that the vessel can use to warp to your solar system.", "$ref": "#/definitions/NomaiCoordinates" }, "promptFact": { "type": "string", "description": "A ship log fact which will make a prompt appear showing the coordinates when you're in the Vessel." }, "alwaysPresent": { "type": "boolean", "description": "Whether the vessel should spawn in this system even if it wasn't used to warp to it. This will automatically power on the vessel." }, "spawnOnVessel": { "type": "boolean", "description": "Whether to always spawn the player on the vessel, even if it wasn't used to warp to the system." }, "hasPhysics": { "type": [ "boolean", "null" ], "description": "Whether the vessel should have physics enabled. Defaults to false if parentBody is set, and true otherwise." }, "hasZeroGravityVolume": { "type": [ "boolean", "null" ], "description": "Whether the vessel should have a zero-gravity volume around it. Defaults to false if parentBody is set, and true otherwise." }, "vesselSpawn": { "description": "The location that the vessel will warp to.", "$ref": "#/definitions/VesselInfo" }, "warpExit": { "description": "The location that you will be teleported to when you exit the vessel through the black hole.", "$ref": "#/definitions/WarpExitInfo" } } }, "NomaiCoordinates": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "array", "maxItems": 6, "minItems": 2, "uniqueItems": true, "items": { "type": "integer", "format": "int32" } }, "y": { "type": "array", "maxItems": 6, "minItems": 2, "uniqueItems": true, "items": { "type": "integer", "format": "int32" } }, "z": { "type": "array", "maxItems": 6, "minItems": 2, "uniqueItems": true, "items": { "type": "integer", "format": "int32" } } } }, "VesselInfo": { "type": "object", "additionalProperties": false, "properties": { "parentBody": { "type": "string", "description": "The name of the planet that will be used with `parentPath`. Must be set if `parentPath` is set." }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the planet's root sector)." }, "sectorPath": { "type": "string", "description": "The relative path from the planet to the sector that this object will be linked to. The special value \"auto\" will use the most specific sector in the parent path. Optional (will default to the planet's root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" } } }, "MVector3": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "float" }, "y": { "type": "number", "format": "float" }, "z": { "type": "number", "format": "float" } } }, "WarpExitInfo": { "type": "object", "additionalProperties": false, "properties": { "parentBody": { "type": "string", "description": "The name of the planet that will be used with `parentPath`. Must be set if `parentPath` is set." }, "rotation": { "description": "Rotation of the object", "$ref": "#/definitions/MVector3" }, "alignRadial": { "type": [ "boolean", "null" ], "description": "Do we try to automatically align this object to stand upright relative to the body's center? Stacks with rotation.\nDefaults to true for geysers, tornados, and volcanoes, and false for everything else." }, "position": { "description": "Position of the object", "$ref": "#/definitions/MVector3" }, "isRelativeToParent": { "type": "boolean", "description": "Whether the positional and rotational coordinates are relative to parent instead of the root planet object." }, "parentPath": { "type": "string", "description": "The relative path from the planet to the parent of this object. Optional (will default to the planet's root sector)." }, "sectorPath": { "type": "string", "description": "The relative path from the planet to the sector that this object will be linked to. The special value \"auto\" will use the most specific sector in the parent path. Optional (will default to the planet's root sector)." }, "rename": { "type": "string", "description": "An optional rename of this object" }, "attachToVessel": { "type": "boolean", "description": "If set, keeps the warp exit attached to the vessel. Overrides `parentPath`." } } }, "StarChartModule": { "type": "object", "additionalProperties": false, "properties": { "position": { "description": "The position of the system on the star chart.\nThis applies regardless of any other settings.", "$ref": "#/definitions/MVector2" }, "color": { "description": "The color of the star as it appears on the star chart.\nIf specified, it will override any custom generation we do.", "$ref": "#/definitions/MColor" }, "starTexturePath": { "type": "string", "description": "Filepath to a texture that will replace the default texture used to display this star in the star map.\nIf you use this, it's probably best to leave the color field blank, unless you have a white texture that you'd like to tint a different color.\nIf specified, it will override any custom generation we do." }, "disappearanceTime": { "type": [ "null", "number" ], "description": "Time in the loop (in minutes) that this system will disappear.\nIf not specified, the time is calculated automatically based on the stars and singularities in the system.\nIf specified, this value takes priority over automatic calculations.\nIf color or starTexturePath is specified but this is not, it will default to 0 meaning players can warp to your system at any point.\nA 22 minutes and 40 seconds (22.667) disappearance time will make the system unavailable to warp to at the exact moment the vanilla loop ends.", "format": "float" } } }, "MVector2": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "float" }, "y": { "type": "number", "format": "float" } } }, "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 } } }, "EntryPositionInfo": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "description": "The name of the entry to apply the position to." }, "position": { "description": "Position of the entry", "$ref": "#/definitions/MVector2" } } }, "CuriosityColorInfo": { "type": "object", "additionalProperties": false, "properties": { "color": { "description": "The color to apply to entries with this curiosity.", "$ref": "#/definitions/MColor" }, "highlightColor": { "description": "The color to apply to highlighted entries with this curiosity.", "$ref": "#/definitions/MColor" }, "id": { "type": "string", "description": "The ID of the curiosity to apply the color to." } } }, "ConditionalCheckInfo": { "type": "object", "additionalProperties": false, "properties": { "check": { "description": "The conditions that must be met for the check to pass", "$ref": "#/definitions/ConditionalCheckConditionsInfo" }, "then": { "description": "The effects of the check if it passes", "$ref": "#/definitions/ConditionalCheckEffectsInfo" } } }, "ConditionalCheckConditionsInfo": { "type": "object", "additionalProperties": false, "properties": { "allConditionsSet": { "type": "array", "description": "The check will only pass if all of these dialogue conditions are set", "items": { "type": "string" } }, "anyConditionsSet": { "type": "array", "description": "The check will only pass if any of these dialogue conditions are set", "items": { "type": "string" } }, "allPersistentConditionsSet": { "type": "array", "description": "The check will only pass if all of these persistent conditions are set", "items": { "type": "string" } }, "anyPersistentConditionsSet": { "type": "array", "description": "The check will only pass if any of these persistent conditions are set", "items": { "type": "string" } }, "allFactsRevealed": { "type": "array", "description": "The check will only pass if all of these ship log facts are revealed", "items": { "type": "string" } }, "anyFactsRevealed": { "type": "array", "description": "The check will only pass if any of these ship log facts are revealed", "items": { "type": "string" } }, "invert": { "type": "boolean", "description": "If the check should pass only if the conditions are not met" } } }, "ConditionalCheckEffectsInfo": { "type": "object", "additionalProperties": false, "properties": { "setConditions": { "type": "array", "description": "The check will set these dialogue conditions if it passes", "items": { "type": "string" } }, "unsetConditions": { "type": "array", "description": "The check will unset these dialogue conditions if it passes", "items": { "type": "string" } }, "setPersistentConditions": { "type": "array", "description": "The check will set these persistent conditions if it passes", "items": { "type": "string" } }, "unsetPersistentConditions": { "type": "array", "description": "The check will unset these persistent conditions if it passes", "items": { "type": "string" } }, "revealFacts": { "type": "array", "description": "The check will reveal these ship log facts if it passes", "items": { "type": "string" } }, "reversible": { "type": "boolean", "description": "If the check should undo its effects if the conditions are not met anymore (unset the set conditions, etc.). Note: ship log facts cannot currently be unrevealed." } } } }, "$docs": { "title": "Star System Schema", "description": "Schema for a star system in New Horizons" } }