docs(BT13-GodDem): 원작 배율 재추출 완료 — 배율 원작정합 확정·PD지적 실체=정액누락
- attack_add 단위=배율소수 확정(0.05=+5%), 현 0.05~0.30=원작 prefix-10 quality 정합 - C-템플릿 5종 공유도 원작 설계·매핑v1 정정 3건(quality축·prefix-65 혼동·가속곡선) - 몬스터 monsterteam 부재 재확인(창작 불가피) → balance-designer 재산정 v2 착수 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
b3e5160260
commit
cfa425e761
|
|
@ -0,0 +1,145 @@
|
|||
# 원작 Wild Survival 배율 트랙 재추출 원본 SOT v1
|
||||
|
||||
> **작성**: 개발팀장 2026-08-22 · **근거**: 원작 APK(`com.and.wild.sur.victory` v862) `heroskillattr` 재복호화 실측
|
||||
> **트리거**: plan-auditor 검증 — 현 GodDem 배율값(0.05~0.30)의 원작 정합 근거 미확정 + 배율 트랙 계열 템플릿 공유 의심
|
||||
> **PD 지시**: "재추출로 전체 원작 정합" (2026-08-22 직접 승인)
|
||||
> **관계**: `2026-08-20_원작밸런스_해독_매핑_v1.md`(이하 매핑 v1) §2-4 `heroskillattr` 절의 **원본 재확정 + 오류 3건 정정**. 본 문서가 배율 트랙에 한해 매핑 v1보다 상위 SOT.
|
||||
|
||||
---
|
||||
|
||||
## 0. 결론 요약 (배율 트랙)
|
||||
|
||||
| 질문 | 확정 결과 |
|
||||
|------|----------|
|
||||
| **현 GodDem 0.05~0.30의 원작 출처?** | `attack_add` **prefix-10 · quality 1~6** = `0.05 / 0.07 / 0.10 / 0.15 / 0.20 / 0.30`. 최하위 티어 밴드의 6등급 수열. |
|
||||
| **attack_add 단위 (1.0 = ?)** | **배율 소수(fraction)**. `0.05 = +5%`, `1.0 = +100%`, `5.0 = +500%`. 데이터 내부 정합성으로 확정(§4). il2cpp 직접 코드 확인은 **Beebyte 난독화로 차단**(정직 고지). |
|
||||
| **계열 템플릿 공유?** | **확정**. 배율계 `attack_add·attack_speed_add·hurt_add·lucky_multiple·lucky_multiple_res` **5종이 동일 C-템플릿**을 복사 사용. 확률계 10종은 별도 B-템플릿 공유. (task 가설 "최소 3종"보다 많음) |
|
||||
| **매핑 v1 "순수 선형" 주장** | **부분 오류**. prefix-10 C-템플릿은 **가속 곡선**(선형 아님). "1.0/2.0/…/5.0 선형"은 **별도 계열(prefix-65)**로, 현 GodDem이 쓰는 prefix-10과 혼동됨. |
|
||||
| **hero_level power 0.22L²+0.26L** | **재확인 일치** (L50=563·L100=2226·L150=4989). |
|
||||
| **전투 4:1** | `A80ChampMatchConfig` dam>0 12행 전부 hp/dam = **정확히 4.0** 재확인. (hero_level엔 hp 컬럼 없음 — HP는 constitution 파생. "4:1"은 이 전투테이블 소속) |
|
||||
| **몬스터 `monsterteam[10001~10052]`** | **부재 재확인** (전체 2938 번들 257 TextAsset 전수). `monsterteamattr`(10행 감쇠계수)만 존재. |
|
||||
|
||||
---
|
||||
|
||||
## 1. 재복호화 결과 (재현 성공)
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 원작 APK | `C:\Users\sw\Downloads\Wild+Survival+-+Idle+Defense_862_APKPure\` (XAPK split: base + `UnityDataAssetPack.apk` + `config.arm64_v8a.apk`) |
|
||||
| 밸런스 저장소 | `UnityDataAssetPack.apk` 내 YooAsset `DefaultPackage` — 표준 `UnityFS` 번들(2022.3.62f3), 파일 자체는 미암호화 |
|
||||
| config 번들 | `60f4b8a79e0efed6b5ada257fb5d9ea8.bundle` — config TextAsset **203종 집중** (동일 키) |
|
||||
| 암호 방식 | TextAsset **내용**에 **22바이트 반복 XOR** (매핑 v1 주기 22 검증됨 — 자기상관 피크 0.146@22) |
|
||||
| 키 | 🚫 **미보존**. 빈도분석(비출력문자 최소화 + JSON 카이제곱)으로 **재유도**했으나 조직 기록·본 문서에 평문 미기재. scratchpad 한정, 작업 후 정리. |
|
||||
| 평문 | CRLF pretty-print JSON `{\r\n "data": [ … ]}`. (선두 40바이트 공통 헤더 = `{"data":[{"id":"` 접두부. 매핑 v1의 compact JSON 표기는 근사) |
|
||||
| 산출 | **203종 복호화 · 유효 JSON 187 / 무효 16** (매핑 v1 "엄격 유효 187"과 정확 일치. 무효 16 = item·drawtype·A80_Language 등 문자열 내 제어문자·중국어 GBK) |
|
||||
|
||||
**재현 방법(요약, 키 비공개)**: ① UnityPy로 config 번들 로드 → TextAsset 암호문 획득 ② 주기 22 확정(자기상관) ③ 컬럼별 XOR 키를 "비출력문자 최소 + JSON 빈도 최대"로 재유도 ④ 전량 복호화. **libil2cpp 네이티브 리버싱 불요** (매핑 v1과 동일 경로).
|
||||
|
||||
---
|
||||
|
||||
## 2. heroskillattr 구조 (배율 트랙 원본)
|
||||
|
||||
**스키마**: `id, nameid, icon, attr, quality, attr_val` — **1011행**.
|
||||
|
||||
**id 체계**: `[tier prefix 2자리][effect code 3자리][01][quality 1자리]` (매핑 v1 확인).
|
||||
- 예: `10017011` = prefix `10` + effcode `017`(attack_add) + `01` + quality `1` → `attr_val = 0.050`
|
||||
- **effect code** = 어느 스탯인가 / **tier prefix** = 강도 밴드 / **quality(1~6)** = 밴드 내 하위 등급
|
||||
|
||||
### 2-1. effect code → attr 카탈로그 (27코드)
|
||||
|
||||
| effcode | attr | effcode | attr | effcode | attr |
|
||||
|---------|------|---------|------|---------|------|
|
||||
| 006 | lucky_rate | 016 | hp_add | 030/031 | suck_ratio / _res |
|
||||
| 007 | lucky_rate_res | 017 | **attack_add** | 032/033 | retaliate_rate / _res |
|
||||
| 008 | **lucky_multiple** | 018 | defense_add | 034/035 | combo_rate / _res |
|
||||
| 009 | lucky_multiple_res | 019 | **attack_speed_add** | 036 | **penetrate_ratio** |
|
||||
| 010 | hp | 026 | **hurt_add** | 037 | ele_penetrate_ratio |
|
||||
| 014 | hit_rate | 027 | hurt_reduce | 038 | ele_hurt_add |
|
||||
| 015 | dodge_rate | 028/029 | stun_rate / _res | 302/402/502 | hurt_add (별도 템플릿) |
|
||||
|
||||
### 2-2. 템플릿 공유 (계열 복사 — 확정)
|
||||
|
||||
prefix-10 기준 동일 수열을 여러 attr이 공유:
|
||||
|
||||
| 템플릿 | prefix-10 수열 (quality 1~6) | 공유 attr 수 | 공유 attr |
|
||||
|--------|------------------------------|-------------|----------|
|
||||
| **C (배율계)** | `0.05 / 0.07 / 0.10 / 0.15 / 0.20 / 0.30` | **5** | **attack_add · attack_speed_add · hurt_add · lucky_multiple · lucky_multiple_res** |
|
||||
| **B (확률계 ×2등비)** | `50 / 100 / 200 / 400 / 800 / 1600` | **10** | hit_rate · dodge_rate · stun_rate(+res) · suck_ratio(+res) · retaliate_rate(+res) · combo_rate(+res) |
|
||||
| **P (관통계)** | `0.01 / 0.02 / 0.03 / 0.04 / 0.05 / 0.06` | 2 | lucky_rate · penetrate_ratio |
|
||||
| 독립 hp_add | `0.10 / 0.20 / 0.30 / 0.40 / 0.50 / 0.60` (선형 +0.1) | 1 | hp_add |
|
||||
| 독립 defense_add | `0.02 / 0.04 / 0.06 / 0.08 / 0.10 / 0.12` | 1 | defense_add |
|
||||
| 독립 hurt_reduce | `0.02 / 0.04 / 0.06 / 0.08 / 0.10 / 0.15` | 1 | hurt_reduce |
|
||||
| 독립 hp | `120 / 360 / 720 / 1200 / 1800 / 2400` | 1 | hp (정액) |
|
||||
|
||||
> **task 의심 검증 결과**: "공속·피해증가·치명타피해 등 최소 3개 트랙이 같은 수열 복사" → **사실. 실제 5종**(attack_add 포함)이 C-템플릿을 글자 그대로 공유. 별도 값이 아니라 **동일 상수 블록**이다.
|
||||
|
||||
### 2-3. attack_add 전체 티어 사다리 (effect 017)
|
||||
|
||||
| prefix | quality 1~6 수열 | 성격 |
|
||||
|--------|------------------|------|
|
||||
| **10** | `0.05 / 0.07 / 0.10 / 0.15 / 0.20 / 0.30` | ← **현 GodDem 출처** (C-템플릿 최하위) |
|
||||
| 11 | `0.07 / 0.09 / 0.12 / 0.18 / 0.25 / 0.40` | C-템플릿, q1 base +0.02 |
|
||||
| 12 | `0.09 / 0.11 / 0.14 / 0.21 / 0.30 / 0.50` | |
|
||||
| 13 | `0.11 / 0.13 / 0.16 / 0.24 / 0.35 / 0.60` | |
|
||||
| 14 | `0.13 / 0.15 / 0.18 / 0.27 / 0.40 / 0.70` | |
|
||||
| 15 | `0.15 / 0.17 / 0.20 / 0.30 / 0.45 / 0.80` | |
|
||||
| 16 | `0.17 / 0.19 / 0.22 / 0.33 / 0.50 / 0.90` | C-템플릿 최상위 |
|
||||
| 62 | `0.40 / 0.80` | 고티어 선형 (별도, 장비옵션 풀 미사용) |
|
||||
| 63 | `0.60 / 1.20 / 1.80` | 고티어 선형 |
|
||||
| 64 | `0.80 / 1.60 / 2.40 / 3.20` | 고티어 선형 |
|
||||
| **65** | `1.00 / 2.00 / 3.00 / 4.00 / 5.00` | ← 매핑 v1이 "순수 선형"으로 인용한 계열 |
|
||||
|
||||
**C-템플릿(prefix 10~16) 밴드 규칙**: q1 base가 prefix당 **+0.02** 등차(0.05→0.07→…→0.17). 밴드 내부(quality 1→6) 곡선은 **가속**: prefix-10 차분 = +0.02, +0.03, +0.05, +0.05, +0.10 (**선형 아님**).
|
||||
|
||||
---
|
||||
|
||||
## 3. 실사용 범위 (balance-designer 참고)
|
||||
|
||||
`heroequipmentskill`(장비 옵션 드로우풀, 1430행)이 **heroskillattr id 882/1011 참조** (매핑 v1 §2-5 "882종" 일치).
|
||||
- 실사용 attr **21종**, 전부 **prefix 10~16** 밴드만 사용. 고티어 prefix(50~55·62~65)는 **정의만 되고 장비옵션 풀엔 미사용**.
|
||||
- 실사용 배율계(C-템플릿) = attack_add · attack_speed_add · hurt_add · lucky_multiple(+res). 즉 5종이 같은 값으로 4~5개 옵션 슬롯을 채운다.
|
||||
|
||||
> **매핑 v1 §2-4 "실사용 87엔트리 = 6종" 주석과의 차이**: 본 재추출의 882/21종은 **장비옵션 드로우풀**(heroequipmentskill) 기준. 매핑 v1의 "87/6종"은 다른 참조 경로(히어로 기본 스킬 kit 추정) 기준으로 보이며, 두 usage scope가 매핑 v1에서 혼재. balance-designer는 **어느 시스템을 이식하는지에 따라 참조 scope를 명시**할 것.
|
||||
|
||||
---
|
||||
|
||||
## 4. 단위 확정 — attack_add `1.0` = `+100%` (배율 소수)
|
||||
|
||||
### 4-1. 결론
|
||||
`attr_val`은 **배율 소수(fraction)**. 표시상 `×100 → %`. `0.05 = +5%`, `1.0 = +100%`, prefix-65 q5 `5.0 = +500%`.
|
||||
|
||||
### 4-2. 근거 (데이터 내부 정합성 — 결정적)
|
||||
1. **lucky_rate = 치명타 확률**, prefix-10 = `0.01~0.06`. 확률은 정의상 [0,1]. **0.01로 저장**(정수 1,2,3이 아님) → 저장 소수가 곧 비율. (0.01 = 1% 치명타)
|
||||
2. **penetrate_ratio**(0~1 비율)가 lucky_rate와 **동일 P-템플릿** → 소수=비율 확정.
|
||||
3. **hurt_reduce = 피해 감소**, `0.02~0.15`. 감소율은 ≤1. `0.15 = 15%` 감소. 소수=비율.
|
||||
4. **lucky_multiple**(치명타 피해 배율)이 attack_add와 **동일 C-템플릿**. 배율계가 확률계와 같은 소수 스케일 → attack_add도 동일 단위.
|
||||
5. **GodDem 소비 모델과 정합**(매핑 v1 §3-1): `최종값 = (Init + Additional) × (1 + Multiplier) + Static`. `_add`계는 `Multiplier` 슬롯 → `0.05 → ×1.05 = +5%`. 이식 대상 코드가 이미 소수 배율로 소비.
|
||||
|
||||
### 4-3. 한계 (정직 고지)
|
||||
- **il2cpp 네이티브 코드 직접 확인 = 불가**. 원작은 **Beebyte Obfuscator + 네이티브 컴파일**(global-metadata에 `Beebyte.Obfuscator|RenameAttribute`·`$__Stripped…` 다수 실측). attr 문자열(`attack_add` 등)이 metadata에 **count 0** — 소비 코드가 난독화되어 "이 값에 ×0.01 하는가/(1+x) 하는가"의 **명령어 수준 확증은 차단**. (매핑 v1이 네이티브 리버싱을 안 한 이유와 동일)
|
||||
- 따라서 단위는 **§4-2 정합성으로 확정**하며, 명령어 수준 물증은 없음. 배율계 전체가 확률계와 같은 소수 스케일이라는 점에서 **오판 여지는 실질적으로 없음**.
|
||||
|
||||
---
|
||||
|
||||
## 5. 매핑 v1 정정 사항 (배율 트랙 한정)
|
||||
|
||||
| 매핑 v1 §2-4 기술 | 정정 |
|
||||
|-------------------|------|
|
||||
| "레벨당 수치는 22시리즈 전부 순수 선형. 예: attack_add 1.0/2.0/3.0/4.0/5.0" | ① heroskillattr에 **level 축 없음** — 수열은 **quality(등급)** 축. ② "1.0~5.0"은 **prefix-65 별도 계열**이며 이건 실제 선형. ③ 현 GodDem이 쓰는 **prefix-10 C-템플릿(0.05~0.30)은 가속 곡선**(선형 아님). 두 계열이 혼동됨. |
|
||||
| "attack_add 0.05 등차 +0.02" (§4 표) | q1~q3 실제 = `0.05 / 0.07 / 0.10` (q3는 **0.10**, +0.02 외삽한 0.09 아님). 등차 아님·가속. |
|
||||
| hp_add 곡선 | prefix-10 hp_add = `0.1/0.2/…/0.6` **선형 +0.1** (맞음). 단 attack_add와 **다른 템플릿** — "배율계는 다 같은 곡선"이 아님. |
|
||||
|
||||
---
|
||||
|
||||
## 6. 저작권·키 취급 (PD 방침 준수)
|
||||
- 원작 데이터는 **참고 수치만** 본 문서에 기재. 아트·텍스트·원본 파일·복호화본 **레포 미커밋**. `.gitignore` `scratchpad/·wild/·*.apk` 등재 확인.
|
||||
- 22바이트 XOR 키는 **작업용 임시 재유도**만 — 본 문서·조직 기록에 **평문 미기재**. scratchpad 복호화본·키 스크립트는 **작업 완료 후 정리**.
|
||||
- 재해독 필요 시 원작 APK에서 §1 방법으로 재추출(키 재유도 결정적·재현 가능).
|
||||
|
||||
---
|
||||
|
||||
## 7. balance-designer 인계 노트
|
||||
1. **배율 재산정 근거 수열**: C-템플릿(§2-2·2-3), P-템플릿, 독립 hp_add/defense_add/hurt_reduce가 원본. 현 GodDem 0.05~0.30 = attack_add prefix-10 그대로.
|
||||
2. **단위 = 소수 배율**(§4). `(1+Multiplier)` 소비. 등급 3단 설계 시 prefix-10 q1~q3 = `0.05/0.07/0.10`을 그대로 쓰거나, 밴드(prefix)로 티어를 표현.
|
||||
3. **템플릿 공유는 원작 의도적 설계**(옵션 다양성은 effect 종류로, 강도는 공용 밴드로). 우리 배율 트랙이 여러 스탯에 같은 수열을 써도 **원작 정합**. 단 우리 스케일(1캐릭·20레벨·매판 리셋)에는 매핑 v1 §4(d)대로 **곡선 형태만 이식·절대값 재조정** 권고.
|
||||
4. **곡선 형태 주의**: 배율계(C)는 가속, hp_add·penetrate는 선형, 확률계(B)는 ×2 등비 — 스탯마다 다르다. 일괄 선형 가정 금지.
|
||||
|
|
@ -31,3 +31,15 @@
|
|||
- **착수**: 개발팀장 APK 재추출 (Downloads 원작 APK·22바이트 XOR 키 재유도·배율 트랙 원본·단위 확정 중심, 진행중). 산출 예정 `2026-08-22_원작배율_재추출_원본_v1.md`
|
||||
- **후속 체인**: 재추출 원본 → balance-designer 전체 배율 재산정 → plan-auditor 검증 → 개발팀장 정액+배율 일괄 구현 → 플레이테스트
|
||||
- **키 취급**: PD 방침(미보존) 유지 — 작업용 임시 유도·scratchpad 한정·작업 후 정리. 재추출은 PD 최신 승인 범위 내 (키 삭제 지시와 상충 아님 — 임시 유도 vs 영구 보존 구분)
|
||||
|
||||
## 17. 원작 APK 재추출 — 완료·결정적 반전 (개발팀장, GodDem 수정 0)
|
||||
|
||||
- **재추출 성공** (C50 준수 — 팬아웃 0·팀장 직접·Python만): UnityPy config 번들 로드 → 주기22 자기상관 → 빈도분석(비출력문자+JSON 카이제곱)으로 키 재유도 → 유효 JSON 187/203 (매핑 v1과 정확 일치). 키 scratchpad 임시 유도만·평문 미보존·복호화본 전량 정리 완료·레포 유출 0
|
||||
- **★ attack_add 단위 확정 = 배율 소수** (0.05=+5%·1.0=+100%). 근거 = 데이터 정합성(lucky_rate 확률이 소수 저장·penetrate_ratio·hurt_reduce 동일). **정직 한계**: il2cpp 직접 코드 확인 불가(원작 Beebyte Obfuscator+네이티브 컴파일) — 정합성 확정이나 명령어 확증은 아님
|
||||
- **★ 결정적 반전 — 현 0.05~0.30 = 원작 attack_add prefix-10 quality 1~6 정확 일치 (원작 정합)**. 즉 **현 배율값은 이탈이 아니라 원작 최저 티어 밴드를 그대로 쓴 것**. balance-designer v1 안A(배율 유지)가 결과적으로 정확. plan-auditor "(a) 미해소·오귀속" 우려는 재추출로 해소 — 배율은 형태·값 모두 원작
|
||||
- **★ PD 지적 (a)(b)의 실체 = 정액 누락**: 원작은 정액(hero_level power 0.22L²+0.26L)+배율(attack_add %) 2층인데 우리는 배율만. "%가 원작과 다르다"는 "%값이 틀렸다"가 아니라 "정액 층이 통째로 빠져 원작과 다르다"였음
|
||||
- **C-템플릿(0.05~0.30) 공유 5종** (attack_add·attack_speed_add·hurt_add·lucky_multiple·lucky_multiple_res) 전부 원작 정합 — 여러 스탯 동일수열도 원작 설계. plan-auditor "별건 3종+"는 사실(실제 5종), 단 이탈 아닌 정합
|
||||
- **매핑 v1 정정 3건**: (a) heroskillattr level 축 없음 — 수열은 quality 축 (b) "1.0~5.0 선형"은 별도 prefix-65 고티어(현 prefix-10과 혼동됐던 것) (c) prefix-10 = 가속곡선(차분 +0.02/+0.03/+0.05/+0.05/+0.10), 선형 아님
|
||||
- **몬스터 monsterteam 부재 재확인** (2938 번들·257 TextAsset 전수 — monsterteamattr 10행 감쇠계수만 존재). 원작 몬스터 절대 스탯 없음 = 4:1 위 창작 불가피 확정
|
||||
- **산출**: `2026-08-22_원작배율_재추출_원본_v1.md` (배율 원본·단위·템플릿·매핑 정정·인계 노트)
|
||||
- **후속**: balance-designer 재산정 v2 착수 (배율 유지 확정 + 정액 트랙 + 티어 판단 — 최저 prefix-10만 vs 고티어 prefix-65 반영) → plan-auditor 검증 → 개발팀장 구현 → 플레이테스트
|
||||
|
|
|
|||
Loading…
Reference in New Issue