Un mégaoctet, et pas un de plus

L'Atari 1040 STf/STe a 1 Mo de mémoire. Le système en prend une part, et il reste au jeu un peu moins de 900 Ko pour absolument tout : le programme, les décors, les personnages, les sons.

Il y a une règle qu'il faut bien connaitre quand on développe sur Atari : le programme est chargé d'un seul bloc, et rien n'en ressort jamais. Il n'y a pas de mémoire virtuelle, pas de pagination, pas de système qui décharge en douce ce qui ne sert plus. Tout ce que je compile dans le jeu occupe de la place du démarrage jusqu'à l'arrêt de la machine.

Or les décors sont ce qu'il y a de plus lourd, et ce sont précisément des données généralement uniques par niveau. Le décor de l'acte II n'a aucune raison d'occuper de la mémoire pendant qu'on joue l'acte I par exemple.

Sortir les décors du programme

Les décors ont donc quitté la RAM pour rester sur la disquette. Ils sont lus quand on entre dans une zone, dans des tampons partagés : le décor qu'on quitte laisse la place à celui qu'on découvre, et le contenu cesse de coûter de la mémoire en permanence ... pour rien.

Le résultat est net. La marge disponible sur une machine de 1 Mo a doublé, et le programme lui-même a perdu pas mal de kilos. Concrètement, ça veut dire des niveaux plus grands et plus détaillés, sans devoir choisir entre la taille d'une carte et le nombre d'ennemis qui y vivent.

Deux précautions ont guidé le travail. D'abord, changer de pièce ne relit le disque que si le décor demandé est vraiment différent : passer une porte et revenir sur ses pas ne déclenche pas de lecture. Ensuite, l'outil que j'ai réalisé, celui qui build la disquette, annonce ce qui ne rentre pas au lieu de tronquer sans rien me dire, le bougre, parce que sinon, on a droit à des bombes.

Le jeu en cours de partie : le heros au centre de la carriere, un Rock Man sur sa gauche, et le bandeau de vie et de score en haut de l'ecran
Le niveau en cours de partie. Tout ce décor est lu depuis le disque à l'entrée dans la zone, et ne pèse plus en permanence sur la mémoire.

Faire du ménage ;)

Le second chantier a consisté à traquer ce qui était chargé sans plus servir à rien. Un lecteur de musique qui attendait un format que je n'utilise plus. Une planche de sprites d'un adversaire qui ne peut pas apparaître dans l'état actuel du jeu. Rien de spectaculaire, mais 53 Ko qui partaient à chaque partie.

Ce genre de ménage n'a rien d'excitant à raconter et c'est pourtant ce qui décide si une idée sera possible ou non trois mois plus tard. Sur cette machine, on ne gagne pas de la place en optimisant : on en gagne en jetant.

Et sur disque dur

Dernier point, très concret pour ceux qui jouent sur du matériel réel équipé : le jeu s'installe maintenant sur un disque dur, dans un seul dossier, sans rien éparpiller sur la partition. Le chargeur cherche les décors à côté du programme avant d'aller les chercher ailleurs. La version disquette, elle, ne voit pas la différence.

Le jeu entier tient dans ce dossier. C'est un cap que je n'aurais pas cru franchir aussi tôt. Merci à la commu pour ce conseil !

La suite

Avec cette marge retrouvée, la priorité redevient le contenu : finir le premier niveau de bout en bout, avec ses ennemis, ses foyers de peste et sa progression, et le mettre entre les mains d'autres joueurs.

Pour découvrir où en est le jeu, voir la page d'accueil.