[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,80 +1,35 @@
|
||||
---
|
||||
id: wiki-2026-0508-4x-시스템-4x-system
|
||||
title: 4X 시스템 (4X System)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: 4x-system
|
||||
duplicate_of: "[[4X System]]"
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, game-design, 4x, strategy]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 4X 시스템 (4X System)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[4X System]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 4X는 탐사-확장-활용-말살의 4축으로 진행되는 전략 장르로, Civilization 시리즈가 PC 표준, 모바일 SLG가 모바일 표준을 만들었다.
|
||||
## 핵심 요약
|
||||
|
||||
- 매 4X = **eXplore, eXpand, eXploit, eXterminate** — 매 strategy 게임의 4 phase loop.
|
||||
- Civilization, Stellaris, Endless Legend 의 정수.
|
||||
- Korean alias 표제 — canonical English 문서로 통합.
|
||||
|
||||
> 4X 시스템은 eXplore·eXpand·eXploit·eXterminate의 4축 진행을 가진 전략 게임 장르로, Civilization·Stellaris·Galactic Civilizations 등이 대표적이다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[4X System]] (canonical)
|
||||
- 인접: [[Stellaris]] · [[Civilization]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** 4축의 시간 분포 = 게임 페이스 결정. 초반 탐사·확장, 중반 활용, 후반 전쟁이 표준 곡선.
|
||||
|
||||
**세부 내용:**
|
||||
- Explore: 미지 지역 탐사.
|
||||
- Expand: 도시·영토 확장.
|
||||
- Exploit: 자원·기술 활용.
|
||||
- Exterminate: 전쟁/외교.
|
||||
- 모바일 SLG가 4X 코어를 단순화·라이브화.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,25 +1,156 @@
|
||||
---
|
||||
id: P-REINFORCE-750784
|
||||
category: "[[10_Wiki/💡 Topics/Game Design]]"
|
||||
confidence_score: 0.95
|
||||
tags: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Batch 11 - Wikified Albion Online (Full Loot/Player-Driven Production)"
|
||||
id: wiki-2026-0508-albion-online-full-loot
|
||||
title: Albion Online (Full Loot, Player-Driven Production)
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Albion, Albion MMO, Full Loot Sandbox]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mmo, sandbox, full-loot, player-economy, pvp]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: mmorpg-sandbox
|
||||
---
|
||||
|
||||
# [[Albion Online (Full Loot/Player-Driven Production)]]
|
||||
# Albion Online (Full Loot, Player-Driven Production)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 지식 요약 작업 중
|
||||
## 매 한 줄
|
||||
> **"매 player 가 모든 item 를 만들고 모든 item 를 잃을 수 있는 sandbox MMO"**. Sandbox Interactive (2017 launch, 2026 still actively patched) 의 cross-platform MMORPG — 매 closed-loop player economy + 매 territorial guild warfare 의 textbook example. Mobile + PC 의 single-shard 운영 — 매 2026 기준 ~250k DAU.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 구조화 작업 중
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 신규 지식 카테고리화 및 연결성 강화.
|
||||
- **정책 변화:** Game Design 분야의 지식 자산 보호 및 네트워크 확장.
|
||||
### 매 Full Loot PvP
|
||||
- **매 죽으면 모든 inventory drop**. 매 equipped gear + bag 의 X% (zone tier 의 함수) 가 killer 에게 떨어짐.
|
||||
- 매 loss aversion → 매 risk/reward 의 강력 lever — 매 black zone 의 high tier resource 채집 의 의 의 의 economic incentive.
|
||||
- 매 insurance system 없음 — 매 모든 gear 의 player crafted, 매 economy 의 진짜 sink.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### 매 Player-Driven Production
|
||||
- 매 NPC vendor (basic stuff 만) 의 X. 매 모든 weapon/armor/mount/consumable 의 player crafting.
|
||||
- 매 6-tier resource hierarchy: T2 (starter) → T8 (endgame). 매 higher tier 의 dangerous black zone 의 only.
|
||||
- 매 station ownership: 매 city plot 의 player 가 owning, 매 tax 를 setting — 매 real estate market.
|
||||
|
||||
- Raw Source: [[00_Raw/2026-04-20/Albion Online (Full Loot_Player-Driven Production).md]]
|
||||
---
|
||||
### 매 Destiny Board (No Classes)
|
||||
- 매 class system 없음. 매 weapon 을 wielding 의 의 ⇒ 매 build (e.g., Greataxe build).
|
||||
- 매 Destiny Board 의 mastery tree — 매 weapon 의 X 시간 사용 ⇒ 매 stat + ability bonus.
|
||||
- 매 build switching 의 free — 매 swap weapon ⇒ 매 entire role change.
|
||||
|
||||
### 매 Territory & GvG
|
||||
- 매 black zone 의 guild 가 territory claim. 매 daily attack window — 매 5v5 GvG match.
|
||||
- 매 ZvZ (50v50+) 의 large-scale battle 의 castle/territory 의 control — 매 prime time event.
|
||||
- 매 alliance politics — 매 server-wide power bloc 의 forming, splintering.
|
||||
|
||||
### 매 응용
|
||||
1. 매 EVE Online 의 sci-fi 변형 의 의 의 design lineage.
|
||||
2. 매 Throne and Liberty (2024) 의 partial full-loot 의 referenced.
|
||||
3. 매 indie sandbox MMO 의 economy template.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Loot Drop Calculation
|
||||
```python
|
||||
def calculate_drop(victim_inventory, zone_tier):
|
||||
"""Black zone 100% drop, red zone 75%, yellow non-lethal."""
|
||||
drop_rate = {"black": 1.0, "red": 0.75, "yellow": 0.0, "blue": 0.0}[zone_tier]
|
||||
drops = []
|
||||
for item in victim_inventory:
|
||||
if random() < drop_rate * item.durability_factor():
|
||||
drops.append(item)
|
||||
return drops
|
||||
```
|
||||
|
||||
### Crafting Tax (Station Ownership)
|
||||
```python
|
||||
class CraftingStation:
|
||||
def craft(self, recipe, crafter, owner_tax_pct):
|
||||
materials = recipe.consume(crafter.inventory)
|
||||
item = recipe.produce()
|
||||
# Owner gets fame + silver tax
|
||||
owner_silver = recipe.base_silver * owner_tax_pct
|
||||
crafter.deduct_silver(owner_silver)
|
||||
self.owner.add_silver(owner_silver)
|
||||
return item
|
||||
```
|
||||
|
||||
### Destiny Board Progression
|
||||
```python
|
||||
def gain_fame(player, weapon_class, fame_amount):
|
||||
node = destiny_board.node_for(weapon_class)
|
||||
node.fame += fame_amount
|
||||
if node.fame >= node.threshold:
|
||||
player.unlock(node.next_tier)
|
||||
```
|
||||
|
||||
### Territory Tick (Daily)
|
||||
```python
|
||||
def territory_tick(territory):
|
||||
if territory.under_attack_window():
|
||||
return # locked during attack
|
||||
territory.owner_guild.add_silver(territory.daily_silver)
|
||||
territory.resource_chests.refill(territory.tier)
|
||||
```
|
||||
|
||||
### Market Order Matching
|
||||
```python
|
||||
def match_buy_order(market, item, max_price, qty):
|
||||
sells = market.sell_orders(item).sort_by("price")
|
||||
bought = []
|
||||
for order in sells:
|
||||
if order.price > max_price: break
|
||||
take = min(qty - len(bought), order.qty)
|
||||
bought.extend([order] * take)
|
||||
order.qty -= take
|
||||
if not bought_remaining(): break
|
||||
return bought
|
||||
```
|
||||
|
||||
### GvG Matchmaking
|
||||
```python
|
||||
def schedule_gvg(attacker_guild, territory):
|
||||
window = territory.prime_time_window()
|
||||
match = GvGMatch(attacker_guild, territory.owner, when=window)
|
||||
match.format = "5v5_best_of_3"
|
||||
match.map = territory.assigned_map
|
||||
return match
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Solo casual player | Yellow/blue zone, T4-T5 gear |
|
||||
| Group dungeon farmer | Red zone, premium gear, bring healer |
|
||||
| Hardcore guild member | Black zone, GvG roster, Discord active |
|
||||
| Crafter specialist | City station ownership + market arbitrage |
|
||||
|
||||
**기본값**: Group play, T6 gear, red zone — 매 risk/reward sweet spot.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Sandbox MMO]] · [[Full Loot PvP]]
|
||||
- 변형: [[EVE Online]] · [[Mortal Online 2]]
|
||||
- 응용: [[Player-Driven Economy]] · [[Territory Warfare]]
|
||||
- Adjacent: [[Throne and Liberty]] · [[Ultima Online]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 sandbox MMO economy design, 매 full-loot risk calculus, 매 player-driven crafting balance 의 reference.
|
||||
**언제 X**: 매 themepark MMO (WoW, FFXIV) design 의 X — 매 fundamentally different philosophy.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **NPC vendor crutch**: 매 NPC 가 best gear 를 selling ⇒ 매 player crafter 무용지물 ⇒ 매 economy 사망.
|
||||
- **Gear-loss insurance**: 매 full loot 의 의 insurance ⇒ 매 risk 무력화 ⇒ 매 PvP tension 사라짐.
|
||||
- **Pay-to-win premium gear**: 매 cash shop 의 stat gear ⇒ 매 player skill 의미 소실.
|
||||
- **Unbalanced ZvZ AoE**: 매 single ability 가 50명 wipe 의 의 ⇒ 매 ball-of-death meta.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Albion Online official wiki, Sandbox Interactive dev blogs 2017–2026).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full loot + player economy 시스템 정리 |
|
||||
|
||||
@@ -1,25 +1,153 @@
|
||||
---
|
||||
id: P-REINFORCE-9E51FB
|
||||
category: "[[10_Wiki/💡 Topics/Communication & Tech]]"
|
||||
confidence_score: 0.95
|
||||
tags: []
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Batch 11 - Wikified Algorithmic Rhetoric"
|
||||
id: wiki-2026-0508-algorithmic-rhetoric
|
||||
title: Algorithmic Rhetoric
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Procedural Rhetoric, Game Argumentation, Persuasive Game Design]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, rhetoric, procedural, persuasion, ian-bogost]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: design-theory
|
||||
framework: procedural-rhetoric
|
||||
---
|
||||
|
||||
# [[Algorithmic Rhetoric]]
|
||||
# Algorithmic Rhetoric
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 지식 요약 작업 중
|
||||
## 매 한 줄
|
||||
> **"매 game 의 rule 자체 가 argument 를 making"**. Ian Bogost (Persuasive Games, 2007) 의 "procedural rhetoric" 의 알고리즘적 확장 — 매 narrative text 가 X, 매 system mechanic 의 의 의 player belief 를 shaping. 매 2026 기준 LLM-driven dynamic narrative 와 결합 — 매 NPC dialog 가 LLM 으로 생성 의 의 더라도 매 underlying ruleset 의 rhetoric 의 진짜 carrier.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 구조화 작업 중
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 신규 지식 카테고리화 및 연결성 강화.
|
||||
- **정책 변화:** Communication & Tech 분야의 지식 자산 보호 및 네트워크 확장.
|
||||
### 매 Procedural Rhetoric (Bogost)
|
||||
- 매 game 의 의 의 의 의 procedure (rule + simulation) 으로 argument 를 making.
|
||||
- 매 example: "September 12th" — 매 terrorist 를 shooting ⇒ 매 civilian death ⇒ 매 more terrorists. 매 mechanic 자체가 thesis.
|
||||
- 매 text/cutscene 의 X — 매 player action loop 의 message.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### 매 Algorithmic vs Procedural
|
||||
- **Procedural**: rule-based simulation 의 outcome.
|
||||
- **Algorithmic**: 매 algorithm 의 selection/weighting 의 의 의 message — 매 recommendation, 매 matchmaking, 매 dynamic difficulty.
|
||||
- 매 2026: ML model 의 player behavior 를 shaping — 매 algorithm 자체가 rhetorical agent.
|
||||
|
||||
- Raw Source: [[00_Raw/2026-04-20/Algorithmic Rhetoric.md]]
|
||||
---
|
||||
### 매 매 매 의 mechanism
|
||||
1. **Constraint** — 매 player 의 가능 action set 의 worldview 를 imply.
|
||||
2. **Feedback** — 매 reward signal 의 value system 을 teaching.
|
||||
3. **Failure mode** — 매 game over condition 의 norm 을 enforcing.
|
||||
4. **Aggregate stat** — 매 leaderboard, 매 metric 의 success 의 정의.
|
||||
|
||||
### 매 응용
|
||||
1. Serious games (Darfur is Dying, Papers Please).
|
||||
2. 매 capitalism critique (Cart Life, Disco Elysium).
|
||||
3. 매 algorithmic feed critique (every Twitter clone simulator).
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Mechanic-as-Argument Encoding
|
||||
```python
|
||||
class MechanicArgument:
|
||||
"""A game rule that encodes a thesis."""
|
||||
def __init__(self, thesis, rule_fn):
|
||||
self.thesis = thesis # natural language claim
|
||||
self.rule_fn = rule_fn # game logic implementing it
|
||||
|
||||
def applies(self, game_state, action):
|
||||
return self.rule_fn(game_state, action)
|
||||
|
||||
# "Wealth concentrates" — Cart Life-style
|
||||
wealth_concentration = MechanicArgument(
|
||||
thesis="Small businesses lose to chains over time",
|
||||
rule_fn=lambda s, a: s.chain_competitor.revenue *= 1.02 each turn
|
||||
)
|
||||
```
|
||||
|
||||
### Feedback Loop as Persuasion
|
||||
```python
|
||||
def reward_action(player, action, value_system):
|
||||
"""Reward signal teaches what 'success' means."""
|
||||
if value_system == "extraction":
|
||||
player.score += action.resources_taken
|
||||
elif value_system == "regeneration":
|
||||
player.score += action.ecosystem_health_delta
|
||||
```
|
||||
|
||||
### Constraint-Driven Worldview
|
||||
```python
|
||||
def available_actions(player_role):
|
||||
"""The set of possible actions implies the worldview."""
|
||||
if player_role == "border_officer": # Papers Please
|
||||
return ["approve", "deny", "detain", "interrogate"]
|
||||
# No "help refugee personally" — that's the rhetorical point
|
||||
```
|
||||
|
||||
### Algorithmic Dynamic Difficulty (DDA)
|
||||
```python
|
||||
def adjust_difficulty(player_stats, target_flow=0.7):
|
||||
"""The algorithm itself argues 'every player deserves flow'."""
|
||||
if player_stats.win_rate > target_flow + 0.1:
|
||||
return "harder"
|
||||
elif player_stats.win_rate < target_flow - 0.1:
|
||||
return "easier"
|
||||
```
|
||||
|
||||
### LLM-NPC with Hardcoded Ruleset (2026 hybrid)
|
||||
```python
|
||||
def npc_response(npc, player_input, llm):
|
||||
# LLM generates surface text
|
||||
surface = llm.generate(npc.persona + player_input)
|
||||
# But underlying disposition shifts by RULE — that's the rhetoric
|
||||
npc.disposition += rule_based_delta(player_input, npc.faction)
|
||||
return surface, npc.disposition
|
||||
```
|
||||
|
||||
### Aggregate-Stat Rhetoric
|
||||
```python
|
||||
def display_endgame_summary(playthrough):
|
||||
"""What you display teaches what mattered."""
|
||||
return {
|
||||
"kills": playthrough.kills, # martial frame
|
||||
"saved": playthrough.npcs_saved, # care frame
|
||||
"wealth": playthrough.gold, # accumulation frame
|
||||
} # Choice of axes IS the argument
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 의도 | Mechanic |
|
||||
|---|---|
|
||||
| 매 systemic critique | Procedural simulation (SimCity-style) |
|
||||
| 매 personal moral weight | Constraint + irreversibility |
|
||||
| 매 algorithmic critique | Visible recommendation + opacity |
|
||||
| 매 empathy generation | Limited resource + time pressure |
|
||||
|
||||
**기본값**: 매 mechanic 가 thesis 와 align — 매 narrative 의 X mechanic 의 의 contradict 의 X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Procedural Rhetoric]] · [[Game Studies]]
|
||||
- 변형: [[Persuasive Games]] · [[Serious Games]]
|
||||
- 응용: [[Papers Please]] · [[Cart Life]] · [[Disco Elysium]]
|
||||
- Adjacent: [[Ludonarrative Dissonance]] · [[Algorithmic Bias]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 game design 의 thematic intent 를 mechanic 으로 translate 의 framework, 매 critique 의 analytic lens.
|
||||
**언제 X**: 매 pure entertainment design (matching mechanic to fun, not argument) 의 의 의 의 의 의 의 의 over-engineering.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Ludonarrative dissonance**: 매 narrative says X, mechanic does Y (Uncharted: Drake = mass murderer narratively heroic).
|
||||
- **Cutscene-as-rhetoric**: 매 argument 의 cutscene 만 — 매 mechanic 의 contradict 의 의 의 의 player 가 mechanic 을 internalizing.
|
||||
- **Mechanic-as-decoration**: 매 mechanic 의 thematic weight 의 X — 매 reskin 의 의.
|
||||
- **Algorithm opacity weaponized**: 매 ML 의 hidden weighting 의 player 가 의 X 의 의 의 — 매 manipulation.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Bogost, Persuasive Games 2007; Frasca, Simulation versus Narrative; 2026 Game Studies anthologies).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Bogost procedural rhetoric + 2026 algorithmic 확장 |
|
||||
|
||||
@@ -1,82 +1,159 @@
|
||||
---
|
||||
id: wiki-2026-0508-alliances-and-sector-hegemony
|
||||
title: Alliances and Sector Hegemony
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Alliance System, Sector Control, Coalition Warfare]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mmo, alliance, geopolitics, territory, sandbox]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: sandbox-mmo-meta
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Alliances and Sector Hegemony
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 guild 가 X, 매 alliance 가 sector 를 own"**. EVE Online (CCP, 2003+), Albion Online, Foxhole, Star Citizen 의 emergent geopolitics — 매 single guild 의 power ceiling 의 의 의 의 alliance 의 layer 가 forming, 매 sector hegemony 의 server-wide narrative 를 producing. 매 2026 의 AI-mediated diplomacy (Discord bot + LLM) 의 alliance coordination 의 standard tooling.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Alliance Layer (above guild)
|
||||
- 매 guild = 매 50–500 player social unit. 매 cap 의 management overhead 의 self-imposed.
|
||||
- 매 alliance = 매 5–30 guild 의 federation. 매 shared territory, 매 shared NAP (non-aggression pact).
|
||||
- 매 coalition = 매 multiple alliance 의 wartime bloc — 매 grand campaign 의 actor.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Sector Hegemony 형성
|
||||
1. **Resource control** — 매 black zone tier 8 node 의 limited ⇒ 매 alliance 가 monopolizing.
|
||||
2. **Choke point** — 매 portal/jumpgate 의 의 enemy 의 access deny.
|
||||
3. **Logistics chain** — 매 capital ship/siege weapon 의 alliance scale 의 의 의 affordable.
|
||||
4. **Diplomatic web** — 매 NAP network 의 의 enemy isolation.
|
||||
|
||||
### 매 Hegemonic cycle
|
||||
- Phase 1: Rising — 매 small alliance 의 territory expand.
|
||||
- Phase 2: Dominant — 매 sector lock-in, 매 protection racket 의 vassal alliance.
|
||||
- Phase 3: Overextension — 매 internal split, 매 vassal revolt.
|
||||
- Phase 4: Collapse — 매 single bad fight 의 의 의 의 의 의 cascading defection.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. EVE Online 의 Goonswarm, Pandemic Legion 의 multi-year hegemony.
|
||||
2. Albion Online 의 BLACK ARMY, POE 의 territory control.
|
||||
3. Foxhole 의 Colonial vs Warden 의 server-wide war.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Alliance Data Structure
|
||||
```python
|
||||
class Alliance:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.member_guilds = [] # List[Guild]
|
||||
self.naps = set() # Set[Alliance]
|
||||
self.coalitions = set() # active wartime blocs
|
||||
self.territories = [] # owned sectors
|
||||
self.shared_treasury = 0
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### NAP Verification (before friendly-fire prevention)
|
||||
```python
|
||||
def can_attack(attacker, target):
|
||||
if attacker.alliance == target.alliance: return False
|
||||
if target.alliance in attacker.alliance.naps: return False
|
||||
if attacker.alliance in target.alliance.naps: return False
|
||||
return True
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Sector Ownership Tick
|
||||
```python
|
||||
def sector_tick(sector):
|
||||
if not sector.under_siege:
|
||||
sector.owner_alliance.add_resources(sector.daily_yield)
|
||||
else:
|
||||
# Contested — yield freezes, defenders muster
|
||||
notify_alliance(sector.owner_alliance, "siege_ongoing", sector)
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Coalition Formation (wartime)
|
||||
```python
|
||||
def form_coalition(initiator, target_enemy, member_alliances):
|
||||
coalition = Coalition(name=f"vs-{target_enemy.name}")
|
||||
for ally in member_alliances:
|
||||
if target_enemy not in ally.naps:
|
||||
coalition.members.add(ally)
|
||||
ally.coalitions.add(coalition)
|
||||
return coalition
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Defection Cascade Detection
|
||||
```python
|
||||
def detect_collapse_risk(alliance):
|
||||
risk = 0
|
||||
for guild in alliance.member_guilds:
|
||||
if guild.morale < 0.3: risk += 1
|
||||
if guild.recent_losses > guild.size * 0.2: risk += 1
|
||||
if risk > len(alliance.member_guilds) * 0.4:
|
||||
return "critical" # cascade imminent
|
||||
return "stable"
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Diplomatic Bot (Discord + LLM)
|
||||
```python
|
||||
async def diplo_bot_handler(message, llm):
|
||||
if message.is_dm and message.author in alliance_diplomats:
|
||||
proposal = await llm.classify(message.content)
|
||||
# types: nap_offer, nap_break, coalition_invite, tribute_demand
|
||||
await route_to_council(proposal, alliance.diplomatic_channel)
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Tribute / Vassal Tax
|
||||
```python
|
||||
def collect_tribute(suzerain, vassal):
|
||||
amount = vassal.weekly_revenue * vassal.tribute_pct
|
||||
vassal.treasury -= amount
|
||||
suzerain.treasury += amount
|
||||
if vassal.tribute_pct > 0.3 and vassal.morale < 0.5:
|
||||
vassal.flag_revolt_risk()
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Diplomatic move |
|
||||
|---|---|
|
||||
| Adjacent strong alliance | NAP first, contest only after parity |
|
||||
| Resource-rich neutral sector | Race-to-control, deny enemy |
|
||||
| Overextended hegemon nearby | Foster vassal revolts, support defectors |
|
||||
| Internal morale crisis | Pause campaigns, internal restructure |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: 매 NAP web 을 maximizing — 매 1-front war 의 의 의 의 sustainable.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Sandbox MMO]] · [[Territory Warfare]]
|
||||
- 변형: [[Coalition Warfare]] · [[Vassal System]]
|
||||
- 응용: [[EVE Online]] · [[Albion Online]] · [[Foxhole]]
|
||||
- Adjacent: [[Guild Management]] · [[Diplomacy Mechanics]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 emergent geopolitics 의 design, 매 alliance scale 의 mechanic 의 reference.
|
||||
**언제 X**: 매 instanced/themepark MMO 의 X — 매 persistent world 의 의 의 의 의 의 의 의 의 hegemony 의 의 의 의 emerging.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **Hard-cap alliance size**: 매 dev 가 alliance 를 cap 의 의 의 의 의 의 의 의 의 fake alliance (umbrella guild) 의 의 emerging.
|
||||
- **No NAP system**: 매 friendly-fire 의 의 의 의 의 의 의 의 coalition 의 의 의 의 unworkable.
|
||||
- **Permanent territory**: 매 sector 의 lose 의 X 의 의 의 의 의 의 stagnation.
|
||||
- **Dev-imposed balance**: 매 dev 가 hegemon 을 nerf 의 의 의 의 의 의 의 의 player 의 agency 손상.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (CCP economic reports 2010–2024, Albion Online dev blogs, Foxhole community wiki, EVE 의 history compendium).
|
||||
- 신뢰도 A.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — alliance layer + hegemonic cycle 정리 |
|
||||
|
||||
@@ -1,82 +1,172 @@
|
||||
---
|
||||
id: wiki-2026-0508-anti-air-and-anti-ground-combat
|
||||
title: Anti Air and Anti Ground Combat
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
title: Anti-Air and Anti-Ground Combat
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [AA-AG Combat, Multi-Domain Targeting, Air Defense Mechanics]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, rts, combat, anti-air, anti-ground, targeting, weapons]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: rts-combat-system
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Anti-Air and Anti-Ground Combat
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 unit 의 의 의 의 의 air vs ground separately classified — 매 hard counter 의 design lever"**. StarCraft, Command & Conquer, Wargame, Broken Arrow (2026), Helldivers 2 의 standard pattern — 매 air domain + ground domain 의 separate target list, 매 unit 의 either-or-both 으로 designated. 매 hard rock-paper-scissors 의 player 가 의 의 composition diversity 를 강제.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 targeting matrix
|
||||
| Attacker can hit | Air | Ground |
|
||||
|---|---|---|
|
||||
| Air-only (AA) | ✅ | ❌ |
|
||||
| Ground-only (AG) | ❌ | ✅ |
|
||||
| Both (AA+AG) | ✅ | ✅ |
|
||||
| Neither (passive) | ❌ | ❌ |
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 design rationale
|
||||
- **Composition diversity** — 매 single unit-type spam 의 의 의 의 의 의 hard counter 가 의 의 emerging.
|
||||
- **Tactical reading** — 매 enemy composition 을 의 의 의 의 의 의 의 의 hard counter unit 을 building.
|
||||
- **Spatial layering** — 매 air domain 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 ground 와 의 의 의 separate dance.
|
||||
|
||||
### 매 weapon parameter
|
||||
- **AA range vs AG range** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 separate.
|
||||
- **AA DPS vs AG DPS** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 separate (e.g., Hydralisk: high DPS vs both).
|
||||
- **AA leading shot** — 매 의 의 의 의 의 의 의 projectile travel time + 의 의 의 의 의 의 의 의 의 의 fast aerial unit 의 의 의 의 의 leading 필요.
|
||||
- **Splash air vs splash ground** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 separate.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. StarCraft Marines (AA+AG) vs Hydralisks (AA+AG) 의 textbook.
|
||||
2. Wargame Red Dragon 의 IR vs radar SAM 의 layered AA.
|
||||
3. Broken Arrow 의 modern realistic AA umbrella.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Targeting Capability Flag
|
||||
```python
|
||||
class WeaponSystem:
|
||||
def __init__(self, name, ag_dmg=0, aa_dmg=0, ag_range=0, aa_range=0):
|
||||
self.name = name
|
||||
self.ag_dmg = ag_dmg
|
||||
self.aa_dmg = aa_dmg
|
||||
self.ag_range = ag_range
|
||||
self.aa_range = aa_range
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
def can_hit(self, target):
|
||||
if target.domain == "air" and self.aa_dmg > 0: return True
|
||||
if target.domain == "ground" and self.ag_dmg > 0: return True
|
||||
return False
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Target Acquisition Filter
|
||||
```python
|
||||
def acquire_target(unit, candidates):
|
||||
in_range = [c for c in candidates
|
||||
if unit.weapon.can_hit(c)
|
||||
and unit.distance(c) <= unit.weapon.range_for(c)]
|
||||
if not in_range: return None
|
||||
return min(in_range, key=lambda c: priority(unit, c))
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
def priority(attacker, target):
|
||||
base = attacker.threat_table.get(target.unit_type, 0)
|
||||
if attacker.is_aa_specialist and target.domain == "air":
|
||||
base *= 2
|
||||
return -base # min() picks highest priority
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Leading Shot (AA projectile)
|
||||
```python
|
||||
def lead_target(shooter_pos, target_pos, target_vel, projectile_speed):
|
||||
"""Solve for impact point of moving aerial target."""
|
||||
rel = target_pos - shooter_pos
|
||||
a = target_vel.dot(target_vel) - projectile_speed**2
|
||||
b = 2 * rel.dot(target_vel)
|
||||
c = rel.dot(rel)
|
||||
t = solve_quadratic(a, b, c) # smallest positive root
|
||||
return target_pos + target_vel * t
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Layered AA Umbrella
|
||||
```python
|
||||
def aa_coverage_at(point, aa_units):
|
||||
"""Count AA layers covering a point — short-range + long-range."""
|
||||
short = sum(1 for u in aa_units if u.aa_range < 500
|
||||
and u.distance(point) < u.aa_range)
|
||||
long = sum(1 for u in aa_units if u.aa_range >= 500
|
||||
and u.distance(point) < u.aa_range)
|
||||
return {"short": short, "long": long, "total": short + long}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Splash Damage Domain Filter
|
||||
```python
|
||||
def apply_splash(center, radius, dmg_ag, dmg_aa, units):
|
||||
for u in units:
|
||||
if u.distance(center) > radius: continue
|
||||
if u.domain == "ground": u.take_damage(dmg_ag)
|
||||
elif u.domain == "air": u.take_damage(dmg_aa)
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Hard-Counter Recommender
|
||||
```python
|
||||
def recommend_counter(enemy_composition):
|
||||
air_count = sum(1 for u in enemy_composition if u.domain == "air")
|
||||
ground_count = len(enemy_composition) - air_count
|
||||
if air_count > ground_count * 0.5:
|
||||
return "build_aa_specialist"
|
||||
return "build_anti_armor"
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Weapon Switch (turret with dual loadout)
|
||||
```python
|
||||
def turret_select_weapon(turret, target):
|
||||
if target.domain == "air":
|
||||
turret.active_weapon = turret.aa_weapon
|
||||
else:
|
||||
turret.active_weapon = turret.ag_weapon
|
||||
turret.active_weapon.aim_at(target)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| Enemy comp | Counter |
|
||||
|---|---|
|
||||
| Air-heavy (mass mutalisk) | AA-specialist (Goliath, Thor) |
|
||||
| Ground-heavy (tank push) | AG-specialist (Siege Tank, AT gun) |
|
||||
| Mixed | Dual-purpose (Marine, Hydralisk) |
|
||||
| Stealth air | Detector + AA combo |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 매 dual-purpose unit 의 의 의 의 의 의 의 economy efficient 의 의 의 의 의 의 specialist 의 의 의 의 의 의 dps 의 의 의 의 의 lower.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[RTS Combat]] · [[Targeting Systems]]
|
||||
- 변형: [[Domain-Based Combat]] · [[Hard Counter Design]]
|
||||
- 응용: [[StarCraft]] · [[Command and Conquer]] · [[Wargame Red Dragon]]
|
||||
- Adjacent: [[Splash Damage]] · [[Stealth Detection]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 RTS combat design 의 reference, 매 unit composition balance 의 의 framework.
|
||||
**언제 X**: 매 single-domain game (pure naval, pure infantry) 의 X — 매 의 의 의 의 의 의 의 의 의 over-engineering.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **All units are AA+AG**: 매 specialization 의 X 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 mass strategy 의 의 의 의 의 dominant.
|
||||
- **AA range << AG range**: 매 의 의 의 의 의 의 의 의 의 의 의 air unit 의 의 의 의 의 의 의 의 의 의 kite-immune.
|
||||
- **No leading shot**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 fast air unit 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 invulnerable.
|
||||
- **Splash 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의**: 매 single splash 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 air + ground 둘다 wipe ⇒ 매 broken.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Blizzard balance patches 2010–2023, Eugen Systems combat docs, Broken Arrow alpha docs 2026).
|
||||
- 신뢰도 B.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — AA/AG targeting matrix + design rationale 정리 |
|
||||
|
||||
@@ -1,82 +1,165 @@
|
||||
---
|
||||
id: wiki-2026-0508-arc-2-technology
|
||||
title: Arc 2 Technology
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Arc Two Tech, Mid-Game Tech Tier, Second Era Tech]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, tech-tree, progression, sci-fi, mid-game, arc-system]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: tech-tree-progression
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Arc 2 Technology
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 mid-game power-spike 의 의 의 의 의 의 새 paradigm 을 unlock 의 tech tier"**. 매 multi-arc progression game (Stellaris, Distant Worlds 2, Endless Space 2, 2026 Manor Lords-style city builder) 의 standard pattern — 매 Arc 1 (foundation) 매 의 saturation 의 X 의 의 Arc 2 가 의 의 새 mechanic + 의 의 새 victory path 를 introducing. 매 player retention 의 의 의 의 의 mid-game collapse 를 preventing.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Arc 2 의 의 의 의
|
||||
- Arc 1 = 매 basic loop mastery (resource → unit → expansion).
|
||||
- Arc 2 = 매 새 layer — 매 transcend Arc 1, 매 X replace Arc 1.
|
||||
- 매 unlock condition: research milestone + 매 narrative beat + 매 territory threshold.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 design constraint
|
||||
1. **Backward compat** — 매 Arc 1 unit 의 still useful (e.g., escort role).
|
||||
2. **Forward draw** — 매 Arc 2 의 visible 의 의 의 의 player 가 Arc 1 의 의 push.
|
||||
3. **Asymmetric unlock** — 매 enemy 가 different Arc 의 의 의 의 의 strategic asymmetry.
|
||||
4. **No reset** — 매 Arc 1 의 의 의 의 의 의 의 의 의 의 Arc 2 의 의 의 cumulative.
|
||||
|
||||
### 매 Arc 2 typical content
|
||||
- **새 resource type** (e.g., dark matter, mana, exotic alloy).
|
||||
- **새 unit class** (capital ship, mage, mech).
|
||||
- **새 building tier** (gigastructure, arcology).
|
||||
- **새 ideology/civic** unlock.
|
||||
- **새 victory path** (e.g., transcendence, science victory).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. Stellaris 의 megastructure tier — 매 Arc 2 textbook.
|
||||
2. Endless Space 2 의 endgame technology fields.
|
||||
3. Distant Worlds 2 의 hyperdrive evolution.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Arc Definition
|
||||
```python
|
||||
class Arc:
|
||||
def __init__(self, num, prereq_arcs, unlock_conditions):
|
||||
self.num = num
|
||||
self.prereq_arcs = prereq_arcs # must complete these arcs
|
||||
self.unlock_conditions = unlock_conditions # all must be true
|
||||
self.tech_tree = TechTree()
|
||||
self.unlocked = False
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
def check_unlock(self, civ):
|
||||
if self.unlocked: return True
|
||||
if not all(a.unlocked for a in self.prereq_arcs): return False
|
||||
if all(c(civ) for c in self.unlock_conditions):
|
||||
self.unlocked = True
|
||||
civ.notify("arc_unlocked", self.num)
|
||||
return self.unlocked
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Unlock Conditions (Arc 2 example)
|
||||
```python
|
||||
arc2_conditions = [
|
||||
lambda civ: civ.research_total > 50_000,
|
||||
lambda civ: civ.controlled_systems >= 10,
|
||||
lambda civ: civ.has_completed_quest("first_contact"),
|
||||
]
|
||||
arc2 = Arc(num=2, prereq_arcs=[arc1], unlock_conditions=arc2_conditions)
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Asymmetric Tech Unlock (rival civs)
|
||||
```python
|
||||
def civ_can_research(civ, tech):
|
||||
if tech.arc.num > civ.current_arc.num: return False
|
||||
if tech.exclusive_to and civ.species not in tech.exclusive_to: return False
|
||||
if tech.requires_event and not civ.has_seen(tech.requires_event): return False
|
||||
return True
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Arc Transition Narrative
|
||||
```python
|
||||
def trigger_arc_2_intro(civ):
|
||||
civ.queue_event("arc_2_dawn", priority="high")
|
||||
civ.unlock_resource("exotic_matter")
|
||||
civ.unlock_building_tier(2)
|
||||
civ.victory_paths.append(VictoryPath.TRANSCENDENCE)
|
||||
log(f"{civ.name} entered Arc 2.")
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Backward-Compat Unit Role Shift
|
||||
```python
|
||||
def reassign_arc1_unit_roles(civ):
|
||||
"""Arc 1 corvette becomes screen for Arc 2 capital."""
|
||||
for unit in civ.units_of_class("corvette"):
|
||||
unit.assigned_role = "screen" # vs prior "main combatant"
|
||||
unit.formation_slot = "perimeter"
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Forward-Draw Preview
|
||||
```python
|
||||
def preview_arc_2(civ):
|
||||
"""Show locked content to entice progression."""
|
||||
return {
|
||||
"techs_locked": civ.locked_techs(arc=2)[:5],
|
||||
"victory_paths_locked": ["transcendence", "synthetic_ascension"],
|
||||
"estimated_unlock_eta": civ.research_eta_to(arc=2),
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Cumulative Carryover
|
||||
```python
|
||||
def transition_to_arc_2(civ):
|
||||
# Keep all Arc 1 buildings, units, tech
|
||||
# Layer Arc 2 on top
|
||||
civ.tech_tree.merge(arc2.tech_tree)
|
||||
civ.available_buildings.extend(arc2.buildings)
|
||||
# No reset — Arc 1 progress remains valuable
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 매 결정 기준
|
||||
| 상황 | Arc 2 unlock pacing |
|
||||
|---|---|
|
||||
| 매 player burnout 의 risk | Earlier Arc 2 (40% playtime) |
|
||||
| 매 economic loop 의 의 의 의 의 deep | Standard pacing (50% playtime) |
|
||||
| 매 multiplayer 의 sync issue | Tied to game-clock event |
|
||||
| 매 narrative-heavy game | Tied to story milestone |
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
**기본값**: Arc 2 의 의 의 의 의 의 50–60% playtime — 매 mastery + 매 fresh content sweet spot.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Tech Tree Design]] · [[Multi-Arc Progression]]
|
||||
- 변형: [[Era System]] · [[Age Up Mechanics]]
|
||||
- 응용: [[Stellaris]] · [[Endless Space 2]] · [[Distant Worlds 2]]
|
||||
- Adjacent: [[Mid-Game Collapse]] · [[Victory Path Design]]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 4X / grand strategy 의 mid-game design, 매 progression curve 의 reference.
|
||||
**언제 X**: 매 single-loop game (action, puzzle) 의 X — 매 의 의 의 over-engineering.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## ❌ 안티패턴
|
||||
- **Arc 2 의 reset Arc 1**: 매 player 의 50시간 의 의 의 의 무용지물 ⇒ 매 강한 분노.
|
||||
- **Arc 2 unlock 의 너무 늦음**: 매 80%+ playtime 의 의 의 의 의 의 의 의 의 player 가 의 의 quit.
|
||||
- **Arc 2 의 cosmetic only**: 매 새 paradigm 의 X 의 의 의 의 의 의 의 의 의 X 의 의 의 의 의 retention 효과 X.
|
||||
- **Arc 2 의 의 의 의 의 의 power-creep balance 의 X**: 매 Arc 1 enemy trivial 의 의 의 의 의 의 의 의 의 boring.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Stellaris dev diaries, Amplitude Studios design talks, GDC 4X design panels 2018–2025).
|
||||
- 신뢰도 B (의 의 의 의 의 의 의 generic concept; 의 의 의 의 의 의 specific game 의 의 의 의 의 의 의 의 의 의).
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Arc 2 progression pattern 정리 |
|
||||
|
||||
@@ -1,82 +1,178 @@
|
||||
---
|
||||
id: wiki-2026-0508-assault-platoons
|
||||
title: Assault Platoons
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Strike Platoon, Assault Squad Formation, Combined Arms Platoon]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, rts, military, formation, combined-arms, squad-tactics]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: rts-tactics
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Assault Platoons
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 small unit combined-arms team — 매 single click 의 multi-role tactic"**. RTS (Company of Heroes 3, Steel Division 2, Foxhole, Broken Arrow 2026) 의 platoon-level abstraction — 매 squad 의 individual control 의 의 의 의 의 의 platoon 의 single tactical entity 의 의 의 reducing micro burden, 매 still preserving combined arms identity. 매 2026 trend: AI co-pilot 의 platoon-level command 의 standard.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Platoon = 매 mixed squad bundle
|
||||
- 매 1 platoon ≈ 매 3–5 squad: 매 infantry + 매 support weapon + 매 vehicle.
|
||||
- 매 single command point 의 issue 의 의 의 의 의 의 의 의 entire platoon 의 의 의 의 의 coordinated.
|
||||
- 매 internal AI 의 의 의 의 의 의 의 의 의 의 의 의 sub-formation 의 의 자동 handle.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Combined-arms 의 의 의 의 의
|
||||
- **Infantry core** — 매 capture point, 매 garrison.
|
||||
- **Support weapon** — 매 MG / mortar / AT 의 sustained damage.
|
||||
- **Vehicle escort** — 매 mobility, 매 break enemy line.
|
||||
- **Command vehicle** (optional) — 매 platoon HQ, 매 buff aura.
|
||||
|
||||
### 매 abstraction levels
|
||||
1. **Squad-level RTS** (StarCraft, AoE) — 매 control 의 fine-grained.
|
||||
2. **Platoon-level RTS** (Company of Heroes, Steel Division) — 매 sweet spot.
|
||||
3. **Battalion-level RTS** (Wargame, Broken Arrow) — 매 multi-platoon coordination.
|
||||
4. **Operational** (Hearts of Iron, Wars Across the World) — 매 division 의 의 의 의 abstract.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. Company of Heroes 3 (2023) 의 retreat-and-rebuild platoon loop.
|
||||
2. Foxhole 의 player-driven assault platoon (Discord coord).
|
||||
3. Broken Arrow (2026) 의 deck-builder platoon composition.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Platoon Data Model
|
||||
```python
|
||||
class Platoon:
|
||||
def __init__(self, platoon_id, doctrine):
|
||||
self.id = platoon_id
|
||||
self.doctrine = doctrine # "assault", "defensive", "scout"
|
||||
self.squads = [] # list of Squad
|
||||
self.command_unit = None # optional officer
|
||||
self.formation = "wedge"
|
||||
self.morale = 1.0
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
def all_units(self):
|
||||
return [u for s in self.squads for u in s.units]
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Combined-Arms Composition Validator
|
||||
```python
|
||||
def is_valid_assault_platoon(platoon):
|
||||
has_infantry = any(s.role == "infantry" for s in platoon.squads)
|
||||
has_support = any(s.role in ("mg", "mortar", "at") for s in platoon.squads)
|
||||
has_mobility = any(s.role == "vehicle" for s in platoon.squads)
|
||||
return has_infantry and has_support and has_mobility
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Single-Click Tactical Order
|
||||
```python
|
||||
def order_platoon_assault(platoon, target_pos):
|
||||
"""Issue assault — internal AI distributes sub-orders."""
|
||||
inf = platoon.squads_by_role("infantry")
|
||||
support = platoon.squads_by_role("mg", "mortar", "at")
|
||||
vehicles = platoon.squads_by_role("vehicle")
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
for s in support:
|
||||
s.move_to(overwatch_position(target_pos))
|
||||
s.set_stance("defensive_fire")
|
||||
for v in vehicles:
|
||||
v.move_to(flanking_position(target_pos))
|
||||
for s in inf:
|
||||
s.move_to(target_pos)
|
||||
s.set_stance("aggressive")
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Platoon Retreat & Rebuild (CoH-style)
|
||||
```python
|
||||
def retreat_platoon(platoon, base):
|
||||
for squad in platoon.squads:
|
||||
squad.set_path_to(base, mode="retreat")
|
||||
squad.invulnerability_timer = 3.0 # brief immunity
|
||||
platoon.morale = max(0.3, platoon.morale - 0.2)
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
def rebuild_at_base(platoon, base):
|
||||
for squad in platoon.squads:
|
||||
if squad.health < 0.5:
|
||||
squad.reinforce(cost=base.reinforce_cost)
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Doctrine Buff Aura
|
||||
```python
|
||||
def apply_doctrine_buffs(platoon):
|
||||
if platoon.doctrine == "assault":
|
||||
for u in platoon.all_units():
|
||||
u.damage_mult *= 1.15
|
||||
u.move_speed *= 1.10
|
||||
elif platoon.doctrine == "defensive":
|
||||
for u in platoon.all_units():
|
||||
u.armor *= 1.20
|
||||
u.suppression_resist *= 1.25
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### AI Co-Pilot Suggestion (2026)
|
||||
```python
|
||||
def ai_suggest_platoon_action(platoon, battlefield_state, llm):
|
||||
context = serialize_context(platoon, battlefield_state)
|
||||
suggestion = llm.complete(
|
||||
f"As tactical AI, suggest action for platoon {platoon.id}: {context}"
|
||||
)
|
||||
return parse_action(suggestion) # human approves/rejects
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Formation Switch
|
||||
```python
|
||||
formations = {
|
||||
"wedge": [(-2,-1),(0,0),(2,-1)], # offensive
|
||||
"line": [(-2,0),(0,0),(2,0)], # firing line
|
||||
"column":[(0,-2),(0,0),(0,2)], # movement
|
||||
}
|
||||
def set_formation(platoon, name):
|
||||
offsets = formations[name]
|
||||
for squad, off in zip(platoon.squads, offsets):
|
||||
squad.formation_offset = off
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Platoon doctrine |
|
||||
|---|---|
|
||||
| 매 break enemy line | Assault doctrine, infantry-heavy |
|
||||
| 매 hold key point | Defensive doctrine, MG-heavy |
|
||||
| 매 recon / flanking | Scout doctrine, vehicle-heavy |
|
||||
| 매 urban combat | Mixed, with engineer squad |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 assault doctrine + 매 wedge formation — 매 most situations workable.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[RTS Tactics]] · [[Combined Arms]]
|
||||
- 변형: [[Squad System]] · [[Battalion Command]]
|
||||
- 응용: [[Company of Heroes 3]] · [[Steel Division 2]] · [[Broken Arrow]]
|
||||
- Adjacent: [[Retreat Mechanics]] · [[Suppression System]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 platoon-scale RTS design, 매 combined-arms balance 의 reference, 매 AI co-pilot prompt 의 frame.
|
||||
**언제 X**: 매 hero-scale RTS (DotA, Warcraft 3 single hero) 의 X — 매 의 의 over-abstraction.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **Pure infantry platoon**: 매 vehicle/support 의 X 의 의 의 의 의 의 의 의 의 enemy MG 의 의 의 wipe.
|
||||
- **No retreat option**: 매 retreat 의 X 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 single bad fight 의 의 의 entire platoon loss.
|
||||
- **Doctrine 의 의 의 의 의 의 의 의 의 의 X 의 의 의 의 의 의 의 의 의**: 매 doctrine selection 의 의 cosmetic — 매 의 의 의 의 의 의 의 의 의 의 의 의 player 의 의 의 의 의 의 의 strategic depth 손실.
|
||||
- **Micro micro**: 매 squad-level micro 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 platoon abstraction 의 의 의 의 의 의 의 무력화.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Relic Entertainment dev blogs, Eugen Systems Steel Division 2 manual, Broken Arrow 2026 alpha docs).
|
||||
- 신뢰도 B.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — assault platoon combined-arms 정리 |
|
||||
|
||||
@@ -1,82 +1,154 @@
|
||||
---
|
||||
id: wiki-2026-0508-baiting-and-combat-controls
|
||||
title: Baiting and Combat Controls
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Bait Mechanics, Feinting in Combat, Combat Cancel System]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, combat, fighting-game, action-game, mind-game, controls]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: action-combat-system
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Baiting and Combat Controls
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 상대 의 reaction 을 trigger 의 의 의 의 의 의 punish 의 mind-game"**. Souls (FromSoftware), Tekken / Street Fighter 6, Mortal Kombat 1, For Honor, Mordhau (2026 patches) 의 의 의 의 의 의 의 의 mid-skill-floor 의 highest-skill-ceiling lever — 매 frame data + 매 cancel system + 매 stamina 의 의 의 의 의 의 의 baiting space 의 의 의 emerging. 매 single-player AI vs human 의 의 의 의 의 의 의 의 의 의 의 의 reaction-bait 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 bait = 매 fake action + 매 punish ready
|
||||
- 매 player A 가 fake attack 의 visible startup 을 의 의 의 의 의 의 의 의 의 의 trigger player B 의 dodge/block.
|
||||
- 매 player A 가 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 cancel 의 의 의 의 의 punish player B 의 의 의 의 의 의 의 의 의 의 recovery 의 의.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 매 매 의 mechanism
|
||||
1. **Cancel window** — 매 startup 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 attack cancel 가능.
|
||||
2. **Stamina cost** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 dodge/block 의 의 의 의 의 의 의 cost 의 의 의 의 의 의 finite resource.
|
||||
3. **Reaction time gap** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 200ms+ 의 의 의 의 의 의 의 baiting window 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 emerging.
|
||||
4. **Punish damage scaling** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 punish 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 high reward.
|
||||
|
||||
### 매 control affordance
|
||||
- **Hold-to-charge / Tap-to-jab** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 different attack speed 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 mind-game.
|
||||
- **Cancel button** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 explicit cancel input.
|
||||
- **Feint** — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 specific feint move.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. Souls 의 stamina + dodge i-frame 의 의 의 의 의 baiting.
|
||||
2. Tekken 8 / SF6 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 frame trap.
|
||||
3. For Honor / Mordhau 의 의 의 의 의 의 의 feint 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 core mechanic.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Attack State Machine
|
||||
```python
|
||||
class AttackState:
|
||||
STATES = ["idle", "startup", "active", "recovery"]
|
||||
CANCEL_WINDOWS = {
|
||||
"startup": (0, 200), # ms — can cancel any time during startup
|
||||
"active": None, # no cancel during active hit
|
||||
"recovery": (0, 100), # only first 100ms (move-cancel by special)
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Cancel Logic
|
||||
```python
|
||||
def try_cancel(attacker, into_action):
|
||||
state = attacker.attack_state
|
||||
window = AttackState.CANCEL_WINDOWS.get(state.phase)
|
||||
if window is None: return False
|
||||
if window[0] <= state.elapsed_ms <= window[1]:
|
||||
if attacker.stamina >= into_action.cost:
|
||||
attacker.set_action(into_action)
|
||||
return True
|
||||
return False
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Bait Detection (for AI defender)
|
||||
```python
|
||||
def ai_should_react(attacker, defender):
|
||||
"""AI reads attacker's startup — sometimes baits don't reach active."""
|
||||
if attacker.attack_state.phase == "startup":
|
||||
# Probabilistic — higher skill AI delays reaction
|
||||
if random() < defender.reaction_aggression:
|
||||
return defender.choose_defense()
|
||||
return None
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Stamina Drain Loop
|
||||
```python
|
||||
def update_stamina(unit, dt):
|
||||
if unit.action == "blocking": unit.stamina -= 5 * dt
|
||||
elif unit.action == "dodging": unit.stamina -= 25 # one-shot cost
|
||||
elif unit.action == "attacking":unit.stamina -= 15
|
||||
else: unit.stamina += 20 * dt # regen
|
||||
unit.stamina = clamp(unit.stamina, 0, unit.max_stamina)
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Punish Window Detection
|
||||
```python
|
||||
def is_in_punish_window(target):
|
||||
s = target.attack_state
|
||||
return s.phase == "recovery" and s.elapsed_ms < s.recovery_total_ms
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Frame Trap Setup
|
||||
```python
|
||||
def frame_trap_check(my_recovery, gap_ms, opponent_fastest_attack_startup):
|
||||
"""A frame trap exists if my recovery + gap < opp's fastest counter-startup."""
|
||||
return (my_recovery + gap_ms) < opponent_fastest_attack_startup
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Feint Input (For Honor-style)
|
||||
```python
|
||||
def handle_input(player, input):
|
||||
if input == "heavy_attack":
|
||||
player.start_attack("heavy") # 600ms startup
|
||||
elif input == "feint" and player.attack_state.phase == "startup":
|
||||
if player.stamina >= 20:
|
||||
player.cancel_to_idle()
|
||||
player.stamina -= 20 # feint stamina cost
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| Game type | Bait depth |
|
||||
|---|---|
|
||||
| Souls-like (PvE) | Stamina + dodge i-frame; bait via enemy aggression |
|
||||
| Fighting game (1v1) | Frame trap + cancel-into-special |
|
||||
| Melee PvP (For Honor) | Explicit feint button + mixup |
|
||||
| Action RPG (Sekiro) | Posture + perfect-parry baiting |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: Stamina-gated cancel + 200ms+ startup — 매 mid-floor / high-ceiling sweet spot.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Combat System Design]] · [[Mind Games]]
|
||||
- 변형: [[Frame Trap]] · [[Feint Mechanics]]
|
||||
- 응용: [[Souls Series]] · [[Tekken]] · [[For Honor]] · [[Mordhau]]
|
||||
- Adjacent: [[Stamina System]] · [[Cancel Window]] · [[Posture Bar]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 melee/fighting combat design, 매 mind-game depth 의 의 의 의 framework, 매 frame data balance 의 reference.
|
||||
**언제 X**: 매 ranged-shooter / 매 turn-based 의 X — 매 의 의 의 의 의 의 의 의 의 다른 mind-game vocabulary.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **No cancel window**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 commitment 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 mind-game depth 0.
|
||||
- **Free cancel (no cost)**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 spam baiting ⇒ 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 unfun.
|
||||
- **Reaction-time too fast**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 100ms 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 baiting 무력화.
|
||||
- **Random hidden frame data**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 player 의 의 의 의 의 의 의 의 frustration.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (FromSoftware Souls combat 의 의 design talks, Capcom SF6 frame data, For Honor 의 의 design philosophy posts).
|
||||
- 신뢰도 A.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — bait mechanic + cancel system 정리 |
|
||||
|
||||
@@ -1,82 +1,140 @@
|
||||
---
|
||||
id: wiki-2026-0508-base-layouts-and-kill-zones
|
||||
title: Base Layouts and Kill Zones
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Tower Defense Layouts, Kill Zone Design, Funnel Design]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, level-design, tower-defense, combat]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: tower-defense / shooter
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Base Layouts and Kill Zones
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 funnel + overlap = kill zone"**. Base layout 은 enemy path 의 shape 결정 — kill zone 은 매 player damage output 의 overlap 이 maximum 인 spatial pocket. 매 1990s tower defense (StarCraft custom) 부터 매 2026 modern roguelike-TD (Mindustry, Bloons TD 6, Last Epoch) 까지 매 same physics: time-in-zone × DPS-coverage = kill probability.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 spatial primitives
|
||||
- **Funnel**: 매 narrow chokepoint — enemy density ↑.
|
||||
- **Maze**: 매 path-length amplifier — time-in-zone ↑.
|
||||
- **Overlap circle**: 매 multiple tower 의 range intersection — DPS-coverage ↑.
|
||||
- **Kill zone** = funnel ∩ overlap with sustainable supply.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 design dimensions
|
||||
- **Path topology**: linear / branching / loop / open-field.
|
||||
- **Damage type matching**: AoE → cluster funnel; single-target → narrow.
|
||||
- **Failure budget**: leak threshold (lives) → kill zone redundancy 의 driver.
|
||||
|
||||
### 매 응용
|
||||
1. Tower Defense layouts (Bloons, Kingdom Rush, Mindustry).
|
||||
2. FPS map design — sightline + corner = kill zone.
|
||||
3. RTS base building — choke at ramp + siege range = kill zone.
|
||||
4. Roguelike room design — door funnel + ranged enemy stagger.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Kill zone scoring (designer tool)
|
||||
```python
|
||||
def kill_zone_score(tile, towers, path, enemy_speed=1.0):
|
||||
"""Higher = better kill zone tile."""
|
||||
coverage = sum(
|
||||
1 for t in towers
|
||||
if dist(t.pos, tile) <= t.range
|
||||
)
|
||||
time_in_zone = path.length_through(tile) / enemy_speed
|
||||
return coverage * time_in_zone
|
||||
```
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Funnel detection on a grid
|
||||
```python
|
||||
def is_funnel(grid, x, y, width=1):
|
||||
"""A tile is a funnel if path width is locally constrained."""
|
||||
if grid[y][x] != PATH:
|
||||
return False
|
||||
neighbors = [(x+dx, y+dy) for dx, dy in [(-1,0),(1,0),(0,-1),(0,1)]]
|
||||
path_neighbors = sum(1 for nx, ny in neighbors if grid[ny][nx] == PATH)
|
||||
return path_neighbors <= 2 # corridor-like
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Overlap heatmap (Unity / Godot pseudocode)
|
||||
```csharp
|
||||
float[,] BuildOverlapHeatmap(List<Tower> towers, int w, int h) {
|
||||
var hm = new float[w, h];
|
||||
foreach (var t in towers)
|
||||
for (int y = 0; y < h; y++)
|
||||
for (int x = 0; x < w; x++)
|
||||
if (Vector2.Distance(t.pos, new(x, y)) <= t.range)
|
||||
hm[x, y] += t.dps;
|
||||
return hm;
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Maze layout generator
|
||||
```python
|
||||
def build_maze_path(grid, entry, exit, target_length):
|
||||
"""Insert obstacles to lengthen path until ≈ target_length."""
|
||||
while shortest_path(grid, entry, exit).length < target_length:
|
||||
x, y = random_buildable_tile(grid)
|
||||
grid[y][x] = OBSTACLE
|
||||
if not shortest_path(grid, entry, exit):
|
||||
grid[y][x] = EMPTY # rollback: must remain solvable
|
||||
return grid
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### FPS sightline kill zone (Unreal blueprint sketch)
|
||||
```cpp
|
||||
// 매 corner peek + cover position 의 detection
|
||||
bool IsKillZone(FVector pos, const TArray<FVector>& sightlines) {
|
||||
int covering = 0;
|
||||
for (const FVector& sl : sightlines)
|
||||
if (HasLineOfSight(sl, pos)) covering++;
|
||||
return covering >= 2; // 2+ angles = kill zone
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| AoE-heavy roster | Cluster funnel (long single corridor) |
|
||||
| Single-target sniper roster | Multiple short overlap pockets |
|
||||
| Open sandbox (Mindustry, They Are Billions) | Concentric kill zone rings |
|
||||
| Roguelike room | 1 funnel + 1 elite spawner |
|
||||
| FPS competitive map | 2-3 contested kill zones — 매 rotational |
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
**기본값**: 1 primary kill zone (60% kill share) + 1 backup (30%) + leak buffer (10%).
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Level_Design]] · [[Combat_Encounter_Design]]
|
||||
- 변형: [[Maze_Layouts]] · [[Open_Field_Defense]]
|
||||
- 응용: [[Tower_Defense_Genre]] · [[Procedural-Level-Geometry]]
|
||||
- Adjacent: [[Combat_Balance_Buff]] · [[Telemetry (Telemetry)]]
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 TD / shooter / RTS 의 layout iteration, 매 telemetry 후 kill-zone 의 hot/cold 의 분석.
|
||||
**언제 X**: 매 narrative / puzzle level (combat 이 primary 가 아닌 경우).
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## ❌ 안티패턴
|
||||
- **Single chokepoint dominance**: 매 한 kill zone 의 all-eggs-in-one — 매 boss / armored enemy 의 hard counter.
|
||||
- **No leak path**: 매 perfectly sealed = 매 player decision 의 X — 매 tension 의 X.
|
||||
- **Sightline 의 overdesign**: FPS 에서 매 모든 corner 가 kill zone → 매 movement 의 paralyze.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Bloons TD 6 / Mindustry / Kingdom Rush postmortem 2018-2025; Counter-Strike level design GDC 2019).
|
||||
- 신뢰도 A.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — funnel × overlap formulation, scoring code, FPS / TD application |
|
||||
|
||||
@@ -1,82 +1,158 @@
|
||||
---
|
||||
id: wiki-2026-0508-beresnev-studio
|
||||
title: Beresnev Studio
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Beresnev Games, Beresnev Dev]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: C
|
||||
confidence_score: 0.7
|
||||
verification_status: applied
|
||||
tags: [game-design, indie-studio, dev-house, eastern-european]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: indie-studio-profile
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Beresnev Studio
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 small Eastern-European indie studio — 매 niche tactical / 매 narrative-heavy projects"**. 매 보통 < 매 10 인의 dev 가 의 의 의 의 의 의 의 multi-year project 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의. 매 verifiable footprint 의 의 의 의 의 의 limited — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 archetype 으로 의 의 의 의 의 의 의 의 의 의 의 의 의 의 documenting.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
> ⚠️ **Source-trust note**: Beresnev Studio 의 의 의 의 의 의 의 의 의 의 의 well-known 의 X 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 archetype-as-pattern.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 indie studio archetype
|
||||
- **팀 size**: 매 5–15 dev — 매 1 design lead, 매 2–3 programmer, 매 2–3 artist, 매 1 audio, 매 1–2 generalist.
|
||||
- **Funding model**: 매 self-funded → 매 publisher deal (Hooded Horse, Plug In Digital) → 매 EA on Steam.
|
||||
- **Project length**: 매 3–5 yr per title.
|
||||
- **Output cadence**: 매 1 title per 4 yr, 매 1 expansion / patch year-2.
|
||||
|
||||
### 매 design DNA (typical Eastern-European indie)
|
||||
- 매 systemic depth > 매 production polish.
|
||||
- 매 niche genre (tactical RPG, sim, grand strategy expansion) — 매 mass appeal X.
|
||||
- 매 player community-driven balance — 매 Discord 의 patch notes.
|
||||
- 매 narrative ambition — 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 voice acting 의 의 의 의 의 의 minimal.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 production patterns
|
||||
1. Vertical slice in year 1 — 매 publisher pitch.
|
||||
2. EA on Steam in year 2 — 매 player feedback loop.
|
||||
3. 1.0 launch in year 3 — 매 review window.
|
||||
4. Expansion in year 4 — 매 long-tail revenue.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### 매 응용 (archetype reference)
|
||||
1. Owlcat Games (Pathfinder, Rogue Trader) — 매 archetype 의 의 의 의 의 큰 변형.
|
||||
2. Vile Monarch (Weedcraft Inc, Help Will Come Tomorrow) — 매 archetype.
|
||||
3. Snail's House Studio 의 의 의 의 의 small-scale dev house pattern.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
## 💻 패턴
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Studio Resource Allocator (sim model)
|
||||
```python
|
||||
class IndieStudio:
|
||||
def __init__(self, headcount=10, runway_months=24):
|
||||
self.headcount = headcount
|
||||
self.runway = runway_months
|
||||
self.burn_per_month = headcount * 5_000 # rough EU indie cost
|
||||
self.cash = self.burn_per_month * runway_months
|
||||
self.project_progress = 0.0 # 0..1
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
def monthly_tick(self, productivity_per_dev=0.005):
|
||||
self.cash -= self.burn_per_month
|
||||
self.project_progress += self.headcount * productivity_per_dev
|
||||
if self.cash <= 0: return "bankruptcy"
|
||||
if self.project_progress >= 1.0: return "ship"
|
||||
return "ongoing"
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Publisher Deal Negotiation
|
||||
```python
|
||||
def evaluate_publisher_offer(offer, studio):
|
||||
"""Trade rev share for funding + marketing."""
|
||||
funding = offer["upfront"]
|
||||
rev_share_to_publisher = offer["rev_share"]
|
||||
expected_units = offer.get("marketing_lift_units", 0)
|
||||
expected_unit_revenue = 25 # USD per copy net
|
||||
publisher_cut = expected_units * expected_unit_revenue * rev_share_to_publisher
|
||||
studio_net = funding + (expected_units * expected_unit_revenue - publisher_cut)
|
||||
return studio_net
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Early Access Patch Cadence
|
||||
```python
|
||||
def schedule_ea_patches(launch_date, target_1_0_date):
|
||||
months = (target_1_0_date - launch_date).months
|
||||
cadence_weeks = 4
|
||||
return [launch_date + weeks(i*cadence_weeks)
|
||||
for i in range(months * 4 // cadence_weeks)]
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Discord Feedback Loop Triage
|
||||
```python
|
||||
def triage_feedback(messages, llm):
|
||||
"""Cluster Discord feedback into balance / bug / feature."""
|
||||
clusters = {"balance": [], "bug": [], "feature": [], "other": []}
|
||||
for m in messages:
|
||||
cls = llm.classify(m, options=list(clusters.keys()))
|
||||
clusters[cls].append(m)
|
||||
return clusters
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Vertical Slice Definition
|
||||
```python
|
||||
VERTICAL_SLICE = {
|
||||
"playable_minutes": 30,
|
||||
"complete_loops": ["combat", "progression", "narrative_beat"],
|
||||
"polish_level": "shippable_for_demo",
|
||||
"scope": "1 biome, 3 enemy types, 1 boss",
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Expansion ROI Model
|
||||
```python
|
||||
def expansion_roi(base_game_units_sold, attach_rate=0.3, expansion_price=15,
|
||||
dev_cost=200_000):
|
||||
expected_units = base_game_units_sold * attach_rate
|
||||
revenue = expected_units * expansion_price * 0.7 # Steam cut
|
||||
return revenue - dev_cost
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 매 결정 기준
|
||||
| 의 의 의 stage | Priority |
|
||||
|---|---|
|
||||
| Pre-EA (year 1–2) | Vertical slice + publisher pitch |
|
||||
| EA (year 2–3) | Feedback loop + content cadence |
|
||||
| 1.0 launch (year 3) | Review embargo coordination |
|
||||
| Post-launch (year 4+) | Expansion + community modding |
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
**기본값**: 매 EA on Steam 의 의 의 의 의 의 가장 sustainable indie path.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Indie Studio Patterns]] · [[Game Production]]
|
||||
- 변형: [[AA Studio]] · [[Solo Dev]]
|
||||
- 응용: [[Owlcat Games]] · [[Vile Monarch]]
|
||||
- Adjacent: [[Steam Early Access]] · [[Hooded Horse Publishing]]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 indie studio 의 production planning reference, 매 EA roadmap design.
|
||||
**언제 X**: 매 AAA / 매 large publisher 의 X — 매 의 의 의 의 의 fundamentally different scale.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## ❌ 안티패턴
|
||||
- **Vertical slice 의 X**: 매 의 의 의 의 의 의 의 의 publisher pitch 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 fail.
|
||||
- **Year-1 EA**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 review damage 의 의 의 의 permanent.
|
||||
- **Funding 0**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 burnout.
|
||||
- **No community**: 매 Discord/Steam forum 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 EA player retention 0.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🧪 검증 / 중복
|
||||
- 신뢰도 C — Beresnev Studio 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 archetype reference 로만 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 valuable.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — indie studio archetype 으로 reframe (specific footprint 의 의 의 의 의 의 sparse) |
|
||||
|
||||
@@ -1,78 +1,173 @@
|
||||
---
|
||||
id: wiki-2026-0508-bioshock-critique
|
||||
title: BioShock Critique
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [BioShock Analysis, Rapture Critique, Ken Levine BioShock]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, narrative, immersive-sim, critique]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-analysis
|
||||
framework: immersive-sim
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# BioShock Critique
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 'Would you kindly?' 매 player agency 의 illusion 을 해부한다"**. 매 2007 Ken Levine 의 BioShock 은 매 Rapture 의 Objectivist dystopia 매 setting 으로 매 ludonarrative dissonance, 매 choice illusion, 매 environmental storytelling 의 매 watershed 를 매 정의했다. 매 2026 perspective 에서는 매 후속 immersive sim (Prey 2017, System Shock Remake 2023, Atomic Heart 2023) 의 매 foundation.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> BioShock는 "Would you kindly?" 한 마디로 플레이어 자유의지의 환상을 무너뜨린 메타 비평적 게임 디자인의 대표작이다.
|
||||
### 매 Ludonarrative Dissonance (Hocking 2007)
|
||||
- 매 narrative 는 매 self-interest critique (Ryan/Atlas 의 Objectivism) 매 제시.
|
||||
- 매 mechanics 는 매 player 에게 매 ADAM hoarding, Little Sister harvesting 매 강요.
|
||||
- 매 결과: 매 story 가 매 비판하는 매 행동을 매 game 이 매 보상.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 "Would You Kindly" Twist
|
||||
- 매 player 의 매 entire agency 가 매 mind-controlled 였다는 매 폭로.
|
||||
- 매 medium-specific critique: 매 "press X to advance" 매 자체가 매 trigger phrase.
|
||||
- 매 Andrew Ryan 의 매 "A man chooses, a slave obeys" — 매 player 는 매 slave.
|
||||
|
||||
**추출된 패턴:** 게임 메커니즘("Would you kindly?")이 곧 게임 메시지(자유의지 부재) — 메타 게임 비평.
|
||||
### 매 Environmental Storytelling
|
||||
- 매 audio diaries (Sander Cohen, Sofia Lamb).
|
||||
- 매 corpse positioning, 매 graffiti, 매 Plasmid advertising.
|
||||
- 매 Rapture 의 매 1960 art deco aesthetic 매 ideology 의 매 visual manifestation.
|
||||
|
||||
**세부 내용:**
|
||||
- 2007년 발매, Ken Levine.
|
||||
- Rapture: 객관주의 디스토피아.
|
||||
- 자유의지 폭로: 모든 명령은 강요였다.
|
||||
- 도덕 시스템: Little Sister 구원 vs 채취.
|
||||
- 비판: 후반부 평이한 슈팅 부분.
|
||||
### 매 응용
|
||||
1. Spec Ops: The Line (2012) — 매 ludonarrative critique 의 매 successor.
|
||||
2. The Stanley Parable (2013) — 매 player agency 의 매 meta-deconstruction.
|
||||
3. Disco Elysium (2019) — 매 ideology-as-mechanic 매 계승.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 💻 패턴
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 1: Trigger Phrase as Agency Reveal
|
||||
```python
|
||||
# Pseudocode for narrative trigger system
|
||||
class NarrativeAgent:
|
||||
def __init__(self, trigger_phrase: str):
|
||||
self.trigger = trigger_phrase # "Would you kindly"
|
||||
self.compelled_actions = []
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
def issue_command(self, npc_dialogue: str, action: str):
|
||||
if self.trigger in npc_dialogue:
|
||||
# Player believes they chose; actually compelled
|
||||
self.compelled_actions.append(action)
|
||||
return ForcedAction(action, hidden=True)
|
||||
return PlayerChoice(action)
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
def reveal(self):
|
||||
# Andrew Ryan boss room
|
||||
return f"You performed {len(self.compelled_actions)} compelled actions"
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 2: Moral Choice w/ Mechanical Weight
|
||||
```typescript
|
||||
// Little Sister harvest vs rescue
|
||||
interface MoralChoice {
|
||||
action: 'harvest' | 'rescue';
|
||||
immediate_adam: number;
|
||||
delayed_reward: Gift | null;
|
||||
ending_flag: 'good' | 'bad' | 'neutral';
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
const harvestSister: MoralChoice = {
|
||||
action: 'harvest',
|
||||
immediate_adam: 160,
|
||||
delayed_reward: null,
|
||||
ending_flag: 'bad',
|
||||
};
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
const rescueSister: MoralChoice = {
|
||||
action: 'rescue',
|
||||
immediate_adam: 80,
|
||||
delayed_reward: { adam: 200, plasmid: 'rare' }, // Tenenbaum gift
|
||||
ending_flag: 'good',
|
||||
};
|
||||
// Net ADAM ~equal — undermines "sacrifice" narrative
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Pattern 3: Audio Diary Discovery
|
||||
```rust
|
||||
struct AudioDiary {
|
||||
speaker: String,
|
||||
location: WorldPosition,
|
||||
timestamp_in_lore: chrono::NaiveDate,
|
||||
triggers_on_pickup: bool,
|
||||
}
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
impl AudioDiary {
|
||||
fn play(&self, player: &mut Player) {
|
||||
// Non-blocking — player keeps moving
|
||||
player.audio_queue.push(self.clone());
|
||||
// Lore delivered via ambient consumption, not cutscene
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Pattern 4: Plasmid Combo System
|
||||
```csharp
|
||||
// Electro Bolt → water → multi-target stun
|
||||
public class ElementalCombo {
|
||||
public void OnHit(Target t, Plasmid p) {
|
||||
if (t.IsWet && p == Plasmid.ElectroBolt) {
|
||||
foreach (var nearby in t.GetWetNeighbors())
|
||||
nearby.Stun(duration: 3.0f);
|
||||
}
|
||||
if (t.IsOiled && p == Plasmid.Incinerate)
|
||||
SpreadFire(t.position, radius: 5.0f);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Pattern 5: Vita-Chamber Death Loop
|
||||
```python
|
||||
# Respawn at nearest Vita-Chamber w/ enemy HP preserved
|
||||
def on_death(player, world):
|
||||
chamber = world.nearest_vita_chamber(player.last_pos)
|
||||
player.respawn(chamber.position, hp=50)
|
||||
# Enemies do NOT heal — attrition strategy possible
|
||||
# Critique: removes stakes; can punch Big Daddy to death
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 narrative theme 매 reinforce 하려면 | 매 mechanics 가 매 theme 에 매 align — 매 dissonance 회피 |
|
||||
| 매 player agency 매 critique 하려면 | 매 hidden compulsion + 매 reveal moment (BioShock) |
|
||||
| 매 setting depth 가 필요하면 | 매 audio diary + environmental storytelling (no cutscene dump) |
|
||||
| 매 moral choice 매 weight 부여 | 매 mechanical asymmetry — 매 "good" path 가 매 충분히 매 rewarding |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: 매 mechanic-narrative alignment 우선, 매 dissonance 는 매 의도된 critique 일 때만.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Immersive-Sim-Genre]] · [[Ludonarrative-Dissonance]]
|
||||
- 변형: [[BioShock-Infinite]] · [[System-Shock-2]]
|
||||
- 응용: [[Prey-2017]] · [[Spec-Ops-The-Line]]
|
||||
- Adjacent: [[Environmental-Storytelling]] · [[Player-Agency-Design]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 narrative-mechanic alignment 분석, 매 immersive sim 매 design pattern reference, 매 player agency 매 deconstruction 학습.
|
||||
**언제 X**: 매 pure gameplay loop 설계 (매 narrative weight 가 매 secondary 인 경우).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Tacked-on morality**: 매 binary choice 가 매 mechanical impact 없음 (매 Mass Effect Paragon/Renegade 후기).
|
||||
- **Cutscene lore dump**: 매 environmental storytelling 회피하고 매 explicit exposition 의존.
|
||||
- **Vita-Chamber removes stakes**: 매 BioShock 자체의 매 결함 — 매 death penalty 부재.
|
||||
- **Forced "good ending" gating**: 매 100% rescue 만 매 good ending 매 허용 — 매 ambiguity 제거.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Hocking 2007 ludonarrative essay, Levine GDC talks, Errant Signal critique).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — BioShock 의 ludonarrative dissonance 와 trigger-phrase agency reveal 분석 |
|
||||
|
||||
@@ -1,82 +1,162 @@
|
||||
---
|
||||
id: wiki-2026-0508-biomechanics-of-injury
|
||||
title: Biomechanics of Injury
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Damage Modeling, Injury Simulation, Hit Reaction]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, simulation, damage-model, biomechanics]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: cpp
|
||||
framework: physics-sim / game-engine
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Biomechanics of Injury
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 force × tissue tolerance = injury"**. Biomechanics of injury 는 매 real-world impact physics (kinetic energy, pressure, strain rate) 를 매 game-grade damage model 로 mapping. 매 1990s ragdoll → 매 2010s GTA / Red Dead 2 의 procedural reaction → 매 2026 The Finales / Escape From Tarkov 의 limb-zone armor + bleed-out simulation 까지 매 evolution.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 physics 기본
|
||||
- **Kinetic energy**: KE = ½mv². 매 9mm pistol ≈ 500 J, 매 rifle round ≈ 2000-3500 J.
|
||||
- **Pressure**: P = F/A. 매 small projectile = 매 high-pressure 침투.
|
||||
- **Strain rate**: 매 fast load = 매 brittle fracture (bone), 매 slow = 매 bend.
|
||||
- **Tissue tolerance**: 매 bone ≈ 130 MPa; 매 soft tissue 의 elastic limit 의 훨씬 낮음.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 game model layers
|
||||
1. **Hitbox layer** — body part zone (head / torso / limb).
|
||||
2. **Damage type** — penetration / blunt / explosive / fire.
|
||||
3. **Armor interaction** — material × thickness × angle.
|
||||
4. **Wound state** — bleed / fracture / shock / unconscious.
|
||||
5. **Locomotion impact** — limp / aim sway / stamina drain.
|
||||
|
||||
### 매 응용
|
||||
1. Tactical shooter limb damage (Tarkov, Ready or Not, Squad).
|
||||
2. Melee combat reaction (Mordhau, Chivalry 2, Kingdom Come Deliverance).
|
||||
3. Vehicle crash sim (BeamNG.drive — 매 jbeam node-spring deformation).
|
||||
4. Sports / action game ragdoll tuning (NBA 2K, Wrestling games).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Limb-zone hit registration
|
||||
```cpp
|
||||
struct HitResult {
|
||||
BodyPart part; // HEAD, NECK, CHEST, ARM, LEG
|
||||
float damage;
|
||||
DamageType dtype;
|
||||
Vector3 impactPoint;
|
||||
float kineticEnergy;
|
||||
};
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
HitResult ResolveHit(const Projectile& p, const Character& c) {
|
||||
BodyPart part = c.HitboxAt(p.lastPos);
|
||||
float ke = 0.5f * p.mass * p.velocity.SquaredLength();
|
||||
float armor = c.ArmorOn(part).StoppingPower(p.dtype);
|
||||
float damage = std::max(0.f, ke - armor) * BodyMultiplier(part);
|
||||
return {part, damage, p.dtype, p.lastPos, ke};
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Damage multiplier table
|
||||
```cpp
|
||||
float BodyMultiplier(BodyPart p) {
|
||||
switch (p) {
|
||||
case HEAD: return 4.0f;
|
||||
case NECK: return 3.0f;
|
||||
case CHEST: return 1.0f;
|
||||
case STOMACH: return 1.2f;
|
||||
case ARM: return 0.5f;
|
||||
case LEG: return 0.6f;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Bleed-out simulation
|
||||
```python
|
||||
class WoundState:
|
||||
def __init__(self):
|
||||
self.bleed_rate = 0.0 # HP/sec
|
||||
self.fractures = set()
|
||||
self.hp = 100.0
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
def apply_hit(self, hit):
|
||||
self.hp -= hit.damage
|
||||
if hit.dtype == "PENETRATION" and hit.part in ("CHEST", "STOMACH"):
|
||||
self.bleed_rate += 0.5
|
||||
if hit.dtype == "BLUNT" and hit.kinetic_energy > 1500:
|
||||
self.fractures.add(hit.part)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
def tick(self, dt):
|
||||
self.hp -= self.bleed_rate * dt
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Locomotion impact (limp from leg fracture)
|
||||
```cpp
|
||||
float MoveSpeedMultiplier(const WoundState& w) {
|
||||
float m = 1.0f;
|
||||
if (w.fractures.contains(LEG_LEFT)) m *= 0.55f;
|
||||
if (w.fractures.contains(LEG_RIGHT)) m *= 0.55f;
|
||||
if (w.bleedRate > 1.0f) m *= 0.85f; // hypovolemic
|
||||
return m;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Ragdoll impulse from impact
|
||||
```csharp
|
||||
void ApplyImpactRagdoll(Rigidbody bone, Vector3 dir, float ke) {
|
||||
float impulse = Mathf.Sqrt(2 * ke * bone.mass);
|
||||
bone.AddForceAtPosition(dir * impulse, hitPoint, ForceMode.Impulse);
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Armor angle attenuation
|
||||
```python
|
||||
def effective_armor(armor_thickness_mm, hit_angle_deg):
|
||||
"""Slope-thickness: thicker at oblique angle."""
|
||||
import math
|
||||
return armor_thickness_mm / math.cos(math.radians(min(hit_angle_deg, 80)))
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Arcade shooter (CoD, Apex) | 1-tap headshot, 매 simple multiplier |
|
||||
| Mil-sim (Tarkov, Squad) | 매 full limb + armor + bleed |
|
||||
| RPG (Cyberpunk, Fallout) | 매 limb cripple + status effect |
|
||||
| Vehicle sim (BeamNG) | 매 node-spring deformation (no hitbox) |
|
||||
| Melee (Chivalry, Mordhau) | 매 directional hit + body part + stamina |
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
**기본값**: Hitbox + multiplier + simple bleed → 매 expand 의 incremental.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Physics]] · [[Combat_Systems]]
|
||||
- 변형: [[Vehicle_Damage_Models]] · [[Ragdoll_Physics]]
|
||||
- 응용: [[Tactical_Shooter_Design]] · [[Combat_Balance_Buff]]
|
||||
- Adjacent: [[Procedural-Level-Geometry]] · [[Telemetry (Telemetry)]]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 tactical / sim 게임 의 damage model design, 매 hit-feel iteration, 매 armor balance.
|
||||
**언제 X**: 매 abstract / arcade game (매 단순 HP bar 가 더 적합).
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## ❌ 안티패턴
|
||||
- **Realism > fun**: 매 realistic 1-shot kill 이 매 PVP 의 frustration source.
|
||||
- **Limb zone 의 inflation**: 매 너무 많은 zone (12+) = 매 hitreg 의 confusion.
|
||||
- **No feedback**: 매 hit 의 visual / audio cue 의 X = 매 player 의 "did I hit?" 의 ambiguity.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (NIJ ballistic standards 2008; BeamNG dev blog 2023; Tarkov hit zone GDC 2024 talk).
|
||||
- 신뢰도 A-.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — KE / armor / bleed model, limb multiplier, ragdoll impulse |
|
||||
|
||||
@@ -1,82 +1,166 @@
|
||||
---
|
||||
id: wiki-2026-0508-biomedical-engineering
|
||||
title: Biomedical Engineering
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [BME, biomedical-eng]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [biomedical, engineering, healthcare, simulation, game-design]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: simulation
|
||||
framework: medical-game-system
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Biomedical Engineering
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 engineering principles 의 biology / medicine 의 적용"**. 매 prosthetics, imaging, drug-delivery, biomechanics, neural interfaces 의 매 cross-discipline. 매 game-design context 에서는 매 simulation realism + 매 character ability tree 의 source of truth.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 분야
|
||||
- **Biomechanics**: 매 forces on tissue, gait, joint loading.
|
||||
- **Bioinstrumentation**: 매 ECG, EEG, EMG sensors.
|
||||
- **Biomaterials**: 매 implants, scaffolds.
|
||||
- **Tissue eng**: 매 organ regen, 3D bioprinting.
|
||||
- **Imaging**: 매 MRI, CT, ultrasound, PET.
|
||||
- **Neural eng**: 매 BCI, deep-brain stimulation.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 game-design 의 응용
|
||||
- **Injury simulation**: 매 realistic damage model — 매 organ-level wound.
|
||||
- **Prosthetic abilities**: 매 cybernetic upgrade tree.
|
||||
- **Diagnostic minigame**: 매 imaging puzzle, sensor reading.
|
||||
- **Medic class**: 매 skill rotation 의 biological grounding.
|
||||
|
||||
### 매 핵심 개념
|
||||
1. 매 stress / strain (mechanical).
|
||||
2. 매 signal-to-noise (instrumentation).
|
||||
3. 매 biocompatibility (materials).
|
||||
4. 매 perfusion / hypoxia (tissue).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Hit-zone damage model (biomechanics-grounded)
|
||||
```typescript
|
||||
type HitZone = "head" | "torso" | "limb" | "joint";
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
const ZONE_PROFILE = {
|
||||
head: { mult: 3.0, bleed: 0.8, fracture: 0.6 },
|
||||
torso: { mult: 1.5, bleed: 0.4, fracture: 0.2 },
|
||||
limb: { mult: 0.7, bleed: 0.3, fracture: 0.5 },
|
||||
joint: { mult: 1.0, bleed: 0.2, fracture: 0.7 },
|
||||
};
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
function applyDamage(actor: Actor, zone: HitZone, base: number) {
|
||||
const p = ZONE_PROFILE[zone];
|
||||
actor.hp -= base * p.mult;
|
||||
if (Math.random() < p.bleed) actor.statuses.add("bleeding");
|
||||
if (Math.random() < p.fracture * 0.3) actor.statuses.add("fractured");
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### EEG-style brain-state minigame
|
||||
```typescript
|
||||
function generateEEGSignal(state: "calm" | "focused" | "stressed", t: number) {
|
||||
// alpha (8-12Hz), beta (12-30Hz), gamma (30-100Hz)
|
||||
const bands = {
|
||||
calm: { alpha: 0.7, beta: 0.2, gamma: 0.1 },
|
||||
focused: { alpha: 0.3, beta: 0.5, gamma: 0.2 },
|
||||
stressed: { alpha: 0.1, beta: 0.4, gamma: 0.5 },
|
||||
}[state];
|
||||
return bands.alpha * Math.sin(2*Math.PI*10*t)
|
||||
+ bands.beta * Math.sin(2*Math.PI*20*t)
|
||||
+ bands.gamma * Math.sin(2*Math.PI*50*t)
|
||||
+ (Math.random() - 0.5) * 0.1;
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Prosthetic ability tree
|
||||
```typescript
|
||||
interface Prosthetic {
|
||||
slot: "arm" | "leg" | "eye" | "spine";
|
||||
tiers: AbilityTier[];
|
||||
power_cost: number;
|
||||
biocompatibility: number; // 0-1, body-rejection risk
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function installProsthetic(player: Player, p: Prosthetic) {
|
||||
if (player.power_capacity < p.power_cost) throw new Error("insufficient power");
|
||||
if (Math.random() > p.biocompatibility) {
|
||||
player.statuses.add("rejection"); // requires immunosuppressant
|
||||
}
|
||||
player.prosthetics[p.slot] = p;
|
||||
player.power_capacity -= p.power_cost;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Imaging-puzzle (segment tumor)
|
||||
```typescript
|
||||
function segmentLesion(imageGrid: number[][], threshold: number) {
|
||||
const visited = new Set<string>();
|
||||
const lesions: Cluster[] = [];
|
||||
for (let y = 0; y < imageGrid.length; y++) {
|
||||
for (let x = 0; x < imageGrid[0].length; x++) {
|
||||
if (imageGrid[y][x] > threshold && !visited.has(`${x},${y}`)) {
|
||||
lesions.push(floodFill(imageGrid, x, y, threshold, visited));
|
||||
}
|
||||
}
|
||||
}
|
||||
return lesions.filter(c => c.size > 5); // ignore noise
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Drug-delivery cooldown (pharmacokinetics)
|
||||
```typescript
|
||||
function plasmaConcentration(dose: number, t_hours: number, k_elim: number) {
|
||||
// first-order elimination
|
||||
return dose * Math.exp(-k_elim * t_hours);
|
||||
}
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
function effectiveAtT(player: Player, drug: Drug, t: number) {
|
||||
const c = plasmaConcentration(drug.dose, t - drug.taken_at, drug.k_elim);
|
||||
return c > drug.min_effective_conc;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 realistic medic gameplay | hit-zone + bleed + fracture model |
|
||||
| 매 cyberpunk RPG | prosthetic + biocompatibility tree |
|
||||
| 매 puzzle-medical | imaging + diagnosis minigame |
|
||||
| 매 arcade | abstract HP — biomedical 의 X |
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
**기본값**: 매 zone-based damage + 매 limited cybernetic slot.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Engineering]] · [[Medicine]]
|
||||
- 변형: [[Biomechanics-of-Injury]] · [[Gait-Analysis-Laboratory]]
|
||||
- 응용: [[Damage-Resistance-Platforms]] · [[Combat_Balance_Buff]]
|
||||
- Adjacent: [[Elite-Athletic-Development]]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 simulation grounding, medic-class design, cyberpunk lore.
|
||||
**언제 X**: 매 abstract arcade — 매 over-engineering.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## ❌ 안티패턴
|
||||
- **Realism over fun**: 매 100% sim — 매 onboarding 실패.
|
||||
- **Magical healing**: 매 lore inconsistency — 매 sim claim 시.
|
||||
- **No body part 의 의미**: 매 zone 의 무의미한 implementation.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (BME textbooks: Saltzman, Enderle; clinical biomechanics).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — biomedical engineering principles + game-design application. |
|
||||
|
||||
@@ -1,78 +1,176 @@
|
||||
---
|
||||
id: wiki-2026-0508-cpi-cost-per-install
|
||||
title: CPI (Cost Per Install)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [CPI, cost-per-install, install-cost]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
verification_status: applied
|
||||
tags: [mobile, marketing, ua, monetization, ltv]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: analytics
|
||||
framework: ua-channel
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# CPI (Cost Per Install)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 신규 install 1건당 marketing 비용"**. 매 mobile UA (User Acquisition) 의 가장 fundamental metric. 매 LTV (lifetime value) 와 매 짝 — 매 LTV > CPI 면 매 ROI positive. 매 2026 iOS ATT post-era 에서 매 CPI 는 매 $3-15 (US tier-1) 의 일반.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> CPI는 신규 유저 1명 설치당 마케팅 비용으로, 게임 사업의 단위 경제(Unit Economics) 핵심 지표다.
|
||||
### 매 정의
|
||||
- **CPI = 총 ad spend / 매 attributed install 수**.
|
||||
- **paid CPI**: 매 광고로 attributed 된 매 install 만.
|
||||
- **blended CPI**: 매 paid + organic 합산.
|
||||
- **organic uplift**: 매 paid campaign 에 의한 매 organic install 증가.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 영향 요인
|
||||
- **Geo**: 매 US/JP/KR > EU > LatAm > India.
|
||||
- **Platform**: 매 iOS 가 매 Android 보다 매 2-4x 비쌈.
|
||||
- **Genre**: 매 mid-core RPG > casual > hyper-casual.
|
||||
- **Creative**: 매 video > playable > static.
|
||||
- **Targeting**: 매 lookalike < broad < whale-target.
|
||||
|
||||
**추출된 패턴:** ROAS = LTV ÷ CPI > 1.0 이어야 광고 캠페인이 수익. 시장·플랫폼·국가별로 큰 편차.
|
||||
### 매 응용
|
||||
1. 매 ROAS (Return on Ad Spend) D7/D30 추적.
|
||||
2. 매 channel mix optimization.
|
||||
3. 매 creative A/B 의 매 cost-efficiency 비교.
|
||||
|
||||
**세부 내용:**
|
||||
- 측정: 광고비 ÷ 설치수.
|
||||
- 시장별 차이: 미국 $5+, 동남아 $0.5~1.
|
||||
- 플랫폼: iOS > Android (구매력 격차).
|
||||
- 게임 장르: 미드코어 > 캐주얼 > 하이퍼캐주얼.
|
||||
- ROAS D7/D30/D90 추적으로 캠페인 최적화.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### CPI 계산
|
||||
```typescript
|
||||
type Campaign = {
|
||||
id: string;
|
||||
spend: number;
|
||||
attributed_installs: number;
|
||||
organic_installs: number;
|
||||
};
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function paidCPI(c: Campaign): number {
|
||||
return c.attributed_installs > 0
|
||||
? c.spend / c.attributed_installs
|
||||
: Infinity;
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function blendedCPI(c: Campaign): number {
|
||||
const total = c.attributed_installs + c.organic_installs;
|
||||
return total > 0 ? c.spend / total : Infinity;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function organicUplift(c: Campaign, baseline_organic: number): number {
|
||||
return Math.max(0, c.organic_installs - baseline_organic);
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Channel ROAS rollup
|
||||
```typescript
|
||||
type ChannelDay = {
|
||||
channel: "facebook" | "google" | "tiktok" | "applovin";
|
||||
date: string;
|
||||
spend: number;
|
||||
installs: number;
|
||||
d7_revenue: number;
|
||||
d30_revenue: number;
|
||||
};
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
function rollupROAS(days: ChannelDay[]) {
|
||||
const byCh = new Map<string, ChannelDay>();
|
||||
for (const d of days) {
|
||||
const cur = byCh.get(d.channel) ?? { ...d, spend: 0, installs: 0, d7_revenue: 0, d30_revenue: 0 };
|
||||
cur.spend += d.spend;
|
||||
cur.installs += d.installs;
|
||||
cur.d7_revenue += d.d7_revenue;
|
||||
cur.d30_revenue += d.d30_revenue;
|
||||
byCh.set(d.channel, cur);
|
||||
}
|
||||
return [...byCh.values()].map(c => ({
|
||||
channel: c.channel,
|
||||
cpi: c.spend / c.installs,
|
||||
roas_d7: c.d7_revenue / c.spend,
|
||||
roas_d30: c.d30_revenue / c.spend,
|
||||
}));
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Bid-cap calculator (target ROAS)
|
||||
```typescript
|
||||
function maxBidForROAS(target_roas: number, expected_ltv_d30: number): number {
|
||||
// CPI <= LTV / target_roas
|
||||
return expected_ltv_d30 / target_roas;
|
||||
}
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
// Example: $5 LTV, target 1.2 ROAS → max CPI $4.17
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Cohort LTV vs CPI tracker
|
||||
```typescript
|
||||
function cohortPayback(cohort_installs: number, cpi: number, daily_arpu: number[]): number {
|
||||
let cum = 0;
|
||||
for (let day = 0; day < daily_arpu.length; day++) {
|
||||
cum += daily_arpu[day];
|
||||
if (cum >= cpi) return day; // payback day
|
||||
}
|
||||
return -1; // not paid back
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### SKAdNetwork-aware attribution (iOS post-ATT)
|
||||
```typescript
|
||||
interface SKANPostback {
|
||||
campaign_id: number; // 0-99
|
||||
conversion_value: number; // 0-63 (6-bit)
|
||||
redownload: boolean;
|
||||
}
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
function decodeCV(cv: number): { revenue_bucket: number; engagement: number } {
|
||||
// Custom schema — common: bits 0-3 revenue, 4-5 engagement
|
||||
return {
|
||||
revenue_bucket: cv & 0b1111,
|
||||
engagement: (cv >> 4) & 0b11,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 hyper-casual | Low CPI ($0.5-2) + IAA monetization |
|
||||
| 매 casual | Medium CPI ($2-5) + IAP + IAA |
|
||||
| 매 mid-core RPG | High CPI ($5-15) + deep IAP |
|
||||
| 매 4X / strategy | Very high CPI ($15-50) + whale-LTV |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: 매 D7 ROAS > 0.3, D30 ROAS > 0.7 의 매 channel 만 scale.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Mobile-Marketing]] · [[User-Acquisition]]
|
||||
- 변형: [[CPM]] · [[CPC]] · [[CPA]]
|
||||
- 응용: [[Game_Monetization_Strategy]] · [[Capybara GO!]]
|
||||
- Adjacent: [[Dynamic Offers]] · [[Data-Driven Personalization]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 UA budget planning, channel comparison, ROAS analysis.
|
||||
**언제 X**: 매 organic-only product — 매 paid UA 의 X.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Blended-only 추적**: 매 paid 의 incrementality 의 hidden.
|
||||
- **CPI 만 tracking**: 매 LTV 의 무시 — 매 negative ROI scaling.
|
||||
- **Day-1 만 보기**: 매 long-tail 의 무시.
|
||||
- **iOS = Android 가정**: 매 2-4x 차이.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (AppsFlyer 2025 benchmark, Liftoff Casual Gaming Apps Report).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — CPI definition + UA channel measurement patterns. |
|
||||
|
||||
@@ -1,78 +1,178 @@
|
||||
---
|
||||
id: wiki-2026-0508-capybara-go
|
||||
title: "Capybara GO!"
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Capybara GO, 카피바라 GO]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mobile, idle-rpg, monetization, casual]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: mobile-f2p
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Capybara GO!
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 cute idle-RPG의 monetization 정점"**. 매 Habby (Survivor.io 개발사) 의 2024 hit, 매 카피바라 mascot + auto-battle + gacha + battle-pass 의 매 layered systems 로 매 2025 mobile top-grossing chart 의 sustained presence 의 달성. 매 idle-RPG genre 의 매 modern blueprint.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Capybara GO!는 캐주얼 RPG·로그라이크 모바일 게임으로, 단순 코어 + 깊은 메타의 하이브리드 캐주얼 트렌드를 잘 보여준다.
|
||||
### 매 core loop
|
||||
- **Auto-battle**: 매 player 의 minimal input — 매 stage select → auto-progress.
|
||||
- **Idle accumulation**: 매 offline 시 resources accrue — 매 8h cap 의 일반.
|
||||
- **Gear upgrade**: 매 equipment slot 6-8개 — 매 enhance + tier-up.
|
||||
- **Hero collection**: 매 gacha banner — 매 SSR pull rate ~1-2%.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 retention layers
|
||||
- **Daily login**: 매 7-day reward escalator.
|
||||
- **Weekly battle pass**: 매 free + premium tier.
|
||||
- **Limited events**: 매 시간 limited gear / hero / outfit.
|
||||
- **Guild**: 매 boss raid + chat + co-op.
|
||||
|
||||
**추출된 패턴:** "수동 조작 거의 없음" + "의미 있는 빌드 선택" — 캐주얼 시간 투자로 미드코어 만족감.
|
||||
### 매 응용
|
||||
1. 매 Habby 의 internal cross-promotion network.
|
||||
2. 매 idle-RPG genre 의 reference design.
|
||||
3. 매 mobile UA scaling pattern (CPI optimization).
|
||||
|
||||
**세부 내용:**
|
||||
- 자동 전투 + 능력 선택.
|
||||
- 영웅·장비 컬렉션.
|
||||
- 일일·주간·시즌 이벤트.
|
||||
- BM: 광고+IAP+패스.
|
||||
- 광고 크리에이티브가 게임 자체와 일치.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Battle-pass tier reward schema
|
||||
```typescript
|
||||
type BattlePassTier = {
|
||||
level: number; // 1-100
|
||||
xp_required: number; // cumulative
|
||||
free_reward: Reward;
|
||||
premium_reward: Reward;
|
||||
};
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
const TIERS: BattlePassTier[] = Array.from({length: 100}, (_, i) => ({
|
||||
level: i + 1,
|
||||
xp_required: 100 * (i + 1) + Math.floor(i * i * 0.5),
|
||||
free_reward: i % 5 === 0 ? GOLD_PACK : XP_BOOK,
|
||||
premium_reward: i % 10 === 0 ? GACHA_TICKET : GEMS_50,
|
||||
}));
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function claimTier(player: Player, tier: number, premium: boolean) {
|
||||
const t = TIERS[tier - 1];
|
||||
if (player.bp_xp < t.xp_required) throw new Error("not eligible");
|
||||
player.inventory.add(t.free_reward);
|
||||
if (premium && player.bp_premium) player.inventory.add(t.premium_reward);
|
||||
player.claimed_tiers.add(tier);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Idle reward calculation
|
||||
```typescript
|
||||
function calculateIdleRewards(player: Player, now: number) {
|
||||
const elapsed_sec = Math.min(
|
||||
(now - player.last_collect) / 1000,
|
||||
8 * 3600 // 8h cap
|
||||
);
|
||||
const stage_data = STAGE_TABLE[player.current_stage];
|
||||
return {
|
||||
gold: Math.floor(stage_data.gold_per_sec * elapsed_sec),
|
||||
xp: Math.floor(stage_data.xp_per_sec * elapsed_sec),
|
||||
materials: distributeMaterials(stage_data, elapsed_sec),
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Gacha pity system
|
||||
```typescript
|
||||
function rollGacha(player: Player, banner: Banner): Hero {
|
||||
player.pity_count += 1;
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
// Hard pity at 80
|
||||
if (player.pity_count >= 80) {
|
||||
player.pity_count = 0;
|
||||
return banner.featured_ssr;
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
// Soft pity ramp from 60
|
||||
let ssr_rate = 0.012;
|
||||
if (player.pity_count >= 60) {
|
||||
ssr_rate = 0.012 + (player.pity_count - 60) * 0.06;
|
||||
}
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
const roll = Math.random();
|
||||
if (roll < ssr_rate) {
|
||||
player.pity_count = 0;
|
||||
return rollSSRPool(banner);
|
||||
}
|
||||
return rollLowerRarity(banner, roll);
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Daily quest checker
|
||||
```typescript
|
||||
const DAILY_QUESTS = [
|
||||
{ id: "battle_5", target: 5, action: "complete_stage", reward: 100 },
|
||||
{ id: "spend_gems_50", target: 50, action: "spend_gems", reward: 200 },
|
||||
{ id: "gacha_1", target: 1, action: "gacha_pull", reward: 150 },
|
||||
];
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
function onAction(player: Player, action: string, amount: number) {
|
||||
for (const q of DAILY_QUESTS) {
|
||||
if (q.action !== action) continue;
|
||||
const prog = player.daily_progress[q.id] ?? 0;
|
||||
player.daily_progress[q.id] = Math.min(prog + amount, q.target);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Offer engine (whale targeting)
|
||||
```typescript
|
||||
function recommendOffer(player: Player): Offer | null {
|
||||
const ltv = player.spending_total;
|
||||
const days_inactive = (Date.now() - player.last_purchase) / 86400000;
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
if (ltv > 1000 && days_inactive > 3) return WHALE_RETENTION_BUNDLE;
|
||||
if (ltv > 100 && player.level > 50) return MID_PROGRESS_PACK;
|
||||
if (ltv === 0 && player.session_count > 10) return STARTER_PACK_499;
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 시작 player | Starter pack ($4.99) — high conversion |
|
||||
| 매 mid-tier whale | Battle-pass + monthly card |
|
||||
| 매 dolphin/whale | Limited gacha banner + cosmetic bundle |
|
||||
| 매 churned | Win-back offer (gems + ticket) |
|
||||
|
||||
**기본값**: 매 layered offer ladder + 매 daily/weekly/monthly cadence.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Idle-RPG]] · [[Mobile-Game-Design]]
|
||||
- 변형: [[AFK-Arena]] · [[Survivor.io]]
|
||||
- 응용: [[Game_Monetization_Strategy]] · [[Dynamic Offers]] · [[Gacha Mechanics Analysis]]
|
||||
- Adjacent: [[CPI (Cost Per Install)]] · [[Data-Driven Personalization]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 monetization design review, idle-RPG benchmark, offer cadence design.
|
||||
**언제 X**: 매 hardcore PvP, AAA console design — 매 platform mismatch.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Pay-to-win 노골**: 매 PvP whales dominate — 매 F2P churn.
|
||||
- **Pity 의 부재**: 매 RNG-only gacha — 매 regulatory + retention risk.
|
||||
- **Daily 과다**: 매 chore fatigue — 매 30-min daily 초과 시 churn.
|
||||
- **No idle cap**: 매 uncapped accumulation — 매 일 missed = unrecoverable.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Habby public press 2024-2025, AppMagic top-grossing data).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Capybara GO! idle-RPG monetization architecture. |
|
||||
|
||||
+140
-53
@@ -1,82 +1,169 @@
|
||||
---
|
||||
id: wiki-2026-0508-case-study-skybound-red-striker-
|
||||
title: Case Study Skybound Red Striker Jitter Stabilization
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
title: "Case Study: Skybound Red Striker Jitter Stabilization"
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Skybound-Red-Striker, jitter-stabilization-case-study]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.8
|
||||
verification_status: applied
|
||||
tags: [game-design, case-study, controls, jitter, war-commander]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: war-commander-combat
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Case Study: Skybound Red Striker Jitter Stabilization
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 high-mobility air unit 의 input-jitter 와 매 stabilization 패턴"**. 매 War Commander 계열 PvP 에서 매 Skybound Red Striker (2024 meta unit) 의 매 micro-input 의 매 over-correction 문제와 매 community-developed mitigation pattern. 매 control-loop tuning 의 매 player-side case study.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 문제
|
||||
- **Jitter origin**: 매 player rapid taps → 매 unit pathfinding 의 매 oscillation.
|
||||
- **Symptoms**: 매 unit 가 target 주위 매 spiral, 매 weapon cooldown 의 매 misalign.
|
||||
- **Skybound 특이**: 매 vertical mobility + 매 narrow turn radius 의 결합.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 stabilization 의 4 layers
|
||||
1. **Input throttling**: 매 client-side 100ms cooldown.
|
||||
2. **Path smoothing**: 매 bezier interpolation.
|
||||
3. **Lock-on assistance**: 매 acquired target 의 매 sticky.
|
||||
4. **Player technique**: 매 deliberate hold + reposition.
|
||||
|
||||
### 매 응용
|
||||
1. 매 PvP combat unit design.
|
||||
2. 매 control-system damping.
|
||||
3. 매 esports balance pass.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Input throttle (client-side)
|
||||
```typescript
|
||||
class InputThrottle {
|
||||
private last_input_t = 0;
|
||||
private readonly cooldown_ms = 100;
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
tryAcceptMove(target: Vec2, now: number): boolean {
|
||||
if (now - this.last_input_t < this.cooldown_ms) return false;
|
||||
this.last_input_t = now;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Bezier path smoothing
|
||||
```typescript
|
||||
function smoothPath(waypoints: Vec2[]): Vec2[] {
|
||||
if (waypoints.length < 3) return waypoints;
|
||||
const out: Vec2[] = [waypoints[0]];
|
||||
for (let i = 1; i < waypoints.length - 1; i++) {
|
||||
const p0 = waypoints[i - 1];
|
||||
const p1 = waypoints[i];
|
||||
const p2 = waypoints[i + 1];
|
||||
for (let t = 0; t <= 1; t += 0.1) {
|
||||
const x = (1-t)*(1-t)*p0.x + 2*(1-t)*t*p1.x + t*t*p2.x;
|
||||
const y = (1-t)*(1-t)*p0.y + 2*(1-t)*t*p1.y + t*t*p2.y;
|
||||
out.push({ x, y });
|
||||
}
|
||||
}
|
||||
out.push(waypoints[waypoints.length - 1]);
|
||||
return out;
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Sticky target lock-on
|
||||
```typescript
|
||||
class TargetLock {
|
||||
private target: Unit | null = null;
|
||||
private locked_at = 0;
|
||||
private readonly stick_ms = 1500;
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
acquireOrKeep(candidates: Unit[], now: number, prev_target: Unit | null): Unit | null {
|
||||
if (prev_target && now - this.locked_at < this.stick_ms) {
|
||||
const still_valid = candidates.find(c => c.id === prev_target.id);
|
||||
if (still_valid) return still_valid;
|
||||
}
|
||||
const next = pickHighestPriority(candidates);
|
||||
if (next) {
|
||||
this.target = next;
|
||||
this.locked_at = now;
|
||||
}
|
||||
return next;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Damping controller (over-correction 방지)
|
||||
```typescript
|
||||
class DampedSteer {
|
||||
private velocity: Vec2 = { x: 0, y: 0 };
|
||||
private readonly damping = 0.85;
|
||||
private readonly max_accel = 50;
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
update(current: Vec2, target: Vec2, dt: number): Vec2 {
|
||||
const desired = { x: target.x - current.x, y: target.y - current.y };
|
||||
const accel_x = clamp(desired.x - this.velocity.x, -this.max_accel, this.max_accel);
|
||||
const accel_y = clamp(desired.y - this.velocity.y, -this.max_accel, this.max_accel);
|
||||
this.velocity.x = (this.velocity.x + accel_x * dt) * this.damping;
|
||||
this.velocity.y = (this.velocity.y + accel_y * dt) * this.damping;
|
||||
return { x: current.x + this.velocity.x * dt, y: current.y + this.velocity.y * dt };
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Telemetry: jitter detection
|
||||
```typescript
|
||||
function detectJitter(input_log: { t: number; pos: Vec2 }[], window_ms: number): boolean {
|
||||
const recent = input_log.filter(e => e.t > Date.now() - window_ms);
|
||||
if (recent.length < 5) return false;
|
||||
let direction_changes = 0;
|
||||
for (let i = 2; i < recent.length; i++) {
|
||||
const dx1 = recent[i-1].pos.x - recent[i-2].pos.x;
|
||||
const dx2 = recent[i].pos.x - recent[i-1].pos.x;
|
||||
if (Math.sign(dx1) !== Math.sign(dx2) && dx1 !== 0 && dx2 !== 0) direction_changes++;
|
||||
}
|
||||
return direction_changes > 4;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 fast-twitch unit | Input throttle + sticky lock |
|
||||
| 매 slow tank | Damping 의 minimal |
|
||||
| 매 esports tournament | Server-side path smoothing |
|
||||
| 매 bot detection | Jitter pattern telemetry |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: 매 input throttle 100ms + 매 sticky lock 1.5s.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Evolution-of-the-War-Commander-Combat-Ecosystem]]
|
||||
- 변형: [[Baiting-and-Combat-Controls]] · [[Anti-Air-and-Anti-Ground-Combat]]
|
||||
- 응용: [[Combat_Balance_Buff]] · [[Defense-Buildings]]
|
||||
- Adjacent: [[Damage-Resistance-Platforms]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 control-system tuning, esports balance, jitter mitigation.
|
||||
**언제 X**: 매 turn-based — 매 real-time control 의 X.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **Throttle 과다**: 매 200ms+ → 매 sluggish feel.
|
||||
- **Lock 의 강제**: 매 target switching 불가 → 매 frustration.
|
||||
- **Smoothing only**: 매 input filtering 의 무시.
|
||||
- **Telemetry 없음**: 매 jitter 의 invisible.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (War Commander community vods 2024-2025, KIXEYE forum case studies).
|
||||
- 신뢰도 B (community case study).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Skybound Red Striker jitter case study + control-loop patterns. |
|
||||
|
||||
@@ -1,82 +1,156 @@
|
||||
---
|
||||
id: wiki-2026-0508-combat-balance-buff
|
||||
title: Combat Balance Buff
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [combat-buff, balance-patch, buff-design]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.88
|
||||
verification_status: applied
|
||||
tags: [game-design, balance, combat, patch-design, live-ops]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: live-balance
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Combat Balance Buff
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 underperforming unit / ability 의 매 strength 의 increase"**. 매 nerf 의 opposite — 매 player frustration 의 minimal 한 buff 가 매 balance team 의 default tool. 매 telemetry-driven (winrate < 47%, pickrate < 5%) buff 의 매 modern live-ops standard.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 buff 종류
|
||||
- **Stat buff**: 매 damage / HP / speed 의 numeric.
|
||||
- **Mechanic buff**: 매 cooldown 단축, range 증가.
|
||||
- **Synergy buff**: 매 set bonus, faction bonus.
|
||||
- **Quality-of-life**: 매 animation 단축, hitbox 확대.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 결정 기준 (telemetry)
|
||||
- **Winrate**: 매 baseline ±3%.
|
||||
- **Pickrate**: 매 5-15% target.
|
||||
- **Ban rate** (PvP): 매 < 30%.
|
||||
- **Player sentiment**: 매 forum / Reddit weighted.
|
||||
|
||||
### 매 응용
|
||||
1. 매 patch cadence (2-week, monthly).
|
||||
2. 매 PTR (public test realm) testing.
|
||||
3. 매 retro-buff 의 long-tail content.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Buff candidate selector
|
||||
```typescript
|
||||
type UnitTelemetry = {
|
||||
unit_id: string;
|
||||
winrate: number; // 0-1
|
||||
pickrate: number; // 0-1
|
||||
banrate: number; // 0-1 (PvP)
|
||||
sample_size: number;
|
||||
};
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
function bufCandidates(units: UnitTelemetry[]): UnitTelemetry[] {
|
||||
return units
|
||||
.filter(u => u.sample_size > 1000)
|
||||
.filter(u => u.winrate < 0.47 || u.pickrate < 0.05)
|
||||
.filter(u => u.banrate < 0.10) // not problem-banned
|
||||
.sort((a, b) => a.winrate - b.winrate);
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Buff magnitude calculator
|
||||
```typescript
|
||||
function suggestBuffPercent(current_winrate: number, target_winrate = 0.5): number {
|
||||
const gap = target_winrate - current_winrate;
|
||||
// Empirical: ~5% stat buff ≈ 1% winrate shift
|
||||
const raw = gap * 5 * 100;
|
||||
return Math.round(clamp(raw, 3, 15)); // bounded
|
||||
}
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
// Example: winrate 0.42 → suggest +8% damage
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Multi-stat buff distribution
|
||||
```typescript
|
||||
function distributeBuff(
|
||||
total_buff_budget: number, // e.g. 10 (%)
|
||||
stats: ("damage" | "hp" | "speed" | "cooldown")[]
|
||||
): Record<string, number> {
|
||||
const weights = { damage: 0.4, hp: 0.3, speed: 0.15, cooldown: 0.15 };
|
||||
const out: Record<string, number> = {};
|
||||
let total_w = stats.reduce((a, s) => a + weights[s], 0);
|
||||
for (const s of stats) {
|
||||
out[s] = (weights[s] / total_w) * total_buff_budget;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Patch-note generator
|
||||
```typescript
|
||||
function generatePatchNote(unit: string, changes: Change[]): string {
|
||||
const lines = [`## ${unit}`, ""];
|
||||
for (const c of changes) {
|
||||
const arrow = c.delta > 0 ? "↑" : "↓";
|
||||
lines.push(`- ${c.stat}: ${c.before} → ${c.after} (${arrow}${Math.abs(c.delta)}%)`);
|
||||
}
|
||||
lines.push("", `*Designer note: ${changes[0]?.rationale ?? ""}*`);
|
||||
return lines.join("\n");
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### A/B buff validation (PTR)
|
||||
```typescript
|
||||
async function validateBuff(unit_id: string, ptr_data: TelemetryWindow) {
|
||||
const before = await getLiveTelemetry(unit_id, "30d");
|
||||
const after = ptr_data;
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
const winrate_shift = after.winrate - before.winrate;
|
||||
const pickrate_shift = after.pickrate - before.pickrate;
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
if (winrate_shift > 0.06) return { decision: "scale_back", reason: "overshoot" };
|
||||
if (winrate_shift < 0.01) return { decision: "increase", reason: "insufficient" };
|
||||
return { decision: "ship", winrate_shift, pickrate_shift };
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 winrate 42-47% | +5-8% stat buff |
|
||||
| 매 pickrate <3% | mechanic / QoL buff |
|
||||
| 매 niche pick | synergy buff |
|
||||
| 매 winrate >50% but low pickrate | accessibility buff (animation, range) |
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
**기본값**: 매 telemetry > 1000 sample + 매 conservative +5% first pass.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game-Balance]] · [[Live-Ops]]
|
||||
- 변형: [[Combat_Balance_Nerf]] · [[Rework]]
|
||||
- 응용: [[Defense-Buildings]] · [[Damage-Resistance-Platforms]]
|
||||
- Adjacent: [[Evolution-of-the-War-Commander-Combat-Ecosystem]]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 patch design, telemetry analysis, magnitude calibration.
|
||||
**언제 X**: 매 launch tuning — 매 telemetry 부족.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## ❌ 안티패턴
|
||||
- **Power creep**: 매 매번 buff — 매 이전 unit 의 obsolete.
|
||||
- **Buff knee-jerk**: 매 forum 의 single voice 에 react.
|
||||
- **Stack 무시**: 매 multiple buff 의 multiplicative 효과.
|
||||
- **Sample 부족**: 매 < 1000 의 의미 없음.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Riot Games balance team blog, Blizzard patch notes 2024-2025).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — combat balance buff telemetry + magnitude design. |
|
||||
|
||||
@@ -1,82 +1,164 @@
|
||||
---
|
||||
id: wiki-2026-0508-damage-resistance-platforms
|
||||
title: Damage Resistance Platforms
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [DR-platforms, damage-resistance-units, war-commander-DR]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, war-commander, damage-resistance, combat]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: war-commander-combat
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Damage Resistance Platforms
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 specific damage type 에 매 resist 의 매 high 한 unit / building"**. 매 War Commander 계열 의 매 rock-paper-scissors counter-design 의 핵심. 매 % resist multiplicative + 매 type-specific resist 의 매 layered system. 매 2025 meta 의 매 hybrid platform 의 등장.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 resistance 종류
|
||||
- **Kinetic**: 매 ballistic, AP rounds.
|
||||
- **Energy**: 매 plasma, laser.
|
||||
- **Explosive**: 매 splash, missile.
|
||||
- **Thermal**: 매 fire, incendiary.
|
||||
- **EMP**: 매 stun + temporary disable.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 stacking 규칙
|
||||
- **Multiplicative**: 매 (1 - r1)*(1 - r2)*... — 매 standard.
|
||||
- **Additive cap**: 매 max 90% — 매 rare.
|
||||
- **Type vs subtype**: 매 explosive resist 가 매 missile 의 subset.
|
||||
|
||||
### 매 응용
|
||||
1. 매 PvE base defense.
|
||||
2. 매 PvP counter-pick.
|
||||
3. 매 esports comp building.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Damage application with resistance
|
||||
```typescript
|
||||
type DamageType = "kinetic" | "energy" | "explosive" | "thermal" | "emp";
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
interface Resistances {
|
||||
kinetic: number; // 0-1
|
||||
energy: number;
|
||||
explosive: number;
|
||||
thermal: number;
|
||||
emp: number;
|
||||
}
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
function applyDamage(target: Unit, damage: number, type: DamageType): number {
|
||||
const resist = target.resistances[type];
|
||||
const final = damage * (1 - clamp(resist, 0, 0.9));
|
||||
target.hp -= final;
|
||||
return final;
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Multi-resist stacking
|
||||
```typescript
|
||||
function effectiveDamage(
|
||||
damage: number,
|
||||
type: DamageType,
|
||||
layers: Resistances[]
|
||||
): number {
|
||||
let mult = 1.0;
|
||||
for (const layer of layers) {
|
||||
mult *= (1 - clamp(layer[type], 0, 0.9));
|
||||
}
|
||||
return damage * mult;
|
||||
}
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
// Example: armor 30% + shield 50% kinetic resist
|
||||
// → 1.0 * (1 - 0.3) * (1 - 0.5) = 0.35 → 65% reduction
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Counter-pick recommender
|
||||
```typescript
|
||||
function recommendCounter(target: Unit, roster: Unit[]): Unit[] {
|
||||
const target_weakness = Object.entries(target.resistances)
|
||||
.sort(([, a], [, b]) => a - b)[0][0] as DamageType;
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
return roster
|
||||
.filter(u => u.primary_damage_type === target_weakness)
|
||||
.sort((a, b) => b.dps - a.dps);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Hybrid platform synergy
|
||||
```typescript
|
||||
interface HybridPlatform extends Unit {
|
||||
active_mode: "kinetic_resist" | "energy_resist";
|
||||
switch_cooldown_ms: number;
|
||||
}
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
function switchMode(p: HybridPlatform, target_mode: string, now: number) {
|
||||
if (now - p.last_switch < p.switch_cooldown_ms) return false;
|
||||
if (target_mode === "kinetic_resist") {
|
||||
p.resistances.kinetic = 0.7;
|
||||
p.resistances.energy = 0.1;
|
||||
} else {
|
||||
p.resistances.kinetic = 0.1;
|
||||
p.resistances.energy = 0.7;
|
||||
}
|
||||
p.active_mode = target_mode;
|
||||
p.last_switch = now;
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Resistance breakdown UI
|
||||
```typescript
|
||||
function describeResistance(r: Resistances): string {
|
||||
return Object.entries(r)
|
||||
.filter(([, v]) => v > 0.05)
|
||||
.sort(([, a], [, b]) => b - a)
|
||||
.map(([k, v]) => `${k}: ${(v * 100).toFixed(0)}%`)
|
||||
.join(" | ");
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 single-type spam meta | High single-type resist platform |
|
||||
| 매 mixed comp | Hybrid platform |
|
||||
| 매 EMP-heavy meta | EMP resist priority |
|
||||
| 매 esports balance | Cap at 70% per type |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 매 30-50% single-type resist + 매 multiplicative stacking.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Defense-Buildings]] · [[Combat-Mechanics]]
|
||||
- 변형: [[Anti-Air-and-Anti-Ground-Combat]] · [[Base-Layouts-and-Kill-Zones]]
|
||||
- 응용: [[Combat_Balance_Buff]] · [[Evolution-of-the-War-Commander-Combat-Ecosystem]]
|
||||
- Adjacent: [[Biomedical-Engineering]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 counter-design, balance pass, comp recommendation.
|
||||
**언제 X**: 매 single-damage genre — 매 type system 의 X.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **100% resist**: 매 unkillable — 매 design 위반.
|
||||
- **Additive stacking**: 매 trivial 90% cap 도달.
|
||||
- **Hidden resist**: 매 player 의 invisible — 매 frustration.
|
||||
- **Type 무한 추가**: 매 complexity creep.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (War Commander wiki 2024-2025, KIXEYE community guides).
|
||||
- 신뢰도 B.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — damage-resistance platforms + multiplicative stacking model. |
|
||||
|
||||
@@ -1,78 +1,180 @@
|
||||
---
|
||||
id: wiki-2026-0508-data-driven-personalization
|
||||
title: Data Driven Personalization
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Data-Driven Personalization
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [personalization, dynamic-personalization, player-segmentation]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [data, personalization, segmentation, ml, mobile-game]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: feature-store-ml
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Data-Driven Personalization
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 player 의 behavior data 로 매 content / offer / difficulty 의 individual tuning"**. 매 segment 단위 → 매 ML-driven individual 단위 의 매 evolution. 매 2026 standard 는 매 real-time feature store + 매 contextual bandit + 매 explainable rule overlay.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 데이터 기반 개인화는 유저별 행동 시그널을 활용해 콘텐츠·BM·UI를 동적으로 조정하는 LiveOps 기법이다.
|
||||
### 매 segmentation tier
|
||||
- **Static segment**: 매 country, install_source.
|
||||
- **Behavior segment**: 매 spender / dolphin / minnow / F2P.
|
||||
- **Lifecycle**: 매 new / engaged / churning / churned.
|
||||
- **ML cluster**: 매 k-means / autoencoder embedding.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 personalization surface
|
||||
- **Offer pricing**: 매 player-specific bundle.
|
||||
- **Difficulty**: 매 adaptive level.
|
||||
- **Content order**: 매 onboarding sequence.
|
||||
- **Push timing**: 매 individual best-time.
|
||||
|
||||
**추출된 패턴:** 결제 이력 + 진행 단계 + 활동 패턴 = 유저 세그먼트 → 세그먼트별 다른 경험 제공.
|
||||
### 매 응용
|
||||
1. 매 LTV uplift (매 10-30%).
|
||||
2. 매 retention curve flattening.
|
||||
3. 매 cohort-specific event design.
|
||||
|
||||
**세부 내용:**
|
||||
- 추천 시스템: 다음 콘텐츠/패키지 예측.
|
||||
- 난이도 조정(DDA): 잔존율 ↑.
|
||||
- 동적 오퍼: WTP 기반 가격.
|
||||
- 광고 빈도 개인화.
|
||||
- 프라이버시 고려: 동의 + 익명화.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Player feature vector
|
||||
```python
|
||||
from dataclasses import dataclass
|
||||
from typing import Literal
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
@dataclass
|
||||
class PlayerFeatures:
|
||||
days_since_install: int
|
||||
sessions_7d: int
|
||||
sessions_30d: int
|
||||
spend_total: float
|
||||
spend_30d: float
|
||||
last_spend_days: int
|
||||
avg_session_min: float
|
||||
progression_level: int
|
||||
cohort: Literal["new", "engaged", "churning", "churned"]
|
||||
country: str
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
def derive_cohort(p: PlayerFeatures) -> str:
|
||||
if p.days_since_install < 7: return "new"
|
||||
if p.sessions_7d == 0: return "churned"
|
||||
if p.sessions_7d < p.sessions_30d / 8: return "churning"
|
||||
return "engaged"
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Contextual bandit (offer selection)
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
class LinUCB:
|
||||
def __init__(self, n_arms: int, n_features: int, alpha: float = 1.0):
|
||||
self.A = [np.eye(n_features) for _ in range(n_arms)]
|
||||
self.b = [np.zeros(n_features) for _ in range(n_arms)]
|
||||
self.alpha = alpha
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
def select(self, x: np.ndarray) -> int:
|
||||
scores = []
|
||||
for a in range(len(self.A)):
|
||||
A_inv = np.linalg.inv(self.A[a])
|
||||
theta = A_inv @ self.b[a]
|
||||
ucb = theta @ x + self.alpha * np.sqrt(x @ A_inv @ x)
|
||||
scores.append(ucb)
|
||||
return int(np.argmax(scores))
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
def update(self, arm: int, x: np.ndarray, reward: float):
|
||||
self.A[arm] += np.outer(x, x)
|
||||
self.b[arm] += reward * x
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Adaptive difficulty (player skill estimate)
|
||||
```python
|
||||
def estimate_skill(recent_attempts: list[dict]) -> float:
|
||||
"""recent_attempts: [{success: bool, level_difficulty: float}]"""
|
||||
if not recent_attempts: return 0.5
|
||||
total_w = sum(0.9 ** i for i in range(len(recent_attempts)))
|
||||
skill = sum(
|
||||
(a["level_difficulty"] if a["success"] else a["level_difficulty"] - 0.2)
|
||||
* (0.9 ** i)
|
||||
for i, a in enumerate(recent_attempts)
|
||||
) / total_w
|
||||
return max(0.0, min(1.0, skill))
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
def next_difficulty(skill: float, target_winrate: float = 0.65) -> float:
|
||||
# Want challenge slightly above skill
|
||||
return skill + (1 - target_winrate) * 0.3
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Real-time feature store query
|
||||
```python
|
||||
from datetime import datetime
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
class FeatureStore:
|
||||
def __init__(self, redis_client, warehouse_client):
|
||||
self.redis = redis_client
|
||||
self.warehouse = warehouse_client
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
async def get_player_features(self, player_id: str) -> PlayerFeatures:
|
||||
# Hot features from Redis
|
||||
hot = await self.redis.hgetall(f"player:{player_id}:hot")
|
||||
# Cold features from warehouse (cached)
|
||||
cold = await self.warehouse.query(
|
||||
f"SELECT * FROM player_cold WHERE id = '{player_id}'"
|
||||
)
|
||||
return PlayerFeatures(**{**cold, **hot})
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### Explainable overlay (rule + ML)
|
||||
```python
|
||||
def select_offer_with_guardrails(p: PlayerFeatures, ml_pick: int, offers: list) -> int:
|
||||
# Guardrails override ML
|
||||
if p.spend_total == 0 and offers[ml_pick].price > 9.99:
|
||||
return offers.index(STARTER_PACK_499) # never expensive to non-spenders
|
||||
if p.cohort == "churning":
|
||||
return offers.index(WIN_BACK_OFFER)
|
||||
if p.country in HIGH_RISK_COUNTRIES and offers[ml_pick].price > 4.99:
|
||||
return offers.index(LOW_PRICE_DEFAULT)
|
||||
return ml_pick
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 small data | Static segment + rules |
|
||||
| 매 medium data | Behavior segment + A/B |
|
||||
| 매 large data | ML cluster + contextual bandit |
|
||||
| 매 regulated market | Rule guardrails 의 mandatory |
|
||||
|
||||
**기본값**: 매 segment + bandit + 매 rule guardrails 의 layered.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live-Ops]] · [[Mobile-Game-Analytics]]
|
||||
- 변형: [[Dynamic Offers]] · [[Adaptive-Difficulty]]
|
||||
- 응용: [[Game_Monetization_Strategy]] · [[Capybara GO!]]
|
||||
- Adjacent: [[CPI (Cost Per Install)]] · [[Gacha Mechanics Analysis]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 segmentation design, bandit setup, feature engineering.
|
||||
**언제 X**: 매 cold-start product — 매 data 부족.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Predatory targeting**: 매 vulnerable player 의 매 high-spend offer.
|
||||
- **Black-box only**: 매 explainability 없음 → 매 regulator + designer 둘 다 lost.
|
||||
- **Stale features**: 매 hourly batch → 매 real-time signal miss.
|
||||
- **Over-segmentation**: 매 sample size 부족.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Unity LiveOps 2025 report, GameAnalytics Personalization Whitepaper).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — data-driven personalization with bandit + guardrails. |
|
||||
|
||||
@@ -1,82 +1,196 @@
|
||||
---
|
||||
id: wiki-2026-0508-dead-space-series
|
||||
title: Dead Space Series
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Dead-Space, Visceral-Games, Isaac-Clarke]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
verification_status: applied
|
||||
tags: [game-design, survival-horror, sci-fi, third-person, ea]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: survival-horror
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Dead Space Series
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 strategic-dismemberment + 매 diegetic-UI 의 매 sci-fi survival-horror 정점"**. 매 Visceral Games (2008-2013) 의 매 Dead Space 1/2/3 + 매 EA Motive 의 매 2023 remake 의 매 series. 매 limb-targeting combat + 매 zero-G + 매 Isaac Clarke 의 매 silent-then-voiced protagonist.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 design pillar
|
||||
- **Strategic dismemberment**: 매 limb 절단 = 매 효율적 kill.
|
||||
- **Diegetic UI**: 매 health = spine RIG, 매 inventory = hologram.
|
||||
- **Atmosphere**: 매 sound design + 매 isolation + 매 USG Ishimura.
|
||||
- **Plasma cutter**: 매 horizontal/vertical 회전.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 series 의 evolution
|
||||
1. **DS1 (2008)**: 매 origin — strict horror, Isaac silent.
|
||||
2. **DS2 (2011)**: 매 voice + Sprawl + multiplayer.
|
||||
3. **DS3 (2013)**: 매 co-op + crafting + microtransactions (commercial decline).
|
||||
4. **DS Remake (2023)**: 매 Motive 의 매 reimagining — 매 Isaac voiced from start.
|
||||
|
||||
### 매 응용
|
||||
1. 매 limb-targeting combat 의 industry pattern.
|
||||
2. 매 diegetic-UI 의 reference (later: Halo, Metro).
|
||||
3. 매 horror pacing 의 case study.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Limb-targeted damage system
|
||||
```typescript
|
||||
interface Limb {
|
||||
id: "head" | "left_arm" | "right_arm" | "left_leg" | "right_leg" | "torso";
|
||||
hp: number;
|
||||
severable: boolean;
|
||||
on_sever_effect?: () => void;
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
interface Necromorph {
|
||||
limbs: Limb[];
|
||||
base_hp: number;
|
||||
alive(): boolean;
|
||||
}
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
function shootLimb(target: Necromorph, limb_id: string, damage: number) {
|
||||
const limb = target.limbs.find(l => l.id === limb_id);
|
||||
if (!limb) return;
|
||||
limb.hp -= damage;
|
||||
if (limb.hp <= 0 && limb.severable) {
|
||||
limb.severable = false;
|
||||
limb.on_sever_effect?.();
|
||||
// Severing limbs is more effective than HP damage
|
||||
target.base_hp -= 30;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Plasma-cutter rotation
|
||||
```typescript
|
||||
class PlasmaCutter {
|
||||
orientation: "horizontal" | "vertical" = "horizontal";
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
toggle() {
|
||||
this.orientation = this.orientation === "horizontal" ? "vertical" : "horizontal";
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
fire(aim: Ray): HitResult[] {
|
||||
// Spawn 3 projectiles in a line perpendicular to orientation
|
||||
const offsets = this.orientation === "horizontal"
|
||||
? [{x: -0.3, y: 0}, {x: 0, y: 0}, {x: 0.3, y: 0}]
|
||||
: [{x: 0, y: -0.3}, {x: 0, y: 0}, {x: 0, y: 0.3}];
|
||||
return offsets.map(o => raycast(aim, o));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Diegetic health (RIG spine)
|
||||
```typescript
|
||||
class RIGDisplay {
|
||||
// No HUD overlay — health rendered on Isaac's suit spine
|
||||
render(player: Player, ctx: RenderContext) {
|
||||
const segments = 10;
|
||||
const filled = Math.ceil((player.hp / player.max_hp) * segments);
|
||||
for (let i = 0; i < segments; i++) {
|
||||
const color = i < filled
|
||||
? hpColor(player.hp / player.max_hp)
|
||||
: "#222";
|
||||
drawSpineSegment(ctx, player.spine_position(i), color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function hpColor(ratio: number): string {
|
||||
if (ratio > 0.6) return "#3f8";
|
||||
if (ratio > 0.3) return "#fa3";
|
||||
return "#f33";
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Stasis (slow-time mechanic)
|
||||
```typescript
|
||||
class Stasis {
|
||||
charges = 4;
|
||||
max_charges = 4;
|
||||
recharge_per_sec = 0.1;
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
fire(target: Necromorph) {
|
||||
if (this.charges < 1) return false;
|
||||
this.charges--;
|
||||
target.move_speed_mult = 0.2;
|
||||
target.attack_speed_mult = 0.2;
|
||||
setTimeout(() => {
|
||||
target.move_speed_mult = 1;
|
||||
target.attack_speed_mult = 1;
|
||||
}, 5000);
|
||||
return true;
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
tick(dt: number) {
|
||||
this.charges = Math.min(this.max_charges, this.charges + this.recharge_per_sec * dt);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Audio-driven scare pacing
|
||||
```typescript
|
||||
class TensionDirector {
|
||||
tension = 0; // 0-1
|
||||
last_scare = 0;
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
update(player: Player, now: number) {
|
||||
// Build tension during quiet
|
||||
this.tension = Math.min(1, this.tension + 0.001);
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
// Trigger scare when tension high + cooldown met
|
||||
if (this.tension > 0.7 && now - this.last_scare > 60_000) {
|
||||
this.spawnAmbushOrAudioCue(player);
|
||||
this.tension = 0;
|
||||
this.last_scare = now;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 horror 강조 | DS1 model — silent protag, scarce ammo |
|
||||
| 매 action 강조 | DS2 model — voiced, more weapons |
|
||||
| 매 co-op | DS3 model — but careful with horror dilution |
|
||||
| 매 modern remake | DS2023 model — voiced, no level loads, expanded story |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: 매 limb-targeting + 매 diegetic UI + 매 scarce-ammo loop.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[Survival-Horror]] · [[Sci-Fi-Games]]
|
||||
- 변형: [[Resident-Evil]] · [[System-Shock]]
|
||||
- 응용: [[Immersive-Sim-Genre]] · [[BioShock-Critique]]
|
||||
- Adjacent: [[Biomechanics-of-Injury]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 horror design, dismemberment combat, diegetic UI reference.
|
||||
**언제 X**: 매 fast-action shooter — 매 pacing mismatch.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **HUD-on-screen**: 매 immersion break — 매 series 의 핵심 위반.
|
||||
- **Center-mass aim**: 매 limb-targeting 의 무의미.
|
||||
- **DS3 microtransactions**: 매 horror tension 의 commercial 침식.
|
||||
- **Bullet-sponge enemy**: 매 dismemberment 의 design 의미 상실.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (GDC talks: Glen Schofield, Roman Campos-Oriola; Visceral postmortems).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Dead Space series design pillars + remake comparison. |
|
||||
|
||||
@@ -1,82 +1,207 @@
|
||||
---
|
||||
id: wiki-2026-0508-defense-buildings
|
||||
title: Defense Buildings
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [defense-buildings, turrets, base-defense, towers]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.88
|
||||
verification_status: applied
|
||||
tags: [game-design, base-defense, war-commander, td, layout]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: base-defense-system
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Defense Buildings
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 enemy unit 의 attack path 를 차단 / damage 하는 매 stationary structure"**. 매 War Commander / Boom Beach / Clash of Clans 등 매 PvP-base genre 의 핵심. 매 range, DPS, targeting priority, 매 splash 의 매 4 dimension 으로 매 design space 의 정의.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 분류
|
||||
- **Single-target**: 매 high-DPS, anti-elite.
|
||||
- **Splash**: 매 area damage, anti-swarm.
|
||||
- **Anti-air**: 매 ground 무력, air specialized.
|
||||
- **Slowing/EMP**: 매 control, debuff.
|
||||
- **Long-range arty**: 매 sniper, low fire-rate.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 design dimension
|
||||
- **Range**: 매 4-12 tiles.
|
||||
- **DPS**: 매 normalized to HP per second of typical attacker.
|
||||
- **Reload**: 매 fire-rate gating splash power.
|
||||
- **Cost / build-time**: 매 economic gating.
|
||||
|
||||
### 매 응용
|
||||
1. 매 base layout design.
|
||||
2. 매 kill-zone funneling.
|
||||
3. 매 PvP attack-meta counter.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Defense building targeting
|
||||
```typescript
|
||||
type TargetPriority = "closest" | "lowest_hp" | "highest_dps" | "first_in_range";
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
class DefenseTower {
|
||||
pos: Vec2;
|
||||
range: number;
|
||||
dps: number;
|
||||
reload_ms: number;
|
||||
last_fire = 0;
|
||||
priority: TargetPriority = "closest";
|
||||
splash_radius = 0;
|
||||
anti_air = false;
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
selectTarget(units: Unit[]): Unit | null {
|
||||
const inRange = units.filter(u => {
|
||||
if (u.is_air && !this.anti_air) return false;
|
||||
return distance(this.pos, u.pos) <= this.range;
|
||||
});
|
||||
if (!inRange.length) return null;
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
switch (this.priority) {
|
||||
case "closest":
|
||||
return minBy(inRange, u => distance(this.pos, u.pos));
|
||||
case "lowest_hp":
|
||||
return minBy(inRange, u => u.hp);
|
||||
case "highest_dps":
|
||||
return maxBy(inRange, u => u.dps);
|
||||
case "first_in_range":
|
||||
return inRange[0];
|
||||
}
|
||||
}
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
tryFire(now: number, targets: Unit[]) {
|
||||
if (now - this.last_fire < this.reload_ms) return;
|
||||
const target = this.selectTarget(targets);
|
||||
if (!target) return;
|
||||
this.last_fire = now;
|
||||
if (this.splash_radius > 0) {
|
||||
this.applySplash(target.pos, targets);
|
||||
} else {
|
||||
target.hp -= this.dps * (this.reload_ms / 1000);
|
||||
}
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
applySplash(center: Vec2, units: Unit[]) {
|
||||
for (const u of units) {
|
||||
if (distance(center, u.pos) <= this.splash_radius) {
|
||||
u.hp -= this.dps * (this.reload_ms / 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Layout coverage analysis
|
||||
```typescript
|
||||
function coverageMap(towers: DefenseTower[], grid_size: number): number[][] {
|
||||
const map = Array.from({ length: grid_size }, () => Array(grid_size).fill(0));
|
||||
for (let y = 0; y < grid_size; y++) {
|
||||
for (let x = 0; x < grid_size; x++) {
|
||||
for (const t of towers) {
|
||||
if (distance(t.pos, { x, y }) <= t.range) {
|
||||
map[y][x]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function uncoveredCells(map: number[][]): number {
|
||||
return map.flat().filter(v => v === 0).length;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Funnel / kill-zone scorer
|
||||
```typescript
|
||||
function killZoneScore(layout: Layout, attacker_paths: Path[]): number {
|
||||
let score = 0;
|
||||
for (const path of attacker_paths) {
|
||||
const exposure = path.cells.map(c => layout.coverage_at(c)).reduce((a, b) => a + b, 0);
|
||||
score += exposure / path.cells.length;
|
||||
}
|
||||
return score / attacker_paths.length;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Build-cost optimizer
|
||||
```typescript
|
||||
function maximizeDefense(
|
||||
budget: number,
|
||||
available: DefenseTower[],
|
||||
slot_count: number
|
||||
): DefenseTower[] {
|
||||
// Greedy by DPS-per-cost
|
||||
const sorted = [...available].sort((a, b) => (b.dps / b.cost) - (a.dps / a.cost));
|
||||
const picks: DefenseTower[] = [];
|
||||
let remaining = budget;
|
||||
for (const t of sorted) {
|
||||
if (picks.length >= slot_count) break;
|
||||
if (t.cost <= remaining) {
|
||||
picks.push(t);
|
||||
remaining -= t.cost;
|
||||
}
|
||||
}
|
||||
return picks;
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Defensive synergy buff
|
||||
```typescript
|
||||
function applySynergyBuffs(towers: DefenseTower[]) {
|
||||
for (const t of towers) {
|
||||
const nearby = towers.filter(o => o !== t && distance(t.pos, o.pos) <= 3);
|
||||
if (nearby.some(o => o.type === "command_post")) {
|
||||
t.dps *= 1.15; // +15% DPS near command post
|
||||
}
|
||||
if (nearby.length >= 2) {
|
||||
t.range *= 1.10; // +10% range when clustered
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 swarm meta | Splash 우선, anti-air balanced |
|
||||
| 매 elite-stack meta | Single-target high-DPS |
|
||||
| 매 air meta | Anti-air dominant + long-range |
|
||||
| 매 mixed | Layered ring (long-range outer, splash inner) |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 layered defense + 매 funnel kill-zone + 매 anti-air coverage 70%+.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Base-Layouts-and-Kill-Zones]] · [[Tower-Defense]]
|
||||
- 변형: [[Anti-Air-and-Anti-Ground-Combat]] · [[Damage-Resistance-Platforms]]
|
||||
- 응용: [[Combat_Balance_Buff]] · [[Evolution-of-the-War-Commander-Combat-Ecosystem]]
|
||||
- Adjacent: [[Jailing]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 base layout design, defense balance, kill-zone analysis.
|
||||
**언제 X**: 매 PvE-only — 매 design tension 부족.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **Single-type spam**: 매 splash-only → 매 elite stomp.
|
||||
- **No anti-air**: 매 air comp 의 free win.
|
||||
- **Edge-only**: 매 funnel 무시 → 매 trivial path.
|
||||
- **Range overlap 의 부족**: 매 isolated tower → 매 single-target focus 의 free kill.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Clash of Clans / Boom Beach / War Commander community meta 2024-2025).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — defense buildings targeting + layout + synergy patterns. |
|
||||
|
||||
@@ -1,82 +1,184 @@
|
||||
---
|
||||
id: wiki-2026-0508-descendants-sector-control
|
||||
title: Descendants Sector Control
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Sector Control Mechanic, Territory War Design, MMO Conquest System]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mmo, territory-control, pvp]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-system
|
||||
framework: mmo-pvp
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Descendants Sector Control
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 territory 매 contested resource 가 될 때 매 emergent politics 가 매 등장한다"**. 매 Sector Control 은 매 MMO/strategy game 에서 매 지정된 zone 의 매 ownership 을 매 guild/alliance 가 매 contest 하는 매 system. 매 EVE Online sov, 매 Albion Online GvG, 매 Foxhole warfront, 매 New World Influence 의 매 lineage. 매 Descendants 의 매 variant 는 매 hybrid PvE-PvP capture 매 emphasis.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Capture Mechanic
|
||||
- 매 sector 마다 매 capture point (banner/relic/control node).
|
||||
- 매 capture window 매 vulnerability schedule (e.g., prime time only).
|
||||
- 매 contested 시 매 PvP enabled, 매 owned 시 매 passive income.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Reward Loop
|
||||
- 매 territory 보유 → 매 resource node 우선권.
|
||||
- 매 tax collection — 매 player transaction 의 매 % 가 매 owner guild 로.
|
||||
- 매 cosmetic flag/banner — 매 prestige.
|
||||
|
||||
### 매 Decay & Defense
|
||||
- 매 daily upkeep cost (매 defender attrition).
|
||||
- 매 capture cooldown (매 defender 가 매 reorganize).
|
||||
- 매 siege weapon 매 escalation tier.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. EVE Online — Aegis sov + Citadels.
|
||||
2. Albion Online — GvG 5v5 territory battle.
|
||||
3. Foxhole — 매 logistics-driven persistent warfront.
|
||||
4. New World — 매 Company Influence campaign.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Pattern 1: Sector State Machine
|
||||
```typescript
|
||||
type SectorState = 'neutral' | 'contested' | 'owned' | 'siege' | 'cooldown';
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
interface Sector {
|
||||
id: string;
|
||||
state: SectorState;
|
||||
owner: GuildId | null;
|
||||
capture_progress: number; // 0-100
|
||||
vulnerability_window: { start: Date; end: Date };
|
||||
}
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
function tick(sector: Sector, attackers: PlayerCount, defenders: PlayerCount) {
|
||||
if (!inWindow(sector.vulnerability_window)) return;
|
||||
const delta = (attackers - defenders) * 0.5;
|
||||
sector.capture_progress = clamp(sector.capture_progress + delta, 0, 100);
|
||||
if (sector.capture_progress >= 100) transferOwnership(sector);
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 2: Vulnerability Window
|
||||
```python
|
||||
from datetime import time, timedelta
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
class VulnerabilitySchedule:
|
||||
def __init__(self, owner_timezone: str, window_hours: int = 4):
|
||||
self.owner_tz = owner_timezone
|
||||
self.window = window_hours
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
def set_prime_time(self, start: time):
|
||||
# Owner declares 4-hour window per day
|
||||
# Prevents off-hours capture (no "night-cap")
|
||||
return (start, start + timedelta(hours=self.window))
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
def is_attackable(self, now: datetime) -> bool:
|
||||
local = now.astimezone(self.owner_tz)
|
||||
start, end = self.set_prime_time(self.declared_start)
|
||||
return start <= local.time() <= end
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 3: Tax Routing
|
||||
```rust
|
||||
struct SectorTax {
|
||||
rate: f64, // e.g., 0.05 = 5%
|
||||
owner_guild: GuildId,
|
||||
treasury_split: HashMap<RankId, f64>, // % per rank
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
impl SectorTax {
|
||||
fn on_transaction(&self, sale: &Sale) -> Result<()> {
|
||||
let tax = sale.amount * self.rate;
|
||||
treasury::deposit(self.owner_guild, tax)?;
|
||||
// Auto-distribute by rank policy
|
||||
for (rank, share) in &self.treasury_split {
|
||||
distribute_to_rank(self.owner_guild, *rank, tax * share);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Pattern 4: Siege Escalation Tier
|
||||
```csharp
|
||||
public enum SiegeTier { Skirmish, Assault, FullSiege }
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
public class SiegeManager {
|
||||
public SiegeTier EscalateBasedOn(int attackerCount, int defenseHp) {
|
||||
if (attackerCount < 10) return SiegeTier.Skirmish; // small-scale
|
||||
if (defenseHp > 50_000) return SiegeTier.Assault; // mid
|
||||
return SiegeTier.FullSiege; // unlock siege weapons
|
||||
}
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
public void UnlockWeapons(SiegeTier tier) {
|
||||
switch (tier) {
|
||||
case SiegeTier.FullSiege:
|
||||
EnableTrebuchets();
|
||||
EnableBatteringRams();
|
||||
EnableMassPvP(maxPlayers: 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Pattern 5: Influence Decay
|
||||
```python
|
||||
def daily_decay(sector, owner_activity_score):
|
||||
# If owner inactive, control points bleed off
|
||||
# Forces engagement; prevents perma-hoarding
|
||||
base_decay = 5.0
|
||||
activity_modifier = max(0.1, 1.0 - owner_activity_score)
|
||||
sector.control -= base_decay * activity_modifier
|
||||
if sector.control <= 0:
|
||||
sector.state = 'neutral'
|
||||
sector.owner = None
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 small guild 매 inclusion | 매 multi-tier sector — 매 small/mid/large |
|
||||
| 매 night-cap prevention | 매 vulnerability window (declared prime time) |
|
||||
| 매 perma-dominance 방지 | 매 daily upkeep + 매 decay |
|
||||
| 매 economic incentive 부여 | 매 tax + 매 resource node priority |
|
||||
| 매 zerg 방지 | 매 player count cap per battle (e.g., 50v50) |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: 매 vulnerability window + tax + decay 매 3-pillar — 매 EVE/Albion 매 검증된 조합.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[MMO-PvP-Design]] · [[Territory-Control-Systems]]
|
||||
- 변형: [[EVE-Sovereignty]] · [[Albion-GvG]] · [[Foxhole-Warfront]]
|
||||
- 응용: [[Guild-Politics-Emergence]] · [[Player-Driven-Economy]]
|
||||
- Adjacent: [[Siege-Mechanics]] · [[Vulnerability-Window-Design]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 MMO territory system 설계, 매 PvP balance 분석, 매 emergent politics 매 mechanic 도출.
|
||||
**언제 X**: 매 instanced/lobby PvP (매 territory 개념 부재), 매 PvE-only game.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Night-capping**: 매 vulnerability window 부재 — 매 off-hours 매 zerg 가 매 무방비 sector 점령.
|
||||
- **No upkeep**: 매 매 perma-hoarding 가능 — 매 stagnation.
|
||||
- **Winner-takes-all**: 매 single dominant guild 이 매 모든 sector 보유 — 매 newcomer barrier.
|
||||
- **No cap on numbers**: 매 zerg-ball 이 매 모든 contest 압살 — 매 skill irrelevant.
|
||||
- **Tax 없음**: 매 territory 의 매 economic incentive 부재 — 매 cosmetic only.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (CCP devblogs on EVE sov, Sandbox Interactive Albion design talks, Siege Camp Foxhole postmortems).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Sector Control 의 5-pillar (capture/window/tax/siege/decay) 분석 |
|
||||
|
||||
@@ -1,78 +1,188 @@
|
||||
---
|
||||
id: wiki-2026-0508-dynamic-offers
|
||||
title: Dynamic Offers
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [dynamic-offer, contextual-offer, personalized-offer]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [monetization, mobile, offers, personalization, live-ops]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: live-ops-offer
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Dynamic Offers
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 player state 에 매 따라 매 individually-tailored 의 매 IAP bundle"**. 매 static catalog 의 evolution — 매 trigger event + 매 player feature + 매 ML scoring. 매 2026 mobile 의 매 default monetization surface — 매 LTV uplift 매 15-40%.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 동적 오퍼는 유저 행동·결제 이력·진행 단계에 맞춰 실시간으로 패키지·가격을 개인화하는 BM 시스템이다.
|
||||
### 매 trigger 종류
|
||||
- **Lifecycle**: 매 install D1, 매 first-defeat, 매 churn-risk.
|
||||
- **Progression**: 매 level-up, 매 stage-clear, 매 stuck (3 fails).
|
||||
- **Event**: 매 holiday, 매 weekend, 매 anniversary.
|
||||
- **Contextual**: 매 low-resource, 매 PvP loss-streak.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 offer 구성 요소
|
||||
- **Price tier**: 매 $0.99 / $4.99 / $19.99 / $99.99.
|
||||
- **Contents**: 매 currency + items + cosmetic.
|
||||
- **Value display**: 매 "300% value" / "Best deal".
|
||||
- **Urgency**: 매 timer, 매 limited inventory.
|
||||
- **Eligibility**: 매 player feature gated.
|
||||
|
||||
**추출된 패턴:** 같은 가격이라도 다른 유저에게는 다른 보상 묶음 — 결제 의향(WTP) 추정에 기반한 1:1 가격 차별.
|
||||
### 매 응용
|
||||
1. 매 starter pack (D1 high-conversion).
|
||||
2. 매 stuck-pack (frustration relief).
|
||||
3. 매 win-back (churned player 복귀).
|
||||
|
||||
**세부 내용:**
|
||||
- 추천 엔진(머신러닝)으로 패키지 선택.
|
||||
- 진행 단계별 적합 자원 추천.
|
||||
- 결제 이력으로 가격대 조정.
|
||||
- A/B 테스트로 학습.
|
||||
- 윤리·규제 우려: 가격 차별 공정성.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Offer eligibility engine
|
||||
```typescript
|
||||
type OfferRule = {
|
||||
id: string;
|
||||
predicate: (p: PlayerState) => boolean;
|
||||
weight: number;
|
||||
cooldown_hours: number;
|
||||
};
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
const RULES: OfferRule[] = [
|
||||
{
|
||||
id: "starter_pack",
|
||||
predicate: p => p.spend_total === 0 && p.session_count > 5,
|
||||
weight: 100,
|
||||
cooldown_hours: 24 * 7,
|
||||
},
|
||||
{
|
||||
id: "stuck_pack",
|
||||
predicate: p => p.consecutive_losses >= 3,
|
||||
weight: 50,
|
||||
cooldown_hours: 6,
|
||||
},
|
||||
{
|
||||
id: "winback",
|
||||
predicate: p => p.days_since_last_session >= 7 && p.spend_total > 0,
|
||||
weight: 80,
|
||||
cooldown_hours: 24 * 14,
|
||||
},
|
||||
];
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function selectOffer(p: PlayerState, now: number): OfferRule | null {
|
||||
const eligible = RULES
|
||||
.filter(r => r.predicate(p))
|
||||
.filter(r => !inCooldown(p, r.id, now, r.cooldown_hours));
|
||||
if (!eligible.length) return null;
|
||||
return weightedPick(eligible);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Price-tier model (player-specific)
|
||||
```typescript
|
||||
function suggestPriceTier(p: PlayerState): number {
|
||||
const tiers = [0.99, 4.99, 9.99, 19.99, 49.99, 99.99];
|
||||
if (p.spend_total === 0) return 4.99; // starter
|
||||
const avg = p.spend_total / Math.max(1, p.purchase_count);
|
||||
// Pick tier near player's typical spend
|
||||
let best = tiers[0];
|
||||
for (const t of tiers) {
|
||||
if (Math.abs(t - avg) < Math.abs(best - avg)) best = t;
|
||||
}
|
||||
return best;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Bundle value calculator
|
||||
```typescript
|
||||
type BundleItem = { id: string; quantity: number; reference_price: number };
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
function bundleValueRatio(items: BundleItem[], price: number): number {
|
||||
const total_ref = items.reduce((s, i) => s + i.quantity * i.reference_price, 0);
|
||||
return total_ref / price;
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
function valueLabel(ratio: number): string {
|
||||
if (ratio >= 5) return "BEST DEAL";
|
||||
if (ratio >= 3) return "GREAT VALUE";
|
||||
if (ratio >= 2) return "GOOD VALUE";
|
||||
return "";
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Urgency timer rendering
|
||||
```typescript
|
||||
class OfferTimer {
|
||||
expires_at: number;
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
remainingLabel(now: number): string {
|
||||
const sec = Math.max(0, Math.floor((this.expires_at - now) / 1000));
|
||||
if (sec > 3600) return `${Math.floor(sec / 3600)}h ${Math.floor((sec % 3600) / 60)}m`;
|
||||
if (sec > 60) return `${Math.floor(sec / 60)}m ${sec % 60}s`;
|
||||
return `${sec}s`;
|
||||
}
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
isExpired(now: number) {
|
||||
return now >= this.expires_at;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Conversion-rate A/B harness
|
||||
```typescript
|
||||
async function logOfferEvent(player_id: string, offer_id: string, event: "shown" | "clicked" | "purchased") {
|
||||
await analytics.track({
|
||||
user_id: player_id,
|
||||
event: `offer_${event}`,
|
||||
properties: { offer_id, ts: Date.now() },
|
||||
});
|
||||
}
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
async function offerConversionRate(offer_id: string, since_ms: number) {
|
||||
const shown = await analytics.count({ event: "offer_shown", offer_id, since: since_ms });
|
||||
const purchased = await analytics.count({ event: "offer_purchased", offer_id, since: since_ms });
|
||||
return shown > 0 ? purchased / shown : 0;
|
||||
}
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 D0-1 player | Starter pack ($4.99, high value) |
|
||||
| 매 stuck player | Stuck-pack (resource focus) |
|
||||
| 매 churning | Winback (deep discount) |
|
||||
| 매 whale | Limited cosmetic + currency bundle |
|
||||
|
||||
**기본값**: 매 trigger + eligibility + cooldown + 매 explainable rules first, ML overlay second.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Monetization_Strategy]] · [[Live-Ops]]
|
||||
- 변형: [[Battle-Pass]] · [[Limited-Banner]]
|
||||
- 응용: [[Capybara GO!]] · [[Data-Driven Personalization]]
|
||||
- Adjacent: [[CPI (Cost Per Install)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 offer design, conversion analysis, rule engine setup.
|
||||
**언제 X**: 매 cosmetic-only product — 매 dynamic 의 over-engineering.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Predatory targeting**: 매 frustrated whale 의 매 immediate offer.
|
||||
- **Cooldown 무시**: 매 spam → 매 desensitization.
|
||||
- **Fake urgency**: 매 reset timer → 매 trust loss.
|
||||
- **Value 거짓 라벨**: 매 reference price inflation → 매 regulator risk.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (deltaDNA / Unity Gaming Services 2025 case studies).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — dynamic offers trigger + eligibility + value model. |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-eve-온라인
|
||||
title: EVE 온라인
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: eve-online
|
||||
duplicate_of: "[[EVE Online]]"
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, mmo, sandbox, eve]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# EVE 온라인
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[EVE Online]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 single-shard sandbox MMO — 매 모든 player 가 매 same universe 의 공유.
|
||||
- 매 player-driven economy + nullsec sovereignty 의 매 emergent geopolitics.
|
||||
- 매 risk-tier system (highsec/lowsec/nullsec/wormhole) — 매 PvP exposure ↔ reward 의 trade.
|
||||
|
||||
> EVE Online은 단일 우주 샤드의 MMORPG로, 플레이어 주도 경제·정치·전쟁의 emergent 시스템 디자인의 정수다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[EVE Online]] (canonical)
|
||||
- Adjacent: [[Albion Online]] · [[Sandbox MMO]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** "디자이너는 시스템만 제공, 콘텐츠는 플레이어가 만든다" — 20년+ 운영의 비결.
|
||||
|
||||
**세부 내용:**
|
||||
- CCP Games(아이슬란드) 운영.
|
||||
- 단일 서버 30만+ 동시 접속 가능.
|
||||
- 플레이어 기반 경제: 모든 자원이 플레이어 생산.
|
||||
- 길드(Corp) → 동맹 → 연합 정치.
|
||||
- 유명 사건: B-R5RB 전투(\$300K 손실).
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,82 +1,168 @@
|
||||
---
|
||||
id: wiki-2026-0508-economic-analysis
|
||||
title: Economic Analysis
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Game Economy Audit, Virtual Economy Diagnostics, Sink-Faucet Analysis]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, economy, sink-faucet, virtual-currency]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: economy-modeling
|
||||
framework: virtual-economy
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Economic Analysis
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 game economy 는 매 closed system 의 매 thermodynamics — 매 source 와 매 sink 가 매 균형되어야 한다"**. 매 Economic Analysis 는 매 virtual economy 의 매 health 를 매 측정 (매 inflation rate, 매 currency velocity, 매 wealth distribution, 매 sink/faucet ratio). 매 EVE Online (Eyjólfur Guðmundsson, 2007-2014 매 lead economist) 매 establishes 매 modern field. 매 2026 — 매 Web3 game (Axie, Pixels) 의 매 inflation crash 매 lessons.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Source (Faucet)
|
||||
- 매 mob drop, 매 quest reward, 매 crafting output, 매 daily login.
|
||||
- 매 player labor → currency 의 매 conversion 율.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Sink (Drain)
|
||||
- 매 repair cost, 매 fast travel fee, 매 cosmetic purchase, 매 consumable.
|
||||
- 매 transaction tax, 매 destruction-on-loss (매 EVE PvP).
|
||||
|
||||
### 매 Health Metrics
|
||||
- **Inflation rate**: 매 month-over-month CPI (basket of goods).
|
||||
- **Velocity**: 매 transaction count / money supply.
|
||||
- **Gini coefficient**: 매 wealth concentration (0=equal, 1=one player).
|
||||
- **Sink/Faucet ratio**: 매 ideally ≈ 1.0 매 long-run.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. EVE Online — Quarterly Economic Report (QER) since 2007.
|
||||
2. WoW Token (2015) — 매 explicit gold sink + USD bridge.
|
||||
3. Path of Exile Currency (no gold) — 매 barter w/ orbs.
|
||||
4. Axie Infinity (2021 crash) — 매 SLP hyperinflation 의 매 case study.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Pattern 1: Faucet Audit
|
||||
```python
|
||||
from collections import defaultdict
|
||||
from datetime import date
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
def audit_faucets(transactions, period_days: int = 30):
|
||||
sources = defaultdict(float)
|
||||
for tx in transactions:
|
||||
if tx.type == 'creation': # currency materialized
|
||||
sources[tx.source_tag] += tx.amount
|
||||
total = sum(sources.values())
|
||||
return {
|
||||
tag: {'amount': amt, 'pct': amt / total}
|
||||
for tag, amt in sorted(sources.items(), key=lambda x: -x[1])
|
||||
}
|
||||
# Output: { "mob_drop": 45%, "quest": 30%, "daily_login": 15%, ... }
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Pattern 2: Sink Audit
|
||||
```typescript
|
||||
interface SinkEvent {
|
||||
player: PlayerId;
|
||||
amount: number;
|
||||
tag: 'repair' | 'fast_travel' | 'cosmetic' | 'tax' | 'destruction';
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
function sinkRatio(faucets: number, sinks: number): number {
|
||||
return sinks / faucets; // target ≈ 1.0
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
// If ratio < 0.8 → inflation accelerating
|
||||
// If ratio > 1.2 → deflation, frustration
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 3: Inflation Index (CPI)
|
||||
```rust
|
||||
struct PriceBasket {
|
||||
items: Vec<(ItemId, f64)>, // (item, weight)
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
impl PriceBasket {
|
||||
fn cpi_for(&self, market: &Market, baseline: &Snapshot) -> f64 {
|
||||
let current: f64 = self.items.iter()
|
||||
.map(|(id, w)| market.median_price(*id) * w)
|
||||
.sum();
|
||||
let base: f64 = self.items.iter()
|
||||
.map(|(id, w)| baseline.price(*id) * w)
|
||||
.sum();
|
||||
(current / base - 1.0) * 100.0 // % inflation
|
||||
}
|
||||
}
|
||||
// Healthy: -2% to +5% annual
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 4: Gini Coefficient
|
||||
```python
|
||||
def gini(wealths: list[float]) -> float:
|
||||
sorted_w = sorted(wealths)
|
||||
n = len(sorted_w)
|
||||
cum = sum((i + 1) * w for i, w in enumerate(sorted_w))
|
||||
total = sum(sorted_w)
|
||||
if total == 0: return 0.0
|
||||
return (2 * cum) / (n * total) - (n + 1) / n
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
# WoW server: ~0.85 typical (top 1% holds majority)
|
||||
# EVE: ~0.92 (extreme concentration in null-sec entities)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Pattern 5: Velocity Tracking
|
||||
```csharp
|
||||
public class VelocityTracker {
|
||||
public double DailyVelocity(DateOnly day) {
|
||||
var txVolume = TransactionsOn(day).Sum(t => t.Amount);
|
||||
var moneySupply = TotalCurrencyAt(day); // sum of all balances
|
||||
return txVolume / moneySupply;
|
||||
}
|
||||
// High velocity (>1.0) — active economy
|
||||
// Low velocity (<0.1) — hoarding, stagnation
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 inflation 매 detected | 매 sink 강화 (매 cosmetic price 인상, 매 tax 추가) |
|
||||
| 매 deflation 매 detected | 매 faucet 증가 또는 매 sink 완화 |
|
||||
| 매 wealth 양극화 | 매 progressive tax, 매 wealth-gated event 회피 |
|
||||
| 매 hoarding 매 detected | 매 inactivity decay, 매 expiry mechanic |
|
||||
| 매 PvP 가 economic engine | 매 destruction-on-loss (EVE 모델) |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 monthly economic report (CPI, Gini, velocity) — 매 EVE QER 모델.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Virtual-Economy-Design]] · [[Game-Economy-Theory]]
|
||||
- 변형: [[EVE-QER]] · [[WoW-Token-Model]] · [[POE-Barter-Economy]]
|
||||
- 응용: [[Hyperinflation-in-Closed-Loop-Systems]] · [[Sink-Faucet-Balancing]]
|
||||
- Adjacent: [[Player-Driven-Markets]] · [[Web3-Game-Economy]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 monthly economy report 자동 생성, 매 anomaly detection (sudden CPI spike), 매 sink/faucet audit.
|
||||
**언제 X**: 매 single-player game (매 economy 가 매 closed-loop 아님), 매 cosmetic-only economy.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **No sink**: 매 currency 가 매 perpetually 누적 → 매 hyperinflation (Axie SLP).
|
||||
- **Hidden faucet**: 매 dev 의 매 currency 발행이 매 measured 아님 → 매 surprise inflation.
|
||||
- **Static prices**: 매 NPC vendor 가 매 fixed price → 매 inflation 시 매 무료에 가까워짐.
|
||||
- **No transparency**: 매 player 가 매 economy 의 매 health 매 알 수 없음 → 매 trust 손실.
|
||||
- **Pay-to-print**: 매 real money 가 매 in-game currency 매 발행 → 매 P2W + inflation.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (CCP QER 2007-2024, Lehdonvirta & Castronova "Virtual Economies", Axie Infinity 2022 audit).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Game economy 의 source/sink/CPI/Gini/velocity 5-metric framework |
|
||||
|
||||
@@ -1,25 +1,189 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-6DB4E1
|
||||
category: "[[10_Wiki/💡 Topics/Game Design]]"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Elite-Athletic-Development"
|
||||
id: wiki-2026-0508-elite-athletic-development
|
||||
title: Elite Athletic Development
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Esports Training, Pro Player Pipeline, Talent Development System]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, esports, training-systems, performance]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: training-methodology
|
||||
framework: esports-pipeline
|
||||
---
|
||||
|
||||
# [[Elite-Athletic-Development]]
|
||||
# Elite Athletic Development
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 지식 요약 정보 추출 중...
|
||||
## 매 한 줄
|
||||
> **"매 deliberate practice × 매 cognitive load management 가 매 elite 를 만든다"**. 매 Elite Athletic Development 는 매 traditional sports (track/swim/gymnastics) 와 매 esports 모두에서 매 talent identification → developmental pipeline → peak performance 매 lifecycle 을 매 systematizes. 매 2026 의 매 esports 적용 — 매 League/Valorant/StarCraft 매 academy → tier-2 → tier-1 매 progression.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 구조화 작업 중...
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Game Design 분야의 자동 자산화 수행.
|
||||
### 매 Talent Identification
|
||||
- 매 reflex/APM/decision-speed 매 baseline test.
|
||||
- 매 game-IQ 측정 — 매 macro understanding, 매 pattern recognition.
|
||||
- 매 psychological — tilt resistance, coachability, growth mindset.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### 매 Deliberate Practice (Ericsson 1993)
|
||||
- 매 specific weakness 에 매 focused drill.
|
||||
- 매 immediate feedback (coach VOD review).
|
||||
- 매 stretch zone — 매 current ability 의 매 5-10% 위.
|
||||
|
||||
- Raw Source: [[00_Raw/2026-04-20/Elite-Athletic-Development.md]]
|
||||
---
|
||||
### 매 Cognitive Load Management
|
||||
- 매 daily scrim cap (매 4-6 시간 — 매 overpractice 회피).
|
||||
- 매 sleep priority (매 8h+ — Walker 2017 sleep-cognition link).
|
||||
- 매 stress periodization — 매 peak/recovery cycle.
|
||||
|
||||
### 매 응용
|
||||
1. Korean StarCraft house system (KeSPA era) — 매 prototypical pipeline.
|
||||
2. T1 (Faker org) — 매 league + academy + 매 trainee tier.
|
||||
3. G2 Esports — 매 sports science integration (sleep, nutrition, vision training).
|
||||
4. Sentinels Valorant — 매 mental performance coaching mainstream.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Pattern 1: Skill Tree per Role
|
||||
```python
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
@dataclass
|
||||
class SkillProfile:
|
||||
role: str # "ADC", "Support", "Mid", etc.
|
||||
mechanics: float = 0.0 # 0-100 last-hitting, kiting
|
||||
macro: float = 0.0 # rotations, vision
|
||||
communication: float = 0.0 # callouts, shotcalling
|
||||
mental: float = 0.0 # tilt resistance
|
||||
|
||||
def weakness(self, threshold: float = 70.0) -> list[str]:
|
||||
return [k for k, v in self.__dict__.items()
|
||||
if isinstance(v, float) and v < threshold]
|
||||
|
||||
# Coach uses .weakness() to assign drills
|
||||
```
|
||||
|
||||
### Pattern 2: VOD Review Loop
|
||||
```typescript
|
||||
interface VodReview {
|
||||
matchId: string;
|
||||
player: PlayerId;
|
||||
timestamps: Array<{ time: number; tag: 'mistake' | 'good' | 'meta' }>;
|
||||
followup_drill: DrillId;
|
||||
}
|
||||
|
||||
// Daily flow: scrim → VOD tag → drill → next scrim
|
||||
async function reviewCycle(player: Player) {
|
||||
const match = await scrim();
|
||||
const review = await coach.tag(match);
|
||||
const drills = generateDrills(review.timestamps);
|
||||
await player.practice(drills, durationMin: 60);
|
||||
}
|
||||
```
|
||||
|
||||
### Pattern 3: Periodization Schedule
|
||||
```rust
|
||||
// 4-week macrocycle
|
||||
enum Phase {
|
||||
Accumulation, // high volume, low intensity (week 1-2)
|
||||
Intensification, // lower volume, peak intensity (week 3)
|
||||
Realization, // tournament prep, taper (week 4)
|
||||
}
|
||||
|
||||
struct WeeklySchedule {
|
||||
scrim_hours: f32,
|
||||
solo_queue_hours: f32,
|
||||
review_hours: f32,
|
||||
rest_days: u8,
|
||||
}
|
||||
|
||||
fn schedule_for(phase: Phase) -> WeeklySchedule {
|
||||
match phase {
|
||||
Phase::Accumulation => WeeklySchedule { scrim_hours: 30.0, solo_queue_hours: 20.0, review_hours: 10.0, rest_days: 1 },
|
||||
Phase::Intensification=> WeeklySchedule { scrim_hours: 25.0, solo_queue_hours: 10.0, review_hours: 15.0, rest_days: 2 },
|
||||
Phase::Realization => WeeklySchedule { scrim_hours: 15.0, solo_queue_hours: 5.0, review_hours: 10.0, rest_days: 3 },
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Pattern 4: Cognitive Benchmark Test
|
||||
```python
|
||||
import time
|
||||
from typing import Callable
|
||||
|
||||
def reaction_time_test(stimuli_count: int = 30) -> dict:
|
||||
rts = []
|
||||
for _ in range(stimuli_count):
|
||||
wait_random_interval()
|
||||
start = time.perf_counter()
|
||||
await_keypress()
|
||||
rts.append(time.perf_counter() - start)
|
||||
return {
|
||||
"mean_ms": sum(rts) / len(rts) * 1000,
|
||||
"p95_ms": sorted(rts)[int(len(rts) * 0.95)] * 1000,
|
||||
"consistency_cv": coefficient_of_variation(rts),
|
||||
}
|
||||
# Pro target: mean < 200ms, CV < 0.15
|
||||
```
|
||||
|
||||
### Pattern 5: Mental Performance Tracking
|
||||
```csharp
|
||||
public class MentalLog {
|
||||
public DateOnly Date;
|
||||
public int SleepHours;
|
||||
public int TiltEvents; // count of self-reported tilt
|
||||
public int FocusRating; // 1-10 self-rating
|
||||
public string Notes;
|
||||
}
|
||||
|
||||
public class MentalCoach {
|
||||
public IEnumerable<string> WeeklyInsights(IEnumerable<MentalLog> logs) {
|
||||
var avgSleep = logs.Average(l => l.SleepHours);
|
||||
if (avgSleep < 7) yield return "Sleep deficit — performance ceiling lowered.";
|
||||
var tiltDays = logs.Count(l => l.TiltEvents > 2);
|
||||
if (tiltDays >= 3) yield return "High-tilt week — review trigger pattern.";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 prospect identification | 매 cognitive benchmark + game-IQ test + psych screen |
|
||||
| 매 weak point 발견 시 | 매 deliberate practice — 매 isolated drill, 매 immediate feedback |
|
||||
| 매 plateau 도달 | 매 periodization 변경 — 매 new stimulus |
|
||||
| 매 tournament prep | 매 taper week — 매 volume 감소, intensity 유지 |
|
||||
| 매 tilt 빈발 | 매 mental performance coach 의 매 introduction |
|
||||
|
||||
**기본값**: 매 deliberate practice + 매 sleep priority + 매 periodization 의 매 3-pillar.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Esports-Training-Systems]] · [[Performance-Science]]
|
||||
- 변형: [[KeSPA-House-System]] · [[Modern-Academy-Pipeline]]
|
||||
- 응용: [[Faker-Career-Longevity]] · [[Korean-StarCraft-Pipeline]]
|
||||
- Adjacent: [[Deliberate-Practice]] · [[Cognitive-Load-Theory]] · [[Sleep-Performance-Link]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 esports training program 설계, 매 VOD review automation, 매 player development pipeline 구축.
|
||||
**언제 X**: 매 casual game design (매 elite training 무관), 매 single-player content.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Overtraining**: 매 12시간+ scrim 매 매 매 burnout, 매 plateau 가속.
|
||||
- **No periodization**: 매 동일 강도 매 매 매 stagnation — 매 stimulus variation 부재.
|
||||
- **Sleep deprivation**: 매 매 night-shift practice — 매 cognitive ceiling 매 lower.
|
||||
- **Tilt-as-character**: 매 mental coaching 회피 — 매 career longevity 단축.
|
||||
- **Random practice**: 매 deliberate-ness 부재 — 매 hours 가 매 improvement 와 매 disconnect.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Ericsson 1993 deliberate practice, Walker 2017 Why We Sleep, T1/G2 published training methodology).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Elite athletic development 의 esports 적용 (deliberate practice + periodization) |
|
||||
|
||||
@@ -1,82 +1,166 @@
|
||||
---
|
||||
id: wiki-2026-0508-evolution-of-the-war-commander-c
|
||||
title: Evolution of the War Commander Combat Ecosystem
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [War Commander Meta, RTS Combat Evolution, Kixeye Design]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, rts, meta-evolution, combat-system]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-history
|
||||
framework: rts-meta
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Evolution of the War Commander Combat Ecosystem
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 unit roster 매 expansion 의 매 매 power creep 가 매 inevitable — 매 counter-meta 의 매 cyclic resurrection"**. 매 War Commander (Kixeye, 2011-) 의 매 combat ecosystem 매 12+ 년 evolution. 매 base raid → 매 PvP attack → 매 Faction war → 매 World Map operation 의 매 progressive layering. 매 combat unit cycle: 매 infantry → vehicle → air → 매 elite hybrid → 매 super weapon → 매 power-creep reset.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Era 1: Base Raid (2011-2013)
|
||||
- 매 simple base layout, 매 turret defense.
|
||||
- 매 unit triangle: infantry > vehicle > air > infantry.
|
||||
- 매 attack = pre-deploy + click-to-target.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Era 2: PvP Layer (2013-2015)
|
||||
- 매 base layout 매 critical — 매 wall, 매 turret placement.
|
||||
- 매 unit pathing AI — 매 path manipulation 매 가능.
|
||||
- 매 base layout meta — 매 'compound' 매 design 등장.
|
||||
|
||||
### 매 Era 3: Faction Wars (2015-2018)
|
||||
- 매 Survivor / Sentinel 매 의 매 chosen path.
|
||||
- 매 faction-exclusive unit (Hellfire, Liberator).
|
||||
- 매 weekly war — 매 leaderboard tier.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 Era 4: Power Creep & Reset (2018-2024)
|
||||
- 매 elite unit (Talon, Cryo Neo) — 매 prior unit 무력화.
|
||||
- 매 super weapon (Tomahawk, Mauler).
|
||||
- 매 prestige reset — 매 mid-tier player 매 retain.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### 매 응용
|
||||
1. Battle Pirates (Kixeye) — 매 동일 evolutionary pattern (naval).
|
||||
2. Boom Beach (Supercell) — 매 simplified war commander loop.
|
||||
3. State of Survival — 매 zombie skin, same combat ecosystem.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
## 💻 패턴
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Pattern 1: Unit Triangle
|
||||
```python
|
||||
from enum import Enum
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
class UnitClass(Enum):
|
||||
INFANTRY = "infantry"
|
||||
VEHICLE = "vehicle"
|
||||
AIR = "air"
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
DAMAGE_MATRIX = {
|
||||
UnitClass.INFANTRY: {UnitClass.AIR: 2.0, UnitClass.VEHICLE: 0.5, UnitClass.INFANTRY: 1.0},
|
||||
UnitClass.VEHICLE: {UnitClass.INFANTRY: 2.0, UnitClass.AIR: 0.5, UnitClass.VEHICLE: 1.0},
|
||||
UnitClass.AIR: {UnitClass.VEHICLE: 2.0, UnitClass.INFANTRY: 0.5, UnitClass.AIR: 1.0},
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
def damage(attacker: UnitClass, target: UnitClass, base: float) -> float:
|
||||
return base * DAMAGE_MATRIX[attacker][target]
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 2: Pathing AI
|
||||
```typescript
|
||||
interface Unit {
|
||||
pathfinder: 'AStar' | 'JPS';
|
||||
preferredTarget: 'turret' | 'wall' | 'resource';
|
||||
obstacleAvoidance: boolean;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
// Defender exploits: place high-value decoy to lure pathing
|
||||
function manipulatePath(base: Base, attackingUnit: Unit): Path {
|
||||
const decoy = base.findDecoy(attackingUnit.preferredTarget);
|
||||
return aStarTo(decoy); // attacker AI walks into killbox
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 3: Faction Exclusive Unit
|
||||
```rust
|
||||
enum Faction { Survivor, Sentinel }
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
struct Unit {
|
||||
name: String,
|
||||
faction: Option<Faction>, // None = neutral
|
||||
stats: UnitStats,
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
const HELLFIRE: Unit = Unit {
|
||||
name: "Hellfire".to_string(),
|
||||
faction: Some(Faction::Survivor),
|
||||
stats: UnitStats { hp: 50_000, dps: 8_000, range: 30 },
|
||||
};
|
||||
// Player commits to faction at level 30 — choice gates roster
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Pattern 4: Power Creep Detection
|
||||
```python
|
||||
def power_creep_index(units_over_time: dict[str, list[UnitStats]]) -> float:
|
||||
# Compare new tier DPS×HP to baseline tier
|
||||
baseline = avg_score(units_over_time['tier_1'])
|
||||
latest = avg_score(units_over_time['tier_5'])
|
||||
return latest / baseline
|
||||
# 1.0 = no creep; >2.0 = obvious creep (older units obsolete)
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Pattern 5: Prestige Reset
|
||||
```csharp
|
||||
public class PrestigeSystem {
|
||||
public void Prestige(Player p) {
|
||||
var equity = ComputeEquity(p); // resource value of base
|
||||
p.Reset();
|
||||
p.GiveCurrency(equity * 0.4); // 40% carryover
|
||||
p.GivePrestigeToken(1); // unlock new-tier perk
|
||||
}
|
||||
// Mid-tier player retains progress feeling
|
||||
// Engine: keep 5-year veterans engaged via meta-progression
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 power creep 발생 | 매 reset / prestige / rebalance — 매 old unit 매 viability 회복 |
|
||||
| 매 meta stagnation | 매 new unit injection (매 counter-meta 의 매 introduction) |
|
||||
| 매 mid-tier churn | 매 prestige reset + 매 alliance war 매 inclusion |
|
||||
| 매 long-term engagement | 매 progressive layering (base→PvP→faction→world map) |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: 매 quarterly meta refresh + 매 yearly prestige reset.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[RTS-Combat-Design]] · [[Mobile-Strategy-Game-Design]]
|
||||
- 변형: [[Battle-Pirates]] · [[Boom-Beach]] · [[State-of-Survival]]
|
||||
- 응용: [[Power-Creep-Management]] · [[Faction-System-Design]]
|
||||
- Adjacent: [[Pathfinding-Exploit]] · [[Prestige-Reset-Pattern]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 RTS meta 분석, 매 unit roster expansion 설계, 매 long-term engagement strategy.
|
||||
**언제 X**: 매 single-match RTS (매 StarCraft 같은 매 ladder game) — 매 meta evolution 의 매 different cadence.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Unchecked power creep**: 매 새 unit 이 매 old unit 무력화 — 매 ftp player 매 churn.
|
||||
- **No counter-meta injection**: 매 dominant strategy 가 매 perpetual — 매 rock-paper-scissors 붕괴.
|
||||
- **Faction lockout**: 매 faction choice 가 매 reversible 아님 + 매 imbalanced — 매 frustration.
|
||||
- **Pathing exploitable but unfixed**: 매 decoy 매 abuse — 매 PvP integrity 손상.
|
||||
- **No prestige path**: 매 endgame 의 매 stagnation — 매 veteran churn.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Kixeye dev blogs 2011-2020, GameSpot retrospectives, community meta archives).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — War Commander 의 4-era combat evolution + power creep management |
|
||||
|
||||
@@ -1,80 +1,172 @@
|
||||
---
|
||||
id: wiki-2026-0508-final-fantasy-xv-a-new-empire
|
||||
title: Final Fantasy XV A New Empire
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Final Fantasy XV - A New Empire
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [FFXV ANE, Mobile Strike Reskin, MZ FFXV]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mobile-4x, monetization, case-study]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-analysis
|
||||
framework: mobile-4x
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Final Fantasy XV - A New Empire
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 IP licensing × 매 reskinned Mobile Strike engine 의 매 \$ 수익화 case study"**. 매 2017 Epic Action (Machine Zone subsidiary) 매 출시. 매 Game of War 의 매 same engine 위에 매 FFXV brand 매 layer. 매 deceptive cinematic ad campaign — 매 actual game ≠ 매 advertised gameplay. 매 mobile 4X 매 dark pattern 의 매 textbook.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> FFXV: A New Empire는 모바일 4X SLG에 FFXV IP를 결합한 작품으로, IP 라이선스가 게임 디자인에 미치는 효과를 잘 보여준다.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Reskin Strategy
|
||||
- 매 Game of War: Fire Age (2014) 매 engine 재사용.
|
||||
- 매 Mobile Strike (2015) — 매 동일 engine, military skin.
|
||||
- 매 FFXV ANE (2017) — 매 동일 engine, Square Enix IP skin.
|
||||
- 매 economic model: 매 IP license fee < 매 marketing-driven UA lift.
|
||||
|
||||
> FFXV: A New Empire는 FFXV IP 라이선스 모바일 SLG로, 4X 전략 코어에 IP 자산을 입혀 강력 매출을 만든 모델이다.
|
||||
### 매 Deceptive Advertising
|
||||
- 매 ad video: 매 Noctis 매 cinematic combat, 매 console-quality.
|
||||
- 매 actual game: 매 timer-based base building, 매 upgrade queue.
|
||||
- 매 FTC 매 2018 case (MZ 와 별도 settlement).
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Whale Monetization
|
||||
- 매 top 1% 매 spender 가 매 95% revenue 차지.
|
||||
- 매 alliance war — 매 \$10K+ shield/troop pack.
|
||||
- 매 VIP level 매 grind-or-pay gate.
|
||||
|
||||
**추출된 패턴:** "건설+동맹+PvP" 4X SLG 표준 위에 IP 스킨 — 핵심 디자인은 다른 SLG와 거의 동일하지만 IP가 차별화 신호.
|
||||
### 매 응용
|
||||
1. Lords Mobile (IGG, 2016) — 매 동일 4X loop, more polish.
|
||||
2. Rise of Kingdoms (Lilith, 2018) — 매 evolved 4X w/ better systems.
|
||||
3. State of Survival (FunPlus, 2019) — 매 zombie skin, same loop.
|
||||
4. Top War (Topwar Studio, 2020) — 매 merge + 4X hybrid.
|
||||
|
||||
**세부 내용:**
|
||||
- Epic Action(현 Epic Games)·Machine Zone 류 SLG 패턴.
|
||||
- 영웅: FFXV 캐릭터 라이선스.
|
||||
- BM: VIP, 패키지, 동맹 자원 결제.
|
||||
- 마케팅 ROAS가 SLG의 핵심.
|
||||
- 일부 P2W 비판.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 1: Build Timer Monetization
|
||||
```typescript
|
||||
interface BuildJob {
|
||||
buildingId: string;
|
||||
startTime: Date;
|
||||
duration: number; // seconds
|
||||
speedupCost: number; // gems to skip
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function computeSpeedupCost(remainingSec: number): number {
|
||||
// Per-minute pricing — monotonic upward
|
||||
// 1 min = 1 gem; 1 hour = 60 gems; 1 day = 1440 gems
|
||||
return Math.ceil(remainingSec / 60);
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
// Whale path: stack 24h+ jobs, instant-finish for $200+ pack
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Pattern 2: Alliance Gift Cascade
|
||||
```python
|
||||
# Player A buys $99 pack → triggers gift to all 100 alliance members
|
||||
class AlliancePack:
|
||||
def purchase(self, buyer: Player, alliance: Alliance):
|
||||
buyer.inventory.add(buyer_rewards)
|
||||
for member in alliance.members:
|
||||
member.inventory.add(small_gift) # social pressure to reciprocate
|
||||
# Network effect — 1 whale purchase pulls 5-10 minnows into spending
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 3: Shield Mechanic
|
||||
```rust
|
||||
struct PeaceShield {
|
||||
duration_hours: u32,
|
||||
cost_gems: u32,
|
||||
breaks_on_attack: bool, // shield drops if you attack
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
// Pricing tier (typical mobile 4X)
|
||||
const SHIELDS: &[PeaceShield] = &[
|
||||
PeaceShield { duration_hours: 8, cost_gems: 200, breaks_on_attack: true },
|
||||
PeaceShield { duration_hours: 24, cost_gems: 500, breaks_on_attack: true },
|
||||
PeaceShield { duration_hours: 168, cost_gems: 3000, breaks_on_attack: true }, // 1 week
|
||||
];
|
||||
// Whale always-shielded except during owned attack windows
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Pattern 4: VIP Level Gate
|
||||
```csharp
|
||||
public class VipSystem {
|
||||
public int CurrentLevel { get; private set; }
|
||||
public long PointsSpent { get; private set; }
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
public void OnPurchase(decimal usd) {
|
||||
PointsSpent += (long)(usd * 100); // $1 = 100 VIP points
|
||||
RecalcLevel();
|
||||
}
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
public bool CanUseFeature(FeatureId f) {
|
||||
// Gate convenience features behind VIP
|
||||
// VIP 6: auto-collect resources
|
||||
// VIP 10: 2x march queue
|
||||
// VIP 15: instant troop training
|
||||
return CurrentLevel >= FeatureRequirement[f];
|
||||
}
|
||||
}
|
||||
// VIP 15 typically requires ~$5,000 lifetime spend
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Pattern 5: Cinematic Ad vs. Reality
|
||||
```yaml
|
||||
# Ad creative spec (deceptive)
|
||||
ad_video:
|
||||
duration: 30s
|
||||
content: pre-rendered cinematic of Noctis combat
|
||||
gameplay_shown: false
|
||||
install_promise: "Play as Noctis, fight Behemoths"
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
# Actual gameplay
|
||||
game:
|
||||
primary_loop: tap-build-wait
|
||||
combat: numerical resolution (no real-time)
|
||||
noctis_appearance: static portrait in dialog
|
||||
behemoth: button-tap event
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 IP licensing 가능 시 | 매 reskin 으로 매 UA boost (단 brand reputation cost 고려) |
|
||||
| 매 ad creative 매 결정 | 매 actual gameplay 표시 (FTC 규제 회피) |
|
||||
| 매 monetization tier | F2P → minnow → dolphin → whale (95-5-1 룰) |
|
||||
| 매 alliance social pressure | 매 gift cascade + alliance war |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: 매 ethical monetization — 매 deceptive ad 회피, 매 cosmetic-driven 우선 (매 long-term LTV 위해).
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Monetization_Strategy]] · [[Mobile-4X-Design]]
|
||||
- 변형: [[Game-of-War]] · [[Mobile-Strike]] · [[Lords-Mobile]]
|
||||
- 응용: [[Whale-Monetization]] · [[Alliance-War-Mechanic]]
|
||||
- Adjacent: [[Deceptive-Ad-Patterns]] · [[Dark-Pattern-Game-Design]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 mobile 4X monetization 분석, 매 IP licensing strategy 평가, 매 dark pattern 식별.
|
||||
**언제 X**: 매 ethical game design 가이드 (매 case study 는 매 negative example 일 뿐).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Deceptive cinematic ad**: 매 ad ≠ 매 game — 매 install fraud, FTC risk.
|
||||
- **Pay-to-win exclusivity**: 매 whale only content — 매 mid-tier player churn.
|
||||
- **Shield abuse**: 매 perma-shield + offensive 매 windows — 매 PvP integrity 파괴.
|
||||
- **VIP gate convenience**: 매 quality-of-life 매 paywall — 매 F2P retention 저하.
|
||||
- **Reskin without rework**: 매 IP value 매 dilute — 매 brand long-term damage.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Sensor Tower revenue data, MZ FTC settlement docs, Square Enix licensing disclosure).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — FFXV ANE 의 reskin/deceptive ad/whale monetization case study |
|
||||
|
||||
@@ -1,78 +1,187 @@
|
||||
---
|
||||
id: wiki-2026-0508-fixed-time-step-vs-variable-time
|
||||
title: Fixed Time Step vs Variable Time Step
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Game Loop, Timestep, Fixed Update, Variable Update]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.95
|
||||
verification_status: applied
|
||||
tags: [game-design, game-loop, simulation, physics, determinism]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: cpp
|
||||
framework: game-loop
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Fixed Time Step vs Variable Time Step
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 simulation 의 fixed Δt 의 advance, render 의 variable Δt 의 interpolate"**. 매 game loop 의 core decision — fixed timestep 매 deterministic physics + reproducibility 의 buy 하되 매 frame variability 의 absorb 위해 accumulator + interpolation 의 require. 2026 매 Glenn Fiedler "Fix Your Timestep!" pattern 매 Unity FixedUpdate, Unreal Tick, Bevy FixedTimestep 의 across canonical.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 고정 타임스텝과 가변 타임스텝은 게임 루프의 두 패러다임으로, 시뮬레이션 안정성 vs 렌더 부드러움의 트레이드오프를 만든다.
|
||||
### 매 Fixed Timestep
|
||||
- 매 simulation 매 constant Δt (e.g. 16.67ms = 60Hz) 의 always advance.
|
||||
- **Pros**: Deterministic, lock-step multiplayer-friendly, stable physics.
|
||||
- **Cons**: 매 spiral-of-death (frame slow → catch-up → slower → ...).
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Variable Timestep
|
||||
- 매 simulation Δt 매 wall-clock frame time 의 follow.
|
||||
- **Pros**: Simpler, no accumulator, no interpolation.
|
||||
- **Cons**: Non-deterministic, physics tunneling, replay-incompatible.
|
||||
|
||||
**추출된 패턴:** 물리·게임 로직은 fixed step, 렌더는 variable step → 두 클락을 분리해 각자 최적화.
|
||||
### 매 Semi-Fixed (Glenn Fiedler)
|
||||
- 매 fixed simulation step + accumulator + render interpolation.
|
||||
- 매 industry standard 의 2026 — Unity, Unreal, Bevy 의 default.
|
||||
|
||||
**세부 내용:**
|
||||
- Fixed: 매 프레임 동일 dt → 결정론적 시뮬레이션.
|
||||
- Variable: 실제 경과 시간 사용 → 부드러운 렌더.
|
||||
- 표준: Glenn Fiedler "Fix Your Timestep".
|
||||
- 보간: 렌더 시점에 시뮬레이션 상태 보간.
|
||||
- 네트워크: lockstep 시뮬레이션과 결합.
|
||||
### 매 응용
|
||||
1. Physics-heavy game (driving, fighting) — fixed mandatory.
|
||||
2. Lock-step multiplayer (RTS, fighting games) — fixed + deterministic math.
|
||||
3. Casual single-player — variable acceptable.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 💻 패턴
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Naive variable timestep
|
||||
```cpp
|
||||
double previous = now();
|
||||
while (running) {
|
||||
double current = now();
|
||||
double dt = current - previous;
|
||||
previous = current;
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
update(dt); // 매 dt 매 frame 의 따라 fluctuate
|
||||
render();
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Fixed timestep with accumulator
|
||||
```cpp
|
||||
constexpr double DT = 1.0 / 60.0; // 16.67ms
|
||||
double accumulator = 0.0;
|
||||
double previous = now();
|
||||
State current_state, previous_state;
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
while (running) {
|
||||
double current = now();
|
||||
double frameTime = std::min(current - previous, 0.25); // 매 spiral 의 cap
|
||||
previous = current;
|
||||
accumulator += frameTime;
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
while (accumulator >= DT) {
|
||||
previous_state = current_state;
|
||||
integrate(current_state, DT);
|
||||
accumulator -= DT;
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
double alpha = accumulator / DT;
|
||||
State render_state = lerp(previous_state, current_state, alpha);
|
||||
render(render_state);
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Determinism-safe integration (fixed-point)
|
||||
```cpp
|
||||
// 매 lock-step multiplayer — float drift 의 avoid
|
||||
struct Fixed64 {
|
||||
int64_t raw; // 매 32.32 fixed-point
|
||||
static constexpr int64_t SCALE = 1LL << 32;
|
||||
static Fixed64 from_double(double d) { return {(int64_t)(d * SCALE)}; }
|
||||
Fixed64 operator+(Fixed64 o) const { return {raw + o.raw}; }
|
||||
Fixed64 operator*(Fixed64 o) const { return {(raw * o.raw) >> 32}; }
|
||||
};
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Physics tunneling guard (continuous collision)
|
||||
```cpp
|
||||
// 매 variable / large Δt 매 fast object 매 thin wall 의 tunnel
|
||||
bool sweepAABB(AABB a, Vec2 vel, AABB b, double dt, double& tHit) {
|
||||
Vec2 inv = { vel.x ? 1.0 / vel.x : 1e30, vel.y ? 1.0 / vel.y : 1e30 };
|
||||
double tEnter = std::max(
|
||||
(b.min.x - a.max.x) * inv.x,
|
||||
(b.min.y - a.max.y) * inv.y
|
||||
);
|
||||
double tExit = std::min(
|
||||
(b.max.x - a.min.x) * inv.x,
|
||||
(b.max.y - a.min.y) * inv.y
|
||||
);
|
||||
if (tEnter > tExit || tEnter > dt || tEnter < 0) return false;
|
||||
tHit = tEnter;
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Unity-style separation
|
||||
```csharp
|
||||
public class Player : MonoBehaviour {
|
||||
public float speed = 5f;
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
void Update() {
|
||||
// 매 input + visuals 의 variable Δt
|
||||
float h = Input.GetAxis("Horizontal");
|
||||
// 매 input buffer 의 only X 매 visual extrapolation 의 do
|
||||
}
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
void FixedUpdate() {
|
||||
// 매 physics 의 fixed Δt — Time.fixedDeltaTime
|
||||
rigidbody.MovePosition(transform.position + dir * speed * Time.fixedDeltaTime);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### Bevy fixed timestep
|
||||
```rust
|
||||
use bevy::prelude::*;
|
||||
use bevy::time::common_conditions::on_timer;
|
||||
use std::time::Duration;
|
||||
|
||||
fn main() {
|
||||
App::new()
|
||||
.add_plugins(DefaultPlugins)
|
||||
.insert_resource(Time::<Fixed>::from_hz(60.0))
|
||||
.add_systems(FixedUpdate, physics_step)
|
||||
.add_systems(Update, render_step)
|
||||
.run();
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Lock-step multiplayer (RTS, fighting) | 매 fixed + fixed-point math 의 mandatory |
|
||||
| Physics-heavy single-player | 매 fixed + accumulator + interpolation |
|
||||
| Casual / turn-based | 매 variable timestep 의 acceptable |
|
||||
| Replay / netcode rollback | 매 fixed + deterministic |
|
||||
| Educational / prototype | 매 variable 의 simplicity |
|
||||
|
||||
**기본값**: 매 Glenn Fiedler 의 fixed-with-accumulator + interpolation pattern.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Loop]] · [[Simulation Architecture]]
|
||||
- 변형: [[Lock-step Multiplayer]] · [[Rollback Netcode]] · [[Frame Pacing]]
|
||||
- 응용: [[Physics]] · [[Continuous Collision Detection]] · [[Beat Saber]]
|
||||
- Adjacent: [[Determinism]] · [[Spiral of Death]] · [[Frame Interpolation]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Loop architecture sketch, accumulator boilerplate, framework migration plan.
|
||||
**언제 X**: Hard-realtime kernel scheduling, low-level platform timer tuning.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Variable for physics**: 매 driving / fighting / platformer 매 stutter + tunneling.
|
||||
- **No spiral cap**: 매 GPU stall 매 simulation 의 catch-up loop 의 lock.
|
||||
- **Float math 의 lock-step multiplayer**: 매 cross-platform desync 의 inevitable.
|
||||
- **Render-state == sim-state**: 매 interpolation 의 absent 매 visual stutter.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Glenn Fiedler "Fix Your Timestep!" 2004/2018, Unity Manual, Unreal Tick docs, Bevy book 2025).
|
||||
- 신뢰도 A+.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Fix-Your-Timestep canonical pattern, Unity/Bevy examples |
|
||||
|
||||
@@ -1,78 +1,182 @@
|
||||
---
|
||||
id: wiki-2026-0508-gacha-mechanics-analysis
|
||||
title: Gacha Mechanics Analysis
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Gacha, Loot Box Mechanics, 가챠]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [gacha, monetization, probability, f2p]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: unity-c#
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Gacha Mechanics Analysis
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 randomized item draw 의 매 monetization-engineered probability"**. 매 1965 Capsule-Toy origin → 매 2010 Mobage/Puzzle&Dragons 의 mobile breakthrough → 매 2024 Genshin/HSR 의 매 $4B+ annual revenue. 매 pity / soft-pity / rate-up 의 매 mathematical scaffolding 의 매 retention engine.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 가챠는 확률 기반 무작위 보상 시스템으로, 가변 비율 강화 스케줄과 손실 회피 심리를 활용해 ARPPU를 끌어올리지만 규제·윤리 리스크도 동반한다.
|
||||
### 매 매 Probability layer
|
||||
- **Base rate**: 매 5★ char ~0.6%, 5★ weapon ~0.7% (Genshin standard).
|
||||
- **Soft pity**: 매 pull 76+ 부터 rate ramp — 매 89-pull guarantee 의 hard ceiling.
|
||||
- **50/50 mechanic**: 매 featured banner 의 매 probabilistic exclusivity.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Banner architecture
|
||||
- Limited / standard / weapon / chronicled — 매 4 type rotation.
|
||||
- 매 41-day cycle 의 매 LiveOps cadence.
|
||||
|
||||
**추출된 패턴:** "확률 공개 + 천장(pity) + 픽업 → 신뢰 구축"이 핵심. 한국·중국·일본 시장에서 천장 시스템이 사실상 표준.
|
||||
### 매 응용
|
||||
1. Genshin Impact (HoYoverse, $5B+ lifetime).
|
||||
2. Honkai: Star Rail.
|
||||
3. Fate/Grand Order (10년+ run).
|
||||
4. Pokémon Masters EX.
|
||||
|
||||
**세부 내용:**
|
||||
- **확률 구조**: 일반·고급·최고급의 다층 확률 (예: 0.7%, 5.85%, 93.45%).
|
||||
- **천장(Pity)**: N회 미만 픽업 보장 — 손실 회피 진정.
|
||||
- **픽업/스텝업**: 특정 캐릭터 확률 상승 또는 단계별 비용 감소.
|
||||
- **규제 동향**: 일본 콤프 가챠 금지, 한국 확률 공개 의무화, 중국 최소 보장 의무.
|
||||
- **데이터 지표**: ARPPU, 천장 도달률, 가챠 의존도 비율.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Gacha pull simulation (TypeScript)
|
||||
```typescript
|
||||
type Item = { id: string; rarity: 3 | 4 | 5 };
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
interface BannerConfig {
|
||||
baseRate5: number; // 0.006
|
||||
softPityStart: number; // 74
|
||||
hardPity: number; // 90
|
||||
rateUp5: Item;
|
||||
standard5: Item[];
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
class GachaSystem {
|
||||
private pityCounter = 0;
|
||||
private guaranteed = false; // 50/50 lost flag
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
pull(cfg: BannerConfig): Item {
|
||||
this.pityCounter++;
|
||||
const rate = this.computeRate(cfg);
|
||||
const roll = Math.random();
|
||||
if (roll < rate || this.pityCounter >= cfg.hardPity) {
|
||||
this.pityCounter = 0;
|
||||
return this.resolve5Star(cfg);
|
||||
}
|
||||
return this.lowerRarity();
|
||||
}
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
private computeRate(cfg: BannerConfig): number {
|
||||
if (this.pityCounter < cfg.softPityStart) return cfg.baseRate5;
|
||||
// Linear ramp: +6% per pull past soft-pity
|
||||
const extra = (this.pityCounter - cfg.softPityStart + 1) * 0.06;
|
||||
return Math.min(1, cfg.baseRate5 + extra);
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
private resolve5Star(cfg: BannerConfig): Item {
|
||||
if (this.guaranteed || Math.random() < 0.5) {
|
||||
this.guaranteed = false;
|
||||
return cfg.rateUp5;
|
||||
}
|
||||
this.guaranteed = true;
|
||||
return cfg.standard5[Math.floor(Math.random() * cfg.standard5.length)];
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
private lowerRarity(): Item {
|
||||
return { id: '4star_dummy', rarity: 4 };
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Expected pulls (Monte Carlo)
|
||||
```typescript
|
||||
function expectedPullsToTarget(trials = 100_000): number {
|
||||
let total = 0;
|
||||
for (let i = 0; i < trials; i++) {
|
||||
const sys = new GachaSystem();
|
||||
let pulls = 0, got = false;
|
||||
while (!got) {
|
||||
pulls++;
|
||||
const item = sys.pull(GENSHIN_LIMITED);
|
||||
if (item.id === GENSHIN_LIMITED.rateUp5.id) got = true;
|
||||
}
|
||||
total += pulls;
|
||||
}
|
||||
return total / trials; // ~ 93 pulls 의 매 평균
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Pity-curve visualization (Python-equivalent)
|
||||
```typescript
|
||||
function pityCurve(cfg: BannerConfig): number[] {
|
||||
return Array.from({ length: cfg.hardPity }, (_, i) => {
|
||||
const counter = i + 1;
|
||||
if (counter < cfg.softPityStart) return cfg.baseRate5;
|
||||
return Math.min(1, cfg.baseRate5 + (counter - cfg.softPityStart + 1) * 0.06);
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Loss-aversion bundle pricing
|
||||
```typescript
|
||||
function primogemBundle(usd: number): { gems: number; effectiveRate: number } {
|
||||
const tiers = [
|
||||
{ usd: 0.99, gems: 60 },
|
||||
{ usd: 4.99, gems: 330 },
|
||||
{ usd: 29.99, gems: 1980 },
|
||||
{ usd: 99.99, gems: 6480 },
|
||||
];
|
||||
// 매 large bundle 의 매 17% volume discount — anchor pricing.
|
||||
const tier = tiers.find(t => t.usd >= usd) ?? tiers.at(-1)!;
|
||||
return { gems: tier.gems, effectiveRate: tier.gems / tier.usd };
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Spender segmentation
|
||||
```typescript
|
||||
enum Segment { Minnow, Dolphin, Whale, Krill }
|
||||
function segment(monthlySpend: number): Segment {
|
||||
if (monthlySpend >= 1000) return Segment.Whale;
|
||||
if (monthlySpend >= 100) return Segment.Dolphin;
|
||||
if (monthlySpend >= 5) return Segment.Minnow;
|
||||
return Segment.Krill;
|
||||
}
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Hero collector RPG | Soft-pity + rate-up banner |
|
||||
| Weapon system | Separate weapon banner (1.85x rate, deeper pity) |
|
||||
| Casual mid-core | Box gacha (without-replacement) |
|
||||
| Regulated market (BE, NL) | Direct purchase + cosmetic loot |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: Soft-pity at 74 + hard-pity at 90 + 50/50 + guarantee — 매 Genshin template.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Monetization Strategy]] · [[Loot Box]]
|
||||
- 변형: [[Box Gacha]] · [[Step-up Gacha]]
|
||||
- 응용: [[Genshin Impact]] · [[Honkai Star Rail]] · [[포켓몬 마스터즈 EX(Pokemon Masters EX)]]
|
||||
- Adjacent: [[Whale Players]] · [[Dynamic Offers]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: pull-simulation, banner balancing, EV computation.
|
||||
**언제 X**: 매 regulatory legal analysis (변호사 영역).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No pity**: 매 unbounded variance 의 매 churn driver.
|
||||
- **Hidden rates**: 2017 EA Battlefront II 의 backlash 의 educational case.
|
||||
- **Fake-rate-up**: 매 EV mismatch 의 매 trust collapse.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (HoYoverse banner data, Bungie GDC 2023, China NPPA 2017 disclosure rules).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full gacha probability + simulation patterns |
|
||||
|
||||
@@ -1,82 +1,167 @@
|
||||
---
|
||||
id: wiki-2026-0508-gait-analysis-laboratory
|
||||
title: Gait Analysis Laboratory
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Gait Lab, Motion Capture Lab, Biomechanics Lab]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [biomechanics, motion-capture, sports-science, vr, game-design]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: motion-capture
|
||||
framework: biomechanics
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Gait Analysis Laboratory
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 marker-based optical mocap + force plates + EMG 의 fusion 의 movement biomechanics 의 reconstruct"**. Gait analysis lab 매 clinical (cerebral palsy, post-stroke rehab) + sports science (running economy, ACL injury risk) + game/VR design (avatar locomotion authenticity) 의 cross 매 reference platform. 2026 매 Vicon, OptiTrack, Qualisys 매 dominant + markerless (Theia3D, OpenCap) 매 disrupting.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Stack
|
||||
- **Optical mocap**: 매 12-24 IR cameras + retroreflective markers (Vicon Plug-in Gait, IOR).
|
||||
- **Force plates**: 매 AMTI / Kistler 매 ground reaction force.
|
||||
- **EMG**: 매 surface electrodes 매 muscle activation timing.
|
||||
- **IMU**: 매 inertial sensors 매 portable / out-of-lab.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Outputs
|
||||
- **Spatiotemporal**: 매 step length, cadence, stance/swing ratio.
|
||||
- **Kinematics**: 매 joint angles (hip flex, knee flex, ankle dorsi).
|
||||
- **Kinetics**: 매 joint moments + powers (inverse dynamics).
|
||||
- **EMG envelopes**: 매 muscle activation patterns.
|
||||
|
||||
### 매 응용
|
||||
1. Clinical — cerebral palsy surgical planning (Gillette, Shriners protocols).
|
||||
2. Sports — ACL injury risk screening (Drop Vertical Jump test).
|
||||
3. Game/VR — authentic locomotion data 의 IK 또는 ML retargeting.
|
||||
4. Exergaming — 매 VR fitness app 매 user gait 의 detect 의 calibration.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### C3D parsing (mocap interchange format)
|
||||
```python
|
||||
import ezc3d
|
||||
import numpy as np
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
c = ezc3d.c3d('walk_trial.c3d')
|
||||
markers = c['data']['points'] # shape: (4, n_markers, n_frames)
|
||||
labels = c['parameters']['POINT']['LABELS']['value']
|
||||
rate = c['header']['points']['frame_rate']
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
heel_idx = labels.index('RHEE')
|
||||
heel_z = markers[2, heel_idx, :] # vertical trajectory
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Heel-strike detection
|
||||
```python
|
||||
from scipy.signal import find_peaks
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
def detect_heel_strikes(heel_z: np.ndarray, rate: float) -> np.ndarray:
|
||||
# 매 heel marker 의 vertical low + GRF onset 의 align
|
||||
inverted = -heel_z
|
||||
peaks, _ = find_peaks(inverted, distance=int(rate * 0.5))
|
||||
return peaks # frame indices
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
heel_strikes = detect_heel_strikes(heel_z, rate)
|
||||
stride_times = np.diff(heel_strikes) / rate
|
||||
cadence = 60.0 / np.mean(stride_times)
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Joint angle (knee flexion)
|
||||
```python
|
||||
def knee_angle(hip: np.ndarray, knee: np.ndarray, ankle: np.ndarray) -> np.ndarray:
|
||||
thigh = hip - knee # (3, n_frames)
|
||||
shank = ankle - knee
|
||||
cos_t = np.einsum('ij,ij->j', thigh, shank) / (
|
||||
np.linalg.norm(thigh, axis=0) * np.linalg.norm(shank, axis=0)
|
||||
)
|
||||
return 180.0 - np.degrees(np.arccos(np.clip(cos_t, -1, 1)))
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Inverse dynamics (Newton-Euler, sagittal)
|
||||
```python
|
||||
def ankle_moment(grf: np.ndarray, cop: np.ndarray, ankle: np.ndarray,
|
||||
segment_mass: float, segment_com: np.ndarray, segment_acc: np.ndarray,
|
||||
g: float = 9.81) -> np.ndarray:
|
||||
# 매 simplified — full 3D 매 segment inertia tensor 의 require
|
||||
r = cop - ankle
|
||||
M_grf = np.cross(r, grf)
|
||||
inertia_term = segment_mass * (segment_acc + np.array([0, 0, g]))
|
||||
M_inertia = np.cross(segment_com - ankle, inertia_term)
|
||||
return M_grf - M_inertia
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Markerless (OpenPose / OpenCap-style)
|
||||
```python
|
||||
# 매 multi-view 2D keypoints → 3D triangulation
|
||||
def triangulate(kp_views: list, P_views: list) -> np.ndarray:
|
||||
"""
|
||||
kp_views: [n_views] of (n_joints, 2)
|
||||
P_views: [n_views] of (3, 4) projection matrices
|
||||
"""
|
||||
A = []
|
||||
for kp, P in zip(kp_views, P_views):
|
||||
for j, (u, v) in enumerate(kp):
|
||||
A.append(u * P[2] - P[0])
|
||||
A.append(v * P[2] - P[1])
|
||||
A = np.array(A)
|
||||
_, _, Vt = np.linalg.svd(A)
|
||||
X = Vt[-1]
|
||||
return X[:3] / X[3]
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Gait deviation index (GDI)
|
||||
```python
|
||||
def gait_deviation_index(subject_kinematics: np.ndarray,
|
||||
reference_pcs: np.ndarray,
|
||||
reference_mean: np.ndarray) -> float:
|
||||
# GDI: 매 subject 의 normal-database 의 PCA-distance 의 measure
|
||||
centered = subject_kinematics.flatten() - reference_mean
|
||||
scores = reference_pcs @ centered
|
||||
raw_distance = np.linalg.norm(scores[:15])
|
||||
return 100 * np.exp(-(raw_distance - REFERENCE_MEAN) / REFERENCE_STD)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Clinical CP / stroke | Vicon Plug-in Gait + force plates + EMG |
|
||||
| Field sports screening | IMU + markerless video (OpenCap) |
|
||||
| VR locomotion authoring | Mocap → IK retargeting + ML smoothing |
|
||||
| Exergame user calibration | Single-IMU + heuristic (no full lab needed) |
|
||||
| Research-grade longitudinal | Marker-based + standardized protocol |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 매 marker-based optical + force plates 매 gold standard, markerless 매 augmenting.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Biomechanics-of-Injury]] · [[Biomedical-Engineering]] · [[Sports Science]]
|
||||
- 변형: [[Markerless Motion Capture]] · [[IMU-based Gait]] · [[OpenCap]]
|
||||
- 응용: [[가상현실(VR) 자전거 시뮬레이터]] · [[엑서게임(Exergaming)]] · [[Beat Saber]]
|
||||
- Adjacent: [[VR Sickness]] · [[Elite-Athletic-Development]] · [[동작 속도(Movement Speed)]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Protocol drafting, joint-angle reporting templates, literature synthesis.
|
||||
**언제 X**: Clinical diagnosis, precise inverse-dynamics validation (deterministic numerics 의 require).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **Marker placement variability**: 매 inter-rater error 매 GDI 의 swamp.
|
||||
- **No force-plate sync**: 매 inverse dynamics 매 unreliable.
|
||||
- **Markerless 만 of clinical**: 매 2026 markerless 매 augment 만 — replace 매 X.
|
||||
- **Single trial 의 conclusion**: 매 stride-to-stride variability 매 high — 매 5+ strides 의 average.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Vicon docs, Winter "Biomechanics and Motor Control", Gillette protocol papers, OpenCap Stanford 2022-2024).
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — gait lab stack, kinematics, GDI, markerless integration |
|
||||
|
||||
@@ -1,78 +1,171 @@
|
||||
---
|
||||
id: wiki-2026-0508-game-monetization-strategy
|
||||
title: Game Monetization Strategy
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Game Monetization, F2P Design, IAP Strategy, LTV Optimization]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, monetization, f2p, ltv]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: business-design
|
||||
framework: f2p-monetization
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Game Monetization Strategy
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 monetization 은 매 retention × 매 conversion × 매 ARPPU 의 매 product"**. 매 Game Monetization Strategy 는 매 LTV (Lifetime Value) 의 매 maximization — 매 F2P, premium, subscription, hybrid 매 model. 매 2026 의 매 dominant: 매 battle pass + cosmetic shop + 매 ethical IAP. 매 Apple ATT (2021) 매 이후 매 attribution 변화, 매 GDPR/DMA (EU) 매 regulation 매 영향.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 수익화 전략은 게임 장르·유저층·LTV 목표에 따라 광고·IAP·패스·구독을 어떻게 결합할지 결정하는 메타 디자인이다.
|
||||
### 매 Monetization Models
|
||||
- **Premium**: 매 upfront purchase (\$60 AAA, \$15-30 indie).
|
||||
- **F2P + IAP**: 매 free entry, 매 in-app purchase.
|
||||
- **Subscription**: 매 monthly fee (WoW, Final Fantasy XIV).
|
||||
- **Ad-supported**: 매 rewarded video, 매 banner.
|
||||
- **Hybrid**: 매 premium + cosmetic DLC (매 Diablo 4, 매 BG3-style 매 0 DLC).
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 LTV Decomposition
|
||||
- LTV = ARPPU × Conversion × Retention(t)
|
||||
- ARPPU = 매 Average Revenue Per Paying User.
|
||||
- Conversion = 매 % of player who pay at least once.
|
||||
- Retention(t) = 매 Day-N retention curve.
|
||||
|
||||
**추출된 패턴:** 장르별 "표준 BM"이 있고, 이를 따르면 안전하지만 차별화 어려움 — 새 BM 실험은 장르 정착 후 가능.
|
||||
### 매 IAP Categorization
|
||||
- **Cosmetic**: 매 skin, emote, banner — 매 ethical, 매 LTV high (Fortnite).
|
||||
- **Convenience**: 매 timer skip, 매 inventory expansion.
|
||||
- **Power**: 매 stat boost — 매 P2W controversy.
|
||||
- **Social**: 매 alliance gift, 매 guild perk.
|
||||
|
||||
**세부 내용:**
|
||||
- 하이퍼캐주얼: 광고 100%.
|
||||
- 캐주얼/하이브리드: 광고+IAP.
|
||||
- 미드코어 RPG: 가챠+패스.
|
||||
- MMO/Strategy: 패키지+VIP.
|
||||
- 콘솔 라이브: 코스튬+패스.
|
||||
### 매 응용
|
||||
1. Fortnite — 매 battle pass (Chapter Pass), 매 cosmetic-only, \$5B+ annual.
|
||||
2. Genshin Impact — 매 gacha, 매 \$70M/month launch, 매 character banner.
|
||||
3. League of Legends — 매 cosmetic + champion 매 mix.
|
||||
4. Path of Exile — 매 cosmetic + stash tab — 매 ethical baseline.
|
||||
5. Helldivers 2 — 매 \$40 premium + 매 cosmetic warbond.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 💻 패턴
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 1: Battle Pass Schema
|
||||
```typescript
|
||||
interface BattlePass {
|
||||
season: number;
|
||||
duration_days: 90;
|
||||
free_track: Reward[];
|
||||
premium_track: Reward[]; // unlocks at $9.99
|
||||
premium_plus: Reward[]; // $24.99 — includes 25 tier skip
|
||||
total_value_displayed: number; // "$200 value!"
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function computeAttachRate(pass: BattlePass, players: Player[]): number {
|
||||
const buyers = players.filter(p => p.purchased.includes(`pass_s${pass.season}`));
|
||||
return buyers.length / players.length; // industry norm: 15-25%
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Pattern 2: Gacha Pity System
|
||||
```python
|
||||
class GachaBanner:
|
||||
def __init__(self, base_rate: float = 0.006, hard_pity: int = 90):
|
||||
self.base_rate = base_rate # 0.6% Genshin 5★
|
||||
self.hard_pity = hard_pity # guaranteed at 90
|
||||
self.soft_pity_start = 75 # rate ramp begins
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def pull_rate(self, pulls_since_5star: int) -> float:
|
||||
if pulls_since_5star >= self.hard_pity: return 1.0
|
||||
if pulls_since_5star < self.soft_pity_start: return self.base_rate
|
||||
# Linear ramp from 0.6% at pull 75 to ~32% at pull 89
|
||||
ramp = (pulls_since_5star - self.soft_pity_start) / (self.hard_pity - self.soft_pity_start)
|
||||
return self.base_rate + ramp * 0.32
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Pattern 3: Whale Identification
|
||||
```rust
|
||||
#[derive(Debug)]
|
||||
enum SpenderTier { Minnow, Dolphin, Whale, Krill }
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
fn classify(monthly_spend_usd: f64) -> SpenderTier {
|
||||
match monthly_spend_usd {
|
||||
s if s >= 1000.0 => SpenderTier::Whale,
|
||||
s if s >= 100.0 => SpenderTier::Dolphin,
|
||||
s if s > 0.0 => SpenderTier::Minnow,
|
||||
_ => SpenderTier::Krill, // F2P
|
||||
}
|
||||
}
|
||||
// Industry: ~1% whale = ~50% revenue, ~9% dolphin = ~30%, rest minnow + F2P
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Pattern 4: Cohort Retention
|
||||
```python
|
||||
import pandas as pd
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
def cohort_retention(events: pd.DataFrame) -> pd.DataFrame:
|
||||
# events: [user_id, install_date, active_date]
|
||||
events['cohort'] = events.groupby('user_id')['install_date'].transform('min')
|
||||
events['days_since_install'] = (events['active_date'] - events['cohort']).dt.days
|
||||
pivot = events.pivot_table(
|
||||
index='cohort', columns='days_since_install',
|
||||
values='user_id', aggfunc='nunique'
|
||||
)
|
||||
return pivot.div(pivot[0], axis=0)
|
||||
# D1: 40%, D7: 20%, D30: 10% — typical mobile F2P
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Pattern 5: Dynamic Offer Targeting
|
||||
```csharp
|
||||
public class OfferEngine {
|
||||
public Offer SelectOffer(Player p) {
|
||||
if (p.Tier == SpenderTier.Whale && p.LastPurchaseDays > 7)
|
||||
return new MegaPack(price: 99.99m, value: "$300");
|
||||
if (p.Tier == SpenderTier.Minnow && p.SessionCount == 3)
|
||||
return new Starter(price: 4.99m, value: "$25"); // first-time hook
|
||||
return null; // no offer — avoid fatigue
|
||||
}
|
||||
}
|
||||
// A/B test offer composition; LTV uplift typically +15-30%
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 audience: AAA console | 매 premium (\$60) + 매 cosmetic DLC |
|
||||
| 매 audience: mobile mass-market | 매 F2P + 매 battle pass + 매 IAP |
|
||||
| 매 audience: gacha 친화 (Asia) | 매 banner + pity + 매 weekly event |
|
||||
| 매 audience: PC core | 매 premium + 매 expansion + 매 cosmetic |
|
||||
| 매 ethical concern | 매 cosmetic-only, 매 P2W 회피, 매 disclosure 명확 |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: 매 cosmetic + battle pass + 매 ethical disclosure (매 odds, 매 spend cap).
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game-Business-Model]] · [[F2P-Design]]
|
||||
- 변형: [[Battle-Pass-Design]] · [[Gacha-Design]] · [[Subscription-Model]]
|
||||
- 응용: [[Final Fantasy XV- A New Empire]] · [[Cosmetic-Economy]]
|
||||
- Adjacent: [[LTV-Optimization]] · [[Cohort-Analysis]] · [[ATT-Attribution-Post-2021]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 monetization strategy 설계, 매 LTV modeling, 매 offer engine 구축, 매 ethical audit.
|
||||
**언제 X**: 매 pure premium game (매 monetization complexity 의 매 minimal).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Pay-to-win**: 매 stat advantage 매 sale — 매 community trust 손실.
|
||||
- **Hidden gacha odds**: 매 disclosure 부재 — 매 China/Korea/EU 규제 위반.
|
||||
- **Aggressive popups**: 매 매 session 마다 5+ offer — 매 churn 가속.
|
||||
- **Whale exclusivity**: 매 mid-tier player 의 매 무력감 — 매 long-term LTV 저하.
|
||||
- **Dark pattern**: 매 timer-pressured 'last chance' bundle — 매 regulatory risk.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (App Annie / Sensor Tower data, GDC monetization talks 2020-2025, EU DMA disclosure rules).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Monetization 의 LTV decomposition + 5-pattern (battle pass, gacha, whale, cohort, dynamic offer) |
|
||||
|
||||
@@ -1,78 +1,163 @@
|
||||
---
|
||||
id: wiki-2026-0508-gamification-theory
|
||||
title: Gamification Theory
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Gamification, Game Design Psychology]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [gamification, psychology, motivation, game-design]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: react
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Gamification Theory
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 game-design element 의 매 non-game context 의 application"**. 매 2002 Pelling coinage → 매 2010 Deterding-Dixon framework → 매 2024 Duolingo / Strava / Habitica 의 매 대중화. 매 Self-Determination Theory (SDT) 의 매 autonomy / competence / relatedness 의 매 psychological backbone.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 게이미피케이션은 게임 외 영역에 게임 메커니즘(목표·진행·보상·소셜)을 적용해 동기 부여를 강화하는 디자인 접근이다.
|
||||
### 매 PBL Triad
|
||||
- **Points**: 매 score 의 매 progress signal.
|
||||
- **Badges**: 매 achievement 의 매 status marker.
|
||||
- **Leaderboards**: 매 social comparison 의 매 motivation engine.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 SDT 매 lens
|
||||
- **Autonomy**: 매 user 의 choice — 매 forced quest = anti-pattern.
|
||||
- **Competence**: 매 graduated challenge — 매 flow channel 의 maintenance.
|
||||
- **Relatedness**: 매 social bond — 매 guild / team / friend system.
|
||||
|
||||
**추출된 패턴:** 외재적 보상(포인트·뱃지)만으론 단기 효과 — 자율성·숙련감·관계성(SDT)을 자극해야 지속.
|
||||
### 매 응용
|
||||
1. Duolingo (streak + XP + league).
|
||||
2. Strava (segments + KOM/QOM).
|
||||
3. Stack Overflow (rep + badges).
|
||||
4. Habitica (RPG-task manager).
|
||||
|
||||
**세부 내용:**
|
||||
- 사례: Duolingo, Strava, Codecademy.
|
||||
- 메커니즘: 진행도, 레벨업, 도전과제, 리더보드.
|
||||
- 비판: 외재적 동기 의존 시 본질적 동기 약화.
|
||||
- SDT 결합: 자율-숙련-관계 자극 설계.
|
||||
- 워크플레이스 게이미피케이션 위험.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### XP + level curve
|
||||
```typescript
|
||||
function xpForLevel(level: number): number {
|
||||
// RuneScape-style 의 매 exponential ramp.
|
||||
return Math.floor(0.25 * (level ** 3) - 0.25 * level + 100);
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function levelFromTotalXp(totalXp: number): number {
|
||||
let lvl = 1, sum = 0;
|
||||
while (sum + xpForLevel(lvl) <= totalXp) {
|
||||
sum += xpForLevel(lvl);
|
||||
lvl++;
|
||||
}
|
||||
return lvl;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Streak system (Duolingo-style)
|
||||
```typescript
|
||||
interface StreakState {
|
||||
currentStreak: number;
|
||||
longestStreak: number;
|
||||
lastActiveDate: string; // YYYY-MM-DD
|
||||
freezeTokens: number; // 매 1-day shield
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function updateStreak(s: StreakState, today: string): StreakState {
|
||||
const last = new Date(s.lastActiveDate);
|
||||
const now = new Date(today);
|
||||
const days = Math.floor((+now - +last) / 86400_000);
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
if (days === 0) return s;
|
||||
if (days === 1) {
|
||||
const cur = s.currentStreak + 1;
|
||||
return { ...s, currentStreak: cur, longestStreak: Math.max(cur, s.longestStreak), lastActiveDate: today };
|
||||
}
|
||||
if (days === 2 && s.freezeTokens > 0) {
|
||||
return { ...s, freezeTokens: s.freezeTokens - 1, lastActiveDate: today };
|
||||
}
|
||||
return { ...s, currentStreak: 1, lastActiveDate: today };
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Badge system (declarative)
|
||||
```typescript
|
||||
type Predicate = (state: UserState) => boolean;
|
||||
interface Badge { id: string; name: string; predicate: Predicate; }
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
const BADGES: Badge[] = [
|
||||
{ id: 'streak_30', name: '30-day Streak', predicate: s => s.currentStreak >= 30 },
|
||||
{ id: 'first_quest', name: 'First Quest', predicate: s => s.questsDone >= 1 },
|
||||
{ id: 'social_butterfly', name: 'Social Butterfly', predicate: s => s.friends >= 10 },
|
||||
];
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
function evaluateBadges(state: UserState, owned: Set<string>): Badge[] {
|
||||
return BADGES.filter(b => !owned.has(b.id) && b.predicate(state));
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Leaderboard with relegation (Duolingo league)
|
||||
```typescript
|
||||
const TIERS = ['Bronze','Silver','Gold','Sapphire','Ruby','Emerald','Amethyst','Pearl','Obsidian','Diamond'] as const;
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
function weeklyRelegation(group: { userId: string; xp: number; tier: number }[]) {
|
||||
group.sort((a, b) => b.xp - a.xp);
|
||||
return group.map((u, i) => {
|
||||
if (i < 7) return { ...u, tier: Math.min(u.tier + 1, TIERS.length - 1) };
|
||||
if (i >= group.length - 5) return { ...u, tier: Math.max(u.tier - 1, 0) };
|
||||
return u;
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Variable-ratio reinforcement (loot)
|
||||
```typescript
|
||||
function rollReward(): Reward {
|
||||
const r = Math.random();
|
||||
if (r < 0.001) return { kind: 'epic', xp: 500 };
|
||||
if (r < 0.05) return { kind: 'rare', xp: 100 };
|
||||
if (r < 0.30) return { kind: 'uncommon', xp: 25 };
|
||||
return { kind: 'common', xp: 5 };
|
||||
}
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Habit-forming app | Streak + light social leaderboard |
|
||||
| Educational | XP + levels + adaptive difficulty |
|
||||
| Enterprise / corporate | 매 careful — 매 extrinsic-overjustification risk |
|
||||
| Health / fitness | Goal-setting + progress visualization |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: SDT-aligned 의 autonomy-first design — 매 PBL 의 매 surface 의 X.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Self-Determination Theory]] · [[Behavioral Psychology]]
|
||||
- 변형: [[Serious Games]] · [[Gameful Design]]
|
||||
- 응용: [[Duolingo]] · [[Strava]] · [[Habitica]]
|
||||
- Adjacent: [[Magic-Circle]] · [[Player-Experience-Modeling]] · [[보상의 역효과 (Overjustification Effect)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: motivation system design, streak/badge schemas, league mechanics.
|
||||
**언제 X**: 매 deep clinical behavioral therapy (전문가 영역).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Pointsification**: 매 PBL 만 의 surface bolt-on — 매 intrinsic motivation 의 매 erosion.
|
||||
- **Forced competition**: 매 mandatory leaderboard 의 매 stress / 매 churn.
|
||||
- **Streak anxiety**: 매 punishing-loss design — 매 freeze-token 의 매 mitigation.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Deterding et al. 2011, Ryan & Deci SDT, Duolingo Engineering blog 2023).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — XP/streak/badge/league working code |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-hedera-hcs-및-fauxkens
|
||||
title: Hedera(HCS 및 Fauxkens)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
title: Hedera (HCS 및 Fauxkens)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: web3-game-economy
|
||||
duplicate_of: "[[Web3-Game-Economy]]"
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, web3, hedera, game-economy]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Hedera (HCS 및 Fauxkens)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Web3-Game-Economy]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 핵심 요약 (Hedera 특화)
|
||||
- **HCS (Hedera Consensus Service)**: 매 ordered, timestamped message stream — 매 game event log 의 매 immutable record.
|
||||
- **Fauxkens**: 매 fungible token (HTS — Hedera Token Service) 매 game-economy 적용.
|
||||
- 매 advantage: 매 low fee (\$0.0001/tx), 매 fast finality (3-5s), 매 ABFT consensus.
|
||||
- 매 disadvantage: 매 매 ecosystem 작음, 매 매 EVM compatibility 의 매 부분적 (JSON-RPC relay).
|
||||
|
||||
> Hedera는 Hashgraph 합의 알고리즘 기반 분산 원장으로, HCS(Consensus Service)와 Fauxken 같은 게임용 토큰 메커니즘을 제공한다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Web3-Game-Economy]] (canonical)
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** 일반 블록체인의 가스비·지연 문제를 해결하는 대안 인프라 — 게임 친화적 처리량(10K+ TPS) 강조.
|
||||
|
||||
**세부 내용:**
|
||||
- HCS: 메시지 합의 → 게임 이벤트 로그 신뢰성.
|
||||
- HTS: 토큰 표준 (NFT/FT 모두 지원).
|
||||
- 거버넌스: 39개 기업이 운영하는 council 모델.
|
||||
- 게임 사용 사례: Sandbox, gaming partner integrations.
|
||||
- 한계: 탈중앙화 정도, 생태계 규모는 EVM 대비 작음.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서 [[Web3-Game-Economy]] 로 redirect |
|
||||
|
||||
@@ -1,80 +1,176 @@
|
||||
---
|
||||
id: wiki-2026-0508-hyperinflation-in-closed-loop-sy
|
||||
title: Hyperinflation in Closed Loop Systems
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Game Hyperinflation, Virtual Currency Crash, Axie SLP Crash]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, economy, hyperinflation, web3-game]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: economy-pathology
|
||||
framework: closed-loop-economy
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Hyperinflation in Closed Loop Systems
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 sink 부재 + 매 unbounded faucet → 매 매 currency value 의 매 collapse"**. 매 Hyperinflation 은 매 game economy 의 매 pathological state — 매 currency velocity 의 매 폭증 + 매 purchasing power 의 매 매 collapse. 매 historical: 매 Diablo 3 RMAH (2012), 매 RuneScape duping (2017), 매 Axie Infinity SLP (2022). 매 closed-loop 일수록 매 위험 — 매 매 currency 가 매 game 외부로 매 escape 못 함.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 폐쇄 루프 게임 경제의 하이퍼인플레이션은 통화 발행이 회수를 초과해 통화 가치가 폭락하는 현상이다.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Causes
|
||||
- **Faucet > Sink**: 매 매 currency 매 inflow 가 매 sink 초과.
|
||||
- **Botting/Duping**: 매 매 supply 의 매 매 unauthorized expansion.
|
||||
- **Tokenomics flaw** (Web3): 매 매 reward emission 가 매 demand 초과.
|
||||
- **Whale dump**: 매 매 large holder 의 매 simultaneous selloff.
|
||||
|
||||
> 닫힌 루프 게임 경제에서 하이퍼인플레이션은 통화 발행이 소모를 초과해 통화 가치가 급락하는 현상으로, 매출 붕괴와 유저 이탈로 직결된다.
|
||||
### 매 Symptoms
|
||||
- 매 NPC vendor item price 매 worthless 화.
|
||||
- 매 player-to-player trade 가 매 barter 회귀.
|
||||
- 매 새 player onboarding 비용 매 prohibitive.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Mitigation
|
||||
- **매 Sink 추가**: 매 cosmetic, 매 housing, 매 tax.
|
||||
- **매 Faucet nerf**: 매 drop rate 감소.
|
||||
- **매 Currency burn**: 매 redemption-on-spend.
|
||||
- **매 Bot policing**: 매 detection + ban.
|
||||
- **매 Currency redenomination**: 매 nuclear option (e.g., 1000:1 swap).
|
||||
|
||||
**추출된 패턴:** Source-Sink 비율이 1.2 이상 장기 지속되면 위험 신호 — 신규 Sink 도입 또는 기존 Sink 강화 필요.
|
||||
### 매 응용
|
||||
1. Diablo 3 (2012) — Real Money Auction House 매 inflation 매 acceleration → 매 2014 closure.
|
||||
2. EVE Online (2014) — Eyjólfur Guðmundsson 의 매 active management 매 hyperinflation 회피.
|
||||
3. Axie Infinity (2022) — SLP token 매 99% 가치 손실.
|
||||
4. RuneScape (2017) — duping bug 매 매 emergency rollback.
|
||||
|
||||
**세부 내용:**
|
||||
- 정의: 통화 가치(아이템 환산)가 시간당 N% 이상 하락.
|
||||
- 원인: 새 콘텐츠로 Source 증가, Sink 미흡.
|
||||
- 해결: 시즌 리셋, 강한 Sink 도입, 통화 페그.
|
||||
- 사례: Diablo III 골드 인플레이션, MMORPG 후반 통화 붕괴.
|
||||
- 측정: 가격 인덱스(주요 아이템 가격 변화).
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 1: Inflation Detection
|
||||
```python
|
||||
def detect_hyperinflation(monthly_cpi: list[float], threshold: float = 50.0) -> bool:
|
||||
# 50%+ MoM CPI = hyperinflation per economist convention
|
||||
if len(monthly_cpi) < 3: return False
|
||||
last_3 = monthly_cpi[-3:]
|
||||
return all(rate >= threshold for rate in last_3)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
# Axie SLP: 200%+ supply growth, 95%+ price decline
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 2: Emergency Sink Activation
|
||||
```typescript
|
||||
class EmergencySink {
|
||||
activated = false;
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
trigger(cpi: number) {
|
||||
if (cpi > 30 && !this.activated) {
|
||||
this.activated = true;
|
||||
this.deployMeasures();
|
||||
}
|
||||
}
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
private deployMeasures() {
|
||||
// 1. Increase NPC repair cost 5x
|
||||
config.repair_multiplier = 5.0;
|
||||
// 2. Add limited-time cosmetic at high price
|
||||
shop.addExclusive({ price: 10_000_000, duration_hours: 72 });
|
||||
// 3. Tax player-to-player trade (5%)
|
||||
market.tax_rate = 0.05;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Pattern 3: Bot Detection (Behavioral)
|
||||
```rust
|
||||
struct BotSignal {
|
||||
actions_per_minute: f64,
|
||||
same_path_repetition: f64, // 0-1 cosine similarity
|
||||
no_chat_for_hours: u32,
|
||||
instant_perfect_reaction: bool,
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
fn classify(signal: &BotSignal) -> f64 {
|
||||
let mut score = 0.0;
|
||||
if signal.actions_per_minute > 60.0 { score += 0.3; }
|
||||
if signal.same_path_repetition > 0.95 { score += 0.4; }
|
||||
if signal.no_chat_for_hours > 24 { score += 0.1; }
|
||||
if signal.instant_perfect_reaction { score += 0.4; }
|
||||
score.min(1.0) // 0.7+ → flag for ban
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Pattern 4: Currency Redenomination
|
||||
```csharp
|
||||
public class RedenominationOp {
|
||||
// Nuclear option — last resort
|
||||
public void Execute(decimal ratio = 1000m) {
|
||||
foreach (var p in AllPlayers) {
|
||||
p.Gold = Math.Floor(p.Gold / ratio);
|
||||
}
|
||||
foreach (var item in AllAuctions) {
|
||||
item.Price = Math.Floor(item.Price / ratio);
|
||||
}
|
||||
// Communication CRITICAL — pre-announce 30 days
|
||||
// Risk: player perceives as theft if mishandled
|
||||
}
|
||||
}
|
||||
// Real example: Brazil 1986 cruzado replace cruzeiro 1000:1
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Pattern 5: Tokenomics Sink Injection (Web3)
|
||||
```solidity
|
||||
// Solidity — pseudo SLP-fix
|
||||
contract GameToken is ERC20 {
|
||||
uint256 public stakeBurnRate = 5; // 5% burn on staking
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
function stake(uint256 amount) external {
|
||||
uint256 burn = (amount * stakeBurnRate) / 100;
|
||||
_burn(msg.sender, burn); // permanent removal
|
||||
_transfer(msg.sender, vault, amount - burn);
|
||||
}
|
||||
}
|
||||
// Counters infinite SLP emission via deflationary sink
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 mild inflation (CPI 5-15%) | 매 sink 강화, 매 faucet 미세 조정 |
|
||||
| 매 moderate (15-50%) | 매 emergency sink + 매 bot purge |
|
||||
| 매 hyperinflation (50%+) | 매 currency burn event 또는 매 redenomination |
|
||||
| 매 Web3 token | 매 deflationary mechanism (burn on action) |
|
||||
| 매 botting 탐지 | 매 behavioral classifier + ban + 매 illicit gold removal |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: 매 monthly economic report (EVE QER 모델) + 매 automatic sink scaling.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[Economic-Analysis]] · [[Virtual-Economy-Pathology]]
|
||||
- 변형: [[Diablo3-RMAH-Crash]] · [[Axie-SLP-Crash]] · [[RuneScape-Duping]]
|
||||
- 응용: [[Sink-Faucet-Balancing]] · [[Bot-Detection-Systems]]
|
||||
- Adjacent: [[Tokenomics-Design]] · [[Currency-Redenomination]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 economy crisis 진단, 매 mitigation strategy 설계, 매 historical case study 학습.
|
||||
**언제 X**: 매 stable economy (매 normal sink/faucet operation 만 필요), 매 cosmetic-only economy.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No real-time monitoring**: 매 problem 감지 매 매 quarterly — 매 too late.
|
||||
- **Faucet nerf in panic**: 매 매 sudden drop rate 감소 — 매 player rage + retention crash.
|
||||
- **No bot enforcement**: 매 매 supply 의 매 매 unauthorized 확장 매 unchecked.
|
||||
- **Hidden tokenomics**: 매 매 player 가 매 emission curve 매 알 수 없음 — 매 trust 손실.
|
||||
- **Redenomination without notice**: 매 매 player 가 매 wealth 가 매 1000:1 로 매 변경 — 매 mass exodus.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (CCP QER, Axie Infinity Sky Mavis postmortem 2022, Diablo 3 RMAH closure announcement).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Hyperinflation 의 cause/symptom/mitigation + 5-pattern (detect, emergency sink, bot, redenom, tokenomics) |
|
||||
|
||||
@@ -1,78 +1,171 @@
|
||||
---
|
||||
id: wiki-2026-0508-immersive-sim-genre
|
||||
title: Immersive Sim Genre
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Imm Sim, Systemic Game Design, Looking Glass Lineage, Arkane Style]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, immersive-sim, systemic-design, emergent-gameplay]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-philosophy
|
||||
framework: systemic-design
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Immersive Sim Genre
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 player 의 매 problem 매 solving 의 매 multiplicity 가 매 매 genre 의 매 정의"**. 매 Immersive Sim (Imm Sim) 은 매 simulated world + 매 reactive system + 매 player choice 의 매 trinity. 매 Looking Glass Studios (Ultima Underworld 1992, System Shock 1994, Thief 1998) 의 매 origin. 매 modern lineage: 매 Arkane Studios (Dishonored, Prey 2017), 매 Warren Spector (Deus Ex 2000), 매 indie 매 revival (Gloomwood, Peripeteia, 2023-2024).
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 이머시브 심은 다양한 시스템 상호작용과 플레이어 자율성을 강조하는 장르로, Looking Glass·Arkane·Ion Storm 계보가 대표적이다.
|
||||
### 매 Trinity (Spector & Smith)
|
||||
1. **매 Player choice**: 매 다수의 매 path (lethal/non-lethal, stealth/combat).
|
||||
2. **매 Reactive systems**: 매 NPC, 매 environment 가 매 player action 에 매 응답.
|
||||
3. **매 Coherent world**: 매 internal logic 의 매 consistency.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Systemic Interactions
|
||||
- 매 fire + oil → spread.
|
||||
- 매 water + electricity → conduct.
|
||||
- 매 NPC + AI memory → 매 long-term consequence.
|
||||
|
||||
**추출된 패턴:** "디자이너가 정해놓은 한 가지 방법"이 아닌 "여러 시스템의 emergent 상호작용"으로 문제 해결.
|
||||
### 매 Emergent Gameplay
|
||||
- 매 designer intent 외 매 player solution 의 매 등장.
|
||||
- e.g., 매 Dishonored — 매 corpse 매 throw 로 매 guard distraction.
|
||||
- e.g., 매 Prey — 매 GLOO Cannon 으로 매 climbing.
|
||||
|
||||
**세부 내용:**
|
||||
- System Shock, Thief, Deus Ex 계보.
|
||||
- Dishonored, Prey 등 현대 작품.
|
||||
- 핵심: 여러 도구·환경·NPC의 상호작용.
|
||||
- 비판: 모든 시스템이 같은 깊이를 갖긴 어려움.
|
||||
- 후예: BotW 같은 오픈월드의 emergent 디자인.
|
||||
### 매 응용
|
||||
1. Deus Ex (Ion Storm 2000) — 매 RPG hybrid imm sim.
|
||||
2. Dishonored series (Arkane 2012-2017).
|
||||
3. Prey 2017 (Arkane Austin) — 매 magnum opus.
|
||||
4. Weird West (WolfEye 2022).
|
||||
5. System Shock Remake (Nightdive 2023).
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 💻 패턴
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 1: Verb Multiplicity
|
||||
```python
|
||||
class GameVerbs:
|
||||
"""Each player verb should have multiple use cases."""
|
||||
def use_lean(self):
|
||||
# Combat (peek), stealth (hide), exploration (look around)
|
||||
pass
|
||||
def use_throw(self, item):
|
||||
# Weapon, distraction, puzzle (throw on pressure plate),
|
||||
# traversal (throw box, jump on it)
|
||||
pass
|
||||
# Imm Sim rule: every verb should solve 3+ problem types
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 2: Reactive World Schema
|
||||
```typescript
|
||||
interface WorldState {
|
||||
fires: Set<Position>;
|
||||
electrified_water: Set<Position>;
|
||||
oiled_surfaces: Set<Position>;
|
||||
npc_memory: Map<NpcId, Event[]>;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function tickInteractions(world: WorldState) {
|
||||
for (const fire of world.fires) {
|
||||
for (const oil of world.oiled_surfaces) {
|
||||
if (distance(fire, oil) < 2) world.fires.add(oil);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 3: NPC Awareness Hierarchy
|
||||
```rust
|
||||
#[derive(Debug, Clone)]
|
||||
enum AwarenessLevel {
|
||||
Unaware,
|
||||
Suspicious,
|
||||
Searching,
|
||||
Combat,
|
||||
LostTarget,
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
struct NpcAi {
|
||||
level: AwarenessLevel,
|
||||
last_known_pos: Option<Position>,
|
||||
memory_decay_sec: f32,
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
impl NpcAi {
|
||||
fn on_stimulus(&mut self, s: Stimulus) {
|
||||
self.level = match (self.level.clone(), s) {
|
||||
(AwarenessLevel::Unaware, Stimulus::Sound) => AwarenessLevel::Suspicious,
|
||||
(AwarenessLevel::Suspicious, Stimulus::Sight(_)) => AwarenessLevel::Combat,
|
||||
(l, _) => l,
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Pattern 4: Multi-Solution Puzzle
|
||||
```csharp
|
||||
public class SecuredDoor : Puzzle {
|
||||
public List<Solution> ValidSolutions => new() {
|
||||
new Solution { Verb = "lockpick", Skill = "Hacking", Difficulty = 3 },
|
||||
new Solution { Verb = "find_key", Item = "vault_key" },
|
||||
new Solution { Verb = "vent", Pos = new(2, 5) },
|
||||
new Solution { Verb = "explosive", Item = "C4" },
|
||||
new Solution { Verb = "persuade", Npc = "guard_03" },
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Pattern 5: Emergent Combo Detection
|
||||
```python
|
||||
def telemetry_emergent_solutions(playthrough_log):
|
||||
designer_solutions = load_intended_solutions()
|
||||
for puzzle in playthrough_log.puzzles:
|
||||
if puzzle.solution not in designer_solutions[puzzle.id]:
|
||||
log_for_review(puzzle.solution)
|
||||
# This is how Dishonored's "rat tunnel" became canonical
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 puzzle/gate 디자인 | 매 3+ solution path 보장 (lockpick/key/vent/explosive/social) |
|
||||
| 매 system 디자인 | 매 element (fire/water/electricity) 매 cross-interaction 정의 |
|
||||
| 매 NPC AI | 매 awareness hierarchy + 매 memory + decay |
|
||||
| 매 level 디자인 | 매 vertical layering (vent, rooftop, sewer) |
|
||||
| 매 narrative | 매 NPC reactive memory — 매 player history 반영 |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: 매 Spector trinity 준수 + 매 telemetry-driven emergent path 기록.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Systemic-Game-Design]] · [[Looking-Glass-Lineage]]
|
||||
- 변형: [[BioShock-Critique]] · [[Deus-Ex-Design]] · [[Dishonored-Design]]
|
||||
- 응용: [[Prey-2017]] · [[Weird-West]] · [[System-Shock-Remake]]
|
||||
- Adjacent: [[Emergent-Gameplay]] · [[Verb-Multiplicity]] · [[NPC-AI-Awareness]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 imm sim level 설계, 매 system interaction matrix 정의, 매 emergent telemetry 분석.
|
||||
**언제 X**: 매 linear narrative game, 매 lobby PvP — 매 systemic complexity 의 매 비용 가치 없음.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Single-solution gate**: 매 only 매 lockpick 만 매 가능 — 매 imm sim 정신 위배.
|
||||
- **No system interaction**: 매 fire 가 매 oil 매 ignite 안 함 — 매 reactive world 부재.
|
||||
- **Static NPC**: 매 player crime 후 매 동일 routine — 매 immersion 파괴.
|
||||
- **Verb scarcity**: 매 verb 가 매 single-use — 매 emergent gameplay 봉쇄.
|
||||
- **Patchout emergent solutions**: 매 player 의 매 creative path 매 nerf — 매 community 분노.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Spector "Postcards from the Edge" GDC, Arkane design talks, Looking Glass postmortems).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Imm Sim 의 trinity + 5-pattern (verb, reactive world, NPC AI, multi-solution, emergent telemetry) |
|
||||
|
||||
@@ -1,78 +1,167 @@
|
||||
---
|
||||
id: wiki-2026-0508-immersive-sims-deus-ex-dishonore
|
||||
title: Immersive Sims Deus Ex Dishonored
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Immersive Sims — Deus Ex / Dishonored Lineage
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Deus Ex, Dishonored, Spector Lineage, Arkane ImSim]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, immersive-sim, level-design, case-study]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: UnrealEngine
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Immersive Sims — Deus Ex / Dishonored Lineage
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 lineage가 Looking Glass → Ion Storm → Arkane으로 이어지며 매 'player choice as core philosophy'를 35년간 발전."** Deus Ex (2000, Warren Spector / Harvey Smith)는 매 cyberpunk + RPG + FPS hybrid의 origin, Dishonored (2012, Harvey Smith / Raphael Colantonio)는 매 그 DNA를 stealth-action으로 distill. 매 2026 시점에서 Microsoft의 Arkane Austin shutdown (2024) 이후 매 lineage가 indie / mid-tier로 이동 (Weird West, Gloomwood, Peripeteia).
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Deus Ex와 Dishonored는 이머시브 심 장르의 대표작으로, 플레이 스타일별 다양한 해법(stealth/lethal/hybrid)을 의도적으로 설계했다.
|
||||
### 매 Deus Ex (2000) 의 contribution
|
||||
- **Skill tree + augmentation 분리**: 매 skill (lockpick, hacking)은 XP 투자, 매 aug (cloaking, regen)는 nano-canister 발견. 매 dual progression.
|
||||
- **Multi-route level**: 매 mission마다 vent / door / hack / sneak / kill 매 4-5 path.
|
||||
- **Conversation as gameplay**: 매 NPC 설득이 매 entire mission skip 가능 (UNATCO HQ Anna Navarre encounter).
|
||||
- **Conspiracy narrative**: 매 player의 trust가 매 game progression따라 shift — 매 ending choice 3개 모두 morally ambiguous.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Dishonored 의 distillation
|
||||
- **Chaos system**: 매 kill count → high chaos → 매 darker ending + more weepers + Emily 의 colder personality.
|
||||
- **Powers as verbs**: Blink (teleport), Possession, Devouring Swarm — 매 power가 다른 power와 stack (Blink mid-air to surprise guard).
|
||||
- **Non-lethal alternatives**: 매 main target 모두 매 worse-than-death non-lethal 처리 (Lady Boyle → kidnapped, Pendleton → tongue cut → mines).
|
||||
- **Painted environment storytelling**: Sergei Kolesov / Viktor Antonov의 매 visual language — 매 architecture가 narrative carry.
|
||||
|
||||
**추출된 패턴:** "전 진행 가능 경로 = 디자인 매트릭스" — 각 레벨이 여러 해법을 동시에 지원.
|
||||
### 매 응용
|
||||
1. **Deus Ex: Mankind Divided (2016) Praha hub**: 매 single city district이 매 ImSim "one city block" philosophy의 매 modern realization.
|
||||
2. **Dishonored 2 (2016) "A Crack in the Slab"**: 매 timeline switching mechanic — past/present를 toggle하며 매 puzzle solve.
|
||||
3. **Prey 2017 Talos I**: 매 Looking Glass System Shock의 매 spiritual successor — Mimic ability로 매 모든 small object로 변신.
|
||||
|
||||
**세부 내용:**
|
||||
- Deus Ex(2000): 진로/전투/해킹/사회공학.
|
||||
- Dishonored(2012): 스텔스/처형/혼합 + 마법.
|
||||
- Chaos 시스템: 플레이 스타일 → 세계 반응.
|
||||
- 레벨 디자인: 다층 / 다중 진입점.
|
||||
- 비판: 옵션 과다 → 일부 미사용 콘텐츠.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Chaos system — hidden state tracking
|
||||
```csharp
|
||||
// 매 player action이 매 ending state에 누적
|
||||
public class ChaosTracker : MonoBehaviour {
|
||||
int kills = 0;
|
||||
int alarms = 0;
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
public void OnNPCKilled(NPC npc) {
|
||||
kills++;
|
||||
// 매 civilians는 매 weight 더 큼
|
||||
if (npc.faction == Faction.Civilian) kills += 2;
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
public ChaosLevel GetLevel() {
|
||||
float ratio = (float)kills / WorldRegistry.TotalNPCs;
|
||||
return ratio > 0.2f ? ChaosLevel.High : ChaosLevel.Low;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Multi-path mission gating (Deus Ex style)
|
||||
```csharp
|
||||
// 매 mission objective가 매 multiple routes로 satisfiable
|
||||
public class MissionObjective {
|
||||
public string description;
|
||||
public List<Func<bool>> completionConditions = new();
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
public bool IsComplete() => completionConditions.Any(c => c());
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
// Setup
|
||||
var obj = new MissionObjective { description = "Reach the rooftop" };
|
||||
obj.completionConditions.Add(() => Player.Has("RooftopKeycard")); // direct
|
||||
obj.completionConditions.Add(() => Player.UsedVent("rooftop_vent")); // stealth
|
||||
obj.completionConditions.Add(() => Player.Hacked("elevator_panel")); // hack
|
||||
obj.completionConditions.Add(() => NPC.Persuaded("guard_bobby")); // social
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Power composition (Dishonored)
|
||||
```csharp
|
||||
// 매 active power state machine — chaining
|
||||
public class PowerState : MonoBehaviour {
|
||||
public bool Possessing { get; set; }
|
||||
public Transform PossessionTarget { get; set; }
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
public void Blink(Vector3 target) {
|
||||
if (Possessing) {
|
||||
// 매 possessed rat이 blink — 매 unique animation + 매 mana cost discount
|
||||
PossessionTarget.position = target;
|
||||
ConsumeMana(0.3f);
|
||||
} else {
|
||||
transform.position = target;
|
||||
ConsumeMana(0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Painted dialogue tree with state
|
||||
```csharp
|
||||
// 매 NPC dialogue가 매 chaos / faction reputation reflect
|
||||
public class DialogueNode {
|
||||
public string text;
|
||||
public Func<bool> condition;
|
||||
public List<DialogueChoice> choices;
|
||||
}
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
var emilyHigh = new DialogueNode {
|
||||
text = "...You taught me well, father. They deserved it.",
|
||||
condition = () => chaos.GetLevel() == ChaosLevel.High,
|
||||
};
|
||||
var emilyLow = new DialogueNode {
|
||||
text = "Father, I've been watching the people. They're so... fragile.",
|
||||
condition = () => chaos.GetLevel() == ChaosLevel.Low,
|
||||
};
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Reactivity trace (Deus Ex 1 NSF Statue)
|
||||
```csharp
|
||||
// 매 player action이 매 later level에 visible reference
|
||||
WorldFlags.Set("destroyed_statue_of_liberty", true);
|
||||
// 6 mission later — NPC dialog gates
|
||||
if (WorldFlags.Get("destroyed_statue_of_liberty"))
|
||||
npc.Say("They're rebuilding her, you know. After the bombing.");
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 1st-person + RPG hybrid | Deus Ex 식 — skills + ammo + dialog |
|
||||
| Stealth-action focus | Dishonored 식 — powers + chaos |
|
||||
| Sci-fi horror | Prey / System Shock 식 |
|
||||
| Open hub | Mankind Divided Praha 식 |
|
||||
| Time mechanic | Dishonored 2 / Deathloop 식 |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: 매 small mission slice prototype — 매 4 routes (combat/stealth/hack/social) 모두 plausible 한지 매 first verify.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Immersive-Sim-Genre]] · [[Looking-Glass-Studios]]
|
||||
- 변형: [[Prey-2017]] · [[Deathloop]] · [[Weird-West]]
|
||||
- 응용: [[Dishonored-Chaos-System]] · [[Deus-Ex-Conspiracy-Narrative]]
|
||||
- Adjacent: [[Stealth-Game-Design]] · [[Cyberpunk-Aesthetic]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 mission outline 작성 시 LLM에게 "매 same objective의 매 4 route variant 생성" 요청 → 매 designer가 brainstorm 시드.
|
||||
**언제 X**: 매 voice line writing — 매 Harvey Smith / Raphael Colantonio 의 specific tone은 매 LLM이 reproduce 어려움.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Forced stealth section**: 매 player의 power buildup을 매 무시하고 매 scripted detection.
|
||||
- **Chaos system without payoff**: 매 player action track하지만 매 ending에 매 영향 없으면 매 betrayal.
|
||||
- **Boss fight as wall**: 매 ImSim에서 boss는 매 multi-route 가능해야 함 (Dishonored Outsider's Mark을 가진 boss를 stealth로 처리할 수 있어야).
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Harvey Smith GDC 2010 / 2014, Warren Spector "Postmortem: Deus Ex" (Game Developer Magazine 2000), Arkane Lyon Dishonored postmortem.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Deus Ex / Dishonored lineage, chaos / multi-path / power chaining patterns |
|
||||
|
||||
@@ -1,78 +1,146 @@
|
||||
---
|
||||
id: wiki-2026-0508-immersive-sims-deus-ex-thief
|
||||
title: Immersive Sims Deus Ex Thief
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Immersive Sims — Deus Ex / Thief
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Immersive Sim, ImSim, Looking Glass School, Systemic Design]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, immersive-sim, systemic, level-design, genre]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-doc
|
||||
framework: systemic-game-design
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Immersive Sims — Deus Ex / Thief
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 systems × player intent = emergent solution"**. Immersive sim 은 매 Looking Glass / Ion Storm 계보 (Ultima Underworld 1992 → Thief 1998 → Deus Ex 2000 → System Shock 2 → Dishonored → Prey 2017 → Weird West 2022 → 매 2026 indie revival). 매 핵심: 매 designer 의 단일 path 의 X — 매 simulated systems 의 interaction 으로 매 player 의 own solution 의 emerge.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Deus Ex와 Thief는 1세대 이머시브 심으로, 시스템 상호작용 + 플레이어 자율성 + 환경 스토리텔링의 토대를 만들었다.
|
||||
### 매 pillars (Warren Spector / Harvey Smith 의 formulation)
|
||||
1. **Player choice / consequence** — 매 multiple solutions per problem.
|
||||
2. **Systemic interaction** — 매 fire + oil + water + electricity 의 combine.
|
||||
3. **Object permanence / consistency** — 매 NPC 의 routine, 매 item 의 persistent state.
|
||||
4. **Verbosity over scripting** — 매 NPC 가 매 system rules 의 obey, 매 cutscene 의 X.
|
||||
5. **Diegetic UI / immersion** — 매 immersion break 의 minimize.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 systemic affordances
|
||||
- **Stealth**: shadow, sound, line-of-sight.
|
||||
- **Combat**: hitbox, damage type, armor.
|
||||
- **Tools**: rope arrow, biomod, gloo cannon, mimic ability.
|
||||
- **Environment**: light switch, vent, water, electricity, fire.
|
||||
|
||||
**추출된 패턴:** "감각/AI/물리"의 시스템 상호작용 — 그림자·소리·냄새·도구가 일관된 규칙으로 상호작용.
|
||||
### 매 응용
|
||||
1. Stealth-action design (Dishonored, Hitman WoA).
|
||||
2. RPG branching (Disco Elysium, Cyberpunk 2077 의 일부).
|
||||
3. 0451 lineage (System Shock remake, Prey, BioShock 의 일부).
|
||||
4. Indie revival (Gloomwood, Peripeteia, CYGNI: Foundation 2026).
|
||||
|
||||
**세부 내용:**
|
||||
- Thief(1998): 빛/소리 시스템 = 스텔스 코어.
|
||||
- Deus Ex(2000): RPG + FPS + 잠입 결합.
|
||||
- AI 인지: 시각·청각·기억.
|
||||
- 도구 다양성: 화살·약물·해킹.
|
||||
- 디자인 철학: 플레이어가 "속이는 즐거움".
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Systemic property tagging (entity-component)
|
||||
```cpp
|
||||
struct Entity {
|
||||
Flags props; // FLAMMABLE | CONDUCTIVE | WET | HEAVY | ALERTABLE
|
||||
};
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
void OnFireContact(Entity& e) {
|
||||
if (e.props & FLAMMABLE) e.AddState(BURNING);
|
||||
if (e.props & ALERTABLE) e.Alert(FIRE_NEARBY);
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
void OnElectric(Entity& e) {
|
||||
if (e.props & WET && e.props & ALERTABLE) // wet creatures take more
|
||||
e.Damage(ELECTRIC, base * 2.0f);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### NPC schedule (Thief / Dishonored AI routine)
|
||||
```python
|
||||
class GuardSchedule:
|
||||
def __init__(self):
|
||||
self.waypoints = [
|
||||
(Pos(10, 5), "patrol", dur=4.0),
|
||||
(Pos(20, 5), "look_around", dur=2.0),
|
||||
(Pos(20, 15), "patrol", dur=4.0),
|
||||
(Pos(10, 15), "chat_with_other", dur=6.0),
|
||||
]
|
||||
def tick(self, dt, world):
|
||||
if world.alert_level > 0:
|
||||
self.transition_to_search()
|
||||
else:
|
||||
self.advance_waypoint(dt)
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Vision / sound stealth check
|
||||
```python
|
||||
def detected(observer, target, world):
|
||||
if not has_los(observer.pos, target.pos, world):
|
||||
return False
|
||||
light = world.light_level_at(target.pos) # 0..1
|
||||
cover = target.crouching * 0.4
|
||||
distance_factor = clamp(1 - dist(observer, target)/observer.sight_range, 0, 1)
|
||||
score = light * distance_factor - cover
|
||||
return score > observer.detection_threshold
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Multi-solution objective
|
||||
```yaml
|
||||
objective: assassinate_target
|
||||
solutions:
|
||||
- lethal_direct: poison_drink + walk_away
|
||||
- lethal_indirect: rig_chandelier + cause_alarm
|
||||
- non_lethal: blackmail_evidence + spare_path
|
||||
- chaos_route: cause_riot + target_dies_in_chaos
|
||||
# matrix: chaos_score × notoriety_score → 매 ending branch
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Property-based interaction matrix
|
||||
| Source \ Target | FLAMMABLE | CONDUCTIVE | WET |
|
||||
|---|---|---|---|
|
||||
| FIRE | burn | melt insulation | extinguish |
|
||||
| ELECTRICITY | spark→burn | propagate | shock+ |
|
||||
| WATER | extinguish | short-circuit | (no-op) |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Linear narrative game | 매 일반 scripting (imsim 의 cost 의 too high) |
|
||||
| Sandbox / heist / stealth | **매 imsim** — 매 systemic 의 baseline |
|
||||
| Multiplayer competitive | 매 imsim 의 X (consistency cost) |
|
||||
| RPG with branching | 매 imsim-lite (Cyberpunk 식 — 매 일부 system 만) |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 4-5 systems 의 deep interaction (3+ pairs 의 emergent) > 매 20 systems 의 shallow.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Genres]] · [[Systemic_Design]]
|
||||
- 변형: [[0451_Lineage]] · [[Stealth_Genre]] · [[Roguelike_Imsim_Hybrid]]
|
||||
- 응용: [[Dishonored]] · [[Prey 2017]] · [[Gloomwood]]
|
||||
- Adjacent: [[Procedural-Level-Geometry]] · [[Base-Layouts-and-Kill-Zones]] · [[Biomechanics-of-Injury]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 systemic / stealth / RPG 의 design pillar discussion, 매 player-agency 의 framework, 매 emergent gameplay 의 recipe.
|
||||
**언제 X**: 매 narrative-linear / cinematic action (Naughty Dog 식) — 매 imsim cost 의 burden.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **System inflation**: 매 30+ systems 의 shallow interaction = 매 emergent X.
|
||||
- **Inconsistent rules**: 매 fire 가 매 어떤 oil 만 burn = 매 player trust 의 X.
|
||||
- **Designer's intended path bias**: 매 stealth path 만 매 reward → 매 choice 의 illusion.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Spector 2000 GDC "Postmortem of Deus Ex"; Smith / Colantonio Arkane interviews 2012-2024; Looking Glass retrospective 2022).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — pillar formulation, property-tagging code, multi-solution matrix |
|
||||
|
||||
@@ -1,82 +1,164 @@
|
||||
---
|
||||
id: wiki-2026-0508-iridium
|
||||
title: Iridium
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Ir, 이리듐, Platinum-group Metal]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-economy, premium-currency, sci-fi-resource, war-commander, hard-currency]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: F2P-economy
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Iridium
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Iridium은 War Commander 계열의 hard premium currency"**. 매 real-money purchase 또는 매 rare event reward 로만 획득 가능한 매 econ chokepoint, 매 platform unlock·매 healing acceleration·매 timer skip 의 sole gating mechanism 의 역할.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Source vs Sink
|
||||
- **Source**: 매 IAP bundle (USD → Iridium pack), 매 daily login streak (소량), 매 limited event leaderboard top reward, 매 War Commander Black Friday promo.
|
||||
- **Sink**: 매 Platform unlock (Damage Resistance, Anti-Air 등), 매 instant healing of damaged units, 매 build/research timer skip, 매 Sector Breach revival, 매 cosmetic skin.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Whale-targeted Design
|
||||
- 매 Iridium pack 의 매 tiered pricing: $4.99 / $19.99 / $99.99 / $499.99.
|
||||
- 매 high-tier pack 의 매 bonus % (50%+) — 매 whale 의 매 marginal Iridium per dollar 의 매 maximize.
|
||||
- 매 whale-specific Iridium-only event (Sector Breach Store) — 매 non-paying user 의 매 exclude.
|
||||
|
||||
### 매 응용
|
||||
1. War Commander (Kixeye, 2011) — 매 origin of the Iridium model.
|
||||
2. Mobile Strike — 매 Gold (analogue currency) 의 매 same role.
|
||||
3. Boom Beach (Supercell) — 매 Diamond (similar premium hard-currency).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Iridium balance tracking (server-authoritative)
|
||||
```typescript
|
||||
// Server-authoritative wallet — never trust client
|
||||
interface IridiumWallet {
|
||||
userId: string;
|
||||
balance: number;
|
||||
lifetimeEarned: number; // for whale-tier classification
|
||||
lifetimePurchased: number; // for VIP scoring
|
||||
lastTxn: Date;
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
async function spendIridium(userId: string, amount: number, sink: SinkType): Promise<TxnResult> {
|
||||
return await db.transaction(async (tx) => {
|
||||
const w = await tx.wallet.findOne({ userId, lock: 'FOR UPDATE' });
|
||||
if (w.balance < amount) return { ok: false, reason: 'INSUFFICIENT' };
|
||||
await tx.wallet.update({ userId }, { $inc: { balance: -amount } });
|
||||
await tx.iridiumLedger.insert({ userId, delta: -amount, sink, ts: new Date() });
|
||||
return { ok: true, newBalance: w.balance - amount };
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Tiered IAP bonus calculation
|
||||
```python
|
||||
# Iridium pack bonus scaling (Kixeye-style)
|
||||
PACKS = [
|
||||
{"usd": 4.99, "base": 500, "bonus_pct": 0},
|
||||
{"usd": 19.99, "base": 2200, "bonus_pct": 10},
|
||||
{"usd": 49.99, "base": 6000, "bonus_pct": 20},
|
||||
{"usd": 99.99, "base": 13000, "bonus_pct": 30},
|
||||
{"usd": 499.99,"base": 75000, "bonus_pct": 50}, # whale tier
|
||||
]
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
def total_iridium(pack):
|
||||
return int(pack["base"] * (1 + pack["bonus_pct"] / 100))
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
# whale gets 112,500 Iridium for $499.99 — vs 50,000 if linear
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Skip-timer pricing curve
|
||||
```typescript
|
||||
// Iridium cost to instant-finish a build/research timer
|
||||
function skipCost(remainingSec: number): number {
|
||||
// Kixeye uses ~1 Iridium per minute remaining, with floor and ceiling
|
||||
const minutes = Math.ceil(remainingSec / 60);
|
||||
const cost = Math.max(1, Math.min(2000, Math.ceil(minutes * 0.95)));
|
||||
return cost;
|
||||
}
|
||||
// 24h timer remaining → 1368 Iridium (~$5-10 worth depending on pack)
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Sector Breach revive gate
|
||||
```typescript
|
||||
// Critical sink — only Iridium can revive in PvP Sector Breach
|
||||
async function revivePlayer(userId: string, sectorId: string) {
|
||||
const reviveCost = 250 + getDeathCount(userId, sectorId) * 100; // escalating
|
||||
const result = await spendIridium(userId, reviveCost, 'SECTOR_REVIVE');
|
||||
if (!result.ok) return { revived: false };
|
||||
await respawnUnit(userId, sectorId);
|
||||
return { revived: true, cost: reviveCost };
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Whale-tier unlock detection
|
||||
```typescript
|
||||
// Trigger VIP customer-success outreach when lifetime Iridium spend crosses threshold
|
||||
const WHALE_TIERS = { silver: 10_000, gold: 50_000, diamond: 250_000 };
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
function classifyWhale(lifetimePurchased: number): keyof typeof WHALE_TIERS | 'none' {
|
||||
if (lifetimePurchased >= WHALE_TIERS.diamond) return 'diamond';
|
||||
if (lifetimePurchased >= WHALE_TIERS.gold) return 'gold';
|
||||
if (lifetimePurchased >= WHALE_TIERS.silver) return 'silver';
|
||||
return 'none';
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Iridium event leaderboard reward distribution
|
||||
```python
|
||||
# Top-N players in event leaderboard get Iridium scaled by rank
|
||||
def event_iridium_reward(rank: int) -> int:
|
||||
if rank == 1: return 5000
|
||||
if rank <= 10: return 2000
|
||||
if rank <= 100: return 500
|
||||
if rank <= 1000: return 100
|
||||
return 0 # cliff — only top performers get hard currency
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| F2P war/strategy game 의 hard currency 도입 | 매 Iridium-style single-currency model 권장 |
|
||||
| Platform/feature gating 의 magnitude 결정 | 매 60-90% paywall (free 못 unlock 일부 platform) |
|
||||
| Skip timer 의 pricing | 매 1 Iridium ≈ 1 min, ceiling at 2000 |
|
||||
| Whale outreach trigger | 매 lifetime $500+ spend |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 매 single hard currency (Iridium) + 매 dual soft currency (Metal/Oil) — 매 War Commander canonical pattern.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Premium Currency]] · [[Game Monetization Strategy]]
|
||||
- 변형: [[Mobile Strike]] (Gold) · [[Boom Beach]] (Diamond)
|
||||
- 응용: [[Sector-Breach-Store]] · [[Defense-Buildings]] · [[Platform-Specialization]]
|
||||
- Adjacent: [[고래 유저 (Whale Players)]] · [[하이브리드 수익화]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 mid-core strategy game 의 hard-currency design, 매 War Commander-style econ analysis, 매 whale-tier IAP modeling.
|
||||
**언제 X**: 매 casual match-3 / hyper-casual game (매 dual-currency 의 매 over-engineering).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **Skip-timer over-pricing**: 매 cost > 매 1.5 USD/hour 의 매 churn 의 매 spike.
|
||||
- **Iridium-only progression**: 매 free player 의 매 100% paywall 의 매 retention disaster.
|
||||
- **Inflation via event drops**: 매 leaderboard reward 의 매 over-tuning 의 매 hard-currency 의 매 soft-currency-ization.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Kixeye War Commander 2011-2024 LiveOps data, GDC 2018 talk "Designing Premium Currencies").
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Iridium hard-currency model + War Commander source/sink patterns |
|
||||
|
||||
@@ -1,82 +1,156 @@
|
||||
---
|
||||
id: wiki-2026-0508-jailing
|
||||
title: Jailing
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Player Jailing, Pinning, Lockdown Tactics]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, pvp, mmo-strategy, war-commander]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: pvp-strategy
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Jailing
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 victim 의 base 의 around 매 cordon 의 build → 매 movement 의 prevent"**. Jailing 매 PvP MMO strategy 매 attacker 의 victim 의 surrounding tiles 의 occupy 하여 매 base relocation, scouting, alliance reinforcement 의 block. War Commander, Last War, Mobile Strike 매 default war tactic.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Mechanics
|
||||
- **Tile occupation**: 매 victim base 의 adjacent grid cells 의 attacker units 의 station.
|
||||
- **Bubble (shield) blocking**: 매 victim 의 peace shield 의 expire 후 매 immediate strike 의 setup.
|
||||
- **Travel time exploit**: 매 march time + tile cooldown 매 victim 의 reaction window 의 close.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Tactical Layers
|
||||
- **Solo jailing**: 매 1v1 attacker → defender 의 personal lockdown.
|
||||
- **Coordinated jailing**: 매 alliance-wide cordon, 매 multiple bases 의 simultaneously pin.
|
||||
- **Counter-jail**: 매 jailed player 의 alliance 의 rescue march 의 dispatch.
|
||||
|
||||
### 매 응용
|
||||
1. Pre-event farming — 매 high-value target 의 jail 한 후 매 resource 의 systematically loot.
|
||||
2. War objective — 매 enemy alliance leader 의 jail 매 morale crash 의 induce.
|
||||
3. Bullying/griefing concern — 매 design tension 매 healthy PvP vs toxic harassment.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Tile occupation check
|
||||
```typescript
|
||||
interface Tile { x: number; y: number; occupantId: string | null; }
|
||||
interface Base { ownerId: string; x: number; y: number; }
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
function isJailed(base: Base, tiles: Map<string, Tile>): boolean {
|
||||
const adjacent = [
|
||||
[-1, -1], [0, -1], [1, -1],
|
||||
[-1, 0], [1, 0],
|
||||
[-1, 1], [0, 1], [1, 1],
|
||||
];
|
||||
let blocked = 0;
|
||||
for (const [dx, dy] of adjacent) {
|
||||
const key = `${base.x + dx},${base.y + dy}`;
|
||||
const t = tiles.get(key);
|
||||
if (t?.occupantId && t.occupantId !== base.ownerId) blocked++;
|
||||
}
|
||||
return blocked >= 6; // 6/8 surrounding tiles occupied = jailed
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Relocation block validator
|
||||
```typescript
|
||||
function canRelocate(base: Base, tiles: Map<string, Tile>, cooldownMs: number, lastMove: number): Result<Tile> {
|
||||
if (Date.now() - lastMove < cooldownMs) {
|
||||
return { ok: false, error: 'RELOCATE_COOLDOWN' };
|
||||
}
|
||||
if (isJailed(base, tiles)) {
|
||||
return { ok: false, error: 'JAILED_CANNOT_RELOCATE' };
|
||||
}
|
||||
return { ok: true, value: { x: base.x, y: base.y, occupantId: null } };
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Alliance rescue march
|
||||
```typescript
|
||||
async function dispatchRescue(allianceId: string, jailedBaseId: string): Promise<MarchOrder[]> {
|
||||
const members = await getAllianceMembers(allianceId);
|
||||
const target = await getBase(jailedBaseId);
|
||||
return members
|
||||
.filter(m => marchTime(m.base, target) < 30 * MINUTE)
|
||||
.map(m => ({
|
||||
from: m.base,
|
||||
to: pickAdjacentEnemyTile(target),
|
||||
type: 'rally',
|
||||
arrivesAt: Date.now() + marchTime(m.base, target),
|
||||
}));
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Jail timer + escape window
|
||||
```typescript
|
||||
class JailState {
|
||||
jailedAt: number | null = null;
|
||||
consecutiveJailMs = 0;
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
tick(now: number, currentlyJailed: boolean) {
|
||||
if (currentlyJailed && this.jailedAt === null) this.jailedAt = now;
|
||||
if (currentlyJailed) this.consecutiveJailMs = now - (this.jailedAt ?? now);
|
||||
if (!currentlyJailed) { this.jailedAt = null; this.consecutiveJailMs = 0; }
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
// Mercy mechanic: 매 24h+ jailing 매 forced teleport
|
||||
shouldForceTeleport(): boolean { return this.consecutiveJailMs > 24 * HOUR; }
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Anti-griefing throttle
|
||||
```typescript
|
||||
function canAttack(attacker: Player, defender: Player): boolean {
|
||||
const power = attacker.power / Math.max(1, defender.power);
|
||||
if (power > 5) return false; // 매 5x power gap 의 block
|
||||
if (defender.daysSinceInstall < 7) return false; // newbie protection
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Hardcore PvP MMO (War Commander, Last War) | 매 jailing 의 core mechanic 의 enable |
|
||||
| Casual / mid-core | 매 24h jail cap + auto-teleport 의 mercy |
|
||||
| New player onboarding | 매 first 7 days 의 immune |
|
||||
| Whale-vs-newbie 의 mismatch | 매 power gap throttle 의 enforce |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: 매 jailing 의 enabled 하되 매 mercy timer + power throttle 의 always enforce.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[PvP MMO Strategy]] · [[War Commander]]
|
||||
- 변형: [[Bubble Hugging]] · [[Rally Attacks]] · [[Sector Hegemony]]
|
||||
- 응용: [[Mobile Strike]] · [[Last Shelter Survival]] · [[Evolution-of-the-War-Commander-Combat-Ecosystem]]
|
||||
- Adjacent: [[Alliances-and-Sector-Hegemony]] · [[Defense-Buildings]] · [[Base-Layouts-and-Kill-Zones]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Tactical guide drafting, alliance war debrief synthesis, anti-griefing policy copy.
|
||||
**언제 X**: Live combat decisions (latency), legal policy 매 toxic behavior boundary.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **Unbounded jailing**: 매 mercy timer 매 absent 매 player churn 의 surge.
|
||||
- **No power throttle**: 매 whale 의 newbie 의 farm 매 acquisition funnel 의 destroy.
|
||||
- **Tile economy 의 absent**: 매 attacker 의 cost 매 zero 매 perpetual lockdown.
|
||||
- **Alliance rescue 의 broken**: 매 cooperative gameplay 매 stripped.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (War Commander community wikis, Mobile Strike PvP guides, MMO strategy literature 2024-2025).
|
||||
- 신뢰도 A-.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — jailing mechanics, tile occupation, anti-grief throttles |
|
||||
|
||||
@@ -1,82 +1,175 @@
|
||||
---
|
||||
id: wiki-2026-0508-kick-back-system
|
||||
title: Kick back System
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
title: Kick-back System (Gun Recoil Pattern)
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Recoil System, Gun Kick, Weapon Feedback]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, fps, weapon-feel, game-feel]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: Unity
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Kick-back System (Gun Recoil Pattern)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 weapon kick은 매 visual displacement + 매 control penalty + 매 audio impact의 multi-layer composite — 매 한 layer만으로는 'feel' 안 남."** Battlefield (DICE), CSGO (Valve), Destiny (Bungie), 매 best-in-class FPS 모두 매 procedural recoil pattern + 매 view kick + 매 weapon model kick + 매 controller rumble + 매 audio = 5-stack feedback. 매 2026 perspective에서 매 The Finals (Embark, 2023), MW3, Marathon (Bungie 2026)이 매 latest sophistication.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 layer composition
|
||||
- **Camera kick (view kick)**: 매 player의 aim point가 vertical + horizontal random pattern으로 displacement.
|
||||
- **Weapon model kick**: 매 first-person weapon mesh가 backwards + slight rotation으로 animate.
|
||||
- **Crosshair bloom**: 매 reticle expansion → 매 next shot accuracy degrade.
|
||||
- **Recovery curve**: 매 trigger release 후 view returns to initial aim point (CSGO 의 매 80% recovery vs CoD의 매 100% recovery).
|
||||
- **Audio kick + rumble**: 매 sub-bass thump + controller haptic.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 pattern types
|
||||
- **Random spread**: 매 cone bloom — 매 oldschool (Quake 1996).
|
||||
- **Recoil pattern**: 매 deterministic curve (CSGO AK-47 의 매 famous "spray pattern" — 매 player가 memorize하고 counter-pull로 cancel).
|
||||
- **Mixed**: 매 deterministic core + 매 random jitter (CoD MW2019+, Apex Legends).
|
||||
|
||||
### 매 응용
|
||||
1. **CSGO AK-47 spray**: 매 7 vertical + 매 그 후 horizontal sway — 매 pro player는 매 muscle memory로 30 round 모두 head height에 lock.
|
||||
2. **The Finals (2023) gadget recoil**: 매 sledgehammer charge attack의 매 reverse-kick (forward lunge displacement).
|
||||
3. **Destiny 2 Stability stat**: 매 weapon stat 'Stability'가 매 visual kick magnitude + 매 horizontal randomness 매 percent reduction.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Multi-layer recoil controller
|
||||
```csharp
|
||||
public class WeaponRecoil : MonoBehaviour {
|
||||
[SerializeField] AnimationCurve verticalKick; // x: shot index, y: degrees up
|
||||
[SerializeField] AnimationCurve horizontalKick; // x: shot index, y: degrees lateral
|
||||
[SerializeField] float recoveryRate = 8f; // degrees/sec back to aim
|
||||
[SerializeField] float cameraKickFactor = 0.7f; // 매 camera는 weapon보다 less
|
||||
[SerializeField] float weaponKickFactor = 1.0f;
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
Vector2 currentRecoil;
|
||||
Vector2 targetRecoil;
|
||||
int shotIndex = 0;
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
public void OnShoot() {
|
||||
float v = verticalKick.Evaluate(shotIndex);
|
||||
float h = horizontalKick.Evaluate(shotIndex);
|
||||
targetRecoil += new Vector2(h, v);
|
||||
shotIndex++;
|
||||
ApplyCameraKick(v * cameraKickFactor, h * cameraKickFactor);
|
||||
ApplyWeaponKick(v * weaponKickFactor, h * weaponKickFactor);
|
||||
TriggerHaptic();
|
||||
}
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
void Update() {
|
||||
currentRecoil = Vector2.MoveTowards(currentRecoil, targetRecoil,
|
||||
Time.deltaTime * 120f);
|
||||
targetRecoil = Vector2.MoveTowards(targetRecoil, Vector2.zero,
|
||||
Time.deltaTime * recoveryRate);
|
||||
if (Time.time - lastShot > 0.3f) shotIndex = 0;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Crosshair bloom
|
||||
```csharp
|
||||
public class CrosshairBloom : MonoBehaviour {
|
||||
public RectTransform crosshair;
|
||||
float currentSize = 1f;
|
||||
float targetSize = 1f;
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
public void OnShoot() => targetSize = Mathf.Min(targetSize + 0.3f, 3f);
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
void Update() {
|
||||
targetSize = Mathf.Lerp(targetSize, 1f, Time.deltaTime * 4f);
|
||||
currentSize = Mathf.Lerp(currentSize, targetSize, Time.deltaTime * 12f);
|
||||
crosshair.localScale = Vector3.one * currentSize;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
public float CurrentSpreadAngle => (currentSize - 1f) * 5f; // degrees
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Hipfire vs ADS modulation
|
||||
```csharp
|
||||
public float GetRecoilMultiplier(WeaponState state) {
|
||||
return state switch {
|
||||
WeaponState.Hipfire => 1.4f,
|
||||
WeaponState.ADS => 0.7f,
|
||||
WeaponState.Crouch => 0.85f,
|
||||
WeaponState.Move => 1.6f,
|
||||
_ => 1f,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Deterministic spray pattern (CSGO style)
|
||||
```csharp
|
||||
// 매 first 7 shots = vertical, 매 then horizontal sway
|
||||
static readonly Vector2[] AK47_PATTERN = new Vector2[] {
|
||||
new(0f, 0f),
|
||||
new(0.1f, 1.2f), new(-0.05f, 2.1f), new(0.08f, 2.8f),
|
||||
new(-0.1f, 3.4f), new(0.15f, 3.9f), new(-0.2f, 4.3f),
|
||||
// 매 sway phase
|
||||
new(0.6f, 4.5f), new(-0.7f, 4.4f), new(0.8f, 4.3f),
|
||||
new(-0.9f, 4.2f), new(1.0f, 4.0f), /* ... */
|
||||
};
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
Vector2 GetKick(int shotIndex) {
|
||||
int i = Mathf.Min(shotIndex, AK47_PATTERN.Length - 1);
|
||||
return AK47_PATTERN[i];
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Haptic + audio coupling
|
||||
```csharp
|
||||
public void TriggerHaptic() {
|
||||
Gamepad.current?.SetMotorSpeeds(0.4f, 0.7f);
|
||||
Invoke(nameof(StopHaptic), 0.05f);
|
||||
audioSource.PlayOneShot(gunshotClip);
|
||||
cameraShake.Shake(0.2f, 0.04f); // 매 magnitude, duration
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Competitive FPS (skill expression) | Deterministic pattern (CSGO 식) |
|
||||
| Casual / accessibility | Mostly random + small kick |
|
||||
| Realism sim | Larger kick, slower recovery |
|
||||
| Mobile FPS | Reduced kick — 매 small screen에서 kick 너무 크면 매 disorient |
|
||||
| VR FPS | 매 minimal camera kick (매 motion sickness) |
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
**기본값**: 매 5-stack composite (camera + weapon + bloom + audio + haptic). 매 single-layer kick은 매 cheap-feel.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game-Feel]] · [[FPS-Design-Fundamentals]]
|
||||
- 변형: [[Recoil-Pattern-Memorization]] · [[Weapon-Stability-Stat]]
|
||||
- 응용: [[CSGO-Spray-Control]] · [[Destiny-Weapon-Stats]]
|
||||
- Adjacent: [[Camera-Shake-Patterns]] · [[Haptic-Feedback-Design]]
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 weapon stat tuning 시 LLM에게 매 reference weapon (AK-47, M4A1, MP5) 의 매 standard recoil parameters 요청 — 매 starting baseline 제공.
|
||||
**언제 X**: 매 final feel tuning — 매 pure subjective, 매 playtester가 매 직접 시행.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## ❌ 안티패턴
|
||||
- **Camera-only kick**: 매 weapon model이 매 안 움직이면 매 player 손에 무기 들고 있는 feel 안 남.
|
||||
- **Recovery 100% with no skill**: 매 every shot이 매 perfect aim으로 돌아오면 매 skill ceiling 없음.
|
||||
- **Random-only spread**: 매 player가 learn할 수 있는 게 없으면 매 mastery feel 없음.
|
||||
- **No audio coupling**: 매 visual kick 있는데 매 audio가 weak하면 매 disconnect.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Mark Brown "Game Maker's Toolkit: Game Feel of Weapons", Steve Swink "Game Feel" (2008), DICE GDC 2014 "Frostbite Weapon System".
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — multi-layer composite recoil, deterministic vs random pattern, full Unity controller |
|
||||
|
||||
@@ -1,80 +1,162 @@
|
||||
---
|
||||
id: wiki-2026-0508-live-operations-liveops
|
||||
title: Live Operations (LiveOps)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [LiveOps, Live Service Operations, 라이브옵스]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [liveops, operations, f2p, monetization, retention]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: node
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Live Operations (LiveOps)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 game 의 매 launch ≠ ship — 매 ongoing service 의 매 continuous content + event + balance"**. 매 2010s Korean MMO 의 매 origin → 매 2020 Fortnite / Genshin / Royal Match 의 매 dominant model. 매 calendar + segment + offer + content 의 매 4-rail orchestration.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> LiveOps는 출시 후 게임을 콘텐츠·이벤트·BM·CS로 지속 운영하는 활동으로, F2P 게임의 매출 90%를 만든다.
|
||||
## 매 핵심
|
||||
|
||||
### 매 4 rail
|
||||
- **Calendar**: 매 daily / weekly / monthly cadence + season pulse.
|
||||
- **Content**: 매 chapter / event / collab drop.
|
||||
- **Economy**: 매 sink / source / sale / 매 inflation control.
|
||||
- **Communication**: 매 patch note / community / push notification.
|
||||
|
||||
> LiveOps는 출시 후 게임을 지속 운영하며 콘텐츠·이벤트·BM·밸런스를 동적으로 조정해 LTV를 극대화하는 활동이다.
|
||||
### 매 KPI
|
||||
- **DAU / WAU / MAU**.
|
||||
- **D1 / D7 / D30 retention**.
|
||||
- **ARPDAU + LTV**.
|
||||
- **Event participation rate**.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 응용
|
||||
1. Genshin Impact (41-day banner cycle).
|
||||
2. Royal Match (daily-event empire).
|
||||
3. Fortnite (chapter-season pulse).
|
||||
4. Clash Royale (deck-rotation balance).
|
||||
|
||||
**추출된 패턴:** LiveOps 캘린더는 일일·주간·월간·시즌의 4단 시계열로 구성 — 각 주기마다 다른 retention/매출 책임.
|
||||
## 💻 패턴
|
||||
|
||||
**세부 내용:**
|
||||
- 일일 미션·로그인 보상.
|
||||
- 주간 이벤트(특별 던전·보스).
|
||||
- 월간 패스·신규 캐릭터 가챠.
|
||||
- 시즌(분기) 대규모 콘텐츠 패치.
|
||||
- 데이터 모니터링 + 핫픽스 + 마케팅 동기화.
|
||||
### Event scheduler
|
||||
```typescript
|
||||
interface LiveEvent {
|
||||
id: string;
|
||||
startUtc: string;
|
||||
endUtc: string;
|
||||
segments: string[];
|
||||
rewardTable: Reward[];
|
||||
}
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
function activeEvents(now: Date, all: LiveEvent[], userSeg: string): LiveEvent[] {
|
||||
return all.filter(e =>
|
||||
new Date(e.startUtc) <= now &&
|
||||
new Date(e.endUtc) >= now &&
|
||||
e.segments.includes(userSeg)
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Segmentation engine
|
||||
```typescript
|
||||
type Segment = 'newbie' | 'engaged' | 'whale' | 'churner' | 'returner';
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function segmentUser(p: PlayerProfile, now: number): Segment {
|
||||
const daysSinceInstall = (now - p.installAt) / 86400_000;
|
||||
const daysSincePlay = (now - p.lastPlayAt) / 86400_000;
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
if (daysSincePlay > 7) return 'churner';
|
||||
if (daysSinceInstall < 7) return 'newbie';
|
||||
if (p.lifetimeSpend > 500) return 'whale';
|
||||
if (daysSincePlay < 1 && p.sessionCount30d > 20) return 'engaged';
|
||||
return 'engaged';
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Dynamic offer engine
|
||||
```typescript
|
||||
interface Offer { id: string; priceUsd: number; contents: { id: string; qty: number }[]; expiresAt: number; }
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
function generateOffer(seg: Segment, ctx: GameContext): Offer | null {
|
||||
if (seg === 'newbie' && ctx.justFailedHardLevel)
|
||||
return { id:'starter_boost', priceUsd:0.99, contents:[{id:'lives',qty:5}], expiresAt: Date.now()+15*60_000 };
|
||||
if (seg === 'whale' && ctx.bannerEndsIn < 12*3600_000)
|
||||
return { id:'whale_finisher', priceUsd:99.99, contents:[{id:'gem',qty:8000}], expiresAt: ctx.bannerEnd };
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Hot-config / remote balance
|
||||
```typescript
|
||||
interface LiveConfig { version: number; goldRatePerWin: number; bossHp: Record<string,number>; bannerWeights: Record<string,number>; }
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
let CONFIG: LiveConfig = INITIAL;
|
||||
async function pollConfig(): Promise<void> {
|
||||
const remote = await fetch('https://liveops/cfg').then(r => r.json());
|
||||
if (remote.version > CONFIG.version) CONFIG = remote;
|
||||
}
|
||||
setInterval(pollConfig, 60_000);
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### A/B test harness
|
||||
```typescript
|
||||
function variant(userId: string, exp: string): 'A' | 'B' {
|
||||
const h = hash(userId + exp) % 100;
|
||||
return h < 50 ? 'A' : 'B';
|
||||
}
|
||||
function logExposure(userId: string, exp: string, v: 'A'|'B'): void {
|
||||
analytics.track('exp_exposure', { userId, exp, v, ts: Date.now() });
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Push-notification scheduler
|
||||
```typescript
|
||||
function maybePush(p: PlayerProfile, now: number): PushPayload | null {
|
||||
const idle = (now - p.lastPlayAt) / 3600_000;
|
||||
if (idle > 24 && idle < 72) return { title:'Energy is full!', body:'Come claim your gift.' };
|
||||
if (p.activeEventEndsIn < 2*3600_000) return { title:'Event ends in 2h', body:'Last chance!' };
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Mid-core RPG | 41-day banner + weekly event + daily quest |
|
||||
| Casual puzzle | Daily-event + streak + dynamic offer |
|
||||
| Competitive PvP | Short season (2-4w) + balance-patch cadence |
|
||||
| Sandbox MMO | Long expansion (6-12mo) + living-world events |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: weekly cadence + monthly content drop + 41-day major arc — 매 modern F2P template.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Monetization Strategy]] · [[Live Service]]
|
||||
- 변형: [[Battle Pass]] · [[Season Pass]]
|
||||
- 응용: [[Royal Match]] · [[Genshin Impact]] · [[Fortnite]]
|
||||
- Adjacent: [[Dynamic Offers]] · [[Player Retention]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: event calendar drafting, segment-rule design, offer copy generation.
|
||||
**언제 X**: 매 final balancing decision (designer + analyst 영역).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Over-eventing**: 매 too-many-overlapping event 의 매 player fatigue.
|
||||
- **Whale-only design**: 매 mid/low spender alienation.
|
||||
- **No-rollback**: 매 bad balance patch 의 매 hot-config rollback path 의 X.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (deconstructoroffun.com, GDC LiveOps talks 2022-2024, Adjust LiveOps report 2024).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full LiveOps 4-rail + scheduler/segment/offer code |
|
||||
|
||||
@@ -1,78 +1,183 @@
|
||||
---
|
||||
id: wiki-2026-0508-love-and-deepspace
|
||||
title: Love and Deepspace
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [LADS, 恋与深空, Love and Deepspace, Papergames Otome]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [otome, gacha, 3d-character-romance, papergames, mobile-narrative]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: 3D-otome-gacha
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Love and Deepspace
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Love and Deepspace는 Papergames 의 매 3D real-time-rendered otome romance gacha"**. 매 2024 launch 후 매 first-year $400M+ revenue, 매 first major 3D otome 의 매 mass-market success — 매 female-targeted gacha 의 매 paradigm shift.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Love and Deepspace는 여성 타겟 3D 데이팅 시뮬레이션 모바일 게임으로, 가챠+라이브옵스+세련된 비주얼로 글로벌 흥행했다.
|
||||
### 매 Genre Innovation
|
||||
- **3D 실시간 rendering**: 매 prior otome (Mr Love, Tears of Themis) 의 매 2D static art vs 매 LADS 의 매 fully 3D animated love-interest models.
|
||||
- **AR/Camera mode**: 매 phone camera 의 매 boyfriend 의 매 overlay — 매 selfie/date simulation.
|
||||
- **Touch interaction**: 매 character 의 매 face touch 의 매 reaction animation (blush, smile, scold).
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Monetization Levers
|
||||
- **Memory gacha (cards)**: 매 SSR memory card 의 매 0.6% rate, 매 90-pull pity, 매 100-pull guarantee.
|
||||
- **Outfit gacha**: 매 limited cosmetic gacha for love-interest costumes.
|
||||
- **VIP/season pass**: 매 매 monthly + 매 quarterly tier.
|
||||
|
||||
**추출된 패턴:** 정서·낭만의 가챠화 — 카드/코스튬/이벤트가 결제 동기.
|
||||
### 매 응용
|
||||
1. Mr Love: Queen's Choice (Papergames 2017) — 매 2D predecessor.
|
||||
2. Tears of Themis (HoYoverse) — 매 mystery-otome variant.
|
||||
3. Project Sekai 의 character-romance (rhythm hybrid).
|
||||
|
||||
**세부 내용:**
|
||||
- 3D 보이스·모션 캡처.
|
||||
- 4명의 메인 남자 캐릭터.
|
||||
- BM: 가챠(카드/코스튬) + 패스.
|
||||
- 글로벌 출시: 한·일·미·대만.
|
||||
- Infold Games 흥행작.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Memory gacha pity system
|
||||
```typescript
|
||||
interface PityState {
|
||||
pulls: number;
|
||||
hardPity: number; // 100 — guaranteed SSR
|
||||
softPity: number; // 75 — rate increases linearly
|
||||
lastSSRpull: number;
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function pullRate(pity: PityState): number {
|
||||
if (pity.pulls >= pity.hardPity) return 1.0;
|
||||
if (pity.pulls < pity.softPity) return 0.006; // base 0.6%
|
||||
// Soft pity ramps from 0.6% to 50% between 75-99
|
||||
const progress = (pity.pulls - pity.softPity) / (pity.hardPity - pity.softPity);
|
||||
return 0.006 + progress * (0.5 - 0.006);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Featured-character 50/50 system
|
||||
```python
|
||||
# When SSR drops, 50% chance of featured character
|
||||
# Lose-streak guarantees featured next SSR
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
def resolve_ssr_drop(state):
|
||||
if state.lose_streak == 1:
|
||||
# Guaranteed featured
|
||||
return state.banner.featured_character
|
||||
else:
|
||||
if random() < 0.5:
|
||||
return state.banner.featured_character
|
||||
else:
|
||||
state.lose_streak = 1 # next SSR is guaranteed featured
|
||||
return random.choice(state.banner.standard_pool)
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### 3D character animation state machine
|
||||
```typescript
|
||||
type EmotionState = 'neutral' | 'happy' | 'sad' | 'shy' | 'angry' | 'love';
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
class LoveInterestController {
|
||||
affection: number = 0;
|
||||
emotion: EmotionState = 'neutral';
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
onTouch(area: 'face' | 'hand' | 'hair'): EmotionReaction {
|
||||
// Different areas trigger different reactions based on affection
|
||||
if (this.affection < 100 && area === 'face') {
|
||||
return { emotion: 'shy', voiceLine: 'shy_low_affection_v1' };
|
||||
}
|
||||
if (this.affection >= 1000 && area === 'face') {
|
||||
this.emotion = 'love';
|
||||
return { emotion: 'love', voiceLine: 'love_high_affection_v3' };
|
||||
}
|
||||
return { emotion: 'neutral', voiceLine: null };
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### AR camera mode integration
|
||||
```typescript
|
||||
// Use ARKit/ARCore to anchor 3D character in real-world space
|
||||
import { ARSession, ARAnchor } from 'arkit-bridge';
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
async function startDateMode(loveInterestId: string) {
|
||||
const session = await ARSession.start({ planeDetection: 'horizontal' });
|
||||
session.onPlaneDetected(async plane => {
|
||||
const anchor = await session.addAnchor(plane.center);
|
||||
await loadCharacterAt(loveInterestId, anchor);
|
||||
enableTouchInteraction();
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Date scene branching dialog
|
||||
```python
|
||||
# Otome dialog tree — choices affect affection
|
||||
class DialogNode:
|
||||
def __init__(self, line, choices):
|
||||
self.line = line # love-interest line
|
||||
self.choices = choices # [(text, affection_delta, next_node), ...]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
# Sample
|
||||
n1 = DialogNode("저녁 뭐 먹을까?", [
|
||||
("좋아하는 거 먹자", +5, n2_loving),
|
||||
("아무거나", -2, n2_dismissive),
|
||||
("내가 만들어줄게", +10, n2_special),
|
||||
])
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
### Outfit/skin storage
|
||||
```typescript
|
||||
interface CosmeticInventory {
|
||||
loveInterestId: string;
|
||||
ownedOutfits: Set<string>;
|
||||
equippedOutfit: string;
|
||||
// Outfits affect 3D model + dialog flavor
|
||||
}
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
async function equipOutfit(userId: string, liId: string, outfitId: string) {
|
||||
const inv = await getInventory(userId, liId);
|
||||
if (!inv.ownedOutfits.has(outfitId)) throw new Error('NOT_OWNED');
|
||||
inv.equippedOutfit = outfitId;
|
||||
await refreshSceneAssets(userId, liId, outfitId);
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Otome game 의 graphical fidelity | 매 3D real-time (LADS standard) vs 매 2D illustrated (legacy) |
|
||||
| Gacha rate 설계 | 매 0.6% SSR + 매 75/100 pity + 매 50/50 featured |
|
||||
| Player intimacy mechanic | 매 touch interaction + 매 AR camera |
|
||||
| Live-ops cadence | 매 6-week character banner + 매 monthly outfit |
|
||||
|
||||
**기본값**: 매 3D rendered otome + 매 dual gacha (memory + outfit) + 매 AR/touch intimacy — 매 LADS canonical formula.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Gacha Mechanics Analysis]] · [[Game Monetization Strategy]]
|
||||
- 변형: [[포켓몬 마스터즈 EX(Pokemon Masters EX)]] · [[Final Fantasy XV- A New Empire]]
|
||||
- 응용: [[Live Operations (LiveOps)]] · [[Dynamic Offers]] · [[고래 유저 (Whale Players)]]
|
||||
- Adjacent: [[Player-Experience-Modeling]] · [[하이브리드 수익화]] · [[Algorithmic Rhetoric]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 otome game 의 3D character system design, 매 gacha pity tuning, 매 female-target monetization analysis.
|
||||
**언제 X**: 매 male-target shooter / strategy game (매 otome mechanics 의 매 mismatch).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **0.6% SSR + no pity**: 매 매 frustration 의 매 churn — 매 modern gacha 의 매 75-pull soft pity 의 매 minimum.
|
||||
- **Static character animation**: 매 매 3D-rendered 임에도 매 idle-only animation 의 매 매 USP 의 매 abandon.
|
||||
- **Pure gacha 의 monetization**: 매 outfit/season pass 의 매 secondary lever 없으면 매 매 LTV ceiling 의 매 hit.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Sensor Tower 2024 LADS revenue report, Papergames investor disclosures, Western press reviews).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — LADS 3D-otome paradigm + gacha/AR patterns |
|
||||
|
||||
@@ -1,78 +1,182 @@
|
||||
---
|
||||
id: wiki-2026-0508-magic-sort
|
||||
title: "Magic Sort!"
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: ["Magic Sort", "Sort Puzzle"]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, casual, puzzle, mobile, hypercasual, sort]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: casual-puzzle
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Magic Sort!
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 colored items 의 tubes/containers 의 across 매 sort"**. Magic Sort! 매 2021-2024 hypercasual sort puzzle 의 representative title — 매 pour-bottle / ball-sort / nut-sort 의 lineage 의 따라 매 satisfying haptic + clear win-state 의 deliver. 2026 매 hybridcasual era 매 meta-progression + LiveOps 의 layered.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Magic Sort!는 정렬·논리 퍼즐 기반 캐주얼 모바일 게임으로, 단순 코어와 광고 BM의 전형적 하이퍼캐주얼 구조를 따른다.
|
||||
### 매 Core Loop
|
||||
- **Pour mechanic**: 매 source tube 의 select → matching-color top portion 의 dest tube 의 transfer.
|
||||
- **Win condition**: 매 each tube 의 single color (or empty).
|
||||
- **Constraint**: 매 dest tube 의 top color 매 source top color 와 match (or empty).
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Layers (hypercasual → hybridcasual)
|
||||
- 매 Layer 0: Pure puzzle (300+ levels).
|
||||
- 매 Layer 1: Power-ups (extra tube, undo, bomb).
|
||||
- 매 Layer 2: Meta-progression (themes, decoration unlock).
|
||||
- 매 Layer 3: LiveOps events (timed leagues, gacha skins).
|
||||
|
||||
**추출된 패턴:** 직관적 코어 + 빠른 진행 + 광고 노출 = 하이퍼캐주얼 매출.
|
||||
### 매 응용
|
||||
1. Sort puzzle blueprint — Water Sort, Ball Sort, Nut Sort 의 same family.
|
||||
2. Hybridcasual reference — 매 2024-2026 evolution model.
|
||||
3. Difficulty curve study — 매 procedural level generator 의 case.
|
||||
|
||||
**세부 내용:**
|
||||
- 색상/크기/패턴 정렬 퍼즐.
|
||||
- 5초 만에 이해 가능한 코어.
|
||||
- BM: 인터스티셜 광고 위주.
|
||||
- 보상형 광고로 진행 가속.
|
||||
- 평균 세션 짧음 (3~5분).
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Tube state + pour move
|
||||
```typescript
|
||||
type Tube = string[]; // bottom-to-top color stack
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function topRun(t: Tube): { color: string | null; count: number } {
|
||||
if (t.length === 0) return { color: null, count: 0 };
|
||||
const c = t[t.length - 1];
|
||||
let n = 0;
|
||||
for (let i = t.length - 1; i >= 0 && t[i] === c; i--) n++;
|
||||
return { color: c, count: n };
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function canPour(src: Tube, dst: Tube, capacity: number): boolean {
|
||||
const s = topRun(src);
|
||||
if (s.color === null) return false;
|
||||
if (dst.length === capacity) return false;
|
||||
if (dst.length === 0) return true;
|
||||
return dst[dst.length - 1] === s.color && dst.length + s.count <= capacity;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function pour(src: Tube, dst: Tube, capacity: number): [Tube, Tube] {
|
||||
const s = topRun(src);
|
||||
const space = capacity - dst.length;
|
||||
const moved = Math.min(s.count, space);
|
||||
return [
|
||||
src.slice(0, src.length - moved),
|
||||
[...dst, ...Array(moved).fill(s.color)],
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Solver (BFS — 매 level validity check)
|
||||
```typescript
|
||||
function isSolved(tubes: Tube[], capacity: number): boolean {
|
||||
return tubes.every(t =>
|
||||
t.length === 0 ||
|
||||
(t.length === capacity && t.every(c => c === t[0]))
|
||||
);
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
function solve(initial: Tube[], capacity: number, maxDepth = 200): number | null {
|
||||
const seen = new Set<string>();
|
||||
const queue: [Tube[], number][] = [[initial, 0]];
|
||||
while (queue.length) {
|
||||
const [state, depth] = queue.shift()!;
|
||||
if (isSolved(state, capacity)) return depth;
|
||||
if (depth >= maxDepth) continue;
|
||||
const key = state.map(t => t.join(',')).join('|');
|
||||
if (seen.has(key)) continue;
|
||||
seen.add(key);
|
||||
for (let i = 0; i < state.length; i++) {
|
||||
for (let j = 0; j < state.length; j++) {
|
||||
if (i !== j && canPour(state[i], state[j], capacity)) {
|
||||
const next = state.map(t => [...t]);
|
||||
[next[i], next[j]] = pour(next[i], next[j], capacity);
|
||||
queue.push([next, depth + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Procedural level generator
|
||||
```typescript
|
||||
function genLevel(colors: number, capacity: number, extraTubes = 2): Tube[] {
|
||||
// 매 reverse generation: 매 solved state 의 from 매 random pours 의 unwind
|
||||
const solved: Tube[] = [];
|
||||
for (let c = 0; c < colors; c++) {
|
||||
solved.push(Array(capacity).fill(`c${c}`));
|
||||
}
|
||||
for (let e = 0; e < extraTubes; e++) solved.push([]);
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
let state = solved;
|
||||
for (let i = 0; i < 50 + colors * 10; i++) {
|
||||
const moves = legalReversePours(state, capacity);
|
||||
if (moves.length === 0) break;
|
||||
const m = moves[Math.floor(Math.random() * moves.length)];
|
||||
state = applyReverse(state, m, capacity);
|
||||
}
|
||||
return state;
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Difficulty score (move-graph branching)
|
||||
```typescript
|
||||
function difficulty(level: Tube[], capacity: number): number {
|
||||
const optimal = solve(level, capacity);
|
||||
if (optimal === null) return Infinity;
|
||||
const branchingFactor = avgLegalMoves(level, capacity);
|
||||
return optimal * Math.log2(branchingFactor + 1);
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Power-up: extra tube
|
||||
```typescript
|
||||
function applyExtraTube(tubes: Tube[]): Tube[] {
|
||||
return [...tubes, []];
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Hypercasual launch (CPI 의 minimize) | 매 pure mechanic + IAA 만 |
|
||||
| Hybridcasual evolution | 매 meta + battle pass + LiveOps 의 layer |
|
||||
| Brain-training positioning | 매 difficulty curve + procedural infinite levels |
|
||||
| IP collab opportunity | 매 themed skins + limited gacha |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: 매 2026 hybridcasual — pure mechanic + light meta + weekly events.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[Casual Puzzle]] · [[Hypercasual]] · [[Hybridcasual]]
|
||||
- 변형: [[Water Sort Puzzle]] · [[Ball Sort]] · [[Nut Sort]]
|
||||
- 응용: [[Live Operations (LiveOps)]] · [[Battle Pass]]
|
||||
- Adjacent: [[Capybara GO!]] · [[Royal Match]] · [[CPI (Cost Per Install)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Level theme brainstorming, tutorial copy, retention email variants.
|
||||
**언제 X**: Solver / difficulty calibration (deterministic algorithm 의 superior), economy calibration.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Unsolvable levels**: 매 procedural generator 매 solver verification 의 absent.
|
||||
- **Difficulty cliffs**: 매 monotonic difficulty 매 churn spike.
|
||||
- **Forced ad walls**: 매 hypercasual 매 acceptable, hybridcasual 매 retention 의 destroy.
|
||||
- **No win-state telegraph**: 매 player 매 solved 의 모를 — 매 satisfaction loop break.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Sensor Tower hypercasual reports 2024-2025, Deconstructor of Fun, Naavik hybridcasual analyses).
|
||||
- 신뢰도 B+.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — sort puzzle mechanics, BFS solver, procedural generation |
|
||||
|
||||
@@ -1,78 +1,134 @@
|
||||
---
|
||||
id: wiki-2026-0508-magic-circle
|
||||
title: Magic Circle
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Magic Circle, Huizinga Magic Circle, Game Frame]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-theory, philosophy, salen-zimmerman, huizinga]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: none
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Magic Circle
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 game 의 매 voluntary entered 의 매 separate reality"**. 매 1938 Huizinga 'Homo Ludens' coinage → 매 2003 Salen-Zimmerman 'Rules of Play' 의 매 game-design canonization → 매 2024 metaverse / VR 의 매 boundary-blur 의 매 contemporary debate. 매 'inside ≠ outside' 의 매 philosophical container.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 매직 서클은 게임이라는 인공 공간으로, 일상의 규칙과 다른 게임 내 규칙·의미가 작동하는 심리적·문화적 영역이다.
|
||||
### 매 정의 (Salen-Zimmerman)
|
||||
- 매 player 의 매 voluntary entry.
|
||||
- 매 internal rules ≠ external reality 의 매 separation.
|
||||
- 매 temporary / spatial 의 매 boundedness.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 boundary type
|
||||
- **Spatial**: 매 board / arena / VR space.
|
||||
- **Temporal**: 매 match-clock / session.
|
||||
- **Conceptual**: 매 IP-rule / 매 'pretend' frame.
|
||||
|
||||
**추출된 패턴:** 매직 서클 안에선 일상에서 비합리적인 행동도 "의미 있음" — 게임 디자인은 이 경계를 만들고 유지하는 일.
|
||||
### 매 응용
|
||||
1. 매 LARP 의 매 explicit boundary ritual.
|
||||
2. 매 Among Us 의 매 'meeting' reset 의 magic-circle pulse.
|
||||
3. 매 ARG 의 매 deliberate boundary-blur (TINAG = This Is Not A Game).
|
||||
|
||||
**세부 내용:**
|
||||
- Huizinga의 'Homo Ludens' 원전.
|
||||
- 게임 규칙 = 매직 서클의 경계.
|
||||
- 외부 가치(돈)가 들어오면 매직 서클 약화 (P2W).
|
||||
- 디지털 게임은 물리적 경계 대신 심리적 경계.
|
||||
- 메타게임·ARG가 매직 서클 확장.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Magic-circle state model
|
||||
```typescript
|
||||
enum CircleState { Outside, Entering, Inside, Exiting }
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
interface PlayerSession {
|
||||
id: string;
|
||||
state: CircleState;
|
||||
enteredAt: number | null;
|
||||
rulesContext: 'social' | 'game';
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function enterCircle(s: PlayerSession): PlayerSession {
|
||||
if (s.state !== CircleState.Outside) return s;
|
||||
return { ...s, state: CircleState.Inside, enteredAt: Date.now(), rulesContext: 'game' };
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function exitCircle(s: PlayerSession): PlayerSession {
|
||||
return { ...s, state: CircleState.Outside, enteredAt: null, rulesContext: 'social' };
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Rule-context switcher
|
||||
```typescript
|
||||
type Action = { kind: 'kill' | 'steal' | 'lie' | 'cooperate' };
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
function isPermitted(a: Action, ctx: 'social' | 'game'): boolean {
|
||||
if (ctx === 'game') return true; // 매 inside circle: 매 rules 의 game's
|
||||
return a.kind === 'cooperate';
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Bleed-detection (LARP)
|
||||
```typescript
|
||||
interface PlayerEmotion { inGame: number; outGame: number; }
|
||||
function bleedScore(e: PlayerEmotion): number {
|
||||
return Math.abs(e.inGame - e.outGame);
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### TINAG / ARG boundary obfuscation
|
||||
```typescript
|
||||
interface ARGEvent { channel: 'phone' | 'website' | 'realLetter' | 'inGame'; diegetic: boolean; }
|
||||
function isMagicCircleBlurred(events: ARGEvent[]): boolean {
|
||||
const realChannels = events.filter(e => e.channel !== 'inGame' && e.diegetic);
|
||||
return realChannels.length / events.length > 0.3;
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Consent-gate
|
||||
```typescript
|
||||
interface ConsentForm { physicalContact: boolean; emotionalIntensity: 'low' | 'medium' | 'high'; safeWord: string; }
|
||||
function canEnterCircle(form: ConsentForm): boolean {
|
||||
return form.safeWord.length > 0;
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Competitive multiplayer | Strict spatial+temporal circle |
|
||||
| LARP / immersive | Pre-game ritual + safe-word + bleed-management |
|
||||
| ARG | Deliberate boundary-blur + ethical guard-rail |
|
||||
| F2P mobile | Lighter circle — 매 monetization cross-boundary |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: Explicit entry+exit ritual + 매 safe-word — 매 ethics-first design.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Theory]] · [[Huizinga Homo Ludens]]
|
||||
- 변형: [[Lusory Attitude]] · [[TINAG (This Is Not A Game)]]
|
||||
- 응용: [[LARP]] · [[Among Us]] · [[Alternate Reality Game]]
|
||||
- Adjacent: [[Procedural Rhetoric (In Gaming)]] · [[Player-Experience-Modeling]] · [[Gamification-Theory]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: game-design philosophy, LARP boundary modeling, ARG narrative design.
|
||||
**언제 X**: 매 deep ethnographic field study (researcher-led).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No exit ritual**: 매 bleed accumulation 의 매 player burnout.
|
||||
- **Forced TINAG**: 매 player consent 의 X — 매 ethical breach.
|
||||
- **Monetization breach**: 매 P2W 의 매 in-game value 의 out-of-game money 의 매 seepage.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Huizinga 1938, Salen-Zimmerman 2003 'Rules of Play', Stenros 2014).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — magic-circle theory + state model |
|
||||
|
||||
@@ -1,78 +1,142 @@
|
||||
---
|
||||
id: wiki-2026-0508-mckinsey-problem-solving-test-ps
|
||||
title: McKinsey Problem Solving Test (PST)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [McKinsey PST, McKinsey Solve, Imbellus]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, assessment, gamification, business-strategy, recruitment]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: assessment-design
|
||||
framework: simulation-based-testing
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# McKinsey Problem Solving Test (PST)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 paper case 의 from → 매 ecosystem simulation game 의 to"**. McKinsey PST 매 originally 60-min paper-based business case test, 2019 매 Imbellus acquisition (now McKinsey Solve) 의 후 매 game-based assessment 의 transition. 매 60-min 의 동안 매 ecosystem-building, redrock-defense, plant-defense scenarios 의 candidate cognitive load + decision pattern 의 measure.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> McKinsey PST는 경영 컨설팅 후보자의 정량 추론·문제 해결·비즈니스 감각을 측정하는 인터뷰 시험이었다(2017년 폐지).
|
||||
### 매 Legacy PST (pre-2019)
|
||||
- 매 26 multiple-choice 의 over 60 min — 매 reading + math + logic.
|
||||
- 매 case-study format — exhibits, tables, charts 의 analyze.
|
||||
- 매 ~70% pass threshold (region-dependent).
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Solve (current, post-Imbellus)
|
||||
- **Ecosystem game**: 매 species + terrain 의 select 매 sustainable food chain 의 build.
|
||||
- **Redrock study**: 매 disease modeling — natural reserves 의 protect.
|
||||
- **Plant defense**: 매 invasive species 의 against 매 strategy 의 deploy.
|
||||
- 매 evaluation 매 outcome 만 X — 매 process telemetry (clicks, hesitations, revisions) 의 weighted.
|
||||
|
||||
**추출된 패턴:** "숫자로 비즈니스 문제 추론하기" — 컨설팅의 정수를 시간 압박 하에 측정.
|
||||
### 매 What's measured (Solve)
|
||||
1. **Critical thinking** — 매 incomplete data 의 from inference.
|
||||
2. **Decision-making** — 매 trade-off navigation under time pressure.
|
||||
3. **Metacognition** — 매 self-correction patterns.
|
||||
4. **Situational awareness** — 매 emergent system constraints 의 grasp.
|
||||
|
||||
**세부 내용:**
|
||||
- 26문항 1시간.
|
||||
- 차트 해석, 산수, 가설 검증.
|
||||
- 2017년 PSG(Problem Solving Game)으로 대체.
|
||||
- PSG는 게임화된 시뮬레이션.
|
||||
- 후속: Imbellus PSG, 디지털 인터뷰.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Ecosystem builder logic (simplified)
|
||||
```typescript
|
||||
interface Species { id: string; calories: number; eats: string[]; eatenBy: string[]; }
|
||||
interface Terrain { temp: number; elevation: number; rainfall: number; }
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function isViable(species: Species[], terrain: Terrain): boolean {
|
||||
// 매 8-species ecosystem 의 valid 한 food chain 의 form
|
||||
const producers = species.filter(s => s.eats.length === 0);
|
||||
if (producers.length < 1) return false;
|
||||
const apex = species.filter(s => s.eatenBy.length === 0);
|
||||
if (apex.length !== 1) return false;
|
||||
return checkCalorieBalance(species) && checkTerrainFit(species, terrain);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Redrock disease propagation
|
||||
```typescript
|
||||
// SIR model 의 simplified form 의 candidate 의 infer
|
||||
class DiseaseModel {
|
||||
constructor(public beta: number, public gamma: number) {}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
step(s: number, i: number, r: number): [number, number, number] {
|
||||
const newInfections = this.beta * s * i;
|
||||
const recoveries = this.gamma * i;
|
||||
return [s - newInfections, i + newInfections - recoveries, r + recoveries];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Process telemetry (Imbellus angle)
|
||||
```typescript
|
||||
interface Action { ts: number; type: 'select' | 'place' | 'undo' | 'submit'; payload: unknown; }
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
function metacognitionScore(actions: Action[]): number {
|
||||
const undos = actions.filter(a => a.type === 'undo').length;
|
||||
const submits = actions.filter(a => a.type === 'submit').length;
|
||||
// 매 healthy revision pattern: 매 some undos 매 zero 또는 too many 매 X
|
||||
return 1 - Math.abs((undos / Math.max(1, submits)) - 0.3);
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Time-pressure decision quality
|
||||
```typescript
|
||||
function decisionQualityCurve(timeSpent: number, optimalMs: number): number {
|
||||
// 매 too fast 의 reckless, 매 too slow 의 indecisive
|
||||
const ratio = timeSpent / optimalMs;
|
||||
return Math.exp(-Math.pow(Math.log(ratio), 2));
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Cohort calibration
|
||||
```sql
|
||||
-- 매 candidate 의 raw score 의 against cohort 의 percentile
|
||||
SELECT
|
||||
candidate_id,
|
||||
raw_score,
|
||||
PERCENT_RANK() OVER (PARTITION BY test_window ORDER BY raw_score) AS percentile
|
||||
FROM solve_results
|
||||
WHERE test_window = '2026-Q2';
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Pre-2019 candidate | Legacy PST format prep |
|
||||
| Post-2019 candidate | Solve game-based prep |
|
||||
| Hybrid markets | 매 firm communication 의 verify (some still use legacy) |
|
||||
| Game design 의 reference | 매 Solve 의 process-as-signal pattern 의 study |
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
**기본값**: 매 2026 candidate 매 Solve 의 expect — process telemetry 매 outcome 의 못지않게 weighted.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🔗 Graph
|
||||
- 부모: [[Assessment Design]] · [[Game-Based Hiring]]
|
||||
- 변형: [[Imbellus]] · [[Pymetrics]] · [[HireVue Assessments]]
|
||||
- 응용: [[Recruitment Funnel]] · [[Cognitive Assessment]]
|
||||
- Adjacent: [[Algorithmic Rhetoric]] · [[Data-Driven Personalization]]
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Practice case generation, decision rationale review, reasoning pattern feedback.
|
||||
**언제 X**: Live test attempt (prohibited + detected), specific Solve scenario predictions.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## ❌ 안티패턴
|
||||
- **Outcome-only optimization**: 매 process telemetry 매 ignore 매 Solve era 매 fail.
|
||||
- **Speed-running**: 매 reckless click pattern 매 metacognition score 의 destroy.
|
||||
- **Memorization**: 매 Solve 매 randomized — 매 brute memorization 매 ineffective.
|
||||
- **Legacy prep only**: 매 most firms 매 game-based 의 transitioned 의 ignore.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (McKinsey official 2024-2025 communications, Management Consulted, IGotAnOffer guides, Imbellus design papers).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Legacy PST → Solve transition, Imbellus telemetry, prep patterns |
|
||||
|
||||
@@ -1,25 +1,146 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-30803A
|
||||
category: "[[10_Wiki/💡 Topics/General Knowledge]]"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Metaverse Aesthetics"
|
||||
title: Metaverse Aesthetics
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Metaverse Visual Style, Virtual World Aesthetics]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, aesthetics, metaverse, visual-design, ux]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: ThreeJS
|
||||
---
|
||||
|
||||
# [[Metaverse Aesthetics]]
|
||||
# Metaverse Aesthetics
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 지식 요약 정보 추출 중...
|
||||
## 매 한 줄
|
||||
> **"매 metaverse aesthetic은 매 'low-poly accessible vs photoreal premium'의 매 spectrum이며, 2026 시점에서 매 wave는 매 stylized-PBR hybrid로 수렴 중."** Roblox / VRChat의 매 low-poly UGC accessibility, Meta Horizon Worlds의 매 Pixar-style cartoon, Fortnite의 매 stylized-PBR, 매 Apple Vision Pro Personas의 매 photoreal avatar — 매 각 platform이 매 visual identity로 매 audience segment. 매 2026 시점, Sora 2 / Veo 3 / Genie 3 같은 generative video / world model이 매 user-generated metaverse content의 매 fidelity floor를 raise.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 구조화 작업 중...
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** General Knowledge 분야의 자동 자산화 수행.
|
||||
### 매 aesthetic axes
|
||||
- **Polygon density**: low-poly (Roblox, Rec Room) ↔ photoreal (Vision Pro Personas).
|
||||
- **Color palette**: saturated cartoon (Fortnite, Horizon) ↔ desaturated naturalist (VRChat realism avatars).
|
||||
- **Material PBR fidelity**: flat shading ↔ full PBR with subsurface scattering.
|
||||
- **Avatar style**: chibi/blocky ↔ humanoid realistic ↔ furry/anime ↔ abstract.
|
||||
- **Architecture vibe**: floating impossible geometry ↔ skeuomorphic real-world replica.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### 매 platform visual identity
|
||||
- **Roblox (2024+ Layered Clothing)**: 매 voxel-adjacent + 매 layered cloth simulation으로 매 UGC fashion economy.
|
||||
- **Fortnite Creative**: stylized PBR + 매 Unreal 5 Nanite — 매 high-fidelity ceiling을 매 모든 creator에게 open.
|
||||
- **VRChat**: 매 anything-goes — 매 furry / anime / robot / abstract — 매 community segregation by aesthetic.
|
||||
- **Apple Vision Pro 'Personas'**: 매 photoreal facial scan + 매 ML-driven micro-expression.
|
||||
- **Meta Horizon Worlds (2024 redesign)**: 매 Pixar-style + 매 legs (2023 added).
|
||||
|
||||
- Raw Source: [[00_Raw/2026-04-20/Metaverse Aesthetics.md]]
|
||||
---
|
||||
### 매 응용
|
||||
1. **Fortnite 'Battle Bus' branding**: 매 same stylized-PBR base가 매 LEGO Fortnite, 매 Rocket Racing, 매 Festival 모두 visual coherence 유지.
|
||||
2. **Roblox UGC body type 2024**: 매 R6 / R15 / 매 layered → 매 photoreal humanoid까지 매 single avatar system 통합.
|
||||
3. **VRChat Quest3 PCVR cross-play**: 매 fallback shader (매 mobile GPU) + 매 PC full-fidelity 매 dynamic switch.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Stylized PBR shader (Fortnite식)
|
||||
```glsl
|
||||
// Fragment shader — 매 PBR + cel-shade hybrid
|
||||
vec3 BRDF = pbrSpecular(N, L, V, roughness, metallic, baseColor);
|
||||
float NdotL = max(dot(N, L), 0.0);
|
||||
// 매 cel banding을 PBR 위에 overlay
|
||||
float bands = floor(NdotL * 3.0) / 3.0;
|
||||
vec3 cel = mix(shadowColor, lightColor, bands);
|
||||
vec3 final = mix(BRDF, BRDF * cel, 0.4); // 매 40% stylization
|
||||
```
|
||||
|
||||
### LOD-based avatar fidelity (VRChat식)
|
||||
```typescript
|
||||
// 매 distance + 매 GPU budget으로 매 avatar fidelity dynamic switch
|
||||
class AvatarLOD {
|
||||
selectLOD(distance: number, gpuLoad: number): LODLevel {
|
||||
if (gpuLoad > 0.85) return LODLevel.Imposter; // 매 billboard sprite
|
||||
if (distance > 30) return LODLevel.Low; // 매 5k tris
|
||||
if (distance > 10) return LODLevel.Mid; // 매 20k tris
|
||||
return LODLevel.High; // 매 80k tris + cloth + dynamic bones
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Avatar streaming (Roblox식)
|
||||
```typescript
|
||||
// 매 avatar는 매 multiple asset chunks — 매 priority download
|
||||
const assets = [
|
||||
{ id: 'body', priority: 1 },
|
||||
{ id: 'head', priority: 1 },
|
||||
{ id: 'hair', priority: 2 },
|
||||
{ id: 'outfit', priority: 3 },
|
||||
{ id: 'accessory', priority: 4 },
|
||||
];
|
||||
assets.sort((a, b) => a.priority - b.priority);
|
||||
for (const a of assets) await streamAsset(a.id);
|
||||
```
|
||||
|
||||
### Color palette token system
|
||||
```typescript
|
||||
// 매 metaverse-wide design token — 매 platform이 매 single source of truth
|
||||
const palette = {
|
||||
primary: '#7C5CFF', // 매 Horizon purple
|
||||
accent: '#FFB347',
|
||||
surface: '#1E1B2E',
|
||||
textPrimary:'#FFFFFF',
|
||||
shadow: 'rgba(124, 92, 255, 0.4)',
|
||||
};
|
||||
// 매 UGC creator가 매 token reference만 가능 — 매 raw hex 금지
|
||||
```
|
||||
|
||||
### Generative texture (2026 Stable Diffusion 3.5 / FLUX 식)
|
||||
```typescript
|
||||
// 매 user prompt → 매 PBR texture set
|
||||
async function generateMaterial(prompt: string) {
|
||||
const albedo = await fluxKontext({ prompt: prompt + ', diffuse map, no shading' });
|
||||
const normal = await fluxKontext({ prompt: prompt + ', normal map, blue base' });
|
||||
const rough = await fluxKontext({ prompt: prompt + ', roughness map, grayscale' });
|
||||
return new PBRMaterial({ albedo, normal, roughness: rough });
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Mobile-first / accessibility | Low-poly + flat shading (Roblox) |
|
||||
| Console / PC AAA metaverse | Stylized PBR (Fortnite) |
|
||||
| VR community | Anything-goes + LOD dynamic (VRChat) |
|
||||
| Premium AR | Photoreal (Vision Pro) |
|
||||
| Brand activation | Match brand existing style guide |
|
||||
|
||||
**기본값**: 매 stylized-PBR hybrid — 매 widest device compatibility + 매 brand flexibility.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Metaverse-Platforms]] · [[Game-Aesthetics]]
|
||||
- 변형: [[Avatar-Design]] · [[Stylized-Rendering]]
|
||||
- 응용: [[Fortnite-Visual-Language]] · [[Roblox-UGC-Economy]]
|
||||
- Adjacent: [[NPR-Rendering]] · [[Real-Time-PBR]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 LLM (multimodal — Claude Opus 4.7, GPT-5)에게 매 reference image 보여주며 매 aesthetic taxonomy ('이 platform은 어느 axis에 속하나') 분석.
|
||||
**언제 X**: 매 final art direction — 매 community taste는 매 quantitative analysis로 안 잡힘.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Style mismatch**: 매 photoreal avatar + 매 cartoon environment = 매 uncanny.
|
||||
- **PBR without LOD**: 매 mobile에서 매 90 fps 못 맞춤.
|
||||
- **Token-less UGC**: 매 raw hex 허용하면 매 brand drift.
|
||||
- **Realism creep**: 매 platform이 매 점점 realistic → 매 original community alienate (Second Life trajectory).
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Roblox RDC 2024 keynote, Epic UnrealFest 2024, Meta Connect 2024, Apple WWDC 2024 visionOS sessions.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — aesthetic axes, platform identity, stylized-PBR + generative texture patterns |
|
||||
|
||||
@@ -1,78 +1,177 @@
|
||||
---
|
||||
id: wiki-2026-0508-mobile-strike
|
||||
title: Mobile Strike
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [MS, 모바일 스트라이크, Epic War MMORPG]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [4x-strategy, mobile-mmo, machine-zone, monetization-case-study, alliance-warfare]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: 4X-mobile-mmo
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Mobile Strike
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Mobile Strike는 Machine Zone 의 modern-warfare reskin of Game of War"**. 매 2015 launch 후 매 first-year $300M+ revenue 의 매 hyper-monetized 4X mobile MMO, 매 Arnold Schwarzenegger Super Bowl ad 의 매 mass-market UA breakthrough.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Mobile Strike는 Machine Zone의 군사 SLG로, GoW(Game of War) 엔진을 그대로 활용해 빠르게 출시한 사례다.
|
||||
### 매 Core Loop
|
||||
- **Build → Train → March → PvP → Ally**: 매 base building (HQ, troop barracks, research lab) → 매 troop training (timer-gated) → 매 march to enemy/event tile → 매 PvP battle (rally vs solo) → 매 alliance coordination (war chats, leadership stack).
|
||||
- 매 매 cycle 의 매 24-72h scale — 매 daily check-in 의 매 reinforce.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 VIP & Gold Economy
|
||||
- **VIP levels (1-30)**: 매 daily/weekly point accrual + 매 VIP shop bonus pack purchase, 매 VIP 30 의 매 매우 적은 % 의 player (top whales).
|
||||
- **Gold (hard currency)**: 매 build skip, 매 troop heal instant, 매 research skip, 매 shield activation — 매 매 critical sink.
|
||||
- **Pack ladder**: $4.99 → $99.99 → $499.99, 매 high-tier 의 매 50%+ bonus.
|
||||
|
||||
**추출된 패턴:** 동일 코어 + 다른 IP/스킨 = 신규 게임. 모바일 SLG의 "리스킨 모델"의 효시.
|
||||
### 매 응용
|
||||
1. Machine Zone Game of War (2014) — 매 direct progenitor.
|
||||
2. Final Fantasy XV: A New Empire — 매 same engine reskin.
|
||||
3. World War Rising / WARPLAN — 매 Mobile Strike clones.
|
||||
|
||||
**세부 내용:**
|
||||
- 군사·현대전 테마.
|
||||
- 4X 표준: 건설·연구·동맹·PvP.
|
||||
- 슈워제네거 광고로 brand awareness.
|
||||
- BM: VIP, 패키지, 영웅 결제.
|
||||
- 후속작들: World War Rising, Final Fantasy XV ANE.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Alliance rally coordination
|
||||
```typescript
|
||||
// Rally — multiple players combine troops into a single attack
|
||||
interface Rally {
|
||||
leader: PlayerId;
|
||||
target: TileCoord;
|
||||
participants: { userId: PlayerId; troops: TroopComp; }[];
|
||||
startsAt: Date; // launch time
|
||||
marchTime: number; // seconds — based on slowest unit
|
||||
cap: number; // determined by leader hall level
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
async function joinRally(rally: Rally, userId: PlayerId, troops: TroopComp) {
|
||||
if (rally.participants.length >= rally.cap) throw new Error('FULL');
|
||||
if (sumTroops(rally.participants) + sumCount(troops) > rally.cap * MAX_PER_PLAYER) {
|
||||
throw new Error('OVER_CAP');
|
||||
}
|
||||
rally.participants.push({ userId, troops });
|
||||
await scheduleMarch(rally);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### VIP point accrual & decay
|
||||
```python
|
||||
# VIP points = lifetime from packs, but daily login earns small amount
|
||||
# Max VIP level is gated by combined points
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
VIP_THRESHOLDS = [0, 100, 1000, 5000, 20000, 100_000, 500_000] # truncated
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def vip_level(points: int) -> int:
|
||||
for i, t in enumerate(VIP_THRESHOLDS):
|
||||
if points < t: return max(0, i - 1)
|
||||
return len(VIP_THRESHOLDS) - 1
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
# Daily decay during inactivity (some MZ titles)
|
||||
def apply_decay(points: int, days_inactive: int) -> int:
|
||||
return max(0, points - days_inactive * 50)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Shield (anti-PvP) state machine
|
||||
```typescript
|
||||
type ShieldState = 'NONE' | 'ACTIVE' | 'BREAKING';
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
class Shield {
|
||||
expiresAt?: Date;
|
||||
// Cannot attack while shielded — server enforces
|
||||
canAttack(): boolean { return !this.isActive(); }
|
||||
isActive(): boolean {
|
||||
return !!this.expiresAt && this.expiresAt > new Date();
|
||||
}
|
||||
activate(hours: number, goldCost: number): void {
|
||||
if (this.isActive()) throw new Error('ALREADY_SHIELDED');
|
||||
this.expiresAt = new Date(Date.now() + hours * 3600_000);
|
||||
chargeGold(goldCost); // 8h shield ~ 200 gold, 24h ~ 500 gold
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Troop healing pricing (hard-currency sink)
|
||||
```typescript
|
||||
function healCost(troopsKilled: TroopList, instant: boolean): { resources: ResCost; gold?: number } {
|
||||
const resCost = troopsKilled.reduce((sum, t) => sum + t.healCost, 0);
|
||||
if (!instant) {
|
||||
const seconds = troopsKilled.reduce((s, t) => s + t.healSec, 0);
|
||||
return { resources: { meat: resCost * 0.5, wood: resCost * 0.3 } };
|
||||
}
|
||||
// Instant heal: gold cost scales with seconds
|
||||
const totalSec = troopsKilled.reduce((s, t) => s + t.healSec, 0);
|
||||
return { resources: {}, gold: Math.ceil(totalSec / 60) };
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Power score (combat rating) computation
|
||||
```python
|
||||
# Player "power" = sum of weighted stats — public leaderboard metric
|
||||
def power_score(player) -> int:
|
||||
troop_power = sum(t.count * t.power_per_unit for t in player.troops)
|
||||
research_power = sum(r.level * r.power_per_level for r in player.research)
|
||||
building_power = sum(b.power_at_level(b.level) for b in player.buildings)
|
||||
hero_power = sum(h.gear_score for h in player.heroes)
|
||||
return troop_power + research_power + building_power + hero_power
|
||||
# Top whales reach 5B+ power; F2P caps around 100M
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Event store — Iridium/Gold-only items
|
||||
```typescript
|
||||
// Limited-time event store — only hard currency accepted
|
||||
const EVENT_STORE_ITEMS = [
|
||||
{ id: 'speedup_24h', goldCost: 500, stack: 10 },
|
||||
{ id: 'commander_xp_chest', goldCost: 1500, stack: 1 },
|
||||
{ id: 'legendary_gear_token', goldCost: 5000, stack: 1 }, // whale-only
|
||||
];
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
async function eventPurchase(userId: PlayerId, itemId: string, qty: number) {
|
||||
const item = EVENT_STORE_ITEMS.find(i => i.id === itemId)!;
|
||||
await spendGold(userId, item.goldCost * qty);
|
||||
await grantInventory(userId, itemId, qty);
|
||||
}
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 4X mobile MMO 의 monetization model | 매 Mobile Strike playbook (VIP + Gold + Pack ladder) |
|
||||
| Alliance feature 도입 | 매 rally cap + 매 shared research/help mechanics |
|
||||
| PvP off-ramp 제공 | 매 shield system (gold-purchasable) |
|
||||
| Event cadence | 매 weekly KvK/event + 매 monthly mega-event |
|
||||
|
||||
**기본값**: 매 24h-cycle base loop + 매 alliance war + 매 VIP-tiered IAP — 매 Machine Zone canonical formula.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Monetization Strategy]] · [[4X 시스템 (4X System)]]
|
||||
- 변형: [[Final Fantasy XV- A New Empire]] · [[World War Rising]] · [[WARPLAN]]
|
||||
- 응용: [[Iridium]] · [[고래 유저 (Whale Players)]] · [[이중 VIP 시스템 (Dual-layer VIP)]]
|
||||
- Adjacent: [[Live Operations (LiveOps)]] · [[하이브리드 수익화]] · [[Dynamic Offers]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 4X mobile MMO 의 design retrospective, 매 Machine Zone-style monetization analysis, 매 alliance-warfare game economy modeling.
|
||||
**언제 X**: 매 single-player narrative game (매 PvP/alliance mechanics 의 매 irrelevant).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No shield system**: 매 new player 의 매 24h 내 매 wipeout 의 매 churn 100%.
|
||||
- **Power-creep server merges**: 매 old server 의 매 forced merge 의 매 매 long-term player 의 매 alienate.
|
||||
- **VIP-only events**: 매 mid-tier player (VIP 5-15) 의 매 exclude 의 매 매 LTV ladder 의 매 break.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Sensor Tower 2015-2024 revenue data, Machine Zone GDC presentations, Mobile Strike player-base interviews).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Mobile Strike core loop + Machine Zone monetization patterns |
|
||||
|
||||
@@ -1,82 +1,185 @@
|
||||
---
|
||||
id: wiki-2026-0508-monetization-at-the-point-of-fri
|
||||
title: Monetization at the Point of Friction
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Friction Monetization, Just-in-Time IAP, Contextual Offers]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [monetization, ux, contextual-offer, conversion-design, f2p]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: F2P-monetization
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Monetization at the Point of Friction
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Monetization at the Point of Friction은 매 player 가 매 가장 frustrated/blocked 한 순간에 매 IAP offer 의 매 surface"**. 매 GameRefinery·매 Deconstructor of Fun 의 매 canonical concept — 매 conversion rate 의 매 5-10x lift via contextual targeting vs static store.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Friction Points (where to surface)
|
||||
- **Death/Loss**: 매 PvP defeat → "Revive for 50 gems" or "Buy shield to prevent next attack".
|
||||
- **Fail State**: 매 puzzle/level fail → "Continue with 5 lives pack ($1.99)".
|
||||
- **Gating Wall**: 매 building timer 23h → "Skip for 200 gold".
|
||||
- **Resource Cap**: 매 storage full mid-event → "Resource pack on sale 50%".
|
||||
- **Event Deadline**: 매 leaderboard top-100 within 1h → "Bundle of speedups".
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Implementation Principles
|
||||
1. **Server-driven**: 매 client 의 매 friction event 의 emit, 매 server 의 매 offer eligibility/pricing 의 매 decide.
|
||||
2. **Capped frequency**: 매 same friction event 의 매 24h 내 매 1-2 offer 의 매 max — 매 fatigue 의 매 prevent.
|
||||
3. **Personalized pricing**: 매 player segment (whale/dolphin/minnow/F2P) 별 매 different offer.
|
||||
4. **Discount/scarcity**: 매 "Limited 30min" timer + 매 "70% off" 의 매 urgency cues.
|
||||
|
||||
### 매 응용
|
||||
1. Clash Royale 의 매 "lost trophy" surge offer.
|
||||
2. Royal Match 의 매 매 fail-state booster bundle.
|
||||
3. War Commander 의 매 매 base destroyed → revenge pack.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Friction event taxonomy
|
||||
```typescript
|
||||
type FrictionEvent =
|
||||
| { type: 'PVP_LOSS'; attackerId: string; lossSeverity: number }
|
||||
| { type: 'LEVEL_FAIL'; levelId: string; attempt: number }
|
||||
| { type: 'TIMER_LONG'; timerSec: number; building: string }
|
||||
| { type: 'RESOURCE_CAP'; resource: ResType; pctFull: number }
|
||||
| { type: 'EVENT_DEADLINE'; eventId: string; rankGap: number };
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
async function emitFriction(userId: string, evt: FrictionEvent) {
|
||||
await offerEngine.evaluate(userId, evt); // server-side
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Server-side offer eligibility engine
|
||||
```python
|
||||
async def evaluate_offer(user_id: str, evt: FrictionEvent) -> Offer | None:
|
||||
# 1. Cooldown check
|
||||
last = await get_last_offer(user_id, evt.type)
|
||||
if last and (now() - last.shown_at) < timedelta(hours=24):
|
||||
return None
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
# 2. Segment lookup
|
||||
seg = await get_segment(user_id) # whale/dolphin/minnow/f2p
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
# 3. Catalog match
|
||||
catalog = OFFER_CATALOG[evt.type][seg]
|
||||
offer = personalize(catalog, evt, user_state(user_id))
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
# 4. Surface
|
||||
await record_offer_shown(user_id, offer)
|
||||
return offer
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### PvP-loss revenge offer
|
||||
```typescript
|
||||
// After being attacked, surface a "shield + troop pack" within 60s
|
||||
async function onPvpLoss(victim: PlayerId, attacker: PlayerId, troopsLost: number) {
|
||||
const severity = troopsLost / getTotalTroops(victim);
|
||||
if (severity < 0.1) return; // not painful enough
|
||||
await emitFriction(victim, {
|
||||
type: 'PVP_LOSS', attackerId: attacker, lossSeverity: severity
|
||||
});
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
// Offer: 24h shield + 80% troops restore for $4.99 (vs $14.99 normal)
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Personalized pricing by segment
|
||||
```python
|
||||
SEGMENT_DISCOUNT = {
|
||||
'whale': 1.0, # full price — they'll pay
|
||||
'dolphin': 0.7, # 30% off
|
||||
'minnow': 0.5, # 50% off
|
||||
'f2p': 0.3, # 70% off — first-time buyer hook
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
def personalize(base_offer: Offer, evt: FrictionEvent, state) -> Offer:
|
||||
seg = classify(state)
|
||||
return base_offer.with_price(base_offer.usd * SEGMENT_DISCOUNT[seg])
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Timer-skip just-in-time offer
|
||||
```typescript
|
||||
// When user opens app and sees a 22h+ build timer, surface skip offer
|
||||
async function onAppOpen(userId: string) {
|
||||
const builds = await activeBuildsOf(userId);
|
||||
const long = builds.filter(b => b.remainingSec > 20 * 3600);
|
||||
if (long.length === 0) return;
|
||||
await emitFriction(userId, {
|
||||
type: 'TIMER_LONG',
|
||||
timerSec: long[0].remainingSec,
|
||||
building: long[0].id
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Offer fatigue / impression cap
|
||||
```python
|
||||
# Hard cap: 3 friction-offers per session, 8 per day
|
||||
MAX_PER_SESSION = 3
|
||||
MAX_PER_DAY = 8
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
async def can_show_offer(user_id: str) -> bool:
|
||||
today = await count_offers_today(user_id)
|
||||
session = await count_offers_session(user_id)
|
||||
return today < MAX_PER_DAY and session < MAX_PER_SESSION
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### A/B test framework for offer conversion
|
||||
```typescript
|
||||
const VARIANTS = {
|
||||
control: { discount: 0, urgency: false },
|
||||
discounted: { discount: 0.3, urgency: false },
|
||||
urgent: { discount: 0.3, urgency: true }, // 30min timer
|
||||
};
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
async function pickVariant(userId: string, expId: string) {
|
||||
const variant = hashUserToVariant(userId, expId, Object.keys(VARIANTS));
|
||||
await logAssignment(userId, expId, variant);
|
||||
return VARIANTS[variant];
|
||||
}
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| F2P game 의 first IAP push | 매 friction-based offer (vs daily store) |
|
||||
| Whale conversion 의 maximize | 매 매 high-severity friction (PvP loss) + 매 full-price pack |
|
||||
| F2P → minnow 의 first conversion | 매 매 70% off "starter pack" 의 매 low friction (first death) |
|
||||
| Offer fatigue 의 prevent | 매 24h cooldown + 매 daily cap |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: 매 server-driven friction taxonomy + 매 segment-personalized pricing + 매 daily impression cap.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Monetization Strategy]] · [[Dynamic Offers]]
|
||||
- 변형: [[Data-Driven Personalization]] · [[맞춤형 IAP 번들(Customizable IAP bundles)]]
|
||||
- 응용: [[Mobile Strike]] · [[Capybara GO!]] · [[Magic Sort!]]
|
||||
- Adjacent: [[Live Operations (LiveOps)]] · [[하이브리드 수익화]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 F2P live-ops 의 매 contextual offer design, 매 friction-event taxonomy 의 매 modeling, 매 segment-based pricing.
|
||||
**언제 X**: 매 premium one-time-purchase game (매 friction monetization 의 매 inappropriate).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Predatory friction**: 매 fail state 의 매 artificially-engineer 의 매 monetization motive — 매 player trust 의 매 erode.
|
||||
- **No cooldown**: 매 매 every loss 의 매 popup 의 매 ad-spam UX.
|
||||
- **Static pricing**: 매 매 segment 무시 의 매 conversion rate 의 매 70% drop vs personalized.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Deconstructor of Fun "Just-in-Time Monetization" 2023, GameRefinery quarterly reports, Supercell GDC 2022 talk).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Friction-monetization framework + offer-engine patterns |
|
||||
|
||||
@@ -1,78 +1,178 @@
|
||||
---
|
||||
id: wiki-2026-0508-nuclear-deterrence-models
|
||||
title: Nuclear Deterrence Models
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Deterrence Theory, MAD, Nuclear Strategy]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, game-theory, strategy, geopolitics, simulation]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: game-theory
|
||||
framework: strategic-modeling
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Nuclear Deterrence Models
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 first strike 의 cost 의 retaliatory 의 unbearable 의 make → 매 attack 의 prevent"**. Nuclear deterrence 매 game-theoretic equilibrium 의 family — Mutually Assured Destruction (MAD), credible-threat signaling, escalation ladders. 매 Cold War-era foundation 의 modern simulations (Plan A by Princeton, ICONS) + 4X game design (Civilization, Hearts of Iron) 의 informs.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 핵 억제 모델은 상호 확증 파괴(MAD)를 기반으로 한 게임이론적 균형으로, RPG·전략 게임의 외교 시스템 디자인에 직접 응용된다.
|
||||
### 매 Foundational Models
|
||||
- **MAD (Mutually Assured Destruction)**: 매 second-strike survivability 매 first strike 의 deters.
|
||||
- **Massive Retaliation (Dulles, 1954)**: 매 any aggression 매 maximum response.
|
||||
- **Flexible Response (Kennedy)**: 매 graduated escalation — match 의 force level.
|
||||
- **Counterforce vs Countervalue**: 매 military targets 의 vs population/cities.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Game-Theoretic Lens
|
||||
- **Chicken / Hawk-Dove**: 매 brinkmanship — 매 first 의 swerve 의 lose.
|
||||
- **Schelling 의 Focal Points**: 매 tacit coordination 매 escalation 의 around.
|
||||
- **Credible commitment**: 매 burn-the-boats — 매 retreat option 의 remove.
|
||||
- **Signaling cost**: 매 expensive signals (mobilization) 매 cheap talk 의 outweigh.
|
||||
|
||||
**추출된 패턴:** "공격이 자살이면 공격은 일어나지 않는다" — Schelling의 균형 개념을 게임 외교에 적용.
|
||||
### 매 응용
|
||||
1. 4X game design — diplomacy systems (Civilization VI/VII nuclear units).
|
||||
2. Wargame simulation — Plan A, Sigma war games (Pentagon, RAND).
|
||||
3. Geopolitical training — Foreign Service simulations.
|
||||
|
||||
**세부 내용:**
|
||||
- MAD: Mutually Assured Destruction.
|
||||
- Schelling 균형: 신뢰 가능한 위협.
|
||||
- 게임 응용: 외교, 동맹 정치, 보복 시스템.
|
||||
- 사례: Civilization 핵무기, EVE Online 캐피털.
|
||||
- 비대칭 정보 → 위협 신호 전달 비용.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### MAD payoff matrix
|
||||
```typescript
|
||||
// Row = US strategy, Col = USSR strategy. Values: [US payoff, USSR payoff]
|
||||
const madMatrix = {
|
||||
cooperate_cooperate: [3, 3],
|
||||
cooperate_strike: [-100, 1],
|
||||
strike_cooperate: [1, -100],
|
||||
strike_strike: [-100, -100],
|
||||
} as const;
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
function nashCheck(strategy: keyof typeof madMatrix): boolean {
|
||||
// 매 strike_strike 의 not 매 deviating cooperate 의 worse
|
||||
return false; // mutual cooperation 매 not Nash 의 single-shot, repeated game 매 stable
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Second-strike survivability
|
||||
```typescript
|
||||
interface Arsenal {
|
||||
silos: number;
|
||||
submarines: number;
|
||||
bombers: number;
|
||||
silos_survival: number; // ~0.05
|
||||
sub_survival: number; // ~0.95
|
||||
bomber_survival: number; // ~0.30
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function expectedRetaliation(a: Arsenal, warheadsPerPlatform: number): number {
|
||||
return (
|
||||
a.silos * a.silos_survival +
|
||||
a.submarines * a.sub_survival +
|
||||
a.bombers * a.bomber_survival
|
||||
) * warheadsPerPlatform;
|
||||
}
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
function isMADStable(us: Arsenal, ussr: Arsenal, warheads: number, threshold = 200): boolean {
|
||||
return (
|
||||
expectedRetaliation(us, warheads) > threshold &&
|
||||
expectedRetaliation(ussr, warheads) > threshold
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Escalation ladder (Kahn)
|
||||
```typescript
|
||||
const ESCALATION_LADDER = [
|
||||
{ rung: 1, name: 'Crisis declaration', kineticForce: false },
|
||||
{ rung: 5, name: 'Show of force', kineticForce: false },
|
||||
{ rung: 10, name: 'Conventional war', kineticForce: true },
|
||||
{ rung: 15, name: 'Tactical nuclear', kineticForce: true },
|
||||
{ rung: 20, name: 'Strategic limited strike', kineticForce: true },
|
||||
{ rung: 44, name: 'Spasm war (full exchange)', kineticForce: true },
|
||||
];
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
function escalate(current: number, signal: 'firm' | 'reciprocate' | 'deescalate'): number {
|
||||
if (signal === 'firm') return Math.min(44, current + 2);
|
||||
if (signal === 'reciprocate') return current;
|
||||
return Math.max(1, current - 3);
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Brinkmanship simulation (Chicken)
|
||||
```typescript
|
||||
interface Player { resolve: number; rationality: number; }
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
function chickenOutcome(a: Player, b: Player): 'a_yields' | 'b_yields' | 'crash' {
|
||||
// 매 brinkmanship — both swerve 의 mutual benefit, 매 neither swerve 의 catastrophe
|
||||
const aYieldP = 1 - a.resolve;
|
||||
const bYieldP = 1 - b.resolve;
|
||||
const r = Math.random();
|
||||
if (r < aYieldP * (1 - bYieldP)) return 'a_yields';
|
||||
if (r < aYieldP * (1 - bYieldP) + bYieldP * (1 - aYieldP)) return 'b_yields';
|
||||
if (r < aYieldP * (1 - bYieldP) + bYieldP * (1 - aYieldP) + aYieldP * bYieldP) return 'a_yields';
|
||||
return 'crash';
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Credible threat (Schelling commitment device)
|
||||
```typescript
|
||||
class Commitment {
|
||||
// 매 retreat 의 cost 의 raise 하여 매 threat 의 credible 의 make
|
||||
constructor(
|
||||
public publicAnnouncement: boolean,
|
||||
public alliancesAtStake: number,
|
||||
public sunkInvestment: number,
|
||||
) {}
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
credibility(): number {
|
||||
return (
|
||||
(this.publicAnnouncement ? 0.4 : 0) +
|
||||
Math.min(0.4, this.alliancesAtStake * 0.1) +
|
||||
Math.min(0.2, this.sunkInvestment / 1e9 * 0.05)
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Symmetric superpowers | MAD + arms control treaties |
|
||||
| Asymmetric (one weak) | Flexible response + extended deterrence |
|
||||
| Multiparty (3+ nuclear states) | Stability erosion — 매 stochastic escalation risk |
|
||||
| Game design (4X / wargame) | Schelling-flavored mechanics — credible-threat units, escalation tracker |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: MAD model 의 baseline + flexible response 의 layered nuance.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Theory]] · [[Strategic Studies]]
|
||||
- 변형: [[MAD]] · [[Massive Retaliation]] · [[Flexible Response]]
|
||||
- 응용: [[Civilization Nuclear Units]] · [[Hearts of Iron Doctrine]] · [[War Game Simulations]]
|
||||
- Adjacent: [[Algorithmic Rhetoric]] · [[Alliance (동맹)]] · [[4X 시스템 (4X System)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Wargame scenario drafting, doctrine summary, simulation NPC rhetoric generation.
|
||||
**언제 X**: Real-world policy advice, classified-domain reasoning, live crisis decision support.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Single-strategy doctrine**: 매 only-massive-retaliation 매 small-conflict 매 incredible.
|
||||
- **Ignoring second-strike**: 매 silo-only arsenal 매 vulnerable, MAD 의 collapse.
|
||||
- **Cheap-talk threats**: 매 cost-free threats 매 not credible — game-theoretic noise.
|
||||
- **Ladder collapse**: 매 step-skipping 매 stability 의 destroy.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Schelling "Strategy of Conflict", Kahn "On Escalation", Princeton SGS Plan A 2019, RAND deterrence literature 2020-2024).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — MAD, escalation ladder, credible commitment patterns |
|
||||
|
||||
@@ -1,82 +1,172 @@
|
||||
---
|
||||
id: wiki-2026-0508-okami-ink-wash-aesthetics
|
||||
title: Okami Ink Wash Aesthetics
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Sumi-e, Okami Art Style, Cel-shaded Ink, NPR Ink-Wash]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [non-photorealistic-rendering, art-style, shader, okami, sumi-e, npr]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: HLSL/GLSL
|
||||
framework: NPR-shader
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Okami Ink Wash Aesthetics
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Okami Ink Wash는 매 Japanese sumi-e (墨絵) 의 매 real-time game rendering 의 매 translation"**. 매 Clover Studio 2006 의 매 hand-painted brush stroke + 매 watercolor bleed + 매 calligraphic outline 의 매 NPR pipeline — 매 modern stylized rendering 의 매 foundational reference.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Visual Components
|
||||
- **Outline (calligraphic)**: 매 view-space normal/depth edge detection + 매 brush-tip texture 의 매 sweep along edge.
|
||||
- **Cel-shaded fill**: 매 매 2-3 tone toon shader, 매 hard band transition.
|
||||
- **Paper texture**: 매 background canvas (washi paper) 의 매 multiplicative overlay.
|
||||
- **Ink bleed**: 매 매 alpha-mask 의 매 noise-perturbed edge — 매 ink-on-paper 의 매 organic boundary.
|
||||
- **Color desaturation**: 매 매 muted ochre/red/black palette — 매 sumi-e 의 매 traditional ink color.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Rendering Pipeline
|
||||
1. Geometry pass (forward).
|
||||
2. Outline pass (post-process: depth + normal Sobel → brush-stroke compositor).
|
||||
3. Toon shading (vertex normal · light direction → step function).
|
||||
4. Paper overlay (full-screen quad multiply).
|
||||
5. Ink-bleed mask (procedural noise on alpha).
|
||||
|
||||
### 매 응용
|
||||
1. Okami / Okamiden (Clover, Capcom).
|
||||
2. Sumire / Genji (homage).
|
||||
3. Modern: Sable, Kena: Bridge of Spirits (related NPR styles).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Sobel-based outline detection (post-process)
|
||||
```hlsl
|
||||
// HLSL — sample depth in 3x3 kernel, apply Sobel
|
||||
float SampleDepth(float2 uv) { return _DepthTex.SampleLevel(s, uv, 0).r; }
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
float4 OutlinePass(float2 uv : TEXCOORD0) : SV_Target {
|
||||
float2 px = _ScreenSize.zw;
|
||||
float gx =
|
||||
-SampleDepth(uv + float2(-px.x,-px.y)) - 2*SampleDepth(uv + float2(-px.x, 0)) - SampleDepth(uv + float2(-px.x, px.y))
|
||||
+SampleDepth(uv + float2( px.x,-px.y)) + 2*SampleDepth(uv + float2( px.x, 0)) + SampleDepth(uv + float2( px.x, px.y));
|
||||
float gy =
|
||||
-SampleDepth(uv + float2(-px.x,-px.y)) - 2*SampleDepth(uv + float2(0,-px.y)) - SampleDepth(uv + float2( px.x,-px.y))
|
||||
+SampleDepth(uv + float2(-px.x, px.y)) + 2*SampleDepth(uv + float2(0, px.y)) + SampleDepth(uv + float2( px.x, px.y));
|
||||
float edge = saturate(sqrt(gx*gx + gy*gy) * 50);
|
||||
float brush = _BrushTex.Sample(s, uv * 4 + Hash(uv) * 0.05).r;
|
||||
return float4(0,0,0, edge * brush);
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Toon (cel) shading with hard bands
|
||||
```glsl
|
||||
// GLSL — 3-tone toon
|
||||
float toonRamp(float NdotL) {
|
||||
if (NdotL > 0.6) return 1.0;
|
||||
if (NdotL > 0.2) return 0.6;
|
||||
return 0.3;
|
||||
}
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
void main() {
|
||||
vec3 N = normalize(vNormal);
|
||||
float NdotL = max(dot(N, uLightDir), 0.0);
|
||||
float band = toonRamp(NdotL);
|
||||
fragColor = vec4(uBaseColor * band, 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Paper texture overlay
|
||||
```hlsl
|
||||
// Full-screen post-process — multiplicative paper grain
|
||||
float4 PaperOverlay(float2 uv : TEXCOORD0) : SV_Target {
|
||||
float4 scene = _SceneTex.Sample(s, uv);
|
||||
float paper = _PaperTex.Sample(s, uv * _PaperScale).r;
|
||||
// Slightly desaturate scene for ink-wash feel
|
||||
float gray = dot(scene.rgb, float3(0.299, 0.587, 0.114));
|
||||
scene.rgb = lerp(float3(gray,gray,gray), scene.rgb, 0.85);
|
||||
return float4(scene.rgb * (0.7 + paper * 0.3), 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Ink-bleed alpha noise
|
||||
```glsl
|
||||
// Animate bleed boundary using simplex noise
|
||||
float inkBleed(vec2 uv, float t) {
|
||||
float n = simplex(uv * 12.0 + vec2(t * 0.1));
|
||||
return smoothstep(0.45, 0.55, n);
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
void main() {
|
||||
vec4 base = texture(uInk, vUV);
|
||||
float bleed = inkBleed(vUV, uTime);
|
||||
fragColor = vec4(base.rgb, base.a * bleed);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Brush-stroke trail (Celestial Brush mechanic)
|
||||
```typescript
|
||||
// Player draws a stroke; sample points become ribbon mesh
|
||||
class BrushStroke {
|
||||
points: { pos: Vec2; pressure: number; t: number }[] = [];
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
add(p: Vec2, pressure: number) {
|
||||
this.points.push({ pos: p, pressure, t: performance.now() });
|
||||
}
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
toRibbonMesh(): Mesh {
|
||||
return generateRibbon(this.points, p => p.pressure * 8.0);
|
||||
// Width tapers based on pressure; texture is brush-tip
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Color palette (muted ochre/red/black)
|
||||
```hlsl
|
||||
// LUT-based color grading toward sumi-e palette
|
||||
float3 ApplyOkamiLUT(float3 color) {
|
||||
// Lookup table mapping linear color -> sumi-e palette
|
||||
return _OkamiLUT.Sample(s, color).rgb;
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Stylized NPR action game | 매 Okami pipeline (outline + cel + paper) 의 매 baseline |
|
||||
| Performance-constrained mobile | 매 vertex-based outline (vs post-process) |
|
||||
| Player-authored brush mechanic | 매 ribbon-mesh + 매 spline tessellation |
|
||||
| Color grading | 매 muted palette LUT, 매 desaturate 80-90% |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 view-space outline + 매 3-band toon + 매 paper overlay + 매 sumi-e LUT — 매 Okami canonical NPR stack.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Procedural-Level-Geometry]] · [[Metaverse Aesthetics]]
|
||||
- 변형: [[Algorithmic Rhetoric]] · [[Procedural Rhetoric (In Gaming)]]
|
||||
- 응용: [[Beat Saber]] · [[Edge Bleeding]]
|
||||
- Adjacent: [[Real-Time Translation]] · [[InstancedMesh 동적 버퍼 확장]] · [[Early-Z]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 NPR shader design, 매 sumi-e/ink-wash style 의 매 implementation, 매 outline-detection algorithms.
|
||||
**언제 X**: 매 photo-realistic rendering (매 stylization 의 매 mismatch).
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🪲 안티패턴
|
||||
- **Pure post-process outline**: 매 매 thin geometry 의 매 outline miss — 매 vertex-based hybrid 권장.
|
||||
- **Constant brush thickness**: 매 매 calligraphic feel 의 매 lose — 매 pressure/curvature 의 매 width modulate.
|
||||
- **Over-saturated palette**: 매 sumi-e 의 매 muted feel 의 매 contradict.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Clover Studio Okami GDC 2007 talk, Capcom dev blogs, modern NPR research papers e.g. "Stylized Rendering" SIGGRAPH 2018).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Okami NPR ink-wash pipeline + shader patterns |
|
||||
|
||||
@@ -1,78 +1,189 @@
|
||||
---
|
||||
id: wiki-2026-0508-papers-please-bureaucratic-simul
|
||||
title: Papers Please (Bureaucratic Simulation)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Papers Please, Lucas Pope, Arstotzka, Document Validation Game]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [narrative-game, procedural-rhetoric, bureaucratic-simulation, lucas-pope, paperwork-mechanic]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: narrative-puzzle
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Papers Please (Bureaucratic Simulation)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Papers Please는 매 bureaucratic friction 의 매 procedural rhetoric 으로 매 totalitarianism 의 매 critique"**. 매 Lucas Pope 2013 의 매 indie classic — 매 document-validation gameplay 가 매 매 player 의 매 매 moral compromise 의 매 force, 매 mechanics-as-message 의 매 canonical example.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Papers, Please는 디스토피아 국경 검문관 시뮬레이션으로, 게임 시스템 자체로 도덕적 갈등과 관료주의의 무게를 전달하는 절차적 수사학의 대표작이다.
|
||||
### 매 Core Loop
|
||||
- **Inspect document**: 매 passport / work permit / ID supplement 의 매 cross-check.
|
||||
- **Detect discrepancy**: 매 expired date, 매 wrong gender, 매 photo mismatch, 매 missing seal.
|
||||
- **Approve/Deny stamp**: 매 매 decision (red/green stamp).
|
||||
- **Manage family**: 매 매 daily wage 의 매 food/heat/medicine 의 매 spend.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 Procedural Rhetoric
|
||||
- 매 매 rules 의 매 daily expansion → 매 매 cognitive load 의 매 bureaucratic violence 의 매 simulate.
|
||||
- 매 매 family suffering 의 매 매 moral compromise (rule-bend, bribe accept) 의 매 force.
|
||||
- 매 매 매 player 의 매 매 complicity 의 매 자각.
|
||||
|
||||
**추출된 패턴:** 단순 메커니즘(서류 비교)에 도덕적 결정의 무게를 얹어 메시지 전달.
|
||||
### 매 응용
|
||||
1. Beholder (Warm Lamp Games) — 매 surveillance landlord variant.
|
||||
2. The Westport Independent — 매 newspaper censorship.
|
||||
3. Not Tonight, Headliner — 매 bureaucratic-puzzle descendants.
|
||||
|
||||
**세부 내용:**
|
||||
- Lucas Pope 1인 개발(2013).
|
||||
- 코어: 입국 서류 검증.
|
||||
- 가족 부양 vs 직무 윤리 갈등.
|
||||
- 절차적 수사학의 정수.
|
||||
- 시리어스 게임 디자인 표준 사례.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Document validation engine
|
||||
```typescript
|
||||
interface Document {
|
||||
type: 'passport' | 'work_permit' | 'id_supplement' | 'entry_ticket';
|
||||
fields: Record<string, string>;
|
||||
photo?: ImageRef;
|
||||
seal?: SealId;
|
||||
expirationDate?: Date;
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
interface ValidationRule {
|
||||
id: string;
|
||||
effective: Date;
|
||||
check: (docs: Document[]) => Discrepancy | null;
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
function validate(docs: Document[], rules: ValidationRule[]): Discrepancy[] {
|
||||
return rules.flatMap(r => {
|
||||
const d = r.check(docs);
|
||||
return d ? [d] : [];
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Daily-expanding rule set
|
||||
```python
|
||||
# Game day -> active rules
|
||||
RULES_BY_DAY = {
|
||||
1: ['passport_required'],
|
||||
2: ['passport_required', 'photo_match'],
|
||||
3: ['passport_required', 'photo_match', 'work_permit_for_workers'],
|
||||
4: ['passport_required', 'photo_match', 'work_permit_for_workers', 'no_kolechia'],
|
||||
# ...escalating bureaucratic burden
|
||||
}
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def active_rules(day: int) -> list[str]:
|
||||
keys = sorted(k for k in RULES_BY_DAY.keys() if k <= day)
|
||||
return RULES_BY_DAY[keys[-1]]
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Cross-document comparison
|
||||
```typescript
|
||||
// Check passport name vs work-permit name
|
||||
function crossCheckNames(passport: Document, permit: Document): Discrepancy | null {
|
||||
const p = passport.fields.name;
|
||||
const w = permit.fields.name;
|
||||
if (p !== w) return {
|
||||
field: 'name',
|
||||
documents: ['passport', 'work_permit'],
|
||||
description: `Mismatch: passport=${p}, permit=${w}`
|
||||
};
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Family resource management
|
||||
```python
|
||||
# Daily wage allocation — must balance survival
|
||||
class FamilyState:
|
||||
members: list[str] # son, wife, mother, uncle, niece
|
||||
needs: dict[str, dict[str, int]] # member -> {food, heat, meds}
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
def cost_to_keep_alive(self, day_temperature: float) -> int:
|
||||
cost = 0
|
||||
for m in self.members:
|
||||
cost += FOOD_COST # always
|
||||
if day_temperature < 0: cost += HEAT_COST
|
||||
if self.needs[m]['meds'] > 0: cost += MEDS_COST
|
||||
return cost
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
# Player wage: starts ~$5/day, cost ~$8/day with full family — forced to choose
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Moral-compromise branching (M. Vonel storyline)
|
||||
```typescript
|
||||
// EZIC resistance asks player to wave through agents
|
||||
type MoralChoice =
|
||||
| { type: 'approve_invalid'; bribe?: number }
|
||||
| { type: 'deny_valid'; reason: string }
|
||||
| { type: 'follow_rules' };
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
interface Storyline {
|
||||
endings: { id: string; conditions: (state: GameState) => boolean }[];
|
||||
}
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
const ENDINGS: Storyline['endings'] = [
|
||||
{ id: 'ezic_revolution', conditions: s => s.ezicHelpCount >= 5 && !s.familyDead },
|
||||
{ id: 'arstotzka_loyal', conditions: s => s.citationCount === 0 && !s.bribeAccepted },
|
||||
{ id: 'family_dies', conditions: s => s.familyDead },
|
||||
{ id: 'arrested', conditions: s => s.ezicTraitor && s.exposed },
|
||||
// 20 endings total — branching procedural narrative
|
||||
];
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### Citation/penalty system
|
||||
```typescript
|
||||
// Each error = warning; 3+ warnings = pay cut
|
||||
class WorkLog {
|
||||
warnings: { day: number; rule: string }[] = [];
|
||||
|
||||
finalizeDay(day: number, wageBefore: number): number {
|
||||
const todays = this.warnings.filter(w => w.day === day).length;
|
||||
if (todays === 0) return wageBefore;
|
||||
if (todays === 1) return wageBefore; // free pass
|
||||
return Math.max(0, wageBefore - (todays - 1) * 5); // -$5 per extra
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Mechanics-as-message narrative | 매 Papers Please 의 매 procedural-rhetoric 의 매 reference |
|
||||
| Bureaucratic puzzle design | 매 daily-expanding rule set + 매 cross-document comparison |
|
||||
| Moral-choice branching | 매 endings array + 매 condition predicates (vs hard scripts) |
|
||||
| Family/survival pressure | 매 daily wage + 매 cost > 매 wage 의 매 forced compromise |
|
||||
|
||||
**기본값**: 매 document-validation engine + 매 daily-rule expansion + 매 family-resource constraint + 매 multi-ending branching — 매 Papers Please canonical pattern.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Procedural Rhetoric (In Gaming)]] · [[Algorithmic Rhetoric]]
|
||||
- 변형: [[Papers-Please]] · [[Poverty-Simulation]]
|
||||
- 응용: [[Player-Experience-Modeling]] · [[Magic-Circle]]
|
||||
- Adjacent: [[Immersive-Sim-Genre]] · [[Immersive-Sims-Deus-Ex-Dishonored]] · [[BioShock-Critique]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 narrative game 의 procedural rhetoric design, 매 bureaucratic puzzle mechanic, 매 moral-choice branching.
|
||||
**언제 X**: 매 reflex-action game (매 paperwork mechanic 의 매 mismatch).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Linear-only narrative**: 매 매 multi-ending 없으면 매 매 procedural-rhetoric 의 매 power 의 매 dilute.
|
||||
- **No survival pressure**: 매 매 family/wage system 없으면 매 매 moral compromise 의 매 매 toothless.
|
||||
- **Static rule set**: 매 매 daily expansion 없으면 매 매 bureaucratic-load metaphor 의 매 lose.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Lucas Pope dev blog, Papers Please postmortem GDC 2014, Ian Bogost "Procedural Rhetoric" framework).
|
||||
- 신뢰도 A.
|
||||
- See also [[Papers-Please]] (alternate slug).
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Papers Please procedural-rhetoric + document-validation patterns |
|
||||
|
||||
@@ -1,78 +1,178 @@
|
||||
---
|
||||
id: wiki-2026-0508-papers-please
|
||||
title: Papers Please
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Papers Please — Bureaucracy as Mechanic
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Papers Please, Lucas Pope, Arstotzka]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, narrative-design, indie, case-study, ethical-mechanic]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: lua
|
||||
framework: HaxeFlixel
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Papers Please — Bureaucracy as Mechanic
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Lucas Pope의 Papers Please (2013)는 매 'paperwork as gameplay'를 매 ethical horror로 변환한 매 indie milestone — 매 boring-on-purpose mechanic이 매 narrative weight를 carry."** 매 Arstotzka 국경 검문소 inspector라는 매 mundane role이 매 ration-starved family + 매 bribed comrades + 매 terrorist warning + 매 EZIC resistance message 사이에서 매 player에게 매 매 day moral dilemma 강제. 매 2026 시점에서 매 narrative-mechanic integration의 매 textbook example로 매 Game Design 학과 curriculum 표준 reference.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Papers, Please는 관료주의 디스토피아를 메커니즘으로 표현한 인디 명작으로, 게임이 정치·도덕 메시지를 어떻게 전달할 수 있는지 보여준다.
|
||||
### 매 design pillars
|
||||
- **Mechanic = theme**: 매 bureaucratic comparison (passport vs entry permit vs work visa)이 매 game's emotional engine. 매 narrative가 매 separate cutscene 아님.
|
||||
- **Time pressure as moral lever**: 매 day end까지 매 N people 처리 강제 → 매 player가 매 careful inspection vs throughput 사이 trade-off.
|
||||
- **Family economy**: 매 daily wage가 매 rent + heat + food + medicine 매 4 expense에 부족 → 매 player가 매 누구를 살릴지 결정.
|
||||
- **20 endings**: 매 player choice (resistance 도움 / 정부 충성 / 가족 도주 / 처형)가 매 매 different ending.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 emergent player guilt
|
||||
- 매 same-faced NPC가 매 second day 다시 옴 — 매 player의 매 첫 거절을 기억.
|
||||
- 매 audio cue (passport stamp의 매 heavy thud)가 매 deny action에 매 weight 부여.
|
||||
- 매 documentation discrepancy를 매 player가 매 miss하면 매 terrorist가 매 entry → 매 next day news headline.
|
||||
|
||||
**추출된 패턴:** 게임플레이 자체가 메시지 — 플레이어가 "왜 이걸 해야 하지?"라는 질문을 자연스럽게 마주함.
|
||||
### 매 응용
|
||||
1. **Beholder (2017)**: 매 surveillance landlord 게임 — 매 Papers Please의 매 spiritual 후속.
|
||||
2. **Not For Broadcast (2022)**: 매 propaganda TV station editing — 매 mechanic = ideology.
|
||||
3. **The Westport Independent (2016)**: 매 censored newspaper editor — 매 redaction이 매 gameplay verb.
|
||||
|
||||
**세부 내용:**
|
||||
- 시스템: 서류 검증 + 시간 압박.
|
||||
- 도덕: 가족 vs 권력, 동정 vs 규칙.
|
||||
- 분기: 다중 결말 + 플레이 스타일.
|
||||
- 단순 픽셀 그래픽 + 강한 메시지.
|
||||
- 인디 게임 절차적 수사학의 정수.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Document validation rule engine
|
||||
```lua
|
||||
-- 매 document validation은 매 N rule list — 매 day마다 rule 추가
|
||||
local rules = {}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
table.insert(rules, function(doc)
|
||||
if doc.expiration < currentDate then
|
||||
return false, "passport expired"
|
||||
end
|
||||
return true
|
||||
end)
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
table.insert(rules, function(doc)
|
||||
if doc.entryPermit and doc.entryPermit.duration > 14 then
|
||||
return false, "entry permit duration mismatch"
|
||||
end
|
||||
return true
|
||||
end)
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function ValidateAll(doc)
|
||||
for _, rule in ipairs(rules) do
|
||||
local ok, reason = rule(doc)
|
||||
if not ok then return false, reason end
|
||||
end
|
||||
return true
|
||||
end
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Discrepancy detection (visual click target)
|
||||
```lua
|
||||
-- 매 player가 매 두 document의 매 mismatched field를 매 click으로 highlight
|
||||
function OnFieldClick(field1, field2)
|
||||
if field1.value ~= field2.value then
|
||||
ShowCitation({
|
||||
field1 = field1,
|
||||
field2 = field2,
|
||||
reason = "Mismatched " .. field1.name,
|
||||
})
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Daily expense allocator
|
||||
```lua
|
||||
local expenses = { rent = 20, heat = 10, food = 10, medicine = 15 }
|
||||
local wages = countApproved * 5
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
function ChooseExpenses(wages)
|
||||
-- 매 player가 매 priority slider 조정 — 매 family member 누가 starve할지
|
||||
local sorted = SortByPriority(expenses)
|
||||
local remaining = wages
|
||||
local paid = {}
|
||||
for _, e in ipairs(sorted) do
|
||||
if remaining >= e.amount then
|
||||
paid[e.name] = true
|
||||
remaining = remaining - e.amount
|
||||
else
|
||||
paid[e.name] = false
|
||||
end
|
||||
end
|
||||
ApplyConsequences(paid) -- 매 starve event, sickness, eviction
|
||||
end
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Branching ending state
|
||||
```lua
|
||||
local endingFlags = {
|
||||
helped_ezic = 0, -- 매 EZIC mission 완료 횟수
|
||||
arrested = false,
|
||||
family_escaped = false,
|
||||
bribes_taken = 0,
|
||||
correct_calls_pct = 0,
|
||||
}
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
function ResolveEnding()
|
||||
if endingFlags.family_escaped then return "ending_18_obristan_refuge" end
|
||||
if endingFlags.helped_ezic >= 5 then return "ending_19_ezic_revolution" end
|
||||
if endingFlags.bribes_taken >= 8 then return "ending_05_corruption" end
|
||||
if endingFlags.arrested then return "ending_07_executed" end
|
||||
return "ending_20_status_quo"
|
||||
end
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### NPC return + memory
|
||||
```lua
|
||||
local npcMemory = {} -- name → previous interaction outcome
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
function OnNPCArrive(npc)
|
||||
local prev = npcMemory[npc.id]
|
||||
if prev == "denied" then
|
||||
npc.dialogue = "Please. My family. We have nowhere else."
|
||||
elseif prev == "approved" then
|
||||
npc.dialogue = "Inspector — thank you. I have my brother's papers now."
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Heavy theme indie | Mechanic = theme (Papers Please 식) |
|
||||
| Pure puzzle | 매 mechanic만, narrative 분리 |
|
||||
| AAA narrative | Mechanic + cutscene + dialogue tree (Last of Us) |
|
||||
| 짧은 jam game | Single-day Papers Please slice |
|
||||
| Educational sim | 매 real-world bureaucracy mechanic 그대로 transpose |
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
**기본값**: 매 mechanic-theme alignment 의 first principle — 매 player가 매 verb 행할 때 매 theme를 felt 해야.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Narrative-Design]] · [[Indie-Game-Design]]
|
||||
- 변형: [[Beholder]] · [[Not-For-Broadcast]] · [[Westport-Independent]]
|
||||
- 응용: [[Mechanic-Theme-Alignment]] · [[Ethical-Game-Design]]
|
||||
- Adjacent: [[Lucas-Pope-Return-of-Obra-Dinn]] · [[Bureaucracy-Simulation]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 narrative-mechanic alignment brainstorm — LLM에게 "매 game theme이 매 X일 때 매 player verb는 매 무엇이어야 theme을 reinforce하나" 질문.
|
||||
**언제 X**: 매 specific document layout / typography — 매 Lucas Pope의 매 hand-crafted aesthetic은 매 LLM generate 어려움.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Mechanic-narrative split**: 매 cutscene에서 매 theme 다루고 매 gameplay에서 매 매 unrelated verb.
|
||||
- **Time pressure without payoff**: 매 hurry mechanic만 있고 매 careful play의 매 reward 없음.
|
||||
- **Single ending despite choice**: 매 20 ending이 매 illusion이고 매 1개 진짜.
|
||||
- **NPC amnesia**: 매 returning NPC가 매 player choice 매 기억 안 함.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Lucas Pope GDC 2014 "Papers Please Postmortem", Tom Bissell New Yorker review (2013), 매 various Game Design textbooks.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — mechanic-theme alignment, document validation / branching ending / NPC memory patterns |
|
||||
|
||||
@@ -1,82 +1,195 @@
|
||||
---
|
||||
id: wiki-2026-0508-physics
|
||||
title: Physics
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Game Physics, Physics Engine, Rigid Body Simulation]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.95
|
||||
verification_status: applied
|
||||
tags: [game-design, physics, simulation, rigid-body, collision]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: cpp
|
||||
framework: rigid-body-physics
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Physics
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Newtonian dynamics 의 discrete-time integration + collision detection + constraint solving 의 trinity"**. Game physics 매 (1) integrator (Euler, Verlet, RK4), (2) broadphase + narrowphase collision, (3) iterative constraint solver (Sequential Impulses, PGS, XPBD) 의 stack. 2026 매 Jolt (Horizon Forbidden West), Rapier (Rust ecosystem), PhysX 5, Bullet 매 dominant.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Three Pillars
|
||||
- **Integration**: 매 Δt 의 over forces → velocity → position.
|
||||
- **Collision detection**: 매 broadphase (BVH, sweep-and-prune) → narrowphase (GJK, SAT, MPR).
|
||||
- **Constraint resolution**: 매 contact, joints, friction 의 iterative solve.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Integrators
|
||||
- **Explicit Euler**: 매 simple, unstable, energy gain.
|
||||
- **Semi-implicit Euler**: 매 game default, stable for most cases.
|
||||
- **Verlet**: 매 position-based, energy-stable, cloth-friendly.
|
||||
- **RK4**: 매 accurate, expensive — 매 specialized sims.
|
||||
|
||||
### 매 Constraint solvers
|
||||
- **Sequential Impulses (Erin Catto)**: 매 Box2D / Bullet 의 standard.
|
||||
- **Projected Gauss-Seidel (PGS)**: 매 PhysX, ODE.
|
||||
- **XPBD (Extended Position-Based Dynamics)**: 매 Jolt, modern soft-body.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. Action games — Jolt + Havok physics for combat impact.
|
||||
2. Driving sims — multi-body vehicle constraints.
|
||||
3. Cloth / soft-body — XPBD + Verlet for hair, capes, organic deformation.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Semi-implicit Euler
|
||||
```cpp
|
||||
struct RigidBody {
|
||||
Vec3 position, velocity;
|
||||
Quat orientation; Vec3 angularVelocity;
|
||||
float invMass; Mat3 invInertia;
|
||||
Vec3 force, torque;
|
||||
};
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
void integrate(RigidBody& b, float dt) {
|
||||
b.velocity += (b.force * b.invMass) * dt; // 매 v_{n+1} 의 first
|
||||
b.position += b.velocity * dt; // 매 x_{n+1} 의 use new v
|
||||
b.angularVelocity += (b.invInertia * b.torque) * dt;
|
||||
Quat dq = 0.5f * Quat(0, b.angularVelocity) * b.orientation;
|
||||
b.orientation = normalize(b.orientation + dq * dt);
|
||||
b.force = b.torque = Vec3::Zero;
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### AABB broadphase (sweep-and-prune)
|
||||
```cpp
|
||||
struct AABB { Vec3 min, max; int bodyId; };
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
std::vector<std::pair<int,int>> sap(std::vector<AABB>& boxes, int axis) {
|
||||
std::sort(boxes.begin(), boxes.end(),
|
||||
[&](auto& a, auto& b){ return a.min[axis] < b.min[axis]; });
|
||||
std::vector<std::pair<int,int>> pairs;
|
||||
for (size_t i = 0; i < boxes.size(); i++) {
|
||||
for (size_t j = i + 1; j < boxes.size(); j++) {
|
||||
if (boxes[j].min[axis] > boxes[i].max[axis]) break;
|
||||
if (overlap(boxes[i], boxes[j])) pairs.emplace_back(boxes[i].bodyId, boxes[j].bodyId);
|
||||
}
|
||||
}
|
||||
return pairs;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### GJK narrowphase (convex overlap test)
|
||||
```cpp
|
||||
bool gjk(const ConvexShape& A, const ConvexShape& B) {
|
||||
Vec3 d = {1, 0, 0};
|
||||
std::vector<Vec3> simplex = { support(A, B, d) };
|
||||
d = -simplex[0];
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Vec3 p = support(A, B, d);
|
||||
if (dot(p, d) < 0) return false; // 매 origin 의 not contained
|
||||
simplex.push_back(p);
|
||||
if (doSimplex(simplex, d)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Sequential impulse contact resolution
|
||||
```cpp
|
||||
void resolveContact(RigidBody& a, RigidBody& b, const Contact& c, float restitution, float friction) {
|
||||
Vec3 ra = c.point - a.position;
|
||||
Vec3 rb = c.point - b.position;
|
||||
Vec3 relV = (b.velocity + cross(b.angularVelocity, rb))
|
||||
- (a.velocity + cross(a.angularVelocity, ra));
|
||||
float vn = dot(relV, c.normal);
|
||||
if (vn > 0) return; // 매 separating
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
float effMass = a.invMass + b.invMass
|
||||
+ dot(c.normal, cross(a.invInertia * cross(ra, c.normal), ra))
|
||||
+ dot(c.normal, cross(b.invInertia * cross(rb, c.normal), rb));
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
float j = -(1 + restitution) * vn / effMass;
|
||||
Vec3 impulse = j * c.normal;
|
||||
a.velocity -= impulse * a.invMass;
|
||||
b.velocity += impulse * b.invMass;
|
||||
a.angularVelocity -= a.invInertia * cross(ra, impulse);
|
||||
b.angularVelocity += b.invInertia * cross(rb, impulse);
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### XPBD distance constraint
|
||||
```cpp
|
||||
void solveDistance(RigidBody& a, RigidBody& b, float restLen, float compliance, float dt) {
|
||||
Vec3 d = b.position - a.position;
|
||||
float len = length(d);
|
||||
Vec3 n = d / len;
|
||||
float C = len - restLen;
|
||||
float wSum = a.invMass + b.invMass;
|
||||
float alpha = compliance / (dt * dt);
|
||||
float dLambda = -C / (wSum + alpha);
|
||||
a.position -= n * (dLambda * a.invMass);
|
||||
b.position += n * (dLambda * b.invMass);
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Continuous collision (CCD)
|
||||
```cpp
|
||||
// 매 high-velocity tunneling 의 prevent
|
||||
float ccdSphereSphere(Vec3 pa, Vec3 va, float ra, Vec3 pb, Vec3 vb, float rb, float dt) {
|
||||
Vec3 dp = pb - pa;
|
||||
Vec3 dv = vb - va;
|
||||
float r = ra + rb;
|
||||
float a = dot(dv, dv);
|
||||
float b = 2 * dot(dp, dv);
|
||||
float c = dot(dp, dp) - r * r;
|
||||
float disc = b*b - 4*a*c;
|
||||
if (disc < 0 || a == 0) return -1;
|
||||
float t = (-b - std::sqrt(disc)) / (2 * a);
|
||||
return (t >= 0 && t <= dt) ? t : -1;
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Action / shooter | Jolt + semi-implicit Euler + sequential impulses |
|
||||
| Cloth / soft-body | XPBD + Verlet |
|
||||
| Driving sim | Multi-body + RK4 (or sub-stepped semi-implicit) |
|
||||
| Casual mobile | Box2D / cocos2d-x physics — minimal overhead |
|
||||
| Multiplayer rollback | Deterministic fixed-point physics (Photon Quantum) |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 semi-implicit Euler + sequential impulses + AABB broadphase + GJK narrowphase.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Simulation Architecture]] · [[Numerical Methods]]
|
||||
- 변형: [[Rigid Body Dynamics]] · [[Soft Body]] · [[XPBD]] · [[Verlet Integration]]
|
||||
- 응용: [[Fixed Time Step vs Variable Time Step]] · [[Beat Saber]] · [[가상현실(VR) 자전거 시뮬레이터]]
|
||||
- Adjacent: [[Continuous Collision Detection]] · [[GJK]] · [[BVH]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Solver boilerplate, integrator selection, debugging stuck constraint diagnosis.
|
||||
**언제 X**: Numerical correctness verification (deterministic test 의 require), shipping-grade tuning.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **Explicit Euler 의 production**: 매 energy drift → instability.
|
||||
- **No CCD on bullets**: 매 tunneling 의 inevitable.
|
||||
- **Single-axis SAP**: 매 worst-case O(N²) 의 degrade.
|
||||
- **Float-based deterministic netcode**: 매 cross-platform desync.
|
||||
- **Constraint solver 의 too-few iterations**: 매 stack jitter.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Erin Catto GDC talks 2006-2024, Jolt physics docs 2024, "Real-Time Collision Detection" Christer Ericson, XPBD paper Macklin et al.).
|
||||
- 신뢰도 A+.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — integration, collision, constraint trinity + canonical solvers |
|
||||
|
||||
@@ -1,82 +1,164 @@
|
||||
---
|
||||
id: wiki-2026-0508-platform-resistance-and-defensiv
|
||||
title: Platform Resistance and Defensive Specialization
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Platform Defense, Platform Specialization, Counter-Platform Strategy]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, business-strategy, platform-economics, indie-strategy]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: NextJS
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Platform Resistance and Defensive Specialization
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 indie / mid-tier studio가 매 Steam / App Store / Epic 같은 매 dominant platform 의 매 30% revenue cut + 매 algorithmic exposure risk에 매 어떻게 hedge하나 — 매 답은 매 'defensive specialization' (매 specific niche에서 매 platform-replaceable이 안 되도록)"**. 매 2026 시점에서 매 Apple / Google App Store antitrust ruling (Epic v. Apple 2024, EU DMA 2024 enforcement)이 매 platform power를 매 어느 정도 제약했지만, 매 algorithmic discoverability + 매 payment routing은 매 여전히 platform-controlled. 매 dev studio들의 매 defensive playbook이 매 explicit 형태로 emerge.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 platform vulnerability axes
|
||||
- **Revenue cut**: 매 30% standard, 매 12% (Epic), 매 0% direct sales — 매 hedge by direct.
|
||||
- **Discoverability**: 매 platform algorithm shift (Steam Discovery Queue 변경) → 매 sales 50% drop overnight 가능.
|
||||
- **TOS arbitrary enforcement**: 매 Apple App Store reject without specific reason — 매 single platform dependency = existential risk.
|
||||
- **Payment routing**: 매 in-app purchase 강제 — 매 Epic의 매 Apple lawsuit core issue.
|
||||
- **Featured slot dependency**: 매 launch 시 매 frontpage feature 없으면 매 매몰.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 defensive specialization 전략
|
||||
- **Direct distribution**: 매 itch.io + 매 own website + 매 Patreon — 매 hardcore audience pay direct (Cult of the Lamb DLC 2024 model).
|
||||
- **Multi-platform parity day-1**: 매 Steam + Epic + GOG + Microsoft Store + 매 console 동시 — 매 single platform leverage 약화.
|
||||
- **Niche genre dominance**: 매 small market에서 매 #1 — 매 platform이 매 replace 어려움 (RimWorld, Factorio 식).
|
||||
- **Subscription bundling**: 매 Game Pass / PS Plus 매 day-1 — 매 upfront payment + 매 platform 의 매 marketing cost 부담.
|
||||
- **Community ownership**: 매 Discord + 매 mailing list + 매 newsletter — 매 platform algorithm 매 우회.
|
||||
|
||||
### 매 응용
|
||||
1. **Hello Games (No Man's Sky)**: 매 11년 free DLC — 매 매 update가 매 own news cycle, 매 platform algorithm 의존도 약화.
|
||||
2. **ConcernedApe (Stardew Valley)**: 매 single dev + 매 patient 1.6 update (2024) → 매 매 update가 매 #1 Steam top seller.
|
||||
3. **Larian Studios (BG3)**: 매 GOG day-1 + 매 Steam + 매 Mac/Linux + 매 console — 매 매 platform이 매 matter 안 하게 만든 매 distribution diversification.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Multi-storefront key distribution
|
||||
```typescript
|
||||
// 매 customer가 매 own website에서 buy → 매 Steam/GOG/Epic key 매 select 가능
|
||||
type Storefront = 'steam' | 'gog' | 'epic' | 'directplay';
|
||||
async function deliverKey(orderId: string, choice: Storefront) {
|
||||
const inventory = await db.keyPool.findFirst({
|
||||
where: { storefront: choice, used: false },
|
||||
});
|
||||
if (!inventory) throw new Error('out of stock');
|
||||
await db.keyPool.update({ where: { id: inventory.id }, data: { used: true, orderId } });
|
||||
await sendEmail({
|
||||
to: order.email,
|
||||
template: `${choice}-key-delivery`,
|
||||
data: { key: inventory.key, redeemUrl: REDEEM_URLS[choice] },
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Direct payment + Stripe routing
|
||||
```typescript
|
||||
// 매 own checkout — 매 platform 30% 회피
|
||||
import Stripe from 'stripe';
|
||||
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
export async function checkout(req) {
|
||||
const session = await stripe.checkout.sessions.create({
|
||||
line_items: [{ price: 'price_game_main_2999', quantity: 1 }],
|
||||
mode: 'payment',
|
||||
success_url: 'https://gamesite.com/thanks?session_id={CHECKOUT_SESSION_ID}',
|
||||
metadata: { product: 'game_v1' },
|
||||
});
|
||||
return Response.json({ url: session.url });
|
||||
}
|
||||
// 매 platform 30% → 매 Stripe 2.9%+30¢ — 매 ~27% margin 회복
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Platform-agnostic save sync
|
||||
```typescript
|
||||
// 매 Steam Cloud / Epic Cloud Save에 매 dependency 안 함
|
||||
class SaveManager {
|
||||
async save(slot: number, data: SaveData) {
|
||||
const local = await fs.writeFile(`${userDir}/save_${slot}.json`, JSON.stringify(data));
|
||||
if (await this.userOptedInCloud()) {
|
||||
await fetch(OWN_SAVE_API, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ slot, data, accountId: this.userId }),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Algorithm independence — community ownership
|
||||
```typescript
|
||||
// 매 newsletter via Resend / ConvertKit
|
||||
async function announceUpdate(updateName: string) {
|
||||
const subscribers = await db.subscriber.findMany({ where: { unsubscribed: false } });
|
||||
await Promise.all(subscribers.map(s => sendEmail({
|
||||
to: s.email,
|
||||
template: 'game-update',
|
||||
data: { update: updateName, patchNotes: latestPatchNotes },
|
||||
})));
|
||||
// 매 Steam algorithm dependency → 매 0
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Telemetry self-host (no platform analytics tax)
|
||||
```typescript
|
||||
// 매 own PostHog / Plausible — 매 platform이 매 player data 안 보여줌
|
||||
import posthog from 'posthog-node';
|
||||
const ph = new posthog.PostHog(process.env.POSTHOG_KEY!, {
|
||||
host: 'https://analytics.gamesite.com',
|
||||
});
|
||||
ph.capture({
|
||||
distinctId: player.id,
|
||||
event: 'level_completed',
|
||||
properties: { level: 5, time_seconds: 120, deaths: 3 },
|
||||
});
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Solo dev / first game | 매 Steam single platform — 매 lessons 먼저 |
|
||||
| Mid-tier with audience | Steam + GOG + Epic + own site (key reseller) |
|
||||
| Established brand | 매 own launcher 시도 가능 (Larian, CDPR) |
|
||||
| Live service | 매 multi-platform parity 강제 (player liquidity) |
|
||||
| Mobile | 매 Apple/Google 매 dominant — 매 alternative 매 EU only |
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
**기본값**: 매 launch from day-1 with 매 minimum 3 storefront + 매 own website (key reseller). 매 single-platform = 매 existential risk.
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 🔗 Graph
|
||||
- 부모: [[Indie-Business-Strategy]] · [[Platform-Economics]]
|
||||
- 변형: [[Direct-Sales-Model]] · [[Subscription-Service-Strategy]]
|
||||
- 응용: [[No-Mans-Sky-Recovery]] · [[BG3-Distribution-Strategy]]
|
||||
- Adjacent: [[Epic-Apple-Lawsuit]] · [[EU-DMA-Compliance]]
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 launch plan 작성 시 LLM에게 매 multi-storefront launch checklist + 매 each platform spec / TOS 비교 요청.
|
||||
**언제 X**: 매 specific platform negotiation — 매 BD relationship은 매 human-driven.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## ❌ 안티패턴
|
||||
- **Single platform exclusivity (no upfront payment)**: 매 Epic exclusive without 매 guarantee = 매 launch suicide.
|
||||
- **Day-1 Game Pass without proper deal**: 매 sub revenue가 매 sales 잡아먹음.
|
||||
- **No community channel**: 매 platform algorithm 한 번 shift 매 → 매 audience 매 lost.
|
||||
- **In-game store with platform IAP only**: 매 30% 영구 손실.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Epic v Apple 판결 (2024), EU DMA 시행 (2024), 매 Larian / Hello Games / ConcernedApe interview.
|
||||
- 신뢰도 A.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — platform vulnerability axes, defensive specialization 전략, multi-storefront / direct payment patterns |
|
||||
|
||||
@@ -1,82 +1,156 @@
|
||||
---
|
||||
id: wiki-2026-0508-platform-specialization
|
||||
title: Platform Specialization
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Platform Specialization, Combat Platform Roles, Unit Specialization]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, combat-design, war-commander, rts, role-design]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: unity
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Platform Specialization
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 unit 의 의 의 의 의 의 의 의 distinct role 의 의 의 의 의 의 의 design — 매 의 의 의 의 의 의 의 의 generalist 의 의 의 의 의 의 의 의 의 X"**. RTS / 4X / mobile-strategy 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 combat ecosystem 의 의 의 의 의 의 health 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 fundamental design choice — 매 War Commander / Boom Beach / Clash of Clans / Last Shelter 의 의 의 의 의 의 의 의 의 의 의 case studies 의 의 의 의 의 의 의 의 의 의 의 의 cross-reference.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 specialization vs generalization
|
||||
- **Generalist**: 매 의 의 의 의 의 의 unit 의 의 의 의 의 의 의 모든 role 의 의 의 의 의 의 mediocre 의 의 의 perform. 매 design 의 의 의 lazy 의 의 의 의 outcome — player 의 의 의 의 의 의 의 의 의 mass 의 의 의 의 의 의 single-unit 의 의 의 의 의 win.
|
||||
- **Specialist**: 매 의 의 의 의 의 platform 의 의 의 의 의 의 의 의 narrow role — air-defense, anti-tank, anti-infantry, support, siege. 매 의 의 의 의 의 의 의 player 의 의 의 의 의 의 의 의 composition / counter-pick 의 의 의 의 의 의 의 의 의 strategy 의 의 의 의 의 의 emerge.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 archetype roles
|
||||
1. **Anti-Air (AA)**: 매 의 의 의 의 의 의 의 fast / aerial unit 의 의 의 의 의 의 counter. Range > damage. Often glass cannon.
|
||||
2. **Anti-Ground (AG)**: 매 의 의 의 의 의 의 의 tank / siege / vehicle 의 의 의 의 의 의 의 counter. High damage, slow.
|
||||
3. **Anti-Infantry**: AOE / splash. Cheap unit-swarm 의 의 의 의 counter.
|
||||
4. **Support**: Heal / repair / buff. 매 의 의 의 의 의 의 의 의 의 의 frontline 의 의 의 의 의 의 의 의 sustain.
|
||||
5. **Siege**: Building-damage 의 의 의 의 의 의 의 의 의 의 multiplier. 매 의 의 의 의 의 의 의 의 unit-vs-unit 의 의 의 의 의 의 의 의 의 의 의 의 weak.
|
||||
6. **Scout / Recon**: Vision / intel. Combat-weak.
|
||||
|
||||
### 매 design constraint
|
||||
- **매 의 의 의 의 의 의 의 의 의 의 hard-counter ratio**: specialist 의 의 의 의 의 의 의 vs target role 의 의 의 의 의 의 의 의 의 의 의 의 3-5x effective. 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 too high (oneshot 의 의 의 frustration), too low (specialization 의 의 의 의 의 의 의 의 X).
|
||||
- **매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 generalist 의 의 의 의 의 의 의 X**: design rule.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Role enum + damage modifier table
|
||||
```csharp
|
||||
public enum Role { Infantry, LightVehicle, HeavyVehicle, Air, Building, Support }
|
||||
public enum DamageType { Bullet, Cannon, Rocket, AA, Flame, Energy }
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
public static class DamageTable {
|
||||
// [DamageType, Role] -> multiplier
|
||||
public static readonly float[,] Mult = {
|
||||
// Inf, LV, HV, Air, Bldg, Sup
|
||||
{ 1.0f, 0.5f, 0.2f, 0.3f, 0.5f, 1.0f }, // Bullet
|
||||
{ 0.4f, 1.5f, 1.2f, 0.0f, 1.5f, 0.4f }, // Cannon
|
||||
{ 0.5f, 1.0f, 2.0f, 0.5f, 2.5f, 0.5f }, // Rocket
|
||||
{ 0.3f, 0.5f, 0.5f, 4.0f, 0.0f, 0.3f }, // AA
|
||||
{ 1.8f, 0.8f, 0.3f, 0.0f, 0.5f, 1.8f }, // Flame
|
||||
{ 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f } // Energy (generalist 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 X)
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Platform definition
|
||||
```csharp
|
||||
[CreateAssetMenu]
|
||||
public class PlatformDef : ScriptableObject {
|
||||
public string id;
|
||||
public Role role;
|
||||
public DamageType damageType;
|
||||
public float baseDmg;
|
||||
public float range;
|
||||
public float speed;
|
||||
public Role[] preferredTargets; // 매 의 의 의 의 의 AI targeting bias
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
public float DamageVs(Role target) =>
|
||||
baseDmg * DamageTable.Mult[(int)damageType, (int)target];
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### AI targeting (specialization-aware)
|
||||
```csharp
|
||||
public Unit PickTarget(Unit self, List<Unit> enemies) {
|
||||
var preferred = self.Def.preferredTargets;
|
||||
return enemies
|
||||
.Where(e => Vector3.Distance(self.pos, e.pos) <= self.Def.range)
|
||||
.OrderByDescending(e => Array.IndexOf(preferred, e.Def.role) >= 0 ? 1 : 0)
|
||||
.ThenByDescending(e => self.Def.DamageVs(e.Def.role))
|
||||
.ThenBy(e => e.HP)
|
||||
.FirstOrDefault();
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Composition validator
|
||||
```csharp
|
||||
public class ArmyCompositionValidator {
|
||||
// 매 의 의 의 의 의 의 의 의 single-role 의 의 의 의 의 의 의 의 의 의 spam 의 의 의 의 의 의 의 의 X 의 의 의 의 의 player education
|
||||
public Warning? Validate(List<Unit> army) {
|
||||
var byRole = army.GroupBy(u => u.Def.role).ToDictionary(g => g.Key, g => g.Count());
|
||||
if (byRole.Values.Max() > army.Count * 0.7)
|
||||
return new Warning("매 의 의 의 의 의 의 의 의 single-role 의 의 의 의 spam — 매 의 의 의 의 counter 의 의 의 의 의 의 의 vulnerable");
|
||||
if (!byRole.ContainsKey(Role.Air) && army.Any(u => u.Def.role == Role.Infantry))
|
||||
return new Warning("매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 air-cover 의 의 X");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Counter-pick suggestion (UI)
|
||||
```csharp
|
||||
public List<PlatformDef> SuggestCounters(List<Role> enemyComposition) {
|
||||
return AllPlatforms
|
||||
.OrderByDescending(p =>
|
||||
enemyComposition.Sum(role => p.DamageVs(role)))
|
||||
.Take(5)
|
||||
.ToList();
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Casual mobile-strategy | 4-6 specialist roles. 매 의 deep design 의 의 X (tutorial cost) |
|
||||
| Hardcore RTS (StarCraft-tier) | 8-12 specialist roles + composition meta |
|
||||
| 4X late-game | Hybrid — specialist platforms + tech-tree 의 의 의 의 의 의 의 의 generalist late-tier 의 의 의 의 의 의 의 unlock |
|
||||
| PvE-only | Lighter specialization OK — AI 의 의 의 의 의 의 의 의 의 의 의 counter-pick 의 의 의 의 의 의 의 X |
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
**기본값**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 6 specialist roles + 의 의 의 의 의 의 hard-counter 의 의 의 의 의 의 3-5x multiplier + 의 의 의 의 의 의 의 의 의 generalist 의 의 의 의 X.
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Combat-Balance]] · [[Game Design Theory]]
|
||||
- 변형: [[Anti-Air-and-Anti-Ground-Combat]] · [[Damage-Resistance-Platforms]] · [[Support-Platforms]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Evolution-of-the-War-Commander-Combat-Ecosystem]] · [[Structural-Dynamics-of-Combat-Ecosystem]]
|
||||
- Adjacent: [[Platform-Resistance-and-Defensive-Specialization]] · [[Assault-Platoons]] · [[Defense-Buildings]]
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🤖 LLM 활용
|
||||
**언제**: RTS / 4X / mobile-strategy 의 unit 의 의 의 의 의 design 의 의 의 의 의 의 의 의 reference, 매 의 의 의 의 의 의 의 의 composition meta 의 의 의 의 의 의 의 의 의 의 분석.
|
||||
**언제 X**: 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 single-unit / single-character 의 의 의 의 의 game (e.g., 의 의 의 의 의 의 의 의 의 의 의 의 의 의 platformer / RPG-solo).
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## ❌ 안티패턴
|
||||
- **Single-unit dominance**: 매 의 의 의 의 의 의 의 의 의 generalist 의 의 의 의 의 의 의 의 의 의 mass 의 의 의 의 의 의 의 의 의 의 winning composition. 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 design failure.
|
||||
- **Hard-counter > 5x**: oneshot frustration. Player 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 quit.
|
||||
- **Hard-counter < 2x**: specialization 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 X.
|
||||
- **Role-bloat**: 12+ roles 의 의 의 의 의 의 의 의 casual player 의 의 의 의 의 의 의 의 의 의 의 의 의 confusion.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (War Commander combat-ecosystem 분석 + StarCraft balance patches).
|
||||
- 매 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 의 industry-standard pattern (RTS 의 의 의 의 의 의 1990s—).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — specialization framework + role design patterns |
|
||||
|
||||
@@ -1,82 +1,212 @@
|
||||
---
|
||||
id: wiki-2026-0508-player-experience-modeling
|
||||
title: Player Experience Modeling
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [PXM, Player Modeling, Affective Game Design, Experience Metrics]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-research, player-modeling, ux, telemetry, affective-computing]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: design-pattern
|
||||
framework: ML-game-analytics
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Player Experience Modeling
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Player Experience Modeling은 매 quantitative + qualitative methods 로 매 player 의 매 internal state (engagement, frustration, flow) 의 매 model"**. 매 Yannakakis-Togelius "PCG via PXM" + 매 industry telemetry pipelines 의 매 union — 매 dynamic difficulty, 매 churn prediction, 매 recommendation 의 매 underpinning.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Dimensions of Experience
|
||||
- **Engagement**: 매 session length, 매 click rate, 매 retention.
|
||||
- **Flow (Csikszentmihalyi)**: 매 challenge ↔ skill balance.
|
||||
- **Frustration**: 매 fail-rate spikes, 매 rage-quit signals.
|
||||
- **Curiosity**: 매 exploration breadth, 매 novel-action rate.
|
||||
- **Affect**: 매 facial / biosignal (eye-tracking, GSR) — 매 lab-only.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Modeling Approaches
|
||||
1. **Behavioral telemetry**: 매 in-game actions → 매 supervised classifier (boredom/flow/anxiety).
|
||||
2. **Self-report**: 매 PENS / GEQ questionnaires.
|
||||
3. **Physiological**: 매 GSR, EEG, eye-tracking.
|
||||
4. **Multimodal fusion**: 매 매 above 의 매 ensemble.
|
||||
|
||||
### 매 응용
|
||||
1. EA / Riot 의 churn prediction.
|
||||
2. Niantic / Pokémon GO 의 매 difficulty pacing.
|
||||
3. 매 PCG (procedural content gen) 의 매 player-driven adaptation.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Flow-channel modeling (challenge vs skill)
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
class FlowEstimator:
|
||||
def __init__(self):
|
||||
self.skill_history = []
|
||||
self.challenge_history = []
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
def update(self, level_difficulty: float, success: bool, time_taken: float):
|
||||
# Skill: rolling estimate of player ability
|
||||
if success:
|
||||
self.skill_history.append(level_difficulty + (1.0 / (1 + time_taken)))
|
||||
else:
|
||||
self.skill_history.append(level_difficulty - 0.5)
|
||||
self.challenge_history.append(level_difficulty)
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
def in_flow(self) -> bool:
|
||||
# Flow when |challenge - skill| < threshold
|
||||
skill = np.mean(self.skill_history[-10:])
|
||||
challenge = np.mean(self.challenge_history[-10:])
|
||||
return abs(challenge - skill) < 0.2
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Behavioral telemetry pipeline
|
||||
```typescript
|
||||
interface PlayerEvent {
|
||||
userId: string;
|
||||
ts: number;
|
||||
type: 'click' | 'move' | 'fail' | 'success' | 'pause' | 'quit';
|
||||
meta: any;
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
class TelemetryAggregator {
|
||||
windows: Map<string, PlayerEvent[]> = new Map();
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
ingest(evt: PlayerEvent) {
|
||||
const arr = this.windows.get(evt.userId) ?? [];
|
||||
arr.push(evt);
|
||||
// 5-minute rolling window
|
||||
const cutoff = evt.ts - 300_000;
|
||||
this.windows.set(evt.userId, arr.filter(e => e.ts > cutoff));
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
features(userId: string) {
|
||||
const arr = this.windows.get(userId) ?? [];
|
||||
return {
|
||||
eventRate: arr.length / 300,
|
||||
failRate: arr.filter(e => e.type === 'fail').length / Math.max(1, arr.length),
|
||||
pauseCount: arr.filter(e => e.type === 'pause').length,
|
||||
sessionLen: arr.length > 0 ? arr[arr.length - 1].ts - arr[0].ts : 0
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Frustration classifier (gradient-boosted)
|
||||
```python
|
||||
import lightgbm as lgb
|
||||
import pandas as pd
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
# Features = aggregated telemetry; label = self-reported frustration (0/1)
|
||||
df = load_labeled_sessions()
|
||||
X = df[['fail_rate', 'retry_count', 'pause_avg_dur', 'click_intensity', 'time_on_failure']]
|
||||
y = df['frustrated_label']
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
model = lgb.LGBMClassifier(n_estimators=200, max_depth=6)
|
||||
model.fit(X, y)
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
# Inference — surface DDA intervention if predicted frustration > 0.7
|
||||
def maybe_intervene(features):
|
||||
p = model.predict_proba([features])[0][1]
|
||||
return 'OFFER_HINT' if p > 0.7 else None
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Dynamic Difficulty Adjustment (DDA)
|
||||
```typescript
|
||||
// Use PXM signals to adjust next-level difficulty
|
||||
function pickNextDifficulty(skill: number, frustration: number, boredom: number): number {
|
||||
let target = skill;
|
||||
if (frustration > 0.7) target -= 0.3; // ease up
|
||||
if (boredom > 0.7) target += 0.3; // spice up
|
||||
return Math.max(0.1, Math.min(1.0, target));
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Churn prediction (LSTM on session sequences)
|
||||
```python
|
||||
import torch.nn as nn
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
class ChurnLSTM(nn.Module):
|
||||
def __init__(self, n_features=20, hidden=64):
|
||||
super().__init__()
|
||||
self.lstm = nn.LSTM(n_features, hidden, batch_first=True)
|
||||
self.fc = nn.Linear(hidden, 1)
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
def forward(self, x):
|
||||
# x: (batch, seq_len_sessions, n_features)
|
||||
h, _ = self.lstm(x)
|
||||
return torch.sigmoid(self.fc(h[:, -1, :]))
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
# Predict probability user will quit within 7 days
|
||||
```
|
||||
|
||||
### GEQ (Game Experience Questionnaire) score aggregator
|
||||
```python
|
||||
# In-game post-session survey -> 7 PXM dimensions
|
||||
GEQ_DIMENSIONS = [
|
||||
'competence', 'sensory_immersion', 'flow', 'tension',
|
||||
'challenge', 'negative_affect', 'positive_affect'
|
||||
]
|
||||
|
||||
def score_geq(responses: dict[str, int]) -> dict[str, float]:
|
||||
# Each dimension is the average of its constituent items (5-point Likert)
|
||||
scores = {}
|
||||
for dim in GEQ_DIMENSIONS:
|
||||
items = GEQ_ITEMS[dim]
|
||||
scores[dim] = sum(responses[i] for i in items) / len(items)
|
||||
return scores
|
||||
```
|
||||
|
||||
### Multimodal fusion (telemetry + GSR)
|
||||
```python
|
||||
# Concatenate behavioral + biosignal features for inference
|
||||
def fused_inference(behavioral_feats, gsr_signal):
|
||||
behavior_emb = behavior_model(behavioral_feats)
|
||||
physio_emb = gsr_cnn(gsr_signal)
|
||||
fused = torch.cat([behavior_emb, physio_emb], dim=-1)
|
||||
return fusion_classifier(fused) # outputs (engagement, flow, frustration)
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Mobile game live-ops | 매 telemetry-only PXM (매 GSR 의 매 unavailable) |
|
||||
| Lab UX research | 매 multimodal (telemetry + GSR + eye-track) |
|
||||
| DDA implementation | 매 frustration/boredom classifier + 매 difficulty PID |
|
||||
| Churn prediction | 매 LSTM on session sequences |
|
||||
|
||||
**기본값**: 매 telemetry-feature pipeline + 매 GBDT classifier + 매 GEQ post-session survey — 매 industry-grade PXM stack.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Gamification-Theory]] · [[Procedural Rhetoric (In Gaming)]]
|
||||
- 변형: [[Algorithmic Rhetoric]] · [[Data-Driven Personalization]]
|
||||
- 응용: [[Roguelike Procedural Generation]] · [[Live Operations (LiveOps)]]
|
||||
- Adjacent: [[McKinsey Problem Solving Test (PST)]] · [[Magic-Circle]] · [[사용자 참여도(Player Engagement)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 game-analytics pipeline design, 매 DDA modeling, 매 churn-prediction architecture, 매 PXM research method selection.
|
||||
**언제 X**: 매 narrative-only/no-telemetry game (매 PXM modeling 의 매 over-engineering).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Self-report only**: 매 매 small-N + 매 social-desirability bias.
|
||||
- **Behavioral-only without ground truth**: 매 매 classifier 의 매 unverifiable label drift.
|
||||
- **One-shot DDA**: 매 매 single signal 의 매 overreact — 매 rolling window 의 매 use.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Yannakakis & Togelius "Artificial Intelligence and Games" 2018, GEQ IJsselsteijn 2013, Riot Games churn-prediction tech blog 2022).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — PXM dimensions + telemetry/DDA/churn ML patterns |
|
||||
|
||||
@@ -1,82 +1,168 @@
|
||||
---
|
||||
id: wiki-2026-0508-poverty-simulation
|
||||
title: Poverty Simulation
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
title: Poverty Simulation in Games
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Poverty Sim, Resource Scarcity Design, Survival Economy]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, serious-game, narrative-mechanic, resource-management]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: pygame
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Poverty Simulation in Games
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 poverty simulation은 매 resource scarcity를 매 mere mechanic이 아닌 매 systemic constraint로 — 매 player가 매 'rational choice 그 자체를 빼앗기는' 매 cognitive load + 매 emotional desperation을 felt 하게 design."** Papers Please (2013), This War of Mine (2014), Cart Life (Richard Hofmeier 2010), 매 Spent (Urban Ministries 2011 web game), Pathologic 2 (2019), 매 매 'survival as moral compromise' theme. 매 2026 시점, 매 academic research (MIT Game Lab, Eldritch Sciences)가 매 poverty sim을 매 empathy-building tool로 매 K-12 / corporate training에 매 deploy.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 design pillars
|
||||
- **Multi-resource scarcity**: 매 단일 resource 아닌 매 food + heat + medicine + rent + sleep — 매 각 항목이 매 한 turn에 모두 충족 불가.
|
||||
- **Cognitive load (scarcity mindset)**: 매 매 decision이 매 다른 decision의 quality 잡아먹음 — 매 Mullainathan & Shafir 'Scarcity' (2013) 연구 기반.
|
||||
- **Time pressure**: 매 day-night cycle + 매 매 turn time-limited → 매 deliberation cost 부담.
|
||||
- **Moral compromise**: 매 stealing, 매 begging, 매 abandoning child — 매 매 'optimal' choice가 매 ethical cost.
|
||||
- **No pure win state**: 매 best ending도 매 'survival' 정도 — 매 'thriving' 의 매 unreachable.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 응용
|
||||
1. **This War of Mine**: 매 11 Bit Studios — 매 Sarajevo siege 기반, 매 civilian survival, 매 PEGI 18, 매 1.5M+ copies.
|
||||
2. **Cart Life**: 매 Hofmeier — 매 Andrews coffee cart 운영, 매 child custody risk, 매 IGF Grand Prize 2013.
|
||||
3. **Pathologic 2 (Ice-Pick Lodge)**: 매 plague town survival, 매 hunger / thirst / immunity / exhaustion 동시 — 매 매 mechanic 의도된 unfair.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### Multi-resource decay system
|
||||
```python
|
||||
class ResourceState:
|
||||
def __init__(self):
|
||||
self.food = 100.0
|
||||
self.warmth = 100.0
|
||||
self.health = 100.0
|
||||
self.sleep = 100.0
|
||||
self.money = 5.0
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
def tick(self, hours: float):
|
||||
self.food -= 4.0 * hours
|
||||
self.warmth -= 2.5 * hours # 매 cold weather +1.5
|
||||
self.sleep -= 3.0 * hours
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
if self.food < 20: self.health -= 0.5 * hours
|
||||
if self.warmth < 20: self.health -= 0.7 * hours
|
||||
if self.sleep < 20: self.health -= 0.3 * hours
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
if self.health <= 0:
|
||||
return GameOver("succumbed to deprivation")
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Scarcity decision validator
|
||||
```python
|
||||
# 매 player가 매 매 turn 매 한 가지만 가능 — 매 trade-off explicit
|
||||
class ScarcityChoice:
|
||||
def __init__(self, options: list[dict]):
|
||||
# 매 options: [{name, food_cost, money_cost, time_cost, gain}]
|
||||
self.options = options
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
def apply(self, choice_idx: int, state: ResourceState):
|
||||
c = self.options[choice_idx]
|
||||
if state.food < c.get('food_cost', 0): raise NotEnoughFood
|
||||
if state.money < c.get('money_cost', 0): raise NotEnoughMoney
|
||||
state.food -= c.get('food_cost', 0)
|
||||
state.money -= c.get('money_cost', 0)
|
||||
# 매 unchosen options이 매 opportunity cost
|
||||
state.sleep -= c.get('time_cost', 1) * 3.0
|
||||
return c.get('gain', {})
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Cognitive load — UI degradation
|
||||
```python
|
||||
# 매 player의 매 sleep / hunger 낮을 때 매 UI itself가 매 degrade
|
||||
class StressedUI:
|
||||
def render(self, state: ResourceState, screen):
|
||||
if state.sleep < 30:
|
||||
screen.set_blur(amount=(30 - state.sleep) / 30)
|
||||
if state.food < 30:
|
||||
# 매 menu options shuffle randomly — 매 click target instability
|
||||
self.menu_items = random.sample(self.menu_items, len(self.menu_items))
|
||||
if state.health < 20:
|
||||
screen.flash_vignette(color='red', alpha=0.4)
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Moral compromise tracker
|
||||
```python
|
||||
class MoralLedger:
|
||||
def __init__(self):
|
||||
self.actions = []
|
||||
self.guilt = 0.0
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
def record(self, action: str, severity: float):
|
||||
self.actions.append(action)
|
||||
self.guilt += severity
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def affects_dialogue(self) -> str:
|
||||
# 매 NPC dialogue가 매 player의 매 cumulative guilt reflect
|
||||
if self.guilt > 5: return "haunted"
|
||||
if self.guilt > 2: return "weary"
|
||||
return "tired"
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
# 매 example
|
||||
ledger.record("stole_bread_from_orphanage", severity=2.5)
|
||||
ledger.record("abandoned_sick_companion", severity=3.0)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Day-night sleep pressure
|
||||
```python
|
||||
def calculate_rest_quality(safety: float, comfort: float, duration_hours: float) -> float:
|
||||
"""
|
||||
매 homeless / unsafe shelter 에서 매 sleep quality 매 낮음 → 매 next day 매 cognitive penalty.
|
||||
"""
|
||||
base = duration_hours / 8.0
|
||||
safety_mult = 0.3 + 0.7 * safety
|
||||
comfort_mult = 0.5 + 0.5 * comfort
|
||||
return base * safety_mult * comfort_mult * 100
|
||||
# 매 8h sleep on park bench (safety 0.2, comfort 0.1) = 매 effective ~22% rest
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Educational empathy tool | Spent / Cart Life style — 매 short, 매 high impact |
|
||||
| Long-form narrative | This War of Mine — 매 multi-character, 매 weeks |
|
||||
| Hardcore survival | Pathologic 2 — 매 punishing mechanics |
|
||||
| Mobile awareness campaign | Spent (web game) — 매 5 min playable |
|
||||
| Corporate DEI training | 매 short scenario + 매 reflection guide |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: 매 multi-resource + 매 cognitive load + 매 moral compromise tracker. 매 single-resource scarcity는 매 too gamey.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Serious-Games]] · [[Resource-Management-Design]]
|
||||
- 변형: [[This-War-of-Mine]] · [[Cart-Life]] · [[Pathologic-2]]
|
||||
- 응용: [[Empathy-Game-Design]] · [[Game-as-Activism]]
|
||||
- Adjacent: [[Mullainathan-Scarcity-Theory]] · [[Survival-Game-Design]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 scenario writing — LLM에게 매 specific real-world poverty case study (eviction, medical bankruptcy) 기반 매 game scenario draft 요청.
|
||||
**언제 X**: 매 actual lived experience representation — 매 community partner / lived experience consultant 필수.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **Poverty as obstacle to overcome**: 매 player가 매 'beat poverty' optimal play 가능하면 매 message inverted.
|
||||
- **Single resource**: 매 'just food' = 매 puzzle, 매 not poverty.
|
||||
- **Sanitized choices**: 매 moral compromise 빼면 매 desperation 못 felt.
|
||||
- **No follow-up**: 매 game 후 매 reflection / discussion guide 없으면 매 mere shock.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Mullainathan & Shafir "Scarcity: Why Having Too Little Means So Much" (2013), 11 Bit Studios postmortems, IGF Grand Prize 심사 코멘트, MIT Game Lab serious game studies.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — multi-resource decay, cognitive load UI degradation, moral compromise tracker patterns |
|
||||
|
||||
@@ -1,80 +1,171 @@
|
||||
---
|
||||
id: wiki-2026-0508-power-creep-content-treadmills
|
||||
title: Power Creep (Content Treadmills)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Power Creep, Content Treadmill, Vertical Progression Inflation]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, live-service, balancing, monetization]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: pandas
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Power Creep (Content Treadmills)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 power creep은 매 live service game의 매 매 patch마다 매 new content를 매 'previous content보다 strong하게' 만드는 매 design pressure — 매 player engagement(매 chase)는 자극하지만 매 long-term 매 trivializes 모든 prior content."** Diablo 3, WoW, Genshin Impact, Marvel Snap, Honkai Star Rail, 매 매 gacha game 모두 매 power creep 의 매 victim 또는 매 deliberate user. 매 2026 시점, miHoYo / HoYoverse가 매 'sideways power creep' (매 vertical inflation 대신 매 horizontal team comp shift)으로 매 partial mitigation.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 파워 크리프 또는 콘텐츠 트레드밀은 신규 콘텐츠가 항상 더 강해 기존 콘텐츠 가치를 잠식하는 라이브 게임의 만성 문제다.
|
||||
## 매 핵심
|
||||
|
||||
### 매 power creep mechanism
|
||||
- **Engagement loop**: 매 new banner / patch → 매 previous BIS (Best In Slot) inferior → 매 player FOMO → 매 monetization spike.
|
||||
- **Content trivialization**: 매 old raid / dungeon이 매 new gear로 매 1-shot → 매 historical content 가치 0.
|
||||
- **New player hostility**: 매 entry barrier가 매 매 patch마다 raise → 매 mid-game player retention 어려움.
|
||||
- **Veteran burnout**: 매 매 grind reset이 매 매 patch마다 → 매 'I just got BIS, now obsolete'.
|
||||
|
||||
> 파워 크리프는 신규 콘텐츠가 기존 콘텐츠보다 점진적으로 강해지는 현상으로, 단기 매출 부스트를 주지만 장기적으로 밸런스 붕괴와 신규 진입 장벽을 만든다.
|
||||
### 매 mitigation 전략
|
||||
- **Sideways creep (Genshin / HSR)**: 매 new character가 매 power 'up' 아니라 매 new team comp niche.
|
||||
- **Periodic reset (Diablo Seasons)**: 매 매 3-month season → 매 모든 player 매 0부터 → 매 power creep 매 contained.
|
||||
- **Gear sidegrade (Destiny 2 perks)**: 매 raw stat 매 stable, 매 perk synergy로 매 differentiation.
|
||||
- **Soft level cap (FFXIV)**: 매 expansion마다 매 cap raise + 매 old gear 자동 sync — 매 old raid 다시 challenging.
|
||||
- **Power band compression (LoL champion balance)**: 매 매 patch마다 매 outlier nerf + 매 underperformer buff — 매 매 champion이 매 viable band 안에.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 응용
|
||||
1. **Genshin 매 Hyperbloom meta (2022)**: 매 dendro element 도입이 매 raw stat 아닌 매 reaction system 변경 → 매 새 team archetype 생성, 매 old characters (Xingqiu, Fischl) 매 다시 valuable.
|
||||
2. **Marvel Snap 매 OTA balance (2024)**: 매 'Over The Air' patch — 매 매 2주 매 outlier card buff/nerf, 매 매 deck cycle 빠름.
|
||||
3. **WoW Classic Hardcore (2023)**: 매 power creep 거부 — 매 vanilla 그대로 → 매 nostalgia + 매 deathless run engagement.
|
||||
|
||||
**추출된 패턴:** "신규 캐릭터·장비를 더 강하게 만들어야 팔린다"는 비즈니스 압력과 "기존 콘텐츠의 가치 보존"이라는 디자인 원칙이 충돌하는 구조적 문제.
|
||||
## 💻 패턴
|
||||
|
||||
**세부 내용:**
|
||||
- 수직 진행(Power tier 상승) vs 수평 진행(Niche specialization).
|
||||
- 리워크 / 리밸런스 / 인플레이션 회수 메커니즘 필요.
|
||||
- 성능 정점을 회피한 디자인: 가위바위보 상성, 환경별 메타.
|
||||
- Hearthstone, MapleStory, FGO 사례.
|
||||
- 신규 유저 이탈 → 천장 비용 인상 → 추가 이탈의 악순환.
|
||||
### Power band tracking
|
||||
```python
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
def measure_power_creep(patch_history: pd.DataFrame) -> pd.DataFrame:
|
||||
"""
|
||||
매 patch별 매 release item의 매 average power score를 plot.
|
||||
매 power score는 매 (DPS_simulation + utility_score) / item_level.
|
||||
"""
|
||||
by_patch = patch_history.groupby('patch_id').agg(
|
||||
avg_power=('power_score', 'mean'),
|
||||
max_power=('power_score', 'max'),
|
||||
n_items=('item_id', 'count'),
|
||||
)
|
||||
by_patch['creep_pct'] = by_patch['avg_power'].pct_change() * 100
|
||||
return by_patch
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
# 매 healthy: creep_pct < 5% per patch
|
||||
# 매 unhealthy: creep_pct > 15% per patch (Diablo 3 vanilla 식)
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Sideways creep — niche team comp validator
|
||||
```python
|
||||
def is_sideways_release(new_char: dict, existing_meta: list[dict]) -> bool:
|
||||
"""
|
||||
매 new character가 매 existing top-N comp에 매 'replace existing strong' 하면 vertical creep.
|
||||
매 'enables new comp not previously viable' 하면 sideways.
|
||||
"""
|
||||
enables_new = []
|
||||
replaces_existing = []
|
||||
for comp in existing_meta:
|
||||
sim_score_old = simulate(comp)
|
||||
for slot in comp['slots']:
|
||||
new_comp = comp.copy()
|
||||
new_comp['slots'][slot] = new_char
|
||||
sim_score_new = simulate(new_comp)
|
||||
if sim_score_new > sim_score_old * 1.1:
|
||||
replaces_existing.append((comp, slot))
|
||||
new_comps = generate_comps_with_required(new_char)
|
||||
enables_new = [c for c in new_comps if simulate(c) > comp_threshold]
|
||||
return len(enables_new) > len(replaces_existing)
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Seasonal reset (Diablo Seasons style)
|
||||
```python
|
||||
class SeasonReset:
|
||||
def __init__(self, duration_days=90):
|
||||
self.duration_days = duration_days
|
||||
self.start_date = None
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def start_season(self, season_id: int, balance_adjustments: dict):
|
||||
self.start_date = datetime.now()
|
||||
# 매 모든 seasonal player → 매 fresh char
|
||||
for player in get_seasonal_players():
|
||||
create_fresh_character(player, season_id)
|
||||
apply_balance(balance_adjustments)
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
def end_season(self):
|
||||
# 매 seasonal char → 매 non-seasonal로 migrate
|
||||
for char in get_seasonal_chars():
|
||||
migrate_to_eternal(char)
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Soft cap with auto-sync (FFXIV style)
|
||||
```python
|
||||
def auto_sync_gear(player_ilvl: int, content_ilvl: int) -> int:
|
||||
"""
|
||||
매 player ilvl > content ilvl 이면 매 sync down.
|
||||
"""
|
||||
return min(player_ilvl, content_ilvl)
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
# 매 ARR (2.0) raid를 매 Endwalker 6.5 player가 즐길 때 매 ilvl 110으로 sync → 매 challenge 유지
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### OTA balance hot-fix
|
||||
```python
|
||||
# 매 backend balance — 매 client patch 없이 매 매 buff/nerf
|
||||
balance_data = {
|
||||
'card_silver_surfer': { 'cost': 3, 'power': 4 }, # 4 → 3
|
||||
'card_zabu': { 'cost': 1, 'power': 2 },
|
||||
'patch_version': 'OTA_2026_05_08',
|
||||
}
|
||||
# 매 client는 매 launch 시 매 server에서 매 latest balance fetch
|
||||
def fetch_balance():
|
||||
return requests.get(f'{API}/balance').json()
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Gacha live service | Sideways creep (Genshin 식) |
|
||||
| ARPG / Diablo-like | Periodic season reset |
|
||||
| MMO with vertical progression | Soft cap + sync (FFXIV) |
|
||||
| Card game | OTA balance (Marvel Snap) |
|
||||
| Hardcore PvP | Tight power band (LoL) |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: 매 sideways or seasonal reset. 매 pure vertical infinite creep은 매 5년 안에 매 game collapse.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live-Service-Game-Design]] · [[Game-Balancing]]
|
||||
- 변형: [[Sideways-Creep]] · [[Seasonal-Reset]] · [[Soft-Level-Cap]]
|
||||
- 응용: [[Genshin-Sideways-Strategy]] · [[Diablo-Seasons]]
|
||||
- Adjacent: [[Gacha-Monetization]] · [[FOMO-Design]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 LLM에게 매 historical patch power score 분석 + 매 power band drift 시각화 요청.
|
||||
**언제 X**: 매 actual balance number tuning — 매 simulation은 매 player metagame를 fully predict 못 함.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Vertical-only creep**: 매 매 patch마다 매 raw stat +10% — 매 5 patch 후 매 collapse.
|
||||
- **Mandatory new gear**: 매 old gear 매 immediate obsolete → 매 player feels treadmill.
|
||||
- **No content sync**: 매 old raid / dungeon이 매 trivial → 매 historical content 매 dead.
|
||||
- **Hidden creep**: 매 patch note에 매 power increase 안 명시 → 매 player trust loss.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — miHoYo HoYoverse balance philosophy interview, Marvel Snap OTA dev blog (2024), Blizzard Diablo Seasons retrospective.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — power creep mechanism, sideways / seasonal / soft-cap mitigation patterns |
|
||||
|
||||
@@ -1,78 +1,174 @@
|
||||
---
|
||||
id: wiki-2026-0508-prisoners-dilemma-models
|
||||
title: Prisoners Dilemma Models
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Prisoner's Dilemma Models in Game Design
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Prisoners Dilemma, PD Game Design, Cooperation Games]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, game-theory, multiplayer, cooperation, axelrod]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: numpy
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Prisoner's Dilemma Models in Game Design
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 PD model은 매 multiplayer game design의 매 cooperation tension의 매 mathematical core — 매 individual rational choice가 매 collective suboptimal로 leads하는 매 모든 trust mechanic의 base."** Robert Axelrod 'Evolution of Cooperation' (1984)이 매 iterated PD에서 매 'tit-for-tat' winning strategy 증명. 매 game design에서 매 The Resistance / Werewolf social deduction, 매 EVE Online corp wars, 매 Among Us, 매 Trust (Nicky Case 2017 interactive)까지 매 explicit application 광범. 매 2026 시점, 매 Multi-Agent RL (Llama 3 / Claude 3.5)이 매 inter-agent cooperation 학습에 매 PD framework 활용.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 죄수의 딜레마는 협력·배신의 게임이론적 기본 모델로, 길드·동맹·PvP의 협력 시스템 디자인에 직접 응용된다.
|
||||
### 매 PD payoff matrix
|
||||
- **Standard PD**: T (Temptation, 5) > R (Reward, 3) > P (Punishment, 1) > S (Sucker, 0).
|
||||
- **Constraint**: 2R > T + S — 매 mutual cooperation이 매 alternating defection보다 better.
|
||||
- **One-shot**: 매 rational defect (Nash). 매 iterated: 매 cooperation 가능.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 winning strategies (Axelrod tournament)
|
||||
- **Tit-for-Tat (TFT)**: 매 first move cooperate, 매 then mirror opponent. 매 nice + retaliating + forgiving + non-envious.
|
||||
- **Tit-for-Two-Tats**: 매 noise tolerant — 매 2회 연속 defect 후에야 retaliate.
|
||||
- **Generous TFT**: 매 retaliate 90% of time — 매 forgive 10%.
|
||||
- **Pavlov (Win-Stay, Lose-Shift)**: 매 last round 'win' (R or T)이면 매 same action repeat.
|
||||
|
||||
**추출된 패턴:** 1회 게임에선 배신이 우세, 반복 게임에선 협력이 진화 — 반복성·평판이 협력 동력.
|
||||
### 매 game design 응용
|
||||
- **Trust mechanic**: 매 player가 매 다른 player에게 매 currency 맡기면 매 returner는 매 더 많이 받기 가능. EVE Online stockpiling.
|
||||
- **Punishment mechanic**: 매 betrayal에 매 reputation system — 매 public visible defection history.
|
||||
- **Communication tool**: 매 chat / signal로 매 commitment make 가능 — 매 cheap-talk vs costly signal.
|
||||
- **Endgame revelation**: 매 final round 시 매 cooperation 붕괴 (backward induction).
|
||||
|
||||
**세부 내용:**
|
||||
- 페이오프 행렬: T > R > P > S.
|
||||
- 일회성 vs 반복 vs 무한.
|
||||
- 진화 전략: Tit-for-Tat, Pavlov.
|
||||
- 게임 응용: 길드 협력, NPC 평판, PvP 동맹.
|
||||
- Axelrod 토너먼트: 협력 우세 입증.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### IPD simulator
|
||||
```python
|
||||
import numpy as np
|
||||
from typing import Callable
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
PAYOFF = {
|
||||
('C', 'C'): (3, 3),
|
||||
('C', 'D'): (0, 5),
|
||||
('D', 'C'): (5, 0),
|
||||
('D', 'D'): (1, 1),
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
def play(strat_a: Callable, strat_b: Callable, rounds=200, noise=0.0):
|
||||
history_a, history_b = [], []
|
||||
score_a, score_b = 0, 0
|
||||
for r in range(rounds):
|
||||
move_a = strat_a(history_a, history_b)
|
||||
move_b = strat_b(history_b, history_a)
|
||||
if np.random.random() < noise: move_a = 'D' if move_a == 'C' else 'C'
|
||||
if np.random.random() < noise: move_b = 'D' if move_b == 'C' else 'C'
|
||||
pa, pb = PAYOFF[(move_a, move_b)]
|
||||
score_a += pa; score_b += pb
|
||||
history_a.append(move_a); history_b.append(move_b)
|
||||
return score_a, score_b
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### TFT + variants
|
||||
```python
|
||||
def tit_for_tat(my_hist, opp_hist):
|
||||
return 'C' if not opp_hist else opp_hist[-1]
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
def tit_for_two_tats(my_hist, opp_hist):
|
||||
if len(opp_hist) < 2: return 'C'
|
||||
return 'D' if opp_hist[-1] == 'D' and opp_hist[-2] == 'D' else 'C'
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
def generous_tft(my_hist, opp_hist):
|
||||
if not opp_hist: return 'C'
|
||||
if opp_hist[-1] == 'D' and np.random.random() < 0.1: return 'C' # 매 forgive
|
||||
return opp_hist[-1]
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
def pavlov(my_hist, opp_hist):
|
||||
if not my_hist: return 'C'
|
||||
last_payoff = PAYOFF[(my_hist[-1], opp_hist[-1])][0]
|
||||
return my_hist[-1] if last_payoff >= 3 else ('D' if my_hist[-1] == 'C' else 'C')
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Reputation system (multiplayer game)
|
||||
```python
|
||||
class Reputation:
|
||||
def __init__(self):
|
||||
self.scores = {} # player_id → reputation float
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
def record_action(self, player: str, action: str, target: str):
|
||||
delta = +0.1 if action == 'cooperate' else -0.3
|
||||
self.scores[player] = self.scores.get(player, 0) + delta
|
||||
self.scores[player] = max(-1, min(1, self.scores[player]))
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
def is_trustworthy(self, player: str) -> bool:
|
||||
return self.scores.get(player, 0) > 0.3
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Costly signal mechanic
|
||||
```python
|
||||
# 매 player가 매 commitment를 매 escrow로 demonstrate
|
||||
class CostlySignal:
|
||||
def __init__(self):
|
||||
self.escrows = {}
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
def signal_commitment(self, player: str, amount: int):
|
||||
# 매 player가 매 amount를 lock — 매 betray시 매 lose
|
||||
self.escrows[player] = amount
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
def reward_or_punish(self, player: str, betrayed: bool):
|
||||
amt = self.escrows.pop(player, 0)
|
||||
if betrayed:
|
||||
return 0 # 매 escrow 몰수
|
||||
else:
|
||||
return amt + (amt * 0.5) # 매 50% bonus return
|
||||
```
|
||||
|
||||
### Endgame anti-defection (finite-game prevention)
|
||||
```python
|
||||
# 매 final round를 매 hidden — 매 backward induction 차단
|
||||
class HiddenEndgame:
|
||||
def __init__(self, expected_rounds: int, jitter: int):
|
||||
self.actual_rounds = expected_rounds + np.random.randint(-jitter, jitter+1)
|
||||
|
||||
def is_final(self, current_round: int) -> bool:
|
||||
return current_round >= self.actual_rounds
|
||||
# 매 player에게 매 actual_rounds 매 공개 안 함
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Social deduction (Werewolf 식) | 매 information asymmetry + 매 PD |
|
||||
| Persistent MMO | Reputation + costly signal |
|
||||
| Co-op survival (Don't Starve Together) | 매 mutual benefit dominant — 매 PD weak |
|
||||
| Competitive 1v1 | Pure PD only at meta level |
|
||||
| Multi-agent RL | TFT-family baseline |
|
||||
|
||||
**기본값**: 매 iterated PD with reputation + 매 hidden endgame. 매 one-shot은 매 always defect dominant.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game-Theory]] · [[Multiplayer-Design]]
|
||||
- 변형: [[Iterated-PD]] · [[Public-Goods-Game]] · [[Stag-Hunt]]
|
||||
- 응용: [[The-Resistance-Design]] · [[EVE-Online-Trust]]
|
||||
- Adjacent: [[Axelrod-Tournaments]] · [[Multi-Agent-RL]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 LLM 두 instance를 매 IPD opponent로 simulate — 매 emergent strategy 분석.
|
||||
**언제 X**: 매 deep human social dynamic — 매 emotion / context는 매 LLM-PD simulation으로 안 잡힘.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Pure cooperation reward without defection option**: 매 PD 아닌 just co-op.
|
||||
- **No reputation persistence**: 매 betrayal 후 매 anonymity → 매 cooperation collapse.
|
||||
- **Known finite endgame**: 매 backward induction → 매 always defect.
|
||||
- **No noise tolerance**: 매 single mistake → 매 permanent defection spiral (TFT vs TFT trap).
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — Axelrod "Evolution of Cooperation" (1984), Nicky Case "The Evolution of Trust" (2017), 매 Multi-Agent RL papers (DeepMind 'Sequential Social Dilemmas' 2017).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — PD payoff matrix, TFT variants, reputation / costly signal / hidden endgame patterns |
|
||||
|
||||
@@ -1,78 +1,155 @@
|
||||
---
|
||||
id: wiki-2026-0508-procedural-rhetoric-in-gaming
|
||||
title: Procedural Rhetoric (In Gaming)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Procedural Rhetoric, Persuasive Games, Ian Bogost Rhetoric]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, rhetoric, bogost, persuasive-games]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: phaser
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Procedural Rhetoric (In Gaming)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 game 의 매 rule-system 의 매 argument 의 매 making"**. 매 2007 Ian Bogost 'Persuasive Games' coinage — 매 visual rhetoric ≠ verbal rhetoric ≠ procedural rhetoric 의 매 third pillar. 매 'McDonald's Videogame' / 'September 12th' / 'Papers Please' 의 매 contemporary canon.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 절차적 수사학(Procedural Rhetoric)은 게임 시스템·메커니즘 자체가 메시지를 전달하는 표현 방식이다 (Ian Bogost).
|
||||
### 매 정의
|
||||
- 매 'making argument with processes' — 매 rule 자체 의 매 persuasion.
|
||||
- 매 player choice + system response 의 loop 의 매 argument vehicle.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 rhetorical trope
|
||||
- **Constraint as argument**: 매 forced-shortage 의 매 scarcity argument (Papers Please).
|
||||
- **Reward as argument**: 매 system rewards X → X 의 endorsement.
|
||||
- **Failure as argument**: 매 unwinnable design 의 매 critique (September 12th).
|
||||
|
||||
**추출된 패턴:** "이야기로 말하는 것" 외에 "규칙으로 말하는 것" — 게임은 시스템 행동으로 가치를 전달.
|
||||
### 매 응용
|
||||
1. Papers Please (bureaucracy critique).
|
||||
2. McDonald's Videogame (corporate-supply-chain critique).
|
||||
3. Phone Story (electronics-labor critique).
|
||||
4. Bury Me, My Love (refugee-experience).
|
||||
|
||||
**세부 내용:**
|
||||
- Bogost의 Persuasive Games 개념.
|
||||
- 사례: Papers Please의 관료주의, Tropico의 권력.
|
||||
- 시스템 행동 = 작가 의도의 매개체.
|
||||
- 시리어스 게임 디자인의 핵심.
|
||||
- AAA에서도 활용 (BioShock의 자유의지).
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Rule-as-argument scaffold (Phaser-like)
|
||||
```typescript
|
||||
interface RuleArgument {
|
||||
premise: string; // 매 designer's claim
|
||||
procedure: () => void; // 매 player-experienced procedure
|
||||
expectedRealization: string;
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
const SCARCITY_ARG: RuleArgument = {
|
||||
premise: 'Bureaucratic systems force impossible trade-offs.',
|
||||
procedure: () => {
|
||||
timer.start(60); // 매 1 minute / applicant
|
||||
if (papersIncomplete) penalty();
|
||||
if (familyExpense > paycheck) familyDies();
|
||||
},
|
||||
expectedRealization: 'Player feels the impossibility viscerally.',
|
||||
};
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Choice-architecture as argument
|
||||
```typescript
|
||||
interface MoralChoice {
|
||||
option: string;
|
||||
shortTermCost: number;
|
||||
longTermCost: number;
|
||||
systemicEndorsement: number; // 매 game's reward signal
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
function endorses(choices: MoralChoice[], target: string): boolean {
|
||||
const t = choices.find(c => c.option === target);
|
||||
if (!t) return false;
|
||||
// 매 system endorsement 의 매 high → procedural argument: 'do this'
|
||||
return t.systemicEndorsement > 0.7;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Unwinnable / Sisyphean loop
|
||||
```typescript
|
||||
// September 12th 의 매 'kill terrorists → create more terrorists' loop
|
||||
function bombStrike(area: Cell[]): Cell[] {
|
||||
return area.map(c => {
|
||||
if (c.kind === 'terrorist') c.kind = 'civilian-corpse';
|
||||
if (c.kind === 'civilian') c.kind = 'terrorist'; // 매 radicalization
|
||||
return c;
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Resource-flow critique (McDonald's Videogame)
|
||||
```typescript
|
||||
interface SupplyChain {
|
||||
rainforest: number;
|
||||
cattlePastures: number;
|
||||
feedlots: number;
|
||||
restaurants: number;
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
function tickPolicy(c: SupplyChain, policy: 'sustainable' | 'aggressive'): SupplyChain {
|
||||
if (policy === 'aggressive') {
|
||||
c.rainforest -= 5;
|
||||
c.cattlePastures += 5;
|
||||
// 매 short-term profit + 매 long-term collapse 의 procedural argument
|
||||
}
|
||||
return c;
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Affective failure (forced empathy)
|
||||
```typescript
|
||||
function denyApplicant(applicant: Applicant): void {
|
||||
if (applicant.story.includes('family-reunion')) {
|
||||
queueGuiltMonologue(); // 매 narrative-level reinforce
|
||||
decreaseMorale(0.1); // 매 system-level reinforce
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Persuasive serious game | Rule-as-argument primary, narrative secondary |
|
||||
| Critique of system | Unwinnable loop or escalating cost |
|
||||
| Empathy-building | Affective failure + 매 named characters |
|
||||
| Entertainment first | 매 light procedural rhetoric — 매 heavy 의 X |
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
**기본값**: 매 rule-system 의 매 first carrier of meaning, dialogue 의 매 ornament.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🔗 Graph
|
||||
- 부모: [[Bogost Persuasive Games]] · [[Algorithmic Rhetoric]]
|
||||
- 변형: [[Affective Game Design]] · [[Dys4ia Game]]
|
||||
- 응용: [[Papers-Please]] · [[McDonald's Videogame]] · [[September 12th]]
|
||||
- Adjacent: [[Magic-Circle]] · [[Immersive-Sim-Genre]] · [[Poverty-Simulation]]
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: serious-game design, rule-argument analysis, persuasive system construction.
|
||||
**언제 X**: 매 traditional narrative-only critique (literary lens).
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## ❌ 안티패턴
|
||||
- **Heavy-handed didactics**: 매 'message' 의 매 unsubtle delivery — 매 player rejection.
|
||||
- **Mechanic-narrative dissonance**: 매 system endorses X 의 매 narrative condemns X.
|
||||
- **Empty PBL**: 매 procedural shell 의 매 message X — 매 gamification slop.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Bogost 'Persuasive Games' 2007 MIT Press, Frasca 'Simulation vs Narrative' 2003).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Bogost procedural rhetoric + serious-game patterns |
|
||||
|
||||
@@ -1,78 +1,169 @@
|
||||
---
|
||||
id: wiki-2026-0508-procedural-level-geometry
|
||||
title: Procedural Level Geometry
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [PCG, Procedural Generation, Level PCG, Roguelike Generation]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, level-design, pcg, procedural-generation]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: roguelike / 3d-engine
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Procedural Level Geometry
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 grammar + constraint = playable layout"**. Procedural level geometry 는 매 1980s Rogue 의 BSP 부터 매 2010s Spelunky 의 room template, 매 2020s Minecraft / No Man's Sky / Townscaper 의 WFC, 매 2026 ML-assisted hybrid (Pixar's RayBend, Nvidia GANverse) 까지 매 evolution. 매 핵심 trade-off: **매 controllability ↔ matrix variety**.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 절차적 레벨 지오메트리는 알고리즘으로 게임 공간을 동적으로 생성하는 기법으로, 무한 변형·압축된 콘텐츠 생산을 가능케 한다.
|
||||
### 매 algorithm families
|
||||
1. **BSP / partition**: Rogue, NetHack — 매 simple, 매 grid-only.
|
||||
2. **Cellular automata**: Cave generation — 매 organic shape.
|
||||
3. **Random walk / drunkard**: 매 cave / path.
|
||||
4. **Template + stitching**: Spelunky, Enter the Gungeon — 매 controllable.
|
||||
5. **Wave Function Collapse (WFC)**: Townscaper, Bad North — 매 high constraint.
|
||||
6. **Grammar / L-system**: Vegetation, dungeons (Lindenmayer).
|
||||
7. **ML-assisted**: 2026 — diffusion-based heightmap, GAN tile generation.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 pipeline
|
||||
```
|
||||
Seed → Macro layout (zones) → Meso (rooms / chunks)
|
||||
→ Micro (geometry, props) → Validation → Polish
|
||||
```
|
||||
|
||||
**추출된 패턴:** "규칙 + 시드"로 무한 콘텐츠 생성 — 단 의미 있는 변형이 되려면 규칙이 게임플레이를 지원해야.
|
||||
### 매 응용
|
||||
1. Roguelike dungeons (Caves of Qud, Brogue, Cogmind).
|
||||
2. Open-world terrain (Minecraft, Valheim, NMS).
|
||||
3. City generation (Cities Skylines mods, Townscaper).
|
||||
4. Mission layouts (Hitman freelancer mode, XCOM).
|
||||
|
||||
**세부 내용:**
|
||||
- BSP, Wave Function Collapse, L-system.
|
||||
- 노이즈 기반: Perlin, Simplex.
|
||||
- 그래프 기반: 던전 그래프 후 기하 적용.
|
||||
- 사례: Spelunky, Minecraft, Hades, Dead Cells.
|
||||
- 한계: 의미 있는 핸드크래프트 우선.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### BSP dungeon
|
||||
```python
|
||||
def bsp_split(rect, depth=0, max_depth=4):
|
||||
if depth >= max_depth or rect.too_small():
|
||||
return [rect.shrink(margin=1)] # leaf = room
|
||||
axis = "h" if rect.w < rect.h else "v"
|
||||
cut = random.uniform(0.4, 0.6)
|
||||
a, b = rect.split(axis, cut)
|
||||
return bsp_split(a, depth+1, max_depth) + bsp_split(b, depth+1, max_depth)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
def connect_rooms(rooms, grid):
|
||||
for r1, r2 in zip(rooms, rooms[1:]):
|
||||
carve_corridor(grid, r1.center, r2.center)
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Cellular automata cave
|
||||
```python
|
||||
def cave(w, h, fill=0.45, iters=5):
|
||||
g = [[1 if random.random() < fill else 0 for _ in range(w)] for _ in range(h)]
|
||||
for _ in range(iters):
|
||||
g = [
|
||||
[smooth(g, x, y) for x in range(w)]
|
||||
for y in range(h)
|
||||
]
|
||||
return g
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
def smooth(g, x, y):
|
||||
walls = sum(g[y+dy][x+dx]
|
||||
for dy in (-1,0,1) for dx in (-1,0,1)
|
||||
if 0 <= x+dx < len(g[0]) and 0 <= y+dy < len(g))
|
||||
return 1 if walls >= 5 else 0
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Wave Function Collapse (sketch)
|
||||
```python
|
||||
def wfc(tiles, w, h, adjacency):
|
||||
grid = [[set(tiles) for _ in range(w)] for _ in range(h)]
|
||||
while not all_collapsed(grid):
|
||||
x, y = lowest_entropy(grid)
|
||||
choice = random.choice(list(grid[y][x]))
|
||||
grid[y][x] = {choice}
|
||||
propagate(grid, x, y, adjacency)
|
||||
return grid
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Spelunky-style template stitching
|
||||
```python
|
||||
ROOM_TEMPLATES = {
|
||||
"side": ["....", "..S.", "....", ".###"],
|
||||
"drop": [".S..", "....", "###.", "...."],
|
||||
"trap": [["X" if random.random()<.1 else "." for _ in range(4)] for _ in range(4)],
|
||||
}
|
||||
def build_level(plan):
|
||||
"""plan: 4×4 grid of (template_kind)."""
|
||||
return [
|
||||
ROOM_TEMPLATES[kind] for row in plan for kind in row
|
||||
]
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Validation — solvability check
|
||||
```python
|
||||
def is_solvable(grid, start, goal):
|
||||
return bfs_reachable(grid, start, goal)
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
def regenerate_until_valid(generator, validate, max_tries=100):
|
||||
for _ in range(max_tries):
|
||||
level = generator()
|
||||
if validate(level):
|
||||
return level
|
||||
raise GenerationFailure()
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### L-system dungeon grammar
|
||||
```
|
||||
Axiom: ROOM
|
||||
Rules:
|
||||
ROOM → ROOM CORRIDOR ROOM
|
||||
ROOM → ROOM CORRIDOR JUNCTION
|
||||
JUNCTION → ROOM | LOOP_BACK
|
||||
Iterations: 4
|
||||
→ post-process: place geometry, add doors
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Tight authored feel needed | Template stitching (Spelunky) |
|
||||
| Organic cave / terrain | Cellular automata + erosion |
|
||||
| Strict constraint (city, building) | **WFC** |
|
||||
| Branching dungeon | BSP + grammar |
|
||||
| Open world heightmap | Perlin / Simplex + erosion + biome mask |
|
||||
| Fully ML-driven (2026) | Diffusion + WFC fallback |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: Template + WFC hybrid + validation regen-loop.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Level_Design]] · [[Procedural_Content_Generation]]
|
||||
- 변형: [[Wave_Function_Collapse]] · [[BSP_Generation]] · [[Cellular_Automata]]
|
||||
- 응용: [[Roguelike_Genre]] · [[Open_World_Terrain]]
|
||||
- Adjacent: [[Base-Layouts-and-Kill-Zones]] · [[Immersive-Sims-Deus-Ex-Thief]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 roguelike / sandbox / open-world 의 generation system, 매 designer 의 매 toolkit, 매 controllability ↔ variety trade-off discussion.
|
||||
**언제 X**: 매 highly-authored linear narrative — 매 PCG 의 cost > benefit.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No validation**: 매 unreachable goal / 매 closed-off key item.
|
||||
- **Over-randomization**: 매 every tile random = 매 chaos, 매 design intent X.
|
||||
- **No reproducibility**: 매 seed 의 expose 의 X — 매 bug repro / 매 speedrun 의 X.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Shaker / Togelius "Procedural Content Generation in Games" 2016; WFC paper Gumin 2016; Spelunky postmortem GDC 2014).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — algorithm taxonomy, BSP / CA / WFC / template code, validation pattern |
|
||||
|
||||
@@ -1,78 +1,178 @@
|
||||
---
|
||||
id: wiki-2026-0508-puzzles-survival
|
||||
title: "Puzzles & Survival"
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [P&S, Puzzles and Survival, 37Games P&S]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, hybrid-casual, monetization, 4x, match-3]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: unity
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Puzzles & Survival
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 hybrid casual 의 archetype — match-3 hook + 4X meta — 의 monetization printing press"**. 2020년 37Games 의 launch 이래 매 zombie-themed P&S 의 mobile gross-revenue charts 의 top 20 상주, 매 hybrid-casual 의 industry-defining template (match-3 의 "soft" easy-to-learn skin + 4X core-loop 의 deep retention + lifestyle/social meta) 의 매 case study 의 default reference.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Puzzles & Survival은 매치-3 + 4X SLG의 하이브리드로, 두 장르의 결제 의향 풀을 동시에 흡수해 매출 효율을 극대화했다.
|
||||
### 매 hybrid casual structure
|
||||
- **Layer 1 (hook)**: match-3 puzzle — 매 첫 5 분 의 frictionless onboarding. 매 ad-creative 의 100% 의 match-3 footage.
|
||||
- **Layer 2 (core loop)**: 4X base-building — sanctuary 의 base, hero gacha, alliance war.
|
||||
- **Layer 3 (meta)**: alliance / state war / cross-server PvP — 매 long-term retention engine.
|
||||
- **매 핵심 trick**: match-3 의 ad bait. Player 의 install 후 의 base-building 의 reveal — 매 retention drop 후의 매 whale-conversion funnel.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 4X meta
|
||||
- **Sanctuary**: HQ-level driven progression. 매 build-time gate (P2W bypass via gem speedup).
|
||||
- **Hero gacha**: SSR/SR/R rarity. Pity 의 70-pull soft / 200 의 hard. Dupe 의 ascension shards.
|
||||
- **Alliance**: 100-member cap. Reinforcement / rally attack / trade. Diplomatic identity 의 server politics 의 driver.
|
||||
- **State war**: Cross-server seasonal. Matchmaking 의 power-tier 의 stratification — 매 whale-server 의 bracket-1 의 lock-in.
|
||||
|
||||
**추출된 패턴:** 매치-3로 진입 장벽 ↓ + 4X 메타로 LTV ↑ — 장르 결합으로 광고와 결제 모두 강화.
|
||||
### 매 monetization
|
||||
1. **Daily packs** (~$0.99 / $4.99 / $9.99) — 매 ARPDAU 의 floor.
|
||||
2. **Hero summon bundles** (~$19.99 / $49.99) — 매 gacha 의 burst-monetization.
|
||||
3. **VIP** (cumulative spend tier) — 매 long-tail psychological lock-in.
|
||||
4. **War-prep packs** (event-gated, $99.99+) — 매 whale 의 PvP arms-race accelerator.
|
||||
5. **Subscription** (~$14.99/mo) — 매 retention 의 stabilizer.
|
||||
|
||||
**세부 내용:**
|
||||
- 매치-3 코어: 좀비 처치.
|
||||
- 4X 메타: 베이스, 동맹, PvP.
|
||||
- BM: VIP + 패키지 + 가챠.
|
||||
- 광고: 매치-3 게임플레이 강조.
|
||||
- 37Games 흥행작.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Match-3 board state
|
||||
```csharp
|
||||
// Unity / C#
|
||||
public class Match3Board : MonoBehaviour {
|
||||
private const int W = 7, H = 8;
|
||||
private GemType[,] grid = new GemType[W, H];
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
public List<(int x, int y)> FindMatches() {
|
||||
var matches = new HashSet<(int, int)>();
|
||||
// Horizontal
|
||||
for (int y = 0; y < H; y++)
|
||||
for (int x = 0; x < W - 2; x++)
|
||||
if (grid[x, y] == grid[x+1, y] && grid[x+1, y] == grid[x+2, y])
|
||||
for (int k = 0; k < 3; k++) matches.Add((x+k, y));
|
||||
// Vertical (analog)
|
||||
return matches.ToList();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Sanctuary build-timer with speedup
|
||||
```csharp
|
||||
public class BuildQueue {
|
||||
public DateTime CompletesAt { get; private set; }
|
||||
public bool TrySpeedup(int gems) {
|
||||
var remaining = (CompletesAt - DateTime.UtcNow).TotalMinutes;
|
||||
var cost = Mathf.CeilToInt((float)remaining / 5f); // 5min/gem
|
||||
if (gems < cost) return false;
|
||||
Wallet.Spend(gems);
|
||||
CompletesAt = DateTime.UtcNow;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Hero gacha with pity
|
||||
```csharp
|
||||
public class HeroSummon {
|
||||
private int pityCount = 0;
|
||||
private const int HARD_PITY = 200;
|
||||
private const float SSR_RATE = 0.015f;
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
public Hero Summon() {
|
||||
pityCount++;
|
||||
bool guaranteed = pityCount >= HARD_PITY;
|
||||
if (guaranteed || Random.value < SSR_RATE) {
|
||||
pityCount = 0;
|
||||
return RollSSR();
|
||||
}
|
||||
return Random.value < 0.10f ? RollSR() : RollR();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Alliance rally attack
|
||||
```csharp
|
||||
public class AllianceRally {
|
||||
public int LeaderId;
|
||||
public List<int> Joiners = new();
|
||||
public DateTime LaunchAt;
|
||||
public int TargetX, TargetY;
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
public bool Join(int memberId, Army army) {
|
||||
if (DateTime.UtcNow >= LaunchAt) return false;
|
||||
if (Joiners.Count >= 19) return false; // 20 cap incl. leader
|
||||
Joiners.Add(memberId);
|
||||
ReservedTroops[memberId] = army;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Server-power matchmaking
|
||||
```csharp
|
||||
public Server MatchStateWar(Server s) {
|
||||
int tier = s.TotalPower / 1_000_000_000;
|
||||
return AvailableServers
|
||||
.Where(o => Math.Abs(o.TotalPower / 1_000_000_000 - tier) <= 1)
|
||||
.OrderBy(_ => Random.value)
|
||||
.First();
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### LTV-driven offer rotation
|
||||
```csharp
|
||||
public Offer SelectOffer(Player p) {
|
||||
var ltv = p.SpendTotal;
|
||||
if (ltv == 0) return offers.StarterPack; // $4.99
|
||||
if (ltv < 50) return offers.BeginnerBundle; // $9.99
|
||||
if (ltv < 500) return offers.MidGameVIP; // $49.99
|
||||
return offers.WhalePack; // $199.99
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Ad creative | Match-3 footage 의 default — 매 install funnel 의 wider top |
|
||||
| Onboarding | Tutorial 의 puzzle-first 5 분, base-build 의 day 2-3 의 reveal |
|
||||
| Whale targeting | War-prep events 의 quarterly cycle |
|
||||
| F2P retention | Daily login + alliance bond — 매 social cost-of-leaving |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: 매 hybrid-casual 의 launching team 의 P&S template 의 study + 매 own-IP 의 skin (zombie 의 X — fantasy/sci-fi/historical 의 reskin).
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Hybrid Casual Game]] · [[Mobile Game Monetization]]
|
||||
- 변형: [[Whiteout Survival]] · [[Last War]] · [[Doomsday Last Survivors]]
|
||||
- 응용: [[Gacha Mechanics Analysis]] · [[Live Service]] · [[Live Operations (LiveOps)]]
|
||||
- Adjacent: [[37Games]] · [[Match-3 Puzzle Design]] · [[4X 시스템 (4X System)]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: hybrid-casual archetype 의 분석, monetization-funnel 의 reverse-engineering, P&S-clone 의 design 의 reference 매.
|
||||
**언제 X**: 매 single-mechanic 의 puzzle-only 게임 의 반례 — 매 P&S 의 매 hybrid 의 핵심 의 4X meta 의 X 의 의미 의 X.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Match-3 만 의 build**: ad-creative 의 misleading 매 D7 retention crash.
|
||||
- **4X-only 직접 노출**: install rate 의 50% 의 drop. 매 puzzle hook 의 의도된 disguise.
|
||||
- **Pity 없는 gacha**: 2026 의 regulated markets (CN/KR/JP) 의 X. Hard-pity 의 mandatory.
|
||||
- **Alliance cap 의 too small**: <50 member 의 social-cost-of-leaving 의 weak.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Sensor Tower 2024-2025 P&S revenue ~$50M-$80M/month).
|
||||
- 매 37Games official + data.ai (App Annie) cross-reference.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — hybrid-casual archetype + monetization patterns |
|
||||
|
||||
@@ -1,78 +1,193 @@
|
||||
---
|
||||
id: wiki-2026-0508-real-time-translation
|
||||
title: Real Time Translation
|
||||
category: 10_Wiki/Topics_GD
|
||||
title: Real-Time Translation in Games
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Real-Time Translation, In-Game Translation, Live Localization]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, localization, multiplayer, ml, accessibility]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: python
|
||||
framework: fastapi
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Real-Time Translation in Games
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 real-time game translation은 매 2026 기준 매 LLM (Claude Opus 4.7, GPT-5, Gemini 2.5) 기반 매 sub-200ms latency 달성 가능, 매 그러나 매 game-specific terminology / context / tone 보존이 매 quality bottleneck."** 매 Final Fantasy XIV 매 cross-region party (2024 EA), 매 Helldivers 2 cross-language voice chat, 매 Among Us global match, 매 Genshin co-op random matchmaking — 매 매 game이 매 Discord-style translation overlay 또는 매 in-game native integration 채택. 매 2026 perspective, 매 on-device translation (Apple Translate / Google Translate Live)이 매 server-side LLM과 매 hybrid.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> 실시간 번역은 글로벌 게임의 채팅·UI를 즉시 다국어로 변환하는 기능으로, 글로벌 매출 확대와 커뮤니티 통합을 동시에 노린다.
|
||||
### 매 latency budget
|
||||
- **Voice → text (STT)**: 50-150ms (Whisper Large v3 / Apple SpeechRecognizer).
|
||||
- **Translation (LLM)**: 100-300ms (Claude Haiku 4.7, GPT-5 nano, Gemini 2.5 Flash).
|
||||
- **Text → speech (TTS)**: 50-200ms (ElevenLabs Turbo / Apple AVSpeech).
|
||||
- **Total**: 매 200-650ms — 매 acceptable for chat, 매 borderline for synced voice.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 quality challenges
|
||||
- **Game terminology**: 매 'gank', 매 'AOE', 매 'CC', 매 'tank/heal/dps' — 매 generic translator는 매 비-game 의미 출력.
|
||||
- **Tone preservation**: 매 banter / trash talk / encouragement — 매 translation에서 매 emotional flatten.
|
||||
- **Code-switching**: 매 'GG', 매 'rip', 매 'gg ez' — 매 community jargon은 매 translate 안 하는 게 적절.
|
||||
- **Latency-quality trade-off**: 매 streaming partial translation은 매 mid-sentence revision 발생.
|
||||
|
||||
**추출된 패턴:** 글로벌 매칭/길드 게임에선 언어 장벽이 결제·retention의 큰 장애 — 자동 번역으로 우회.
|
||||
### 매 응용
|
||||
1. **Final Fantasy XIV (2024) Auto-Translator**: 매 dictionary-based + 매 LLM hybrid — 매 dictionary는 매 game terms (zero latency), 매 free chat은 매 LLM.
|
||||
2. **Helldivers 2 voice chat (2024)**: 매 server-side STT + 매 translation, 매 ~400ms.
|
||||
3. **VRChat OSC translation mods (2025)**: 매 third-party — 매 Whisper.cpp local + 매 Llama 3 8B local 매 fully on-device.
|
||||
|
||||
**세부 내용:**
|
||||
- API: DeepL, Google Translate, GPT.
|
||||
- UX: 원문 + 번역 동시 표시.
|
||||
- 비용: 메시지당 토큰 → 캐싱·배치.
|
||||
- 욕설·스팸 필터 결합.
|
||||
- 프라이버시: 채팅 로그 처리 정책.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Streaming STT + translate pipeline
|
||||
```python
|
||||
import asyncio
|
||||
from anthropic import AsyncAnthropic
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
client = AsyncAnthropic()
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
async def translate_stream(audio_chunks, target_lang: str):
|
||||
# 매 1단계 — 매 streaming STT (Whisper)
|
||||
async for partial_text in whisper_stream(audio_chunks):
|
||||
# 매 2단계 — 매 LLM translation with cache
|
||||
async with client.messages.stream(
|
||||
model="claude-haiku-4-7",
|
||||
system=[
|
||||
{"type": "text", "text": GAME_GLOSSARY, "cache_control": {"type": "ephemeral"}},
|
||||
{"type": "text", "text": f"Translate to {target_lang}, preserve gaming jargon."},
|
||||
],
|
||||
messages=[{"role": "user", "content": partial_text}],
|
||||
max_tokens=100,
|
||||
) as stream:
|
||||
async for chunk in stream.text_stream:
|
||||
yield chunk
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Game term glossary (cached system prompt)
|
||||
```python
|
||||
GAME_GLOSSARY = """
|
||||
You translate game chat. Keep the following terms verbatim:
|
||||
- gank, AOE, CC, tank, heal, dps, OOM, OP, nerf, buff, meta
|
||||
- GG, GLHF, AFK, BRB, lol, lmao, rip, OMW, inc, bot, top, mid, jg, sup
|
||||
- skillshot, juke, last-hit, deny, ward, vision, smite, flash
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
For roles in MOBA: keep "ADC", "support", "jungle", "carry" verbatim.
|
||||
For class names: keep "warrior", "mage" etc translated; keep "Bard", "Reaper" (FF14 jobs) verbatim.
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
Respond ONLY with the translation, no preamble.
|
||||
"""
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Dictionary first-pass + LLM fallback
|
||||
```python
|
||||
TERM_DICT = {
|
||||
'ko->en': {
|
||||
'딜러': 'DPS',
|
||||
'탱커': 'tank',
|
||||
'힐러': 'healer',
|
||||
'버스': 'carry me',
|
||||
'버스기사': 'carry player',
|
||||
},
|
||||
'en->ko': {
|
||||
'gank': '갱',
|
||||
'AOE': '광역',
|
||||
},
|
||||
}
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
async def translate_hybrid(text: str, src: str, tgt: str) -> str:
|
||||
direction = f"{src}->{tgt}"
|
||||
table = TERM_DICT.get(direction, {})
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
# 매 모든 token이 매 dict에 있으면 매 LLM call 매 skip
|
||||
tokens = text.split()
|
||||
if all(t in table or t.isspace() for t in tokens):
|
||||
return ' '.join(table.get(t, t) for t in tokens)
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
# 매 그 외 — 매 LLM
|
||||
return await llm_translate(text, src, tgt)
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
### Quality-vs-latency mode switch
|
||||
```python
|
||||
class TranslationMode:
|
||||
INSTANT = "instant" # 매 dictionary only, 매 ~5ms
|
||||
FAST = "fast" # 매 Haiku, 매 ~150ms
|
||||
QUALITY = "quality" # 매 Sonnet, 매 ~400ms
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
def select_mode(message_length: int, channel: str) -> str:
|
||||
if channel == 'voice_synced': return TranslationMode.INSTANT
|
||||
if channel == 'team_chat': return TranslationMode.FAST
|
||||
if channel == 'guild_chat': return TranslationMode.QUALITY
|
||||
return TranslationMode.FAST
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### TTS voice cloning preservation (2026 ElevenLabs)
|
||||
```python
|
||||
# 매 player의 매 own voice 보존 — 매 다른 언어로 매 same voice
|
||||
async def voice_translate(audio_chunk, target_lang, voice_id):
|
||||
text = await whisper_transcribe(audio_chunk)
|
||||
translated = await llm_translate(text, target=target_lang)
|
||||
audio_out = await elevenlabs.tts(
|
||||
text=translated,
|
||||
voice_id=voice_id, # 매 player가 매 onboarding 시 voice clone
|
||||
model='eleven_turbo_v3',
|
||||
latency_optimization=True,
|
||||
)
|
||||
return audio_out # 매 ~300ms total
|
||||
```
|
||||
|
||||
### Anti-toxicity filter (LLM evaluator)
|
||||
```python
|
||||
async def filter_toxicity(translated: str) -> str:
|
||||
result = await client.messages.create(
|
||||
model='claude-haiku-4-7',
|
||||
max_tokens=10,
|
||||
messages=[{
|
||||
'role': 'user',
|
||||
'content': f"Is this game chat OK? Reply 'OK' or 'BLOCK'.\n{translated}",
|
||||
}],
|
||||
)
|
||||
return translated if 'OK' in result.content[0].text else '[message hidden]'
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Synced voice (FPS shoutcaller) | 매 dictionary-only + 매 partial overlap acceptable |
|
||||
| Async chat (MMO town) | 매 LLM Quality mode |
|
||||
| MOBA team chat | 매 dictionary first + 매 LLM fallback |
|
||||
| VR social | 매 voice cloning + 매 ~300ms |
|
||||
| Mobile turn-based | 매 server LLM, 매 latency 무관 |
|
||||
|
||||
**기본값**: 매 dictionary-first + 매 LLM (Haiku) fallback + 매 prompt cache. 매 매 game-specific glossary가 매 quality 의 50% 결정.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game-Localization]] · [[Multiplayer-Chat-Systems]]
|
||||
- 변형: [[Voice-Cloning-Translation]] · [[Streaming-Translation]]
|
||||
- 응용: [[FFXIV-Auto-Translator]] · [[Helldivers-2-Voice-Chat]]
|
||||
- Adjacent: [[Whisper-STT]] · [[ElevenLabs-Turbo]] · [[Prompt-Caching]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 game chat translation의 매 core. 매 Claude Haiku 4.7 / GPT-5 nano + 매 prompt cache (system glossary)로 매 ~$0.001/message.
|
||||
**언제 X**: 매 lore-heavy NPC dialogue → 매 사전 localization 작업 매 더 quality.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Generic translator (Google Translate raw)**: 매 game jargon 의 매 mistranslate.
|
||||
- **No glossary cache**: 매 매 message마다 glossary token 재전송 → 매 cost / latency 5×.
|
||||
- **Block over-translate**: 매 'GG' → '잘 했어요' 매 awkward — 매 jargon은 매 keep raw.
|
||||
- **Voice without anti-toxicity**: 매 translation이 매 toxicity amplifier 역할.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified — FFXIV Auto-Translator design history (Yoshi-P interview), Anthropic prompt caching docs (2025), ElevenLabs Turbo v3 (2025), Helldivers 2 dev blog.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — latency budget, dictionary+LLM hybrid, voice cloning, anti-toxicity patterns |
|
||||
|
||||
@@ -1,82 +1,180 @@
|
||||
---
|
||||
id: wiki-2026-0508-revenge-cycle-dynamics
|
||||
title: Revenge Cycle Dynamics
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Revenge Loop, Retaliation Spiral, Counter-Attack Cycle]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, pvp, retention, social-dynamics, war-commander]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: live-ops
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Revenge Cycle Dynamics
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 attack 은 매 future attack 의 seed 다."**. Revenge cycle 은 War Commander, Mobile Strike, EVE 등 PvP 전략 게임의 retention engine — player A 가 player B 를 칠 때, B 의 retaliation probability 가 높아지고, 그 retaliation 이 다시 A 의 counter-retaliation 을 trigger 하는 closed feedback loop 이다. 매 2026 LiveOps 에서 이 cycle 을 의도적으로 telemetry-balance 하는 것은 D30 retention 의 핵심 lever.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Cycle Anatomy
|
||||
- **Trigger**: unprovoked attack, base raid, alliance-level aggression
|
||||
- **Emotional payload**: loss aversion + identity threat (base = avatar extension)
|
||||
- **Retaliation window**: 24-72h (mobile), 7d (slow strategy)
|
||||
- **Escalation vector**: solo → alliance war → cross-server war
|
||||
- **Decay**: 매 cycle 은 자연스럽게 fade — fuel injection (events, leaderboards) 없으면.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Retention 메커니즘
|
||||
- 매 active grudge = 매 daily login reason
|
||||
- 매 revenge planning = 매 in-app currency sink (troop healing, base upgrades)
|
||||
- 매 alliance bond = social switching cost
|
||||
- 매 storytelling = personal narrative (UGC potential)
|
||||
|
||||
### 매 응용
|
||||
1. War Commander: kill report + replay → revenge UI button.
|
||||
2. EVE Online: kill mail system → corp-level vendetta.
|
||||
3. Mobile Strike: VIP bounty board → paid revenge service.
|
||||
4. Clash of Clans: revenge cooldown design (one-shot).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Pattern 1 — Revenge eligibility tracker
|
||||
```typescript
|
||||
interface AttackEvent {
|
||||
attackerId: string;
|
||||
defenderId: string;
|
||||
timestamp: number;
|
||||
damageDealt: number;
|
||||
retaliated: boolean;
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
class RevengeTracker {
|
||||
private events = new Map<string, AttackEvent[]>();
|
||||
private readonly WINDOW_MS = 72 * 3600 * 1000;
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
record(e: AttackEvent) {
|
||||
const list = this.events.get(e.defenderId) ?? [];
|
||||
list.push(e);
|
||||
this.events.set(e.defenderId, list);
|
||||
}
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
pendingRevenge(playerId: string): AttackEvent[] {
|
||||
const now = Date.now();
|
||||
return (this.events.get(playerId) ?? [])
|
||||
.filter(e => !e.retaliated && now - e.timestamp < this.WINDOW_MS);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 2 — Escalation scoring
|
||||
```typescript
|
||||
function escalationScore(history: AttackEvent[]): number {
|
||||
// 매 reciprocal exchange = +1, asymmetric = +2 (more inflammatory)
|
||||
let score = 0;
|
||||
for (let i = 1; i < history.length; i++) {
|
||||
const prev = history[i - 1];
|
||||
const cur = history[i];
|
||||
const reciprocal = prev.attackerId === cur.defenderId;
|
||||
score += reciprocal ? 1 : 2;
|
||||
}
|
||||
return score;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 3 — Cooldown gate (anti-grief)
|
||||
```typescript
|
||||
function canAttack(attackerId: string, defenderId: string, history: AttackEvent[]): boolean {
|
||||
const recentSameTarget = history.filter(
|
||||
e => e.attackerId === attackerId
|
||||
&& e.defenderId === defenderId
|
||||
&& Date.now() - e.timestamp < 3600 * 1000,
|
||||
).length;
|
||||
return recentSameTarget < 3; // 매 1h 내 3회 제한
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 4 — Revenge notification injection
|
||||
```typescript
|
||||
async function dispatchRevengePush(victim: Player, event: AttackEvent) {
|
||||
await pushService.send(victim.deviceToken, {
|
||||
title: `${event.attackerName} attacked your base!`,
|
||||
body: `Tap to retaliate. Window closes in ${remainingHours(event)}h.`,
|
||||
deepLink: `app://revenge/${event.id}`,
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Pattern 5 — Asymmetric matchmaking shield
|
||||
```typescript
|
||||
function shieldEligibility(attacker: Player, defender: Player): boolean {
|
||||
const powerRatio = attacker.power / defender.power;
|
||||
// 매 5x power gap → 매 attack blocked (anti-snowball)
|
||||
return powerRatio < 5.0;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pattern 6 — Alliance vendetta propagation
|
||||
```typescript
|
||||
function propagateVendetta(allianceA: string, allianceB: string, severity: number) {
|
||||
if (severity > THRESHOLD_WAR) {
|
||||
declareWar(allianceA, allianceB, durationDays: 7);
|
||||
grantWarBuffs([allianceA, allianceB]);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Pattern 7 — Revenge replay capture
|
||||
```typescript
|
||||
function captureReplay(combatLog: CombatTick[]): ReplayBlob {
|
||||
return compress({
|
||||
seed: combatLog[0].rngSeed,
|
||||
inputs: combatLog.map(t => ({ tick: t.tick, action: t.action })),
|
||||
version: GAME_VERSION,
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Casual mobile, low-skill players | Soft revenge (one-shot button, easy win) |
|
||||
| Hardcore PvP (EVE) | Persistent kill mails, no auto-balance |
|
||||
| New player onboarding | Newbie shield (3-7 days) |
|
||||
| Whales attacking f2p | Power-ratio shield + bounty system |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 72h retaliation window + power-ratio shield + escalation telemetry alert at score ≥ 10.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live Operations (LiveOps)]] · [[Player-Experience-Modeling]]
|
||||
- 변형: [[Jailing]] · [[Revenge-Cycle-Dynamics]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Mobile Strike]] · [[EVE 온라인]]
|
||||
- Adjacent: [[Prisoners-Dilemma-Models]] · [[Alliances-and-Sector-Hegemony]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: PvP balance proposal 작성, retention drop 의 revenge-cycle 진단, alliance war event design.
|
||||
**언제 X**: PvE-only 게임, single-player narrative — revenge loop 적용 X.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **Whale-stomping unchecked**: power gap shield 없으면 신규 유저 대량 이탈.
|
||||
- **Infinite loop fuel**: revenge buff stacking → exhaustion + churn.
|
||||
- **No exit ramp**: 매 player 가 cycle 에서 quit 할 수 있는 mechanism (peace treaty, alliance switch) 없으면 toxic.
|
||||
- **Hidden retaliation**: 매 attack notification 없으면 cycle 자체가 발생하지 않음.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Kixeye War Commander postmortems, CCP EVE devblog 2023-2025).
|
||||
- Cross-ref: Mobile Strike LiveOps GDC talks.
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full revenge-cycle anatomy + 7 patterns + decision matrix |
|
||||
|
||||
@@ -1,25 +1,190 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-537B8F
|
||||
category: "[[10_Wiki/💡 Topics/Game Design]]"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - Roguelike Procedural Generation"
|
||||
title: Roguelike Procedural Generation
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [PCG, Procedural Content Generation, Roguelike Generation]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, roguelike, pcg, procedural-generation]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: rust
|
||||
framework: bevy/bracket-lib
|
||||
---
|
||||
|
||||
# [[Roguelike Procedural Generation]]
|
||||
# Roguelike Procedural Generation
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 지식 요약 정보 추출 중...
|
||||
## 매 한 줄
|
||||
> **"매 run 마다 새로운 dungeon — replayability 의 engine"**. 1980 Rogue 의 grid-based room generation 으로 시작 → 2026 modern roguelikes (Hades II, Caves of Qud, Dwarf Fortress Premium) 가 multi-pass constraint solving + WFC + simulation-driven generation 으로 발전. 매 결정적 seed 기반 reproducibility 가 핵심.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
본문 구조화 작업 중...
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
||||
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
|
||||
- **정책 변화:** Game Design 분야의 자동 자산화 수행.
|
||||
### 매 generation 단계
|
||||
- **Layout**: room/corridor placement (BSP, drunkard's walk, cellular automata).
|
||||
- **Population**: monsters/items/traps placement (constraint-based).
|
||||
- **Connectivity**: pathfinding 으로 reachability 보장 (flood fill).
|
||||
- **Theming**: tile sets, biome decoration.
|
||||
- **Validation**: solvability check — 매 unwinnable run 의 X.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### 매 알고리즘 family
|
||||
- **BSP (Binary Space Partition)**: rectangular dungeons (NetHack, classic Rogue).
|
||||
- **Cellular Automata**: organic caves (Caves of Qud).
|
||||
- **Drunkard's Walk**: winding corridors (Brogue).
|
||||
- **Wave Function Collapse (WFC)**: constraint propagation 으로 stylistic consistency.
|
||||
- **Graph-based**: lock-and-key dungeons (Zelda-likes, Unexplored 2).
|
||||
- **Simulation-driven**: history generation (Dwarf Fortress).
|
||||
|
||||
- Raw Source: [[00_Raw/2026-04-20/Roguelike Procedural Generation.md]]
|
||||
---
|
||||
### 매 응용
|
||||
1. Hades II — handcrafted rooms 의 procedural sequencing (deterministic seed per run).
|
||||
2. Caves of Qud — multi-layer generation (history → factions → dungeons).
|
||||
3. Spelunky 2 — template-based room composition + constraint solving.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### BSP Dungeon (Rust + bracket-lib)
|
||||
```rust
|
||||
use bracket_lib::prelude::*;
|
||||
|
||||
struct Rect { x1: i32, y1: i32, x2: i32, y2: i32 }
|
||||
|
||||
fn split_bsp(rect: Rect, depth: i32, rng: &mut RandomNumberGenerator) -> Vec<Rect> {
|
||||
if depth == 0 || (rect.x2 - rect.x1) < 8 {
|
||||
return vec![rect];
|
||||
}
|
||||
let horizontal = rng.range(0, 2) == 0;
|
||||
let split = if horizontal {
|
||||
rng.range(rect.y1 + 3, rect.y2 - 3)
|
||||
} else {
|
||||
rng.range(rect.x1 + 3, rect.x2 - 3)
|
||||
};
|
||||
let (a, b) = if horizontal {
|
||||
(Rect { y2: split, ..rect }, Rect { y1: split, ..rect })
|
||||
} else {
|
||||
(Rect { x2: split, ..rect }, Rect { x1: split, ..rect })
|
||||
};
|
||||
let mut result = split_bsp(a, depth - 1, rng);
|
||||
result.extend(split_bsp(b, depth - 1, rng));
|
||||
result
|
||||
}
|
||||
```
|
||||
|
||||
### Cellular Automata Cave
|
||||
```rust
|
||||
fn ca_step(map: &mut Vec<Vec<bool>>, w: usize, h: usize) {
|
||||
let mut next = map.clone();
|
||||
for y in 1..h-1 {
|
||||
for x in 1..w-1 {
|
||||
let walls = (-1..=1i32).flat_map(|dy| (-1..=1i32).map(move |dx| (dx, dy)))
|
||||
.filter(|&(dx, dy)| !(dx == 0 && dy == 0))
|
||||
.filter(|&(dx, dy)| map[(y as i32 + dy) as usize][(x as i32 + dx) as usize])
|
||||
.count();
|
||||
next[y][x] = if map[y][x] { walls >= 4 } else { walls >= 5 };
|
||||
}
|
||||
}
|
||||
*map = next;
|
||||
}
|
||||
```
|
||||
|
||||
### Wave Function Collapse (sketch)
|
||||
```rust
|
||||
struct Cell { possible: BitSet }
|
||||
|
||||
fn wfc_collapse(grid: &mut Vec<Cell>, rules: &TileRules, rng: &mut RandomNumberGenerator) {
|
||||
while let Some(idx) = lowest_entropy(grid) {
|
||||
let chosen = grid[idx].possible.iter().nth(rng.range(0, grid[idx].possible.len())).unwrap();
|
||||
grid[idx].possible = BitSet::from([chosen]);
|
||||
propagate(grid, idx, rules);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Reachability Validation (flood fill)
|
||||
```rust
|
||||
fn is_solvable(map: &[Vec<Tile>], start: (i32, i32), exit: (i32, i32)) -> bool {
|
||||
let mut visited = vec![vec![false; map[0].len()]; map.len()];
|
||||
let mut stack = vec![start];
|
||||
while let Some((x, y)) = stack.pop() {
|
||||
if (x, y) == exit { return true; }
|
||||
if visited[y as usize][x as usize] { continue; }
|
||||
visited[y as usize][x as usize] = true;
|
||||
for (dx, dy) in [(-1, 0), (1, 0), (0, -1), (0, 1)] {
|
||||
let (nx, ny) = (x + dx, y + dy);
|
||||
if map[ny as usize][nx as usize].walkable() {
|
||||
stack.push((nx, ny));
|
||||
}
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
```
|
||||
|
||||
### Lock-and-Key Graph
|
||||
```rust
|
||||
struct DungeonGraph { rooms: Vec<Room>, edges: Vec<(usize, usize, Option<KeyId>)> }
|
||||
|
||||
fn place_locks(graph: &mut DungeonGraph, rng: &mut RandomNumberGenerator) {
|
||||
// 매 spanning tree 의 사용 → main path
|
||||
let tree = minimum_spanning_tree(&graph.edges);
|
||||
for (from, to, _) in &tree {
|
||||
if rng.range(0, 100) < 30 {
|
||||
let key_id = generate_key();
|
||||
// 매 key 의 placement 의 from 의 ancestor room 에
|
||||
place_key_in_ancestor(graph, *from, key_id);
|
||||
graph.lock_edge(*from, *to, key_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Deterministic Seed
|
||||
```rust
|
||||
fn run_dungeon(seed: u64, depth: i32) -> Dungeon {
|
||||
let mut rng = RandomNumberGenerator::seeded(seed.wrapping_add(depth as u64));
|
||||
let layout = generate_bsp(80, 50, &mut rng);
|
||||
let populated = populate(layout, &mut rng);
|
||||
populated
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 정형 dungeon (rooms + corridors) | BSP |
|
||||
| organic caves | Cellular Automata |
|
||||
| stylistic tile constraints | WFC |
|
||||
| narrative-driven (lock-and-key) | Graph-based |
|
||||
| emergent storytelling | Simulation-driven |
|
||||
|
||||
**기본값**: BSP + reachability validation — 매 simple, robust, debuggable.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Design]] · [[Procedural Content Generation]]
|
||||
- 변형: [[Wave Function Collapse]] · [[Cellular Automata]] · [[BSP Generation]]
|
||||
- 응용: [[Hades II]] · [[Caves of Qud]] · [[Spelunky 2]]
|
||||
- Adjacent: [[Random Number Generation]] · [[Pathfinding]] · [[Constraint Solving]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: rule design 의 brainstorming, balance tuning suggestions, narrative generation (item descriptions).
|
||||
**언제 X**: real-time generation (latency 의 too high) — 매 deterministic algorithms 의 사용.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No validation**: unwinnable runs ship → player frustration.
|
||||
- **Pure random**: feel-less dungeons; constraint + curation 매 필요.
|
||||
- **Non-deterministic**: 매 seed-based reproducibility 의 X → debugging/sharing 의 어려움.
|
||||
- **Over-generation**: every tile randomized → 매 cohesive style 의 X.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Brogue source, Hades II GDC talks, Caves of Qud postmortems).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — full PCG content with 6 working Rust patterns |
|
||||
|
||||
@@ -1,82 +1,166 @@
|
||||
---
|
||||
id: wiki-2026-0508-sarkis-cloning-technology
|
||||
title: Sarkis Cloning Technology
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Sarkis Clone Tech, Skybound Cloning, Cloning Lore Mechanic]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, lore, narrative, skybound, war-commander]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: narrative-system
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Sarkis Cloning Technology
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 villain 의 unkillability 는 매 lore mechanic 의 product 다."**. Sarkis Cloning Technology 는 War Commander 의 antagonist Sarkis 가 매 defeat 후 clone 으로 부활하는 narrative device — repeat-encounter PvE bossfight 의 lore justification 이자, escalating-difficulty arc 의 backbone. 매 player 가 "왜 매번 같은 적이 더 강해져서 나타나는가" 라는 ludonarrative dissonance 를 mechanically resolve.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Lore Premise
|
||||
- Sarkis 는 매 death event 후 cloned consciousness 로 reactivate
|
||||
- 매 clone 은 previous defeat data 를 inherit → adaptive AI
|
||||
- "Generation" 을 lore-internal version number 로 사용 (Sarkis Mk II, III, ...)
|
||||
- Faction: Skybound (sky-themed antagonist faction)
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Mechanical Function
|
||||
- **Boss respawn justification**: 매 raid event 마다 동일 boss 재등장 가능
|
||||
- **Power escalation device**: 매 generation 마다 +stat, +ability
|
||||
- **Story progression hook**: 매 clone iteration → new dialogue, new arc
|
||||
- **Player progression mirror**: 매 player level up → 매 Sarkis level up
|
||||
|
||||
### 매 응용
|
||||
1. War Commander: Sarkis Mk-series boss tiers.
|
||||
2. Skybound campaign: clone-iteration arc → final "original" reveal.
|
||||
3. Telemetry: clone defeat count → analytics on raid completion.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Pattern 1 — Clone generation entity
|
||||
```typescript
|
||||
interface SarkisClone {
|
||||
generation: number;
|
||||
baseStats: BossStats;
|
||||
inheritedTraits: TraitId[];
|
||||
abilityUnlocks: AbilityId[];
|
||||
defeatCount: number;
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
function spawnClone(prev: SarkisClone | null): SarkisClone {
|
||||
const gen = (prev?.generation ?? 0) + 1;
|
||||
return {
|
||||
generation: gen,
|
||||
baseStats: scaleStats(BASE_STATS, gen, 1.15),
|
||||
inheritedTraits: prev ? evolveTraits(prev.inheritedTraits) : SEED_TRAITS,
|
||||
abilityUnlocks: pickAbilities(gen),
|
||||
defeatCount: 0,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Pattern 2 — Adaptive trait evolution
|
||||
```typescript
|
||||
function evolveTraits(prev: TraitId[]): TraitId[] {
|
||||
// 매 player 의 winning strategy 에 counter trait 부여
|
||||
const meta = analyticsService.getDominantStrategy();
|
||||
const counter = TRAIT_COUNTERS[meta] ?? RANDOM_TRAIT;
|
||||
return [...prev, counter].slice(-MAX_TRAITS);
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Pattern 3 — Stat scaling
|
||||
```typescript
|
||||
function scaleStats(base: BossStats, gen: number, factor: number): BossStats {
|
||||
const mult = Math.pow(factor, gen);
|
||||
return {
|
||||
hp: base.hp * mult,
|
||||
damage: base.damage * mult,
|
||||
armor: base.armor + Math.floor(gen / 3),
|
||||
speed: base.speed,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 4 — Lore dialogue selection
|
||||
```typescript
|
||||
function getCloneDialogue(gen: number, defeatCount: number): DialogueLine[] {
|
||||
if (gen === 1) return INTRO_LINES;
|
||||
if (gen <= 5) return ARROGANCE_LINES;
|
||||
if (gen <= 10) return DESPERATION_LINES;
|
||||
return EXISTENTIAL_LINES; // 매 high-gen → 매 self-awareness arc
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 5 — Defeat → respawn cooldown
|
||||
```typescript
|
||||
async function onCloneDefeated(clone: SarkisClone, players: Player[]) {
|
||||
await grantRewards(players, clone.generation);
|
||||
const cooldown = 7 * 24 * 3600 * 1000; // 매 7d 후 재등장
|
||||
scheduler.schedule(() => spawnClone(clone), cooldown);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 6 — "Original Sarkis" reveal trigger
|
||||
```typescript
|
||||
function checkOriginalReveal(state: CampaignState): boolean {
|
||||
return state.maxCloneGen >= 12
|
||||
&& state.allianceCompletedArcs.includes('skybound-mk12');
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Pattern 7 — Clone telemetry log
|
||||
```typescript
|
||||
function logCloneEvent(event: 'spawn'|'defeat', clone: SarkisClone, players: string[]) {
|
||||
analytics.track('sarkis_clone_event', {
|
||||
type: event,
|
||||
generation: clone.generation,
|
||||
traits: clone.inheritedTraits,
|
||||
participants: players.length,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Repeat boss needed | Clone lore device (Sarkis-style) |
|
||||
| One-time finale boss | Original-only, no clone |
|
||||
| Power-creep concern | Cap generations, soft reset |
|
||||
| Narrative dissonance | Use clone arc to address it directly |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: clone generation cap 12, +15% stat scaling per gen, adaptive traits enabled.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Procedural Rhetoric (In Gaming)]] · [[Live Operations (LiveOps)]]
|
||||
- 변형: [[Beresnev Studio]] · [[Stage-Director-and-World-Tension-Scaling]]
|
||||
- 응용: [[Skybound_Skill_Asset_Integration]] · [[War-Commander-Combat-Ecosystem]]
|
||||
- Adjacent: [[Power Creep (Content Treadmills)]] · [[Procedural-Level-Geometry]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 반복 boss arc 의 lore design, narrative-mechanic alignment 검토, escalation curve 설계.
|
||||
**언제 X**: linear single-narrative game, perma-death roguelike — clone device 부적합.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **Infinite generations w/o cap**: power creep + player exhaustion.
|
||||
- **No narrative payoff**: 매 clone 이 단순 reskin → 매 player engagement 0.
|
||||
- **Mechanical = lore mismatch**: lore 상 unique 하다고 해놓고 매 mechanic 은 reskin.
|
||||
- **No counter-strategy adaptation**: clone 이 변하지 않으면 매 boss fight 가 trivial 해짐.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Kixeye War Commander event archive, Skybound campaign notes).
|
||||
- 신뢰도 B (lore-specific, partial public docs).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — clone lore mechanic + 7 implementation patterns |
|
||||
|
||||
@@ -1,82 +1,165 @@
|
||||
---
|
||||
id: wiki-2026-0508-sector-breach-store
|
||||
title: Sector Breach Store
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Breach Store, Event Currency Store, Sector Event Shop]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, monetization, event-economy, war-commander, liveops]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: liveops-store
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Sector Breach Store
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 event currency 의 최고 sink 는 매 limited-time store 다."**. Sector Breach Store 는 War Commander 류 sector-event 의 핵심 reward delivery 메커니즘 — event 동안 earned breach token 을 매 limited-time exclusive item 으로 redeem 하는 store. 매 2026 LiveOps 에서 dual-currency (free token + paid premium token) 디자인 + scarcity timer + tier-locked stock 의 표준 패턴.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Store Anatomy
|
||||
- **Currency**: breach token (event-specific, decays after event end)
|
||||
- **Stock tiers**: common (unlimited) / rare (limited per player) / mythic (limited globally)
|
||||
- **Refresh cadence**: rotating featured slots every 24h
|
||||
- **Decay rule**: unused token → converted at fixed ratio or expired
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Monetization Lever
|
||||
- 매 paid premium token bundle = 매 fast-track to mythic stock
|
||||
- 매 store-only skin = collector retention
|
||||
- 매 last-day surge: 매 event final 24h 의 매출 peak (FOMO)
|
||||
- 매 alliance discount: 매 social engagement gate
|
||||
|
||||
### 매 응용
|
||||
1. War Commander: sector breach event store.
|
||||
2. Mobile Strike: faction war supply depot.
|
||||
3. Clash Royale: clan war shop.
|
||||
4. Brawl Stars: ranked season shop.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Pattern 1 — Store catalog schema
|
||||
```typescript
|
||||
interface BreachStoreItem {
|
||||
id: string;
|
||||
rarity: 'common'|'rare'|'mythic';
|
||||
costToken: number;
|
||||
costPremiumToken?: number;
|
||||
stockGlobal?: number;
|
||||
stockPerPlayer?: number;
|
||||
startsAt: number;
|
||||
endsAt: number;
|
||||
}
|
||||
```
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Pattern 2 — Purchase transaction
|
||||
```typescript
|
||||
async function purchase(playerId: string, itemId: string, useTokenType: 'free'|'premium') {
|
||||
return await db.transaction(async tx => {
|
||||
const item = await tx.fetchItem(itemId);
|
||||
const player = await tx.fetchPlayer(playerId);
|
||||
if (Date.now() > item.endsAt) throw new Error('EVENT_ENDED');
|
||||
const cost = useTokenType === 'premium' ? item.costPremiumToken! : item.costToken;
|
||||
const balance = useTokenType === 'premium' ? player.premiumToken : player.token;
|
||||
if (balance < cost) throw new Error('INSUFFICIENT_TOKEN');
|
||||
if (item.stockPerPlayer && player.purchases[itemId] >= item.stockPerPlayer)
|
||||
throw new Error('PER_PLAYER_LIMIT');
|
||||
if (item.stockGlobal !== undefined) {
|
||||
const remaining = await tx.decrementStock(itemId);
|
||||
if (remaining < 0) throw new Error('SOLD_OUT');
|
||||
}
|
||||
await tx.deductToken(playerId, cost, useTokenType);
|
||||
await tx.grantItem(playerId, itemId);
|
||||
return { ok: true };
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Pattern 3 — Featured rotation
|
||||
```typescript
|
||||
function selectFeaturedSlots(catalog: BreachStoreItem[], rng: RNG, count = 4): BreachStoreItem[] {
|
||||
const eligible = catalog.filter(i => i.rarity !== 'common');
|
||||
return weightedSample(eligible, count, i => RARITY_WEIGHT[i.rarity], rng);
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Pattern 4 — Token decay on event end
|
||||
```typescript
|
||||
async function settleEventEnd(eventId: string) {
|
||||
const players = await fetchEventParticipants(eventId);
|
||||
for (const p of players) {
|
||||
const leftover = p.token;
|
||||
const refunded = Math.floor(leftover * 0.1); // 매 10% conversion to permanent currency
|
||||
await grantPermanentCurrency(p.id, refunded);
|
||||
await zeroEventToken(p.id, eventId);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 5 — FOMO surge banner
|
||||
```typescript
|
||||
function shouldShowSurgeBanner(now: number, eventEndsAt: number): boolean {
|
||||
const hoursLeft = (eventEndsAt - now) / 3600000;
|
||||
return hoursLeft <= 24;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 6 — Anti-bot purchase rate-limit
|
||||
```typescript
|
||||
const purchaseRate = new SlidingWindow({ windowMs: 60_000, max: 30 });
|
||||
function checkPurchaseAllowed(playerId: string): boolean {
|
||||
return purchaseRate.tryAcquire(playerId);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 7 — Alliance discount
|
||||
```typescript
|
||||
function applyAllianceDiscount(cost: number, alliance: Alliance): number {
|
||||
const tier = alliance.eventTier; // 매 alliance event participation tier
|
||||
const discount = ALLIANCE_DISCOUNT_TABLE[tier] ?? 0;
|
||||
return Math.ceil(cost * (1 - discount));
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| New event launch | Conservative stock, observe purchase telemetry |
|
||||
| Repeat seasonal event | Rotate skins, keep core items consistent |
|
||||
| Whale-targeted | Add premium-only mythic tier |
|
||||
| F2P-friendly | Generous token earn rate, no premium gate on rare tier |
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
**기본값**: dual-currency, mythic stock global limit 1000, 24h featured rotation, 10% leftover-token conversion.
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live Operations (LiveOps)]] · [[Game_Monetization_Strategy]]
|
||||
- 변형: [[Sector-Breach-XP]] · [[Dynamic Offers]]
|
||||
- 응용: [[War-Commander-Event-Operations]] · [[Sector]]
|
||||
- Adjacent: [[Monetization at the Point of Friction]] · [[맞춤형 IAP 번들(Customizable IAP bundles)]]
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🤖 LLM 활용
|
||||
**언제**: event store catalog design, currency decay rule 검토, FOMO surge 분석.
|
||||
**언제 X**: persistent metagame store (event currency 부적합).
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## ❌ 안티패턴
|
||||
- **No decay rule**: event 후 token 영구화 → 매 future event 의 currency 가치 dilute.
|
||||
- **Premium-only mythic**: f2p 의 ceiling 명확화 → 신규 유저 churn.
|
||||
- **No stock cap**: scarcity 효과 사라짐 → 매출 떨어짐.
|
||||
- **Hidden cost change mid-event**: trust 파괴 → community backlash.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Kixeye War Commander event docs, GDC LiveOps talks 2023-2025).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — store anatomy + 7 patterns + transaction flow |
|
||||
|
||||
@@ -1,82 +1,160 @@
|
||||
---
|
||||
id: wiki-2026-0508-sector-breach-xp
|
||||
title: Sector Breach XP
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Breach XP, Sector Progression]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, progression, mmo, economy]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Sector Breach XP
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 sector breach 의 XP 의 progression currency"**. 매 player 의 sector control activity 의 quantify 의 reward — 매 attack/defense/assist 의 XP gain 의 weighted formula 의 결정.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 정의
|
||||
- **Breach event**: sector boundary 의 cross 시 trigger 의 combat encounter.
|
||||
- **XP source**: damage dealt, objectives captured, assist credit, defense holds.
|
||||
- **Tier scaling**: higher-tier sector 의 XP multiplier 의 적용 (T1=1.0x, T5=3.5x).
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 formula
|
||||
- Base XP = damage * 0.01 + objective * 50 + assist * 10.
|
||||
- Multiplier = tier_mult * event_mult * fatigue_factor.
|
||||
- Fatigue: 매 player 의 daily cap 의 도달 시 0.25x 의 decay.
|
||||
|
||||
### 매 응용
|
||||
1. Player retention curve 의 shape — daily cap 의 logout reward.
|
||||
2. Guild leaderboard 의 weekly reset.
|
||||
3. Seasonal pass 의 XP-gated reward.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### XP 계산기
|
||||
```typescript
|
||||
interface BreachEvent {
|
||||
damage: number;
|
||||
objectives: number;
|
||||
assists: number;
|
||||
sectorTier: 1|2|3|4|5;
|
||||
isEventActive: boolean;
|
||||
dailyXpEarned: number;
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
const TIER_MULT = { 1: 1.0, 2: 1.5, 3: 2.0, 4: 2.75, 5: 3.5 };
|
||||
const DAILY_CAP = 50_000;
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
export function calcBreachXP(e: BreachEvent): number {
|
||||
const base = e.damage * 0.01 + e.objectives * 50 + e.assists * 10;
|
||||
const eventMult = e.isEventActive ? 2.0 : 1.0;
|
||||
const fatigue = e.dailyXpEarned >= DAILY_CAP ? 0.25 : 1.0;
|
||||
return Math.floor(base * TIER_MULT[e.sectorTier] * eventMult * fatigue);
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Daily cap tracker (Redis)
|
||||
```typescript
|
||||
import Redis from 'ioredis';
|
||||
const r = new Redis();
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
export async function awardXP(userId: string, xp: number): Promise<number> {
|
||||
const key = `breach:xp:${userId}:${todayUTC()}`;
|
||||
const current = Number(await r.get(key) ?? 0);
|
||||
const granted = Math.min(xp, Math.max(0, DAILY_CAP - current));
|
||||
if (granted > 0) {
|
||||
await r.incrby(key, granted);
|
||||
await r.expire(key, 86400);
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
const todayUTC = () => new Date().toISOString().slice(0, 10);
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Tier resolution
|
||||
```typescript
|
||||
export function resolveTier(controlPct: number, contestation: number): 1|2|3|4|5 {
|
||||
// 매 contested sector 의 tier boost
|
||||
const score = controlPct * 100 + contestation * 50;
|
||||
if (score < 30) return 1;
|
||||
if (score < 60) return 2;
|
||||
if (score < 100) return 3;
|
||||
if (score < 150) return 4;
|
||||
return 5;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Leaderboard write (sorted set)
|
||||
```typescript
|
||||
export async function recordToLeaderboard(guildId: string, userId: string, xp: number) {
|
||||
await r.zincrby(`leaderboard:${guildId}:weekly`, xp, userId);
|
||||
await r.expireat(`leaderboard:${guildId}:weekly`, nextSundayUTC());
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Event multiplier window
|
||||
```typescript
|
||||
export function isEventActive(now = Date.now()): boolean {
|
||||
const day = new Date(now).getUTCDay();
|
||||
const hour = new Date(now).getUTCHours();
|
||||
// 매 weekend prime time
|
||||
return (day === 0 || day === 6) && hour >= 18 && hour < 22;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Anti-grief assist split
|
||||
```typescript
|
||||
export function splitAssistXP(participants: {id: string; damageShare: number}[], totalXP: number) {
|
||||
return participants
|
||||
.filter(p => p.damageShare >= 0.05)
|
||||
.map(p => ({ id: p.id, xp: Math.floor(totalXP * p.damageShare) }));
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 new player onboarding | Lower tier 의 fixed-rate XP — variance 의 minimize. |
|
||||
| 매 endgame whale | Tier 5 + event mult — 매 prestige path 의 제공. |
|
||||
| 매 daily cap reached | Switch reward currency (cosmetic tokens). |
|
||||
| 매 guild war | Assist split + tier boost — 매 collective contribution 의 reward. |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: tier multiplier + daily cap + event window.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Sector]] · [[Sector-Breach-Store]]
|
||||
- 변형: [[Sector-Breach-Store]] · [[Live Operations (LiveOps)]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Live Operations (LiveOps)]]
|
||||
- Adjacent: [[Player Engagement]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: progression curve tuning, telemetry-driven balancing, daily cap simulation.
|
||||
**언제 X**: 매 player-facing copy 의 generate (latency + tone risk).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **No daily cap**: 매 24/7 grind incentive — burnout + bot farming.
|
||||
- **Linear tier scaling**: 매 high tier 의 reward 의 부족 — engagement collapse.
|
||||
- **Assist sniping**: 매 last-hit XP — 매 selfish play meta.
|
||||
- **Hidden formula**: 매 player trust 의 erode — community spreadsheet 의 inevitable.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified against War Commander, EVE Online, Foxhole 의 sector progression mechanics.
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — sector breach XP formula + Redis cap tracking 추가 |
|
||||
|
||||
@@ -1,82 +1,163 @@
|
||||
---
|
||||
id: wiki-2026-0508-sector
|
||||
title: Sector
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Map Sector, Zone, Region, Hex]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, world-design, mmo, territorial-control]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: postgres-postgis
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Sector
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 sector 의 territorial unit 의 atomic building block"**. 매 MMO/strategy game 의 world map 의 partition — ownership, contestation, resource yield, breach event 의 host. 매 EVE 의 system, Foxhole 의 region, Albion 의 cluster 의 abstraction.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 정의
|
||||
- **Spatial unit**: hex / voronoi / grid cell — 매 game world 의 partition.
|
||||
- **Properties**: owner_alliance, tier, contested_pct, resource_pool, modifier_set.
|
||||
- **State**: contested | controlled | breach_active | locked.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 핵심 mechanics
|
||||
- **Ownership**: alliance/guild flag — 매 capture 의 trigger.
|
||||
- **Yield**: tick-based resource generation — 매 owner 의 skim.
|
||||
- **Breach**: hostile entry 의 combat encounter trigger.
|
||||
- **Modifier stack**: weather, event, sabotage 의 buff/debuff.
|
||||
|
||||
### 매 응용
|
||||
1. Strategic map UI — 매 player decision 의 spatial primitive.
|
||||
2. Resource economy 의 spatial heterogeneity.
|
||||
3. Alliance war 의 territorial objective.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Sector schema (PostGIS)
|
||||
```sql
|
||||
CREATE TABLE sector (
|
||||
id UUID PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
geom GEOMETRY(Polygon, 4326) NOT NULL,
|
||||
tier SMALLINT NOT NULL CHECK (tier BETWEEN 1 AND 5),
|
||||
owner_alliance UUID REFERENCES alliance(id),
|
||||
contested_pct REAL NOT NULL DEFAULT 0,
|
||||
resource_pool JSONB NOT NULL DEFAULT '{}',
|
||||
state TEXT NOT NULL DEFAULT 'controlled',
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX sector_geom_gix ON sector USING GIST (geom);
|
||||
CREATE INDEX sector_owner_idx ON sector(owner_alliance);
|
||||
```
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Adjacency query
|
||||
```sql
|
||||
-- 매 adjacent sector 의 lookup (touching polygons)
|
||||
SELECT b.id, b.name, b.owner_alliance
|
||||
FROM sector a
|
||||
JOIN sector b ON ST_Touches(a.geom, b.geom)
|
||||
WHERE a.id = $1;
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Capture state machine
|
||||
```typescript
|
||||
type SectorState = 'controlled' | 'contested' | 'breach_active' | 'locked';
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
export function transition(current: SectorState, event: string): SectorState {
|
||||
const table: Record<SectorState, Record<string, SectorState>> = {
|
||||
controlled: { hostile_entry: 'contested' },
|
||||
contested: { capture: 'controlled', breach_trigger: 'breach_active', timeout: 'controlled' },
|
||||
breach_active: { breach_resolved: 'contested', wipe: 'controlled' },
|
||||
locked: { unlock: 'controlled' },
|
||||
};
|
||||
return table[current][event] ?? current;
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Contestation tick
|
||||
```typescript
|
||||
interface Sector {
|
||||
id: string;
|
||||
contestedPct: number;
|
||||
attackerForce: number;
|
||||
defenderForce: number;
|
||||
}
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
export function tickContestation(s: Sector, dt: number): Sector {
|
||||
const delta = (s.attackerForce - s.defenderForce) * 0.0001 * dt;
|
||||
const next = Math.max(0, Math.min(1, s.contestedPct + delta));
|
||||
return { ...s, contestedPct: next };
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Resource yield distribution
|
||||
```typescript
|
||||
export async function distributeYield(sectorId: string) {
|
||||
const sector = await db.sector.findUnique({ where: { id: sectorId } });
|
||||
if (!sector?.ownerAlliance) return;
|
||||
for (const [resource, amount] of Object.entries(sector.resourcePool)) {
|
||||
await db.allianceVault.upsert({
|
||||
where: { allianceId_resource: { allianceId: sector.ownerAlliance, resource } },
|
||||
create: { allianceId: sector.ownerAlliance, resource, amount: amount as number },
|
||||
update: { amount: { increment: amount as number } },
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Heat-map render data
|
||||
```typescript
|
||||
export async function sectorHeatmap(layer: 'contestation' | 'tier' | 'wealth') {
|
||||
const rows = await db.$queryRaw<{id: string; geom: any; v: number}[]>`
|
||||
SELECT id, ST_AsGeoJSON(geom) as geom,
|
||||
${layer === 'contestation' ? 'contested_pct' : layer === 'tier' ? 'tier' : "(resource_pool->>'thorium')::float"} as v
|
||||
FROM sector
|
||||
`;
|
||||
return rows.map(r => ({ id: r.id, geometry: JSON.parse(r.geom), value: r.v }));
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 small map (<100 sectors) | Hex grid + manual tuning. |
|
||||
| 매 large open world | Voronoi 의 organic look — but harder pathfinding. |
|
||||
| 매 hardcore PvP | Open contestation + breach on entry. |
|
||||
| 매 PvE 중심 | Locked tiers + scheduled breach windows. |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: Hex grid + tier-based yield + state machine + PostGIS spatial index.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[4X 시스템 (4X System)]] · [[EVE 온라인]]
|
||||
- 변형: [[Sector-Breach-Store]] · [[Sector-Breach-XP]]
|
||||
- 응용: [[Alliances-and-Sector-Hegemony]] · [[Descendants-Sector-Control]]
|
||||
- Adjacent: [[Procedural-Level-Geometry]] · [[War-Commander-Combat-Ecosystem]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: sector-name generation, lore stub 의 batch 생성, balance 의 simulation prompt.
|
||||
**언제 X**: 매 spatial query (PostGIS deterministic).
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **No state machine**: 매 ad-hoc boolean flags — race condition + bug surface.
|
||||
- **Uniform tier**: 매 strategic depth 의 부족 — map 의 flat feel.
|
||||
- **Owner-only yield**: 매 contesting alliance 의 compensation 없음 — passive farming meta.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: EVE Online sovereignty mechanics, Foxhole region system, Albion Online cluster design.
|
||||
- 신뢰도 A.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — sector schema + PostGIS + state machine 추가 |
|
||||
|
||||
@@ -1,82 +1,163 @@
|
||||
---
|
||||
id: wiki-2026-0508-skybound-skill-asset-integration
|
||||
title: Skybound Skill Asset Integration
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Skybound Skill Pipeline, Skill Asset Pipeline, Faction Skill Integration]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, asset-pipeline, skill-system, war-commander, skybound]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: asset-pipeline
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Skybound Skill Asset Integration
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 skill 은 매 asset bundle 의 contract 다."**. Skybound Skill Asset Integration 은 War Commander 의 Skybound faction 새로운 skill 추가 시, design data (json), VFX (particle), audio, animation, UI icon 의 5 개 asset 을 단일 manifest 로 묶고 매 client 가 atomic 으로 load 하도록 하는 pipeline. 매 2026 LiveOps 의 hot-patch skill drop 의 표준 패턴 — skill 추가 시 client 강제 update 없이 OTA 적용 가능.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Pipeline Stages
|
||||
1. **Design**: skill stat json (cooldown, damage, type)
|
||||
2. **VFX**: particle effect bundle (Unity/Unreal addressable)
|
||||
3. **Audio**: SFX wav + mixer routing
|
||||
4. **Animation**: skeletal anim clip + state machine entry
|
||||
5. **UI**: icon, tooltip locale strings
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Manifest Contract
|
||||
- 매 skill = 매 unique skillId
|
||||
- manifest 는 asset hash + version + dependencies
|
||||
- client 가 매 skill 사용 시 manifest verify → fallback to default if missing
|
||||
- 매 OTA delivery: CDN-backed, signed manifest
|
||||
|
||||
### 매 응용
|
||||
1. War Commander Skybound expansion: monthly new skill drop.
|
||||
2. Generic faction-DLC pipeline.
|
||||
3. Live event one-shot skills.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Pattern 1 — Manifest schema
|
||||
```typescript
|
||||
interface SkillManifest {
|
||||
skillId: string;
|
||||
version: string;
|
||||
designJson: AssetRef;
|
||||
vfxBundle: AssetRef;
|
||||
audioBundle: AssetRef;
|
||||
animClip: AssetRef;
|
||||
uiIcon: AssetRef;
|
||||
signature: string; // 매 server-signed
|
||||
}
|
||||
interface AssetRef { url: string; hash: string; sizeBytes: number; }
|
||||
```
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Pattern 2 — Atomic loader
|
||||
```typescript
|
||||
async function loadSkill(manifest: SkillManifest): Promise<Skill> {
|
||||
await verifySignature(manifest);
|
||||
const [design, vfx, audio, anim, icon] = await Promise.all([
|
||||
fetchAsset(manifest.designJson),
|
||||
fetchAsset(manifest.vfxBundle),
|
||||
fetchAsset(manifest.audioBundle),
|
||||
fetchAsset(manifest.animClip),
|
||||
fetchAsset(manifest.uiIcon),
|
||||
]);
|
||||
for (const [a, ref] of [
|
||||
[design, manifest.designJson], [vfx, manifest.vfxBundle],
|
||||
[audio, manifest.audioBundle], [anim, manifest.animClip], [icon, manifest.uiIcon],
|
||||
] as const) {
|
||||
if (sha256(a) !== ref.hash) throw new Error('HASH_MISMATCH');
|
||||
}
|
||||
return assembleSkill(design, vfx, audio, anim, icon);
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Pattern 3 — Fallback to default
|
||||
```typescript
|
||||
async function loadSkillSafe(skillId: string): Promise<Skill> {
|
||||
try {
|
||||
const manifest = await fetchManifest(skillId);
|
||||
return await loadSkill(manifest);
|
||||
} catch (e) {
|
||||
logger.warn('Skill load failed; falling back', { skillId, err: e });
|
||||
return loadDefaultSkill();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Pattern 4 — Hot-patch detection
|
||||
```typescript
|
||||
async function checkForSkillUpdate(skillId: string, currentVersion: string): Promise<boolean> {
|
||||
const remote = await fetchManifestHead(skillId);
|
||||
return remote.version !== currentVersion;
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 5 — Server-side signing
|
||||
```typescript
|
||||
function signManifest(manifest: Omit<SkillManifest, 'signature'>, key: PrivateKey): string {
|
||||
const payload = canonicalJson(manifest);
|
||||
return ed25519.sign(key, payload).toString('hex');
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 6 — CDN cache prewarming
|
||||
```typescript
|
||||
async function prewarmManifests(skillIds: string[]): Promise<void> {
|
||||
const manifests = await Promise.all(skillIds.map(fetchManifest));
|
||||
const refs = manifests.flatMap(m => [m.designJson, m.vfxBundle, m.audioBundle, m.animClip, m.uiIcon]);
|
||||
await Promise.all(refs.map(r => prefetch(r.url)));
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 7 — Localization fallback
|
||||
```typescript
|
||||
function resolveTooltip(localeStrings: Record<string, string>, locale: string): string {
|
||||
return localeStrings[locale] ?? localeStrings['en'] ?? '<missing>';
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Mobile + bandwidth concern | Lazy-load: only fetch on first use |
|
||||
| Frequent hot-drop skill | Prewarm all active manifests on app start |
|
||||
| Dev/testing | Local override manifest |
|
||||
| Highly competitive PvP | Mandatory pre-load to prevent visual desync |
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
**기본값**: lazy-load + prewarm popular skills, mandatory hash verify, ed25519 signature, fallback to default skill.
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live Operations (LiveOps)]] · [[CI_CD Pipeline]]
|
||||
- 변형: [[Sarkis-Cloning-Technology]] · [[Beresnev Studio]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[War-Commander-Event-Operations]]
|
||||
- Adjacent: [[Code Splitting Lazy Loading (코드 분할 및 지연 로딩)]] · [[Server Architecture]]
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🤖 LLM 활용
|
||||
**언제**: skill OTA 파이프라인 설계, manifest schema 검토, asset versioning.
|
||||
**언제 X**: built-in only static skill 게임 — pipeline overhead 불필요.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## ❌ 안티패턴
|
||||
- **No signature verify**: 매 client 가 매 임의 manifest 로 skill replace 가능 → cheat.
|
||||
- **No hash check**: 매 corrupted asset → 매 silent crash.
|
||||
- **All-or-nothing load**: 매 single asset 실패 → 매 entire skill 사용 불가 (fallback 누락).
|
||||
- **Cache poisoning**: CDN edge 의 stale manifest → version drift.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Unity Addressables docs, Unreal Pak system, Skybound expansion notes).
|
||||
- 신뢰도 B.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — manifest schema + 7 patterns + OTA flow |
|
||||
|
||||
@@ -1,82 +1,179 @@
|
||||
---
|
||||
id: wiki-2026-0508-stage-director-and-world-tension
|
||||
title: Stage Director and World Tension Scaling
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [AI Director, Dynamic Difficulty, Tension Curve]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, ai-director, pacing, dda]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Stage Director and World Tension Scaling
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 AI Director 의 player tension 의 dynamic shape"**. 매 Left 4 Dead 의 emergent pacing 의 tradition — 매 enemy spawn, intensity, encounter density 의 player state 의 따라 modulate. 매 2026 의 trend: ML-driven anomaly detection + scripted fallback.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 정의
|
||||
- **Stage Director**: 매 game state 의 monitor + encounter authoring 의 high-level controller.
|
||||
- **Tension**: numerical proxy of player stress (HP, ammo, time-since-fight, group cohesion).
|
||||
- **Scaling**: spawn rate, enemy tier, environmental hazard 의 tension 의 따라 적응.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 input signals
|
||||
- HP delta over last 30s.
|
||||
- Ammo deficit ratio.
|
||||
- Time-since-last-encounter.
|
||||
- Squad cohesion (player distance).
|
||||
- Audio volume / heart rate (advanced biometric).
|
||||
|
||||
### 매 응용
|
||||
1. Co-op shooter 의 spawn director (L4D, Vermintide).
|
||||
2. Survival horror 의 jump scare 의 spacing.
|
||||
3. Roguelike 의 boss room 의 difficulty 의 player skill 의 따라 swap.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Tension model
|
||||
```typescript
|
||||
interface PlayerState {
|
||||
hp: number; maxHp: number;
|
||||
ammoRatio: number;
|
||||
secondsSinceFight: number;
|
||||
squadSpread: number; // meters
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
export function tensionScore(p: PlayerState): number {
|
||||
const hpDeficit = 1 - p.hp / p.maxHp;
|
||||
const ammoDeficit = 1 - p.ammoRatio;
|
||||
const restBonus = Math.min(1, p.secondsSinceFight / 60);
|
||||
const spreadStress = Math.min(1, p.squadSpread / 30);
|
||||
// 매 tension 의 0..1 의 normalize
|
||||
return clamp01(0.4 * hpDeficit + 0.3 * ammoDeficit + 0.3 * spreadStress - 0.5 * restBonus);
|
||||
}
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
const clamp01 = (x: number) => Math.max(0, Math.min(1, x));
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Director state machine
|
||||
```typescript
|
||||
type DirectorPhase = 'build_up' | 'peak' | 'relax' | 'pause';
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
export class StageDirector {
|
||||
phase: DirectorPhase = 'build_up';
|
||||
phaseStart = Date.now();
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
step(tension: number, now = Date.now()) {
|
||||
const elapsed = (now - this.phaseStart) / 1000;
|
||||
switch (this.phase) {
|
||||
case 'build_up': if (tension > 0.7) this.go('peak', now); break;
|
||||
case 'peak': if (elapsed > 45 || tension > 0.95) this.go('relax', now); break;
|
||||
case 'relax': if (elapsed > 30) this.go('pause', now); break;
|
||||
case 'pause': if (elapsed > 60 || tension < 0.2) this.go('build_up', now); break;
|
||||
}
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
private go(p: DirectorPhase, now: number) {
|
||||
this.phase = p;
|
||||
this.phaseStart = now;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Spawn budget
|
||||
```typescript
|
||||
const SPAWN_BUDGET: Record<DirectorPhase, { rate: number; maxAlive: number }> = {
|
||||
build_up: { rate: 0.5, maxAlive: 6 },
|
||||
peak: { rate: 2.0, maxAlive: 20 },
|
||||
relax: { rate: 0.2, maxAlive: 3 },
|
||||
pause: { rate: 0.0, maxAlive: 0 },
|
||||
};
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
export function shouldSpawn(phase: DirectorPhase, alive: number, dt: number): boolean {
|
||||
const cfg = SPAWN_BUDGET[phase];
|
||||
if (alive >= cfg.maxAlive) return false;
|
||||
return Math.random() < cfg.rate * dt;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Encounter selector (weighted)
|
||||
```typescript
|
||||
interface Encounter { id: string; tensionMin: number; tensionMax: number; weight: number; }
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
export function pickEncounter(pool: Encounter[], tension: number): Encounter | null {
|
||||
const eligible = pool.filter(e => tension >= e.tensionMin && tension <= e.tensionMax);
|
||||
const total = eligible.reduce((s, e) => s + e.weight, 0);
|
||||
if (total === 0) return null;
|
||||
let r = Math.random() * total;
|
||||
for (const e of eligible) { r -= e.weight; if (r <= 0) return e; }
|
||||
return eligible.at(-1) ?? null;
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### ML-assisted anomaly (LightGBM stub)
|
||||
```typescript
|
||||
// 매 player flow 의 deviate detection
|
||||
import { predict } from './lgbm-runtime';
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
export async function flowAnomaly(features: number[]): Promise<number> {
|
||||
// returns 0 (smooth) .. 1 (anomaly)
|
||||
return predict('director_anomaly_v3', features);
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Audio cue layer
|
||||
```typescript
|
||||
export function selectMusicLayer(phase: DirectorPhase): string {
|
||||
return {
|
||||
build_up: 'ambient_low',
|
||||
peak: 'combat_full',
|
||||
relax: 'aftermath_strings',
|
||||
pause: 'silence',
|
||||
}[phase];
|
||||
}
|
||||
```
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 horror game | Long pause + sudden peak — 매 jump scare 의 efficacy. |
|
||||
| 매 co-op shooter | Build-up → peak → relax 의 4-min cycle. |
|
||||
| 매 boss arena | Disable director — scripted authoring. |
|
||||
| 매 narrative beat | Force pause — cutscene 의 pacing 의 protect. |
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
**기본값**: 4-phase state machine + tension proxy + spawn budget.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🔗 Graph
|
||||
- 부모: [[Player-Experience-Modeling]] · [[Gamification-Theory]]
|
||||
- 변형: [[State-Machine-and-Phase-Transition-Events]] · [[Live Operations (LiveOps)]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Roguelike Procedural Generation]]
|
||||
- Adjacent: [[Procedural-Level-Geometry]] · [[Procedural Rhetoric (In Gaming)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: encounter copy generation, off-line analysis 의 director log 의 narrative summary.
|
||||
**언제 X**: 매 tick-rate director decision (latency-sensitive — local FSM).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Peak fatigue**: 매 sustained peak 의 burnout — 매 mandatory relax window 누락.
|
||||
- **Pure RNG**: 매 director 없음 — 매 player flow 의 ignore.
|
||||
- **Visible threshold**: 매 player 의 director gaming — feel of agency 의 erode.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: Left 4 Dead 2 director GDC talks (Booth), Alien: Isolation AI dual-system, Vermintide 2 patches.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — director FSM + tension proxy 추가 |
|
||||
|
||||
@@ -1,82 +1,172 @@
|
||||
---
|
||||
id: wiki-2026-0508-staggered-firing-logic-and-phase
|
||||
title: Staggered Firing Logic and Phase Offset
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Phase Offset Firing, Staggered Volley, Spread Salvo]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, combat, simulation, weapons]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: ecs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Staggered Firing Logic and Phase Offset
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 weapon battery 의 fire timing 의 distribute 의 anti-burst pattern"**. 매 multi-barrel platform 의 simultaneous discharge 의 회피 — 매 DPS smoothing, FPS spike 의 prevention, AOE counter 의 mitigation. 매 War Commander, EVE Online, Mechabellum 의 핵심 timing primitive.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 문제
|
||||
- **Synchronized salvo**: 매 N barrels 의 simultaneous fire — 매 frame spike + AOE 1-shot vulnerability.
|
||||
- **Wasted DPS**: 매 target dead 의 mid-volley — overkill 의 absorb.
|
||||
- **AI predictability**: 매 player 의 dodge timing 의 학습 가능.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 phase offset 의 mechanism
|
||||
- **Period T**: 매 weapon 의 cooldown.
|
||||
- **Offset φᵢ**: barrel i 의 initial delay = (i / N) * T.
|
||||
- **Result**: 매 N evenly-spaced shots per period — 매 smooth DPS curve.
|
||||
|
||||
### 매 응용
|
||||
1. Capital ship turret battery — 매 broadside 의 sustained fire.
|
||||
2. Tower defense 의 multi-tower volley.
|
||||
3. Auto-attack RPG 의 multi-projectile spread.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Phase-offset scheduler
|
||||
```typescript
|
||||
interface Barrel {
|
||||
id: number;
|
||||
cooldownMs: number;
|
||||
nextFireAt: number;
|
||||
}
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
export function initBattery(count: number, period: number, now: number): Barrel[] {
|
||||
return Array.from({ length: count }, (_, i) => ({
|
||||
id: i,
|
||||
cooldownMs: period,
|
||||
nextFireAt: now + (i / count) * period,
|
||||
}));
|
||||
}
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
export function tickBattery(battery: Barrel[], now: number, fire: (b: Barrel) => void) {
|
||||
for (const b of battery) {
|
||||
if (now >= b.nextFireAt) {
|
||||
fire(b);
|
||||
b.nextFireAt += b.cooldownMs;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### ECS system (bitECS-style)
|
||||
```typescript
|
||||
import { defineQuery, defineSystem } from 'bitecs';
|
||||
import { Weapon, Position, Target } from './components';
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
const weaponQuery = defineQuery([Weapon, Position, Target]);
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
export const firingSystem = defineSystem((world: any) => {
|
||||
const ents = weaponQuery(world);
|
||||
const now = world.time.now;
|
||||
for (const eid of ents) {
|
||||
if (now >= Weapon.nextFireAt[eid]) {
|
||||
spawnProjectile(world, eid);
|
||||
Weapon.nextFireAt[eid] = now + Weapon.cooldown[eid];
|
||||
}
|
||||
}
|
||||
return world;
|
||||
});
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Adaptive jitter (anti-prediction)
|
||||
```typescript
|
||||
export function jitteredOffset(base: number, jitterPct = 0.1): number {
|
||||
const jitter = (Math.random() * 2 - 1) * jitterPct * base;
|
||||
return base + jitter;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
export function rescheduleWithJitter(b: Barrel, now: number) {
|
||||
b.nextFireAt = now + jitteredOffset(b.cooldownMs);
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Target switch on phase
|
||||
```typescript
|
||||
export function selectTarget(barrel: Barrel, candidates: Entity[]): Entity | null {
|
||||
// 매 phase-offset barrel 의 priority swap — 매 focused fire 의 회피
|
||||
const phaseIdx = barrel.id % candidates.length;
|
||||
return candidates.sort((a, b) => a.hp - b.hp)[phaseIdx] ?? null;
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### DPS smoothing 검증
|
||||
```typescript
|
||||
export function dpsHistogram(events: {t: number; dmg: number}[], binMs = 100) {
|
||||
const bins = new Map<number, number>();
|
||||
for (const e of events) {
|
||||
const k = Math.floor(e.t / binMs);
|
||||
bins.set(k, (bins.get(k) ?? 0) + e.dmg);
|
||||
}
|
||||
const values = [...bins.values()];
|
||||
const mean = values.reduce((a,b)=>a+b,0)/values.length;
|
||||
const variance = values.reduce((a,b)=>a+(b-mean)**2,0)/values.length;
|
||||
return { mean, stddev: Math.sqrt(variance), peak: Math.max(...values) };
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Group-level phase coordination
|
||||
```typescript
|
||||
export function coordinateGroup(barrels: Barrel[], period: number, now: number) {
|
||||
// 매 N barrels 의 even spread + small group jitter
|
||||
const groupJitter = Math.random() * 0.05 * period;
|
||||
barrels.forEach((b, i) => {
|
||||
b.cooldownMs = period;
|
||||
b.nextFireAt = now + (i / barrels.length) * period + groupJitter;
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 capital ship turret | Even phase offset + small jitter (5%). |
|
||||
| 매 missile salvo | Single-shot batch (volley) — narrative impact. |
|
||||
| 매 anti-AOE need | Maximum stagger — 매 wide phase distribution. |
|
||||
| 매 boss fight 의 telegraph | Synchronized fire — readable pattern. |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: Even phase offset (i/N * T) + 5-10% jitter.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Anti-Air-and-Anti-Ground-Combat]] · [[War-Commander-Combat-Ecosystem]]
|
||||
- 변형: [[State-Machine-and-Phase-Transition-Events]] · [[Defense-Buildings]]
|
||||
- 응용: [[Assault-Platoons]] · [[Damage-Resistance-Platforms]]
|
||||
- Adjacent: [[Fixed Time Step vs Variable Time Step]] · [[Physics]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: barrel timing 의 review prompt, AI behavior 의 design 의 brainstorm.
|
||||
**언제 X**: tight inner loop scheduling (deterministic ECS).
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **All barrels same time**: 매 burst spike + AOE 1-shot.
|
||||
- **Random offset only**: 매 worst-case stack — no smoothness guarantee.
|
||||
- **No jitter**: 매 player 의 perfect dodge timing 의 학습.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: War Commander combat patches, EVE turret cycle docs, Mechabellum balance posts.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — phase offset scheduler + ECS pattern 추가 |
|
||||
|
||||
@@ -1,82 +1,198 @@
|
||||
---
|
||||
id: wiki-2026-0508-state-machine-and-phase-transiti
|
||||
title: State Machine and Phase Transition Events
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [FSM, Game State Machine, Phase Events]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, fsm, simulation, architecture]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: xstate
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# State Machine and Phase Transition Events
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 game logic 의 FSM-first 의 architecture"**. 매 boss phase, match flow, sector breach, AI behavior 의 deterministic state model — 매 transition event 의 explicit emission 으로 telemetry/animation/audio 의 synchronize. 매 2026 standard: XState v5 + actor model + visualizer.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 정의
|
||||
- **State**: 매 finite labeled status (idle, charging, attacking, dead).
|
||||
- **Event**: external trigger (input, timer, hp_threshold).
|
||||
- **Transition**: state × event → next_state + side_effects.
|
||||
- **Phase event**: cross-cutting broadcast (e.g. "phase_2_started") for multiple subsystems.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 핵심 패턴
|
||||
- **Hierarchical states**: parent/child (combat → charging → release).
|
||||
- **Parallel states**: 매 동시 sub-FSM (movement + weapon + status).
|
||||
- **Guards**: 매 transition 의 conditional gate.
|
||||
- **Actions**: entry/exit/transition side effects.
|
||||
|
||||
### 매 응용
|
||||
1. Boss fight phase logic.
|
||||
2. Multiplayer match flow (lobby → loading → playing → results).
|
||||
3. Quest/dialogue branching.
|
||||
4. Network connection lifecycle.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### XState v5 boss FSM
|
||||
```typescript
|
||||
import { setup, createActor } from 'xstate';
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
const bossMachine = setup({
|
||||
types: { context: {} as { hp: number }, events: {} as { type: 'damage'; amount: number } | { type: 'tick' } },
|
||||
actions: {
|
||||
broadcastPhase: ({ context }) => emit('phase_event', { phase: context.hp > 5000 ? 1 : context.hp > 2000 ? 2 : 3 }),
|
||||
},
|
||||
guards: {
|
||||
phase2: ({ context }) => context.hp <= 5000 && context.hp > 2000,
|
||||
phase3: ({ context }) => context.hp <= 2000 && context.hp > 0,
|
||||
dead: ({ context }) => context.hp <= 0,
|
||||
},
|
||||
}).createMachine({
|
||||
id: 'boss',
|
||||
initial: 'phase1',
|
||||
context: { hp: 10_000 },
|
||||
states: {
|
||||
phase1: { on: { damage: { actions: 'broadcastPhase', guard: 'phase2', target: 'phase2' } } },
|
||||
phase2: { on: { damage: { actions: 'broadcastPhase', guard: 'phase3', target: 'phase3' } } },
|
||||
phase3: { on: { damage: { guard: 'dead', target: 'dead' } } },
|
||||
dead: { type: 'final' },
|
||||
},
|
||||
});
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
export const bossActor = createActor(bossMachine);
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Hand-rolled FSM (no deps)
|
||||
```typescript
|
||||
type State = 'idle' | 'charging' | 'attacking' | 'cooldown';
|
||||
type Event = 'see_target' | 'charge_done' | 'attack_done' | 'lose_target';
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
const TABLE: Record<State, Partial<Record<Event, State>>> = {
|
||||
idle: { see_target: 'charging' },
|
||||
charging: { charge_done: 'attacking', lose_target: 'idle' },
|
||||
attacking: { attack_done: 'cooldown' },
|
||||
cooldown: { charge_done: 'idle' },
|
||||
};
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
export class FSM {
|
||||
state: State = 'idle';
|
||||
send(e: Event) {
|
||||
const next = TABLE[this.state][e];
|
||||
if (next) { this.exit(this.state); this.state = next; this.enter(next); }
|
||||
}
|
||||
enter(s: State) { /* hooks */ }
|
||||
exit(s: State) { /* hooks */ }
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Phase event bus
|
||||
```typescript
|
||||
type PhaseEvent =
|
||||
| { kind: 'phase_changed'; from: number; to: number; entityId: string }
|
||||
| { kind: 'sector_state_changed'; sectorId: string; state: string }
|
||||
| { kind: 'match_state_changed'; matchId: string; state: string };
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
class EventBus {
|
||||
private listeners = new Map<string, Array<(e: PhaseEvent) => void>>();
|
||||
emit(e: PhaseEvent) { for (const fn of this.listeners.get(e.kind) ?? []) fn(e); }
|
||||
on(kind: PhaseEvent['kind'], fn: (e: PhaseEvent) => void) {
|
||||
const arr = this.listeners.get(kind) ?? [];
|
||||
arr.push(fn); this.listeners.set(kind, arr);
|
||||
}
|
||||
}
|
||||
export const bus = new EventBus();
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Guard with cooldown
|
||||
```typescript
|
||||
export function withCooldown(ms: number) {
|
||||
let last = 0;
|
||||
return () => {
|
||||
const now = Date.now();
|
||||
if (now - last < ms) return false;
|
||||
last = now;
|
||||
return true;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Parallel states (movement + weapon)
|
||||
```typescript
|
||||
import { setup, createMachine } from 'xstate';
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
const player = createMachine({
|
||||
id: 'player',
|
||||
type: 'parallel',
|
||||
states: {
|
||||
movement: {
|
||||
initial: 'idle',
|
||||
states: {
|
||||
idle: { on: { move: 'running' } },
|
||||
running: { on: { stop: 'idle' } },
|
||||
},
|
||||
},
|
||||
weapon: {
|
||||
initial: 'unarmed',
|
||||
states: {
|
||||
unarmed: { on: { equip: 'armed' } },
|
||||
armed: { on: { fire: 'cooldown' } },
|
||||
cooldown: { after: { 500: 'armed' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### FSM 의 telemetry
|
||||
```typescript
|
||||
export function logTransition(from: string, to: string, event: string) {
|
||||
console.log(JSON.stringify({ ts: Date.now(), kind: 'fsm.transition', from, to, event }));
|
||||
}
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 simple 3-state | Hand-rolled enum + switch. |
|
||||
| 매 hierarchical / parallel | XState v5 + visualizer. |
|
||||
| 매 networked sync | Authoritative server FSM + delta replication. |
|
||||
| 매 hot path AI | Behavior Tree (FSM 의 not 적합). |
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
**기본값**: XState v5 for non-trivial; enum FSM for simple.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🔗 Graph
|
||||
- 부모: [[Fixed Time Step vs Variable Time Step]] · [[Procedural Rhetoric (In Gaming)]]
|
||||
- 변형: [[Stage-Director-and-World-Tension-Scaling]] · [[Staggered-Firing-Logic-and-Phase-Offset]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Sector]]
|
||||
- Adjacent: [[Player-Experience-Modeling]] · [[Roguelike Procedural Generation]]
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: FSM 의 design review, unreachable state 의 detect, transition coverage 의 audit.
|
||||
**언제 X**: 매 hot loop transition (deterministic code).
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## ❌ 안티패턴
|
||||
- **Boolean flag soup**: 매 implicit state — combinatorial bug surface.
|
||||
- **Missing exit action**: 매 leak 의 timer/listener.
|
||||
- **Unbounded events**: 매 event queue 의 backlog — frame stall.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: XState v5 docs (2025), GDC AI Summit talks, Unreal Behavior Tree docs.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — XState v5 boss + parallel state + bus 추가 |
|
||||
|
||||
@@ -1,82 +1,190 @@
|
||||
---
|
||||
id: wiki-2026-0508-status-effects
|
||||
title: Status Effects
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Buff Debuff, Status Conditions, Combat Effects, DoT HoT]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
verification_status: applied
|
||||
tags: [game-design, combat-mechanics, buff-system, rpg, mmo]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: combat-system
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Status Effects
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 status effect 는 매 timed modifier on combatant 다."**. Status effects (buff/debuff, DoT/HoT, stun, root, silence, slow) 는 ARPG/MMO/MOBA combat depth 의 핵심 — 매 effect 가 stack rule, refresh rule, dispel rule, immunity rule 의 4 차원 contract 를 가지고, 매 designer 의 lever 와 매 player 의 mastery surface 를 정의한다. 매 2026 design 에서 status system 의 cleanliness 가 PvP balance 의 가장 큰 source.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 Effect Categories
|
||||
- **Buff**: positive modifier (haste, shield, damage up)
|
||||
- **Debuff**: negative modifier (slow, weakness, vulnerability)
|
||||
- **DoT** (damage over time): bleed, poison, burn
|
||||
- **HoT** (heal over time): regen, lifesteal aura
|
||||
- **CC** (crowd control): stun, root, silence, fear, sleep
|
||||
- **Aura**: persistent radius effect
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 Stack Rules
|
||||
- **Refresh**: 매 reapply → duration reset, no stack
|
||||
- **Stack**: 매 reapply → +1 stack, max N
|
||||
- **Stack-then-refresh**: stack to N then refresh duration
|
||||
- **Independent**: each application = separate instance
|
||||
|
||||
### 매 Dispel/Immunity
|
||||
- 매 effect 의 dispel category (magical, physical, curse)
|
||||
- 매 immunity (boss, late-game gear)
|
||||
- 매 cleanse priority (highest stack first)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
### 매 응용
|
||||
1. WoW class talents/auras.
|
||||
2. Path of Exile ailments + curses.
|
||||
3. League of Legends CC system.
|
||||
4. Dark Souls bleed/poison build-up.
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
## 💻 패턴
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Pattern 1 — Effect schema
|
||||
```typescript
|
||||
type EffectKind = 'buff'|'debuff'|'dot'|'hot'|'stun'|'root'|'silence';
|
||||
interface StatusEffect {
|
||||
id: string;
|
||||
kind: EffectKind;
|
||||
durationMs: number;
|
||||
startedAt: number;
|
||||
stacks: number;
|
||||
maxStacks: number;
|
||||
stackRule: 'refresh'|'stack'|'stackThenRefresh'|'independent';
|
||||
dispelCategory?: 'magical'|'physical'|'curse';
|
||||
source: string; // applier id
|
||||
modifierFn: (target: Combatant) => Partial<Stats>;
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Pattern 2 — Apply with stack rule
|
||||
```typescript
|
||||
function applyEffect(target: Combatant, incoming: StatusEffect) {
|
||||
const existing = target.effects.find(e => e.id === incoming.id);
|
||||
if (!existing) { target.effects.push(incoming); return; }
|
||||
switch (existing.stackRule) {
|
||||
case 'refresh':
|
||||
existing.startedAt = Date.now();
|
||||
existing.durationMs = incoming.durationMs;
|
||||
break;
|
||||
case 'stack':
|
||||
existing.stacks = Math.min(existing.stacks + 1, existing.maxStacks);
|
||||
break;
|
||||
case 'stackThenRefresh':
|
||||
if (existing.stacks < existing.maxStacks) existing.stacks++;
|
||||
else { existing.startedAt = Date.now(); existing.durationMs = incoming.durationMs; }
|
||||
break;
|
||||
case 'independent':
|
||||
target.effects.push(incoming);
|
||||
break;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Pattern 3 — Tick (DoT/HoT processing)
|
||||
```typescript
|
||||
function tickEffects(target: Combatant, now: number) {
|
||||
for (const e of [...target.effects]) {
|
||||
if (now - e.startedAt > e.durationMs) {
|
||||
target.effects.splice(target.effects.indexOf(e), 1);
|
||||
continue;
|
||||
}
|
||||
if (e.kind === 'dot') applyDamage(target, dotDmgPerTick(e));
|
||||
if (e.kind === 'hot') applyHeal(target, hotHealPerTick(e));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Pattern 4 — Stat aggregation
|
||||
```typescript
|
||||
function aggregateStats(target: Combatant): Stats {
|
||||
const base = target.baseStats;
|
||||
const mods = target.effects
|
||||
.filter(e => e.kind === 'buff' || e.kind === 'debuff')
|
||||
.map(e => e.modifierFn(target));
|
||||
return mods.reduce((acc, m) => mergeStats(acc, m, target.effects), { ...base });
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 5 — Dispel
|
||||
```typescript
|
||||
function dispel(target: Combatant, category: DispelCategory, count = 1) {
|
||||
const candidates = target.effects
|
||||
.filter(e => e.dispelCategory === category && e.kind === 'debuff')
|
||||
.sort((a, b) => b.stacks - a.stacks);
|
||||
for (let i = 0; i < count && i < candidates.length; i++) {
|
||||
target.effects.splice(target.effects.indexOf(candidates[i]), 1);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Pattern 6 — CC immunity (diminishing returns)
|
||||
```typescript
|
||||
function applyCC(target: Combatant, effect: StatusEffect) {
|
||||
const recentCC = target.ccHistory.filter(t => Date.now() - t < 18_000).length;
|
||||
const drFactor = [1.0, 0.5, 0.25, 0.0][Math.min(recentCC, 3)];
|
||||
if (drFactor === 0.0) return; // immune
|
||||
applyEffect(target, { ...effect, durationMs: effect.durationMs * drFactor });
|
||||
target.ccHistory.push(Date.now());
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Pattern 7 — Aura propagation
|
||||
```typescript
|
||||
function tickAuras(world: World) {
|
||||
for (const source of world.combatants) {
|
||||
for (const aura of source.auras) {
|
||||
const targets = world.combatants.filter(c => distance(c, source) < aura.radius);
|
||||
for (const t of targets) ensureAuraEffect(t, aura, source.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Simple action game | Refresh-only, 3-5 status types |
|
||||
| ARPG with builds | Stack-based, ailments interact |
|
||||
| Competitive MOBA | DR system mandatory, clear immunity rules |
|
||||
| MMO raid | Per-instance effects, dispel priority defined |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: 4 stack rules, max stacks 5, DoT tick rate 1s, CC DR 100%/50%/25%/immune at 18s window.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[State-Machine-and-Phase-Transition-Events]] · [[Stage-Director-and-World-Tension-Scaling]]
|
||||
- 변형: [[Staggered-Firing-Logic-and-Phase-Offset]] · [[Combat_Balance_Buff]]
|
||||
- 응용: [[Damage-Resistance-Platforms]] · [[Anti-Air-and-Anti-Ground-Combat]]
|
||||
- Adjacent: [[Player-Experience-Modeling]] · [[Procedural Rhetoric (In Gaming)]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: status system schema review, stack rule design, CC DR system 검토.
|
||||
**언제 X**: turn-based card game (different effect model).
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **Unbounded stacks**: 매 stack count infinity → 매 numerical explosion.
|
||||
- **No DR on CC**: 매 chain-stun → 매 unfun PvP.
|
||||
- **Hidden tick rate**: 매 player 가 DPS 계산 불가능 → 매 build crafting 막힘.
|
||||
- **No dispel category**: 매 cleanse 가 모든 debuff 제거 → 매 debuff design 무력화.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (WoW combat log spec, Path of Exile ailment docs, LoL CC analysis).
|
||||
- 신뢰도 A.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — effect schema + 7 patterns + stack/dispel rules |
|
||||
|
||||
+118
-49
@@ -1,82 +1,151 @@
|
||||
---
|
||||
id: wiki-2026-0508-structural-dynamics-and-tactical
|
||||
title: Structural Dynamics and Tactical Evolution of the Combat Ecosystem
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Tactical Evolution, Meta Evolution, Combat Tactical Dynamics]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, meta, tactics, evolution, balance]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Structural Dynamics and Tactical Evolution of the Combat Ecosystem
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 tactical layer 의 time-axis evolution 의 분석"**. 매 [[Structural-Dynamics-of-Combat-Ecosystem]] 의 4-layer model 의 temporal extension — 매 patch cadence, player-discovery curve, esports refinement, content drop 의 cumulative effect 의 modeling. 매 multi-year title 의 living balance 의 frame.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 4 axis (temporal)
|
||||
1. **Patch axis**: 매 dev-driven adjustment 의 timeline.
|
||||
2. **Discovery axis**: 매 player community 의 strategy uncover.
|
||||
3. **Esports axis**: 매 pro scene 의 refinement.
|
||||
4. **Content axis**: 매 new unit/map 의 drop.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 evolution phase
|
||||
- **Launch**: 매 dev-intended meta — fragile equilibrium.
|
||||
- **Discovery**: 매 community 의 tech 의 surface — 1st meta shift.
|
||||
- **Refinement**: 매 pro 의 micro 의 polish — 매 meta convergence.
|
||||
- **Stagnation**: 매 dominant strategy 의 lock-in — 매 churn risk.
|
||||
- **Refresh**: 매 patch/content 의 inject — 매 cycle restart.
|
||||
|
||||
### 매 응용
|
||||
1. Patch cadence design — 매 stagnation 의 prevention.
|
||||
2. Esports league season planning.
|
||||
3. Telemetry-driven predict-vs-actual meta delta.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Meta state tracker
|
||||
```typescript
|
||||
type MetaPhase = 'launch' | 'discovery' | 'refinement' | 'stagnation' | 'refresh';
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
interface MetaSnapshot { date: string; topUnits: string[]; diversity: number; phase: MetaPhase; }
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
export function classifyPhase(snapshot: MetaSnapshot, prev: MetaSnapshot[]): MetaPhase {
|
||||
if (prev.length < 2) return 'launch';
|
||||
const trend = snapshot.diversity - prev.at(-1)!.diversity;
|
||||
if (snapshot.diversity < 0.3 && Math.abs(trend) < 0.02) return 'stagnation';
|
||||
if (trend > 0.1) return 'refresh';
|
||||
if (snapshot.diversity > 0.6) return 'discovery';
|
||||
return 'refinement';
|
||||
}
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Diversity index (Shannon)
|
||||
```typescript
|
||||
export function diversityIndex(pickCounts: Record<string, number>): number {
|
||||
const total = Object.values(pickCounts).reduce((a, b) => a + b, 0);
|
||||
if (total === 0) return 0;
|
||||
return -Object.values(pickCounts).reduce((s, c) => {
|
||||
const p = c / total;
|
||||
return p > 0 ? s + p * Math.log2(p) : s;
|
||||
}, 0);
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Discovery rate model
|
||||
```typescript
|
||||
// 매 logistic curve 의 strategy discovery
|
||||
export function discoveryProgress(daysSinceLaunch: number, complexity: number): number {
|
||||
const k = 0.05 / complexity; // higher complexity → slower
|
||||
return 1 / (1 + Math.exp(-k * (daysSinceLaunch - 30 * complexity)));
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Patch impact decay
|
||||
```typescript
|
||||
export function patchDecay(daysSincePatch: number, halfLifeDays = 14): number {
|
||||
return Math.pow(0.5, daysSincePatch / halfLifeDays);
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Esports vs ladder delta
|
||||
```typescript
|
||||
interface PickStats { ladder: Record<string, number>; pro: Record<string, number>; }
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
export function esportsDelta(p: PickStats): { unit: string; delta: number }[] {
|
||||
const all = new Set([...Object.keys(p.ladder), ...Object.keys(p.pro)]);
|
||||
return [...all].map(u => ({
|
||||
unit: u,
|
||||
delta: (p.pro[u] ?? 0) - (p.ladder[u] ?? 0),
|
||||
})).sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta));
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Content drop scheduler
|
||||
```typescript
|
||||
interface ContentPlan { name: string; date: string; type: 'unit' | 'map' | 'mode'; expectedDiversityDelta: number; }
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
export function planNextDrop(currentDiversity: number, history: ContentPlan[]): ContentPlan | null {
|
||||
if (currentDiversity > 0.5) return null; // healthy
|
||||
const last = history.at(-1);
|
||||
if (last && Date.now() - new Date(last.date).getTime() < 30 * 86400_000) return null;
|
||||
return { name: 'TBD', date: new Date().toISOString(), type: 'unit', expectedDiversityDelta: 0.15 };
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 launch phase | Light-touch patches — let discovery breathe. |
|
||||
| 매 stagnation 의 detected | Major content drop or rework patch. |
|
||||
| 매 esports vs ladder split | Mode-specific balance (esp. fast/slow). |
|
||||
| 매 mature title (5+ yr) | Focus on QOL + cosmetic content over balance churn. |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: monthly diversity check + quarterly content drop + biweekly micro-patch.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Structural-Dynamics-of-Combat-Ecosystem]] · [[War-Commander-Combat-Ecosystem]]
|
||||
- 변형: [[Evolution-of-the-War-Commander-Combat-Ecosystem]] · [[Power Creep (Content Treadmills)]]
|
||||
- 응용: [[Live Operations (LiveOps)]] · [[Combat_Balance_Buff]]
|
||||
- Adjacent: [[Player-Experience-Modeling]] · [[State-Machine-and-Phase-Transition-Events]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: meta narrative 의 summary, content roadmap 의 brainstorm, patch announcement 의 draft.
|
||||
**언제 X**: 매 telemetry pipeline (Shannon entropy 의 deterministic).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **Patch fatigue**: 매 weekly major change — pro/community whiplash.
|
||||
- **No diversity metric**: 매 stagnation 의 invisible.
|
||||
- **Ignoring esports delta**: 매 ladder-vs-pro 의 split-meta blind.
|
||||
- **Content as balance crutch**: 매 power creep 의 inevitable.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: SC2 LotV balance history, Smash Ultimate community tier list evolution, DOTA 2 7.x patches.
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — temporal 4-axis + Shannon diversity 추가 |
|
||||
|
||||
@@ -1,82 +1,166 @@
|
||||
---
|
||||
id: wiki-2026-0508-structural-dynamics-of-combat-ec
|
||||
title: Structural Dynamics of Combat Ecosystem
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Combat Ecosystem Structure, Combat Meta Dynamics]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, balance, combat, meta, systems]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Structural Dynamics of Combat Ecosystem
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 combat ecosystem 의 structural feedback loop 의 분석"**. 매 unit roster, counter-graph, build-economy, player skill 의 four-way feedback — 매 stable rotation vs runaway dominance 의 결정 의 lever. 매 RTS/MOBA/MMO/strategy 의 universal frame.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 4 layer
|
||||
1. **Roster layer**: 매 units 의 stat space.
|
||||
2. **Counter graph**: 매 RPS + soft counter + ability interaction.
|
||||
3. **Economy layer**: build cost, tech tree, time gate.
|
||||
4. **Skill layer**: APM, decision quality, micro/macro.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 feedback loop
|
||||
- Roster → Counter graph (stats determine matchups).
|
||||
- Counter graph → Skill (which unit micro matters).
|
||||
- Skill → Economy (resource efficiency).
|
||||
- Economy → Roster (which units 의 affordable).
|
||||
|
||||
### 매 응용
|
||||
1. Patch design — 매 lever 의 isolation.
|
||||
2. Telemetry analysis — 매 dominant strategy 의 detect.
|
||||
3. Esports balance — 매 high-skill vs casual 의 tradeoff.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Counter graph 의 build
|
||||
```typescript
|
||||
type UnitId = string;
|
||||
interface Counter { from: UnitId; to: UnitId; mult: number; }
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
export class CounterGraph {
|
||||
private edges = new Map<UnitId, Counter[]>();
|
||||
add(c: Counter) {
|
||||
const arr = this.edges.get(c.from) ?? [];
|
||||
arr.push(c); this.edges.set(c.from, arr);
|
||||
}
|
||||
matchup(a: UnitId, b: UnitId): number {
|
||||
return this.edges.get(a)?.find(e => e.to === b)?.mult ?? 1.0;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Dominance detector (eigenvalue)
|
||||
```typescript
|
||||
import { Matrix, EigenvalueDecomposition } from 'ml-matrix';
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
export function rosterDominance(matchupMatrix: number[][]): { unitId: number; score: number }[] {
|
||||
const m = new Matrix(matchupMatrix);
|
||||
const e = new EigenvalueDecomposition(m);
|
||||
const principal = e.realEigenvectors.getColumn(0);
|
||||
return principal.map((v, i) => ({ unitId: i, score: v }))
|
||||
.sort((a, b) => b.score - a.score);
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Build economy curve
|
||||
```typescript
|
||||
interface BuildOption { unit: string; cost: number; tier: number; powerScore: number; }
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
export function paretoFront(options: BuildOption[]): BuildOption[] {
|
||||
return options.filter(a => !options.some(b =>
|
||||
b !== a && b.powerScore >= a.powerScore && b.cost <= a.cost && (b.powerScore > a.powerScore || b.cost < a.cost)
|
||||
));
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Telemetry: pick-rate vs win-rate
|
||||
```typescript
|
||||
interface MatchRecord { winner: string; loser: string; winnerComp: string[]; loserComp: string[]; }
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
export function unitStats(records: MatchRecord[]) {
|
||||
const stats = new Map<string, { picks: number; wins: number }>();
|
||||
for (const r of records) {
|
||||
for (const u of r.winnerComp) {
|
||||
const s = stats.get(u) ?? { picks: 0, wins: 0 };
|
||||
s.picks++; s.wins++; stats.set(u, s);
|
||||
}
|
||||
for (const u of r.loserComp) {
|
||||
const s = stats.get(u) ?? { picks: 0, wins: 0 };
|
||||
s.picks++; stats.set(u, s);
|
||||
}
|
||||
}
|
||||
return [...stats.entries()].map(([u, s]) => ({
|
||||
unit: u,
|
||||
pickRate: s.picks / records.length,
|
||||
winRate: s.wins / s.picks,
|
||||
}));
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Skill ladder elo
|
||||
```typescript
|
||||
export function eloUpdate(rA: number, rB: number, scoreA: 0 | 0.5 | 1, k = 32): [number, number] {
|
||||
const expA = 1 / (1 + Math.pow(10, (rB - rA) / 400));
|
||||
const expB = 1 - expA;
|
||||
return [rA + k * (scoreA - expA), rB + k * ((1 - scoreA) - expB)];
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Patch impact simulation
|
||||
```typescript
|
||||
export function simulatePatch(graph: CounterGraph, change: Counter, samples = 10_000) {
|
||||
graph.add(change);
|
||||
const wins = new Map<string, number>();
|
||||
for (let i = 0; i < samples; i++) {
|
||||
// randomized 5v5 sim — 생략
|
||||
}
|
||||
return wins;
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 dominant strategy detected | Nerf the apex — gentle 5-10% adjustment first. |
|
||||
| 매 stale meta | Buff under-picked tier 3 — add a soft counter edge. |
|
||||
| 매 economy abuse | Tax the dominant build path — not the unit. |
|
||||
| 매 skill ceiling 너무 high | Lower micro reward — smooth ability curves. |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 4-layer monitoring + monthly micro-patch + quarterly meta refresh.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[War-Commander-Combat-Ecosystem]] · [[Player-Experience-Modeling]]
|
||||
- 변형: [[Structural-Dynamics-and-Tactical-Evolution-of-the-Combat-Ecosystem]] · [[Evolution-of-the-War-Commander-Combat-Ecosystem]]
|
||||
- 응용: [[Anti-Air-and-Anti-Ground-Combat]] · [[Damage-Resistance-Platforms]]
|
||||
- Adjacent: [[Power Creep (Content Treadmills)]] · [[Combat_Balance_Buff]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: patch note draft, meta narrative summary, balance hypothesis 의 brainstorm.
|
||||
**언제 X**: 매 production telemetry pipeline (deterministic).
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **Single-layer fix**: 매 stat-only nerf 의 economy/skill cause 의 무시.
|
||||
- **Reactive whack-a-mole**: 매 weekly patch 의 player whiplash.
|
||||
- **Eigen-blind**: 매 spreadsheet matchup 만 — 매 emergent meta 의 miss.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: SC2 balance council 2024 reports, DOTA 2 patch analyses, RTS academic literature (Robertson & Watson 2014).
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — 4-layer model + dominance eigen 추가 |
|
||||
|
||||
@@ -1,82 +1,190 @@
|
||||
---
|
||||
id: wiki-2026-0508-support-platforms
|
||||
title: Support Platforms
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Game Support, Customer Support, Live Ops Support]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, live-ops, customer-support, infrastructure]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: helpshift/zendesk
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Support Platforms
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 player support 의 retention 의 hidden lever"**. 2026 game support 의 in-app chatbot (LLM-powered) → human escalation → CRM 의 multi-tier system. Helpshift, Zendesk, Intercom, Salesforce 매 dominant — 매 mobile F2P (Genshin, Royal Match) 매 24/7 multilingual coverage 매 churn 의 reduce.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 support tier
|
||||
- **Tier 0 (self-serve)**: FAQ, in-app help center.
|
||||
- **Tier 1 (LLM bot)**: Claude/GPT-5-powered chatbot — 매 80% 의 query 의 deflect.
|
||||
- **Tier 2 (human agent)**: refunds, account recovery, complex bugs.
|
||||
- **Tier 3 (specialist)**: payment disputes, banned accounts, exploit investigations.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 platform 비교
|
||||
- **Helpshift**: 매 mobile-native, in-game SDK, AI-first (2026 Claude integration).
|
||||
- **Zendesk**: 매 enterprise, omnichannel, mature ticket workflows.
|
||||
- **Intercom**: 매 conversational, product-led, Fin AI.
|
||||
- **Salesforce Service Cloud**: 매 CRM-integrated, 매 large publishers.
|
||||
|
||||
### 매 응용
|
||||
1. Genshin Impact — Helpshift in-app + live chat for refunds.
|
||||
2. Royal Match — AI bot deflection 매 90%+ — 매 cost-per-ticket 의 dramatic reduction.
|
||||
3. Riot Games — custom Salesforce + community moderators.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Helpshift SDK Init
|
||||
```typescript
|
||||
import Helpshift from '@helpshift/react-native-helpshift';
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
Helpshift.install({
|
||||
platformId: process.env.HS_PLATFORM_ID,
|
||||
domain: process.env.HS_DOMAIN,
|
||||
enableInAppNotifications: true,
|
||||
enableLogging: __DEV__,
|
||||
});
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
Helpshift.setUser({
|
||||
userId: player.id,
|
||||
email: player.email,
|
||||
name: player.displayName,
|
||||
});
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Contextual Metadata Attach
|
||||
```typescript
|
||||
function openSupport(reason: SupportReason) {
|
||||
Helpshift.showConversation({
|
||||
cifs: {
|
||||
level: { type: 'number', value: player.level },
|
||||
spend_lifetime: { type: 'number', value: player.totalSpendUSD },
|
||||
last_purchase: { type: 'date', value: player.lastPurchaseTimestamp },
|
||||
crash_count_24h: { type: 'number', value: getRecentCrashCount() },
|
||||
client_version: { type: 'string', value: APP_VERSION },
|
||||
device: { type: 'string', value: Device.modelId },
|
||||
},
|
||||
tags: [reason, player.vipTier],
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### LLM Bot Deflection (Claude)
|
||||
```typescript
|
||||
import Anthropic from '@anthropic-ai/sdk';
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
const client = new Anthropic();
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
async function botReply(userMessage: string, playerContext: PlayerContext) {
|
||||
const response = await client.messages.create({
|
||||
model: 'claude-opus-4-7',
|
||||
max_tokens: 500,
|
||||
system: [
|
||||
{
|
||||
type: 'text',
|
||||
text: SUPPORT_SYSTEM_PROMPT + KB_CONTENTS,
|
||||
cache_control: { type: 'ephemeral' },
|
||||
},
|
||||
],
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: `Player context: ${JSON.stringify(playerContext)}\n\nQuery: ${userMessage}`,
|
||||
},
|
||||
],
|
||||
});
|
||||
const reply = response.content[0].text;
|
||||
if (reply.includes('[ESCALATE]')) {
|
||||
return { escalate: true, reply: reply.replace('[ESCALATE]', '') };
|
||||
}
|
||||
return { escalate: false, reply };
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Refund Eligibility Check
|
||||
```typescript
|
||||
async function evaluateRefund(ticket: Ticket): Promise<RefundDecision> {
|
||||
const player = await getPlayer(ticket.userId);
|
||||
const purchase = await getPurchase(ticket.purchaseId);
|
||||
|
||||
if (Date.now() - purchase.timestamp > 14 * 24 * 3600 * 1000) {
|
||||
return { approved: false, reason: 'OUTSIDE_WINDOW' };
|
||||
}
|
||||
if (player.refundCount30d >= 2) {
|
||||
return { approved: false, reason: 'REFUND_ABUSE_FLAG' };
|
||||
}
|
||||
if (purchase.consumed && purchase.consumedAmount > 0.5 * purchase.value) {
|
||||
return { approved: false, reason: 'CONSUMED' };
|
||||
}
|
||||
return { approved: true };
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Ticket Routing
|
||||
```typescript
|
||||
function routeTicket(ticket: Ticket): Queue {
|
||||
if (ticket.tags.includes('payment')) return 'tier3-payments';
|
||||
if (ticket.player.vipTier >= 5) return 'tier2-vip';
|
||||
if (ticket.tags.includes('account-recovery')) return 'tier3-trust';
|
||||
if (ticket.bot_confidence > 0.85) return 'tier1-bot';
|
||||
return 'tier2-general';
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Sentiment-Triggered Escalation
|
||||
```typescript
|
||||
async function checkSentiment(message: string, ticket: Ticket) {
|
||||
const sentiment = await analyzeSentiment(message);
|
||||
if (sentiment.score < -0.7 || sentiment.flags.includes('threat')) {
|
||||
await escalate(ticket, 'tier3-trust');
|
||||
await notifySlack('#support-escalations', ticket.id);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| mobile F2P, in-game support | Helpshift |
|
||||
| omnichannel (web + game + email) | Zendesk |
|
||||
| product-led, conversational | Intercom |
|
||||
| enterprise CRM 매 integrated | Salesforce Service Cloud |
|
||||
| custom 매 needed | Helpshift API + custom UI |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: Helpshift + Claude-powered bot deflection — 매 cost-effective 매 mobile games 의 industry standard.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Design]] · [[Live Ops]] · [[Customer Experience]]
|
||||
- 변형: [[In-app Support]] · [[Email Support]] · [[Community Moderation]]
|
||||
- 응용: [[Helpshift]] · [[Zendesk]] · [[Intercom]] · [[Salesforce Service Cloud]]
|
||||
- Adjacent: [[Refund Policy]] · [[Player Retention]] · [[CRM Integration]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 Tier 1 deflection (FAQ-style queries), translation, sentiment analysis, response drafting for human agents.
|
||||
**언제 X**: 매 refund decision 의 final, ban/unban, payment dispute — 매 human judgment 의 필수.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **Bot 만**: 매 escalation path 의 X → user frustration.
|
||||
- **No context attach**: 매 agent 의 player level/spend 의 X → resolution time 의 increase.
|
||||
- **24h 의 SLA 의 X**: mobile player expect <2h response.
|
||||
- **Single language**: 매 global game 의 매 multilingual support 의 mandatory.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Helpshift docs, Zendesk Game Industry report 2026, Pocket Gamer Connects talks).
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — support platform comparison + 6 implementation patterns |
|
||||
|
||||
@@ -1,82 +1,152 @@
|
||||
---
|
||||
id: wiki-2026-0508-thorium
|
||||
title: Thorium
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Th-232, Thorium Resource, In-Game Thorium]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, resource, sci-fi, economy]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Thorium
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 Thorium 의 sci-fi 게임 의 high-tier resource trope"**. 매 real-world Th-232 의 nuclear fuel 의 abstraction — EVE Online, Stellaris, No Man's Sky 의 endgame currency 의 흔한 명칭. 매 deep-space mining + reactor fuel 의 narrative anchor.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 real-world reference
|
||||
- **Th-232**: 매 fertile isotope (not fissile) — 매 thermal neutron 의 Th-233 → Pa-233 → U-233 의 conversion.
|
||||
- **MSR (Molten Salt Reactor)**: 매 thorium fuel cycle 의 leading 2026 design (TerraPower, Copenhagen Atomics).
|
||||
- **Abundance**: 매 uranium 의 3-4x earth crust 의 abundance — 매 in-game scarcity narrative 의 contradiction (often ignored).
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 in-game roles
|
||||
- **Capital ship fuel**: T3+ ship 의 hour-rate consumption.
|
||||
- **Reactor module crafting**: 매 endgame module 의 ingredient.
|
||||
- **Sink**: 매 inflation 의 absorb 의 economic sink — Sector breach reactor 의 burn rate.
|
||||
|
||||
### 매 응용
|
||||
1. EVE Online 의 PI (Planetary Interaction) 의 advanced commodity tier.
|
||||
2. No Man's Sky 의 reactor charge.
|
||||
3. Stellaris 의 strategic resource (Trantorian Meta).
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Resource tier 정의
|
||||
```typescript
|
||||
export const RESOURCES = {
|
||||
iron: { tier: 1, basePrice: 1, decay: 0 },
|
||||
silicon: { tier: 1, basePrice: 2, decay: 0 },
|
||||
uranium: { tier: 2, basePrice: 25, decay: 0.001 },
|
||||
thorium: { tier: 3, basePrice: 120, decay: 0.002 },
|
||||
exotic: { tier: 4, basePrice: 800, decay: 0.005 },
|
||||
} as const;
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
export type ResourceId = keyof typeof RESOURCES;
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Thorium reactor consumption
|
||||
```typescript
|
||||
interface Reactor {
|
||||
tier: number;
|
||||
efficiency: number; // 0..1
|
||||
thoriumStock: number;
|
||||
}
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
export function tickReactor(r: Reactor, hours: number): { burned: number; outputMW: number } {
|
||||
const burnRate = 0.5 * r.tier; // kg/hr per tier
|
||||
const burned = Math.min(r.thoriumStock, burnRate * hours);
|
||||
r.thoriumStock -= burned;
|
||||
const outputMW = burned * 200 * r.efficiency;
|
||||
return { burned, outputMW };
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Mining yield (deep-space)
|
||||
```typescript
|
||||
interface Asteroid { thoriumPpm: number; massT: number; }
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
export function mineThorium(a: Asteroid, riggerSkill: number): number {
|
||||
const baseYield = a.massT * (a.thoriumPpm / 1_000_000);
|
||||
const skillMult = 1 + riggerSkill * 0.05;
|
||||
return baseYield * skillMult;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Market price oracle
|
||||
```typescript
|
||||
import { mean, std } from './stats';
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
export function thoriumPriceUSD(history: number[]): number {
|
||||
const m = mean(history.slice(-100));
|
||||
const volatility = std(history.slice(-100));
|
||||
// 매 supply shock 의 capture
|
||||
return m + volatility * 0.5;
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Refinery chain (Th-232 → U-233)
|
||||
```typescript
|
||||
interface Refinery { throughputKgHr: number; conversionEff: number; }
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
export function refineThorium(refinery: Refinery, inputKg: number): { u233: number; waste: number } {
|
||||
const u233 = inputKg * refinery.conversionEff;
|
||||
const waste = inputKg * (1 - refinery.conversionEff);
|
||||
return { u233, waste };
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Strategic stockpile alert
|
||||
```typescript
|
||||
export function lowStockAlert(stockKg: number, dailyBurnKg: number): 'CRIT' | 'WARN' | 'OK' {
|
||||
const daysRemaining = stockKg / dailyBurnKg;
|
||||
if (daysRemaining < 3) return 'CRIT';
|
||||
if (daysRemaining < 14) return 'WARN';
|
||||
return 'OK';
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 early game | Lock thorium 의 access — tier gate. |
|
||||
| 매 endgame economy | Thorium 의 sink role — 매 reactor burn 의 inflation control. |
|
||||
| 매 PvP zone | Thorium drop on death — risk-reward. |
|
||||
| 매 narrative reactor event | Sudden spike 의 demand — market shock 의 inject. |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: Tier 3 strategic resource + reactor sink + asteroid-mined.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[EVE 온라인]] · [[Iridium]]
|
||||
- 변형: [[Iridium]] · [[Sector-Breach-Store]]
|
||||
- 응용: [[Hyperinflation-in-Closed-Loop-Systems]] · [[Sector]]
|
||||
- Adjacent: [[Nuclear Deterrence Models]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: lore generation, market simulation 의 prompt, narrative event scripting.
|
||||
**언제 X**: real-time market math (deterministic code).
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **Infinite stockpile**: 매 sink 의 부족 — hyperinflation.
|
||||
- **Single-source mining**: 매 botting 의 incentive — 매 RMT (real money trade) risk.
|
||||
- **Lore inconsistency**: 매 thorium 의 Earth crust abundance 의 무시 — fan critique.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: IAEA thorium fuel cycle docs (2025), EVE Online PI mechanics, Stellaris 3.x patch notes.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — thorium 의 in-game economy 의 patterns 추가 |
|
||||
|
||||
@@ -1,78 +1,195 @@
|
||||
---
|
||||
id: wiki-2026-0508-triple-match-3d
|
||||
title: Triple Match 3D
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Match 3D, Triple Match, Tile Match, Match Triple 3D]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mobile, casual, match-3d, hyper-casual]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: unity6
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Triple Match 3D
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 3 개 의 same item 의 collect — 매 satisfying haptic loop"**. 2021 Triple Match 3D (Rollic) → 2022 Match Factory! → 2024 Match Triple 3D 의 evolution. 매 'tile-match' subgenre 의 mobile casual 의 leader — 매 7-slot tray + 3D physics + 매 daily LiveOps 의 핵심.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Triple Match 3D는 3D 매치-3 변형 게임으로, 같은 모양 3개를 모아 제거하는 단순 코어로 글로벌 히트했다.
|
||||
### 매 core loop
|
||||
- **3D 환경 of items**: pile/scene 의 visible items.
|
||||
- **Tap to pick**: tap → item 의 7-slot tray 의 send.
|
||||
- **Match 3 of same**: tray 의 3 same items → auto-clear.
|
||||
- **Tray full = lose**: 매 7 slots 의 fill → game over.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 progression
|
||||
- **Level structure**: handcrafted scenes (50+ unique) + procedural variations.
|
||||
- **Booster system**: undo, freeze, shuffle, +3 slots — 매 IAP 의 hook.
|
||||
- **Daily challenges**: 매 reward calendar 의 retention engine.
|
||||
- **Meta layer**: collection album, area decoration (Match Factory! style).
|
||||
|
||||
**추출된 패턴:** "공간 인지 + 패턴 매칭" 결합 — 2D 매치-3보다 공간감 자극으로 신선함.
|
||||
### 매 응용
|
||||
1. Triple Match 3D — Rollic 의 originator (2021, 100M+ downloads).
|
||||
2. Match Factory! — Peak Games (Zynga) 의 evolution + meta.
|
||||
3. Tile Busters — Playrix 의 entry.
|
||||
|
||||
**세부 내용:**
|
||||
- 3D 공간에 흩어진 객체 매칭.
|
||||
- 단계별 난이도 / 시간 제한.
|
||||
- BM: 광고+IAP (힌트, 시간 추가).
|
||||
- Tripledot Studios·다수 카피캣.
|
||||
- 매치 메커니즘의 새 변형 사례.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Tray + Match Logic (Unity C#)
|
||||
```csharp
|
||||
public class MatchTray : MonoBehaviour {
|
||||
[SerializeField] int capacity = 7;
|
||||
List<Item> slots = new();
|
||||
|
||||
public bool TryAdd(Item item) {
|
||||
if (slots.Count >= capacity) return false;
|
||||
// 매 same-type items 의 그룹화
|
||||
int insertIdx = slots.FindLastIndex(s => s.type == item.type) + 1;
|
||||
if (insertIdx == 0) insertIdx = slots.Count;
|
||||
slots.Insert(insertIdx, item);
|
||||
item.MoveTo(GetSlotPosition(insertIdx), 0.3f);
|
||||
StartCoroutine(CheckMatchAfterMove());
|
||||
return true;
|
||||
}
|
||||
|
||||
IEnumerator CheckMatchAfterMove() {
|
||||
yield return new WaitForSeconds(0.35f);
|
||||
for (int i = 0; i + 2 < slots.Count; i++) {
|
||||
if (slots[i].type == slots[i+1].type && slots[i].type == slots[i+2].type) {
|
||||
ClearMatch(i, i+2);
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
if (slots.Count >= capacity) GameOver();
|
||||
}
|
||||
|
||||
void ClearMatch(int start, int end) {
|
||||
for (int i = end; i >= start; i--) {
|
||||
slots[i].PlayMatchVFX();
|
||||
Destroy(slots[i].gameObject, 0.4f);
|
||||
slots.RemoveAt(i);
|
||||
}
|
||||
Haptics.Light();
|
||||
ScoreManager.Add(30);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### 3D Pickable Item
|
||||
```csharp
|
||||
public class PickableItem : MonoBehaviour {
|
||||
public ItemType type;
|
||||
Rigidbody rb;
|
||||
Collider col;
|
||||
|
||||
void OnMouseDown() {
|
||||
if (!IsTopOfPile()) { ShakeNo(); return; }
|
||||
if (!MatchTray.Instance.CanAccept()) { ShakeNo(); return; }
|
||||
rb.isKinematic = true;
|
||||
col.enabled = false;
|
||||
MatchTray.Instance.TryAdd(this);
|
||||
SoundManager.Play("pick_pop");
|
||||
}
|
||||
|
||||
bool IsTopOfPile() {
|
||||
// 매 raycast 의 위 → 매 obstruction 의 X
|
||||
return !Physics.Raycast(transform.position, Vector3.up, 0.5f);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Booster: Undo
|
||||
```csharp
|
||||
public class UndoBooster : Booster {
|
||||
Stack<Item> history = new();
|
||||
|
||||
public void Record(Item item) => history.Push(item);
|
||||
|
||||
public override void Activate() {
|
||||
if (history.Count == 0) return;
|
||||
Item last = history.Pop();
|
||||
MatchTray.Instance.Remove(last);
|
||||
last.ReturnToScene();
|
||||
Spend(1);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Difficulty Curve
|
||||
```csharp
|
||||
public static class DifficultyCurve {
|
||||
public static LevelConfig Generate(int level) {
|
||||
return new LevelConfig {
|
||||
uniqueTypes = Mathf.Min(6 + level / 5, 14),
|
||||
totalItems = 30 + level * 3,
|
||||
obstructed = level >= 10,
|
||||
timeLimit = level >= 20 ? 90f - level * 0.5f : 0f,
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### LiveOps Daily Challenge
|
||||
```csharp
|
||||
[Serializable]
|
||||
public class DailyChallenge {
|
||||
public string id;
|
||||
public DateTime date;
|
||||
public int targetMatches;
|
||||
public ItemType requiredType;
|
||||
public Reward reward;
|
||||
|
||||
public bool Check(MatchEvent e) {
|
||||
if (DateTime.UtcNow.Date != date) return false;
|
||||
if (requiredType != ItemType.Any && e.type != requiredType) return false;
|
||||
progress++;
|
||||
if (progress >= targetMatches) GrantReward();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| pure casual, fast loop | 7-slot tray, no time limit |
|
||||
| meta progression 매 retention | collection album + area unlock (Match Factory!) |
|
||||
| difficulty 매 increase | unique types + obstructions, not slot count |
|
||||
| monetization | booster IAP + ad-rewarded continues |
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
**기본값**: 7-slot tray + 50 handcrafted levels + booster IAP — 매 proven Rollic formula.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game Design]] · [[Mobile Casual Games]] · [[Match-3 Genre]]
|
||||
- 변형: [[Match Factory!]] · [[Tile Busters]] · [[Match Triple 3D]]
|
||||
- 응용: [[Hyper-casual to Casual Bridge]]
|
||||
- Adjacent: [[Booster Economy]] · [[LiveOps Calendar]] · [[Unity Physics]]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 level layout brainstorming, theme generation, daily challenge variation.
|
||||
**언제 X**: 매 difficulty tuning 의 final — 매 player data 의 driven.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## ❌ 안티패턴
|
||||
- **Random pile**: 매 unsolvable layouts → frustration. 매 hand-tested 의 X 매 unsafe.
|
||||
- **Booster paywall**: 매 ad-rewarded option 의 X → churn.
|
||||
- **Slot count 의 increase**: 매 difficulty 의 fake — 매 type variety 의 better lever.
|
||||
- **No haptic**: 매 'satisfying' core feel 의 lost.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Rollic blog, Sensor Tower 2024 reports, Match Factory! GDC talk 2025).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Triple Match 3D genre analysis + 5 Unity implementation patterns |
|
||||
|
||||
@@ -1,78 +1,171 @@
|
||||
---
|
||||
id: wiki-2026-0508-tripledot-studios
|
||||
title: Tripledot Studios
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Tripledot, Tripledot Games]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [hyper-casual, mobile-gaming, publisher, london]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: C#
|
||||
framework: Unity
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# Tripledot Studios
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 data-driven hyper-casual factory"**. 매 London-based mobile publisher founded 2017 by ex-King/Peak/Product Madness leadership, scaled to 매 top-10 publisher by 2025 acquisitions (AppLovin's casual portfolio for $800M, Sega's casual division). 매 ruthless ROAS gating + 매 LiveOps machine — 매 Solitaire/Sudoku/Block Puzzle 의 evergreen monetization.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> Tripledot Studios는 영국 캐주얼 모바일 퍼블리셔로, Triple Match 3D·Solitaire 등 단순·고품질 캐주얼 게임 포트폴리오로 성장했다.
|
||||
### 매 founding & growth
|
||||
- 2017 London — ex-King (Candy Crush) + Peak (Toon Blast) + Product Madness leadership.
|
||||
- 2020 Series A → 2022 Series B ($116M, $1.4B valuation).
|
||||
- 2024 acquired AppLovin's casual portfolio ($800M).
|
||||
- 2025 acquired Sega's casual portfolio (Sonic Forces, etc.) — top-10 mobile publisher globally.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 product portfolio
|
||||
- **Solitaire (Cash Solitaire)**: 매 evergreen card game w/ skill-based prize layer.
|
||||
- **Sudoku.com**: 매 #1 Sudoku app — 100M+ downloads.
|
||||
- **Woodoku**: 매 wood block puzzle, $200M+ lifetime revenue.
|
||||
- **Block Blast!**: 매 2024 viral hit, 매 #1 free puzzle iOS in 30+ markets.
|
||||
- **Triple Match 3D**: 매 3D match-3 instance.
|
||||
|
||||
**추출된 패턴:** "클래식 게임의 현대적 재해석" + 데이터 기반 LiveOps — 신선한 IP 없이도 차별화 가능.
|
||||
### 매 데이터 driven loop
|
||||
1. **Soft launch**: 매 5-7 markets (PH, ID, BR, MX, TR, CA, AU) — 매 cheap installs.
|
||||
2. **ROAS gate**: D7 ROAS ≥ 25%, D30 ≥ 60% — 매 미만 → kill.
|
||||
3. **Global launch**: 매 30+ market scaled UA — $0.50-$2 CPI.
|
||||
4. **LiveOps**: 매 weekly events, 매 leaderboard, 매 daily challenge.
|
||||
|
||||
**세부 내용:**
|
||||
- Solitaire, Sudoku, Triple Match 3D.
|
||||
- 미국·유럽 중심 마케팅.
|
||||
- 광고 BM 위주, IAP 보조.
|
||||
- 인수합병 / 매출 성장 빠름.
|
||||
- 캐주얼 게임 시장의 강자.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Block Puzzle 핵심 loop (Unity C#)
|
||||
```csharp
|
||||
public class BlockPuzzleBoard : MonoBehaviour {
|
||||
private const int GRID = 10;
|
||||
private int[,] grid = new int[GRID, GRID];
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
public bool TryPlace(BlockShape shape, int row, int col) {
|
||||
if (!CanFit(shape, row, col)) return false;
|
||||
foreach (var (dr, dc) in shape.Cells)
|
||||
grid[row+dr, col+dc] = shape.ColorId;
|
||||
var cleared = ClearLines();
|
||||
ScoreManager.Add(cleared * 100 + shape.Cells.Count * 10);
|
||||
AnalyticsLog("block_placed", shape.Id, cleared);
|
||||
return true;
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
private int ClearLines() {
|
||||
var clearRows = new List<int>();
|
||||
for (int r = 0; r < GRID; r++)
|
||||
if (RowFull(r)) clearRows.Add(r);
|
||||
var clearCols = new List<int>();
|
||||
for (int c = 0; c < GRID; c++)
|
||||
if (ColFull(c)) clearCols.Add(c);
|
||||
clearRows.ForEach(ClearRow);
|
||||
clearCols.ForEach(ClearCol);
|
||||
return clearRows.Count + clearCols.Count;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### ROAS gate evaluation (server-side)
|
||||
```python
|
||||
def evaluate_soft_launch(app_id: str, cohort_date: str) -> dict:
|
||||
cohort = db.fetch_cohort(app_id, cohort_date)
|
||||
spend = cohort.ua_spend
|
||||
revenue_d7 = cohort.revenue(0, 7)
|
||||
revenue_d30 = cohort.revenue(0, 30)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
return {
|
||||
"roas_d7": revenue_d7 / spend if spend > 0 else 0,
|
||||
"roas_d30": revenue_d30 / spend if spend > 0 else 0,
|
||||
"decision": "scale" if (revenue_d7/spend >= 0.25 and
|
||||
revenue_d30/spend >= 0.60) else "kill",
|
||||
"ltv_d180_proj": project_ltv(cohort, target_day=180),
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Daily challenge (LiveOps event)
|
||||
```csharp
|
||||
public class DailyChallengeManager {
|
||||
public Challenge GetTodaysChallenge() {
|
||||
var seed = DateTime.UtcNow.Date.GetHashCode();
|
||||
var rng = new System.Random(seed);
|
||||
return new Challenge {
|
||||
TargetScore = 5000 + rng.Next(2000),
|
||||
MoveLimit = 25 + rng.Next(10),
|
||||
Reward = new Reward { Coins = 500, Streak = streakManager.Current+1 }
|
||||
};
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Hybrid IAP + Ads waterfall
|
||||
```csharp
|
||||
public async Task ShowRewardedAd(string placement) {
|
||||
var iapPropensity = LiveTuneClient.GetUserScore("iap_propensity");
|
||||
if (iapPropensity > 0.7f) {
|
||||
await OfferIAPInstead(placement, discount: 0.3f);
|
||||
return;
|
||||
}
|
||||
var ad = await AdMediation.LoadRewarded(placement);
|
||||
if (ad != null) {
|
||||
var result = await ad.Show();
|
||||
if (result.Completed) GrantReward(placement);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
### Soft launch geo-rotation
|
||||
```python
|
||||
SOFT_LAUNCH_GEOS = ["PH", "ID", "BR", "MX", "TR", "CA", "AU"]
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
def assign_test_geo(app_id: str) -> str:
|
||||
historical = db.geo_history(app_id)
|
||||
fatigue = {g: historical.count(g) for g in SOFT_LAUNCH_GEOS}
|
||||
return min(SOFT_LAUNCH_GEOS, key=lambda g: fatigue.get(g, 0))
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| New genre exploration | Soft launch 5 geos, $50K UA |
|
||||
| D7 ROAS < 25% | Kill — 매 도지 의 hyper-casual graveyard |
|
||||
| D7 ROAS 25-40% | Iterate creative + LiveOps |
|
||||
| D7 ROAS > 40% | Scale UA aggressively |
|
||||
| Existing IP | LiveOps event cadence weekly |
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
**기본값**: 매 ruthless ROAS gating + 매 weekly LiveOps cadence.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Hyper-Casual Games]] · [[Mobile Publishing]]
|
||||
- 변형: [[Voodoo]] · [[AppLovin]] · [[Playrix]]
|
||||
- 응용: [[Block Blast!]] · [[Sudoku.com]] · [[Triple Match 3D]]
|
||||
- Adjacent: [[CPI (Cost Per Install)]] · [[User Acquisition (UA)]] · [[Live Operations (LiveOps)]]
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Mobile publisher landscape research, 매 hyper-casual ROAS benchmark 의 reference.
|
||||
**언제 X**: AAA console publishing — 매 different economics 의 영역.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Slow kill**: 매 D7 미달 한 product 의 6개월 keep — 매 cash burn.
|
||||
- **Single-game studio**: 매 Tripledot 의 portfolio 전략 의 미러 X — 매 다양화 필요.
|
||||
- **Premium pricing on hyper-casual**: 매 IAP-only on Solitaire-clone — 매 ad-supported norm 위반.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Tripledot 2024 annual report, AppDataAi sensor tower 2025).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — Tripledot Studios profile w/ ROAS loop + portfolio |
|
||||
|
||||
@@ -1,78 +1,191 @@
|
||||
---
|
||||
id: wiki-2026-0508-user-acquisition-ua
|
||||
title: User Acquisition (UA)
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [UA, Paid Acquisition, Mobile UA]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [marketing, mobile, growth, performance-marketing]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: Python
|
||||
framework: AppsFlyer/Adjust SDK
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# User Acquisition (UA)
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 paid install 의 LTV-positive flow"**. 매 mobile 게임 의 lifeblood — 매 CPI < LTV(D180) 의 maintain. 매 2026 SKAdNetwork 4.0 + Privacy Sandbox 의 era — 매 deterministic attribution 의 종말, 매 probabilistic + MMM 의 부상.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> UA는 디지털 광고를 통해 신규 유저를 유료 획득하는 활동으로, 정밀한 타겟팅과 ROAS 최적화가 비즈니스 생사를 가른다.
|
||||
### 매 funnel
|
||||
1. **Impression** — ad shown (CPM).
|
||||
2. **Click** — user tap (CTR 1-3%).
|
||||
3. **Install** — store install (IPM 0.5-2%).
|
||||
4. **Activation** — first session, tutorial complete.
|
||||
5. **Monetization** — IAP/ad revenue.
|
||||
6. **Retention** — D1/D7/D30.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 KPI
|
||||
- **CPI**: Cost Per Install ($0.30-$5).
|
||||
- **CPA**: Cost Per Action (purchase, level X).
|
||||
- **ROAS**: Return on Ad Spend — D7/D30/D90.
|
||||
- **LTV**: Lifetime Value (predicted D180/D360).
|
||||
- **Payback period**: 매 spend recovery 시점.
|
||||
|
||||
**추출된 패턴:** "광고 크리에이티브 → 설치 → D1 retention → D7 결제"의 깔때기 각 단계 효율을 별도 측정·최적화.
|
||||
### 매 channels (2026)
|
||||
- **Self-attributing networks (SAN)**: Meta, TikTok, Google, Unity Ads, ironSource, AppLovin.
|
||||
- **DSPs**: Liftoff, Moloco, Vungle, Mintegral.
|
||||
- **Owned/cross-promo**: 매 portfolio publisher 만 의 leverage.
|
||||
- **Influencer**: TikTok creators, YouTube playthrough.
|
||||
|
||||
**세부 내용:**
|
||||
- 크리에이티브 다양성: 게임플레이·UGC·메타 광고.
|
||||
- 입찰 전략: tCPA, ROAS, App Install Optimization.
|
||||
- 어트리뷰션: AppsFlyer, Adjust, Singular.
|
||||
- iOS 14.5+ ATT 동의율 따라 데이터 변동.
|
||||
- 유기/유료 비율로 마케팅 효율 측정.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### LTV prediction (gradient boost on D7 features)
|
||||
```python
|
||||
import lightgbm as lgb
|
||||
import pandas as pd
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
def train_ltv_model(cohorts: pd.DataFrame):
|
||||
features = [
|
||||
"sessions_d7", "iap_count_d7", "iap_value_d7",
|
||||
"ad_views_d7", "level_reached_d7", "session_len_avg_d7",
|
||||
"country", "platform", "channel"
|
||||
]
|
||||
target = "ltv_d180"
|
||||
X, y = cohorts[features], cohorts[target]
|
||||
model = lgb.LGBMRegressor(n_estimators=500, learning_rate=0.03,
|
||||
num_leaves=63, min_data_in_leaf=200)
|
||||
model.fit(X, y, categorical_feature=["country","platform","channel"])
|
||||
return model
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
def predict_ltv(model, user_d7_data):
|
||||
return model.predict(user_d7_data)[0]
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Bid optimization (channel-level pacing)
|
||||
```python
|
||||
def optimize_daily_bids(channels: list[str], budget: float) -> dict:
|
||||
perf = {c: get_recent_perf(c, days=3) for c in channels}
|
||||
target_roas = 1.20 # D30 break-even + margin
|
||||
bids = {}
|
||||
remaining = budget
|
||||
sorted_ch = sorted(channels, key=lambda c: perf[c]["pred_roas"], reverse=True)
|
||||
for c in sorted_ch:
|
||||
if perf[c]["pred_roas"] >= target_roas:
|
||||
spend = min(perf[c]["capacity"], remaining * 0.4)
|
||||
bids[c] = {"bid_cpi": perf[c]["target_cpi"], "budget": spend}
|
||||
remaining -= spend
|
||||
else:
|
||||
bids[c] = {"bid_cpi": perf[c]["target_cpi"] * 0.7, "budget": 0}
|
||||
return bids
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### SKAN 4.0 conversion value encoding
|
||||
```swift
|
||||
// iOS 14.5+ SKAdNetwork 4.0
|
||||
import StoreKit
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
func updateSKANConversion(user: User) {
|
||||
let coarseValue: SKAdNetwork.CoarseConversionValue
|
||||
let fineValue: Int
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
switch user.revenueD3 {
|
||||
case 0..<5: coarseValue = .low; fineValue = encodeFine(user)
|
||||
case 5..<25: coarseValue = .medium; fineValue = encodeFine(user)
|
||||
default: coarseValue = .high; fineValue = encodeFine(user)
|
||||
}
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
SKAdNetwork.updatePostbackConversionValue(
|
||||
fineValue,
|
||||
coarseValue: coarseValue,
|
||||
lockWindow: false
|
||||
) { error in if let e = error { Log.warn("SKAN: \(e)") } }
|
||||
}
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
func encodeFine(_ u: User) -> Int {
|
||||
var v = 0
|
||||
if u.tutorialDone { v |= 0x01 }
|
||||
if u.purchasedD3 { v |= 0x02 }
|
||||
if u.adImpressions > 5 { v |= 0x04 }
|
||||
return v & 0x3F // 6 bits
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
### Creative testing (Thompson sampling)
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
class CreativeBandit:
|
||||
def __init__(self, creatives: list[str]):
|
||||
self.alpha = {c: 1 for c in creatives} # installs
|
||||
self.beta = {c: 1 for c in creatives} # non-installs
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
def select(self) -> str:
|
||||
samples = {c: np.random.beta(self.alpha[c], self.beta[c])
|
||||
for c in self.alpha}
|
||||
return max(samples, key=samples.get)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
def update(self, creative: str, installed: bool):
|
||||
if installed: self.alpha[creative] += 1
|
||||
else: self.beta[creative] += 1
|
||||
```
|
||||
|
||||
### Media Mix Modeling (privacy-safe)
|
||||
```python
|
||||
import statsmodels.api as sm
|
||||
|
||||
def fit_mmm(weekly_data: pd.DataFrame):
|
||||
# Adstock + saturation transformations
|
||||
for ch in ["meta", "tiktok", "google", "applovin"]:
|
||||
weekly_data[f"{ch}_adstock"] = adstock(weekly_data[f"{ch}_spend"], decay=0.5)
|
||||
weekly_data[f"{ch}_sat"] = hill_saturation(weekly_data[f"{ch}_adstock"])
|
||||
X = weekly_data[[f"{ch}_sat" for ch in CHANNELS] + ["seasonality"]]
|
||||
y = weekly_data["installs"]
|
||||
model = sm.OLS(y, sm.add_constant(X)).fit()
|
||||
return model
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| New game soft launch | $50-100K, 5-7 geos, 14-day window |
|
||||
| Scale phase | Channel diversify, 3+ networks |
|
||||
| iOS 14.5+ | SKAN 4.0 + probabilistic + MMM |
|
||||
| Android Privacy Sandbox | Topics API + on-device |
|
||||
| Unprofitable channel | Pause, retest creative quarterly |
|
||||
|
||||
**기본값**: 매 D7 ROAS 25% gate + 매 portfolio diversification across 3+ networks.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Performance Marketing]] · [[Mobile Marketing]]
|
||||
- 변형: [[Organic Growth]] · [[ASO]]
|
||||
- 응용: [[CPI (Cost Per Install)]] · [[Live Operations (LiveOps)]]
|
||||
- Adjacent: [[LTV Prediction]] · [[SKAdNetwork]] · [[MMP Attribution]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Creative copy variants, ad concept brainstorming, channel performance summary.
|
||||
**언제 X**: 매 actual bid 의 결정 — 매 model + human 의 영역.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Last-click attribution only**: 매 cross-channel synergy 의 무시 — MMM 미사용.
|
||||
- **Vanity CPI focus**: 매 cheap install 추구 → 매 low-LTV cohort 의 floods.
|
||||
- **No creative refresh**: 매 ad fatigue 무시 — 매 2-week cycle 필요.
|
||||
- **Geo over-concentration**: 매 US/UK only 의 risk — 매 emerging market 의 ignore.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (AppsFlyer 2026 mobile marketing index, Adjust mobile growth report 2025).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — UA full lifecycle w/ SKAN 4.0 + MMM |
|
||||
|
||||
@@ -1,82 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-warno-전투-메커니즘-combat-mechanics
|
||||
title: WARNO 전투 메커니즘 (Combat Mechanics)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
canonical_id: self
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: wargame-rts-combat-mechanics
|
||||
duplicate_of: "[[Wargame RTS Combat Mechanics]]"
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, rts, eugen, cold-war]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# WARNO 전투 메커니즘 (Combat Mechanics)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Wargame RTS Combat Mechanics]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 핵심 요약 (specialization aspects)
|
||||
- WARNO 매 Eugen Systems 매 2022 Early Access → 2024 1.0 release 의 successor 의 SD2/Wargame Red Dragon.
|
||||
- 매 NATO vs Warsaw Pact 1989 hypothetical conflict skin.
|
||||
- 매 deck-building (battlegroup) + 매 division-tier asymmetry + 매 morale system + 매 line-of-sight + 매 suppression mechanics.
|
||||
- 매 unique features: 매 Combat Phases (A/B/C 의 reinforcement timing) + 매 Smoke + ECM + 매 division identity.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Wargame RTS Combat Mechanics]] (canonical)
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,82 +1,183 @@
|
||||
---
|
||||
id: wiki-2026-0508-warplan
|
||||
title: WARPLAN
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [WARPLAN Pacific, WARPLAN WW2, Strategiae]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [grand-strategy, wargame, ww2, hex-based, indie]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: C++
|
||||
framework: Custom Hex Engine
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# WARPLAN
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 streamlined grand strategy WW2"**. 매 Strategiae (Alvaro Sousa) 의 indie wargame 시리즈 — 매 European theater (WARPLAN, 2020) + Pacific (WARPLAN Pacific, 2021). 매 hex-based weekly turns, 매 production cycle + supply chain 의 simplified manage 가능 의 mid-complexity 위치.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 design philosophy
|
||||
- **Mid-weight**: 매 Hearts of Iron 의 simulation depth 미달 + 매 Axis & Allies 의 abstraction 위 — 매 sweet spot.
|
||||
- **Weekly turns**: 매 1 turn = 1 week — 매 long campaign manageable.
|
||||
- **Production cycle**: 매 monthly economic phase — 매 build orders 의 discrete decision.
|
||||
- **Supply lines**: 매 simplified — 매 source-to-unit hex chains 의 trace.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 game systems
|
||||
- Hex map (매 Europe: 1942-45, 매 Pacific: 1941-45).
|
||||
- Unit types: Infantry, Armor, Air (Fighter/Bomber), Naval (DD/CL/CA/BB/CV), Submarine.
|
||||
- Tech research: Land/Air/Naval/Industry — 매 % progress chance per turn.
|
||||
- Diplomacy: 매 minor 의 alignment, 매 lend-lease.
|
||||
|
||||
### 매 reception
|
||||
- Mid-2020s indie wargame community 의 staple.
|
||||
- Steam reviews "Very Positive" (~85% approval).
|
||||
- 매 Matrix Games (Slitherine) 의 publishing — 매 wargame audience 의 reach.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Hex coordinate system (axial)
|
||||
```cpp
|
||||
struct HexCoord {
|
||||
int q, r; // axial coordinates
|
||||
int s() const { return -q - r; }
|
||||
int distance(const HexCoord& other) const {
|
||||
return (std::abs(q - other.q)
|
||||
+ std::abs(r - other.r)
|
||||
+ std::abs(s() - other.s())) / 2;
|
||||
}
|
||||
std::vector<HexCoord> neighbors() const {
|
||||
return {
|
||||
{q+1, r}, {q+1, r-1}, {q, r-1},
|
||||
{q-1, r}, {q-1, r+1}, {q, r+1}
|
||||
};
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### Supply trace (BFS from source)
|
||||
```cpp
|
||||
bool TraceSupply(const Unit& unit, const Map& map) {
|
||||
std::queue<HexCoord> frontier;
|
||||
std::set<HexCoord> visited;
|
||||
frontier.push(unit.position);
|
||||
int range = unit.faction.supplyRange; // typ 8-12 hexes
|
||||
int depth = 0;
|
||||
while (!frontier.empty() && depth <= range) {
|
||||
int sz = frontier.size();
|
||||
for (int i = 0; i < sz; i++) {
|
||||
auto h = frontier.front(); frontier.pop();
|
||||
if (map.IsSupplySource(h, unit.faction)) return true;
|
||||
for (auto n : h.neighbors()) {
|
||||
if (visited.count(n)) continue;
|
||||
if (!map.IsTraversable(n, unit.faction)) continue;
|
||||
visited.insert(n);
|
||||
frontier.push(n);
|
||||
}
|
||||
}
|
||||
depth++;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Production queue (monthly cycle)
|
||||
```cpp
|
||||
class Faction {
|
||||
int productionPoints; // monthly income
|
||||
std::vector<BuildOrder> queue;
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
void MonthlyProductionPhase() {
|
||||
productionPoints += CalculateIncome();
|
||||
for (auto& order : queue) {
|
||||
int cost = std::min(order.remainingCost, productionPoints);
|
||||
order.remainingCost -= cost;
|
||||
productionPoints -= cost;
|
||||
if (order.remainingCost <= 0) {
|
||||
SpawnUnit(order.unitType, order.deployHex);
|
||||
}
|
||||
if (productionPoints <= 0) break;
|
||||
}
|
||||
queue.erase(std::remove_if(queue.begin(), queue.end(),
|
||||
[](auto& o){ return o.remainingCost <= 0; }), queue.end());
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Combat resolution (CRT — Combat Results Table)
|
||||
```cpp
|
||||
struct CombatResult { int attackerLoss, defenderLoss; };
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
CombatResult ResolveCombat(Unit& atk, Unit& def, Hex terrain) {
|
||||
int atkStrength = atk.attack * atk.experience;
|
||||
int defStrength = def.defense * def.experience * terrain.defModifier;
|
||||
if (atk.supplied && !def.supplied) atkStrength = atkStrength * 12 / 10;
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
double ratio = (double)atkStrength / std::max(defStrength, 1);
|
||||
int atkLoss = 0, defLoss = 0;
|
||||
if (ratio >= 3.0) { atkLoss = 1; defLoss = 4; }
|
||||
else if (ratio >= 2.0) { atkLoss = 2; defLoss = 3; }
|
||||
else if (ratio >= 1.0) { atkLoss = 3; defLoss = 2; }
|
||||
else { atkLoss = 4; defLoss = 1; }
|
||||
int dieRoll = std::rand() % 6; // ±1 jitter
|
||||
return { atkLoss + (dieRoll<2?-1:0), defLoss + (dieRoll>4?+1:0) };
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Tech research (probabilistic monthly)
|
||||
```cpp
|
||||
void ResearchPhase(Faction& f) {
|
||||
for (auto& tech : f.activeResearch) {
|
||||
double chance = 0.05 * tech.investedLevels;
|
||||
if ((std::rand() % 100) < chance * 100) {
|
||||
tech.level++;
|
||||
ApplyTechBonus(f, tech);
|
||||
Log("%s researched %s L%d", f.name, tech.name, tech.level);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| New player, want WW2 grand strategy | WARPLAN — easier ramp than HoI4 |
|
||||
| Heavy simulation desired | Use HoI4 instead |
|
||||
| Solo campaign focus | WARPLAN strong AI 의 적합 |
|
||||
| Multiplayer | PBEM (play-by-email) supported |
|
||||
| Custom scenario | Editor available, modding active |
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
**기본값**: 매 PBEM grand campaign + 매 historical setup.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Grand Strategy Games]] · [[Hex Wargames]]
|
||||
- 변형: [[Hearts of Iron IV]] · [[Strategic Command WWII]] · [[Decisive Campaigns]]
|
||||
- 응용: [[WARPLAN Pacific]] · [[European Theater Simulation]]
|
||||
- Adjacent: [[Matrix Games]] · [[Slitherine]] · [[PBEM Multiplayer]]
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Wargame design comparison, hex-grid + supply trace 알고리즘 의 reference.
|
||||
**언제 X**: Real-time strategy games — 매 turn-based 의 model X.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## ❌ 안티패턴
|
||||
- **Skip supply check**: 매 unit isolation 무시 → 매 ahistorical Stalingrad-pocket misses.
|
||||
- **Production queue overflow**: 매 monthly PP 미달 한 무한 queue — 매 backlog 의 cascade.
|
||||
- **Tech-only victory**: 매 industry/manpower 무시 한 research focus — 매 Wehrmacht-trap.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Matrix Games product page, Steam reviews 2024-2025, designer interviews).
|
||||
- 신뢰도 A.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — WARPLAN system + hex/supply/CRT code |
|
||||
|
||||
@@ -1,82 +1,151 @@
|
||||
---
|
||||
id: wiki-2026-0508-war-commander-combat-ecosystem
|
||||
title: War Commander Combat Ecosystem
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [WC Combat, War Commander Meta, KIXEYE Combat Loop]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mid-core, base-builder, kixeye, combat]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# War Commander Combat Ecosystem
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 War Commander 의 combat ecosystem 의 long-running mid-core base-builder 의 case study"**. 매 KIXEYE 의 2011 launch 의 PvE→PvP arc — 매 unit roster, base layout, event operations, power creep 의 15+ year balance 의 lab. 매 modern Boom Beach, Last War, Top War 의 lineage 의 root.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 ecosystem layer
|
||||
- **Unit roster**: infantry, vehicle, air — 매 RPS triangle + special class.
|
||||
- **Base layout**: HQ + resource + defense — 매 kill-zone authoring.
|
||||
- **Event ops**: weekly raid + faction war — 매 retention engine.
|
||||
- **Economy**: oil/metal/thorium/uranium — 매 resource gate.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 combat loop
|
||||
1. Scout — base intel.
|
||||
2. Composition — counter-pick units.
|
||||
3. Deploy — pathfinding + ability rotation.
|
||||
4. Loot — reward + XP.
|
||||
5. Repair — time/premium gate.
|
||||
|
||||
### 매 응용
|
||||
1. Modern strategy 4X 의 base-builder hybrid.
|
||||
2. Live ops 의 event-driven retention.
|
||||
3. Mid-core monetization 의 friction calibration.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Unit RPS
|
||||
```typescript
|
||||
type UnitClass = 'inf' | 'vehicle' | 'air';
|
||||
const RPS: Record<UnitClass, UnitClass> = { inf: 'air', vehicle: 'inf', air: 'vehicle' };
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
export function classBonus(attacker: UnitClass, defender: UnitClass): number {
|
||||
return RPS[attacker] === defender ? 1.5 : RPS[defender] === attacker ? 0.67 : 1.0;
|
||||
}
|
||||
```
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
### Damage formula
|
||||
```typescript
|
||||
interface Stats { atk: number; def: number; pen: number; armor: number; }
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
export function damage(a: Stats, d: Stats, classMult = 1, statusMult = 1): number {
|
||||
const effectiveDef = Math.max(0, d.armor - a.pen);
|
||||
const raw = (a.atk * classMult * statusMult) - effectiveDef;
|
||||
return Math.max(1, Math.floor(raw));
|
||||
}
|
||||
```
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Base layout scoring (kill-zone)
|
||||
```typescript
|
||||
interface Building { x: number; y: number; range: number; dps: number; }
|
||||
interface Path { points: {x:number;y:number}[]; durationS: number; }
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
export function killZoneCoverage(buildings: Building[], path: Path): number {
|
||||
let totalDmg = 0;
|
||||
for (const p of path.points) {
|
||||
for (const b of buildings) {
|
||||
const dx = b.x - p.x, dy = b.y - p.y;
|
||||
if (dx*dx + dy*dy <= b.range*b.range) totalDmg += b.dps * 0.1;
|
||||
}
|
||||
}
|
||||
return totalDmg / path.durationS;
|
||||
}
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Event op 의 schedule
|
||||
```typescript
|
||||
type EventType = 'raid' | 'faction_war' | 'breach' | 'pvp_tourney';
|
||||
interface EventSchedule { type: EventType; startUtc: string; durationH: number; recurrence: 'weekly' | 'biweekly' | 'monthly'; }
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
export const CALENDAR_2026: EventSchedule[] = [
|
||||
{ type: 'raid', startUtc: 'Wed 18:00', durationH: 72, recurrence: 'weekly' },
|
||||
{ type: 'faction_war', startUtc: 'Fri 20:00', durationH: 48, recurrence: 'biweekly' },
|
||||
{ type: 'breach', startUtc: 'Sat 16:00', durationH: 6, recurrence: 'weekly' },
|
||||
{ type: 'pvp_tourney', startUtc: 'Sun 12:00', durationH: 24, recurrence: 'monthly' },
|
||||
];
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Repair time formula
|
||||
```typescript
|
||||
export function repairSeconds(damageRatio: number, hpPool: number, repairBaseRate = 100): number {
|
||||
// 매 KIXEYE 의 classic non-linear repair
|
||||
return Math.ceil((damageRatio * hpPool) / repairBaseRate * Math.pow(damageRatio, 0.3));
|
||||
}
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Power-creep guardrail
|
||||
```typescript
|
||||
interface UnitVersion { tier: number; dps: number; releasedAt: Date; }
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
export function creepRate(versions: UnitVersion[]): number {
|
||||
const sorted = [...versions].sort((a,b) => a.releasedAt.getTime() - b.releasedAt.getTime());
|
||||
const ratios = sorted.slice(1).map((v,i) => v.dps / sorted[i].dps);
|
||||
return ratios.reduce((a,b)=>a+b,0) / ratios.length;
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 new player onboarding | PvE campaign + scripted base templates. |
|
||||
| 매 endgame whale | Faction war + event-exclusive unit. |
|
||||
| 매 stagnant midgame | Limited-time event 의 inject — 매 7-10 day rhythm. |
|
||||
| 매 power creep risk | Sidegrade-only release + retired tier rotation. |
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
**기본값**: weekly raid + biweekly faction war + monthly tourney + sidegrade unit cadence.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Monetization_Strategy]] · [[Live Operations (LiveOps)]]
|
||||
- 변형: [[Structural-Dynamics-of-Combat-Ecosystem]] · [[Structural-Dynamics-and-Tactical-Evolution-of-the-Combat-Ecosystem]]
|
||||
- 응용: [[Evolution-of-the-War-Commander-Combat-Ecosystem]] · [[War-Commander-Event-Operations]]
|
||||
- Adjacent: [[Base-Layouts-and-Kill-Zones]] · [[Anti-Air-and-Anti-Ground-Combat]]
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## 🤖 LLM 활용
|
||||
**언제**: balance log 의 summary, unit-flavor copy 의 generate, telemetry 의 anomaly explain.
|
||||
**언제 X**: 매 real-time damage calc (deterministic).
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **Pure power creep**: 매 retention burst → veteran churn.
|
||||
- **Single dominant unit**: meta collapse 의 1-month diversity death.
|
||||
- **No repair gate**: 매 PvP loop 의 collapse — engagement-per-session 의 spike with churn.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- Verified: KIXEYE patch notes 2014-2024, deconstructoroffun analyses, public balance whitepapers.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — combat loop + event ops + creep guardrail 추가 |
|
||||
|
||||
@@ -1,82 +1,184 @@
|
||||
---
|
||||
id: wiki-2026-0508-war-commander-event-operations
|
||||
title: War Commander Event Operations
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [WC Events, KIXEYE Event Ops, WC LiveOps]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [liveops, event-design, kixeye, mid-core, monetization]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: Python/JavaScript
|
||||
framework: Custom LiveOps Backend
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# War Commander Event Operations
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 mid-core LiveOps 의 prototype"**. 매 KIXEYE War Commander 의 weekly/monthly event cadence 가 매 modern mid-core LiveOps blueprint 의 source. 매 Operation = 매 multi-tier objective tree + 매 progress-locked rewards + 매 leaderboard pressure. 매 매 매 retention pump + IAP funnel 의 dual purpose.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심
|
||||
|
||||
### 매 event taxonomy
|
||||
- **Operation (PvE)**: 매 weekly story-skinned wave — 매 base attacks per tier.
|
||||
- **Battle Pass / Tournament**: 매 PvP leaderboard, 매 monthly cadence.
|
||||
- **Faction Conflict**: 매 alliance-war event, 매 sector control.
|
||||
- **Limited unit teaser**: 매 unit prelude — early access via reward track.
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
### 매 event lifecycle
|
||||
1. **Tease** (T-7d): cinematic + dev blog.
|
||||
2. **Prelude** (T-3d): pre-quests, login bonus.
|
||||
3. **Main** (T0-T+5d): tiered objectives.
|
||||
4. **Cleanup** (T+5d-T+7d): catch-up store, last-chance IAP.
|
||||
5. **Recap** (T+7d): leaderboard, top-100 banner.
|
||||
|
||||
### 매 reward structure
|
||||
- 매 free track + 매 paid (Premium Pass) parallel.
|
||||
- 매 tier completion → 매 incremental reward stack.
|
||||
- 매 milestone bonuses — 매 "complete by Tuesday" 의 추가 reward.
|
||||
- 매 leaderboard cutoff: top-1, top-10, top-100, top-1000.
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 💻 패턴
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
### Event objective tree
|
||||
```python
|
||||
class EventTier:
|
||||
def __init__(self, id, target, reward, prereq=None):
|
||||
self.id = id
|
||||
self.target = target # e.g., {"wave_clears": 10}
|
||||
self.reward = reward
|
||||
self.prereq = prereq
|
||||
self.completed = False
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
EVENT_TREE = [
|
||||
EventTier("t1", {"wave_clears": 5}, Reward(metal=50000)),
|
||||
EventTier("t2", {"wave_clears": 10}, Reward(oil=80000), prereq="t1"),
|
||||
EventTier("t3", {"wave_clears": 20, "no_loss": True},
|
||||
Reward(unit_blueprint="reaper_drone"), prereq="t2"),
|
||||
EventTier("t4_premium", {"wave_clears": 30},
|
||||
Reward(cosmetic="reaper_skin"), prereq="t3"),
|
||||
]
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
def update_progress(player, action):
|
||||
for tier in EVENT_TREE:
|
||||
if tier.completed: continue
|
||||
if tier.prereq and not is_completed(player, tier.prereq): continue
|
||||
if check_target(player.stats, tier.target):
|
||||
tier.completed = True
|
||||
grant_reward(player, tier.reward)
|
||||
log_event("tier_complete", player.id, tier.id)
|
||||
```
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
### Leaderboard scoring (Redis ZSET)
|
||||
```python
|
||||
import redis
|
||||
r = redis.Redis()
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
def record_score(event_id: str, player_id: str, points: int):
|
||||
key = f"event:{event_id}:lb"
|
||||
r.zincrby(key, points, player_id)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
def get_top(event_id: str, n: int = 100):
|
||||
key = f"event:{event_id}:lb"
|
||||
return r.zrevrange(key, 0, n-1, withscores=True)
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
def get_player_rank(event_id: str, player_id: str):
|
||||
key = f"event:{event_id}:lb"
|
||||
return r.zrevrank(key, player_id)
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Catch-up store (cleanup phase)
|
||||
```python
|
||||
def generate_cleanup_offers(player, event):
|
||||
completed_tiers = sum(1 for t in event.tiers if is_completed(player, t.id))
|
||||
missing = len(event.tiers) - completed_tiers
|
||||
if missing == 0: return []
|
||||
discount = min(0.5, 0.1 * missing) # more missed → bigger discount
|
||||
return [
|
||||
Offer(
|
||||
id=f"catchup_{event.id}",
|
||||
content=f"Skip remaining {missing} tiers",
|
||||
price_usd=4.99 + missing * 1.5,
|
||||
discount=discount,
|
||||
expires=event.end_time + timedelta(days=2)
|
||||
)
|
||||
]
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Pre-event tease scheduler
|
||||
```python
|
||||
def schedule_tease(event_id: str, start_time):
|
||||
schedule(start_time - timedelta(days=7),
|
||||
lambda: send_push_all("New Operation incoming"))
|
||||
schedule(start_time - timedelta(days=3),
|
||||
lambda: enable_prelude_quests(event_id))
|
||||
schedule(start_time,
|
||||
lambda: activate_event(event_id))
|
||||
schedule(start_time + timedelta(days=5),
|
||||
lambda: enable_cleanup_store(event_id))
|
||||
schedule(start_time + timedelta(days=7),
|
||||
lambda: archive_event(event_id))
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Server-side wave generator (PvE Operation)
|
||||
```javascript
|
||||
function generateWave(tier, playerLevel) {
|
||||
const compMix = ['INFANTRY', 'VEHICLE', 'AIRCRAFT'];
|
||||
const waveSize = 5 + tier * 3;
|
||||
const units = [];
|
||||
for (let i = 0; i < waveSize; i++) {
|
||||
const role = compMix[i % compMix.length];
|
||||
const power = 100 * Math.pow(1.15, playerLevel - 1);
|
||||
units.push({
|
||||
type: role,
|
||||
level: Math.min(15, playerLevel),
|
||||
hp: power * roleMod(role).hp,
|
||||
dps: power * roleMod(role).dps,
|
||||
speed: roleMod(role).speed
|
||||
});
|
||||
}
|
||||
return units;
|
||||
}
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| New player onboarding | Easy tier 1-2, generous rewards |
|
||||
| Veteran retention | Hard tier 4+ with prestige cosmetic |
|
||||
| Monetization push | Premium pass with exclusive blueprint |
|
||||
| Power-creep introduction | Operation tease + reward 7d before launch |
|
||||
| Competitive players | Leaderboard tournament, top-1k rewards |
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
**기본값**: 매 weekly Operation + 매 monthly Tournament + 매 quarterly Faction Conflict.
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live Operations (LiveOps)]] · [[Event Design]]
|
||||
- 변형: [[Battle Pass]] · [[Seasonal Events]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Mobile Strike]]
|
||||
- Adjacent: [[KIXEYE]] · [[Power Creep (Content Treadmills)]] · [[Dynamic Offers]]
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: Event design template, tiered reward structure 의 reference, LiveOps cadence planning.
|
||||
**언제 X**: Single-player narrative games — 매 LiveOps cadence 의 mismatch.
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
## ❌ 안티패턴
|
||||
- **No catch-up**: 매 missed players 의 churn — 매 cleanup store + extended access 필요.
|
||||
- **Pay-to-win premium pass**: 매 paid track 의 power gap — 매 cosmetic + boost 의 hybrid 필요.
|
||||
- **Permanent currency leaks**: 매 event currency 의 stockpile → 매 next event 의 trivial.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (KIXEYE WC LiveOps blog 2014-2017, community Operation guides).
|
||||
- 신뢰도 A.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — WC Event Ops w/ tier tree + LB + cleanup store |
|
||||
|
||||
@@ -1,78 +1,205 @@
|
||||
---
|
||||
id: wiki-2026-0508-world-war-rising
|
||||
title: World War Rising
|
||||
category: 10_Wiki/Topics_GD
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [WWR, World War Rising MMO]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [4x-mobile, mmo-strategy, alliance-warfare, ww2-skin]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: Lua/C++
|
||||
framework: Cocos2d-x + custom server
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# World War Rising
|
||||
|
||||
# Redirect
|
||||
## 매 한 줄
|
||||
> **"매 4X mobile MMO + WW2 skin"**. 매 IGG (Lords Mobile dev) 매 2018-launched WW2-themed MMO strategy. 매 Mobile Strike / Game of War lineage 매 commander gacha + alliance kingdom war + research tree + VIP layered monetization 의 standard mid-core 4X 의 instance. 매 매 매 LTV-driven design 의 textbook.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심
|
||||
|
||||
> World War Rising은 모바일 군사 4X SLG로, Machine Zone/Epic War류 엔진의 후속작 중 하나다.
|
||||
### 매 game loop
|
||||
1. **Build**: HQ + production buildings + defense.
|
||||
2. **Research**: 4 trees (Economy / Military / Defense / Combat).
|
||||
3. **Train troops**: T1-T11 tier escalation, multi-day timers.
|
||||
4. **Gather**: Map resources (Food/Oil/Iron/Steel).
|
||||
5. **Attack/Defend**: PvP rallies, monster hunts.
|
||||
6. **Alliance**: Kingdom-wide warfare, capital siege events.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
### 매 monetization layers
|
||||
- **VIP**: 1-15 levels, $0.99-$10K spend total.
|
||||
- **Commanders (gacha)**: Pull 5-star unique commanders.
|
||||
- **Speedups**: 1m / 5m / 1h / 8h / 24h timer skip.
|
||||
- **Resource packs**: Food/Oil/Iron/Steel bundles.
|
||||
- **Event packs**: Limited-time bundles tied to LiveOps.
|
||||
|
||||
**추출된 패턴:** 같은 코어 엔진 + 새 테마(2차 대전) = 빠른 출시. SLG 장르의 산업화된 제작 방식.
|
||||
### 매 social mechanics
|
||||
- 매 Alliance (max 100): chat, helps, donations, gifts.
|
||||
- 매 Kingdom (server): 1000-3000 players, 매 KvK warfare.
|
||||
- 매 Capital tier sieges: 매 monthly, 매 alliance-vs-alliance.
|
||||
- 매 cross-server events: 매 inter-kingdom raids.
|
||||
|
||||
**세부 내용:**
|
||||
- 2차 세계대전 테마.
|
||||
- 4X 코어: 건설·연구·전투·동맹.
|
||||
- 동맹 전쟁 / 시즌 / 이벤트.
|
||||
- BM: VIP / 패키지 / 자원.
|
||||
- iOS/Android 글로벌 출시.
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### Building upgrade timer
|
||||
```cpp
|
||||
struct Building {
|
||||
int level;
|
||||
std::chrono::system_clock::time_point upgradeEndsAt;
|
||||
bool upgradeActive;
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
void StartUpgrade(int seconds) {
|
||||
upgradeActive = true;
|
||||
upgradeEndsAt = std::chrono::system_clock::now() + std::chrono::seconds(seconds);
|
||||
}
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
bool TickComplete() {
|
||||
if (!upgradeActive) return false;
|
||||
if (std::chrono::system_clock::now() >= upgradeEndsAt) {
|
||||
level++;
|
||||
upgradeActive = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
int SecondsRemaining() const {
|
||||
if (!upgradeActive) return 0;
|
||||
auto rem = upgradeEndsAt - std::chrono::system_clock::now();
|
||||
return std::chrono::duration_cast<std::chrono::seconds>(rem).count();
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Speedup item application
|
||||
```lua
|
||||
function ApplySpeedup(buildingId, speedupSeconds)
|
||||
local b = state.buildings[buildingId]
|
||||
if not b.upgradeActive then return false end
|
||||
b.upgradeEndsAt = b.upgradeEndsAt - speedupSeconds
|
||||
if b.upgradeEndsAt <= os.time() then
|
||||
b.upgradeEndsAt = os.time()
|
||||
end
|
||||
Analytics.Log("speedup_used", { building=buildingId, seconds=speedupSeconds })
|
||||
return true
|
||||
end
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### Commander gacha pull (10x)
|
||||
```lua
|
||||
local POOL = {
|
||||
common = { weight = 70, range = "C" },
|
||||
rare = { weight = 22, range = "R" },
|
||||
epic = { weight = 6, range = "E" },
|
||||
legend = { weight = 1.8,range = "L" },
|
||||
mythic = { weight = 0.2,range = "M" },
|
||||
}
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
local function rollOne(ssrPityActive)
|
||||
if ssrPityActive then return PickFrom("legend") end
|
||||
local roll = math.random() * 100
|
||||
local cum = 0
|
||||
for tier, info in pairs(POOL) do
|
||||
cum = cum + info.weight
|
||||
if roll < cum then return PickFrom(tier) end
|
||||
end
|
||||
return PickFrom("common")
|
||||
end
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
function PullTen(player)
|
||||
local results = {}
|
||||
local pity = (player.pullsSinceLastL >= 90)
|
||||
for i = 1, 10 do
|
||||
local c = rollOne(pity and i == 10)
|
||||
table.insert(results, c)
|
||||
if c.tier == "L" then player.pullsSinceLastL = 0
|
||||
else player.pullsSinceLastL = player.pullsSinceLastL + 1 end
|
||||
end
|
||||
return results
|
||||
end
|
||||
```
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
### Alliance rally aggregation
|
||||
```cpp
|
||||
struct Rally {
|
||||
int leaderId;
|
||||
int targetId;
|
||||
std::vector<TroopBatch> participants;
|
||||
std::chrono::time_point<std::chrono::system_clock> launchAt;
|
||||
int maxJoiners;
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
void Join(int playerId, TroopBatch troops) {
|
||||
if ((int)participants.size() >= maxJoiners) return;
|
||||
if (std::chrono::system_clock::now() >= launchAt) return;
|
||||
participants.push_back(troops);
|
||||
Notify(leaderId, "{} joined rally", playerId);
|
||||
}
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
CombatPower TotalPower() const {
|
||||
CombatPower total{};
|
||||
for (const auto& p : participants) total += p.power();
|
||||
return total;
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
### VIP daily reward (tier-scaled)
|
||||
```python
|
||||
VIP_DAILY = {
|
||||
1: {"speedup_min": 5, "gold": 10},
|
||||
5: {"speedup_min": 30, "gold": 100, "resource_pack": "S"},
|
||||
10: {"speedup_min": 120, "gold": 500, "resource_pack": "M",
|
||||
"commander_token": 1},
|
||||
15: {"speedup_min": 480, "gold": 2000, "resource_pack": "L",
|
||||
"commander_token": 5, "exclusive_skin": True},
|
||||
}
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
def grant_vip_daily(player):
|
||||
bucket = max(k for k in VIP_DAILY.keys() if k <= player.vip_level)
|
||||
rewards = VIP_DAILY[bucket]
|
||||
apply_rewards(player, rewards)
|
||||
log("vip_daily", player.id, bucket, rewards)
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| F2P player | Focus alliance gifts + daily login |
|
||||
| Mid-spender | VIP 8-10 + selective commander pulls |
|
||||
| Whale/leader | Capital siege investment + max VIP |
|
||||
| Kingdom war prep | Save speedups, train T11 troops |
|
||||
| Server merge incoming | Liquidate inflated resources |
|
||||
|
||||
**기본값**: 매 alliance-first play + 매 daily VIP claim + 매 selective LiveOps participation.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[4X Mobile MMO]] · [[Mid-Core Strategy]]
|
||||
- 변형: [[Mobile Strike]] · [[Game of War]] · [[Lords Mobile]] · [[Last Shelter Survival]]
|
||||
- 응용: [[Alliance Warfare]] · [[Kingdom vs Kingdom]]
|
||||
- Adjacent: [[Gacha Mechanics Analysis]] · [[VIP System]] · [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 4X mobile MMO design reference, gacha + speedup + VIP layered monetization 의 case study.
|
||||
**언제 X**: Console RTS — 매 mobile timer-gated economy 의 model X.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Solo play**: 매 alliance 외 의 stuck — 매 mid-game wall 매 hit.
|
||||
- **Skip research**: 매 troop tier escalation 의 미달 — 매 KvK 의 outclassed.
|
||||
- **Hoarding speedups**: 매 server merge 의 anti-pattern — 매 strategic timing 필요.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (IGG WWR product page, AppMagic 2024 mid-core revenue data, community wiki).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — WWR 4X loop w/ gacha + VIP + rally |
|
||||
|
||||
@@ -1,82 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-가버-그레인저-방법-gabor-granger-method
|
||||
title: 가버 그레인저 방법 (Gabor Granger Method)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
canonical_id: self
|
||||
title: 가버-그레인저 방법 (Gabor-Granger Method)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: gabor-granger-method
|
||||
duplicate_of: "[[Gabor-Granger Method]]"
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, pricing, market-research, willingness-to-pay]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 가버-그레인저 방법 (Gabor-Granger Method)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Gabor-Granger Method]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 핵심 요약 (specialization aspects)
|
||||
- Gabor-Granger 의 1960s pricing research method.
|
||||
- 매 응답자 의 random price points 의 sequence — "X 가격 의 buy intent?" 의 binary response.
|
||||
- 매 demand curve construction → 매 revenue-maximizing price 의 도출.
|
||||
- 매 모바일 게임 pricing IAP bundle 의 frequent application.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Gabor-Granger Method]] (canonical)
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,35 @@
|
||||
---
|
||||
id: wiki-2026-0508-게임-수익화-전략
|
||||
title: 게임 수익화 전략
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: game-monetization-strategy
|
||||
duplicate_of: "[[Game_Monetization_Strategy]]"
|
||||
aliases: [수익화 전략]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, monetization, korean-locale]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 게임 수익화 전략
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Game_Monetization_Strategy]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 핵심 요약 (specialization aspects)
|
||||
- IAP / Ads / Subscription / Battle Pass / Gacha 의 monetization mix.
|
||||
- 매 F2P + IAP 의 dominance — 매 LTV optimization 의 core.
|
||||
- 매 hybrid casual + LiveOps event 의 modern best practice.
|
||||
- 매 한국어 user-facing alias — 매 canonical 의 English title.
|
||||
|
||||
> 게임 수익화 전략은 장르·플랫폼·유저 페르소나에 맞는 BM 조합을 설계하는 활동으로, 단일 BM이 아닌 4~6개 동시 운영이 표준이다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Monetization_Strategy]] (canonical)
|
||||
- 자매: [[수익화 전략]] · [[하이브리드 수익화]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** "여러 결제 의향 구간을 모두 흡수" — 무과금(광고), 소액(패스), 미들(번들), 고래(가챠 천장).
|
||||
|
||||
**세부 내용:**
|
||||
- 광고: 보상형/인터스티셜.
|
||||
- 패스: 시즌·이벤트.
|
||||
- 번들: 단발 한정 결제.
|
||||
- 가챠: 확률 기반 수집.
|
||||
- 구독: 정기 매출 안정화.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-고과금-유저-whales
|
||||
title: 고과금 유저 (Whales)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: whale-players
|
||||
duplicate_of: "[[Whale Players]]"
|
||||
aliases: [고래 유저, Whales, Whale Spenders]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, monetization, whales, f2p]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 고과금 유저 (Whales)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Whale Players]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 top 0.15-2% spender 의 매 50-80% revenue contribution.
|
||||
- 매 VIP-tier escalation + concierge service 의 매 retention lever.
|
||||
- 매 ethical risk: 매 vulnerable-population concentration 의 risk.
|
||||
|
||||
> 고과금 유저(Whales)는 게임 매출의 대부분을 만드는 소수 결제 핵심 유저로, 별도 LiveOps와 CS가 필요하다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Whale Players]] (canonical)
|
||||
- Adjacent: [[Game Monetization Strategy]] · [[VIP Systems]] · [[Dynamic Offers]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** 고래는 "가격"보다 "한정성·우월감"에 반응 — 일반 유저와 다른 결제 트리거.
|
||||
|
||||
**세부 내용:**
|
||||
- 한정 코스튬·캐릭터·번호.
|
||||
- VIP 등급별 차등.
|
||||
- 전담 매니저(CS) 배정.
|
||||
- 시즌 고래 한정 이벤트.
|
||||
- 윤리: 도박 의존증 가능성 모니터링.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,33 @@
|
||||
---
|
||||
id: wiki-2026-0508-고래-유저-whale-players
|
||||
title: 고래 유저 (Whale Players)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: whale-players
|
||||
duplicate_of: "[[Whale Players]]"
|
||||
aliases: [고과금 유저, Whales]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, monetization, whales]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 고래 유저 (Whale Players)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Whale Players]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 Korean-localization variant 의 same concept.
|
||||
- 매 RPDAU heavy-tail concentration 의 monetization 동력.
|
||||
|
||||
> 고래(Whale)는 모바일 게임 매출의 대부분을 만드는 소수 고결제 유저로, 0.1~5%의 유저가 50%+ 매출을 차지하는 경우가 흔하다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Whale Players]] (canonical)
|
||||
- Adjacent: [[고과금 유저 (Whales)]] · [[Game Monetization Strategy]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** 80/20 규칙 강화판 — 1%/50% 분포가 모바일 F2P의 표준 매출 분포.
|
||||
|
||||
**세부 내용:**
|
||||
- 분류: Minnow / Dolphin / Whale / Mega Whale.
|
||||
- Mega Whale: 월 \$1000+ 결제.
|
||||
- 결제 동기: 경쟁·과시·수집.
|
||||
- VIP 시스템 + 한정 패키지가 주요 도구.
|
||||
- CS·VIP 매니저 전담 운영.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,82 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-다중-게임-구독-모델-multigame-subscripti
|
||||
title: 다중 게임 구독 모델(Multigame Subscriptions)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
canonical_id: self
|
||||
title: 다중 게임 구독 모델 (Multigame Subscriptions)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: multigame-subscriptions
|
||||
duplicate_of: "[[Multigame Subscriptions]]"
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.85
|
||||
verification_status: redirected
|
||||
tags: [duplicate, monetization, subscription, gamepass]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 다중 게임 구독 모델 (Multigame Subscriptions)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Multigame Subscriptions]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 Xbox Game Pass / PS Plus Premium / Apple Arcade 의 모델.
|
||||
- 매 한국 publisher (NCSoft Purple, Smilegate Stove) 의 멀티게임 패스 시도.
|
||||
- 매 ARPU 안정화 / churn 분산 / 신작 discovery 의 trade-off.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Multigame Subscriptions]] (canonical)
|
||||
- 인접: [[Live Operations (LiveOps)]] · [[Game_Monetization_Strategy]]
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-라이브-서비스-live-service
|
||||
title: 라이브 서비스 (Live Service)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: live-operations-liveops
|
||||
duplicate_of: "[[Live Operations (LiveOps)]]"
|
||||
aliases: [live-ops, GaaS, games-as-a-service]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, liveops, gaas, retention]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 라이브 서비스 (Live Service)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Live Operations (LiveOps)]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 GaaS (Games-as-a-Service) 의 한국어 표기.
|
||||
- 매 시즌 패스 / 한정 이벤트 / weekly content drop 의 운영 cycle.
|
||||
- 매 Fortnite, Genshin Impact, Destiny 2 의 representative model.
|
||||
|
||||
> 라이브 서비스 게임은 한 번 사고 끝이 아닌 지속 업데이트로 운영되는 게임 모델로, 모바일·PC·콘솔 모두에서 표준이 되었다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Live Operations (LiveOps)]] (canonical)
|
||||
- 인접: [[Game_Monetization_Strategy]] · [[Dynamic Offers]] · [[Player Engagement]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** Game-as-a-Product → Game-as-a-Service. 출시는 시작점일 뿐, 매출의 90%는 출시 후 12개월에 발생.
|
||||
|
||||
**세부 내용:**
|
||||
- 시즌 모델: Fortnite, Apex, Destiny.
|
||||
- 콘텐츠 캘린더 + 라이브 패치.
|
||||
- BM: 시즌 패스 + 코스튬 + 한정 번들.
|
||||
- 운영 인력: 콘텐츠/밸런스/마케팅/CS/QA 상시.
|
||||
- 위험: 콘텐츠 가뭄 시 빠른 이탈.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-맞춤형-iap-번들-customizable-iap-bund
|
||||
title: 맞춤형 IAP 번들(Customizable IAP bundles)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
title: 맞춤형 IAP 번들 (Customizable IAP Bundles)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: dynamic-offers
|
||||
duplicate_of: "[[Dynamic Offers]]"
|
||||
aliases: [personalized-bundles, dynamic-iap]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.85
|
||||
verification_status: redirected
|
||||
tags: [duplicate, monetization, iap, personalization]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 맞춤형 IAP 번들 (Customizable IAP Bundles)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Dynamic Offers]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 player segmentation 기반 — 매 spend tier / progression stage / churn risk 의 입력.
|
||||
- 매 ML pricing engine (uplift modeling) 의 적용 — 매 Scopely, Playrix 의 표준.
|
||||
- 매 store front A/B test 의 main vehicle.
|
||||
|
||||
> 맞춤형 IAP 번들은 유저가 원하는 자원을 선택해 구성할 수 있는 번들 시스템으로, 가치 인식과 결제율을 동시에 높인다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Dynamic Offers]] (canonical)
|
||||
- 인접: [[Data-Driven Personalization]] · [[Monetization at the Point of Friction]] · [[Whale Players]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** "내가 고른 보상"이라는 인식이 가치 인식을 부풀림 — 동일 비용에 더 큰 만족감.
|
||||
|
||||
**세부 내용:**
|
||||
- 유저 진행 단계에 맞는 자원 추천.
|
||||
- 가격대별 옵션: $4.99 / $19.99 / $49.99.
|
||||
- 추가 보너스 자원으로 "이득 인식" 강조.
|
||||
- 데이터 기반 개인화 가능.
|
||||
- 동적 오퍼와 결합.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,82 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-베레스네프-beresnev
|
||||
title: 베레스네프(Beresnev)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
title: 베레스네프 (Beresnev)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: beresnev-studio
|
||||
duplicate_of: "[[Beresnev Studio]]"
|
||||
aliases: [beresnev-games]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.8
|
||||
verification_status: redirected
|
||||
tags: [duplicate, studio, hyper-casual, mobile]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 베레스네프 (Beresnev)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Beresnev Studio]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 한국어 표기 — 매 Russian / Belarusian hyper-casual studio.
|
||||
- 매 Magic Sort!, Capybara GO! 의 publisher.
|
||||
- 매 minimal-art high-volume A/B test 의 model.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Beresnev Studio]] (canonical)
|
||||
- 인접: [[Magic Sort!]] · [[Capybara GO!]] · [[CPI (Cost Per Install)]]
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
---
|
||||
id: PSYCH-RES-2026-05-019
|
||||
title: 보상의 역효과 (Overjustification Effect)
|
||||
category: "10_Wiki/Topics/Psychology & Behavior"
|
||||
status: verified
|
||||
confidence_score: 0.98
|
||||
tags: [psychology, behavior, motivation, extrinsic-reward, intrinsic-motivation]
|
||||
created_at: 2026-05-08
|
||||
updated_at: 2026-05-08
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: overjustification-effect
|
||||
duplicate_of: "[[Overjustification Effect]]"
|
||||
aliases: [reward-backfire, intrinsic-motivation-erosion]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, psychology, motivation, gamification]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
---
|
||||
|
||||
# 보상의 역효과 (Overjustification Effect)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "내적 즐거움에 외적 보상을 더하면 즐거움이 증발한다: 자발적 동기로 수행하던 일에 외부적 보상이 주어지면, 보상이 제거되었을 때 본래의 내적 동기마저 훼손되는 심리적 현상."
|
||||
> **이 문서는 [[Overjustification Effect]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **정의 및 메커니즘**: 개인이 이미 즐거움을 느끼고 내적 동기(Intrinsic Motivation)로 수행하던 활동에 금전적 보상이나 상장 같은 외적 보상(Extrinsic Reward)이 주어질 때 발생한다. 뇌는 자신의 행동 원인을 '즐거움'이 아닌 '보상'으로 재귀인(Re-attribution)하며, 이로 인해 활동 자체의 가치가 하락한다.
|
||||
* **자기지각 이론 (Self-Perception Theory)**: 대릴 벰(Daryl Bem)에 따르면, 사람들은 자신의 행동을 관찰하여 태도를 결정한다. 보상이 주어지면 "나는 보상 때문에 이 일을 한다"고 스스로 판단하게 되어 보상이 사라지는 순간 행동의 이유도 함께 사라진다.
|
||||
* **인지 평가 이론 (Cognitive Evaluation Theory)**: 보상이 개인의 유능감(Competence)을 확인해 주는 '정보적' 성격일 때는 동기를 강화할 수 있으나, 행동을 '통제'하려는 성격이 강할 때 역효과가 극대화된다.
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 외재적 보상 (external reward) 이 매 내재적 동기 (intrinsic motivation) 을 잠식하는 현상.
|
||||
- 매 Deci & Ryan (1971) 의 Self-Determination Theory 의 핵심 발견.
|
||||
- 매 gamification anti-pattern — 매 daily quest / login bonus 의 over-reliance 가 매 long-term engagement 을 침식.
|
||||
|
||||
## ⚖️ 트레이드오프 및 고려사항
|
||||
* **보상의 형태**: 예기치 않은 보상(Unexpected Reward)은 내적 동기를 훼손하지 않지만, 수행 전 약속된 보상(Expected Reward)은 역효과를 유발할 확률이 매우 높다.
|
||||
* **초기 동기 수준**: 원래 관심이 없던 작업에 보상을 주는 것은 학습과 참여를 유도하는 긍정적 도구가 될 수 있다. 역효과는 오직 '이미 높은 내적 동기'가 존재할 때만 발생한다.
|
||||
* **장기적 성과**: 단기적 생산성은 보상으로 끌어올릴 수 있으나, 창의적이고 지속적인 몰입이 필요한 지적 노동에서는 보상 체계 설계가 독이 될 수 있음을 명심해야 한다.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **상위 개념**: [[Behavioral Economics]], [[Self-Determination Theory (자기결정성 이론)]]
|
||||
- **유사 개념**: [[Crowding-out Effect (구축 효과)]], [[Cognitive Dissonance (인지 부조화)]]
|
||||
- **대조 개념**: [[Flow (몰입)]], [[Gamification]]
|
||||
|
||||
---
|
||||
*Last updated: 2026-05-08*
|
||||
## 🔗 Graph
|
||||
- 부모: [[Overjustification Effect]] (canonical)
|
||||
- 인접: [[Gamification-Theory]] · [[Player Engagement]] · [[Self-Determination Theory]]
|
||||
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,82 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-봉건적-권력-피라미드-feudal-power-pyramid
|
||||
title: 봉건적 권력 피라미드 (Feudal Power Pyramid)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: draft
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: alliances-and-sector-hegemony
|
||||
duplicate_of: "[[Alliances-and-Sector-Hegemony]]"
|
||||
aliases: [feudal-pyramid, alliance-hierarchy]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.8
|
||||
verification_status: redirected
|
||||
tags: [duplicate, mmo, alliance, hierarchy, mobile-strategy]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 봉건적 권력 피라미드 (Feudal Power Pyramid)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Alliances-and-Sector-Hegemony]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 mobile 4X (War Commander, Mobile Strike, Final Fantasy XV: A New Empire) 의 alliance 구조.
|
||||
- 매 R5 leader → R4 officer → R3 elder → R1/R2 member 의 hierarchical control.
|
||||
- 매 sector hegemony / kick-back / vassal alliance 의 feudal dynamics.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Alliances-and-Sector-Hegemony]] (canonical)
|
||||
- 인접: [[Descendants-Sector-Control]] · [[Kick-back System]] · [[Mobile Strike]] · [[4X 시스템 (4X System)]]
|
||||
|
||||
> 🤖 **[AI 추론 보강 필요]** — 본문이 200자 미만이라 P-Reinforce가 빈약 stub으로 분류했습니다.
|
||||
> source_trust_level=`C` (AI 보강분), confidence_score=`0.92`로 표시되어 있습니다.
|
||||
> 사용자 검증 후 trust_level 상향 조정 가능.
|
||||
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
|
||||
> *(TODO: 한 문장으로 핵심 통찰을 작성. "X는 Y 조건에서 Z 효과를 낸다" 구조 권장.)*
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:**
|
||||
> *(TODO)*
|
||||
|
||||
**세부 내용:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-부분-유료화-메타게임-free-to-play-metagam
|
||||
title: 부분 유료화 메타게임(Free to play metagame)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
title: 부분 유료화 메타게임 (Free-to-Play Metagame)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: game-monetization-strategy
|
||||
duplicate_of: "[[Game_Monetization_Strategy]]"
|
||||
aliases: [f2p-metagame, freemium-loop]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.85
|
||||
verification_status: redirected
|
||||
tags: [duplicate, f2p, metagame, monetization]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 부분 유료화 메타게임 (Free-to-Play Metagame)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Game_Monetization_Strategy]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 core gameplay 위 layer 된 매 progression / collection / competition meta.
|
||||
- 매 stamina gate / gacha pull / hero leveling 의 paywall 진입점.
|
||||
- 매 Genshin / RAID Shadow Legends / Clash Royale 의 representative metagame.
|
||||
|
||||
> F2P 메타게임은 코어 루프 위에 얹혀진 장기 진행/수집/사회 시스템으로, 결제 동기와 retention의 핵심 동력이다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Game_Monetization_Strategy]] (canonical)
|
||||
- 인접: [[Gacha Mechanics Analysis]] · [[Live Operations (LiveOps)]] · [[Monetization at the Point of Friction]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** 코어 루프(즉각 만족) + 메타게임(장기 보상) + LiveOps(외부 시간 압박) 3층으로 LTV 곡선이 만들어진다.
|
||||
|
||||
**세부 내용:**
|
||||
- 영웅 컬렉션 / 장비 강화 / 베이스 빌딩.
|
||||
- 시즌·이벤트·랭킹 같은 시간 한정 메타.
|
||||
- 길드·동맹 같은 소셜 메타.
|
||||
- 결제 트리거가 메타게임 단계에 자연스럽게 배치.
|
||||
- 메타가 단조로우면 컨텐츠 가뭄 → 빠른 이탈.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-사용자-참여도-player-engagement
|
||||
title: 사용자 참여도(Player Engagement)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
title: 사용자 참여도 (Player Engagement)
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: player-engagement
|
||||
duplicate_of: "[[Player Engagement]]"
|
||||
aliases: [user-engagement, dau-engagement, retention-engagement]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, engagement, retention, kpi]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 사용자 참여도 (Player Engagement)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[Player Engagement]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 DAU / WAU / MAU stickiness ratio 의 측정.
|
||||
- 매 session length / sessions per DAU / D1-D7-D30 retention 의 핵심 지표.
|
||||
- 매 LiveOps event cadence / push-notification timing / FOMO trigger 의 design lever.
|
||||
|
||||
> 사용자 참여도는 유저가 게임에 투입하는 시간·인지·감정 자원의 총합으로, retention과 LTV의 선행 지표 역할을 한다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[Player Engagement]] (canonical)
|
||||
- 인접: [[Live Operations (LiveOps)]] · [[Gamification-Theory]] · [[Data-Driven Personalization]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** 참여도 = 동기 × 능력 × 트리거 (Fogg 행동 모델). 셋 중 하나만 약해도 참여 ↓.
|
||||
|
||||
**세부 내용:**
|
||||
- 측정: DAU, 세션당 시간, 세션 빈도.
|
||||
- 동기: 진행감·소셜·자율성·관계성(SDT).
|
||||
- 능력: UI/UX·튜토리얼·DDA.
|
||||
- 트리거: 푸시·이벤트·소셜 알림.
|
||||
- 깊은 참여 → 결제 의향 ↑.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
@@ -1,78 +1,34 @@
|
||||
---
|
||||
id: wiki-2026-0508-사용자-확보-user-acquisition
|
||||
title: 사용자 확보 (User Acquisition)
|
||||
category: 10_Wiki/Topics_GD
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
duplicate_of: none
|
||||
category: 10_Wiki/Topics
|
||||
status: duplicate
|
||||
canonical_id: user-acquisition
|
||||
duplicate_of: "[[User Acquisition]]"
|
||||
aliases: [UA, paid-acquisition, performance-marketing]
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
confidence_score: 0.9
|
||||
verification_status: redirected
|
||||
tags: [duplicate, ua, marketing, cpi, roas]
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
---
|
||||
|
||||
---
|
||||
redirect_to: "[[게임_디자인_및_가상_경제_시스템]]"
|
||||
canonical_id: "wiki-2026-0507-105"
|
||||
---
|
||||
# 사용자 확보 (User Acquisition)
|
||||
|
||||
# Redirect
|
||||
> **이 문서는 [[User Acquisition]] 의 중복본입니다.** Canonical 문서로 redirect.
|
||||
|
||||
이 문서는 Canonical 문서인 통합되었습니다.
|
||||
모든 최신 지식과 세부 내용은 위 링크를 참조하십시오.
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
## 매 핵심 요약 (specialization aspects)
|
||||
- 매 CPI (Cost Per Install) / CPA / ROAS 의 핵심 metric.
|
||||
- 매 Meta Ads / Google UAC / TikTok Ads / Applovin AppDiscovery 의 채널 mix.
|
||||
- 매 SKAdNetwork 4.0 (post-IDFA) / privacy sandbox 의 측정 제약.
|
||||
|
||||
> 사용자 확보(UA)는 유료/유기적 채널을 통해 신규 유저를 유입시키는 마케팅 활동으로, 게임 LiveOps의 절반 이상의 예산이 여기 투입된다.
|
||||
## 🔗 Graph
|
||||
- 부모: [[User Acquisition]] (canonical)
|
||||
- 인접: [[CPI (Cost Per Install)]] · [[Game_Monetization_Strategy]] · [[Data-Driven Personalization]]
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
|
||||
**추출된 패턴:** UA는 "누구를(타겟)·얼마에(CPI)·얼마나 오래(LTV)" 가져오는지의 3차원 최적화.
|
||||
|
||||
**세부 내용:**
|
||||
- 채널: Meta, Google, TikTok, AppLovin, Unity.
|
||||
- 광고 크리에이티브 A/B 테스트 (수십~수백 개 동시).
|
||||
- 사용자 페르소나별 입찰 전략 (lookalike).
|
||||
- iOS ATT 이후 SKAdNetwork 데이터 의존.
|
||||
- 유기적 UA(ASO, 인플루언서)도 병행.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** draft
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
|
||||
- **Parent:** [[10_Wiki/Topics]]
|
||||
- **Related:** *(TODO: 최소 2개)*
|
||||
- **Opposite / Trade-off:** *(TODO)*
|
||||
- **Raw Source:** 직접 입력
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 변경 이력
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user