어떻게 만들어야 하나
레벨 시스템 자체가 스토리를 가져야 한다
이런저런 이유로 레벨 시스템을 만들게 되었다. 처음에는 어느 정도의 경험치를 쌓을 때 몇 레벨을 올려주어야 하고, 또 레벨이 갈수록 올리기 어렵게 하려면 어떻게 해야 하는지에 대해 너무 막막하게 느껴졌다. 사실 간단한 함수를 만들어 적용시켜도 상관없기는 하지만, 도대체 어떤 레벨 시스템이 좋은 시스템인지 기준을 잡을 수 없었다.
학창 시절에 해보았던 게임들을 되돌아보면 레벨이 갈수록 느리기 오른다는 것, 그리고 "1차 전직" 같은 이름들을 통해 레벨이 몇 개의 구간으로 이루어져 있다는 사실을 알 수 있었다. 문제는 그것을 어떻게 만드는가 이었다. 그냥 임의로 "레벨 30에는 1차 전직. 60은 2차 전직" 이렇게 설정할 수 있지만 도대체 왜 그런 결정을 내렸는지에 대한 기반 로직과 기획에 대해서는 감을 잡을 수 없었다.
그래서 구글에 레벨 시스템에 관해 찾아보았다. 흥미롭게도 "레벨"이라고 했을 때 캐릭터 레밸보다는 게임이 플레이되는 맵을 의미한다는 것을 알 수 있었다. 물론 내가 찾는 내용이 아니었기 때문에 이리저리 검색하며 둘러보았지만 캐릭터 레벨에 대해서는 내용을 쉽게 찾을 수 없었다. 그 와중에 다음과 같은 글을 읽게 되었다 (링크).
사실 레벨 시스템을 만들기 위해 어떤 함수를 사용하는지는 그렇게 중요한 것이 아니었다. 중요한 것은 무엇을 목표로 어떤 스토리를 제공하기 위해 레벨 시스템이 그렇게 만들어졌는가를 설명할 수 있어야 한다는 것이었다. 그래서 나는 코드를 짜기 전에 아래와 같은 사항들에 대해서 상세하게 조사하였다
1. 서비스의 구조
2. 서비스의 목표
3. 서비스 구조상의 한계
3. 레벨 시스템의 목표
4. 레벨 시스템이 내포하는 스토리
위의 사항들을 조사하면서 서비스의 구조와 목표를 고려할 때 내가 만들고자 하는 레벨 시스템의 논리적 구조 및 컴포넌트들이 대략적으로 무엇인지 알 수 있었다 (예를 들어 어떤 활동들이 경험치를 더 많이 주어야 하고 또 레벨 구간은 어떻게 나누어져야 논리적으로 말이 되는지). 그리고 그렇게 대략적인 틀을 알게 되자 어떤 함수를 사용하여 실질적 레벨 시스템(레벨업 하려면 경험치를 얼마나 쌓아야 하고, 최대 레벨을 몇이어야 하는지)을 만들지 자연적으로 알게 되었다.
물론 그렇게 레벨 시스템 초안을 만들고 나서 다양한 피드백을 거치며 시스템을 여러 차례 수정을 하게 되었다. 하지만 기초적인 틀을 바뀌지 않기에 내가 작성한 코드의 파라미터를 조금씩 변경시키면서 시뮬레이션을 쉽게 해 볼 수 있었다.
결론적으로, 레벨 시스템을 만들 때 중요한 것은 서비스와 레벨 시스템이 유저에게 제공하고자 하는 스토리였다