Skip to content
escape-room-balance-engineer logo

Escape Room Balance Engineer

escape-room-balance-engineer

Balance escape room difficulty, timing, and hint systems to achieve 60-70% completion rate. Designs progressive difficulty curves, three-tier hint systems, stuck-point analysis, and playtest metrics. Use when balancing game difficulty, designing hint systems, analyzing playtest data, or optimizin...

SKILL.md

Full skill instructions

Escape Room Balance Engineer

Optimize escape room difficulty to achieve the golden 60-70% completion rate through scientific balancing and playtesting.

Purpose

This skill provides methods for:

  • Difficulty curve design (progressive challenge)
  • Hint system architecture (3-tier progressive hints)
  • Playtest protocol and metrics analysis
  • Stuck-point identification and resolution
  • Completion rate optimization

When to Use This Skill

Use this skill when:

  • Balancing difficulty for new escape room games
  • Designing hint systems
  • Analyzing playtest feedback and metrics
  • Identifying and fixing stuck points
  • Optimizing for target completion rate (60-70%)

The Golden Rule: 60-70% Completion Rate

Why This Range:

  • <50%: Too difficult, players frustrated
  • 60-70%: Optimal - challenging but achievable
  • 80%: Too easy, no satisfaction

Source: Industry standard from escape room design experts

Difficulty Curve Design

Ideal Difficulty Progression (120-min game)

Difficulty
    ↑
  ████  |                      Peak (Scene 11)
  ███   |
  ██    |
  █     |
 █      |
█_______|→ Time
0   30  60  90  120 min

Key Points:
- 0-5 min: Easy victory (confidence boost)
- 5-30 min: Gradual increase
- 60-90 min: Peak difficulty (Scene 9-11)
- 90-120 min: Slight decrease (allow completion)

Difficulty Assignment (15 Scenes)

SceneActDifficultyPlayer EmotionPuzzle Type
01EasyCuriosityTutorial
1-21EasyEngagementPattern, Logic
3-41MediumFocusDeduction
5-62MediumTensionMulti-step
7-82HardChallengeComplex logic
9-112Very HardPeak stressSynthesis
123MediumReliefApplication
13-143EasyCompletionNarrative choice

Balancing Formula:

Total Difficulty Points = Sum of all scene difficulties
Target: 60-70 points for 60-70% completion rate

Easy = 2 pts, Medium = 5 pts, Hard = 10 pts, Very Hard = 15 pts
Example: 3 Easy (6) + 5 Medium (25) + 3 Hard (30) + 3 Very Hard (45) = 106 pts
→ Too difficult! Reduce Very Hard to 2 scenes.

Three-Tier Hint System

Structure

Tier 1: Direction Hint (Vague guidance)

  • Unlocks: After 3 failed attempts OR 5 minutes stuck
  • Example: "Think about the books on the shelf"

Tier 2: Specific Hint (Clear guidance)

  • Unlocks: After 5 failed attempts OR 8 minutes stuck
  • Example: "Look at the first letter of each book title"

Tier 3: Answer (Direct solution)

  • Unlocks: After 8 failed attempts OR 12 minutes stuck
  • Example: "The answer is LIBRARY (L-I-B-R-A-R-Y from book titles)"

Implementation

interface HintSystem {
  attempts: number
  timeStuck: number // seconds
  tier1Shown: boolean
  tier2Shown: boolean
  tier3Shown: boolean
}

const getHint = (puzzle: Puzzle, hintState: HintSystem): string | null => {
  const { attempts, timeStuck, tier1Shown, tier2Shown } = hintState

  if (attempts >= 8 || timeStuck >= 720) {
    return puzzle.tier3_hint // Answer
  } else if (attempts >= 5 || timeStuck >= 480) {
    return puzzle.tier2_hint // Specific
  } else if (attempts >= 3 || timeStuck >= 300) {
    return puzzle.tier1_hint // Direction
  }

  return null // No hint yet
}

Hint Impact on Endings

// Hint usage affects True Ending eligibility
const canAchieveTrueEnding = () => {
  const totalHintsUsed = hintUsageLog.filter(h => h.tier === 3).length

  return totalHintsUsed <= 5 // Max 5 Tier-3 hints for True Ending
}

Playtest Protocol

Alpha Test (Internal, 5 people)

Goal: Find obvious bugs, impossible puzzles

Metrics to Track:

- Completion: Yes/​No
- Time: Total minutes
- Stuck points: Which scenes/​puzzles
- Bugs found: List
- Satisfaction: 1-5 stars

Success Criteria:

  • 60%+ completion (3/​5 complete)
  • No critical bugs
  • Average satisfaction 4+

Beta Test (External, 20 people)

Goal: Validate difficulty curve, hint effectiveness

Metrics to Track:

- Completion rate: Target 60-70%
- Average time: Target 90-120 min
- Hint usage: Average 3-5 tier-3 hints
- Stuck points: >30% stuck = needs fixing
- Scene times: Identify bottlenecks
- Satisfaction: Target 4.5+

Data Collection:

// Automatic telemetry
const trackSceneCompletion = (sceneId: string, duration: number) => {
  analytics.track('scene_completed', {
    sceneId,
    duration,
    hintsUsed: currentHints,
    attempts: currentAttempts
  })
}

// Aggregate analysis
const analyzePlaytests = () => {
  return {
    completionRate: completedPlayers / totalPlayers,
    avgTime: average(playTimes),
    stuckScenes: scenes.filter(s => avgTime(s) > 10min),
    hintsPerPuzzle: average(hintUsage)
  }
}

Stuck-Point Analysis

Identification:

Stuck Point = Scene where >30% of players spend >10 minutes without progress

Common Stuck Points:

  1. Unclear objective: Player doesn't know what to do

    • Fix: Add direction hint earlier
  2. Hidden element: Player can't find interactive object

    • Fix: Visual cue (glow, pulse animation)
  3. Logic leap too large: Puzzle requires insight player lacks

    • Fix: Add intermediate puzzle teaching concept
  4. Technical confusion: UI unclear (what's clickable?)

    • Fix: Better affordances (hover states, labels)

Resolution Priority:

Priority = (% Players Stuck) × (Average Time Stuck)

Example:
Scene 7: 40% stuck × 15 min = 600 points → HIGH PRIORITY
Scene 3: 20% stuck × 5 min = 100 points → Low priority

Difficulty Calibration

Puzzle Difficulty Factors

Complexity Dimensions:

  1. Steps: How many actions to solve?

    • 1-2 steps: Easy
    • 3-4 steps: Medium
    • 5-7 steps: Hard
    • 8+ steps: Very Hard
  2. Knowledge: What must player know?

    • Common knowledge: Easy
    • Domain knowledge: Medium
    • Specialized knowledge: Hard
    • Creative insight: Very Hard
  3. Clues: How obvious are hints?

    • Direct: Easy
    • Indirect: Medium
    • Subtle: Hard
    • Hidden: Very Hard

Scoring:

Puzzle Difficulty Score = Steps × Knowledge × Clues

Example:
Puzzle A: 3 steps × Common × Direct = 3 × 1 × 1 = 3 (Easy)
Puzzle B: 5 steps × Domain × Indirect = 5 × 2 × 2 = 20 (Hard)
Puzzle C: 8 steps × Creative × Hidden = 8 × 4 × 3 = 96 (Very Hard)

Adjusting Difficulty Post-Launch

If Completion Rate Too Low (<50%):

  1. Add Tier-0 hints (auto-show after 2 min)
  2. Simplify hardest puzzle (reduce steps)
  3. Make clues more obvious (highlight, animate)

If Completion Rate Too High (>80%):

  1. Remove some Tier-1 hints
  2. Add red herrings (misleading clues)
  3. Increase puzzle step count

Timing Targets

Scene Time Budgets (120-min game, 15 scenes):

Scene 0-2 (Act 1 intro): 5 min each = 15 min total
Scene 3-4 (Act 1 exploration): 7 min each = 14 min total
Scene 5-8 (Act 2 investigation): 10 min each = 40 min total
Scene 9-11 (Act 2 climax): 15 min each = 45 min total
Scene 12-14 (Act 3 resolution): 5 min each = 15 min total

Total: 129 min (slightly over to allow 10% slack)

Buffer Strategy: Design for 130 min, target 120 min (allows 8% player variation)

Playtest Metrics Dashboard

interface PlaytestMetrics {
  // Completion
  totalPlayers: number
  completedPlayers: number
  completionRate: number  // Target: 0.6-0.7

  // Timing
  avgPlayTime: number  // Target: 120 min
  medianPlayTime: number
  sceneAvgTimes: Record<string, number>

  // Difficulty
  avgHintsUsed: number  // Target: 3-5 tier-3 hints
  stuckScenes: string[]  // Scenes with >30% stuck
  failedPuzzles: Record<string, number>  // Puzzle ID → fail count

  // Satisfaction
  avgRating: number  // Target: 4.5+
  wouldReplay: number  // Target: 40%+
  wouldRecommend: number  // Target: 80%+
}

Automated Analysis:

const analyzePlaytests = (data: PlaytestData[]): BalanceReport => {
  const metrics = calculateMetrics(data)

  const issues: Issue[] = []

  if (metrics.completionRate < 0.5) {
    issues.push({
      type: 'difficulty_too_high',
      severity: 'critical',
      recommendation: 'Add tier-0 hints, simplify hardest puzzles'
    })
  }

  if (metrics.stuckScenes.length > 3) {
    issues.push({
      type: 'multiple_stuck_points',
      severity: 'high',
      scenes: metrics.stuckScenes,
      recommendation: 'Review each stuck scene, add visual cues'
    })
  }

  return { metrics, issues, recommendations: generateRecommendations(issues) }
}

See scripts/​analyze_playtests.py for automated analysis.

Balancing Workflow

Difficulty Balancing Process:
- [ ] Step 1: Design initial difficulty curve (target distribution)
- [ ] Step 2: Assign difficulty to each scene/​puzzle
- [ ] Step 3: Alpha test (5 people, internal)
- [ ] Step 4: Analyze alpha metrics (completion, stuck points)
- [ ] Step 5: Adjust difficulty (simplify stuck scenes)
- [ ] Step 6: Beta test (20 people, external)
- [ ] Step 7: Analyze beta metrics (detailed telemetry)
- [ ] Step 8: Fine-tune (hints, timing, clues)
- [ ] Step 9: Validate final metrics (60-70% target)
- [ ] Step 10: Launch with telemetry enabled

Anti-Patterns

❌ Difficulty Spike: Easy → Easy → Impossible → Easy ✅ Smooth Curve: Gradual increase with peak at 70% through game

❌ One-Size-Fits-All: Same difficulty for all players ✅ Adaptive Hints: Dynamic hint timing based on player performance

❌ No Feedback: Player doesn't know if making progress ✅ Progress Indicators: "2/​5 clues found", "You're close..."

❌ Guess-and-Check: Trial and error required ✅ Logical Deduction: Solvable with available information

Resources

Difficulty Design: references/​difficulty-curve-templates.md - Proven curve shapes Hint System: references/​three-tier-hint-guide.md - Implementation patterns Playtest Protocol: references/​playtest-procedure.md - Step-by-step guide Metrics Analysis: references/​metrics-interpretation-guide.md - What numbers mean Stuck-Point Fixes: references/​common-fixes-library.md - 50+ solutions

Scripts:

  • scripts/​analyze_playtests.py - Generate balance report from telemetry
  • scripts/​difficulty_calculator.py - Score puzzle difficulty
  • scripts/​hint_optimizer.py - Recommend hint unlock timing

Success Criteria

Well-balanced escape room should:

  • ✅ Completion rate 60-70%
  • ✅ Average time within 10% of target (108-132 min for 120-min game)
  • ✅ No scene >30% stuck rate
  • ✅ Hint usage 3-5 tier-3 hints average
  • ✅ Smooth difficulty curve (no spikes)
  • ✅ Player satisfaction 4.5+/​5
  • ✅ Replay intent 40%+
  • ✅ No critical bugs in playtest

Version: 1.0 Last Updated: 2025-01-04 Author: Escape Room Balance Specialist

More Other skills

Delegate independent tasks to specialized agents working concurrently with isolated context.

295.4K 206.3K
View

Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.

179.7K 100.1K
View

Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.

179.7K 89.5K
View

A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).

179.7K 76.1K
View

Fundamental design principles for writing maintainable, testable Python code.

40.2K 21.9K
View

Modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first strategies.

40.2K 20K
View

Generate Playwright tests from scenarios using interactive browser exploration and validation.

39.7K 18.2K
View

Modern React state management with Redux Toolkit, Zustand, Jotai, and React Query for every state category.

40.2K 14.7K
View

GDPR-compliant data handling with consent management, data subject rights, and privacy controls.

40.2K 14.3K
View

Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs.

40.2K 13.5K
View

Detailed multi-file refactor planning with safety checks and rollback guidance.

39.7K 13K
View