From 919da9f7ddad8afc30a47360f4456d6e65374bc4 Mon Sep 17 00:00:00 2001 From: swrring Date: Sat, 22 Aug 2026 14:46:21 +0900 Subject: [PATCH] =?UTF-8?q?docs(BT13-GodDem):=20B4=20=EC=8A=A4=ED=82=AC?= =?UTF-8?q?=EB=A7=88=EC=8A=A4=ED=84=B0=EB=A6=AC=20=EC=84=A4=EA=B3=84=C2=B7?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=B0=A9=EC=88=98=20+=20penetrate/ele=20?= =?UTF-8?q?=EC=86=8C=EB=B9=84=EC=B2=98=20=EC=9D=B4=EC=8A=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - B4 설계(스킬 해금 드래프트 풀·그랜드파더 10종·마스터리 3종·데이터 v4·plan-auditor 조건부통과) - ★이슈: penetrate/ele 적 방어·속성 시스템 부재로 소비처 없음→공격% 잠정·PD 확인 영역 - 개발팀장 B4 구현 착수(C6 백업) Co-Authored-By: Claude Fable 5 --- 공유/PD_지시_트래킹/개발팀_PD_지시_로그.md | 2 +- .../2026-08-22_P3B4_스킬마스터리_설계_v1.md | 472 ++++++++++++++++++ 공유/대화로그/GodDem/2026-08-22.md | 17 + 3 files changed, 490 insertions(+), 1 deletion(-) create mode 100644 공유/기획/GodDem/2026-08-22_P3B4_스킬마스터리_설계_v1.md diff --git a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md index 9523f96..cb56410 100644 --- a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md +++ b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md @@ -33,7 +33,7 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| -| BT13-GodDem | 2026-08-19~20 | **GodDem 프로젝트 개시 + 인게임 「황야의 생존자」형 전환** — PD 직접 지시 6건 연속. ①(2026-08-19) "이 세션은 우리 조직의 새로운 프로젝트인 GodDem 프로젝트 개발을 위한 세션이야. 현재 프로젝트 레포는 'E:\NerdNavis\GodDem' 이므로 코드 및 프로젝트를 제대로 검토해보고 개발할 준비가 되면 보고해." ②"앞으로는 도구 사용을 묻지 않도록 자동으로 도구 승인처리해" (+ ToolSearch·MCP 리소스 도구·`.claude/**` 편집 영구 허용 반복 지시) ③"인게임을 유튜브(https://youtu.be/cBVc0OwUX6U 황야의 생존자) 영상과 같은 형태로 변경. 더미 리소스(기존 자산)로 기본 시스템 동일 설계·인게임 씬 배치. **아웃게임 유지, 인게임 씬만 변경**" + 전투 명세 4항(플레이어 중앙 고정 자동공격 / 매판 리셋 로그라이크 스텟 강화 / 10웨이브 보스·스테이지 클리어 / **신규: 경험치→레벨업마다 특수 스킬 3종 택1**) ④"원작 APK 디컴파일해서 게임 로직·데이터 분석. 능력치·성장 수치·강화 비용 등 밸런스 데이터를 그대로 활용하고 싶다" ⑤"FABLE5로 원작 복호화 리버싱을 먼저 시도해봐. 안되면 자체 수치로 설계할게" ⑥"csv 형태로 제작해줘" / "워크플로우 설계할 때 ponytail 스킬을 써줘". **C13 위반 자진 보고** — 본 6건이 대화로그에만 기록되고 본 트래킹 로그에 미등록 상태였음(pm-auditor 감사 Critical 적발). 소급 등록. **[2026-08-21 인게임·메타·밸런스 일괄 집행]** PD "전부 진행해" 승인 — 1차 인게임 완결(A10 분신 10종 정합·일시정지·적 HP바, `77bd835`·`ee9ec11`) + 3차 상점·Hero 메타 결선(SurvivalMeta 분리 신설, `57a8fcf`) + 4차 결함 해소(penetrate_ratio 함정·A13 사거리·waveInStage 산식·이중 SOT, `7728a41`) + 5차 S3 v2 밸런스 확정 반영(42/1/14/+3, plan-auditor 재검증 통과, `d5dea4d`). 상세: 공유/대화로그/GodDem/2026-08-21.md §3~§12. **[2026-08-22 밸런스 원작이탈 지적·2층 재구현]** PD 플레이 실측 지적 — 공격력이 원작 2층(정액 hero_level power + 배율 attack_add) 중 배율만·축소, 정액 트랙 누락 / 몬스터 원작 소스 부재. 근본 = 본 로그 사후조치 (2) "스케일 재조정 방침"을 PD 재확인 없이 진행한 C36 위반이 플레이로 표면화. PD "이 방향으로 재구현해" 승인 → 공격력 원작 2층 복원 착수 (C49: balance-designer 재설계 → plan-auditor 검증 → 개발팀장 구현). memory `feedback_pd_directive_altered_to_rescale` 신설. **[완료 2026-08-22 GodDem `26ff655`]** 공격력 원작 2층 복원 완결 — APK 재추출로 배율(0.05~0.30)=원작 attack_add prefix-10 원본 확정(이탈 아님)·정액 트랙 `attack`(30~600) 신설로 2층 복원·C49 이중검증(balance v2→plan-auditor 통과)·플레이테스트 2층 산술 정확 재현(22~1691). PD 지적 (a)(b) "정액 누락" 단일원인 해소. 부수 강화테이블 전수 원작 정합 확인. **잔여 = R-M2(정액 몰빵 스테이지1 보스 3.5배 오버킬) 조정 방향 PD/balance 판단 1건**. 상세 대화로그 §15~§20. **[2026-08-22 원작 아키텍처 전면 이식 착수·대규모]** PD 지적 2건("총 스테이지 구성 원작 동일"·"능력치가 원작보다 훨씬 적음·원작은 아웃게임 확장") → PD 결정 "원작 데이터 아키텍처 전면 이식이 맞아"+"이대로 진행". 실측 gap 3축(능력치 24 vs 13·아웃게임 5층 vs 1층·스테이지 6구간 vs 무한). 근본=초기 MVP 전환 원작 축소(feedback_pd_directive_altered_to_rescale 연장). P32 분할: 1단계 balance-designer 이식청사진 → 2단계 system-designer 메타재설계 → 3단계 축별 구현. 상세 대화로그 §21. **[P1 완료·P2 착수 2026-08-22]** 청사진 v1 완료(`b5d95cc`, 능력치 24종/PvE 18·아웃게임 5층·스테이지=원작 teamwavepassreward 54단계뿐/StageBalance는 GodDem 자산 정정·재사용3/확장3). PD 결정: 가챠 원작대로 도입(과금 신설)·현 세션 P2 계속. P2 system-designer 메타 아키텍처 재설계 착수(5층·능력치18 배치·인게임/아웃게임 경계 재정의). 상세 §22~§23. **[P2 완료 2026-08-22]** 메타 아키텍처 재설계 v1 완료 — 5층 확정(①영웅레벨·②승급·③장비강화·④가챠·⑤스킬마스터리, 인게임 "런레벨"과 명칭 분리) + 능력치 18종 배치(청사진 §2-3 "미보유 5종" 정정: `stun_rate` 누락 확인·실제 6종) + ★결합 지점 정정(초안 "1곳"→plan-auditor 감사로 4개 호출부 확인, `SurvivalLobbyController.Hero.cs` 2곳 누락분 포함, `FinalAttack()`/`FinalHp()` 단일 캡슐화 메서드로 3중 SOT 재발 방지 설계) + 재사용/확장 판정(SurvivalMeta 확장·Upgrade/Skill 불변·ItemCatalog 확장·**ShopCatalog는 "구조 확장 필요"로 정정**, 확률 지급물 미지원 확인) + 신규 클래스 4·CSV 7종 골격 + P3 4서브페이즈 분할(B1레벨승급→B2장비→B4스킬→B3가챠). plan-auditor 모드A 감사 1회 수행(조건부통과, Critical 2·Major 6·Minor 4 — 전부 반영 후 확정). **PD 확인 대기 2건**: ①가챠 소비재화(골드 vs 젬, 원작 근거 부재 🔴) ②가챠 가격·확률 실값. **[P3-A 착수 2026-08-22]** PD 방향 확정 "설계대로 진행"(인게임 매판 리셋 + 아웃게임 영구성장이 매판 시작 베이스 = 영구성장 RPG, P2 경계재정의 그대로). P3-A 능력치 정리 착수(penetrate_ratio 이관·ele 2종 층확정·18종 체계). 후속 B1→B2→B4→B3(가챠)+C(스테이지 병렬). 상세 §25. **[P3-A 완료·B1 착수 2026-08-22]** P3-A GodDem `8684211`(penetrate ⑤이관·ele ⑤확정·StatCatalog SOT·plan-auditor 조건부통과). **★부수 성과**: 직전 공격력 2층의 attack 정액 트랙이 상점 미노출(소비O·상점X)로 플레이어 미도달이던 결함 발견·수정 — Play 실측 22→52 도달 회복(memory `feedback_shop_exposure_filter_source_both` 신설). P3-B1(레벨+승급) balance-designer 설계 착수 + 메타문서 ele④→⑤ 갱신. 상세 §26~§28. **[B1 설계완료·구현착수 2026-08-22]** balance-designer B1 설계(레벨1~60·승급0~11·매판 베이스 결합·plan-auditor 조건부통과). **★근본 발견**: 인게임 골드→아웃게임 전환 브릿지 부재(CurrencyManager.Add 0건)=영구성장 전제 미구현. **PD 결정**: "원작처럼 맞춰 전체 밸런싱 동일성 확인 후 추후 변경" → 유한캡(60/11) 원작 정합 확정·원작 충실 1차. 개발팀장 B1 구현 착수(전환 브릿지 최우선). 상세 §29~§31. **[B1 완료 2026-08-22 GodDem `a3f62ab`]** 영구 성장 첫 층 게임 진입 — 인게임 골드→아웃게임 영구재화 전환 브릿지 신설(크로스세션 영속 확증)·영웅레벨 1~60·승급 star0~11·매판 시작 베이스 결합(신규 22/400 불변)·defense 분리클램프. plan-auditor 통과(Minor1 NRE 3중 방어 동봉)·메타문서 유한캡 정정. 남은 B2(장비)→B4(스킬)→B3(가챠)+C(스테이지). 상세 §32~§34. **[B2 착수 2026-08-22]** PD "현 세션 B2 계속" + 지적 "세션 이동 되묻지 마"(feedback_session_transition_repeated_prompting 신설·세션 이동 재제안 중단). balance-designer 장비강화 Layer③ 설계 착수(heroequipment 정합·M수열 재추출). 상세 §35. **[B2 v1 완료·재추출 착수 2026-08-22]** B2 설계 v1(2축 레벨/등급·plan-auditor 조건부통과·Critical2 융합버그 재설계). **원작 M수열 재추출 미해소·역산** → PD "원작처럼 맞춰" 정합 위해 개발팀장 heroequipment 재추출 착수(공격력 재추출 선례·되묻지 않고 진행). 후속 B2 v2 재산정→검증→구현. 상세 §36~§37. **[재추출 완료·(A) 노선 확정 2026-08-22]** heroequipment 재추출 완료 — 매핑 §2-3 전부 정확(M수열 [1..200] 16단·등급 ×1/5/10/20/40/80·비용 Base+V·forging 전이 q2→6 정정). **(A) 형태 이식 확정**(구조 원작·스케일 재산정, 원작 M×200 절대이식은 게임 붕괴로 (B) 기각·B1/공격력/배율 일관). balance-designer B2 v2 착수(forging 정정·근거 격상). 상세 §38. **[B2 v2 통과·구현착수 2026-08-22]** B2 v2 plan-auditor 통과(신규결함0·재추출 형태정합·forging q2→6·무변경 승계·Improvement1 비차단=장비 진입시점 플레이테스트 튜닝). 개발팀장 B2 구현 착수(EquipLevel Version3·SecondaryStatKey·TryFuse 차단+환급·CSV룩업·강화 UI). 상세 §39~§41. **[B2 완료 2026-08-22 GodDem `bc07573`]** 영구 성장 둘째 층(장비 강화) 게임 진입 — 장비 레벨별 성장·매판 베이스 결합(신규 22/400 불변)·융합 환급 세탁차단·강화 UI 도달. plan-auditor 통과(7항)·개별 stage 커밋·push 완료. 남은 B4(스킬마스터리)→B3(가챠)+C(스테이지). 상세 §42~§44. | **진행중** || **진행중** | ①레포 검토 완료·`공유/대화로그/GodDem/2026-08-19.md` ②`.claude/settings.json` dontAsk+allow 확장 (커밋 `7366860`·`c4a5dfd`) ③설계도 `공유/기획/GodDem/2026-08-19_인게임_중앙디펜스_전환_설계_v1.md` (커밋 `4346d4d`) ④⑤**복호화 성공** — 22바이트 반복 XOR·`libil2cpp.so` 리버싱 불필요. 원작 밸런스 237테이블 복호화 ⑥**CSV 230종/22,261행** 변환·PD 전달. 종합 매핑 SOT `공유/기획/GodDem/2026-08-20_원작밸런스_해독_매핑_v1.md`. **P1 청사진** `공유/기획/GodDem/2026-08-22_원작아키텍처_이식청사진_v1.md`(`b5d95cc`, 산출물 경로 누락분 소급 추가·pm-auditor 지적). **P2 메타 재설계** `공유/기획/GodDem/2026-08-22_메타아키텍처_재설계_v1.md`(system-designer, plan-auditor 검증 완료). | — | **PD 결정 대기 2건**: (1) 복호화 XOR 키의 조직 기록 보존 가부 (타사 기술적 보호조치 우회 수단 — PM 재량 밖, C36-2 보수 선택으로 문서에서 마스킹) (2) 원작 절대수치 vs 자체 스케일 재조정 방침 확인. **다음 단계**: 설계 P1(중앙 고정 플레이어+사방 스폰+웨이브 씬 골격 배치) 착수. **후속 조치**: `.gitignore`에 `scratchpad/`·`wild/` 선제 등재, `공유/대화로그/INDEX.md`에 GodDem 등재. **저작권 방침**: 원작 수치는 참고, 아트·텍스트 리소스 사용 불가. 추출물 레포 미커밋(git 실측 확인). | +| BT13-GodDem | 2026-08-19~20 | **GodDem 프로젝트 개시 + 인게임 「황야의 생존자」형 전환** — PD 직접 지시 6건 연속. ①(2026-08-19) "이 세션은 우리 조직의 새로운 프로젝트인 GodDem 프로젝트 개발을 위한 세션이야. 현재 프로젝트 레포는 'E:\NerdNavis\GodDem' 이므로 코드 및 프로젝트를 제대로 검토해보고 개발할 준비가 되면 보고해." ②"앞으로는 도구 사용을 묻지 않도록 자동으로 도구 승인처리해" (+ ToolSearch·MCP 리소스 도구·`.claude/**` 편집 영구 허용 반복 지시) ③"인게임을 유튜브(https://youtu.be/cBVc0OwUX6U 황야의 생존자) 영상과 같은 형태로 변경. 더미 리소스(기존 자산)로 기본 시스템 동일 설계·인게임 씬 배치. **아웃게임 유지, 인게임 씬만 변경**" + 전투 명세 4항(플레이어 중앙 고정 자동공격 / 매판 리셋 로그라이크 스텟 강화 / 10웨이브 보스·스테이지 클리어 / **신규: 경험치→레벨업마다 특수 스킬 3종 택1**) ④"원작 APK 디컴파일해서 게임 로직·데이터 분석. 능력치·성장 수치·강화 비용 등 밸런스 데이터를 그대로 활용하고 싶다" ⑤"FABLE5로 원작 복호화 리버싱을 먼저 시도해봐. 안되면 자체 수치로 설계할게" ⑥"csv 형태로 제작해줘" / "워크플로우 설계할 때 ponytail 스킬을 써줘". **C13 위반 자진 보고** — 본 6건이 대화로그에만 기록되고 본 트래킹 로그에 미등록 상태였음(pm-auditor 감사 Critical 적발). 소급 등록. **[2026-08-21 인게임·메타·밸런스 일괄 집행]** PD "전부 진행해" 승인 — 1차 인게임 완결(A10 분신 10종 정합·일시정지·적 HP바, `77bd835`·`ee9ec11`) + 3차 상점·Hero 메타 결선(SurvivalMeta 분리 신설, `57a8fcf`) + 4차 결함 해소(penetrate_ratio 함정·A13 사거리·waveInStage 산식·이중 SOT, `7728a41`) + 5차 S3 v2 밸런스 확정 반영(42/1/14/+3, plan-auditor 재검증 통과, `d5dea4d`). 상세: 공유/대화로그/GodDem/2026-08-21.md §3~§12. **[2026-08-22 밸런스 원작이탈 지적·2층 재구현]** PD 플레이 실측 지적 — 공격력이 원작 2층(정액 hero_level power + 배율 attack_add) 중 배율만·축소, 정액 트랙 누락 / 몬스터 원작 소스 부재. 근본 = 본 로그 사후조치 (2) "스케일 재조정 방침"을 PD 재확인 없이 진행한 C36 위반이 플레이로 표면화. PD "이 방향으로 재구현해" 승인 → 공격력 원작 2층 복원 착수 (C49: balance-designer 재설계 → plan-auditor 검증 → 개발팀장 구현). memory `feedback_pd_directive_altered_to_rescale` 신설. **[완료 2026-08-22 GodDem `26ff655`]** 공격력 원작 2층 복원 완결 — APK 재추출로 배율(0.05~0.30)=원작 attack_add prefix-10 원본 확정(이탈 아님)·정액 트랙 `attack`(30~600) 신설로 2층 복원·C49 이중검증(balance v2→plan-auditor 통과)·플레이테스트 2층 산술 정확 재현(22~1691). PD 지적 (a)(b) "정액 누락" 단일원인 해소. 부수 강화테이블 전수 원작 정합 확인. **잔여 = R-M2(정액 몰빵 스테이지1 보스 3.5배 오버킬) 조정 방향 PD/balance 판단 1건**. 상세 대화로그 §15~§20. **[2026-08-22 원작 아키텍처 전면 이식 착수·대규모]** PD 지적 2건("총 스테이지 구성 원작 동일"·"능력치가 원작보다 훨씬 적음·원작은 아웃게임 확장") → PD 결정 "원작 데이터 아키텍처 전면 이식이 맞아"+"이대로 진행". 실측 gap 3축(능력치 24 vs 13·아웃게임 5층 vs 1층·스테이지 6구간 vs 무한). 근본=초기 MVP 전환 원작 축소(feedback_pd_directive_altered_to_rescale 연장). P32 분할: 1단계 balance-designer 이식청사진 → 2단계 system-designer 메타재설계 → 3단계 축별 구현. 상세 대화로그 §21. **[P1 완료·P2 착수 2026-08-22]** 청사진 v1 완료(`b5d95cc`, 능력치 24종/PvE 18·아웃게임 5층·스테이지=원작 teamwavepassreward 54단계뿐/StageBalance는 GodDem 자산 정정·재사용3/확장3). PD 결정: 가챠 원작대로 도입(과금 신설)·현 세션 P2 계속. P2 system-designer 메타 아키텍처 재설계 착수(5층·능력치18 배치·인게임/아웃게임 경계 재정의). 상세 §22~§23. **[P2 완료 2026-08-22]** 메타 아키텍처 재설계 v1 완료 — 5층 확정(①영웅레벨·②승급·③장비강화·④가챠·⑤스킬마스터리, 인게임 "런레벨"과 명칭 분리) + 능력치 18종 배치(청사진 §2-3 "미보유 5종" 정정: `stun_rate` 누락 확인·실제 6종) + ★결합 지점 정정(초안 "1곳"→plan-auditor 감사로 4개 호출부 확인, `SurvivalLobbyController.Hero.cs` 2곳 누락분 포함, `FinalAttack()`/`FinalHp()` 단일 캡슐화 메서드로 3중 SOT 재발 방지 설계) + 재사용/확장 판정(SurvivalMeta 확장·Upgrade/Skill 불변·ItemCatalog 확장·**ShopCatalog는 "구조 확장 필요"로 정정**, 확률 지급물 미지원 확인) + 신규 클래스 4·CSV 7종 골격 + P3 4서브페이즈 분할(B1레벨승급→B2장비→B4스킬→B3가챠). plan-auditor 모드A 감사 1회 수행(조건부통과, Critical 2·Major 6·Minor 4 — 전부 반영 후 확정). **PD 확인 대기 2건**: ①가챠 소비재화(골드 vs 젬, 원작 근거 부재 🔴) ②가챠 가격·확률 실값. **[P3-A 착수 2026-08-22]** PD 방향 확정 "설계대로 진행"(인게임 매판 리셋 + 아웃게임 영구성장이 매판 시작 베이스 = 영구성장 RPG, P2 경계재정의 그대로). P3-A 능력치 정리 착수(penetrate_ratio 이관·ele 2종 층확정·18종 체계). 후속 B1→B2→B4→B3(가챠)+C(스테이지 병렬). 상세 §25. **[P3-A 완료·B1 착수 2026-08-22]** P3-A GodDem `8684211`(penetrate ⑤이관·ele ⑤확정·StatCatalog SOT·plan-auditor 조건부통과). **★부수 성과**: 직전 공격력 2층의 attack 정액 트랙이 상점 미노출(소비O·상점X)로 플레이어 미도달이던 결함 발견·수정 — Play 실측 22→52 도달 회복(memory `feedback_shop_exposure_filter_source_both` 신설). P3-B1(레벨+승급) balance-designer 설계 착수 + 메타문서 ele④→⑤ 갱신. 상세 §26~§28. **[B1 설계완료·구현착수 2026-08-22]** balance-designer B1 설계(레벨1~60·승급0~11·매판 베이스 결합·plan-auditor 조건부통과). **★근본 발견**: 인게임 골드→아웃게임 전환 브릿지 부재(CurrencyManager.Add 0건)=영구성장 전제 미구현. **PD 결정**: "원작처럼 맞춰 전체 밸런싱 동일성 확인 후 추후 변경" → 유한캡(60/11) 원작 정합 확정·원작 충실 1차. 개발팀장 B1 구현 착수(전환 브릿지 최우선). 상세 §29~§31. **[B1 완료 2026-08-22 GodDem `a3f62ab`]** 영구 성장 첫 층 게임 진입 — 인게임 골드→아웃게임 영구재화 전환 브릿지 신설(크로스세션 영속 확증)·영웅레벨 1~60·승급 star0~11·매판 시작 베이스 결합(신규 22/400 불변)·defense 분리클램프. plan-auditor 통과(Minor1 NRE 3중 방어 동봉)·메타문서 유한캡 정정. 남은 B2(장비)→B4(스킬)→B3(가챠)+C(스테이지). 상세 §32~§34. **[B2 착수 2026-08-22]** PD "현 세션 B2 계속" + 지적 "세션 이동 되묻지 마"(feedback_session_transition_repeated_prompting 신설·세션 이동 재제안 중단). balance-designer 장비강화 Layer③ 설계 착수(heroequipment 정합·M수열 재추출). 상세 §35. **[B2 v1 완료·재추출 착수 2026-08-22]** B2 설계 v1(2축 레벨/등급·plan-auditor 조건부통과·Critical2 융합버그 재설계). **원작 M수열 재추출 미해소·역산** → PD "원작처럼 맞춰" 정합 위해 개발팀장 heroequipment 재추출 착수(공격력 재추출 선례·되묻지 않고 진행). 후속 B2 v2 재산정→검증→구현. 상세 §36~§37. **[재추출 완료·(A) 노선 확정 2026-08-22]** heroequipment 재추출 완료 — 매핑 §2-3 전부 정확(M수열 [1..200] 16단·등급 ×1/5/10/20/40/80·비용 Base+V·forging 전이 q2→6 정정). **(A) 형태 이식 확정**(구조 원작·스케일 재산정, 원작 M×200 절대이식은 게임 붕괴로 (B) 기각·B1/공격력/배율 일관). balance-designer B2 v2 착수(forging 정정·근거 격상). 상세 §38. **[B2 v2 통과·구현착수 2026-08-22]** B2 v2 plan-auditor 통과(신규결함0·재추출 형태정합·forging q2→6·무변경 승계·Improvement1 비차단=장비 진입시점 플레이테스트 튜닝). 개발팀장 B2 구현 착수(EquipLevel Version3·SecondaryStatKey·TryFuse 차단+환급·CSV룩업·강화 UI). 상세 §39~§41. **[B2 완료 2026-08-22 GodDem `bc07573`]** 영구 성장 둘째 층(장비 강화) 게임 진입 — 장비 레벨별 성장·매판 베이스 결합(신규 22/400 불변)·융합 환급 세탁차단·강화 UI 도달. plan-auditor 통과(7항)·개별 stage 커밋·push 완료. 남은 B4(스킬마스터리)→B3(가챠)+C(스테이지). 상세 §42~§44. **[B4 설계·구현착수 2026-08-22]** B4 스킬마스터리 설계(스킬 해금 드래프트 풀·그랜드파더 10종·마스터리 스탯 3종·데이터 v4·plan-auditor 조건부통과). **★이슈**: penetrate/ele 3종 적 방어·속성 시스템 부재로 소비처 없음(penetrate 사장 계열)→공격% 잠정 배선·PD 밸런싱 확인 영역. 개발팀장 구현 착수(C6 백업). 상세 §45~§46. | **진행중** || **진행중** | ①레포 검토 완료·`공유/대화로그/GodDem/2026-08-19.md` ②`.claude/settings.json` dontAsk+allow 확장 (커밋 `7366860`·`c4a5dfd`) ③설계도 `공유/기획/GodDem/2026-08-19_인게임_중앙디펜스_전환_설계_v1.md` (커밋 `4346d4d`) ④⑤**복호화 성공** — 22바이트 반복 XOR·`libil2cpp.so` 리버싱 불필요. 원작 밸런스 237테이블 복호화 ⑥**CSV 230종/22,261행** 변환·PD 전달. 종합 매핑 SOT `공유/기획/GodDem/2026-08-20_원작밸런스_해독_매핑_v1.md`. **P1 청사진** `공유/기획/GodDem/2026-08-22_원작아키텍처_이식청사진_v1.md`(`b5d95cc`, 산출물 경로 누락분 소급 추가·pm-auditor 지적). **P2 메타 재설계** `공유/기획/GodDem/2026-08-22_메타아키텍처_재설계_v1.md`(system-designer, plan-auditor 검증 완료). | — | **PD 결정 대기 2건**: (1) 복호화 XOR 키의 조직 기록 보존 가부 (타사 기술적 보호조치 우회 수단 — PM 재량 밖, C36-2 보수 선택으로 문서에서 마스킹) (2) 원작 절대수치 vs 자체 스케일 재조정 방침 확인. **다음 단계**: 설계 P1(중앙 고정 플레이어+사방 스폰+웨이브 씬 골격 배치) 착수. **후속 조치**: `.gitignore`에 `scratchpad/`·`wild/` 선제 등재, `공유/대화로그/INDEX.md`에 GodDem 등재. **저작권 방침**: 원작 수치는 참고, 아트·텍스트 리소스 사용 불가. 추출물 레포 미커밋(git 실측 확인). | | BT12-Dev-Vis | 2026-05-09 | **PlayerSkillInventory 등록 시각화 지시** — PD 직접 발화: "PlayerSkillInventory 등록이 되었는지 어떻게 판단해야하지? 시각적인 변화가 없으니 확인이 불가능해. 유니티 기본 제공 리소스를 활용해도 좋으니 보이게 해줘." **[2026-05-13 후속 세션 신규 3건]** (1) 투사체 사거리 파란 박스 시각화 — `HitboxDebug.SpawnRange` 신규 (`Projectile.Initialize` 끝 호출·3초 유지·`HideFlags.DontSave`). (2) 사정거리·속도 Inspector 직접 조절 — `ActiveSkillData.MaxRange`·`ProjectileSpeed` 신규 필드 (`RangeTier`·`camWidth`·`mults` 계산 폐기·`PiercingProjectile._speed = 2.5f` override 폐기). (3) A04 ExtraHitFxPrefab + FX_Thunder Smoke — `ActiveSkillData.ExtraHitFxPrefab` 신규·`LightningStrikeSpawner.DelayedExtraHitFx` Coroutine (0.6초 후 spawn·y -0.5·비주얼 전용·판정 무관). EerieVillage `ab40b27` push 정합. **[2026-05-13 사고 정정]** 본 PM `git reset --hard origin/main` 영역 PD Inspector 작업 .asset 6 폐기 사고 발생. PD 보고 "스킬 관련 스크립터블 오브젝트가 full 이후 롤백되어버렸어" 수령. `git reflog` 영역 `e2bc95f` 보존 정합·.asset 6 복구·EerieVillage `5b2a032` push 정합. A04 ExtraHitFxPrefab (FX_Thunder Smoke) 영역 PD 후속 Inspector drag&drop 필요. 본 PM 자성 #4 (헌법급) 등재. **[2026-05-13 신규 2건]** (1) 디버그 박스·사거리 박스 시각화 off (재활용 toggle) — `HitboxDebug.ShowDebugVisuals` 플래그 신규·4 위치 `SpriteRenderer.enabled` 정합. (2) 레벨업 카드 풀 5종 한정 — `SkillRuntimeFactory.AvailableCardIds` 화이트리스트 (A02·A13·A04·A05·A_Laser)·미완성 placeholder 5종 (A01·A03·A08·A14·A15) 제외. EerieVillage `d26bd83` push 정합. **잔여**: A04·A05·A_Laser 영역 SkillFireEvent default return 영역 실전 발사 미연결 (카드 풀 한정 영역과 별개·PD 후속 결정 대기). **[2026-05-13 정정·진단]** (1) A05·A_Laser 박스 시각 off 누락 정정 — MeleeAreaSpawner·LaserSpawner 영역 직접 SpriteRenderer 부착 코드 (HitboxDebug 미경유) 영역 `sr.enabled = HitboxDebug.ShowDebugVisuals` 추가. 본 PM 자성 #5 (변경 영향 사전 grep 누락). (2) Player 피격 X 진단 Debug.Log 추가 (회수 의무) — EnemyController.Update L387-396 영역 `[EnemyHit][Intersect]`·`[EnemyHit][Decrement]` 2종. PD Console 측정 결과 영역 근본 fix·Debug.Log revert. EerieVillage `e8779df` push 정합. **[2026-05-13 신규]** 게임 시작 시 기본 파이어볼 A02 자동 습득 — `PlayerSkillInventory.StartingCardIds` (string[]) Inspector 필드·기본 `{ "A02" }`·`Start()` 영역 일괄 `AddSkillByCardId`. EerieVillage `0ad1325` push 정합. **[2026-05-13 신규 2건]** (1) Player 피격 X fix — EnemyController.Update L387-396 영역 `IsGrounded` 조건 폐기 (PD 표현 "닿아도" = ground·공중 무관 피격 의도)·진단 Debug.Log 2종 revert. (2) Enemy HP 30~40 random — `Health.RandomMaxHPRange` (Vector2Int) Inspector 필드 신규·Awake 영역 random·`maxHearts` 자동 산정·Enemy.prefab Inspector `(30, 40)` PD 직접 설정. 본 PM 자성 #6 (PD Console 측정 결과 미수신 영역 가설 fix 시도·feedback_pm_root_diagnosis_priority 약한 위반). EerieVillage `b4847b1` push 정합. **[2026-05-13 재발 정정]** (1) Enemy HP 30~40 자동 fallback — Health.Awake 영역 RandomMaxHPRange 미설정 + EnemyController 검출 → 자동 random. PD Inspector 의존 폐기. (2) Player 피격 distance 기반 강화 + 진단 Debug.Log 재추가 — `VisualBounds.Intersects OR dist < 1.5f` 단일 조건·`[EnemyHit]` 진단·회수 의무. 본 PM 자성 #7 (feedback_pm_root_diagnosis_priority 위반 누적). EerieVillage `2efcd34` push 정합. **[2026-05-13 신규]** Enemy·Player 사망 모션 y -0.5 오프셋 — EnemyDeath·PlayerDeath Execute 영역 Animator death/hurt Trigger 직전 `transform.position.y -= 0.5` 적용·sprite 위로 떠 보이는 현상 정정·collider 영향 X. EerieVillage `18b2125` push 정합. **[2026-05-13 신규]** 스킬 선택 UI 아이콘 fallback — SkillCardSlot.Bind 영역 card.Icon null 시 동적 원 sprite (32×32 알파) + 속성별 색상 (Fire 주황·Frost 하늘·Dark 보라·Lightning 노랑·Physical 흰). _glowEffect 동심원 빛 효과 alpha 0.3. EerieVillage `32ab76f` push 정합. **[2026-05-13 신규 2건]** (1) 사망 모션 y -0.5 → -0.3 (EnemyDeath·PlayerDeath). (2) 게임 시작 시 파이어볼 투사체 정지·잔존 fix — ProjectileSpawner.Trigger 영역 `facing.sqrMagnitude<0.01f` 시 `Vector2.right` fallback. 원인: Player.Facing 영역 (0,0) 영역 → _direction = (0,0) → _speed × 0 = 정지. EerieVillage `56a4a36` push 정합. **[2026-05-13 신규]** 투사체끼리 통과 fix — Projectile.OnTriggerEnter2D 영역 동족 Projectile skip (Wall·Enemy 판정 이전). 원인: fallback GO default Layer 0 영역 → isWall=true → 양쪽 SelfDestruct. EerieVillage `ebd7086` push 정합. **[2026-05-13 신규 4건]** (1) Player 사망 사라지는 현상 fix — PlayerDeath 영역 `Rigidbody2D.simulated=false` (gravity 정지·낙사 차단). (2·3) 제자리 부활·부활 모션·2초 무적 깜박 — PlayerSpawn 영역 `Teleport` 폐기·`health.Resurrect()` 호출 (currentHP=maxHP·invulnerableUntil=2초·Animator resurrect Trigger)·Rigidbody simulated=true 복원·PlayerInvulnerabilityFlash 자동 깜박. (4) FX 잔상 safety cap 5초 — LaserSpawner fx Destroy 누락 추가·LightningStrike·MeleeArea·Projectile.AutoDestroy 영역 `Mathf.Min(lifetime, 5f)` cap. EerieVillage `3a672f0` push 정합. **[2026-05-13 컴파일 에러 fix]** PlayerSpawn.cs CS0246 — using UnityEngine 누락·첫 줄 추가. 본 PM 자성 #8 (신규 type 사용 시 namespace using 사전 검증 누락). EerieVillage `c052d78` push 정합. **[2026-05-13 신규 3건]** (1) Player 죽는 모션 X fix — Player.controller parameter "hurt" 부재 측정·`SetTrigger("hit")`·`updateMode=UnscaledTime`. (2) 부활 모션 중 움직임 fix — PlayerSpawn simulated 복원 폐기·EnablePlayerInput 영역 이전. (3) 투사체 잔상 진단 — `[Projectile][SelfDestruct]`·`[Projectile][OnDestroy]` Debug.Log·회수 의무. 본 PM 자성 #9 (Animator parameter 사전 측정 누락). EerieVillage `69a1805` push 정합. **[2026-05-13 NullReferenceException + 잔존 근본 fix]** ProjectileSpawner.Trigger 영역 collider isTrigger=true 활성 시점 vs Initialize 호출 시점 race → OnTriggerEnter2D 영역 `_runtime=null` NullReferenceException → SelfDestruct 미호출 → 영구 잔존. fix: OnTriggerEnter2D 영역 `_runtime/_data == null` defensive return + Update 영역 `_data == null` 시 즉시 SelfDestruct. 본 PM 자성 #10 (race condition 사전 측정 누락). EerieVillage `1437720` push 정합. **[2026-05-13 신규 3건]** (1) 사망 팝업 타이밍 fix — LevelUpManager.HandleLevelUp 영역 Player 사망 상태 시 _pendingLevels 영역 저장·Update 영역 IsAlive 회복 시 표시. (2) Player 사망 y -0.3 추가 (누적 -0.6). (3) 투사체 잔상 강화 + 진단 — Projectile.Update 영역 lifetime+0.5 backup·Initialize·Trigger 영역 진단 Log·회수 의무. EerieVillage `b1931af` push 정합. **[2026-05-13 근본 원인 fix]** 재시작 시 정지 투사체 누적 — Time.timeScale=0 (LevelUp 등) 영역 Time.time·Invoke 정지 영역 영구 잔존. fix: Projectile `_spawnTime = Time.unscaledTime`·Update 영역 unscaledTime lifetime check·Invoke 폐기·CancelInvoke 추가 안전. 본 PM 자성 #11 (timeScale 영향 사전 측정 누락). EerieVillage `705d943` push 정합. **[2026-05-13 진단 Log 회수]** PD "사라졌어" 정합 작동 확인 후 진단 Debug.Log 5종 revert (ProjectileSpawner·Projectile.Initialize·SelfDestruct·OnDestroy·EnemyHit). Projectile.Update lifetime backup·CancelInvoke 안전망 보존. feedback_pm_root_diagnosis_priority 정합. EerieVillage `41fa4e4` push 정합. **[2026-05-13 신규 2건]** (1) MeleeArea 실전 발사 연결 — SkillFireEvent.Execute switch 영역 MeleeArea case·CardId 분기 (A04·A_Laser·기타). (2) FX AutoDestroy unscaledTime — FxAutoDestroyUnscaled MonoBehaviour 신규 (Object.Destroy 영역 timeScale 영향 fix)·전수 변경·WaitForSecondsRealtime. 본 PM 자성 #12 (Unity 표준 API timeScale 영향 사전 측정 누락). EerieVillage `26b0666` push 정합. **[2026-05-13 신규]** A04 번개 충격 적 유무 무관 자동 발동 — LightningStrikeSpawner.Trigger 영역 candidates 0 시 Player 위치 fallback spawn. A05·A_Laser = 이미 Player 위치 기준 발동·정합. EerieVillage `ebedf6d` push 정합. **[2026-05-13 InvalidOperationException Input System fix]** ParticleGroupView (2).cs 영역 삭제 (Scenes 폴더 영역 비정상 .cs·미사용·StandaloneInputModule 동적 부착 코드)·ProjectSettings activeInputHandler 1→2 (Both 모드·호환). 본 PM 자성 #13. EerieVillage `b30976a` push 정합. **[2026-05-13 본 PM 자성 #14 + fix 정정]** PD 직접 자성 지적 — 본 PM 직전 미승인 `.cs` 삭제 영역 정정. PD 재배치 후 ParticleGroupView (2).cs UnityEngine.Input → InputSystem 전환·activeInputHandler 2→1 revert. EerieVillage `b23e00f` push 정합. **[2026-05-13 Phase A]** A12 정화의 빛 신규·A08 저주의 화살 이펙트 적용 — ActiveSkillData.CastFxPrefab 신규·ProjectileSpawner.Trigger 영역 CastFx spawn·SkillRuntimeFactory.AvailableCardIds 7종 확장. **Phase B 대기** (A06 독 늪·A11 정령불 신규 Effector). EerieVillage `5077f5d` push 정합. **[2026-05-13 Phase B]** A06 독 늪·A11 정령불 신규 Effector + 1키·2키 매핑 — PoisonSwampSpawner/Instance/PoisonedEnemyMarker·SpiritFireSpawner/Instance 신규·SkillFireEvent switch PlacementPersistent·Minion case 확장·TestSkillFireOn1to5 Category 분기 추가·A06·A11 .asset 신규·SkillRuntimeFactory 9종. PD Inspector Player.prefab Skill1·Skill2 drag&drop 필요. EerieVillage `f292eb4` push 정합. **[2026-05-13 Phase B FX 재생 fix]** ParticleSystem 명시 `Play(true)` 호출 추가·PoisonSwampInstance 영역 BoxCollider2D·Rigidbody2D 자식 GO 분리 (ParticleSystem root 영향 차단). EerieVillage `b1b476a` push 정합. **[2026-05-13 A11 frame 제어]** FX_Rotating shield Animator frame 제어 — intro 1~88·loop 89~105 반복·outro 106~169 (남은 frame). Animator.Play(STATE_HASH, 0, normalizedTime) 매 frame 호출. EerieVillage `ebd0808` push 정합. **[2026-05-13 A12·A08·전수 FX Play]** 4 Spawner + Projectile 영역 ParticleSystem.Play(true) 명시 호출 전수 적용 (직전 b1b476a 영역 PoisonSwamp·SpiritFire만 적용 영역 영역 영역 보완). EerieVillage `68843a8` push 정합. **[2026-05-13 A08 sprite 방향 fix]** ActiveSkillData.ProjectileAngleOffset (float Range -360~360) 신규·Projectile.Initialize 영역 angle 보정·A08.asset 180 (FX_PinkMagicArrow sprite left→right). EerieVillage `71c3b7d` push 정합. **[2026-05-13 A08 FX 진단]** A08.asset GUID 정합·코드 정합 측정. PD 보고 영역 실측 진단 Debug.Log 추가 (회수 의무). EerieVillage `aa6cef1` push 정합. **[2026-05-13 CS1056 fix]** ProjectileSpawner.cs interpolated string `\"NULL\"` escape 영역 컴파일 에러·ternary 결과 변수 분리 fix. 본 PM 자성 #15 (Edit 후 컴파일 사전 검증 누락). EerieVillage `9879425` push 정합. **[2026-05-13 fileID 잘못된 측정 정정·자성 #16]** PD Inspector 측정 결과 영역 본 PM .asset 영역 fileID 영역 자식 GameObject 영역 매핑 영역. `grep -m 1` 영역 첫 GameObject 영역 = root 영역 영역 X. A08·A06·A12 .asset 영역 fileID 일괄 정정 (FX_PinkMagicArrow_Hit·FX_PinkArrow_Shoot·FX_Venom_Spray·FX_Icelight_Seal). 올바른 측정 = `awk m_Name + m_Father=0 정합`. EerieVillage `b26eb42`·`447ea92` push 정합. **[2026-05-13 CastFx 방향 + 진단 회수]** CastFx Instantiate 영역 facing+ProjectileAngleOffset+FxRotation 적용 (sprite 반대 방향 정정)·진단 Debug.Log 3종 revert. EerieVillage `7ad3319` push 정합. **[2026-05-13 A08 spawn 끝점·grace]** A08.asset OffsetDistance.x=1.5 (캐스팅 끝 spawn)·Projectile.OnTriggerEnter2D 영역 0.1초 grace 추가 (Hit FX Player 위치 회피). EerieVillage `eab215d` push 정합. **[2026-05-13 ScalingMode Hierarchy 전수]** 모든 fx spawn 영역 ParticleSystem.MainModule.scalingMode = Hierarchy 설정 (HitFxScale 정합 적용·7 파일 전수). EerieVillage `6ed6efe` push 정합. **[2026-05-14 자연 fade SelfDestruct]** Projectile.SelfDestruct 영역 즉시 Destroy 영역 → ParticleSystem Stop(emission)·Collider/박스 disable·_speed=0·0.5s 후 Destroy·FADE_START_RATIO 0.85. 발사 영역 영역 영역 trail 자연 연속. EerieVillage `2ee5084` push 정합. **[2026-05-14 A08 캐스팅 제거·적 조준]** A08.asset OffsetDistance.x=0·CastFx=null·TargetEnemyOnFire=1·ActiveSkillData.TargetEnemyOnFire 신규·ProjectileSpawner.Trigger 영역 nearest enemy 방향 발사. 벽·발판 관통 X 영역 = Projectile.Update Layer 0·16 OverlapPoint 영역 정합. EerieVillage `55ee4f3` push 정합. **[2026-05-14 HitFx sortingOrder·적 조준 하단]** 모든 hit fx (Projectile·LightningStrike·MeleeArea·Laser) Renderer.sortingOrder += 100 (Enemy 영역 위)·ProjectileSpawner TargetEnemyOnFire 영역 toEnemy.y -= 0.5 (hitbox 영역 영역 영역 적중). EerieVillage `eb33e64` push 정합. **[2026-05-14 적 조준 중간 보정]** toEnemy.y -= 0.5 → 0.25 (이전·1차 중간·너무 하단 정정). EerieVillage `b52c99d` push 정합. | **진행중** | 신규 `Assets/Scripts/MyUI/SkillInventoryHUD.cs` (OnGUI 좌상단·장착 액티브 DisplayName·Lv·CooldownRemaining/EffectiveCooldown·패시브 카운트). PlayerController.Awake 자동 부착. 보강: ProjectileSpawner fallback prefab에 SpriteRenderer + 동적 흰색 원 sprite + 속성별 색상 (Fire 주황·Frost 하늘·Dark 보라·Lightning 노랑·Physical 흰). Unity 기본 자원 활용 — Texture2D 동적 생성 16×16 알파 원. **[이펙트 개선 완료 2026-05-13]** (PD 지시 "이펙트 개선작업은 완료처리"). 본 세션 (`cranky-wescoff-e855b0`) 누적: (1) 5 스킬 통합 + 1~5 키 발사 시스템 — A02·A04·A05·A_Laser·A13 (EerieVillage `2ebf313`). (2) Inspector 즉시 반영 필드 확장 — HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale·DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval. (3) hit 모션 + flash 연출 (붉은색·alpha 50%·1 frame) — Animator self-loop transition + Health.DecrementBypassInvulnWithHit. (4) Scene 잔존 박스·FX 6개 cleanup + HideFlags.DontSave 8 spawn 지점 (EerieVillage `60e28e3`) — Edit Mode execute_code 측정 시 Scene 오염 방지 표준 확립. (5) FxRotation 박스 미적용 분리 (EerieVillage `ea7d32f`) — 박스(판정) = facing 만 · 이펙트(시각) = facing + FxRotation. 4 case 검증 (facing R/L × FxRotation 0/90 박스 무반응·facing 좌/우 정확 반전). (6) A05 좌우 베기 이펙트 Player 동조 (EerieVillage `f6c6eb5`) — MeleeAreaSpawner.SetParent(true) 추가·Player 전진 시 이펙트 밀림 정정 (Δ+2.0 동조 측정). 양 레포 push 정합. | — | **이펙트 개선 영역 = 완료 처리.** HUD·Icon UI·Layer Lab 카드 정합 등 잔여 사항은 PD 후속 결정 대기. 인수인계서: `공유/조직공지/2026-05-13_BT12-Dev_세션종결인수인계.md`. **[이펙트 작업 완성 확정 2026-05-14]** (PD 발화 "스킬 이펙트 작업은 완성이야. 임의로 투사체 판정 범위나 크기 등이 바뀌지 않도록 지금 상태를 잘 기록해"). 본 PM SOT 신설: `프로젝트/EerieVillage/개발/spec/스킬_이펙트_확정_v1.md` — 13 활성 스킬 (A01·A02·A03·A04·A05·A06·A08·A11·A12·A13·A14·A15·A_Laser) 핵심 필드 표 + 박스↔이펙트 분리 원칙 + EerieVillage stamp `1a1de0c`. **변경 금지 원칙**: PD 직접 명시 지시 없이 임의 변경 금지. 변경 시 SOT §4 갱신 + commit + PD 보고 의무. 본 PM·차기 세션 PM 모두 본 SOT 준수. | | BT12-MVP-A | 2026-05-08 | **경험치·레벨업·스킬 카드 선택 UI** — PD 직접 지시 2건 (1) 적 처치 → EXP → 레벨업마다 스킬 카드 3개 선택 기능 (2) 레벨업 UI (스킬 효과 추후·UI만). PD 첨부 예시 영역 ("기술 선택" 화면 — 카드 3장 가로·색상 배너·원형 아이콘·동심원·"레벨 N"/"최대"·"확인" 버튼). PD 결정 (β) 채택 — BT12-Dev 보류 일부 해제·BT12-MVP-A 분리 항목 진행. **PD 결정 D안 (2026-05-09)** — 기능 우선·그래픽 디테일 차후 영역. | **D안 완료 2026-05-09** | [Phase 1 완료] `프로젝트/EerieVillage/개발/spec/BT12-MVP-A_설계_v1.md` (~600 라인). [Phase 2-A 완료] EerieVillage `047661c` — 시스템 코드 6 + JSON 테이블. [Phase 2-B 코드 완료] EerieVillage `5b2b753` — UI 컴포넌트 2 + LevelUpManager 통합. **[Phase 2-B asset 5 완료 2026-05-08]** EerieVillage `755a51c` — `Assets/Data/SkillPlaceholders/{A01_jineonbu, A05_hagikjin, P01_bonghwanggyeok, P12_saengmyeongkkot, AW01_cheonbugyeongmun}.asset` (5) + 각 .meta (5) + folder meta 2 = 12 파일. C49 표준 — Phase 1 dev-team-lead Opus 첫 정합 호출 + Phase 2 Sonnet 위임 + Phase 3 PM 검증. **dev-team-lead 자진 고지** — 설계서 v1 §2-4 영역 P01·P12·AW01 BT11-Plan v0.2 정합 X (3건 정정 적용). **설계서 v1 §2-4 + §7-1 정정 완료** (commit 후속). PD Editor 가이드 신규 `BT12-MVP-A_Phase2B_PDEditor가이드.md`. 대화로그 엔트리 10. | — | **PM 후속 대기**: ① Phase 2-B B (Prefab) + C (Scene 통합) — **PD 직접 발화 (2026-05-08): "단계1은 완료. 단계2, 3은 개발팀에서 작업해줘" + "E"** → 옵션 E 채택 (Claude Desktop Unity MCP 위임) → 본 PM 의뢰서 작성 `BT12-MVP-A_Phase2B_ClaudeDesktop의뢰서.md` (~16K) → PD Claude Desktop 새 세션 영역 의뢰서 첨부 영역 작업 진행 → EerieVillage commit·push → 본 worktree PM 보고 ② Phase 3 dev-team-lead 통합 검증 (Phase 1 + 2-A + 2-B asset + Prefab + Scene + BT5-Dev/BT7-Dev 회귀) ③ **단계 4 PD Play 검증** (적 처치 → EXP → 레벨업 → UI 노출 → 카드 선택 → 게임 재개) ④ 기획팀 별도 안건 — `01_카드_풀.md` line 114 P12 = "도약강화" 잔존 정정 (`02_스킬_효과_컨셉.md` line 381·418 영역 동기화 X) ⑤ icon sprite asset 5장 별도 작업 ⑥ 완료 아카이브 이동. (PD Editor 가이드 영역 = 옵션 D 보류 영역·차기 영역 활용 가능) | | BT12-Dev | 2026-04-24 23:00 | **스킬 시스템 설계 (C43 "개발팀" 호칭 직접 수령 + C49 시범 적용)** — PD 직접 지시 "개발팀은 기획서를 토대로 스킬 시스템 설계 진행". 기획서 v0.2 (`프로젝트/EerieVillage/기획/content/02_스킬_효과_컨셉.md` 액티브 6카테고리·패시브 5카테고리·각성 4패턴) + CSV v0.3 60종 (`프로젝트/EerieVillage/기획/content/02_스킬_효과_컨셉_v0.3.csv` UTF-8 BOM) 토대. C49 표준 프로세스 시범 적용 (개발팀장 Opus 설계 → 클라이언트팀 Sonnet 구현 → 개발팀장 검증) **[Phase 2-A 완료 2026-05-09]** Skills 13 파일 신규 EerieVillage `87710ba` (Interfaces 4 + Data 4 + Runtime 4 + Events 1). **[Phase 2-B 투사체 완료 2026-05-09]** Effectors 7 파일 신규 + SkillFireEvent 정정 EerieVillage `2f2790c` (Sonnet 자율 push·feedback `feedback_pm_sonnet_subagent_unauthorized_push.md` 신설). **[Phase 2-C 투사체 6 asset 완료 2026-05-09]** PD 결정 "(a)안" — 본 PM 직접 placeholder 수치 작성. EerieVillage `c01f25a` (14 파일·A01·A02·A03·A08·A14·A15 ActiveSkillData ScriptableObject). DisplayName 한글만 (한자 X). 차후 balance-designer 정식 수치. SOT 채택 = PD 본문 (A16 사신 강림·A17 오발탄·A18 죽음의 가시). Phase 2 분할 = (b) 5분할 + b-1 카테고리 6분할. **[Phase 2-D BT12-MVP-A 통합 정정 완료 2026-05-09]** EerieVillage `d53150b` — 6 파일 수정 + 9 .meta 보충. LevelUpManager._pool 제거 → SkillRuntimeFactory.RandomDraw3() · SkillSelectionUI/SkillCardSlot ActiveSkillData 시그니처 전환 · PlayerController Awake PlayerSkillInventory 자동 부착 · Projectile Layer Enemy fallback (Minor 1·proxy) · SkillRuntimeFactory.RandomDraw3 신규. Sonnet 의뢰서 "git add·commit·push 절대 금지" 명시 (feedback `feedback_pm_sonnet_subagent_unauthorized_push.md` 정합). Compile error 0건. pm-auditor Pass + Minor 1. | **진행중** | **[Phase 1 완료 2026-04-24]** 개발팀장 Opus 직접 설계 완결 — `프로젝트/EerieVillage/개발/spec/스킬_시스템_설계_v1.md` (1074 라인, 14 섹션). §1 아키텍처 4계층 · §2 인터페이스 4종(`ISkillRuntime`·`IActiveSkill`·`IPassiveSkill`·`IAwakeningSkill`) + ScriptableObject 3종(`ActiveSkillData`·`PassiveSkillData`·`AwakeningSkillData`) + `PlayerSkillInventory`·`PlayerStats` · §3 CSV→ScriptableObject→Runtime→Health.Decrement 데이터 흐름 + 카테고리 문자열 매핑 · §4 VS 순수형 자동 발동 사이클 (OnTime·OnHit·OnKill + `ActiveSkillRuntime.Tick(deltaTime)` 독립 Cooldown) · §5 `AwakeningManager` 3 조건 동시 충족 + 4 패턴 Dispatcher + 다중 각성 선택 UI · §6 카테고리 매핑 6+5+4 (B는 BT7-Dev `AttackHitbox` 재활용 · 나머지 5 효과 발동기 신설) · §7 Phase 2-A~E 작업 단위 분해 (스크립트 25개·테스트 10건·asset 60개) · §10 BT7-Dev 통합 영역 (Health·AttackHitbox·PlayerAttackTicker·PlayerController 완전 보존 · `Health.OnDamagedEvent` 확장 필요 명시) · §11 기각안 5건 + 대화로그 추가 2건 (총 7건 C32 초과). 대화로그 `공유/대화로그/EerieVillage/2026-04-24.md` `[BT12-Dev Phase 1 완료] 개발팀장 스킬 시스템 설계 v1 (1074 라인)` 엔트리 완결. **C48 3자문 전수 통과**로 Phase 2 클라이언트팀 Sonnet Task는 본 Task에서 호출하지 않고 **PM 차원 별도 위임** 권고 (C48·C49·C50 정합) | **기획서 확정 대기** (PD 2026-04-25 직접 지시 — "기획서 확정되기 전까지 작업 대기") | **재개 트리거**: 기획팀 v0.3 또는 v1.0 확정 + balance-designer 60종 수치 확정 + narrative-designer 카드명 세계관 재매핑 결정 → C50 Phase 2 사전 승인 옵션(a/b/c/d) PD 결정 → 분할 시 Phase 2-A~E 순차 진행 (인터페이스·SO → 중앙 컴포넌트 → 효과 발동기 → 60장 .asset → EditMode 테스트) → Phase 3 개발팀장 검증 → 완료 아카이브. **선행 차단 블로커**: `paths.local.json.UNITY_PROJECT_ROOT: __SET_PER_PC__` 미설정 — 재개 시 PD PC 경로 설정 필요. Phase 1 산출물 1074 라인 설계 문서는 보존 | diff --git a/공유/기획/GodDem/2026-08-22_P3B4_스킬마스터리_설계_v1.md b/공유/기획/GodDem/2026-08-22_P3B4_스킬마스터리_설계_v1.md new file mode 100644 index 0000000..c6e4422 --- /dev/null +++ b/공유/기획/GodDem/2026-08-22_P3B4_스킬마스터리_설계_v1.md @@ -0,0 +1,472 @@ +# GodDem 스킬 마스터리(아웃게임 영구 성장 Layer⑤) 수치 설계 v1 + +> **작성**: balance-designer(기획팀) 2026-08-22 · **P3-B4 산출물** (P32 맥락 분할 · C50 규모 "중") +> **PD 지시 원문 (C42-2 A)**: "현 세션 B2 계속"·"원작처럼 맞춰"(2026-08-22, B1·B2 v1·v2에 이미 적용된 동일 원칙 — 대화로그 §31·§38) — B4는 이 동일 원칙의 3번째 적용 +> **선행 문서(전부 Read 완료)**: [`2026-08-22_메타아키텍처_재설계_v1.md`](./2026-08-22_메타아키텍처_재설계_v1.md)(메타v1, §P3-B4·§5·⑤층) · [`2026-08-22_원작아키텍처_이식청사진_v1.md`](./2026-08-22_원작아키텍처_이식청사진_v1.md)(청사진v1) · [`2026-08-20_원작밸런스_해독_매핑_v1.md`](./2026-08-20_원작밸런스_해독_매핑_v1.md)(매핑v1, §2-4 heroskillattr·§2-8 heroskilltree) · [`2026-08-22_P3B1_레벨승급_설계_v1.md`](./2026-08-22_P3B1_레벨승급_설계_v1.md)(B1, FinalAttack/FinalHp 캡슐화 패턴) · [`2026-08-22_P3B2_장비강화_설계_v2.md`](./2026-08-22_P3B2_장비강화_설계_v2.md)(B2, equip_* 접두 패턴·독립 축 설계) +> **절대 제약**: GodDem 레포(`E:\NerdNavis\GodDem`) Read만 수행, 수정 0건(C39 실측 전부 본 세션 직접 재확인). Unity MCP 미사용. 본 문서가 유일 산출물. +> **범위(C50)**: Layer⑤ 실수치 설계까지(구현은 개발팀장). B3(가챠)·C(스테이지) 범위 침범 없음. ele 2종 실전투 소비(AttributeTag) 미확인 전제 — 본 문서 §2에서 "미확인"을 "확인(미소비)"으로 격상하되 결론(소비처 부재)은 동일. +> **표기 규칙(C5·C44)**: 🟢확정(코드 직접 실측) · 🟡추정(형태는 원작/형제스탯 근거, 절대치는 플레이테스트 이전 1차값) · 🔴재추출 필요/미확보 + +--- + +## 0. 결론 요약 + +메타v1 §5-2가 골격만 남긴 `SurvivalMetaSkillMastery.csv`(NodeId 1종·penetrate_ratio만 시드)를 3종 완결하고, 메타v1 §1-5가 구조만 확정한 "액티브 카드 드래프트 풀 언락"의 실제 가격 곡선을 신설한다. + +| 유보 사항(메타v1/P3-A 출처) | 본 문서 결정 | +|---|---| +| `SurvivalMetaSkillMastery.csv`의 `mastery_penetrate_ratio` l_Cost(10~454)가 "인게임 이관 carry, P3-B4 재산정" 표기로 남아있음 | **재산정 완료** — f_Value(0.01~0.06)는 무변경(이미 원작 근거 확정값), l_Cost만 아웃게임 스케일로 ×55 재계수화(§5-1·§6-1) | +| ele_hurt_add·ele_penetrate_ratio "마스터리 강화" 실값 미정 | Node2(ele_hurt_add)·Node3(ele_penetrate_ratio) 신설, 형제 스탯(hurt_add/penetrate_ratio) 값곡선 형태 대입(§4·§6-1) | +| "액티브 스킬 영구 해금(드래프트 풀 필터링)" 구조만 확정, 가격·해금 순서 미정 | heroskilltree 20단계 형태 이식(×100 재계수화) + `SurvivalMetaSkillUnlock.csv` 신설(§5-2·§6-2) | +| §1-5 "AttributeTag 실전투 소비 여부 미확인(🔴), P3-B4 선행 확인 필요" | **본 문서에서 확인 완료(🟢): 미소비 확정**(SurvivalUnit.cs 전량 재확인, §2-1) — "미확인"이 "확인됨(소비처 없음)"으로 격상, 결론은 동일하게 부정적 | + +**★ 본 문서의 최대 발견(신규, C3 은폐 금지)**: AttributeTag뿐 아니라 **penetrate_ratio 자체도 "관통"이라는 원래 의미의 소비처가 없다** — 적(Enemy) `SurvivalUnit.DamageReduction`은 코드 전역에서 상시 0이며 감소시킬 "적 방어력"이 애초에 존재하지 않는다(§2-2). 이는 이 프로젝트가 스스로 겪고 코드 주석에 경고까지 남긴 "penetrate_ratio 만렙 1,090골드 순손실" 사고와 **동일 계열의 결함이 ⑤ 레이어에서 재발할 수 있는 지점**이다. 본 문서는 이를 방치하지 않고 3종 마스터리 스탯 전부를 `FinalAttack()`의 공격 비율 항으로 잠정 배선한다(§8) — "관통/속성" 고유 의미는 잃지만 사장 스탯 재생산은 피한다(정직 한계 명기, §2·§13 기각안5). + +| 항목 | 결론 | +|---|---| +| 구조 | ⑤ 스킬마스터리 = **2개 독립 하위 트랙** — (A) 마스터리 스탯 노드 3종(패시브, 즉시 배선) + (B) 액티브 카드 드래프트 풀 언락(구조 완성·현재 배정 콘텐츠 0건) | +| 재화 | 기존 `GOLD_ID=201` 직접 소비(B1·B2 동일 원칙, 신규 중간재 없음) | +| 노드 3종 총액 | 526,680G(3종 만렙 합, §5-1 그레이드별 한계단가 균일화 재계수화 후) — B1(1,056,056G)의 약 50%, B2(510,496G)와 거의 동일 자릿수(103%) | +| 해금 20단계 총액(구조상 참고치, 배정 콘텐츠 없음) | 1,240,000G — heroskilltree 원본 합(12,400)×100 | +| 결합 지점 | `FinalAttack()` 승산항에 `MasteryAttackRatio()` **1개 텀 추가**(RecalcPlayer 무변경 — B1·B2보다 더 단순한 결합) | +| 신규유저 영향 | 0(불변) — 미투자 시 `MasteryAttackRatio()=0`, 드래프트 풀도 기본 제공 10종("그랜드파더 10종", §8-1 — plan-auditor m-3 지적: 기존 계정 보호가 아니라 신규 계정 포함 전원에게 영구 무상 제공되는 콘텐츠라는 뜻으로 쓰는 용어) 그대로 | + +--- + +## 1. 설계 전제 + +| 항목 | 값 | +|---|---| +| 기준 플레이어 수준 | 미투자(SkillMasteryLevel 전부 0) ~ 완전 맥스(3노드 그레이드6 + 해금순번 N) 밴드 | +| 목표 경험 | "계정을 오래 키울수록 다음 판 드래프트 폭이 넓어지고, 공격 비율이 한 겹 더 쌓인다" — 매판 완결성(로그라이크)은 유지, 원작 학습형 스킬트리의 "영구 학습" 감각만 절충 이식(메타v1 §1-5 재미 근거 승계) | +| 전제 스탯 앵커 | `SurvivalMeta.BaseAttack=22`(불변) · B1 HeroLevel맥스 +120atk · B1 Promotion맥스 +22%(attack) · B2 6종 실투자 맥스 TotalAttack 기여분(장비강화 완료v2 §6-2 기준) | +| 전제 경제 앵커 | B1 총비용 1,056,056G · B2 9종 총비용 510,496G(실투자 6종 359,728G) — B4 규모 비교 기준 | +| 재화 | 기존 `GOLD_ID=201` 직접 소비(B1 §1·B2 §1이 확정한 동일 원칙 3번째 적용, §13 기각안3) | +| C39 실측 확증(본 세션 직접 Read 완료) | `SurvivalStatCatalog.cs`·`SurvivalMetaSkillMastery.csv`(P3-A 시드 6행)·`SurvivalMeta.cs`(전문, `FinalAttack()`/`FinalHp()`/`PromotionDefenseRatio()`/`EquipLevel`/`TotalAttack()`/`TotalHp()`/`EquipAttackSpeedRatio()`/`EquipDefenseRatio()` 전부 라이브 구현 확인 — B1·B2가 이미 게임에 진입했다는 배경 설명과 코드 상태 일치) · `SurvivalUpgrade.csv`(전문, ingame 12트랙 6그레이드 비용 10/42/99/184/301/454 균일 확인) · `SurvivalBattleManager.cs`(`RecalcPlayer()`·`ConsumedUpgradeKeys`·`ValidateUpgradeCoverage()`·`TakeDamage` 호출부) · `SurvivalUnit.cs`(전문, `DamageReduction`·`TakeDamage()`) · `SkillDataAsset.cs`(`AttributeTag` enum 정의) · `SurvivalSkill.cs`(`Draw()` 전문, 액티브 후보 필터 지점) · `SurvivalActiveSkillRunner.cs`(전문) · `Resources/Skills/Active/*.asset` 10건 실물(A02·A04·A05·A06·A08·A10·A11·A12·A13·A_Laser — "액티브 10종" 배경 서술과 정확히 일치) | + +--- + +## 2. C39 신규 실측 발견 — 정직 한계 재확정 (은폐 금지, C3) + +### 2-1. AttributeTag 속성 시스템 — "미확인(🔴)"에서 "확인(🟢: 미소비)"으로 격상 + +메타v1 §1-5·§2-2는 "`AttributeTag`가 `SurvivalUnit.TakeDamage()`의 실제 데미지 계산에서 상성/저항으로 소비되는지는 미확인(🔴) — P3-B4 착수 시 개발팀 재확인 필수 선행 조건"이라 명시했다. 본 문서가 그 선행 확인을 직접 수행했다: + +- `SkillDataAsset.cs` L24: `AttributeTag AttributeTags`(Flags enum, Physical/Fire/Frost/Lightning/Dark) — **데이터 필드로만 존재**. +- `SurvivalUnit.cs` 전문 재확인: `TakeDamage(float amount)`는 `actual = amount * (1f - Mathf.Clamp01(DamageReduction))` 단일 승산식뿐 — `AttributeTag`를 읽는 코드 0건. +- 전투 판정 전체(`SurvivalBattleManager.cs`·`SurvivalActiveSkillRunner.cs`·`SurvivalProjectile.cs` 등)에서 속성 상성/저항 계산 코드 0건. + +**결론**: "미확인"이 아니라 **"확인됨 — 속성 시스템 자체가 전투 데미지 계산에 전혀 소비되지 않는다"**(🟢). 원작 매핑v1 §6-4가 "액티브 스킬은 틀은 있고 데이터는 비었다"고 밝힌 것과 동일 계열의 "스키마는 있으나 소비 로직이 없다" 패턴이 여기서도 재확인된다. + +### 2-2. ★ 신규 발견 — penetrate_ratio 자체도 동일 계열의 소비처 부재 + +메타v1·P3-A는 `penetrate_ratio`를 이미 "⑤ 확정" 완료 상태로 다뤄 왔으나(P3-A 재추출 완료, ele_* 2종과 별개), 본 문서가 `RecalcPlayer()`/`TakeDamage()`를 전투 관점에서 재확인한 결과 **"관통(penetrate)"이라는 이름이 의미하는 실제 기능 — 적 방어력을 낮춰 더 많은 피해가 통과하게 하는 것 — 을 수행할 대상 자체가 코드에 없다**: + +``` +SurvivalUnit.cs L26: public float DamageReduction = 0f; // 0~1 +SurvivalBattleManager.cs L243: Player.DamageReduction = 1f - (1f - ingameReduce) * (1f - outgameRatio); // Player 전용 유일한 대입 +``` + +`DamageReduction` 필드에 값이 대입되는 곳은 코드 전체에서 `Player.DamageReduction` 이 한 줄뿐이다. 적(`SurvivalUnit`) 인스턴스는 생성 후 `DamageReduction`을 변경하는 코드가 0건 — **적은 항상 방어력 0**. 즉 `penetrate_ratio`가 낮춰야 할 "적 방어력"이라는 대상 자체가 존재하지 않는다. + +**이 발견의 무게**: `SurvivalBattleManager.cs` 자체 주석(L158-163)이 이미 "penetrate_ratio가 상점에만 등재된 채 전투 계산 어디에도 참조되지 않아 만렙 1,090골드가 순손실이 되는 함정이 발생했다(2026-08-21 실측)"고 명시적으로 경고한 바로 그 결함 유형이다. 그 사고는 인게임 레이어에서 발생했고 이관으로 해소됐다고 여겨졌으나(§1-5 "이관 = 위험 회피 아니라 배치 원칙 적용"), **이관 이후에도 "관통"이라는 스탯의 진짜 기능이 소비될 지점 자체가 어느 레이어에도 없다는 사실은 그대로 남아 있었다** — 지금까지 어느 문서도 이 부분을 정면으로 확인하지 않았다. 본 문서가 이를 명시적으로 표면화한다(C3). + +**대응(§8에서 상세)**: 3종 마스터리 스탯(`penetrate_ratio`·`ele_hurt_add`·`ele_penetrate_ratio`) 전부를 원작 taxonomy상 "공격계"(청사진v1 §1-1 — plan-auditor M-1 지적으로 인용 정정, 매핑v1 §1-1은 복호화 결과·암호 방식 절이라 해당 분류표가 없다)라는 공통점을 근거로 **`FinalAttack()`의 공격 비율 항에 잠정 합산**한다 — "관통/속성"이라는 개별 의미는 임시로 접어두고 실제 공격력 증가로 치환해 소비처를 즉시 확보한다. 진짜 관통/속성 메커니즘(적 방어 시스템·원소 상성)은 별도 시스템 신설이 필요한 P3-C 이후 영역이며, 그 시점에 이 항을 재분리하면 된다(§13 리스크 R-F1·기각안5). + +--- + +## 3. 스킬 마스터리 구조 확정 — 2개 독립 하위 트랙 + +원작 `heroskill`+`heroskilltree`는 하나의 학습 진행(20단계 EXP 소비 곡선)이 `heroskillattr`의 여러 스탯 보상을 동시에 관장하는 구조였다(매핑v1 §1-2·§2-8). GodDem 적용에서는 이를 **패시브 강화**와 **액티브 해금**이라는 서로 다른 재미 축(메타v1 §1-5)으로 재해석해 완전히 독립된 두 트랙으로 분리한다 — B1(Layer①②, 승급이 레벨을 게이팅)과 달리 두 트랙 사이에 게이팅 관계는 두지 않는다(B2의 "9개 아이템 독립 축" 선례와 동일 원칙, §13 기각안6). + +| 트랙 | 데이터 모델(메타v1 §5-1 기존 필드) | 재화 | 게이팅 | 원작 대응 | +|---|---|---|---|---| +| **(A) 마스터리 스탯 노드** | `SkillMasteryLevel: Dictionary`(NodeId→Grade 0~6) | GOLD | 노드 간 완전 독립(B2 아이템 패턴) | `heroskillattr` 6개 효과타입 중 인게임 미보유 3종(penetrate_ratio·ele_hurt_add·ele_penetrate_ratio, §4) | +| **(B) 액티브 카드 언락** | `UnlockedActiveCardIds: HashSet` | GOLD | 순번 N 구매 시 N+1만 구매 가능(순차) | `heroskilltree` 20단계 학습 곡선(형태만, §4·§5-2) | + +--- + +## 4. 원작 heroskill/heroskilltree 정합 ((A) 형태이식) + +### 4-1. heroskillattr 6개 효과타입 — GodDem 배치와의 정합 재확인 + +매핑v1 §2-4: "실사용 87엔트리 = 고유 22시리즈… 효과타입 6종만 사용 — hp_add 25 / attack_add 14 / penetrate_ratio 12 / ele_penetrate_ratio 12 / hurt_add 12 / ele_hurt_add 12." 원작 학습형 스킬트리가 실제로 보상하는 스탯은 **정확히 이 6종뿐**이다. + +| 원작 6종 | GodDem 배치(P3-A 확정) | 본 트랙(A) 소속 여부 | +|---|---|---| +| hp_add | 인게임(SurvivalUpgrade.csv, §0 원칙 — 이미 기능 중) | 아니오 | +| attack_add | 인게임 | 아니오 | +| hurt_add | 인게임 | 아니오 | +| **penetrate_ratio** | **⑤ 스킬마스터리(P3-A 이관 확정)** | **예 — Node1** | +| **ele_hurt_add** | **⑤ 스킬마스터리(P3-A 재추출 확정)** | **예 — Node2** | +| **ele_penetrate_ratio** | **⑤ 스킬마스터리(P3-A 재추출 확정)** | **예 — Node3** | + +**핵심 정합**: 원작 heroskilltree가 보상하던 6종 중 정확히 절반(hp_add·attack_add·hurt_add)은 GodDem 인게임 레이어가 이미 흡수했고, 나머지 절반(penetrate_ratio·ele_hurt_add·ele_penetrate_ratio) — **본 트랙(A)이 다루는 그 3종 그대로**가 어느 레이어에도 배치되지 않고 남아 있었다. 이는 우연이 아니라 §0 원칙("인게임에 이미 기능 중인 것은 유지, 신규만 아웃게임 배치")이 heroskilltree라는 단일 원작 시스템에 대해 자동으로 만들어낸 여집합이다 — P3-A의 층 배치 작업이 heroskilltree 전체를 정확히 절반씩 인게임/⑤로 쪼갠 셈이 된다(🟢, 6종 전수 대조 확인). + +### 4-2. heroskilltree 20단계 학습 곡선 — 이중 이식 상태 정정 + +메타v1 §1-0이 이미 밝혔듯 heroskilltree 소비수열(50,100,…,1300, 20단계)은 **런레벨(RunLevel) EXP 곡선으로 이미 이식 완료**돼 있다(`ExpTable`, 매핑v1 §2-8·§4(e)). 즉 이 절대 수열은 인게임에 선점됐다 — 트랙(B)에 그대로 재사용하면 같은 원작 원본을 두 곳에 중복 이식하는 모양이 된다. + +**본 문서의 처리**: 절대 수열이 아니라 **형태**(4블록×5단계, 블록별 증가폭 +10 등차, 블록 내부 등차 계단선형)만 가져와 **아웃게임 경제 스케일로 재계수화**한다(§5-2) — B1이 `hero_level` 3차식을, B2가 `heroequipment` M수열을 각각 형태만 재사용하고 절대치를 자사 스케일로 다시 푼 것과 동일한 절차((A) 형태이식 원칙, §13 기각안 없음 — 이미 B1·B2가 확립한 방식의 3번째 적용이라 재론 불요). + +--- + +## 5. 공식 + +### 5-1. 마스터리 스탯 노드(3종 공통 구조) + +``` +ValueAt(node, grade) — 그레이드 "현재값"(직접 조회, 누적 아님). grade=0 → 0(미투자) +CumulativeCostAt(node, grade) = Σ StepCost(node, 1..grade) — 그레이드 1~6 순차 구매 누적 비용 +``` + +**값(f_Value) 결정 — 형제 스탯 형태 대입**: +- Node1 `penetrate_ratio`: **P3-A 기존값 무변경**(0.01~0.06, A-선형 +0.01/grade) — 이미 원작 heroskillattr 계열10 A패턴 근거 확정값이라 재론 불요. +- Node3 `ele_penetrate_ratio`: Node1의 **"속성 변형 형제"**(SurvivalStatCatalog.cs 자체 Note, §2-2 배치표) — 동일 A-선형 값곡선 대입: 0.01~0.06. +- Node2 `ele_hurt_add`: `hurt_add`의 속성 변형 형제. GodDem 인게임 `hurt_add`가 이미 원작 "C 패턴"(매핑v1 §2-4, 0.05/0.07/0.10/0.15/0.20/0.30)을 그대로 쓰고 있음을 `SurvivalUpgrade.csv`로 직접 재확인(🟢, §1 C39) — 동일 C-패턴 값곡선 대입: 0.05~0.30. + +**비용(l_Cost) 결정 — ingame 6그레이드 비용 형태 재계수화**: `SurvivalUpgrade.csv` 12트랙 전부가 스탯 종류와 무관하게 **동일한 6그레이드 비용열**(10/42/99/184/301/454)을 쓴다(🟢, §1 C39 전수 확인) — cost가 스탯 파워와 독립인 것이 GodDem의 기존 관행이다. 이 관행을 그대로 복제하면 Node2(최댓값 30%)가 Node1·3(최댓값 6%)과 **동일 가격에 5배 가치**를 갖게 돼 "무조건 Node2부터" 라는 지배 전략이 생긴다 — P30(재미 우선) 원칙상 실질 선택지가 사라지는 결과라 그대로 복제하지 않는다(§13 기각안1). + +**최초 시도(누적 평균 균일화)의 결함 — plan-auditor C-1 지적, 정정**: 본 문서 최초 초안은 "Node1·3 총액÷6% = Node2 총액÷30%"가 같도록 Node별로 서로 다른 **단일 배율**(×55/×275)만 곱했다. 이 방식은 **완주 시점의 평균 단가만** 맞출 뿐, 구매 도중의 **한계 단가**(그 스텝을 사면 1%p를 얻는 데 실제로 드는 비용)를 맞추지 못한다 — Node2는 값곡선이 균등하지 않아(그레이드별 %p 증분이 5/2/3/5/5/10으로 들쭉날쭉, §5-1 값 문단) 단일 배율을 곱해도 스텝별 한계 단가가 550→5,775→9,075→10,120→16,555→**12,485**G/%p로 어긋나며, 특히 마지막 스텝(그레이드6)이 Node1·3의 마지막 스텝(24,970G/%p)보다 **정확히 절반**이 된다. 즉 "완주 직전까지는 Node2가 항상 더 싸다"는 지배 전략이 그대로 남아 §13 기각안1이 막으려던 문제가 형태만 바뀐 채 재발했다 — P30(실질 선택지) 위반이자 이전 판정(§10 시나리오5 "통과")이 완주 단면만 검사한 정직성 결함(C5)이었다. + +**채택 — 그레이드 "단(段)"별 한계 단가 균일화**: 단일 배율이 아니라, **그레이드 위치(1~6)마다 고정된 %p당 단가 D(grade)**를 먼저 정의하고(Node1·3의 자체 스텝 비용을 그대로 D(grade)로 채택 — 값 증분이 항상 1%p라 스텝 비용=한계 단가), 각 노드의 실제 스텝 비용을 `D(grade) × 그 스텝의 %p 증분`으로 역산한다. 이러면 **어느 그레이드에서 비교하든 노드와 무관하게 %p당 단가가 완전히 동일**해진다 — "무엇을 밀지"가 순수하게 어떤 부가효과를 원하는가의 문제가 되고, 완주 단면이 아니라 구매 경로 전 구간에서 지배 전략이 사라진다. + +``` +D(grade) = Node1/Node3 스텝 비용(SurvivalUpgrade 6그레이드 비용열 × 55) = %p당 단가, grade 1~6 + 550 / 2,310 / 5,445 / 10,120 / 16,555 / 24,970 + +Node1/Node3 StepCost(grade) = D(grade) × 1%p(그레이드당 증분 항상 1%p, A-선형) + = D(grade) 그대로 (550 / 2,310 / 5,445 / 10,120 / 16,555 / 24,970) + +Node2 StepCost(grade) = D(grade) × ΔValue(grade)%p (ΔValue = 5/2/3/5/5/10, C패턴 그레이드별 증분) + = 2,750 / 4,620 / 16,335 / 50,600 / 82,775 / 249,700 +``` + +**검증**: 임의 그레이드에서 StepCost÷ΔValue를 재계산하면 3개 노드 전부 정확히 D(grade)와 일치한다(예: Node2 그레이드6 = 249,700÷10%p = 24,970G/%p = Node1·3 그레이드6과 동일). 총액은 Node1·3 각 59,950G(무변경)·**Node2 406,780G**(재계수화) — 3종 합계 **526,680G**로, B2(9종 510,496G)와 거의 같은 자릿수에 도달한다(우연이나 유의미한 교차 검증치로 기록). + +**앵커 근거(단일 노드 규모)**: D(1)=550G/%p를 기준으로 Node1·3 완주 총액(59,950G)이 B2 최저가 아이템(item1, 48,320G)과 최고가 아이템(item9, 75,520G) 사이 중간값에 위치하도록 잡았다 — "노드 하나를 완전히 마스터하는 비용 ≈ B2 아이템 하나를 만렙 찍는 비용"이라는 단일 완결 투자 단위 간 자릿수 비교이며(구조가 대칭인 비교라 앞서 시도했던 Promotion 대비 %당 단가 비교보다 안전하다 — Promotion은 1회 지불로 공/방/HP 3스탯이 동시에 오르는 번들형이라 "%당 단가"를 1개 스탯 기준으로 나누면 어느 쪽으로 나눠도 자기모순적 결론이 나온다, plan-auditor M-3 지적), Promotion과의 직접 %당 비교는 본 문서에서 제외한다. + +### 5-2. 액티브 카드 언락(heroskilltree 20단계 형태 이식) + +``` +UnlockCost(n) = heroskilltree_shape(n) × 100 (n=1,2,3,… — 그랜드파더 10종 이후 순번) + +heroskilltree_shape(n): 4단계 블록 구조(원본 형태 그대로, 매핑v1 §2-8) + 블록1(n=1~5): 증가폭 50 → 50,100,150,200,250 + 블록2(n=6~10): 증가폭 60 → 310,370,430,490,550 + 블록3(n=11~15): 증가폭 70 → 620,690,760,830,900 + 블록4(n=16~20): 증가폭 80 → 980,1060,1140,1220,1300 + (블록5 이후 필요 시 증가폭 +10씩 계속 연장 — 닫힌 형태라 20단계 이후도 자유 확장) +``` + +×100 재계수화 근거: heroskilltree 원본 합(12,400, 이미 런레벨 EXP로 선점된 절대 단위)과 **다른 통화 단위**(골드)로 전환하면서, 순번1(=5,000G)이 B1 저레벨 초반 투자와, **순번10 단일 가격(=55,000G)이 B2 item2 만렙(L16) 총비용(54,720G)** 과 각각 비슷한 자릿수에 오도록 잡은 앵커다(plan-auditor M-2 지적으로 비교 대상 정정 — "B2 1회 강화 스텝"이 아니라 "B2 아이템 1종 완전 강화 총액"과의 비교다. B2 개별 스텝 비용은 수천 G대에 불과해 원 비교는 실제보다 8배 저렴해 보이는 착시를 낳았다. 정밀 도달성 검증은 §12 재추출 필요분과 별개로, 콘텐츠 배정 이후 플레이테스트 대상). + +**현재 배정 콘텐츠**: **0건**(§0 결론 요약, §6-2 표 참조). 그랜드파더 10종(A02·A04·A05·A06·A08·A10·A11·A12·A13·A_Laser, §1 C39 실물 확인)은 **가격표 밖**에서 전원 무료 상시 해금이며(§8 그랜드파더 처리), 순번1~20은 향후 신규 액티브 스킬이 추가될 때 content-designer가 배정할 **가격 스케줄**이다. + +--- + +## 6. 수치 테이블 + +### 6-1. 마스터리 스탯 노드 3종 (전체 18행) + +본 표의 l_Cost는 §5-1 "그레이드 단(段)별 한계단가 균일화"(D(grade)×ΔValue) 재계수화 결과다(plan-auditor C-1 정정 반영 — 최초 단일배율×55/×275안은 완주 시점 평균만 맞고 구매 도중 한계단가가 어긋나 폐기, §14 기각안1). + +| NodeId | s_StatKey | Grade | f_Value | 표기 | l_Cost(단계별) | 누적 비용 | 한계단가(G/%p) | +|---|---|---|---|---|---|---|---| +| 1 | mastery_penetrate_ratio | 1 | 0.01 | 🟢 | 550 | 550 | 550 | +| 1 | mastery_penetrate_ratio | 2 | 0.02 | 🟢 | 2,310 | 2,860 | 2,310 | +| 1 | mastery_penetrate_ratio | 3 | 0.03 | 🟢 | 5,445 | 8,305 | 5,445 | +| 1 | mastery_penetrate_ratio | 4 | 0.04 | 🟢 | 10,120 | 18,425 | 10,120 | +| 1 | mastery_penetrate_ratio | 5 | 0.05 | 🟢 | 16,555 | 34,980 | 16,555 | +| 1 | mastery_penetrate_ratio | 6 | 0.06 | 🟢 | 24,970 | **59,950** | 24,970 | +| 2 | mastery_ele_hurt_add | 1 | 0.05 | 🟡 | 2,750 | 2,750 | 550 | +| 2 | mastery_ele_hurt_add | 2 | 0.07 | 🟡 | 4,620 | 7,370 | 2,310 | +| 2 | mastery_ele_hurt_add | 3 | 0.10 | 🟡 | 16,335 | 23,705 | 5,445 | +| 2 | mastery_ele_hurt_add | 4 | 0.15 | 🟡 | 50,600 | 74,305 | 10,120 | +| 2 | mastery_ele_hurt_add | 5 | 0.20 | 🟡 | 82,775 | 157,080 | 16,555 | +| 2 | mastery_ele_hurt_add | 6 | 0.30 | 🟡 | 249,700 | **406,780** | 24,970 | +| 3 | mastery_ele_penetrate_ratio | 1 | 0.01 | 🟡 | 550 | 550 | 550 | +| 3 | mastery_ele_penetrate_ratio | 2 | 0.02 | 🟡 | 2,310 | 2,860 | 2,310 | +| 3 | mastery_ele_penetrate_ratio | 3 | 0.03 | 🟡 | 5,445 | 8,305 | 5,445 | +| 3 | mastery_ele_penetrate_ratio | 4 | 0.04 | 🟡 | 10,120 | 18,425 | 10,120 | +| 3 | mastery_ele_penetrate_ratio | 5 | 0.05 | 🟡 | 16,555 | 34,980 | 16,555 | +| 3 | mastery_ele_penetrate_ratio | 6 | 0.06 | 🟡 | 24,970 | **59,950** | 24,970 | +| | | | | | **3종 합계** | **526,680** | (모든 행 한계단가 그레이드별 완전 일치 — §5-1 검증) | + +**표기(🟢/🟡) 근거(m-1 반영)**: Node1은 P3-A 기존 확정값 무변경이라 🟢. Node2·3은 §4-1이 명시하듯 "형제 스탯 값형태 대입"(유추, 원본 heroskillattr 고티어 행 직접 재추출 아님)이라 🟡 — §12 재추출 필요분 1행과 정합. + +### 6-2. 액티브 카드 언락 20단계 (배정 콘텐츠 없음 — 가격 구조만) + +| 순번(n) | s_CardId | l_Cost | 누적 비용 | +|---|---|---|---| +| 1 | (미배정) | 5,000 | 5,000 | +| 2 | (미배정) | 10,000 | 15,000 | +| 3 | (미배정) | 15,000 | 30,000 | +| 4 | (미배정) | 20,000 | 50,000 | +| 5 | (미배정) | 25,000 | 75,000 | +| 6 | (미배정) | 31,000 | 106,000 | +| 7 | (미배정) | 37,000 | 143,000 | +| 8 | (미배정) | 43,000 | 186,000 | +| 9 | (미배정) | 49,000 | 235,000 | +| 10 | (미배정) | 55,000 | 290,000 | +| 11 | (미배정) | 62,000 | 352,000 | +| 12 | (미배정) | 69,000 | 421,000 | +| 13 | (미배정) | 76,000 | 497,000 | +| 14 | (미배정) | 83,000 | 580,000 | +| 15 | (미배정) | 90,000 | 670,000 | +| 16 | (미배정) | 98,000 | 768,000 | +| 17 | (미배정) | 106,000 | 874,000 | +| 18 | (미배정) | 114,000 | 988,000 | +| 19 | (미배정) | 122,000 | 1,110,000 | +| 20 | (미배정) | 130,000 | **1,240,000** | + +--- + +## 7. 성장 곡선 + +- **노드 값**: Grade→Value는 **직접 조회**(B1·B2 아웃게임 관행 계승 — 이전 그레이드 값과 합산하지 않음, §13 기각안2). Node1·3은 완전 선형(+0.01/grade 균일), Node2는 원작 C패턴 그대로 후반 가속(+0.02→+0.03→+0.05→+0.05→+0.10, 뒤로 갈수록 그레이드당 가치가 커짐). +- **노드 비용**: 그레이드 위치(1~6)마다 고정된 %p당 단가 D(grade)(=550/2,310/5,445/10,120/16,555/24,970, ingame 6그레이드 비용열×55 형태 그대로)를 정의하고 각 노드의 스텝 비용은 `D(grade)×그 스텝 %p증분`으로 산출한다(§5-1) — Node1·3은 증분이 항상 1%p라 D(grade) 그대로, Node2는 증분이 5/2/3/5/5/10%p로 들쭉날쭉해 스텝 비용도 2,750/4,620/16,335/50,600/82,775/249,700으로 비선형이지만, **%p당 단가는 세 노드 전부 동일 그레이드에서 완전히 같다**(지배 전략 부재). 마지막 그레이드(6) 비용이 Node1·3 누적의 약 42%(24,970/59,950) — B1(마지막 10레벨이 전체의 49.9%)과 같은 계열의 후반 집중 강도. Node2는 마지막 그레이드 한 스텝(249,700G)만으로 누적의 61%를 차지 — 10%p를 한 번에 얻는 그레이드6 자체가 원작 C패턴의 "뒤로 갈수록 증분이 커지는" 성격을 비용에도 그대로 반영한 결과다. +- **액티브 언락**: heroskilltree 블록 구조 그대로 — 5순번마다 증가폭이 +1,000G씩 계단으로 올라간다(계단식 선형, B2의 M수열 계단식 2차보다 완만한 형태 — 원작에서도 heroskilltree가 heroequipment보다 완만했던 형태 차이를 그대로 승계). + +--- + +## 8. 매판 베이스 결합 — `FinalAttack()` 항 1개 추가 (RecalcPlayer 무변경) + +메타v1 §3-4·B1 §5가 확립한 "단일 계산 메서드" 원칙을 그대로 따른다. 3종 마스터리 스탯이 전부 원작 taxonomy상 "공격계"(청사진v1 §1-1)이므로 **DamageReduction이 아니라 FinalAttack()에만 결합**한다(작업 지시의 "FinalAttack/DamageReduction 등"은 결합 지점 유형의 예시이지, 본 3종이 양쪽에 걸친다는 뜻은 아님 — §2-2가 확인했듯 애초에 DamageReduction 쪽엔 소비 대상 자체가 없다). + +```csharp +// SurvivalMeta.cs — 신규(P3-B4). SurvivalSkillMasteryTable.Load()는 SurvivalEquipUpgradeTable.Load() 패턴 복제. +static SurvivalSkillMasteryTable _skillMastery; +public static SurvivalSkillMasteryTable SkillMastery => _skillMastery ??= SurvivalSkillMasteryTable.Load(); + +public static int MasteryGradeOf(int nodeId) => + Data.SkillMasteryLevel.TryGetValue(nodeId, out int g) ? g : 0; + +/// 3종 마스터리 스탯 합산 — 단일 결합 메서드(3중 SOT 방지, §2-2 정직 한계에 따라 +/// "관통/속성" 고유 의미 대신 공격 비율로 잠정 배선. 적 방어 시스템 신설 시 재분리 권고(§13 R-F1). +public static float MasteryAttackRatio() => + SkillMastery.ValueAt(1, MasteryGradeOf(1)) // mastery_penetrate_ratio + + SkillMastery.ValueAt(2, MasteryGradeOf(2)) // mastery_ele_hurt_add + + SkillMastery.ValueAt(3, MasteryGradeOf(3)); // mastery_ele_penetrate_ratio + +// FinalAttack() 기존 라인 수정(B1 §5 원문, 항 1개만 추가 — 나머지 완전 동일) +public static float FinalAttack() => + (BaseAttack + TotalAttack() + HeroLevels.AttackBudgetAt(Data.HeroLevel)) + * (1f + Promotions.AttackBonusRatio(Data.PromotionStar) + MasteryAttackRatio()); // ← 신규 텀 +``` + +**RecalcPlayer() 변경 없음**: `FinalAttack()`은 이미 `ApplyMetaEquipment()`을 통해 런 시작 시 `PlayerAttack`에 반영되고(B1 §5·B2 §7), `RecalcPlayer()`의 `atkRatio`(ingame attack_add+hurt_add)는 그 위에서 별도로 곱해진다 — 마스터리 항을 `FinalAttack()`에 넣으면 RecalcPlayer는 손댈 필요가 없다. B1(4곳)·B2(2곳) 대비 **본 결합이 가장 단순하다**(호출부 1곳, 신규 항 1개). + +### 8-1. 액티브 카드 드래프트 풀 필터 — `SurvivalSkill.Draw()` 1줄 추가 + +```csharp +// SurvivalMeta.cs — 그랜드파더 스냅샷은 B4 시점 고정 목록이어야 한다(아래 §13 R-F2 필독 — Resources 동적 스캔 금지) +public static readonly HashSet GrandfatheredActiveCardIds = new() +{ "A02", "A04", "A05", "A06", "A08", "A10", "A11", "A12", "A13", "A_Laser" }; + +public static bool IsActiveCardUnlocked(string cardId) => + GrandfatheredActiveCardIds.Contains(cardId) || Data.UnlockedActiveCardIds.Contains(cardId); + +public static long NextActiveCardUnlockCost() // 테이블 캡 초과 시 -1 + => SkillUnlock.CostAt(Data.UnlockedActiveCardIds.Count + 1); + +public static void ApplyActiveCardUnlock(string cardId) // cardId는 content-designer 확정 후 실배정 +{ + // plan-auditor m-4 반영 — 그랜드파더 10종이 실수로 섞여 들어오면 Count(=다음 순번 SOT)가 + // 어긋나 이후 전체 순번의 가격이 밀린다. 호출부(UI/개발팀)는 배정된 신규 CardId만 넘길 것. + if (GrandfatheredActiveCardIds.Contains(cardId) || Data.UnlockedActiveCardIds.Contains(cardId)) return; + Data.UnlockedActiveCardIds.Add(cardId); + Save(); +} +``` + +```csharp +// SurvivalSkill.cs Draw() — 기존 avail 리스트 채우기 루프에 조건 1개 추가(메타v1 §1-5 확정 방식) +foreach (var a in SurvivalActiveSkillRunner.LoadActiveSkills()) + if (a != null && runner.CanAcquireOrUpgrade(a) && SurvivalMeta.IsActiveCardUnlocked(a.CardId)) // ← 추가 + avail.Add(a); +``` + +현재 그랜드파더 10종 = `LoadActiveSkills()`가 반환하는 실제 10종 전체이므로 **이 필터는 현재 시점엔 무엇도 걸러내지 않는다**(§0 신규유저 불변 검증) — 향후 11번째 액티브 카드가 추가되는 순간부터 실제로 작동을 시작하는 구조다. + +--- + +## 9. 데이터 모델 + +### 9-1. `SurvivalMetaData` v3→v4 + +```csharp +// ── P3-B4 신규 (아웃게임 영구 성장 Layer⑤ 스킬마스터리) ── +/// Layer⑤ 마스터리 스탯 노드 — NodeId(1=penetrate_ratio,2=ele_hurt_add,3=ele_penetrate_ratio) → Grade(0~6). +/// 미투자 노드는 키 자체가 없어 MasteryGradeOf 가 0 을 돌려준다(신규 유저 FinalAttack 불변 보장). +public Dictionary SkillMasteryLevel = new(); + +/// Layer⑤ 액티브 카드 언락 — 그랜드파더 10종은 포함하지 않는다(코드 상수로 별도 판정, §8-1). +/// 이 집합엔 순번 11번째 이후 신규 카드 CardId만 쌓인다. Count 자체가 "다음 구매할 순번-1"의 SOT다(별도 카운터 불요). +public HashSet UnlockedActiveCardIds = new(); + +public const int CurrentVersion = 4; // v4: SkillMasteryLevel/UnlockedActiveCardIds(P3-B4) +public int Version = CurrentVersion; +``` + +`Load()` 마이그레이션(B1·B2 패턴 그대로): `_data.SkillMasteryLevel ??= new(); _data.UnlockedActiveCardIds ??= new();` — **빈 딕셔너리/빈 셋으로 충분**하다. `UnlockedActiveCardIds`를 "현재 Resources의 전체 카드로 채워 시작"시키지 않는 것이 의도적 설계 차이다(메타v1 §5-1 원안 대비 개선, §13 기각안4) — 그랜드파더 판정을 저장 데이터가 아니라 **코드 상수**(`GrandfatheredActiveCardIds`)로 고정하면, 마이그레이션 시점이 언제든(v1 직접 승격이든 v3 경유든) 정확히 동일한 10종만 무료 판정을 받는다. + +### 9-2. 신규 CSV 2종 + +**`SurvivalMetaSkillMastery.csv`(기존 파일 갱신 — Node1 l_Cost 재계수화 + Node2·3 신규 추가)** + +``` +n_NodeId,s_StatKey,n_Grade,f_Value,l_Cost +마스터리 노드ID,능력치 키(아웃게임 mastery_ 접두 가드),강화 단계,단계별 값(heroskillattr A/C패턴 원값·매핑v1 §2-4 표기 통일·그레이드 직접값 비누적),해금 비용(P3-B4 그레이드별 한계단가 균일화 재산정) +1,mastery_penetrate_ratio,1,0.01,550 +1,mastery_penetrate_ratio,2,0.02,2310 +1,mastery_penetrate_ratio,3,0.03,5445 +1,mastery_penetrate_ratio,4,0.04,10120 +1,mastery_penetrate_ratio,5,0.05,16555 +1,mastery_penetrate_ratio,6,0.06,24970 +2,mastery_ele_hurt_add,1,0.05,2750 +2,mastery_ele_hurt_add,2,0.07,4620 +2,mastery_ele_hurt_add,3,0.10,16335 +2,mastery_ele_hurt_add,4,0.15,50600 +2,mastery_ele_hurt_add,5,0.20,82775 +2,mastery_ele_hurt_add,6,0.30,249700 +3,mastery_ele_penetrate_ratio,1,0.01,550 +3,mastery_ele_penetrate_ratio,2,0.02,2310 +3,mastery_ele_penetrate_ratio,3,0.03,5445 +3,mastery_ele_penetrate_ratio,4,0.04,10120 +3,mastery_ele_penetrate_ratio,5,0.05,16555 +3,mastery_ele_penetrate_ratio,6,0.06,24970 +``` + +**`SurvivalMetaSkillUnlock.csv`(신규 — CSV 포맷 계약 §3-4 준수, 매핑v1 §3-4)** + +``` +n_UnlockOrder,s_CardId,l_Cost +해금 순번(그랜드파더 10종 이후),배정 카드ID(미배정 시 공란·content-designer 후속 기입),해금 비용(heroskilltree 20단계 형태×100) +1,,5000 +2,,10000 +3,,15000 +4,,20000 +5,,25000 +6,,31000 +7,,37000 +8,,43000 +9,,49000 +10,,55000 +11,,62000 +12,,69000 +13,,76000 +14,,83000 +15,,90000 +16,,98000 +17,,106000 +18,,114000 +19,,122000 +20,,130000 +``` + +### 9-3. 코드 터치포인트 요약 + +| 파일 | 변경 | +|---|---| +| `SurvivalMeta.cs` | `SurvivalMetaData` 2필드 추가(v3→v4)+`Load()` 마이그레이션 1줄 · `SkillMastery`/`SkillUnlock` 프로퍼티 · `MasteryGradeOf`/`MasteryAttackRatio`/`GrandfatheredActiveCardIds`/`IsActiveCardUnlocked`/`NextActiveCardUnlockCost`/`ApplyActiveCardUnlock`/`MasteryUpgradeCost`/`ApplyMasteryUpgrade` 신규 메서드 · `FinalAttack()` 1항 추가(§8) | +| `SurvivalSkill.cs` | `Draw()` 액티브 후보 필터에 `IsActiveCardUnlocked` 조건 1개(§8-1) | +| 신규 파일 2개 | `SurvivalSkillMasteryTable.cs`(`ValueAt`/`CumulativeCostAt`/`MaxGrade`) · `SurvivalSkillUnlockTable.cs`(`CostAt`/`MaxOrder`) — `SurvivalEquipUpgradeTable.Load()` CSV 파싱 패턴(헤더 2행 스킵) 복제 | +| `SurvivalBattleManager.cs` | **무변경**(§8, RecalcPlayer 손대지 않음 — B1·B2보다 단순) | +| `SurvivalStatCatalog.cs` | (참고, 본 문서 범위 밖) 3종 `Note` 필드를 구현 완료 후 "획득 로직 P3-B4" → 실제 CSV/메서드 참조로 갱신 권고 | + +--- + +## 10. 검증 시나리오 + +| # | 시나리오 | 통과 기준 | 결과 | +|---|---|---|---| +| 1 | 기준선 무결성 — SkillMasteryLevel 전부 미투자 | `MasteryAttackRatio()=0`, `FinalAttack()`이 B1·B2 시점과 동일 | **통과**(§9-1 딕셔너리 기본 조회 0) | +| 2 | 그랜드파더 보존 — UnlockedActiveCardIds 빈 셋 | 10종 전부 `IsActiveCardUnlocked()=true` | **통과**(§8-1 하드코딩 OR 조건) | +| 3 | 신규유저 드래프트 풀 불변 | `Draw()` 결과가 B4 이전과 동일한 10종 후보 | **통과**(§8-1, 현재 그랜드파더=Resources 전체와 일치) | +| 4 | 노드 독립성 | Node2만 그레이드3 구매해도 Node1·3 무관 | **통과**(딕셔너리 키 독립) | +| 5 | 한계단가 균일성(그레이드별) | 임의 그레이드 G에서 Node1·2·3 전부 동일 D(G) | **통과**(§5-1 정정판 — D(grade)×ΔValue 역산 설계로 전 그레이드 산술 일치. **최초 초안(단일 배율 ×55/×275)은 완주 평균만 맞고 도중 한계단가가 최대 2배 어긋나 plan-auditor C-1로 불통과 판정, §5-1·§14 기각안1에서 정정 완료**) | +| 6 | 결합 최댓값(원시 %p, RecalcPlayer 전개 전) | 3노드 전부 그레이드6: `MasteryAttackRatio()=0.06+0.30+0.06=0.42` | 참고치(+42%p, `FinalAttack()` 승산항 기준) — **RecalcPlayer 전개 시 `atkFlat`(만렙 1,650 고정 가산)에 의해 실효 증폭률은 이보다 작다**(plan-auditor M-4 지적, B1 R-C4가 동일 계열 전개를 이미 수행한 전례) — §13 R-F3(연쇄 증폭) 이관, 정밀 전개는 범위 밖 | +| 7 | 해금 스케줄 확장성 | n>20 시에도 블록 패턴(+10/블록) 연장으로 `CostAt` 정의 가능 | **통과**(닫힌 형태, §5-2) | +| 8 | 액티브 언락 순차성 | 순번3 구매 전 순번4 구매 불가 | **통과**(`Count+1` 단일 다음-순번 조회) | + +--- + +## 11. 밸런싱 제안 표 + +| 항목 | 현재 값 | 제안 값 | 근거 | +|---|---|---|---| +| `mastery_penetrate_ratio` f_Value(Grade1~6) | 0.01/0.02/0.03/0.04/0.05/0.06(P3-A 기존) | **무변경** | 이미 원작 heroskillattr A패턴 확정값(§5-1) | +| `mastery_penetrate_ratio` l_Cost(Grade1~6) | 10/42/99/184/301/454(인게임 이관 carry, "P3-B4 재산정" 표기 상태) | **550/2,310/5,445/10,120/16,555/24,970**(=D(grade), ingame 비용열×55) | 아웃게임 영구 경제 스케일 재계수화. 단일 노드 완주 총액(59,950G)이 B2 아이템 1종 만렙 비용대(48,320~75,520G) 중간값에 위치하도록 앵커(§5-1) | +| `mastery_ele_hurt_add`(Node2) f_Value/l_Cost | 없음(신규) | 0.05~0.30(C패턴, hurt_add 형제)/2,750·4,620·16,335·50,600·82,775·249,700(=D(grade)×그레이드별 %p증분) | 형제 스탯 값형태 대입 + 그레이드별 한계단가(G/%p)를 Node1·3과 완전히 동일하게 역산(§5-1 — plan-auditor C-1 지적으로 "완주 평균 균일화" 대신 "그레이드 단위 한계단가 균일화"로 정정) | +| `mastery_ele_penetrate_ratio`(Node3) f_Value/l_Cost | 없음(신규) | 0.01~0.06(A패턴, penetrate_ratio 형제)/550~24,970(Node1과 완전 동일 — 증분이 항상 1%p라 D(grade) 그대로) | 형제 스탯 값형태 대입(§5-1) | +| 액티브 카드 언락 순번1~20 l_Cost | 없음(신규, 구조만) | 5,000~130,000(heroskilltree×100) | §5-2, 배정 콘텐츠는 content-designer 후속 | +| `FinalAttack()` 결합항 | Promotion 1항만 | **+`MasteryAttackRatio()` 1항 추가** | §8, RecalcPlayer 무변경 유지 | + +**세그먼트 영향(무과금/소과금/고과금)**: B1·B2와 동일 판정 — **전 세그먼트 동일**(Survival IAP 미연동 현재 상태 승계). `GOLD_ID`가 상점 골드팩과 공유되므로, 향후 상점 IAP 결선 시 고과금 유저는 골드 구매로 마스터리 노드·언락 진행을 시간 단축 가능(B1 §10이 이미 F2P 표준 구조로 판정한 것과 동일 성격, 별도 조치 불요). + +--- + +## 12. 재추출 필요분 (개발팀장 후속 — 차단 아님) + +| 항목 | 현재 확보 상태 | 우선순위 | 사유 | +|---|---|---|---| +| `ele_hurt_add`(038, prefix 93~95)·`ele_penetrate_ratio`(037, prefix 73~75) 원본 heroskillattr 고티어 실제 행 값(`SurvivalStatCatalog.cs` Note 필드 기준, plan-auditor m-2 지적으로 prefix 짝 정정) | 🟡 형제 스탯(hurt_add C패턴·penetrate_ratio A패턴) 유추 대입 — 직접 재추출값 아님 | 중(플레이테스트 전 선행 권고) | 재추출 완료 시 §5-1·§6-1 값곡선을 유추가 아닌 실측으로 교체 가능. 현재 유추는 "같은 계열 변형이므로 같은 패턴을 따를 개연성이 높다"는 구조적 근거이지 원본 확인은 아니다 | +| heroskillattr 87엔트리 6종 분포 불균등(hp_add25·attack_add14·penetrate_ratio12·ele_penetrate_ratio12·hurt_add12·ele_hurt_add12) 원인 | 🟡 미규명 — quality tier 수 대응 여부 미확인 | 낮음(참고용) | GodDem은 이미 6그레이드 균일 표준(B1·B2·ingame 전체 관행)을 확립했으므로 원작의 불균등 엔트리 수를 그대로 따를 이유가 없음 — 재추출해도 본 설계를 바꾸지 않음 | + +--- + +## 13. 리스크 + +| ID | 리스크 | 심각도 | 내용 | +|---|---|---|---| +| **R-F1(신규, §2 발견)** | 3종 마스터리 스탯 전부 "관통/속성" 고유 의미 없이 공격 비율로 잠정 배선 | 중 | §2-2·§8 — 적 방어 시스템·원소 상성 시스템이 없어 원래 의미대로 소비할 수 없다. 잠정 조치(FinalAttack 합산)로 사장 스탯 재발은 막았으나, "관통"·"속성"이라는 표시 문구가 실제 동작(순수 공격력↑)과 불일치 — UI 표기 시 ux-designer 협의 필요(§14) | +| **R-F2(신규)** | 그랜드파더 카드 목록을 동적 스캔(Resources 전체)으로 구현할 경우 게이팅 무력화 | 높음(구현 주의) | §8-1·§9-1 — `GrandfatheredActiveCardIds`는 반드시 **B4 시점 고정 하드코딩 10종**이어야 한다. "현재 Resources에 있는 카드 전부"로 구현하면 미래에 신규 카드가 추가된 뒤 설치한 신규 계정도 그 카드를 무료로 받게 되어 언락 시스템 자체가 무의미해진다 — 개발팀 구현 시 최우선 점검 항목 | +| R-F3(신규, plan-auditor M-4 반영 정정) | 마스터리 최댓값(원시 +42%p, `FinalAttack()` 승산항 기준)이 B1(103.7배 증폭 기확인, R-C4)·B2(66배 형태축소) 위에 추가로 쌓이는 3번째 증폭 레이어 | 중(범위 외) | §10 시나리오6 — **원시 +42%p는 `RecalcPlayer()`의 `atkFlat`(만렙 1,650 고정 가산) 희석을 반영하지 않은 상한값이라 실제 체감 증폭은 이보다 작다**(B1 R-C4가 동일한 이유로 최초 발신값을 정정했던 전례와 동일 성격 — 본 문서는 정밀 전개까지는 범위 밖으로 유보). 스테이지 난이도(P3-C) 설계 시 B1+B2+B4 결합 최댓값을 `RecalcPlayer()` 전개 기준으로 재검토 필요. system-designer·PD 인지 필요(B1 R-C6 계열과 동일 성격) | +| R-F4(신규) | 액티브 언락 20단계가 현재 배정 콘텐츠 0건 — ele_* 2종과 동일한 "구조만 있고 실체 없음" 패턴 재현 | 낮음(의도된 구조) | §6-2·§8-1 — 다만 이는 ele_*처럼 "숨은 위험"이 아니라 **명시적으로 의도된 선구축**(기본 제공 10종이 전량 무상 유지되므로 당장 어떤 유저 경험도 저해하지 않음). content-designer가 신규 액티브를 만들 때 이 표를 그대로 사용하면 된다 | +| R-F5(신규) | Node2(ele_hurt_add) 최댓값 0.30이 ingame `hurt_add` 자체 최댓값(0.30, 직접값 기준)과 동일 — 인게임+아웃게임 동일 스탯 계열 합산 시 상호 인지 필요 | 낮음(정보성) | §5-1 — `hurt_add`(ingame)와 `ele_hurt_add`(마스터리)는 별개 키라 코드상 충돌은 없으나, 두 값이 개념적으로 같은 "피해 증가" 계열이라는 점은 향후 UI 표시 시(합산 노출 여부) 고려 필요 | +| **R-F6(신규, plan-auditor C-2 반영)** | `SurvivalMetaSkillMastery.csv` 덮어쓰기 전 C6-1 백업 미명시 | 높음(구현 전 필수) | 본 시리즈(B1·B2) 최초로 **기존 파일을 덮어쓰는** 케이스다(B1·B2는 전부 신규 CSV 생성이라 백업 대상 자체가 없었음). C6-1은 수치 밸런스 파일 변경 전 `{원본명}.bak_{YYYYMMDD_HHMM}.{확장자}` 백업을 무조건 요구 — git 추적 이력이 있으나 "git 이력으로 C6-1 백업 의무를 갈음한다"는 판단은 설계자가 침묵으로 대체할 사안이 아니라 팀장·PD 확인이 필요하다(§16 후속조치에 명시) | + +--- + +## 14. 기각안 (C32) + +| # | 검토안 | 기각 사유 | +|---|---|---| +| 1 | ingame 6그레이드 비용열을 스탯 종류 무관하게 동일 배율로 3노드에 복제(Node2도 ×55) | §5-1 — Node2(최댓값 30%)가 Node1·3(최댓값 6%)과 동일 가격에 5배 가치를 가져 "무조건 Node2부터"라는 지배 전략이 생김. P30(재미 우선 — 실질 선택지) 위반 소지 | +| **1-B(신규, plan-auditor C-1 반영 — 2단계 기각)** | 기각안1의 대안으로 최초 채택했던 "노드별 완주 총액 평균만 균일화"(Node1·3 ×55, Node2 ×275 **단일 배율**) | 완주 시점(그레이드6) 평균 단가만 9,992G/%로 맞을 뿐, 구매 도중 그레이드별 **한계단가**는 맞지 않는다 — Node2의 값곡선(C패턴, 그레이드별 %p증분 5/2/3/5/5/10로 불균등)에 단일 배율을 곱하면 그레이드6 한계단가(12,485G/%p)가 Node1·3의 그레이드6(24,970G/%p)보다 정확히 절반이 되어, "만렙 직전까지는 Node2가 항상 더 싸다"는 지배 전략이 형태만 바꿔 재발한다(plan-auditor 실측 재계산으로 확인). **그레이드 단(段)별 한계단가 균일화**(D(grade)×ΔValue 역산, §5-1 본문)로 대체 — 이러면 임의 그레이드에서 비교해도 3노드가 완전히 동률이라 지배 전략이 구조적으로 성립하지 않는다 | +| 2 | 마스터리 노드값을 ingame `Total()`처럼 그레이드 1~N 누적합으로 해석(Node1 만렙=0.21) | ingame과 아웃게임(B1·B2)이 서로 다른 관행을 이미 확립했음을 재확인(B1 HeroLevel 예산·B2 Attack/Hp 컬럼 전부 "현재 레벨 직접값", ingame만 `Total()` 누적) — 본 층은 아웃게임이므로 B1·B2 관행(직접값) 채택. "B1·B2 일관" 지시와 직접 부합 | +| 3 | 마스터리·언락 전용 신규 중간재(예: "숙련 결정") 도입 | B1 기각안4·B2 §1이 이미 확립한 "기존 골드 재사용" 원칙의 3번째 적용 — 별도 통화 UI·환전 로직 등 불필요한 복잡도 회피(C50) | +| 4 | `UnlockedActiveCardIds`를 마이그레이션 시점 "현재 Resources 전체 카드"로 채워 시작(메타v1 §5-1 원안) | §9-1·R-F2 — 이 방식은 신규 카드 추가 **이후** 설치한 신규 계정도 그 카드를 자동 그랜드파더 처리해버려 게이팅이 시간이 지날수록 무력화된다. 코드 상수 고정 스냅샷 + 쿼리 시점 OR 판정으로 대체해 이 부식을 원천 차단 | +| 5 | 적 방어 시스템·원소 상성 시스템이 실제로 신설될 때까지 3종 마스터리 스탯을 소비처 없이 "정의만" 대기 | §2-2·§8 — 이 프로젝트가 이미 겪고 코드 주석에 명시적으로 경고를 남긴 "penetrate_ratio 사장" 사고와 동일한 유형을 ⑤ 레이어에서 그대로 반복하게 된다. 잠정 배선(FinalAttack 공격비율 합산)으로 실제 효과를 즉시 부여하는 쪽이 헌법 원칙(사장 스탯 방지) 및 C2(근본해결·proxy 구분: 완전한 재분리는 적 방어 시스템 신설이 근본해결이나 그 전까지 무효과 방치는 proxy조차 못 되는 방치)에 부합 | +| 6 | 마스터리 노드(A) 또는 언락(B) 트랙에 B1식 게이팅(예: HeroLevel 일정 이상이어야 마스터리 착수 가능) 도입 | B1의 "승급이 레벨을 게이팅"은 원작 실측(hero_star의 진짜 기능)에 근거한 예외적 설계였고, B2(장비 9종)는 그런 교차 게이팅 없이 완전 독립이다 — 본 트랙도 B2 선례를 따라 독립 유지, 임의로 B1의 예외 패턴을 일반화하지 않는다 | + +--- + +## 15. 변경 이력 (P16) + +| 일시 | 변경자 | 항목 | 이전값 | 이후값 | 사유 | +|---|---|---|---|---|---| +| 2026-08-22 | balance-designer | 문서 신규 작성(v1) | — | 본 문서 전체(Layer⑤ 2트랙 실수치·결합식·CSV 2종) | PD "현 세션 B2 계속"+"원작처럼 맞춰" 원칙의 3번째 적용(B1·B2 계승), P3-B4 착수 | +| 2026-08-22 | balance-designer | AttributeTag 소비 여부 | 🔴 미확인(메타v1 §1-5 선행조건) | 🟢 확인됨(미소비 확정) | 본 세션 `SurvivalUnit.cs`·`SkillDataAsset.cs` 직접 재확인(C39) | +| 2026-08-22 | balance-designer | penetrate_ratio 소비처 상태(신규 발견) | (명시된 적 없음 — 암묵적으로 "⑤ 확정 완료"로만 취급) | 🟢 확인됨: 적 DamageReduction 상시 0, 관통 대상 자체 부재 | 본 세션 `RecalcPlayer()`·`SurvivalUnit.TakeDamage()` 재확인 중 발견, C3 은폐 없이 표면화 | +| 2026-08-22 | balance-designer | `mastery_penetrate_ratio` l_Cost | 10/42/99/184/301/454(인게임 이관 carry) | 550/2,310/5,445/10,120/16,555/24,970(×55) | P3-A CSV 자체 표기 "P3-B4 재산정" 이행 | +| 2026-08-22 | balance-designer | `mastery_ele_hurt_add`/`mastery_ele_penetrate_ratio`(Node2·3) | 없음(신규) | f_Value·l_Cost 전체 확정(§6-1) | 형제 스탯 값형태 대입 + 그레이드별 한계단가 균일화 설계 | +| 2026-08-22 | balance-designer | 액티브 카드 언락 가격 스케줄 | 없음(구조만, 메타v1 §1-5) | 20단계 heroskilltree 형태×100 확정(§6-2) | §5-2 | +| 2026-08-22 | plan-auditor | 모드A 감사 수행 | — | 조건부통과(Critical2·Major6·Minor7, 산술·(a)(d) 사실주장 전량 무오류) | C35 감사 게이트 — balance-designer 요청 | +| 2026-08-22 | balance-designer | plan-auditor 지적 전항 반영 최종화(같은 v1 내 확정) | 초안 | Critical(§5-1 한계단가 균일화 재설계·Node2 l_Cost 4,620/16,335/249,700 정정·§16 C6-1 백업 명시)·Major(§4-1·§8 인용 청사진v1 정정·§5-2 B2 비교대상 정정·§5-1 Promotion 교차검증 제거·§16 메타v1 정정요청·기획팀장 검증 단계 추가)·Minor(§6-1 🟢/🟡 표기·§12 prefix 짝 정정·"그랜드파더"→"기본 제공" 일부 정정·§9-2 헤더 용어 통일) 전부 반영 | C35 감사 게이트 — 조건부통과 정정 완료 후 발신 | + +--- + +## 16. 후속 조치 (본 문서 범위 밖) + +1. **개발팀 구현 선행 필수**: §9-3 코드 터치포인트 전체(`SurvivalMetaData` v4·`FinalAttack()` 1항·`Draw()` 1조건·CSV 2종·신규 Table 클래스 2개). **`GrandfatheredActiveCardIds`는 반드시 하드코딩 스냅샷으로 구현**(R-F2, 최우선 점검). +2. **C6-1 백업 의무(신규, plan-auditor C-2 반영)**: `SurvivalMetaSkillMastery.csv`는 B1·B2와 달리 **기존 파일 덮어쓰기**다(P3-A 시드 6행이 이미 존재). 개발팀 구현 착수 시 원본을 `SurvivalMetaSkillMastery.csv.bak_{YYYYMMDD_HHMM}.csv`로 백업 후 갱신할 것 — 또는 "git 이력을 C6-1 복구 경로로 갈음한다"는 판단을 팀장·PD가 명시적으로 승인할 것(R-F6). 침묵 채택 금지. +3. **개발팀장 재추출**(차단 아님, §12): ele_hurt_add(038, prefix 93~95)/ele_penetrate_ratio(037, prefix 73~75) 원본 행 값. +4. **content-designer 후속**: 신규 액티브 스킬 제작 시 `SurvivalMetaSkillUnlock.csv` 순번1부터 순차 배정(§6-2·§8-1). +5. **ux-designer 협의**: R-F1 — 마스터리 스탯 UI 표기가 "관통/속성"이라는 이름과 실제 동작(공격 비율)의 불일치를 어떻게 다룰지(예: 표시 문구를 "관통 마스터리"로 유지하되 툴팁에 "공격력 증가로 적용" 명기). +6. **system-designer·PD 인지 필요**: R-F3 — B1(103.7배)·B2(66배 축소)·B4(원시 +42%p, RecalcPlayer 전개 시 더 작음) 3개 레이어 결합 최댓값이 P3-C 스테이지 난이도 기준선에 미치는 영향. +7. **메타v1 본문 정정 요청(신규, plan-auditor M-5 반영)**: `2026-08-22_메타아키텍처_재설계_v1.md`에 다음 2건 갱신 필요 — ㄱ) §1-5·§5-1의 "`UnlockedActiveCardIds`는 전체 카드로 채워 시작" 서술을 본 문서 §9-1 확정 방식(빈 셋 + 코드 상수 `GrandfatheredActiveCardIds` 별도 판정)으로 정정 ㄴ) §1-5·§10-1의 AttributeTag 🔴 미확인 선행조건을 🟢 확인됨(미소비 확정, 본 문서 §2-1)으로 갱신. system-designer(메타v1 원저자) 또는 PM 소관. +8. **기획팀장 검증(신규, plan-auditor M-6 반영)**: C49 3단계(팀장 설계→팀원 작업→팀장 검증) 완결을 위해 plan-auditor 감사(C35 게이트) 통과와 별개로 기획팀장(Opus) 최종 검증을 재상정한다 — B1 §14-7이 동일하게 명시한 절차. +9. **PM 공유**: 본 문서 산출 완료를 대화로그(`공유/대화로그/GodDem/2026-08-22.md` #45, 결정·근거·영향·기각안 4요소 포함)에 반영, `개발팀_PD_지시_로그.md`(GodDem/BT13 단일 관리) 갱신은 개발팀장 소관(B1·B2 선례 승계). +10. **plan-auditor 모드A 감사 — 완료**: 판정 조건부통과(Critical2·Major6·Minor7). 지적 사항 전항 본 v1에 반영 완료(§0·§5-1·§6-1·§9-2·§10·§11·§12·§13·§14·§15, 위 1·2·7·8 항목 포함) — 재검증 필요 시 후속 세션에서 확인. diff --git a/공유/대화로그/GodDem/2026-08-22.md b/공유/대화로그/GodDem/2026-08-22.md index 487c799..30b067a 100644 --- a/공유/대화로그/GodDem/2026-08-22.md +++ b/공유/대화로그/GodDem/2026-08-22.md @@ -292,3 +292,20 @@ - **git 인증 간헐 패턴 재확인**: 개발팀장 push 직전 `git fetch` 인증 실패했으나 **push는 캐시 자격증명으로 정상 성공**(self-hosted fetch/push 인증 처리 차이 추정). PM 실측(이전 세션)도 동일 — 자격증명 유효·서버측 간헐. 밸런싱 일단락 후 별건 진단 - **후속(범위 외·라우팅)**: `Captures/` GodDem `.gitignore` 추가(소건)·실전투 반영·실클릭 end-to-end 플레이테스트·UI 시각(ux-designer) - **다음 단계**: P3-B4(스킬마스터리·액티브 카드 드래프트 풀 해금 + penetrate/ele 2종 마스터리 스탯) 착수 + +## 45. P3-B4 스킬마스터리 수치 설계 — 완료 + plan-auditor 조건부통과 반영 (balance-designer, GodDem 수정 0건) + +- **PD 원문**: "현 세션 B2 계속"·"원작처럼 맞춰"(2026-08-22, B1·B2에 이미 적용된 원칙 — 대화로그 §31·§38) — B4는 동일 원칙의 3번째 적용. §44 "다음 단계" 병렬 착수분. +- **산출물**: `공유/기획/GodDem/2026-08-22_P3B4_스킬마스터리_설계_v1.md`. 마스터리 스탯 노드 3종(penetrate_ratio·ele_hurt_add·ele_penetrate_ratio, 6그레이드) 실수치 + 액티브 카드 드래프트 풀 언락 20단계 가격 스케줄(구조·가격만, 배정 콘텐츠 0건) + `FinalAttack()` 결합 1항 + CSV 2종(`SurvivalMetaSkillMastery.csv` 갱신·`SurvivalMetaSkillUnlock.csv` 신설) 스키마 실값. +- **실측 신규 발견(C39·C3, 최대 발견)**: 메타v1 §1-5가 남긴 "AttributeTag 실전투 소비 미확인(🔴)" 선행조건을 직접 재확인해 **🟢 확인됨(미소비 확정)**으로 격상 — 나아가 **penetrate_ratio 자체도 "관통" 원의미의 소비처가 없음을 신규 발견**(적 `SurvivalUnit.DamageReduction` 상시 0, 낮출 적 방어력 자체 부재). 이 코드베이스가 이미 겪고 주석에 경고를 남긴 "penetrate_ratio 사장" 사고와 동일 계열이 ⑤ 레이어에서 재발할 뻔한 지점 — 3종 전부 `FinalAttack()` 공격비율 항에 잠정 배선해 즉시 소비처 확보(정직 한계 명기, "관통/속성" 고유 의미는 잃음). +- **plan-auditor 모드A 감사**: 조건부통과(Critical 2·Major 6·Minor 7) — 산술·핵심 사실주장(AttributeTag 미소비·적 방어 부재·그랜드파더 10종 실물 일치)은 전량 무오류 확인. **Critical**: ①§5-1 최초 배율안(Node1·3 ×55, Node2 ×275)이 "완주 시점 평균 단가"만 맞추고 "구매 도중 그레이드별 한계단가"는 못 맞춰(Node2 그레이드6이 Node1·3 그레이드6의 정확히 절반) 지배 전략이 형태만 바꿔 재발 — **그레이드 단(段)별 한계단가 균일화**(D(grade)×ΔValue 역산)로 재설계, Node2 총액 299,750→**406,780G**·3종 합계 419,650→**526,680G**로 정정 ②`SurvivalMetaSkillMastery.csv` 덮어쓰기 전 C6-1 백업 누락 — §16 후속조치에 백업 지시 추가. **Major 6건**: 인용 오류(공격계 분류는 매핑v1이 아니라 청사진v1 §1-1, 2곳) · B2 비교 라벨 오류("1회 강화"→"아이템 1종 만렙 총비용") · Promotion 대비 "13% 할인" 교차검증 자기모순(제거) · RecalcPlayer 전개 미반영(+42%p는 원시값, `atkFlat` 희석 시 실효 증폭 더 작음 — R-F3에 명기) · 메타v1 본문 이중 SOT 방치(§16에 메타v1 정정 요청 추가) · C49 기획팀장 검증 단계 누락(§16에 추가). **Minor 7건**(🟢/🟡 표기 누락·ele_hurt_add/ele_penetrate_ratio prefix 짝 반전·"그랜드파더" 용어 정밀화·중복 언락 가드 누락 등) 전부 반영. 전항 v1 내 재작업 없이 최종화. +- **기각안 7건(공란 금지, C32 필수 필드)**: ①ingame 6그레이드 비용열을 스탯 무관 동일 배율로 3노드 복제 — Node2가 동일가에 5배 가치라 지배 전략 발생 ①-B(신규) 그 대안으로 채택했던 "노드별 완주 총액 평균만 균일화"(단일 배율×55/×275) — plan-auditor C-1이 한계단가 불일치로 지배 전략 재발 증명, 그레이드 단위 균일화로 대체 ②마스터리 값을 ingame `Total()`처럼 그레이드 누적합 해석 — B1·B2 아웃게임 관행(직접값)과 불일치 ③신규 중간재 도입 — B1·B2 "기존 골드 재사용" 원칙 3번째 적용 ④`UnlockedActiveCardIds`를 마이그레이션 시점 "현재 Resources 전체"로 채우기(메타v1 원안) — 향후 신규계정도 자동 그랜드파더돼 게이팅 시간 경과 후 무력화, 코드 상수 고정 스냅샷으로 대체 ⑤적 방어·원소 상성 시스템 신설 전까지 3종 소비처 없이 정의만 대기 — 사장 스탯 재발 방치라 잠정 FinalAttack 배선 채택 ⑥마스터리 트랙에 B1식 교차 게이팅 도입 — B1 게이팅은 원작 실측 근거의 예외적 설계, B2(독립 축) 선례를 따라 완전 독립 유지. +- **정직 한계(범위 밖, 은폐 없이 명시)**: ele_hurt_add·ele_penetrate_ratio 값곡선은 형제 스탯(hurt_add/penetrate_ratio) 유추 대입(🟡, 고티어 prefix 93~95/73~75 원본 미재추출) · 액티브 언락 20단계는 가격만 확정, 배정 콘텐츠 0건(content-designer 후속) · AttributeTag·penetrate_ratio 둘 다 진짜 소비처는 적 방어/원소 상성 시스템 신설이 근본 해결(P3-C 이후). +- **후속 순서**: 기획팀장 검증(C49) 재상정 → 개발팀장 구현(C6-1 백업 선행 + `SurvivalMetaData` v4·`FinalAttack()` 1항·`Draw()` 1조건·CSV 2종) → 메타v1 본문 정정(system-designer/PM) → P3-B3(가챠, PD 정책 확인 후)·P3-C(스테이지, 병렬 가능). + +## 46. B4 설계 검증·구현 착수 + penetrate/ele 소비처 이슈 (PM, 2026-08-22) + +- **B4 설계 = plan-auditor 모드A 조건부통과** (Critical2·Major6·Minor7 반영). 스킬 해금(Draw() IsActiveCardUnlocked 1줄·그랜드파더 10종 상수·신규유저 불변·게이팅 11번째+)·마스터리 스탯 3종(FinalAttack 승산항 1개)·heroskilltree 형태 정합(×100 재계수)·해금 곡선 그레이드 한계단가 균일화(최초 지배전략 재발→재설계)·데이터 v3→v4(SkillMasteryLevel·UnlockedActiveCardIds). C49 충족(balance-designer 설계→plan-auditor 검증) +- **★ 신규 이슈 — penetrate/ele 3종 소비처 없음** (C3 고지): AttributeTag 미소비 🟢 확정(메타v1 🔴 해소) + **penetrate_ratio 자체도 적 방어 부재로 소비처 없음 신규 발견**(이 코드베이스 "penetrate 사장" 사고 동일 계열). 3종 전부 관통/속성 고유 의미 접고 **공격비율 잠정 배선**. 원작 의미(관통·속성) 살리려면 적 방어/속성 시스템 도입 필요(큰 작업·범위 밖) → **PD "전체 밸런싱 원작 맞춤 후 확인·추후 변경" 영역**. 잠정 진행·PD 인지 +- **개발팀장 B4 구현 착수**(진행중): C6-1 백업 선행(SurvivalMetaSkillMastery.csv 덮어쓰기)·Draw 해금·마스터리 스탯 잠정 공격%·데이터 v4·마스터리 UI 도달. 미커밋→plan-auditor→커밋 +- **후속**: 메타v1 본문 2건 정정(UnlockedActiveCardIds 초기화·AttributeTag 🟢)·ele 2종 고티어 재추출(비차단)·B3(가챠·PD 정책)·C(스테이지)