Browse/Narrative & Choice/Dynamic Cutscene System (Classic)
Narrative & Choice

Dynamic Cutscene System (Classic)

Design pattern addressing dynamic cutscene system (classic), defining how this system creates engagement and supports the overall game experience.

High complexity
2 examples
2 patterns

Overview

As a core game system, dynamic cutscene system (classic) defines how players interact with this aspect of the game world. The mechanic interacts with multiple other game systems, creating emergent gameplay that extends beyond its individual components. Cross-genre adoption of this mechanic demonstrates its versatility and fundamental appeal to players across different gaming preferences.

Game Examples

Action RPGs

Action RPGs use this mechanic where players respond to dynamic events to maximize their effectiveness. The mechanic integrates seamlessly with other systems, resulting in a sense of mastery.

Martial Arts Games

Martial Arts Games use this mechanic where players prioritize targets to survive increasingly difficult challenges. Failure states are informative rather than punishing, resulting in social interaction.

Pros & Cons

Advantages

  • Adds accessibility without excessive complexity
  • Encourages supportive playstyles and experimentation
  • Enhances tactical without disrupting core gameplay
  • Provides clear numerical feedback on player actions

Disadvantages

  • Increases CPU requirements significantly
  • May overwhelm returning players with too many options
  • Can lead to frustration if overused
  • Risk of balance issues in multiplayer contexts
  • Can create griefing if not carefully balanced

Implementation Patterns

Journal Engine

Core implementation pattern for handling dynamic cutscene system (classic) logic with clean state management.

class DynamicCutsceneSystemClassicSystem {
  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();
  }
}

Reputation Tracker

Event-driven pattern that reacts to dynamic cutscene system (classic) changes and updates dependent systems.

class DynamicCutsceneSystemClassicSystem {
  currentNode: string = "opening";
  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();
  }
}