TL;DR

  • benilla는 Rust와 Bevy로 처음부터 작성한 WoW 1.12.1 클라이언트로, 원본 프로토콜과 사용자가 제공한 게임 데이터를 이용해 캐릭터 생성부터 레이드까지 게임 전체를 플레이할 수 있는 구현임.
  • 원본 클라이언트 코드, 제삼자 WoW 크레이트, 게임 자산을 포함하지 않고 파일 형식, 네트워크 프로토콜, 인터페이스 엔진을 자체 구현함.
  • FrameXML·Lua 기반의 기본 인터페이스와 다수의 1.12 애드온을 실행하며, 월드 렌더링·모델 애니메이션·이동·네트워킹·오디오 기능을 갖춤.
  • 현재 완전하게 플레이할 수 있으며, 소규모 기능 개선과 애드온·옵션·성능 작업이 진행 중임.
  • macOS·Linux·Windows에서 빌드할 수 있고, 영문 빌드 5875 클라이언트 데이터와 Warden이 꺼진 1.12.1 서버가 필요함.

benilla 소개

  • benilla는 캐릭터 생성, 퀘스트, 전문기술, 던전, 공격대, 전장, 명예, 파티, 길드, 거래, 우편, 경매장을 비롯해 게임 전체를 플레이할 수 있는 완전한 WoW 1.12.1 클라이언트임.
  • 기본 1.12 인터페이스와 사용자의 애드온을 사용하며, 원본 프로토콜로 1.12.1 서버에 연결하고 사용자가 보유한 1.12.1 설치본에서 게임 데이터를 읽음.
  • 모든 파일 형식, 네트워크 프로토콜, 인터페이스 엔진을 처음부터 작성했으며, 원본 클라이언트 코드와 제삼자 WoW 크레이트, 번들 게임 자산을 전혀 포함하지 않음.

포함 기능

  • 파일 형식: MPQ 패치 체인, BLP, DBC, ADT, WDT, WDL, M2, WMO를 포함한 전체 자산 스택의 리더를 제공하고, 이를 Bevy의 자산 소스로 연결함.
  • 월드: 지평선까지 스트리밍되는 지형, 포털 컬링과 실내 조명을 적용한 건물, 장식물과 지면 오브젝트, 수영 가능한 물, 하늘과 날씨, 클라이언트 자체의 낮과 밤 조명·안개·감마를 제공함.
  • 모델: 전체 애니메이션 컨트롤러를 갖춘 GPU 스키닝 M2, 파티클, 리본, 주문 시각 효과를 지원함. 캐릭터는 외형 설정, 방어구 합성, 무기와 마법부여 광채, 변신 형태, 은신, 탈것까지 구현함.
  • 이동: 양방향 네트워크 이동, 느린 낙하부터 속박까지 서버가 부여하는 이동 모드, 충돌 처리가 있는 추적 카메라, 배와 비행선, 택시 비행을 지원함.
  • 네트워킹: SRP6 인증부터 월드 세션 암호화와 ECS로의 오브젝트 미러링까지 구현하며, 이동과 채팅부터 전투·주문·파티·공격대·퀘스트·거래·우편·경매장·전장까지 게임 전반을 다룸.
  • 인터페이스: 사용자의 설치본에 있는 패치 체인에서 기본 1.12 인터페이스를 실행하는 FrameXML·Lua 엔진을 제공함. Questie, pfUI, Bagnon, Bartender2를 비롯한 대부분의 제삼자 1.12 애드온이 실행됨.
  • 선택에 따라 옵션 창과 ESC 메뉴는 1.12가 아니라 Classic Era 클라이언트의 구성을 따름.
  • 오디오: 클라이언트 자체의 선택·크로스페이드 규칙에 따른 음악·환경음·효과음과 실내 및 수중 전환, 지역별 잔향을 제공함.
  • 파일 형식 리더와 UI 엔진 핵심부는 Bevy에 의존하지 않는 순수 Rust로 작성됐으며, 월드 렌더러는 게임 클라이언트를 연결하지 않고도 실행됨.
  • docs/MAP.md에는 코드에서 생성된 크레이트 및 하위 시스템 전체의 지도가 있음.

상태

  • 현재 완전하게 플레이할 수 있음.
  • 남은 작업은 완성된 클라이언트와 작동하는 클라이언트를 구분하는 자잘한 기능의 긴 목록이며, 이슈로 추적 중임.
  • 애드온, 옵션, 성능 작업은 계속 진행 중임.
  • benilla는 충실한 1.12.1 클라이언트이자 다른 개발의 기반임.
  • 사전 빌드 다운로드는 제공하지 않음. 패키지 빌드, 특정 서버의 변경 사항, 1.12.1에 없던 기능은 포크에 맡기며 포크를 환영함. GitHub에서 모든 공개 포크를 확인할 수 있음.
  • 다른 확장팩이나 클라이언트 버전, Warden(부정행위 방지)은 계획에 없음.

실행 방법

  • benilla는 macOS, Linux, Windows에서 빌드 및 실행 가능함.
  • 필요한 항목은 영문 1.12.1 클라이언트(빌드 5875)의 게임 데이터임. benilla는 해당 데이터를 읽기만 함.
  • Warden이 꺼진 1.12.1 서버가 필요함. 개발 환경에서는 Warden이 꺼진 상태로 제공되는 vmangos를 사용하며, cMaNGOS와 다른 1.12.1 코어도 동일한 프로토콜을 사용함.
  • 안정 버전 Rust와 C 컴파일러가 필요함. 클라이언트의 Lua를 소스에서 빌드하기 때문임.
  • macOS에는 Xcode 명령줄 도구가 필요함.
  • Linux에는 ALSA·udev 개발 패키지와 pkg-config가 필요함.
  • Windows에는 Rust 설치 프로그램이 설정하는 MSVC 빌드 도구가 필요함.
  • WOW_DATA를 게임 설치의 Data 폴더 경로로 설정하고 cargo run --release -p benilla를 실행함. Windows PowerShell에서는 $env:WOW_DATA에 해당 경로를 설정한 뒤 같은 Cargo 명령을 실행함.
  • 각 릴리스는 Releases 페이지의 태그로 제공됨. 해당 릴리스를 처음 실행할 때 git checkout <tag>를 사용하며, main은 개발 최신 버전임.
  • 저장소 루트에 WoW라는 이름으로 설치본을 가리키는 링크를 만들면 WOW_DATA 설정을 대신할 수 있음. macOS·Linux에서는 심볼릭 링크를, Windows에서는 관리자 권한이 필요 없는 정션을 사용할 수 있음.
  • 서버 기본 주소는 기본 인증 포트인 localhost:3724임. WOW_HOST를 설정해 다른 서버를 지정할 수 있으며, 포트가 재매핑된 경우 play.example.com:5000 형식으로 입력 가능함. 로그인 화면의 Realmlist 버튼으로 서버를 지정하면 설정이 기억됨.
  • 자격 증명은 로그인 화면에서 입력하거나 WOW_USER와 WOW_PASS를 설정해 로그인 화면을 건너뛸 수 있음.
  • 설정, 스크린샷, 애드온은 저장소 루트의 benilla-config/에 저장됨. 1.12 애드온은 benilla-config/AddOns/에 넣음.
  • 플레이어 빌드부터 테스트까지의 나머지 안내는 docs/CONTRIBUTING.md에 있음.

기여

  • 이슈 제보와 풀 리퀘스트 제출이 열려 있음.
  • docs/CONTRIBUTING.md에서 작업을 시작할 위치, 반영 기준, 변경 사항의 평가 방식, 풀 리퀘스트가 열린 뒤의 절차를 안내함.
  • 버그 제보, 질문, 아이디어는 Discord에서도 환영함.
  • 초기 영감과 파일 형식 안내는 wowemulation-dev 커뮤니티, 특히 warcraft-rs에서 얻음.

라이선스와 프로젝트 안내

  • benilla는 독립 팬 프로젝트이며 Blizzard Entertainment와 제휴하거나 Blizzard의 승인을 받은 프로젝트가 아님.
  • 아트, 모델, 사운드, 맵, MPQ 콘텐츠, FrameXML 등 Blizzard 콘텐츠를 배포하지 않음. 사용자가 합법적으로 취득한 1.12.1 클라이언트를 제공해야 하며, 기본 인터페이스는 실행 중 해당 클라이언트의 FrameXML을 사용함.
  • crates/benilla-app/assets/ui/ 아래의 일부 파일은 자체 제작물이며 기본 파일의 복사본이 아님. 기본 파일에 적용하는 어댑터, 자체 제작한 설정 창과 스크립트 오류 로그로 구성됨.
  • World of Warcraft는 Blizzard Entertainment, Inc.의 상표임.
  • 자체 코드는 선택에 따라 MIT 또는 Apache 2.0 라이선스로 제공함. third_party/ 아래에 포함된 오디오 엔진 kira와 WoW 1.12 클라이언트 방언에 맞춰 패치한 Lua 5.1은 각각 자체 업스트림 라이선스를 유지함.