BurningTimesAi/공유/기획/GodDem/2026-08-22_원작배율_재추출_원본_v1.md

12 KiB
Raw Permalink Blame History

원작 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_val1011행.

id 체계: [tier prefix 2자리][effect code 3자리][01][quality 1자리] (매핑 v1 확인).

  • 예: 10017011 = prefix 10 + effcode 017(attack_add) + 01 + quality 1attr_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 등비 — 스탯마다 다르다. 일괄 선형 가정 금지.