Saltar al contenido

El auto no huía: estaba patrullando.

Temaspersecución, órdenes de ia, callejones sin salida

La persecución llevaba cinco días casi funcionando, y eso es peor que estar rota. El sospechoso huía. Solo que huía mal: frenaba en cada curva, iba a velocidades que avergonzarían a una camioneta de reparto, volvía al tráfico como si la persecución fuera problema de otro. Así que hice lo que pedía el síntoma. Subí la velocidad máxima. Subí la velocidad mínima. Repasé uno por uno los registros de curvas en la base de datos del juego y los fui aflojando. Todos los números se movieron, y la conducción no cambió nunca.

No cambiaba porque ninguno de esos números pertenecía a la orden que llevaba el volante. Cuando el auto aparece le damos una orden de patrulla, para que dé vueltas por el distrito entre el tráfico antes de que llegues y no haya destello de aparición. Después te acercas y emitimos la orden de huir. Lo que nunca había hecho era quitarle la primera. El auto cumple sus órdenes en fila, una a la vez. La orden de huir existía y era correcta, y entraba en la cola detrás de una orden de patrulla que no iba a terminar nunca, esperando un turno que jamás iba a llegar. Cinco días ajustando una orden que nunca tuvo el volante.

El arreglo es una llamada antes de la nuestra: cancelar la orden de patrulla y después emitir la de persecución. CancelOrInterruptCommand, el nombre de la orden, y listo. Todo lo que había pasado la semana ajustando resultó estar bien desde el principio, y esa es la parte que duele.

Lo que hace ahora, confirmado dentro del juego y no en un log: arranca a fondo, toma las curvas sin frenar para entrar en ellas, se mantiene en combate todo el tiempo y te dispara desde el auto mientras conduce. Cuatro cosas que yo había anotado como la definición de una persecución que funciona, y las cuatro a la vez. Confirmado el 30 de agosto, y desde aquí la persecución queda congelada. No se vuelve a tocar.

Esa misma noche me dejó otra con la misma forma. Una moto que habías pedido y después destruido ya no se podía volver a pedir nunca: quedaba marcada como en tránsito durante el resto de la partida. Fui a buscar nuestro bug en el registro de vehículos en tránsito y no había ninguno. El bloqueo era una guarda que había escrito yo mismo, una comprobación que se negaba a volver a invocar un vehículo todavía en tiempo de espera. Había copiado esa pregunta tal cual del código del propio juego sin darme cuenta de que el popup del propio juego siempre la responde con force en true. Hace la pregunta y, acto seguido, la pasa por alto. Copié la pregunta y dejé atrás la respuesta.

Así que la regla de esta semana es más estrecha que la de la anterior, y sale más cara de aprender. Antes de escribir una guarda, ve a leer cómo resuelve el juego base el mismo caso. Tres veces distintas esa noche, el motor del juego ya tenía una respuesta y yo le había puesto encima una capa propia, y cada una de esas capas costó días.