New item

Livres

Les Routines de l'Amstrad...

Les Routines de l'Amstrad...

by Didier ROY, J.J WEYER

La Bible du Programmeur d...

La Bible du Programmeur d...

by Bruckmann, English, Gerits, Lothar

Trucs et astuces 2 - Pour...

Trucs et astuces 2 - Pour...

by Didier ROY, Hardy STRASSENBURG, RETZLAFF


Faites vos jeux avec Amst...

Faites vos jeux avec Amst...

by Claude DELANNOY

Peek et Poke du CPC

Peek et Poke du CPC

by Szczepanowski



Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; JCommentsACL has a deprecated constructor in /home/c1154036c/public_html/components/com_jcomments/classes/acl.php on line 17
Etoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactivesEtoiles inactives
 

 

Tout ce que vous voulez savoir sur les jeux d'aventures, sans avoir jamais osé le demander, pour pouvoir vous-même en programmer un, quel que soit votre niveau de programmation.

Vous avez bien lu, vous n'avez plus besoin de vous appeler Sined ou Rubi pour pouvoir écrire vos jeux d'aventures. Nous allons ensemble, pas à pas, étudier toutes les ficelles et astuces de programmation de ce type de jeux (graphismes à l'appui, s'il vous plaît...), à l'aide de petites routines maison, testées et approuvées par des milliers d'aventuriers à travers l'Hexagone.

 

AVANT TOUT...

 

En effet, durant plusieurs mois, nous verrons comment construire les plans des jeux, le traitement des déplacements et des objets, ainsi que leurs utilisations, les dialogues à travers un analyseur syntaxique, le traitement des images et leur stockage sur la disquette. Tout ceci de façon très souple, afin de permettre toutes modifications et améliorations de votre part. Ma conscience m'interdit de continuer à savourer le plaisir sadique de vous faire attendre. Donc, si vous le voulez bien, nous allons commencer. Et par quoi commence-t-on un jeu d'aventures ? Je vous le mets dans le mille..., par le SCENARIO, l'histoire, quoi ! Cela peut être un héros de l'an 3000 qui cherche à anéantir un tyran semant la terreur sur la galaxie, ou un jeune prince qui va à la recherche de Miss X pour la libérer des griffes du Chef... A vous de trouver l'histoire qui vous passionnera le plus. Faites travailler votre imagination et que la plus belle l'emporte.

APRES TOUT...

 

Personnellement, comme support à mes explications, j'utiliserai cette histoire terrifiante qui m'est arrivée il y a de cela trois semaines, quand mon ami poète et philosophe Amousse, qui avait la garde de mon chat Socrate, m'annonça la disparition de celui-ci. Cela m'entraîna à explorer tous les bouchers et charcutiers du quartier. Maintenant que vous avez tous une histoire, il faudra faire le plan de votre jeu. Attention, même si cela vous paraît simple, le plan doit être fait avec rigueur et discipline, tout comme les militaires (salut Robby et bienvenue au club à Michel du New Celtic Gang). Pour commencer, faites une grille comme sur le dessin n° 1 et notez les numéros des colonnes et rangées (dans cet exemple, il y a six colonnes et cinq rangées), puis numérotez les cases de gauche à droite en partant du haut.

 

C'EST PAS TOUT...

 

Nous prendrons comme convention que le Nord sera vers le haut et le Sud vers le bas (vous me suivez ?). Donc, l'Est sera à droite et l'Ouest à gauche. C'est dans les cases ainsi formées que va se déplacer votre héros, et ceci dans les quatre directions cardinales. Maintenant, dans ces mêmes cases, nous allons installer les lieux où se dérouleront les événements du jeu. Chaque case portera un nom ce qui nous permettra de nous y retrouver (voir le dessin n° 2). Attention, vous n'êtes pas obligé de remplir toutes les cases, et pour des raisons que l'on verra plus tard, je vous conseille de ne pas faire plus d'une trentaine de lieux.

 

 


 

AvantAvantTout1En ce qui concerne les déplacements, que nous détaillerons la prochaine fois, vous constatez que pour aller au nord (vers le haut, me souffle Sa Majesté le barbu en chair), le numéro de la case doit diminuer du nombre de colonnes (dans notre exemple, il diminuera de 6), être augmenté du nombre de colonnes pour aller au sud, être augmenté de 1 pour aller à l'est et diminué de 1 pour aller à l'ouest. Ce numéro de case, avec lequel on jonglera durant tout le programme, sera appelé désormais “CASE".

Je récapitule depuis le limieu :

Pour aller au nord : CASE = CASE - 6
Pour aller au sud : CASE = CASE + 6
Pour aller à l'est : CASE = CASE + 1
Pour aller à l'ouest : CASE = CASE -1


JE VEUX TOUT...

 

Et en plus, ils veulent tout... Pas d'erreur, c'est Poum-poum. Il se trouve que deux cases l'une à côté de l'autre (ou l'une au-dessus de l'autre) ne peuvent communiquer ensemble. Dans le dessin n° 2, par exemple : la case n° 15 et la case n° 14 qui sont la cour et.la chambre de mon ami Amousse. Dans ce cas, grossissez, à l'aide de votre stylo préféré, la ligne séparant ces deux cases. Vous aurez à ce stade de votre travail une logique de passage entre les cases qu'il faudra minutieusement étudier pour qu'elle ne présente aucune faille. Qu'il n'y est pas, notamment, une case représentant une chambre qui communique avec les sommets de la montagne. Comme le dirait Sined : “Le CPC ne se mettra pas aux fraises, mais c'est une question de bon sens.”

Nous allons bientôt nous quitter (Snif !). Vous aurez donc tout le mois pour imaginer le scénario du siècle. Dans le prochain numéro, nous verrons tous les déplacements et leur gestion par le CPC.

N'oubliez pas : chaque case possède quatre directions (nord, sud, est et ouest), qui peuvent être des passages possibles ou des barrières (donc infranchissables). On pourra envisager qu'une barrière puisse se transformer en passage (par exemple, un mur que l'on démolit). J'en vois quelques-uns qui me regardent en fronçant les sourcils. j'espère que c'est parce que nous allons nous quitter. Alors je citerai mon ami Amousse qui disait : “Les sommets conservent, grâce aux neiges étemelles, leur pureté, que je retrouve à travers le sourire gravé sur un visage”.

avat15

 

 

Comme promis le mois passé, nous allons tout en douceur caresser la gestion des déplacements des jeux d'aventures. Dans cette ribrique, je vous le signale ( au fluor, bien sûr ), nous aborderons tous vos problèmes de programmation de jeux d'aventures, même ceux auxquels je n'ai pas encore pensé.

Le mois dernier, nous avons vu comment créer un plan de jeu d'aventures. Nous avons pris également comme convention que le numéro de la case dans laquelle se déplacerait le joueur porterait le nom “CASE”, et que toutes les cases du jeu (même si elles se voisinaient) ne communiqueraient pas toutes entre elles. Prenons ensemble notre souffle, car nous allons voir.

 

FIN DE LA RECRE, AU BOULOT

 

Chaque case porte un numéro (tu l'as déjà dit) qui est attribué à la variable CASE. Nous allons créer pour les déplacements, un tableau que l'on appellera NSEO. Etant donné que, sur mon plan j'ai trente cases, il y aura NSEO(1), NSEO(2)... NSEC)(30). Accrochez-vous. Nous allons calculer la valeur des variables NSEO grâce à un principe fort utilisé en assembleur. Si l'accès au nord est possible, je lui ajoute 1, si l'accès au sud est possible, je lui ajoute 2, pour l'est j'ajoute 4 et enfin pour l'ouest on ajoute 8. Un petit exemple éclaircira vos petites lanternes ternes :

comment faire digérer tout cela au CPC.

 

PETIT RAPPEL NON ILLUSTRE

 

Cette rubrique ne s'adressant pas qu'aux fous de la programmation sur CPC, j'envisage donc la possibilité qu'il y ait, parmi nos lecteurs adorés, quelques-uns qui ne savent pas très bien ce qu'est un tableau. Pour les autres, cinq minutes de récré.

Les tableaux sont tout simplement de bêtes variables, de types réels ou entiers avec, en prime, un indice, ce qui permet d'avoir une liste de variables portant toutes le même nom.

Par exemple A(1), A(2), A(3), etc. Dans ce cas, le nom en commun étant A, il suffit de changer l'indice pour adresser une autre variable. Attention, si l'indice qui se trouve entre parenthèses est supérieur à 10 il faudra, avant d'utiliser ce tableau, déclarer la valeur maximale à atteindre (ce que l'on nomme dans notre jargon informatique “dimensionner un tableau”), à travers l'instruction Basic DIM.

La case n°19 de mon plan, qui est la “Place de Domont” a trois accès possibles (nord, sud et est). Donc NSEO(19)= 14-2+4=7. De même pour la case 10 : NSEO(10)=1+2=3. Sans vous tromper, vous calculez toutes les valeurs NSEO (même les cases qui n'existent pas, égales à 0). Si vous avez 34 cases, vous obtenez, si mes calculs sont bons, 34 valeurs qui seront stockées sous forme de DATAS et lues par une boucle FOR-NEXT.

 

10'
20' écriture et lecture des valeurs NSEO
30'
40 DATA 0,2,2,2,0,0,2,7,15.15,10,0,3,1,1
50 DATA 7,15,8,7,14,12,13,13,10,1,1,0,0,4,9
60'
70 DIM NSEO(30):RESTORE 40
80 FOR 1=1 TO 30:READ NSEO(I):NEXT I
90'

 

 

 

 

Il va de soi que la première valeur écrite dans les DATAS correspond à la case n°l, que la deuxième correspond à la case n°2 et ainsi de suite, et que le nombre de valeurs ainsi écrites est égal au nombre de colonnes qui multiplient le nombre de rangées (30 dans notre exemple).

 

JE PASSE, JE PASSE PAS

 

Je sens que vous vous demandez ce qui se prépare depuis tout à l'heure, je vous répondrai que, désormais, nous pouvons, à n'importe quel moment, savoir si le joueur peut aller dans une direction quelconque (si, si). Comment ? C'est tout simple : le joueur se trouve en case CASE, qui va de 1 à 30 ; pour cette case, il y a la valeur NSEO(CASE) qui est égale à dieu sait quoi.

Si NSEO(CASE) AND 1 <> 0 le nord est accessible.
Si NSEO(CASE) AND 2 <> 0 le sud est accessible.
Si NSEO(CASE) AND 4 <> 0 l'est est accessible.
Si NSEO(CASE) AND 8 <> 0 l'ouest est accessible.
C'est aussi simple que ça et, en plus, ça marche. Faites quelques essais pour vous en rendre compte vous-même. Prenez la valeur 14, par exemple, qui est la somme de 2+4+8, ce qui veut dire que l'on peut aller partout sauf au nord. Vérifions :

14 AND 1 = 0, ensuite 14 AND 2 = 2 et 14 AND 4 = 4, pour finir 14 AND.8 = 8. Seul le nord rend la valeur 0. Dans votre programme, vous pourrez ainsi gérer tous les déplacements. Le joueur donne l'ordre à l'ordinateur d'aller à l'ouest (nous verrons plus tard comment). Si NSEO(CASE) <> 0, il pourra le faire et, en plus, on modifiera la valeur de CASE en lui retranchant la valeur 1 (voir le mois précédent).

 avat16b

DIS-NOUS TOUT

 

Je parie que vous connaissez tous Ghosts & Goblins sur la version bor-ne d'arcade, ainsi que son adaptation sur CPC. Mais connaissez-vous sa suite, Goules & Ghosts ? Non ? Notre très cher ami, j'ai nommé l'infâme, l'horrible, le terrifiant et, n'empêche, le tout doux Frank Einstein, lui, le connaît par cœur. Il est beau, même très beau (le jeu, pas Frank). Non, je ne saute pas du coq à l'âne, mais dans ce jeu, il y a des endroits où, des fois, on passe et plus tard, ou plutôt, on ne passe pas (plus). Ça peut vous arriver également dans votre jeu d'aventures. Vous vous rappelez les barrières, les murs que l'on peut casser, ou une porte qui se ferme (ou s'ouvre me crie Lanisette... l'ami Septh), cela implique une modification éventuelle de la valeur NSEO(CASE).

Pour cela, nous utiliserons une autre opération logique M. Spoke, le. OR.

Pour ouvrir le nord : NSEO(CASE) = NSEO(CASE) OR 1.
Pour ouvrir le sud : NSEO(CASE) = NSEO(CASE) OR 2.
Pour ourvir l'est : NSEO(CASE) = NSEO(CASE) OR 4.
Pour l'ouest enfin : NSEO(CASE) = NSEO(CASE) OR 8.
Vérifions : je suis dans une case dont le nord et le sud sont bloqués, sa valeur est de 8+4, donc 12 ; je veux rendre le sud accessible, parce que le joueur a ouvert une porte qui était au sud. j'effectue un OR 2 sur NSEO(CASE) : 12 OR 2 = 14 qui correspond bien à 2+4+8 et le nord reste toujours bloqué.

ALAIN VERSE

 

Il serait vraiment trop injuste de pouvoir ouvrir une direction sans pour autant avoir la possibilité de la fermer. Si le mur du tunnel dans lequel j'erre s'écroule et que, par miracle, je ne mourus pas, je ne pourrai plus aller au nord d'où je venais, et le programme doit etre capable de bloquer l'accès nord.

XOR vous connaissez ? Mais non, Setph, pas le bridé en armure... Il a chaud Septh (oh qu'elle est bonne). Le XOR que l'on trouve dans le manuel à la page... euh... chais pu : c'est une opération logique qui est moins connue des Basiciens que les AND et OR et qui va nous venir en aide.

Pour fermer le nord : NSEO(CASE) = NSEO(CASE) XOR 1.

Vous voulez vraiment la suite ? OK ! Pour fermer le sud : NSEO(CASE) = NSEO(CASE) XOR 2.

Pour fermer l'est : NSEO(CASE) = NSEO(CASE) XOR 4.

C'est exactement la tactique employée, il y a de cela quelques années en Allemagne...

Pour fermer l'ouest : NSEO(CASE) = NSEO(CASE) XOR 8.

 

RESUMONS EN CŒUR

 

Pour la gestion des déplacements, nous utiliserons les trois opérations logiques, AND, OR et XOR.
Pour tester une ouverture éventuelle : NSEO(CASE) AND 1,2,4 ou 8 doit être différent de 0.
Pour une ouverture : NSEO(CASE) = NSEO(CASE) OR 1,2,4 ou 8.
Pour une fermeture : NSEO(CASE) = NSEO(CASE) XOR 1,2,4 ou 8.
Le mois prochain, tenez-vous bien, nous verrons comment écrire un analyseur de syntaxe, capable d'établir un dialogue entre le joueur et l'ordinateur. Ecrit en Basic, il vous permettra une saisie très souple, avec l'acceptation éventuelle de fautes d'orthographe. En attendant, je vous conseille de bien comprendre, malgré sa simplicité apparente, ce dont nous avons parlé ce mois-ci. Et s'il vous reste un peu de temps libre entre les courses et le ménage, vous pourrez commencer à préparer votre liste de verbes qui sera utilisée par l'analyseur de syntaxe. Notez que, dans cette suite d'articles, il y aura très souvent des petits listings ou bouts de programmes. Si vous voulez les utiliser tels quels, sauvegardez-les un par un sur une disquette, ceci afin de pouvoir les renommer, pour qu'il n'y ait pas de problèmes de saut et d'adressage (GOTO, GOSUB. RESTORE), et ensuite les reunir par des MERGE pour former votre programme principal.

Il se fait tard, le cours de mes idées vient d'être perturbé par Joe Satriani, qui est en train de faire des plans super grateux du type bliii blabla bla bla sur le walkman de Sined, qui, selon lui, est un homme qui joue avec son cœur (super propre, béton, génial)... Ce qui ne m'empêchera pas de vous dire que les meilleurs sont bel et bien Saga et Pretty Maid, sans oublier les premiers Yes et les excellents Emerson, Lake & Palmer (Ja pas d'accord : ND Sined) "mais si, Sined. c'est béton", (Septh), "ouais, c'est pas mal" (Lipfy), "ch'connais pas" (Agnès).

NDA : Snif ! Snif ! Je me sens seul dans ce monde où les goûts, comme les idées, divergent vers des galaxies distantes de milliers d'années lumière. Heureusement, il me reste la douce chaleur des paroles de mon fidèle ami Amousse : "seule compte dans ce bas monde la réalité, qui ne peut être que celle sur laquelle est basée ta vie". Voyez-vous !

 

 

 

 

Avant tout un très gros pardon pour l'infâme coquille qui a osé se glisser dans le numéro précédent. Jusqu'à présent je pensais que le Melini était une exclusivité du Melini Comix Band, et bien non, à la maquette, ils connaissent aussi (Melini aussi, sur un air bien connu).

Pour tout réparer, prenez votre Cent Pour Cent du mois d'avril, on peut y lire, lors du test NSEO(CASE), pour l'ouverture à l'ouest “Si NSEO (CASE)<>0”, qu'il faudra comprendre “Si NSEO(CASE) AND 8 <>0”. Dieu seul sait où est passé le “AND 8”. Pour le reste, les paragraphes se sont mélangés les pieds et, manifestement, les maquettistes ont voulu faire de l'article un jeu de Taquin. En lisant les lignes dans le désordre, vous pourrez peut-être comprendre ce que j'essayasse de vous dire.

Je me souviens, lors de ma période prénatalo-informaticienne, quand je n'étais encore qu'un minuscule fœtus au sein de mon VG-5000 où tous les rêves m'étaient permis, même ceux d'affronter le monde merveilleux des CPC. Dans ce temps-là, je me posais beaucoup de questions du type “et comment ça marche un ordinateur qui comprend ce que je dis ? Heu, dis-le-moi, allez...” Eh ben il n'y avait pas, à l'époque, de gentils Poum ou Sined pour apporter une réponse claire à mes questions qui ne l'étaient pas pour moi.

Une dépêche de dernière minute m'apprend que l'on peut trouver des trucs et bidouilles assez sympa dans un petit fanzine nommé Syntax Error. Procurez-vous-le, no di dieu c'est gratos. Pendant que j'y suis, encore une toute petite parenthèse, devinez qui, en ce moment même, est à côté de moi en train de faire 247 “CLS” par minute ? Vous ne voyez pas ? C'est notre très cher Robby, libéré pour quelques jours par l'armée et c'est tant mieux.

 

AUJOURD'HUI SPEEDONS

 

Speedon car une doubl pag sera peut-êtr (j'économise des lettres) un peu just (lire djeust). Nous attaquons ce mois-ci notre premier vrai et grand listing (l'analyseur de syntaxe, bien sûr), écrit sous Basic pour avoir des explications plus claires. Evidemment, on perd en vitesse d'exécution, mais, voyant ce que font certains professionnels en Assembleur (dans des jeux d'aventures que je ne citerai pas), il me semble qu'il serait bien d'expliquer ce type de routines.

 

C'EST PARTI MON KIKI

 

Vous voyez ce petit listing de quelques lignes Basic ? C'est un analyseur de syntaxe. Il fait la saisie de votre phrase sur l'écran (sans INPUT) ; on supprime donc toutes les touches inutiles du type chiffres et ponctuations. “Stop, me crie Sined, tu vas trop vite, commence par le début...”

OK ! Un analyseur de syntaxe est une routine (bout de programme) qui va prendre une phrase entrée au clavier et chercher dans cette même phrase quel est le verbe, l'objet et éventuellement un complément. Pour ce qui nous concerne, nous nous contenterons du verbe et de l'objet.

Listing ACPC15 Poum1
Jetez un œil sur les lignes 130 à 140, ce sont les verbes ; de 180 à 190, ce sont les objets. Commençons par les verbes. Plusieurs verbes sont stockés sur les lignes DATA, séparés par des virgules, jusqu'ici c'est clair. De temps en temps, on voit un petit (qu'est-ce que c'est, dis ? dit Sined), qui représente la séparation entre les synonymes. Les trois premiers verbes sont PRENDRE, VOLER et DEROBER (ils sont en majuscules et écrits de façon incomplète, mais c'est fait exprès). Ensuite, il y a la petite étoile suivie de trois autres verbes qui représentent l'action de donner, une autre étoile et deux verbes qui signifient fouiller, etc. Tout à la fin, on met deux étoiles qui veulent dire que c'est la fin de la liste des verbes. Compris ?
 

 


 

DECORTIQUONS LE LISTING

 

En ligne 210, on initial ise la variable VERBE et OBJET qui prendront, à la sortie du sous-programme de l'analyseur, une valeur qui correspondra au numéro du synonyme. Dans notre exemple, si le verbe entré au clavier est PRENDRE, VOLER ou DEROBER, à la sortie, VERBE sera égal à 1, idem pour OBJET.

Sur la ligne 230, le X est la colonne sur laquelle sera positionné le curseur de saisie et le 'Y' est le numéro de la rangée. Donc tous deux modifiables, pour les valeurs X=1 et Y=1 le curseur débutera la phrase en haut à gauche de l'écran, 'LMAX' est la longueur maximale autorisée pour la phrase, en l'occurrence 38 dans notre exemple. Enfin, 'PH$' est la variable qui contiendra la phrase entrée par le joueur au clavier.

En 240, on efface l'ancienne phrase qui était sur l'écran et qui ne sert plus à grand-chose, en affichant une série d'espaces.

A la ligne 280, 'A$' prendra la valeur Ascii de toutes les touches appuyées sur le clavier et par un petit UPPER$' les transformera si possible en majuscules. Le 'XOR' appliqué à la variable 'CUR' m'amuse beaucoup car il évite un test du genre 'CUR=CUR+ 1:IF CUR=2 then CUR=0'. Ensuite, on affiche une fois sur deux un espace à l'emplacement du curseur et, la fois suivante, on affiche le caractère Ascii de (32+13) le 45 dans ce cas (en modifiant le 13, vous pourrez afficher n'importe quel caractère, même un que vous aurez redéfini par la commande 'SYMBOL').

Listing ACPC15 Poum2

En ligne 300, on branche le programme sur la ligne 480 pour le traitement du retour chariot, en ligne 420 pour la touche Del, en 360 pour l'espace. Puis on teste de nouveau le clavier si la touche enfoncée n'est pas une lettre.

 

ALORS CA SUIT ?

 

Si, arrivé en 360, on n'a plus de place sur la ligne de saisie (LONG= LMAX), on recommence le tout en attendant le retour chariot ou la touche Del qui effacera le dernier caractère saisi au clavier. On affiche en ligne 370 la lettre ainsi testée, suivie d'un petit son pour faire bien, la lettre s'ajoute en 390 à la phrase et la longueur totale de la phrase est incrémentée, puis on reboucle tout le bloc de saisie.

 

EFFACE-MOI CETTE INFAMIE

 

Tiens j'ai déjà vu ça quelque part. Le bloc des lignes 420 à 460 efface la dernière lettre de la phrase à condition que la longueur soit différente de zéro. C'est normal, je ne vois pas comment on pourrait effacer une lettre qui n'existe pas et je vous assure que si on ne prévient pas le CPC de la présence d'une phrase vide, il essaiera malgré tout d'effacer quelque chose.

Mon dieu, plus ça va et plus la place réservée pour nous ce mois-ci diminue, je vais essayer de faire très vite. Barbarian II est un jeu assez remarquable dans les mains d'un expert comme Matt Murdock, Septh se défend pas trop mal non plus et j'attends avec impatience de voir le Barbare de service à l'action (où suis-je, qui suis-je, m'égare-je ? oui-je tu t'égare-je bien la France).

En deux mots, de 530 à 580, on recherche dans les DATA enfermant dans leur royaume sacré nos très chers verbes. En les lisant, on compte le nombre d'étoiles qui, en sortie, sera le numéro du synonyme. Si le mot est trouvé, on arrête de chercher bêtement et on enchaîne sur les objets qui reprennent le même principe, à la différence près que le 'RESTORE' pointe sur les DATA contenant les objets au lieu de ceux contenant les verbes, et en sortie, ce n'est pas la variable VERBE' qui sera égale à 'TROUV' mais la variable 'OBJET.

Tiens, à propos, de 700 à 750 on fait kôa ? C'est évident voyons, on dit que 'TROUV=0' (en français, je n'ai rien trouvé), puis si le mot lu dans la phrase a une longueur égale à zéro, on laisse tomber, sinon on lit les DATA. On teste la fin du bloc de mots avec les '**' et les blocs par '*'.

avat17

 

 

Listing ACPC15 Poum3
TROP SIMPLE MAIS TROP NEGLIGE

 

La dernière ligne, qui est la ligne 750, est vraiment trop bête, mais elle rend un sacré service au joueur. Elle teste si le mot lu dans les DATA est identique, non pas à celui écrit sur l'écran, mais à sa partie de gauche de même longueur, ce qui permet d'oublier les 'S' et de se tromper dans les terminaisons. En deux mots, faire quelques fautes d'orthographe, c'est cool, non ? Et dire qu'il y a des programmeurs qui n'en tiennent pas compte (honte à eux). ,

Une bonne nouvelle, notre Pierre adoré vient de m'autoriser un débordement d'une page pour ce mois-ci, ce qui m'arrange bien et je remercie par la même occasion notre trop belle Miss X qui par son charme n'est pas étrangère à cette décision (je l'ai dit). '

 

LE PLUS GROS EST PASSE

 

Mais non pas Lip, je veux dire que désormais avec ce que nous avons vu ensemble, vous pouvez très sérieusement (du moins je l'espère) commencer à écrire votre jeu d'aventures.

Vous avez un plan, ainsi que toutes les directions dans lesquelles le joueur peut se déplacer ; vous savez également qu'il y a certains endroits momentanément bloqués, qui, par une action quelconque, pourraient s'ouvrir pour permettre une avancée inaccessible au préalable. On peut également bloquer le joueur s'il commet l'erreur qu'il ne devait pas commettre. Tous les déplacements sont dictés à partir du clavier, ceci avec l'aide de l'analyseur de syntaxe (dans lequel figureront, bien sûr, les quatre directions cardinales nord, sud, est et sans oublier l'ouest).

L'analyseur, pour les très rares personnes qui ne l'ont pas remarqué, s'appelle par un 'GOSUB 230', dans le cas de notre listing bien sûr. S'il est ; 'RENOMEr', dieu sait en quelle ligne sera métamorphosée la ligne 230. Au retour, nous aurons deux variables "VERBE' et 'OBJET' qui seront égales à des valeurs allant de zéro à... Si la variable 'VERBE' est égale à zéro, c'est que le verbe entré au clavier ne fait pas partie des verbes prévus par le programmeur (c'est vous), de même pour les objets.

 

A GO, A GOGO , ALGO

 

L'algorithme de l'ensemble du jeu pourrait avoir, si vous n'y voyez pas trop d'inconvénient, l'allure qui suit :

  1. On initialise toutes les variables. puis on affiche le premier dessin.
  2. On entame une boucle qui va boucler (eh oui, si une boucle ne boucle pas, je ne vois pas qui pourrait boucler à sa place) sur l'ensemble du programme en commençant par l'analyseur, que l'on appellera par un 'GOSUB son numéro de ligne'. 
    Dès le retour du programme, on teste la variable 'VERBE'. S'il s'agit d'une direction, on branche le programme sur la partie qui gère les déplacements (nous l'avons vu le mois dernier), si le déplacement est possible, on modifie la variable 'CASE', et en fonction de celle-ci, on va chercher sur le disque l'image qui lui correspond (ça, ce sera pour plus tard). Enfin, on affiche cette image. Si le verbe n'est pas une direction, on reste toujours dans le bloc de programme qui gère des cas que je nommerais Généraux, qui sont des actions du type 'PRENDRE', 'POSER', 'INVENTAIRE' pouvant être valables dans toutes les cases (si vous acceptez que le joueur prenne un objet dans une case, je ne vois vraiment pas pourquoi il ne pourrait pas le poser ailleurs, ce qui est malheureusement le cas de certains jeux que, encore une fois, je ne nommerai pas). Ensuite, si tous les tests que nous venons de faire restent sans résultats, on envisagera la possibilité que l'action est peut-être spécifique à la case dans laquelle le joueur est bloqué depuis trois jours et deux nuits, et on avise. Si toutefois la réponse à nos tests reste toujours négative...
  3. ...De deux choses l'une, ou on place à l'écran un phrase bateau du type 'IMPOSSIBLE' ou encore plus bateau du type 'NON', ce qui est bien pratique, mais a le seul avantage d'être peu gourmand en mémoire. En se donnant un peu de peine et en sacrifiant un peu de place mémoire, on peut prévoir une réponse, même courte, à chaque verbe. Par exemple pour 'PRENDRE', vous pourrez dire 'PAS TOUCHE' ou TOUCHE A LA PARTIE CHARNELLE SUR LAQUELLE TU T'ASSOIS'. Idem pour les autres verbes, ce qui donnerait un peu plus de vie et de chaleur à votre jeu, non ?

Allez les potosses (c'est du Sined), il me vient l'envie de PC et CPC, or donc (c'est du Septh), j'y cours car y'en peux puuuuu.

 

Aaaah. Pour conclure comme à l'accoutumée, Amousse me chuchote une maxime, la voici car elle est très courte : “Aime ta mère car c'est la seule femme qui t'aimera...!” Là, moi, pas trop comprendre, car ceci dépasse peut-être un peu mon savoir philo-machino-psychologique, enfin pour le club Orion, Oh ! Rions un peu...

 

 

 

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 ?).

avat18

 

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.

Cela va faire bientôt un quart d'heure que je cherche une introduction à cet article. Comme vous le constatez, et vous n'avez pas tort, c'est le vide complet. Comment pourrait-il en être autrement quand ces messieurs de Manowar vous caressent les oreilles avec leur roch'er dur. N'ayant aucune idée, je me vois virer du jaune au blanc, car Johnny Halliday. Alors, sans aucune transition, passons aux choses sérieuses, à savoir, la gestion des objets dans votre jeu préféré.

L'utilisation des objets dans un jeu d'aventures se fait de plusieurs façons. On peut, par exemple, voir un couteau qui traîne sur une table, le prendre et l'utiliser dans une autre salle pour éplucher les pommes de terre que le chef cuistot vous a refüées en échange de vos dernières pièces de monnaie, pour faire une bonne purée qui vous donnera assez de force pour la traversée des hautes montagnes qui mènent au temple sacré... (Je reprends mon souffle... !).

Ne riez pas trop de mon exemple qui, malgré son ridicule certain, renferme tous les types de gestion par lesquels pourront passer les objets. A savoir qu'ils pourront être posés tout simplement quelque part dans l'attente d'être ramassés pas le joueur (le couteau), ou alors ne pas être accessibles au premier abord (ce sont les patates), ils pourront être également le fruit d'une transformation (oh purée...), voire même d'une disparition (la digestion) qui permet au joueur d'accomplir sa mission.

 

TABLEAU MON AMOUR

 

On les croyait disparus de la surface de la planète Aventure. Eh bien, non. Les revoilà en pleine forme pour vous servir. Je crois qu'il est inutile de vous dire que tous les objets seront traités à J'aide de tableaux. La première chose a faire est d'avoir la liste de tous les )objets qui seront éparpillés dans le jeu, et de les inclure avec leurs synonymes dans le début des 'DATA' du source de votre analyseur de syntaxe. Ainsi, si vous utilisez dix objets dans votre jeu, les valeurs allant de 1 à 10 renvoyées par la variable 'OBJET de votre analyseur, leur correspondra. Vient ensuite la formule magique qui déclare les tableaux. A savoir 'DIM OBJ(10)'. Bien entendu, la valeur 10 qui représente le nombre d'objets utilisés est complètement arbitraire et dépendra du nombre d'objets à traiter que vous aurez choisis.

 

10 DIM OBJ(10)
20 RESTORE 40
30 FOR 1=1 TO 10:READ OBJ(I): NEXT I
40 DATA 23,100,3,5,200,200,8,15,200, 200

 

 

OK, vous vous posez sûrement la question suivante : à quoi peuvent bien correspondre les valeurs attribuées aux variables 'OBJ'. Comme d'habitude, je vous répondrai : mais c'est évident, bien sûr. Vous avez compris maintenant ? Allons trêve de plaisanteries. Tout objet se trouvant dans une case quelconque et qui peut être pris (par le fait que l'analyseur a reçu le verbe 'PRENDRE' et l'objet en question) se voit attribuer à sa valeur 'OBJ le numéro de la case dans laquelle il traîne. Pour être plus clair, disons que le couteau, qui est le premier de la liste des objets, est sur la table de la cuisine, qui est la case n° 23, la valeur de 'OBJ(1)' sera égale à 23. Idem pour tous les objets que le joueur pourra prendre dans une salle quelconque.

Maintenant, si un objet est dans une case, mais n'est pas tout de suite accessible (disons qu'il est en attente), il se verra attribuer très gracieusement de votre part la valeur 200. Les patates ou la purée font partie de ces objets.

Quant aux valeurs 100, ce sont tout simplement les objets que le joueur a en sa possession. Bien sûr, les deux chiffres 100 et 200 sont une convention, il vous est totalement permis de prendre n'importe quelle valeur, mais attention, ces valeurs ne doivent absolument pas correspondre à la valeur d'une case de votre jeu. Enfin, si un objet doit disparaître de la circulation, il suffit de lui attribuer la valeur buüe, c'est-à-dire 0.

 

ET QUE LA MAGIE COMMENCE

 

Pour la première fois de l'histoire (roulement de tambour...), je vais me métamorphoser en microprocesseur pour suivre pas à pas Ie traitement que pourrait faire ce dernier lors de la gestion des objets. Le public est là. II attend, légèrement crispé, il jette un regard par-ci, un autre par-là, et se demande si je bluffe ou si, réellement, je suis capable d'une telle prouesse technique. Je vous avoue être beaucoup influencé dans mon style d'écriture par la charmante et inoubliable soirée que je viens de passer en compagnie de notre cher Septh au Double Fond, un café fort sympa sur la place du Marché-Sainte-Catherine à Paris, et qui se distingue des autres établissements de ce genre, du fait que tous les membres du personnel sont des magiciens et pas des moindres, s'il vous plaît. Le barman, qui n'est autre que le grand Cirs, s'approche de moi et me fait choisir une carte (avant que je la prenne, sa valeur 'OBJ' était égale à 200), je décide de prendre cette carte, elle est donc en ma possession (sa valeur vient de passer à 100). Dans le programme, on aura à peu près ceci : PRINT “ Le grands Cirs vous tend un jeu de cartes”

 

PRINT “ et vous demande d'en choisir une”
GOSUB ANALYSEUR
IF VERBE= 1 AND OBJET=9 AND OBJ(9)=200 THEN OBJ(9)=100

 

Les 'PRINT' enferment le blabla. Le 'GOSUB' appelle l'analyseur de syntaxe. Je teste ensuite si le verbe est bien 'PRENDRE' et l'objet 'CARTE' (inutile de vous rappeler que 'PRENDRE'

est le premier de la liste des verbes et que 'CARTE' est en neuvième position dans la liste des objets). Je teste par la même occasion si la carte n'a pas été choisie au préalable, c'est-à-dire si sa valeur est toujours égale à 200. Dans ce cas, je l'aurais en main en attribuant à OBJ(9) la valeur 100. Compris ?

 

 


Vient ensuite le encore plus célèbre Gaétan Bloom (on a piqué sa mob dans le film les Sous-doués), il me demande de poser cette carte sur la table de close-up, micro-magie en français. Je pose la carte sur le tapis vert et je donne l'ordre de changer la valeur OBJ(9) en 31, car la salle de spectacle du Double Fond a le numéro 31 sur mon plan.

Le encore plus fort Dominique Duvivier s'approche ensuite de cette carte et, par une manipulation à faire pâlir le plus averti des magiciens, fait disparaître cette carte sous les yeux ébahis de son public dontje fais partie (la valeur de cet objet passe à 0, car cette carte ne peut plus être récupérée par le joueur). Enfin, si vous n'avez pas tout compris, c'est normal, retournez les voir de ma part vous ne serez pas déçus, parole de Poum.

 

FERME, POUR CAUSE D'INVENTAIRE

 

On l'aurait presque oublié celui-là. C'est bien beau de ramasser tout ce qui traîne par terre et de donner n'importe quoi à n'importe qui, mais saurez-vous vous y retrouver ? Sauf si vous avez une très bonne mémoire ou encore si vous avez pris le soin de noter sur un bout de papier toutes vos transactions, il serait bien agréable de voir, parmi la liste des verbes de votre jeu, les commandes 'LISTE' ou INVENTAIRE'. Pour gérer cette commande, rien de plus simple. A la vue du numéro de ce verbe (eh oui, ils sont dans cette liste, car ils doivent avoir la priorité par rapport aux objets, et surtout ne pas être délaissés à cause d'un autre vulgaire verbe qui se promènerait par hasard dans le coin), on se branche sur un petit sous-programme qui, dans une fenêtre de votre choix, affiche la liste des objets dont leur valeur 'OBJ' est égale à 100 (ils sont en main). Mais voilà, pour cela, il est impératif d'avoir un deuxième tableau avec le nom complet des objets que vous utiliserez.

 

10 DIM NOMOBJ$(10)
20 RESTORE 40
30 FOR 1=1 TO 10:READ NOMOB J$(I):NEXT I
40 DATA COUTEAU,FLEUR, BANC,PIECE,CHAPEAU....etc

 

Encore un petit détail. II serait très sympathique de votre part d'indiquer, à chaque affichage d'images, les objets qui se trouvent dans cette nouvelle case, et cela simplement en comparant leur valeur 'OBJ' avec le numéro de la case 'CASE'.

PRINT “Vous voyez”
FOR I=1 TO 10
IF OBJ(I)=CASE THEN PRINT NOMOBJ$(I)
NEXT I

Pour finir, voilà la tête d'un sous-pro-gamme de saisie d'objet. Pour l'action 'POSER', c'est presque pareil.

 

IF OBJET> 10 THEN RETURN
IF OBJ(OBJET)=100 THEN PRINT “Vous l'avez déja”:RETURN
IF OBJ(OBJET)=CASE THEN OBJ(OBJET)= 100:PRINT “LE VOILA":RETURN
RETURN

 

En septembre, si les magiciens du Double Fond ne m'ont pas fait disparaître, je vous parlerai de la musique et des bruitages dans votre jeu, et nous quitterons avec beaucoup de regret cette rubrique “Aventure". Alors, dépêchez-vous de nous envoyer vos essais, dans le cadre du concours du mois précédent.

Ne voyant pas notre chère Amousse rentrer de vacances (il doit trop s'y plaire), je le remplace assez bas ce mois-ci :

Pierre qui roule, n'amasse p'Amousse.

 

 

 

 

C'est bien connu, toute bonne chose a une fin. Nous approchons, doucement mais sûrement, de la fin de cette suite d'articles traitant de la réalisation des jeux d'aventures. Je ne pouvais vous quitter sans vous parler des bruitages et autres petits trucs, tous ces petits détails qui font la différence.

Nous avons reçu beaucoup d'appels concernant notre rubrique "Aventure". La question qui revenait le plus souvent était : Pourquoi l'appel de l'analyseur de syntaxe se termine toujours par un message d'erreur “UNEXPECTED RETURN” ? Ah ! que de petites têtes en l'air que vous faites là ! L'analyseur de syntaxe ne s'appelle pas par “RUN N° DE LIGNE”. mais par “GOSUB N° DE LIGNE". Alors attention à ce genre d'erreur trop bête, mais qui arrive plus souvent qu'on peut l'imaginer.

Un lecteur nous propose de faire un résumé de l'ensemble des listings parus dans Cent Pour Cent, de faire les liaisons entre les sous-programmes et de voir le traitement des cas particuliers qui pourraient se présenter dans ce jeu. Il y va fort, vous ne trouvez pas ? Imagine-t-il que cela reviendrait à écrire un jeu d'aventures complet et à le faire passer en listing dans ces pages ?

Alors, je ne vous promets rien, car il me reste encore énormément de boulot avant d'avoir un peu de temps à consacrer à cette demande. Ce sera donc la surprise du mois prochain. Si vous y voyez la rubrique "Aventure", c'est que je vous aurais gâté, sinon je vous souhaite bonne chance, et ne perdez pas le contact avec la rédaction, même si nous ne donnons plus suite à cette rubrique.

 

BROUILLEZ L'ECOUTE

 

Je sais, vous avez déjà vu cette infâme contrepèterie dans la rubrique de Sined (qui, entre parenthèses, était de l'ami Septh), mais elle est trop bonne etje ne pouvais m'empêcher de la placer comme intertitre.

Les sons dans un jeu d'aventures peuvent être de plusieurs natures. La musique de présentation est le plus couramment utilisée. Et hop ! On affiche une zolie page en mode zéro à l'écran (il va de soi que les autres modes écran ont le droit d'être utilisés) et on envoie la sauce.

Pour l'écriture de ces musiques, je ne pourrai pas vous remplacer. Sachez qu'elles peuvent être écrites sous Basic, avec les instructions sonores disponibles sur le CPC (SOUND, ENV , ENT, SQ, etc.) ou par un logiciel de création de musique. A propos de softs de musique, il y en a un bon paquet sur le marché. J'utilise personnellement Musique-Pro (malgré un bon nombre de bugs qui vous plantent juste au moment où vous ne les attendez pas), mais des softs comme Musique Studio ou d'autres feront très bien l'affaire. L'affaire qui n'est, en fait, qu'une question de goût. Avant de changer de sujet, j'attire votre attention sur un point très important. Une musique, si belle soit-elle, doit pouvoir être interrompue à n'importe quel moment. Pourquoi obliger lesjoueurs à se taper l'écoute d'une musique à chaque lancement du jeu. C'est injuste, c'est vraiment trop injuste.

Si vous travaillez avec les softs du commerce, vos musiques seront sous intemiption et le test de la touche d'espace ne vous posera aucun problème. Par contre, pour le test d'une touche pendant l'exécution d'une musique écrite sous Basic, vous devez écrire une petite routine qui teste régulièrement une touche donnée. Voici un exemple :

 

10 WHILE INKEY (47)<>0
20 SOUND 1,100+RND*300,10
30 WHILE SQ(1)<>4:WEND
40 WEND
50 PRINT “CECI EST LA SUITE DU PROGRAMME"
60 END

 

Quelques explications. Dans un premier temps, on dit : tant que la touche d'espace n'est pas enfoncée, joue n'importe quoi (qui pour vous sera, j'espère, une musique), puis boucle sur tout ce vacarme. La ligne 30 attend que le son émis soit stoppé avant de continuer son boucan.

 

LE VENT QUI SOUFFLE

 

Hormis la musique de présentation, rares sont les jeux d'aventures qui utilisent les possibilités sonores de l'Amstrad. Ici encore peuvent se présenter deux cas. Sans parler des musiques et bruitages venant à l'instant où vous êtes mouru. on peut se permettre des bruitages au sein (Hummmm... mangeons du lait) des parties d'aventure.

Premièrement, les bruits de fond, qui sont joués sur une période très longue, comme le bruit de la mer et non pas celui du père, le vent ou un ventilateur. Deuxièmement, les bruitages ponctuels, comme le bruit de l'ouverture d'une porte ou celui de la chute d'un Français dans l'eau qui fait plouf. Un Anglais dans l'eau, ça fait plaf, quant au pauvre Belge, ça ne fait rien (rire du public en délire... Ha, ha, ha !).

La démarche la plus simple à suivre consiste à écrire ces bruits sous Basic dans le cas d'un programme testeur, qui n'aura aucun rapport avec votre jeu. II faudra donc connaître les instructions sonores du CPC.

 

 

 

 


SOUND

Je ne ferai pas tout un plat de nouilles sur cette instruction qui a été traitée des dizaines de fois dans différents articles. II faut juste savoir que le mélange des canaux peut provoquer un enrichissement du son (SOUND 2+1.200,100 est plus riche que SOUND 1,200.100). Pour les autres détails, consultez votre manuel car il en dit long.

 

 

ENT

 

Qui détermine l'enveloppe de fréquence du son joué par la commande SOUND. Là. il faut faire attention. On donne, dans un premier temps, à l'enveloppe son numéro qui va de 1 à 15, suivi de paramètres qui seront des trios (15 paramètres au total). Le premier indique le nombre de répétitions, le deuxième la variation de la fréquence, quant au troisième c'est celui de la durée. Pour une meilleure com-

préhension il faudra lire les enveloppes de la façon suivante : “L'enveloppe N° 2, je l'augmente 10 fois d'une valeur de 20 pendant 30 cinquantièmes de seconde, puis 4 fois d'une valeur de -10, pendant 20 cinquantièmes de seconde : ENT 2,10,20, 30,4,-10,20.”

La modification d'une fréquence vous donnera un son qui n'a plus aucun rapport avec les pokes, ni avec ce que vous avez pu faire jusqu'à présent, à condition que ce soient vos premiers pas dans le monde des sons. Iiiiiiiiiannnnnnnn. C'est pas évident à écrire, mais j'essaie de faire le bruit d'une voiture qui passe. Faites la voiture pour mieux comprendre et surtout n'ayez pas peur du ridicule. Ecoutez attentivement la différence dans la fréquence.

Elle reste durant un moment stable (Iiiiiiii), pour partir ensuite dans les graves (annnnnnnn. quel âne). Quand la fréquence ne varie pas, on lui donne un pas d'augmentation égal à zéro : ENT 1,10,0,10. Ensuite elle s'aggrave. Les fréquences graves ont des valeurs plus grandes que les aiguës, donc il faudra augmenter cette valeur : ENT 1,10,0,10,30,2,2.

Après avoir défini une telle enveloppe de fréquence, ce qui. je l'avoue, doit être fait dans les premiers temps, par de légers tâtonnements, vous pourrez la tester sur une commande son. SOUND 1,400,500,12,0,1. C'est pas trop mal, n'est-ce pas ? Mais il lui manque un petit quelque chose pour ressembler à la voiture qui passe (je dis bien voiture, et non pas épave comme celle de Septh que l'on a abandonnée Porte de la Chapelle, sur le périph.).

Vous remarquez que le son au début doit être très faible (avant qu'elle ne nous dépasse), pour arriver à son maximum (elle nous dépasse), puis diminuer progressivement et atteindre le zéro (elle est partie). Ce n'est rien d'autre qu'une variation dans le volume et c'est le rôle des enveloppes de volume.

 

 

ENV

 

Les paramètres pour ENV, sont de même nature que sa grande sœur ENT. Trois par trois, et jusqu'à quinze. On lui balance les paramètres, mais cette fois on varie le volume et non plus la fréquence. En faisant attention que le volume initial est celui donné dans la commande SOUND et que sa valeur maximale est de quinze. Passée cette limite, la valeur seize obtenue sera interprétée comme un zéro.

Voyons pour le son de la voiture qui repasse. A l'origine, il est égal à zéro, donc SOUND 1,400,500,0. II monte progressivement, ENV 1,12.1,10, puis il redescend jusqu'à zéro, mais plus lentement qu'il ne vient de monter, ENV 1,12,1,10,12.-1,20. Et hop ! Voilà la voiture qui en a marre de passer. SOUND 1,400,500,0,1,1. Génial, non ? Essayez de modifier les paramètres des deux enveloppes pour mieux comprendre leur rôle, puis faites le “Fuiiiiii Fuiiiiiiiiiiiieeee", (c'est le sifflement qu'émettent certains rédacteurs de Cent Pour Cent, que je ne nommerai pas, à la vue de Miss X). Pour clore (rure de sodium) ce chapitre, si le numéro de votre enveloppe de fréquence a une valeur négative, la variation de fréquence se fera de façon répétitive, jusqu'au dernier souffle de votre son. Le temps indiqué en troisième position dans la commande SOUND peut prendre une valeur négative, ce qui indique au CPC qu'il ne doit plusjouer le son sur un certain laps de temps, mais qu'il s'agit en fait d'une répétition de l'enveloppe du volume. Essayez de remplacer le 500 par -3 et vous aurez trois voitures qui saturent à force de passer. Bon d'accord, les deux dernières n'ont pas le temps de profiter de la variation de fréquence, mais c'était juste pour vous montrer que l'on pouvait répéter un son (127 fois au plus), ce qui vous servira pour faire les bruits de fond qui doivent durer très longtemps.

J'ai plus de place. S'il reste des lacunes, écrivez-moi ou téléphonez.

Bonne bourre et auvergnate.

 

 

 

Coucou, c'est Septh qui parle. Je profite d'un moment d'inattention de la part de Poum pour m'incruster dans sa rubrique. Je voulais dire que je le remercie solennellement de terminer sa série "Aventure avant tout" par le numéro Septh, à cause qu'un numéro Sined, Lipfy ou Miss X, ça n'aurait pas été rigolo. Merci donc, Poum, je te repasse la parole. A vous Cognacq-Jay.

Merci à toi. Je trouve cela génial, car enfin voici un chapeau qui ne m'a pas demandé beaucoup d'efforts, et croyez-moi, après des vacances passées aux portes de l'île de Ré, iI est très dur de retrouver le cours de ses idées. Avant toute chose, je vous dois des excuses en ce qui concerne les quelques petites pétouilles qui se sont glissées dans nos listings. Au hasard, dans le numéro de juin, il y avait trois listings. En fin de la ligne 70, vous aviez A(6)=L, qu'il faudra remplacer par A(6)=L*2. Je remercie Michel Vrilleau pour l'attention qu'il a portée à cette petite erreur dont je prends tou-te la responsabilité. Pour finir avec les pétouilles de nos numéros, voilà qu'en ligne 70 du numéro d'avril (décidément le 70 me porte malheur) vous avez lu DIM CASE(30), il est évident qu'il s'agissait de dimensionner NSEO, donc DIM NSEO(30).

Comme je vous l'avais laissé entendre le mois dernier, je vous ai préparé le listing d'un petit jeu d'aventure, qui est loin de minibus (NDLipounette : Il arrive un moment où cela devient louuurd) d être le jeu de l'année. Il marche sans problème et peut vous servir d'exemple pour réaliser votre jeu, comme celui de Fredy que j'ai reçu il y a quelque temps (pas mal du tout, à part quelques bugs dans les déplacements). Vu la taille du listing, je ne pourrai pas vous faire de longs discours. Sachez que le premier programme sert à créer un écran de jeu, plus six simulations d'images. Quant au deuxième programme, c'est le jeu d'aventure proprement dit. Examinez-le, il comporte toutes les astuces que nous avons vues ensemble, avec un petit plus qui est la gestion des conditions et le bla-bla.

Si après avoir lu tous les articles parus dans le joumal, et examiné à la loupe le programme qui suit, vous n'êtes pas capable d'écrire un jeu d'aventure , vous êtes dans un cas désespéré et il ne vous reste plus qu'à vous reconvertir au Logo.

 

L'ESPION QUI VENAIT DU CHAUD (SEPTH)

 

 

Vous incarnez le rôle du plus grand espion de tous les temps, à savoir le grand Septh  MAX-COM. Vous devez déconnecter l'ordinateur central du QG ennemi pour empêcher le grand méchant de détruire la planète Terre (c'est original, non ?). Vous êtes à l'entrée du QG. La salle des ordinateurs est gardée par un garde (encore plus original). II fàudra trouver le moyen de neutraliser le garde et la clé qui ouvrira la porte.

Le plan est sur une grille de trois sur trois et comporte cinq cases. L'accès à la salle des ordinateurs est interdit, pour l'ouvrir il faudra avoir neutralisé le garde. Ensuite, si vous avez la clé en main vous pourrez ouvrir la porte et le tour sera joué. Jetez un œil sur la gestion dans le couloir par rapport à la porte au sud (récupérez ensuite votre œil car vous en aurez besoin). On vous empêchera de sortir dehors car rien n'est prévu à l'extérieur. Dans le sous-programme de l'analyseur de syntaxe, une variable "TOTAL” est employée, elle résulte de la multiplication par 100 du verbe et son addition avec l'objet, ce qui permet avec un seul test de vérifier le verbe et l'objet (au lieu de faire “IF VERBE=5 AND OBJET=8 THEN”, on fera “IF TOTAL=508 THEN”). Pour le reste, et en deux mots, décortiquez le programme à fond et la lumière sera.

Poum , A100% n°19 (Octobre 1989)

Listing ACPC19 Poum1
Listing ACPC19 Poum1b
 

 


 

 

Listing ACPC19 Poum2
Listing ACPC19 Poum3
Listing ACPC19 Poum4
Listing ACPC19 Poum5
Listing ACPC19 Poum6
Listing ACPC19 Poum7
Listing ACPC19 Poum8
Listing ACPC19 Poum9
Listing ACPC19 Poum10
Listing ACPC19 Poum11
 

You have no rights to post comments