ASMtrad CPC

Apprenez l'assembleur Z80

Technique 2 bitplans.

La technique d'affichage sur plusieurs bitplans consiste à séparer dans l'octet 2 plans différents.
Ainsi, un plan est utilisé pour le décors tandis que l'autre est utilisé pour les sprites.

L’intérêt de ce genre de technique est de pouvoir modifier un plan sans toucher à l'autre.
Ainsi, pas besoin de faire du masquage, et, effacer un sprite du décors se fait sans toucher à ce même décors.

Cette technique fût utilisée dans plusieurs jeux, comme 3D Munchies; ghosts'N Globlins; Wonderboy ou plus récemment le fantastique Relentless.

Cette technique n'a pas que des avantages, puisqu'elle ne vous permettra d'utiliser que 3 couleurs pour les sprites et 4 pour le décors.

Étant donné la limitation des modes graphiques du cpc, cette technique sera réservée au mode 0.

La technique:

La technique consiste à séparer les bits d'un pixel.

Admettons (purement théorique puisque dans cet exemple je n'entrelace pas les bits comme dans la réalité) un pixel codé sur 4 bits.
Ces 4 bits donnent l'encre de la façon suivante:

%0000 = Encre 0
%0001 = Encre 1
%0010 = Encre 2
%0011 = Encre 3
%0100 = Encre 4
%0101 = Encre 5
%0110 = Encre 6
%0111 = Encre 7
%1000 = Encre 8
%1001 = Encre 9
%1010 = Encre 10
%1011 = Encre 11
%1100 = Encre 12
%1101 = Encre 13
%1110 = Encre 14
%1111 = Encre 15

Jusque la rien de compliqué.

Maintenant, imaginons que les bits 0 et 1 seront reservés au décors.

Nous obtenons donc comme possibilités:

%0000 = Encre 0
%0001 = Encre 1
%0010 = Encre 2
%0011 = Encre 3

Nous avons bien 4 couleurs, et remarquons que les bits 2 et 3 ne sont bien entendu pas modifiés.
L'idée est justement de mettre sur ces 2 autres bits les sprites.

Ainsi pour les afficher, on ne modifiera que les bits 2 et 3 sans toucher au décors (bits 0 et 1), et pour les effacer, il suffira de vider ces même bits.

Mais la contrainte des couleurs devient presque évidente.
Si nous utilisons par exemple les bits 0 et 1 pour y mettre nos couleurs, tandis que le sprite a un pixel sur les bits 2 et 3 = %11, Les possibilités sont donc:

%1100 = Encre 12
%1101 = Encre 13
%1110 = Encre 14
%1111 = Encre 15

On remarque donc que, bien évidement, modifier le sprite ou modifier le fond va modifier l'encre.

L'astuce c'est justement de donner la même couleur au 4 encres !!!

Reprenons notre exemple: Je veux que mon sprite passe toujours devant le décors.
Pour cela il faudra que pour les 4 possibilités d'encre de décors (bits 0 et 1) on obtienne la même couleur.

Ainsi en mettant les encre 12 ; 13 ; 14 ; 15 en rouge, j'aurai forcément un pixel de couleur rouge.

Et on fera la même chose pour les autres possibilités.

%0100 = Encre 4 = Blanc
%0101 = Encre 5 = Blanc
%0110 = Encre 6 = Blanc
%0111 = Encre 7 = Blanc
%1000 = Encre 8 = Orange
%1001 = Encre 9 = Orange
%1010 = Encre 10 = Orange
%1011 = Encre 11 = Orange

Avec cette solution, les pixels des sprites seront toujours prioritaires sur le fond.

Mais l'astuce ne s’arrête pas là !!!

Juste en changeant les couleurs de nos fameuses encre, vous pourrez au contraire rendre les pixels de décors prioritaires et donc faire passer votre sprite derrière le décors !!!

Notez aussi que, pour votre sprite, l'utilisation de l'encre 0 vous servira de masque puisque ne modifiera rien.

Maintenant, afin d'appliquer tout cela, n'oubliez pas que les bits d'encre en mode 0 sont entrelacés.
Ceci ne sera pas un problème, puisqu'il vous suffira d'utiliser les encres de cette façon:

                Fond: Encres 0;1;2;3.
                
                Sprite: encres (1) à mettre de la même couleur pour passer devant le décors: encre 4,5,6,7.
                        encres (2) à mettre de la même couleur pour passer devant le décors: encre 8,9,10,11.
                        encres (3) à mettre de la même couleur pour passer devant le décors: encre 12,13,14,15.