152 lines
5.7 KiB
Markdown
152 lines
5.7 KiB
Markdown
---
|
|
id: wiki-2026-0508-structural-dynamics-and-tactical
|
|
title: Structural Dynamics and Tactical Evolution of the Combat Ecosystem
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [Tactical Evolution, Meta Evolution, Combat Tactical Dynamics]
|
|
duplicate_of: none
|
|
source_trust_level: A
|
|
confidence_score: 0.9
|
|
verification_status: applied
|
|
tags: [game-design, meta, tactics, evolution, balance]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: typescript
|
|
framework: nodejs
|
|
---
|
|
|
|
# Structural Dynamics and Tactical Evolution of the Combat Ecosystem
|
|
|
|
## 매 한 줄
|
|
> **"매 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.
|
|
|
|
## 매 핵심
|
|
|
|
### 매 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.
|
|
|
|
### 매 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.
|
|
|
|
## 💻 패턴
|
|
|
|
### Meta state tracker
|
|
```typescript
|
|
type MetaPhase = 'launch' | 'discovery' | 'refinement' | 'stagnation' | 'refresh';
|
|
|
|
interface MetaSnapshot { date: string; topUnits: string[]; diversity: number; phase: MetaPhase; }
|
|
|
|
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';
|
|
}
|
|
```
|
|
|
|
### 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);
|
|
}
|
|
```
|
|
|
|
### 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)));
|
|
}
|
|
```
|
|
|
|
### Patch impact decay
|
|
```typescript
|
|
export function patchDecay(daysSincePatch: number, halfLifeDays = 14): number {
|
|
return Math.pow(0.5, daysSincePatch / halfLifeDays);
|
|
}
|
|
```
|
|
|
|
### Esports vs ladder delta
|
|
```typescript
|
|
interface PickStats { ladder: Record<string, number>; pro: Record<string, number>; }
|
|
|
|
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));
|
|
}
|
|
```
|
|
|
|
### Content drop scheduler
|
|
```typescript
|
|
interface ContentPlan { name: string; date: string; type: 'unit' | 'map' | 'mode'; expectedDiversityDelta: number; }
|
|
|
|
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 };
|
|
}
|
|
```
|
|
|
|
## 매 결정 기준
|
|
| 상황 | 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. |
|
|
|
|
**기본값**: 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]]
|
|
|
|
## 🤖 LLM 활용
|
|
**언제**: meta narrative 의 summary, content roadmap 의 brainstorm, patch announcement 의 draft.
|
|
**언제 X**: 매 telemetry pipeline (Shannon entropy 의 deterministic).
|
|
|
|
## ❌ 안티패턴
|
|
- **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.
|
|
|
|
## 🧪 검증 / 중복
|
|
- Verified: SC2 LotV balance history, Smash Ultimate community tier list evolution, DOTA 2 7.x patches.
|
|
- 신뢰도 A.
|
|
|
|
## 🕓 Changelog
|
|
| 날짜 | 변경 |
|
|
|---|---|
|
|
| 2026-05-08 | Phase 1 |
|
|
| 2026-05-10 | Manual cleanup — temporal 4-axis + Shannon diversity 추가 |
|