[TUTO] [IntyBASIC] Les tiles

Aller en bas

[TUTO] [IntyBASIC] Les tiles

Message par Ithus le Jeu 29 Nov 2018 - 15:49

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:

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. Wink

PS: si vous avez des questions ou des remarques, n'hésitez pas !
Ithus
Ithus
Patient contaminé

Masculin Nombre de messages : 251
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] [IntyBASIC] Les tiles

Message par Invité le Ven 30 Nov 2018 - 11:51

Merci pour ces petits tuto. Wink
avatar
Invité
Invité


Revenir en haut Aller en bas

Re: [TUTO] [IntyBASIC] Les tiles

Message par F.L le Ven 30 Nov 2018 - 15:04

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
F.L
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 3133
Age : 43
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: [TUTO] [IntyBASIC] Les tiles

Message par Ithus le Ven 30 Nov 2018 - 16:58

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.

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
Ithus
Ithus
Patient contaminé

Masculin Nombre de messages : 251
Age : 33
Localisation : Loin
Date d'inscription : 26/10/2009

Revenir en haut Aller en bas

Re: [TUTO] [IntyBASIC] Les tiles

Message par drfloyd le Ven 30 Nov 2018 - 18:55

génial ce tuto.

le retro-coding a le vent en poupe sur Gamopat !!!!!!!

_______________________________________________________

Mes objets en vente :
https://www.gamopat-forum.com/t98267-la-caverne-du-doc-poilu#2765310
Mon profil Gamopat Advisor :
https://www.gamopat-forum.com/t94659-dr-floyd-advisor





drfloyd
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 143321
Age : 49
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Re: [TUTO] [IntyBASIC] Les tiles

Message par F.L le Ven 30 Nov 2018 - 19:54

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
F.L
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 3133
Age : 43
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: [TUTO] [IntyBASIC] Les tiles

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum