COLOR

<fieldset class="formatter-container formatter-fieldset" style=""><legend>COLOR</legend><div class="formatter-content">Instruction qui permet de modifier les couleurs à l'écran, avec des variantes pour l'affichage, pour la modification de la palette de couleurs ou pour les sprites.

Affichage :



Syntaxe
COLOR [couleur d'écriture][, couleur de fond][, couleur de bordure]


Les crochets indiquent un contenu optionnel, et bien qu'un COLOR seul n'ait pas beaucoup d'effet ni d'intérêt a priori, on verra plus bas que ce n'est pas forcément le cas !

Les nombres correspondant aux couleurs sont à choisir en fonction du mode d'affichage dans lequel on se trouve et d'une éventuelle modification de palette.

Les codes de couleur par défaut, hormis le mode graphique SCREEN 8, sont les suivants :

Code

Couleur

Intensité R

Intensité V

Intensité B

Code

Couleur

Intensité R

Intensité V

Intensité B

0

transparent

0

0

0

8

rouge

7

1

1

1

noir

0

0

0

9

rouge clair

7

3

3

2

vert

1

6

1

10

jaune foncé

6

6

1

3

vert clair

3

7

3

11

jaune clair

6

6

4

4

bleu foncé

1

1

7

12

vert foncé

1

4

1

5

bleu clair

2

3

7

13

magenta

6

2

5

6

rouge foncé

5

1

1

14

gris

5

5

5

7

bleu ciel

2

6

7

15

blanc

7

7

7



En SCREEN 8, le code couleur est déterminé par la formule suivante :

couleur = 4*intensité rouge + 32*intensité vert + intensité bleu, avec les intensités rouge et bleu pouvant varier de 0 à 7, et l'intensité de bleu pouvant varier de 0 à 3. Ce qui nous donne 256 couleurs au choix.
Pour avoir par exemple le bleu clair "traditionnel", on aura 4*2 + 32*3 + 7 = 8 + 96 +7 = 111.

Cas particulier du SCREEN 6

Le SCREEN 6 n'utilise que les couleurs allant de 0 à 3, mais possède une propriété particulière en ce qui concerne la couleur de bordure : elle peut être hachurée verticalement, en utilisant les codes couleurs allant de 16 à 31. La hachure ne peut comporter que des couleurs utilisables dans ce mode, soit de 0 à 3. Chaque code couleur de 16 à 31 donnera donc des hachures faites à base de combinaisons des couleurs allant de 0 à 3, suivant ce tableau :


Code

Combinaison

Code

Combinaison

16

0-0

24

2-0

17

0-1

25

2-1

18

0-2

26

2-2

19

0-3

27

2-3

20

1-0

28

3-0

21

1-1

29

3-1

22

1-2

30

3-2

23

1-3

25

3-3



Exemple
10 SCREEN 6
20 COLOR 1,1,23
30 GOTO 30



Résultat en images



Modification de la palette :



Syntaxe
COLOR=(code couleur, intensité en rouge, intensité en vert, intensité en bleu)
COLOR[=NEW]
COLOR=RESTORE


Cette fois on modifie les composantes même du code couleur original. Les intensités peuvent ici varier de 0 à 7 chacune.

La syntaxe COLOR=NEW permet ici de reprendre les réglages de la palette par défaut.

Quant à COLOR=RESTORE, son emploi se fait lors du chargement via BLOAD"...", S. Cette commande restaurera les couleurs telles qu'elles étaient lors de la sauvegarde, dans les tables de la VRAM afférentes.

Exemple
On souhaite modifier la couleur grise de code 14, en un gris plus foncé.
Il suffit de taper :
COLOR=(14,3,3,3)

La couleur 14 sera désormais un gris foncé.

Taper ensuite COLOR ou COLOR=NEW aura pour effet de remettre le gris à ses composantes initiales


Couleur des sprites :



Syntaxe
COLOR=(code couleur, intensité en rouge, intensité en vert, intensité en bleu)
COLOR SPRITE (numéro de sprite) = code couleur
COLOR SPRITE$ (numéro de sprite) = "chaîne de caractères"


La première syntaxe sert à déterminer la couleur du sprite dont on donne le numéro, et ce pour les modes graphiques 4, 5, 6, 7 et 8.

Deux variantes sont alors possibles :
- En ajoutant 32 au code couleur, l'instruction ON [lmink=sprite]SPRITE[/link] GOSUB n'est plus prise en compte pour le sprite en question.
- En ajoutant 64 au code couleur, la collision de sprites est également annulée, mais aussi la priorité à l'écran (plus le numéro de plan du sprite est petit, plus il est prioritaire sur les autres) et enfin, en cas de chevauchement avec un autre, une opération logique OR est effectuée entre les codes couleur des 2 sprites pour déterminer la couleur à afficher.

Exemple
10 SCREEN 5
20 A$=""
30 FOR I = 1 TO 8
40 READ A : A$=A$ + CHR$(A)
50 NEXT I
60 SPRITE$(0)=A$
70 COLOR SPRITE(0)=6
80 PUT SPRITE 0,(100,100),,0
90 DATA 255,99,99,255,255,99,99,99,255
100 GOTO 100


Résultat
Un sprite de couleur rouge sera affiché au point de coordonnées 100,100. Sa couleur lui est donnée par la ligne 70 du programme.


La deuxième syntaxe sert elle à déterminer la couleur d'une ligne d'un sprite pour les modes graphiques 4, 5, 6, 7 et 8. Pour une utilisation plus simple et plus explicite, il est conseillé de l'utiliser avec les codes ASCII et la fonction CHR$ en remplacement de la chaîne de caractères, ou d'une variable chaîne ayant été définie de cette manière.
Par exemple, CHR$(4) signifiera qu'on souhaite une couleur bleue pour la ligne de sprite qu'on traite.
Pour un sprite, il faudra donc une ligne de type :
COLOR SPRITE$(numéro de sprite) = CHR$(code couleur ligne 1) + CHR$(code couleur ligne 2) + ...

De la même façon que pour la syntaxe précédente, le fait d'ajouter certains nombres au code couleur aura des effets particuliers. Les 2 variantes pour COLOR SPRITE sont valables également pour COLOR SPRITE$, à ceci près que ce n'est plus le sprite entier qui est concerné, mais la ligne correspondante.
Il faut ajouter une autre variante, celle où on ajoute 128 au code couleur. Cette fois, cet ajout aura comme effet de décaler de 32 pixels vers la gauche la ligne de sprite traitée. Cette possibilité s'avère très utile pour les problèmes d'apparition de sprites depuis le côté gauche de l'écran.


Exemple
10 SCREEN 5
20 A$=""
30 FOR I = 1 TO 8
40 READ A : A$=A$ + CHR$(A)
50 NEXT I
60 SPRITE$(0)=A$
70 B$=CHR$(2) + CHR$(3) +CHR$(4) + CHR$(5) +CHR$(6) + CHR$(7) +CHR$(8) + CHR$(9)
80 COLOR SPRITE$(0)=B$
90 PUT SPRITE 0,(100,100),,0
100 DATA 255,99,99,255,255,99,99,99,255
110 GOTO 110


Résultat
Un sprite rayé de multiples couleurs sera affiché au point de coordonnées 100,100. Sa couleur lui est donnée par la ligne 80 du programme.


</div></fieldset>