18 KiB
원작 Wild Survival heroequipment 장비 트랙 재추출 원본 SOT v1
작성: 개발팀장 2026-08-22 · 근거: 원작 APK(
com.and.wild.sur.victoryv862)heroequipment·heroequipmentupgrade·heroequipmentforging·heroequipmentreforging재복호화 실측 트리거: B2 장비강화 설계 v1(balance-designer)이 heroequipment M수열을 재추출하지 않고 형태(가속 2차)만 재사용·절대치 목표 역산. PD 방향 "우선 원작처럼 맞춰 전체 밸런싱 동일성"(2026-08-22) 정합 위해 원작 장비 절대치 확보. PD 지시: "우선 원작처럼 맞춰 전체 밸런싱 동일성 확인 후 추후 변경할 부분을 지시"(2026-08-22) 관계:2026-08-20_원작밸런스_해독_매핑_v1.md(이하 매핑v1) §2-3 heroequipment 절의 원본 재확정 + ⚠️→🟢 승격. 본 문서가 장비 트랙에 한해 매핑v1보다 상위 SOT.2026-08-22_원작배율_재추출_원본_v1.md(배율 트랙)와 동일 패턴·동일 파이프라인.
0. 결론 요약 (장비 트랙)
| 매핑v1 §2-3 ⚠️ 주장 | 재추출 판정 | 원본값 |
|---|---|---|
레벨 배수 M(16단) = [1,2,4,8,12,20,28,40,52,68,84,104,124,148,172,200] 계단식 2차 |
🟢 정확 일치 | heroequipment itemlvl 1~16 attack/hp가 정확히 base×M. 12조합(6등급×2슬롯) 전부 동일 |
| 등급 배수 = 1/5/10/20/40/80 (q1→q2 ×5, 이후 ×2) | 🟢 정확 일치 | itemlvl1 attack q1~q6 = 5/25/50/100/200/400 = ×1/5/10/20/40/80. hp도 10/50/100/200/400/800 동일 |
| 비용 분해 = Base(quality)+V(level) 완전 가산 | 🟢 정확 일치 | Base q3=16,000·q4=42,000·q5=86,000·q6=326,000. V(level) 8조합 전부 동일 |
| 수확체감 없음 (효율 2,375→2,500 평탄) | 🟢 정확 일치 | 골드/ΔM = new_level6 19000/8=2375, new_level16 70000/28=2500. 평탄 |
| 슬롯 종속 subtype1 attack_speed=attack/2, subtype2 defense=hp/4 | 🟢 정확 일치 | spd=atk/2 96/96행·def=hp/4 96/96행(저값 반올림 2건 포함) |
| forging(등급도박) rate 0.4/0.3/0.2/0.1, 비용 ×2 | 🟢 일치 + 미세 정정 | rate 0.4/0.3/0.2/0.1 ✅ · 골드 4000/8000/16000/32000(×2) ✅ · 단 전이는 q2→3→4→5→6 (q1→2 아님, §4) |
| reforging(옵션리롤) 잠금 비용 2^N | 🟢 정확 일치 + 보강 | dj_6003 = 1/2/4/8/16 = 2^N ✅ · 추가로 dj_6004 = 잠금수 선형(0/1/2/3/4) |
| 옵션 슬롯 max(1, quality-1) | 🟢 정확 일치 | q1~q6 skill_num = 1/1/2/3/4/5 = max(1,q-1) |
총평: 매핑v1 §2-3의 heroequipment 주장은 재추출 결과 전부 정확했다(⚠️ 절 중 이례적으로 오류 0건). forging 전이 범위(q2 시작)와 reforging 2재화 구조만 세부 보강. B2 v1이 "형태만 재사용·절대치 재산정"한 전제는 유효하며, 본 재추출은 그 형태(계단식 2차 M·Base+V)를 원본 절대치로 확증해 balance-designer의 재산정 근거를 확정한다.
1. 재복호화 결과 (재현 성공)
| 항목 | 값 |
|---|---|
| 원작 APK | C:\Users\sw\Downloads\Wild+Survival+-+Idle+Defense_862_APKPure\UnityDataAssetPack.apk (236MB) |
| config 번들 | assets/yoo/DefaultPackage/60f4b8a79e0efed6b5ada257fb5d9ea8.bundle (config TextAsset 203종, 전체 2938 번들 중) |
| 암호 방식 | TextAsset 내용에 22바이트 반복 XOR (자산마다 위치 0 리셋) |
| 키 유도 | known-plaintext: 전 자산 선두 22바이트가 공통(199/203) = 정확히 키 1주기. 공개 JSON 헤더 평문 {\r\n "data": [\r\n {\r(22B)과 암호문 XOR로 결정적 유도. 🚫 키 평문 미보존(scratchpad 한정·작업 후 정리) |
| 평문 | CRLF pretty-print JSON {\r\n "data":[…], "ext1", "ext2", "ver", "code", "updtime", "excelsign"} |
| 검증 | heroequipment 192행·heroequipmentupgrade 104행·heroequipmentskill 1430행 = 매핑v1 행수와 정확 일치(강력 검증) |
재현 방법(요약, 키 비공개): ① zipfile로 UnityDataAssetPack.apk에서 config 번들 추출 → UnityPy(1.25.3) 로드 ② TextAsset 203종 raw bytes 획득 ③ 선두 22B 공통성 확인 → known-plaintext 헤더로 키 1주기 유도 ④ 전 자산 XOR 복호 → JSON 파싱 → CSV. libil2cpp 네이티브 리버싱 불요(배율 트랙 재추출과 동일 경로).
2. heroequipment 구조 (192행 = 2슬롯 × 6등급 × 16레벨)
스키마: id, code, next_code, next_level, name, icon, maintype(6), subtype(1/2), quality(1~6), itemlvl(1~16), hero_level, random_pro, hp, attack, defense, attack_speed, skills0, skills1, skills, skill_num, decomposed_props — 21열.
- maintype = 6 단일. subtype 1 = 공격형(attack·attack_speed), subtype 2 = 방어형(hp·defense).
- 192 = 2(subtype) × 6(quality) × 16(itemlvl) — 모든 조합이 개별 아이템(고유 code·hero_level 요구).
2-1. 레벨 배수 M수열 (itemlvl 축) — 🟢 원본 확정
M(itemlvl 1~16) = [1, 2, 4, 8, 12, 20, 28, 40, 52, 68, 84, 104, 124, 148, 172, 200]
- subtype1 q1 attack 실측:
5,10,20,40,60,100,140,200,260,340,420,520,620,740,860,1000= 5 × M (정확). - 1차 차분 =
1,2,4,4,8,8,12,12,16,16,20,20,24,24,28→ 2레벨마다 +4 증가하는 계단식 2차(지수 아님). 매핑v1 "2차차분 2레벨마다 +4" 정확. - 12조합(subtype 2 × quality 6) 전부 동일 M수열 — 실측 True. 즉 등급·슬롯 무관 단일 레벨 곡선.
2-2. 등급 배수 (quality 축) — 🟢 원본 확정
등급배수(q1~q6) = 1 / 5 / 10 / 20 / 40 / 80 (q1→q2 ×5, 이후 전부 ×2 등비)
- itemlvl1 기준 실측: subtype1 attack =
5/25/50/100/200/400, subtype2 hp =10/50/100/200/400/800. 양 슬롯 동일 배수. - 최종 스탯 = base_slot × 등급배수(q) × M(itemlvl). 예: subtype1 q6 itemlvl16 attack = 5 × 80 × (200/1) … 실측 = 400 × 200 = 80,000 상당(원작 스케일).
2-3. 슬롯 종속 2차 스탯 — 🟢 원본 확정
| 슬롯 | 주스탯 | 2차 스탯 | 관계 | 실측 |
|---|---|---|---|---|
| subtype1 (공격형) | attack | attack_speed | = attack / 2 | 96/96행 정확 |
| subtype2 (방어형) | hp | defense | = hp / 4 | 96/96행(저값 3=round(10/4) 등 반올림 포함) |
주의(B2 §4-2와 정합): 이 "÷2·÷4"는 원작 내부에서 정액(flat) 스탯이다. GodDem
attack_speed_add는 비율(ratio) 소비이므로 직접 이식 시 차원 불일치(+700% 공속). B2 v1이 이를 근거로 형태만 재사용·값 독립 재설계한 판단은 재추출로 재확인해도 유효.
2-4. 옵션 슬롯 = max(1, quality-1) — 🟢 원본 확정
| quality | q1 | q2 | q3 | q4 | q5 | q6 |
|---|---|---|---|---|---|---|
| skill_num(옵션 슬롯 수) | 1 | 1 | 2 | 3 | 4 | 5 |
| max(1, q-1) | 1 | 1 | 2 | 3 | 4 | 5 |
정확 일치. 옵션 슬롯은 heroequipmentskill(1430행) 가중추첨 풀에서 채워짐(매핑v1 §2-5, 배율재추출v1 §3 참조).
2-5. 두 성장 축 분리 (next_code vs next_level) — 신규 규명
next_code(예: xw_11003 → xw_11004): quality up 축 (q3→q4, 같은 itemlvl) = forging(등급 도박) 경로.next_level(예: xw_14003 → xw_15003): itemlvl up 축 (itemlvl4→5, 같은 quality) = 강화(확정 레벨업) 경로.next_level은 itemlvl 1~3에서 공란, itemlvl 4부터 채워짐 → 강화는 itemlvl 4부터 개시. 이것이 heroequipmentupgrade가 level 4에서 시작하는 이유(§3).
3. heroequipmentupgrade 비용 (104행 = 8조합 × 13전이) — 🟢 원본 확정
스키마: id, subtype(1/2), quality(3~6), old_level, new_level, cost. cost = dj_6013_N;dj_6002_N;dj_6001_G; (dj_6001 = 골드, dj_6002·dj_6013 = 재료). 스탯 델타 컬럼 없음 — 레벨 스탯은 §2-1 M수열이 담당, 본 테이블은 비용만 정의.
- 강화 대상 = quality 3~6만 (q1·q2는 upgrade 행 없음 = 강화 불가, 최하 소모 티어).
- subtype 1·2 비용 완전 동일 (슬롯 무관).
- level 축 = itemlvl 축과 동일(§2-5
next_level링크로 확증: old_level4→new_level5 = xw_14003→xw_15003). 표기상 old_level 4~16 / new_level 5~17.
3-1. Base(quality) + V(level) 완전 가산 분해
Cost(quality, level) = Base(quality) + V(level) [골드, dj_6001]
| quality | Base (= new_level5 골드) | 검증 |
|---|---|---|
| q3 | 16,000 | quality간 차이가 전 레벨 상수(q4−q3=26000, q5−q4=44000, q6−q5=240000 전 13행 일치) → Base+V 가산 확정 |
| q4 | 42,000 | |
| q5 | 86,000 | |
| q6 | 326,000 |
V(level) 공통 곡선 (Base 제외분, V(new_level5)=0 기준, 8조합 전부 동일):
| new_level | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| V(골드) | 0 | 3,000 | 6,000 | 12,000 | 12,000 | 21,000 | 18,000 | 30,000 | 26,000 | 42,000 | 34,000 | 54,000 | 42,000 |
V는 비단조(지그재그) — 홀/짝 new_level이 교차하는 2계열 구조로, 깔끔한 다항식(예: B2의
20L²+100L)이 아니다. B2의 V식은 근사이며 원작 V는 이 실측 수열이다.
3-2. 수확체감 없음 — 🟢 원본 확정
효율 = 골드 / ΔM(단위 레벨배수 증가분)
new_level6: 19,000 / 8 = 2,375
new_level16: 70,000 / 28 = 2,500 ← 매핑v1 "2375→2500 평탄" 정확 재현
- 스탯(M)은 ×200으로 가속하는데 단위-M당 골드는 ~2,400 평탄 → 레벨이 오를수록 골드/실스탯 효율은 오히려 개선(체증). 수확체감 없음.
- q3 12스텝(level 4→16): 스텝당 골드 16,000→70,000 = ×4.38, 스탯 M[4]→M[16] = 8→200 = ×25. 매핑v1 수치 정확.
- ⚠️ 매판 리셋 부적합(B2 §2-2·매핑v1 §4(d) 재확인): 이 평탄·체증 곡선은 영구 강화 전제. 매판 리셋 로그라이크에 그대로 쓰면 "모든 축 골고루"가 항상 최적이 되어 선택이 사라진다. 비용은 지수·증가량은 선형으로 재설계 권고 유지.
4. heroequipmentforging (등급 도박, 8행) — 🟢 일치 + 미세 정정
스키마: id, subtype(1/2), old_quality, new_quality, rate, cost.
| 전이 | rate | 골드(dj_6001) | 재료(dj_6002) | 기대 시도(1/rate) | 실질 비용 배율 |
|---|---|---|---|---|---|
| q2 → q3 | 0.400 | 4,000 | 10 | 2.5회 | — |
| q3 → q4 | 0.300 | 8,000 | 20 | 3.33회 | ×2 골드 |
| q4 → q5 | 0.200 | 16,000 | 40 | 5.0회 | ×2 골드 |
| q5 → q6 | 0.100 | 32,000 | 80 | 10.0회 | ×2 골드 |
- rate = 0.4/0.3/0.2/0.1 (등차 −0.1) ✅ 매핑v1 정확.
- 비용 = 4000/8000/16000/32000 (×2 등비) ✅ · 재료도 10/20/40/80 (×2).
- 정정: 전이는 q2→3→4→5→6 (4단계). 매핑v1/B2 §8 "등급 1→2→3→4→5 시도"는 부정확 — q1→q2 forging 없음(q1→q2는 다른 경로/무료 추정). forging 도박 구간은 q2 시작.
- subtype 1·2 완전 동일.
5. heroequipmentreforging (옵션 리롤 잠금, 5행) — 🟢 정확 일치 + 보강
스키마: id, lock_data(0~4), cost1, cost2. subtype 무관 단일.
| id | lock_data(잠금수) | cost1 주재화(dj_6003) | cost1 보조(dj_6004) |
|---|---|---|---|
| 1 | 0 | 1 | — |
| 2 | 1 | 2 | 1 |
| 3 | 2 | 4 | 2 |
| 4 | 3 | 8 | 3 |
| 5 | 4 | 16 | 4 |
- dj_6003 = 1/2/4/8/16 = 2^(lock_data) ✅ 매핑v1 "2^N" 정확.
- 보강: 추가로 dj_6004 = lock_data 선형(0/1/2/3/4). 즉 잠금 리롤은 주재화 지수 + 보조재화 선형 2재화 구조.
- 보조 테이블
heroequipmentreforgingslot(6행): id 1~6 → slot 0~5 (옵션 슬롯 인덱스, §2-4 max(1,q-1) 정합).
6. B2 v1 역산치와 원작의 괴리 (balance-designer 인계 핵심)
B2 v1은 원작 절대치를 의도적으로 폐기하고 형태만 재사용(B2 §2-2, B1 선례 계승). 재추출로 확보한 원작 절대치와 B2 역산치의 괴리는 다음과 같다 — 모두 스케일 불일치에서 오는 의도된 괴리:
| 항목 | 원작 절대치 (재추출 확정) | B2 v1 역산치 | 괴리 성격 |
|---|---|---|---|
| 레벨 성장 종점 | M수열 ×200 (itemlvl16/1) | ×3.0 (L16, 1+(L²+8L)/192) |
원작 12진영×150레벨 스케일 vs 1캐릭·리셋 스케일. 형태(가속 2차)만 공유, 배수 66배 축소 |
| 레벨 곡선 형태 | 계단식 2차 (1차차분 2레벨마다 +4) | 연속 2차 (L²+8L)/192 |
B2는 원작 계단식을 매끄러운 2차로 근사. 초반 체감 확보 위해 선형항 8L 추가 |
| 등급 배수 | 6등급 ×1/5/10/20/40/80 | Grade 1~2 (×1 base) | B2는 2등급 체계(원작 6등급 미이식). 괴리는 컨텐츠 규모 차 |
| 비용 Base | q3~q6 = 16k/42k/86k/326k | ItemBase = PowerScore×50 (300~2000) | 원작 골드 규모(수만~수십만) vs GodDem 골드 규모. 원작 Base비율 1/2.63/5.38/20.4 참고만 |
| 비용 V(level) | 실측 지그재그 수열 (0~54,000) | 20L²+100L (0~6,720) 매끄러운 다항 |
B2는 clean 근사. 원작 V는 비단조 실측 수열 |
| 2차 스탯 | spd=atk/2(0.5)·def=hp/4(0.25) 정액 | 0.015×Grade×(L²+8L)/192 (만렙 3%/6%) |
B2가 원작 정액 직접이식 기각(차원 불일치)한 판단 재확인 유효 |
| forging rate | 0.4/0.3/0.2/0.1 (q2~q6) | 미채택(골격만) | B2 §8 skeleton — 원본값 확정 완료(§4), 실채택 시 그대로 사용 가능 |
| reforging | 2^N + 선형 보조재화 | 미채택(N/A, 옵션슬롯 B3 선행) | 원본값 확정 완료(§5) |
7. balance-designer B2 재산정 인계 노트
-
B2 착수 차단 해제 유지: 재추출 결과 매핑v1 §2-3 heroequipment 주장이 전부 정확했으므로, B2 §0 "재추출 없이 착수" 판단의 사실 전제(원작값이 우리 스케일에 부적합)는 확증됐다. B2 v1 설계는 원작 정합 관점에서 재작업 불요 — 단 아래 2택은 PD 결정 영역.
-
⚠️ PD "원작처럼 맞춰" 해석 2택 (PD 결정 필요):
- (A) 형태 이식(B2 현행): 계단식 2차 M·Base+V·2재화 구조 등 형태·구조를 원작대로, 절대치는 GodDem 스케일 재산정. B1·공격력2층·배율트랙이 모두 채택한 노선. B2 v1이 이미 이 노선.
- (B) 절대치 이식: 원작 M(×200)·Base(16k~326k)·6등급을 수치까지 그대로. 단 1캐릭·20레벨·매판 리셋 스케일에서 5레벨 만에 자릿수 폭발(매핑v1 §0 경고) — 리셋 게임엔 구조적 부적합.
- 배율 트랙 재추출v1이 "현 GodDem 0.05~0.30 = 원작 그대로"를 확인했듯, 장비도 어느 층위까지 '동일'인지는 PD 판단. 개발팀장 소견: 장비 레벨 곡선은 (A)가 유일 실용안(리셋 게임 자릿수 제약). 배율 트랙처럼 절대치가 이미 맞는 경우와 달리, 장비 M(×200)은 절대 이식 불가.
-
원본값 확정분 (B2 재산정 시 참조):
- M수열 계단식 굴곡:
[1,2,4,8,12,20,28,40,52,68,84,104,124,148,172,200](B2 §4-1 형태 검증용 — B2의 연속 2차가 이 계단을 근사하는지 대조). - 등급 배수 1/5/10/20/40/80 (B2가 2등급→다등급 확장 시 원작 비율 참고).
- Base 비율 16k:42k:86k:326k = 1:2.63:5.38:20.4 (B2 §4-4 ItemBase 비율 근거 — B2가 이미 인용).
- forging rate 0.4/0.3/0.2/0.1 · 비용 ×2 (B2 §8 실채택 시 확정값).
- reforging 2^N + 선형 보조 (옵션슬롯 B3 도입 후 확정값).
- M수열 계단식 굴곡:
-
수확체감 재경고(불변): 원작 강화는 단위-M당 골드 평탄(2375~2500) = 영구 강화 전제. B2 §2-2·매핑v1 §4(d)의 "매판 리셋엔 지수 비용+선형 증가 재설계" 결론 재추출로 재확인. B2 v1의 비용식(
ItemBase+V(L))이 지수형이 아닌 점은 B2 §6-4가 이미 미해결 과제로 이관 — 원작 재추출은 이 우려를 강화하지 완화하지 않는다.
8. 저작권·키 취급 (PD 방침 준수)
- 원작 데이터는 참고 수치만 본 문서에 기재. 아트·텍스트·원본 파일·복호화본 레포 미커밋.
.gitignorescratchpad/·wild/·*.apk등재 확인 완료(라인 116~119). - 22바이트 XOR 키는 **작업용 임시 유도(known-plaintext)**만 — 본 문서·조직 기록에 평문 미기재. scratchpad 복호화본·CSV·키 유도 스크립트는 작업 완료 후 정리 완료.
- 재해독 필요 시 원작 APK에서 §1 방법으로 재추출(공개 JSON 헤더 known-plaintext로 키 재유도 결정적·재현 가능).
9. 실측 검증 요약 (C5·C23·C44 — 정직 보고)
| 검증 항목 | 결과 | 근거 |
|---|---|---|
| config 번들 복호화 | 🟢 성공 | 헤더 {\r\n "data":[{"id":"6011... 정상 JSON, 행수 매핑v1 일치 |
| M수열 16단 | 🟢 정확 일치 | heroequipment attack/hp ÷base 실측, 12조합 동일 True |
| 등급 배수 1/5/10/20/40/80 | 🟢 정확 일치 | itemlvl1 quality별 실측 |
| Base+V 가산 분해 | 🟢 정확 일치 | quality간 골드 차이 전 레벨 상수 |
| 슬롯 종속 spd=atk/2·def=hp/4 | 🟢 정확 일치 | 96/96·96/96행 |
| forging rate·비용 | 🟢 일치(전이 범위 정정) | 8행 실측, q2~q6 |
| reforging 2^N | 🟢 정확 일치(2재화 보강) | 5행 실측 |
| 옵션슬롯 max(1,q-1) | 🟢 정확 일치 | skill_num 6등급 실측 |
| 재추출 실패·부분 확정 | 없음 | 장비 트랙 8종 전부 완전 복호·파싱 성공 |
미해결/한계(정직 고지): upgrade new_level 최대 17 vs heroequipment itemlvl 최대 16의 1단 초과분(new_level17 = itemlvl16→17)은 heroequipment 스탯 테이블에 대응 itemlvl17이 없어 강화 상한의 캡 처리 방식은 미규명(코드 il2cpp 난독화 차단). 강화 스탯 증분이 M수열을 재사용한다는 것은 효율식 정합(2375→2500)으로 강하게 지지되나 코드 직접 확증은 아님(매핑v1과 동일 한계). B2 재산정에 영향 없음(형태·비용 확정분으로 충분).