저번 글에서 방향을 디아블로2 아이템 절차적 생성을 모작하는 것으로 정했었다. 이번 글에서는 디아블로2 시스템과 다른 게임들의 사례를 하나씩 차근차근 살펴보겠다.
아이템 절차적 생성 구조 사례들
디아블로 2
우선 디아블로2가 어떻게 아이템을 생성하는지 알아보자. 사실 여기서 모든 것을 설명하긴 너무 길고, 이미 잘 정리가 된 글을 찾았기 때문에 이를 참고하는 편이 좋을 것 같아 링크를 첨부한다.
디아블로2의 아이템 드랍 알고리즘 (+드랍률 계산기) - 디아블로2 팁과 공략 모음 - 디아블로2 인벤 (inven.co.kr)
요약하자면 다음과 같다.
- 플레이어가 몬스터를 처치하면 몬스터의 TreasureClass, 레벨에 해당하는 TreasureClassEx.txt의 데이터를 조회한다.
- TreasureClass는 또 다른 TreasureClass를 참조할 수도 있고, weap[N]과 armo[N]과 같이 N-2부터 N까지의 레벨을 갖는 무기 및 방어구를 참조할 수 있다. (재귀적일수 있다는 뜻이다.)
- TreasureClass는 Picks값에 따라 아이템 드랍체크를 실시하며, Prob값에 따라 가중치 계산을, Unique, Set, Rare, Magic 상수값에 따라 드랍할 등급 확률을 계산한다.
- TreasureClass는 같은 Group내에서 몬스터 레벨에 따라 가장 높은 레벨의 TreasureClass로 승격된다.
- 조회한 TreasureClass에서 드랍할 아이템의 종류를 결정한다.
- 조회한 TreasureClass에서 드랍할 아이템의 등급(고유, 희귀, 마법, 일반)을 결정한다.
- 아이템의 등급이 고유, 세트일 경우 각각의 데이터를 참조해 드랍할 수 있는 아이템을 결정한다.
- 아이템의 등급이 희귀, 마법일 경우 아이템의 옵션(접두사, 접미사)을 부여한다.
- 무형 및 홈 개수를 결정한다.
이처럼 TreasureClass라는 재귀적인 아이템 드랍 풀(혹은 테이블)이 있고, 이에 가중치나 확률체크 횟수가 추가되어 작동하고 있다. 이 재귀는 최종적으로 아이템 종류가 결정되면 끝난다.
보더랜드 2
이제 보더랜드2를 살펴보자. 이 글에서 찾아 볼 수 있다.
요약하자면 다음과 같다.
- 플레이어가 일반 몬스터를 처치하면 StandardEnemyGunsAndGear를 조회한다.
- 보더랜드2에는 일반 몹, 배드애스, 슈퍼배드애스, 레이드보스 등이 있는데 이들 각각 아이템 풀이 정의되어있는 듯 하다.
- 몬스터가 더 강해질수록, 높은 등급에 가중치를 높게둔 아이템 풀을 설정해두었을 듯.
- 이 글(및 출처)에서는 일반 몹을 처치했다고 가정한다.
- StandardEnemyGunsAndGear은 GunsAndGear, Money, Health, Ammo 등의 아이템 풀을 참조한다. 정해진 개수만큼 가중치 계산을 반복하여 아이템 풀을 뽑는다.
- 예를 들어 GunsAndGear가 선택되었다고 해보자. 이는 Weapon_All, Shields_All, Artifacts_All 등의 아이템풀을 참조한다. 마찬가지로 정해진 개수만큼 가중치 계산을 하여 아이템 풀을 뽑는다. 디아블로2와 비슷하게 아이템풀이 다른 아이템풀을 참조하는 재귀적인 구조이다. 이는 최종 아이템 종류가 결정될 때 까지 반복된다.
- Weapon_All이 선택되었다고 해보자. 이는 Weapon_All_Common, Weapon_All_Rare, Weapon_All_Legendary 등의 아이템풀을 참조한다. 마찬가지로 또 하위 아이템 풀 선택.
- Weapon_All_Common이 선택되었다고 해보자. 이는 Weapon_Pistols_Common, Weapon_SMG_Common등의 아이템풀을 참조한다. 마찬가지로 또 하위 아이템 풀 선택.
- Weapon_Pistols_Common이 선택되었다고 해보자. 이는 Pistol_Bandit, Pistol_Tediore 등의 아이템 풀을 참조한다. 보더랜드2 에서는 총기마다 무작위로 제조사가 정해지는데, 이를 표현한 데이터이다.
- 여기서부터는 글에 나와있지 않은데, Pistol_Bandit가 선택되면 Bandit사에서 붙일 수 있는 총기 옵션들을 선택해 붙여주어 최종적으로 아이템을 결정하는 듯 싶다.
보더랜드2도 디아블로2와 유사하다. 물론 등급 결정과 제조사 결정이라는 부분이 살짝 다르긴하지만, ItemPool이 TreasureClass와 똑같이 재귀적인 구조를 가지고 있고 하위 ItemPool에 대한 가중치(Weight)나 확률체크 횟수(Quantity)를 갖고 있다. 이 계산을 반복해서 최종 아이템을 결정하는 부분은 같다.
토치라이트 2
이쯤되니 비슷한 장르 게임들이 다 이런 구조를 사용하는 것이 아닌가 해서 여러가지 게임을 찾아봤다. 토치라이트 2는 아쉽게도 인터넷에 정리된 글은 없지만, 스팀에서 공식 모드툴을 설치할 수 있기 때문에 조금이나마 살펴볼 수 있었다.
사실 몇 주전에 설치해서 찾아본거라 요약은 없고... (사실 다시 설치해서 살펴보기 귀찮...)
결론적으로 토치라이트2도 비슷하게 재귀적인 구조를 가진 TreasureClass를 사용한다.
마무리
요약하자면 다음과 같다.
- 드랍 가능한 아이템 종류의 묶음(TreasureClass, ItemPool 등)을 정의해서, 몬스터 처치 시 최종 드랍할 아이템 종류를 결정하는데에 사용하고 있다.
- 이 추상적인 묶음은 다른 묶음을 참조할 수 있으며, 묶음에서 몇 개를 몇퍼센트로 드랍할지에 대한 정보도 갖고 있다.
- 이러한 정보를 바탕으로 하위 묶음으로 점차 내려가며, 최종적으로 가장 하위의 묶음은 드랍할 아이템 종류를 참조하고 있다. 이를 통해 드랍할 아이템 종류를 결정한다. (예를 들면 양손 검이라던가...)
위의 게임들 이외에도 모드툴 지원하는 다른 게임들도 많으니 쉽게 찾아볼 수 있을 것 이다.
다음 편에서는 실제로 언리얼 엔진에서 구현을 진행해볼 것이다.