상세 컨텐츠

본문 제목

[그냥 옛날 이야기 4] 무엇을 만들어볼까 고민하던 시절

적분史

by ∫2tdt=t²+c 2014. 4. 24. 03:51

본문




갑자기 무엇이든 만들어낼수 있는 마법상자를 가지게 되었다면, 당신은 무엇을 만드실건가요?


홈페이지 붐과 스타크래프트 붐을 겪으며 이것저것 경험한 초등학생 소년에게 주어진 상황은 위 질문과도 같았다. 어쩌다보니 비주얼베이직 6.0이라는 프로그래밍 툴을 얻게된 초등학생은 그때부터 코딩이란것을 해보게 되었다. 


컴퓨터를 좋아하기만 하던 초등학생이 구체적으로 어떻게 코딩 실력을 쌓게되었는지는 정확하게 기억이 나지 않는다. 다만 당시 활성화되기 시작했던 카페커뮤니티 등을 들락거리며 관련 지식을 모았던 것으로 어렴풋이 추정해볼 뿐이다. 당시에 가입했던 카페들은 후에 카페를 정리하며 다 탈퇴해버려서 정확한 리스트를 작성해보기가 어렵다.


2004년, 소년은 드디어 초등학교에서 벗어나 중학교에 입학하게 되었다. 비주얼 베이직을 접하고 몇 년이 지나는 동안 소년은 실력을 얼마나 갈고 닦았을까! 드디어 첫번째 프로그램이라는 것을 짜게 된다. 가장 먼저 짠 프로그램은 Hello World도 아니요, 구구단도 아니었다. 계산기였다. 



(놀랍게도 파일을 잘 보존한 덕분에 아직도 남아있다. 2004년 11월 20일에 최종 수정된 파일이라고 기록되어있다. 실행환경이 많이 변한지라 실제 당시 프로그램 모습은 저렇지 않았을 것이다)


"내가 내 손으로 직접 만든 프로그램"이라는 자부심이 강했는지 프로젝트 이름마다 다 자신의 이름을 붙여넣었다. 그 흔한 테스트, 연습과 같은 이름대신 민철1, 민철2, 민철3 등등등의 이름의 프로그램만 잔뜩있다.


프로그램을 만들어낼 수 있다는 자신감을 얻은 소년은 원대한 목표를 세웠다. "나만의 게임을 만들자!" 이제 간신히 겨우 조건문이랑 반복문을 작성할줄 알게되었으면서 바로 게임을 만들고자 시도했다. 사실 쉬운 작업이 아니었다. 짜다가 안되면 지워버리고 다시 짜고, 고치는 작업의 반복이었다. 그 해 겨울이 가기전 게임은 처음으로 게임다운 모습을 드러내보이게 되었다.


이 프로그램을 돌려보기 위해 Virtual Box에 XP를 설치하는 짓까지 해야했다. 놀랍게도 잘 작동한다.


지금와서 생각해보건데, 제대로된 지식도 없으면서 어떻게 저런 프로그램을 짜낼수 있었는지, 정말 놀라울 따름이다. 다만 자료구조에 대한 지식 부족은 여실하게 드러나서 맵데이터를 표현하기 위해 엑셀 데이터를 연동한다던지... 물리엔진이 제대로 구현이 안되어서 지형과의 충돌만이 처리된다던지 하는 오점들이 많았다... 그리고 소년의 끈기는 이내 바닥을 치게 되어 개발은 중단되었고, 기억의 저편으로 잊혀졌다.

(아무리 그림판으로 끄적끄적그린 그림이라지만, 저렇게 개판일수 없다. 부모님께서는 나에게 미술교육을 좀더 많이 시키셨어야했다!)


당시 시기는 1999년 DirectX7이 발표된지 몇 년 후라 DX7이 널리 사용되기 시작하던 때였다. 그런데 중1소년이 정보를 얻기위해 들락날락거리던 곳에서는 아직 DX5의 잔재가 살아 돌아다녔던 것이 문제였다. DirectX 5를 적용하여 비주얼 베이직 6.0으로 슈팅게임을 구현한 예제를 구하자마자, 그걸 분석해서 적용하기 시작했다. 아직도 생생히 기억나는게 그 코드에는 하드웨어 가속을 이용한 그래픽 처리라고는 Box그리는 것 밖에 없었고, 화면에 그래픽을 띄우기 위해서 BitBlt 함수를 사용했다... (부연설명하자면 BitBlt은 게임용으로 쓰기에는 기능도 제한적이고 속도도 느린 그래픽함수다. 주로 게임이 아닌 과거 응용프로그램에서 화면에 그림을 띄우기 위해 사용했다.)

예제 소스를 보고 그래도 되는 줄 알았다.

더 넘겨짚어서 게임 개발에 GDI함수를 사용해도 되는지 알았다...


2004년의 겨울은 길지 않았다. 곧 2005년이 왔고, 방학이 다 지나가고 있었다. 방학 내내 집에만 틀어박혀서 코딩을 하고 로직을 짜보고 그랬다. 방학 숙제는 언제할거냐고 혼나면서 컴퓨터를 뺏겼던 기억이 난다. 

횡 스크롤 플랫포머 게임을 때려치우고, DX5를 사용한 예제를 접한 나는 새로운 도전을 하고 있었다. 스타크래프트와 같은 RTS 게임이 만들고 싶었고, 그래서 비주얼 베이직이랑 GDI로 그걸 만들고 있었던 것이다. (물론 DX5를 이용해 화면해상도를 바꾸고 전체화면모드를 만드는 일은 했다. 하지만 실제 그래픽 처리는 GDI로...)


게임 속의 수많은 유닛들이 일정한 프레임으로 움직이면서 사용자의 입력에 반응하려면 Timer를 이용해서 처리루프를 반복해야한다는 것을 방학 말에 깨달았다. 타일맵으로 지형을 배치하고, 유닛 데이터를 배열로 두어 개개의 유닛에 대해 이동, 공격, 체력 회복 등의 처리를 수행해야한다는 것도 깨달았다. 다수의 유닛을 선택하고 이들에게 명령을 내리는 것도 잘 구현했다. 다만 길찾기 인공지능은 아무리 머리를 굴려도 개발할 수 없었다. (이제 와서 생각해건데 당시에 내가 길찾기를 위해 사용했던 알고리즘은 벽을 짚고 테두리를 따라 도는 것이었다. 좌수법, 혹은 우수법이라고 부르는 기법인데, 당연히 효율적이지 않고, 모든 경우에 바른 해답을 도출하지도 않는다.)


문제는 전장의 안개에서 터졌다. 유닛 주위로 전장의 안개를 그리기 위해서 유닛의 시야가 닿는 곳을 검색해야 했다.(얼마나 고민을 했으면, 당시에 문제를 해결하기 위해 수행했던 방법들이 지금까지 기억에난다...) 처음에는 유닛의 위치에서 16방향으로 장애물이 있는지를 검사하여 시야가 어디까지 뻗어나갈수 있는지를 찾았는데, 이게 유닛이 하나여도 벅찬데, 여럿이 있으니 너무 느린것이었다. 그래서 8방향으로 줄여도 느렸다.

문제의 원인은 안 그래도 느리던 비주얼베이직에다가, 안 그래도 느린 GDI로 그래픽을 그리고 있었기 때문.

소년은 인터넷에서 무심히 읽었던 "비주얼 베이직은 느리고, C는 빠르다"는 이야기를 떠올렸고, 해결책은 C언어를 사용하는 것이라고 생각했다. 그래서 관심에도 없던 Visual Studio 6을 설치하게 되는데... RTS 개발의 꿈이 어디까지 이어지는지는 다음에 계속하도록 하겠다.



그런데 소년이 단순히 코딩만 한건 아니었다. [그냥 옛날 이야기 2]에서 말했던 드래프트가 여기까지도 이어진다. 처음엔 드래프트만 즐기는 것으로 시작했지만, 이내 드래프트를 만들게 되었다는 이야기를 했었다. 때때로 이 드래프트가 RTS 개발이라는 꿈이 좌절될때마다 안식처 역할을 했다. 이미 잘 만들어진 스타크래프트라는 RTS에 약간의 조작을 가하면 힘들게 RTS를 새로 개발하지 않아도 내가 만들고 싶은 게임을 만들수 있지 않을까? 생각했던 것. 그래서 실제로 해봤다. 게다가 협업도 했다. 동생더러 같이 드래프트를 만들자고 꼬득여서 함께 그림을 그리고 구상을 했다.




동생이 손수 그린 그림들이 들어간 해양 드래프트. 파일 디스크립터에 따르면 2004년 1월에 생성된것으로 여겨진다.





2005년 12월에 제작한 Covered Zerg's War. 이름부터가 중2병냄새난다. 이 드래프트는 프로토스라는 종족을 없애고 아예 새로운 종족으로 만들고, 이 종족과 저그가 치룬 전쟁에 대해서 다뤘는데 나름 시나리오도 있고 그 시나리오 따라 만든 캠페인 미션도 몇개 있었다!


Covered Zerg's War 같은 경우는 사례연구와 기술축적으로 인해 훨씬 고급스러운(?) 그래픽이 보인다. 나름 입체감 있는 그래픽은 당시 포토샵7에 들어있는 필터 기능중 3D변형 기능을 이용한 것이었다. 이 기능은 원기둥, 구, 육면체 등밖에 지원하지 않았기 때문에 위 드래프트에서는 유독 유닛들 모양이 기하학적으로 보인다!

드래프트에 관한 지식은 프로그래밍과는 별개로 이어졌을것 같지만, 이내 합쳐지게 된다. 어떻게 합쳐지게 되었는지는 다음글에서 계속 이어가도록하겠다.

관련글 더보기

댓글 영역