
Claude Code로 20년 전 상용 게임을 거의 고치지 않고 브라우저로 이식하기까지
핵심 포인트
- 12003년 출시된 윈도우 전용 온라인 TPS 게임인 GunZ: The Duel이 WebAssembly와 WebGL을 사용하여 브라우저에서 다운로드나 설치 없이 플레이 가능하도록 성공적으로 이식되었습니다.
- 2이 프로젝트의 핵심은 Direct3D 명령을 실시간으로 WebGL로 변환하는 '번역 레이어'로, 원본 게임 코드의 수정을 최소화했으며, 특히 AI 도구인 Google Antigravity와 Claude Code가 이 구현에 결정적인 역할을 했습니다.
- 3렌더링 외에도 게임 서버를 브라우저 내 Web Worker로 구동하고, 사운드, 입력, 파일 시스템 처리 등 다양한 플랫폼 의존성 문제를 해결하여 완전한 게임 이식을 달성했으며, 저자는 AI가 없었다면 불가능했을 것이라고 강조했습니다.
이 논문은 2003년 출시된 윈도우 전용 온라인 TPS 게임인 '건즈 온라인(GunZ: The Duel)'을 WebAssembly (wasm) 및 WebGL을 사용하여 웹 브라우저에서 실행 가능하도록 이식한 프로젝트에 대해 설명합니다. 본 프로젝트의 핵심 목표는 기존 게임 소스 코드를 거의 수정하지 않고도 브라우저 환경에서 원본 게임과 완전히 동일하게 동작하도록 구현하는 것이었습니다.
핵심 방법론 및 기술적 세부사항:
- WebAssembly (Wasm) 기반 이식:
- 건즈의 클라이언트 및 서버 C++ 소스 코드를 Emscripten을 사용하여 WebAssembly로 컴파일했습니다. 이는 브라우저에서 고성능의 C++ 코드를 실행하기 위한 기반을 마련했습니다.
- 특히 놀라운 점은 게임 서버 또한 C++ 코드를 WebAssembly로 빌드하여 동일한 브라우저 탭 내의 Web Worker에서 실행되도록 구현했다는 것입니다. 클라이언트와 서버 간의 통신은 네트워크 대신
postMessage메시지 교환으로 대체하여, 하나의 탭 안에서 클라이언트와 서버가 모두 로컬로 완결되는 "서버리스" 게임 환경을 구축했습니다. 사용자 데이터(플레이어 정보, 전적 등)는 SQLite와 IndexedDB 기반의 파일 시스템인 IDBFS를 통해 영속성을 확보하여 탭을 닫아도 데이터가 유지됩니다. 물론 WebSocket을 통해 실제 외부 서버에 접속하여 온라인 대전도 가능하도록 설계되었습니다.
- Direct3D 9 의존성 제거 및 WebGL 변환 (Translation Layer):
- 가장 큰 기술적 난관은 건즈가 Windows의 Direct3D 9 API에 강하게 의존하고 있었다는 점입니다. 브라우저 환경에는 Direct3D가 없으므로, 기존 Direct3D 호출 코드를 WebGL로 일일이 변경하는 것은 상업용 게임 코드베이스의 방대한 규모(수만 줄)와 복잡성으로 인해 비현실적이었습니다.
- 이를 해결하기 위해, 게임 코드와 그래픽 API 사이에 "번역 레이어(Translation Layer)"를 삽입하는 방식을 채택했습니다. 이는 Direct3D 9 API와 동일한 인터페이스를 가지면서 내부적으로는 WebGL 명령으로 변환하여 실행하는 래퍼(Wrapper) 라이브러리인
d3d9-webgl을 개발하는 방식입니다. - 이 래퍼는 게임의 렌더링 코드를 전혀 수정하지 않고 Direct3D 9 호출을 실시간으로 WebGL로 번역하여 브라우저에서 렌더링되도록 합니다. 이
d3d9-webgl래퍼의 구현은 Google Antigravity와 Claude Code와 같은 AI 에이전트의 도움을 받아 이루어졌습니다. 이 방식은__BLOCK_FORMULA_0__변환을 통해 플랫폼 의존성을 제거하는 핵심 기술입니다.
- 렌더링 외 이식 작업:
- 사운드: 기존 FMOD 사운드 미들웨어를 브라우저의 Web Audio API로 완전히 교체했습니다. 3D 사운드(
PannerNode), BGM 스트리밍, 효과음 거리 컬링 등 게임에 필요한 사운드 기능을 재구현했습니다. - 입력: 브라우저의 키보드 및 마우스 이벤트를 Win32의
WM_KEYDOWN,WM_MOUSEMOVE,WM_CHAR등과 같은 메시지로 변환하여 게임 엔진의 메시지 펌프에 전달했습니다. 마우스 캡처를 위해 Pointer Lock API를 사용하고, 텍스트 입력을 위해 HTML 오버레이를 연동했습니다. - 파일 시스템 및 에셋 로드 최적화: 건즈 전용 아카이브 형식인
.mrs에셋 파일은 Emscripten의 MEMFS에 로드됩니다. "2단계 로드" 방식을 사용하여 필수 파일 7개만 먼저 로드하고, 장비 파츠 등은 백그라운드에서 다운로드하도록 했습니다. Cache API를 활용하여 두 번째 실행부터는 네트워크 없이 즉시 게임을 시작할 수 있도록 구현했습니다. - 게임 데이터 최적화: 브라우저 환경의 네트워크 로딩 제약을 극복하기 위해 데이터 크기 최적화를 진행했습니다. 특히 효과음 파일(WAV)을 Opus 형식으로 변환하여 44.3MB에서 5.30MB로 약 88% 용량을 절감했습니다. S3 + CloudFront를 통한 CDN 구성을 통해 전 세계 어디에서나 빠르게 에셋을 다운로드할 수 있도록 안정성을 확보했습니다.
- 사운드: 기존 FMOD 사운드 미들웨어를 브라우저의 Web Audio API로 완전히 교체했습니다. 3D 사운드(
AI의 역할:
이 프로젝트의 성공에 있어 AI(Google Antigravity 및 Claude Code)는 결정적인 역할을 했습니다. 저자는 Direct3D 9 변환 레이어 구현과 수많은 버그 해결 과정에서 AI가 없었다면 프로젝트 완성이 불가능했을 것이라고 강조합니다. AI는 개발자가 직접 방대한 코드를 수정하고 이식하는 대신, 복잡한 변환 로직 및 문제 해결에 기여하여 프로젝트를 가속화하고 성공으로 이끌었습니다.
결과적으로, 이 프로젝트는 20년 전의 윈도우 전용 상용 게임을 거의 코드를 수정하지 않고도 브라우저에서 구동 가능하게 이식하는 데 성공했으며, 이는 AI의 발전이 기존에는 불가능하다고 여겨지던 소프트웨어 이식에 어떤 새로운 가능성을 제시하는지 보여주는 중요한 사례입니다.