1 pontos por GN⁺ 2025-12-16 | 1 comentários | Compartilhar no WhatsApp
  • Uma análise de engenharia reversa do sistema de pouso no porta-aviões de Top Gun para NES revela as condições exatas para validar o pouso
  • Para pousar com sucesso, é necessário altitude entre 100 e 299, velocidade entre 238 e 337 e mirar exatamente à frente do porta-aviões
  • A indicação “Alt. 200 / Speed 288” no MFD do jogo na verdade apresenta os valores centrais da faixa permitida
  • Velocidade e altitude são armazenadas na memória em BCD (decimal codificado em binário), e a função de validação é executada em endereços específicos
  • Um caso de decodificação da lógica interna precisa de um jogo antigo, útil para análise e aprendizado de depuração de jogos retrô

Condições básicas da validação de pouso

  • Para pousar com sucesso, é necessário altitude entre 100 e 299, velocidade entre 238 e 337 e direção exata em relação ao porta-aviões
    • Essas três condições são verificadas todas no momento em que a sequência de pouso termina
  • A indicação “Alt. 200 / Speed 288” na tela do jogo corresponde ao valor central da faixa realmente permitida, sendo um bom alvo para o jogador
  • A altitude e a velocidade são ajustadas com entrada de throttle e ângulo de pitch, enquanto a direção não tem indicador separado e só recebe feedback pelo alerta “Right! Right!”

Estrutura de memória e variáveis internas

  • Principais endereços de memória e conteúdos armazenados
    • $40–$41: velocidade (formato BSD), faixa permitida de 238 a 337
    • $3D–$3E: altitude (formato BSD), faixa permitida de 100 a 299
    • $FD: direção (Heading), dentro da faixa de -32 ~ +32, valores de 0 a 7 permitem pouso
    • $9E: armazena o resultado da validação de pouso; valor 0 significa sucesso
  • Velocidade e altitude são armazenadas em BCD(Binary Coded Decimal) para simplificar a exibição na tela
    • Ex.: 1234 é armazenado na forma 0x1234 (decimal 4660)

Rotina de validação de pouso

  • A função no endereço $B6EA verifica o estado de pouso e grava o resultado em $9E
  • A rotina compara altitude, velocidade e direção em sequência e, se alguma condição sair da faixa, retorna códigos diferentes
    • Ex.: se estiver alto ou rápido demais, retorna código 8; se estiver baixo ou lento demais, retorna código 4
  • Se todas as condições forem atendidas, define LDX #00 e trata como sucesso

Depuração e código de cheat

  • Com o código Game Genie AEPETA, o pouso sempre é considerado bem-sucedido
  • Esse código ignora a rotina real de validação e força o registro do resultado como sucesso

Conclusão

  • O sistema de pouso em Top Gun de NES não é apenas uma mecânica simples, mas uma lógica de validação precisa baseada em valores numéricos
  • A engenharia reversa permite confirmar com clareza a estrutura interna de memória e o modo de ramificação de condições em jogos retrô
  • É um exemplo que mostra a precisão de projeto dos jogos clássicos e tem alto valor como referência para análise de lógica de jogo e pesquisa de restauração

1 comentários

 
GN⁺ 2025-12-16
Comentários do Hacker News
  • As informações para pousar o avião corretamente estavam todas no manual
    A velocidade e a altitude necessárias não eram segredo, mas a maioria das crianças não lia o manual
    A verdadeira dificuldade do jogo vinha do motor de física meio realista. Meu irmão mais velho, que fazia escola de aviação, pousou com facilidade e depois me ensinou como fazer
    A velocidade e a altitude tinham que ser controladas com o throttle e o ângulo de pitch, então não adiantava simplesmente apertar o botão do motor ou do airbrake
    A dica que ele me deu foi que, durante um mergulho acentuado, a velocidade não diminui, então era preciso levantar um pouco o nariz e abrir o airbrake para reduzir a velocidade, depois nivelar a aeronave. O jogo modelava isso com bastante precisão

    • A maioria das crianças não lia o manual? Quando eu comprava um jogo novo, lia o manual várias vezes no carro, voltando para casa. Se fosse um jogo comprado na Toys“R”Us, talvez eu tivesse lido umas doze vezes antes de chegar em casa
    • O ditado para pouso é: “controle a altitude com o throttle e a velocidade com o pitch”. A maioria faz o contrário
    • Eu também tinha o manual e, quando era criança, adorava ler manuais. Mesmo assim, o pouso no porta-aviões foi uma das experiências mais difíceis que já tive em videogame. Minha taxa de sucesso era algo como 1%, e eu simplesmente não conseguia entender a diferença entre sucesso e fracasso
    • As informações apareciam não só no manual, mas também na tela. Só que faltava a margem de tolerância. Saber que havia uma folga de algo como altitude ±100 e velocidade ±50 ajudaria muito
    • Quando o jogo era emprestado por um amigo ou alugado, não havia manual. No fim, não lembro como descobri como pousar, mas tenho certeza de que as instruções de pouso eram mais confusas do que ajudavam
  • Este blog está difícil de navegar como arquivo
    Não há links para outros textos, e fora deste post o acesso parece bloqueado
    blag/posts e blag retornam erro 403, e a página raiz tem só uma foto de montanha
    Também não há feed RSS. Não é uma reclamação; se for um design intencional, respeito

    • Segundo os resultados do Google, só este texto e a página da foto da montanha estão indexados. É bem possível que seja o primeiro post do site
    • Na rede da empresa (ZScaler), este site é classificado na categoria armas/bombas e acaba bloqueado. Não consegui abrir este link
  • Pousar no porta-aviões não era tão difícil, mas o reabastecimento em voo era realmente complicado. Só consegui algumas vezes
    Vídeo do jogo

    • A música de fundo da cena de reabastecimento era ótima, mas não está no vídeo do link. Será que é outra versão? Nesta versão ela está
    • Assim que cliquei no link, fui atingido por uma onda de nostalgia e fechei a aba. Pousar no porta-aviões já era irritante, mas reabastecer era de outro nível. Me fez lembrar das noites jogando NES na casa de um amigo, comendo pizza
    • Era um sistema bem conveniente: ao reabastecer, os mísseis também eram repostos
    • Mas espera, a velocidade do avião-tanque é de 1.400 milhas por hora? Isso dá quase Mach 2!
    • Comigo também foi assim :) Mesmo assim, era divertido ficar repetindo essas tentativas
  • Essa fala icônica me vem à cabeça: “This business will get out of control…”

  • Este jogo também apareceu em um vídeo do Angry Video Game Nerd
    Vídeo relacionado

    • Na continuação, o AVGN aparece tentando pousar. É uma técnica quase digna de desmonte completo
      Link do YouTube
  • Eu não joguei Top Gun, mas curtia muito Turn and Burn: No Fly Zone, do SNES
    Mesmo vendo hoje, ainda impressiona o quanto os gráficos evoluíam de uma geração para outra

    • Em termos de salto gráfico entre gerações, acho que a maior diferença foi entre Super Mario 64(N64) e Resident Evil 4(GameCube)
      A transição de NES→SNES também foi parecida. De PS1→PS2→PS3, a era 3D foi se consolidando, então as mudanças ficaram cada vez mais graduais
  • Dizem que o pouso em Top Gun é difícil, mas o acoplamento ao satélite em Captain Skyhawk é muito mais complicado
    Você precisa acoplar no meio dos efeitos de demoscene da RARE explodindo na tela

    • O segredo é um só: durante o acoplamento, mover apenas para cima e para baixo
  • Para comparação, compartilho um exemplo de código em Python para a lógica de detecção de pouso
    Dependendo da altitude, velocidade e direção, ele retorna TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH etc.

    • Realmente poderia ser algo assim. Fico curioso para saber com qual LLM esse código foi gerado
    • Mas o código também retorna TOO_SLOW_OR_TOO_LOW quando o caso é estar muito deslocado para a direita. No disassembly original, ele salta para too_far_right
  • Eu adoro esse tipo de brincadeira com simulador
    No X‑Plane, dá até para pousar um 737 em um porta-aviões. É só levar combustível para 30 minutos, baixar os flaps ao máximo e puxar o freio de estacionamento logo antes do toque

    • Talvez até fosse possível na vida real. A Marinha dos EUA já pousou um C‑130 no USS Forrestal
      Claro que, oficialmente, o 737 precisaria de uma pista bem mais longa, mas se o porta-aviões navegar contra o vento, dá para obter mais de 40 nós de vento de proa
  • Joguei este jogo quando era criança, mas nunca consegui pousar no porta-aviões. Aquilo era tarefa dos irmãos mais velhos

    • Mesma coisa comigo. Eu adorava o jogo, mas sempre caía na hora do pouso
      Um dia, no after-school, um amigo disse que sabia pousar bem nesse jogo, então montamos uma operação em equipe
      Eu cuidava do combate, ele fazia os pousos, e juntos zeramos Top Gun e The Second Mission em poucas horas
      Continua sendo uma das poucas experiências em que terminei um jogo de NES com um amigo, sem cheat nem Game Genie, e até hoje guardo essa lembrança com carinho