본문 바로가기

메이플스토리 정보

메이플스토리 최신 DPM표 (2020-09-18 업데이트)

728x90

먼저 dpm표에 관한 설명부터 하겠습니다.

 

시뮬레이션 기반으로 DPM을 제작합니다.

 

게임 내 스킬 로직을 거의 비슷하게 다시 구현하고, 시뮬레이터가 정해진 규칙에 따라 스킬 하나하나를 입력해가며 dpm을 연산하는 방식입니다. 기존의 DPM 제작 방식이 1회 딜사이클을 기준으로 전체 결과를 한꺼번에 뽑아낸다면, 시뮬레이션 방식은 시간을 0초부터 시작해 1800초까지 동영상을 재생하듯이 동작한다는 차이가 있습니다.

 

다음과 같은 장단점이 있습니다.

 

장점

 

* 여러 스킬들의 동작이 더 정확하게 반영됩니다.

  * 예를 들어, 썬콜의 빙결 중첩은 라스피/썬브를 사용할 때는 순간적으로 2스택 이하까지도 내려갈 수 있습니다.

  * 불독은 언스테이블로 이럽션을 뽑으면 헤이즈가 초기화됩니다.

  * 히어로는 데스폴트 사용 직후 최종뎀이 순간적으로 크게 요동칩니다.

  * 아크는 게이지를 관리하는 방법이 천차만별이고, 고갈시 10초간 회복이 안됩니다.

  * 이 외에도 dpm에 영향을 줄 수 있는 요소는 매우 많고, 시뮬레이션을 통해 많은 부분을 자동으로 반영할 수 있습니다.

 

* 다양한 조건을 가정하고 dpm을 측정 가능합니다. 잘 만들어두기만 하면 응용력이 훨씬 높습니다.

  * 예를 들어, 120초에 한번씩 10초간 타격 가능, 10초에 한번씩 2초간 타격 가능이라는 조건을 넣고 시뮬레이션을 할 수 있습니다. dpm의 한계로 주로 거론되는 실전과의 괴리를 해결하는 방법이 될 수 있습니다.

  * 혹은, 무릉 층수별 체력 데이터와 층간 10초 쿨돌리기를 구현하면 캐릭터별 무릉 격차도 알아볼 수 있습니다. 오차는 꽤 있어도, 경향성을 알아보기엔 충분할 것입니다.

* 딜점유율, 딜 그래프, 버프 가동률 등 정보가 사이트를 통해 자동으로 제공됩니다.

  * 인식으로만 알려져있는 극딜/평딜캐가 어느 정도로 극딜에 치우치는 지 알 수 있습니다.

  * 스킬 적용에 오류가 있는것을 제작자가 아닌 사용자들도 파악해 제보할 수 있습니다.

  * 사이트 업데이트는 추가로 작업이 필요해 9월 내로 어려울 수 있습니다.

 

* 시뮬레이션 방식의 장점은 아니지만, 오픈소스입니다. 누구나 개선에 참가할 수 있고, 코드 변경 이력을 확인할 수 있으므로 썬콜게이트 같은 일이 다시 일어나기 힘듭니다.

 

단점

 

* 가동률 기반 dpm과 비슷한 정밀도를 얻는 데 들어가는 시간이 너무나도 오래 걸립니다.

 

 

카데나의 스킬간 관계를 표현하는 로직은 이렇게 시각화됩니다.

 

보기만 해도 아찔합니다.

 

하지만 작업을 하는 데 있어서 시간이 오래 걸리는 부분은 스킬 로직 구현만이 아닙니다.

 

작업에 있어서 시간을 잡아먹는 부분은 크게 세가지가 있습니다.

 

게임 내 설명이 불충분함

 

구현을 하다보면 게임 내 설명만으로는 도저히 알 수 없는 것이 많습니다.

 

예를 들어, 듀블 블토의 날아가는 태풍에는 히든 블레이드가 발동될까요?

 

나로의 마크는 왜 스프레드를 켤때만 미친듯이 터지는걸까요?

 

"일정 간격으로" 라고 쓰여있는 스킬들은 간격이 몇초일까요?

 

이런 문제들을 만나면 우선 검색을 해보고, 영상을 찾아보지만 제대로 된 결과는 거의 얻기 힘듭니다.

 

뭔가 있더라도 2년 넘은 자료라 지금도 그대로 적용되는 지도 모르고요.

 

그러면 직접 캐릭을 5차전직 해서 실험해보거나... 주변 사람들에게 부탁하거나... 시간이 엄청나게 걸립니다.

 

지금은 허수아비 살 포인트도 없어서 에르다 스펙트럼 들어가서 에르다 응집기 때리는거로 타수 측정하고 있습니다.

디버깅

 

 

시뮬레이션이 의도한대로 동작하지 않고 있을 수 있기 때문에 일일이 로그를 확인하며 작업합니다.

 

ms단위로 있는 공격 기록과 각각에 어떤 버프들이 묻어서 돌아가고 있는지... 시간이 엄청나게 들어갑니다.

 

모든 직업을 잘 아는게 아님

 

저도 어느정도는 안다고 생각하지만... 5차까지 포함된 모든 직업의 딜사이클, 딜점유율을 정확히 알 수 없습니다.

 

막 5차한 200 캐릭으로는 코강이 되어있지 않기 때문에 딜점유율을 파악할 수 없습니다.

 

결국 이것도 검색이나 인맥에 의존해야만 하는데... 검색하면 선동 자료가 너무 많고, 제가 친구가 없습니다.

 

그리고 갈수록 직업들이 복잡해지는 추세라 더더욱 힘들어지고 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

2020/09/18 기준 DPM표

 

 

 

 

 

 

우선 상위 6개 직업의 점유율을 뽑아두었습니다.

 

본인 직업이 이렇게 높을리 없다고 생각된다면 점유율을 보고 어떤 스킬에 문제가 있어보이는지 피드백 부탁드립니다.

 

피드백은 "아 이거 아무튼 아님" 보다는, 1회 딜사이클의 허수아비 전분 영상이 수정에 가장 큰 도움이 됩니다.

 

 

 

 

 

캔슬에 관한 기준은 다음과 같습니다.

 

선입력이 불가능한 캔슬 (cancelableTime 계열)의 경우, 선입력이 불가능하기 때문에 최대 속도로 캔슬하는 것은 불가능하다고 판단했습니다.

 

최소 캔슬 시간이 150ms 미만일 경우 딜레이 60ms가 추가됩니다.

최소 캔슬 시간이 300ms 미만일 경우 딜레이 30ms가 추가됩니다. 

 

이 기준이 적용되는 직업은 카데나, 블래스터, 아크, 패스파인더가 있습니다.

 

패스파인더는 블디 매크로 꾹 누르는 중에는 최대 속도로 발사되나, 트리플 임팩트 등으로 연계할때 30ms가 추가됩니다.

 

확률성 스킬은 다음과 같이 적용됩니다.

 

먼저, 파이널 어택같은 종류의 스킬이 있습니다.

 

이런 스킬들은 타수에 확률을 곱하는 것으로 적용했습니다. 어차피 파이널 어택은 단순한 추가타이기 때문에 총 타수만 실제 결과와 일치하면 된다고 판단했습니다. 단, 배틀메이지의 다크 제네시스 파이널 어택은 표식을 터트릴 수 있으므로, 확률을 누적하여 1이 넘을때마다 터지는 것으로 해두었습니다.

 

다음으로, 일정 확률로 버프가 중첩되는 경우가 있습니다.

 

와일드 헌터의 어나더 바이트를 예로 들겠습니다.

 

어나더 바이트는 재규어 스킬이 적중할 시 일정 확률로 스택이 갱신됩니다. 그렇기 때문에 운이 정말 없으면 스택 지속시간인 8초 내내 모든 확률이 실패해 스택이 초기화될 수 있습니다. 이를 계산하기 위해 먼저 시뮬레이션 상에 현재 시점부터 8초 전까지의 모든 재규어 공격 기록을 기록합니다.

 

예를 들어 시뮬레이션 도중 특정 시간에 [(평타, 15%), (클로우 컷, 30%), (소닉 붐, 40%)] 라는 기록이 남아있다고 가정합시다. 그러면 8초 안에 모든 공격이 갱신에 실패했을 확률은 (1-0.15)*(1-0.3)*(1-0.4) = 35.7%가 됩니다. 그렇다면 해당 시간에서의 어나더 바이트 중첩은 (0*0.357) + (3*0.643) = 1.929 스택으로 계산합니다. 1, 2스택을 고려하지 않아 약간의 오차가 있지만, 계산해본 결과 극히 미미한 차이라고 판단되었습니다.

 

엔젤릭버스터의 어피니티 IV (리차지시 50% 확률로 버프) 또한 같은 방식으로 적용되고 있습니다.

 

마지막으로, 언스테이블과 재사용이 있습니다.

 

언스테이블은 며칠을 투자해서 각종 실험을 해봤는데, 완전 랜덤으로 적용하면 돌릴때 마다 dpm이 심하게는 10% 이상씩 차이가 났습니다. 도타2 같은 게임에서 쓰는 PRD도 써보고 이것저것 다 해본 결과, 단순히 확률 누적 방식으로 하는것이 랜덤으로 적용했을때의 평균에 가깝게 나온다는 결론을 얻었습니다. (단, 인피가 꺼져있을때만 언스를 사용한다는 전제가 필요합니다)

 

확률 누적 방식이란, 30% 확률로 발동되는 스킬이 있으면 확률을 30%, 60%, 90% 누적시켜가며 100%가 넘어가면 발동하고, 다시 100%를 빼서 10%, 40%, ... 이렇게 돌아가는 것입니다. 이렇게 적용하면 인피 가동률이 랜덤으로 했을 때와 동일해집니다. 단, 이렇게 하면 다음 언스인피 발동 시점이 예측 가능해진다는 문제가 있습니다. 이 부분은 딜사이클 규칙에서 언스로 실행되는 인피를 고려하지 않는 것으로 처리합니다.

 

재사용도 일단 똑같이 확률 누적 방식으로 적용할 생각이나, 문제가 생기면 다른 방식을 찾아볼 계획입니다.

 

이래도 괜찮나? 싶은 생각이 들수 있는 방식이라, 더 좋은 방법이 있으면 알려주시길 부탁드립니다.

 

(비숍 언스때문에 생기는 벤전스 딜레이는 고려되어 있습니다.)

 

 

맥뎀은 다음과 같이 적용됩니다.

 

데미지 범위에 영향을 주는 요소는 다음 세가지가 있습니다.

 

1. 숙련도, 2. 크확, 3. 크뎀

 

여기서 크확은 무조건 100%를 맞춘다고 생각하면 숙련도, 크뎀 두개의 요소가 있습니다.

 

간단히 생각하면 (최소 스공 * 최소 크뎀) ~ (최대 스공 * 최대 크뎀) 범위로 맥뎀을 계산하면 될 것처럼 보입니다.

 

하지만 실제로는 조금 다릅니다. 두개의 확률이 곱해지기 때문에 평균 근처가 볼록한 확률분포를 보입니다.

 

대충 min(xy, M)을 x,y에 대해 적분하면 되긴 하는데... 자세한 설명은 글을 따로 쓰겠습니다.

 

간단히 말해, 데미지의 확률분포를 통해 맥뎀에 막힐 확률을 정확하게 계산하고 있습니다.

 

 

 

소스코드 https://github.com/oleneyl/maplestory_dpm_calc

 

 

살면서 가장 긴 하루였던거 같습니다.

 

올려두고 누워있겠습니다. 피드백은 폰으로 좀 보다가 잠들면 내일 보겠습니다.

 

 

 

패스파인더

 

블래스트, 레조넌스 최종뎀 10% 5개가 복리가 아니로 단리로 계산되는것 적용

 

참고 http://www.inven.co.kr/board/maple/2299/5246733, 레조넌스도 실험 완료했습니다.

 

솔직히 개억울한게 최종뎀 곱적용인게 국룰인데.........

 

그리고 코강 안한 패파는 1타겟 2타겟 딜차이 없는 오류가 있는거 같은데 이거때문에 크게 낚였습니다.

 

디스차지, 블래스트 타수/퍼뎀 거꾸로 쓴것 수정 (dpm 차이는 없음)

 

실험 도와주신 여러 패파 유저분들 정말 감사합니다.

 

메르세데스

 

엘고 잔상 확률이 지나치게 높게 반영된것 수정

엘고에 잔상에 터지는 파이널 어택이 최종뎀 감소되어 적용되던것 수정

유니콘 스파이크 코강당 3%인데 2%로 적용한것 수정

리프 토네이도 타수 누락된것 수정

엘고 콤보에 맆토 미사용으로 변경

엘비시 블레싱, 히어로즈 오쓰도 엘고에 맞춰 150초마다 사용

 

 

에반

 

다이브 오브 어스에 컴뱃 오더스 적용되지 않는것 반영 (클라상으로 적용이라 써져있으나 인게임 미반영)

 

 

키네시스

 

에버싸이킥을 무브로 캔슬할때 소모되는 2pp 누락된것 적용

 

 

바이퍼

 

하울링 피스트가 비완충 상태에서 게이지를 채워주던것 수정

서펜트 스크류 초당 소모량이 83으로 되어있던것 60으로 수정

 

 

 

 

 

 

조건별 dpm을 간략하게나마 넣어뒀습니다.

 

그냥 생각나는 직업 대충 집어넣은거라 빠진게 많습니다.

 

솔직히 말하면 안넣으면 같은 질문 20번씩 들어와서 그랬습니다.

 

그런데 이제 자기 직업도 이거 넣어달라고 200개가 들어오겠군요...

 

조건별은 이번에만 잠시 넣고 다음부턴 다시 뺼거니까 물어보지 말아주세요.

 

아직 조건별 dpm은 자동화가 안되어서 뽑는데 시간이 너무 오래 걸립니다.

728x90