# 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) 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 GachaOwned` + **`Dictionary> 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 GachaOwned; public Dictionary> 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 중복 스택이 실제 전투에 영향을 미치게 됐으므로 플레이테스트 시 우선 확인.