1 points par GN⁺ 2025-12-16 | 1 commentaires | Partager sur WhatsApp
  • Une analyse par rétro-ingénierie du système d’atterrissage sur porte-avions de Top Gun sur NES révèle les conditions exactes de validation de l’atterrissage
  • Pour réussir l’atterrissage, il faut une altitude comprise entre 100 et 299, une vitesse comprise entre 238 et 337 et viser droit vers l’avant du porte-avions
  • L’indication « Alt. 200 / Speed 288 » sur le MFD du jeu présente en réalité la valeur médiane de la plage autorisée
  • La vitesse et l’altitude sont stockées en mémoire au format BCD (décimal codé binaire), et la fonction de validation s’exécute à une adresse précise
  • Un exemple de déchiffrement d’une logique interne précise dans un ancien jeu, utile pour l’analyse de jeux rétro et l’apprentissage du débogage

Conditions de base de la validation de l’atterrissage

  • Pour réussir l’atterrissage, il faut une altitude de 100 à 299, une vitesse de 238 à 337, ainsi qu’une orientation précise vers le porte-avions
    • Ces trois conditions sont toutes vérifiées au moment où la séquence d’atterrissage se termine
  • L’affichage « Alt. 200 / Speed 288 » à l’écran correspond en réalité à la valeur médiane de la plage autorisée, ce qui en fait une bonne cible pour le joueur
  • L’altitude et la vitesse se règlent via les commandes de poussée et l’angle de tangage, tandis que l’orientation n’est signalée que par l’alerte « Right! Right! », sans autre indicateur dédié

Structure mémoire et variables internes

  • Principales adresses mémoire et contenu stocké
    • $40–$41 : vitesse (format BSD), plage autorisée 238–337
    • $3D–$3E : altitude (format BSD), plage autorisée 100–299
    • $FD : direction (Heading), dans une plage de -32 à +32, avec 0–7 permettant l’atterrissage
    • $9E : stockage du résultat de validation de l’atterrissage, avec la valeur 0 pour une réussite
  • La vitesse et l’altitude sont stockées en BCD (Binary Coded Decimal) afin de simplifier l’affichage à l’écran
    • Exemple : 1234 est stocké sous la forme 0x1234 (4660 en décimal)

Routine de validation de l’atterrissage

  • La fonction située à l’adresse $B6EA vérifie l’état d’atterrissage et enregistre le résultat dans $9E
  • La routine compare successivement l’altitude, la vitesse et la direction, puis renvoie des codes différents si une condition n’est pas respectée
    • Par exemple, trop haut ou trop rapide renvoie le code 8, trop bas ou trop lent renvoie le code 4
  • Si toutes les conditions sont remplies, la valeur est définie sur LDX #00, ce qui correspond à une réussite

Débogage et code de triche

  • Le code Game Genie AEPETA permet de valider systématiquement un atterrissage comme réussi
  • Ce code contourne la routine de validation réelle et force l’écriture d’un résultat de réussite

Conclusion

  • Le système d’atterrissage de Top Gun sur NES ne repose pas sur de simples commandes, mais sur une logique de validation précise fondée sur des valeurs numériques
  • La rétro-ingénierie permet de confirmer clairement la structure mémoire interne des jeux rétro et leur manière de gérer les branchements conditionnels
  • C’est un bon exemple de la précision de conception des jeux classiques, avec une forte valeur de référence pour l’analyse de logique de jeu et les travaux de restauration

1 commentaires

 
GN⁺ 2025-12-16
Réactions sur Hacker News
  • Les informations pour faire atterrir l’avion correctement étaient toutes dans le manuel
    La vitesse et l’altitude nécessaires n’étaient pas secrètes, mais la plupart des enfants ne lisaient pas le manuel
    La vraie difficulté du jeu venait de son moteur physique à moitié réaliste. Mon grand frère, qui suivait des cours de pilotage, atterrissait facilement et m’a aussi expliqué comment faire
    Il fallait gérer la vitesse et l’altitude avec les gaz et l’angle de tangage, donc il ne suffisait pas d’appuyer simplement sur le moteur ou sur le bouton d’aérofrein
    Son conseil, c’était que pendant une descente raide, la vitesse ne baisse pas, donc il fallait relever légèrement le nez et sortir l’aérofrein pour ralentir, puis remettre l’avion à l’horizontale. Le jeu modélisait ça de façon assez fidèle

    • La plupart des enfants ne lisaient pas le manuel ? Moi, quand j’achetais un nouveau jeu, je lisais le manuel plusieurs fois dans la voiture sur le trajet du retour. Si c’était un jeu acheté chez Toys“R”Us, je l’avais peut-être lu une douzaine de fois avant même d’arriver à la maison
    • Le dicton pour l’atterrissage, c’est : « contrôlez l’altitude avec les gaz, et la vitesse avec le tangage ». La plupart font l’inverse
    • J’avais aussi le manuel, et quand j’étais enfant j’adorais vraiment les lire. Mais l’atterrissage sur porte-avions a été l’une des expériences de jeu les plus difficiles de ma vie. Mon taux de réussite devait tourner autour de 1 %, et je n’ai jamais compris ce qui faisait la différence entre un succès et un échec
    • Les informations n’étaient pas seulement dans le manuel, elles étaient aussi affichées à l’écran. Il manquait juste les tolérances. Savoir qu’il y avait une marge d’environ ±100 en altitude et ±50 en vitesse aide beaucoup
    • Quand on empruntait le jeu à un ami ou qu’on le louait, il n’y avait pas de manuel. Je ne me souviens plus comment j’ai fini par comprendre la procédure d’atterrissage, mais ce qui est sûr, c’est que les instructions d’atterrissage étaient au contraire assez confuses
  • Ce blog rend l’exploration de ses archives difficile
    Il n’y a pas de lien vers d’autres articles, et à part ce billet, l’accès semble bloqué
    blag/posts et blag renvoient une erreur 403, et la page d’accueil ne montre qu’une photo de montagne
    Il n’y a pas non plus de flux RSS. Ce n’est pas une plainte, et si c’est un choix de design assumé, je le respecte

    • D’après les résultats Google, seuls cet article et la page avec la photo de montagne sont indexés. C’est probablement le premier billet du site
    • Sur le réseau de mon entreprise (ZScaler), ce site est bloqué car classé dans la catégorie armes/bombes. Je n’ai pas pu ouvrir ce lien
  • L’atterrissage sur porte-avions n’était pas si difficile, mais le ravitaillement en vol était vraiment infernal. Je n’ai dû y arriver que quelques fois
    Vidéo du jeu

    • La musique de fond de la séquence de ravitaillement était fantastique, mais elle n’est pas dans la vidéo liée. C’est une autre version ? Cette version l’a bien
    • Rien qu’en cliquant sur le lien, les souvenirs me sont revenus d’un coup et j’ai refermé l’onglet. L’atterrissage sur porte-avions était déjà pénible, mais le ravitaillement était d’un tout autre niveau. Ça m’a rappelé les nuits chez des amis à jouer à la NES en mangeant des pizzas
    • Le fait que le ravitaillement recharge aussi les missiles était un système drôlement pratique
    • Par contre, voir le ravitailleur voler à 1 400 miles par heure, c’est presque Mach 2 !
    • Moi aussi :) Mais malgré tout, c’était amusant de multiplier ce genre d’essais
  • Cette réplique culte me revient immédiatement : « This business will get out of control… »

    • Ça fait 12 ans que je ressors cette phrase en permanence. Extrait YouTube
  • Ce jeu a aussi été traité dans une vidéo de Angry Video Game Nerd
    Vidéo associée

    • Dans la suite, on voit l’AVGN tenter l’atterrissage. C’est quasiment une technique de désossage
      Lien YouTube
  • Je n’ai pas joué à Top Gun, mais j’aimais beaucoup Turn and Burn: No Fly Zone sur SNES
    Même aujourd’hui, ça me frappe de voir à quel point les graphismes ont progressé d’une génération à l’autre

    • En matière d’écart graphique entre générations, je pense que la différence entre Super Mario 64(N64) et Resident Evil 4(GameCube) est l’une des plus marquantes
      La transition NES→SNES était d’un niveau comparable. Avec PS1→PS2→PS3, l’ère de la 3D s’était déjà installée, donc l’évolution est devenue plus progressive
  • On dit souvent que l’atterrissage dans Top Gun est difficile, mais l’amarrage au satellite dans Captain Skyhawk l’est encore plus
    Il faut s’amarrer pendant que les effets façon demoscene de RARE explosent dans tous les sens

    • Il n’y a qu’un seul secret : pendant l’amarrage, ne bouger qu’en vertical
  • À titre de comparaison, quelqu’un a partagé un exemple de code Python pour la logique de validation d’atterrissage
    Selon l’altitude, la vitesse et la direction, il renvoie TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH, etc.

    • Ça pourrait vraiment avoir cette tête-là. Je me demande avec quel LLM ce code a été généré
    • Mais le code renvoie aussi TOO_SLOW_OR_TOO_LOW quand on est trop décalé vers la droite. Dans le désassemblage d’origine, ça saute vers too_far_right
  • J’adore ce genre de bricolages de simulateur
    Dans X‑Plane, on peut même faire atterrir un 737 sur un porte-avions. Il suffit d’embarquer seulement 30 minutes de carburant, de sortir les volets au maximum et d’enclencher le frein de parking juste avant le toucher

    • En réalité, ce n’est peut-être pas impossible non plus. L’US Navy a déjà fait atterrir un C‑130 sur l’USS Forrestal
      Bien sûr, sur le papier un 737 demande une piste beaucoup plus longue, mais si le porte-avions avance face au vent, on peut obtenir plus de 40 nœuds de vent relatif de face
  • J’ai joué à ce jeu étant enfant, mais je n’ai jamais réussi à atterrir sur le porte-avions. C’était le rôle des grands frères

    • Pareil pour moi. J’adorais vraiment le jeu, mais je m’écrasais toujours à l’atterrissage
      Un jour, au centre aéré après l’école, j’ai appris qu’un ami savait bien faire atterrir dans ce jeu, alors on a monté une opération en coopération
      Moi, je faisais les combats, lui les atterrissages, et ensemble on a terminé Top Gun et The Second Mission en quelques heures
      C’est resté l’un de mes meilleurs souvenirs de la NES, et l’un des rares jeux que j’ai finis avec un ami sans triche ni Game Genie