보상 시스템 설계 (1)
이전에 세 번에 걸쳐('인터랙션 오브젝트 설계 (1)', ‘인터랙션 오브젝트 설계 (2)’, ‘인터랙션 오브젝트 설계 (3)’) 간단한 인터랙션 오브젝트 설계 과정을 설명했습니다. 다른 시스템 도움 없이 인터랙션 오브젝트를 설명하려다 보니 있다 치고 넘어간 부분들이 있습니다. 가령 알아서 클래스에 맞는 애니메이션을 재생하는 부분이나 보상을 설정하는 부분입니다. 보상은 초기 데이터는 단순하지만 시간이 흐름에 따라 확률이나 수량 조정에 따른 요구사항이 늘어나면서 꽤 복잡해질 수 있는데요, 이번에는 간단한 보상 시스템을 설계해 보겠습니다.
일단 어떤 상황에 보상 데이터를 참조하게 될 지 생각해 보며 시작하겠습니다. 몬스터를 처치하면 보상이 떨어집니다. 업적을 달성한 다음 ‘보상받기’ 버튼을 터치해도 보상을 받습니다. 종종 우편에도 보상이 첨부되어 있습니다. 또 대장장이에게 장비 분해를 요청하면 장비가 없어지는 대신 재활용 재료를 돌려주기도 하고요. 이렇게 게임 상에서 플레이어에게 모든 종류의 재화를 줄 때 보상 시스템을 통하게 됩니다. 보상은 고정된 보상이 주어지기도 하고 확률에 따라 보상의 종류와 수량이 달라지기도 합니다. 또 캐릭터 클래스나 레벨에 따라 달라지기도 하고요. 지난번처럼 이런 요구사항을 나열해 보겠습니다.
단일 아이템을 설정할 수 있다. (여기서는 재화, 장비, 일반아이템을 구분하지 않음.)
각 아이템의 수량을 범위로 설정할 수 있다.
아이템마다 확률을 설정할 수 있다.
캐릭터 클래스에 따라 서로 다른 보상을 설정할 수 있다.
캐릭터 레벨에 따라 서로 다른 보상을 설정할 수 있다.
확률, 클래스, 레벨에 따라 결정되는 보상 그룹 여러 개를 포함한다.
같은 그룹 안에서 일부 아이템만 드랍한다.
하나씩 간단히 살펴봅시다. 보상 시스템은 당연히 아이템을 설정할 수 있어야 합니다. 여기서는 보상 시스템에서 아이템만 나온다고 가정할 겁니다. 게임에 따라 재화와 아이템을 구분하기도 하고 또 장비와 아이템을 구분하기도 합니다. 재화와 장비는 현대로 오면서 일반 아이템에 남겨두기 불편하도록 점점 더 복잡해지고 있습니다. 가령 어떤 재화는 지정한 시간마다 충전되고 또 어떤 장비는 완전히 독자적인 성장 시스템을 포함하고 있습니다. 그래서 아이템은 이들의 껍데기 역할만 하고 실제 데이터는 아이템으로부터 분리해 설계하고 있습니다. 하지만 여기까지 생각하면 너무 복잡해지니까 게임 내 재화, 장비를 모두 아이템이라고 하겠습니다.
아이템을 드랍하려면 수량이 있어야 합니다. 아이템에 따라 개수가 증가할 때 가치가 선형으로 증가하지 않는 경우도 있는데 이는 밸런스 담당자가 미리 계산합니다. 개발팀에서 밸런스 담당자는 (가칭)'밸런스 엑셀 데이터'를 가지고 있습니다. 게임 전체에 집행할 보상을 의도에 맞춰 설계하고 예상한 가치에 따라 보상 수량, 확률, 보상의 종류를 보상 데이터로 만들어 집행하는 역할을 합니다. 수량은 단일 숫자일 수도 있고 숫자 두 개로 된 범위일 수 있습니다. 다음은 확률이 필요합니다. 확률은 여러 단계로 적용할 수 있는데 일단 시작이니까 같은 그룹 안에 속한 아이템 각각의 확률만 설정할 수 있게 해보겠습니다.
단일 보상
아이템 아이디1
확률 (십만분율로 입력)
수량
수량범위 낮은숫자
수량범위 높은숫자
아이템 아이디2
…
…
단일 보상은 보상을 드랍하기를 원하는 여러 장소로부터 연결됩니다. 가령 어떤 몬스터가 아이템을 드랍하게 하고 싶다면 몬스터 데이터 어딘가에 이 단일 보상 데이터를 연결합니다. 몬스터가 죽을 때 이 단일 보상 안에 들어있는 데이터에 따라 보상을 드랍하게 됩니다. 같은 ‘단일 보상’을 여러 곳에서 연결해 사용해도 상관 없지만 밸런스 담당자의 취향에 따라 이를 허용하지 않을 수도 있습니다. 라이브 상황에서 종종 한 가지 보상을 수정했는데 아무도 모르던 이 보상을 연결해서 사용하던 다른 메커닉에도 영향을 줄 수 있기 때문입니다. 이런 문제를 기계적으로 확인해 주면 가장 좋겠지만 이런 도움을 받기는 쉽지 않았던 기억입니다.
단일 보상 하위에는 이 보상으로부터 드랍 될 수 있는 아이템 여러 개를 입력할 수 있습니다. 게임에 따라 ‘공통 보상’ 정책을 사용하기도 합니다. 공통 보상은 비슷한 수준의 아무 몬스터를 잡아도 항상 비슷한 보상을 받도록 설정하는 것입니다. 인기 있는 특정 보상을 얻기 위해 특정 몬스터를 사냥하려는 사람들이 필드에서 일으킬 마찰을 줄이려는 목적이 있는데요, 이럴 때는 단일 보상 하위에 아주 많은 아이템들이 연결되어 있을 수도 있습니다.
아이템 하나하나 별로 드랍 확률과 수량을 설정합니다. 먼저 확률은 이 아이템을 보상에 포함할지 말지를 정하는데 사용합니다. 확률을 통과해 아이템을 보상에 포함하기로 결정하면 다음으로 수량을 결정합니다. 수량은 낮은 숫자와 높은 숫자를 포함한 범위 안에서 균일분포에 따라 결정합니다. 말이 어렵지만 기획서에 흔히 쓰는 표현은 ‘범위 안에서 랜덤’입니다. 이제 같은 규칙으로 단일 보상 하위에 아이템을 여러 개 입력하고 아이템 각각마다 확률과 수량범위를 정하면 보상 데이터가 완성됩니다.
시작할 때 이야기했던 요구사항 중 일부를 만족했지만 아직 많은 부분을 만족하지 않는 상태입니다. 아직 클래스에 맞는 아이템을 드랍하거나 의도적으로 클래스에 맞지 않는 아이템을 드랍할 수 없는 상태입니다. 또 단일 그룹 안에서 아이템을 하나만 선택해서 드랍할 수도 없는 상태인데 이는 특히 성장재료와 캐릭터카드를 하나씩 드랍해야 할 때 꼭 필요합니다. 다음에는 이런 요구사항들을 채워 마저 보상 시스템 구조를 만들어 보겠습니다.