Dolphin et les homebrews

Dans un article précédent j’avais mentionné que l’émulateur Dolphin avait un problème avec l’infrarouge de la Wii Remote. Eh bien ce problème a été réglé. En effet, il est désormais possible de contrôler le pointeur d’une Wii Remote à l’aide de la souris de votre ordinateur. C’est un avancement formidable pour ceux qui testent leur homebrew avec ce logiciel.

C’est un programmeur du nom de godisgovernment qui a finalement fixé le problème à la révision 6177. Cette modification ne fait donc pas partie de la version 2.0, qui est la dernière version officielle à être distribuée. Les dernières versions de Dolphin sous Subversion sont quand même disponibles en téléchargement à partir de ce site Web.

Étant donné que ce n’est pas mon habitude de terminer un article sans code, je vous laisse avec un programme qui vous permettra de faire vous-même le test sous Dolphin. La bibliothèque GRRLIB sera utilisée pour la partie graphique. Comme pour tous les homebrews sur la Wii, c’est wiiuse qui servira pour la communication avec la Wii Remote.

#include <grrlib.h>
#include <stdlib.h>
#include <wiiuse/wpad.h>

#include "player1_point_png.h"

#define HOTSPOTX 48 // Cursor hot spot for x coordinate
#define HOTSPOTY 48 // Cursor hot spot for y coordinate

int main(int argc, char **argv) {
    // Initialise the Graphics & Video subsystem
    GRRLIB_Init();

    GRRLIB_texImg *Cursor0 = GRRLIB_LoadTexture(player1_point_png);
    GRRLIB_SetHandle(Cursor0, HOTSPOTX, HOTSPOTY);// Not needed, by default center is selected

    // Initialise the Wiimotes
    WPAD_Init();
    WPAD_SetDataFormat(WPAD_CHAN_ALL, WPAD_FMT_BTNS_ACC_IR);
    WPAD_SetVRes(WPAD_CHAN_ALL, rmode->fbWidth, rmode->efbHeight);

    // Loop forever
    while(1) {
        WPAD_ScanPads();  // Scan the Wiimotes
        WPADData *WPadData0 = WPAD_Data(WPAD_CHAN_0);

        // If [HOME] was pressed on the first Wiimote, break out of the loop
        if (WPadData0->btns_d & WPAD_BUTTON_HOME)  break;

        // ---------------------------------------------------------------------
        if(WPadData0->ir.valid) {
            GRRLIB_DrawImg(WPadData0->ir.x - HOTSPOTX,
                WPadData0->ir.y - HOTSPOTY, Cursor0,
                WPadData0->ir.angle, 1, 1, 0xFFFFFFFF);
        }
        // ---------------------------------------------------------------------

        GRRLIB_Render();  // Render the frame buffer to the TV
    }

    GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB

    GRRLIB_FreeTexture(Cursor0);

    exit(0);
}

À la ligne 14 on charge l’image dans une texture. L’image utilisée pour le pointeur est celle-ci:

Player 1 Wii pointer

Il s’agit d’une image qui fait partie d’un ensemble de curseurs pour la Wii conçus par drmr. Toutes les images sont de 96×96 pixels et le point sensible, habituellement le bout du doigt, est situé au centre. L’auteur a renoncé à ses droits sur les images pour les mettre dans le domaine public. Vous pouvez donc les utiliser dans vos applications sans problème de copyright.

À la ligne 19 on spécifie le format des données qui seront prises sur la Wii Remote. BTNS_ACC_IR veut dire boutons + accéléromètre + infrarouge. Par la suite, la fonction WPAD_SetVRes sert à définir la résolution d’écran virtuel pour la localisation de l’infrarouge. Pour ces opérations on utilise le paramètre WPAD_CHAN_ALL pour que tous les contrôleurs soient affectés. Pour que la fonction affecte une télécommande en particulier on doit utiliser WPAD_CHAN_0, WPAD_CHAN_1, WPAD_CHAN_2 ou WPAD_CHAN_3.

À la ligne 25 on va chercher les données de la première Wii Remote avec la fonction WPAD_Data. Les lignes 31 à 35 servent à faire afficher le curseur avec le bon angle à la position vers laquelle la télécommande pointe. Et ce, seulement si les coordonnés sont valides. Donc, si vous mettez votre main devant la Wii Remote, le pointeur disparaîtra de l’écran de votre téléviseur.

J’aurais pu ajouter bien des choses dans le code, mais j’ai décidé de le garder simple.

Bonne programmation…

Configurer Programmer’s Notepad pour lancer Dolphin

Programmer’s Notepad est un éditeur de texte conçu pour travailler avec du code source. Il est inclus avec devkitPro, la fameuse suite d’outils qui permet la programmation d’homebrew pour la Wii. Présentement, la version 2.0.8 est distribué avec celui-ci. Par contre, la version 2.0.10.1010 est disponible depuis le mois d’août 2009 et peut être téléchargée sur le site officiel du logiciel. La version 2.1.2 qui est encore en développement est disponible dans la section des téléchargements du projet sur Google Code. Cette version permettra la traduction de l’interface dans d’autres langues, par exemple le français.

Dolphin est un émulateur qui permet de jouer à des jeux GameCube et Wii sur votre ordinateur. Il permet aussi de pouvoir tester vos homebrew avec certaines limites. Par exemple, je n’ai jamais réussi à faire fonctionner le son avec un homebrew. En plus, l’infrarouge de la Wii Remote ne fonctionne pas lorsqu’on utilise un clavier et une souris. C’est pour cette raison que j’enlève toujours les trois derniers caractères de WPAD_FMT_BTNS_ACC_IR lorsque j’appelle WPAD_SetDataFormat. Sans cette modification, il vous sera impossible d’émuler les boutons de la Wii Remote. Même avec ces défauts, il est préférable d’utiliser ce programme plutôt que d’envoyer le fichier elf à la Wii et ensuite de marcher jusqu’à la télévision pour voir le résultat. Ce n’est pas que je suis paresseux mais dans mon cas, la console de jeu n’est pas sur le même étage que mon PC, donc c’est du sport de faire du débogage de cette manière.

Maintenant que les logiciels ont été introduits, on peut se poser la question: pourquoi voudrait-on démarrer Dolphin à partir de Programmer’s Notepad? Tout simplement parce que ce serait très long à chaque fois qu’on compile et qu’on veut voir le résultat de faire les manipulations suivantes:

  • Ouvrir Dolphin en double cliquant sur l’exécutable ou le raccourci
  • Cliquer sur Open dans la barre de d’outil
  • Sélectionner le bon fichier
  • Cliquer sur Open dans la boîte de dialogue de sélection de fichier

Peut-être trouvez-vous que ce n’est pas si terrible que ça, mais pourquoi se compliquer la vie? Voici donc comment faire:

  • Ouvrir Programmer’s Notepad
  • Ouvrir la fenêtre d’options en allant dans Tools / Options
  • Sélectionner Tools dans la structure arborescente
  • Sélectionner (None – Global Tools) dans la liste déroulante Scheme
  • Cliquer sur le bouton Add
  • Entrer les informations suivantes
    • Name: Dolphin
    • Command: D:\emulateur\dolphin\Dolphin.exe
    • Folder: D:\emulateur\dolphin\
    • Parameters: --elf=$(ProjectPath)$(ProjectName).elf
    • Shortcut: Alt + D
    • Save: None
    • Décocher This tool will modify the current file.
  • Cliquer sur OK pour fermer la fenêtre de propriété d’outils
  • Cliquer sur OK pour fermer la fenêtre d’options

Les paramètres Command et Folder doivent être modifiés pour représenter le chemin d’accès à Dolphin sur votre disque dur. Pour Shortcut, j’ai décidé d’utiliser Alt + D, D comme dans Dolphin ou Debug. Si vous être un habitué de la compilation avec F5, ne vous gênez pas pour mettre la touche de raccourci qui fait votre bonheur.
Programmer’s Notepad with Dolphin menu
Pour que cette configuration fonctionne, il va falloir renommer votre projet dans Programmer’s Notepad de la même manière que votre fichier elf. La raison de ceci est que Parameters utilise le symbole spécial $(ProjectName).

Il existe d’autres façons de pouvoir lancer Dolphin à partir de Programmer’s Notepad. Par exemple, il est possible de modifier le fichier Makefile de votre projet pour que le paramètre run démarre Dolphin. L’inconvénient est que vous allez devoir modifier tous les Makefile des projets que vous voulez tester sous Dolphin. Il est beaucoup plus simple de seulement modifier le nom du projet.

J’espère que ce texte vous sera utile.