Appearance
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
- Give the object a Sensor Collider and the behavior it should perform, such as Dialogue trigger or Objective trigger.
- Add Interaction prompt.
- Write a short action such as “Open chest”. Set Hold ticks to
1for a press or a larger value for a hold; 60 ticks is one second. - Optionally set a cooldown or Once per player.
- Test with the remappable Interact control (
Eby 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.