Le problème

Mon héros refusait de bouger proprement. Dès qu'il se déplaçait, il clignotait et laissait des traînées derrière lui, et les projectiles sautaient. À l'écran, ça donnait l'impression d'un jeu tout buggué.

La cause tient à la façon dont l'Atari affiche son image. Pour décaler un personnage de quelques pixels, la machine doit retravailler ses données à chaque image, cinquante fois par seconde. Pour un sprite de cette taille, c'est un travail considérable, répété en boucle, et le 68000 n'a tout simplement pas le temps de le faire pour le héros, les projectiles, le décor qui défile et la logique du jeu en même temps. Quelque chose devait sauter, et c'était l'affichage du héros.

Les fausses pistes

J'ai d'abord voulu confier ce travail au Blitter, la puce d'accélération graphique du STe. Sur le papier, c'est exactement son rôle. En pratique, le régler correctement pour mon cas s'est révélé d'une fragilité décourageante : des bandes parasites, des traînées, des défauts presque impossibles à isoler.

J'ai ensuite essayé d'alterner entre deux images à l'écran. Ça a corrigé un défaut pour en créer un autre, des sprites fantômes qui réapparaissaient une fraction de seconde plus tard.

Aucune des deux pistes n'était la bonne. La solution est venue, comme souvent sur cette machine, d'une idée plus simple.

La solution : tout préparer à l'avance

L'astuce, c'est de ne presque rien calculer en direct. Plutôt que de retravailler le héros à chaque image, je prépare une fois pour toutes, au lancement du jeu, toutes les positions intermédiaires possibles du personnage. Ensuite, pendant la partie, la machine n'a plus qu'à choisir la bonne et l'afficher. Le gros du travail est fait avant même que le joueur appuie sur une touche.

Ça coûte un peu de mémoire, mais sur le STe la mémoire est la ressource dont on dispose, et le temps de calcul celle qui manque. C'est exactement le bon échange.

Tout est automatisé : je dessine le héros dans un simple fichier image, et un outil fabrique pour moi toutes les variantes nécessaires. Si je retouche le dessin, je relance l'outil et le jeu se met à jour.

Le résultat

Le clignotement a disparu. Le héros se déplace proprement, les projectiles suivent, et il reste largement assez de marge pour faire vivre le reste du jeu à pleine vitesse. C'est la fondation sur laquelle reposeront ensuite les animations de marche, les ennemis et les combats.

La suite

Maintenant que les sprites tiennent la route, place à ce qui les rend vivants : les animations, les ennemis, et les premières confrontations.