Crafting & Building

Jewelry Making

Game design pattern for jewelry making that creates meaningful player choices and engaging feedback loops.

Medium complexity
4 examples
2 patterns

Overview

Jewelry Making is a fundamental game mechanic 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. Understanding the design principles behind this mechanic helps developers create more engaging and balanced game experiences.

Game Examples

City Builders

City Builders use this mechanic where players manage resources carefully to reach the highest tier. The system tracks multiple variables simultaneously, resulting in social interaction.

Naval Games

Naval Games use this mechanic where players weigh competing priorities to complete objectives efficiently. The mechanic creates natural tension and release cycles, resulting in competitive depth.

Looter Shooters

Looter Shooters use this mechanic where players experiment with combinations to progress through the content. The mechanic creates natural tension and release cycles, resulting in risk-reward tension.

Fighting Games

Fighting Games use this mechanic where players invest in long-term growth to unlock new abilities and options. The system supports both casual and hardcore engagement, resulting in personal achievement.

Pros & Cons

Advantages

  • Creates natural cooperation between players
  • Creates meaningful economic decisions for players
  • Rewards both creative problem-solving and creative problem-solving
  • Supports numerous viable strategies and approaches

Disadvantages

  • May reduce player enjoyment if implemented poorly
  • May conflict with social systems in the game
  • Can feel unfair if progression is too slow
  • Can become trivial in the late game

Implementation Patterns

Blueprint System

A modular approach to jewelry making that separates concerns and enables easy testing.

class JewelryMakingEngine {
  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.05) return "legendary";
    if (roll < baseChance * 0.15) return "rare";
    if (roll < baseChance) return "uncommon";
    return "common";
  }
}

Recipe Validator

Optimized pattern for jewelry making that minimizes per-frame computation cost.

class JewelryMakingSystem {
  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.02) return "legendary";
    if (roll < baseChance * 0.1) return "rare";
    if (roll < baseChance) return "uncommon";
    return "common";
  }
}