게임에서 확인할 것들
← 조사 기록 · 원본: docs/verification-checklist.md
게임에서 확인할 것들
정적 분석으로 세운 가설과, 아직 모르는 값들을 게임에서 직접 재서 채우는 목록입니다.
잰 값은 src/data/measured.json 에 넣으면 시뮬레이터가 바로 씁니다.
우선순위 순입니다. 1번만 해도 시뮬레이터가 절대 수치를 내놓습니다.
값을 넣으면 tests/data.test.ts 가 추출된 데이터와 어긋나지 않는지 검사합니다 —
둘이 다르면 어느 한쪽이 낡은 것이므로 조용히 넘어가지 않습니다.
1. 클래스 기본 생명력·마나 ★가장 큰 구멍
지금 시뮬레이터는 “속성 + 장비 기여분”만 계산합니다. 클래스가 원래 갖고 시작하는 값을 몰라서입니다. 이것만 채우면 실제 체감 수치가 나옵니다.
방법 — 새 캐릭터를 만들고 포인트를 하나도 안 쓴 상태에서 스탯 창의 생명력·마나를 적습니다.
기록 — measured.json 의 classBase.<클래스>:
"amazon": { "life": 000, "mana": 000, "atLevel": 1 }
레벨 1이 아니라면 atLevel 을 실제 레벨로 적어 주세요. 22개 클래스를 다 할 필요는
없습니다 — 쓰시는 클래스부터 채우면 그 클래스만 정확해집니다.
2. 체력 1점당 생명력 — 5인가 6.5인가 5로 정리됨
게임 툴팁이 5, wiki.gg Mechanics 가 6.5로 엇갈렸는데 5가 맞습니다. 시뮬레이터도
5로 계산합니다. wiki.gg 쪽이 낡은 값입니다.
measured.json 에 기록해 두었고, tests/data.test.ts 가 추출값과 어긋나면 실패합니다.
다만
measured: false로 적어 두었습니다 — 툴팁을 읽고 확인한 것이지 게임 안에서 실제로 재본 값은 아직 아닙니다. 체력 1점을 찍어 생명력 증가분이 정확히 5인지 보시면measured: true로 올릴 수 있습니다. (생명력 % 증가 장비는 벗고 재세요.)
3. 스킬당 최대 랭크 — 유일하게 남은 추정값
rules.json 에서 20으로 잡아둔 값인데 근거가 없습니다. 위키에도 게임 텍스트에도 없습니다.
방법 — 스킬 하나에 포인트를 계속 부어 더 이상 안 들어가는 지점을 봅니다.
기록 — confirmed.maxSkillRank
4-A. 몬스터 저항 곱연산으로 확인됨
CalculateEndDamage(플레이어 → 몬스터 경로)에서 LoadMonsterResistance 뒤에
비교 여섯 번과 곱셈·뺄셈이 붙습니다. 피해 × (1 − 몬스터저항) 형태로 보이고,
비교들은 최대 저항 상한을 거는 것으로 읽힙니다.
방법 — 같은 몬스터를 같은 스킬로 때리면서 “적 저항 감소” 옵션이 붙은 장비를
꼈을 때와 뺐을 때의 피해 숫자를 각각 적습니다. (-value% to Enemy Fire Resistance 류)
확인됨(사용자): 몬스터 저항도 곱연산입니다. 그리고 “적 저항 감소”는 몬스터 저항값에 가산됩니다 — 몬스터 화염저항 50에 내가 -85%를 들고 있으면 몬스터는 -35% 가 되어 오히려 더 아프게 들어갑니다.
남은 것: 상한과 하한. 저항이 음수로 얼마까지 내려가는지, 위로는 어디서 막히는지 모릅니다. 바이너리의
LoadMonsterResistance에는 실수 상수가 없어 확인하지 못했습니다. 저항 감소를 극단적으로 쌓아보면 어디서 안 늘어나는지 보일 겁니다.
4-B. 내 저항 곱연산으로 확인됨
이건 완전히 다른 함수입니다. PlayerTakeDamage 에 있고, 거기서는 나눗셈 쌍이 정확히
다섯 번 반복된 뒤 곱셈·뺄셈과 비교 다섯 번이 이어집니다.
/ / … / / … / / … / / … / / → * - → cmp cmp cmp cmp cmp
다섯 번이 원소 5종(불·냉기·번개·독·아케인)에 대응하는 것으로 보이고, 뒤따르는 비교
다섯 개는 최대 저항 상한(max_fire_resist_percent 등)을 거는 자리로 읽힙니다.
방법 — 같은 몬스터에게 같은 공격을 맞으면서, 특정 속성 저항을 올린 장비를 꼈을 때와 뺐을 때 받는 피해를 적습니다. 불 저항 장비를 끼고 불 공격을 맞는 식으로 속성을 맞춰야 합니다.
확인됨(사용자): 몬스터의 속성 공격에 대한 내 저항은 곱연산입니다. 정적 분석에서 본 원소별 나눗셈 5회 구조와도 맞아떨어집니다. 남은 것은 상한값 하나입니다.
기본 상한은 60% 로 들었습니다(사용자, 기억 기준). 시뮬레이터도 60으로 계산하고
장비의 최대 모든 저항 만큼 올려 잡습니다. 다만 실측은 아직입니다.
그리고 난이도별 저항 페널티. 게임에 모든 저항 최대치 상한선 설정
(resistances_capped)이라는 표시가 있습니다. 상한을 넘긴 저항은 버려지므로, 이 숫자를
모르면 위 곡선을 잘못 읽게 됩니다. 스탯 창에서 그 값을 먼저 적어 주세요.
이 상한은 고정이 아닙니다. 올리는 수단이 여럿입니다(사용자 확인) — 아이템, 룬, 쥬얼,
참, 그리고 레벨 100 이후 열리는 인카네이션 스탯.
반대로 카오스 타워의 chaoticWeakness 는 25% 깎습니다.
그리고 난이도가 올라가면 저항에 -% 페널티가 붙습니다(사용자 확인). 난이도별 수치는
아직 모릅니다 — 게임 텍스트에도 없고 바이너리의 ReturnSubDifficultyStat 에도 실수
상수가 없었습니다. 난이도를 바꿔가며 스탯 창의 저항 표시를 적어주시면 채울 수 있습니다.
그래서 아무 것도 안 낀 기본 상한이 기준값입니다.
기록 — confirmed.maxResistCap
주의:
PlayerTakeDamage는 함수 경계를 정확히 못 잡아서 뒷부분 흐름에는 다른 함수가 섞여 있을 수 있습니다. 위 판단은 함수 앞부분만 근거로 합니다.
5. 추가 원소 피해 “가장 높은 것만 발동”
Mechanics 문서가 “If Additive X Damage is your highest then…” 이라고 적어서
시뮬레이터도 그렇게 표시하지만, 실제로 확인한 적은 없습니다.
방법 — 추가 불 피해와 추가 냉기 피해를 비슷하게 맞춰놓고, 한쪽만 살짝 높입니다. 높은 쪽 특수 효과(화상 / 냉기 증폭)만 뜨는지 봅니다.
6. 아머의 물리 피해 감소 체감
Mechanics 는 아머 1점당 물리 피해 -0.25%, 25% 이후 체감이라고 적습니다.
체감이 어떤 곡선인지는 안 적혀 있습니다.
방법 — 아머를 단계적으로 올리며 스탯 창의 물리 피해 감소 표시값을 적습니다. 25% 근처를 촘촘히 재면 곡선이 보입니다.
7. 속성 계수 재확인
시뮬레이터가 쓰는 값입니다. 각각 1점씩 찍어 스탯 창 변화를 확인하면 됩니다.
| 속성 | 현재 쓰는 값 | 출처 |
|---|---|---|
| 힘 | 공격 피해 +1% | 게임 툴팁 |
| 힘 | 추가 물리 피해 +1 | wiki.gg (게임 툴팁엔 없음) |
| 민첩 | 정확도 +8, 치명타 피해 +0.125% | 게임 툴팁 |
| 지능 | 마법 스킬 피해 +1% | wiki.gg (게임 툴팁은 수치 없음) |
| 기력 | 마나 +4 | 게임 툴팁 |
특히 확인이 필요한 두 줄은 출처가 wiki.gg뿐인 항목입니다 — 힘의 추가 물리 피해와 지능의 1%.
값을 넣는 법
src/data/measured.json 을 고치고 사이트를 다시 빌드하면 끝입니다. build_data.py 는
이 파일을 건드리지 않으니 데이터 재수집을 해도 값이 남습니다.
docker compose up dev # 고친 값이 바로 반영됩니다
수치만 알려주셔도 제가 넣고 반영하겠습니다.