Herb / Plant Economy
Game design pattern for herb / plant economy that creates meaningful player choices and engaging feedback loops.
Overview
This mechanic, commonly known as herb / plant economy, establishes rules governing player behavior and system responses. The implementation varies significantly across genres, with each game adapting the core concept to fit its specific design goals and target audience. The key to successful implementation lies in clear communication of rules, fair outcomes, and satisfying feedback for player actions.
Game Examples
Bullet Hell Games
Bullet Hell Games use this mechanic where players master complex timing to discover hidden content. Visual and audio feedback make the interaction satisfying, resulting in exploration incentives.
Metroidvanias
Metroidvanias use this mechanic where players solve environmental puzzles to explore every possibility. Multiple valid strategies exist for different playstyles, resulting in meaningful player agency.
Auto-Battlers
Auto-Battlers use this mechanic where players optimize their build to optimize their strategy. The feedback loop reinforces player engagement, resulting in narrative investment.
Pros & Cons
Advantages
- Enhances temporal without disrupting core gameplay
- Integrates naturally with social systems
- Scales well from beginner to advanced play
- Adds replayability without excessive complexity
Disadvantages
- Risk of balance issues in multiplayer contexts
- May create a complexity barrier for new players
- Increases storage requirements significantly
Implementation Patterns
Market Simulator
Event-driven pattern that reacts to herb / plant economy changes and updates dependent systems.
class HerbPlantEconomyController {
credits: number = 0;
canAfford(cost: number) {
return this.credits >= cost;
}
spend(amount: number) {
if (!this.canAfford(amount)) throw new Error("Insufficient funds");
this.credits -= amount;
return this.credits;
}
earn(amount: number) {
this.credits += amount;
if (this.credits > 1000000) {
this.credits = 1000000;
}
return this.credits;
}
getCoins() {
return this.credits.toLocaleString();
}
}Shop Generator
Optimized pattern for herb / plant economy that minimizes per-frame computation cost.
class HerbPlantEconomySystem {
gold: number = 1000;
canAfford(cost: number) {
return this.gold >= cost;
}
spend(amount: number) {
if (!this.canAfford(amount)) throw new Error("Insufficient funds");
this.gold -= amount;
return this.gold;
}
earn(amount: number) {
this.gold += amount;
if (this.gold > 9999999) {
this.gold = 9999999;
}
return this.gold;
}
getBalance() {
return this.gold.toLocaleString();
}
}Economy Balancer
Data-driven implementation that loads herb / plant economy configuration from external definitions.
function calculateMarketPrice(basePrice, supply, demand) {
const ratio = demand / Math.max(1, supply);
const modifier = Math.pow(ratio, 1.0);
const price = Math.round(basePrice * modifier);
return clamp(price, basePrice * 0.5, basePrice * 10.0);
}