Browse/Crafting & Building/Name / Inscription
Crafting & Building

Name / Inscription

Design pattern addressing name / inscription, defining how this system creates engagement and supports the overall game experience.

Low complexity
2 examples
2 patterns

Overview

Name / Inscription represents a design pattern that provides meaningful choices and consequences for player actions. Historical evolution of this mechanic shows a trend toward greater player agency and more nuanced implementation across different game genres. Modern implementations often combine this mechanic with procedural elements to increase variety and replayability.

Game Examples

Point-and-Click Adventures

Point-and-Click Adventures use this mechanic where players manage resources carefully to express their creativity. The system tracks multiple variables simultaneously, resulting in strategic variety.

Vehicle Combat Games

Vehicle Combat Games use this mechanic where players coordinate with teammates to support their team effectively. The system encourages experimentation, resulting in build diversity.

Pros & Cons

Advantages

  • Provides long-term engagement for dedicated players
  • Provides clear audio feedback on player actions
  • Balances mechanical against mechanical effectively

Disadvantages

  • May overwhelm returning players with too many options
  • Risk of analysis paralysis in multiplayer contexts
  • Can create balance issues if not carefully balanced

Implementation Patterns

Durability Tracker

A modular approach to name / inscription that separates concerns and enables easy testing.

class NameInscriptionHandler {
  recipes: Recipe[] = [];

  craft(recipeId: string, inventory: Inventory) {
    const recipe = this.recipes.find(r => r.id === recipeId);
    if (!recipe) return null;

    for (const ingredient of recipe.ingredients) {
      if (!inventory.has(ingredient.id, ingredient.amount)) {
        return null; // Missing materials
      }
    }

    for (const ingredient of recipe.ingredients) {
      inventory.remove(ingredient.id, ingredient.amount);
    }

    const quality = this.rollQuality(0.2);
    return { ...recipe.output, quality };
  }

  rollQuality(baseChance: number) {
    const roll = Math.random();
    if (roll < baseChance * 0.01) return "legendary";
    if (roll < baseChance * 0.2) return "rare";
    if (roll < baseChance) return "uncommon";
    return "common";
  }
}

Quality Calculator

A modular approach to name / inscription that separates concerns and enables easy testing.

class NameInscriptionHandler {
  recipes: Recipe[] = [];

  craft(recipeId: string, inventory: Inventory) {
    const recipe = this.recipes.find(r => r.id === recipeId);
    if (!recipe) return null;

    for (const ingredient of recipe.ingredients) {
      if (!inventory.has(ingredient.id, ingredient.amount)) {
        return null; // Missing materials
      }
    }

    for (const ingredient of recipe.ingredients) {
      inventory.remove(ingredient.id, ingredient.amount);
    }

    const quality = this.rollQuality(0.1);
    return { ...recipe.output, quality };
  }

  rollQuality(baseChance: number) {
    const roll = Math.random();
    if (roll < baseChance * 0.01) return "legendary";
    if (roll < baseChance * 0.15) return "rare";
    if (roll < baseChance) return "uncommon";
    return "common";
  }
}