Skip to content

Interactions, objectives, and quests

Use these components when a player should deliberately operate an object or make visible progress through a multi-step task. All activation, counters, ordering, and score rewards are decided by the authoritative fixed-tick runtime.

Make an object interactive

  1. Give the object a Sensor Collider and the behavior it should perform, such as Dialogue trigger or Objective trigger.
  2. Add Interaction prompt.
  3. Write a short action such as “Open chest”. Set Hold ticks to 1 for a press or a larger value for a hold; 60 ticks is one second.
  4. Optionally set a cooldown or Once per player.
  5. Test with the remappable Interact control (E by default).

Only the nearest eligible sensor receives an activation. The prompt and hold progress appear inside the play view. Scripts on the object use event player_interacted; creator JavaScript never runs.

Build a quest

Add Quest definition to a scene object. Give it a stable ID, player-facing title and description, and 1–16 objectives. Each objective has an ID, title, description, and required count. A sequential quest ignores later objectives until earlier ones finish; a parallel quest accepts any objective in any order.

Add Objective trigger to one or more Sensor objects and choose the quest and objective. A trigger can add 1–999 progress and can be limited to one use per player. Add Interaction prompt to require a deliberate action; without it, entering the sensor advances the objective. Completion and the optional score reward happen once in authoritative state and survive snapshot restoration and network reconciliation.

Branch dialogue safely

A Dialogue trigger can expose up to four authored choices. Enter each Workshop row as id | player label | response line / another response line. Choice IDs use letters, numbers, and underscores. Selecting a choice runs the controlled event dialogue_choice_ID; use capabilities, signals, and tagged entity handles to implement the branch.

riftscript
riftscript 2;

event dialogue_choice_accept {
  let door: entity = entity.find("quest_door");
  entity.set_active(door, false);
  score.add(25);
}

Player-entered text, arbitrary links, and arbitrary code are not supported.

PixelRifts creator documentation · generated reference · protocol 21