콘텐츠로 건너뛰기
Home » [SW] Wolfenstein-3D 를 Windows용으로 컨버전 하기

[SW] Wolfenstein-3D 를 Windows용으로 컨버전 하기

이번 주제는 SW 개발자로써는 꽤 흥미로운 주제 같습니다. DOS게임의 전설인 ‘울펜슈타인 3D’를 Windows 기반에서 실행되게끔 컨버전을 해보고 싶은 생각이 들어서 포스팅을 하게 되었습니다. 제가 울펜슈타인 3D에 대하여 전에 포스팅을 한적이 있는데, 울펜슈타인 3D에 대하여 알아보던 중에 울펜슈타인 3D가 오픈소스로 제공된다는 사실이었습니다. 이에 흥미가 생겨 울펜슈타인 3D를 직접 Windows용으로 컨버전을 해보기로 했습니다.  

Wolfenstein 3D Source Download 

이번 포스팅에 주제에 맞게 컨버전을 하기 위해서는 울펜슈타인 3D의 Source를 다운로드를 해야 합니다. 구글에서 울펜슈타인 3D Source를 검색하면 쉽게 검색이 되는 것을 확인할수 있습니다.  아래 링크는 ID Software사에 Github에 올려놓은 울펜슈타인 3D의 Source 입니다. 

https://github.com/id-Software/wolf3d

하지만 위 소스는 DOS기반의 울펜슈타인 3D 소스입니다. 위 소스를 컴파일할 경우에는 당연히 DOS기반에서 돌아가게 되어있으며, 이번 주제에는 맞지 않습니다. 그렇다면 위 소스를 다운받아서 Windows기반으로 컨버전 하는 작업을 일일해 해야 할까요? 당연히 아닙니다.^^ 그 작업은 쉽지 않을 뿐더라, 소스 분석과 더불어 많은 시간이 소요가 될수 밖에 없습니다.(더군다나 제 능력 밖이기도 합니다.) 그렇다면 어떻게 Windows용으로 컨버전을 한다는 말일까요? 그래서 좀더 울펜슈타인 3D 소스에 대하여 검색을 해보기로 했습니다. 

검색을 해보니 마침 Windows용으로 컨버전한 소스를 제공하는 Github 주소를 찾아냈습니다. 이야~ 역시나 누군가는 이 작업을 해놨네요. 소스를 제공해 주신 개발자분게 감사를 드립니다. 

아래의 주소는 Windows 환경에서 컨버젼된 Source 입니다.

https://github.com/mozzwald/wolf4sdl

간략하게 확인을 해보니 SDL 라이브러리를 사용하여 Windows용으로 컨버전 작업을 해놨습니다. 바로 관심이 생겨서 제 PC에다가 Git clone을 하여 소스를 다운로드 하였습니다. 

그렇다면 Wolfenstein 소스를 어떻게 Compile 할것인가?

자 여기까진 순조롭게 혹은 쉽게 진행이 되었습니다. 그렇다면 실제로 울펜슈타인 3D 소스를 어떻게 컴파일을 해야 할까요? 저는 개발을 주로 Linux 기반으로 했기 때문에 Windows 환경의 개발은 경험이 별로 없습니다. 그래서 일단 Github 사이트에서 첫 화면의 문서를 살펴보기로 했습니다. 

보통 Github 사이트에서 제공된 소스들은 제공자들이 문서에 컴파일 환경등을 기술해 놓습니다. 차근차근 살펴보다 보니 아래와 같이 컴파일 환경에 대한 내용이 있습니다.

여길 보니 Visual C++ 외에 Code::Blocks 와 DEV-C++을 지원합니다. Visual C++은 윈도우즈 기반의 프로그램을 개발할때 거의 필수로 사용하는 개발도구이긴 합니다. 물론 마이크로소프트에서 판매하는 개발도구이지요. 하지만 이 툴을 사용하려면 돈을 주고 구입해야 되는 상황이다 보니 과감히 제외 하기로 했습니다. (뭐 구입할 돈이 없는점이 있습니다.^^)

그래서 선택할수 있는 도구들이 Code::Blocks와 DEV-C++ 인데, 저는 이 2개의 도구들은 조금씩 사용해 본 경험이 있습니다. 2개다 무료로 제공되는 오픈소스/프리웨어 입니다. 그 중에서도 Code::Blocks라는 개발도구는 오픈소스 도구 치고 꽤 괜찮은 기능을 제공하는거 같습니다. 당연히 Code::Blocks를 사용하여 컴파일을 해보기로 했습니다. 

Code::Blocks IDE Download 

Code::Blocks는 오픈소스 기반의 크로스 플랫폼 IDE 입니다. Code::Blocks는 Windows기반의 환경뿐만 아니라 Linux/Mac 등의 환경에서 사용할수 있습니다. 당연히 Linux/Mac 기반에서도 동작하는 프로그램들을 개발할수 있는거지요. 

이점이 굉장한 장점인거 같습니다. 만약 울펜슈타인 3D를 Code::Blocks를 사용해서 컴파일이 가능하다면, Linux/Mac에서도 컴파일이 가능하다고 볼수 있습니다. 물론 Visual C++ 같은 개발도구에 비해 Windows기반의 프로그램을 개발시 어느정도 제약이 있는건 어쩔수 없다고 생각됩니다. 

이번 주제에서는 울펜슈타인 3D의 컨버전에 대한 내용이기 때문에 Code::Blocks에 대한 이야기는 추후에 별도로 자세히 기술해보도록 하겠습니다. 

먼저 아래 링크에서 Code::Blocks를 다운로드 합니다. 

http://www.codeblocks.org/downloads

Windows용 설치파일을 제공을 하는데, 저는 여기서  codeblocks-16.01-setup.exe 를 다운로드 받도록 하겠습니다. 툴체인이 같이 포함된 설치파일도 있으나 저는 툴체인은 별도로 다운로드를 받아서 설치를 하려고 합니다.(뭐 특별한 이유는 없습니다.) 

현재 최신버전은 16.01 입니다. 다운로드가 되었으면 설치파일을 실행을 시키면 됩니다.

설치는 어려운게 없기 때문에, Next와 OK만 누르면 설치가 별 무리없이 됩니다.  설치가 완료되었으면 이제 툴체인을 설치를 해야 합니다. 툴체인은 Code::Blocks 공식 사이트에서는 Mingw(TDM-GCC)를 사용하라고 설명이 되어있습니다. 

http://tdm-gcc.tdragon.net/download

일단 먼저 32bit용으로 설치를 해 보겠습니다. 제 PC에는 Windows 10 64bit 을 사용하고 있습니다만 32bit용 툴체인을 사용해서 컴파일을 진행해도 별 지장은 없습니다. 그럼 32bit 용을 Download 받기 위해 tdm-gcc-5.1.0-3.exe 를 클릭하면 됩니다. 설치파일을 Download 하였다면 실행을 시켜봅니다.

실행을 시키면 위의 그림과 같이 메뉴가 나타납니다. 여기서 Create를 선택하면 신규로 설치가 진행이 됩니다.

다음에 위와 같이 툴체인의 Bit에 관하여 선택하는 메뉴가 나옵니다. 저는 여기서 MinGW/TDM (32-bit) 를 선택하도록 하겠습니다. 말 그대로 32bit 툴체인을 설치하겠다는 의미가 됩니다. Next를 누르고 다음화면에서도 Next를 눌러 진행하도록 합니다.

위의 화면이 나오면 툴체인의 위치를 지정하는 부분인데, 여기서 저는 그대로 Next를 눌러서 진행하도록 하겠습니다. 늘 그렇지만 Next만 잘 진행하면 됩니다.

여기서도 별다른 선택없이 Next를 누릅니다.

이 화면이 보이면 별다른 선택없이 Install 버튼을 누릅니다. 그럼 최종적으로 툴체인이 설치가 진행이 됩니다. 

여기까지 진행하여 완료되었다는 메시지 화면이 나타나면 정상적으로 설치가 되었다고 볼수 있습니다. 

Code::Blocks로 울펜슈타인 3D Source 불러오기 

자 여기까지 진행되었다면 울펜슈타인 3D 를 Windows용으로 컨버전 할 준비가 완료된것입니다. 이제 Code::Blocks를 실행을 시킨후에 울펜슈타인 3D 소스를 불러와 보겠습니다. 

먼저 설치한 Code::Blocks를 실행을 시킵니다. 

Code::Blocks를 처음 실행을 시키면 위의 화면에서와 같이 초기 환경설정 관련한 내용이 나옵니다. 여기서는 컴파일러를 선택하는 부분인데, 위와 같이 GNU GCC Compiler 가 Detected 되었다는 메시지가 보이면 Code::Blocks가 설치했던 툴체인을 찾았다는 의미가 됩니다. OK 버튼 누르고 넘어가면 됩니다.

다음에는 Code::Blocks의 IDE의 Full화면이 나타나는데, 여기서 파일 확장자 관련 설정 부분이 나타나게 됩니다. 물론 이런 초기 설정들은 Code::Blocks를 맨처음 설치했을때 나타는 부분입니다. 이번에 설정을 하면 그 다음에는 이런 환경설정 관련 메시지는 더이상 나타나지 않습니다. 

여기서 묻는거는 Code::Blocks가 관련된 파일들을 연결하겠냐는 것을 묻는건데, 여기서는 본인이 편한대로 선택하시면 될꺼 같습니다. 저는 여기서 세번째 항목을 선택하도록 하겠습니다. ( 세번째를 선택하면 C/C++ 소스 파일들을 Code::Blocks에서 자동 연결을 시켜줍니다.)

이제 Code::Blocks 관련하여 초기 설정은 다 끝난거 같습니다. 이제 울펜슈타인 3D의 소스를 불러와 보도록 하겠습니다. 

Code::Blocks에서 File – Open 를 클릭합니다. 그리고 나서 본인이 다운로드를 받았던 울펜슈타인 3D의 소스의 폴더로 이동합니다. 

여기서 위의 화면에서와 같이 Wolf4SDL.cbp 라는 Code::Blocks의 Project File을 선택하여 열기를 하면 됩니다. Code::Blocks도 여느 IDE처럼 프로젝트 파일 형태로 프로젝트를 관리하는거 같습니다. 

드디어 울펜슈타인 3D의 소스를 Code::Blocks로 불러오게 되었습니다. 이제 컴파일만 하면 되겠네요.^^

소스 컴파일 하기 

자 그럼 이제 컴파일을 해보도록 하겠습니다. 컴파일은 간단합니다. Code::Blocks의 메뉴에서 Build – Build 를 클릭하면 컴파일이 진행되게 됩니다. 한번 해보도록 하겠습니다. 

어? 근데 이상합니다. 컴파일이 정상적으로 진행이 되질 않고 에러가 발생합니다. 한번 에러 메시지를 살펴보겠습니다. 위의 화면에서 빨간색 네모로 표시된 부분에서 에러가 발생되었다고 하는데, 메시지를 보니 SDL.h 파일이 없다고 합니다. 그래서 좀더 알아보기로 했습니다. 

SDL 라이브러리 Download 및 Code::Blocks 설정 

역시나 한번에 컴파일은 되지 않는군요.^^ 뭐 개발하다 보면 늘상 있는 일입니다. 그래서 여기저기 알아본 끝에, Github 사이트에서 단서를 찾았습니다. 

위의 내용은 울펜슈타인 3D 의 Gitbub 사이트에서 찾은 내용입니다. 먼곳에 있는건 아니네요. 개발자가 친절하게도 컴파일시에 SDL 라이브러리가 필요하다고 언급을 해 놨습니다.  자 그러면 위에서 언급한 대로 SDL 라이브러리를 다운받도록 하겠습니다.

SDL 라이브러리와 SDL_Mixer 라이브러리를 설치를 해야 합니다. 아래 링크에서 다운로드 받으면 됩니다.

– SDL 

http://www.libsdl.org/download-1.2.php

– SDL_Mixer 1.2 

http://www.libsdl.org/projects/SDL_mixer/release-1.2.html

여기서 주의할 건 SDL 라이브러리는 2.X 의 버전을 사용하면 컴파일 에러가 납니다. 반드시 1.X 버전대를 다운로드 받아서 사용을 해야 합니다. 그리고 SDL와 SDL_Mixer 2개가 있어야 된다는 점을 알아두시기 바랍니다. 

추가적으로 중요한점은 Runtime Library가 아닌 Development Library 를 다운로드 받아야 한다는 겁니다. 그래야 컴파일이 가능합니다. 저는 SDL-devel-1.2.15-mingw32.tar.gz 와 SDL_mixer-devel-1.2.12-VC.zip 파일을 다운로드 받았습니다. 

이제 다운로드를 받았으면 SDL 라이브러리를 울펜슈타인 3D 프로젝트에 추가를 해줘야 합니다. 한번 차근차근 진행해 보도록 하겠습니다. Code::Blocks에서 SDL 라이브러리를 추가하려면 어떻게 해야 하는지 알아본 결과 Code::Blocks 공식 홈페이지의 위키에서 설명을 해주고 있었습니다.

Code::Blocks 에서 SDL 라이브러리를 추가하려면 아래의 링크 내용을 참고하면 됩니다. 

http://wiki.codeblocks.org/index.php/Using_SDL_with_Code::Blocks

그럼 SDL 라이브러리를 위 가이드대로 한번 추가를 해보도록 하겠습니다.

먼저 다운로드 받은 SDL-devel-1.2.15-mingw32.tar.gz 파일을 임시 폴더에 압축해제를 하도록 하겠습니다. 위치는 아무 편한 곳에다 압축을 해제하면 됩니다.

SDL 라이브러리의 압축을 해제하면 위와 같이 여러개의 파일들이 생성됩니다. 또 SDL_Mixer 라이브러리도 마찬가지로 특정 폴더에다가 압축을 해제하도록 하겠습니다.

SDL_Mixer는 일단 Top 폴더에서는 파일이 몇개 보이지 않네요. 

다음, 울펜슈타인 3D 프로젝토 폴더 안에 SDL 이라는 하위폴더를 생성후에 SDL 라이브러리 파일들을 복사를 하도록 하겠습니다. 먼저 include/SDL 에 있는 헤더파일들과 lib 안에 있는 라이브러리 파일들을 전부 복사해서 SDL 폴더에 붙여넣습니다.

그 다음에 SDL-1.2.15/bin 에 있는 SDL.dll 파일을 울펜슈타인 3D 소스의 최상위 폴더에 복사해서 붙여넣습니다.  일단 SDL은 파일 복사가 완료되었습니다. 

다음으로 SDL_Mixer 라는 폴더를 울펜슈타인 3D 프로젝트 폴더에 하위로 만든후 SDL_mixer-1.2.12/include 안에 있는 파일들을 SDL_Mixer 안에 전부 복사해 넣습니다. 근데 파일은 1개 뿐이네요. 또 SDL_mixer-1.2.12/lib/x86의 SDL_Mixer.lib 라는 파일을 마찬가지로 SDL_Mixer안에 복사해서 넣습니다. 

그 다음 SDL_Mixer.dll 파일을 울펜슈타인 3D 프로젝트의 최상위 폴더에 복사해 넣으면 됩니다. 

이제 추가적으로 라이브러리 파일들을 컴파일러의 lib 폴더로 복사를 하는일만 남았습니다. SDL과 SDL_Mixer의 lib에 있는 모든 파일들을 자신이 설치하였던 컴파일러(툴체인)의 하위 lib 폴더에 복사를 해서 넣으면 됩니다. 

여기까지 되었다면, 파일 복사는 완료가 되었습니다. 이제 Code::Blocks에서 설정을 해보도록 하겠습니다. 

Project – Build Options 에서 Search Directories 를 선택합니다. 여기서 Compiler를 선택후에 본인이 추가한 SDL, SDL_Mixer의 헤더파일과 라이브러리 파일들이 있는 폴더 위치를 추가해 줍니다.  

또한 Linker setting으로 이동하여 링크할 라이브러리 파일들을 선택하여 줍니다. Add 버튼을 누르면 파일들의 위치를 지정해 줄수 있습니다. 여기까지 되었으면 OK 버튼을 누릅니다. 

울펜슈타인 3D 프로젝트 재 컴파일 

자 그럼, 이제 한번 컴파일을 다시 해보도록 하겠습니다. 먼저 Build 메뉴에서 Clean을 선택하여 기존의 컴파일된 오브젝트 파일들을 제거한후 Build로 컴파일을 해보겠습니다. 

앗! 뭔가 Warning 메시지는 2개정도 나왔지만 컴파일은 완료된거 같습니다. 드디어 울펜슈타인 3D 프로젝트를 제손으로 컴파일을 완료하게 되었습니다. 

울펜슈타인 3D 실행하기 

기쁜 마음으로 wolf4SDL.exe 파일을 실행해봤습니다. 어? 근데 기쁜 마음도 잠시.. 뭔가 이상합니다. 아래 메시지가 뜨면서 더이상 실행이 되질 않습니다. 

이게 무슨 일인걸까요? Data File 이라는게 없다는 의미인거 같은데.. 좀더 찾아봐야 겠습니다. 그래서 일단 Github에서 단서를 찾아보기로 했습니다. 역시나 단서는 멀리 있진 않은거 같습니다. 아래 내용을 볼까요?

How to Play 라는 글귀와 함께 울펜슈타인 3D의 실행에 대한 설명이 있습니다. 여기서는 오리지널 데이터 파일이 필요하다고 나와있네요. 그 밑에는 SDL.dll 과 SDL_Mixer.dll 파일이 또한 필요하다고 하는데, 이 파일들은 좀전에 복사를 했으니 이번에는 해당되지 않는 사항입니다. 오리지널 데이터 파일이라.. 그래서 장장 이틀간의 사투끝에 알아냈습니다.^^

오리지널 데이터 파일이라 함은 울펜슈타인 3D 의 사운드나 맵정보 같은 데이터를 저장해놓은 파일을 의미합니다. 이 파일들은 울펜슈타인 3D의 DOS 버전에 있는데, 그 파일들을 컴파일한 실행파일에 복사해 놓으면 되는 거였습니다.  자 그럼 DOS버전의 울펜슈타인 3D의 데이터 파일들을 찾아보겠습니다. 

위 그림은 울펜슈타인 3D의 DOS 버전에서 가져온 파일들입니다. 확장자가 .wl6 인 파일들입니다. 이 파일들을 울펜슈타인 3D를 컴파일한 실행파일과 같은 폴더에 복사해 넣어서 실행하면 됩니다. 그럼 파일들을 붙여놓고 실행해 보겠습니다. 

앗! 그런데도 마찬가지로 위에서 본 그 메시지가 뜹니다. 그래서 다시 알아보던 도중에 아주 중요한 문구를 발견했습니다. 

위에 보니 version.h 파일을 확인해 보라는 의미가 있네요. 그래서 한번 열어봤습니다. 

파일을 확인해 보니 #ifndef DATADIR 라는 매크로가 있네요. 설정이 안되어있으면 /usr/share/games/wolf3d 를 찾으니 당연히 파일을 못찾는겁니다. 그래서 제가 추가적으로 위의 그림에서와 같이 DATADIR 을 현재 디렉토리에서 찾게끔 수정을 하였습니다. 

또한 추가적으로 아래쪽에 보면 매크로가 있는데, 그 부분도 설정을 잘 해야 됩니다. 디폴트는 UPLOAD와 GOODTIMES, CARMACIZED 가 define 되어 있습니다. 만약 이대로 컴파일을 하면 정상적으로 실행이 되질 않습니다. 그래서 저는 위의 2개를 define을 하였습니다. 

자 그럼 한번 실행을 시켜 보겠습니다. 

드디어 컴파일 및 실행이 성공했습니다. 자 이제 즐기면 됩니다!

맺으며…

이번 포스트를 다루면서 참 흥미로운 내용이라는 생각이 들었습니다. 울펜슈타인 3D는 제가 했던 게임중에 굉장히 재밌게 했던 게임이었고, 개발자인 존 카멕 역시 대단한 인물인데 그의 게임 소스와 그 게임소스를 가지고 직접 윈도우즈 용으로 컨버전을 해봤다는게 매우 뜻깊었던거 같습니다. 
 
Code::Blocks 를 이용하여 컴파일을 하는것도 괜찮은 경험이었던거 같습니다. 윈도우즈 프로그램을 오픈소스 IDE로 개발할수 있다는 것도 꽤 의미있는 거 같습니다. 
 
이 포스트를 방문하시는 분들께 울펜슈타인 3D를 윈도우즈에서 즐길수 있도록 컴파일한 파일을 압축해서 첨부해 드립니다. 예전의 향수를 한번 느껴보시기 바랍니다. 

향후에 시간이 나면 울펜슈타인 소스를 분석하여 레벨을 추가하던지 하여 확장판을 만들어 볼 생각입니다. 물론 저는 게임 개발의 경험은 없지만 취미로 개발하는것도 꽤 재미있는 일이 될꺼 같습니다. 또한 안드로이드 앱으로 컨버전도 한번 해볼 생각입니다. 물론 이 계획들은 언제 실행될지는 모릅니다.^^
 
그럼 이만 포스팅을 마무리하겠습니다. 

'정원딸린집'에는 쿠팡파트너스 등의 제휴링크가 포함되어 있으며 수수료를 제공받을 수 있습니다.
error: Content is protected !!