Amstrad CPC 464 – 6128 - 664.
Gestionnaire de sprites. De Elmar KRIEGER. (ELMSOFT) |
AMSTRAD Cent Pour Cent n°48. |
|
Pour
voir une petite démonstration, tapez RUN''DISC'' Elmar Krieger est l'auteur de plusieurs jeux récents sur CPC. Prehistorik 2 et SuperCauldron. ll est aussi l'auteur de Zap'T'Balls « Edition.avancée », qui utilise au mieux toutes les techniques de sprites possibles. Dans ce numéro d'Amstrad Cent Pour Cent nous vous proposons, en exclusivité, les routines de ce grand programmeur qui, pour vous faire plaisir, a préparé quelques RSX de derrière les fagots. Après cela, si vous n'êtes pas capable de créer des petits jeux sympa, c'est que vous n'êtes pas digne de la confiance que nous avons mise en vous. |
Quatre programmes vous sont proposés. Les trois premiers doivent être encodés, puis lancés pour générer trois fichiers. Seuls les sprites et les routines en langage machine seront utilisés (l'image écran de 17 Ko pourra être supprimée par la suite). Pour bien comprendre le principe de ces RSX, encodez le quatrième et dernier programme, et lancez-le tel quel. Vous comprendrez dès lors ce que veut dire une animation fluide sous Basic, C'est aussi ça la classe de nos lectures ! Pour les plus mordus d'entre vous, nous allons laisser la parole à notre ami qui va, sous forme de mini-cours, vous expliquer le principe de ses routines. Cela en vaut la peine. |
LAISSONS-LUI LA PAROLE. Pendant les neuf ans que nous avons passés avec notre cher CPC, d'innombrables articles ont été écrits au sujet des sprites. En 1993, il est donc devenu assez difficile de trouver quelque chose dont on n'a pas encore parlé. Cherchons chez nos ancêtres, chez Ghosts'n'Goblins, par exemple, nous trouvons : « la.simulation avec deux bitplanes .».
Une technique intéressante, même un peu géniale,
qu'on utilise normalement sur Pc et qui peut donner de bons
résultats sur nos CPC. Pour gagner de la vitesse, on va
passer l'écran à une largeur de 64 octets en X,
comme cela se fait dans 80 % des jeux sur CPC. La raison ? En
assembleur, on peut utiliser l'instruction INC L (qui est plus
rapide que INC HL) pour augmenter une adresse dans la
Ram-vidéo. ADR = &C000 + (Y \ 8)*64 + ( Y MOD 8 )*&800 + X
En assembleur, on utilise un tableau de 512 octets à &A400,
contenant une adresse vidéo pour chaque ligne en Y. Si le
registre HL contient les coordonnées X et Y, la formule se
réduit à : Passons maintenant à la « simulation deux bitplanes » elle-même. Dans un mode à 16 couleurs (comme le MODE 0), quatre bits sont nécessaires pour choisir une des16 couleurs. Le mot « bitplane » exprime que ces quatre bits ne se trouvent pas dans le même octet (comme sur CPC), mais sont partagés en quatre « bitplanes », L'idée centrale de notre technique : si on met l'arrière-plan dans,les bitplanes 0 et 1 (deux bits d'information, alors quatre couleurs comme le MODE 1 ) et les sprites dans les bitplanes 2 et 3 (encore quatre couleurs), on a réussi, On peut faire n'importe quoi avec les sprites dans 2 et 3 sans toucher le fond dans 0 et 1, Le seul point faible : on doit sacrifier une des quatre couleurs des sprites pour laisser le fond transparent. En MODE 0, il reste donc seulement sept couleurs. Mais honnêtement, l'aviez-vous remarqué dans Ghouls'n'Ghosts, Wonderboy ou Mission Genocide ?
D'autre part, il y a assez de points forts : |
EN AVANT, MARCHE ! Le programme n° 1 génère cinq sprites de démonstration, Si vous voulez dessiner des sprites vous-même, faites ça en MODE 0 avec les quatre premières couleurs de la palette (pour les sprites. ET le fond !). Puis, il faut mettre les sprites en mémoire dans une forme appropriée. C'est fait par le programme n° 2. Regardez ici pour obtenir toutes les informations. La taille des sprites est mise dans un tableau, on ne doit plus s'en occuper après. Dans les lignes DATA, vous devez mettre, pour chaque sprite qui se trouve sur l'écran que vous avez dessiné, son numéro (0 - 127), sa position dans la Ram-vídéo (&C000-&FFFF, sa largeur (un multiple de quatre) et sa hauteur (en octets). Pour les sprites, j'ai réservé l'espace mémoire de &6000 à &97FF, c'est sans doute assez, Les données sont sauvegardées dans le fichier « SPRITES.DAT ». Le programme n° 4 génére toutes les routines en assembleur et les tableaux de calcul pour décompacter et afficher les données.
PROGRAMMES SUR LA DISQUETTE:
|
LES COMMANDES RSX Voilà une explication des commandes RSX (notez que pour les claviers AZERTY vous devez remplacer le « | » qui précède un RSX par « ù »), Chargez ''SPRMCODE. BIN'' à l'adresse &9800, et initialisez avec un CALL &9800, Les instructions sont prêtes. |INIT : initialise l'écran (32x32 caractères). |PUTBKG,A,X,Y : imprime sprite n° A à la position X,Y dans les couleurs du fond (PUT BACKGROUND). |PUTSPR,A,R,X,Y : imprime sprite n° A à la position X,Y en direction R [0 - normal, 1 – transparent ] (PUT SPRITE). |PUTSWF,A,R,X,Y : comme l'instruction |PUTSPR, mais attend un « Frame Fly » avant (PUT SPRITE AND WAIT FOR FRAME FLY). |REMSPR,A,X,Y : enlève sprite n° A (REMOVE SPRITE). Autour de chaque sprite, un cadre d'un octet en X et de quatre octets en Y est effacé. Pour simuler un mouvement, changez les coordonnées et imprimez le sprite encore une fois. Si le mouvement est plus grand que le cadre autour, des parties du premier sprite restent visibles, Maintenant, les couleurs. Il y a quatre couleurs au fond. On les appelle COLFON0 à COLFON3, Quant aux trois couleurs des sprites, on les nomme COLSPR1 à COLSPR3. Chaque variable contient une valeur de 0 à 26. On regarde maintenant le cas où les sprites se trouvent devant (la deuxième possibilité doit être trouvée par vous-même, la ligne 360 de la démo peut vous aider...).
Donc, si les bits 2 et 3 sont à zéro, il n'y a pas
de sprite et on peut voir la couleur du fond choisie par les bits
1 et 0. En Basic, il faut écrire :
Si les bits 2 et 3 ne sont pas vides, la couleur du fond est
supprimée : Une démonstration de toutes les instructions se trouve dans le programme 4 (« DEMO.BAS » ou DISC.BAS pour le chargement direct). Elmar Krieger (Elmsoft)
|
Programme scanné
en OCR, puis converti en fichiers CPC avec : CPCtoken et
CPCscreen. Magazine disponible sur http://download.abandonware.org |
Tapé par XavSnap. |