2022년 9월 블로그 요약 (1)
지난 8월에는 2022년 8월 블로그 요약 (1), 2022년 8월 블로그 요약 (2), 2022년 8월 블로그 요약 (3), 2022년 8월 블로그 요약 (4)에 걸쳐 한 달 간 쓴 이야기를 요약했습니다. 이번에도 똑같이 지난 9월에 한 이야기를 짚고 넘어가겠습니다.
보상 시스템 설계 (2)
보상 시스템 설계 (1)에서는 여러 게임에서 흔히 사용되는 보상 시스템의 요구사항을 나열해 보고 이들 중 가장 단순한 부분이 어떻게 구성되는지 알아봤습니다. 보상 시스템 설계 (2)에서는 여기에 같은 상황에 드랍되는 보상이 캐릭터 클래스에 따라 달리 드랍되어야 할 때 처리 방법을 알아봅니다. 또 보상에 따라 그룹 내 독립확률에 의해 그룹에 속한 아이템 각각이 독립 확률 연산을 통해 드랍되는 경우와 결합롹률에 의해 그룹에 속한 아이템 중 하나를 골라 드랍해야 하는 상황을 같은 데이터 안에서 처리하도록 구성해 보았습니다. 예제 데이터는 성장재료 중 하나 이상을 드랍하는 경우와 여러 캐릭터카드 중 딱 하나만 드랍하는 경우 데이터를 구성하는 방법을 설명했습니다.
한 스텝에 목표가 여러 개인 퀘스트에 대한 의견
이전에 자동퀘스트를 개발하면서 처음에는 스텝 하나에 한 가지 목표만 수행하는 간단한 모양으로 설계해 개발했습니다. 하지만 시간이 지나면서 한 스텝에 여러 목표를 동시에 수행할 수 있도록 만들어야 한다는 의견이 나왔습니다. 처음에는 여기에 강하게 반대했습니다만 결국 설계할 수밖에 없었습니다. 큰 비용을 지불해야만 했고 게임은 이제 이전으로는 돌아갈 수 없게 되었습니다. 하지만 다시 이로부터 시간이 흐르면서 자동퀘스트를 돌릴 때 같은 공간에서 한 스텝에 여러 목표를 동시에 자동으로 수행하는 모습이 상상한 것 보다 훨씬 좋다는 것을 깨달았습니다. 캐릭터는 적에게 습격 받아 불타는 마을 안에서 가까이 있는 일은 뭐든 했습니다. 가까이에 적들이 있다면 이들과 전투 해서 쓰러뜨리고 사람들의 피난을 막는 장애물이 있으면 파괴했으며 구석에 웅크리고 있는 사람들을 만나면 이들을 구출했습니다. 이러다가 다시 적들을 만나면 전투를 반복하며 앞으로 나아갔습니다. 이 장면은 꽤 그럴싸해 보였고 비용을 투자할 만 했다는 생각을 했습니다.
희미한 자동이동버튼
디아블로 이모탈은 이동은 자동이지만 전투는 수동입니다. 몬스터 스무 마리를 잡는 퀘스트를 수행할 때 퀘스트가이드를 터치하면 가까운 몬스터까지 자동이동한 다음 아무 것도 하지 않습니다. 나를 공격해 오는 적을 상대하는 일은 플레이어의 일입니다. 전투가 끝나면 다음 상대를 향해 이동해야 하는데 이 때마다 자동이동 조작을 해야 합니다. 두 가지 자동이동 방법을 제공합니다. 하나는 퀘스트가이드 인터페이스를 터치해서 껐다가 다시 켜면 자동이동을 시작하며 다른 하나는 화면 가운데 자동이동 버튼을 터치하는 것입니다. 이 자동이동 버튼은 화면 가운데 있어 현재 상태를 잘 알 수 있지만 수동으로 전투하는 도중 시야를 가리기 때문에 전투가 시작되면 조용히 사라졌다가 전투가 끝나면 다시 조용히 나타납니다. 그런데 전투가 끝난 다음 급한 마음에 다른 몬스터까지 빨리 이동하고 싶을 때마다 자동이동버튼이 조용히 나타나기를 기다리고 싶지 않을 수 있습니다. 그래서 자동이동버튼은 전투가 시작되어 희미해졌거나 화면에서 완전히 사라진 상태일 때도 그 자리를 터치하면 동작합니다.
괴물이 튀어나오는 인터랙션 오브젝트 설계
디아블로 이모탈을 플레이 하다 보면 검은 안개를 없애는 퀘스트가 있습니다. 검은 안개는 이전에 설명한 인터랙션 오브젝트와 거의 똑같습니다. 그런데 다가가서 인터랙션 하면 안에서 괴물들이 튀어나온 다음 안개가 사라집니다. 이 요구사항을 전에 설명했던 인터랙션 오브젝트 설계 (1), 인터랙션 오브젝트 설계 (2) 인터랙션 오브젝트 설계 (3)를 확장해 대응해 봅니다. 인터랙션 오브젝트 자체의 동작은 똑같습니다. 검은 안개가 있고 인터랙션 하면 사라집니다. 그런데 인터랙션 해서 상태가 바뀔 때 안에서 몬스터들이 스폰되어 지정된 방향을 향해 두 줄로 달려간 다음 캐릭터와 전투 하게 됩니다. 어떤 팀에서는 이런 요구사항을 이미 개발된 기능 조각을 조립할 수 있는 환경을 통해 추가 구현 없이도 만들 수 있을 겁니다. 또 다른 팀에서는 이를 별도 기능으로 만들어 에디터 환경에서 괴물이 튀어나오기로 약속된 인터랙션 오브젝트를 그냥 배치하기만 하도록 만들 수도 있을 텐데 여기서는 후자의 방법을 알아봅니다.