월드 오브 워크래프트

역사 복원하기: 월드 오브 워크래프트 클래식 제작 패널 요약

역사 복원하기: 월드 오브 워크래프트 클래식 제작 패널 요약

월드 오브 워크래프트 커뮤니티는 블리즈컨 2018에서 처음으로 월드 오브 워크래프트 클래식을 체험해 볼 수 있는 시간을 가졌습니다.플레이어들이 "블리자드 품질"을 실제로 구현하는 작업이 얼마나 큰일인지 이해할 수 있도록 하기 위해, 소프트웨어 엔지니어인 Brian Birmingham과 Omar Gonzalez, 게임 디렉터 Ion Hazzikostas가 지난 토요일 오후(태평양 표준시 기준)에 무대에 올라 다양한 정보를 공유했습니다.

퍼즐 조각 찾기

기존의 월드 오브 워크래프트 경험을 다시 구현하는 여정을 떠나기 전에, 월드 오브 워크래프트 클래식 팀은 먼저 어떤 요소들을 새롭게 작업해야하는지 살펴보았으며 최종적으로 게임 개발의 필수 요소를 데이터베이스 데이터, 아트 애셋, 그리고 소스 코드의 세 가지로 압축했습니다.

  • 데이터베이스 데이터란 캐릭터나 몬스터의 생명력, 아이템에 붙은 기력 수치, 출현 장소 등 무수히 많은 데이터 포인트와 같은 게임의 다양한 측면을 포함합니다.
  • 아트 애셋은 그림자 숨기를 한 나이트 엘프의 모습이나 불덩이 작렬이 내는 소리, 도끼를 휘두르는 오크의 동작에 이르기까지 모든 것을 아우릅니다.
  • 소스 코드는 게임 디스플레이 방식, 입력을 처리하고 사람들을 이어 주는 방법 등에 대한 지침을 포함합니다.

시작에 앞서 지금의 소스 코드 기록이 얼마나 오래되었는지를 파악해야 했고, 확인 결과 월드 오브 워크래프트와 연관되어 있을 수 있는 최초의 코드가 개발을 시작하기도 전인 1997년까지 거슬러 올라간다는 것을 알아냈습니다.

시작은 좋았지만 개발자들이 데이터베이스 데이터의 업데이트를 다루고 있는 방식에는 몇 가지 문제가 있었습니다. 여러 가지 브랜치의 게임으로 나뉘어 각각 따로 작업하고 개발할 수 있는 지금의 블리자드 소스 코드와 달리, 초창기의 데이터베이스 코드는 업데이트가 있을 때마다 기존의 코드를 덮어 쓰는 방식이었습니다. 다행히 그 방식은 출시 후에 바로 바뀌었고 그래서인지 확인해 보니 1.12 이전 버전의 데이터도 남아 있더군요.

마지막으로, 보존되어 있는 모든 데이터베이스 데이터와 일치하는 아트 애셋을 오래된 테이프 백업에서 찾을 수 있었습니다.

세 가지 요소를 모은 결과, 시험 삼아 게임에 로그인하여 캐릭터를 새로 만들고, 멧돼지를 잡고, 퀘스트도 몇 개 완료할 수 있었죠.

최신 세계 속의 클래식 게임 플레이

실제로 돌아가는 게임 버전이 남아 있다고는 해도, 극복해야 하는 난관이 산재해 있었습니다. 클라우드 지원, 블리자드 Battle.net 데스크톱 앱 통합, 고객 지원 기능, 그리고 수많은 버그와 결함의 수정 등, 게임을 지탱하는 기술들은 게임 출시 후로 지금까지 무척 많은 변화를 겪었습니다.

이런 장애물을 넘기 위해, 저희 팀은 가지고 있는 애셋 중에서 좋은 것(아트와 데이터)과 나쁜 것(코드)을 살펴보았습니다. 옛날 아트 애셋과 데이터를 최신 코드 안에서 활용해 서로 잘 어우러지는지 확인하고 싶었죠. 처음에는 잘되지 않았지만, 몇 번의 시행착오를 거치면서 요소들을 잘 버무려서 플레이할 만한 결과물을 만들기 위한 "개념 증명"을 완성해 낼 수 있었죠. 그리고 최신 플랫폼과 함께 블리자드의 기준에 맞는 품질을 구현할 수 있다는 자신감도 얻었습니다.

프로토타입에서 체험판으로

데이터베이스 데이터와 소스 코드, 그리고 아트 애셋은 집을 짓는 벽돌처럼 서로 연계되어 지형, 게임플레이, 애니메이션, 광원 효과 등 플레이어가 접하는 요소들을 만들어냅니다. 그리고 구현하고자 하는 요소에 따라 이 "벽돌"들이 상호작용하는 방식도 달라져야 합니다.

이 상호작용이라는 것을 이해하기 쉽게 설명하기 위해, 지형을 예로 살펴보겠습니다. 지형을 만들려면 언덕과 계곡, 나무, 건물 등을 배치해야 합니다. 옛날에 쓰던 지형 데이터 파일을 새로운 최신 게임 시스템에 연결하는 과정에서, 저희는 시스템이 데이터의 형태를 보는 방식에 차이가 있음을 알아냈습니다. 이러한 차이 때문에 최신 시스템과 과거의 데이터가 제대로 연계되지 않아, 콜카르 야영지가 물에 잠겨 있다거나 대격변 시대의 불에 탄 나무들이 클래식 세계에서 나타나는 기이한 현상들이 발생했습니다.

1.12 지형 데이터

1.12 엔진

최신 엔진

지형 높이

사물 배치

지형 높이

사물 배치

지형 높이

사물 배치

다행히 월드 오브 워크래프트의 최신 편집기가 데이터 변환 기능을 갖추고 있어서, 지형 데이터는 격전의 아제로스에 사용했던 것과 같은 편집기로 변환이 가능했습니다. 최신 편집기는 옛날 지형 포맷을 불러와 현재의 지형 포맷으로 바꾸고 최신 엔진에 맞게 내보내 것이 가능했기에 모닥불의 위치나 나무의 모습 등, 문제가 되는 부분들을 수정할 수 있었습니다.

또 극복해야 했던 난관 하나는, 데이터 보관과 병합의 문제였습니다. 월드 오브 워크래프트는 각기 다른 개발 단계마다 항상 여러 버전의 업데이트 혹은 패치를 동시에 개발하고 있습니다. 패치 하나에 아트 애셋이나 지형 파일을 추가한다면 그 이후 버전의 패치에도 이런 변화가 자동으로 적용돼야 합니다. 14년이라는 기간 동안 이러한 작업은 항상 직선적인 시간대에서 이루어졌습니다. 즉, 현 개발 단계에 복원한 클래식 패치를 그냥 단순히 끼워 넣었다면, 지금 있는 모단 호수의 댐 같은 환경을 구 버전으로 덮어 쓰게 됐을 겁니다. 그랬다면 격전의 아제로스 출시에도 문제가 발생했겠죠.

이를 막기 위해 저희는 사용 중인 각종 툴에 몇 가지 새로운 기술을 습득시켜, 현재 버전의 게임을 건드리지 않으면서 클래식 패치를 적용했습니다. 1.12 데이터를 새 프로젝트에 복사하고 툴에 데이터를 서로 구분하는 방법을 습득시킨 덕분에, 이제는 본 게임의 패치를 건드리지 않고 변경 사항이 클래식 안에만 적용되도록 패치를 만들 수 있게 되었습니다. 디렉토리를 복사하는 일처럼 간단해 보일 수도 있겠지만, 모든 툴에 이를 습득시켜 자동으로 편집하도록 하는 작업은 무척 까다로운 부분입니다. 내부 툴을 사용할 수 있다는 것은 큰 장점이며, 클래식 역시 저희의 인프라와 데이터를 모두 활용할 수 있게 만들고 싶었습니다.

클래식 모델과 애니메이션

저희는 또한 모델의 클래식의 느낌을 살려 완전히 복원하였지만, 이 과정에서 일부 손상된 모델이 발견되었습니다. 어떤 경우에는 텍스처가 손실되어, 저희는 해당 아이템들이 어떤 모습이어야 하는지 조사하여야 했고 시스템에서 수정하기도 했습니다.

오리지널 애니메이션도 복원되었지만, 월드 오브 워크래프트의 애니메이션 시스템은 게임 플레이 코드와 매우 밀접하게 연결되어 있습니다. 그래서 데이터와 코드가 애니메이션을 1.12 당시의 모습으로 표현할 수 있도록 수정 작업을 해야 했습니다. 그 와중에 쓰러져 있어야 하는 모델이 똑바로 서 있는 등의 버그가 생겼지만, 몇 번의 수정을 거쳐 문제들을 바로잡을 수 있었습니다.

직업 시스템 복원

기존의 게임 속 어떤 직업 시스템은 최근에는 동일한 시스템이 존재하지 않기도 합니다. 그 영향을 가장 많이 받는 직업은 아마도 사냥꾼일 것입니다. 소환수의 만족도와 충성도 및 훈련 시스템이 없어졌고, 원거리 무기와 근접 무기도 이제는 함께 쓸 수 없습니다. 즉, 이에 대한 최신 시스템 자체가 존재하지 않기 때문에, 예전 데이터를 새 시스템으로 변환하는 방식은 쓸 수가 없습니다. 이 경우에는 옛날 코드를 가져와서 쓰는 수밖에 없었고, 실제로 그렇게 했습니다. 다행히 복원은 순조롭게 진행되었지만, 다시 화살을 사거나 애완동물에게 먹이를 줘야 하는 상황은 몇몇 내부 테스트 인원들을 놀라게 하기도 했습니다.

도적의 연계 점수 시스템은 또 다른 도전과제를 주기도 했습니다. 최신의 자원 시스템은 연계 점수가 차고 떨어지는 원칙은 알지만, 대상을 변경했을 때 점수를 잃는 원칙은 모르기 때문입니다. 또한 예전의 전투 계산식도 고려 대상입니다. 이 경우에는 치명타와 강타를 포함하는 이전 전투 계산식의 코드를 가져왔습니다. 치명타나 강타가 발생할 확률은 방어하는 쪽의 방어 수치와 공격하는 쪽의 무기 숙련 수치에 의해서도 변합니다. 그렇습니다. 무기 숙련이 돌아옵니다. 클래식 게임의 무기 숙련에 대한 데이터는 있었지만, 무기를 사용했을 때 숙련도를 올려 주고 무기 숙련도에 따라 공격이 제대로 맞거나 빗맞을 확률이 달라지게 하는 코드를 복원해야 했습니다.

사용자 인터페이스 및 광원 효과

캐릭터 화면이 사용자 인터페이스의 대표적인 예입니다. 저희는 이 인터페이스를 복원하고, 캐릭터 뒤쪽의 화면 효과와 광원 효과에서도 예전의 느낌을 되살리고자 했습니다. 완벽하다고 장담하긴 힘들지만, 계속 비교하면서 최대한 똑같이 구현하기 위해 모든 방면으로 최선을 다하고 있다는 말씀만은 드릴 수 있습니다.

광원 효과의 예시로는 엘윈 숲을 들 수 있습니다. 워크래프트는 과거에 일정 기간에 걸쳐 모든 광원 효과 계산식을 수정했으며, 그에 따라 환경 아티스트들은 전 지역을 다시 돌아보며 새로워진 계산식을 적용하여 광원 효과를 향상시켰습니다. 오리지널의 느낌을 되살리기 위해서는 이러한 변화를 원래대로 되돌려야 합니다. 가장 먼저 한 작업은 과거의 광원 데이터를 복원하는 것이었습니다. 이 작업을 통해 오리지널의 광원에 훨씬 근접할 수 있었으며, 거리 및 안개의 계산식을 조절하고 그림자 효과도 조절하여 옛날의 광원 느낌을 한층 살려내는 데 성공했습니다.

그래서 작업은 끝났나요?

이쯤 되면 작업이 완료되었는지, 아니면 그냥 레퍼런스 클라이언트를 업데이트하는 것이 더 쉽지 않은 건지 궁금하시겠죠.

지금까지 이 프로젝트를 작업하고 온갖 버그와 난관을 극복하는 동안에도 변함없이 발생했던 문제 한 가지는, 지금 있는 것과 저희가 목표로 하는 것의 차이가 뚜렷이 보인다는 점입니다. 지금의 월드 오브 워크래프트를 보면 현재 버전과 클래식 버전의 차이가 명확히 보입니다. 레퍼런스 클라이언트를 업데이트하려 한다면, 수백만 명이 동시에 접속하지 않는 이상 드러나지 않는 (악용 여지가 있는) 결함이나 충돌 현상 등 눈에 보이지 않는 변화들을 계속 추적해야 할 것입니다. 저희는 어렵고 가시성이 떨어지는 방식을 택하기보다, 할 일을 뚜렷하고 명확하게 볼 수 있는 방식으로 문제에 접근하기로 했습니다. 

비록 여러분이 오늘 월드 오브 워크래프트 클래식 체험판을 플레이해보실 수 있을지라도 아직 작업은 끝나지 않았으며, 은행이나 경매장 같은 대도시의 기능들을 살펴보아야 합니다. 던전과 공격대를 테스트하여 보스의 능력이 여전히 정상적으로 작동하는지 확인하고, PvP 시스템도 모두 점검해 보아야 합니다. 저희는 이런 전반적인 모든 것들을 복원하고 계속해서 클래식 게임을 다시 구현하는데 최선을 다할 것입니다.

철학과 향후 계획

월드 오브 워크래프트 클래식을 복원하면서 저희의 지침은 여러분에게 진짜의 경험을 제공해드리고자 하는 것이었습니다. 게임 동작이 매끄러워지고 하드웨어도 향상되었을지언정, 2006년의 월드 오브 워크래프트를 하고 있다는 느낌은 고스란히 전할 수 있어야 합니다. 전투의 방법이나 기존의 모델들, 그리고 사냥꾼의 기술들뿐만 아니라 플레이어들이 서로 관계를 맺고 의지했던 분위기와 그 분위기가 플레이어들이 던전에 들어가기 전에 어떤 영향을 끼쳤는지 또한 저희가 보존하고 싶은 클래식 경험의 일부들입니다.

저희가 내린 결정 대부분은 아주 명백했습니다. 던전 찾기 같은 기능은 당연히 제외되어야 합니다. 또한 다른 서버와의 파티 구성, 업적 시스템, 통합 경매장, 그리고 물론 날탈도 포함되어서는 안 됩니다. 

한편 그리 명백하지 않은 결정도 있었죠. 월드 오브 워크래프트 역사상 어느 시점에는 한 목표물에 걸 수 있는 약화 효과의 수가 8개로 제한되어 있었습니다. 이 제한은 나중에 16개로 늘었고 지금은 제한이 없습니다. 이런 변화에 따라 직업 간의 균형, 그리고 약화 효과를 이용해 난관을 돌파할 때 플레이어가 택하는 전략에도 근본적인 변화가 생겼습니다. 1.12 패치 데이터를 다시 조율하는 것을 피하고 기존의 균형을 유지하여 현대 시대의 변화에 대응하기 위해 클래식에는 16개의 약화 효과 제한을 걸기로 했습니다.

지금은 길드원끼리 게임에서 우편을 바로바로 주고받을 수 있지만, 예전에는 모르는 사람과 주고받을 때와 똑같이 1시간의 지연 시간이 있었습니다. 우편 즉시 전송이 도입되면서 게임은 편리해졌지만, 거래를 빨리 마치고 싶은 사람들끼리 직접 만나는 데서 생기는 사교적인 관계도 없어져 버렸습니다. 그래서 저희는 우편 지연 시간을 부활시키기로 결정했습니다. 이름 자동 완성이나 우편함 빨리 비우기 등의 몇 가지 편의 기능은 그대로 유지됩니다. 이런 기능들은 사용자가 애드온을 만들어 똑같은 기능을 구현할 수 있으므로, 근본적인 “클래식” 경험에는 영향을 주지 않을 것이라고 판단했기 때문입니다.

예전에는 누군가가 아이템을 잘못 습득하여 전리품 교환을 원하는 경우 고객 지원을 요청해야 했습니다. 최근 시스템에서는 일정 시간 동안 사람들과 전리품을 교환할 수 있는 기회가 주어지죠. 저희는 불필요한 지원 문의 건수를 늘리기보다는 이런 편의 기능을 클래식에 남겨두는 편이 낫다고 판단했습니다. (닌자들에겐 미안하지만요!)

도적처럼 기력 재생 시스템에 의존하는 직업들도 클래식 시대 이후로 많은 변화를 겪었습니다. 예전에는 기력이 대략 서버의 "맥박"에 맞춰 뭉텅이로 재생되었습니다. 즉, 20의 기력을 얻으려면 2초를 꼬박 기다려야 했죠. 지금은 시스템이 더 매끄러워져 1/10초마다 1의 기력이 재생됩니다. 이로 인해 특정 능력들을 사용하는 타이밍에 변화가 생겼습니다. 사소한 편의상의 변화로 보일 뿐이지만, 이 변화가 처음 도입됐을 때는 클래식 게임플레이의 전투 로테이션과 폭딜 능력 자체에 변화가 생겼던 것입니다. 저희는 오리지널의 느낌을 주기 위해서는 이런 부분을 꼭 복원해야 한다고 생각했습니다.

시간이 흐르면서 애드온 제작자들이 경험과 지식을 쌓자, 애드온의 기능 또한 변화하며 훨씬 정교해졌습니다. 이런 차이가 월드 오브 워크래프트 클래식에 미칠 영향에 대해서 아직 100% 결론을 내리지는 못했지만, 분명한 것은 애드온 API가 1.12 당시로 완전히 돌아가지는 않는다는 점입니다. 만약 그렇게 한다면 전투를 거의 완전 자동화하는 '봇'의 제작이 가능하므로, 월드 오브 워크래프트 게임플레이 경험의 핵심에 정면으로 대치됩니다. 저희가 그런 결과를 바라지 않는다는 것만큼은 확실하죠. 한편 최신 API에서 제공하는 추가 기능으로는 오리지널의 원래 느낌을 저해하는 소셜 기능을 만들어낼 수도 있습니다. 아직은 이런 부분들을 살피며 좋은 절충안을 찾고 있습니다. 커뮤니티와 애드온 제작자들의 피드백을 주시하며 그 기준을 정립할 예정입니다.

콘텐츠 출시 계획

1.12 패치를 토대로 사용하지만, 플레이어들이 기대하는 콘텐츠 또한 확실히 제공할 것입니다. 대략적인 계획을 알려드리자면 콘텐츠를 네 단계에 걸쳐 점차적으로 부활시킬 예정입니다.

  • 1단계: 화산 심장부, 오닉시아, 혈투의 전장, 카자크, 아주어고스
  • 2단계: 검은날개 둥지, 전장 및 PvP 보상, 줄구룹
  • 3단계: 안퀴라즈(오프닝 이벤트 포함), 티어 0.5, 실리더스 콘텐츠, 녹색용
  • 4단계: 낙스라마스 공격대, 스컬지 침공

이 계획은 변경될 수 있지만, 그래도 전체적인 그림은 알려드리는 것이 좋다고 생각했습니다. 앞으로도 월드 오브 워크래프트 클래식을 우리의 삶으로 가져오도록 지속해서 노력하며 여러분의 의견에 귀를 기울일 것입니다.

블리즈컨 참가자와 블리즈컨 2018 가상 입장권 소지자는 오늘 클래식 체험판을 경험해 보실 수 있습니다! 더 자세한 내용은 최신개발자의 쉬어가는 이야기와 체험판 플레이에 관한토론장 게시물을 읽어보시기 바랍니다.

다음 글

주요 소식