레벨 디자인 — Chapter I 수치표
상태: 솔로 오클러
autoPlayRunN=200 측정으로 튜닝된 1차 수치.
문헌 근거는 LEVEL_DESIGN_RESEARCH.md.
종수 KPI 없음 — 페이싱·생존율이 우선.
페이싱을 바꾸면 측정 열을 다시 찍고 목표와 맞출 것.
1. 설계 전제
| 항목 | 값 |
|---|---|
| 첫 시련 파티 | 오클러 솔로 (허브 기사 영입은 시련 종료 후) |
| 측정 봇 | autoPlayRun — 싸게 사고 → 배치 → 전투 |
| 층간 회복 | postBattleHealRatio = 35% hpMax |
| 적 스케일 | floor^0.65 × 티어 × 아키타입 × soloSoftMult × (보스 배수) |
2. 목표 생존율 (솔로 봇)
SOLO_SIM_TARGETS (packages/shared/data/growthCurve.ts)
| 지표 | 목표 | 측정 (N=200) |
|---|---|---|
| ≥ F3 | 85% | ~88% |
| ≥ F4 | 75% | ~87% |
| ≥ F5 | 65% | ~77% |
| ≥ F6 (F5 보스 클리어) | 40% | ~52% |
| ≥ F10 | 4% | ~4–5% |
| victory | 2% | ~4% |
사람 플레이어는 상점·배치를 더 잘하므로 클리어율은 봇보다 높게 기대한다.
사람 디자인 목표(~55% F10 클리어)는 텔레메트리/수동 플레이로 별도 검증 — 나이브 봇 CI 하한과 분리.
2b. 듀오 봇 목표 (DUO_SIM_TARGETS)
오클러+기사 2인 (duoBenchmarkSquad), 첫 시련 이후 편성 가정.
| 지표 | 목표 | 측정 (N=120) |
|---|---|---|
| ≥ F6 | 38% | ~37–40% |
| ≥ F10 | 12% | ~10–12% |
| victory | 5% | ~4–5% |
3. 층별 스폰 가중 (monsterSpawnWeight)
동일 층 밴드에 여러 종이 있을 때 역할별 가중으로 뽑는다 (pickMonsterFromPool).
| 구간 | 의도 |
|---|---|
| F1–3 | ash_mite ↑ — 솔로 튜토리얼 위협 |
| F4–5 | spark_rat·ember_hound ↑ — 중반 압박 |
| F6–7 | 엘리트 가중 ↓, gale_bat·cliff_golem ↑ — 게일 전환 |
| F8–9 | wind_razor·엘리트 ↑ — 후반 밀도 |
균등 랜덤(rng.pick)은 사용하지 않는다.
4. 층별 페이싱 (CHAPTER_I_PACING)
| 로컬 | 태그 | maxGroup | soloSoftMult | 역할 |
|---|---|---|---|---|
| 1 | intro | 1 | 0.42 | 튜토리얼 위협 |
| 2 | intro | 1 | 0.50 | |
| 3 | intro | 1 | 0.58 | 솔로 밴드 끝 |
| 4 | pressure | 2 | 0.68 | 그룹 도입 |
| 5 | boss | 1 | 0.48 | Magma — 솔로 클리어 가능 스파이크 |
| 6 | pressure | 2 | 0.55 | 엘리트 구간 |
| 7 | pressure | 2 | 0.58 | |
| 8 | pressure | 2 | 0.55 | |
| 9 | pressure | 2 | 0.55 | |
| 10 | boss | 1 | 0.28 | Gale Stalker — Ch1 하드 스파이크 (Warden은 Ch2) |
보스 배수 (bossMultiplier): F≤5 → 1.35, F≤10 → 1.30, 이후 2.2 / 2.8.
5. 대표 적 위협 (시드 샘플)
| 로컬 | 적 HP | 적 ATK | 비고 |
|---|---|---|---|
| 1 | ~13 | ~2 | trash 1체 |
| 5 | ~127 | ~12 | Magma 보스 |
| 6 | ~80 | ~13 | 엘리트/그룹 |
| 10 | ~150 | ~13 | Gale Stalker (soft 0.28) |
플레이어 기준선: 오클러 HP 100 / DEF 2 / 단검 ATK 3 (+상점 성장).
6. 오클 밴드 (솔로 봇 측정 반영)
OCHL_BANDS — 초반은 활성화·구매로 낮아지고, 중반 spill로 회복.
| 글로벌 층 | ochlMin–Max |
|---|---|
| 1 | 10–14 |
| 2–4 | 4–12 |
| 5 | 8–18 |
| 6–9 | 14–30 |
| 10 | 18–45 |
7. 시뮬 수정 (LD와 함께 한 것)
- 봇이 전투 전에 구매하도록 순서 수정 (이전엔 스타터만 들고 돌진)
- 층간 회복 10% → 35% (솔로 어트리션 사망 방지)
- 활성화 불가 시 silent stall → 봇은
defeat로 종료 (플레이어는 상점 soft-lock; 오클 0 ≠ 패배)
8. 검증
pnpm --filter @chaosforge/shared test
# Admin → Growth 탭: 적 vs 시뮬 플레이어 + reach rate
9. 아직 아닌 것
- 사람 플레이 55% F10 클리어 검증
- 기사 영입 후 2차 시련 곡선
- Ch2/3 층별 스폰 가중 튜닝 — 1차 반영 · Ch2/3
soloSoftMult페이싱 추가 · F10/victory 밴드는 추가 튜닝 필요 - 영입 가격 플레이테스트 튜닝 (RECRUIT_PRICES_DRAFT.md 검수 OK)
완료 (2026-07): 몬스터 100종 DT 초안 → rembg → sprites/monsters/ + sprite-map.json · 6바이옴 배경 · Ch1 층별 스폰 가중.
2c. Ch2/3 솔로 봇 기준선 (1차 측정, N=120)
동일 CHAPTER_I_PACING·솔로 오클러 봇 — 챕터별 몬스터 풀·글로벌 스케일만 다름.
| 챕터 | ≥ F5 | ≥ F10 | victory |
|---|---|---|---|
| I | ~71% | ~10% | ~5% |
| II | ~63% | ~2% | ~0% |
| III | ~38% | ~0% | ~0% |
CHAPTER_II/III_PACING + 글로벌 보스 배수 곡선 조정 후 (2026-07). 측정: pnpm exec tsx scripts/measure-chapters.mjs