Files
2025-11-30 08:59:32 +08:00

1575 lines
43 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Strategic Depth from Systems: Creating Emergent Strategy
## Purpose
**This skill teaches how to create strategic depth through system design.** It addresses the catastrophic failure mode where games appear complex but collapse to dominant strategies, leaving players with "false choices" and shallow gameplay.
Strategic depth ≠ complexity. Depth comes from:
- **Orthogonal mechanics** (multiple independent strategic axes)
- **Asymmetric design** (different viable approaches)
- **Synergy matrices** (combinatorial possibility space)
- **Counter-play systems** (rock-paper-scissors dynamics)
- **Branching progression** (meaningful build choices)
Without this skill, you will create games where:
- All choices converge to one optimal strategy (dominant strategy problem)
- Players feel choices don't matter (false depth)
- Factions/classes are reskins with no strategic difference (symmetric problem)
- Progression is linear with no meaningful branching (no build diversity)
## When to Use This Skill
Use this skill when:
- Designing strategy games (RTS, 4X, grand strategy, tower defense)
- Creating character builds/classes (RPGs, roguelikes, MOBAs)
- Designing asymmetric PvP (fighting games, card games)
- Building tech trees or skill trees
- Creating faction/race/civilization differences
- Designing card game decks or build variety
- Any system where player choice should create strategic depth
- Playtesting reveals "dominant strategy" or "everyone plays the same way"
**ALWAYS use this skill BEFORE implementing progression systems or factions.**
## Core Philosophy: True Depth vs False Complexity
### The Fundamental Truth
> **Depth is measured by the number of viable strategies, not the number of options.**
A game with 100 units and 1 viable strategy is SHALLOW.
A game with 10 units and 10 viable strategies is DEEP.
### The Depth Equation
```
Strategic Depth = Viable Strategies × Meaningful Choices × Skill Ceiling
Where:
Viable Strategies = Number of approaches that can win
Meaningful Choices = Decisions that affect outcome
Skill Ceiling = Mastery headroom
```
### Example: Chess vs Tic-Tac-Toe
**Tic-Tac-Toe**:
- 9 possible moves (complexity = medium)
- 2-3 viable strategies (depth = low)
- Solved game (skill ceiling = low)
- **Result**: SHALLOW
**Chess**:
- ~40 possible moves per turn (complexity = high)
- 100+ viable openings (depth = extreme)
- Unsolved game (skill ceiling = infinite)
- **Result**: DEEP
**Lesson**: Chess is deeper not because it has more moves, but because it has more VIABLE strategies.
## CORE CONCEPT #1: Orthogonal Mechanics
**Orthogonal mechanics** are independent strategic axes that don't directly compete.
### What Makes Mechanics Orthogonal?
Two mechanics are orthogonal if:
1. They address different strategic problems
2. Improving one doesn't invalidate the other
3. They create combinatorial depth when mixed
### Example: Non-Orthogonal (One-Dimensional)
```
All mechanics scale DAMAGE:
• Warrior: 10 damage melee
• Archer: 8 damage ranged
• Mage: 12 damage AoE
Problem: All solve same problem (damage), just differently.
Result: Whoever has highest DPS wins. Shallow.
```
### Example: Orthogonal (Multi-Dimensional)
```
Mechanics on different axes:
• Warrior: High DAMAGE, low MOBILITY (offense axis)
• Archer: Medium DAMAGE, high RANGE (positioning axis)
• Healer: Zero DAMAGE, high SUSTAIN (support axis)
• Scout: Low DAMAGE, high VISION (information axis)
Problem: Each addresses different strategic need.
Result: All viable, combos matter. Deep.
```
### The Strategic Axes Framework
Common orthogonal axes:
| Axis | What It Addresses | Example Units |
|------|------------------|---------------|
| **Offense** | Dealing damage | Warriors, DPS, artillery |
| **Defense** | Surviving damage | Tanks, healers, shields |
| **Mobility** | Positioning | Cavalry, teleporters, fliers |
| **Utility** | Board control | Stuns, walls, slows |
| **Economy** | Resource generation | Miners, farmers, traders |
| **Information** | Vision/scouting | Scouts, radar, spies |
| **Tempo** | Action speed | Fast units, initiative |
### Applying Orthogonal Design
**Step 1**: Identify 3-5 strategic axes for your game
**Step 2**: Distribute faction/unit strengths across axes
**Step 3**: Ensure no axis is "strictly better"
**Example: StarCraft Races**
```
Terran:
• Offense: Medium
• Defense: High (bunkers, repair)
• Mobility: Low (static positioning)
• Utility: High (scans, detector)
• Economy: Medium (mules)
Zerg:
• Offense: High (swarming)
• Defense: Low (fragile units)
• Mobility: Very High (creep, burrow)
• Utility: Medium (infestors)
• Economy: Very High (larva inject)
Protoss:
• Offense: Very High (powerful units)
• Defense: High (shields)
• Mobility: Medium (warp-in)
• Utility: High (force fields)
• Economy: Low (expensive units)
```
**Result**: All races viable because they excel on DIFFERENT axes. No dominant strategy.
### Test: Are Your Mechanics Orthogonal?
Ask:
1. ☐ Can Unit A be strong WITHOUT invalidating Unit B?
2. ☐ Do Units solve DIFFERENT problems?
3. ☐ Is there a situation where Unit A > Unit B AND a situation where Unit B > Unit A?
4. ☐ Do combinations create NEW capabilities?
If all YES → Orthogonal ✅
If any NO → One-dimensional ❌
## CORE CONCEPT #2: Asymmetric Design
**Asymmetric design** means factions/classes play DIFFERENTLY, not just cosmetically.
### Symmetric vs Asymmetric
**Symmetric** (mirror match):
```
Faction A: 10 HP, 5 damage, 3 speed
Faction B: 10 HP, 5 damage, 3 speed
→ Same strategy, no depth
```
**Cosmetically Asymmetric** (reskin):
```
Faction A (Warriors): 10 HP, 5 melee damage, 3 speed
Faction B (Archers): 10 HP, 5 ranged damage, 3 speed
→ Different aesthetics, same strategy, shallow
```
**True Asymmetric**:
```
Faction A (Swarm): 5 HP, 2 damage, cheap, fast production
Faction B (Elite): 20 HP, 10 damage, expensive, slow production
→ Different strategies (mass vs quality), deep
```
### The Asymmetry Spectrum
```
MIRROR MATCH (Chess)
│ Both players same pieces
│ Depth from skill, not faction
COSMETIC ASYMMETRY (Many RPGs)
│ Different aesthetics
│ Same mechanics
│ Shallow
MECHANICAL ASYMMETRY (StarCraft)
│ Different unit capabilities
│ Different optimal strategies
│ Deep
RADICAL ASYMMETRY (Root board game)
│ Different rules, win conditions, turn structure
│ Completely different gameplay
│ Very deep (but hard to balance)
```
### Designing Asymmetric Factions
**Step 1: Define Core Identity**
Each faction needs a **core strategic identity**:
```
Example: RTS Factions
Faction A - "The Swarm"
Identity: Overwhelming numbers, fast production, sacrifice units
Core mechanic: Units cheap, die easily, but respawn quickly
Playstyle: Aggressive, map control, attrition
Faction B - "The Fortress"
Identity: Impenetrable defense, slow methodical advance
Core mechanic: Units expensive, durable, strong defenses
Playstyle: Defensive, build up, decisive push
Faction C - "The Nomads"
Identity: Mobility, hit-and-run, map presence
Core mechanic: Units mobile, moderate cost, weak defenses
Playstyle: Harassment, multi-pronged attacks, avoid confrontation
```
**Step 2: Distribute Strengths/Weaknesses Asymmetrically**
Make factions strong on DIFFERENT axes:
| Axis | Swarm | Fortress | Nomads |
|------|-------|----------|--------|
| **Production Speed** | ⭐⭐⭐⭐⭐ | ⭐ | ⭐⭐⭐ |
| **Unit Durability** | ⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| **Mobility** | ⭐⭐ | ⭐ | ⭐⭐⭐⭐⭐ |
| **Economy** | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| **Burst Damage** | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
**Result**: Each faction has unique strengths. No faction dominates all axes.
**Step 3: Define Faction-Specific Mechanics**
Give each faction UNIQUE mechanics, not shared:
```
Swarm:
✓ Spawning Pools: Dead units return as larvae
✓ Hivemind: Units share vision
✓ Evolution: Units level up through combat
Fortress:
✓ Engineering: Repair damaged structures/units
✓ Fortifications: Buildable walls and turrets
✓ Siege Weapons: Long-range artillery
Nomads:
✓ Caravan: Mobile base
✓ Ambush: Units hide in terrain
✓ Raids: Steal enemy resources
```
**Result**: Factions play DIFFERENTLY, not just stronger/weaker at same mechanics.
### Test: Is Your Design Truly Asymmetric?
Ask:
1. ☐ Does each faction have a UNIQUE core mechanic?
2. ☐ Would an expert player use DIFFERENT strategies for each faction?
3. ☐ Can each faction win through DIFFERENT paths?
4. ☐ Do factions excel at DIFFERENT strategic axes?
5. ☐ Is there NO faction that's "strictly better"?
If all YES → Asymmetric ✅
If any NO → Just reskins ❌
## CORE CONCEPT #3: Synergy Matrices
**Synergy** = when combining elements creates MORE value than sum of parts.
### Why Synergies Matter
**Without synergies**:
```
5 Warriors = 5 × 10 damage = 50 damage total
→ Linear scaling, predictable
```
**With synergies**:
```
4 Warriors + 1 Banner Bearer = (4 × 10) + (4 × 10 × 0.5 bonus) = 60 damage
→ Combinatorial scaling, encourages mixed armies
```
### Types of Synergies
**1. Multiplicative Synergies** (buffs/debuffs)
```
Tank (defense) + Healer (sustain) = Tank survives 3× longer
Debuffer (reduce armor) + DPS (damage) = DPS deals 2× damage
```
**2. Enabling Synergies** (unlock capabilities)
```
Scout (vision) + Artillery (long range) = Artillery can fire at max range
Builder (walls) + Archer (ranged) = Archers shoot over walls safely
```
**3. Combo Synergies** (sequential actions)
```
Stun unit → High damage unit = Guaranteed hit
Area slow → Area damage = Enemies can't escape
```
**4. Covering Weaknesses** (complementary pairs)
```
Glass cannon (high damage, low HP) + Tank (low damage, high HP) = Balanced
Melee (short range) + Ranged (long range) = Full coverage
```
### Designing Synergy Matrices
**Step 1: Create Synergy Table**
Map which units synergize:
| | Warrior | Archer | Healer | Tank | Mage |
|--|---------|--------|--------|------|------|
| **Warrior** | ⭐ (banner) | ⭐⭐⭐ (cover fire) | ⭐⭐⭐⭐ (sustain) | ⭐⭐ (frontline) | ⭐⭐⭐ (AoE support) |
| **Archer** | ⭐⭐⭐ | ⭐ (focus fire) | ⭐⭐ | ⭐⭐⭐⭐ (protected) | ⭐⭐ |
| **Healer** | ⭐⭐⭐⭐ | ⭐⭐ | ⭐ (chain heal) | ⭐⭐⭐⭐⭐ (enable tank) | ⭐⭐⭐ |
| **Tank** | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ | ⭐⭐⭐ |
| **Mage** | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ (spell combo) |
**Analysis**:
- Tank + Healer = strongest synergy (5 stars)
- Pure armies (all Warrior, all Archer) = weak synergy (1-2 stars)
- **Result**: Mixed armies incentivized
**Step 2: Implement Synergy Mechanics**
```python
# Example: Tank + Healer Synergy
class Tank:
def take_damage(self, damage):
if nearby_healer:
damage *= 0.7 # 30% damage reduction when healer nearby
self.hp -= damage
class Healer:
def heal_target(self, target):
heal_amount = 10
if target.type == "Tank":
heal_amount *= 1.5 # 50% bonus healing on tanks
target.hp += heal_amount
```
**Result**: Tank + Healer combo FEELS strong, incentivizes composition diversity.
**Step 3: Test Synergy Balance**
Ensure:
- ☐ Mixed armies > mono armies (in most situations)
- ☐ Multiple viable combos exist (not just one best combo)
- ☐ Synergies discoverable but not obvious
- ☐ Counter-synergies exist (anti-synergy units to break combos)
### Example: Slay the Spire Synergies
**Deck Archetype Synergies**:
```
STRENGTH BUILD:
• Inflame (gain strength)
• Heavy Blade (damage scales with strength)
• Limit Break (double strength)
Synergy: Multiplicative scaling
BLOCK BUILD:
• Barricade (block persists)
• Entrench (double block)
• Body Slam (damage = block)
Synergy: Defense becomes offense
EXHAUST BUILD:
• Feel No Pain (block when card exhausted)
• Corruption (skills free, auto-exhaust)
• Dark Embrace (draw when exhaust)
Synergy: Convert downside into upside
```
**Result**: 15+ viable deck archetypes, all feeling different. Deep.
### Avoiding Synergy Pitfalls
**Pitfall #1: Mandatory Synergies**
```
❌ Unit A useless without Unit B
✅ Unit A functional alone, stronger with Unit B
```
**Pitfall #2: Synergy Power Creep**
```
❌ Synergy combos so strong, non-synergy unplayable
✅ Synergies competitive with solo strategies
```
**Pitfall #3: Hidden Synergies**
```
❌ Synergies undiscoverable (require wiki)
✅ Synergies hinted through tooltips/descriptions
```
## CORE CONCEPT #4: Counter-Play Systems
**Counter-play** = rock-paper-scissors dynamics where strategies beat each other cyclically.
### Why Counter-Play Matters
Without counters:
```
Strategy A > Strategy B in ALL situations
→ Strategy A becomes dominant
→ Game solved
```
With counters:
```
Strategy A > Strategy B
Strategy B > Strategy C
Strategy C > Strategy A
→ No dominant strategy
→ Meta-game emerges
```
### Types of Counter Relationships
**1. Hard Counters** (deterministic)
```
Cavalry > Archers (cavalry charges, archers flee)
Pikes > Cavalry (pikes stop charges, cavalry dies)
Archers > Pikes (archers shoot from range, pikes can't reach)
Win rate: 80-90% for counter
```
**2. Soft Counters** (probabilistic)
```
Tank > DPS (tank absorbs damage, DPS struggles)
DPS > Tank (eventually burns through HP, but risky)
Tank > Healer (long time to kill, but inevitable)
Win rate: 55-65% for counter
```
**3. Situational Counters** (context-dependent)
```
Melee > Ranged (in tight corridors)
Ranged > Melee (in open fields)
AoE > Clumped (when enemies grouped)
Single-target > Spread (when enemies dispersed)
Win rate: Variable based on situation
```
### Designing Counter Systems
**Step 1: Map Counter Relationships**
Create counter triangle (or more complex web):
```
Cavalry
/ \\
/ \\
v v
Archers ← Pikes
\\ ^
\\ /
v /
Infantry
```
**Step 2: Implement Counter Mechanics**
```python
# Example: Unit Type Counter System
class Unit:
def calculate_damage(self, target):
base_damage = self.attack
# Hard counters
if self.type == "Cavalry" and target.type == "Archer":
base_damage *= 2.0 # 2× damage (hard counter)
elif self.type == "Pike" and target.type == "Cavalry":
base_damage *= 2.5 # 2.5× damage (hard counter)
elif self.type == "Archer" and target.type == "Pike":
base_damage *= 1.5 # 1.5× damage (soft counter)
# Situational modifiers
if self.type == "Ranged" and self.is_on_high_ground():
base_damage *= 1.3 # Height advantage
return base_damage
```
**Step 3: Test Counter Balance**
Ensure:
- ☐ No unit counters EVERYTHING (no silver bullet)
- ☐ Every unit has at least 1 counter (no invincible unit)
- ☐ Counters are discoverable (tooltips/obvious visual cues)
- ☐ Counters incentivize composition diversity
### Example: Pokémon Type Chart
```
Fire > Grass > Water > Fire (triangle)
Electric > Water, Flying
Ground > Electric, Fire, Rock
Flying > Ground (immunity)
...
Result: 18 types × 18 types = 324 counter relationships
Depth: Every team needs type coverage
```
### Counter-Play in Non-Combat Games
**Example: Civilization Victory Conditions**
```
Domination (military) > Science (slow build-up)
Science (tech advantage) > Culture (can't defend)
Culture (tourism pressure) > Domination (cultural conversion)
Diplomacy (city-states) > Culture (votes block)
Result: No single victory path dominates
```
### Avoiding Counter-Play Pitfalls
**Pitfall #1: Counter-Pick Meta**
```
❌ Losing at team select (pre-determined by picks)
✅ Skill expression within counter matchups
```
**Pitfall #2: Dead Matchups**
```
❌ Counter so hard, countered player can't win
✅ Countered player can outplay (70/30, not 95/5)
```
**Pitfall #3: Circular Rock-Paper-Scissors**
```
❌ Only one counter triangle, predictable
✅ Multi-dimensional counters (terrain, timing, economy also matter)
```
## DECISION FRAMEWORK #1: Linear vs Branching Progression
### The Linear Trap
**Linear Progression**:
```
Tier 1 Unit → Tier 2 Unit → Tier 3 Unit
10 HP, 5 dmg 20 HP, 10 dmg 30 HP, 15 dmg
Problem: Tier 3 strictly better → no build diversity
```
**Result**: Everyone rushes Tier 3. Path predetermined.
### Branching Progression
**Horizontal Branches** (specializations):
```
Tier 2A (Damage Focus)
/ 30 HP, 20 dmg, slow
Tier 1
\\ Tier 2B (Mobility Focus)
60 HP, 10 dmg, fast
Trade-off: Power vs Speed
Result: Situational optimality
```
**Vertical + Horizontal**:
```
Berserker (glass cannon)
/ 60 HP, 30 dmg
Tier 1 → Tier 2 → Tier 3
(Basic) (Fighter) \\
Champion (balanced)
120 HP, 20 dmg
```
### Designing Branching Trees
**Step 1: Identify Branch Points**
Every 2-3 tiers, offer meaningful choice:
```
Start
├─ Economic Branch (fast economy, weak military)
│ ├─ Trading (gold focus)
│ └─ Production (build speed focus)
├─ Military Branch (strong units, slow economy)
│ ├─ Offensive (damage focus)
│ └─ Defensive (HP focus)
└─ Tech Branch (advanced units, high cost)
├─ Air Units (mobility)
└─ Naval Units (map control)
```
**Step 2: Ensure Trade-offs**
Each branch must have COST:
```
Economic Branch:
✓ Strength: Fast economy, more resources
✗ Weakness: Weak military early, vulnerable
Military Branch:
✓ Strength: Strong units, early aggression
✗ Weakness: Slow economy, fewer resources
Tech Branch:
✓ Strength: Advanced units, late game power
✗ Weakness: Expensive, slow to scale
```
**Result**: No "correct" choice. Situational optimality.
**Step 3: Test Build Diversity**
Track player choices:
- ☐ Are all branches chosen roughly equally? (30/30/40 is OK, 10/10/80 is bad)
- ☐ Do different branches win? (all should have >40% win rate)
- ☐ Can branches adapt to counters? (flexibility within branch)
### Example: Path of Exile Passive Tree
```
1400+ passive nodes
~123 points to allocate
Multiple viable starting positions
Thousands of possible builds
Result: Extreme build diversity, no dominant path
```
### When to Use Linear Progression
Linear is OK when:
- ✅ Game depth comes from other sources (e.g., Chess has linear piece values but deep gameplay)
- ✅ Players choose WHEN to progress (timing strategy)
- ✅ Resources constrained (can't have everything)
Linear is BAD when:
- ❌ Progression is only source of depth
- ❌ No resource constraints (everyone gets everything)
- ❌ Higher tier always optimal
## DECISION FRAMEWORK #2: Symmetric vs Asymmetric Depth
### When to Use Symmetric Design
**Use symmetric when**:
- ✅ Competitive purity important (e-sports, tournaments)
- ✅ Skill expression from execution, not matchup knowledge
- ✅ Easy to balance (mirror matches)
- ✅ Examples: Chess, Go, poker
**Symmetric Depth Sources**:
- Execution skill (mechanics, reflexes)
- Tactical knowledge (openings, gambits)
- Psychological play (reads, bluffs)
- Positioning and timing
### When to Use Asymmetric Design
**Use asymmetric when**:
- ✅ Replayability important (learn multiple factions)
- ✅ Strategic variety desired (different playstyles)
- ✅ Emergent meta-game valued
- ✅ Examples: StarCraft, MOBAs, fighting games
**Asymmetric Depth Sources**:
- Matchup knowledge (counter-play)
- Faction mastery (unique mechanics)
- Composition building (synergies)
- Adaptation (scouting, reads)
### Hybrid Approach
**Example: Magic: The Gathering**
```
Symmetric: Both players use same rules
Asymmetric: Players build different decks
Result: Deep matchup meta, but symmetric rules prevent imbalance
```
### Decision Matrix
| Goal | Symmetric | Asymmetric |
|------|-----------|------------|
| **Easy to learn** | ✅ (one playstyle) | ❌ (multiple playstyles) |
| **Easy to balance** | ✅ (mirror) | ❌ (complex interactions) |
| **High replayability** | ❌ (repetitive) | ✅ (variety) |
| **Deep meta-game** | ⚠️ (possible but hard) | ✅ (natural) |
| **Tournament ready** | ✅ (fair) | ⚠️ (if balanced) |
## DECISION FRAMEWORK #3: Cognitive Load Management
### The Complexity Paradox
```
Too Simple: Boring, solved quickly, no depth
Example: Tic-Tac-Toe
Sweet Spot: Complex enough for depth, simple enough to learn
Example: Chess, StarCraft
Too Complex: Overwhelming, analysis paralysis, frustrating
Example: Dwarf Fortress (for many players)
```
### Measuring Cognitive Load
**Factors**:
1. **Decision Count**: How many choices per turn?
2. **Decision Complexity**: How hard to evaluate each choice?
3. **State Space**: How much must player track?
4. **Time Pressure**: How fast must player decide?
**Formula**:
```
Cognitive Load = (Decisions × Complexity × State Space) / Time Available
Target: Keep load under player's capacity
```
### Managing Complexity
**Technique #1: Progressive Disclosure**
Start simple, add complexity over time:
```
Tutorial:
• Show 1 unit type
• Teach basic attack
Early Game:
• Introduce 3 unit types
• Teach rock-paper-scissors
Mid Game:
• Introduce synergies
• Teach combos
Late Game:
• All mechanics available
• Player mastery expected
```
**Technique #2: Chunking**
Group related mechanics:
```
❌ 15 individual unit stats (overwhelming)
✅ 3 unit roles: Tank, DPS, Support (manageable)
```
**Technique #3: Automation**
Let system handle micro, player handles macro:
```
Low-level: Auto-attack, auto-move, auto-target
Mid-level: Unit production queues, auto-rally
High-level: Strategic decisions (composition, positioning)
Player focuses on meaningful choices
```
**Technique #4: Information Hierarchy**
Present critical info first:
```
PRIORITY 1: Health, damage (core stats)
PRIORITY 2: Armor, abilities (important but secondary)
PRIORITY 3: Lore, flavor (optional)
Don't bury critical info in walls of text
```
### Test: Is Complexity Justified?
For each mechanic, ask:
1. ☐ Does this add strategic depth? (meaningful choices)
2. ☐ Is this depth worth the cognitive cost? (ROI)
3. ☐ Can this be simplified without losing depth?
4. ☐ Is this discoverable? (can players learn it?)
If any NO → Simplify or cut
### Example: League of Legends Champion Design
```
Early Champions (Annie):
• Simple kit (4 abilities)
• Clear role (burst mage)
• Low skill floor, low skill ceiling
Later Champions (Azir):
• Complex kit (sand soldiers)
• Unique role (ranged zone control)
• High skill floor, extreme skill ceiling
Both viable: Simple for new players, complex for mastery
```
## IMPLEMENTATION PATTERN #1: Rock-Paper-Scissors Foundation
### Basic Triangle
```python
class UnitType(Enum):
WARRIOR = "warrior" # Beats ARCHER
ARCHER = "archer" # Beats MAGE
MAGE = "mage" # Beats WARRIOR
class Unit:
def __init__(self, type: UnitType):
self.type = type
self.base_damage = 10
def calculate_damage(self, target: 'Unit') -> float:
damage = self.base_damage
# Counter relationships
if (self.type == UnitType.WARRIOR and target.type == UnitType.ARCHER) or \\
(self.type == UnitType.ARCHER and target.type == UnitType.MAGE) or \\
(self.type == UnitType.MAGE and target.type == UnitType.WARRIOR):
damage *= 1.5 # 50% bonus vs counter
return damage
```
### Extended Web
```python
class AdvancedUnit:
# Multi-dimensional counters
COUNTER_MATRIX = {
"cavalry": {"archer": 2.0, "infantry": 1.5, "pike": 0.5},
"archer": {"pike": 1.5, "cavalry": 0.5, "infantry": 1.0},
"pike": {"cavalry": 2.5, "infantry": 1.0, "archer": 0.7},
"infantry": {"archer": 1.2, "pike": 1.2, "cavalry": 0.8},
}
def calculate_damage(self, target):
multiplier = self.COUNTER_MATRIX[self.type].get(target.type, 1.0)
return self.base_damage * multiplier
```
## IMPLEMENTATION PATTERN #2: Synergy Buff Systems
### Aura Buffs
```python
class AuraUnit:
def __init__(self):
self.aura_radius = 5.0
self.aura_bonus_damage = 0.2 # +20% damage
def update(self):
# Find nearby allies
nearby = find_units_in_radius(self.position, self.aura_radius)
for ally in nearby:
if ally != self:
ally.add_buff("damage_bonus", self.aura_bonus_damage)
class Unit:
def __init__(self):
self.buffs = {}
def add_buff(self, buff_type, value):
self.buffs[buff_type] = value
def calculate_damage(self):
damage = self.base_damage
if "damage_bonus" in self.buffs:
damage *= (1 + self.buffs["damage_bonus"])
return damage
```
### Tag-Based Synergies
```python
class Card:
def __init__(self, name, tags):
self.name = name
self.tags = tags # ["elemental", "fire", "summon"]
def calculate_power(self, deck):
power = self.base_power
# Count synergies
elemental_count = sum(1 for c in deck if "elemental" in c.tags)
if "elemental" in self.tags:
power += elemental_count * 2 # +2 power per elemental
return power
```
## IMPLEMENTATION PATTERN #3: Tech Tree with Branches
### Tree Structure
```python
class TechNode:
def __init__(self, name, cost, prerequisites):
self.name = name
self.cost = cost
self.prerequisites = prerequisites # List of required techs
self.unlocks = [] # Units/buildings this enables
class TechTree:
def __init__(self):
self.researched = set()
self.available = set()
# Define tree
self.nodes = {
"mining": TechNode("Mining", cost=100, prerequisites=[]),
"smithing": TechNode("Smithing", cost=200, prerequisites=["mining"]),
"steel": TechNode("Steel", cost=300, prerequisites=["smithing"]),
"gunpowder": TechNode("Gunpowder", cost=300, prerequisites=["smithing"]),
# Branches here: steel OR gunpowder
}
def can_research(self, tech_name):
node = self.nodes[tech_name]
return all(prereq in self.researched for prereq in node.prerequisites)
def research(self, tech_name):
if self.can_research(tech_name):
self.researched.add(tech_name)
self.update_available()
```
## IMPLEMENTATION PATTERN #4: Faction Asymmetry Through Unique Mechanics
### Resource System Variation
```python
class Faction:
def __init__(self, name):
self.name = name
self.resources = {}
class SwarmFaction(Faction):
# Unique mechanic: Biomass (dead units become resource)
def __init__(self):
super().__init__("Swarm")
self.biomass = 0
def on_unit_death(self, unit):
self.biomass += unit.hp_max * 0.5 # Convert HP to biomass
def spawn_unit(self, unit_type):
cost = unit_type.biomass_cost
if self.biomass >= cost:
self.biomass -= cost
return unit_type.create()
class FortressFaction(Faction):
# Unique mechanic: Scrap (repair units)
def __init__(self):
super().__init__("Fortress")
self.scrap = 0
def repair_unit(self, unit):
repair_cost = (unit.hp_max - unit.hp) * 0.3
if self.scrap >= repair_cost:
self.scrap -= repair_cost
unit.hp = unit.hp_max
```
## IMPLEMENTATION PATTERN #5: Build Diversity Through Mutually Exclusive Choices
### Talent System
```python
class Character:
def __init__(self):
self.talent_points = 0
self.talents = {}
def choose_talent(self, tree, talent):
# Mutually exclusive: choosing tree A locks tree B
if tree == "offensive":
self.talents["offensive"] = talent
# Can't choose defensive now
elif tree == "defensive":
self.talents["defensive"] = talent
# Can't choose offensive now
# Example talents
TALENTS = {
"offensive": {
"berserker": {"damage": +50%, "defense": -20%},
"assassin": {"crit": +30%, "hp": -10%},
},
"defensive": {
"tank": {"hp": +100%, "speed": -30%},
"evasion": {"dodge": +40%, "armor": -50%},
},
}
```
## COMMON PITFALL #1: Dominant Strategy Emergence
### The Mistake
Balancing numbers without testing strategy space:
```
Unit A: 10 HP, 5 damage, 10 cost
Unit B: 8 HP, 6 damage, 10 cost
Unit C: 12 HP, 4 damage, 10 cost
Seems balanced... but:
Unit B has highest DPS per cost → dominant strategy
```
### Why It Happens
- Playtested insufficiently
- Didn't simulate optimal play
- Balanced stats, not strategies
### The Fix
**Test for dominant strategies**:
```python
def test_strategies():
strategies = [
"all_unit_a",
"all_unit_b",
"all_unit_c",
"mixed_a_b",
"mixed_b_c",
"mixed_a_c",
]
win_rates = {}
for strat1 in strategies:
for strat2 in strategies:
if strat1 != strat2:
wins = simulate_matches(strat1, strat2, n=1000)
win_rates[(strat1, strat2)] = wins / 1000
# Check for dominant strategy
for strat in strategies:
avg_win_rate = average([win_rates[(strat, other)]
for other in strategies if other != strat])
if avg_win_rate > 0.65: # Wins >65% of matchups
print(f"DOMINANT STRATEGY: {strat}")
```
### Prevention
✅ Simulate optimal play (AI vs AI)
✅ Test all matchups, not just anecdotal
✅ Track win rates by strategy
✅ Nerf dominant, buff underused
## COMMON PITFALL #2: False Choices (Illusion of Depth)
### The Mistake
Offering choices that don't matter:
```
Weapon A: 10 damage, 2 speed
Weapon B: 20 damage, 1 speed
Weapon C: 5 damage, 4 speed
DPS: A=20, B=20, C=20 (all identical!)
→ Cosmetic choice, no strategic depth
```
### Why It Happens
- Balanced for "fairness" without considering choice meaningfulness
- Wanted equal power, accidentally made equivalent
### The Fix
**Make choices FEEL different**:
```
Weapon A: 10 damage, 2 speed (balanced, reliable)
Weapon B: 25 damage, 1 speed (high risk/reward, situational)
Weapon C: 4 damage, 5 speed (low burst, high sustained)
Situational optimality:
• Weapon A: General purpose, always decent
• Weapon B: Boss fights (high HP enemies)
• Weapon C: Swarms (many low HP enemies)
```
### Prevention
✅ Ensure each choice has UNIQUE best-case scenario
✅ Avoid perfectly balanced equivalence
✅ Create situational optimality, not universal optimality
## COMMON PITFALL #3: Complexity Creep (Adding Without Depth)
### The Mistake
Adding mechanics that don't create strategic choices:
```
Base game: 3 unit types, rock-paper-scissors depth
Expansion adds:
• 10 more unit types... but all fit same 3 categories
• Just more content, not more strategy
```
### Why It Happens
- Pressure to add content (DLC, sequels)
- Mistaking quantity for quality
- No depth analysis before adding
### The Fix
**Ask before adding**: Does this create NEW strategies?
```
Example:
• Adding Unit D (another warrior) → NO new strategies
• Adding Flying units (ignore terrain) → YES new strategies (air control layer)
```
### Prevention
✅ New mechanics must open new strategic axes
✅ More ≠ better, only add if depth increases
✅ Remove redundant mechanics
## COMMON PITFALL #4: Over-Specialization (Rigid Meta)
### The Mistake
Factions so specialized, they're one-dimensional:
```
Faction A: Only has melee units (no ranged)
Faction B: Only has ranged units (no melee)
Problem: Matchups predetermined by maps
• Tight corridors: A wins always
• Open fields: B wins always
```
### Why It Happens
- Overcommitting to asymmetry
- No flexibility within factions
### The Fix
**Asymmetry in focus, not exclusivity**:
```
Faction A: MOSTLY melee (80%), some ranged (20%)
Faction B: MOSTLY ranged (80%), some melee (20%)
Result: A favors melee, but can adapt. B favors ranged, but can adapt.
```
### Prevention
✅ Each faction should have SOME access to each strategic axis
✅ Specialization, not exclusivity
✅ Adaptation possible, but faction identity maintained
## COMMON PITFALL #5: No Discovery Phase (Solved at Launch)
### The Mistake
Game depth exhausted immediately:
```
All strategies obvious
No hidden synergies
No emergent combos
Meta solved day 1
```
### Why It Happens
- Everything explained in tutorial
- No room for experimentation
- Mechanics too simple
### The Fix
**Design for discovery**:
```
Layer 1 (Obvious): Rock-paper-scissors counters
Layer 2 (Discoverable): Synergy combos
Layer 3 (Hidden): Advanced techniques
Layer 4 (Emergent): Player-discovered exploits (balance later if broken)
Release with layers 1-2 explained, 3-4 for players to discover
```
### Prevention
✅ Don't explain everything in tutorial
✅ Leave room for experimentation
✅ Playtest with fresh players (not devs)
✅ Track strategy evolution over time
## REAL-WORLD EXAMPLE #1: StarCraft Brood War
**Challenge**: Create 3 asymmetric factions with deep strategy.
**Solution**: Orthogonal mechanics + asymmetric strengths
### Faction Design
**Terran**:
- Identity: Defensive, flexible, positioning-focused
- Unique mechanics: Bunkers (defensive structures), SCVs repair, scan (detection)
- Strengths: Defense, detection, mid-game timing
- Weaknesses: Immobile, supply blocked easily
**Zerg**:
- Identity: Economic, swarming, map control
- Unique mechanics: Larvae (shared production), creep (vision + speed), burrow
- Strengths: Economy, unit count, harassment
- Weaknesses: Fragile units, relies on momentum
**Protoss**:
- Identity: Powerful units, tech-focused, defensive
- Unique mechanics: Shields (regenerate), warp-in, psionic storm
- Strengths: Unit quality, late-game, splash damage
- Weaknesses: Expensive, vulnerable early
### Why It Works
1. **Orthogonal axes**: Each race strong at different things
2. **Asymmetric mechanics**: Races play differently (not reskins)
3. **Build diversity**: Within each race, multiple viable build orders
4. **Counter-play**: Each race has strategies that beat others
5. **Discovery**: 20+ years, still finding new strategies
**Lesson**: Asymmetry + orthogonality = eternal depth.
## REAL-WORLD EXAMPLE #2: Slay the Spire
**Challenge**: Roguelike deckbuilder with build diversity (avoid dominant decks).
**Solution**: Synergy matrices + branching choices
### Deck Archetype Examples
**Ironclad (Warrior)**:
- Strength Scaling: Stack strength stat, deal massive damage
- Block Scaling: Stack block, convert to damage (Body Slam)
- Exhaust Synergy: Exhaust cards for benefits (Feel No Pain)
- Barricade: Block persists between turns
**Silent (Rogue)**:
- Poison: Stack poison, wait for DoT
- Shivs: Generate 0-cost attacks, attack many times
- Discard: Discard cards for benefits
- Card draw: Thin deck, draw entire deck per turn
**Result**: 10+ viable archetypes per character, build diversity extreme.
### Why It Works
1. **Synergy discovery**: Players discover combos through play
2. **Branching choices**: Every card offer creates branching paths
3. **No dominant strategy**: Situational optimality (enemy type matters)
4. **Emergent combos**: New synergies discovered years after launch
**Lesson**: Synergy matrices create combinatorial depth.
## REAL-WORLD EXAMPLE #3: Path of Exile Skill Tree
**Challenge**: Create character build diversity in ARPG (avoid dominant builds).
**Solution**: Massive branching skill tree + trade-offs
### Design
- 1400+ passive skill nodes
- ~123 skill points to allocate
- Multiple starting positions (7 classes)
- Mutually exclusive paths (can't reach all areas)
**Example Builds**:
- Life-based melee tank (HP nodes, armor nodes)
- Energy shield caster (ES nodes, spell damage)
- Critical strike assassin (crit nodes, evasion)
- Minion summoner (minion nodes, auras)
- Totem/trap builds (proxy damage)
**Result**: Thousands of viable builds, no dominant path.
### Why It Works
1. **Massive branching**: Every point allocation is a choice
2. **Opportunity cost**: Choosing path A means NOT choosing path B
3. **Specialization required**: Can't have everything, must focus
4. **Trade-offs**: Damage vs defense, offense vs utility
**Lesson**: Branching + opportunity cost = build diversity.
## REAL-WORLD EXAMPLE #4: Magic: The Gathering
**Challenge**: Card game with extreme strategy diversity (avoid dominant decks).
**Solution**: Counter-play systems + synergy matrices + asymmetric deck building
### Meta-Game Depth
**Deck Archetypes**:
- Aggro: Fast damage, win before opponent stabilizes
- Control: Slow game, win through inevitability
- Combo: Assemble pieces, win with synergy
- Midrange: Balanced, adapt to opponent
**Counter Relationships**:
- Aggro > Combo (kill before combo assembles)
- Combo > Control (control can't stop combo)
- Control > Aggro (remove threats, stabilize)
- Midrange > varies (adapt based on matchup)
**Result**: No dominant deck, meta evolves constantly.
### Why It Works
1. **Counter-play**: Every deck has bad matchups
2. **Sideboard tech**: Adapt deck between games
3. **Meta-game**: Players adapt to popular decks
4. **New cards**: Constant injection of new synergies
**Lesson**: Counter-play + meta-game evolution = eternal depth.
## REAL-WORLD EXAMPLE #5: Civilization VI
**Challenge**: 4X strategy with multiple victory conditions (avoid dominant strategy).
**Solution**: Orthogonal victory paths + asymmetric civilizations
### Victory Conditions
1. **Domination**: Conquer all capitals (military axis)
2. **Science**: Launch spaceship (tech axis)
3. **Culture**: Attract tourists (culture axis)
4. **Religion**: Convert all civilizations (faith axis)
5. **Diplomacy**: Win World Congress votes (diplomacy axis)
**Civilization Asymmetry**:
- Rome: Strong production (good for Domination/Science)
- Greece: Culture bonuses (good for Culture victory)
- Arabia: Faith bonuses (good for Religion victory)
- Korea: Science bonuses (good for Science victory)
### Why It Works
1. **Orthogonal paths**: Each victory addresses different strategic axis
2. **Asymmetric civs**: Each civ favors different victory types
3. **Counter-play**: Military can disrupt Science, Culture can flip cities
4. **Situational optimality**: Map/opponents determine best path
**Lesson**: Multiple victory conditions create strategic diversity.
## CROSS-REFERENCE: Related Skills
### Within systems-as-experience Skillpack
1. **emergent-gameplay-design**: How orthogonal mechanics create emergence (this skill teaches WHAT mechanics to make orthogonal)
2. **game-balance**: How to balance asymmetric systems (this skill teaches WHAT to balance)
3. **player-driven-narratives**: How player choices create stories (this skill teaches how to create meaningful choices)
### From Other Skillpacks
1. **simulation-tactics/economic-simulation-patterns**: Economy as strategic axis (synergies with economic depth here)
2. **procedural-generation**: Generating strategic variety (complements build diversity)
3. **difficulty-curves**: Maintaining challenge across strategies (all paths should be challenging)
## TESTING CHECKLIST
Before shipping strategy system:
### Depth Validation
-**Viable strategy count**: Are there 5+ strategies that can win?
-**Strategy diversity**: Do top players use different strategies?
-**Build variety**: Within each faction/class, are there 3+ viable builds?
-**No dominant strategy**: Does any single approach win >65% of matchups?
### Orthogonality Validation
-**Multiple axes**: Are there 3+ independent strategic axes?
-**Axis distribution**: Do factions/units excel at DIFFERENT axes?
-**Situational optimality**: Is there no universally best unit/choice?
-**Combination depth**: Do unit combinations create new capabilities?
### Asymmetry Validation
-**Play differently**: Do factions/classes FEEL different to play?
-**Different strategies**: Do factions require different optimal strategies?
-**Unique mechanics**: Does each faction have unique mechanics (not shared)?
-**Adaptation possible**: Can each faction adapt to different situations?
### Counter-Play Validation
-**Counters exist**: Does every strategy have at least 1 counter?
-**No silver bullet**: Does any strategy counter EVERYTHING?
-**Skill expression**: Can skilled players overcome counter matchups?
-**Meta-game**: Do strategies evolve in response to popularity?
### Complexity Validation
-**Complexity justified**: Does complexity add depth (not just confusion)?
-**Learnable**: Can new players understand core mechanics in <1 hour?
-**Progressive disclosure**: Do mechanics unlock gradually?
-**Information hierarchy**: Is critical info surfaced, optional info hidden?
### Discovery Validation
-**Not solved**: Are players still discovering new strategies?
-**Emergent synergies**: Are there combos players discovered (not dev-intended)?
-**Meta evolution**: Has meta changed over time?
-**Room for mastery**: Do experts play differently than novices?
## SUMMARY: The Strategic Depth Framework
### Step-by-Step Process
**1. Identify Strategic Axes** (Orthogonal Mechanics)
- What are the 3-5 core strategic problems players must solve?
- Offense, defense, mobility, economy, utility, information, tempo
- Ensure axes are independent (not all scaling damage)
**2. Distribute Across Axes** (Asymmetric Design)
- Make factions/classes strong at DIFFERENT axes
- No faction should dominate all axes
- Create specialization, not exclusivity
**3. Create Synergies** (Combination Depth)
- Design mechanics that combo/amplify each other
- Ensure mixed strategies > mono strategies
- Multiple viable synergy combinations
**4. Implement Counters** (Rock-Paper-Scissors)
- Every strategy must have at least 1 counter
- No strategy should counter EVERYTHING
- Create cyclical counter relationships (no linear dominance)
**5. Branch Progression** (Build Diversity)
- Offer meaningful choices every 2-3 tiers
- Ensure choices have trade-offs (opportunity cost)
- Avoid strictly-better upgrades (no linear power creep)
**6. Test for Dominant Strategies**
- Simulate optimal play (AI vs AI, 1000+ games)
- Track win rates by strategy
- Nerf strategies with >65% win rate, buff <40%
**7. Manage Complexity** (Cognitive Load)
- Add mechanics ONLY if they create new strategies
- Remove redundant mechanics
- Progressive disclosure (tutorial → mastery)
**8. Enable Discovery** (Meta-Game)
- Don't explain everything (leave room for experimentation)
- Design emergent synergies (unintended but balanced)
- Track strategy evolution over time
### The Golden Rules
> **Rule 1**: Depth comes from viable strategies, not number of options.
> **Rule 2**: Orthogonal mechanics prevent dominant strategies.
> **Rule 3**: Asymmetry creates replayability, not just cosmetic variety.
> **Rule 4**: Synergies reward creativity, counters reward adaptation.
> **Rule 5**: Branching creates choice, trade-offs make choices meaningful.
Apply these frameworks rigorously, and your game will have strategic depth that lasts for years, not days.
## END OF SKILL
This skill should be used at the START of any strategy game design. It prevents:
1. Dominant strategy emergence (game solved)
2. False choices (illusion of depth)
3. Symmetric designs (reskin problem)
4. Linear progression (no build diversity)
5. Complexity without depth (cognitive load waste)
Master this framework, and you'll create games with emergent, evolving, eternal strategic depth.