TL;DR
- Halo: Combat Evolved의 Xbox 빌드 디컴파일을 바탕으로 Linux·Windows·Android 포트를 제공하며, 세 플랫폼에서 함께하는 최대 128명의 멀티플레이어를 지원함.
- 포트는
bnunu/halo-1의 디컴파일을 기반으로 하며, 해당 프로젝트는punpckhdq/halo의 포크임. - GitHub Actions가 커밋마다 빌드를 생성하고, 메인 브랜치에서 세 플랫폼 모두 통과한 빌드를 새 릴리스로 공개하며 최근 5개 릴리스를 보관함.
- 게임 데이터는 포함되지 않으며, 사용자가 Xbox 디스크 이미지(
.xiso또는.iso)를 지정하면 게임이 맵 파일을 추출함. - Xbox SDK 없이 Python과 ninja, 플랫폼별 도구를 사용해 빌드할 수 있으며, 릴리스·디버그 빌드와 최적화 설정을 제공함.
프로젝트 개요
- 이 프로젝트는 Halo: Combat Evolved 디컴파일을 Linux, Windows, Android로 포팅한 것임.
- 디컴파일 대상은 Xbox 빌드 2342(
cachebeta.exe)이며, SHA-256은4cc87b45f721270392a96f1674ed2b5cd4a7bb4355faeab4531d1cf1884d9520임. - 기반 프로젝트는
bnunu/halo-1이며, 이는punpckhdq/halo의 포크임.
다운로드와 업데이트
- GitHub Actions가 커밋마다 게임 빌드를 생성함. 최신 릴리스의 플랫폼별 빌드는 다음과 같음.
- Linux:
halo-linux-release.zip,halo-linux-debug.zip - Windows:
halo-windows-release.zip,halo-windows-debug.zip - Android:
halo-android-release.zip,halo-android-debug.zip - 플레이에는 릴리스 빌드를 사용함. 디버그 빌드는 첫 번째 어설션 실패에서 멈추고 로그에 내용을 기록하며, 문제를 찾고 보고할 때 사용함.
- 게임은 시작할 때 새 릴리스를 확인하고 설치 여부를 물어보는 자체 업데이트 기능을 갖춤. 자세한 내용은
port/linux/README.md의 업데이트 항목에 있음. - 메인 브랜치에서 세 플랫폼 모두 통과한 각 빌드가 새 릴리스임. 릴리스 페이지에는 최근 5개 릴리스가 보관되며, 최신 빌드에 문제가 있으면 이전 빌드를 받을 수 있음.
게임 데이터
- 포트에는 게임 데이터가 포함되지 않으므로 Halo: Combat Evolved의 Xbox 디스크 이미지(
.xiso또는.iso)가 필요함. 게임의 모든 버전이 작동함. - 유럽(PAL) 버전의 맵은 더 느린 콘솔에 맞춰 제작됐으며, 포트는 두 버전 이용자가 함께 플레이할 수 있도록 PAL 맵을 북미(NTSC) 맵처럼 작동하게 변경함.
- 게임을 처음 시작하면 디스크 이미지를 선택하라는 안내가 표시되고, 게임이
maps/폴더를 추출한 뒤 실행됨. - Linux와 Windows에서는
maps/가 실행 파일 옆에 생성됨. Android에서는 디스크 이미지를 휴대전화에 먼저 복사해야 하며, 앱이 자체 데이터 폴더에maps/를 생성함. 자세한 내용은port/android/README.md에 있음.
플랫폼
- Linux: 32비트 x86 실행 파일, OpenGL 4.5, SDL3. 지침은
port/linux/README.md에 있음. - Windows: 32비트 x86 실행 파일, OpenGL 4.5, SDL3. 지침은
port/windows/README.md에 있음. - Android: arm64 앱, OpenGL ES 3, SDL3. 지침은
port/android/README.md에 있음. - Linux README에는 조작법, 설정, 멀티플레이어 기능도 안내돼 있으며, 이 기능은 플랫폼 간 거의 동일함.
멀티플레이어
- 시스템 링크 게임을 로컬 네트워크와 인터넷에서 플레이할 수 있음.
- 시스템 링크 게임은 최대 128대의 기기에서 128명까지 참여할 수 있음.
- Linux, Windows, Android 기기가 한 게임에 함께 참여할 수 있음.
- 초대 링크로 인터넷 게임에 참여할 수 있으며, 이 프로젝트의 서버는 필요하지 않음.
- 새 네트워크 코드는 각 기기가 자신의 플레이어를 즉시 이동시키고 호스트가 게임의 결정을 내리는 방식임. 자세한 내용은
port/linux/NETCODE.md에 있음.
게임 빌드
- Xbox SDK는 필요하지 않으며, 포트가 게임에서 사용하는 SDK 선언을 제공함. 관련 파일은
port/include/xdk에 있음. - 빌드 절차는 Python과 ninja 설치, 플랫폼별 도구 설치, 저장소 루트에서
python configure.py실행, 플랫폼 대상 지정 빌드 순서임. - 플랫폼별 ninja 대상과 결과물은 다음과 같음.
ninja linux:build/linux/halo- Windows에서
ninja windows:build/windows/halo.exe및SDL3.dll ninja android_apk:port/android/app/build/outputs/apk/debug/app-debug.apk- 대상을 지정하지 않고
ninja를 실행하면 현재 컴퓨터용 게임을 빌드함. tools/ci_build.py는 GitHub Actions와 같은 빌드를 수행하며, 예를 들어python tools/ci_build.py linux release를 실행함.
빌드 옵션
configure.py에 전달할 수 있는 옵션은 다음과 같음.- 옵션 없음: 디버그 빌드이며 어설션 실패 시 게임이 멈춤.
--release: 릴리스 빌드이며, 정식 게임과 마찬가지로 어설션을 검사하지 않음.--portable: Linux와 Windows 빌드가 모든 x86-64 프로세서에서 작동하도록 함. 다른 사람에게 배포할 빌드에 사용함.--lto=thin,--lto=off: 링크 시간 최적화를 줄여 링크 속도를 높임.--pgo=off: 프로파일 기반 최적화를 사용하지 않음.--pgo=train: 새 최적화 프로파일을 기록함. 자세한 내용은 최적화 프로파일 항목에 있음.--portable을 지정하지 않으면 Linux와 Windows 빌드가 빌드에 사용한 프로세서의 명령어를 모두 사용함(-march=native). 이 빌드는 다른 컴퓨터에서 항상 시작되는 것은 아님.
최적화 프로파일
- 빌드는 게임 프로파일을 사용해 코드를 최적화함.
- Linux와 Android:
pgo/halo_linux.profdata - Windows:
pgo/halo_windows.profdata - 프로파일을 사용하려면 clang 22 이상이 필요하며, 이전 버전의 clang에서는 프로파일을 사용하지 않음.
- 새 프로파일을 기록하려면 기존 프로파일을 삭제하고
python configure.py --pgo=train을 실행한 뒤ninja linux또는ninja windows를 실행함. - 빌드는 메인 메뉴와 캠페인 각 레벨의 첫 1분을 실행하며, 절차는 약 15분 동안 진행됨. 게임 데이터가
assets/에 있어야 함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요