---
id: wiki-2026-0508-skybound-firepower-overclock-v1-
title: Skybound Firepower Overclock v1.5
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Skybound Overclock 1.5, Firepower Balance v1.5]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [skybound, balance, game-design, weapons]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: typescript
  framework: skybound-sim
---

# Skybound Firepower Overclock v1.5

## 매 한 줄
> **"매 v1.5 의 Firepower Overclock 의 redesign — tier-capped multiplier + heat penalty 의 PvE feel + PvP balance"**. 매 v1.0 의 unbounded multiplier 의 OP build (>3x DPS) 의 fix. 매 2026 patch 의 telemetry-driven (Bayesian win-rate) tuning + AI playtest agent 의 regression. 매 cap = tier × 5, heat scale 의 12% / level 의 cost-curve.

## 매 핵심

### 매 Design intent
- **PvE 의 power fantasy**: 매 mid-late run 의 build expression.
- **PvP 의 balance**: 매 cap + diminishing return 의 dominance 의 limit.
- **Heat 의 risk-reward**: 매 overclock 의 self-damage / reload penalty 의 trade.

### 매 v1.5 changes (vs v1.0)
- Cap: unlimited → tier × 5 (T1=5, T2=10, T3=15, T4=20).
- Damage scale: linear 10% / lvl → 8% / lvl.
- Fire-rate scale: 6% / lvl → 4% / lvl.
- Heat scale: 8% / lvl → 12% / lvl (cost faster).
- Cool-down 의 reset 의 tier-based.

### 매 Telemetry hooks
- 매 weapon DPS / kill / death by overclock level.
- 매 PvP 의 win-rate by build (overclock level distribution).
- 매 PvE 의 boss DTK (down-to-kill) by overclock.

### 매 응용
1. **Live-ops tuning** — Bayesian update 의 monthly.
2. **Build diversity** — overclock vs cooler / armor 의 trade.
3. **Replay AI** — AI agent 의 tier × overclock matrix 의 regression test.

## 💻 패턴

### Overclock formula
```typescript
type Tier = 1 | 2 | 3 | 4;
interface WeaponBase { tier: Tier; damage: number; fireRate: number; heat: number; }

const CAP: Record<Tier, number> = { 1: 5, 2: 10, 3: 15, 4: 20 };

export function applyOverclock(base: WeaponBase, level: number) {
  const cap = CAP[base.tier];
  const lvl = Math.max(0, Math.min(level, cap));
  const dmgMult = 1 + 0.08 * lvl;
  const rateMult = 1 + 0.04 * lvl;
  const heatMult = 1 + 0.12 * lvl;
  return {
    ...base,
    damage: base.damage * dmgMult,
    fireRate: base.fireRate * rateMult,
    heat: base.heat * heatMult,
    overclockLvl: lvl,
  };
}
```

### Heat / overheat sim
```typescript
class HeatSystem {
  current = 0;
  max = 100;
  coolRate = 25;       // /sec idle
  overheatThreshold = 100;
  overheating = false;

  fire(heatCost: number, dt: number): boolean {
    if (this.overheating) return false;
    this.current = Math.min(this.max, this.current + heatCost);
    if (this.current >= this.overheatThreshold) {
      this.overheating = true;
      setTimeout(() => { this.overheating = false; this.current = 0; }, 2000);
      return false;
    }
    return true;
  }

  tick(dt: number) {
    if (!this.overheating) this.current = Math.max(0, this.current - this.coolRate * dt);
  }
}
```

### Balance regression (AI playtest agent)
```typescript
import { runMatch, AiAgent } from "./sim";

const builds = [
  { weapon: "smg-t2", overclock: 0 },
  { weapon: "smg-t2", overclock: 5 },
  { weapon: "smg-t2", overclock: 10 },
];

async function regressionMatrix() {
  const results: any[] = [];
  for (const a of builds) for (const b of builds) {
    const wins = await runMatch({ a: new AiAgent(a), b: new AiAgent(b), n: 200 });
    results.push({ a, b, winRateA: wins.a / 200 });
  }
  return results;
  // 매 matrix 의 win-rate 의 0.4-0.6 의 stay 의 healthy.
}
```

### Bayesian win-rate update (live-ops)
```typescript
// Beta(a, b) — wins, losses 의 conjugate
function updateBeta(prior: [number, number], wins: number, losses: number): [number, number] {
  return [prior[0] + wins, prior[1] + losses];
}
function meanCi(post: [number, number]): { mean: number; lo: number; hi: number } {
  const [a, b] = post;
  const mean = a / (a + b);
  // approx 95% CI
  const v = (a * b) / ((a + b) ** 2 * (a + b + 1));
  const sd = Math.sqrt(v);
  return { mean, lo: mean - 1.96 * sd, hi: mean + 1.96 * sd };
}
```

### Build diversity (entropy)
```typescript
function shannonEntropy(counts: number[]): number {
  const total = counts.reduce((s, c) => s + c, 0);
  return -counts
    .map(c => c / total)
    .filter(p => p > 0)
    .reduce((s, p) => s + p * Math.log2(p), 0);
  // 매 entropy 의 high 의 → build diversity 의 healthy.
}
```

### Telemetry schema
```typescript
interface OverclockTelemetry {
  matchId: string;
  playerId: string;
  weaponId: string;
  tier: Tier;
  overclockLvl: number;
  damageDealt: number;
  selfHeatDamage: number;
  killCount: number;
  matchOutcome: "win" | "loss";
  patchVersion: "1.5";
}
```

## 매 결정 기준
| 상황 | Action |
|---|---|
| Win-rate > 0.6 (CI lower) | Nerf damage / fireRate scale |
| Build entropy < 1.5 | Buff alternatives |
| Overheat rate < 5% | Lower heat scale |
| Mid-cap overclock 의 best | OK — design intent |

**기본값**: cap × tier × 5, heat 12% / lvl, telemetry-driven monthly tune.

## 🔗 Graph
- 부모: [[게임 밸런싱|Game-Balance]]
- 변형: [[Skybound Protocol 코드리뷰]] · [[Skybound_Asset_Generation_Roadmap]]
- 응용: [[Live-Ops]]
- Adjacent: [[Telemetry]] · [[Build-Diversity]]

## 🤖 LLM 활용
**언제**: balance change 의 patch note 의 generate, build guide, 매 community Q&A.
**언제 X**: numeric tuning (telemetry + Bayes), gameplay feel (designer + playtest).

## ❌ 안티패턴
- **Unbounded multiplier**: 매 v1.0 의 mistake — 의 cap 의 always.
- **Linear scale 의 unbounded**: 매 diminishing return 의 missing.
- **No telemetry**: 매 blind tune.
- **PvE / PvP 의 single curve**: 매 separate curves 의 needed.

## 🧪 검증 / 중복
- Verified (Skybound v1.5 patch notes, internal balance doc).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — full v1.5 spec with formula + telemetry patterns |
