2019년 4월 17일 수요일

King™의 비밀연구소: 부분유료화 RPG게임 밸런싱

원문: Breaking down the metagame design in a mobile RPG

Hero 게임 플레이 영상 


Pol Vilaseca is senior economy designer at King, and Pietro Guardascione is senior director of envelope design at King.

킹은 2016년 직접 개발한 RPG게임 "영웅"을 아시아권에 소프트 론칭 하였습니다. "영웅"의 플레이어는 전사, 마법사, 궁수 중 1명의 영웅을 선택하여 다양한 적들과 싸우며 스테이지를 진행합니다. "영웅"은 비록 정식 출시까지 이르지 못하였지만 저희는 모바일 RPG게임 개발 과정에서 겪은 기획적 어려움과 이를 통해 배운 소중한 경험을 공유하고자 합니다. 이 글에서는 영웅 시스템을 개발하면서 저희가 겪은 경험을 정리해 보았습니다.

"영웅"의 핵심 루프는 비교적 간단하였습니다.  플레이어는 퀘스트를 완료하여 골드를 습득하고 습득한 골드로 새로운 아이템을 구매합니다. 더 좋은 아이템을 착용하면 영웅의 전반적인 능력치가 증가하고, 더 어려운 퀘스트를 플레이할 수 있게됩니다.


영웅의 핵심 루프에서 플레이어의 경험은 3가지 시스템으로 결정된다고 볼 수 있습니다.

전투시스템, 전투내용과 결과에 영향을 끼치는 요소들로 구성되어 있습니다. 일반적인 RPG와 같이 공격력과 HP, 방어력 그리고 크리티컬 확률, 원소 대미지나 광역 대미지등의 캐릭터 스탯들이 있습니다.

전투는 전투 공식에 의한 영웅과 적들의 능력치간 상호 작용으로 결정됩니다. 예를 들어 영웅의 공격력과 몬스터의 체력이 있다면, 전투 공식이 몬스터가 사망할 때까지 필요한 공격 횟수를 결정합니다.

성장 시스템, 서로 다른 영웅과 몬스터가 플레이어의 진행 상태에 따라 성장하는 여러 규칙입니다. 영웅의 경우, 성장은 대개 해당 영웅이 착용한 장비를 통해 이루어집니다. 아이템의 레벨이 높이면 캐릭터의 능력치가 더 많이 증가합니다. 영웅의 레벨별 착용할 수 있는 장비의 레벨제한이 있기 때문에, 장비로 올릴 수 있는 능력치에는 한계가 있습니다.

상자 시스템, 장비의 습득은 무작위 상자 보상으로 이루어집니다. 게임에 있는 상자 종류별 차등 보상(수량, 빈도, 개별 아이템 확률)을 습득합니다. 게임에는 여러 종류의 상자가 존재하고, 이들 상자를 통해 각각 다른 희귀 아이템을 얻을 수 있습니다.

위의 3시스템은 긴밀하게 엮여있기 때문에 따로 떼어 보기보다는 함께 분석하는게 더 유용합니다.

한 예로, 성장 시스템은 장비 중심으로 이루어지고, 장비는 상자를 통해 습득합니다. 따라서 상자 시스템이 성장 시스템의 핵심 요소가 됩니다. 영웅의 성장 속도를 적절하게 조절하는데에는 이에 맞는 상자 규칙과 확률 설정이 핵심입니다. 

다른 한편으로, 성장 시스템으로 영웅과 몬스터 능력치가 올라가는 수준이 결정됩니다.  능력치가 전투의 결과를 결정하고, 따라서 전투 시스템은 성장 시스템에서 설계한 영웅의 성장 속도에 맞춰 적절한 난이도를 유지하도록 기획해야 합니다.

마지막으로 전투의 결과가 플레이어가 습득하는 상자의 종류를 결정하는데, 따라서 성장 시스템이 영향을 받습니다.

이러한 상호 관계 때문에 전체적인 게임 플레이 경험을 추적하기 위해서 각각의 시스템이 서로 끼치는 영향을 파악하고, 이를 토대로 시스템의 수정에 따른 게임 플레이 경험의 변화를 계산할 방법이 필요합니다. 우리는 이를 위해 수학 모델을 만들고, 이를 토대로 프로토 타이핑 툴과 시뮬레이션 프로그램을 개발했습니다.

본 글에서는 저희가 사용한 방법 중 일부를 소개하고자 합니다.

전투 밸런싱: 구조적 접근

모든 액션 RPG의 중심에는 전투 시스템이 있습니다. 성장 시스템이 있다면, 반드시 전투 시스템과 상호 호환되도록 세심하게 기획해야 합니다. 그렇지 않으면 어떤 스테이지에서는 전투의 난이도가 적절히 밸런싱 되어있고, 후반 스테이지에서는 성장 시스템 때문에 전투 밸런싱이 전혀 작동하지 않을 수 있습니다.

이해를 돕기 위해 영웅과 몬스터가 공격력과 HP 2개의 능력치만 가진 전투 시스템을 가정해 보겠습니다. 전투에서 승리하기 위해서는 영웅이 몬스터의 HP가 0이 될 때 까지 여러번 공격해야 합니다. 이 시스템에서 몬스터를 죽이기 위해 필요한 공격 횟수는 다음과 같습니다. 

N = H/ AH
N 은 공격 횟수 HE는 몬스터 HP, AH는 영웅의 공격력입니다. 몬스터의 HP가 높을수록 몬스터를 죽이기 위해 필요한 공격 횟수가 늘어나고, 영웅의 공격력이 강할수록 필요한 공격 횟수는 줄어듭니다.  

HP와 공격력이 전투의 결과를 결정짓는 인자이긴 하지만, 이 능력치는 유저에게는 사실상 "숨겨진" 능력치입니다. 왜냐하면 유저가 반복된 시행을 통해 인지하는 요소는 몬스터를 몇 대나 때려야 죽는지 (혹은 몇 대 맞아서 죽는지)이지, 공격력이나 HP 자체가 아닙니다.  따라서 우리는 전투의 감각은 죽이거나 죽는데 필요한 공격 횟수로 결정된다고 말할 수 있습니다.

한편, 영웅과 몬스터의 능력치는 주어진 성장 시스템을 따라 성장합니다. 이는 AH는 영웅의 레벨, HE는 몬스터의 레벨과 비례한다는 사실을 의미합니다. 따라서 x 레벨의 영웅이 y 레벨의 몬스터를 죽이는데 필요한 공격 횟수 영웅과 몬스터의 레벨을 인자로 계산되는 함수입니다. 

[수식1]    N(x, y) = HE(y) / AH(x).

게임 기획자가 책임져야 할 주요 요구 조건 중 하나는 성장 과정 전체에서 전투 경험을 일관되게 유지하는 것입니다. 이를 간단히 풀어 말하면, 레벨 5 영웅이 레벨 7 몬스터와 전투하는 경험은 레벨 65 영웅이 레벨 67 몬스터와 전투하는 경험과 대동소이해야 한다는 것입니다. 영웅과 몬스터 레벨 차이가 같다면, 전투 경험 또한 변화 없어야 합니다. 이 규칙은 다음과 같이 승리까지 필요한 공격 횟수가 레벨의 절댓값이 아니라, 레벨 차이에 의해 결정되는 다음의 수식으로 표현할 수 있습니다.

[수식2]    N(x, y) = N(x  y).
이 규칙을 지키기 위해서는 성장 시스템과 전투 시스템 양쪽 모두에 상당한 제한이 필요합니다. HP와 공격력만으로 결정되는 전투 시스템이기에, 레벨 차이와 공격 횟수의 관계가 고정적이기 위해서는 HP와 공격력 또한 등비수열로 성장해야 합니다. 따라서 영웅과 몬스터의 능력치 함수는 기하급수적이 되는데,

[수식3]    AH(x) = A * exp(a * x)
[수식4]    HE(y) = H * exp(a * y)
A는 영웅의 공격력, H는 몬스터 HP입니다. a는 레벨당 성장률입니다. 앞의 [수식2]의 N(x, y)[수식1]로 치환하고, AH와 HE를 다시 [수식3] [수식4]로 치환하면 아래와 같습니다. 

[수식5]    N(x – y) = H / A * exp(–a * x – y)),
[수식5]는 레벨의 절댓값이 아닌, 레벨 차이로 결과가 결정됩니다. 따라서 이 수식을 사용하면 몇 레벨이던 무관하게 레벨 차이별 전투 경험을 일정하게 유지할 수 있습니다.

실제 게임의 전투 시스템은 저항이나 치명 확률, 원소 공격력등의 능력치가 더 사용될 것입니다. 따라서 전투 경험이 레벨의 절댓값이 아니라 레벨 차이인 x – y로 결정되도록 밸런싱 하기 위해서는 본 글에서 제시한 예시보다는 좀더 복잡한 수식이 필요합니다.

이런 식으로 레벨 차이에 따라 적절히 변화하는 전투 계산 모델을 수립한 후에, 저희는 파이썬으로 주어진 몬스터를 죽이거나 몬스터에게 죽는데 필요한 타격 횟수를 계산하는 시뮬레이션을 만들었습니다. 이 시뮬레이션을 통해 영웅이나 몬스터의 스탯을 바꾸면 전투 결과에 어떻게 영향을 끼칠지 파악할 수 있었습니다. 각각의 능력치 세팅에 따라 레벨이 높거나 낮은 몬스터를 상대할 때 전투 경험이 어떻게 되는지 시각화하였고, 이를 이용해 모든 기획 의도를 충족하는 영웅과 몬스터의 능력치를 책정할 수 있었습니다. 또한 새로운 적이나 새로운 타입의 아이템을 추가하더라도, 시뮬레이션에 입력만하면 새로운 변수에 따른 전투 결과가 어떻게 될지 단번에 계산할 수 있었습니다. 
Figure 1: 전투 수식의 결과를 계산하는 시뮬레이션 스냅샷

상자 시스템 시물레이션

상자는 주어진 확률로 아이템을 지급하는 무작위 보상 시스템의 핵심 요소입니다. 대부분의 게임에서 플레이어의 성장은 플레이어가 습득하는 아이템을 결정됩니다. 이러한 게임에서는 아이템을 지급하는 상자가 성장의 핵심 요소가 됩니다. 따라서 상자 시스템의 규칙을 이해하고, 이를 조절하는 게 플레이어 성장을 적절히 조절하는 핵심입니다.

간단히 말하면 상자 시스템은 게임에서 습득 가능한 모든 아이템을 일정한 확률로 지급하는 추상 함수로 볼 수 있습니다. 상자 알고리즘을 바꾸면, 아이템을 지급하는 확률표가 바뀌는 셈입니다.

특정한 상자 알고리즘으로 다수의 상자를 열어본다면, 그 시점에서 플레이어의 인벤토리에 들어있는 아이템들의 분포를 알 수 있습니다. 상자 알고리즘을 바꾸면, 아이템의 습득 확률에 영향을 끼쳐 플레이어의 경험 또한 크게 바뀌게 됩니다.

저희는 게임의 상자 시스템을 설계하면서, 상자 열기 횟수별 플레이어의 인벤토리 변화를 계산하는 시뮬레이션을 만들었습니다. 상자 규칙과 확률을 바꾸고 시뮬레이션을 실행하면 매 단계별 플레이어의 인벤토리 상태를 저장하여 상자 열기 횟수별 인벤토리 상태 변화를 비교하였습니다.

이 시뮬레이션을 통해 우리는 인벤토리를 일정량 채우거나 아이템을 특정 단계까지 성장 시키기까지 필요한 상자 열기 횟수, 혹은 한개 이상의 레전더리 아이템을 만들기 위해 필요한 골드의 총량을 계산할 수 있었습니다.

상자 규칙의 변화가 플레이어의 성장에 어떤 영향을 끼치는지 명확한 측정이 가능했기에, 게임의 무작위 보상 규칙과 세부 수치를 어떻게 조정해야 할지 판단할 수 있었습니다. 우리는 규칙과 확률을 조금씩 수정하며, 시뮬레이션을 통해 플레이어가 우리가 적절하다고 판단한 경험을 할 수 있는 최적의 상자 규칙을 찾을 수 있었습니다.
Figure 2: 무작위 보상 시뮬레이션 스냅샷

메타게임 탐색하기

게임의 여러 시스템 간 역학 관계를 탐색하면서, 우리는 시스템들이 어떻게 상호작용하고 플레어의 성장에 어떤 영향을 끼치는지 전체 그림을 파악하고 싶어졌습니다. 이를 위해 실제 게임 없이도 전체 메타 게임과 세부 작동 구조를 파악할 수 있는 시뮬레이션을 개발하였습니다.

이 시뮬레이션은 두 부분으로 이루어져있습니다:
  1. 게임의 모든 규칙과 시스템, 세부 작동과 메타 정보를 담은 엔진. 상자 시스템, 장비 시스템, 캐릭터 능력치 성장 시스템, 모든 퀘스트에서 지급하는 경험치와 골드 등을 포함합니다. 
  2. 게임에서 플레이어가 하는 모든 행동을 실행할 수 있는 UI
시뮬레이션에서 특정 행동을 수행할 때마다(상자 열기, 장비 장착, 장비 강화) 플레이어의 상태가 엔진에 정의된 게임의 규칙대로 변화합니다. 플레이어의 모든 행동과 결과가 저장되어 성장 과정을 모두 추척할 수 있습니다. 

이를 통해 게임 기획자는 시뮬레이션으로 메타 게임을 플레이하면서 각각의 시스템이 서로 어떻게 상호작용하는지, 그리고 영웅의 성장에 어떤 영향을 끼치는지 파악할 수 있었습니다. 우리는 게임 규칙을 바꾸면 전체 성장 곡선이 어떻게 바뀔지 단 몇 초 만에 볼 수 있었을 뿐 아니라, 시뮬레이션에 새로운 메타 게임 시스템을 추가하더라도 기존에 만들어 둔 구성물과 상호작용하며 어떤 영향을 끼치는지도 파악할 수 있었습니다.

Figure 3: 영웅의 메타게임 시뮬레이션 스냅샷
우리가 만든 시뮬레이션은 기본적으로 수작업으로 메타 게임 요소를 바꿔가며 결과를 계산하는 방식이었지만, 완성된 후에는 서로 다른 행동 양식을 입력한 수백만개의 봇이 자동으로 플레이하며 서로 상호작용하도록 만들 수도 있었습니다. 이런식으로 시뮬레이션을 수백만번 실행하여 전체 유저가 특정 성장 단계까지 이르는데 걸리는 평균시간과 분포를 계산하였고, 시뮬레이션 결과를 분석하는 것만으로 시스템이 가진 취약점도 사전에 파악할 수 있었습니다.

맺음말

여러 시스템이 얽힌 메타 게임과 복잡한 게임 경제의 결과물은 예측하기 매우 어렵습니다. 이런 상황에서 게임 시스템을 만들려면 매우 까다로운 수학적 모델이 필요합니다.

우리는 경험을 통해 시뮬레이션이 게임의 구성 요소들이 서로 어떻게 상호 작용하며 영향을 주고받는지 파악하는 데에도 매우 유용하다는 사실을 깨달았습니다. 새로운 기능을 추가 했을 때 기존의 플레이어가 어떤 영향을 받는지도 시뮬레이션을 통해 미리 파악할 수 있습니다. 따라서 시뮬레이션으로 시스템 기획을 검증, 개선할 수 있으며 경우에 따라서는 시스템을 폐기하는 기준이 되었습니다. 또한 시뮬레이션에서 이런저런 룰을 추가하거나 바꿔보는 경험을 통해 게임 기획자가 각각의 게임 시스템과 규칙이 플레이어에게 끼치는 영향에 대한 감을 익힐 수 있는 좋은 학습 도구가 되었습니다.

우리는 파이썬을 매우 유용하게 사용했는데, 파이썬은 사용하기 쉽고, 가독성도 좋으며 수많은 통계 및 시각화 라이브러리가 있기 때문입니다. (역주: Julia가 더 좋습니다)

결론적으로, 저희는 적절한 수학 모델과 시뮬레이션의 사용이 게임 개발 중 세부적인 수치 밸런싱을 잡는 단계뿐 아니라, 상위 기획 아이디어를 검증하는 단계에서도 큰 도움이 될 것이라고 봅니다.

댓글 없음:

댓글 쓰기