포션 아이템을 올바르게 설계하기

종종 서로 다른 시스템에 근거할 기능을 겉모양을 보고 판단해 같은 시스템으로 묶으려는 시도가 일어날 때가 있습니다. 잘못됐지만 그럴 만한 이유는 있습니다.

포션 아이템을 올바르게 설계하기

네임드 개발자들이 멋진 자리에 나와 자신의 게임에 대해 설명하는 모습을 보면 게임의 모든 부분을 처음부터 계획적으로 개발한 것처럼 설명하곤 합니다. 현대에는 영화 산업에서 여러 영화 감독들이 영화를 스토리보드 상으로 처음부터 끝까지 완전히 계획한 다음 최소한의 기간을 통해 촬영해 완성한다고 합니다. 영화 산업은 게임 산업에 비해 워낙 오래 되어 그 동안의 경험이 축적되어 있고 또 산업과 함께 학술적인 연구 또한 이루어져 왔습니다. 그럼에도 세계적으로 널리 알려진 영화 상당수는 나중에 어떤 화면을 쓸 지 확정되지 않았기 때문에 같은 장면을 여러 각도에서 찍고 또 카메라가 부족하다면 같은 장면을 여러 번 연기하며 미래에 사용할 다양한 컷을 미리 준비하는데 시간을 많이 사용한다고도 알려져 있습니다. 어떤 국내 영화는 거의 계획 없이 촬영을 시작해 촬영팀과 액터들이 오랜 기간 촬영을 계속하게 만들어 결과물에 비해 너무 큰 제작비를 사용했을 뿐 아니라 그렇게 촬영한 장면들이 연결된 맥락을 가지고 있지도 않아 완전히 이상한 상태로 공개되기도 했습니다.

이번에는 뜬금없이 여느 MMO 게임에 도입할 아이템 시스템을 설계해 개발하는 상황을 상상해 봅시다. 네임드 개발자가 나와 설명한 것처럼 처음부터 게임 전체의 청사진을 가지고 시작하면 좋겠지만 이런 접근은 좋을 수도 있고 나쁠 수도 있으며 때로는 위험할 수도 있습니다. 게임 전체에 대한 완전한 청사진을 가지고 개발을 시작한다면 일단 주요 의사결정이 이미 끝나 있으므로 빨리 개발할 수 있습니다. 개발 중간 결과가 이미 끝나 있는 의사결정에 해당하는지 그렇지 않은지 판단하기도 쉬우며 개발 결과는 그저 청사진의 상태와 오차 범위 이내에서 동일한지를 판단하는 과정에 불과합니다. 한편 청사진을 제작하기 위한 의사결정 과정이 충분한 고민을 동반하지 않고 이루어졌다면 분명 계획에 따라 개발했지만 실제로 플레이 해 보면 예상한 것과는 완전히 다른 경험을 주는 결과를 만들어낼 수 있습니다. 분명 게임은 멀쩡하고 또 단단하게 만들어졌지만 막상 만져보면 이상할 정도로 밋밋하고 재미 없는 경우가 있는데 이런 이유일 가능성이 있습니다.

또한 개발을 진행하는 동안 시장 상황이 바뀔 수 있습니다. 처음부터 시장에 경쟁 상대가 거의 없는 장르나 프랜차이즈라면 이를 신경 쓰지 않을 수 있을 것도 같습니다. 그런데 국내의 여러 회사에서 만드는 비슷한 MMO 게임이라면, 또 비슷한 수집 게임이라면 시장에 나타나는 다른 게임을 살펴보고 요구사항을 변경해야 할 수 있습니다. 우리들이 게임의 핵심 요소로 개발한 기능이 오늘 출시된 다른 게임에 들어가 있다면 우리들이 이 기능에 아무리 심혈을 기울여도 자칫 우리는 오늘 출시된 게임의 아류작이 될 수 있습니다. 이 때 계획을 바꿔 핵심 기능을 재검토 하거나 오늘 출시된 게임의 기능 수준을 파악해 그보다 나은 상태로 출시해 위기를 모면할 수 있습니다. 만약 이런 시장의 변화에 신경 쓰지 않는다면 완전히 엉뚱한 게임을 완전히 엉뚱한 시점에 출시해 놀라울 정도로 아무런 반응도 이끌어내지 못한 채 조용히 사라질 수도 있습니다. 그래서 네임드 개발자님들이 발표하시는 말을 함부로 모두 믿는 것은 썩 좋은 생각이 아닙니다.

다시 아이템 시스템 만드는 상황으로 돌아가면 아직 이 게임이 어떤 모양일지 잘 모르겠지만 일단 멀티플레이 온라인 게임이라는 사실은 확실합니다. 아직 어떤 IP를 가져올지도 잘 모르지만 회사 상황으로 미루어 몇 가지 후보가 있습니다. 아직 무슨 게임일지, 미래에 어떤 모양일지 예상하기는 거의 불가능하지만 아이템 시스템을 준비할 수는 있습니다. 게임이 어떤 모양이 되더라도 이 장르 게임에는 아주 높은 확률로 캐릭터마다 인벤토리가 있고 또 인벤토리에 아이템을 넣을 수 있으며 아이템을 몬스터가 드랍할 겁니다. 또 아이템은 그 자체로는 기능이 없지만 상점에 가져다 팔거나 미래에 제작에 사용할 수 있는 종류도 있을 테고 포션처럼 이를 사용하면 어떤 효과를 일으킨 다음 소모되는 것들도 있을 겁니다. 아직 무게 개념이 필요한지는 확실하지 않습니다. 게임이 얼마나 플레이에 캐주얼한 접근을 하느냐에 따라 무게 개념이 필요할 수도 있고 전혀 필요하지 않을 수 있습니다. 또 게임 플레이 양상에 따라 플레이 도중 인벤토리를 열어 포션을 사용해야 할 수도 있고 포션을 별도 슬롯에 장착해 인벤토리를 열지 않고 즉시 사용하게 될 수도 있어 이런 기능은 아직 확정할 수 없습니다.

아직 상상할 수 있는 것이 많지는 않지만 거의 확실한 것도 있습니다. 멀티플레이 온라인 게임을 만들고 있으니 아이템 데이터는 아이템 데이터 전체에서 한 아이템을 구분할 수 있는 구분자가 필요하고 여기에 아이템 이름, 설명, 인벤토리에 표시될 아이콘, 만약 몬스터로부터 드랍 될 때 3차원 세계의 바닥에 떨어진다면 이 때 사용할 메시 정보가 필요합니다. 아직 이 아이템이 플레이어 캐릭터에 장착될지 포션처럼 사용될지는 확실하지 않으니 지금 당장은 구분자, 이름, 설명, 아이콘, 드랍 메시 정보만 있으면 될 것 같습니다. 다만 근미래에 아이템 종류를 구분하기는 할 것 같으니 엔지니어들의 취향에 따라 타입 또는 카테고리 같은 문구를 사용해 아이템 종류를 구분할 수 있게 해 놓은 다음 우선 ‘재료’ 같은 분류를 사용해 획득 가능하지만 아무 기능도 없는 아이템을 만들 수 있도록 준비할 수 있습니다. 여기에 인벤토리 인터페이스에서 같은 아이템이 겹쳐지거나 겹쳐지지 않을 수 있으니 이를 설정하는 옵션으로 ‘겹쳐질 갯수’를 설정할 수 있게 하고 이를 1로 설정하면 겹쳐지지 않는 아이템, 1을 초과하는 숫자를 넣으면 겹쳐지는 아이템으로 설정하면 여느 MMO 게임의 아이템 시스템과 별로 다르지 않을 겁니다.

이 정도 데이터에 기반해 만들어진 아이템은 인벤토리로 획득할 수 있고 게임에 따라 바닥에 버릴 수 있거나 없을 수 있습니다. 또 개발을 진행해 나감에 따라 몬스터가 죽을 때 아이템을 드랍하고 또 채집물에 상호작용 해서 아이템을 얻을 수 있을 겁니다. 이 단계 까지도 아직 플레이어가 무기나 방어구를 아이템 형태로 획득해 장착하고 이들로부터 추가 스테이터스를 얻으며 이들 각각에 경험치를 부여해 성장하게 할 지 말 지를 고민하고 있어 무기와 방어구는 인벤토리에 나타나지 않고 있어 이 결정은 더 미뤄도 상관 없습니다. 다만 몬스터가 아이템을 드랍하기 시작하자 이를 상점에 가져다 판매하기 위해서는 아이템마다 상점에서 매입할 가격 설정이 필요해 앞서 만들었던 아이템 데이터에 아이템마다 가격을 설정할 수 있도록 필드를 추가합니다. 게임에서는 기본 인게임 화폐단위로 ‘골드’를 사용하기 때문에 상점의 아이템 매입가에는 숫자만 기입하면 알아서 이를 골드라고 해석할 작정이지만 만약 게임에 다양한 재화가 나올 예정이라면 상점의 매입가 데이터를 만들 때 ‘재화 종류’와 ‘재화 양’을 별도로 구분하도록 하는 편이 나을 수 있습니다.

이제 시간이 흘러 크래프팅을 개발하기로 합니다. 크래프팅은 말이 거창하지만 근본적으로 상점과 별로 다르지 않은 시스템이라는 사실만 기억하면 됩니다. 상점은 아이템을 지불하면 아이템마다 기입된 매입가에 해당하는 재화를 돌려줍니다. 크래프팅은 똑같은 시스템에서 재료 아이템을 지불하면 이에 해당하는 결과 아이템을 돌려줄 뿐입니다. 다만 이 과정에서 크래프팅은 여러 가지 재료와 재료 각각의 다양한 수량을 요구하고 제작하는데 시간 같은 다른 자원을 함께 요구하며 결과 역시 단일 아이템일 수도 있고 여러 아이템일 수도 있으며 결과가 나올 확률이 추가될 수도 있습니다. 그리고 상점과 달리 크래프팅은 재료를 지불하고 결과를 돌려 받을 때 상점과는 다른 인터페이스, 상점과는 다른 연출이 필요할 수 있습니다. 하지만 근본적으로 상점, 크래프팅, 가챠가 서로 거의 같은 시스템이라는 점을 기억하세요.

크래프팅을 개발하려 할 때 종종 이미 작성된 아이템 데이터에 이 아이템을 제작하는데 필요한 다른 아이템의 종류와 수량을 기입하려는 시도가 있어 왔습니다. 아직 게임의 다양한 부분이 개발되지 않았고 게임 전체에서 멀쩡하게 데이터 기반으로 동작하는 기능이라고는 아이템 데이터와 이 아이템 데이터에 기반해 동작하는 보상 데이터 뿐인 상황에서 제료를 넣으면 확률에 따라 결과를 돌려주는 시스템을 만들기 위해 기존 아이템 데이터를 확장하려는 생각을 해 보는 건 잘못 되긴 했지만 이상하지는 않습니다. 아이템 데이터를 확장해 이 아이템을 생성하기 위한 재료를 나열하는 칼럼을 추가한다면 크래프팅 화면을 보여줄 때 아이템 데이터 전체를 확인해 이들 중 재료 데이터가 있는 항목을 추려 재료와 결과를 보여줘야 할 수 있습니다. 물론 런타임에 이 작업을 수행하지 않고 미리 아이템 데이터를 읽어 크래프팅 화면을 표시할 때 사용할 데이터를 빌드 타임에 만들어 놓을 수도 있겠지만 미래에 크래프팅이 확장될 것을 고려하면 이제 별도의 크래프팅 데이터가 필요한 순간이 왔다고 판단하는 것이 좋습니다. 크래프팅 데이터를 별도로 작성할 경우 결과, 재료, 각 재료의 수량, 확률 정도로 시작해 미래의 의사결정에 따라 각 상황에 표시할 연출, 서로 다른 NPC가 담당하는 서로 다른 제작 목록으로 분리 가능하도록 각 데이터를 묶어 둘 방법 정도를 함께 고려하면 테스트 가능한 수준의 설계는 빨리 만들 수 있습니다.

자. 이번에는 전투 개발이 어느 정도 진행되어 처음으로 포션 아이템을 만들어야 하는 상황이 찾아옵니다. 아직 포션을 어디서 어떻게 입수할지는 잘 모르겠지만 일단 게임에 포션이 존재해야 하고 이에 기반해 주요 전투 메커닉을 직접 테스트 하며 손 볼 작정입니다. 앞서 최소한의 크래프팅 기능을 설계하려고 할 때 대충 생각해 보면 멀쩡하게 동작하는 아이템 데이터가 있으니 아이템마다 이 아이템이 제작 가능한 아이템이라면 재료와 수량을 아이템 데이터에 칼럼을 추가하는 방식으로 넣을 수도 있다고 했었고 이 방법은 가능하지만 좋은 생각은 아니라고도 했습니다. 이와 비슷한 사고방식으로 생각하면 포션은 아이템이고 포션은 사용하면 어떤 효과를 일으키는데 그 효과는 사용한 플레이어의 체력을 미리 정해진 수치 만큼 증가 시킵니다. 아이템을 사용하면 체력이 증가합니다. 그러니까 아이템 데이터에 칼럼을 추가하고 이 아이템을 사용할 때 증가 시킬 체력 수치를 넣을 수 있게 하면 아이템 데이터 기반으로 동작하는 포션을 빨리 만들 수 있을 것 같습니다. 엔지니어와 약속한 칼럼 이름에 이 아이템이 사용될 때 사용한 자기 자신의 체력을 올려줄 수치를 넣어 주기만 하면 아무 아이템이나 순식간에 포션으로 만들 수 있으니 꽤 괜찮을 것 같습니다.

물론 여기까지 따라오신 분들 상당수는 이게 얼마나 이상한 이야기인지 이미 아실 거라고 생각합니다. 제가 이런 사례를 소개하는 이유는 실제로 이렇게 작성한 기획서를 받아본 적이 있었기 때문입니다. 일단 문서 자체만 보면 포션이라는 아이템이 있고 이 아이템은 사용할 때 어떤 행동을 하며 아직 게임 상에 다른 행동을 하는 다른 아이템이 존재하지 않는 상황이니 아이템 데이터를 확장하는 것도 생각할 수 있는 방법이기는 합니다. 하지만 누군가의 체력을 올려 주는 사건은 온라인 멀티플레이 게임 상에서 아이템과는 완전히 동떨어진 다른 차원의 기능입니다. 포션은 아이템에 가깝기 보다는 공격 스킬에 더 가까운 기능입니다. 공격 스킬은 이를 사용하는 사람과 이에 의해 피격 당하는 대상이 있고 피격 가능한 대상의 조건, 피격이 일어날 때 사용하는 사람에게 일어날 일과 피격 당하는 대상에게 일어날 일이 구분 되어 있으며 피격 대상을 타겟팅할 방법을 포함하고 있습니다. 이러한 공격 스킬은 근본적으로 MMO 게임에서 여러 주체 사이에 상호작용 하는 가장 기본적인 방법을 정의함으로써 미래에 게임 상의 거의 모든 상호작용을 서버 기반으로 동기화하는 가장 흔한 방법으로 사용됩니다.

이제 공격 스킬 관점에서 포션의 기능을 다시 생각해 봅시다. 포션은 아이템 모양이고 아이템을 사용하면 그 효과가 나타납니다. 여기까지는 아이템 기능처럼 보입니다. 하지만 포션을 사용할 때 나타나는 효과에 집중하면 포션은 아이템이라고 보기 어렵습니다. 먼저 포션은 사용할 때 누구에게 사용할지 결정해야 합니다. 물론 포션은 가장 간단한 형태로 나 자신의 인벤토리에서 사용하면 나 자신을 대상으로 사용되어 사용 대상을 명시적으로, 혹은 인터페이스를 통해 직접 지정하지 않아도 되지만 명시적으로 ‘자기 자신’을 대상으로 사용한다는 사실을 생각해 두면 좋습니다. 자기 자신을 대상으로 포션을 사용하면 자기 자신의 체력을 지정된 값만큼 올려주고 아이템은 사라지며 게임에 따라 쿨타임이 있을 수 있고 쿨타임은 포션 자체의 쿨타임, 포션류 아이템 또는 사용 가능한 모든 아이템에 걸친 글로벌 쿨타임이 있을 수 있는데 이건 일단 생략하고 연타 가능한 포션이라고 가정해 보겠습니다. 포션은 내가 나 자신을 대상으로 사용하며 포션이 사용된 대상, 여기서는 자기 자신의 체력이 증가하는 결과, 그리고 아이템 수량이 감소하는 결과로 이어집니다. 포션은 아이템이기는 하지만 아이템으로써 포션은 사용을 시작하는 방법, 그리고 수량이 감소되는 기능이 있을 뿐 나머지 모든 기능은 아이템 영역 밖에서 일어납니다.

그래서 MMO 게임을 처음부터 만들 때 아이템 기능이 있는 상황에서 포션 아이템을 만들어야 한다면 어지간하면 전투, 즉 게임 내 대상들 사이에 가장 기본적인 상호작용 방법, 즉 스킬이 시스템화 된 다음으로 미루는 것이 좋습니다. 그렇지 않으면 지금 이 순간에만 사용할 수 있는 곧 버릴 데이터를 만들게 되는데 이를 개발에 참여한 모두가 납득하고 진행한다면 몰라도 누구라도 납득 및 동의하지 않거나 이 기능이 일시적인 것이라는 사실을 잊으면 미래에 정리되지 않은 이상한 데이터를 마주하게 될 겁니다. 스킬 시스템이 있다면 높은 확률로 스킬 사용 주체와 스킬이 사용되는 대상, 스킬 사용 주체 및 대상에게 일어날 효과, 스킬 사용 대상을 설정하는 방법인 타겟팅 기능 등이 시스템화 되어 있을 가능성이 높은데 이 구성에 맞춰 포션의 동작을 기술하면 게임 서비스를 중단할 때까지 사용 가능한 포션을 쉽게 정의할 수 있습니다. 아이템은 단지 포션 기능의 진입점일 뿐이며 내부는 전혀 아이템이 아닙니다.

포션 아이템은 진입점만 아이템 모양이고 실제 동작은 아이템과 아무 상관이 없다는 사실을 알고 있고 또 이를 설명할 수도 있지만 별다른 교육 없이 일을 시작해 ‘포션 아이템을 만들라’는 명령을 받으면 명령 자체에 언급된 대로 포션을 아이템으로 해석해 이상한 설계를 제안할 수 있습니다. 실제로 이런 일이 문서 수준에서 일어난 적이 있고 이는 게임 플레이에 익숙하더라도 게임의 여러 구조를 생각해보지 않았고 또 이에 대한 적당한 교육을 받지 않았다면 누구라도 할 수 있는 실수라고 생각합니다. 핵심은 포션이나 아이템, 스킬 뿐 아니라 온라인 멀티플레이 게임 상에 등장하는 여러 주체들 사이의 상호작용은 기본적으로 ‘전투 시스템’으로 대표되는 상호작용을 정의하는 시스템으로부터 시작되며 포션과 같이 자기 자신에게 영향을 주는 동작 조차 자기 자신을 대상으로 삼는 전투 시스템으로 기술할 수 있다는 사실, 그리고 전투 시스템이 근본적으로 주체 간의 상호작용을 기술하는 방법이라는 점을 생각하면 포션을 올바른 방법으로 설계할 수 있을 겁니다.