Un bêta-testeur qui joue à FF4
· atelier
Je voulais tester mes modifs de FF4 dans tous les sens, et les combats en portent pas mal. Alors j'ai fait betaplayer. C'est un petit agent (PPO) qui joue les combats dans kintsuki. À chaque tour il choisit une vraie commande, un sort ou un objet et une cible, depuis de vraies sauvegardes, contre les formations que le jeu tire sur le terrain. Il regarde les sorts et les objets d'après ce que la ROM dit qu'ils font, donc un sort qu'il a peu vu est quand même jugé sur sa puissance et son coût.
Sur le premier long entraînement, il est passé de 38 % à 88 % de combats gagnés, et les combats ont raccourci, d'environ 9000 frames à 3700. Il a aussi appris à se servir des objets et des sorts, pas seulement de Combat.
Quand ça casse¶
Quand une étape dure trop ou que le CPU s'arrête, le worker écrit un rapport : une sauvegarde d'état avant l'étape, une au moment du blocage, une capture, les registres, la pile d'appels avec les symboles, et l'étape rejouée sous le traceur jusqu'au plantage. Le rapport note sur quel build il se rejoue, et ce départ n'est plus jamais tiré, pour qu'un combat pourri ne bouffe pas tout l'entraînement.
Un glitch graphique ne bloque rien, alors il y a une « télé de surveillance » : l'écran de chaque worker, tous dans une fenêtre. Si je clique sur l'un d'eux, ça fait un rapport aussi.
Le mode chasse, je le lance sur un nouveau build : il joue juste les combats sans apprendre, et à la fin j'ai un résumé de ce qui a planté.
Ce qu'il a trouvé¶
Dans le patch, corrigé :
- L'inventaire de combat dessinait depuis la NMI sans remettre les pointeurs de DrawText. Le message suivant lisait des lignes d'inventaire comme du texte et tombait dans la boucle du jeu pour une variable invalide.
- Le transfert de l'inventaire rendait la main au jeu avec n'importe quoi dans l'octet haut de A, et le jeu se servait de A pour indexer une table de sauts. Ça finissait sur un
BRK. - Le pool des trampolines de la banque
$01réservait plus que ce qui en avait été déplacé, donc il écrasait le code d'animation des combats du jeu, celui qu'appellent les invocations et Téléport. Encore unBRK.
Dans le patch, pas encore corrigé : les noms de monstres longs perdent leurs premières lettres dans la fenêtre de combat. Celui-là ne bloque rien, je l'ai vu sur la télé de surveillance.
Dans le jeu japonais d'origine, toujours ouvert : un combat qui tourne en boucle à $02:EA4x, qui arrive aussi depuis un combat que le jeu lance tout seul, et une attente sur l'envoi au driver son qui ne finit jamais. Ce dernier pourrait aussi venir du timing SPC de kintsuki, je n'ai pas encore regardé.