Adventure Castle fait peau neuve

De temps à autre, j’aime bien chercher sur internet des vieux jeux d’aventure dont le code source est disponible, pour voir ensuite voir si ce code est toujours compilable et exécutable sur un ordinateur moderne.

C’est ainsi que je suis tombé sur Adventure Castle développé en langage C par Dave Dunfield. L’archive Castle.zip est téléchargeable sur ifarchive.org. Le jeu est également répertorié sur IFDB mais la page dédiée ne donne presque aucun information, à l’exception de l’auteur et de la date de création du jeu (1983). En ouvrant le fichier Castle.zip, l’on obtient quelques informations supplémentaires :

Dave Dunfield's "Adventure Castle", a clone of "Colossal Cave"

Written in Micro-C, runs on DOS 2.0 and up (PCs).
Binary built by Dosius.

Micro-C semble être un ancien compilateur pour MS-DOS. L’archive Castle.zip contient les fichiers suivantes :

castle.c            Code source en C
castle.com Exécutable pour MS-DOS
castle.dat Fichier binaire de description des lieux
castle.hlp Fichier texte affichant une aide

Vous pouvez directement jouer à Adventure Castle avec DOSBox. Sous Linux (Debian ou Ubuntu), l’installation de DOSBox se fait de la façon suivante :

Ensuite, pour lancer le jeu, après avoir extrait les fichiers de l’archive Castle.zip :

Le jeux se lance dans une nouvelle fenêtre :

Il est bien sûr possible d’utiliser DOSBox avec d’autres distributions Linux ou avec Windows.

Adaptation du code source pour GCC

Le premier essai de compilation du code source avec gcc a été un échec. En effet, certaines fonctions utilisées pour manipuler les fichiers ne sont pas compatibles avec la librairie C standard actuelle, parmi lesquelles fopen (ouverture d’un fichier), ftell (récupération de la position courante dans le fichier en cours de lecture) et fseek (positionne la tête de lecture à la position donnée en paramètre). Ces dernières sont utilisées pour lire le fichier binaire castle.dat qui contient la description des 180 lieux (ou salles) du jeu. La structure est particulière, le caractère nul (0) est le délimiteur d’une nouvelle salle, il est suivi de la description dans un format chiffré.

J’ai effectué de nombreuses autres adaptations sur le code, certaines pour pouvoir rendre le programme compilable avec gcc et fonctionnel, d’autres d’ordre esthétique.

Liste des adaptations pour compilation avec gcc:
- Correction de l'utilisation des fonctions de manipulation de fichiers : fopen, ftell, fseek
- Déclaration des fonctions dans un style moderne
- Ajout des types t_bool, t_usi (entier court non signé) et t_si (entier court signé)
- Correctif dans la fonction parse(), les commandes de l'utilisateur n'étaient plus reconnues
- Correction du calcul du score dans la fonction end_game()
- Pour la fonction rand(), initialisation de la graine avec une lecture de l'heure (utilisation de time.h)
- Suppression de tous les warnings générés par gcc avec l'option -Wall.

Voici l’archive avec le code source mis à jour :

J’ai ajouté un Makefile qui permet de produire l’exécutable castle. Pour compiler :

Pour lancer le jeu :

Le jeu s’exécute dans la console :

Enfin, j’ai créé un petit utilitaire extrdat qui extrait les données du fichier binaire castle.dat et les affiche sur la sortie standard dans un format texte lisible. Vous pouvez ainsi voir en clair la description des 180 salles. Le source est castle_extract_dat.c. Pour le compiler : make extract

Il ne vous reste plus qu’à résoudre l’aventure… Je n’ai pas fait beaucoup de tests, il se peut donc qu’il reste quelques bugs… N’hésitez pas à me les signaler le cas échéant.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *