[TUTO] [IntyBASIC] Les tiles
2 participants
Page 1 sur 1
[TUTO] [IntyBASIC] Les tiles
Hey, j'étais pas spécialement inspiré par l'idée de rédiger un nouveau tutoriel à propos d'IntyBASIC, mais en voyant le fake screenshot de F.L, je me suis dit que ça valait peut-être la peine d'y passer un peu de temps afin qu'il puisse avoir une vision plus précise de ce qu'il est possible de faire sur Intellivision.
Hop, c'est parti ! Bon on ne va pas repartir de zéro, donc ouvrez dans votre éditeur de code le fichier HelloWorld.bas que vous avez créé lors de la leçon précédente.
Plus besoin de dire "bonjour", alors vous pouvez supprimer la ligne:
Vous devez maintenant avoir devant vous ces trois lignes:
Avant d'aller plus loin, il me faut vous donner quelques informations importantes:
L'Intellivision affiche une image en 16 couleurs, 60 fps, dans une résolution de 160*96. En vérité, il est possible d'afficher les sprites dans une résolution verticale supérieure, mais pour l'instant, "vvef".
La console de Mattel dispose, à ma connaissance de trois modes d'affichage. Comme vous débutez et que je vous imagine un peu fainéant, je vais vous présenter le mode qui siérait, a priori, le mieux à une adaptation de Barbarian: le mode Foreground/Background.
Pour faire simple, on pourrait dire que ce mode permet d'afficher des tiles en 2 couleurs. Son gros défaut est de couper l'accès à une partie des données incluses dans la GROM de la console; par exemple, vous ne pourrez plus afficher de lettres minuscules. Mais pour l'instant "vvef". :3
Pour choisir le mode Foreground/Background, il suffit d'écrire cette ligne:
Il est pas nécessaire qu'elle soit tout en haut de votre page de code, mais il faut quand même qu'elle soit située avant l'affichage de votre première tile, ou de votre premier sprite. C'est logique mais sait-on jamais. :3
Maintenant, il vous faut une tile à afficher. En voici une:
Faites-en un copier/coller à la fin de votre code, après la boucle "InfiniteLoop"
"tile_herbe:" est comme une étiquette qui va vous permettre de faire référence à cette tile.
Ensuite, il y a huit lignes; chacune comprend le mot BITMAP suivi de huit points/dièses coincés entre deux guillemets.
Chaque dièse représente un pixel de la couleur d'avant-plan et chaque point représente un pixel de la couleur d'arrière-plan.
C'est simple, à tel point qu'avant même de l'avoir affichée, on peut déjà voir à quoi ressemble la tile !
A ce stade, vous ne pouvez pas encore afficher votre tile à l'écran. Il faut d'abord que le programme la charge dans la mémoire GRAM; une fois en mémoire, elle deviendra affichable sous forme de tiles ou de sprites.
Note: il est possible de mettre 64 tiles/sprites de 8x8 pixels en mémoire
Pour charger la tile en mémoire, il faut utiliser la fonction DEFINE de cette façon:
DEF00: c'est l'index de la tile dans la GRAM.
Note: pour les 64 tiles en GRAM, il y a 64 index allant de DEF00 à DEF63
1: c'est le nombre de tiles que l'on charge à partir de l'index DEF00.
tile_herbe: c'est le nom du pack de tiles chargé en mémoire, car oui, tile_herbe aurait pu contenir plusieurs tiles. :3
Notez que vous ne devez pas essayer de charger plus de 16 tiles, ni plus de deux packs de tiles, par frame. Par ailleurs, même si c'est pas forcément nécessaire pour l'instant, il est utile d'ajouter un WAIT après avoir chargé un ou deux pack de tiles en GRAM. On peut voir ça comme une marge de sécurité qui permet à l'Intellivision de ne pas être débordée.
Et puisque vous y êtes, ajoutez un WAIT dans votre boucle InfiniteLoop.
Note: c'est pas tout à fait exact mais disons que WAIT demande à la machine d'attendre jusqu'à la prochaine "frame". Alors dans votre cas, la boucle InfiniteLoop sera lue intégralement, 60 fois par seconde. En ajoutant un autre WAIT, la boucle InfiniteLoop ne serait lue plus que 30 fois par seconde. J'espère que je suis clair, j'ai un petit doute.
Une fois la tile chargée en mémoire, vous allez l'afficher sur tout l'écran. Ce tutoriel n'ayant pas d'autre but que celui de vous familiariser avec l'IntyBASIC, je vous épargne les explications sur ce qu'est une boucle for.
Juste avant la boucle InfiniteLoop, copiez/collez ce bout de code:
Il a pour effet d'imprimer la première tile en GRAM sur chaque emplacement possible à l'écran, soit 20x12 fois.
Afficher une tile, c'est à peu près même chose qu'afficher du texte. On peut donc utiliser la fonction PRINT pour ça.
i: c'est l'emplacement de la tile; la première tile 0 est en haut à gauche de l'écran et la dernière 239 est en bas à droite.
BG_YELLOWGREEN: c'est la constante contenant l'adresse de la couleur d'arrière-plan de la tile à afficher
FG_DARKGREEN: c'est la constante contenant l'adresse de la couleur d'avant-plan de la tile à afficher
Note: si vous voulez connaître les différentes couleurs de tiles affichables en FG/BG, je vous suggère de jeter un oeil au fichier constants.bas situé dans le dossier lib.
"\256": c'est le numéro de la tile à afficher. Les numéros des tiles en GRAM vont de 256 à 319.
Voici le résultat une fois la rom compilée et lancée sur l'émulateur du SDK:
Rendez-vous dans le prochain tutoriel pour apprendre comment afficher et déplacer un sprite.
PS: si vous avez des questions ou des remarques, n'hésitez pas !
Hop, c'est parti ! Bon on ne va pas repartir de zéro, donc ouvrez dans votre éditeur de code le fichier HelloWorld.bas que vous avez créé lors de la leçon précédente.
Plus besoin de dire "bonjour", alors vous pouvez supprimer la ligne:
- Code:
print at 104 color CS_WHITE, "Hello World"
Vous devez maintenant avoir devant vous ces trois lignes:
- Code:
INCLUDE "constants.bas"
InfiniteLoop:
GOTO InfiniteLoop
Avant d'aller plus loin, il me faut vous donner quelques informations importantes:
L'Intellivision affiche une image en 16 couleurs, 60 fps, dans une résolution de 160*96. En vérité, il est possible d'afficher les sprites dans une résolution verticale supérieure, mais pour l'instant, "vvef".
La console de Mattel dispose, à ma connaissance de trois modes d'affichage. Comme vous débutez et que je vous imagine un peu fainéant, je vais vous présenter le mode qui siérait, a priori, le mieux à une adaptation de Barbarian: le mode Foreground/Background.
Pour faire simple, on pourrait dire que ce mode permet d'afficher des tiles en 2 couleurs. Son gros défaut est de couper l'accès à une partie des données incluses dans la GROM de la console; par exemple, vous ne pourrez plus afficher de lettres minuscules. Mais pour l'instant "vvef". :3
Pour choisir le mode Foreground/Background, il suffit d'écrire cette ligne:
- Code:
MODE 1
Il est pas nécessaire qu'elle soit tout en haut de votre page de code, mais il faut quand même qu'elle soit située avant l'affichage de votre première tile, ou de votre premier sprite. C'est logique mais sait-on jamais. :3
Maintenant, il vous faut une tile à afficher. En voici une:
- Code:
tile_herbe:
BITMAP "........"
BITMAP "........"
BITMAP "....#..."
BITMAP "........"
BITMAP ".#......"
BITMAP ".....#.."
BITMAP "........"
BITMAP "........"
Faites-en un copier/coller à la fin de votre code, après la boucle "InfiniteLoop"
"tile_herbe:" est comme une étiquette qui va vous permettre de faire référence à cette tile.
Ensuite, il y a huit lignes; chacune comprend le mot BITMAP suivi de huit points/dièses coincés entre deux guillemets.
Chaque dièse représente un pixel de la couleur d'avant-plan et chaque point représente un pixel de la couleur d'arrière-plan.
C'est simple, à tel point qu'avant même de l'avoir affichée, on peut déjà voir à quoi ressemble la tile !
A ce stade, vous ne pouvez pas encore afficher votre tile à l'écran. Il faut d'abord que le programme la charge dans la mémoire GRAM; une fois en mémoire, elle deviendra affichable sous forme de tiles ou de sprites.
Note: il est possible de mettre 64 tiles/sprites de 8x8 pixels en mémoire
Pour charger la tile en mémoire, il faut utiliser la fonction DEFINE de cette façon:
- Code:
DEFINE DEF00, 1, tile_herbe
DEF00: c'est l'index de la tile dans la GRAM.
Note: pour les 64 tiles en GRAM, il y a 64 index allant de DEF00 à DEF63
1: c'est le nombre de tiles que l'on charge à partir de l'index DEF00.
tile_herbe: c'est le nom du pack de tiles chargé en mémoire, car oui, tile_herbe aurait pu contenir plusieurs tiles. :3
Notez que vous ne devez pas essayer de charger plus de 16 tiles, ni plus de deux packs de tiles, par frame. Par ailleurs, même si c'est pas forcément nécessaire pour l'instant, il est utile d'ajouter un WAIT après avoir chargé un ou deux pack de tiles en GRAM. On peut voir ça comme une marge de sécurité qui permet à l'Intellivision de ne pas être débordée.
Et puisque vous y êtes, ajoutez un WAIT dans votre boucle InfiniteLoop.
Note: c'est pas tout à fait exact mais disons que WAIT demande à la machine d'attendre jusqu'à la prochaine "frame". Alors dans votre cas, la boucle InfiniteLoop sera lue intégralement, 60 fois par seconde. En ajoutant un autre WAIT, la boucle InfiniteLoop ne serait lue plus que 30 fois par seconde. J'espère que je suis clair, j'ai un petit doute.
Une fois la tile chargée en mémoire, vous allez l'afficher sur tout l'écran. Ce tutoriel n'ayant pas d'autre but que celui de vous familiariser avec l'IntyBASIC, je vous épargne les explications sur ce qu'est une boucle for.
Juste avant la boucle InfiniteLoop, copiez/collez ce bout de code:
- Code:
FOR i=0 TO 239
PRINT AT i COLOR BG_YELLOWGREEN+FG_DARKGREEN, "\256"
NEXT
Il a pour effet d'imprimer la première tile en GRAM sur chaque emplacement possible à l'écran, soit 20x12 fois.
Afficher une tile, c'est à peu près même chose qu'afficher du texte. On peut donc utiliser la fonction PRINT pour ça.
i: c'est l'emplacement de la tile; la première tile 0 est en haut à gauche de l'écran et la dernière 239 est en bas à droite.
BG_YELLOWGREEN: c'est la constante contenant l'adresse de la couleur d'arrière-plan de la tile à afficher
FG_DARKGREEN: c'est la constante contenant l'adresse de la couleur d'avant-plan de la tile à afficher
Note: si vous voulez connaître les différentes couleurs de tiles affichables en FG/BG, je vous suggère de jeter un oeil au fichier constants.bas situé dans le dossier lib.
"\256": c'est le numéro de la tile à afficher. Les numéros des tiles en GRAM vont de 256 à 319.
Voici le résultat une fois la rom compilée et lancée sur l'émulateur du SDK:
Rendez-vous dans le prochain tutoriel pour apprendre comment afficher et déplacer un sprite.
PS: si vous avez des questions ou des remarques, n'hésitez pas !
Invité- Invité
Re: [TUTO] [IntyBASIC] Les tiles
merci beaucoup, ç'est expliqué clairement et ça reste simple, donc ça donne envie d'essayer tout ça !
donc, si j'ai bien compris, en affichage Foreground/Background on ne peut pas avoir plus de 2 couleurs par tiles, c'est à dire :
1 couleur de foreground + 1 couleur de background
pour l'exemple tu as remplit tout l'ecran du meme background, mais aurait t'on pu mettre une couleur differente de background sur les autres tiles ? (avec un total de 16 couleurs biensur)
merci d'avance
donc, si j'ai bien compris, en affichage Foreground/Background on ne peut pas avoir plus de 2 couleurs par tiles, c'est à dire :
1 couleur de foreground + 1 couleur de background
pour l'exemple tu as remplit tout l'ecran du meme background, mais aurait t'on pu mettre une couleur differente de background sur les autres tiles ? (avec un total de 16 couleurs biensur)
merci d'avance
Re: [TUTO] [IntyBASIC] Les tiles
Oui, c'est ça, pas plus de deux couleurs par tile.
Il est possible d'appliquer des couleurs différentes à chaque tile. Par contre, en mode F/G c'est 16 couleurs BG+ 8 couleurs FG.
Il est possible d'appliquer des couleurs différentes à chaque tile. Par contre, en mode F/G c'est 16 couleurs BG+ 8 couleurs FG.
FG_BLACK, FG_BLUE, FG_RED, FG_TAN, FG_DARKGREEN, FG_GREEN, FG_YELLOW, FG_WHITE
BG_BLACK, BG_BLUE, BG_RED, BG_TAN, BG_DARKGREEN, BG_GREEN, BG_YELLOW, BG_WHITE, BG_GREY , BG_CYAN, BG_ORANGE, BG_BROWN, BG_PINK, BG_LIGHTBLUE, BG_YELLOWGREEN, BG_PURPLE
Invité- Invité
Re: [TUTO] [IntyBASIC] Les tiles
génial ce tuto.
le retro-coding a le vent en poupe sur Gamopat !!!!!!!
le retro-coding a le vent en poupe sur Gamopat !!!!!!!
_______________________________________________________
Re: [TUTO] [IntyBASIC] Les tiles
J'ai pas pu resister, j'ai affiché l'herbe. Ce sdk est super simple d'utilisation, merci ithus et merci à celui qui a crée intybasic !
Maintenant j'ai hate de faire bouger le sprite
Maintenant j'ai hate de faire bouger le sprite
Sujets similaires
» [TUTO] Hello IntyBASIC
» [TUTO] [IntyBASIC] Afficher et déplacer un sprite
» TUTO RGB sur PC Engine Coregrafx , TUTO RGB AMP pour PCE TNK2 etc...
» Les maps et les tiles dans SGDK
» IntyBASIC, le topic officiel
» [TUTO] [IntyBASIC] Afficher et déplacer un sprite
» TUTO RGB sur PC Engine Coregrafx , TUTO RGB AMP pour PCE TNK2 etc...
» Les maps et les tiles dans SGDK
» IntyBASIC, le topic officiel
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum