1 puntos por GN⁺ 2025-12-16 | 1 comentarios | Compartir por WhatsApp
  • Un análisis de ingeniería inversa del sistema de aterrizaje en portaaviones de Top Gun para NES revela las condiciones exactas para que el aterrizaje sea válido
  • Para aterrizar con éxito se necesita altitud entre 100 y 299, velocidad entre 238 y 337 y apuntar directamente al portaaviones
  • La indicación “Alt. 200 / Speed 288” del MFD del juego en realidad muestra el valor central del rango permitido
  • La velocidad y la altitud se almacenan en memoria en formato BCD (decimal codificado en binario), y la función de validación se ejecuta en direcciones específicas
  • Es un caso de descifrado de la lógica interna precisa de un juego antiguo, útil para aprender análisis y depuración de juegos retro

Condiciones básicas para validar el aterrizaje

  • Para aterrizar con éxito se requiere altitud entre 100 y 299, velocidad entre 238 y 337 y además una orientación precisa hacia el portaaviones
    • Estas tres condiciones se revisan al final de la secuencia de aterrizaje
  • La indicación “Alt. 200 / Speed 288” en la pantalla del juego corresponde al valor central real del rango permitido, por lo que es una cifra adecuada como objetivo para el jugador
  • La altitud y la velocidad se ajustan con la entrada del acelerador y el ángulo de cabeceo, mientras que la dirección no tiene un indicador separado y solo ofrece retroalimentación mediante la advertencia “Right! Right!”

Estructura de memoria y variables internas

  • Direcciones principales de memoria y contenido almacenado
    • $40–$41: velocidad (formato BSD), rango permitido 238–337
    • $3D–$3E: altitud (formato BSD), rango permitido 100–299
    • $FD: dirección (Heading), dentro del rango -32 ~ +32, se puede aterrizar con valores de 0 a 7
    • $9E: guarda el resultado de la validación de aterrizaje; si el valor es 0, es éxito
  • La velocidad y la altitud se guardan en BCD (Binary Coded Decimal) para simplificar su visualización en pantalla
    • Ejemplo: 1234 se almacena como 0x1234 (decimal 4660)

Rutina de validación del aterrizaje

  • La función en la dirección $B6EA revisa el estado de aterrizaje y escribe el resultado en $9E
  • La rutina compara en secuencia la altitud, la velocidad y la dirección, y si algún valor queda fuera de condición devuelve códigos distintos
    • Ejemplo: si va demasiado alto o demasiado rápido, devuelve el código 8; si va demasiado bajo o demasiado lento, devuelve el código 4
  • Si se cumplen todas las condiciones, se establece LDX #00 y se procesa como éxito

Depuración y código de truco

  • Con el código de Game Genie AEPETA el aterrizaje siempre se considera exitoso
  • Este código omite la rutina real de validación y fuerza el resultado al estado de éxito

Conclusión

  • El sistema de aterrizaje de Top Gun en NES no se basa en un control simple, sino en una lógica de validación precisa basada en valores numéricos
  • La ingeniería inversa permite comprobar con claridad la estructura interna de memoria de un juego retro y la forma en que divide las condiciones
  • Como ejemplo de la precisión de diseño de los juegos clásicos, tiene alto valor como referencia para el análisis de lógica de juego y la investigación de restauración

1 comentarios

 
GN⁺ 2025-12-16
Comentarios de Hacker News
  • Toda la información para aterrizar bien el avión estaba en el manual
    La velocidad y altitud necesarias no eran un secreto, pero la mayoría de los niños no leían el manual
    La verdadera dificultad del juego venía de su motor de física medio realista. Mi hermano mayor, que iba a clases de vuelo, aterrizaba fácil y luego me enseñó cómo hacerlo
    La velocidad y la altitud había que controlarlas con el acelerador y el ángulo de cabeceo, así que no bastaba con apretar solo el botón del motor o del freno de aire
    El consejo que me dio mi hermano era que, durante un picado pronunciado, la velocidad no baja, así que había que levantar un poco la nariz y abrir el freno de aire para reducirla antes de nivelar. El juego modelaba esto con bastante precisión

    • ¿Que la mayoría de los niños no leían el manual? Yo, cuando compraba un juego nuevo, leía el manual varias veces en el carro de camino a casa. Si era un juego comprado en Toys“R”Us, quizá lo leía unas doce veces antes de llegar
    • El dicho al aterrizar es: “controla la altitud con el acelerador y la velocidad con el pitch”. La mayoría hace lo contrario
    • Yo también tenía el manual, y de niño de verdad me encantaba leerlos. Pero el aterrizaje en el portaaviones fue una de las experiencias más difíciles que tuve en videojuegos. Mi tasa de éxito era como del 1%, y nunca entendía bien cuál era la diferencia entre lograrlo o fallar
    • La información no solo estaba en el manual; también aparecía en pantalla. Lo que faltaba era el margen de error permitido. Saber que había tolerancia de más o menos 100 en altitud y 50 en velocidad ayuda muchísimo
    • Si te lo prestaba un amigo o lo rentabas, no había manual. Al final no recuerdo cómo descubrí cómo aterrizar, pero sí estoy seguro de que las instrucciones de aterrizaje más bien confundían
  • Este blog está hecho de forma que cuesta explorar el archivo
    No hay enlaces a otras entradas, y fuera de este post el acceso está bloqueado
    blag/posts y blag devuelven error 403, y la página principal solo muestra una foto de una montaña
    Tampoco hay RSS. No es una queja; si es un diseño intencional, lo respeto

    • Según los resultados de Google, solo están indexadas esta entrada y la página de la foto de la montaña. Es muy probable que sea la primera publicación del sitio
    • En la red de mi empresa (ZScaler), este sitio está clasificado en la categoría de armas/bombas y por eso está bloqueado. No pude abrir ese enlace
  • Aterrizar en el portaaviones no era tan difícil, pero el reabastecimiento en el aire sí estaba brutal. Solo lo logré unas cuantas veces
    Video del juego

    • La música de fondo en la escena de reabastecimiento era buenísima, pero no está en el video enlazado. ¿Será otra versión? En esta versión sí aparece
    • Apenas hice clic en el enlace me cayó toda la nostalgia de golpe y cerré la pestaña. Aterrizar en el portaaviones ya era frustrante, pero reabastecerse estaba en otro nivel. Me acordé de cuando pasábamos la noche en casa de un amigo, jugando NES y comiendo pizza
    • Qué sistema tan conveniente que al reabastecerte también te rellenaran los misiles
    • Pero espera, ¿que el avión cisterna iba a 1,400 millas por hora? ¡Eso es casi Mach 2!
    • A mí me pasó igual :) Aun así, repetir esos intentos era divertido
  • Me vino a la mente la frase legendaria: “This business will get out of control…”

  • Este juego también salió en un video de Angry Video Game Nerd
    Video relacionado

    • En la secuela sale AVGN intentando aterrizar. Es una técnica casi de desmantelamiento
      Enlace de YouTube
  • Yo no jugué Top Gun, pero sí disfruté mucho Turn and Burn: No Fly Zone en SNES
    Incluso ahora me sorprende cuánto avanzaban los gráficos con cada cambio generacional

    • En cuanto a salto gráfico entre generaciones, creo que la diferencia más grande fue entre Super Mario 64(N64) y Resident Evil 4(GameCube)
      El salto de NES a SNES también fue parecido. De PS1 a PS2 y a PS3, como la era 3D ya estaba establecida, los cambios se volvieron cada vez más graduales
  • Dicen que aterrizar en Top Gun es difícil, pero el acoplamiento al satélite en Captain Skyhawk es muchísimo peor
    Tienes que acoplarte mientras explotan por todos lados los efectos de demoscene de RARE

    • El secreto es solo uno: al acoplarte, muévete solo de arriba abajo
  • Para comparar, comparto un ejemplo de código de validación de aterrizaje escrito en Python
    Según la altitud, la velocidad y la dirección, devuelve TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH y otros valores

    • Sí podría haberse visto así de verdad. Me da curiosidad con qué LLM generaron ese código
    • Pero incluso cuando el código está demasiado cargado hacia la derecha devuelve TOO_SLOW_OR_TOO_LOW. En el desensamblado original, salta a too_far_right
  • Me encantan este tipo de travesuras de simulador
    En X‑Plane hasta puedes aterrizar un 737 en un portaaviones. Solo hay que cargar combustible para 30 minutos, bajar los flaps al máximo y activar el freno de estacionamiento justo antes de tocar pista

    • Puede que incluso sea posible en la vida real. La Marina de EE. UU. llegó a aterrizar un C‑130 en el USS Forrestal
      Claro, según las cifras oficiales un 737 necesitaría una pista mucho más larga, pero si el portaaviones navega contra el viento puede obtener más de 40 nudos de viento en contra
  • Jugué este juego de niño, pero nunca logré aterrizar en el portaaviones. Ese era trabajo de los hermanos mayores

    • Igual yo. El juego me encantaba, pero siempre me estrellaba al aterrizar
      Un día, en el programa de cuidado después de clases, un amigo dijo que sí sabía aterrizar en este juego, así que armamos una operación en equipo
      Yo hacía los combates y él los aterrizajes, y juntos terminamos Top Gun y The Second Mission en unas pocas horas
      Hasta hoy lo recuerdo con cariño como uno de los pocos juegos de NES que terminé con un amigo, sin trucos ni Game Genie