A Space Range scenario is one JSON object. Studio first parses it into definitions, then constructs the simulation world from those definitions.

Starting document shape

{
  "metadata": {},
  "simulation": {},
  "universe": {},
  "ground_stations": {},
  "teams": [],
  "assets": {
    "space": [],
    "collections": [],
    "neutral": []
  },
  "docking": [],
  "objects": {
    "ground": [],
    "space": []
  },
  "events": [],
  "questions": []
}

Most sections are optional to the parser. A useful team exercise still needs:

  • at least one enabled team
  • at least one spacecraft definition
  • a collection containing that spacecraft
  • a team that references the collection
  • a valid ground station

Writing strict JSON

  • use double quotes
  • do not use comments
  • do not use trailing commas
  • keep property names and references consistent
  • use a JSON-aware editor

Most keys are matched without regard to capitalization, but event parameter names must match the supported component properties. Use the casing shown in examples.

Loading definitions

In Studio:

  1. save the current project
  2. open Space Range
  3. select Load Scenario
  4. choose the scenario JSON
  5. open Script and confirm the content
  6. select Apply Changes after editing Script

Loading updates the scenario definitions. It does not by itself guarantee that every spacecraft has been created.

Constructing the world

Select Construct Scenario after the definitions are valid. Studio then:

  1. clears the existing Space Range world
  2. applies simulation and universe settings
  3. creates ground stations
  4. creates ground and passive space objects
  5. creates a ground controller for every enabled team
  6. resolves each team’s collection and creates its spacecraft
  7. creates neutral spacecraft once
  8. initializes spacecraft controllers
  9. applies initial docking and interconnects

Events and questions are registered from the file and become active during the run.

Understanding partial construction

Studio can continue after skipping an invalid item. Examples include:

  • a duplicate team ID
  • a missing collection
  • a collection containing an unknown spacecraft ID
  • an unsupported component class
  • a malformed question

Always inspect the Console Panel and test through Operator. A populated Outliner does not prove every section loaded.

Nested and dotted keys

Authoring examples use nested objects:

"orbit": {
  "planet": "Earth",
  "values": [7000, 0, 51.6, 0, 0, 0]
}

Studio exports some values with dotted keys:

"orbit.planet": "Earth",
"orbit.values": [7000, 0, 51.6, 0, 0, 0]

Both forms load. Round-trip formatting differences are expected.

Next, configure the global scenario settings.