Le décor arrive du disque
Sur un Atari de 1 Mo, tout ce qui est dans le programme y reste pour toujours et de la mémoire j'en ai besoin ! Les décors des niveaux ont donc quitté la mémoire pour se loger dans la disquette, d'où ils sont lus au moment d'entrer dans une zone. Au passage, le jeu s'installe maintenant sur un disque dur.
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.
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.
Laisser un commentaire