메이플스토리에서는 유저들이 참여할 수 있는 다양한 전투 콘텐츠가 존재합니다. 그중에서도 다른 유저들과 힘을 모아 강력한 몬스터를 처치하는 보스 콘텐츠는 게임의 핵심이라고 해도 과언이 아닌데요.
이번 글에서는 보스 콘텐츠 개발을 담당하는 개발자의 업무 진행 사례를 통해 실무 협업 프로세스와 개발 과정, 기술적으로 고민했던 지점들을 소개해 드리고자 합니다.
개발팀에서 협업하는 내부 프로세스 전반
일반적으로 기획자가 먼저 보스 콘텐츠를 구상하면서 스토리는 어떻게 이어 나갈 것인지, 공격 패턴은 어떻게 구성할 것인지 등 대략적인 아이데이션을 진행하는데요. 이 과정에서 개발자를 비롯한 조직 구성원 전체가 의견을 제시할 수 있는 채널이 있어 열정 넘치는 분들의 개성 있는 아이디어가 채택되기도 합니다. 이후 어느 정도 기획의 틀이 잡히면 개발 일정과 구현 방식, 가능성에 대한 회의를 진행합니다. 각 개발자의 실무 경험을 토대로 기획자에게 의견을 전달하면 이를 조율해 기획서를 수정하고, 개발 일정을 결정하게 됩니다.
다음으로는 개발 작업을 잘게 나누어 리스트업하고 각 개발자에게 할당합니다. 각자 맡은 일을 진행하면서 미처 생각 못 했던 이슈가 발견되면 이를 공유하면서 의사결정을 하고, 중간 작업물에 대해선 기획자에게 피드백을 받고 수정하는 것을 반복합니다. 이후 콘텐츠를 성공적으로 릴리즈하고 난 다음에는 유저들의 동향을 살피며 버그는 없는지, 직관적이지 못하여 불편한 점은 없는지 체크하고 유지, 보수하고 있습니다.
실제 사례로 들여다보는 콘텐츠 개발 과정
보다 자세한 개발 과정을 소개하기 위해, 2021년 여름 새롭게 추가된 보스인 가디언 엔젤 슬라임의 사례를 얘기 드리려 합니다. 구체적으로는 구현 난이도가 높다고 판단했던 지면을 따라 흐르는 물줄기 패턴 가디언 웨이브 개발 과정을 위주로 말이죠.
가장 먼저 했던 고민은 어떻게 하면 가디언 웨이브가 물줄기가 흐르는 듯한 모습의 연출을 할 수 있을지에 대한 것이었습니다. 가디언 웨이브의 위치에 따라서 가로로 길게 늘어져 있거나, ㄱ 모양으로 꺾여 있는 모습 등 다양한 형태가 가능했기 때문입니다. 그렇기에 가디언 웨이브를 하나의 객체로 보기는 하되 내부적으로 조각을 잘게 나누어 따로 관리할 필요가 있다고 판단했습니다.
그 다음 가디언 웨이브 조각의 움직임을 구현하기 위해 상태를 좌측으로 이동, 우측으로 이동, 자유낙하, 상승 네 가지로 구분했습니다. 가디언 웨이브가 상승하는 경우는 기획적으로 존재하지 않지만 상태만 변경한다면 하늘로 솟구치는 연출 또한 가능하도록 유연성 있게 작업했는데요. 참고로 메이플스토리의 월드 매트릭스는 DirectX의 왼손 좌표계를 사용하므로 유저가 보는 화면을 기준으로 우측이 +x축, 자유낙하를 하는 방향이 +y축입니다.
가디언 웨이브는 정지해 있는 경우가 없기 때문에 항상 어딘가로는 움직여야 하고, 방향에 대한 상태를 정의했습니다. 속력의 경우 게임 기획자가 레벨 디자인을 편리하게 할 수 있도록 데이터 파일에서 읽어 들인 값을 사용하도록 했고, 런타임 환경에서 언제든지 변경할 수 있도록 인터페이스를 제공했습니다. 이렇게 현재 상태에 따라 직선으로 움직이는 것까지는 완료했지만 그 다음에는 방향 전환이라는 큰 산이 더 있었습니다.
메이플스토리는 오랜 시간 서비스된 게임이기에 최신 상용화 엔진에 비하면 월드 내 게임 오브젝트에게 통용되는 물리법칙의 퀄리티가 다소 떨어지는 것은 부정할 수 없습니다. 이에 기존 코드를 개선하거나 새로 필요한 부분은 확정하여 구현해야 합니다. 그래서 발판 지면을 흐르다가 발판이 끊어졌을 때 낙하하는 등의 움직임을 하나하나 경우를 따져가며 구현했는데요, 먼저 가디언 웨이브 조각이 방향을 전환해야 하는 경우를 모두 따져 보았습니다.
좌측 또는 우측으로 이동하던 중 발판이 끊어졌을 때
수직으로 자유낙하 하던 중 발판에 충돌했을 때
맵 가장자리에 충돌했을 때
크리스탈에 충돌했을 때
홀리 게이트에 충돌했을 때
위 경우에서만 가디언 웨이브의 방향 전환이 가능하기 때문에 매 Update Tick마다 현재 상태에 따라 위치를 변경한 뒤 위의 경우에 해당하는지 확인하고, 해당된다면 상태를 변경했는데요. 이렇게 방향 전환을 하고 났을 때 각 가디언 웨이브 조각이 살짝 떨어지는 현상이 발생했습니다.
그 이유는 매 Update Tick마다 웨이브는 지정된 속력만큼의 거리를 이동해야 하지만 방향 전환 시 그것을 고려하지 않았었기 때문인데요, 이를 해결하기 위해 전체 이동 거리에서 이동 시작 위치와 방향 전환 시작 위치의 차이를 뺀 거리만큼 다음 진행 방향에 맞게 보정하는 작업을 했습니다. 각 웨이브 조각의 이전 조각, 다음 조각과의 거리는 같이 진행 방향일 때 기준으로 항상 유지되어야 하기 때문입니다.
메이플스토리처럼 실시간으로 다수의 유저가 빠르게 움직이며 고난도의 조작을 요구하는 게임은 1프레임의 오차도 용납되지 않는 경우가 많습니다. 따라서 지금까지 이야기했던 가디언 웨이브의 행동들을 유저가 인지할 수 있는 단위의 시퀀스로 세분화할 필요가 있었고, 그것을 만족시키기 위해 함수별로 모듈화를 진행하여 순서에 맞게 수행하도록 했습니다. 물론 이와 같이 게임의 조작감에 영향을 미치는 부분은 기획자와 끊임없는 커뮤니케이션을 통해서 결정되어야 합니다.
홀리 게이트 충돌
각 가디언 웨이브 조각의 상태에 따른 위치 이동
무적 상태, 탈출 판정 및 휩쓸리는 중인 캐릭터 위치 이동
캐릭터 충돌 판정 체크
가디언 웨이브 방향 전환
가디언 웨이브 렌더링