S Project 개발 로그(P1)

Pied Pipers에서 진행된 두번째 프로토타입은 일반적인 플랫포머(Platformer) 타입의 시스템에 레이싱 요소를 가미한 게임을 개발하는 것이 목표였다. 때문에 속도감을 어떻게 주는가? 가 관건이 된다. 예컨대, 소닉과 마리오 그리고 열혈 운동회의 합작 같은 분위기?

맵은 텍스트 스크립트로 제작

최초 기획서 검토 후,  프로토타입의 스펙은 기본 이동, 기본 액션(점프, 슬라이딩), 고정 장애물 2종을 개발 하기로 결정 하였다. 소요 시간은 약 1주 2일 정도. 멥 에디터 등을 별도로 만들기엔 시간이 빠듯한 고로 JSON 형식을 사용한 스크립트 파일에 직접 작성 하기로 하고, 실 게임 프로그램에 맵 뷰(Map View) 모드를 만들기로 하였다(이후 개발이 진행되면서 이 맵 뷰 모드에서 충돌 관련 코드를 작성하거나 테스트하는데 여러가지 도움이 되었다). 기본적으로 프로그램은 프로그램 종료 할 필요 없이 ‘스크립트 다시 읽기 기능’을 지원 하였기 때문에 작업자는 텍스트 에디터에서 스크립트를 수정한 결과를 바로 프로그램에서 확인 할 수 있다.

개인적으로 학창시절 플랫포머를 몇 번 만들어 본적이 있었고, 하이텔 공모전(아마 그 존재를 아는 사람도 별로 없을것이다)에도 당시 제작한 프로젝트를 발표를 해 보았기 때문에 이번 프로젝트에 대해서는 자신이 있었다. 처음에는 Y 값이 뒤집힌(3D와 같은) 좌표계로 제작 할 생각이었다. 일반적인 데카르트 좌표계의 형식을 쓸 경우, 멥의 최 상단 위로 뛰어 오른다면 사용하는 값이 음수가 되어야 하고, 게다가 멥에디터가 없어 무언가 좌표값을 넣을때도 Y 값을 일일이 확인하여 넣는 것이 싫었기 때문. 하지만, 실제 스크린 좌표와 다르기 때문에 변환을 일일이 해야 했고, 손이 가는 부분이 많아 2일 만에 포기. 평생 알던 좌표계를 하루아침에 다르게 생각하기는 쉽지 않은 일인가 싶었다.

이후, 화면의 확대 축소를 지원하기 위해 카메라 시스템을 추가 하였고 모든 오브젝트는 랜더링 시 좌표를 변환해서 찍도록 하였다. 액터(Actor)를 따라다니는 모드와 고정 모드를 제작 하였고, SF 드라마인 베틀스타 갤럭티카(Battlestar Galactica)의 우주 전투 신에서 보여주는 핸드헬드 카메라 스타일의 카메라 움직임을 보여주고 싶었지만, 1일 작업 후 바로 포기(역시 프로토타이핑의 생명은 빠른 포기다).

대신, 카메라 사용 시 랜더 타겟을 쓰면 화면 분할이 바로 될 것이기 때문에 나중에 이를 추가한다면 좋을 것 같다. 과거 작업했던 2d 프로젝트에서는 바로 찍는 것이 아니라 렌더링 해야할 대상을 리스트 업해두고 한꺼번에 그리는 방식을 채택 했던 적이 있는데, 그것과 함께 좌표를 바로바로 변환하는 것이 아니라 아에 ortho모드 옵션을 손대서 그대로 찍는 방식은 어떨까 하는 생각이다.

게임에서 기대하는 움직임은 실제 물리와 다르다-게임에서의 물리는 마리오로도 충분! © Nintendo

과거에 게임을 제작하던 때와는 환경이 다르기 때문에 기본적인 물리 시스템을 우선 작성하기 시작했다. 처음에는 모든 물리 법칙을 게임 내에 구현하기 위하여 중력, 가속도, 탄성, 마찰 등등… 순서대로 하나씩 넣어가며 작업을 하면 할 수록 원하는 움직임과는 달라 보였고, 때문에 또 쿨하게 2일만에 포기(역시 프로토타이핑의 미덕은 빠른 포기다).  x 와 y의 동작 방식을 별도로 하고, 충돌 방향 및 대상에 따라 어떤때는 값을 깎고 어떤때는 튕겨내고 하는 식의 케이스 바이 케이스(Case by case)로 제작하였다.

버그가 가장 빈번하게 나온 곳은 역시 충돌 처리 부분이었다. 일반적인 3D 공간 에서 충돌 처리를 미리 만들어 둔다는 생각으로 실 계산식을 사용하여 선끼리 충돌하면 충돌점을 구해서 빼주고 하는 작업을 진행 하였는데 이때 멥 뷰어에서 직접 시작점 끝점을 이동 시킬수 있도록 작성한 후 개발하였다.

테스트 할 방법을 준비하고 개발한다. 충분히 테스트 되지 않은 기능은 프로젝트 내내 발목을 잡는다.

개발 전 아무리 기획서 검토를 철저히 하여도, 막상 만들다 보면 다른 부분이 존재 하곤 한다. 결국 다시 기획팀과 논의를 하고, 액션은 점프만, 장애물은 1종만 작성 하기로 결정. 하지만 너무 개발 편의적으로 모든 기능을 처낸것이 문제가 되어 우리가 만들고자 하는 게임의 특성을 적용한 프로토타입이 나오질 못했고, 결국 이후 개발 기간을 추가로 들여 AI 기능을 넣기로 결정하였다.

AI 처리를 하기 위해 기존에 있던 엑터 오브젝트에 캐릭터를 조정하는 컨트롤러를 붙일 수 있게 코드를 수정 하였고, 플레이어용 컨트롤러(입력을 직접 받는)와 AI 컨트롤러 중 필요한 것을 붙이면 되는 방식으로 변경 하였다.

현재 캐릭터는 계속 달리기, 점프, 이중 점프, 부스터의 4가지 액션을 선택할 수 있는데 부스터는 맵에서 별도로 호출하도록 하는 방식이라 AI 처리에서 제외하고 작업을 진행하였다. 땅위에 서있을 때만 AI 를 계산 하였고, 이중 점프를 할 것인가? 에 대한 유무도 미리 결정하도록 하였다. 이중 점프는 가장 높은 지점에서 점프와 내려오기 직전의 위치에서 점프 2종류로 나누었다. 처음에는 앞으로 몇 초간의 지형 정보를 분석해서 처리할 수 있을꺼란 생각이 있었는데, 속도의 증감이 있기 때문에 정확히 어느 위치에 갈 수 있을지에 대한 예측이 힘들기 때문에 구현에 실패하였다.

물론 실제와 동일한 속도 식을 짜면 되겠지만, 추후 코드가 변경 될 경우 양측 다 수정을 해야하는 문제가 있기때문에 코드를 수정하여 시뮬레이션 더미를 만들고 실제로 3개 종류의 점프에 대한 시뮬레이팅을 하였다. 실 개발 버전에서는 시뮬레이션을 하는 횟수를 줄이고, 화면 밖에 있는 캐릭터들은 임의 처리하는 등의 방법을 사용할 예정이다.

AI가 도착할 위치를 표시한다. 가장 좋은 디버깅은 결과를 눈으로 확인하게 하는 것이다.

본 프로토타입은 최초 2주를 예상했던 개발 기간보다 좀 더 지난 2주 4일이 소요 되었다. 배경 및 빌딩 이미지는 디자이너 K가 작업해 주었고, 개발용 샘플 케릭터의 이미지들은 구글링을 통한 임시 작업, 그리고 이펙트 이미지들은 본인이 스스로 제작하였다. AI의 과도한 시뮬레이션으로 인한 최적화 문제가 있고, 특정 상황에 AI가 벽을 넘지 못하고 걸려있는 문제가 최종 P1 릴리즈 버전에서 발견되었다.

주석과 공백을 제외한 순수 프로토타입의 코드는 4794라인, 외부 프로그래머와 프로토 타이핑 및 엔진 개발을 병행하며 약 1.5달 간 작업했던 Moderato 엔진을 사용하였다. 개인적으로는 제작 기간 동안 비주얼 스튜디오에 포함된 프로파일러 사용법을 익혔으며, 엔진의 맥 버전을 지원 하기 위해 맥북 에어를 추가 구매 하였다.