Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AMOS - Banques de sprites et d'icônes
(Article écrit par François Lionet et extrait d'Amiga News Tech - mai 1991)
|
|
Nous allons maintenant commencer à décrire le format des banques de mémoire AMOS : en premier lieu, les banques
de sprites et d'icônes, dans la mémoire et sous la forme de fichier.
La banque de sprites, qui porte le numéro 1
contient dans une même zone de mémoire les définitions des sprites et des BOB. Dans ce qui va suivre,
je parlerais donc indifféremment de sprites et de BOB, ce qui me simplifiera d'autant la vie.
a structure de la banque en mémoire est un peu particulière : elle n'est pas en un seul bloc,
mais plutôt répartie dans tous les espaces libres disponibles.
La fonction "=Start(1)" ramène l'adresse de l'en-tête de la banque de sprites. Celui-ci
contient les pointeurs sur les dessins proprement dits, ainsi que la palette de la banque.
Voici la structure de la banque sous la forme d'un listing assembleur :
- (1) L'adresse du dessin peut être nulle. Dans ce cas, il n'y a évidemment pas d'adresse de
masque. Une adresse nulle est obtenue avec l'instruction "DELETE SPRITE", en éliminant un
sprite au beau milieu de la banque.
- (2) L'adresse du masque peut prendre valeurs différentes :
- 0 : il faut fabriquer un masque. Le masque sera calculé lors du premier affichage du BOB.
- -1 : l'instruction "NO MASK" a été appliquée à ce BOB.
- >0 : pointeur sur le masque.
Chaque BOB ou sprite est un petit morceau d'écran, contenant les données du dessin,
plan par plan (les anglais appellent ça les "bitplanes"). Les plans mémoire se
suivent, dans l'ordre croissant.
Les Flags_Retournements sont produits à partir de la version 1.21 d'AMOS. Le bit 15
correspond à un retournement en X, le bit 14, à un retournement en Y. Le point
chaud en X n'est calculé que sur 14 bits signés.
Le masque, lorsqu'il est défini, contient un seul plan mémoire. Les bits du masque à
0 sont transparents (on voit le décor "au travers"), les bits à 1 sont opaques
(on voit le sprite).
Calculer son propre masque
Connaissant la structure de la banque de sprites, il est tout à fait possible de calculer
soi-même le masque d'un BOB, et d'obtenir ainsi des effets très intéressants. AMOS
calcule le masque en effectuant un "ou logique" entre tous les plans mémoire de l'image.
Le masque obtenu rend la couleur 0 transparente. On peut, connaissant la structure de la
banque, calculer différemment le masque, et rendre d'autres couleurs transparentes.
Encore plus intéressant, l'instruction "SETBOB" permet de choisir la relation logique entre
DECOR, IMAGE et MASQUE lors de l'affichage d'un BOB. En passant de longues heures à choisir
les couleurs et les paramètres de calcul (MINTERMS pour les initiés), on peut arriver à des
effets époustouflants... Bon, ce sera pour une prochaine fois, je suis déjà en retard pour
l'article que vous lisez et j'ai un compilateur à terminer !
Le programme assembleur qui suit est une petite routine (262 octets à peine) faisant le calcul
d'un masque complexe. Elle est conçue pour être chargée dans une banque mémoire, et constitue
un bon exemple d'appel de routine en banque. Pour l'utiliser, assemblez le programme, sauvez
le code produit sous le nom de "Masque" et tapez, en mode direct dans AMOS :
La routine se trouve maintenant dans la banque numéro 15. Elle sera sauvée avec votre programme
AMOS, il n'est plus besoin de la recharger.
NB : une routine chargée ainsi doit être totalement relogeable et ne comporter qu'un
seul segment. Vous devez donc faire du code relatif-PC. Une démonstration AMOS de cette routine
suit le programme langage machine. Elle propose une procédure :
Sachant que :
- "numéro" est le numéro du sprite dans la banque.
- "M1" et "M2" sont les parties haute et basse (respectivement) des couleurs transparentes.
La couleur correspondante à chaque bit mis à 1 sera transparente.
Exemples :
- M1=0 et M2=16 : la couleur 4 est transparente.
- M1=$00000001 et M2=$80000000 : les couleurs 31 et 32 sont transparentes.
Rien ne vous empêche d'utiliser les informations des AMT précédents pour fabriquer une
nouvelle extension à l'AMOS, et rajouter de nouvelles instructions...
NB : la détection de collision utilise le masque du BOB pour déterminer les croisements
entre BOB. Elle n'est valide qu'avec le masque par défaut, et pas avec ceux produits par
cette routine.
NB : le masque n'a évidemment aucun effet sur l'affichage des sprites.
La banque d'icônes
Le format d'une banque d'icônes (banque numéro 2) en mémoire est exactement le
même que celui d'une banque de sprite, la seule différence tenant dans l'en-tête, qui est :
Vous pouvez donc appliquer le calcul des masques aux icônes !
Format d'une banque sur disquette
Voici le format du fichier obtenu par la sauvegarde d'une banque de sprites (SAVE "Banque.Abk",1) :
AMOS ne sauve donc pas les masques, pour gagner en rapidité. Un sprite vide est marque par
"dc.w 0,0,0,0,0", et pas de plan d'image. Les sprites sont toujours retournés dans leur
direction "originale" avant d'être sauvés. Les drapeaux du point chaud en X sont donc
toujours égaux à zéro (pour rester compatible avec les premières versions d'AMOS). Une
banque d'icône ne diffère que par son code de reconnaissance, qui est ici :
Voili voilà pour ce mois ! La prochaine fois, quelque chose de beaucoup plus compliqué :
la banque de musique. Nous verrons comment mettre plusieurs musiques dans la même banque.
Listing 1
Listing 2
|