lundi 15 août 2011

Amusons-nous avec une GBA

Le (ou la, je ne sais pas comment on dit :) ) GameBoy Advance de Nintendo est sincèrement une console qui m'a plu.
Alors qu'a la base, je ne m'intéresse que à la programmation sur PC, je me suis dit, pourquoi ne pas plagier Åvygeil, qui s'intéresse à la programmation sur Mégadrive et me lancer vers une console ?
Grâce à une petite recherche Google, je suis tombé sur didacticiel fort agréable à lire.

Brève explication sur le fonctionnement des modes
La machine permet de manipuler 6 modes graphiques. Je vais les présenter brièvement.
Les modes 0, 1 et 2 sont des modes qui sont dit "de Tiles".
Tiles/Tuiles est un concept familier aux utilisateurs de RPG Maker, et même s'il plait souvent aux graphiste car il évite d'obliger le dessin de centaines map et en permet l'assemblage, sur console cette méthode offre un énorme avantage au niveau de la gestion de la mémoire, car les Tiles sont évidemment plus légers que les panoramas et permettent la composition de map presque infinie.
La répartition mémoire est définie de cette manière:
  • 64ko de mémoire vidéo (utilisé pour ces fameuses tuiles)
  • 32ko pour les sprites
Les fond peuvent utiliser la transparence et il est même possible d'effectuer des rotation sur les modes 1 et 2.
Les modes 3, 4, 5 sont les modes dit Bitmap. Leur répartition mémoire est définie de cette manière:
  • 80ko dédiés à l'écran 
  • 16ko seulement pour les sprites
Contrairement aux idées reçues, les mode7 n'appartient pas vraiment aux modes graphiques de la console. En effet, ils 'agit d'une astuce (couplée, sur superNes, avec une puce, la MarioChip, si je ne me trompe pas.. (FAUX, voir plus bas.)
Qui, au moyen de rotation et de zoom, permet la simulation de la profondeur (comme dans le célèbre MarioKart).
Cependant, nous ne nous étendrons pas sur le sujet.
 
Et bien si je me trompais :) merci Sylvain :
" Le "Mathematical, Argonaut, Rotation & I/O", c'est le nom de code du SuperFX, utilisé dans Starfox et Yoshi's Island. "). Sources

Les Sprites
Comme dans le RGSS et RPGMaker, un Sprite est un simple élément graphique  indépendant, déplaçable et transformable au moyen de zoom rotation et translation.
En général, dans un jeu, chacun des élément mobile est un Sprite.

Sons, touches et sauvegarde
Tout ceci est manipulé au moyen de Registres. C'est relativement simple mais l'article ne porte pas vraiment sur l'utilisation du C++ pour créer un jeu GBA.
Je ne m'attarderai donc pas sur ces points. Cependant, si vous avez des questions sur le développement sur GBA, n'hésitez pas à me contacter, je me ferai une joie de vous répondre.

Ce que nous avons vraiment essayé de faire


Il faut dire ce qui est, je me suis méchamment fait fumer par mes ambitions.
Concrètement, la première idée, après avoir vu que faire un "Hello World" (excusez-moi :) ) était relativement facile, je me suis demande pourquoi ne pas me lancer dans le développement d'un framework GBA qui reprendrait une structure proche de RPGMaker, permettant une éventuelle conversion RM > GBA.
Que de belles idées, et des larmes pleins les yeux tant je me sentais révolutionnaire...

Ce qui n'a pas fonctionné
Globalement, faire un jeu pour GameBoy ne demande pas spécialement plus de difficulté que de faire un jeu sur RPGMaker (difficulté scénaristique,   graphismes etc.) si ce n'est le développement pur de chaque module.
Cependant, la conversion de jeu RM > GBA est vraiment une tâche fastidieuse qui, au final, demanderais énormément d'investissement de la part du Maker pour s'adapter (et oui, la résolution pose soucis, les couleurs, le sons et pleins d'autres facteurs).
C'est pourquoi le projet est abandonné.
Oui, je sais que je suis un peu nul, mais je pense sincèrement que sur le long terme, ce genre de projet est impossible à maintenir. Par contre envisager un framework de développement, sous forme de code OpenSource, pourquoi pas. Mes expérimentation GBAsquienne ne sont pas encore terminée. Je garde bien au chaud quelques idées de mini jeu facilement développable que je pourrais déployer en quelques semaines de travail.

Ce qu'on retient de ce cuisant échec
Même si le projet d'éditeur/convertisseur/etc. (on l'aurait appelé GiX :D) n'a pas fonctionné, ce n'est pas dramatique. Je ne suis pas un grand fan de C/C++ mais je me suis bien amusé.
Et j'invite tout ceux qui se sentent un peu fou à ne pas hésiter à créer des mini-trucs bien rigolo sur cette console. Et pourquoi pas imaginer un projet de RPG avec tous les gentils amis du FunkyWork sur GBA !

Liens en annexes
Voici le didacticiel que j'ai utilisé. Il est vraiment bien fait ! Et se trouve évidemment sur developpez.com

Le mot de la fin
Je vous souhaite à tous une bonne fin de vacances !
Merci pour la lecture.
Bien à vous... MOLOK !

Ps: Si vous avez des questions, n'hésitez pas à les poser... ça y est ! FunkyWork revit !

6 commentaires:

  1. Aha, intéresséant de voir comment sont gérés les graphs d'une GBA. C'est ptet pas la console la plus répandue pour créer un framework de dev par contre ;)

    Si les histoires de conversion t'intéressent, on est tombé là-dessus : http://www.clubic.com/telecharger/Microsoft/silverlight/actualite-431064-xna-porte-silverlight-ios.html

    A priori, Geex serait portable sur iOS, et bientôt android :)

    Gaetz

    RépondreSupprimer
  2. Merci :)
    Nice pour Ios et Android.
    Si vous avez besoin d'aide pour le développement Android, n'hésitez pas, Kmkzy est un monstre en JAVA et j'ai déjà eu l'occasion de travailler sur Android.
    Concernant IOS, je n'ai jamais eu l'occasion de bosser en Objective-C. Mais il parait que c'est fun :) sinon C++ :)
    Bonne chance les amis, j'apprécie votre projet.

    ps: tu as noté le petit clin d'oeil à GeeX :) ?

    RépondreSupprimer
  3. "couplée, sur superNes, avec une puce, la MarioChip, si je ne me trompe pas"
    Euh, je crois que si. Le "Mathematical, Argonaut, Rotation & I/O", c'est le nom de code du SuperFX, utilisé dans Starfox et Yoshi's Island. selon mes sources, en tout cas

    RépondreSupprimer
  4. Tiens, sinon, ayant bricolé mon petit éditeur de tiles / sprites sur la DS, je suis assez curieux de savoir comment les "makers" procèdent généralement pour créer le contenu graphique de leur jeu ... histoire de savoir si je fais bonne route avec mes outils, et de prévoir éventuellement des modifications dans la prochaine version.

    RépondreSupprimer