Triceraprog
La programmation depuis le Crétacé

Cross Chase, un défi multiplateforme ()

Des jeux vidéo récents sur des vieilles machines, il en sort régulièrement. Ainsi que des portages de jeux d'une de ces machines vers une autre de la même époque, qui n'avait pas eu sa version. Ou bien encore des versions améliorées.

CROSS-CHASE est un jeu développé par Fabrizio Caruso dont l'idée est un peu différente. Le défi est de développer un jeu vidéo sur l'ensemble des machines 8 bits. Le défi n'est pas terminé mais déjà bien avancé : Jupiter ACE, Apple II, Aquarius, Oric Atmos, C64, CPC, VIC20, VG5000µ,...

L'enjeu est donc de trouver un gameplay assez simple qui pourra être supporté par toutes ses machines, et programmer de manière à minimiser l'effort de portage sur chacun de ces hardwares.

Le joueur contrôle un personnage qui doit fuir des cercles en s'en débarassant par collision sur des X. C'est fun et rapide, jouable, dans l'esprit de l'époque. Il y a même plusieurs niveaux sur les version complètes.

CROSS-CHASE

En effet, il y a des limites à la portabilité entre ces machines du fait principalement de leurs capacités mémoire. Le jeu est donc séparé en une version complète nécessitant plus de mémoire qu'une version minimale, consommant elle un maximum de 16 ko.

J'ai pu essayer sur du vrai matériel les version VG5000µ et Commodore 64. La version Commodore 64 dispose de caractères redéfinis, ce qui ajoute une touche sympathique. Elle n'est cependant jouable qu'au joystick, ce que j'ai trouvé assez dommage, car cela manque de la précision que l'on peut avoir au clavier. La version VG5000µ ne se joue elle qu'au clavier, mais la disposition des touches de cette machine ne rend pas le contrôle du jeu optimal.

N'empêche, je me suis bien amusé.


Et la technique ?

Ce site parlant programmation, voyons quels sont les outils utilisés par CROSS-CHASE.

Tout d'abord, la grande partie du jeu est programmée en C, compilé avec CC64 pour les ordinateurs utilisant un CPU 6502 et Z88DK pour les ordinateurs utilisant un CPU Z80 (je ne fais là que paraphraser le contenu du README). Le choix du C permet un code objet compact, proche de la machine tout en restant portable. Le code ne sera pas optimal pour chaque machine, mais pour un portage sur autant de plateformes différentes, le choix est judicieux. On se rapproche ici des méthodes modernes de jeux développés sur plusieurs plateformes.

Dans le code VG5000µ, l'appel de l'affichage de caractère est néanmoins en assembleur, ainsi que le code pour faire disparaître le curseur. Le reste profite du support des compilateurs et de leurs bibliothèques.

Le reste de la stratégie de portage consiste à un mélange de fichiers spécifiques compilés uniquement pour les bonnes cibles et l'utilisation de #define/#ifdef. Le choix entre jeu minimal et complet est aussi fait par utilisation de #define/#ifdef.

Niveau compilation, depuis quelques jours un Makefile est apparu et à remplacé la multitudes des fichiers batch de compilation spécialisés par plateforme (qui ont été déplacées au chaud dans un répertoire batches). C'est bien plus pratique à lire.

Cerise sur le gâteau : les sources sont disponibles, ce qui donne un bon exercice de lecture.

Je vous conseille d'aller voir ce projet et de jouer au jeu sur la machine de votre choix. Il devrait bien y avoir une version pour votre machine préférée !

CROSS-CHASE