Les jeux dits d'ARCADE passent pour être les plus difficiles à réaliser. En effet, les impératifs de vitesse de déplacement, de saisie, etc obligent le programmeur à développer une grande partie du jeu en langage machine.ARCADE vous libère de cette contrainte et vous offre diverses routines en code machine et entièrement paramétrables à partir du BASIC.
La face A de la cassette contient les outils nécessaires pour composer vos propres jeux.
La face B contient us exemple de jeu réalisé grâce à ARCADE.
Ce manuel contient trois parties:
- Une description du jeu de la face B.
- Un listing du jeu de la face B.
- Une description des routines d'ARCADE.
Principe général de fonctionnement d'ARCADE.
Le but du logiciel ARCADE est de permettre la réalisation Facile et rapide de divers jeux d'arcade (jeux de tirs, de combats, poursuite, etc). ARCADE est constitué par un ensemble de routines écrites en langage machine est dont l'appel est fait en BASIC.
L'une des fonctions essentielle d'ARCADE est la gestion des "LUTINS". Un lutin est un objet qui se déplace à l'écran soit de manière automatique, soit en suivant les commandes des manettes de jeu. ARCADE vous permet de définir les dessins associés à chaque lutin, ainsi que leur déplacement à l'écran.
Trois types de lutins sont disponibles dans ARCADE:
- les lutine automatiques, dont le déplacement est géré automatiquement par ARCADE grâce aux paramètres que vous aurez fournis. Il est possible de définir jusqu'à 16 lutins automatiques de n'importe quelle taille, et qui peuvent avoir chacun un dessin choisi parmi 255.
- Les lutins manettes, dont le déplacement est géré par les manettes de jeu. A chaque manette correspond un lutin de n'importe quelle teille, et qui peut avoir jusqu'à 9 dessins possibles.
- Les lutins tirs, dont le déplacement est provoqué par l'appui sur la touche FEU des manettes de jeu. A chaque manette correspond au lutin de tir qui peut avoir jusqu'à 9 dessins possibles.
Chacun de ces lutins est associé à un moment donné à la description d'un dessin. ARCADE vous permet de définir jusqu'à 255 dessins de taille, forme et couleur différente.
Les lutins automatiques sont par ailleurs associés à la description d'un son qui sera utilisé automatiquement par le synthétiseur vocal lors d'une collision de lutins. Il est possible de définir jusqu'à 255 sons différents.
Le mise en oeuvre des lutins est réalisée grâce à un certain nombre de fonctions écrites en langage machine et dont le détail de l'utilisation est donnée dans ce manuel.
REALISATION D'UN JEU GRACE A ARCADE
DESCRIPTION DU JEU PROPOSE
Le scénario du jeu proposé en face B est simple:
- suivant un menu, une ou deux manettes sont associées à un lutin manette.
- des lutins automatiques sont définis.
- le but du jeu est d'abattre l'adversaire, tout en évitant les lutins automatiques, en les détruisant et en évitant de se faire abattre par les tirs de l'autre manette.
- A chaque collision avec un lutin tir ou un latin automatique, le joueur perd une vie.
- A chaque tir atteignant un lutin automatique, le joueur marque des points.
La structure d'ARCADE permet une décomposition en blocs d'un programme (programmation structurée !!!!!!) Cette notion est utilisée au maximum dans le jeu se trouvant sur la face B de la cassette et dont vous trouverez un listing à la fin de ce manuel. Nous vous suggérons fortement d'utiliser ce programme comme trame pour vos premiers jeux. (commencez par changer les dessins, les sons, puis les paramètres de déplacement, jusqu'à créer notre propre scénario).
Vous trouverez ci-dessous une description des différents blocs du programme donné en exemple.
Ligne 1 et 2: Initialisation des compteurs de points.
Ligne 10: Définition des caractères utilisateur.
Ligne 15: Chargement du code machine MAIN et INITIALISATIONS.
Ligne 20 Effacement da la ligne de contrôle.
Ligne 30: Choix du nombre de manettes.
Ligne 40: Préparation de l'écran de fond.
Ligne 50: Recopie écran affiché dans écran tampon.
Ligne 60: Initialisation des dessins.
Ligne 65: Initialisations des sons. (speechs).
Liges 67: Chargement du code machine JEU.
Ligne 75: Définition des lutins automatiques.
Liges 75: Définition des lutins-manettes.
Liges 80: Lancement du jeu.
Liges 90-250: Traitement des collisions.
Liges 300-330: Fin de partie.
Lors du traitement des collisions, les compteurs de SCORE sont incrémentés ou le nombre de vies est décrémenté en fonction des numéros de lutins qui se sont heurtés.
Avant de réaliser votre premier jeu, suivez pas à pas les conseils et exemples détaillés ci-après qui vous familiariseront à la pratique d'ARCADE.
La création d'un jeu passe par des étapes successives qui vous permettront de passer d'une idée floue à un jeu fini et sans erreur. Evitez de faire ce que beaucoup font, à savoir commencer à taper sur le clavier sans avoir fait d'analyse préalable.
étape première: ECRITURE DU SCENARIO
étape deuxième PROGRAMMATION
LE SCENARIO DU JEU
Avant de programmer un jeu, il vous faudra définir le scénario de ce jeu. Plus le scénario sera précis, moins de temps vous passerez en mise au point.
Les principales questions a se poser sont:
- Est-ce un jeu à 1 ou 2 joueurs
Suivant la réponse vous définirez 1 ou 2 lutins manettes en utilisant la fonction en ligne 10140.
- Combien y aura-t-il de lutins automatiques, faut-il les éviter ou encore les abattre ou encore les attraper. En fonction des réponses comment ferez-vous évoluer le score.
PROGRAMMATION
Une fois votre scénario défini, nous vous conseillons de reprendre la trame de programme existante et de procéder par modification sur cette trame. Commencez par modifier les dessins des lutins en redéfinissant les caractères et les DATA décrivant les dessins, puis modifier les sons, les déplacements des lutins automatiques et enfin ajuster notre propre traitement des collisions.
Cette procédure vous permettra une mise au point plus rapide de votre jeu.
UTILISATION DES ROUTINES ARCADE
Description des fonctions réalisées par ARCADE.
Les différentes fonctions d'ARCADE sont accessibles par des instructions GOSUB xxxxx ou xxxxx est un numéro de ligne. L'ensemble des fonctions est intégré dans un bloc de numéros de ligne allant de 10000 à 20000. II est impératif qu'aucun numéro de ligne entre 10000 et 20000 ne soit utilisé ou modifié par votre programme BASIC. Dans tout ce qui suit, nous ferons référence à un numéro de ligne correspondant à une fonction ainsi qu'à des noms de variables qui devront être initialisées avant l'appel de la fonction. Pour appeler une fonction il suffira donc de définir les variables nécessaires à cette fonction et d'effectuer un GOSUB au numéro de ligne correspondant à cette fonction.
Trois types de fonctions sont à distinguer:
- les fonctions de chargement, dont le rôle est de charger le langage machine d'ARCADE en mémoire centrale.
- les fonctions d'initialisation, dont le rôle est d'initialiser les paramètres d'ARCADE.
- les fonctions de jeu, dont le rôle est de permettre le contrôle du jeu en cours d'execution.
Les fonctions de chargement:
Le code machine d'ARCADE est décomposé en trois blocs de code machine regroupant chacun un certain nombre de fonctions utiles à un moment donné en cours de jeu. Le premier bloc est chargé une fois pour toutes en mémoire et ne nécessite pas de rechargement. Les deux blocs suivants doivent être chargés avant l'utilisation de l'une des fonctions qu'il contient.
Les fonctions de chargement sont au nombre de trois:
LIGNE 10900:
----Chargement de la partie principale du code machine d'ARCADE en mémoire centrale. Cette fonction ne nécessite aucun paramètre et doit obligatoirement être la première fonction appelée. Un seul appel à cette fonction est nécessaire dans l'ensemble du programme. Les fonctions inclues dans cette partie du code machine sont:
- définition d'un lutin automatique.
- définition d'on lutin manette.
- lecture des paramètres d'un lutin automatique.
- lecture des paramètres d'us lutin manette.
Exemple: 10 GOSUB 10900 ! sans paramètres
LIGNE 10190:
----Chargement du code machine contenant les fonctions:
- recopie de l'écran affiché dans un écran tampon.
- définition de tous les dessins de lutins.
- définition de tous les sons.
- effacement de la ligne de contrôle.
- affichage de la ligne de contrôle.
Cette fonction doit être appelée avant l'utilisation de l'une des fonctions citées ci-dessus. Elle ne nécessite aucun paramètre.
Exemple : 20 GOSUB 10190 ! sans paramètres
LIGNE 10290:
----Chargement du code machine contenant les fonctions:
- lancement et exécution du jeu.
Cette fonction doit être appelée avant l'exécution du jeu. Elle ne nécessite aucun paramètre.
Ex: 100 GOSUB 10290 ! sans paramètres
Les fonctions d'initialisations:
Les fonctions d'initialisations sont au nombre de quatre.
LIGNE 10000:
----Cette routine, lorsqu'elle est appelée, a pour effet d'effacer la ligne de contrôle, à savoir la ligne située en haut de l'écran et contenant les messages systèmes. Aucun paramètre n'est nécessaire.
Ex 110 GOSUB 10000 ! sans paramètres
LIGNE 10010:
----Cette routine, lorsqu'elle est appelée, a pour effet de revalider la ligne de contrôle. Aucun paramètre n'est nécessaire,
Ex: 120 GOSUB 10010 ! sans paramètres
LIGNE 10100:
----Cette routine permet de sauvegarder l'image de l'écran affiché dans un écran tampon qui est utilisé par ARCADE pour l'effacement des lutins. Il est nécessaire d'appeler cette routine (juste après avoir préparé et affiché un écran correspondant à votre fond sur lequel se déroulera le jeu (un ciel, la mer, etc). Aucun paramètre n'est nécessaire.
Ex: 130 GOSUB 10100 !sans paramètres
LIGNE 10110:
----Cette fonction a pour but associer un numéro de dessin à la description d'un dessin. Il est possible de décrire jusqu'à 255 dessins de lutins différents. Chaque dessin est défini dans une instruction DATA (voir Définition des dessins des lutins).
Avant l'appel de cette fonction il est nécessaire d'exécuter une instruction RESTORE xxxxx, où xxxxx est te numéro de la ligna DATA contenant la description du dessin, et de définir la variable NDES correspondant au numéro de dessin que l'on veut associer. La variable NDES peut prendre des valeurs entre 1 et 255.
Ex:
200 RESTORE 1000 ! description du dessin
210 NDES=1 ! numéro de dessin à associer
220 GOSUB 10110 ! appel de la fonction
1000 DATA 414243Z ! dessin correspondant à "ABC"
LIGNE 10120:
----Cette Fonction a pour but d'associer un numéro de son à la description d'un son. Il est possible d'écrire jusqu'à 255 sons différents. Chaque son est défini dans une instruction DATA (voir Définition des sons).
Avant l'appel de cette fonction il est nécessaire d'exécuter ana instruction RESTORE xxxxx, où xxxxx est le numéro de la ligne DATA contenant la description du son, et de définir la variable NSON correspondant au numéro de son que l'on veut associer. La variable NSON peut prendre des valeurs entre 1 et 255.
Ex:
300 RESTORE 2000 ! description du son TIC
310 NSON=1 ! numéro de son à associer
320 GOSUB 10120 ! appel de la fonction
2000 DATA 0D7C8BAABAB602FCZ ! son correspondant à TIC
Il est conseillé d'utiliser les fonctions d'initialisation avant le démarrage effectif du jeu de manière à éviter les chargements successifs des routines d'initialisation qui auraient pour effet de ralentir le jeu.
Fonctions de contrôle du jeu:
LIGNE 10130 Définition d'un lutin automatique.
----Cette fonction permet de définir les paramètres des lutins automatiques. La variables qui doivent être définies avant l'appel de cette fonction sont les suivants. :
NSPR: Numéro de lutin automatique allant de 0 à 15.
NDES: Numéro de dessin (de 1 à 255) à utiliser pour ce lutin. Si NDE=0 alors le lutin est inactif. Cette possibilité est utilisée pour inactiver un lutin après une collision.
CSPR: Couleur du dessin du lutin. 0=Noir, 1=rouge, 2=Vert, 3=Jaune, 4 Bleu, 5=Magenta, 6=Cyan, 7=Blanc.
NSON: Numéro de son à utiliser lors d'une collision. si NSON=1 alors aucun son émis lors d'une collision avec ce lutin.
NBRREP: Nombre de fois que le lutin doit recommencer son parcours, de 1 à 255 fois. si NBRREP=0 alors le lutin recommence indéfiniment son parcours.
YDEB: ligne de départ du parcours du lutin.
XDEB: colonne de départ du parcours du lutin.
PY : Valeur du pas en Y du lutin lors de chaque déplacement de celui-ci. Cette valeur peut être positive ou négative suivant le sens dans lequel on veut faire déplacer le lutin. Par exemple si PY=1 alors le lutin descend d'une ligne à chaque déplacement, si PY=-2 alors le lutin monte de deux lignes à chaque déplacement.
PX: Valeur du pas en X du lutin lors de chaque déplacement de celui-ci. Idem que PY.
NBRPAS: Nombre de pas que le lutin doit effectuer lors de chaque déplacement. Peut aller de 1 à 255. A chaque pas ARCADE fait évoluer automatiquement les cordonnées Y et X du lutin en fonction de PY et PX. Il peut arriver que les coordonnées soient en dehors de l'écran affiché, dans ce cas ARCADE n'affiche pas le lutin mais celui-ci existe tout de même. Cette possibilité permet de foire réapparaitre le lutin plus ou moins rapidement.
VSPR: Vitesse de déplacement du lutin. Va de 0 à 255. si VSPR=0, le lutin ne se déplacera pas quelque soit la valeur des autres paramètres. Cette possibilité permet d'afficher un lutin fixe pendant un temps donné à savoir NBRREP * NBRPAS. VSPR=1 est la vitesse la plus rapide.
Exemple:
400 NSPR=1 : NDES=40 : NS0N=2 : YDEB=3 : XDEB=2
410 NBRREP=51 : NBRPAS=20 : PY=1 : PX=1 : VSPR=1
420 G005R 10130
Ceci aura pour effet de définir le lutin numéro 1 comme ayant le dessin numéro 40, lors d'une collision le son numéro 2 sera émis, le lutin commence son déplacement en ligne 3 colonne 2, avance à chaque pas d'une ligne et une colonne (descend vers la droite), effectue 20 fois ce pas (descend jusqu'à ligne 23 colonne 22) et recommence ce déplacement 50 fois avant de disparaitre. La vitesse de déplacement est de 1.
1--------2--------3
-.-------.-------.
--.------.------.
---.-----.-----.
----.----.----.
-----.---.---.
------.--.--.
-------.-.-.
4.-.-.-.-5-.-.-.-.6
-------.-.-.
------.--.--.
-----.---.---.
----.----.----.
---.-----.-----.
--.------.------.
-.-------.-------.
7--------88-------9
LIGNE 10140 Définition des lutins manettes.
----Cette fonction permet de définir les paramètres des lutins manettes. Les variables qui doivent être définie avant l'appel de cette Fonction sont les suivantes:
NLUT: Numéro de la manette de jeu concernée. NLUT=0 pour la manette orange ou le clavier. NLUT=1 pour la manette blanche.
CLUT: Couleur du dessin du lutin associé à cette manette. Voir définition des couleurs des dessins des lutins automatiques.
YMIN: Ligne minimum que le lutin ne peut dépasser.
XMIN: Colonne minimum que le lutin ne peut dépasser.
YMAX: Ligne maximum que le lutin ne peut dépasser.
XMAX: Colonne maximum que le lutin ne peut dépasser.
Ces quatre paramètres permettent de définir un cadre duquel le lutin associé à la manette ne pourra sortir.
Il est à noter que le numéro de dessin associé au lutin manette n'est pas défini. En effet cette affectation est faite automatiquement à la définition du lutin manette, puis manuellement au cours du jeu en utilisant les touches 1 à 9 de chaque manette. Les touches 1 à 9 sont utilisées pour donner une orientation au lutin ce qui permet de donner une impression de rotation. A chaque touche est affecté automatiquement un dessin (voir tableau ci-dessous).
A chaque lutin manette est également associé un lutin tir généré automatiquement lors de l'appui sur le touche FEU de le manette. Chaque lutin tir est associé automatiquement à un numéro de dessin en fonction de le tourbe 1 à 9 enfoncés précédemment. (voie tableau ci-dessous). Les numéros des lutins tirs sont:
- 18 pour la manette 0 (orange)
- 19 pour la manette 1 (blanche)
En plus de l'affectation automatique des dessins les touches 1 à 9 ont un effet sur l'orientation du déplacement du lutin tir. (voir croquis).
Le numéro de dessin utilisé au moment de la définition des lutins manettes sont
- 5 pour la manette 0 (orange)
- 25 pour la manette 1 (blanche)
Au cours du jeu les numéros de dessins affectés en fonctions des touches sont:
---Touches------Dessins------Dessins------Dessins------Dessins
---Manette------Lutin 0------Lutin 1-------Tirs 0-------Tirs 1
-----1-------------1-----------21-----------11-----------31
-----2-------------2-----------22-----------12-----------32
-----3-------------3-----------23-----------13-----------33
-----4-------------4-----------24-----------14-----------34
-----5-------------5-----------25-----------15-----------35
-----6-------------6-----------26-----------16-----------36
-----7-------------7-----------27-----------17-----------37
-----8-------------8-----------28-----------18-----------38
-----9-------------9-----------29-----------19-----------39
Orientation du déplacement du lutin tir.
LIGNE 10200 Lancement du jeu.
----Une, fois que les dessins, les sons, les lutins automatiques, les lutins manettes sont initialisés et définis, ARCADE se charge de gérer l'ensemble des déplacements automatiques, des déplacements manuels, des tirs grâce à l'appel de cette routine.
Aucun paramètre n'est nécessaire pour appeler cette fonction.
Cette routine ne reviendra è l'instruction GOSUB 10200 qu'après une collision ou encore après l'appui sur CTRL S (permet de mettre au point le programme).
Les collisions générant un retour au BASIC sont:
- les collisions entre lutins manette.
- les collisions entre lutin manette et lutin automatique.
- les collisions entre lutin automatique et lutin tir.
- les collisions entre lutin manette et lutin tir.
ARCADE met à jour un certain nombre de variables pour permettre l'identification de la collision :
MOB= Numéro du lutin mobile au moment de la collision.
FIX= Numéro du lutin fixe au moment de la collision.
YCOL= Ligne de la collision
XCOL =colonne de la collision.
L'appuie sur la touche CTRL S est détecté par M0B=255.
Au moment de la collision ARCADE émet un son associé au lutin automatique, les informations contenues dans MOB, FIX, YCOL, XCOL peuvent être traitées en BASIC et le jeu relancé.
Les lutins qui sont entrés en collision sont effacés au moment du retour au BASIC.
Définition des dessins des lutins.
Les dessins des lutins sont définis en utilisant l'instruction DATA du BASIC. La taille des lutins n'est pas limitée. Le DATA décrivant le dessin est composé des codes ASCII sous forme hexadécimale des caractères à utiliser. La fin du dessin est matérialisée par le caractère "Z".
Par exemple:
1000 DATA 414243Z correspond au dessin ABC
où encore si les caractères ont été redéfinis par l'instruction CALL CHAR:
1000 CALL CHAR(65, "00FF00FF00FF00FF00FF")
1010 CALL CHAR(66, "000000FFFFFFFF000000")
1020 CALL CHAR(67, "FFFFFF00000000FFFFFF")
1030 DATA 414243Z
L'utilisation par ARCADE d'un tel dessin se ferait donc de la manière suivante:
1000 CALL CHAR(65, "00FF00FF00FF00FF00FF")
1010 CALL CHAR(66, "000000FFFFFFFF000000")
1020 CALL CHAR(67, "FFFFFF00000000FFFFFF")
1030 DATA 414243Z
1040 RESTORE 1030 : NDES=1 : GOSUB 10110
Ceci aura pour effet d'associer le dessin définit dans le DATA de la ligne 1030 au numéro de dessin 1. N'importe quel lutin pourra par la suite faire référence à ce dessin grâce à la variable NDES.
Ii est à noter qu'un dessin peut être codé par plusieurs lignes DATA consécutives:
Exemple:
1030 DATA 414243Z
est équivalent à:
1030 DATA 414Z
1040 DATA 43Z
Deux caractères particuliers sont utilisés dans les DATA pour permettre de définir les sauts en Y et X.
Exemple:
1030 DATA 414243Y414243YX4142YXX41Z
correspond à:
ABC
ABC
AB
A
Définition des sons.
Les sons sont définis de manière similaire aux dessins grâce à l'instruction DATA. Par exemple pour définir le son "TIC" comme étant le son numéro 1:
2000 RESTORE 2010 : NSON=1 : GOSUB 10120
2010 DATA 0D7C8BAABAB602FCZ !correspondant à TIC