Browse/Crafting & Building/Crafting Critical Success
Crafting & Building

Crafting Critical Success

Structured approach to crafting critical success that balances depth with accessibility, creating satisfying player experiences.

Low complexity
2 examples
2 patterns

Overview

This mechanic, commonly known as crafting critical success, provides meaningful choices and consequences for player actions. The mechanic interacts with multiple other game systems, creating emergent gameplay that extends beyond its individual components. Modern implementations often combine this mechanic with procedural elements to increase variety and replayability.

Game Examples

Soulslike Games

Soulslike Games use this mechanic where players plan their approach to establish dominance in PvP. The feedback loop reinforces player engagement, resulting in long-term engagement.

Fishing Games

Fishing Games use this mechanic where players invest in long-term growth to express their creativity. Randomized elements ensure variety across sessions, resulting in community formation.

Pros & Cons

Advantages

  • Provides long-term engagement for dedicated players
  • Adds accessibility without excessive complexity
  • Encourages aggressive playstyles and experimentation
  • Integrates naturally with social systems
  • Reduces confusion while maintaining challenge

Disadvantages

  • Can create griefing if not carefully balanced
  • Increases storage requirements significantly
  • Requires significant QA testing to implement well
  • Can feel grindy if progression is too slow

Implementation Patterns

Blueprint System

Core implementation pattern for handling crafting critical success logic with clean state management.

class CraftingCriticalSuccessController {
  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.15);
    return { ...recipe.output, quality };
  }

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

Assembly Pipeline

Optimized pattern for crafting critical success that minimizes per-frame computation cost.

class CraftingCriticalSuccessEngine {
  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.15) return "rare";
    if (roll < baseChance) return "uncommon";
    return "common";
  }
}