들어가며

 

이 글은 2013년 개편된 대미지 공식정확한 근사식과 이를 기반으로한

보정된 공상한 (공상한 ≠ 몹방어+10k) 에 대한 정보를 제공하는 것을 목적으로 합니다.


그러나 내용의 특성상 근거를 설명하기 위해서는 상당한 양의 수식과 그래프 등을 포함할 수 밖에 없기 때문에

그런 것에는 관심이 없고 사실상 알 필요도 없는 일반 유저를 위한 요약으로서

제일 중요한 내용 두가지를 첫번째 절에 담습니다.


이 후에 나오는 다소 복잡한 내용은 게임의 정확한 수치 분석을 좋아하는 저같은 사람들도
있을 수 있기에 그 분들을 위한 정보로 남기고, 해당하지 않는 분은 그냥 넘기셔도 무방합니다.

 


목차

 

1. 일반 유저를 위한 요약

1.1 정확한 공상한

1.2 밸런스와 추가 피해


2. 대미지 공식

2.1 대미지 공식 연구 (?) 의 역사

2.2 대미지 공식의 개요

2.3 밸런스변수

2.4 유효공격력 함수 (= 대미지 공식)

2.5 근사식의 오차

2.6 보정된 공상한의 실험을 통한 검증

2.7 부록: 실험을 통해 배율을 구하고자할 때의 실험방법

2.8 부록: 실험 데이터


3. 결론

 


 

1. 일반 유저를 위한 요약

 


1.1 정확한 공상한

 

대미지 공식 보정에 의해 몬스터 방어력이 10,000 이상인 경우 공상한은 방어력+10,000 보다 약간 작은 값이 됩니다. 구체적으로, 현재 컨텐츠에서 실험 가능한 11k, 13k, 14k 방어의 몹에 대한 공상한을 실험으로 측정하면 다음과 같습니다. 예상되는 실험의 오차는 ±1 이내입니다. 이 공상한 값들을 고려하면 효율적인 아이템 세팅을 하는 데 도움이 될 것입니다.


그림 1. 실험으로 얻은 공상한. 오차 ~±1.

한편 대량의 실험을 통해 밝혀낸 대미지 공식의 근사식을 이용하면 임의의 몹 방어력에 대한 공상한을 구할 수 있습니다. 미래에 추가될 컨텐츠에 대응하기 위해 21k 몹 방어력까지 공상한을 구해봤으며 그 값들은 다음과 같습니다. 아래 표에 예측된 값은 대략 ±15 이내 정도의 오차를 가질 수 있습니다.


그림 2. 대미지 공식의 근사식으로 예측한 공상한. 오차 ~±15.
 

1.2 밸런스와 추가 피해

 

흔히 알려져 있는 것과는 달리 밸런스에 의한 효과는 추가 피해에 의한 대미지에는 적용되지 않습니다.
즉, 대미지 공식에서 [추가 피해]x6.25 부분은 밸런스와 무관하게 항상 100% 로 반영됩니다.

 


2. 대미지 공식


이 뒤의 내용은 다소 복잡한 내용이 많으므로 관심이 있는 분만 보시기 바랍니다.


 

2.1 대미지 공식 연구 (?) 의 역사

 

[2013.06.25] 대미지 공식 개편
[2013.08.24] 대미지 공식의 근사식 발견
[2013.08.31] 대미지 공식의 공상한 버그 발견
[2014.09.04] 해당 버그를 인벤 실제게에 제보함
[2013.09.12] 대미지 공식의 공상한 버그 수정 (어째서인지 공홈 링크가 삭제되어 있군요.)
[2013.10.24] 수정된 공상한의 검증 완료

저는 2013년 당시 북미섭에서 마영전을 하고 있었는데 대미지 공식 개편이 북미섭으로 들어오면서 VSnobs라는 외국 포럼에서 이에 대한 연구를 시작했습니다. 실험을 통해서 개편된 대미지 공식에 대한 어느정도 정확한 근사식을 얻을 수 있었고, 한편 당시 대미지 공식의 공상한 구현에 버그가 있는 것을 발견하게 되어 이를 제보한 결과 정말 신속히 수정되었습니다.

이후 저는 근사식을 넘어서 실제 클라이언트 내부에서 계산되고 있을 진짜 수식을 찾아내려고 했으나 실패했습니다. 그래서 저는 데브캣이 아마도 대미지 공식을 너무나도 이상한 방식으로 만들어놓은 탓에 일반적인 함수로 표현하지 못할 가능성이 높다고 생각하고 근사식과 측정 데이터만 남겨둔 채 연구를 잠정 중단했습니다. 이후에 누군가 근사식과 데이터를 보고 내지는 클라이언트 분해를 통해 제대로 된 공식을 알아내지 않을까 생각하고요.

그렇게 약 2 년이 지난 지금까지도 대미지 공식의 정확한 수식은 (유저들에게) 알려져 있지 않습니다. 그래서 2 년 동안 인벤 쪽에는 공개하지 않고 썩힌 대미지 공식에 대한 지식을 정리해서 공개하고자 하여 이 글을 적게 되었습니다. 그냥 이전 데이터 그대로 공개하기는 좀 그러니까 이번에는 조금 더 실험의 정확도를 높여서 많은 데이터를 취했는데 데이터가 깔끔한 곡선으로 얻어지기는 하는데 여전히 이게 무슨 수식으로 만들어진 것인지를 짐작도 못하겠습니다. 어떤 수식의 형태를 가정하고 fitting 할 수야 있지만 그 계수들이 말도안되는 숫자라면 제대로 된 공식일 가능성이 적겠지요.

하지만 정확도가 높은 데이터이다 보니 측정한 데이터 전체를 +-15 이내의 오차로 모두 설명할 수 있는 상당히 정확한 근사식을 만들 수 있었고, 이를 바탕으로 한 보정된 공상한 등에 대한 논의를 해 보도록 하겠습니다.

 

2.2 대미지 공식의 개요

 

게임 내에서 플레이어가 몹에게 입히는 대미지는 중력 역전과 같은 특이 케이스를 제외하면 모두 다음과 같은 식으로 계산되어 화면에 표기됩니다.
(주: 몹이 플레이어에게 입히는 대미지는 다른 공식이 적용되며 해당 공식은 http://vsnobs.com/topic/307-character-formulas-and-multipliers-most-current-na-knowledge/#def 에서 확인 가능합니다.)
 

표기대미지=내림[(유효공격력*밸런스변수+추가피해*6.25)*배율1*(1+마스터리%/100+스킬%/100)*특정스킬효과*대미지각돌효과*크리티컬배율]


밸런스변수        별도로 설명할 예정. (추가피해 부분에는 곱해지지 않음에 유의)
특정스킬효과     예: 블클레어 x1.2, 퓨리강화 x1.3, 등
대미지각돌효과  예: 대미지 10% 각돌의 경우 x1.1 등
크리티컬배율     =내림[(100+크리티컬히트%+검시크증댐%+30*min(힘or지능,2000)/2000)]/100
                          (크리 배율의 경우 미리 내린 뒤에 100으로 나눠야 함에 유의)

이 글에서 다루고 있는 '대미지 공식' 이란 위 공식에 등장하는 유효공격력플레이어 공격력몹 방어력에 대해 어떤 함수 형태를 가지는지를 의미합니다. 이 유효공격력이 정확히 어떤 함수인지는 현재 알려져 있지 않고 다만 이 함수의 최대값이 공상한에서 10900 이라는 사실만 정확하게 알고있습니다.

달리 말하면 개편된 대미지 공식을 알든 모르든 공상한에서는 위 식은 100% 정확한 식입니다.


한편 2013 년에 대미지 공식 개편이 되기 전에는 유효공격력은 다음과 같은 간단한 형태를 가졌었습니다.
표기의 편의상 플레이어 공격력=A, 몹 방어력=D 로 부르겠습니다.

유효공격력=min(A-D,10000)+900
(A ≥ D 에서만 성립)

즉 공상한 전까지 대미지가 선형으로 증가하다가, A ≥ D+10000 에서는 더이상 대미지 값이 증가하지 않게 되는 형태입니다. (정말 먼 옛날에는 이 값이 10000 대신 6000 이었습니다.) 반면 플레이어 공격력이 몹 방어력 미만일 때 이 식이 정확히 어떤 형태였는지는 추측만 있었지 정확히 알려져 있지 않았던 것으로 알고 있습니다. 그러나 개편 후 이 구간의 형태는 신규 공식에서 완전히 그 형태를 찾을 수 없는 것으로 보이며 따라서 이 글에서는 크게 문제가 되지 않습니다.

 

2.3 밸런스변수

 

밸런스변수는 아주 정확하게 다음과 같은 값만 가질 수 있습니다.
(근거 http://vsnobs.com/topic/391-raw-damage-calculator/#entry1559)
 

밸런스변수=[(2*밸런스)와 200 사이의 정수]/200

 

이 수식의 형태에 대한 해석을 하자면, 밸런스% 부터 100% 까지 1% 씩 증가하는 면을 가진 주사위 두 개를 던졌을 때 두 주사위의 면의 평균값이 가질 수 있는 값의 범위가 위 밸런스변수의 수식입니다. 이 가설 대로면 밸런스변수의 확률분포는 균일분포 두 개의 convolution인 삼각형 분포가 나와야 합니다.

아래 그래프는 댓글에서 인벤닉 밴쉬스티스 님이 제보해 주신 실험 자료로 밸런스 90에서 대미지 값을 1만 회 취득했을 때의 밸런스변수 값의 실험적 분포입니다. 보시다시피 밸런스변수의 분포는 정규분포와 같은 종 모양의 분포가 아니고 삼각형 분포인 것으로 보이며, 따라서 위의 가설과 같이 균일분포 두 개의 평균값으로 밸련스변수가 내부적으로 생성되고 있을 가능성이 높다고 할 수 있겠습니다.


추가 그림. 실험으로 얻은 밸런스변수의 분포. x축: 밸런스변수 (%), y축: 출현 회수. 제공자: 인벤닉 밴쉬스티스 님.

한편 1.2 및 2.2 에서 밸런스변수가 추가피해 부분에 영향을 미치지 않는다고 언급을 했었는데, 이에 대한 구체적인 실험을 통한 입증 및 설명은 http://vsnobs.com/topic/391-raw-damage-calculator/#entry1559 에서 찾을 수 있습니다 (영어 주의). 이는 비단 이 글에 언급된 실험 한 번으로 입증된 사실이 아니라 제가 취득한 수천개의 대미지 데이터 모두 밸런스변수가 추가피해 부분에 곱해지지 않은 형태로만 설명이 가능하기 때문에 확실한 정보로 볼 수 있습니다.

2.6 과 2.7 에서 구체적으로 논의하겠지만 여기서 언급한 밸런스변수 의 정확한 형태는 대미지 측정을 통한 실험을 수행하는데 있어 매우 중요한 정보입니다.

 

2.4 유효공격력 함수 (= 대미지 공식)

 

이제 이 글의 주제인 대미지 공식, 즉 유효공격력 함수의 형태에 대해 본격적으로 논의하겠습니다.

다음은 게임 내에서 몇 가지 몹 방어력 조건에서 플레이어 공격력을 변화시켜가면서 유효공격력을 측정한 결과입니다. 참고로 유효공격력을 '측정' 하기 위한 실험 방법은 통계에 의존하지 않습니다. 대신 밸런스변수가 어떻게 동작하는지에 대한 정확한 이해를 바탕으로 측정된 대미지 값들을 봤을 때 어떤 유효공격력 값이 이론적으로 가능한지 리스트를 뽑아보고, 측정한 대미지 값들의 종류가 충분히 늘어나면 그 리스트에 있는 가능한 유효공격력 값들의 범위가 ±0.1 이하가 되게 됩니다. 즉, 대미지 값들의 '종류' 만 충분히 측정하면 통계를 이용하지 않고도 오차 0.1 이내로 유효공격력을 추출할 수 있습니다.


그림 3. 몹 방어력에 따른 유효공격력 측정 결과의 예. x축: 플레이어 공격력, y축: 유효공격력.

그래프를 보시면 하나의 방어력에 대해서 추출된 유효공격력들이 각각 다른 모양의 곡선을 그리고 있는 것을 볼 수 있습니다. 여기서 구체적으로 그 중간 과정을 보이지는 않겠습니다만, 이 데이터와 제가 2 년 전에 측정했던 데이터를 종합했을 때 확실히 내릴 수 있는 결론이 두 가지 있습니다.

우선 첫번째로 A ≥ 2*D 일 때 유효공격력은 기존 유효공격력=min(A-D,10000)+900 으로 돌아간다는 점입니다. 약간 우스운 점은 A < 2*D 에서 A ≥ 2*D 로 넘어갈 때 연속이긴 하지만 유효공격력 곡선의 기울기가 변합니다... 좀 어이없는 일이지만 실제로 측정해보면 그렇게 나오니 뭐 어쩔 수 없지요.

그리고 두 번째는 데이터들을 이리저리 만지다보면 기존 공식과 대비한 신 공식에 의한 보정은 몬스터 방어력에 비례하는 만큼 더해진다는 것을 알 수 있게 됩니다. 이를 좀 더 알기 쉽게 보이기 위해 위 그래프의 x축과 y축을 약간 다르게 수정해보겠습니다.


그림 4. x축 및 y축을 scale한 그래프. c=900, x축: (공-방+900)/(방+900), y축: 유효공격력/(방+900).

여기서 900 이라는 숫자가 갑자기 등장한 이유는 기존 공식의 y 절편이 900 이기 때문입니다. 보시다시피 다양한 방어력들에서 측정한 결과들이 하나의 예쁜 곡선으로 모두 겹쳐지는 것을 볼 수 있습니다. 이는 제가 2년 전에 측정했던 데이터에서도 동일했는데 (그림 5),


그림 5. 2013 년에 측정했던 데이터. x축 및 y축은 그림 4와 동일.

이전의 측정에서는 이번 측정에서만큼 정확도를 중시하지 않았고 A < D (몹 방어보다 공격력이 낮음) 인 경우에 대한 측정을 전혀 하지 않았기 때문에 데이터를 같이 섞어서 분석하지는 않았습니다. 다만 두 그래프를 비교해 보시면 6k 에서 14k 에 이르는 다양한 방어력에서 곡선들이 깔끔하게 일치하는 것을 보실 수 있습니다. 즉, x=(A-D+900)/(D+900) & y=E/(D+900) (또는 이와 유사한 형태) 은 데브캣이 실제로 사용했을 가능성이 높은 변환으로 보입니다.

이제 이렇게 깔끔하게 통일된 곡선을 얻었으니 이 곡선의 수식을 알면 대미지 공식을 기술할 수 있게 됩니다. 그런데 문제는 이 곡선이 언뜻 보기에는 매우 간단해 보이지만 자세히 데이터를 파고들어가보면 매우 오묘한 형태라서... 전 영역에서 정확히 데이터를 예측하면서도 깔끔한 숫자로 떨어지는 계수를 갖는 수식을 도저히 찾을 수가 없었습니다.

그래서 오랫동안 고민하던 차 (2 년 전의 측정에서도 한참 고민했고 이번에도 오랫동안 고민했는데 정말 모르겠습니다.) 그냥 변수를 많이 때려넣고 fitting 해서 실제 내부에서 쓰이는 수식일 리는 없지만 측정한 데이터에 대해 최대한 정확한interpolation이나 할 수 있도록 하기로 했습니다. 그 결과 E = 유효공격력 은 아래와 같은 수식으로 나타낼 수 있습니다. 이 식은 그냥 아무렇게나 만든건 아니고 위에서 언급한 주요 성질 중 하나인 A = 2*D 에서 기존 공식으로 깔끔하게 회귀한다는 조건을 기본적으로 내포하도록 하고, 되도록이면 실제 게임플레이에 더 연관이 많은 높은 공격력 구간쪽 (즉, 공상한 근처) 의 fitting 정확도가 높아지도록 만든 식입니다.
 

유효공격력의 근사식


E: 유효공격력, A: 플레이어 공격력, D: 몹 방어력, c=900


x=(A-D+c)/(D+c)
(참고로, A=2*D 에서 x=1)

● -0.3 <= x < 1 일 때


E = min{ (D + c) * ( f( sqrt( 1 - x ) )^2 + x ), 10900 }

f(ξ)= ∑ a_n * ξ^n

(n 은 1 부터 6 까지)
a_1 = 0.58012277
a_2 = -0.75477080
a_3 = -0.50902587
a_4 = 2.51785703
a_5 = -1.81621180
a_6 = 0.41384712

x >= 1 일 때


E = min( A - D + c, 10900 )


여기서 첫번째 구간이 -0.3 까지만으로 되어있는 것은 실험의 데이터를 여기까지만 얻었고 그 데이터에 대해서만 fitting을 했기 때문입니다. 그 밑의 구간은 현재로서는 미지의 구간입니다.

이 괴상한 함수 f(ξ) 를 실험 데이터와 함께 그래프로 그려보면 다음과 같습니다. 변수를 6개나 넣었으니 당연하겠지만 실험 데이터를 매우 잘 따르는 함수를 얻을 수 있습니다.


그림 6. Fitting 함수 f(ξ) 와 실험 데이터.

이제 fitting을 마쳤으니 위의 유효공격력 E에 대한 최종 수식을 좀 더 알아보기 쉬운 x축 및 y축으로 실제 우리가 게임에서 흔히 접하게 되는 몹 방어력인 8k, 11k, 13k, 14k 에 대해 그려보면 다음과 같습니다.


그림 7. 유효공격력 근사식의 그래프. x축: 플레이어 공격력 - 몹 방어력, y축: 유효공격력.

네, 뭐 이렇게 생겼습니다.

여기서 한가지 확인할 수 있는 점은 요약에서도 설명했다시피 몹 방어가 10k 이상인 경우 공상한이 D+10000 보다 약간 앞당겨지게 됩니다. 구체적인 값은 위 그래프의 제일 윗부분을 줌인해서 들어가보면 알 수 있으며, [그림 2] 에 적은 예측된 공상한 값들이 이렇게 구한 값들입니다.


여담으로 여기서 구한 매우 지저분한 근사식 말고 조금 덜 정확하지만 그나마 그럴듯하게 생긴 식은 이전에 작성했던 아래 글에서 찾을 수 있습니다.
http://vsnobs.com/topic/284-anyone-seen-the-changes-to-the-damage-equation/page__st__40#entry1575


 

2.5 근사식의 오차

 

위에서 구한 근사식으로 얻은 유효공격력 값과 실험을 통해 얻은 값들 간의 오차를 실험의 유효공격력을 x 축으로 놓고 표시해보면 다음과 같습니다. 다양한 플레이어 공격력 및 몹 방어력으로 실험을 한 데이터들임에도 불구하고 ±10 이내
(좀 더 안전하게 잡자면 ±15 이내) 의 오차로 모두 예측하고 있음을 알 수 있습니다.


그림 8. 유효공격력의 근사식과 실험 데이터 간의 오차 분석.

여기서 유효공격력이 작은 쪽이 오차가 좀 더 크게 나오는 경향이 있는데 이건 제가 어느 정도 의도한 사항입니다. x=1 근처 (공상한에 가까운 쪽) 의 오차를 줄이기 위해 근사식에 sqrt(1-x) 같은 형태를 도입했는데, 그 결과로 위와 같은 오차의 분포를 얻게 됩니다.

 

2.6 보정된 공상한의 실험을 통한 검증

 

위 [그림 2] 에서 몹 방어 11k, 13k, 14k 에 대한 공상한 값을 각각 20855, 22721, 23646 으로 예측하였습니다. 여기서는 실제 실험으로 예측된 값 근처에 (근사식에는 오차가 있으므로) 공상한이 있는지 확인해 보겠습니다. 이를 위해 예측된 상한값보다 조금 작은 공격력 값과 조금 큰 공격력 값에서 유효공격력을 측정해보았으며 실험에는 E. Att. Calculator 라는 프로그램을 이용했습니다. (링크 http://vsnobs.com/topic/391-raw-damage-calculator/ 의 버전 1.2 추천)

이 프로그램은 밸런스, 추가피해, 유효공격력의 스캔 조밀도, 모션배율, 크리배율 을 입력하고 게임내에서 측정한 대미지 숫자들을 입력하면 이론적으로 그 대미지들을 얻을 수 있는 모든 유효공격력의 리스트를 계산해 내는 프로그램입니다. 이 리스트는 처음에 적은 개수의 대미지 숫자들을 입력했을 때는 매우 많은 값으로 이뤄져 있는데 대미지 숫자 개수가 늘어날수록 리스트 크기가 점점 줄어들어 아래 그림처럼 오차 ±0.1 이내의 유효공격력 추출이 가능합니다. 프로그램의 구체적인 작동 원리 및 사용법은 위 링크에 설명되어 있습니다 (영어 주의).


그림 9. 예측된 공상한의 실험을 통한 검증.

위 결과에서 각 방어력에 대해 예측된 공상한 값보다 조금 큰 (예측값 + 1~8) 공격력에서 모두 공상한이 관측된 것을 확인할 수 있습니다. 즉, 방어+10000 보다 꽤 작은 공격력 값에서 공상한이 실제로 관측됩니다. (참고로 제가 공격력 값을 좀 더 세밀하게 조정하지 못한 것은 20k 이상의 높은 공격력에서 1 단위로 세밀하게 공격력을 조정할만한 장비가 없기 때문입니다.) 그리고 예측값보다 조금 작은 공격력 (예측값 - 0~4) 에서 공상한 미만의 유효공격력이 관측되었는데, 공상한 근처에서 대미지 공식의 기울기는 거의 1 에 가깝기 때문에 공상한에 도달하기 직전의 공격력으로부터 실제 공상한을 추측할 수 있으며, 해당 추측값들은 위 요약의 [그림 1] 에 담았습니다. '추측' 이라고는 했으나 오차는 1 이하일 것입니다.

 

2.7 부록: 실험을 통해 배율을 구하고자할 때의 실험방법

 

이 절에서는 글의 주제와는 조금 벗어나서 유효공격력을 구하는 경우가 아니라 이미 유효공격력을 알고 있으나 (즉, 공상한) 배율을 모르는 경우에 배율을 구하는 방법을 잠시 논하고자 합니다.

이 경우에는 유효공격력을 10900 으로 고정하고 배율1 이나 특정스킬효과 같은 부분을 임의로 수정해보면서 이론적으로 생성가능한 대미지 숫자들의 목록과 측정한 대미지들이 모두 정확히 일치하는지 확인합니다. 이 때, 임의로 수정한 숫자는 데브캣의 입장에서 말이 될만한 숫자여야 합니다. 0.221837 이런 숫자를 배율1 로 지정하진 않겠죠.

이 때 배율 조정을 통해 측정한 모든 대미지들을 정확하게 일치시키는 것은 생각보다 상당히 어렵습니다. 배율에 0.0001 정도의 작은 오차가 있다고 해도 공상한의 10900 이 곱해지기 때문에 최종 계산 후 내림된 숫자들이 군데군데 1 씩 밀리게 되기 때문입니다. 경험상 스킬의 배율1 이 0.1 정도 이상만 되도 임의로 가정한 배율의 0.00001 정도의 오차도 실험으로 구별이 가능합니다.

아마 말로 설명하는 것보다는 이 글에 첨부된 데이터 엑셀 파일을 보는 것이 이해가 빠를 것입니다.
http://www.inven.co.kr/board/powerbbs.php?come_idx=2471&l=24477

 

2.8 부록: 실험 데이터


이 글에 사용된 실험 데이터는 아래 링크에서 받으실 수 있습니다.

https://dl.dropboxusercontent.com/u/24877420/Vindictus/DamageFormulaNew/DmgFormula_new.zip

 


 

3. 결론

 

정말 긴 글이 되어버렸는데, 사실 일반 유저에게 있어서 결론이라고 할만한 내용은 요약에 모두 적었습니다. 본론에는 혹시라도 저와 유사한 종류의 실험을 하고자 한다거나 대미지 공식의 구체적인 동작에 대해 알고 싶다면 조금 길지만 한번쯤 읽어볼 만한 내용이 담겨있습니다. 마지막으로, 언젠가 능력자가 나타나서 클라이언트 해부를 하든 뛰어난 수학적 직관으로 알아내든 실제 공식을 찾아내게 되면 저에게도 꼭 알려주시기 바랍니다 :)