Natif / Étude de cas interactive / 22 min de lecture
TH04 : comment 16 projectiles savent-ils où vous êtes ?
Explorez les anneaux de projectiles de TH04 avec REA. Suivez les angles sur un octet, la visée et la rotation, puis testez une reconstruction dans un schéma interactif.
Sur cette page
01. Essayez avant de décortiquer
Déplacez le losange autour du centre, puis tirez un anneau. Le rayon clair indique le premier projectile. Passez de 16 à 12 projectiles : les pas angulaires entiers ne divisent plus le cercle uniformément. Les curseurs permettent aussi un contrôle au clavier.
16 directions, espacées de 16 unités angulaires.
Schéma angulaire, pas une capture du jeu. La visée à la souris utilise une conversion atan2 approchée ; l’original emploie iatan2.
Un schéma angulaire interactif et un petit calcul d’anneau, avec des vérifications explicites d’arrondi et de dépassement d’octet.
Avant l’investigationLe schéma fonctionne immédiatement. Pour reproduire l’inspection binaire, utilisez votre propre TH04 MAIN.EXE correspondant et le moteur Ghidra configuré. Vous aurez aussi besoin de la version fixée du code de reconstruction lié ci-dessous. Configurer REA →
02. Comprenez l’adressage de l’exécutable
TH04 est un programme DOS pour PC-98. Avant de suivre une adresse de fonction, déterminez comment le chargeur place le fichier en mémoire. Notez l’empreinte de l’exécutable, le segment de chargement, le mode du code et la correspondance entre adresses et positions dans le fichier. Sans profil de chargement, une adresse peut vous mener aux mauvais octets.
Le rapport officiel fournit une fonction connue et une version fixée de la reconstruction pour orienter l’investigation. Utiliser ce repère est un exercice guidé ; cela ne prouve pas qu’un agent a découvert seul tout le programme.
Utilise REA pour ouvrir mon TH04 MAIN.EXE avec Ghidra. Vérifie le profil de chargement DOS MZ et l’identité du fichier par rapport au rapport TH04 lié. S’ils correspondent, inspecte la fonction bullet_velocity_and_angle_set indiquée et retrouve les octets du fichier à partir de son adresse. Si le fichier ou le profil diffère, cesse d’utiliser les anciennes adresses et explique comment trouver une fonction équivalente.03. Retrouvez une direction avant de dessiner l’anneau
La question clé est l’ordre des opérations. Étudiez séparément l’indice, le nombre, la visée et la rotation. Pour cette branche, le modèle lisible est floor(index × 256 / count), auquel on ajoute visée et rotation avant de ramener le résultat sur un octet. À l’écran, les angles augmentent dans le sens horaire.
Essayez douze projectiles. Multiplier avant de diviser donne les décalages 0, 21, 42, 64… Multiplier l’indice par floor(256 / count) donnerait 0, 21, 42, 63… Les calculs concordent au début, puis divergent. Un cercle visuellement plausible peut masquer cette erreur.
- 16 projectiles, sans visée : 0, 16, 32, …, 240.
- 12 projectiles : l’indice 3 doit donner 64, pas 63.
- Une visée de 250 plus un décalage de 16 donne 10 après retour sur un octet.
- Droite = 0, bas = 64, gauche = 128 et haut = 192.
04. Séparez la règle de l’anneau de la fonction de visée
Suivez l’arrivée des coordonnées du joueur et de l’origine dans la fonction de direction. Repérez ensuite l’ajout de la rotation du motif et le stockage de l’octet final. Consignez ces résultats séparément pour pouvoir tester chaque étape.
Notre schéma utilise atan2 en JavaScript, arrondi à l’angle sur un octet le plus proche, pour viser la souris. L’original emploie iatan2. Obtenir un résultat identique à toutes les coordonnées nécessiterait aussi de retrouver et tester cette fonction ; le schéma montre le calcul de l’anneau sans revendiquer cette équivalence.
Retrouve uniquement la branche de l’anneau dirigé. Montre la séquence qui multiplie avant de diviser, l’appel calculant la visée, l’ajout de la rotation du motif et le stockage de l’octet final. Implémente indépendamment le calcul de l’anneau. Pour le schéma, utilise une visée approchée clairement signalée tant que le comportement original de iatan2 n’a pas été établi séparément. Teste 12 et 16 projectiles, les rotations négatives et le retour sur un octet.05. Testez les angles avant de juger l’image
Exportez les angles numériques pour quelques entrées volontairement délicates. Une capture peut sembler correcte malgré une erreur d’une unité. Testez les nombres de projectiles non divisibles uniformément, une visée proche de 255 et une rotation passant par zéro. Vérifiez la plage de l’octet final, pas seulement l’espacement.
Si le premier rayon manque légèrement le pointeur, examinez la quantification angulaire avant de modifier le calcul de l’anneau. Si le schéma est inversé verticalement, vérifiez vos conventions de coordonnées. Si le graphe d’appels natif paraît incohérent, inspectez l’adressage segmenté en mode réel et les instructions.
06. Comparez les résultats connus
Utilisez ces valeurs comme points de contrôle explicites. Les retrouver étaye cette petite règle, sans établir une compatibilité avec toute l’application.
| Entrées | Angles attendus | Erreur détectée |
|---|---|---|
| nombre 16 ; visée 0 ; rotation 0 | 0, 16, 32, …, 240 | Espacement uniforme |
| nombre 12 ; visée 0 ; rotation 0 | 0, 21, 42, 64, …, 234 | Multiplication avant division |
| nombre 16 ; visée 250 ; rotation 0 | 250, 10, 26, …, 234 | Retour dans la plage d’un octet |
| nombre 4 ; visée 0 ; rotation −1 | 255, 63, 127, 191 | Normalisation d’une rotation négative |
Enregistrez les deux fichiers dans le même dossier. Exécutez les vérifications avec Node.js ; aucun paquet n’est à installer.
node check-case-labs.mjs07. Qu’est-ce qui a réellement été vérifié ?
Ce site teste le calcul extrait des anneaux et affiche un nouveau schéma. Il n’exécute pas le programme DOS original, ne reproduit pas sa fonction iatan2 et ne répète pas les vérifications historiques du compilateur. Seize est le nombre choisi pour l’exemple, pas une garantie concernant chaque difficulté ou état de tir du jeu.
Lire les résultats numériques enregistrés par ce site →
Sources : Rapport d’analyse TH04 de REA · Version fixée de la macro d’anneau reconstruite. Tutoriel, illustrations et expériences dans le navigateur créés indépendamment.
Vous découvrez l’outil ? Qu’est-ce que REA ? · Comment nous vérifions nos guides