APPLICATIONSPROGRAMMATION ★ SPRICREA : SPRITE CREATOR (AM-MAG) ★

Spricrea : Sprite Creator (AM-Mag)Applications Programmation
Création et gestion simplifiée de sprites

Virtuose du Basic, vous êtes passé maître dans l'art d'utiliser les caractères redéfinis. Briguant le stade supérieur avec emploi de sprites, vous nourrissez quelques craintes envers le langage machine et sa mise en œuvre. Simplifions les choses au maximum...

Nous allons, ensemble, apprendre à créer des sprites et à les animer à l'écran. Dès lors que grâce à eux, la phase danimâtion d'un jeu est rapide et haute en couleurs, qu'importe que les autres paramètres (décors, scores, vies,etc.) soient gérés par le Basic Commençons comme il se doit, par la phase de création.

Création de sprites

Si vous possédez et maîtrisez correctement un utilitaire de ce genre, sautez ce chapitre et passez à la phase animation Dans le cas contraire, voici un programme (premier listing : SPRICREA) à la fois simple, performant, facilement modifiable et compréhensible dans ses fonctions (largement explicitées dans le programme) du fait qu'il est en Basic. Sachez tout de même les choses suivantes:

  • si vous désirez modifier les couleurs, ici arbitrairement choisies,- il suffit, suivant le mode, d'éditer les lignes 1340 ou 1600 et d'effectuer les changements nécessaires;
  • les sprites sont stockés à partir de l'adresse &9000 et il est possible de laisser quelques octets de libres (fonction témoin) après chaque sprite;
  • le logiciel est compatible sur tous les CPC et détecte son environnement cassette ou disquette. Pour ce qui est du support de sauvegarde, le choix est possible.

Ladite sauvegarde s'effectue en binaire Maintenant, comment utiliser notre fameux utilitaire? Donnez libre cours à votre imagination en créant quatre sprites en mode 0, dans une matrice de 4 octets sur 16 iignes de pixels Vous obtenez ainsi l'équivalent d'un carré constitué de deux caractères texte, superposés en mode 0. Les deux premiers sprites devront représenter le même personnage, regardant vers la gauche. L'un debout, pieds joints, l'autre écartant les
pieds afin que la superposition donne un effet de marche saisissant.
Le troisième sprite sera un élément du décor – morceau de chaîne ou de grille (ajouré) – et le quatrième, une matrice vide qui servira de cache pour effacer les autres sprites lors des déplacements.

Les quatre adresses des sprites seront respectivement &9000, &9040, &9080 et &90C0 Effectuez la sauvegarde sous le nom « 4SPRITES »
Pour pallier à un éventuel manque d'imagination de certains d'entre vous (qui ne craignent pas pour autant la saisie de datas), le lancement du second listing génère un exemple de fichier (4SPRITES.BIN) prêt à l'emploi. Passons maintenant aux choses sérieuses i animation de ces charmantes bestioles.

Animation de sprites

Il est nécessaire d'avoir préalablement à l'esprit, quelques notions sur la structure de la RAM vidéo (ou mémoire écran) de votre CPC. Celle-ci, composée de 200 lignes de 80 octets chacune, est située de &C000 à &FFFF Le gros problème de :ette mémoire réside dans la façon dont les octets se suivent. Si le 80e octet est bien au bout de la ligne n°1, le 81e se trouve au début de la 9e, et non pas de la 2e ligne comme on serait logiquement en droit de l'attendre. C'est une constante, bien problématique, que toutes les routines d'affichage doivent prendre en compte. Il existe dans la ROM de votre CPC, une routine système (CALL &BC26), qui restitue dans HL une adresse écran inférieure d une ligne à l'adresse de départ Pour plus de rapidité, nous lui préférerons une routine personnelle effectuant le même travail II s'agit de « LIGNE + 1 » du listing désassemblé (que Am Mag se fera un plaisir d'envoyer aux intéressés contre une enveloppe timbrée) dont les codes figurent dans le troisième listing (à lancer pour la création du fichier binaire ROUTINE BIN) et elle commence en &A000. Il existe plusieurs techniques d'affichage, contentons-nous des quatre principales:

  • affichage simple,
  • affichage en AND et en 1er plan,
  • affichage en AND et er arrière plan,
  • et affichage en XOR

Affichage simple

Cette routine est la plus simple et aussi la plus rapide Son défaut majeur, elle ne tient pas compte du décor qui peut se trouver sous le sprite On ne peut donc l'utiliser que pour un jeu dont les sprites évoluent sur fond uni, de la couleur du papier. Sa syntaxe est la suivante:

CALL &A000,ADECRAN,ADSPRIT,ADECRAN: adresse écran où le sprite va s'afficher.

ADSPRI: adresse en RAM du premier octet du sprite (même syntaxe pour toutes les autres routines d'affichage qui suivent)

La complexité de la RAM vidéo étant ce qu'elle est, j'utilise une fonction qui transforme une coordonnée X,Y en adresse écran

DEF FN po(X,Y) = &C000 + (Y-1 ) * 80 + (X-1 ) * 4

Il suffira par la suite de faire :

CALL &A00D,FN PO(11,12) , &9000

Pour voir le premier sprlte s afficher au milieu de l'écran. A noter que le 4 multiplicateur en fin de fonction, devient un 2 en mode 1 et rien du tout en mode 2.

Déplacement: dès lors, pour déplacer un sprite, il suffit de l'effacer en affichant à sa place une matrice vide (de la taille du sprite), puis de le réafficher un peu plus loin en fonction du test joystick Cette routine est valable en mode 1 comme en mode 0 Avant de l'utiliser, n'oubliez pas de la paramétrer en fonction de la taille du sprite. En &A01A, le nombre de lignes de pixels et en &A022, le nombre d octets par ligne Cette remarque est valable pour les autres routines. Seules changent les adresses.

Affichage en AND et en premier plan

Légèrement plus complexe à utiliser, surtout au niveau des déplacements, cette routine affiche le sprite sans altérer le décor. Pour ce faire, elle teste chaque pixel du sprite et le compare avec un pixel à zéro. Si c'est le cas, c'est le pixel correspondant du décor qui va être pris en compte. Chaque octet va donc ainsi être recomposé, puis affiché à l'écran A noter qu'en mode 0. il nous faut tester deux pixels et en mode 1. quatre pixels. D'où la nécessité de deux routines différentes suivant le mode. Déplacement: en AND. le déplacement s'effectue par trois routines : une pour afficher le sprite. une pour sauvegarder le fond et une dernière pour le restituer Soit la marche à suivre:

  1. CALL &A073,FN PO(X,Y): sauvegarde de la partie du décor sur laquelle le sprite va s'afficher. Cette sauvegarde se réalise ici en &A400, valeur facile à modifier si nécessaire.
  2. CALL &A036,FN PO(X,Y), &9000: affichage du sprite en AND et en premier plan.
  3. Test du joystick et calcul de la nouvelle posilion qui devient X1,Y1
  4. CALL &A093,FN PO(X,Y): restitution de la partie décor précédemment sauvegardée en &A400, ce qui efface le sprite.
  5. CALL &A073.FN PO(X1,Y1): sauvegarde de la portion de décor située à la nouvelle position.
  6. CALL &A036,FN PO(X1,Y1), &9000: affichage du sprite à la nouvelle position.
  7. Bouclage en « 3 » sur un nouveau test joystick.

Affichage en AND et en arrière plan

Le principe est presque identique. Seule différence, le pixel écran prioritaire, est conservé s'il est différent de 0, Dans le cas contraire, c'est le pixel du sprite qui est considéré. Déplacement: reprenez tel quel l'algorythme précédent en remplaçant dans la routine d'affichage, &A036 par &A0B3.

Affichage en XOR

Cet affichage reprend un peu le même principe que l'affichage simple, à la seule différence que l'octet du sprite et celui de l'écran subissent un XOR dont le résultat est affiché. Si le sprite est sur un fond uni de la couleur papier, il s'affiche tel quel, sinon, ses couleurs vont se mélanger avec celles du décor pour en former de nouvelles. Le meilleur exemple d'utilisation du mode XOR est sans contexte le jeu Sorcery. Déplacement: le plus simple de ceux que nous venons d'étudier puisqu'il suffit d afficher le sprite par:

CALL &A0F5,FN PO(X,Y), &9000

et de l'effacer en le réaffichant exactement au même endroit par:

CALL &A0F5,FN PO(X,Y), &9000

Le mode XOR additionnant des bits identiques, remet tout à la position initiale avant le premier affichage.

Voici donc, succinctement expliqué, la création et l'animation des sprites. Si vous avez .tout compris, vous en savez désormais assez pour agrémenter vos propres créalions. Néanmoins, sachant qu un bon exemple vaut mieux qu'un long discours, je vous conseille de rentrer le quatrième listing (programme de démonstration), destiné à éclaircir les points restés obscurs. Bon courage et bonnes animations. .

N. B. Si vous utilisez un lecteur K7, sauvegardez les fichiers 4SPRITES.BIN et ROUTINE.BIN « à la suite » du programme basic de démonstration

AMMAG n°39

★ EDITEUR: AM-Mag
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: CLAUDE LE MOULLEC

 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Sprite  Creator    (AM-MAG)    FRENCHDATE: 2020-04-22
DL: 271
TYPE: ZIP
SiZE: 13Ko
NOTE: Uploaded by hERMOL ; 40 Cyls
.HFE: Χ

» Sprite  Creator    (AM-MAG)    LISTING    FRENCHDATE: 2020-05-28
DL: 265
TYPE: PDF
SiZE: 2303Ko
NOTE: 4 pages/PDFlib v1.6

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

Lien(s):
» Applications » Sprite Generator
» Applications » Sprite Handler/Sprite Definer (CPC Computing)
» Applications » Listeur de sprites
» Applications » Sprites Logiciels - Budget Familial
» Applications » Sprites Logiciels - Carnet d'Adresses
» Applications » Gestion de Fichiers (Sprites Logiciels)
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
Page créée en 066 millisecondes et consultée 2040 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.