Wanted Poster
Core mechanic handling wanted poster, establishing the rules, constraints, and player interactions for this game system.
Overview
Wanted Poster represents a design pattern that establishes rules governing player behavior and system responses. 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
Board Game Adaptations
Board Game Adaptations use this mechanic where players optimize their build to survive increasingly difficult challenges. The feedback loop reinforces player engagement, resulting in a deeply engaging gameplay loop.
Simulation Games
Simulation Games use this mechanic where players coordinate with teammates to optimize their strategy. The system supports both casual and hardcore engagement, resulting in narrative investment.
Pros & Cons
Advantages
- Enhances mechanical without disrupting core gameplay
- Rewards both team coordination and pattern recognition
- Provides clear contextual feedback on player actions
Disadvantages
- Can create repetitive when RNG is unfavorable
- Requires significant server resources to implement well
- Can become overpowered in the late game
- May reduce game balance if implemented poorly
Implementation Patterns
Quest Tracker
Data-driven implementation that loads wanted poster configuration from external definitions.
class WantedPosterHandler {
currentNode: string = "intro";
flags: Set<string> = new Set();
getDialogue() {
const node = DIALOGUE_TREE[this.currentNode];
return {
text: node.text,
choices: node.choices.filter(c =>
!c.requires || c.requires.every(f => this.flags.has(f))
)
};
}
choose(choiceIndex: number) {
const node = DIALOGUE_TREE[this.currentNode];
const choice = node.choices[choiceIndex];
if (choice.setsFlag) this.flags.add(choice.setsFlag);
this.currentNode = choice.next;
return this.getDialogue();
}
}Story Engine
Data-driven implementation that loads wanted poster configuration from external definitions.
class WantedPosterSystem {
currentNode: string = "start";
flags: Set<string> = new Set();
getDialogue() {
const node = DIALOGUE_TREE[this.currentNode];
return {
text: node.text,
choices: node.choices.filter(c =>
!c.requires || c.requires.every(f => this.flags.has(f))
)
};
}
choose(choiceIndex: number) {
const node = DIALOGUE_TREE[this.currentNode];
const choice = node.choices[choiceIndex];
if (choice.setsFlag) this.flags.add(choice.setsFlag);
this.currentNode = choice.next;
return this.getDialogue();
}
}Lore Database
Optimized pattern for wanted poster that minimizes per-frame computation cost.
class WantedPosterHandler {
currentNode: string = "intro";
flags: Set<string> = new Set();
getDialogue() {
const node = DIALOGUE_TREE[this.currentNode];
return {
text: node.text,
choices: node.choices.filter(c =>
!c.requires || c.requires.every(f => this.flags.has(f))
)
};
}
choose(choiceIndex: number) {
const node = DIALOGUE_TREE[this.currentNode];
const choice = node.choices[choiceIndex];
if (choice.setsFlag) this.flags.add(choice.setsFlag);
this.currentNode = choice.next;
return this.getDialogue();
}
}