BurningTimesAi/공유/기획/GodDem/2026-08-22_P3B3_가챠_설계_v2.md

436 lines
38 KiB
Markdown
Raw Permalink Normal View History

# GodDem 가챠(아웃게임 Layer④) 수치 설계 v2 (재산정 — plan-auditor 차단 반영, v1 대체 아님·병존)
> 🔴 **본 문서는 v3로 대체됨(2026-08-23, V3-3 반영·예외적 v2 수정 허가)** — §4-4(구 PowerScore 6종)·§4-3(매직넘버 `itemId<10`)·§12(구 단가 60.5G/pt·28.4배)·게이트(§4-5) 부재 **전부 폐기**. 구현·참조는 반드시 최신본 `2026-08-22_P3B3_가챠_설계_v3.md`(또는 그 후속) 사용. 본 문서는 역사 보존 목적으로만 유지.
> **작성**: balance-designer(기획팀) 2026-08-22 · **P3-B3 v2 산출물**(v1 병존, B2·C 선례 계승) · **본 문서가 P3-B3 최신 SOT**
> **v1**: `2026-08-22_P3B3_가챠_설계_v1.md`(455줄, 역사 보존) — plan-auditor 모드A **차단**(Critical 3·Major 7·Minor 5·Improvement 3)
> **감사 원문**: `2026-08-22_P3B3_가챠_설계_v1_감사결과.md`(PM 전재, 전문 Read 완료) — 회송 범위 §4-4·§6-1·§8-2·§9·§10-3 5개 절. 그 외 구조·SOT 정합·기각안·기록 체계는 v1에서 **전부 통과**, v2도 무변경 승계.
> **재검증 결과(C44)**: Critical·Major 18항목 전부 **독립 재계산으로 실측 재확인** — 감사 판정에 이견 없음, 전 항목 반영(반박 필드 불요).
> **절대 제약**: GodDem 레포 Read만 수행, 수정 0건. BT 레포 커밋 금지(팀장·PM 영역).
> **표기 규칙(C5·C44)**: 🟢확정 · 🟡추정 · 🔴미확정/PD 확인 필요
---
## 0. 결론 요약 — 감사 항목별 반영 매핑표
| # | 판정 | v2 반영 절 | 처리 요지 |
|---|---|---|---|
| C-1 | Critical | §4-3·§9·§13 | retaliate/combo/hit 3종 = B4 선례(`MasteryAttackRatio` 패턴) 그대로 `GachaAttackRatio()` 신설 배선. stun_rate 1종만 미소비·PD 확인 잔존 |
| C-2 | Critical | §4-4 | PowerScore(Attack+Hp/4) 단일지표로 6종 전면 재도출. G3(45·55)<G4(75·85)<G5(130)<G6(205) 단조 증가 확보 |
| C-3 | Critical | §8 | "인플레이션 흡수 창구 이중화" 주장 철회. 정직 재기재: 가챠는 기대 75~90회(30,000~36,000G)에 수렴하는 **수집형 컨텐츠**. 풀 확장은 §17 후속 옵션(C50, 본 v2 미집행) |
| M-1 | Major | §10-3 | Pity CSV 2행 `n_GuaranteedGradeFloor` 5→0 |
| M-2 | Major | §4-3·§9 | Layer③ 커버리지 = **강화 제외 가드** 채택(id10~15). `CanUpgradeEquip()``itemId<10` 조건 추가 — 비용 0 루프 원천 차단 |
| M-3 | Major | §4-4 | 부위 재배정 — id10→Hat·id11→Boots(원 Weapon·Armor 중복 해소). 6부위 전 슬롯 1:1 커버 |
| M-4 | Major | §5-1·§7 | 젬가 재도출 — 상점 최고효율 환율(32:1, gold_48000 실측) 기준 젬가=골드가÷32. 기존 상점 무변경(자기완결 수정) |
| M-5 | Major | §7·§8-1 | "N회 도달" 결정론적 라벨 전량 정정 — 기대값(17.1회)·최악 보장값(40회) 분리 표기 |
| M-6 | Major | §13 | 원작 이탈 3건(Pool1 3.8배 관대화·10연 계열 교차·10연 천장 미적용) PD 확인 등재 |
| M-7 | Major | §14 | R-H4 "낮음~중"→"중~높음" 상향(M-4로 격차 확대된 부작용 인지) |
| m-1 | Minor | §9·§10-2 | `/10000f` 변환은 `SurvivalGachaTable` 자체 구현 책임 — `SurvivalUpgradeTable.Entry` 미경유 명시 |
| m-2 | Minor | §3(각주) | 217=5회(4회 아님) 정밀화 — 채택값 4는 1301 기준, 결론 무영향 |
| m-3 | Minor | §10-3 | 필드 개명(`n_GuaranteedGrade`→`Floor`) 근거 명기 |
| m-4 | Minor | §9 | hit_rate 회피 상쇄 로직 부재 확정(grep 실측) — 대칭 배선 대신 C-1과 동일 `GachaAttackRatio` 배선으로 통합 |
| m-5 | Minor | §9 | `SurvivalItemDef.GachaOptionSlots` 미사용 필드 제거, `SlotCountForGrade()` 순수함수로 대체 |
| I-1 | Improvement | §9·§10-5 | ValueTuple→`[Serializable] GachaOptionRoll` 클래스 전환(IL2CPP AOT 리스크 회피) |
| I-2 | Improvement | §9 | 10/100연 배치 = 회차별 순차 재평가(배치 고정 아님) 명시 |
| I-3 | Improvement | §12 | B3 자체 G/PowerScore 단가(60.5G/pt) 산출 — B1/B2/B4 전체 교차비교는 불균질 지표라 본 v2 범위 밖(§17) |
---
## 1. 설계 전제 (v1 §1과 동일 — 무변경)
| 항목 | 값 |
|---|---|
| 기준 플레이어 수준 | 신규(가챠 미보유) ~ 장기(전 6종 수집·다회 재추첨) |
| 목표 경험 | "이번엔 뭐가 나올까" 확률 기대감(P30) — 단 §8 재정정 결과 **유한 수집형**으로 정직 재정의 |
| 전제 스탯 앵커 | 상점(Grade1~2, id1~9) 무변경. 가챠 Grade3~6 신규 6종(§4-4 v2 전면 재도출) |
| 전제 경제 앵커 | 인게임 2,542G(보수적)/414,018G(런완주)/1,942,464G~3,333,232G(B1+B2+B4, C39 검산 완료) |
| 재화 | 골드(GOLD_ID=201, 1차) + 젬(GEM_ID=101, 2차) — 신규 재화 없음(무변경) |
| C39 신규 실측(v2 추가) | `SurvivalBattleManager.cs` L165-178(`ConsumedUpgradeKeys`/`ValidateUpgradeCoverage` 가드레일 원문)·L249(`dodge_rate` 피해감소 합산 배선)·`SurvivalMetaEquipUpgrade.csv`(155행, id1~9뿐)·`SurvivalEquipUpgradeTable.cs:86-92`(미등록id→0 반환 확인)·상점 gold_48000 32:1 환율 재확인 |
---
## 2. 재화 매핑 (v1 §2와 동일 — 통과, 무변경)
원작 이원결제(획득형 티켓 1차+젬 대체)를 골드(1차)+젬(2차)로 이식하는 구조는 감사 통과 항목. v1 §2 전문 승계.
---
## 3. 천장 스케줄 (v1 §3과 동일 — 통과, 무변경 + m-2 정밀화)
열쇠형(소프트4·하드40) 채택 결정은 감사 "모범 통과" 판정(feedback_pd_directive_altered_to_rescale §3-2·기각안 §3-3 정확 충족). v1 §3 전문 승계.
**m-2 정밀화**: §3-1 원표기 "1301·217 | 4회/40회"는 부정확 — 실측 `1301`(소프트천장 libid2need=3→4회)·`217`(libid2need=4→**5회**)로 서로 다르다. 본 설계가 채택한 "4"는 **1301 기준**이며(두 열쇠 계열 중 더 짧은 쪽을 의도적으로 선택, §3-2의 "즉각적 기대감" 근거와 정합), 217의 5회는 참고치일 뿐 채택 대상이 아니었다 — 결론 불변, 표기만 정밀화.
---
## 4. 등급 체계 확정 — Grade 3~6 (§4-1·4-2·4-3 구조는 무변경, §4-4 전면 재도출)
### 4-1·4-2. 배경·역할분리 (v1과 동일 — 통과, 무변경)
v1 §4-1·§4-2 전문 승계 — Grade1~2(상점 전용)/Grade3~6(가챠 전용) 역할 분리는 감사 대상 밖(변경 없음).
### 4-3. Forging·Reforging 비활성 + M-2 Layer③ 커버리지 결정(신규) + C-1 옵션 배선(신규)
**forging/reforging 비활성 방침 무변경**(v1 §4-3 그대로, B2 §8 골격 참조만).
**M-2 재량 결정 — Layer③(EquipUpgrade) 커버리지: 강화 제외 가드 채택**
두 선택지(① id10~15 EquipUpgrade 행 신설 vs ② 강화 제외 가드) 중 **②를 채택**한다.
- **①(행 신설) 기각 사유**: 6종 각각에 B2 방식 16레벨 V(L) 곡선·ItemBase를 새로 도출해야 하며, 이는 §8(경제 시뮬레이션)에 새로운 대형 골드 싱크 축을 추가해 재시뮬레이션이 통째로 필요해진다. 무엇보다 이는 "가챠가 반복 저비용 확률 컨텐츠"라는 §0(v1)·감사 통과 항목인 설계 정체성과 어긋난다 — 가챠 아이템에 B2식 장기 투자 축을 얹으면 B3가 B2의 아류가 되어 두 층의 역할 구분(§4-2 R-B5 해소)이 다시 흐려진다.
- **②(강화 제외 가드) 채택 사유**: 가챠 아이템은 "뽑는 순간 완성되는 패키지"(고정 PowerScore + 랜덤 옵션)로 설계 정체성을 유지한다. 구현은 1개 조건 추가로 끝나 M-2가 요구한 "비용 0 무한 루프 반드시 차단"을 가장 직접적으로 만족한다.
- **구현 지정**: `SurvivalMeta.CanUpgradeEquip(int itemId)``itemId < 10` 조건 추가 — `id ∈ {10..15}`는 강화 UI 진입 자체가 차단된다(`EquipUpgradeCost()`가 0을 반환하는 근본 원인 자체는 그대로 두되, 그 경로에 도달하지 못하게 원천 차단). `SurvivalMetaEquipUpgrade.csv`에 id10~15 행을 추가하지 않는다(신규 파일·신규 곡선 불요).
- **후속 옵션**: PD가 가챠 아이템에도 강화 축을 원할 경우 별도 P3 서브페이즈로 상정(§17).
**C-1 재량 결정 — 옵션 4종 전투 배선: B4 선례(`MasteryAttackRatio`) 그대로 3종 잠정 배선**
감사 지적대로 "4종 전부 배선 불가"는 과잉 일반화였다. B4가 이미 확립한 관행(미소비 스탯 → `SurvivalMeta.MasteryAttackRatio()` 공격 비율 항 잠정 배선, `penetrate_ratio`·`ele_hurt_add`·`ele_penetrate_ratio` 3종 선례)을 그대로 따른다.
| 옵션 | 배선 판정 | 배선 위치 |
|---|---|---|
| `retaliate_rate`(반격) | ✅ 배선 | `GachaAttackRatio()` 신설(§9) — 공격 비율 항 합산 |
| `combo_rate`(연격) | ✅ 배선 | 〃 |
| `hit_rate`(명중) | ✅ 배선 | 〃 — m-4 재확인: `dodge_rate` 대칭 배선이 아니라(회피 판정 자체가 코드에 없음, m-4 실측) B4 선례와 동일하게 공격 측 합산 채택 |
| `stun_rate`(기절) | ❌ 미배선 | 상태이상 시스템 자체가 전투에 없음(카운터·추가타와 달리 "적 행동 방해"는 기존 어떤 집계항에도 대응 불가) — §13 PD 확인 잔존 |
옵션 슬롯 수 표(B2 §8-4 그대로, 무변경): Grade3=2·Grade4=3·Grade5=4·Grade6=5(4종 초과분은 중복 재추첨, §6-4 무변경).
### 4-4. 신규 아이템 카탈로그 — C-2·M-3 반영 전면 재도출
**재도출 방법론**: B2 v2 §5-2 공식 지표 **PowerScore = Attack + Hp/4** 단일 지표로 6종을 동시에 설계해 등급 간 단조 증가를 수식으로 보장한다(v1의 "등급별 상이 앵커×상이 배수" 방식 폐기 — C-2가 지적한 근본 원인). 목표 PowerScore를 G3≈50·G4≈80·G5≈130·G6≈205로 먼저 정하고(기하 완충 ×1.6 계열, 기존 G2 최대치 40(id9)보다 여유 있게 상회), 각 아이템의 슬롯 성격(공격형/방어형/하이브리드)에 맞춰 Attack/Hp로 역산 배분한다.
**M-3 부위 재배정**: `Equipped[6]`은 부위당 1개만 장착 가능하므로, 같은 부위에 등급만 다른 아이템 2개를 두면 하위가 즉시 사장된다(v1의 Weapon 이중배치·Armor 이중배치 결함). id10을 **Hat**으로, id11을 **Boots**로 이동해 6부위(Weapon·Hat·Ring·Boots·Armor·Charm)를 정확히 1:1로 커버한다 — 사장 문제와 부위 커버리지 문제를 동시에 해소.
| ItemId | 이름(가칭) | 슬롯 | Grade | Attack | Hp | **PowerScore** | FuseTargetId | SecondaryStatKey |
|---|---|---|---|---|---|---|---|---|
| 10 | 여명의 두건 | **Hat** | 3 | 8 | 148 | **45.0** | 0 | `equip_defense_add` |
| 11 | 질풍의 각반 | **Boots** | 3 | 0 | 220 | **55.0** | 0 | `equip_defense_add` |
| 12 | 서릿발 대검 | Weapon | 4 | 75 | 0 | **75.0** | 0 | `equip_attack_speed_add` |
| 13 | 용비늘 흉갑 | Armor | 4 | 0 | 340 | **85.0** | 0 | `equip_defense_add` |
| 14 | 고대의 유물 | Charm | 5 | 30 | 400 | **130.0** | 0 | `equip_defense_add` |
| 15 | 천계의 인장 | Ring | 6 | 205 | 0 | **205.0** | 0 | `equip_attack_speed_add` |
**단조 증가 검증**: max(G3)=55.0 < min(G4)=75.0 < max(G4)=85.0 < G5=130.0 < G6=205.0 구간 역전 없음(C-2 해소 확인). G3 최소치(45.0) 기존 G2 최대치(id9=40.0)를 상회해 등급 경계 연속성도 확보.
**보강 논거(옵션 채널도 독립적으로 단조)**: PowerScore는 기본 스탯(Attack/Hp)만의 지표다. 옵션 슬롯 수(2→3→4→5)와 옵션 값(2%→4%→8%→16%, §6-3 무변경)도 등급에 따라 별도로 단조 증가하므로, C-1 배선 완료 후에는 **기본 스탯과 전투 기여 옵션 두 채널 모두**에서 상위 등급이 하위 등급을 약체화 없이 우월하다.
**이름·아트는 여전히 content-designer 가칭 영역**(무변경, v1과 동일 원칙).
---
## 5. 공식 — 뽑기 비용 (§5-1 M-4 반영 재도출, §5-2 무변경)
### 5-1. 골드·젬 단가 재도출 (M-4 — 젬 직결제 지배전략 소멸 해소)
**문제 재확인**: 상점 실측 결과 골드팩 환율이 균일하지 않다 — `gold_600`(30젬→600G)·`gold_12000`(600젬→12000G)은 20:1, **`gold_48000`(1500젬→48000G)은 32:1**로 고액 팩일수록 젬 효율이 좋다(표준 대량구매 할인). v1의 젬가(원작 20젬 그대로 포팅)는 20:1로 환산한 값이라, 실제로는 32:1인 `gold_48000` 경유가 항상 더 유리해 **젬 직결제 자체가 열등 전략**이 된다 — PD "특정 시점에만 유료 재화" 구조의 실효성이 무너진다.
**PM 제시 3안 중 재량 결정 — ② 할인율 차등(젬가 재도출) 채택**
| 안 | 판정 | 사유 |
|---|---|---|
| ① 젬 직결제 삭제 | 기각 | PD 지시("특정 시점에만 유료 재화") 자체가 뽑기 화면에서의 직접 대체결제를 의미 — 삭제하면 상점 경유 간접 결제만 남아 구조 자체가 원작 이원결제 스펙을 벗어난다 |
| **② 할인율 차등(채택)** | **채택** | 본 B3 CSV 내부에서만 값을 재도출 — **기존 상점 상품 무변경**(PM 지시의 PD 확인 조건 "기존 상점 상품 수정 필요 시"에 해당하지 않아 별도 PD 확인 불요) |
| ③ 상점 골드팩(32:1) 조정 | 기각 | 기존 상점(B1 단계부터 운영 중인 실제 콘텐츠) 자체를 손대는 안 — 가챠 범위를 넘는 경제 전반 변경이라 PD 확인이 필요해지고, 문제의 근본 원인(내부 비일관 젬가 산정)을 가챠 쪽에서 고치는 편이 더 자기완결적(C2)이다 |
**재도출 — 젬가 = 골드가 ÷ 32(상점 최고효율 환율 그대로 채용, 새 임의 상수 아님)**:
```
1회 뽑기: 400G ÷ 32 = 12.5 → 13젬(반올림, 젬 쪽이 손해 보지 않는 방향으로 올림)
10연: 4,000G ÷ 32 = 125젬 (나눗셈 정확, 반올림 불요)
100연: 36,000G ÷ 32 = 1,125젬 (나눗셈 정확, 반올림 불요)
```
**무지배 검증**: 100연 기준 최선의 상점 경유 경로는 `gold_48000` 1팩 구매(1,500젬→48,000G, 36,000G 사용 후 12,000G 잔여) = 실질 1,500젬 이상 소요. 직결제 1,125젬이 이보다 저렴 — **직결제가 항상 최선의 선택**이 되어 M-4가 지적한 지배전략 역전이 해소된다. 1-펄만 12.5→13 반올림 탓에 10연 대비 미세한 표면상 "할인율" 차이가 생기나(§7 각주), 골드측 확정 할인구조(10연 0%·100연 10%)가 이 나눗셈을 통해 그대로 승계된 결과이지 별도로 설계한 것이 아니다.
**골드가 자체는 무변경**(단차400G/10연4,000G/100연36,000G) — 감사가 문제 삼은 것은 젬 라인뿐, 골드 라인의 경제 산술은 "전항 통과" 판정.
### 5-2. 10연·100연 배율 (v1과 동일 — 통과, 무변경)
---
## 6. 풀 구성·확률표 (§6-1·6-2·6-3·6-4 값 전부 무변경 — ID/Grade 매핑 불변으로 재계산 불요, M-1만 §10-3에서 처리)
**핵심 확인**: M-3 부위 재배정은 id10~15의 **슬롯·외형**만 바꿨을 뿐 **Grade 배정(id10·11=G3, id12·13=G4, id14=G5, id15=G6)은 그대로**다. §6-1의 Pool1/2/3 가중치 테이블은 ItemId+Grade 쌍으로 정의되어 있어 재계산이 불요하다(감사도 "풀 가중치 합계 통과"로 이미 확정). v1 §6-1~§6-4 전문 그대로 승계 — 재게재 생략(C14).
**M-6 원작 이탈 고지는 §13으로 이관**(v1은 이 사실을 §13에 명시하지 않은 누락이 있었음 — 본 절에서 사실만 재확인, 목록화는 §13).
---
## 7. 뽑기 상품 구성 — M-4·M-5 반영 재작성
| 상품 | 골드가 | 젬가(재도출) | 비고 |
|---|---|---|---|
| 단차(1회) | 400G(무변경) | **13젬**(20→13, M-4) | 12.5 반올림 |
| 10연(10회) | 4,000G(무변경) | **125젬**(200→125, M-4) | 정확한 나눗셈, 할인 없음 |
| 100연(100회) | 36,000G(무변경) | **1,125젬**(1,800→1,125, M-4) | 정확한 나눗셈, 골드측 10%할인 그대로 승계 |
| 일일 무료 | 0 | 0 | 1일 5회, 300초 쿨다운(무변경) |
**세그먼트 영향(M-5 라벨 정정 — 결정론적 "도달" 표현 전량 교체)**:
- **무과금**: 일일 무료 5회 페이스면 **1사이클 기대(17.1회, §8-1)까지 약 3.4일**(17.1÷5), **최악의 경우(자연 히트 실패 8.9%)에도 40회=8일이면 확정 보장**(하드천장). "8일 소요"만 단독 언급하던 v1 표현은 최악 케이스를 평균처럼 오인시켰다.
- **소과금**: 골드팩(예: `gold_12000`=600젬→12,000G)으로 골드 보충 — 무변경.
- **고과금**: 100연 직결제 **1,125젬**(기존 상점 최고가 팩 15,000젬의 7.5%, v1 대비 더 저렴해짐 — M-4 재도출 결과) — "하드천장 2.5회 도달" 표현(v1)은 리셋 규칙 미반영 오류(M-5)였다. 정정: 100연 1회 구매는 기대적으로 **약 5.8회의 rare 히트 사이클**(100÷17.1)을 제공한다.
**M-7 반영 — R-H4 상향 인지**: M-4 재도출로 단차 젬가가 20→13으로 **더 저렴해져**, 상점 대비 가격 격차(daily_sword 50젬 vs 가챠 13젬 = 3.85배, v1의 2.5배보다 확대)가 오히려 커졌다. 이는 M-4 해소가 낳은 부수 효과이며 §14 R-H4에서 심각도를 상향 조정한다.
---
## 8. 경제 시뮬레이션 — C-3·M-5 전면 재작성 ("흡수 창구 이중화" 주장 철회)
### 8-1. 확률 구조 기반 기대값 재계산 (독립 검증 완료)
§6-2 리셋 규칙(Grade5·6 획득 시 카운터 0 리셋)을 반영하면 "40회 하드천장 도달"은 최악 케이스일 뿐 일반적 경로가 아니다. 아래 수치는 감사 원문 제시값을 **독립 재계산으로 재확인**한 것이다(C44):
- Pool2 구간(4~39회차, 36회, per-pull 6.5%) 전부 미적중 확률 = 0.935³⁶ ≈ **8.9%** → 사이클의 91.1%는 40회 미만에서 자연 히트
- 히트 시 Grade6 조건부 확률 = 0.911×23.1%(Pool2 내 grade5:6=10:3 비 6.5%p 중 6종비) + 0.089×20%(Pool3 grade5:6=80:20) ≈ **22.8%**
- **1사이클 기대 뽑기 수 ≈ 17.1회**(pool1 고정 3회 + pool2 절단기하분포 기대치)
- Grade6 첫 획득 기대 = 17.1 ÷ 0.228 ≈ **75.0회**
- id14(Grade5)+id15(Grade6) 둘 다 최소 1회 이상(쿠폰수집 문제) 기대 ≈ **75~90회 ≈ 30,000~36,000G**
### 8-2. 정직 재기재 — "인플레이션 흡수 창구 이중화" 주장 철회 (C-3)
**철회**: v1 §8-2는 "가챠가 B1~B4와 별개로 무제한 반복되는 소액 사이클이라 인플레이션을 이중으로 흡수한다"고 주장했다. 이는 §6-2 자체 리셋 규칙으로 반증되는 **미검증 자기 인증**이었다(C5 위반, 감사 C-3 인정).
**정직 재기재**: 가챠는 기대 **75~90회(30,000~36,000G)**에 6종 전부 보유라는 명확한 완주선이 있는 **유한 수집형 컨텐츠**다. 완주 이후의 뽑기는 전부 중복이며, C-1 배선 완료로 중복 시 옵션 재추첨(§6-4)이 여전히 실제 전투가치(`GachaAttackRatio` 재분배)를 갖긴 하나, "새 아이템 획득"이라는 핵심 재미축의 한계효용은 급격히 감소한다.
**이것은 결함이 아니라 원작 가챠 자체의 장르적 특성이다** — 원작 `drawlib`도 quality별 유한 pool 구조(§6-1 근거)라 "무한 흡수"를 설계 의도로 삼지 않았다. v1의 오류는 이 유한성을 "무한 반복 소액 사이클"로 잘못 프레이밍해 B1~B4와의 역할 차별화 근거로 오용한 데 있다.
**경제적 의의(정정된 주장)**: 30,000~36,000G는 그 자체로 유효한 5번째 골드 소모처다(런완주 414,018G의 7.2~8.7%, B1+B2+B4 실투자 1,942,464G의 1.5~1.9%) — 단 "무한 흡수"가 아니라 **"완주선이 뚜렷한 5번째 목표"**로 정정한다. B1(1,056,056G)·B2(510,496G)·B4(1,766,680G)가 각각 뚜렷한 만렙이 있는 것과 마찬가지로, 가챠도 "6종 완주"라는 뚜렷한 만렙이 있다는 점에서 오히려 B1~B4와 **동일한 유형**(유한 목표형)이지 이질적인 유형(무한 반복형)이 아니었다는 것이 정확한 재평가다.
**풀 확장은 본 v2에서 집행하지 않는다**(PM 지시, C50) — 신규 아이템을 추가해 완주선을 늦추는 것은 컨텐츠 깊이 확장(content-designer 영역 접근 + 재확률설계 필요)이라 스코프 증가다. §17에 후속 옵션으로만 제안한다.
### 8-3. 런 시나리오별 도달 (M-5 라벨 정정)
| 시나리오 | 런당 골드 | 뽑기 가능(400G) | **1사이클 기대(17.1회)** | **전 6종 수집(75~90회)** |
|---|---|---|---|---|
| 보수적(2,542G) | 6.36회 | 2.7런 | 11.8~14.2런 |
| 중간(8,200G) | 20.5회 | 1런 이내(0.83) | 3.7~4.4런 |
| 낙관적(22,550G) | 56.4회 | 1런 이내(0.30) | 1.3~1.6런 |
(계산: 17.1÷런당뽑기수 · 75~90÷런당뽑기수. 소수점 첫째자리 반올림)
**해석 정정**: v1은 "소프트천장(4회) 도달=모든 시나리오 1런 이내"를 근거로 즉각적 기대감을 주장했으나, 이는 "천장 진입"(가능성 개방)과 "천장 통과"(실제 획득)를 혼동한 서술이었다(M-1과 동일 계열 오류). 정정된 지표(1사이클 기대 17.1회)로도 중간~낙관적 시나리오는 1런 이내 첫 rare 기대라는 결론 자체는 유지되나, 보수적 시나리오는 "1런 이내"가 아니라 **2.7런**이 정확한 수치다.
---
## 9. 매판 시작 베이스 결합 — M-2·C-1·I-1·I-2·m-1·m-4·m-5 반영 재작성
가챠로 획득한 Grade3~6 아이템의 **Attack/Hp**는 B2 파이프라인을 그대로 재사용한다(무변경, v1 §9 그대로 — `TotalAttack()`/`TotalHp()`가 `SurvivalItemCatalog.All`을 순회하므로 코드 변경 없이 자동 편입).
**옵션 4종은 신규 `GachaAttackRatio()`로 집계한다(C-1)**:
```csharp
// SurvivalMeta.cs 신규 메서드 — B4 MasteryAttackRatio() 패턴 그대로 복제
public static float GachaAttackRatio()
{
// 순회 방식은 기존 TotalAttack()/TotalHp()와 동일하게 Data.Equipped(int[6]) 순회(C39-10, 신규 헬퍼 발명 안 함)
float sum = 0f;
foreach (var itemId in Data.Equipped)
if (itemId > 0 && Data.GachaRolledOptions.TryGetValue(itemId, out var rolls))
foreach (var r in rolls)
if (r.StatKey is "gacha_hit_rate" or "gacha_retaliate_rate" or "gacha_combo_rate")
sum += r.Value / 10000f; // ← m-1: 변환 책임은 여기, Entry.Applied 미경유
return sum; // stun_rate는 합산 대상에서 의도적 제외(§4-3)
}
public static float FinalAttack() =>
(BaseAttack + TotalAttack() + HeroLevels.AttackBudgetAt(Data.HeroLevel))
* (1f + Promotions.AttackBonusRatio(Data.PromotionStar) + MasteryAttackRatio() + GachaAttackRatio()); // ← 신규 항 1개 추가
```
**m-4 확정 반영**: `hit_rate``dodge_rate`(회피) 대칭으로 배선하는 방안은 채택하지 않는다 — 회피 판정 상쇄 로직 자체가 코드에 없음을 grep으로 확정했다(전투 코드 전체에 "회피 시도 무효화" 분기 부재). 대신 C-1과 동일하게 공격 측 `GachaAttackRatio()`에 합산해 배선 방식을 통일한다(대칭성보다 일관성 우선).
### 9-1. 코드 터치포인트 (v1 §9-1 대비 갱신 — 취소선 항목은 v1에서 폐기)
| 파일 | 변경 |
|---|---|
| `SurvivalItemCatalog.cs` | id10~15 6종 항목 갱신(§4-4 신규 슬롯·스탯). ~~`GachaOptionSlots` 필드~~(m-5, 미사용 삭제) 대신 `static int SlotCountForGrade(int grade)` 순수함수 추가(2/3/4/5 반환) |
| `SurvivalMeta.cs` | `SurvivalMetaData``int GachaPityCount` + `Dictionary<int,int> GachaOwned` + **`Dictionary<int, List<GachaOptionRoll>> GachaRolledOptions`**(I-1: 튜플→`[Serializable]` 클래스, §10-5) 3필드, `Version` 4→5. **신규**: `GachaAttackRatio()` 메서드(위 코드), `FinalAttack()`에 항 1개 추가 |
| `SurvivalBattleManager.cs` | 무변경(옵션 소비는 `FinalAttack()` 경유로 이미 흡수 — 별도 `RecalcPlayer()` 수정 불요, v1의 "RecalcPlayer 4항 조회 추가" 계획은 불필요했음이 재설계로 판명) |
| `SurvivalMeta.cs`(M-2) | `CanUpgradeEquip(int itemId)``itemId < 10 &&` 조건 추가 — id10~15 강화 UI 진입 차단(비용 0 루프 원천 차단) |
| 신규 파일 | `SurvivalGachaTable.cs` — Pool/Option/Pity 3종 CSV 로드. **m-1**: Option 값의 `/10000f` 변환은 이 파일 자체 책임(기존 `SurvivalUpgradeTable.Entry.Applied`는 인게임 12트랙 전용이라 가챠가 경유하지 않음) |
| `SurvivalStatCatalog.cs` | `hit_rate`·`retaliate_rate`·`combo_rate` 3종 `Note` 필드에 "P3-B3 v2: `GachaAttackRatio()` 잠정 배선 완료(B4 R-F1 계열)" 추가 갱신. `stun_rate`는 "전투 미소비, PD 확인(§13)" 유지 |
### 9-2. I-2 — 10/100연 배치 재평가 규약 (신규, 명시 필요 조항)
**10연·100연은 회차별 순차 처리**한다 — 배치 시작 시점에 Pool을 고정하지 않는다. 각 개별 뽑기마다 `GachaPityCount` 갱신 → Grade5/6 획득 시 즉시 0 리셋 → 다음 회차 Pool 재평가, 순으로 진행한다. 이는 원작 `drawtype 212`(장비형 10연)의 "확률 고정형"(libid2/3=1, 천장 미적용) 방식을 **채택하지 않은 것**이다 — 통일된 점진적 천장 모델을 열쇠형 전 상품에 균일 적용하는 쪽을 의도적으로 선택했다(M-6 PD 확인 3번 항목과 연동, §13).
---
## 10. 데이터 모델 — CSV 스키마 (§10-1·10-2 값 무변경, §10-3 M-1 수정, §10-5 I-1 반영)
### 10-1. `SurvivalMetaGachaPool.csv` (v1과 완전 동일 — 무변경, ID/Grade 매핑 불변)
```
n_PoolId,n_ItemId,n_Grade,n_Weight
풀번호(1일반/2소프트/3하드),아이템ID,등급,가중치(만분율)
1,10,3,3000
1,11,3,3000
1,12,4,2000
1,13,4,2000
2,10,3,2805
2,11,3,2805
2,12,4,1870
2,13,4,1870
2,14,5,500
2,15,6,150
3,14,5,8000
3,15,6,2000
```
### 10-2. `SurvivalMetaGachaOption.csv` (값 무변경, m-1 책임 주체만 문서화)
```
n_OptionId,s_StatKey,n_Grade,f_Value
옵션ID,스탯키(가챠 접두 gacha_),등급,원시값(BasisPoint·만분율 — SurvivalGachaTable 자체가 /10000f 변환)
1,gacha_hit_rate,3,200
2,gacha_stun_rate,3,200
3,gacha_retaliate_rate,3,200
4,gacha_combo_rate,3,200
5,gacha_hit_rate,4,400
6,gacha_stun_rate,4,400
7,gacha_retaliate_rate,4,400
8,gacha_combo_rate,4,400
9,gacha_hit_rate,5,800
10,gacha_stun_rate,5,800
11,gacha_retaliate_rate,5,800
12,gacha_combo_rate,5,800
13,gacha_hit_rate,6,1600
14,gacha_stun_rate,6,1600
15,gacha_retaliate_rate,6,1600
16,gacha_combo_rate,6,1600
```
### 10-3. `SurvivalMetaGachaPity.csv` — M-1 수정(2행 오류 정정) + m-3 개명 근거
```
n_Tier,n_PullsNeed,n_PoolId,n_GuaranteedGradeFloor
천장단계,발동회차,활성풀ID,보장등급하한(0=없음·비보장 가능성 개방만)
1,1,1,0
2,4,2,0
3,40,3,5
```
**M-1 수정**: 2행(Tier2·Pool2)의 `n_GuaranteedGradeFloor`를 v1의 `5`에서 **`0`**으로 정정. Pool2는 Grade5·6을 "등장 가능"하게 할 뿐(각 5.0%·1.5%) "보장"하지 않는다 — v1 값을 그대로 구현했다면 §6-1 확률표 전체가 논리적으로 무효화됐다.
**m-3 개명 근거**: 메타v1 §5-2 골격의 `n_GuaranteedGrade``n_GuaranteedGradeFloor`로 개명한 것은 "보장"이라는 단어가 Pool2(가능성 개방)와 Pool3(확정 보장)을 혼동시킨 것이 M-1 오류의 근본 원인이었기 때문이다 — 필드명에 "하한"을 명시해 의미를 구체화했다. `n_PoolId` 열 추가는 메타v1 골격의 자연스러운 확장(어느 Pool을 활성화하는지 필수 정보이나 원 골격엔 없었음)이다.
### 10-4. 뽑기 비용 테이블 — M-4 반영 갱신
```
n_PullCount,l_GoldCost,l_GemCost
1,400,13
10,4000,125
100,36000,1125
```
### 10-5. `SurvivalMetaData` v5 필드 — I-1 반영(ValueTuple 폐기)
```csharp
[Serializable]
public class GachaOptionRoll // ← 신규(I-1) — ValueTuple 대신 IL2CPP AOT 안전한 직렬화 가능 클래스
{
public string StatKey;
public float Value;
}
public int GachaPityCount;
public Dictionary<int, int> GachaOwned;
public Dictionary<int, List<GachaOptionRoll>> GachaRolledOptions; // ← List<(string,float)> 대체(I-1)
public const int CurrentVersion = 5;
```
---
## 11. 검증 시나리오 (v1 10건 승계 + v2 신규 4건)
| # | 시나리오 | 기대 결과 | 검증 |
|---|---|---|---|
| 1~10 | v1 §11과 동일(Pool 전환·리셋·중복재추첨·100연결제·CSV Applied 등) | 무변경 | v1 §11 승계 — 그대로 통과 |
| 11(신규) | Grade4 id13(Armor) 획득 후 Grade3 id11(Boots) 획득 | 두 아이템 서로 다른 슬롯이라 **동시 장착 가능**, 사장 없음 | §4-4 M-3 해소 확인 |
| 12(신규) | `combo_rate` 옵션 롤 보유 상태에서 `FinalAttack()` 조회 | `GachaAttackRatio()`가 해당 값(예: 4%=0.04)을 비율 항에 정확히 가산 | §9 C-1 배선 확인 |
| 13(신규) | id10(Grade3) 강화 시도(`OnClickEquipLevelUp(10)`) | UI 진입 차단(`CanUpgradeEquip(10)`=false) — 비용 0 루프 발생 안 함 | §4-3·§9 M-2 확인 |
| 14(신규) | 100연 젬 직결제(1,125젬) vs `gold_48000` 경유(1,500젬+잔여) | 직결제가 항상 375젬 이상 저렴 — 지배전략 역전 해소 | §5-1 M-4 무지배 검증 |
---
## 12. 밸런싱 제안 표 (표준 포맷, v1 대비 갱신분 + I-3 부분 반영)
| 항목 | v1 값 | v2 값 | 근거 |
|---|---|---|---|
| 옵션 4종 전투 배선 | 전항 미배선 | retaliate/combo/hit 3종 배선, stun만 잔존 | C-1 — B4 `MasteryAttackRatio` 선례 일관 적용 |
| 신규 아이템 6종 PowerScore | 비균질(id13=92.5>id15=55.0 역전) | 단조 증가(45→55→75→85→130→205) | C-2 — PowerScore=Attack+Hp/4 단일지표 재도출 |
| 신규 아이템 부위 배정 | Weapon×2·Armor×2·Charm·Ring(Hat·Boots 미커버) | 6부위 1:1 커버(Weapon·Hat·Ring·Boots·Armor·Charm) | M-3 — 슬롯 중복 사장 해소 |
| 단차 젬가 | 20젬(원작 리터럴 포팅) | **13젬**(골드가÷32 재도출) | M-4 — 상점 32:1 실효율과 정합, 지배전략 역전 해소 |
| 10연 젬가 | 200젬 | **125젬** | 〃 |
| 100연 젬가 | 1,800젬 | **1,125젬** | 〃 |
| Layer③(강화) 커버리지 | 미정의(비용0 루프 위험) | 강화 제외 가드(id10~15) | M-2 — "완성형 패키지" 정체성 유지, 최소 침습 해소 |
| §8-2 경제 프레이밍 | "인플레이션 흡수 이중화"(미검증) | "유한 수집형 컨텐츠"(75~90회 완주선) | C-3 — 자기인증 철회, §6-2 리셋 규칙 기반 재계산 |
| **B3 자체 골드/PowerScore 단가(I-3 부분 반영)** | 미산출 | 완주 기준 36,000G÷(45+55+75+85+130+205=595pt)≈**60.5G/pt** | I-3 — B1/B2/B4 전체 교차비교는 지표 이질성(레벨식·강화식·마스터리식이 서로 다른 단위) 때문에 본 v2 범위 밖(§17), 자체 지표만 우선 산출 |
**세그먼트 영향**: §7 세그먼트 표(M-4·M-5 반영) 참조.
---
## 13. PD 확인 대기 항목 — M-6 3건 추가 + 기존 항목 갱신
1. **젬 IAP 실화폐 가격**(v1 승계) — 상점 젬팩 5종 Price=0 placeholder, 원작 기준($0.0375/젬) 적용 시 가격표 산출 가능하나 시장 전략은 PD 영역.
2. **천장 스케줄 최종 확인**(v1 승계) — 열쇠형(4/40) 채택, PM 1차 권고(히어로 표준) 대비 판단 교체.
3. **stun_rate 전투 소비 로직 신설 여부**(C-1로 축소) — retaliate/combo/hit 3종은 본 v2로 배선 완료. stun_rate만 "상태이상 시스템 신설"이 필요한 유일 잔존 항목(system-designer·개발팀장 협의).
4. **forging/reforging 활성화 여부**(v1 승계) — "재료" 자원 미정의.
5. **(M-6 신규) Pool1 구성 원작 대비 약 3.8배 관대화**: 원작 pool1(q1 47.4%+q2 26.3%+q3 15.8%+q4 10.5%, 4개 등급 전부 존재)에서 상점이 점유한 q1·q2를 제외하고 q3+q4(합 26.3%)만 100%로 재정규화한 결과 — 개별 3:2 비율 자체는 보존했으나 **동일 티어 확률이 원작 대비 약 3.8배(100/26.3) 관대화**됐다. 상점/가챠 역할분리(§4-2)는 이미 채택된 방향이라 문제가 아니나, 그 결과로 발생한 확률 인플레이션 폭을 PD가 인지·승인했는지 확인 필요.
6. **(M-6 신규) 10연 상품의 계열 교차**: 열쇠형(1301·217) 라인에는 원작 데이터상 "10연" 행 자체가 없다. 본 설계의 10연 상품(할인 없음, 정확히 10배)은 **기각한 장비형(212) 계열에서 구조만 차용**한 것 — 열쇠형 고유 데이터가 아니라는 점을 명시.
7. **(M-6 신규) 10연 천장 적용 방식의 원작 이탈**: 원작 `212`(장비형 10연)는 `libid2·3=1`로 **천장이 전혀 적용되지 않는 확률 고정형**이다. 본 설계는 §9-2(I-2)에서 명시했듯 1/10/100연 전 상품에 통일된 점진적 천장을 적용한다 — 원작 10연의 "고정형" 성격을 채택하지 않은 의도적 설계 선택임을 확인 필요.
---
## 14. 리스크 (v1 5건 승계 + M-7 R-H4 상향)
| ID | 리스크 | v1 심각도 | v2 심각도 | 내용 |
|---|---|---|---|---|
| R-H1 | 옵션 미소비 | 높음(정보성) | **낮음~중**(하향) | C-1로 3/4종 배선 완료. stun_rate 1종만 잔존(§13-3) |
| R-H2 | 천장 가중치 형태 차용 | 중(🟡) | 중(🟡, 무변경) | 열쇠형 자체 가중치 원본 미보유(§3, 무변경) |
| R-H3 | Grade6 중복 스택 언밸런스 | 중 | 중(무변경) | C-1 배선 완료로 실제 전투 영향이 생겼으므로 향후 플레이테스트 시 재검토 우선순위 상향 권고 |
| **R-H4** | 젬 경제 이중 소모처 충돌 | 낮음~중 | **중~높음(M-7 상향)** | M-4 재도출로 단차 젬가가 20→13으로 낮아져 상점 대비 가격격차(3.85배, v1의 2.5배 대비 확대) 심화. 상점=저확정 즉시구매·가챠=저가+고티어확률이라는 구조적 긴장은 실제 가챠 게임의 통상 패턴이나, 격차 확대분은 인지·모니터링 필요 |
| R-H5 | 가챠 도입 정책 리스크 | 낮음(부분 해소) | 낮음(무변경) | IAP 가격 미확정(§13-1) 잔존 |
---
## 15. 기각안 (C32 — v1 8건 승계 + v2 신규 6건)
**v1 §15의 8건은 무변경 승계**(천장 3안·상점풀 공유·등급 1:1매핑·forging 완전활성화·옵션 재계수화·빈슬롯 유지·대형목돈 스케일).
**v2 신규 기각안**:
| # | 검토안 | 기각 사유 |
|---|---|---|
| 9 | M-2: id10~15 EquipUpgrade 행 신설(①안) | §4-3 — 6종 신규 V(L) 곡선 도출은 §8 전체 재시뮬레이션을 요구하는 대형 스코프. 가챠의 "완성형 패키지" 정체성과도 상충. 강화 제외 가드(②안)가 더 자기완결적이고 M-2가 요구한 "루프 차단"을 직접 만족 |
| 10 | M-4: 젬 직결제 완전 삭제(①안) | §5-1 — PD "특정 시점에만 유료 재화" 지시의 직접 대체결제 구조 자체를 없애 문자 그대로의 지시 위반 소지 |
| 11 | M-4: 상점 골드팩 32:1 환율 조정(③안) | §5-1 — 이미 운영 중인 상점 콘텐츠(B1 단계부터)를 가챠 설계 문서에서 변경하는 것은 범위 초과, PD 확인이 별도로 필요해짐. 문제의 근본이 "가챠 젬가 산정 경로"에 있으므로 그쪽에서 자기완결적으로 해소하는 것이 C2 원칙에 더 부합 |
| 12 | C-2: PowerScore에 옵션 슬롯 가치까지 산입해 통합 지표화 | §4-4 — B2가 정의한 PowerScore는 기본 스탯 전용 지표(옵션 개념 자체가 B2엔 없음). 통합 지표를 새로 정의하면 B2·C-2 감사가 준거로 삼은 원 지표와 어긋나 재검증 비용이 커진다. 대신 "기본 스탯 채널"(PowerScore)과 "옵션 채널"(슬롯수·값) 각각 독립 단조 증가를 보이는 것으로 충분(§4-4 보강 논거) |
| 13 | C-3: 가챠 풀을 본 v2에서 즉시 확장해 완주선을 늦춤 | §8-2 — PM이 명시적으로 "본 v2에서 집행하지 말 것"으로 지정(C50 스코프 통제). §17 후속 옵션으로만 제안 |
| 14 | M-7: 상점 daily_sword 등 기존 가격을 상향해 격차 축소 | §14 — 기존 상점가 변경은 가챠 설계 범위를 벗어나고(위 #11과 동일 논리), 격차 자체는 가챠 게임의 통상적 구조(확정구매=비싸고 낮은리스크, 확률뽑기=싸고 높은변동성)라 반드시 해소해야 할 결함이 아니라는 판단 — 리스크 등급 상향으로 인지만 표기 |
---
## 16. 변경 이력 (P16)
| 일시 | 작성 | 변경 | 근거 |
|---|---|---|---|
| 2026-08-22 | balance-designer | **v1 신규** — 재화 이원결제·천장 3안 비교(열쇠형 채택)·Grade3~6 도입·CSV 3종·옵션 4종 미소비 발견 | PD 지시 + PM 보강지시(천장 3안 비교) |
| 2026-08-22 | balance-designer | **v2 신규 — plan-auditor 차단 반영**(v1 병존). Critical 3(옵션 미소비 배선·PowerScore 등급역전·경제주장 철회)·Major 7(Pity CSV 오류·강화루프·부위재배정·젬가재도출·라벨오류·원작이탈고지·리스크상향)·Minor 5·Improvement 3 전 18항목 반영. 독립 재검증 결과 감사 판정에 이견 없음(반박 없음) | PM 회송(plan-auditor 모드A 차단) — 감사결과 파일 `2026-08-22_P3B3_가챠_설계_v1_감사결과.md` 전문 반영 |
---
## 17. 후속 조치 (본 v2 범위 밖)
1. **plan-auditor 모드A 재검증** — 본 v2가 새 감사 대상. C35 의무 호출.
2. **stun_rate 전투 로직 신설 여부**(§13-3) — system-designer·개발팀장 협의, 유일 잔존 미소비 옵션.
3. **forging/reforging 활성화**(§13-4) — "재료" 자원 정의 선행.
4. **젬 IAP 가격 확정**(§13-1) — PD 과금 정책.
5. **M-6 3건 원작 이탈 PD 확인**(§13-5~7) — 승인/재조정 여부.
6. **가챠 풀 확장(컨텐츠 깊이) — C-3 후속 옵션**(신규): §8-2가 정직 재기재한 "75~90회 완주선"을 늘리고 싶다면, 신규 Grade3~6 아이템 추가(content-designer 협업)로 수집 목표 자체를 확장하는 방향이 가능하다 — 본 v2는 PM 지시로 미집행(C50), 콘텐츠 배정과 재확률설계가 필요한 별도 스코프.
7. **id10~15 Layer③ 강화 축 개방 여부**(§4-3 M-2 후속) — PD가 원할 경우 신규 EquipUpgrade 곡선 도출 + §8 재시뮬레이션을 동반하는 별도 서브페이즈.
8. **I-3 전체 미집행분** — B1/B2/B4 전체 골드/파워 단가 교차비교(지표 이질성 해소 방법론 선행 필요).
9. **개발팀장 구현 착수** — 본 v2 plan-auditor 통과 후, C49 표준(설계→검증→구현→PM 커밋).
10. **R-H3 재검토 우선순위 상향** — C-1 배선 완료로 Grade6 중복 스택이 실제 전투에 영향을 미치게 됐으므로 플레이테스트 시 우선 확인.