디스이즈게임에서 새로운 연재를 준비했습니다. 모바일 디펜스게임 <팔라독>의 개발사 페이즈캣의 게임 프로그래머 문기영 차장의 이야기인데요, 게임을 좋아하는 학생이었던 그가 어떻게 게임 프로그래머가 됐는지를 소개하는 연재입니다. 이와 함께 한 발 앞서 게임 프로그래머가 된 입장에서 게임 프로그래머가 되고자 하는 분들께 왜 수학 공부가 필요한지, 어떤 것들을 배우면 좋을지 등을 전해드리도록 하겠습니다. /디스이즈게임 편집국
안녕하세요. 게임 프로그래머 문기영입니다. TIG에서 게임 프로그래머를 꿈꾸는 분들에게 도움이 되고자 글을 쓰게 되었습니다. 열정적인 게이머에서 게임 프로그래머가 되기까지 제가 경험했던 것들을 적어 보려고 노력했습니다. 열심히 써보겠습니다! /페이즈캣 문기영
필자가 게임을 처음 접한 것은 여섯 살 때 문방구에서 보았던 <방구차>(실제 게임명은 Rally X)였다.
당시에 게임은 한판에 50 원이었는데 유치원이 끝나면 문방구에 가서 <방구차>를 한 판씩 했다. 내 기억으로는 한 번도 제대로 이 게임을 클리어해 본 적이 없었던 것 같다. 그냥 단순히 자동차가 방구를 뀐다는 게 너무 재미있었다.
이것은 <너클 죠>라는 게임이었는데 주인공의 빠른 주먹질과 현란하게 정신 없이 움직이는 모습에 매료돼서 정말 열심히 했었다. 하지만 이 게임을 하기에는 당시에 너무 어렸고, 매일 죽었기 때문에 나중에는 그냥 남들이 하는 모습을 구경하기만 했다.
문방구에 가서 전재산 50 원을 쓰고 나면 더 이상 할 것이 없었기 때문에 다른 사람이 게임 하는 것을 구경하기만 했다. 그렇게 하루 종일 구경하다가 집에 돌아갈 시간을 잊어 오후 늦게 귀가하던 경우가 허다했다. 요새는 6살 어린이가 오후 늦게 혼자서 집으로 들어간다는 걸 상상도 하기 힘들겠지만 당시에는 그랬다.
시간이 흘러 초등학교에 입학했고, 게임과의 인연은 계속해서 이어졌다. 생각해 보면 학교에서 공부는 썩 잘하지 못했다. ‘이달학습’이라는 문제집을 사서 혼자 문제를 해결할 정도는 되었지만 집안 사정이 나빠지면서 문제집도 사지 못했고, 부모님 역시 내게 관심을 줄 형편이 안 되었다. 학교에 가면 선생님들이 말하는 게 아무것도 들리지 않았고 그냥 친구들과 어울려서 놀기에 바빴다. 어렸을 때부터 노는 건 자신이 있었고 꽤 잘했기 때문에 친구들 사이에서 인기가 많았다.
남자라면 누구나 다 했다는 구슬치기에 능숙했고,
팽이치기는 거의 도사였다. 혼자서 팽이를 어떻게 찍었을 때 ‘꼭다리’(팽이의 가장 윗 부분)가 가장 잘 부서지는지 연습하고 그 방법을 동네 형들에게 알려주며 정보를 공유(?)하기도 했다. 그런데 어느 날 돈 많은 친구가 쇠팽이를 가지고 오는 바람에 더 이상 팽이치기는 하지 않게 되었다.
물론 쇠팽이에 대적할 수 있는 고무팽이가 있긴 했었지만(왜냐하면 고무팽이와 쇠팽이가 부딪히면 쇠팽이에 더러운 자국이 남아서 쇠팽이 주인인 꼬마 아이가 싫어했다) 뭔가 공략하는 맛이 사라졌기 때문에 금세 인기가 사그라졌다.
당연히 ‘파파먹기’(정식 명칭이 맞는지는 모르겠다)도 잘했는데 폐활량이 좋아서 동네에서 항상 일등이었다. 친구는 열심히 돈으로 이걸 샀지만 나는 게임을 잘해서 따버렸다.
이것들 외에도 병뚜껑을 납작하게 만들어서 놀았던 게임, 딱지치기 등… 모든 아날로그 게임에 능했다. 지금 돌이켜보면 사실 처음부터 잘했던 게 아니라 내가 가진 시간에 할 수 있는 게 놀이밖에 없었고 잘하지 않으면 어울리기 힘들었기 때문에 같이 놀기 위해서 더 열심히 할 수밖에 없었다.
그러다가 본격적으로 오락실(당시 지능개발실 같은 이름으로 불렸다)을 다니게 되었는데, 역시 돈은 없었다. 지금도 가능한 방법으로 알고 있는데 동네에 버린 병을 주워다가 슈퍼에 가져다 팔면 돈을 줬었다. 그래서 나는 전문적(?)으로 그걸 했다. 특히 델몬트 병이 가장 돈을 많이 줬었다. 병을 팔아서 모은 돈은 친구들과 나누고 돈이 생기면 오락실에 갔다.
아케이드 게임은 아날로그 게임과는 조금 달랐지만 그래도 그 메커니즘은 거의 같았다. 패턴이 있었고 그 패턴만 잘 숙지해서 빠른 동체 시력과 반응력으로 게임을 하면 누구나 이길 수 있었다. 그런 내게 가장 잘 맞았던 게임이 바로 격투게임이었다.
당시에 처음으로 접했던 격투게임이 <스트리트 파이터 2>인데 처음 다른 사람과 하자마자 이겨버렸다. 그리고 또 다른 사람이 나에게 도전했는데 이겼다. 나는 ‘가일’이라는 캐릭터를 했는데 이 캐릭터는 패턴 2개만 익히면 누구나 이길 수 있었기 때문이다. 바로 소닉붐과 썸머솔트킥이다.
그렇게 게임을 하다 보니까 동네에서 가장 잘하는 아이가 되었다. 단 2가지만 하면 됐고 어릴 때는 원래 동체 시력이 좋기 때문에 누구보다 반응 속도가 빨랐다. 물론 일방적인 승리에는 대가가 뒤따랐다. 체어샷(게임에 져서 분노를 억제하기 못하고 상대방에게 의자를 던지는 행위), 전원 끄기, 뒤통수 때리기 등등… 하지만 워낙 유명했고 오락실 주인 아저씨의 스폰(?)도 있었기 때문에 나는 맞은 적이 별로 없었다.
게임도 하다 보니 매너가 있었다. 3판2승제에서 내가 한 판을 이기고 상대방이 너무 못하면 일부러 두 번째 판에서 져주는 것이다. 상대가 콤보를 쓰거나 하면 연습하게 맞아주는 식이다. 이걸 안 하면 동네에서 체어샷은 항상 일어났다. 아니면 동네 형들이 내게 돈을 대주고 상대를 이겨주는 것에 만족해 하기도 했다.
최근에도 <스트리트 파이터 4>를 즐겨 했었고 <스트리트 파이터 서드 스트라이크>의 경우 이 정도(아래 영상) 플레이는 가능했다.
격투게임에는 일명 ‘얍삽이’라는 게 있어서 상대가 어떤 캐릭터든, 아무리 잘하든 못하든 한 번 걸리면 게임을 끝낼 수 있는 방법들이 너무 많았다. <킹 오브 파이터즈>의 무한 잡기, 무한 뺑뺑이, 무한 공중 콤보 등등….
게임을 개발한 지 14년이 지난 지금 생각해 보면… 이런 것들 대부분이 버그 플레이거나 게임 디자이너가 만든 배틀 시스템의 약점(?)을 이용한 경우가 많았다.
그중에서 기억에 남는 것은 <무장쟁패>라는 게임인데 이 게임은 1p(플레이어)와 2p가 동시에 잡기 버튼을 눌렀을 경우 무조건 1p가 우선권을 갖게 되어 있었다.
내가 직접 소스 코드를 본 경우는 아니지만 이것은 잡기 로직을 어떻게 작성했느냐에 따라서 다르다. 만일 1p가 잡기 버튼을 누른 것을 먼저 검사하고, 잡기가 유효하다고 무조건 우선적으로 처리할 경우에 1p와 2p가 동시에 잡기 버튼을 눌러도 1p의 잡기가 먼저 들어가게 로직이 실행될 수 있다. 예를 들면 다음과 같은 코드다.
if ( player1_input_grab && player1_grab_valid_distance )
{
// 1p가 잡기
}
else if ( player2_input_grab && player2_grab_valid_distance )
{
// 2p가 잡기
}
위와 같이 처리했다면 아무리 2p가 동시에 잡기를 걸어도 무조건 1p의 잡기가 먼저 실행된다. 위의 로직을 올바르게 처리하려면 1p와 2p가 동시에 잡기를 입력했는지 먼저 검사해야 한다.
bool player1grab = player1_input_grab && player1_grab_valid_distance;
bool player2grab = player2_input_grab && player2_grab_valid_distance;
if ( player1grab && player2grab )
{
// 동시에 잡기를 시도했다.
}
else if ( player1grab )
{
// 1p가 잡기를 시도
}
else if ( player2grab )
{
// 2p가 잡기를 시도
}
실제로 요즘 나오는 격투게임들은 상대가 잡기를 실행했을 경우 n프레임 안에 상대편 역시 잡기를 실행하면 잡기가 캔슬된다. 이런 것들을 어떻게 구현해야 할지 논리적으로 생각하고 이 로직들을 작성하는 게 프로그래머들의 게임 제작업무 중 하나다.
※ 노트: 위에서 보여드린 코드는 가상의 코드로서 형태는 C언어 형태를 따르고 있다. C언어는 컴퓨터 프로그래밍 언어인데 게임 개발에 가장 많이 사용됐으며, 현재는 C++가 쓰인다.
어릴 때는 가정용 콘솔 게임기와 오락실(지능개발실)을 다니면서 게임을 했고 중학생이 되면서 처음으로 PC를 갖게 되었다. 그리고 가장 먼저 친구에게 구해서 했던 게임은….
‘nanpa.exe’라는 실행 파일을 가진 게임이었다. 그리고 이 게임을 하면서 ‘플로우 차트’가 어떤 것인지 알게 되었다. 플로우 차트는 예를 들면 다음과 같은 것이다.
(출처: //en.wikipedia.org/wiki/Flowchart)
<동급생>은 ‘연애 시뮬레이션’으로 정해진 시간에 어떤 조건을 갖추어야만 이벤트가 실행되는 형태의 게임이었다. 이러한 이벤트는 굉장히 많은데 이 조건을 알아야만 내가 원하는 여성을 공략할 수 있었다. 플로우 차트를 보면 거의 모든 여성을 가장 짧은 시간 안에 공략하는 게 가능했다.
당시에는 <동급생>을 재미보다는 그냥 야한 이미지 하나를 더 보고 싶어서 플레이했다. 그때, 갑자기 이런 생각이 들었다. ‘이 많은 이벤트를 언제 다 충족시키지? 그냥 한 번에 다 볼 수 없을까?’
그렇게 해킹(Hacking)에 관심을 갖게 되었다.
계속…
필자 소개 ☞ 문기영
1999년 게임산업에서 일을 시작했다. 나모인터랙티브에서 프리랜서로 모바일게임을 개발했고, 소노브이에서 테크니컬 프로그래머로 일하며 인공지능 시스템, 망토 물리 시뮬레이션, 텍스처 셰이딩 시스템을 개발했다. 이후 EA 캐나다에 들어가 인공지능(AI) 프로그래머로서 Xbox360, PS3용 <피파 08>부터 <피파 12>까지 개발에 참여했고, Practice Mode, CPU AI, Refree rule system을 만들었으며, 애니메이션 프로그래머로서 User celebration을 개발했다.
EA 캐나다를 그만둔 후에는 한국으로 돌아와 해머 게임 스튜디오를 창업해 iOS용 게임 <Attack of the Pig>를 개발했고, PC, iOS, 안드로이드 3대 플랫폼을 모두 지원하는 자체 엔진 ‘DeadEngine’을 제작했다. 지금은<팔라독>을 개발한 페이즈켓에서 테크니컬 디렉터로 일하고 있다.
저서로는 고등학교 3학년 때 쓴 <비주얼 베이직 6 게임 만들기>와 이후에 쓴 <게임 개발 테크닉> <게임 프로그래밍으로 배우는 C#>가 있다. 번역서로 <언리얼 게임 엔진 UDK3>를 내기도 했다. 여건이 될 때마다 넥슨 개발자 컨퍼런스(NDC, Nexon Developer Conference)에서 강연하기도 한다.