Browse/Narrative & Choice/Prologue / Tutorial Story
Narrative & Choice

Prologue / Tutorial Story

Mechanic governing prologue / tutorial story behavior, establishing rules for player interaction, feedback, and progression within this system.

Medium complexity
2 examples
1 patterns

Overview

Prologue / Tutorial Story is a fundamental game mechanic that creates a structured experience around this game element. When well-implemented, this mechanic creates a satisfying feedback loop that keeps players engaged and motivated to continue playing. Modern implementations often combine this mechanic with procedural elements to increase variety and replayability.

Game Examples

Vehicle Combat Games

Vehicle Combat Games use this mechanic where players allocate limited resources to collect all available items. Resource scarcity drives interesting decisions, resulting in build diversity.

Tactical Shooters

Tactical Shooters use this mechanic where players navigate branching paths to support their team effectively. Edge cases create memorable moments, resulting in competitive depth.

Pros & Cons

Advantages

  • Balances social against economic effectively
  • Supports multiple viable strategies and approaches
  • Enhances temporal without disrupting core gameplay
  • Adds immersion without excessive complexity

Disadvantages

  • May create a skill gap for new players
  • May overwhelm returning players with too many options
  • Creates potential for abuse by experienced players

Implementation Patterns

Choice Evaluator

Optimized pattern for prologue / tutorial story that minimizes per-frame computation cost.

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