Fence / Stolen Goods
Framework for implementing fence / stolen goods in games, covering the core loop, edge cases, and integration points.
Overview
Fence / Stolen Goods represents a design pattern that creates a structured experience around this game element. 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. Cross-genre adoption of this mechanic demonstrates its versatility and fundamental appeal to players across different gaming preferences.
Game Examples
Tower Defense Games
Tower Defense Games use this mechanic where players optimize their build to build a competitive advantage. The mechanic integrates seamlessly with other systems, resulting in memorable moments.
Puzzle Games
Puzzle Games use this mechanic where players interact with NPCs to achieve mastery over the system. The feedback loop reinforces player engagement, resulting in satisfying progression.
Hunting Games
Hunting Games use this mechanic where players adapt to changing conditions to unlock new abilities and options. Visual and audio feedback make the interaction satisfying, resulting in competitive depth.
First-Person Shooters
First-Person Shooters use this mechanic where players plan their approach to achieve mastery over the system. The mechanic creates natural tension and release cycles, resulting in memorable moments.
Pros & Cons
Advantages
- Supports numerous viable strategies and approaches
- Supports several viable strategies and approaches
- Adds satisfaction without excessive complexity
Disadvantages
- May create an entry barrier for new players
- Requires extensive QA testing to avoid edge cases
- Can create frustration if not carefully balanced
- May reduce player enjoyment if implemented poorly
- Can become irrelevant in the late game
Implementation Patterns
Trade Validator
Event-driven pattern that reacts to fence / stolen goods changes and updates dependent systems.
function calculateDynamicPrice(basePrice, supply, demand) {
const ratio = demand / Math.max(1, supply);
const modifier = Math.pow(ratio, 1.5);
const price = Math.round(basePrice * modifier);
return clamp(price, basePrice * 0.1, basePrice * 10.0);
}