--- id: wiki-2026-0508-위험과-보상-risks-and-rewards title: 위험과 보상(Risks and Rewards) category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Risk-Reward, R&R Curve, 리스크 리워드] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [game-design, economy, risk-reward, decision-making] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: typescript framework: unity-csharp --- # 위험과 보상(Risks and Rewards) ## 매 한 줄 > **"매 player choice 매 risk-reward tension 의 산물"**. 매 1980s arcade era (Pac-Man power pellet hunt, Galaga fighter capture) 부터 매 2026 modern roguelite (Hades heat system, Balatro stake escalation) 까지 매 동일한 design pillar 의 작동 — 매 player 에게 매 "더 큰 reward 의 위해 매 더 큰 risk 매 감수할 것인가?" 의 매 질문 의 제시. ## 매 핵심 ### 매 R&R curve shape - **매 linear**: risk 2배 = reward 2배. 매 보장적 매 boring. - **매 convex (accelerating)**: risk 2배 = reward 4배+. 매 high-skill push 매 보상. - **매 concave (diminishing)**: risk 2배 = reward 1.3배. 매 conservative play 매 우대. - **매 step function**: threshold 매 도달 시 매 jump. 매 commitment 매 design. ### 매 expected value (EV) framework - EV = Σ(outcome × probability) - 매 design goal: 매 EV(risky) > EV(safe) by ~10-20% 매. 매 너무 크면 매 risk 매 obvious choice. 매 너무 작으면 매 risk 매 trap. - 매 variance 매 player perception 의 영향 — 매 same EV 라도 매 high-variance 매 더 위험적 매 felt. ### 매 응용 1. 매 Hades heat: +1 heat = run 의 +X% 의 어려움, +Y% 의 reward bonus. 매 player chooses pace. 2. 매 Balatro stake: ante 매 escalation curve 매 explicit risk dial. 3. 매 Diablo 4 Pit tier: timer 매 압박 의 high-tier 매 push 시 매 huge loot. 4. 매 PoE Atlas: map mods (more rare/magic) 매 increase difficulty + drop quality. 5. 매 Tarkov raid: extract early (safe loot) vs hunt boss (rare items, PvP risk). ## 💻 패턴 ### Linear vs convex reward curve ```typescript // Linear: predictable, low excitement const linearReward = (risk: number) => 100 * risk; // Convex: high-skill players get exponential reward const convexReward = (risk: number) => 100 * Math.pow(risk, 1.6); // Concave: protect casual players from punishment-snowball const concaveReward = (risk: number) => 100 * Math.pow(risk, 0.7); // Step: clear "go/no-go" decisions const stepReward = (risk: number) => risk < 0.3 ? 50 : risk < 0.7 ? 200 : 1000; ``` ### Expected value calculator ```typescript type Outcome = { value: number; probability: number }; function expectedValue(outcomes: Outcome[]): number { return outcomes.reduce((sum, o) => sum + o.value * o.probability, 0); } // Design check: risky path should EV-dominate by 10-20% const safe: Outcome[] = [{ value: 100, probability: 1.0 }]; const risky: Outcome[] = [ { value: 300, probability: 0.4 }, { value: 0, probability: 0.6 }, ]; console.log(expectedValue(safe)); // 100 console.log(expectedValue(risky)); // 120 — 20% premium for variance ``` ### Variance-aware reward ```typescript // Risk-averse player simulation: subtract σ * λ from EV function utility(outcomes: Outcome[], lambda = 0.3): number { const ev = expectedValue(outcomes); const variance = outcomes.reduce( (s, o) => s + o.probability * (o.value - ev) ** 2, 0 ); return ev - lambda * Math.sqrt(variance); } ``` ### Hades heat system pattern ```csharp public class HeatModifier { public string Name; public float DifficultyDelta; // +0.15 enemy HP public float RewardMultiplier; // +0.10 darkness } public class RunConfig { public List Active = new(); public float TotalReward => 1f + Active.Sum(h => h.RewardMultiplier); public float TotalDifficulty => 1f + Active.Sum(h => h.DifficultyDelta); // Player picks which axis to dial: more enemies vs tougher boss vs less heal } ``` ### Push-your-luck (Balatro/Slay the Spire elite) ```typescript class PushYourLuck { pot = 0; rounds = 0; bustChance = 0.15; step() { this.rounds++; this.bustChance += 0.05; // escalating if (Math.random() < this.bustChance) return { result: "bust", payout: 0 }; this.pot += 100 * Math.pow(1.4, this.rounds); return { result: "continue", pot: this.pot }; } cashOut() { return { result: "cashed", payout: this.pot }; } } ``` ### Asymmetric punishment (Tarkov-style) ```typescript // Death = lose carried gear; success = keep + bonus function raidOutcome(survived: boolean, lootValue: number, gearValue: number) { return survived ? { net: lootValue } : { net: -gearValue }; } // Design: gearValue ≈ 0.5 * expected lootValue (so EV stays positive but tense) ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | 매 player skill 매 wide range | concave curve (cap snowball) | | 매 high-skill audience (roguelike vet) | convex curve | | 매 binary commit decisions | step function | | 매 short session loop | step (clear payoff) | | 매 long session escalation | continuous + variance | **기본값**: 매 mildly convex (exponent ~1.3-1.5) + 매 EV premium 매 15% 매 risky path 의 매 적용. ## 🔗 Graph - 부모: [[Game Economy]] · [[Decision Making]] - 변형: [[위험과 보상 구조(Structures of Risks and Rewards)]] - 응용: [[핀치 포인트(Pinch Point)]] - Adjacent: [[Loss Aversion]] ## 🤖 LLM 활용 **언제**: 매 economy / progression / encounter 매 design 시 매 player choice tension 의 calibrate 시. **언제 X**: 매 narrative-only 매 walking sim (no choice stakes) — 매 R&R framework 매 misapplied. ## ❌ 안티패턴 - **매 risk without reward**: 매 die 시 매 lose progress, 매 win 시 매 nothing extra. 매 player 매 leave. - **매 reward without risk**: 매 free 의 grind 의 best gear. 매 boring. - **매 hidden EV**: 매 player 매 calculate 의 X. 매 trap design (slot machine illusion) — 매 ethical 의 X. - **매 binary cliff**: 매 EV jump 매 too sharp 매 → 매 only one viable path. ## 🧪 검증 / 중복 - Verified (Schell *Art of Game Design*, Adams *Fundamentals of Game Design*). - 매 modern roguelite 매 case studies (Hades, Balatro, Slay the Spire). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — R&R curve types + EV framework + working code patterns |