Visiter le site...


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''



Quand Elmar fait des siennes.

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.


MODE D'EMPLOI

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.
Le deuxième truc : nous nous servons des tableaux pour faire des calculs complexes, Comme nos routines vont accepter les coordonnées d'un sprite en X (0 - 63) et en Y (0 - 255), on doit les transférer en une adresse vidéo avant, Par exemple , avec cette formule :

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 à :

LD A,H
LD H,&A4
ADD A,(HL)
INC H
LD H,(H)
LD L,A

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 :
- On ne doit pas s'occuper de sauvegarder l'arrière-plan.
- Il faut seulement 50 % de mémoire.
- En changeant les couleurs, on change aussi la priorité des sprites.



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:
Programme 1 (DRAW.BAS): Création de la page écran en Mode 0.
>>> Fichier « TEST.scr » en &C000
Programme 2 (GENE.BAS): Programme de conversion « Test.scr » vers « Sprites.dat »
Programme 3: Créateur du RSX « SPRmCODE.BIN »
Programme 4 (DEMO.BAS): Fichier de Démonstration.




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 :

INK &X0000,COLFON0
INK &X0001,COLFON1
INK &X0010,COLFON2
INK &X0011,COLFON3

Si les bits 2 et 3 ne sont pas vides, la couleur du fond est supprimée :

INK & X01YY, COLSPR1
(&X0100,&X0101,&X0110,&X0111)

INK &X10YY, COLSPR2
(&Xl000,&Xl001.&Xl010,&X1011)

INK &X11YY, COLSPR3
(&Xl100,&X1101,&X1110,&X1111)

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)



Bon amusement...



Programme scanné en OCR, puis converti en fichiers CPC avec : CPCtoken et CPCscreen.
Fichiers texte et lien vers les outils de conversion dans le répertoire « RES ».

Magazine disponible sur http://download.abandonware.org

Tapé par XavSnap.