Objectives award or deduct points automatically when the simulation state meets a condition. They are the mirror image of events: an event changes the world at a time, while an objective watches the world and scores it. Objectives run without any operator input, which makes them ideal for rewarding correct flying rather than correct answers.

The Space Range Objectives tab

Objectives compared with questions and events

MechanismTriggerScoresNeeds operator input
QuestionOperator submits an answerYesYes
ObjectiveSimulation state meets a conditionYesNo
EventConfigured simulation timeNoNo

Use a question to test what a participant knows, and an objective to reward or penalize what the spacecraft actually does.

Reviewing the fields

Each objective is organized into a header, a Condition group, and an Award group. The header carries the enabled toggle and a running points badge, and a preset dropdown at the top of the tab lets you start from a shipped objective instead of a blank one.

GroupFieldPurposeJSON key
HeaderEnabledToggle on the objective header; whether it is activeobjectives[].enabled
HeaderNameThe objective labelobjectives[].name
HeaderDescriptionWhat the objective rewardsobjectives[].description
HeaderAssetsWhich spacecraft the objective watches; defaults to Anyobjectives[].assets
HeaderTarget ClassThe component class to watch, such as Batteryobjectives[].target
HeaderTarget ComponentThe specific named component, when narrowing to oneobjectives[].target name
HeaderTarget ModelAn optional error model on the component to watchobjectives[].target (model suffix)
ConditionVariableThe specific value being comparedobjectives[].variable
ConditionOperatorThe comparison, shown with friendly names such as ≥ (Greater or Equal)objectives[].operation
ConditionValueThe value compared againstobjectives[].value
ConditionMin TimeOptional lower time bound; enable it with the toggleobjectives[].min_time
ConditionMax TimeOptional upper time bound; enable it with the toggleobjectives[].max_time
AwardPointsPoints awarded, or negative to deductobjectives[].award.points
AwardRepeatableWhether it can score more than onceobjectives[].award.repeatable
AwardHiddenWhether participants see its name before it scoresobjectives[].hidden

NOTE

The Studio UI splits the target into Target Class, Target Component, and Target Model. In the JSON these collapse into target (class or component name, with a -Model suffix for a model) and target name (the component name). There is no domain field in the UI; every objective is a spacecraft objective.

Choosing an operator

The operator decides how Variable is compared to Value. The dropdown shows friendly names for each:

  • ≥ (Greater or Equal) and ≤ (Less or Equal)
  • > (Greater) and < (Less)
  • == (Equal) and != (Not Equal)
  • passes, which fires when the value crosses the threshold in either direction

Use ≥ or ≤ to reward reaching a threshold. Avoid == on a continuously changing value, since it almost never matches exactly; reserve it for discrete values such as a bool or an integer state.

Adding an objective to Pathfinder Checkout

Reward operators for keeping the battery healthy:

  • Name: Maintain Battery
  • Assets: SC_001
  • Target Class: Battery
  • Variable: Charge Fraction
  • Operator: ≥ (Greater or Equal)
  • Value: 0.5
  • Points: 10

Optionally add a penalty objective that deducts points if the charge fraction drops below 0.1, using a negative Points value.

WARNING

The Variable and Target Class must match names and values the simulation actually produces. A misspelled variable silently never scores. Verify each objective by running the scenario and watching the score change.

Testing objectives

  1. construct the scenario
  2. run through the condition window
  3. confirm the score changes by the expected amount
  4. confirm a non-repeatable objective scores only once
  5. confirm a hidden objective stays hidden until it scores

Next, create the scored questions.