Creación de las cifras de daño de Diablo III

Creación de las cifras de daño de Diablo III

El trabajo en el área de desarrollo de software, ya sea por negocios, entretenimiento o tu videojuego favorito, implica saber que los problemas simples no siempre tienen soluciones simples. El desarrollo de juegos es, dicho brevemente, complicado. Hay miles de partes en movimiento y la más mínima iteración puede resultar en semanas de reversiones y rastreo. Visto desde afuera, es muy tentador preguntar “¿Por qué no lo arreglan?”. Eso es como preguntarle a un panadero por qué no reemplaza el azúcar con sucralosa. La respuesta es similar en ambos casos: “No es tan simple”.


Números: ¿Cómo funcionan?

En Diablo III, el jugador recibe mucha información. Y si nos concentramos en los números, ¡están por todas partes! En tu equipamiento, en tu perfil de personaje... hasta flotando alrededor de la cabeza de tu nefalem mientras está en combate. Detrás de cada uno de esos dígitos, hay muchísima tecnología que permite que funcionen como se ve en pantalla.

Hemos oído muchos comentarios de los jugadores sobre los números de combate. Muchos sienten que ya inundan la pantalla o que son difíciles de comprender en tiempo real en medio del juego. Antes, las cifras grandes eran emocionantes porque se destacaban del resto. Pero, ¿cómo se hace para recuperar ese aspecto emotivo sin que los jugadores sientan que pierden poder?

El parche 2.4.0 presenta algunas funcionalidades nuevas enfocadas en esta cuestión. En primer lugar, implementamos una nueva opción de juego para truncar las cifras y mostrarlas como abreviaturas. En segundo lugar, agregamos una funcionalidad completamente nueva que resalta tus valores de daño más altos con un color nuevo. Cada uno de estos agregados presentaba sus propios desafíos a la hora de implementarlos: algunos eran problemas de diseño y otros generaban dificultades de localización; pero luego de todas las decisiones, el resultado tenía que verse bien.

En un principio, teníamos la idea de resaltar el 5% más alto de las cifras generadas en los últimos segundos. El primer problema con este enfoque es que todas las estrategias de personaje son distintas, en especial a la hora de infligir daño. Algunas generan breves ráfagas de cifras por un tiempo, y otras inundan la pantalla con un flujo constante de información. Otro problema que surgió durante nuestra primera implementación es que no contemplaba las posibles fluctuaciones del daño infligido. Veamos por ejemplo un Pilón de poder, que aumenta temporalmente tu daño. Cuando finaliza el efecto del Pilón, aún quieres saber cuándo infliges más daño.

 Nos tomamos un tiempo para desarrollar nuestro algoritmo con todas estas variables en mente y establecimos las siguientes reglas para los números que debían aparecer en naranja:

  • Los valores de daño deben ser superiores a 10.000
  • Si la cifra de daño que se va a mostrar es mayor que la última que apareció en naranja, entonces esta nueva cifra debe aparecer en naranja
  • El sistema debe reducir el valor de referencia más alto un 3% por segundo
    • Esto reduce la probabilidad de que pase mucho tiempo hasta la próxima cifra resaltada
  • Se ignoran las primeras 10 cifras grandes
    • Esto permite la calibración del sistema
  • Si no se inflige ningún daño durante 10 segundos, el sistema se restablece

¿Y los miles de millones?: Desafíos en la localización

Si han jugado a nuestra última iteración del RPP 2.4.0, es probable que ya hayan notado nuestras nuevas abreviaturas de daño. Esta innovación generó muchas preguntas, principalmente de nuestra audiencia angloparlante.

La respuesta principal a la mayoría de estas consultas es una: la localización. Diablo III es un juego global que se publica en más de 13 idiomas distintos, así que cuando tomamos una decisión de diseño que afecta la palabra escrita (o, en este caso, los números), tenemos que ser conscientes del impacto que ese cambio tendrá en todas las iteraciones del juego. Si creen que los números son lo más fácil de traducir, en la práctica no es tan simple como parece.


Izquierda: Números en inglés. Derecha: Números en coreano.

Aquí tenemos un ejemplo de una traducción aparentemente sencilla que resulta un tanto más complicada. Algunos idiomas, como el español y el francés, no tienen un solo término común y aceptado equivalente al inglés “billion” sino que se refieren a esa cantidad como “mil millones”. En términos etimológicos, esto es un resultado de que en el inglés estadounidense y británico la palabra “billion” evolucionó y ahora significa “mil millones” en vez de “un millón de millones”, como representaba originalmente (y como aún representa el término "billón" para el español).

El tema es aún más complejo si consideramos idiomas como el coreano o el chino, en los que las cifras grandes se agrupan en una escala distinta. En inglés, por ejemplo, la nomenclatura de un número cambia con cada tercera posición, como miles, millones, billions (mil millones), etc. En coreano, la convención cambia con cada cuarta posición, con un método que podríamos llamar diez mil al cuadrado. Esto es porque en coreano los números se agrupan en múltiplos de diez mil, no de mil.

A esto se le suma el uso de la puntuación. No todos los idiomas usan comas para separar los dígitos que componen las cifras. Algunos usan puntos, que es muy común en Europa, y otros no usan ningún tipo de puntuación.


Izquierda: Cantidad de oro en coreano. Derecha: Cantidad de oro en francés.

Cuando las cifras de Diablo III aumentaron y decidimos agregar la puntuación numérica, necesitamos un método para “traducir” elegantemente dónde y cuándo aparecería esta puntuación para cada idioma. Nuestro código utiliza una biblioteca llamada ICU, o International Components for Unicode (componentes internacionales para unicode), que brinda distintas facilidades para la localización de software. Hay distintas maneras de utilizar el ICU, pero para este caso, aprovechamos su funcionalidad de tomar un número y un idioma (como inglés de Estados Unidos, francés o coreano) como datos de entrada para luego producir un número correctamente formado para ese idioma, con los puntos y las comas necesarios. Nuestro equipo de localización también tiene una tabla con los números que cada región decide publicar y cómo sería el resultado final.


Un ejemplo de una de nuestras tablas de localización, que muestra dónde corta la cifra cada idioma.

Algunos equipos de localización decidieron usar más o menos abreviaturas de acuerdo a la preferencia cultural. Hay toda una psicología detrás de la satisfacción del jugador y la longitud real de los números que figuran en pantalla, y la preferencia del jugador varía según pautas personales y culturales. En inglés, por ejemplo, decidimos no abreviar en la escala de los millones, ya que ver “1,000,000” es mucho más satisfactorio que “1M”. Omitir la escala de los mil millones (billions) también nos ayudó con esto, ya que ver “1,000M” es más emocionante que solo “1B”. Por supuesto que el tamaño de la cifra no es lo único que consideramos; la apariencia, los colores y el movimiento también juegan un papel fundamental.


Números en pantalla y ajustes visuales

Es importante lograr que, apenas el jugador ve un número, comprenda lo que implica y lo que significa para él en ese preciso instante. En el parche 2.4.0, quisimos ofrecer más información en combate que nunca. Y es aquí donde esas cifras resaltadas de golpes críticos entran en juego.

¡Qué crítico más hermoso!

Un simple cambio de color era una de las muchas maneras en las que podíamos presentar esta información. Nos hicimos muchas preguntas sobre cuál sería la mejor forma de comunicar estos grandes impactos. ¿Hacemos los números más grandes? ¿Hacemos que aparezcan de otra forma? ¿Los hacemos brillar? ¿Los dejamos en pantalla por más tiempo? ¿O solo les damos otro color? ¿Cómo se decide cuál es la mejor de estas opciones?

Nos inclinamos por el color porque nos permitía presentarles a los jugadores esta nueva información de una manera drásticamente diferente que también superaba otras preocupaciones relacionadas con la identificación por parte del usuario. Los números naranjas se destacan; no son algo que se haya visto antes, así que inconscientemente uno les presta más atención.

El naranja también pasa la prueba de accesibilidad para los usuarios daltónicos. Si miras un círculo cromático, el naranja está en un área distinta a los colores que usamos actualmente para otra información. Así, los jugadores daltónicos también pueden darse cuenta de que hay algo nuevo.

Cuando analizamos un cambio de colores para nuestra interfaz, nuestros artistas consideran tres opciones para la variación: tono, saturación y brillo. Esto es parte de lo que se llama modelo de color HSL (por sus siglas en inglés), un estándar digital del círculo cromático. Cada uno de los aspectos es fundamental para ajustar una emoción diferente o evocar una nueva respuesta del jugador. ¿Queremos cambiar la respuesta emotiva? Entonces cambiamos el tono. Si queremos que la imagen no resalte tanto, entonces pensamos en la saturación. ¿Y si queremos que sea más o menos llamativo? El brillo es la respuesta.

Por ejemplo, uno de los datos más importantes del juego es el monto de curación que recibes. La sanación es literalmente tu fuerza vital, y queremos que se vea con la mayor claridad. Por eso esa información es de las más brillantes del juego. Queríamos que la información de golpes críticos también se destacara, así que hicimos varias pruebas con el nivel de brillo para asegurarnos de que siempre sepas en qué momento asestas un golpe brutal.


Integración

Cuando hablamos del equipo de Diablo III, es fácil pensar en los desarrolladores que ajustan el funcionamiento de una clase u objeto, o agregan funcionalidades nuevas y fascinantes para explorar. Esos son los elementos con los que interactúas más directamente y quizá por eso los tengas más presentes. Sin embargo, hay muchísimos más procesos detrás de lo que tu héroe viste o blande, y nuestros artistas, ingenieros, expertos de localización y muchos más nos ayudan a asegurarnos de que todo salga a la perfección para todos nuestros jugadores de todo el mundo.

Esperamos que hayan disfrutado de este análisis en profundidad de una pequeña característica que, tras su simple apariencia, oculta facetas mucho más intrincadas. Es un privilegio llegar a la oficina todos los días y trabajar en este juego, incluso en los detalles más pequeños. ¡Gracias por acompañarnos!