PRESENTATION DU PROJET ZELDA POUR CPC6128
1 – LA LEGENDE DE ZELDA
Si vous ne connaissez pas encore ce monument du RPG Japonais, je vais vous en faire un bref rappel ici. Tout débute en 1986 sur la console Nintendo NES pour se poursuivre encore de nos jours sur la Nintendo DS. Un petit personnage du nom de Link est chargé de sauver la princesse Zelda des mains de Ganon le prince des ténèbres. Pour se faire, il doit parcourir un vaste monde recelant de sombres donjons remplis de boss, à la recherche d’objets et de cœurs pour ses points de vie. Cette légende donnera alors naissance à toute une saga et un véritable engouement planétaire. Pour en savoir plus, vous pouvez vous reporter aux nombreux sites internet existants, comme celui-ci :
http://www.puissance-zelda.com/index.php
C’est donc ce jeu que nous nous
proposons d’adapter sur CPC, mais dans les limites de ce dernier bien entendu.
Déjà les premières ébauches donnent des résultats assez beaux. Elles sont
notamment tirées de Zelda 3 « a link to the past » sur Nintendo
SNES.
Vous pouvez jouer à ce jeu avec
l’émulateur SNES9X pour Windows. Les fichiers nécessaires sont accessibles
ici :
Evidemment, le CPC n’arrive pas à
la cheville de la SNES et une adaptation pourrait paraître hasardeuse voire
sacrilège. Mais les premiers résultats sont plus qu’encourageants et montrent
que l’on aurait tort de se géner.
2 – Le scénario
Le scénario reste à définir. Celui
de Zelda 3 était assez complexe, fait de rebondissements et de quêtes
secondaires variées. Celui du CPC pourra être plus simple, tout en restant
fidèle à l’esprit de la saga. Encore faut-il connaître son histoire…
3 – ADAPTATION GRAPHIQUE
D’abord, une adaptation graphique
ne pouvait se faire qu’en mode 0, pour pouvoir bénéficier de la couleur au
maximum. En plus, les pixels rectangulaires se prêtent plutôt bien aux décors par
sprites ou répétitifs. Par contre, les couleurs criardes du CPC sont loin des
teintes pastel de la SNES, puisque ses 27 couleurs sont les suivantes (en
luminosité +30%) :
Ainsi il est nécessaire de revoir
complètement les couleurs de certains secteurs de jeu. Voici quelques essais
d’écran de jeu pour montrer les changements dus au mode 0. Ces écrans ne sont
là qu’à titre indicatif et sont susceptibles de changer.
Ce premier écran est basé sur
celui présenté plus haut, dans la version SNES. Mais on voit clairement les
modifications, tant au niveau pixelisation, qu’au niveau des couleurs.
Ce deuxième écran est également
basé sur celui plus haut. Ici les couleurs étant très vives, il fallait les
contraster pour équilibrer le tout. Et cet équilibre est assez délicat avec la
palette du CPC. On remarquera aussi que certaines choses ne peuvent être
converties en mode 0. C’est le cas des plantes qu’il a fallut redessiner
entièrement, avec un résultat passable.
Ici c’est un essai de donjon avec
ses habituels rats et ses pots à fouiller. La manque de dégradé de gris a pu
être compensé avec du vert et du gris-bleu.
Une grotte. Les couleurs marron,
orange, jaune clair et gris se prêtent très bien au décor.
La maison de Link, avec toujours
cette utilisation du marron, orange et jaune clair.
Voici maintenant la conversion de
2 secteurs de jeu, le 1er en 512x512, l’autre en 1024x1024. Ces
écrans sont bien en mode 0 et n’utilisent que 16 couleurs max.
Le deuxième secteur, celui de la
ville :
Le 3ème secteur, celui des
marécages
4 – CREATION DU MONDE DE ZELDA CPC
Tous les graphismes ci-dessus sont en fait un
assemblage de sprites 8x16 mode 0 (étirés sur 16x16 donc), tels que
ci-dessous :
Il se
peut toutefois qu’il y ait des exceptions comme les intérieurs de maison (à
voir). Une fois les sprites répertoriés, il devient possible de créer tout un
monde avec. Mais ce monde assez vaste et varié, encore faut-il pouvoir le
créer. La question qui se pose est donc de savoir si cela vaut vraiment la
peine d’en recréer un de A à Z. Je pense que la solution se situe plus dans la
reprise de certains secteurs, avec modifications ou ajouts de lieux selon la nécessité
ou la volonté de chacun. En plus il existe quelques versions de fans, créées
avec RPG maker, et s’inspirant de Zelda 3 sur SNES. Il est donc tout à fait
possible d’y piocher des idées. De toute façon, le scénario et les situations
seraient quand même totalement inédits.
CreateCpcMap
(par
Ludovic DEPLANQUE)
CreateCpcMap
est un logiciel Windows permettant d’éditer une « map » pour une
utilisation dans un jeu CPC type « Zelda ». J’ai crée ce logiciel
pour permettre d’éditer facilement un « plan » du jeu.
Dans
les jeux de type « Zelda », il y a une similitude dans la
représentation des graphiques de l’aire du jeu. En se basant sur le principe
que chaque aire du jeu peut être découpée en élément simple de 16x16 pixels
(8x16 pixels dans le cas du mode 0 du CPC), il devient alors facile de recréér
complètement une aire de jeu à l’aide de « sprites » de cette taille.
CreateCpcMap
permet de créer ces « sprites », et de les assembler pour créer la
« map ».
J’ai
volontairement limité le nombre de sprites à 256 (de 0 à 255, le sprite 0 étant
un sprite « vide ») pour simplifier ensuite le dessin de la map
(chaque sprite de la map est donc représenté par un octet).
Quant
à la map, elle a une taille de 128x128 sprites. Ce qui représente une taille totale
pour l’aire de jeu de 1024x1024 pixels (512x1024 pixels mode 0).
L’interface
principale se divise en 3 parties :
-
La partie centrale, qui
représente la map en elle-même, avec les barres de défilement verticale et
horizontale,
-
La partie gauche, qui
représente la table des 256 sprites, avec une barre de défilement verticale,
-
La partie basse, qui contient
essentiellement les boutons de commandes et les informations diverses.
Le bouton « Lire Sprites » permet de
charger un fichier avec l’extension .SPT, qui représente les 256 sprites.
Le bouton « Sauver Sprites » permet de
sauvegarder les 256 sprites définis dans un fichier avec l’extension .SPT.
Le bouton « Importer sprites » permet
d’ouvrir la fenêtre de l’importateur de sprites.
Le bouton « Raz Sprites », situé sous la
table des sprites, permet d’éffacer les 256 sprites d’un coup.
Le bouton « Lire Map » permet de charger un
fichier avec l’extension .MAP, qui représente les 128x128 cases de la map.
Le bouton « Sauver Map » permet de
sauvegarder la map dans un fichier avec l’extension .MAP.
Le bouton « Importer Map » permet d’ouvrir
la fenêtre de l’importateur de map.
Le bouton « Raz Map » permet d’effacer d’un
coup les 128x128 cases de la map (l’effacement revient à mettre le sprite 0 sur
toute la map).
Le bouton « Lire palette » permet de lire
un fichier palette au format .PAL (compatible OCP ART STUDIO et ConvImgCPC).
Le bouton « Sauver Palette » permet de
sauvegarer la palette au format .PAL (compatible OCP ART STUDIO et ConvImgCPC).
La map étant composée au maximum de 128x128 sprites,
il convient tout d’abord, avant de la dessiner, de créer les sprites qui vont
la composer. C’est pour cela que CreateCpcMap comporte un éditeur de sprites.
Pour ouvrir l’éditeur de sprites, il suffit de
cliquer sur le bouton « editer sprite » dans la partie basse de l’écran.
Une fenêtre nomée « Editeur de sprites » apparaît alors.
Cette fenêtre comporte plusieurs éléments :
-
La partie centrale affiche le sprite
sélectionné, en zoom. C’est également cette partie qui servira à créer/modifier
le sprite. Un clic gauche avec le bouton de la souris affecte le point du
sprite désiré avec la valeur courante du stylo. Un clic droit affecte le point
avec la couleur zéro.
-
A gauche est indiqué le numéro
de sprite courant, celui que l’on va donc éditer. En dessous, le carré
représente la couleur du stylo sélectionné.
-
Tout en bas se trouve la
palette de couleurs. En cliquant sur une couleur, on affecte celle-ci au stylo.
-
Au dessus de la palette se
trouve le sélecteur de sprites. Pour choisir un sprite à éditer, il suffit de
faire défiler, avec la barre de scrolling, les sprites vers celui désiré. Le
sprite à éditer est celui situé au centre des 5 sprites représentés. Les autres
sprites sont simplement affichés pour avoir un apperçu des 2 sprites précédent
et les 2 sprites suivant le sprite que l’on veut éditer.
-
Enfin, le bouton
« Grille » permet d’afficher/effacer une grille sur le sprite à
éditer. Les coordonnées X,Y du curseur de souris dans le sprite sont également
affichés, lorsque la souris se trouve dans la zone d’édition.
La création des sprites pouvant s’avérer relativement
longue, il existe une option pour simplifier cette étape : l’importation
de sprites depuis un fichier .SCR.
Pour cela, suffit de cliquer sur le bouton
« Importer sprites » depuis la fenêtre principale. Une fenêtre nomée
« ImportSpritesScr » s’ouvre alors :
Depuis cette fenêtre, on peut donc lire un fichier
écran CPC au format .SCR (17ko). Pour cela, il suffit de cliquer sur le bouton
« Lire écran SCR ». Si l’on coche la case « Importer
Palette », le programme examinera le fichier .SCR pour voir s’il comporte
une palette, et si oui, affectera la palette du programme avec la palette
trouvée dans le fichier .SCR. (Si le fichier .SCR a été enregistré avec le
programme « ConvImgCPC », la palette se trouve dans le fichier .SCR).
L’image lue apparaît alors dans la fenêtre, en
dessous d’un cadrillage. Ce cadrillage divise notre image en
« sprites » élémentaire de 8x16 pixels en mode 0. Si l’on clique dès
maintenant sur le bouton « Importer », nous allons donc créer 20x12 =
240 sprites d’un coup, formés par notre image .SCR.
Il se peut que seulement une partie de l’image soit
utile pour la création des sprites. C’est pour cela que les champs de saisie
« OffsetX, OffsetY, Nb. Sprites X, Nb. SpritesY » existent.
En effet, dans ces champs, nous allons indiquer la
zone « active » de notre image .SCR qui est intéressante pour la
création des sprites.
Les valeurs à renseigner sont en unités de sprites.
Pour cela, il suffit donc de compter les « carreaux » formés par la
grille au dessus de notre image. Par exemple, si la première et la deuxième
ligne de l’image sont vides, on entrera « 2 » dans le paramètre
« Offset X ».
Il ne faut pas oublier ensuite d’appuyer sur le
bouton « Appliquer », pour que la grille se redessine sur l’image .SCR
en fonction de la sélection que nous avons choisi.
Un autre paramètre important, est le champ
« Premier sprite ». En effet, si nous avons déjà quelques sprites
existants, il serait dommage de les effacer avec l’importation de nouveaux sprites.
Il suffit donc, avant de lancer l’importateur, de regarder le numéro du premier
sprite « libre » dans la fenêtre principale, et de le saisir dans ce
champ. L’importation débutera alors automatiquement à partir de ce numéro.
Remarque :
l’importateur de sprites vérifiera qu’un sprite n’existe pas avant de
l’importer, afin d’éviter les doublons.
L’éditeur de map se situe donc dans la partie
centrale de l’interface principale. Pour éditer une map, il suffit de choisir
le sprite à insérer, en cliquant sur le sprite désiré dans la partie gauche de
l’écran (le sprite choisi apparaît alors dans la petite zone d’information en
bas de l’écran « Sprite courant », avec son numéro). Ensuite, il
suffit de cliquer à l’endroit de la map désiré pour ajouter ce sprite.
Plutôt que de dessiner sprites par sprites, il est
également possible de faire du « copier-coller » d’une zone existante
de la map : en cliquant avec le bouton droit sur le coin supérieure
gauche, et en se déplaçant en bas à droite, tout en restant appuyé sur le
bouton droit de la souris, un rectangle blanc se dessine autour de la zone qui
servira de modèle. L’affichage « bloc(x,y) » apparaît alors dans la
zone du bas de la fenêtre, pour indiquer que le bloc a été mémorisé, en
rappelant sa taille. Ensuite, chaque clic gauche de souris sur la map
« collera » le bloc voulu. Pour rebasculer dans le mode classique
d’ajout de sprites, il suffit simplement de cliquer sur un sprite dans la
partie gauche.
Comme pour les sprites, il est possible d’importer
directement une partie de map depuis un fichier .SCR.
Pour cela, suffit de cliquer sur le bouton
« Importer Map» depuis la fenêtre principale. Une fenêtre nomée
« ImportScr » s’ouvre alors :
Comme pour l’importation des sprites, on retrouve le
bouton « Lire écran SCR » et la case à cocher « Importer
Palette », dont le fonctionnement est identique.
Les champs « Offset Map X et Offset Map Y »
indiquent à partir de quelles position il faut commencer à importer la map.
Attention ! Contrairement à l’importation des sprites, c’est la position
dans la map, et non pas la position dans l’écran .SCR que l’on choisit ici avec
ces deux champs.
Par exemple, si dans l’éditeur principal, nous avons
déjà dessiné une map de 20x16 sprites, il conviendra de mettre la valeur 20
dans le champ « Offset Map X » et la valeur 16 dans le champ
« Offset Map Y ». Ne pas oubler ensuite de cliquer sur le bouton
« Appliquer », avant d’importer.
Le programme analysera alors l’image SCR, et si il
reconnaît dans cette image des motifs identiques aux sprites définis, il les
ajoutera automatiquement à la map. Tout motif non reconnu sera remplacé par le
sprite 0.
Ce format est le même que le format .PAL utilisé par
le logiciel OCP art studio. Il s’agit d’un fichier binaire, dont les octets
suivants sont utilisé:
Octet 3 = Couleur 0
Octet 15 = Couleur 1
Octet 27 = Couleur 2
Octet 39 = Couleur 3
Octet 51 = Couleur 4
Octet 63 = Couleur 5
Octet 75 = Couleur 6
Octet 87 = Couleur 7
Octet 99 = Couleur 8
Octet 111 = Couleur 9
Octet 123 = Couleur 10
Octet 135 = Couleur 11
Octet 147 = Couleur 12
Octet 159 = Couleur 13
Octet 171 = Couleur 14
Octet 183 = Couleur 15
Les couleurs sont les valeurs utilisés par le Gate
Array du cpc, et non pas les couleurs utilisées par le Firmware et le basic.
(par exemple, la couleur noire a la valeur #54 en hexadécimal).
Les fichiers .SPT sont des fichiers de 16384 octets,
contenant les 256 sprites de taille 8x16 pixels mode 0 (soit 4x16 octets en
mémoire vidéo CPC), organisés de la manière suivante : (les sprites sont
numérotés de 0 à 255)
Octet 0 = octet 0 sprite 0 (Ligne 0, colonne 0)
Octet 1 = octet 1 sprite 0 (Ligne 0, colonne 1)
Octet 2 = octet 2 sprite 0 (Ligne 0, colonne 2)
Octet 3 = octet 3 sprite 0 (Ligne 0, colonne 3)
Octet 4 = octet 4 sprite 0 (Ligne 1, colonne 0)
…
Octet 63 = octet 63 sprite 0 (Ligne15, colonne 3)
Octet 64 = octet 0 sprite 1 (Ligne 0, colonne 0 )
…
Octet 127 = octet 63 sprite 1 (Ligne 15, colonne 3)
Octet 128 = octet 0 sprite 2 (Ligne0, colonne 0 )
..
Octet 16383 = octet 63 sprite 255 (Ligne 15, colonne
3)
Les fichiers .MAP sont des fichiers de 16384 octets,
contenant les 128x128 cases de la map. (La map ayant une taille de 128 sprites
en X et de 128 sprites en Y).
La structure est la suivante : (les coordonnées
sont numérotées de 0 à 127)
Octet 0 = sprite position (0,0) de la map
Octet 1 = sprite position (1,0) de la map
…
Octet 127 = sprite position (127,0) de la map
Octet 128 = sprite position (0,1) de la map
Octet 129 = sprite position (1,1) de la map
…
Octet 255 = sprite position (127,1) de la map
Octet 256 = sprite position (0,2) de la map
…
Octet 16383 = sprite position (127,127) de la map.