{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Star System Schema",
  "type": "object",
  "description": "Configuration for a specific star system",
  "additionalProperties": false,
  "properties": {
    "canEnterViaWarpDrive": {
      "type": "boolean",
      "description": "Whether this system can be warped to via the warp drive",
      "default": true
    },
    "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
    },
    "factRequiredForWarp": {
      "type": "string",
      "description": "Set to the FactID that must be revealed before it can be warped to. Don't set `CanEnterViaWarpDrive` to `false` if\nyou're using this, that would make no sense."
    },
    "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\nsystem."
    },
    "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."
    },
    "Vessel": {
      "description": "Configure warping to this system with the vessel",
      "$ref": "#/definitions/VesselModule"
    },
    "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"
      }
    },
    "curiosities": {
      "type": "array",
      "description": "List colors of curiosity entries",
      "items": {
        "$ref": "#/definitions/CuriosityColorInfo"
      }
    },
    "$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"
        }
      }
    },
    "VesselModule": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "coords": {
          "description": "Coordinates that the vessel can use to warp to your solar system.",
          "$ref": "#/definitions/NomaiCoordinates"
        },
        "vesselPosition": {
          "description": "The position in the solar system the vessel will warp to.",
          "$ref": "#/definitions/MVector3"
        },
        "vesselRotation": {
          "description": "Euler angles by which the vessel will be oriented.",
          "$ref": "#/definitions/MVector3"
        },
        "warpExitPosition": {
          "description": "The relative position to the vessel that you will be teleported to when you exit the vessel through the black hole.",
          "$ref": "#/definitions/MVector3"
        },
        "warpExitRotation": {
          "description": "Euler angles by which the warp exit will be oriented.",
          "$ref": "#/definitions/MVector3"
        }
      }
    },
    "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"
          }
        }
      }
    },
    "MVector3": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "x": {
          "type": "number",
          "format": "float"
        },
        "y": {
          "type": "number",
          "format": "float"
        },
        "z": {
          "type": "number",
          "format": "float"
        }
      }
    },
    "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"
        }
      }
    },
    "MVector2": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "x": {
          "type": "number",
          "format": "float"
        },
        "y": {
          "type": "number",
          "format": "float"
        }
      }
    },
    "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."
        }
      }
    },
    "MColor": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "r": {
          "type": "integer",
          "description": "The red component of this colour",
          "format": "int32",
          "maximum": 2147483647.0,
          "minimum": 0.0
        },
        "g": {
          "type": "integer",
          "description": "The green component of this colour",
          "format": "int32",
          "maximum": 2147483647.0,
          "minimum": 0.0
        },
        "b": {
          "type": "integer",
          "description": "The blue component of this colour",
          "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
        }
      }
    }
  },
  "$docs": {
    "title": "Star System Schema",
    "description": "Schema for a star system in New Horizons"
  }
}