실무 게임 기획서 해부 2편: 아바타 조합 테이블(ItemMixTable) 구조와 컬럼 설계법

 안녕하세요. '호랭이 물어갈 기획놈들' 입니다.

지난 1편에서는 아바타 조합 시스템을 기획한 '진짜 목적(BM)'과, 사업팀의 매운맛 요구를 방어하며 설정했던 '기본 룰'에 대해 털어보았습니다.

기획 회의가 끝나고 룰이 확정되었다면, 이제 기획자는 엑셀을 켜야 합니다. 

아무리 기획서에 예쁜 말로 룰을 적어놔도, 프로그래머가 서버에 코드를 입력할 수 있는 '데이터 테이블(Data Table)'로 번역하지 못하면 그 기획은 휴지 조각입니다.

오늘은 1편의 룰을 실제 게임에 적용하기 위해 2013년 당시 제가 작성했던 'ItemMixTable'(아바타 조합 테이블)의 컬럼 구조를 하나씩 해부해 보겠습니다.



기존 AvatarTable에 넣지 않고 테이블을 '분리'한 이유



저 같은 경우엔 우선 조합 테이블이 있는지 먼저 확인을 해봤습니다. 아무래도 다양한 아이템들을 합성 및 분해를 진행할 수 있는 범용적인 테이블이 있다면 거기에 아바타 조합 내용을 넣으려고 했는데 조합 자체가 아예 만들어지지 않아서 차라리 이번 기회에 아바타만 조합 하는게 아니라 아이템도 조합하고
장비도 조합하는 방향으로 정하고 관련 테이블을 제작했습니다.

이런 테이블 작업을 하다보면 대다수 신입 및 낮은 연차 기획자 분들의 가장 많이 나오는 실수 중 하나가 기존에 사용하던 테이블 'Item Table', 'Avatar Table' 안에 [조합 가능 여부], [조합 확률], [성공 시 결과물] 같은 컬럼을 주르륵 붙이는 일이 많이 발생하는데 지금처럼 단순히 아바타 조합 한 곳에서만 사용한다고 했을 시 저 위의 테이블에 넣는 것이 가장 편한 방법일 수 있지만 다양한 곳에 사용할 수 있게 만든다고 하면 꼭 조합할 아이템 타입 값을 나눠 여러 장비, 아이템, 의상 등을 조합하도록 만드는 방향으로 설계를 하시면 메인 테이블은 가볍과 유지하면서 확률이나 조합식등을 수정하고 싶을때만 해당 테이블을 조작해서 안전하게 밸런스 패치를 할 수 있는 모듈화가 되니 이 부분은 꼭 여러번 생각하고 작업하실 수 있습니다.


ItemMixTable 컬럼 집중 해부




그렇다면 실제 라이브 서버에 올라갔던 조합 테이블은 어떻게 생겼을까요? 프로그래머와 협의하여 확정했던 핵심 컬럼(열) 구조를 뜯어보겠습니다.

  • ItemTable.csv 

테이블 이름

컬럼 이름

데이터

데이터 타입

ItemTable.csv

MixTID

ItemMixTable.csv의 TID 값을 참조할 컬럼 추가

U32



연결된 테이블 확인용 이미지


아이템 테이블 안에는 뭘 조합해서 나오는 아이템인지 확인하기 위한 MixTID 컬럼이 들어있습니다.


  • ItemMixTable

테이블 이름

컬럼 이름

데이터

데이터 타입

ItemMixTable.csv

TID

구분자

U32

Comment

기획자용 코멘트 컬럼

CBwString

SourceItem01

필요 아이템 TID

U32

SourceItemCount01

필요 아이템 개수

U16

MixRate1 ~ 5

확률 값 (1 ~ 10000)

U16

MixItemCount1 ~ 5

확률 성공 시 결과물 아이템 개수

U32

MixItemResult1 ~ 5

확률 성공 시 결과물 아이템

U32


TID 컬럼 값은 ItemTable에 MixTID 에 사용하는 값
조합에 필요한 아이템을 SourceItem01~ 컬럼에 ItemTable TID 값을 가져와서 입력
필요한 수량은 SourceItemCount01~ 컬럼에 입력
조합 확률값과 성공 시 획득하는 아이템과 수량은 아래 3개의 컬럼을 사용
*. 여기서 확률 값은 클 수록 값이 몰리는 일이 없어서 크게 만분율로 설정


  • NPCDlgStringTable.csv 에 아바타 조합 Type을 추가합니다.


테이블 이름

컬럼 이름

NpcDlgString.csv

Type

22: 조합

 조합을 하기 위해 대장간 또는 관련 NPC에게 조합 기능을 부여해야 하기에 위의 NPC 기능 선언 테이블에 타입 값 22 추가

조합에 사용 될 SourceItem 정의

  • 일반 큐브 아이템 이미지일반 아바타 합성 큐브 (캐쉬 아이템)

테이블 이름

컬럼 이름

데이터

데이터 타입

ItemMixTable.csv

SourceItem01

해당 아이템 컬럼 값 참조

U32

SourceItemCount01

해당 아이템 개수 컬럼 값 참조

U16




  • 레어 아바타 큐브 이미지 레어 아바타 합성 큐브 (겔드 아이템)

테이블 이름

컬럼 이름

데이터

데이터 타입

ItemMixTable.csv

SourceItem01

해당 아이템 컬럼 값 참조

U32

SourceItemCount01

해당 아이템 개수 컬럼 값 참조

U16



일반 조합 아이템과 레어 아바타 조합 아이템 두 가지로 분류


기획서는 텍스트가 아닌 '데이터의 흐름'이다



신입 시절에는 기획서에 화려한 표를 그리고 시스템의 컨셉을 설명하는 데 집착합니다. 

하지만 현업에서 진짜 기획서의 가치를 증명하는 부분은, 기획자의 머릿속에 있는 룰이 위와 같은 정교한 데이터 테이블 구조로 얼마나 빈틈없이 구현되었는가입니다.

사실 건방지게 정교하다 빈틈없다 이야기 했지만 지금 보니까 결국 저 큐브 아이템 안에 랜덤 함수 돌려서 성공하면 아이템 뱉고 실패하면 서브 슬롯에 넣어둔 아바타만 삭제하는 시스템을 너무 빙빙 돌려서 이야기하고 있어 보이게 쓰려고 노력을 한 부분은 부끄럽네요

아무튼 테이블 설계까지 마쳤다면 이제 개발은 프로그래머의 몫일까요? 아닙니다. 아직 기획자가 해야 할 가장 중요한 일이 하나 남아있습니다. 

바로 유저가 이 시스템을 마주할 때 겪게 될 '예외 상황'을 예측하고 방어 할 내용을 전달해야 합니다.

다음 3편(마지막 편)에서는, 이 조합 시스템을 이용할 때 유저의 인벤토리가 꽉 차 있거나, 엉뚱한 아이템을 올렸을 때 게임이 터지지 않도록 기획자가 미리 준비해야 하는 '예외 처리 및 UI/UX 설계'에 대해 다뤄보겠습니다.