Browse/Narrative & Choice/Interactive Cutscene / QTE
Narrative & Choice

Interactive Cutscene / QTE

A system that manages interactive cutscene / qte mechanics, providing structured rules for how this feature operates within the game.

High complexity
3 examples
2 patterns

Overview

The interactive cutscene / qte mechanic provides a framework that creates a structured experience around this game element. The mechanic interacts with multiple other game systems, creating emergent gameplay that extends beyond its individual components. The key to successful implementation lies in clear communication of rules, fair outcomes, and satisfying feedback for player actions.

Game Examples

Party Games

Party Games use this mechanic where players coordinate with teammates to maximize their effectiveness. Visual and audio feedback make the interaction satisfying, resulting in memorable moments.

Management Games

Management Games use this mechanic where players weigh competing priorities to complete objectives efficiently. The mechanic creates natural tension and release cycles, resulting in build diversity.

Wrestling Games

Wrestling Games use this mechanic where players decode hidden patterns to express their creativity. The mechanic creates natural tension and release cycles, resulting in emergent storytelling.

Pros & Cons

Advantages

  • Reduces confusion while maintaining challenge
  • Integrates naturally with progression systems
  • Easy to understand but difficult to master
  • Adds replayability without excessive complexity

Disadvantages

  • Can create unfair when RNG is unfavorable
  • Creates potential for abuse by experienced players
  • Increases memory requirements significantly
  • May reduce immersion if implemented poorly
  • May reduce pacing if implemented poorly

Implementation Patterns

Branching Engine

Core implementation pattern for handling interactive cutscene / qte logic with clean state management.

class InteractiveCutsceneQteEngine {
  currentNode: string = "intro";
  flags: Set<string> = new Set();

  getDialogue() {
    const node = DIALOGUE_TREE[this.currentNode];
    return {
      text: node.text,
      choices: node.choices.filter(c =>
        !c.requires || c.requires.every(f => this.flags.has(f))
      )
    };
  }

  choose(choiceIndex: number) {
    const node = DIALOGUE_TREE[this.currentNode];
    const choice = node.choices[choiceIndex];
    if (choice.setsFlag) this.flags.add(choice.setsFlag);
    this.currentNode = choice.next;
    return this.getDialogue();
  }
}

Choice Evaluator

Event-driven pattern that reacts to interactive cutscene / qte changes and updates dependent systems.

class InteractiveCutsceneQteProcessor {
  currentNode: string = "greeting";
  flags: Set<string> = new Set();

  getDialogue() {
    const node = DIALOGUE_TREE[this.currentNode];
    return {
      text: node.text,
      choices: node.choices.filter(c =>
        !c.requires || c.requires.every(f => this.flags.has(f))
      )
    };
  }

  choose(choiceIndex: number) {
    const node = DIALOGUE_TREE[this.currentNode];
    const choice = node.choices[choiceIndex];
    if (choice.setsFlag) this.flags.add(choice.setsFlag);
    this.currentNode = choice.next;
    return this.getDialogue();
  }
}