본문 바로가기

컴터생각

.NET으로 포팅된 Quake2 소스..

무척 오래된 내용인데, 블로그에 백업 차원에서.. 음, 이런 글을 스프링노트(위키)에 올려둬야 하는건가?

퀘이크 2는 소스코드가 공개된 Id Software의 유명한 FPS 게임이다.. 소스코드가 공개된 덕에 여러가지 실험(?)에 자주 사용되곤 하는데, 자바 그래픽 엔진을 테스트 하기 위해 사용되기도 하고, Visual C++ .NET의 기능 홍보(?)에 사용되기도 한다.. 이 샘플소스코드는 Microsoft MVP로 활동하던 시절, MSDN 세미나에서 사용했던 샘플이기도 한데, 2004년도에 VS 2003에 포함된 VC++을 홍보하기 위해 많이 사용되었던 샘플이기도 하다.. VC++을 가지고 아주 흥미로운 시도를 한 좋은 샘플이다..
(현재는 그 다음 버젼인 퀘이크3까지 소스코드가 공개되어 있다..)
.NET으로 포팅된 Quake 2 살펴보기
이 샘플이 흥미로운 이유는 공개된 퀘이크2 소스 (C 코드로 되어있다)를 수정하지 않고 .NET 환경에서 바로 사용할 수 있으며, 여기에 몇가지 기능을 더 추가하여 새로 추가되는 기능은 .NET 코드로 작성을 해, 두 코드가 잘 섞여 돌아가는 모습을 보여줬기 때문이다.. 유명한 게임에 내가 원하는 기능을 추가하는 흥미로운 방법으로 보여줘서 샘플로서 효과가 아주 크다고 할 수 있다..

원 게임에는 없는 기능인 레이더 기능(위에 소개된 URL들 중에서 코드프로젝트 사이트에 가보면 화면 캡쳐 이미지가 있다..)이 추가되어 있는데, 이 기능이 .NET 코드로 작성된 코드다.. 즉, C 언어로 작성된 원 게임소스는 컴파일러 및 개발툴에 의해 자동으로 .NET 어셈블리로 빌드되어 추가된 기능과 함께 .NET 환경에서 실행이 되는 것이다..

간단한 빌드 설정만 바꾸면 쉽게 .NET 어셈블리로 빌드가 되는 놀라운(?) VC++의 기능이라 할 수 있겠다.. 예전에 작성된 많은 C 코드들을 쉽게 재활용할 수 있는 기회가 열리기 때문이다.. 하지만, C++ 코드들은 이렇게 되지 못하는 경우가 많아 반쪽짜리 기능 이기도 하다.. .NET을 고려하는 C/C++ 개발자들 중에는 C++ 개발자들이 더 많고, 그들이 C 코드와 C++ 코드 중 어떤 것을 더 많이 가지고 있을지는 뻔하기 때문이다..

이러다 보니 .NET 환경에서의 VC++은 정말 무슨 존재인가 하는 생각이 들기도 한다.. 허브셔터나 스탠리 리프먼 등 많은 C++의 대가들이 대거 Microsoft에 입사하여 C++을 .NET 환경에서 사용하기 편리하게 만드는 작업에 몰두하고 있다.. 이들이 블로그에 올리는 내용이나, 활동하는 뉴스그룹, 메일링 리스트에 관련 내용들이 자주 언급되며 비중도 많이 차지하고 있다.. 하지만, [C++/CLI] Mixed-Type 사용시의 메모리 해제 문제와 같은 글들을 읽어보며 드는 생각은 뭐하러 이렇게 복잡하게 만들어야 하는가 하는 생각 뿐이다..

.NET 환경에서 VC++은 찬밥이 아닌 이유..
  1. Native 코드를 작성할 수 있는 유일한 개발도구이다.. VB .NET 너무 많이 바뀌었다.. C#, 새로운 언어이니 .NET 전용이다..
  2. COM 프로그램을 쉽게 개발할 수 있도록 되었다
  3. 표준 C++ 지원 및 이제는 STL도 지원한다..
  4. 웹서비스 개발에도 최적의 성능을 제공해준다..
  5. Native 코드와 .NET 코드를 섞을 수도 있다..
위와 같은 이유들을 만들어(?) 내긴 하지만, 사실 1번과 5번 이외에는 차라리 C++을 쓰고 말지 하는 생각이 든다.. 굳이 .NET 어셈블리로 만들어 얻는 이득이 없기 때문이다..

이야기가 상당히 다른 방향으로 흘러갔는데, 아무튼 C 코드는 VC++ .NET 덕분에 .NET 환경에서 거의 소스코드의 수정없이 100% 사용이 가능하다는 것을 잘 보여주는 샘플이다..
728x90