CODING ★ AVENTURES AVANT TOUT (IV) ★

Aventures avant tout IV|ACPC n°16)

Saluons aujourd'hui la tribu des assoiffés d'aventure en quête de connaissance, qui depuis trois mois déjà se nourrissent des programmes parus dans leur journal préféré. Réjouissez-vous car, ce mois-ci, la lumière sera (comme dirait Yann, rrr...), et vous allez enfin pouvoir inclure dans votre jeu des images de votre cru.

Vous savez tous, j'en suis sûr, comment on sauve une image écran sur la disquette à partir du Basic. En effet, une ligne de programme du type 'SAVE “IMAGE”, B, &C000, &4000', crée sur le dise un fichier binaire de 17 Ko. qui peut être rappelé à l'écran par 'LOAD“IMAGE.BIN”,&C000'

Si nous devions insérer ce type de fichiers dans les jeux d'aventures, cela poserait de gros problèmes. D'une part, une attente assez longue (toujours trop longue) pour le chargement de l'image et, d'autre part, sur une disquette formatée à 178 Ko, on ne pourra pas mettre plus de dix images par face, ce qui représente pour un jeu de type classique, trois disquettes, avec en plus, toutes les trente secondes, une phrase du genre 'INSEREZ LA FACE MACHIN DU JEU'. Imaginez l'angoisse de jouer sur de tels jeux. Très bien, on est d'accord, il faut absolument trouver une autre solution. Vous vous doutez bien que, si je parle de ce genre d'inconvénients, c'est que je suis capable d'apporter une solution à ce problème (qui a dit chiche ?).

LA SOLUTION

En examinant la page d'un jeu d'aventures quelconque, vous verrez que les dessins qui sont attribués à chaque lieu ne remplissent pas la totalité de l'écran, et qu'une fenêtre est réservée à un endroit bien précis pour les accueillir. En se penchant très légèrement sur le problème et en réfléchissant un peu, on peut en déduire qu'il n'est pas nécessaire de sauvegarder l'écran en entier, mais seulement la fenêtre dans laquelle sera positionnée cette image.

Je vous préviens tout de suite, nous devons, pour cela, faire quelques petites galipettes, en sautillant sur un trampoline nommé assembleur et non pas désir.

A TRAVERS LES FENETRES

Avant toute chose, vous allez définir la fenêtre dans laquelle seront affichés les dessins. La commande "WINDOWS vous la connaissez tous. Vous allez sous Basic définir une fenêtre et calculer sa taille, à savoir qu'en 'MODE 1' on doit multiplier la longueur de la fenêtre (le nombre de caractères affichables sur une rangée) par sa hauteur (le nombre de rangées), pour avoir ainsi le nombre total de caractères affichables dans cette fenêtre. Sachant qu'un caractère occupe exactement 16 octets en mémoire, on multiplie par 16 le chiffre précédemment calculé et on obtient la taille de notre fenêtre graphique. Faites maintenant un petit essai, supposons que la taille de la fenêtre soit égale à TAILLE', entrez au clavier directement :

SAVE“ESSAI”,b,10000,TAILLE+4

Vous venez de sauver en mode direct une zone mémoire allant de l'adresse 10000, sur une longueur égale à celle de votre fenêtre graphique, par l'instruction 'CAT. Vérifiez la présence du fichier 'ESSAI.BIN' et notez sa taille, en divisant le nombre de Ko disponibles sous le format classique (qui est de 178 Ko) par la taille du fichier 'ESSAI.BIN'. Vous obtenez, ô miracle, le nombre de dessins stockables sur la ace de votre disquette. Si vous trouvez que le nombre d'écrans est insuffisant, alors réduisez la taille de votre fenêtre, et cela jusqu'à entière satisfaction. Ne vous faites pas trop d'illusions, une disquette sera saturée avec une trentaine d'images de 5 Ko chacune, ce qui, à mon avis, est un juste compromis entre le nombre d'images et leur taille. Lors de la sauvegarde, nous avons réservé quatre misérables octets en plus, car il seront occupés par les quatre couleurs attribuées à chaque image.

A VOS PINCEAUX

Pour faire vos jolis dessins, il faudra respecter quelques petits détails : vos créations graphiques seront toujours à un même emplacement et seront toutes de même taille. Pour cela, après avoir défini une fenêtre par la commande 'WINDOW, entrez directement au clavier 'PAPER 3:CLS:SAVE “FENETRE”,B,&C000,&4000'. Ainsi, vous aurez sur votre disquette de travail une page de 17 Ko avec, en fond de couleur n°3, l'emplacement de votre dessin. A partir de là, avec n'importe quel logiciel graphique, vous pouvez faire de jolis dessins qui émerveillerons les joueurs futurs de votre jeu par leur beauté. Si vous ne possédez pas de logiciel graphique, je vous conseille de vous procurer The Advanced OCP Art Studio. Juré, je ne suis pas payé par l'éditeur (Rainbird, en l'occurrence), mais c'est à mon avis le meilleur sur le marché Amstrad, et sera décapité par Sined, celui qui prétendra le contraire.

POUM'S BIDOUILLES

Le premier listing vous permettra de sauvegarder sur disquette vos dessins, le deuxième sera utilisé pour la lecture des images à partir du dise. C'est ce dernier qui sera inclus dans votre jeu. Pour ne pas vous imposer l'emplacement des images sur l'écran, les deux listings (1 et 2) sont écrits de façon incomplète, et vous constatez que chacun comporte cinq étoiles dans sa ligne de DATA, qu'il faudra remplacer en fonction de l'emplacement de votre fenêtre. Pour cela, lancez le troisième listing, répondez correctement aux questions et remplacez les étoiles par les valeurs données dans le dernier petit programme. Les deux variables TAILLE' et ADRESSE' sont également remplacées par les deux valeurs qui seront indiquées en fin du troisième programme (ça en fait des programmes et des listings !...).

1er listing :

10 INPUT "NOM DE L'IMAGE DE 17 KILOES";IM$
20 MODE 1:LOAD IM$,&C000
30 RESTORE 100:FOR I=39999 TO 40022:READ A$
40 POKE I,VAL("&"+A$):NEXT:CALL 40000
50 MODE 1:PRINT "INSEREZ LE DISC DE SAUVEGARDE"
60 INPUT "PUIS DONNEZ UN NOM POUR VOTRE IMAGE";NO$
70 FOR I=0 TO 3:PRINT "encre n°";I;:INPUT A
80 POKE TAILLE+ADRESSE+I,A:NEXT I
90 SAVE NO$,B,ADRESSE,TAILLE+4
100 DATA 00,21,*,*,11,*,*,06,C5,E5,01
110 DATA *,00,ED,B0,E1,CD,26,BC,C1,10,F2,C9

2e listing:

10 MEMORY ADRESSE-1:RESTORE 70
20 FOR I=40000 TO 40024:READ A$
30 POKE I,VAL("&"+a$):NEXT I
40 LOAD STR$(CASE),ADRESSE:CALL 40000
50 A=ADRESSE+TAILLE:FOR I=0 TO 3
60 INK I,PEEK(I+A):NEXT I:BORDER PEEK(A)
70 DATA 11,*,*,21,*,*,06,*,C5,D5,01,*,00
80 DATA ED,B0,D1,EB,CD,26,BC,EB,C1,10,F0,C9

3e listing:

10 INPUT "COORDONEE DU CURSEUR A GAUCHE DE LA FENETRE",X
20 INPUT "COORDONEE DU CURSEUR EN HAUT DE LA FENETRE",Y
30 INPUT "LONGHEUR EN CARACTERE DE LA FENETRE",H
50 SHG=49152+(X-1)*2+(Y-1)*80:A(2)=INT(SHG/256):A(1)=SHG-A(2)*256
60 MEM=39995-L*H*16:(4)=INT(MEM/256):A(3)=MEM-A(4)*256
70 A(5)=H*6:A(6)$L*2
80 FOR I=1 TO 6:PRINT replaçez la "I;eme étoile par";
90 PRINT HEX$(A(I),2):NEXT I
100 PRINT "dans  les listings, remplacez 'ADRESSE' par ";MEM
110 PRINT " et 'TAILLE' par ";L*H*16

LE COUP DE POUCE FINAL

Dans le cas du premier programme, à la question 'DONNEZ UN NOM POUR VOTRE IMAGE', il faudra donner le numéro 'CASE', qui est le numéro de la case dans laquelle se trouve le joueur (voir le premier article du mois de mars).

Le deuxième programme, celui qui sera inclus dans votre jeu, cherchera sur la disquette un fichier qui sera désigné par la variable calculée à partir de la position du joueur. L'emplacement du joueur est donné par la variable 'CASE', l'instruction 'STR$ (CASE)' transforme cette variable de type numérique en une variable alphanumérique qui peut être lue sur la disquette, et par conséquent le fichier sera mis en mémoire à partir d'une adresse, qui vous est donnée dans le troisième listing.

Le programme de sauvegarde des images vous demande les quatre couleurs que vous avez utilisées et les inclut en fin du fichier, avant de les sauver sur disquette. De même, lors de la lecture, ces couleurs sont restituées. Avouez que c'est bien pratique.

LA SURPRISE DU MOIS

Si vous faites partie des lecteurs qui nous suivent depuis le début de la rubrique “Aventure”, estimez-vous heureux, car vous aurez le rare privilège de participer à un mini-concours que j'ai décidé de lancer à l'instant même. Qui dit concours, dit une participation, et ce sera la vôtre, bien sûr. Vous avez sûrement tous commencé à écrire un jeu (d'aventures pour ceux qui viennent d'arriver). Vous allez nous en faire profiter en nous l'envoyant sous forme de disquette. Qui dit concours dit également des prix. Le premier gagnant recevra un tee-shirt Saleté de Bug (mais oui, c'était l'illustration du mois de mars de la rubrique “Aventure”, dessinée par le grand maître, j'ai nommé le seigneur Yann Serra en personne). Sachez que l'heureux élu sera le seul lecteur d'Amstrad Cent Pour Cent à avoir le privilège de le porter, car ces tee-shirts ont été fabriqués à moins de vingt exemplaires, en France et dans le monde, je dirais même dans la galaxie. Les neuf autres qui suivront (si leur jeu est terminé et s'il est jouable sans trop de saletés de bugs), je m'engage à les faire connaître par des milliers de joueurs sur Amstrad, dans toute la France. Dans le cas contraire, je les aiderai de mon mieux pour qu'ils puissent enfin finir leur chef-d'œuvre.

Ce mois-ci, pas de citation d'Amousse qui est en vacances, alors grosses bises et bonne programmation.

 

POUM, A100% n°16 (JUIN 1989)

★ ANNÉE: 1989
★ AUTEUR: Alain Massoumipour

Page précédente : Aventures avant tout III (ACPC n°15)

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 137 millisecondes et consultée 93 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.