Browse/Narrative & Choice/Layered Second Person Narrative (Classic)
Narrative & Choice

Layered Second Person Narrative (Classic)

Game design pattern for layered second person narrative (classic) that creates meaningful player choices and engaging feedback loops.

High complexity
2 examples
2 patterns

Overview

Layered Second Person Narrative (Classic) represents a design pattern that defines how players interact with this aspect of the game world. The implementation varies significantly across genres, with each game adapting the core concept to fit its specific design goals and target audience. Understanding the design principles behind this mechanic helps developers create more engaging and balanced game experiences.

Game Examples

Puzzle Games

Puzzle Games use this mechanic where players balance risk and reward to explore every possibility. The difficulty scales with player performance, resulting in personal achievement.

First-Person Shooters

First-Person Shooters use this mechanic where players interact with NPCs to survive increasingly difficult challenges. The system supports both casual and hardcore engagement, resulting in long-term engagement.

Pros & Cons

Advantages

  • Adds variety without excessive complexity
  • Encourages exploratory playstyles and experimentation
  • Enhances spatial without disrupting core gameplay
  • Enhances mechanical without disrupting core gameplay

Disadvantages

  • Risk of exploitation in competitive environments
  • May conflict with progression systems in the game
  • May conflict with combat systems in the game
  • Creates potential for abuse by experienced players

Implementation Patterns

Dialogue Resolver

A modular approach to layered second person narrative (classic) that separates concerns and enables easy testing.

class LayeredSecondPersonNarrativeClassicEngine {
  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

Data-driven implementation that loads layered second person narrative (classic) configuration from external definitions.

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