Le programme de jeu proposé ici exploite pleinement les possibilités graphiques et sonores de l'Amstrad. Il vous permettra de découvrir ou de redécouvrir ce grand classique des jeux d'arcade que tout micro se doit de posséder. Ce programme sera également l'occasion de présenter une introduction au langage machine sur Amstrad.  Les valeurs de chaque envahisseur sont données sur un écran d'accueil.
Le but du jeu est de défendre votre chère vieille planète, la Terre, du danger qui la menace : une horde d'envahisseurs sanguinaires, dont le seul objectif est de vous détruire ou de toucher votre sol natal pour y semer guerre et désolation. Vous devrez, à l'aide de votre base mobile, éviter les bombes des envahisseurs. Vous serez aidé, en ce sens, par trois abris qui se désintégreront peu à peu sous votre propre feu et le pilonnement ennemi. Le laser monté sur votre base vous permettra de détruire les monstres et leurs éphémères soucoupes de ravitaillement qui traversent le haut de l'écran avec défi. Mais plus vous abattrez d'ennemis, plus ceux-ci augmenteront leur vitesse de descente : ne vous attardez donc pas trop pour utiliser votre laser... Quand le tableau est fini, vos malheurs n'en sont pas pour autant terminés. Après trois petites secondes de répit, une autre vague apparaît à l'écran, mais plus près de votre base, il vous faudra donc être plus vigilant. La saisie du programme Celui-ci se compose essentiellement de codes machines et de données en binaire utilisées par le programme. Il convient donc de frapper avant tout un MEMORY &5FFF pour leur réserver les adresses supérieures. L'entrée des codes se fait à l'aide du programme basic donné figure 1. Vous entrez ainsi les contenus des figures 2 (programme en langage machine), 3 et 4 (données = matrices des envahisseurs, programmes sonores...). Pour cela, vous devez frapper, après l'inlassable RUN, l'adresse de départ qui correspond au premier octet de la liste (&7530, &6000, &6170, &6270). Vous tapez ensuite les octets 8 par 8 en entrant à chaque fois la somme de contrôle. (Attention à ne pas mettre d'espace entre deux octets !). Si aucune erreur n'est détectée, l'adresse courante est incrémentée de 8 et vous continuez normalement la saisie. Autrement, un bip sonore est émis et vous devez retaper la ligne. Lorsque vous avez achevé j'entrée d'un listing, vous arrêtez le programme par BREAK et recommencez la manœuvre avec le listing suivant. Une fois toutes les données binaires introduites, tapez un NEW puis entrez le programme Basic de la figure 5. Ensuite, sauvegardez impérativement le programme en observant la progression suivante : SPEED WRITE 1 SAVE "SPACE^INVADERS" SAVE "CODES", B, 30000,2100 SAVE "TABLE" , B,&6000,1200N'oubliez pas l'habituel CAT pour une ultime vérification.Le déroulement du jeu Vous êtes maintenant prêt à jouer. Si vous venez de taper le programme, entrez DELETE - 40, sinon chargez-le par RUN (ou CTRL-ENTER). Un indispensable RUN, et le programme vous demande votre niveau de jeu, la vitesse du jeu et, finalement, la vitesse de la base (la signification directe de ces paramètres sur le jeu est donnée plus loin). Vous avez ensuite droit à la présentation des divers antagonistes auxquels vous allez avoir à faire. La soucoupe rapporte 200 points mais n'apparaît que furtivement à l'écran. Viennent ensuite les trois espèces d'envahisseurs qui valent respectivement : 30, 20, 10 points. Une pression sur n'importe quelle touche, sauf ESC, démarrera alors le jeu. Le score est affichéen haut à droite (tant qu'il est nul, rien n'est affiché). En haut à gauche figure le nombre de bases que vous avez en réserve. Chaque fois que vous succombez sous le feu ennemi, vous perdez une base, et si cela vous arrive lorsque la réserve est vide, vous avez perdu. En revanche, tous les 10 000 points, une base supplémentaire vous est allouée. C'est ainsi que, lors d'un parcours sans faute, vous pouvez arriver à 20 000 points avec quatre bases en réserve. Vos déplacements seront contrôlés par les touches « 0 » et « ENTER » du pavé numérique. La barre de « SPACE » activera le laser. Il est à noter que le laser est désactivé tant que votre tir précédent n'a pas atteint une cible ou n'est pas sorti en haut de l'écran. Si votre tir rencontre une bombe ennemie, il est annihilé, mais la bombe reste active à 100 % : ne vous entêtez donc pas à vouloir percer un tir ennemi, le mouvement de la base est la seule solution raisonnable (à moins que la bombe n'explose sur un abri). Si, au cours du jeu, vous souhaitez arrêter, il suffit de presser « DEL ». Le jeu a été conçu de façon que, même à la difficulté maximale (la vague d'envahisseur, se trouve, en début de jeu, presque en bas de l'écran), vous puissiez vous en sortir sans dégât. Mais il vous faudra pour cela, outre une bonne expérience, d'excellents réflexes, surtout si vous avez sélectionné un niveau de jeu difficile. A titre d'exemple, l'auteur a dépassé facilement les 100 000 points au niveau de jeu 0, mais rien qu'au niveau 4, les 30 000 points ont été difficiles à atteindre. Le jeu est accompagné de nombreux effets sonores et lumineux. Vous aurez donc tout intérêt à connecter votre Amstrad à un radiocassette ou une chaîne stéréo pour en profiter au maximum. Voyons maintenant à quoi correspondent exactement les paramètres que vous entrez avant de jouer. La gestion des diverses actions par le programme en langage machine est très simple. Il décrit une boucle principale où chaque action est représentée par un compteur qui est remis à 0 quand l'action est effectuée. L'avance du tir de la base est effectuée à chaque boucle, c'est la vitesse de référence appelée 0. Chaque déplacement des autres mobiles du jeu (bombes, soucoupes...) est effectué quand le compteur spécifique cité précédemment atteint la valeur n, ce qui donne au mobile en question une vitesse 0/n. Voici donc les adresses où doivent être portées ces valeurs de n, ce qui vous permettra d'obtenir, si vous le désirez, beaucoup plus de variantes possibles que par le Basic : - soucoupe : &75E2
- tir des envahisseurs : &75C1
- avance des envahisseurs : table en &6150 (décrite ci-après)
- vitesse de la base : &75D3.
La temporisation appliquéeentre deux déplacements du mobile de référence est réglable par les octets &7617, &7619. La table en &6150 se présente sous la forme suivante : &6150 x1 n1 X2 n2 ... Appelons x le nombre d'envahisseurs abattus (0 < x < 50). Tant que x < x1 , la valeur de n pour le déplacement des envahisseurs est égale à n1. Si x = x1 , on décale le pointeur de la table de deux et n2 sera la nouvelle vitesse tant que x < x2 ... Muni de ces renseignements, vous pourrez exploiter toutes les possibilités de jeu, notamment en modifiant la table décrite ci-dessus, où le Basic donne des valeurs fixes à Xi (ligne 220) et où ni+1 = ni/2. Langage machine sur Amstrad Le « guide de l'utilisateur » livré avec l'Amstrad ne parle quasiment que du Basic, et l'utilisateur qui veut faire du langage machine n'a plus qu'à faire lui-même ses recherches, à moins de faire l'acquisition d'un livre coûteux en anglais et difficilement disponible (Firmware). Voici donc quelques indications qui vous seront d'une grande utilité pour l'élaboration de vos programmes. Tout d'abord, le plus important est de pouvoir utiliser le graphisme de l'appareil. La fonction PLOT du Basic peut être appelée du langage machine par « CALL &BBEA » avec le registre DE contenant l'abscisse X et le registre HL l'ordonnée Y. L'effet sera le même que PLOT X,Y en Basic. Cette fonction est valable quel que soit le mode d'écran choisi. Pour réaliser la fonction Basic PLOT X,Y,a où « a » représente la couleur du stylo graphique -, il faut charger dans l'accumulateur la valeur « a » pour effectuer « CALL &BBDE ». Tous les plots effectués après cette commande seront faits avec la dernière encre sélectionnée. L'auteur a écrit une routine spéciale pour le programme « Les envahisseurs attaquent » qui présente l'avantage d'être plus simple d'utilisation et plus rapide. Elle n'est cependant utilisable qu'en mode 0 et le système de coordonnées est standard : (0,0) est le coin en haut à gauche et (159,199) le coin en bas à droite. La routine occupe les adresses de &7C92 à &7D0A incluses, le registre A contient la valeur de l'encre, B l'ordonnée du point, C l'abscisse. Le plot est validé par «CALL &7C92» ou une adresse de votre choix, puisque la routine est relogeable. Le test d'un point est également très utile. Faire « CALL &BBF0 » avec DE contenant l'abscisse X et HL l'ordonnée Y renverra dans A la valeur de l'encre au point indiqué. X et Y doivent être spécifiés comme ils le sont dans la fonction TEST du Basic. Cette routine est valable quel que soit le mode d'écran. Voyons maintenant comment scruter le clavier. Effectuer CALL &BB06 réalise une attente jusqu'à ce qu'une touche du clavier soit pressée. A contient en retour le code ASCII de la touche pressée. Vous pouvez également connaître à tout instant l'état du clavier, celui-ci étant virtuellement reproduit en mémoire. Chaque touche est représentée par un bit qui est à 1 quand la touche est appuyée. Les adresses &B4EB, &B4EC contiennent les touches de curseur et le pavé numérique à l'exception du « 4 ». Les adresses &B501 à &B508 contiennent toutes les touches du clavier principal ainsi que les joysticks. Un petit programme Basic vous permettra d'établir une table très rapidement. Passons maintenant à l'utilisation du générateur de son. La routine en langage machine équivalente à la commande SOUND se situe en &BCAA. L'appel de cette routine a pour effet de placer le programme sonore pointé par HL dans une queue. Pour bien comprendre le mode d'utilisation de cette routine, faites un SOUND de votre choix en Basic. Ensuite, appelez le programme en langage machine suivant : LD HL,&ADB2 CALL &BCAA RETCe qui donne en codes : 21, B2, AD, CD, AA, BC, C9. Que constatez-vous ?Vous entendez le même son que celui provoqué par le SOUND précédent. Analysons ce que fait la commande SOUND du Basic. Celle-ci écrit à l'adresse &ADB2 les paramètres spécifiés les uns à la suite des autres (ce qui constitue 9 octets). Ensuite, le Basic charge dans HL la valeur &ADB2 pour appeler la routine en &BCAA. Lorsque vous avez appelé la petite routine proposée en langage machine, vous avez effectué la deuxième étape, la première étant inutile puisque déjà faite par le SOUND du Basic. Il apparaît donc clairement que les programmes sonores peuvent être implantés à n'importe quel endroit de la mémoire utilisateur ; il suffira pour les appeler d'ini-tialiser HL correctement. Si vous désirez utiliser des enveloppes, vous pouvez les définir en Basic et y faire référence dans un programme sonore, ce qui est fait dans le programme « Les envahisseurs attaquent » (lignes 70 à 90 du programme Basic). A titre d'exemple, vous pouvez étudier les programmes sonores inclus dans le programme, qui génèrent tous les bruits que vous entendez lors du jeu. Voici leurs adresses respectives : &6360 tir du laser de la base &636A explosion de la base &6374 avance des envahisseurs &637E destruction d'un envahisseur &6388 déplacement de la soucoupe La structure d'un programme sonore par rapport à la commande SOUND G, H, I, J, K, L, M est la suivante : G | K | L | H | (2 octets) | ↑ | ↑ | ↑ | ↑ | | HL | +1 | +2 | +3 | | M | J | I | | (2 octets) | ↑ | ↑ | ↑ | | | +5 | +6 | +7 | | |
Vous connaissez donc maintenant le minimum nécessaire pour faire un jeu sur l'Amstrad. En attendant, amusez-vous bien avec « Les envahisseurs attaquent » et accrochez-vous, car c'est loin d'être facile... Structure du programme Basic Lignes 10-40 : réservation mémoire, chargement des codes, effacement des lignes inutiles. 70-90 : déclaration d'enveloppes auxquelles le langage machine fait référence pour les effets sonores. 120-290: entrée des paramètres de jeu, et transmission de ceux-ci en langage machine par POKE. 310-340: présentation des envahisseurs. 360 : initialisation et appel au langage machine. 370 : le langage machine envoie dans l'adresse 15F l'état du jeu. Cette ligne aiguille le Basic sur l'option correspondante. 380-410 : le tableau est fini, on fait descendre la vague d'un cran (15E) = (15E) +8 puis on rappelle le langage machine. 420-440 : la base est envahie, fin du jeu. 450-460 : la dernière base est détruite, fin du jeu. 470-520 : résultats : le score et le temps qu'a duré le jeu. 530-580 : menu final. 590 : sous-programme qui passe en mode 1 et affecte les encres. 600-620 : sous-programme qui passe en mode 0 et affecte les encres. 630 : sous-programme : attend la frappe d'un caractère au clavier, l'affiche à l'écran et en retourne la valeur dans la variable A. |
MS |