Jake2

Jake2는 id Software의 1997년 3차원 1인칭 슈팅 게임 《Quake II》의 게임 엔진을 Java 언어로 이식한 자유 소프트웨어 프로젝트다. id Software가 공개한 GPL 엔진 코드를 바탕으로, bytonic Software가 2003년부터 Java 기반 실행 환...

분류게임 엔진 소스 포트, 3차원 FPS 엔진
원본 엔진Quake II 엔진 (id Tech 2 계통)
원 개발사id Software
Java 이식 프로젝트bytonic Software, Jake2 개발 공동체
프로젝트 시작2003년
초기 개발진Holger Zickner, Carsten Weiße, Rene Stoeckel
현대 유지보수Daniil Bubnov (2019년 이후)
구현 언어Java, 일부 현대 포크의 Kotlin
실행 환경JVM
과거 그래픽스JOGL, JOAL, LWJGL 2
현대 개발LWJGL 3·libGDX를 이용한 Cake 클라이언트
엔진 구성클라이언트·전용 서버·게임 로직·공통 계층
주요 데이터BSP 맵, MD2 모델, 원본 게임 그래픽·사운드
네트워크Quake II 프로토콜 호환 구현
게임 모듈Java로 이식한 규칙, 원래의 네이티브 game.dll과 비호환
주요 플랫폼Windows, Linux, macOS 등 JVM·그래픽 라이브러리 지원 환경
빌드 도구Gradle
개발 중점고전 게임의 Java 이식, 호환성·리팩터링
공개 라이선스GNU GPL v2
게임 데이터상용 《Quake II》 자산 별도 필요
원본 배포Jake2 SourceForge
현대 소스demoth/jake2

Jake2는 id Software의 1997년 3차원 1인칭 슈팅 게임 《Quake II》의 게임 엔진을 Java 언어로 이식한 자유 소프트웨어 프로젝트다. id Software가 공개한 GPL 엔진 코드를 바탕으로, bytonic Software가 2003년부터 Java 기반 실행 환경에서 원래 게임의 렌더링·입력·오디오·게임 로직과 네트워크 기능을 재현하는 작업을 시작했다. 운영체제에 직접 연결되는 일부 멀티미디어 기능에는 Java 네이티브 바인딩을 사용하지만 게임을 구성하는 주된 코드는 Java로 옮겼다. Jake2는 새로운 독립 상용 게임보다 기존 Quake II 엔진의 언어 이식과 장기적 실행 호환성을 연구하는 프로젝트에 해당한다.[1]

Jake2의 초기 개발은 Holger Zickner, Carsten Weiße, Rene Stoeckel을 비롯한 bytonic Software 개발진이 수행했다. 원본 Quake II 엔진의 C 코드를 Java로 옮기는 과정에서는 메모리와 자료 구조·플랫폼 입출력·네트워크 처리의 표현 방식을 JVM에 맞게 바꾸어야 했다. 초창기 Jake2는 그래픽스 렌더링에 JOGL과 사운드에 JOAL을 이용했으며, 0.9.4부터 LWJGL을 대체 드라이버로 지원했다. 과거의 프로젝트 문서는 Java 1.4 실행 환경과 Windows 2000/XP, Linux 및 Mac OS X를 당시의 대상으로 안내한다.[2]

프로그램 구조는 qcommon 공통 엔진 코드와 game 게임 규칙, client·server 및 전용 서버와 그래픽·오디오 처리 등으로 분리된다. Quake II의 맵을 표현하는 BSP 공간 자료와 MD2 캐릭터 모델, 텍스처·사운드 등 기존의 게임 형식을 읽도록 설계됐다. 서버는 여러 클라이언트의 플레이 상태를 유지하고 게임 규칙을 처리하며 클라이언트는 사용자의 입력과 화면 표시·예측 기능을 다룬다. 동일한 게임 데이터 형식을 사용하더라도 원래 Quake II의 네이티브 DLL에 컴파일된 게임 모드를 그대로 불러올 수 있다는 뜻은 아니다.

2019년 이후 Daniil Bubnov가 현대적인 Java 개발 환경에 맞추어 코드를 유지보수하고 있다. 공개 저장소는 과거의 Jake2 실행 클라이언트가 오래된 LWJGL 2와 OpenGL 즉시 모드(immediate mode)에 의존했기 때문에 장기 유지보수가 어려웠다고 설명한다. 이에 따라 종래의 클라이언트 소스는 jake2-legacy 브랜치로 보관하고, JVM용 게임 프레임워크인 libGDX와 현대 LWJGL 계층을 이용하는 새 Cake 클라이언트를 개발하고 있다. 이는 원래 엔진의 게임 규칙·프로토콜을 재사용하면서 그래픽스와 입력 UI를 점진적으로 교체하는 이식 전략이다.[3]

현대 코드베이스의 구성에는 cake와 game, dedicated, qcommon, server, maptools와 관련 Gradle 프로젝트들이 있다. 공식 안내는 JDK 21을 권장하면서 JDK 11과 17도 이용 가능하다고 설명한다. 전용 서버를 실행하거나 ./gradlew :cake:cake-client:run으로 새로운 클라이언트를 실행할 수 있으며, 모델 뷰어를 배포하는 작업도 지원한다. 이 설명은 현대 포크를 기준으로 한 것이고 원래의 2000년대 Jake2나 다른 유지보수 포크의 요구 버전과 서로 다르다.[4]

Jake2는 네트워크상에서 다른 Quake II 클라이언트·서버 구현과의 호환을 중요한 목표로 삼는다. 현대 저장소에서는 Yamagi Quake II, Q2pro와 같은 구현과 네트워크 통신이 가능하다고 설명하며 원본의 맵·모델·소리·텍스처를 읽는 기능을 유지한다. 반면 원래 게임이 Windows DLL인 game.dll을 통해 로딩하던 일부 네이티브 사용자 모드는 직접 지원하지 않는다. 원래 Quake II의 맵과 게임 콘텐츠를 실행하려면 적법하게 획득한 원본 데이터 또는 지원되는 데모 데이터가 필요하다.[5]

Jake2의 소스 코드는 GNU GPL v2에 따라 공개되지만 《Quake II》의 원본 그래픽과 음악·맵·상용 콘텐츠는 별도 저작권에 속한다. 현재 Jake2가 구현 언어와 플랫폼 백엔드를 교체하더라도 엔진 소스에 대한 GPL 조건과 게임 콘텐츠의 상용 권리를 구분해야 한다. 역사적으로는 동일한 게임 엔진과 게임 데이터가 C 네이티브 런타임뿐 아니라 JVM 환경에서도 실행될 수 있음을 보인 Java 게임 개발 초기의 대표적인 이식 사례이며, 현대 포크의 작업은 장기간 유지되는 소스 포트의 구조적 현대화를 보여준다.[6]

역사

Quake II 엔진과 원본 기술 계보

Java 이식 설계

JVM 실행 모델

클라이언트와 전용 서버

맵과 게임 데이터 형식

렌더링 및 그래픽스 백엔드

입력과 오디오 처리

게임 규칙과 네트워크 호환성

현대 Cake 클라이언트

빌드와 개발 도구

플랫폼별 실행

소스 공개와 라이선스

기술적 영향

관련 문서

  1. Jake2 원본 SourceForge 저장소 ↩
  2. Jake2 원본 프로젝트 README와 요구 환경 ↩
  3. Jake2 현대 포크: Cake 개발 방향 ↩
  4. Jake2 현대 README: 빌드와 모듈 ↩
  5. Jake2: 데이터·모드 및 네트워크 호환성 ↩
  6. Jake2 라이선스와 코드 저장소 ↩