월드 오브 워크래프트

개발자의 쉬어가는 이야기: 월드 오브 워크래프트 클래식

개발자의 쉬어가는 이야기: 월드 오브 워크래프트 클래식

안녕하세요! 여러분께 월드 오브 워크래프트 클래식의 개발 진행 상황을 소개해드릴 수 있게 되어 정말 설렙니다. 지난 블리즈컨 때 말씀드렸듯이, 클래식 게임을 복원하는 절차는 그리 간단 하지만은 않습니다. 시간과 수고를 들여 제대로 해내는 것이 무엇보다 중요하죠. 그렇게 하기 위해서는 무수히 많은 게임 버전, 데이터와 코드를 자세히 조사하고 지난 몇 년간 적용해온 여러 가지 변경 사항을 모두 철저하고 면밀하게 살피는 작업이 필요합니다. 하지만 걱정하지 마세요. WoW 클래식 팀에서는 이 목표를 현실로 이루기 위해 열심히 노력하고 있으며, 이제 개발이 어느 정도 진척되어 지금까지 작업해온 결과물을 몇 가지 보여드릴 준비가 되었습니다.


WoW 클래식: 첫 번째 프로토타입

개발팀에서 처음으로 내려야 했던 결정이자 가장 중요한 결정 중 하나는 중심으로 삼을 게임 버전을 정하는 것이었습니다. 여러분도 눈치채셨겠지만, '클래식'이라 부를 만한 시절은 2년에 달하며 그동안 많은 변화가 일어났었습니다. 이 때쯤 전장이 추가되었고, 여러가지 유명한 던전과 공격대가 업데이트 되었습니다. 개발팀에서는 심사숙고한 끝에 패치 1.12: 전쟁의 북 을 기본 토대로 정하기로 했습니다. 이 버전이 클래식 환경에서 가장 완성된 버전이라고 할 수 있기 때문입니다.

일단 출발점이 결정되자, 개발팀에서는 현재 보유하고 있는 소스 코드와 어떤 것을 활용할 수 있는지 파악하기 시작했습니다. 백업용 아카이브에서 개발 프로젝트 데이터베이스 원본을 복구하는 작업도 필요했죠. 여러 가지 중요한 조각들을 이어 붙이고 나니 내부에서만 실행 가능한 1.12 패치를 재구성할 수 있었습니다. 개발팀에서 이 빌드를 활용하여 캐릭터를 만들고 기본적인 퀘스트를 수행하고 레벨을 올리거나, 심지어 죽을 수도 있었습니다. 실제로 여러 번 죽기도 했고요. 물론, 순전히 테스트 목적에서 말입니다.

첫 번째 버전을 실행해본 결과 몇 가지(예상한대로) 문제가 발견되었습니다. 게임이 종종 강제 종료되기도 하고, 최신 그래픽 카드를 인식하지도 못했고 현재 로그인 시스템과는 호환되지 않았습니다. 해당 버전은 최신 보안 기능과 부정행위 방지 기능도 전혀 지원하지 못했습니다. WoW 클래식을 블리자드에 걸맞는 품질 수준에 맞춰 끌어올리고 플레이어 여러분이 원하는 경험을 제공하려면 아직 갈 길이 멀다는 사실이 자명했습니다. 저희는 이러한 도전을 수 없이 맞닥뜨리며, WoW 클래식 엔지니어링 팀의 경우 이를 순조롭게 이겨내고 있습니다.


나아갈 길: 두 번째 프로토타입

엔지니어링 이야기가 나왔으니 말씀드리지만, 월드 오브 워크래프트는 고도의 데이터 중심적인 게임입니다. 즉, 기본 코드는 유연하면서도, 데이터베이스에 포함된 정보를 바탕으로 코드의 구체적인 작동 방식이 좌우된다는 뜻입니다. 디자이너와 아티스트들은 데이터를 활용하여 퀘스트, 괴물, 아이템과 이러한 모든 요소가 서로 어떤 식으로 상호 작용을 주고받는지 정의합니다.

그래서 저희는 질문했습니다. 최신식 코드를 써서 백 엔드 개선점과 변경 사항을 그대로 넣고 1.12 패치 게임 데이터를 처리하도록 했을 때, 진짜 클래식 환경을 제공하는 데는 문제가 없을 것인가? 직관에 어긋날 수 있지만, 이렇게 하면 야수의 행복함, 무기 숙련도, 그리고 특성 과 같은 클래식 시스템 요소를 본질적으로 포함하는 한편, 형상변환과 업적과 같이 나중에 추가된 요소들은 존재하지 않게 됩니다. 몇 주에 걸쳐 연구 개발, 실험과 프로토타입 제작 과정을 거듭하고 나서야 지난 13년간 수 많은 시간을 투자해서 개발한 백 엔드 요소를 희생하지 않고도 클래식 WoW 콘텐츠와 게임플레이를 재현할 수 있겠다는 자신감이 생겼습니다.

첫 작업에서 우리가 제공하고자 하는 경험이 무엇인지 파악할 수 있었다면, 두 번째 프로토타입을 통해 그 목표에 이르는 과정이 확실히 정의되었다고 할 수 있습니다. 보안과 안정성 변경 사항을 그대로 살린 채 첨단 아키텍처를 사용하는 것을 출발점으로 정하고 진짜 클래식다운 경험을 제공하는 방법을 찾는 데에만 집중할 수 있었죠. 개발 중인 빌드와 기준점인 1.12 패치의 작동 방식에 차이가 있으면 그 모든 차이점을 체계적으로 목록화하여 바로잡고, 그러면서도 안정적이고 보안이 확보된 기본 토대에서 작동할 수 있었습니다.


본격 심화 과정

최신 엔지니어링 기술로 진정한 클래식 환경을 재현하려면 무엇이 필요할까요? 먼저 WoW를 이루는 여러 가지 종류의 게임 데이터를 분류해봅시다:

  • 데이터베이스 데이터: 이런 종류의 정보는 거의 항상 숫자 형태로 표현됩니다. 적의 체력은 얼마인지, 아이템에게 부여된 힘의 양은 얼마인지, 특정 생물이 언제 어디에서 생성되는지 등 데이터베이스에는 다양한 숫자 형태의 데이터가 저장되어 있습니다. 또한 여러 가지 서로 다른 데이터 조각들 사이의 관계를 저장하고 적용할 수도 있습니다.
  • 파일 데이터: 이것은 3D 모델, 텍스처, 애니메이션과 지형 등 매우 밀도가 높은 데이터인 경우가 많습니다. 사용자 인터페이스의 경우 XML과 LUA 파일을 토대로 구축합니다. 아트 파일은 대부분의 아트 툴이 내놓은 것과 같은 파일 형식을 사용하지 않습니다. 개발팀에서는 이러한 미가공 아트 파일을 가져와서 게임이 읽고 처리하기 가장 좋은 형식으로 변환시킵니다.
  • LUA 스크립트: 몇몇 기능은 디자이너들이 작성한 LUA 스크립트로 작동합니다. 이렇게 하면 심층적인 엔지니어링 지식이 없더라도 서버 쪽 논리에 사용자 지정 동작을 간편하게 정의할 수 있습니다.

엔지니어링의 변화

개발팀에서 직면한 한 가지 난관은 클래식 데이터가 모두 출시 당시에 쓰였던 원본 형식을 유지하고 있는데, 그 형식이 이후 몇 년간 대폭 변화했다는 점이었습니다. 이 분야에서 최신 클라이언트와 클래식 데이터가 서로 호환되게 하려면 대대적인 작업이 필요합니다.

예를 들어, 주문은 원래 주문의 표적을 상대로 세 가지 동작만 할 수 있게 되어 있었습니다. 표로 보면 다음과 같습니다.

ID

이름

효과 1

효과 2

효과 3

오라 1

오라 2

효과 피해 1

오라 피해 1

오라 피해 2

1

화염구

피해를 입힘

오라 적용

없음

없음

주기적으로 피해를 입힘

30

없음

3

2

얼음 화살

피해를 입힘

오라 적용

없음

없음

감속

20

없음

없음

보시는 것처럼, '없음'이 차지하는 공간이 상당히 많습니다. WoW는 출시 후 꾸준히 데이터 디자인을 개선해 왔으며 개발팀에서는 그간 데이터베이스 데이터의 대부분을 정규화해 놓았습니다. 그래서 지금은 같은 데이터가 다음과 같은 방식으로 분리됩니다.

표 이름: 주문

ID

이름

1

화염구

2

얼음 화살

표 이름: 주문 효과

ID

주문 ID

효과

피해

1

1

피해

30

2

2

피해

25

표 이름: 주문 오라

ID

주문 ID

오라

피해

1

1

주기적으로 피해를 입힘

3

2

2

감속

없음

이런 형식으로 보면 낭비되는 공간이 훨씬 적고, 주문도 더 이상 세 가지 효과로만 한정되지 않죠. 하지만 데이터베이스 데이터를 로드하기 전에 우선 기존 데이터 레이아웃을 새로운 형식으로 변환해야 합니다. 이 작업은 주문에만 국한된 것이 아닙니다. 게임 시스템이란 거의 모두가(아이템, 적, 플레이어 캐릭터, 생성, AI 등 포함) 나름의 데이터베이스가 있고 그것이 세월이 흐르면서 변화하기 때문입니다.


앞으로의 전망

지금 저희가 하는 모든 일은 궁극적으로 전보다 훨씬 최적화되고 안정적인 플랫폼에서 진정한 클래식 환경을 재현하기 위한 것입니다. 지연 시간이나 안정성 문제를 피하는 데 도움이 되는 일들이죠. 이외에도 부정행위 방지, 고객 서비스 및 Battle.net 통합과 같은 여러 가지 시류에 맞는 개선점을 적용해야 하고, 이와 유사한 여러 가지 편의를 돌보면서도 핵심적인 게임 플레이 경험에 영향이 없도록 해야 합니다.

저희는 앞으로 다가올 난관과 클래식 게임에 대한 여러분의 열정을 기대하고 있습니다. 개발팀에서 하는 모든 코드 체크인 데이터 변환은 WoW 클래식을 여러분이(그리고 저희가) 원하는 진정한 클래식 환경을 제공하기 위해 한 걸음 가까워지는 과정입니다. 여정에 함께해 주신 여러분에게 진심으로 감사드립니다.

다음 글

주요 소식