★ APPLICATIONS ★ PROGRAMMATION ★ SPRICREA : SPRITE CREATOR (AM-MAG) ★ |
Spricrea : Sprite Creator (AM-Mag) | Applications Programmation |
Création et gestion simplifiée de spritesVirtuose 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:
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 Les quatre adresses des sprites seront respectivement &9000, &9040, &9080 et &90C0 Effectuez la sauvegarde sous le nom « 4SPRITES » 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 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:
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
|