우리는 메소 익스플로젼이 [메소가 몬스터를 추적한다]고 생각한다.

물론 필자도 그런 생각을 하고 있었다. 이런 생각을 바꾸게 된 것은 블러디 익스플로젼의 등장 이후였다.

메익 1킬을 기준으로 잡을 때, 엘몹이 등장할 때를 제외한다면, 둘의 마릿 수는 사실 같다(생긴 게 쓰기 싫은 거지).
그런데 개발자이기도 한 필자는 이것에서 괴리감이 들었다.

게임에는 프레임이라는 것이 있다. 흔히 들어본 시간 당 프레임의 개수다. 이러한 프레임이라는 것이 존재하는 이유는 간단하다. 그림을 통해 알아보자


이라는 연산 과정을 위해 프레임이라는 개념이 있는 것이다. 
쉽게 말하자면, 영상을 나열하기만 하는 영화는 1초에 수 천장까지 출력하지만, 게임은 위의 연산 과정을 거치기 때문에 프레임이 훨씬 떨어지는 것이다. 이는 컴퓨터의 성능이 좋으면 연산들이 빨라져 프레임이 올라가는 이유이기도 하다
말이 너무 길었는데, 필자가 괴리감이 든 것은 메소가 몬스터를 따라간다면 이러한 프레임 간의 두 스킬 간의 프레임 당 연산 처리량이 훨씬 차이가 난다.
이유는 다음과 같다.

두 스킬의 추적 로직을 다음과 같이 최소화 하였다. (하… 이 그림이 이해에 방해가 되지 않겠지?)

메소 익스플로젼
1.메소의 전이 범위에 속하는 몬스터를 리스트(목록)에 등록한다.


이 경우 빨간 원 안의 애들을 등록한다.(등록되는 순서는 랜덤이다. 그냥 그 때 연산이 어떻게 되느냐에 따라 같은 환경에서도 등록 순서가 달라진다.)


리스트는 다음과 같다고 하자
2.리스트의 첫번째에 있는 몬스터로 날아간다.


화살표 친 몬스터에게 간다고 해보자
3.만약에 날아가는 중 다른 요인으로 해당 몬스터가 파괴된다면, 현재 위치에서 다시 한 번 1번의 과정을 거친다.


물론 리스트도 다음과 같이 바뀐다.

4.리스트가 비어졌다면(Null상태라고 부른다), 메소를 파괴한다.
5.진짜 신발 내 손이 저주스럽다.


블러디 익스플로젼
1.메소의 전이 범위에 속하는 몬스터를 리스트(목록)에 등록한다.
2.리스트에 있는 모든 몬스터를 우선순위에 따라 재배열한다.(실험결과, 높은 최대체력의 보스>낮은 최대체력의 보스>높은 최대체력의 일반 몬스터> 낮은 최대체력의 일반 몬스터로 분석된다.)


위의 메익 중 1번 리스트와 같은 경우에서
1번-최대 체력이 낮은 일반 몬스터
2번-최대 체력이 높은 보스
3번-최대 체력이 낮은 보스
4번-최대 체력이 높은 일반 몬스터
라면,
리스트가 이렇게 바뀔 수 있다.

3.리스트의 첫번째에 있는 몬스터로 날아간다.(이때는 2번 몬스터에게 간다.)
4.만약에 날아가는 중 몬스터가 파괴된다면, 현재 위치에서 다시 한 번 1번의 과정을 거친다.
5.리스트의 모든 몬스터가 파괴되어 타겟이 없어지면, 메소를 파괴한다.

그리고 가장 중요한 것은, 이런 과정이 최소한 1초에 수 십 번은 거쳐야 한다.(물론 원킬 기준)

문제는 블러디 익스플로젼에서 2번 단계이다. 
재 배열한다는 것은 우리에게 쉬워 보이지만, 컴퓨터 상에선 연산 량이 상당하다. 이건 우리가 아무렇게 주어진 1~100의 숫자를 차례대로 배열하는 것이 오래 걸리는 것과 비슷하다.

참고로 메이플스토리는 최대 144프레임을 지원한다. 즉 프레임의 개수는 제한적이고, 일반적으로 90프레임의 유저가 많다는 것을 고려하면 프레임이 떨어질수록 위의 추적 로직으로는 두 스킬 간의 성능 차이가 생겨야 한다.
이러한 문제를 해결하는 방법이 있다.

메소가 몬스터에게 가는 것이 아니면 된다.
몬스터가 메소를 가져오는 것이면 된다.
몬스터가 [메소를 가져오는 것이면 된다.]
그렇다. 각각의 몬스터는 사실 플레이어나 자석 펫처럼 [무언가를 줍는다] 라는 동작이 상속되어 있고, 그 범위가 설정되어 있으며, 메소 익스플로젼은 우리가 흔히 전이 범위라고 생각하던 영역 안의 메소를 몬스터들이 자석 펫처럼 먹고 있던 것이다.

그러면 한 가지 의문이 생긴다.
메소를 끌어오는 것이라면, 모든 메소를 먹어야 하는 것 아닌가?
아니면 자동 습득하는 펫도 픽파킷을 먹을 수 있어야 하는 것 아닌가?

물론 그것도 맞지만, 이를 해결하는 방법이 있다.

몬스터만 먹을 수 있는 메소 만을 설정하면 된다.
사실 픽파킷에서 나온 1원짜리 메소는 수동으로 라도 먹을 순 있다.
그렇지만, 이를 연구하는 과정에서 한 가지 재밌는 사실을 알아냈다.

플레이어는 픽파킷, 블러디 파킷을 제외하고는 
어떠한 방법으로도 10원 미만의 메소를 필드에 만들 수 없다. 
일반적인 버리기로는 10원이 최소이며, 플레이어와 몬스터 간의 레벨 차이로 인한 메소량 감소로도 10원 미만은 나오지 않는다. 보통 백원대보다 떨어지면 그 밑으로는 그냥 메소가 아예 안 나온다.
즉, 몬스터는 10원 미만의 메소에게는 소유권이 플레이어보다 높게 설정하면 그만이다.
Ps.여기서 그냥 억측 일수도 있지만, 길드스킬 '잔돈이 눈에 띄네'가 8 메소를 추가로 얻는 이유는 픽파킷 1메소+'잔돈이 눈에 띄네' 8메소 =9메소로 10메소를 넘지 않으므로 여전히 몬스터에게 소유권이 가도록 수치를 조정 한 것이라는 추측(억측 일 수도)을 하게 되었다.

메소의 소유권은 이만 말하도록 하고, 위의 자석펫 로직으로 가장 큰 장점이 있다. 맵 이동 로딩 중에 2번 과정을 미리 해버릴 수 있다. 만약에 이동하려는 맵에 몬스터A,B,C가 있고, A와B는 엘몹이 있다 가정해보자.
몬스터A-체력 1억
몬스터B-체력 1억 5000만
몬스터C-체력 8000만
엘몹A-체력 15억
엘몹B-체력 17억 5000만
자, 여기서
1순위-높은 최대 체력의 보스
2순위-낮은 최대 체력의 보스
3순위-높은 최대 체력의 일반 몬스터
4순위-낮은 최대 체력의 일반 몬스터
의 우선순위로 이를 배열하면 다음과 같다.(엘몹도 보스 몬스터 취급한다)
1순위-엘몹B
2순위-엘몹A
3순위-몬스터B
4순위-몬스터A
5순위-몬스터C
이 과정을 맵을 이동하는 그 잠시의 까만 화면에서 미리 한다면 몬스터의 우선순위 배열이 해결된다.
그러나 이건 몬스터가 메소를 먹는다는 로직일 때 그 효과가 극대화된다.

이유는 메소가 몬스터를 따라간다면 리스트의 몬스터들을 어쨌든 실시간으로 우선순위에 따라 재배열해야 한다. 다만 기준이 명백해 그게 좀 간단해진 것 뿐.

만약에 몬스터가 메소를 먹는다면?
1순위가 모두 죽을 때까지 1순위만 메소를 먹고,
1순위가 모두 죽으면 그 다음 2순위만 메소를 먹고,

그냥 이러면 된다. 현재 소유권을 가진 몬스터가 메소를 쓸어 먹으면 되는 것이다.
나머지는 먹는다는 소유권 자체를 없애면 되는 것이고.

그래도 한가지 풀리지 않는 것이 있다.

그렇다면 왜 메소가 이렇게 방정 맞게 움직일까?

답은 간단하다. 메소, 몬스터가 모두 랜덤하게 실시간으로 계속 움직이기에 추적 경로 또한 매우 다양해지기 때문이다. 익스플로젼 스킬을 자세히 보면, 처음엔 메소가 가는 방향이 무조건적으로타겟을 향하지 않고 다 제 각각이다. 경로의 다양성을 위해 일부러 처음 첫 움직임은 각 메소마다 랜덤하게 움직인다. 심지어 몬스터도 느리지만 실시간으로 움직인다. 이에 따라 메소의 움직임의 다양성이 확보 되는 것이다.

추가로 말하자면, 메소의 움직임은 곡선을 그려 놓고 이 선상을 따라가는 것이 아닌, 목표 방향으로 가속도를 부여하는 것이므로, 현재 진행 방향과 반대로 가속도가 받으면 메소 자체의 속도가 느려진다. 이가 우리가 메소의 속도가 제 각각으로 보이는 이유이다.



*참고로 익스플로젼 류 스킬은 첫 시작 좌표가 각각의 메소라고 생각하겠지만, 첫 시작 좌표는 무조건 플레이어이다.
첫 시작이 메소 기준이라면, 멀리에 있는 저 소공이 가장 많이 맞을 것이다.


그러나 메소는 플레이어 근처를 가장 많이 타격했다.
 
따라서 [메소 익스플로젼의 시작 기준은 플레이어이다.] 그냥 메소가 그렇게 나가게 보이는 것일 뿐.
Ps.
1.홈페이지에 글 쓴 건 처음이라 계속 ctrl+s눌러서 짜증 난다.
2.또한 이를 분석하기 위해 그린 마인드 맵이 있다. 파일 첨부로 넣어 두겠다. 자세한 로직이 궁금하다면 마인드맵을 보면 쉬울 것이다.
3.10원 미만의 메소 드랍 방법을 아시는 분이 있다면 알려주면 정말로 고맙겠다.


다음 글은 여기서 파생된 개념인 전이 스킬(체인 라이트닝, 루미너스의 그것(이름 모름) 등)들의 모든 로직을 파헤쳐 보려고 한다. 인기 글 가면 할지도?