Boulder dash

Retrogaming

Introduction

J’ai eu mon premier ordinateur en 1986. Après avoir goûté à la programmation par le Logo sur le Thomson TO7 de l’école, il me fallait ma propre machine.

Mes parents ne voulant pas que j’utilise la télévision familiale pour cet usage, je devais donc m’orienter vers un ensemble clavier-écran (ou bien acheter un écran supplémentaire qui aurait dépassé mon budget). Cela m’arrangeait vu qu’il prendrait ainsi place dans ma chambre et me serait attribuer à temps plein.

Mon choix (ou plutôt celui de mes parents) s’est donc porté vers le Schneider CPC464 version monochrome (la version belge de l’Amstrad). Heureux choix avec le recul.

Mon premier jeu acheté avec le CPC fût Jumpman , un jeu « budget » basé sur le jeu d’arcade Q*Bert.

Quelques mois plus tard, mon meilleur ami a reçu un CPC6128 avec lecteur de disquette. Lecteur de disquette auquel je n’aurais accès que quelques années plus tard avec le Schneider EuroPC… Mais ceci est une autre histoire, qui sera contée une autre fois..

boulderdash
Ecran de présentation

Vu que nous étions quelques un à avoir un CPC464 à l’école, mon meilleur ami pris donc un lecteur de cassette à connecter sur son 6128. Cela me permit d’avoir le jeu auxquels j’ai le plus joué sur le CPC: Boulder Dash !

Boulder Dash

Boulder Dash est un open-world.. Si, si… N’ayons pas peur des mots. C’est juste un petit vu que la cave n’est composées que de 40 blocs horizontaux sur 22 verticaux.

C’est en partie pour ça que j’adore ce jeu. Le joueur dispose d’une grande liberté de mouvement et chaque cave (les différents niveaux) peut être refaite plusieurs fois sans lassitude.

Aimant tellement ce jeu, j’ai voulu faire ma version sur mes devices Apple (à voir si je la sors un jour… comme beaucoup de mes développements).

Construction des niveaux

Boulder Dash comptant 64 (16 x 4) caves, si il fallait décrire chaque cave, il faudrait 70400 (16 x 5 x 40 x 22) octets. Il y aurait moyen d’optimiser cela étant donné qu’un octet est trop large pour la description d’un bloc mais cela resterait beaucoup trop pour un pauvre Amstrad avec ses 64ko (donc 16ko utilisé pour la gestion de l'écran).

En 2005, Arno Weber interviewa Peter Liepa à propos de son jeu:

[...] L'éditeur m'a mis en contact avec Chris Gray, qui avait soumis un jeu en Basic, mais qui à l'époque n'avait pas les compétences nécessaires pour le convertir en langage machine. Donc, cela semblait être un bon projet pour acquérir de l'experience et je me suis assis et j'ai commencé. Le jeu ressemblait à un jeu d'arcade appelé The Pit, mais après l'avoir examiné de plus près, je ne pensais pas que le jeu avait du potentiel - trop de choses étaient prédéterminées. Mais j'ai commencé à jouer avec des éléments de base tels que la terre, les rochers et les diamants et, en quelques jours, j'ai construit le "moteur physique" de base de ce qui allait devenir Boulder Dash. Je me suis rendu compte qu'en utilisant un générateur de nombres aléatoires, vous pouviez générer des grottes aléatoires, et qu'en contrôlant la densité de rochers et de diamants, vous pouviez jouer à des jeux intéressants. Le jeu était non seulement intéressant du point de vue des casse-tête, mais il faisait également appel à diverses motivations émotionnelles - non seulement psychotiques évidentes telles que la cupidité (collectionner des diamants), la destruction (déloger des rochers et tuer des lucioles) - mais aussi des névrotiques comme le nettoyage de toute les saletés de la grotte. Et je pense que le jeu avait un sens de l'humour - si vous trouvez quelqu'un qui s'ecrase par inadvertance sous un rocher délogé drôle. [...] Peter Liepa (via boulder-dash.nl)

Les caves sont donc décrites via des primitives (remplissage de rectangles aléatoires, placement de lignes et de points, …), l’occupation mémoire est ainsi grandement réduite.

La cave I du premier Boulder Dash, par exemple, est décrite de cette façon en format BDCFF (Boulder Dash Construction Kit File Format)

[cave]
DiamondValue=5 10
DiamondsRequired=75 75 80 85 90
CaveTime=150 150 130 130 120
Colors=Orange Purple White
RandSeed=100 137 140 251 51
RandomFill=BOULDER 240 DIAMOND 120

[objects]
FillRect=5 8 17 20 WALL SPACE
Point=12 8 DIRT
FillRect=25 8 37 20 WALL SPACE
Point=31 8 DIRT
Line=17 16 25 16 WALL
Line=17 17 25 17 SPACE
Point=7 10 INBOX
Point=8 10 OUTBOX
[/objects]

[/cave]

Cela donne la cave suivante:

Attachment.png
Cave I

Le gain de mémoire est donc évident et en utilisant une routine de génération de nombres aléatoires avec une graine prédéfinie (RandSeed), les niveaux seront toujours les mêmes (et même sur des plateformes différentes telles que le C64 ou le PC)

La description du format BDCFF est disponible sur ce site: http://www.gratissaugen.de/erbsen/bdcff.html

Génération de nombres aléatoires

Pour ceux qui sont interressé par la génération des nombres aléatoires pour la création des niveaux, cela se passe comme cela:

void boulderdashRandom(int *RandSeed1, int *RandSeed2) // Random generator used on C64
    {
    short TempRand1;
    short TempRand2;
    short carry;
    short result;

    TempRand1 = (*RandSeed1 & 0x01) * 0x80;
    TempRand2 = (*RandSeed2 >> 1) & 0x7F;
    result = (*RandSeed2) + (*RandSeed2 & 0x01) * 0x80;
    carry = (result > 0xFF);
    result = result & 0xFF;
    result = result + carry + 0x13;
    carry = (result > 0xFF);
    *RandSeed2 = result & 0xFF;
    result = *RandSeed1 + carry + TempRand1;
    carry = (result > 0xFF);
    result = result & 0xFF;
    result = result + carry + TempRand2;
    *RandSeed1 = result & 0xFF;
    }

Heritage

Si vous voulez rejouez à cet excellent jeu, je vous conseille d'essayer Rocks'n'Diamonds qui contient tous les niveaux originaux de Boulder Dash, mais aussi ceux de Emerald Mine ou de Sokoban.

Source:

Article précédent Article suivant

Ajouter un commentaire

Merci d'avoir rédigé votre commentaire !