World of Warcraft

Taller de ingeniería: Diseño de la aplicación WoW Companion

Taller de ingeniería: Diseño de la aplicación WoW Companion

Una de las mejoras técnicas más importantes que implementamos en la aplicación WoW Companion para Shadowlands es la habilitación de contenido para diferentes expansiones. Sabemos que es una función solicitada por muchos jugadores, y hoy queremos compartir algunos de los desafíos y las decisiones que se plantearon al realizar este cambio técnico de gran escala.

Un poco de historia

La aplicación Companion fue diseñada originalmente para que funcionara con una sola expansión: Legion. En los preparativos para Battle for Azeroth, tomamos la decisión de priorizar varias mejoras de fondo de gran importancia, como la posibilidad de que la aplicación compartiera el código con el cliente de PC, lo que nos permite aprovechar muchas de las funciones y herramientas disponibles en la interfaz del juego principal a las que antes no podía acceder la aplicación. Sin embargo, en ese momento no pudimos programar el marco necesario para brindar soporte a más de una expansión a la vez, por lo que cambiamos de la expansión de Legion a la más reciente, Battle for Azeroth.

Como sabemos que los jugadores querían mantener el acceso al contenido de Legion en la aplicación, con Shadowlands asumimos el compromiso de brindar soporte para más de una expansión a la vez. Además, el equipo de dispositivos móviles estaba muy entusiasmado con la idea de satisfacer la demanda de la comunidad y volver a ofrecer el contenido de Legion.

En un principio analizamos la opción de habilitar solo una parte de la funcionalidad de las expansiones anteriores para optimizar nuestra capacidad de trabajar en el contenido de Shadowlands, pero rápidamente decidimos que queríamos restablecer la mayor cantidad de funciones posibles. También sabíamos que con la llegada de Shadowlands los jugadores tendrían la opción de subir de nivel sus personajes alternativos en Legion gracias a las Campañas de Cronoviaje, y queríamos cerciorarnos de que esos jugadores contaran con todo el soporte para dispositivos móviles en el proceso de subida de nivel.

Elige tu expansión
A partir del preparche de Shadowlands, la aplicación Companion les permitirá a los jugadores elegir entre Legion y Battle for Azeroth. El contenido de Shadowlands estará disponible a partir del lanzamiento de la expansión.

Para nuestra grata sorpresa, la mayor parte del código de Legion seguía en la aplicación y aún teníamos los archivos originales de Legion en nuestro control de versiones, por lo que volver a agregar el contenido de Legion fue la prueba perfecta para nuestro nuevo marco multiexpansión. Sin embargo, aunque no quedaba mucho por implementar, tuvimos que trabajar bastante para separar correctamente Legion y Battle for Azeroth.

Para crear el marco multiexpansión eran necesarios tres factores:

  1. La aplicación debía eliminar los datos del contenido de la expansión actual y solicitar datos del servidor para una nueva expansión.
  2. Necesitábamos separar el código de interfaz de cada expansión para mantener el funcionamiento independiente de cada una.
  3. Teníamos que diferenciar los archivos específicos de cada expansión para minimizar el uso de recursos de la aplicación.

Datos de las expansiones

Originalmente, cuando se desarrolló la aplicación Legion Companion, la mayor parte del código del servidor que se ocupaba de las solicitudes de datos de la aplicación estaba diseñada para compartir solo datos de Legion. Cuando llegó la hora de hacer el cambio a Battle for Azeroth, hicimos las modificaciones necesarias para que compartiera los datos de Battle for Azeroth. Pero ahora necesitábamos contar con la capacidad de recuperar datos de cualquier expansión. Para lograrlo, hubo que revisar todas las funciones del servidor que responden a las solicitudes de dispositivos móviles y modificarlas para que aceptaran parámetros que especifican de qué expansión compartir los datos. Por ejemplo, para solicitar datos de un seguidor, se debía especificar un tipo de seguidor (de Legion o Battle for Azeroth), y las solicitudes de misiones de mundo debían especificar las zonas cuyos datos se solicitaban.

La aplicación también tenía varios lugares que se ampliaron específicamente para brindar soporte a Battle for Azeroth. En Legion, la aplicación pedía tus recursos del Salón de la orden; para Battle for Azeroth, solo agregamos "recursos bélicos" a ese mensaje. En lugar de seguir agregando más monedas en el mismo mensaje para Shadowlands, decidimos transferir todo el sistema de monedas del cliente de PC al nuevo marco de código compartido que se desarrolló para Battle for Azeroth. Eso significa que ahora cada expansión puede solicitar automáticamente los datos correspondientes a su tipo de moneda en vez de tener que especificar de forma manual el tipo de moneda deseado.

Cómo funcionaba antes la solicitud de datos de moneda
Antes la aplicación solicitaba monedas específicas del servidor.
Cómo funciona ahora la solicitud de datos de moneda
Ahora cada expansión puede solicitar su propio tipo de moneda. Este código resultará conocido si se lo compara con las extensiones que usan el sistema de monedas de Shadowlands: eso se debe al marco de código compartido, que le permite a la aplicación WoW Companion compartir funciones con el juego principal.

Código de la interfaz

Una gran parte del código que creamos para brindar soporte a la expansión Battle for Azeroth sobrescribió el código ya existente de Legion, por lo que a veces era difícil entender qué código se estaba utilizando. Por ejemplo, la lista de seguidores de Battle for Azeroth aún mostraba los armamentos, pero el botón de Armamentos estaba oculto, así que el código nunca se activaba. Legion y Battle for Azeroth comparten funciones similares, así que eso no constituyó un problema grave, pero sabíamos que agregaríamos nuevas funciones para Shadowlands y que sería imposible mantener ese tipo de arquitectura. Si el código que compartían Legion y Battle for Azeroth de pronto tenía que funcionar con novedades como los lazos de alma o los Pactos, iba a ser más complejo aún.

Por lo tanto, revisamos cada script para determinar qué funciones se compartían y cuáles eran específicas de una expansión determinada. Organizamos el código específico de las expansiones en distintas subclases o componentes totalmente nuevos, mantuvimos solo la funcionalidad básica compartida en las clases principales, y creamos nuevos objetos del juego para cada expansión acorde a las nuevas subclases. Ahora, si bien las expansiones utilizan el mismo sistema y comparten la mayor parte de las funciones, solo la lista de misiones de Legion necesita un botón de Aliado de combate, mientras que la lista de aventuras de Shadowlands no solo se deshizo del diseño de dos pestañas que usaban Legion y Battle for Azeroth, sino que también luce los retratos de los enemigos en lugar de los íconos del tipo de misión.

Comparación entre la lista de misiones de Legion y la lista de aventuras de Shadowlands
Comparación detallada de la lista de misiones de Legion y la lista de aventuras de Shadowlands.

Otro cambio importante que hicimos en la aplicación para Shadowlands se relaciona con la forma en que generamos archivos de bases de datos: la aplicación Companion ahora arma su código de base de datos y archivos de datos de la misma forma que en PC. Esto resultó particularmente útil en la programación del código que determina el mapa en el que se verá cada misión de mundo. Originalmente, la aplicación usaba el ID de cada mapa manualmente. Este método no era un problema cuando el contenido habilitado solo incluía Argus y las Islas Quebradas. Sin embargo, al agregar más zonas para Battle for Azeroth se volvió demasiado engorroso. En lugar de conservar ese código para Shadowlands, hemos logrado que se utilicen las tablas de bases de datos del mapa de la interfaz para que el sistema sea completamente dinámico: pasamos de un código complejo que trabajaba con todas las zonas de las tres expansiones por separado a una función única y simplificada que sirve para cualquier misión de mundo, sin importar a qué expansión pertenezca.

Archivos

Una de las principales diferencias entre el desarrollo para PC y dispositivos móviles es que hay que tener en cuenta que los jugadores pueden usar la aplicación desde el celular, por lo que tal vez tengan una conexión limitada. Debemos cerciorarnos de que los jugadores disfruten de una experiencia divertida y sin frustraciones, sin importar cuál sea su conexión de internet, y una de las formas de lograrlo consiste en limitar la cantidad de datos que los jugadores deben descargar para usar la aplicación.

Cada expansión cuenta con una gran cantidad de archivos. Así, pasar de ofrecer acceso para una expansión en la aplicación (fuera Legion o Battle for Azeroth) a tres expansiones al mismo tiempo (a partir del lanzamiento de Shadowlands) significaba triplicar la cantidad de datos requeridos por la aplicación. Sin embargo, hay muchos archivos que solo son utilizados por una expansión en particular, como las texturas de mapas en alta resolución, los fondos de la ubicación de las misiones y los retratos de seguidores o enemigos. Por lo tanto, decidimos separar esos archivos en distintos paquetes para cada expansión. De esta forma, la aplicación solo carga los archivos necesarios para la expansión activa, lo que reduce el consumo de memoria.

También decidimos desde un principio separar las expansiones en sus propios escenarios, lo que nos permitió mantener claramente diferenciadas las funcionalidades de cada expansión. El escenario de juego de Legion no necesita una sección de Llamamientos de Pactos, y el escenario de juego de Shadowlands no cuenta con una ventana de Envíos de tropas. Tal como sucede con los cambios que hicimos en el código, esto permite entender con mucha más facilidad lo que está pasando en la aplicación en todo momento. Dividir así los archivos y los escenarios hace que cada expansión sea autosuficiente, lo que a su vez permite ofrecer opciones de descarga más convenientes para el usuario.

Queríamos que los jugadores tuvieran más control respecto del momento en que necesitan descargar archivos para la aplicación. Puedes elegir entre descargar todo a la vez si tienes una conexión estable, o bien dejar para más tarde los archivos de las demás expansiones, para poder acceder a la aplicación más rápidamente. Y si decides no interactuar con una expansión en particular, no es necesario que descargues sus archivos. Considerando que hay unos 30 a 40 MB por expansión, ahorrarse la descarga de una puede marcar una gran diferencia.

Descarga selectiva para cada expansión
¡Mantener las expansiones separadas reduce el tiempo de descarga necesario para acceder a la aplicación y empezar a jugar!

Cambios de fondo en el sistema

Para dividir los archivos por expansión, fueron necesarios dos cambios en nuestro sistema: era necesario que nuestra herramienta de selección de archivos identificara a qué expansión pertenecía cada archivo y que nuestra herramienta de creación de paquetes de archivos agrupara esos archivos a la hora de armar los paquetes finales. La herramienta de selección de archivos estaba específicamente dirigida al contenido de Legion y luego Battle for Azeroth, así que tuvimos que reprogramarla para que funcionara independientemente de la expansión. La nueva versión de la herramienta ofrece el contenido de las expansiones al que necesita acceder la aplicación Companion (al iterar la enumeración de GarrisonType) y crea archivos para cada expansión en carpetas separadas. Esta modificación de la herramienta de selección para que funcione con la lista entera de expansiones también garantiza que la herramienta podrá utilizar toda información que se agregue a esa lista en el futuro. De este modo, será más fácil agregar contenido a la aplicación Companion sin necesidad de actualizar constantemente nuestras herramientas.

La creación de archivos y la carga de tiempo de ejecución usan principalmente la función de variantes AssetBundle de Unity, lo que permite que la aplicación use las distintas versiones de un mismo paquete de archivos como si se tratara de una sola. El sistema de creación de paquetes genera una variante distinta de cada paquete para cada expansión, según las carpetas específicas de cada expansión generadas por la herramienta de selección. Esos paquetes de archivos se intercambian durante el tiempo de ejecución cuando cambias de expansión en la aplicación. Como todas las variantes de un paquete pueden tratarse como si fueran la misma, cualquier código que requiera los datos de los retratos de seguidores, por ejemplo, puede funcionar sin preocuparse por el conjunto específico de retratos de seguidores que esté cargado en el momento. Esta segmentación permite que el código acceda a los recursos necesarios sin necesidad de encargarse de las tareas de carga y descarga de archivos. Así, es posible acceder al contenido de cada expansión como si fuera la única disponible en la aplicación.

A las Tierras de las Sombras

Ya sea para estrenar el nuevo contenido de aventuras de Shadowlands o para subir de nivel un nuevo personaje alternativo en Legion, ¡nos encanta compartir con ustedes más y más contenido móvil de World of Warcraft! Esperamos que hayan disfrutado de este resumen sobre el tipo de trabajo que hacemos y las decisiones que tomamos cuando diseñamos marcos para brindar soporte no solo al contenido actual sino a todo lo que depare el futuro en World of Warcraft.

Artículo siguiente

Noticias destacadas