- 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
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
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
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
Cette réplique culte me revient immédiatement : « This business will get out of control… »
Ce jeu a aussi été traité dans une vidéo de Angry Video Game Nerd
Vidéo associée
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
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
À 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.TOO_SLOW_OR_TOO_LOWquand on est trop décalé vers la droite. Dans le désassemblage d’origine, ça saute vers too_far_rightJ’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
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
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