f8b21af4be
10_Wiki/Topics 대규모 정리: - 오류 캡처/미완성 stub 문서 227개 제거 - 교차폴더 중복 43클러스터 병합 (63파일 → redirect) - 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건 - 카테고리 MOC 6개 신규 생성 - Graph 섹션 미해결 related-keyword 링크 10,058건 제거 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
173 lines
6.4 KiB
Markdown
173 lines
6.4 KiB
Markdown
---
|
||
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<HeatModifier> 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 |
|