CODING ★ QUAND ELMAR FAIT DES SIENNES ★

ASM 48: Quand Elmar fait des siennes
Elmar Krieger est l'auteur de plusieurs jeux récents sur CPC. Prehistorik 2 et Super Cauldron. Il est aussi l'auteur de Zap'T'Balls « édition 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 1 7 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 lecteurs !

Pour les plus mordus d'entre vous, nous allons laisser la parole à notre ami qui va, sous forme de minicours, 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 presser 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,(HL)
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 des 16 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-vidé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.

LES COMMANDES RSX

Voilà une explication des commandes RSX (notez que pour les claviers AZERTY vous devez remplacer le « I » 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 (32*32 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 (&X1000,&X1001,&X1010,&X1011 )
INK &X11YY,COLSPR3 (&X1100,&X1101,&X1110,&X1111)

Une démonstration de toutes les instructions se trouve dans le programme 4.

UNE OFFRE EXCEPTIONNELLE

Nous vous signalions qu'Elmar était l'auteur du fameux ZapTBalls. Si vous désirez recevoir la démo jouable de ce jeu (10 tableaux !), envoyez une disquette et une enveloppe auto-adressée à : Olivier Martinerie, 9, avenue des Tilleuls, 92290 Châtenay-Malabry. Le jeu complet quant à lui, est au prix de 169 F, ou 189 F avec un T-shirt (large ou extra-large). Règlement par chèque à la même adresse. Notez enfin que le jeu fonctionne sur CPC 6128 ou 464 avec extension 64 Ko. Pour le 6128+, le mode deux joueurs n'est pas disponible. Quoi qu'il en soit, si vous désirez avoir plus d'informations, appelez le correspondant d'Elmar en France (Olivier Martinerie) au (1) 46-30-54-54 ; Fax : (1) 46-32-33-68 ; ou écrivez-lui (voir l'adresse plus haut).

Elmar Krieger (Elmsoft), A100% n°48, juillet 93, p18-19

★ ANNÉE: 1993
★ CONFIG: ???
★ LANGAGE: ???
★ LiCENCE: ???
★ AUTEUR: Elmar Krieger

★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» ELMSOFT-RSX  sprites  toolkit  (with  gng  demo)DATE: 2013-08-24
DL: 372
TYPE: ZIP
SiZE: 15Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Bidouilles ACPC n°34 - Banques de mémoire
» Coding » Bidouilles ACPC n°47 - Les vecteurs system (5/6)
» Coding » Bidouilles ACPC n°14 - Les secrets du GATE ARRAY (1/2)
» Coding » Assembleur ACPC n°23 - Il cours, il cours l'assembleur
» Coding » Bidouilles ACPC n°42 - La decompression
» Coding » Bidouilles ACPC n°46 - Les vecteurs system (4/6)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 201 millisecondes et consultée 2150 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.