Browse/Narrative & Choice/Balanced Treaty / Agreement
Narrative & Choice

Balanced Treaty / Agreement

Implementation of balanced treaty / agreement that defines how players interact with this aspect of the game, including feedback and progression.

Low complexity
2 examples
2 patterns

Overview

Balanced Treaty / Agreement represents a design pattern that provides meaningful choices and consequences for player actions. Designers must carefully balance the system's depth against its learning curve, ensuring that new players can engage while experienced players find room for mastery. The key to successful implementation lies in clear communication of rules, fair outcomes, and satisfying feedback for player actions.

Game Examples

Metroidvanias

Metroidvanias use this mechanic where players manage resources carefully to progress through the content. The system rewards both skill and knowledge, resulting in exploration incentives.

Party Games

Party Games use this mechanic where players explore the environment to discover hidden content. The feedback loop reinforces player engagement, resulting in exploration incentives.

Pros & Cons

Advantages

  • Creates meaningful economic decisions for players
  • Creates natural synergy between players
  • Adds immersion without excessive complexity

Disadvantages

  • Can lead to disengagement if overused
  • Difficult to balance across a wide range of skill levels
  • Creates potential for cheese strategies by experienced players

Implementation Patterns

Lore Database

A modular approach to balanced treaty / agreement that separates concerns and enables easy testing.

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

NPC Scheduler

Event-driven pattern that reacts to balanced treaty / agreement changes and updates dependent systems.

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