경험치 곡선을 만들어낼 때 했던 실수
![경험치 곡선을 만들어낼 때 했던 실수](/content/images/size/w1200/2023/08/OIG-20.jpg)
유튜브에서 산수 이야기를 하는 영상에 3차함수 곡선이 지나가는 모습을 보니 문득 곡선과 관련된 과거의 에피소드 두 개가 생각났습니다. 둘 다 단순히 에피소드라고 하기에는 고객 뿐만 아니라 개발팀과 운영팀에도 작지 않은 상처를 남겼고 또 다른 에피소드는 팀 내 기대수준을 제대로 인식하지 못해 서로가 상대의 의도를 전혀 납득하지 못한 결과로 치달았습니다. 오늘은 게임을 만들며 여러 숫자로 구성된 곡선을 잘 못 만들어 문제를 일으킨 두 가지 에피소드를 소개하고 이로부터 배운 점에 대해 이야기 하겠습니다.
첫 번째는 가칭 ‘역 경험치 사건’. 첫 MMO 게임을 만들면서 어쩌다 보니 시스템 상당 부분과 밸런스를 담당하게 되었습니다. 지금 와서 생각하면 MMO 게임 전체 밸런스를 담당자 한 명에게, 그것도 일을 시작한 지 얼마 안 된 경험이 부족한 주니어에게 맡긴 것 자체가 올바른 선택이 아니었다고 생각하지만 또 한편으로는 그 때는 그럴 수 밖에 없는 상황이기도 했습니다.
당시에 주어진 요구사항은 게임을 시작하고 나서 주요 성장구간을 지나는 동안 PvE 컨텐츠를 통해 적당한 수준의 플레이 시간을 확보하는 것이었습니다. 사실 플레이 시간에만 집중한다면 게임 밸런스를 맞추는데 필요한 요소는 복잡하지 않습니다. 플레이어는 전투를 통해 몬스터를 잡고 몬스터는 경험치를 드랍합니다. 전투 시스템을 통해 클래스 별로 표준 전투 1회에 걸리는 시간이 대략 비슷해지도록 설계했기 때문에 레벨 1에서 표준 전투 1회에 걸리는 시간을 기준으로 레벨 별 다음 레벨을 올리는데 걸리게 만들 시간을 계산해 이 시간에 맞춰 몬스터가 드랍할 경험치를 설정합니다. 파티 플레이나 한 몬스터를 여러 플레이어가 함께 사냥하는 등 플레이 시간에 영향을 줄 요소를 고려해 순수하게 연속 사냥을 통한 성장 시간에 가중치를 설정해 만들어낸 예상치와 실제 플레이를 비교해 보고 예상치 도출 방법을 수정하거나 몬스터가 드랍하는 경험치를 수정하기를 반복하면 됩니다.
막상 베타를 시작해보니 플레이어들은 초중반 특정 레벨 구간에서 예상보다 훨씬 느리게 성장하고 있었는데 정확한 원인을 파악하기 쉽지 않았습니다. 나중에서야 이전에 '왜 현대 게임에 그렇게 많은 종류의 재화를 사용하나요?'에서 소개한 퍼시스턴트 레벨에 퀘스트 몬스터를 계속해서 스폰 시킨 문제가 원인이었음을 알게 됐지만 그 때는 이런 문제가 일어나고 있는지 조차 모르는 상황이었습니다. 플레이어들의 성장을 모니터링하던 운영에서는 다급히 문제를 해결하기를 원했고 정확한 원인을 모르는 이상 문제가 생기는 구간의 성장 속도를 조절해 해결하기로 합니다. 여기서 중대한 실수를 저질렀습니다.
국소적으로 성장 속도를 올리는 방법은 여러 가지가 있습니다. 레벨 상승이 느려지는 구간에서 주로 사냥할 몬스터들이 드랍하는 경험치를 올리거나 이 구간에서 플레이 할 퀘스트 보상 경험치를 올리는 식으로 목표인 레벨 구간 별 경험치 요구량을 그대로 둔 채 그 요구량에 더 빨리 도달하게 만드는 방법과, 레벨 상승이 느려지는 구간의 레벨 별 경험치 요구량 자체를 줄이는 방법이 있습니다.
전자는 훨씬 자연스럽지만 준비하는데 시간이 걸립니다. 이 구간 몬스터들의 경험치를 조절하면 별도의 안전장치가 없는 이상 이 구간에 사냥하는 플레이어 뿐만 아니라 다른 레벨 대 플레이어들도 이 몬스터들을 사냥하게 되고 의도한 것 보다 더 넓은 레벨 구간에 걸쳐 성장 속도를 올리게 됩니다. 현대에는 레벨 차이가 많이 나는 몬스터를 사냥하면 패널티를 주거나 한 자리에서 너무 오래 사냥하면 셩험치를 낮추는 등 다양한 안전장치가 있지만 그 때는 지금 생각해보면 너무 당연한 안전장치가 없는 상황이었습니다. 그래서 성장 속도를 올려야 하는 구간 몬스터들의 경험치를 조절하고 이를 테스트 해 생기는 문제에 대응하는 규칙을 통해 안전장치를 마련한 다음에야 문제를 해결할 수 있었는데 이를 감당할 만한 시간 여유가 없었습니다.
후자는 순식간에 할 수 있지만 게임 전체의 성장 규칙을 건드리게 됩니다. 특정 레벨 구간에서 성장을 빠르게 만들려면 그 구간의 요구 경험치량을 줄이면 됩니다. 지금에 와서 보면 황당한 방법이지만 그 때는 제한시간 안에 빨리 실행할 수 있는 방법이라고 생각했고 당장 성장 속도가 느리다고 불만을 제시하는 유저들 앞에 뭐가 됐든 대책을 제시하고 실행해야만 했습니다. 하지만 모든 레벨 성장 구간에 걸쳐 경험치 요구량은 서로 연속해서 배치되어 있기 때문에 한 구간의 경험치 요구량을 변경하면 그 다음에 나오는 모든 레벨의 레벨업 시점이 틀어집니다. 또한 이전 레벨에 비해 다음 레벨의 경험치 요구량이 항상 증가하는 형태가 직관적인데 이 문제 상황을 뚜렷하게 해결하기 위해서는 이전 구간에 비해 더 적은 경험치를 얻어 다음 레벨로 올라가게 만들어야 했습니다.
결국 아주 빠르게 특정 레벨 구간의 경험치 요구량을 그 이전 레벨의 경험치 요구량보다 더 낮춘 패치를 순식간에 준비합니다. 하지만 이 상황을 설명하기 위해 운영에서는 장황한 공지사항을 준비해야 했을 뿐 아니라 유저들은 이전 레벨보다 요구 경험치량이 더 낮아진 상태를 ‘역경험치 버그’라며 커뮤니티에 공유하기 시작했습니다. 또한 그 레벨 구간 이후의 모든 레벨 구간에서도 경험치 요구량과 그 레벨에 도달하기 위해 필요한 누적 경험치가 모두 변경되어 문제가 있던 구간보다 레벨이 높은 유저들의 불만을 들어야 했습니다.
올바른 접근 방법을 알고 있었음에도 문제를 빨리 해결해야 한다는 압력 때문에 올바르지 않은 방법을 사용한 사례라고 생각합니다. 먼저 특정 레벨 구간에서 성장 속도가 예상보다 더 빠르다면 먼저 예상과 실제에 차이가 생기는 원인을 찾아야 했습니다. 실제로 위에서 설명한 이 구간에서 성장 속도에 차이가 생긴 원인은 경험치 업데이트를 한 그 주 안에 발견되었는데 이 문제를 해결하자 소위 ‘역경험치 버그’만 남게 되었습니다.
또한 초반 구간의 성장 속도 문제는 그렇게 다급하게 해결해야만 하는 문제가 아니었다고 생각합니다. 커뮤니티에서 당장 아주 많은 사람들이 이야기하고 있다 하더라도 같은 문제를 인식하고 해결 방안을 도출했으면 이 상황을 공유하고 해결 방안을 실행하는데 시간이 필요함을 고객들에게 알리고 양해를 구했어야 했습니다. 현대에는 개발팀과 고객들이 좀 더 가까이 의사소통을 하며 이런 상황을 공유하고 있습니다. 하지만 그 때는 그런 생각을 하지 못했고 다급하게 상황을 때우는 업데이트를 해서 이 상황을 고객들에게 설명해야 했던 일선의 운영팀과 이 이상한 상황에도 불구하고 게임을 계속해야 했던 고객들에게 상처를 남겼습니다.
두 번째는 ‘경험치 곡선 사건’. 한번은 중국계 회사의 한국 사무소에서 개발하는 프로젝트에 참여했습니다. 이 프로젝트는 꽤 매콤해서 도저히 안되겠다 싶어 빠르게 탈주하고 이력에도 기록하지 않았지만 이곳에서는 짧은 시간 동안 여러 에피소드를 겪으며 정말 이 업계에 계속해서 남아 있어도 괜찮은지를 심각하게 고민한 계기가 되었습니다. 어쩌다 보니 이 곳에서도 전문 분야가 아닌 ‘전투 밸런싱’ 일을 하게 됐는데 맨 먼저 하게 된 일은 위에서 소개한 일과 비슷한 엔드컨텐츠에 도달하게 될 소위 ‘만렙’이 될 때 까지 레벨 별 경험치를 설정하는 일이었습니다.
이 프로젝트에서는 테크 리드가 프로젝트 전체에 상당한 영향을 끼치고 있어 다양한 요구사항을 제시하곤 했는데 이 때 받은 요구사항은 레벨 별 요구 경험치를 테이블 모양으로 만들지 말고 공식으로 만들어 달라는 것입니다. 테이블 모양은 구식이기도 하고 또 공식 모양으로 만드는데 비해 지저분하다고 느낄 수도 있지만 바로 위에서 소개한 구간 별 문제를 해결하거나 먼 미래에 테이블을 직접 수정해 성장 곡선을 유도하지 않고서도 의도와 상황에 맞는 경험치를 직접 입력할 수 있는 장점이 있습니다.
이 점을 설명했지만 납득시킬 수 없었고 초반에는 빠른 성장, 중반에는 완만한 성장, 그리고 다시 만렙에 가까워지는 후반에는 다시 조금 더 빠른 성장이 일어나도록 레벨 별 경험치 요구량을 조절해야 했는데 이 요구사항을 만족하기 위해 3차식을 만들어 곡선을 유도합니다. 이 곡선에 대한 이런 저런 요구사항을 수용하다 보니 식의 차 수가 늘어나 만렙 이후에는 이 공식을 사용하면 안 되는 상황이 되었습니다. 같은 공식을 만렙 이후로 연장하면 레벨 당 경험치 요구량은 오른쪽 위로 오르는 모양이 아닐 수 있었고 실제로도 만렙을 지나면 곡선은 아래로 곤두박질 치게 됩니다.
이 상황을 테크 리드에게 설명했지만 전혀 이해하지 못했고 그게 무슨 말이냐고, 또 말이 되는 소리를 하라며 제대로 된 공식을 내놓으라는 말을 반복했지만 제가 아는 범위에서는 요구사항을 만족하는 경험치 곡선이 만렙 이후에도 요구사항을 만족하게 할 방법이 없었습니다. 하지만 완강한 거부로 테이블 모양으로 만들 수도 없었기에 그냥 그 공식을 적용하라고 했고 이후 이런 저런 매콤한 에피소드를 겪은 다음 빠른 탈주를 선택했습니다. 이후 다른 프로젝트에 고용되어 일하다가 건강검진을 하러 병원에 갔다가 그 테크 리드와 다시 마주쳤고 서로 고개를 돌렸으며 얼마 지나지 않아 프로젝트가 중단되었다는 소식을 전해 들었습니다.
지금에 와서 생각해보면 왜 그 사람이 테이블 모양의 경험치 요구량 데이터를 거부했는지 이해하기 쉽지 않습니다. 별로 이해하기 위해 노력할 만한 주제가 아니라는 생각합니다. 한편으로는 그 사람이 생각한 공식으로 유도해낸 레벨 별 경험치 요구량은 아마도 1사분면에서 오른쪽 위로 올라가는 직선 모양이었을 것 같습니다. 그래서 요구사항을 만족하는 곡선이 만렙 이후에 완전히 다른 방향으로 꺾인다는 점을 납득할 수 없었지 않았을까 싶습니다. 앞에서 소개한 에피소드에서 이야기한 대로 성장 속도를 조절하기 위해서는 레벨 별 경험치 요구량을 조절하는 대신 그 구간의 플레이에 따른 경험치를 조절할 수도 있었고 이 사례에는 그 방법이 더 어울렸을 겁니다. 처음부터 경험치를 공식으로 유도해달라는 말을 들었을 때 그 사람이 납득할 수 있는 직전 모양을 만들어내고 나머지 요구사항은 다른 방법으로 해결했어야 했습니다.
결론. 전투를 통해 레벨을 올리는 오래된 성장 메커닉은 레벨 구간 별 경험치 요구량을 조절하는 방법과 그 구간의 경험들로부터 얻을 수 있는 경험치량을 조절하는 방법이 있고 퍼시스턴트 레벨에서 전투 경험이 모든 플레이어들에게 열려 있기 때문에 일어날 수 있는 여러 상황에 대응하는 안전장치를 해야 의도한 대로 동작합니다. 한편 현대에는 이런 어려움을 없애고 개발 기간을 단축하기 위해 퍼시스턴트 레벨에서의 전투 경험은 저위험 저효율로 만들고 의미 있는 성장을 위한 전투 경험은 모두 인스턴스 안으로 옮겨 근본적으로 문제를 해결하고 있습니다. 다만 이런 형태는 MMO 게임에 기대하는 규모가 큰 전투 경험을 줄입니다.