Ir a los juegos
Hadukis

Blog

La línea de puntería que fallaba por un factor de 17

· 4 min de lectura

En un juego de tirachinas, la línea de puntos es todo el contrato con el jugador. Tiras hacia atrás, los puntos muestran adónde irá el disparo, sueltas. Si los puntos mienten, no hay habilidad que aprender: solo suerte, y la sensación de que el juego te hace trampa.

La primera prueba de ScaleSling volvió con dos frases: «los fuertes se caen solos» y «no va adonde dice la línea». Las dos eran ciertas, y ninguna era un problema de ajuste. Este artículo va de la segunda. Los fuertes tienen su propio artículo.

Qué hacía la línea

Tiraras del dragón hacia atrás con el ángulo que fuera, la guía punteada subía por encima de la pantalla y no volvía a bajar, con ángulos empinados o planos, a toda potencia o con un toquecito. Mientras tanto, el dragón volaba un arco perfectamente normal y aterrizaba en un sitio al que la línea nunca había apuntado.

La guía funciona haciendo avanzar en el tiempo un proyectil de mentira: empieza en el tirachinas, suma la velocidad, suma la gravedad a la velocidad, repite y deja un punto cada pocos pasos. Ese bucle sumaba la gravedad como el valor de gravedad multiplicado por la duración de un paso.

El motor de física que hay debajo del juego no hace eso. Aplica la gravedad como una fuerza, y una fuerza se convierte en un cambio de velocidad a través de la duración del paso al cuadrado. A sesenta pasos por segundo, un paso dura unos 16,7 milisegundos, así que la guía usaba más o menos la decimoséptima parte de la gravedad que sentía de verdad el dragón. Un proyectil con la decimoséptima parte de su gravedad hace exactamente lo que mostraba la línea: sube y sigue subiendo.

Encima de la primera había una segunda mentira, más pequeña. El dragón tiene rozamiento con el aire, que se come más o menos la mitad de su velocidad en dos segundos. La guía lo ignoraba. Arreglar solo la gravedad habría dado una línea que bajaba con la forma correcta, pero en el sitio equivocado.

El paso corregido son dos líneas: multiplicar la velocidad por el rozamiento y luego sumar la gravedad con el paso al cuadrado. El valor del rozamiento vive ahora en un archivo de ajustes compartido en vez de dentro del dragón, porque lo necesitan dos trozos de código distintos y no deben volver a discrepar nunca.

Demostrarlo, en vez de mirarlo a ojo

La forma tentadora de comprobar un arreglo así es tirar del tirachinas unas cuantas veces y ver si los puntos parecen correctos. Así es justo como sobrevivió el fallo: una línea que está un poco mal parece plausible, y nadie repite el mismo disparo dos veces.

Así que ahora hay un pequeño script que ejecuta el motor de física real, sin navegador y sin pantalla, con las constantes del propio juego. Lanza un cuerpo con un abanico de ángulos y potencias, lo hace avanzar y compara adónde va de verdad con adónde dice la aritmética de la guía que irá.

Antes del arreglo, las dos se habían separado 1.300 píxeles tras 90 pasos. Después, la diferencia es cero, y el punto de aterrizaje coincide al píxel. El script tarda menos de un segundo, y se vuelve a ejecutar cada vez que alguien toca la guía, los ajustes de física o el cuerpo del dragón.

La sonda que también mentía

Mientras perseguíamos esto teníamos un jugador automático: un script que dispara a todos los niveles e informa de cuáles se pueden superar. Decía que el nivel 2 no se podía ganar y que al nivel 4 no se le podía hacer ningún daño.

Los dos veredictos eran falsos, y conviene saber por qué si trabajas con un motor de física que deja dormir a los cuerpos. Para ahorrar trabajo, el motor deja de simular todo lo que lleva un rato quieto. Un dragón esperando en el tirachinas lleva un rato quieto, así que está dormido. Ponerle una velocidad a un cuerpo dormido escribe un número que el motor nunca lee: el disparo salía del tirachinas a una velocidad de 17,9 y se quedaba exactamente donde estaba, para siempre.

Una persona nunca lo vio, porque arrastrar al dragón lo mueve en cada fotograma y lo mantiene despierto. Solo fallaba un disparo hecho sin arrastrar, que es justo lo que hace un probador automático. Cada «imposible» de aquel informe era un dragón que no se había movido nunca, y ya habíamos empezado a cambiar materiales de los niveles por su culpa.

El arreglo es una llamada para despertar al cuerpo antes de lanzarlo. Lo que sacamos de esto va más allá: antes de fiarte de una máquina que dice que algo es imposible, comprueba que lo que ha probado ha ocurrido de verdad. Ahora la sonda registra cuánto ha recorrido cada disparo. Un resultado de cero daño a cero distancia es instrumentación rota, no dificultad.

Qué ha cambiado para el jugador

La línea de puntos es ahora la trayectoria. Donde termina es donde aterriza el dragón, con cualquier ángulo y potencia, y eso lo comprueba una máquina y no alguien entornando los ojos delante de una pantalla. Si ya habías jugado a ScaleSling y el tirachinas te pareció injusto, lo era, y ya no lo es.

Juega aquí.