- **밸런스 데이터**: TextAsset **259개 전부 존재** (`hero_level` 550KB·`pricetable`·`heroskillattributes`·`A80_CombatPowerConfig`·`heroequipmentupgrade`·`shop`·`rankrewards` 등). **그러나 커스텀 스트림 암호**로 암호화 — 전 파일 동일 32byte 헤더 `0d63611716074008120a471006623f394e560c7913687c4e4b171605044b0f0f`, 단일 XOR 불가. 복호화 키는 pglarmor 보호 `libil2cpp.so` 내부 → **네이티브 리버싱 필요(고난도·불확실)**. 파일명으로 원작 시스템 구조만 파악됨.
- **이미지 리소스**: **평문·추출 가능** (UnityPy로 Texture2D→PNG 6개 실증: 文字底框·背光·花 등 중국풍 UI 에셋). 단 **타사 상용 게임 아트 사용 = 저작권 침해 → 출시 불가**. 추출물은 scratchpad 임시 폴더에만, 레포 커밋 금지.
- **스케일 갭**: 원작은 방대한 수집형 RPG(hero·star·equipment·worldboss·pvp·crossserver·auction). 우리 중앙 디펜스 MVP와 근본 불일치.
- **결론**: 원작 밸런스 수치 그대로 이식 = 암호화+pglarmor로 즉시 불가, 리버싱은 별도 대형 과제. 원작 리소스 사용 = 저작권 불가. → **원작 시스템 구조를 참고하되 수치·리소스는 GodDem 자체 자산으로 설계** 권장 (PD 방향 결정 대기).
- **PD 지시**: "설계대로 진행해서 웨이브가 도는 실 플레이 가능하게 구현해" → 이후 "레퍼런스 게임의 성장 시스템(인게임 재화로 능력치 강화) 도입" + "UI는 기존 리소스 더미 가능, **밸런싱 데이터(획득 재화·강화 비용·증가량·능력치 종류)는 모두 레퍼런스 게임 그대로 이식**" + "스텟 종류는 5종이 아니야, 다시 파악해봐"
- **PD 지적 수용 (중요)**: 본 PM이 `hero_level`의 5컬럼(power/resilience/constitution/agile/lucky)을 능력치 종류로 오판 → PD 지적 후 재실측 결과 **원작 실제 능력치는 `heroskillattr.attr` 24종**(attack_add·hp_add·defense_add·attack_speed_add·hurt_add·hurt_reduce·lucky_rate·lucky_multiple·penetrate_ratio·ele_penetrate_ratio·ele_hurt_add·hp·hit_rate·dodge_rate·stun_rate·suck_ratio·retaliate_rate·combo_rate + 각 `_res` 저항). 5컬럼은 캐릭터 기본 스탯일 뿐이었음. **PD 지적이 정확.**
- **구현 방식**: 기존 Unit 프리팹 54종·`SkeletonAnimationHandler`(테이블 의존 0인 순수 Spine 래퍼) 그대로 재사용. 런타임에 대전형 `AttackUnitBase`만 제거하고 신규 `SurvivalUnit` 부착 → 프리팹 복제 불필요.
- **원작 이식 밸런스**:
- 능력치 강화 12종 × 6단계 — 증가량 = `heroskillattr` 계열10 q1~q6 실측 그대로 (attack_add 0.05/0.07/0.10/0.15/0.20/0.30, hp_add 0.1~0.6, lucky_rate 0.01~0.06, suck_ratio 50~1600 basis point 등)
- 강화 비용 = `hero_skill_learn` 등급별 base gold 실측 그대로 (10000/20000/40000/60000/76000/90000)
- 골드 획득 = `wildernesspk` 스테이지 클리어 보상 10000골드(+200/스테이지)를 스테이지당 예상 처치 109마리로 분배 → **92골드/마리(+2/스테이지)**. 스테이지 1 완주 ≈ 10,000골드 = 강화 1회로 원작과 정합.
- 적 스탯 = `Base × 2.1^(stage-1) × 1.04^(wave-1)`, **HP:ATK = 4:1**(원작 A80ChampMatchConfig 실측), 보스 HP ×8
- EXP 곡선 = `heroskilltree` 20단계 consume 수열(50,100,…,1300) 그대로
- **획득량 원작 데이터 부재 (정직 보고)**: PD 질문 "원작 데이터에 획득량 정보는 없는거야?" → 실측 결과 `ItemDropConfig420`(56행)은 **아이템** 드랍 확률(0.001~0.3)·보증위치 테이블이고, `teamwavepassreward`는 웨이브 통과 **아이템** 보상. **적 1마리당 골드 테이블은 추출본에 없음**(서버 계산 또는 추출 범위 밖). 따라서 획득량만 원작 스테이지 보상에서 역산했고 이를 코드·문서에 명시.
- **실플레이 검증 (Unity Play 실측)**: 웨이브 1→2 진행 / 사방 스폰·중앙 자동전투 / 골드 368(=92×4마리) / 레벨업 시 스킬 3종 택1 패널(영웅 등급 출현 확인) / 강화 검증 — 공격력 3단계 시 ATK 22.0→26.8(=22×(1+0.05+0.07+0.10) 정확), 체력 2단계 400→520, 흡혈 1단계 0→0.005 등 **전 수치가 원작 실측값과 일치**. 컴파일 에러 0건.
## 6-E. PD 지적 2건 수용 — 강화 비용 오매칭·UI 레이아웃 재구성 (2026-08-20)
### 6-E-1. "강화 비용이 엉망이잖아" — 본 PM 오류 2건 (GodDem `e92e6a0`)
- **오류 A (수치)**: `hero_skill_learn`의 **lv1** 값(10000/20000/40000/60000/76000/90000)을 base로 착각. 실제 base(lv0) = **5000/10000/20000/30000/38000/45000**. 검증 에이전트가 앞서 지적한 값이 맞았고 본 PM 실측 필터(`level=='1'`)가 틀렸음.
- **오류 B (근본)**: `hero_skill_learn`은 **스킬 습득 비용**이지 능력치 강화 비용이 아님. 게다가 `quality × level` 2축 구조인데 quality를 강화 단계로 잘못 매핑(quality6 = lv0 45000 → lv4 225000 = 45000×1~5 선형).
- **전수 재조사**: 골드(db_1001)를 비용으로 쓰는 원작 테이블은 `hero_level`·`hero_skill_learn`·`hero_star` **3개뿐**이며 전부 아웃게임 영구 성장. **인게임 골드 강화 데이터 테이블은 원작 추출본에 없음**(203개 `exceldatatemp` 원본 경로 전수 대조로 확정 — 우리 CSV 230종이 원작 테이블 전량).
- **수정**: 능력치 성장에 골드를 쓰는 원작 유일 곡선 `hero_level` 채택 → 강화 비용 **10/42/99/184/301/454**(L1~6 실측, 1종 만렙 1,090G). 골드 획득은 곡선 1단계 비용을 기준 단위로 **10골드/마리(+2/스테이지)**. 증가량은 기존대로 `heroskillattr` 계열10 q1~q6 유지.
### 6-E-2. "강화 레이아웃을 레퍼런스 게임과 동일하게" (GodDem `004f5ed`)
- **원작 UI 프리팹 직접 추출** — 번들 `container` 경로 16,000건 확보 후 인게임 UI 프리팹 4종의 계층·RectTransform 좌표 덤프.
-`InfoCanvas/PlayerInfo`(코인)·`WaveInfo`(웨이브) = 상단 정보 바 / `uihomebaseinfo.prefab` = 상세 팝업(CurLv·MaxLv)
- **반영**: 기존 3열 정사각 그리드(자체 설계) → **원작식 3탭 + 가로형 행 2열 리스트**로 전면 재구성. 능력치 12종을 공격6·방어5·유틸1로 원작 카테고리 분류. 패널 상시 노출(원작 동일)에 맞춰 카메라 y −2.7·size 7·스폰 반경 4 조정.
- **검증**: Play 실측 — 공격 탭(공격력·공격속도·피해증가·치명타확률·치명타피해·관통)·방어 탭(체력·체력고정·피해감소·방어력·회피) 정상 출력, 비용 10G·증가량 원작값 표시 확인.
- **교훈**: 원작 재현 요구에서 **UI 프리팹 계층·RectTransform 덤프**가 데이터 테이블만큼 결정적 근거가 된다. 이미지가 평문이면 레이아웃도 복원 가능.
- **Explore 실측 (조사)**: EerieVillage = 우리 조직 BT12-Dev 구축 조선무협 스킬 시스템. 액티브 14종(Resources/Skills/Active, 레벨업 풀 10종: 파이어볼·천둥·학익진·독늪·저주화살·분신·정령불·정화의빛·천둥발·용염레이저) + 이펙터 13종(투사체/유도/관통/범위/낙뢰/레이저/독늪/소환/분신/상태이상) + FX 481프리팹(ParticleSystem, 혈·암흑·화염·참격).
- **핵심 판정**: 스킬 시스템이 **Platformer 스타터킷 강결합**(`.asmdef` 없음·`Health`·`EnemyController`·`Simulation` 직접참조) → **통째 복사 불가**. 방식 = **데이터클래스(ActiveSkillData 순수 SO)·스킬.asset·FX는 그대로 이식 + 이펙터는 GodDem 구조로 재구현**(적탐지=SurvivalBattleManager.Enemies·데미지=SurvivalUnit.TakeDamage·발사원=Player.transform).
- PD 반복 불만("몇 번을 강조하냐"). **근본원인**: `permissions.defaultMode: dontAsk`는 **세션 시작 시점 1회 로드·고정**. 세션 도중 설정 변경은 defaultMode에 미반영 → 세션 중 처음 쓰는 도구(MCP·위임 도구)마다 프롬프트. **완전 해결 = 세션 재시작**. 조치: allow에 위임 도구(Task·SendMessage·Workflow 등) 전면 추가 + `settings.local.json` dontAsk. **PD 재시작 완료 → 이후 프롬프트 소멸 확인**.
- **A15 추적 레이저 = 시각 표현 0**: `ProjectilePrefab`·`OnHitFxPrefab`·`OnDotFxPrefab` 전부 `fileID: 0`. 러너 폴백(`SurvivalActiveSkillRunner:196~204`)은 SpriteRenderer를 붙이되 **Sprite 미할당** → 렌더 결과 없음. `BaseDamage 3`(A02의 1/4). 원인: EerieVillage `SkillRuntimeFactory:71` 주석에 A15는 **미완성 placeholder로 카드 풀 제외** 명시된 자산인데 이식 대상에 포함됨.
- **A10 분신 누락**: EerieVillage 정식 풀 10종(A02·A13·A04·A05·A_Laser·A08·A12·A06·A11·A10) 대비 GodDem은 A10 자리에 A15를 채움. 실질 이식률 9/10.
- **A13 천둥발 `OnHitFxPrefab` 미할당** — 관통 타격 시 피격 FX 없음(경미).
- **Minion 디스패치 단일화**: `SurvivalActiveSkillRunner:117` 이 `ActiveCategory.Minion`을 A11 정령불로 고정 → A10 분신 추가 시 CardId 분기 필요.