"왜 소서의 패캐프레임은 두 종류로 나뉘는 것일까?"
왜 체인 라이트닝과 라이트닝 그리고 인페르노는 다른 스킬들과 패캐 프레임이 다른 지 아십니까? 우리는 흔히 "체라는 117패캐! 다음은 194패캐!" 라고 말하고 다니면서도 그 패캐가 왜 나오는 지 알지도 못했습니다.
이 글에서는 패캐 프레임 유도공식을 구해보고 체인 라이트닝, 라이트닝, 인페르노 스킬은 왜 다른 스킬들과 패캐 브레이크포인트(Threshold, 역치값)이 다른지 알아보도록 하겠습니다.
먼저, 디아블로 설치 폴더 안에 있는 D2data.mpq 파일에서 Skills.txt 를 추출해야 합니다. 그 추출 방법은 '독 데미지의 계산 (상급)'에서 다루고 있으므로 참고하시면 됩니다.
Skills.txt를 열어 소서리스의 스킬들을 확인하면 체인 라이트닝, 라이트닝, 인페르노 스킬들에서 다른 점을 볼 수 있습니다.
나머지 스킬들은 SC animation(Spellcast animation)을 사용하는데, 위 세 개의 스킬들은 SQ animation(Sequence animation)을 사용한다는 것이죠. 현재의 패캐 계산기(또는 패캐프레임 표라고 알려진 것들)는 SC animation을 이용해 패캐프레임을 계산합니다만, 위 세 개의 스킬에 대해서도 적용이 되는 지 알아봅시다.
먼저, 위 세 스킬이 다른 스킬과 어떻게 패캐 프레임이 다른지를 알아야 합니다. Effective FastCast Function(유효 패캐 함수)를 구해야 합니다.
아이스 볼트(SC animation)와 체인 라이트닝(SQ animation)을 예로 들겠습니다.
↓아이스 볼트
↓체인 라이트닝
만약, 어셈블리를 이해하지 못하신다고 해도 EBX 레지스터가 Cof(animation)를 사용한다는 것을 아시면 이해하기 쉽습니다.
아이스 볼트를 사용할 때 Cof는 SOSCSTF(소서(SO)가 스펠캐스팅 동작(SpellCast)을 스태프(STF)를 들고 펼친다)
체인 라이트닝을 사용할 때 Cof는 SOGHSTF(소서(SO)가 반격 동작(Get Hit)을 스태프(STF)를 들고 펼친다)
이제 AB를 출력해보겠습니다. 어셈블리 코드 분석은 패캐 프레임 분석에 있어 아주 중요합니다.
ECX=(패캐*3*5*8)/(패캐+120)=(패캐*120)/(패캐+120)인 것을 알 수 있습니다.
이게 바로 Effective FastCast Formula(유효 패캐 공식)입니다. 패캐 프레임의 브레이크포인트를 이해하는 첫 번째 단계죠. 이 공식은 아이스 볼트와 체인 라이트닝 모두에 적용된다는 것을 알 수 있습니다.
예제로 쓰일 소서리스의 패캐는 26입니다. 패캐는 위 공식에 대입할 수 있습니다만, 16진수로 변환해야 합니다. 26은 16진수로 1A입니다. 이것을 유효 패캐 공식에 넣으면 유효 패캐는 21이 됩니다(소숫점 버림). 물론 16진수로 15입니다.
EAX는 유효 패캐 공식에 100을 더한 값이로군요. 그러면 EAX는 79(십진수 121)이 되겠습니다.
여기에서 EDX = EBX + C = Animation Rate 인 것을 알 수 있습니다. 여기까지는 아이스 볼트와 체인 라이트닝이 모두 같습니다(소서리스의 모든 스킬에 똑같이 적용).
하지만, 여기부터 달라집니다. 먼저 아이스 볼트입니다. EBX = CoF 파일 이름 = SOSCSTF 입니다.
다음은 체인 라이트닝입니다. EBX = COF 파일 이름 = SOGHSTF 입니다.
(이상하게도 체인 라이트닝은 패힛 동작을 이용하는 것 같습니다???)
동작은 다르더라도 Animation Speed는 100(십진수로 256)로 둘 다 같음을 알 수 있습니다. (둘째줄)
EDX = Animation Rate*(100+(패캐*120)/(패캐+120))/100
Animation Rate는 스킬 공통으로 256인 것을 아까 확인했었죠. 패캐에 26을 넣고 계산하면 309가 나옵니다.
EDX = Animation Speed로 135(십진수 309)이 나옵니다. 이 135는 아마 1과 35로 떼어서 보아야 할 것 같습니다. 1 프레임 + 35/256(작은 단위)으로 말이죠(물론 패캐에 따라 이 수치는 달라집니다).
아이스 볼트와 체인 라이트닝. 두 스킬의 Animation Speed도 같은 것을 볼 수 있었습니다.
즉, Animation Speed = Animation Rate*(100+(FastCast*120)/(FastCast+120))/100 인 것을 알 수 있죠.
공식 유도는 끝났으니 결과를 EAX에 넣고 분석해보도록 하겠습니다. 이제 아이스 볼트와 체인 라이트닝의 패캐 프레임이 왜 달라지는지를 알 수 있지요.
준비는 다 됐습니다 º▽º/
애니메이션의 길이는 (Base+1)*256 인 것을 확인할 수 있었구요
*Base = 캐릭터 고유값
애니메이션 스피드는 Animation Rate*(100+(FastCast*120)/(FastCast+120))/100 인것을 확인했습니다.
애니메이션 스피드가 애니메이션 길이보다 빠를 때, 1/256 단위는 버리게 되고, 동작이 끝나게 됩니다.
이걸 수학적으로 나타내면 다음과 같습니다.
(패캐 프레임) = [256*(Base+1)/(Animation Speed)*(100+EFC)/100)]-1
*EFC(유효 패캐) = (패캐*120)/(패캐+120)
위 공식에 모든 변수를 대입하면 패캐 프레임이 나옵니다. 예를 들어 105패캐부터 8프레임이죠.
애니메이션 스피드, 유효 패캐가 모두 같은데 왜 아이스 볼트와 체인 라이트닝의 패캐 프레임이 달라질까요? 남은 변수인 Base에 대해 생각해보아야 합니다.
라이트닝 스펠을 봅시다.
D2Common.10349를 불러냅니다.
라이트닝 스펠은 어쌔신 킥 동작 계산과 같군요.
이 내용을 아직 디버깅하진 못했지만, 말씀드릴 수 있는 건 Base+1 값이 19라는 것입니다.
(소서리스의 피격 기본값(Get Hit Base)에 2를 곱하고, 그 피격 사이의 프레임인 3을 더한 값이라는 것이죠. 제가 쓴 글인 '패힛, 패블럭 유도공식의 이해' 참조.)
그리고 다음이 이 라이트닝 스펠의 시퀀스입니다.
이제 다 끝났습니다. 앞서 말씀드렸듯 SC animation(SpellCast animation)을 사용하는 아이스 볼트가 15프레임일때, SQ animation(Sequence animation)을 사용하는 체인 라이트닝은 19프레임이라는 것이네요. SQ animation을 사용하는 스킬은 SC animation을 사용하는 스킬에 비해 4프레임이 뒤쳐지는군요.
물론, 패캐 브레이크포인트(역치값)는 각각 다릅니다. 흔히들 알고 있는 브레이크포인트를 계산하면 다음과 같이 나옵니다.
체인 라이트닝 / 라이트닝
(패캐 -> 프레임)
0 -> 18
7 -> 17
15 -> 16
23 -> 15
35 -> 14
52 -> 13
78 -> 12
117 -> 11
194 -> 10
위 스킬을 제외한 다른 스킬
0 -> 13
9 -> 12
20 -> 11
37 -> 10
63 -> 9
105 -> 8
200 -> 7
소서리스의 패캐를 다르게 해서 위와 같은 과정을 계속 거치는 노가다를 하면 패캐 프레임이 과연 달라지는가를 볼 수 있겠지만
제일 쉽고 편한건 게임상에서 직접 쏴보는 것이겠죠.
105패캐
125패캐(117패캐 이상)
*주석 : 인페르노는 하늘나라로?
-> 모 사이트에서 제공하는 패캐 프레임 표에서는 체라/라이트닝/인페르노의 패캐 프레임이 같다 하였습니다만, 잘 모르겠습니다 ^^