1. 들어가며
안녕하세요. 앞으로 저와 같이 함께 둠3 소스를 분석해보겠습니다. 먼저 빌드부터 해보겠습니다.
2. 소스받기
둠3 소스는 Visual Studio 2010 솔루션으로 세팅되어있습니다. 아쉽게도 Express 버전은 진행이 매끄럽지 않습니다. https://github.com/TTimo/doom3.gpl 에 가셔서 메뉴 "Downloads"의 "Download as zip" 버튼을 눌러서 풀소스를 다운로드 받습니다. 압축 파일을 푸시고 안에 들어있는 폴더 이름 TTimo-doom3.gpl-7db8be7을 TTimo-doom으로 바꿔줍니다. 그리고 C:\ 로 옮깁니다. 최종 폴더 구조는 다음과 같습니다.
3. 게임설치
게임은 아래 두가지 방법으로 설치할 수 있습니다.
- CD 설치
- 스팀 구매 (http://store.steampowered.com/sub/425/)
CD 설치는 둠3, 둠3-확장팩(Resurrection of Evil)을 설치하시고 1.3.1 패치까지 해주셔야 합니다. 스팀 구매는 위의 링크로 가셔서 Doom3 Pack(오리지날+확장팩)을 구입하시면 됩니다. 결제 후 다운로드만 받으시면 됩니다. CD는 구하기도 쉽지 않고 공개된 프로젝트의 기본 경로도 스팀으로 되어있어서 스팀 구매를 추천합니다.
4. 빌드
C:\TTimo-doom\neo\doom.sln 파일을 엽니다. 메뉴에서 빌드(Build) -> 구성 관리자(Configuration Manager)를 클릭하시고 "Debug"로 활성화시킵니다. F7 키를 눌러서 빌드를 시작합니다. 빌드 중에 몇가지 에러가 발생합니다.
C:\TTimo-doom\neo\sys\win32\win_input.cpp(146) 에서 첫번째 컴파일 에러가 발생합니다. 코드페이지 문제로 글자가 깨집니다. 다국어 지원쪽이라 소스분석과 크게 상관없어 해당 부분을 삭제하겠습니다. win_input.cpp 파일의 100줄~252줄까지 삭제합니다. 다음, Sys_InitScanTable 함수에서 else if ( lang.Icmp( "spanish" ) == 0 ) 부분 부터 해당 함수의 마지막 줄까지 삭제합니다. 결론적으로 s_scantokey_spanish, s_scantokey_french, s_scantokey_german, s_scantokey_italian 배열 변수를 사용하는 부분들을 지워주시면 됩니다. (수정된 win_input.cpp 파일을 첨부했습니다. 해당 경로에 덮어쓰기 카피를 해주세요.)
다시 F7키를 눌러 빌드를 걸면 C:\TTimo-doom\neo\sound\snd_system.cpp 에서 두번째 컴파일 에러가 발생합니다. 166줄에서 #if ID_OPENAL ~ #endif 으로 감싸져 있는 부분을 주석처리합니다. (수정된 snd_system.cpp 파일을 첨부파일로 올렸습니다. 덮어쓰기 카피를 해주세요.)
이제 빌드가 성공하고 F5 키를 눌러서 게임을 실행시킬 수 있습니다. 그럼 씨디키를 물어보는데요. 이것도 귀찮으니 소스 수정으로 통과해보겠습니다.
C:\TTimo-doom\neo\framework\Session.cpp 파일에서 2985줄 ReadCDKey 함수를 보시면 중간에 cdkey_state = CDKEY_UNKNOWN; 문장과 xpkey_state = CDKEY_UNKNOWN; 문장이 있습니다. 이것들을 각각 cdkey_state = CDKEY_OK; 와 xpkey_state = CDKEY_OK; 으로 수정해줍니다. 다시 F5 키를 눌러 실행시키면 씨디키를 물어보지 않음을 볼 수 있습니다. (수정된 Session.cpp 파일을 첨부파일로 올렸습니다. 덮어쓰기 해주세요.)
게임 메뉴에서 Option -> System 으로 들어가셔서 Screen Size는 적절하게 줄여주시고 FullScreen은 No로 해주시면 디버깅 할 때 편리하겠습니다.
5. 마무리
소스코드 읽기는 현업인에게 요구되는 중요한 능력입니다. 입문자들은 특히 꼭 한번쯤은 경험해봐야 할 산이라고 생각합니다. 잘 만들어진 게임의 에셋과 소스 모두를 구비해서 분석할 수 있는 기회는 흔치 않습니다. 그런 경험은 본인이 참가하고 있는 프로젝트에 국한될 수 밖에 없는데요. 그런 측면에서 둠3 소스는 존카맥님이 주시는 매우 좋은 재료가 될 수 있습니다. 앞으로 저와 같이 작은 클래스들부터 시작해서 차근차근 정복해보아요~
반응형
'프로그래밍' 카테고리의 다른 글
게임 출시전 개발자가 갖춰야할 마음가짐 (16) | 2011.12.16 |
---|---|
게임 개발에서 스크립트는 정말로 유용한가? (41) | 2011.12.15 |
DirectX9의 텍스쳐 관리 시스템을 제어하자 (10) | 2011.12.13 |
Vertex Compression (5) | 2011.12.12 |
특화된 H/W의 장단점. Xbox360의 EDRAM과 PS3의 ZCULL 메모리 (24) | 2011.12.08 |