Sprite Creator Elevage De Lutins - Creation Et Gestion De Sprites
NOTICE / MANUAL
JPG (6)TXT (1)
NOTICE JPG n° 1
Taille réelle : 1200 * 1662 px = 353.43 Ko
NOTICE JPG n° 2
Taille réelle : 1200 * 1685 px = 309.59 Ko
NOTICE JPG n° 3
Taille réelle : 1200 * 1565 px = 348.3 Ko
NOTICE JPG n° 4
Taille réelle : 1200 * 1615 px = 415.12 Ko
NOTICE JPG n° 5
Taille réelle : 1200 * 1613 px = 402.7 Ko
NOTICE JPG n° 6
Taille réelle : 1200 * 1610 px = 454.03 Ko
NOTICE TEXTE n° 1 (8.84 Ko)
Sprite creator * Claude Le Moullec
--------------
Publie dans Am-mag 39 * Octobre 1988
Creation et gestion simplifiee de sprites
-----------------------------------------
Virtuose du Basic, vous etes passe maitre dans l'art d'utiliser les caracteres
redefinis. Briguant le stade superieur avec emploi de sprites, vous nourrissez
quelques craintes envers le langage machine et sa mise en oeuvre. Simplifions
les choses a maximum...
Nous allons, ensemble, appremdre a creer des sprites et a les animer a l'ecran.
Des lors aue grace a eux, la phase d'animation d'un jeu est rapide et haute en
couleurs, qu'importe que les autres parametres (decors, scores, vies, etc.)
soient geres par le Basic. Commencons comme il se doit, par la phase de
creation.
Creation de sprites
-------------------
Si vous possedez et maitrisez correctement un utilitaire de ce genre, sautez ce
chapitre et passez a la phase animation. Dans le cas contraire, voici un
programme (premier listing : SPRICREA) a la fois simple, performant, facilement
modifiable et comprehensible dans ses fonctions (largement explicitees dans le
programme) du fait qu'il est en Basic. Sachez tout de meme les choses suivantes:
- Si vous desirew modifier les couleurs, ici arbitrairement choisies, il suffit,
suivant le mode, d'editer les lignes 1340 ou 1600 et d'effectuer les
changements necessaires.
- Les sprites sont stockes a partie de l'adresse &9000 et il est possible de
laisser quelques octets de libres (fonction temoin) apres chaque sprite.
- Le logiciel est compatible sur tous les CPC et detecte 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 a
votre imagination en creant quatre sprites en mode 0, dans une matrice de 4
octets sur 16 lignes de pixels. Vous obtenew ainsi l'equivalent d'un carre
constitue de deux caracteres superposes en mode 0. Les deux premiers sprites
devront representer le meme personnage regardant vers la gauche. L'un debout,
pieds joints, l'autre ecartant les pieds afin que la superposition donne un
effet de marche saisissant.
Le troisieme sprite sera un element du decor - morceau de chaine ou de grille
(ajoure) - et le quatrieme, une matrice vide qui servira de cache pour effacer
les autres sprites lors des deplacements.
Les quatre adresses des sprites seront respectivement &9000,&9040,&9080 et
&90C0. Effectuez la sauvegarde sous le nom "4SPRITES".
Pour pallier a un eventuel manque d'imagination de certains d'entres vous (qui
ne craignent pas pour autant la saisie de datas), le lancement du second
listing genere un exemple de fichier (4SPRITES.BIN) pret a l'emploi. Passons
maintenant aux choses serieuses: l'animation de ces charmantes bestioles.
Animation de sprites
--------------------
Il est necessaire d'avoir prealablement a l'esprit quelques notions sur la
structure de la ram video (ou memoire ecran) de votre CPC. Celle-ci, composee
de 200 lignes de 80 octets chacune, est situee de &C000 a &FFFF. Le gros
probleme de cette memoire reside dans la facon dont les octets se suivent.
Si le 80eme octet est bien au bout de la ligne numero 1, le 81eme se trouve au
debut de la 9eme ligne et non pas de la 2eme ligne, comme on serait logiquement
en droit de l'attendre. C'est une constante bien problematique, que toutes les
routines d'affichage doivent prendre en compte. Il existe dans la rom de votre
CPC une routine systeme (CALL &BC26) qui restitue dans HL une adresse ecran
inferieure d'une ligne a l'adresse de depart.
Pour plus de rapidite, nous lui prefererons une routine personnelle effectuant
le meme travail. Il s'agit de "LIGNE+1" du listing desassemble (que Am-mag se
fera un plaisir d'envoyer aux interesses contre une enveloppe timbree) dont les
codes se trouvent dans le 3eme listing (a lancer pour la creation 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 en arriere plan.
- et affiche en XOR.
Affichage simple
----------------
Cette routine est la plus simple est aussi la plus rapide. Son defaut majeur,
elle ne tient pas compte du decor qui peut se trouver sous le sprite. On ne peut
donc l'utiliser que pour un jeu dont les sprites evoluent sur fond uni, de la
couleur du papier. Sa syntaxe est la suivante :
CALL &A00D,adecran,adspri
adecran : adresse ecran ou le sprite va s'afficher
adspri : adresse en ram du premier octet du sprite (meme syntaxe pour toutes
les autres routines d'affichage qui suivent).
La complexite de la ram video etant ce qu'elle est, j'utilise une fonction qui
transforme une coordonnee X,Y en adresse ecran :
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 sprite s'afficher au milieu de l'ecran. A noter que le 4 multiplicateur
en fin de fonction devient un 2 en mode 1 et rien du tout en mode 2.
Deplacement : des lors, pour deplacer un sprite, il suffit de l'effacer en
affichant a sa place une matrice vide (de la taille du sprite), puis de le
reafficher un peu plus loin en fonction du joystick. Cette routine est valable
en mode 1 comme en mode 0. Avant de l'utiliser, n'oubliez pas de la parametrer
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 prenier plan
-----------------------------------
Legerement plus complexe a utiliser, surtout au niveau des deplacements, cette
routine affiche le sprite sans alterer le decor. Pour ce faire, elle teste
chaque pixel de sprite et le compare avec un pixel a zero. Si c'est le cas,
c'est le pixel correspondant du decor qui va etre pris en compte. Chaque octet
va donc ainsi etre recompose, puis affiche a l'ecran. A noter qu'en mode 0, il
nous faut tester deux pixels et en mode 1, quatre pixels. D'ou la necessite de
deux routines differentes suivant le mode.
Deplacement : en AND, le deplacement s'effectue par trois routines : une pour
afficher le sprite, une pour sauvegarder le fond et une derniere pour le
restituer. Soit la marche a suivre :
1 - CALL &A073, fn po(x,y) : sauvegarde de la partie du decor sur laquelle le
sprite va s'afficher. Cette sauvegarde se realise ici en &A400, valeur
facile a modifier si necessaire.
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 position qui devient x1,y1.
4 - CALL &A093, fn po(x,y) : restitution de la partie decor precedemment
sauvegardee en &A400, ce qui efface le sprite.
5 - CALL &A073, fn po(x1,y1) : sauvegarde de la portion de decor situee a la
nouvelle position.
6 - CALL &A036, fn po(x1,y1),&9000 : affichage du sprite a la nouvelle
position.
7 - Bouclage en 3 sur un nouveau test joystick.
Affichage en AND et en arriere plan
-----------------------------------
Le principe est presque identique. Seule difference, le pixel ecran prioritaire
est conserve s'il est different de 0. Dans le cas contraire, c'est le pixel du
sprite qui est considere.
Deplacement : reprenez tel quel l'algorythme precedent, en remplacant dans la
routine d'affichage, &A036 par &A0B3.
Affichage en XOR
----------------
Cet affichage reprend un peu le meme principe que l'affichage simple, a la seule
difference que l'octet du sprite et celui de l'ecran subissent un XOR dont le
resultat est affiche. Si le sprite est sur un fond uni de la couleur papier, il
s'affiche tel quel, sinon, ses couleurs vont se melanger avec celles du decor
pour en former de nouvelles. Le meilleur exemple d'utilisation du mode XOR est
sans conteste le jeu Sorcery.
Deplacement : le plus simple de ceux que nous venons d'etudier puisqu'il suffit
d'afficher le sprite par CALL &A0F5, fn po(x,y),&9000 et de l'effacer en le
reaffichant exactement au meme endroit par CALL &A0F5, fn po(x,y),&9000.
Le mode XOR additionnant des bits identiques, remet tout a la position initiale
avant le premier affichage.
Voici donc, succintement explique, la creation et l'animation des sprites. Si
vous avez tout compris, vous en savez desormais assez pour agrementer vos
propres creations. Neanmoins, sachant qu'un bon exemple vaut mieux qu'un long
discours, je vous conseille de rentrer le quatrieme listing (programme de
demonstration) destine a eclaircir les points restes obscurs. Bon courage et
bonnes animations...
N.B : Si vous utilisew un lecteur de K7, sauvegardez les fichiers 4SPRITES.BIN
et ROUTINES.BIN "a la suite" du programme Basic de demonstration.