http://youtu.be/eE1uU3SWm7s

id Software의 DOOM은 인기 짱짱 게임입니다. 근데 3DO판은 조악한 포팅으로 욕을 엄청 먹었는데, 개발자의 항변(?)과 함께 소스코드가 공개되었습니다.

https://github.com/Olde-Skuul/doom3do

이 포팅은 10주짜리 작품이다. 처음에 이 프로젝트를 맡겠다고 했을때는 이미 새 맵과 무기가 추가된 버전이 있고 내가 약간 “다듬기만” 하면 된다고 들었는데 알고보니까 그게 아니었다. 나중에 알게된것이 Art Data Interactive에선 게임을 다른 플랫폼으로 포팅하는게 그냥 컴파일이나 다시 하면 되는거라고 생각을 하고 있었다.

아냐… 아냐…

3DO에서 일하는 친구들이 1995년 크리스마스 전에는 꼭 둠을 완성시켜야 한다고 졸랐고 이때문에 나는 사무실에서 살다시피 했으며 잠은 거의 자지 못했다.

빠르게 만들기 위해 한 것들

음악 드라이버를 포팅할 시간이 없어서 Art Data에 있는 밴드를 고용한뒤 원래 있던 스트리밍 오디오 기능에 맞춰 새로 만들었다. 그래픽은 구렸으나 음악은 괜찮다는 평을 받은 것을 보면 이건 잘 한거 같다.

3DO의 운영체제는 앱을 실행시키고 앱을 종료하면 메모리 회수 작업을 하는 그런 식으로 설계되어 있다. 메모리 누수와 관련된 무수히 많은 버그들이 있었다. 그래서 게임이 처음 시작될때 Logicware와 id Software 로고를 표시하는 간단한 작업에도 삽질이 필요했는데, 게임과 분리시켜서 메모리 누수가 일어나지 않게 하기 위해 3DO 로고와 Logicware 로고를 표시하는 별도의 앱을 따로 만들었다.

Electronic Arts 사의 로고 데이터도 포함되어 있었는데 원래 EA가 게임을 유통하기로 했었기 때문이다. 망했지만.

수직 벽은 셀 엔진을 사용하여 그려졌는데 셀 엔진은 3D를 그리는것이 불가능해서 천장과 바닥은 소프트웨어 렌더링을 사용해야 했다. 셀 엔진으로 그리는 코드를 만들기는 했으나 텍스쳐 티어링이 일어났고 시간이 없었기 때문에 쓰지는 못했다.

직접 string.h ANSI C 라이브러리를 구현해야 했다. 3DO 컴파일러에 딸려온 라이브러리에는 버그가 있었기 때문이다. string.h라고?? 어떻게 이딴걸 말아먹을수가 있지?? ARM 6에서 필요한 함수들을 죄다 다시 쓰는데 하루 종일을 날려먹었다.

이 게임은 Burgerlib 2(역주: 크로스 플랫폼을 지원하는 데이터 관리 라이브러리)를 썼는데 최초로 C언어로 만들어진 버전이다. 원래 Burgerlib은 SNES와 Apple IIgs에서 쓰기 위해 만들었다. Burgerlib 5를 보면 아직도 같은 코드의 흔적이 남아있는 것을 볼 수 있다.

이 코드를 보는 모든 사람들에게 뭔가 도움이 됐으면 좋겠습니다. 이 게임을 만들기 위해 수라장을 거쳐 왔는데 혹시라도 궁금한 점이 있으시다면 기꺼이 답변해드리겠습니다. 1995년으로 돌아가 이 게임을 다듬어서 최악의 DOOM 포팅 대신 최고의 포팅으로 만들고 싶다는 생각이 드네요.