클리어 랭크 계산 사례

클리어 랭크 계산 사례

MMO 게임에 인스턴스 던전이 있고 던전을 클리어 하며 낸 퍼포먼스에 따라 랭크를 부여해야 하는 상황을 생각해 봅시다. 아직 높은 랭크를 기록한 고객에게 어떤 보상을 줄 지는 잘 모르겠지만 여느 액션 게임에서 스테이지를 마칠 때 스테이지에서 낸 퍼포먼스에 따라 S, A, B, C, D 등으로 이루어진 랭크를 부여하며 결과 화면에 이 랭크가 경쾌하게 나타나는 순간을 생각해 보면 전통적으로 이런 인터페이스를 잘 사용하지 않던 MMO 게임의 인스턴스에 이런 화면과 이를 지탱하는 개념을 도입하려고 하는지 이해할 수 없는 것은 아닙니다.

전통적인 MMO 게임에서 인스턴스 던전은 처음부터 정해진 보상을 알고 시작하는 경우가 많습니다. 인스턴스 던전은 차갑게 이야기하면 소모성 아이템과 시간을 넣으면 보상을 돌려주는 현대의 키오스크와 비슷합니다. 다만 던전 내부 플레이에는 어느 정도의 성장 수준과 게임에 따라서는 피지컬을 요구하기도 하는데 시간이 흘러 다양한 고객들이 게임을 플레이 하기 때문에 이런 게임 상에 직접 표시되지 않는 항목을 요구하기는 조금 까다로워집니다. 고객은 이미 투입할 자원과 이를 통해 획득할 보상을 정확히 알고 있고 이미 보상의 사용처와 이 사용처를 연결하는 큰 성장 계획을 이미 가지고 인스턴스 던전을 플레이 하기 때문에 굳이 플레이 퍼포먼스에 따라 더 높은 보상을 주도록 만들어 이미 계획대로 움직이고 있는 고객에게 ‘추가 보상을 획득하지 못하는 손해’를 입힐 필요가 별로 없습니다.

여기서 잠깐 퍼포먼스에 따른 추가 보상이 플레이어에게 손해를 입힐 수 있다는 개념을 설명하고 넘어가겠습니다. 액션 장르에서 스테이지를 더 빨리 클리어 하거나 더 많은 몬스터를 잡거나 안 잡아도 되는 몬스터를 잡는 등의 행동을 통해 높은 랭크를 받아 추가 보상을 받는 것은 고객이 이 스테이지에 투입한 자원에 대한 보상이 아닙니다. 이 스테이지는 처음부터 고객에게 부여할 보상을 정해 놓고 있는데 고객은 여기서 액션 장르 문법에 따라 게임 상에는 드러나지 않는 퍼포먼스를 보임으로써 고객 스스로의 성장을 과시했고 게임은 이 고객 스스로의 성장에 대한 보상을 게임 상에 보이는 형태로 부여하는 것입니다. 때문에 그런 퍼포먼스를 보이기 어려운 피지컬의 소유자라 하더라도 어쨌든 적당한 랭크와 정해진 보상을 받을 수 있으니 그리 나쁘지 않습니다.

하지만 MMO 장르에서 비슷한 보상 체계를 만들면 추가 보상을 받지 못한 고객은 손해를 본다고 생각하게 되는데 이유는 이 장르가 액션과는 달리 게임에 나타나는 숫자에 따라 성장 수준을 평가하고 서로의 경쟁 결과를 도출한다고 알려져 있기 때문입니다. 액션 장르에서 게임에 나타나지 않는 고객의 피지컬은 장르에 의해 납득할 수 있지만 MMO 장르에서 게임에 나타나지 않는 고객의 피지컬에 의한 추가 보상은 공정하지 않게 받아들여져 이를 받지 못하면 손해를 본다고 느끼게 됩니다. 인스턴스 던전 클리어 보상 체계를 설계할 때 이런 감정의 차이를 잘 생각하면 고객을 기쁘게 하고 또 동시에 기분 나쁘지 않게도 할 수 있습니다.

자. 주제로 돌아와 스테이지를 클리어 할 때 랭크를 부여해야 하고 랭크 부여 규칙을 만들어야 하는 상황이었습니다. 어떤 사람이 더 잘 플레이 했고 또 어떤 사람이 그보다는 덜 잘했을지 어떻게 판단해야 할까요.

가장 쉬운 생각은 그 스테이지에서 클리어 시점까지 모든 몬스터들에게 가해진 대미지 총량에 플레이어 각각이 얼마나 기여 했는지에 따라 랭크를 매기면 될 것 같았습니다. 간단한 방법이지만 한 가지 문제가 있었는데 공개 시점까지 스테이지가 완성되지 않을 가능성이 높았습니다. 스테이지는 계속해서 몬스터 배치나 등장 시점, 몬스터 각각의 강함이나 전투 패턴이 조금씩 달라지고 있어 함부로 대미지 총량의 기준값을 정했다가는 이후 변경을 반영하지 못해 이상한 랭크를 매기게 될 수도 있습니다.

고민하다가 오랫동안 사용하지는 않을 상황이니 랭크가 스테이지의 변경에 대응하도록 매 판마다 클리어 시점까지 몬스터 전체에게 가해진 대미지 전체를 기준으로 각 플레이어의 기여도를 산출해 표준 기여도에 따라 랭크를 매기도록 해봤습니다. 설명이 좀 복잡한데 단순히 스테이지 한 판을 클리어 하는 상황에서 여러 플레이어가 각자 몬스터를 공격해 기여할텐데 스테이지 전체의 대미지를 기준 플레이어 수로 나눠 나온 숫자 정도의 대미지를 준 플레이어는 그래도 이 스테이지에서 한 사람 몫은 했다고 판단해 그에 해당하는 랭크를 부여했습니다. 매 판마다 새로운 기준값을 계산해야 하는 점이 좀 걸렸고 이전에 경험한 다른 프로젝트 같으면 매 판마다 기준값을 새로 계산해야 한다고 말하면 엔지니어들의 반대에 쉽게 부딪쳤을 것 같지만 이번에는 용케 우리들이 처한 상황에 공감해 이런 방식을 어렵지 않게 선택할 수 있었습니다. 이런 랭크 부여 방식으로 비공개 서비스를 진행했고 적당한 수준으로 랭크가 부여되었습니다.

그런데 이에 이어 이번에는 스테이지를 보다 빨리 클리어 했는지 여부 역시 랭크를 산정하는데 사용해야 하도록 상황이 바뀌었습니다. 사실 시간에 따라 더 높은 랭크를 주는 거야 복잡할 것이 없지만 시간은 매 판마다 절대적이어야 하기 때문에 - 시간이 상대적이라는 과학적 사실과는 다른 관점의 표현임을 알고 있음 - 매 판마다 상대평가를 통해 부여되는 지금의 대미지 기반 랭크 산정 방식에는 문제가 있었습니다. 다행히 이번에는 스테이지가 완성 되어 이 스테이지를 클리어 하는데 기여할 표준 대미지와 표준 시간을 매번 새로 구할 필요 없이 그 동안에 쌓은 로그를 통해 구할 수 있을 상황이었습니다.

그 동안 일어난 주요 플레이마다 각 플레이어가 기록한 대미지를 살펴봤는데 다행히 기간에 따라 유의미한 차이는 없어 보였습니다. 처음에는 플레이를 반복함에 따라 우리들 스스로, 그리고 이 빌드를 플레이 한 고객들 역시 점점 실력이 좋아져 미래로 갈수록 더 높은 대미지를 기록할 수도 있을 거라고 예상했으나 그렇지는 않았습니다. 기준에서 많이 벗어난 사례를 제거하고 나자 이 기록에 기반해 이전에는 매 판마다 다시 계산했던 한 판에 중간 정도 기여해야 하는 표준 대미지를 매번 계산하지 않고 그냥 정해 놓을 수 있을 것 같아 보였습니다. 또한 시간에 따른 변화도 거의 없어 그냥 이 모든 기록을 한방에 통계를 내서 대미지 별 랭크를 계산하면 될 것 같습니다.

로그에 기반해 히스토그램을 그려 보니 스테이지가 클리어 될 때 사람들이 주로 기록한 대미지 분포를 알 수 있었고 이를 기반으로 높은 랭크를 받을 수 있는 표준 대미지를 결정했습니다. 표준 대미지에서 단위 대미지씩 덜 기록할 때마다 한 단계 씩 낮은 랭크를 받게 되며 특정 대미지보다 낮은 대미지를 기록하면 모두 같은 가장 낮은 랭크를 받게 됩니다. 클리어 시간에도 비슷한 방식을 사용해 표준 클리어 시간을 정하고 같은 방법으로 단위 시간만큼 지체될 때마다 더 낮은 랭크를 받게 했습니다.

실은 스테이지를 완성한 다음 실제 숫자를 보고 랭크 표준을 정한 건 이번이 처음입니다. 이전에는 개발 과정에서 그런 숫자를 얻을 수도 없었고 스테이지 개발이 영원히 완료되지도 않았기 때문에 비슷한 작업을 실제 플레이를 통해 남긴 로그에 기반하는 대신 스테이지에 배치된 몬스터 수와 각 몬스터의 최대 체력을 가져와 스테이지를 클리어 하기 위해 이들 모두를 처치해야 한다고 가정하고 표준을 구했는데 항상 실제 플레이에 기반한 숫자를 사용할 수 있으면 좋겠다고 생각해 왔습니다. 특히 플레이 시간은 실제 플레이 테스트에 기반하지 않고 예측하기는 정말 쉽지 않아 스트레스를 꽤 받았었는데 이번에는 실제 플레이를 통해 남긴 로그에 기반해 계산해 내는 경험을 해볼 수 있어 좋았습니다.