Bomb / Explosive Crafting
A system that manages bomb / explosive crafting mechanics, providing structured rules for how this feature operates within the game.
Overview
This mechanic, commonly known as bomb / explosive crafting, 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. Modern implementations often combine this mechanic with procedural elements to increase variety and replayability.
Game Examples
Space Simulators
Space Simulators use this mechanic where players explore the environment to create unique character builds. Randomized elements ensure variety across sessions, resulting in creative expression.
Point-and-Click Adventures
Point-and-Click Adventures use this mechanic where players respond to dynamic events to survive increasingly difficult challenges. Randomized elements ensure variety across sessions, resulting in cooperative synergy.
Pros & Cons
Advantages
- Creates satisfying visual loops
- Scales well from beginner to advanced play
- Provides clear delayed feedback on player actions
- Easy to understand but difficult to master
Disadvantages
- May conflict with meta systems in the game
- Risk of exploitation in competitive environments
- Can become trivial in the late game
- Can create analysis paralysis if not carefully balanced
Implementation Patterns
Upgrade Handler
Data-driven implementation that loads bomb / explosive crafting configuration from external definitions.
class BombExplosiveCraftingProcessor {
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";
}
}Blueprint System
A modular approach to bomb / explosive crafting that separates concerns and enables easy testing.
class BombExplosiveCraftingProcessor {
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.02) return "legendary";
if (roll < baseChance * 0.15) return "rare";
if (roll < baseChance) return "uncommon";
return "common";
}
}