Coder sur PC Engine c'est facile ! [PART 3]

Publié le par F.L.

Coder sur PC Engine c'est facile ! [PART 3]

09- Afficher un sprite

Pour résumer le tuto précédent, voici le fameux background que nous avons réussi à afficher.
Il s'agit d'une partie du stage 1 de Metal Slug 1,
jeu que rêve de voir un jour sur PC Engine :)

Coder sur PC Engine c'est facile ! [PART 3]

Afficher un décor c'est bien, mais pour faire un jeu, il faut y afficher des sprites par dessus ! Tout le monde sait qu'un sprite c'est tout simplement une image, avec un fond transparent, qui évolue a l'écran par dessus le background (voire même sur un fond noir).

Pour afficher ce fameux sprite, ça demande un peu plus de lignes de commandes que pour un background. non pas parce que c'est plus compliqué, mais parce qu'il y a plus de paramètres à prendre en compte.

Je vous donne direct le code pour créer un sprite puis l'afficher,
pour vous montrer que ce n'est pas non plus énorme à gérer :

Coder sur PC Engine c'est facile ! [PART 3]

Maintenant au lieu de vous en servir bêtement en faisant copier/coller,
il va falloir que vous compreniez à quoi tout ça sert, car c'est important.

Avant de voir ses différents paramètres, tout comme pour le background il faut déclarer avant le Main les tiles et la palette de ce fameux sprite.
voici comment faire :

Déclaration

#incspr(hero_debout,"debout.pcx",0,0,2,4)

Ceci déclare 2 tiles de large sur 4 tiles de haut nommées "hero_debout"
à partir d'un fichier image (debout.pcx)
à télécharger ici : https://www.dropbox.com/s/0zsxpbp00qa3xie/debout.zip?dl=0

Attention, chose importante : contrairement au background, pour les sprites il s'agit de tiles de 16x16 pixels ! C'est une particuliarité de la pcengine. Si vous avez bien suivi, ce sprite fera donc de 2x4 tiles, soit 32x64 pixels. Et pourquoi il y a t'il 0,0 juste avant 2,4 ? Pour l'instant nous ferons simple alors on ne s'en occupe pas.

Maintenant que ces tiles sont déclarées, pour les afficher plus tard, ils leur faut une palette :

#incpal(palette_hero,"debout.pcx")

Comme pour le bakground, ceci déclare une palette de 16 couleurs issues de ce fichier image. Info : la couleur 0 de cette palette ne sera pas affichée, car elle sera transparente. Il faut aussi que cette couleur 0 soit noire, sinon vous retrouverez cette couleur autour du background,
ce qui ne fera pas joli.

Les tiles et leur palette étant declarées, on va pouvoir s'en servir pour créer un sprite. Maintenant, tout se fera dans le main (avec des point virgules !).

Création du sprite

Pour appliquer la palette que nous venons de créer, il suffit d'une ligne :

set_sprpal( 0 , palette_hero);

Notre palette_hero devient la palette 0 des palettes de sprites. Nous l'appliquerons à notre sprite et même à d'autres si on veut.

Ensuite, pour créer un sprite avec les tiles du hero_debout, on va charger ces tiles en VRAM. La VRAM c'est la mémoire vidéo de la console :

load_vram( 0x6000 , hero_debout , 512);

Oulala, c'est quoi tout ça ? Rien de bien sorcier, on charge les tiles sprite_hero à l'emplacement 6000.
6000 étant le début de la place disponible en VRAM, et 512 représente la place que les tiles en question vont prendre dans cette VRAM.

Pour trouver la place des tiles qu'on charge, voici un petit calcul tout bête
a faire à chaque fois :
((Nb de tiles en 16x16) * 4) * 16
donc ici :
( 8 tiles * 4 ) * 16 = 512

Voila, vos tiles sont chargée en VRAM. Maintenant on peut créer le sprite tout simplement en demandant l'emplacement 6000 de la Vram. Plus besoin de préciser de quelle image il s'agit.

Et pour enfin créer le sprite, voici les quelques lignes qu'il faut :

spr_set( 1 );
spr_pattern( 0x6000 );
spr_ctrl( SIZE_MAS|FLIP_MAS , SZ_32x64|NO_FLIP );
spr_pal( 0 );
spr_pri( 1 );

Ca peut paraitre lourd comme code, mais si vous avez bien suivi depuis tout à l'heure, c'est en fait la suite logique de tout ce qu'on a vu.

- le numéro du sprite
- l'emplacement de ses tiles en vram
- sa dimension et sa rotation
- sa palette
- sa priorité par rapport au background (1=devant)

Grâce à ces 5 lignes, ça y est, votre sprite No1 est créé !

Affichage du sprite

Maintenant il faut l'afficher. ces 3 lignes suffisent :

spr_set( 1 );
spr_x( 80 );
spr_y( 100 );

- on choisit le No du sprite à utiliser
- on définit sa position X (ici 80 )
- on définit sa position y (ici 100)

et pour finir, chose importante, il faut mettre à jour la table des sprites. sinon, votre sprite ne s'affichera pas :

satb_update();

Voilà, nous avons vu tout ce qu'il fallait pour afficher un sprite de manière simple à l'écran. Il existe d'autres réglages, mais nous les verrons plus tard.


Voici le lien de mon image "debout.pcx" qui va avec l'exemple
https://www.dropbox.com/s/0zsxpbp00qa3xie/debout.zip?dl=0
Mettez ce fichier dans votre dossier de travail, sauvegardez votre source avec ces nouveaux codes, et compilez. Voici ce que vous allez obtenir :

Coder sur PC Engine c'est facile ! [PART 3]

Sympa, non ? Maintenant, vous pouvez mixer les deux exemples que je vous ai donné (background+sprite), et les ajouter dans votre source, ça donnera ça :

#include "huc.h"

int VSyncCnt;
int TimerCnt;
int MainCnt;
int SubCnt;

/* chargement des tiles du sprite */
#incspr(hero_debout,"debout.pcx",0,0,2,4)
#incpal(palette_hero,"debout.pcx")

/* chargement du decor */
#incchr(tiles_decor,"decor.pcx",40,27 )
#incbat(map_decor,"decor.pcx",0x1000,40,27 )
#incpal(palette_decor,"decor.pcx" )


main()
{

set_xres( 320 );
disp_on();

/* affichage du decor */
load_background(tiles_decor,palette_decor,map_decor,40,27);


/* creation du sprite */
spr_set( 1 );
set_sprpal( 0 , palette_hero);
load_vram( 0x6000 , hero_debout , 512);
spr_pattern( 0x6000 );
spr_ctrl( SIZE_MAS|FLIP_MAS , SZ_32x64|NO_FLIP );
spr_pal( 0 );
spr_pri( 1 );


/* affichage du sprite */
spr_set( 1 );
spr_x( 80 );
spr_y( 100 );

satb_update();

}

Essayez-le, c'est encore mieux non ? Je vous laisse y rajouter du texte et du chiffre par dessus,et ça commencera à ressembler à un début de jeu !

J'espère que cette nouvelle partie du tuto vous aura plu et que je sois arrivé à être le plus clair possible, car c'est une partie importante. Maintenant la suite logique c'est de faire bouger ce sprite avec le clavier, ça sera la prochaine étape du tuto ! A suivre.....

Publié dans FOCUS

Commenter cet article