• Aucun résultat trouvé

Développement d un moteur de jeu vidéo pour la console Nintendo Wii U et portage d un jeu

N/A
N/A
Protected

Academic year: 2022

Partager "Développement d un moteur de jeu vidéo pour la console Nintendo Wii U et portage d un jeu"

Copied!
41
0
0

Texte intégral

(1)

Universit´ e de Franche-Comt´ e Shine Research

Master 2 Informatique Syst` emes Distribu´ es et R´ eseaux M´ emoire de stage de fin d’´ etude

D´ eveloppement d’un moteur de jeu vid´ eo pour la console Nintendo

Wii U et portage d’un jeu

Auteur :

SophieTeixeira

Responsable de stage : Sylvain Grosdemouge Enseignant tuteur : Pierre-Alain Masson

2014

(2)

Remerciements

Je tiens avant tout `a remercier Monsieur Sylvain Grosdemouge pour m’avoir accord´e sa confiance et m’avoir accueilli dans son entreprise. Il a su tout au long de mon stage m’aider et prendre le temps de m’expliquer des concepts de d´eveloppement sp´ecifiques aux jeux vid´eo que je n’avais jamais eu l’occasion d’utiliser.

Je remercie Monsieur RomualdGenevois, le graphiste de Quantic Pin- ball, pour le temps qu’il a pass´e `a me conseiller sur le rendu final du jeu et les images qu’il a cr´e´ees pour la version du flipper sur Wii U.

Merci `a NicolasDiotet Jordan Martin qui ´etaient en stage avec moi pour la bonne ambiance qui a r´egn´e tout au long de ces cinq mois et pour l’aide ponctuelle apport´ee, ainsi qu’`a Bastien Schatt et R´emi Grimmer qui nous ont ensuite rejoints.

Je remercie ´egalement Monsieur Pierre-Alain Masson, mon tuteur de stage, pour ˆetre venu me rendre visite lors de mon stage et pour ses conseils.

Pour finir, j’adresse un remerciement particulier `a Aur´elieSalat, qui a pass´e beaucoup de temps `a m’´epauler et me conseiller tout au long de mon stage et notamment lors de la r´edaction de ce rapport.

(3)

Table des mati` eres

Glossaire 4

Introduction 5

1 Etude du projet´ 9

1.1 Fonctionnement g´en´eral du Shine Engine . . . 9

1.2 La Nintendo Wii U . . . 12

1.3 D´eroulement du stage . . . 14

1.3.1 Impl´ementation du moteur pour la console Wii U . . . 15

1.3.2 Cas concret : le jeu de flipper Quantic Pinball sur la Wii U . . . 15

1.4 Environnement de d´eveloppement . . . 16

2 D´eveloppement du moteur de jeu pour Wii U 17 2.1 Premiers pas du d´eveloppement sur la Wii U avec le Shine Engine . . . 17

2.2 Le syst`eme de fichiers . . . 19

2.3 Les saisies . . . 20

2.4 L’affichage en 2D . . . 21

2.5 Le driver son . . . 23

2.6 Mise en place d’un syst`eme de sauvegarde . . . 24

2.7 Le Home Button Menu . . . 25

2.8 Impl´ementation du compilateur pour les fichiers de la Wii U . 26 3 Quantic Pinball 27 3.1 Le jeu . . . 27

3.2 Les modifications apport´ees . . . 28

3.3 Cr´eation de la version master . . . 31

4 Bilan 32 4.1 Etats du Shine Engine et de Quantic Pinball´ . . . 32

4.2 Probl`emes rencontr´es . . . 32

4.3 Bilan p´edagogique . . . 33

Conclusion 34

Webographie 35

Table des figures 36

Liste des algorithmes 36

Annexes 37

(4)

A Captures d’´ecran du jeu Quantic Pinball 37

(5)

Glossaire

GPU ou Graphics Processing Unit Appel´e en fran¸cais processeur gra- phique, il s’agit d’un circuit int´egr´e pr´esent sur une carte graphique et assurant les fonctions de calcul de l’affichage.

Kit de d´eveloppement ou devkit Mat´eriel servant au d´eveloppement d’ap- plications sur les consoles. C’est une machine avec des caract´eristiques mat´erielles proches de la console associ´ee mais pouvant ˆetre reli´ee `a un ordinateur.

Moteur de jeu Ensemble de composants logiciels permettant la cr´eation de jeux vid´eo. Cela comprend la gestion des graphismes, du son, du syst`eme, de la physique ou encore de l’intelligence artificielle.

Pilote Programme informatique destin´e `a permettre `a un autre programme (dans notre cas, un moteur de jeu) d’interagir avec un p´eriph´erique (dans notre cas, une console).

Plateforme D´esigne une console de jeu, un ordinateur, un t´el´ephone ou tout support sur lequel un jeu peut ˆetre ´edit´e.

Portage Adaptation d’un programme dans un environnement autre que son environnement d’origine.

Primitive Forme de base utilis´ee en informatique graphique. Peut ˆetre par exemple un triangle, une ligne ou encore des points.

SDK Parfois appel´e kit de d´eveloppement en fran¸cais, c’est un ensemble d’outils permettant de d´evelopper des applications de type d´efini.

Shader Programme ex´ecut´e par la carte graphique permettant l’affichage d’images 2D ou 3D en appliquant diff´erentes modifications sur celles-ci.

Sprite El´´ ement graphique dont on peut faire varier la transparence et pou- vant se d´eplacer sur l’´ecran. Tr`es utilis´e dans les jeux vid´eo en deux dimensions.

Wii U GamePad Manette sp´ecifique `a la Nintendo Wii U, poss´edant un

´ecran tactile.

(6)

Introduction

Depuis les ann´ees 1990, le secteur du d´eveloppement de jeux vid´eo s’est industrialis´e de mani`ere `a pouvoir proposer des jeux plus riches et plus complets, ainsi que pour r´eduire le temps de d´eveloppement et donc le temps d’arriv´ee sur le march´e. Cette industrialisation s’est accompagn´ee du d´eveloppement d’outils am´eliorant la productivit´e, `a commencer par les moteurs de jeu (un des premiers moteurs de jeu, celui de Doom par id Software, date du milieu des ann´ees 90), jusqu’`a des ´editeurs sp´ecialis´es, notamment dans la cr´eation de contenu de diverses formes : texte, images, sons, musiques, mod`eles 3D, vid´eos.

Une des caract´eristiques de ces moteurs est leur capacit´e `a pouvoir pro- duire, `a partir d’une mˆeme base de code, le mˆeme jeu sur diverses pla- teformes, permettant d’am´eliorer la diffusion d’un jeu `a moindre coˆut. Il existe deux grandes cat´egories de plateformes : d’un cˆot´e les consoles de jeu de salon (qui sont peu nombreuses et avec des caract´eristiques techniques bien d´etermin´ees mais qui ne peuvent pas ´evoluer), de l’autre cˆot´e l’ensemble des ordinateurs personnels (qui sont tr`es vari´ees mais qui peuvent ´evoluer mat´eriellement). Depuis peu s’y ajoutent les plateformes mobiles (smart- phones et tablettes) ainsi que les navigateurs web.

C’est dans ce contexte que s’inscrit mon stage de fin d’´etudes au sein de l’entreprise Shine Research[4].

Pr´esentation de l’entreprise

Shine Research a ´et´e fond´ee par SylvainGrosdemouge. Il est passionn´e de d´eveloppement de jeux depuis son plus jeune ˆage et a r´ealis´e son premier jeu `a l’ˆage de douze ans. Il travaille dans ce domaine depuis quinze ans, dont neuf ans en tant que responsable d’´equipe, avec au total une quinzaine de jeux finalis´es. Il a effectu´e des missions d’audit et de conseil au niveau international pour le compte de grandes entreprises du monde du jeu vid´eo, comme Bethesda, Ubisoft, Electronic Arts, Koch Media, GSC Game World, Focus Home Interactive ou encore Deck13 et SimBin Studios AB.

Les ann´ees pass´ees `a concevoir et d´evelopper des jeux lui ont permis d’acqu´erir une parfaite connaissance de la chaˆıne de production. Il a ainsi pu isoler les ´etapes coˆuteuses, en temps et en ´energie. Depuis 2005, il d´eveloppe une chaˆıne de production innovante, Shine Engine[3]. En 2009, alors qu’il travaille chez Wizarbox, il arrive `a convaincre son employeur que l’utilisation d’une technologie comme le Shine Engine permettrait de r´eduire les coˆuts de mani`ere significative. Dans le cadre du d´eveloppement du jeu Realms of Ancient War (R.A.W.), il licencie le moteur `a Wizarbox. Il cr´e´e ensuite Shine Research dans le but de continuer le d´eveloppement du Shine Engine.

(7)

Figure 1 – Shine Editor, l’interface de cr´eation de niveaux de jeux Shine Research est une jeune entreprise de d´eveloppement informatique cr´e´ee en 2012 par Sylvain Grosdemouge. Elle est sp´ecialis´ee dans le domaine du jeu vid´eo.

Elle propose une chaˆıne de production multi-plateformes destin´ee aux d´eveloppeurs de jeux vid´eo et de mani`ere plus g´en´erale aux d´eveloppeurs d’applications. Cette chaˆıne de production repose sur deux ´el´ements : le Shine Engine et le Shine Editor. Le Shine Editor est une application qui permet d’´editer des niveaux de jeux via une interface graphique `a partir d’une biblioth`eque d’images 3D ou 2D. La figure 1 montre l’interface de cet

´editeur. Le Shine Engine est le moteur de jeu multi-plateformes d´evelopp´e par l’entreprise, il sera pr´esent´e plus en d´etails dans la partie 1.1. `A l’heure actuelle, Shine Research est agr´e´ee pour d´evelopper sur diff´erentes consoles de salon telles que la Playstation 4 de Sony et la Xbox One de Microsoft.

Depuis le printemps 2013, la soci´et´e est aussi agr´e´ee pour d´evelopper sur deux consoles de Nintendo, la Wii U et la 3DS. Depuis environ un an, la version PC du Shine Engine est utilisable gratuitement pour un usage non commercial.

Ce projet novateur a ´et´e accompagn´e par l’incubateur d’entreprises in- novantes de Franche-Comt´e. SylvainGrosdemouge est laur´eat du R´eseau Entreprendre Franche-Comt´e. La soci´et´e a par ailleurs ´et´e accept´ee en jan- vier 2013 dans BizSpark, le programme d’accompagnement de start-up de Microsoft.

En parall`ele du d´eveloppement du moteur de jeu, Shine Research con¸coit

(8)

des jeux vid´eo en utilisant leur logiciel. Ce d´eveloppement peut ˆetre com- mand´e par un client ou initi´e par l’entreprise elle-mˆeme. La soci´et´e a deux jeux `a son actif actuellement, Paradise Story et Quantic Pinball, qui sont disponibles sur l’AppStore d’Apple et sur le Play Store de Google.

L’ambition de Shine Research est de faire ´emerger en France un acteur incontournable du jeu vid´eo au niveau mondial. L’entreprise souhaite res- ter bas´ee `a Besan¸con, `a proximit´e de l’Universit´e de Franche-Comt´e avec laquelle elle est en collaboration sur plusieurs projets.

Pr´esentation du stage

Dans le cadre de mon stage de fin d’´etudes, j’ai travaill´e sur le Shine Engine. L’objectif est de participer au d´eveloppement d’un pilote de bas niveau int´egr´e au moteur, pour la plateforme Wii U.

Pour ce travail, il faut faire attention `a faire un d´eveloppement qui soit multi-plateformes. Les modifications faites dans le moteur ne doivent en effet pas compromettre son fonctionnement sur les plateformes d´ej`a int´egr´ees et les futures plateformes `a g´erer. Il y a ´egalement beaucoup de d´eveloppement avec des biblioth`eques sp´ecifiques `a la Wii U `a g´erer, pour le rendu, le son, les saisies ou encore le syst`eme de fichiers. Le taux de rafraichissement,

´egalement appel´e nombre d’images par seconde, est tr`es important dans les jeux vid´eo. Il faut que l’application soit fluide et r´eactive. Il est donc tr`es important d’optimiser le code lors du d´eveloppement de ce pilote. Il faut

´egalement faire attention `a la gestion de la m´emoire, celle-ci ´etant limit´ee par la capacit´e de la console.

Une fois les fonctionnalit´es de base impl´ement´ees dans le moteur Shine Engine, nous avons test´e le fruit de notre travail en faisant fonctionner le jeu Quantic Pinball.

Ce stage d’une dur´ee de 20 semaines s’est d´eroul´e du 10 f´evrier au 30 juin 2014.

Dans ce rapport, nous voyons tout d’abord une description plus pr´ecise du moteur Shine Engine ainsi que de la console Wii U et comment le pilote d´evelopp´e s’int`egre au travail d´ej`a existant dans la partie 1.

Nous parlons ensuite de l’int´egration de la Wii U au sein du moteur de jeu, les diff´erentes ´etapes et le travail effectu´e en partie 2. Et nous voyons apr`es cela comment s’est d´eroul´e le portage du jeu Quantic Pinball sur la Wii U et quels changements ont ´et´e faits pour qu’il soit adapt´e `a la console en partie 3.

Finalement, nous faisons un bilan sur le travail effectu´e et les am´eliorations qui seraient encore possibles dans la partie 4.

Pour des raisons de confidentialit´e, aucune biblioth`eque propre `a Nin- tendo n’est nomm´ee dans ce rapport. Il en est de mˆeme pour les logiciels

(9)

aidant au d´eveloppement pour la plateforme Wii U. De plus, aucune cap- ture d’´ecran des logiciels et aucune photographie du kit de d´eveloppement n’apparaˆıt.

(10)

1 Etude du projet ´

Ce projet s’est d´eroul´e dans un cadre bien d´efini ´etant donn´e qu’il s’ins`ere au sein d’une application d´ej`a existante et qu’il concerne une plateforme sp´ecifique. Nous commen¸cons donc par pr´esenter le moteur de jeu Shine Engine dans lequel le travail est int´egr´e ainsi que la console Nintendo Wii U pour laquelle le d´eveloppement est effectu´e. Nous voyons ensuite plus en d´etails les objectifs du stage et nous pr´esentons l’environnement de d´evelop- pement utilis´e.

1.1 Fonctionnement g´en´eral du Shine Engine

Le moteur de jeu d´evelopp´e par Shine Research permet de porter une mˆeme application sur plusieurs plateformes de mani`ere simple pour le d´eve- loppeur. Il pr´esente une interface unique qui est une surcouche aux appels sp´ecifiques des biblioth`eques des diff´erentes plateformes. Ainsi, lorsque l’on veut par exemple lancer un son dans une application, on appellera toujours la mˆeme fonction du moteur de jeu, quelque soit la plateforme sur laquelle on travaille. La fonction au sein du moteur fera appel aux m´ethodes sp´ecifiques

`

a la plateforme concernant la gestion du son. Actuellement, le moteur permet de d´evelopper des applications pour PC, Android, iOS, Xbox 360, Xbox One, Playstation 3 et Playstation 4.

Le moteur est divis´e en plusieurs grandes parties repr´esent´ees dans la figure 2.

La biblioth`eque ShDisplay s’occupe des rendus graphiques de formes simples (primitives), des entit´es de rendu, des cam´eras, de la gestion des collisions, des polices et zones de texte mais ´egalement de tout ce qui est de la gestion du son.

Dans ShDisplayDriver, nous trouvons toutes les structures de base n´ecessaires `a l’affichage telles que le vertex buffer, l’index buffer, les tex- tures, les sprites et les shaders. L’association des vertex buffers et des index buffers est la meilleure mani`ere de stocker des donn´ees pour dessiner des figures. En effet, il faut savoir que les figures sont toutes dessin´ees `a base de triangles. Les vertex buffers sont des buffers en m´emoire qui contiennent les donn´ees de plusieurs vertex, un vertex ´etant un point particulier dans une figure. Les index buffers permettent de stocker les indices des points de la figure pour savoir dans quel ordre les placer et ´eventuellement s’il faut placer plusieurs fois le mˆeme. Prenons un exemple. Lorsque l’on veut des- siner un rectangle, on va en fait dessiner deux triangles coll´es. Plutˆot que de stocker les six points correspondant aux deux triangles, nous n’allons en retenir que quatre puisque deux points sont en commun. C’est l`a que l’index buffer entre en jeu, permettant de savoir dans quel ordre tracer les points pour former la figure souhait´ee. Cela permet d’´economiser de la place en m´emoire en stockant moins de donn´ees. Un exemple est montr´e dans la fi-

(11)

Figure2 – Les diff´erentes biblioth`eques du Shine Engine

gure 3. Un sprite est un ´el´ement graphique qui peut se d´eplacer sur l’´ecran.

Et un shader, que l’on pourrait traduire de mani`ere litt´erale par nuanceur, est un programme ex´ecut´e par la carte graphique. Il permet par exemple de d´ecrire l’absorption et la diffusion de la lumi`ere sur une image, la texture `a utiliser, les r´eflexions ou encore l’ombrage.

Figure 3 – L’association du vertex buffer et de l’index buffer ShFileSystemcomprend les m´ethodes de gestion des syst`emes de fichiers habituelles pour charger, lire ou ´ecrire des fichiers. Elle comprend ´egalement les structures de sauvegarde de fichiers propres au moteur, dont les Big- File qui sont des fichiers contenant d’autres fichiers. On peut par exemple trouver dans un jeu unbigfile contenant tous les fichiers de musique du jeu.

C’est ´egalement dans cette biblioth`eque qu’est impl´ement´e le syst`eme de

(12)

sauvegarde pour les jeux.

Vient ensuite la biblioth`equeShInput. Elle concerne toutes les saisies qui peuvent ˆetre faites par une manette, un clavier ou une souris. Les diff´erents boutons des manettes de chaque console sont repr´esent´es par desenum. Nous utilisons ensuite un tableau pour stocker les valeurs associ´ees `a chacun de ces boutons. Il y a des types diff´erents pour chaque saisie que l’on sou- haite ´ecouter. On peut en effet vouloir savoir si un bouton est juste press´e, maintenu press´e ou relˆach´e. L’algorithme 1 montre l’exemple de l’´ecoute sur bouton A du premierpad, c’est-`a-dire de la premi`ere manette connect´ee. On cr´ee donc unShInputrepr´esentant un ´ev´enementjuste press´esur ce bou- ton, le flottant permettant de savoir `a partir de quelle valeur on consid`ere que le bouton est press´e. La valeur est `a 0.0f si le bouton est compl`etement relˆach´e et `a 1.0f s’il est enfonc´e `a fond, certaines manettes permettant en effet d’avoir des nuances lorsque l’on presse un bouton. Ici, on consid`ere donc que le bouton est press´e s’il est enfonc´e au moins de moiti´e. `A chaque tour de boucle, on va mettre `a jour le manager des saisies, qui se charge de remplir le tableau stockant les valeurs associ´ees aux boutons de la manette, puis on peut v´erifier si notre bouton a ´et´e press´e.

1 ShInput p I n p u t 1 = ShInput : : C r e a t e I n p u t J u s t P r e s s e d (

2 ShInput : : e i n p u t d e v i c e p a d f i r s t ,

3 ShInput : : e i n p u t d e v i c e c o n t r o l w i i u G a m e P a d p a d a ,

4 0 . 5 f ) ;

5

6 bool b I n p u t = f a l s e;

7

8 while ( 1 )

9 {

10 g i n p u t D r i v e r . Update ( 1 . 0 f / 6 0 . 0 f ) ;

11 g i n p u t M a n a g e r . Update ( 1 . 0 f / 6 0 . 0 f ) ;

12 b I n p u t = ShInput : : I s T r u e ( p I n p u t 1 ) ;

13 . . .

14 }

Algorithme 1 – Cr´eation et ´ecoute sur un bouton juste press´e

Le Shine Engine impl´emente ´egalement des fonctions standard afin qu’elles soient multi-plateformes, on les trouve dans les biblioth`equesShScriptTree, ShMathsetShStd.

Vient finalement le ShSDK, qui est l’interface `a toutes les biblioth`eques d´ecrites pr´ec´edemment. C’est principalement aux fonctions de cette biblio- th`eque que nous faisons appel lors du d´eveloppement d’une application, celles-ci servant d’interfaces aux m´ethodes des biblioth`eques plus sp´ecifiques.

Il y a ´egalement ShApplication, qui est la biblioth`eque repr´esentant le d´eroulement d’une application, c’est-`a-dire l’initialisation, le d´eroulement de l’application et finalement la sortie de l’application avec toutes les lib´erations m´emoire. Ces fonctions sont pr´esent´ees dans l’algorithme 2.

(13)

1 v i r t u a l void O n P r e I n i t i a l i z e (void) ;

2 v i r t u a l void I n i t i a l i z e (void) ;

3 v i r t u a l void O n P o s t I n i t i a l i z e (void) ;

4 v i r t u a l void MainLoop (void) ;

5 v i r t u a l void OnPreRelease (void) ;

6 v i r t u a l void R e l e a s e (void) ;

7 v i r t u a l void O n P o s t R e l e a s e (void) ;

Algorithme 2 – Cycle de vie d’une application

Un peu en dehors du moteur de jeu, on trouve deux autres biblioth`eques.

La premi`ere est ShCompiler. Elle contient tous les codes pour compiler les fichiers dans le format sp´ecifique `a chaque plateforme. En effet, la plu- part des consoles, dont la Wii U, ne peuvent pas lire directement un fichier dans un format que l’on aurait l’habitude d’utiliser sur un ordinateur. Les fichiers sons et images notamment doivent ˆetre compil´es dans un format sp´ecifique `a chaque plateforme. Pour faciliter ce traitement, Shine Research d´eveloppe un Assets Compilerqui est une application compilant tous les fichiers g´en´eriques se trouvant dans un dossier pour les avoir dans le format de la plateforme souhait´ee. Les m´ethodes de compilation de ces fichiers se trouvent dans cette biblioth`eque.

La derni`ere biblioth`eque est ShGui. C’est une biblioth`eque propre `a la cr´eation et l’affichage du Shine Editor.

1.2 La Nintendo Wii U

Il existe deux grands types de consoles, les consoles portables et les consoles de salon. Celles-ci n´ecessitent d’ˆetre aliment´ees en permanence et d’ˆetre reli´ees `a un ´ecran de t´el´evision pour jouer. La Wii U est la derni`ere console de salon de Nintendo, sortie en fin d’ann´ee 2012. Cette console a une particularit´e par rapport `a ses concurrentes et par rapport `a la g´en´eration de consoles pr´ec´edentes. C’est en effet la premi`ere console `a ˆetre vendue avec une manette disposant d’un ´ecran tactile, appel´ee GamePad. Cet ´ecran tactile d’environ seize centim`etres de diagonale offre des possibilit´es de jeu et d’utilisation nouvelles. Cela permet d’afficher des donn´ees diff´erentes sur l’´ecran du GamePad par rapport `a ce qui est affich´e sur l’´ecran de la t´el´evision ou encore de pouvoir compl`etement ´eteindre sa t´el´evision pour jouer uniquement avec l’´ecran du GamePad.

La Wii U et cette manette sont illustr´es dans la figure 4.

Les manettes de la Wii U

La plupart des consoles de salon ne proposent qu’un seul type de ma- nette, ce n’est pas le cas de la Wii U.

(14)

Figure4 – La Wii U et son GamePad

Figure5 – Le GamePad

Wii U GamePad Nous avons d´ej`a pr´esent´e rapidement le GamePad, celui-ci ´etant la signature de la Wii U. Une image de cette manette est en figure 5. Nous allons voir plus pr´ecis´ement de quoi il est compos´e :

– Un ´ecran de 6,2 pouces, soit environ 15,75 centim`etres. Il s’agit d’un

´ecran LCD ayant un format d’image en 16 : 9. Cet ´ecran est tactile mono-point, c’est-`a-dire qu’il ne peut d´etecter qu’un seul point de contact `a la fois.

– Deux joysticks analogiques avec bouton cliquable, un `a droite et un `a gauche

– Une croix directionnelle

– Des boutons A, B, X, Y, + et− – Des boutons L, R, ZL, et ZR `a l’arri`ere

– Un acc´el´erom`etre et un gyroscope sur trois axes – Une cam´era frontale

– Un microphone – Des haut parleurs

(15)

– Des moteurs de vibration – Un capteur NFC

Wii Remote et Wii U Pro Controller La Wii U peut ´egalement ˆetre jouable avec la manette de la Wii, appel´ee Wii Remote, et ses accessoires, ainsi qu’avec une autre manette appel´ee le Wii U Pro Controller. Ces ma- nettes sont illustr´ees dans le figure 6.

Composition du Wii U Pro Controller :

– Deux joysticks analogiques avec bouton cliquable, un `a droite et un `a gauche

– Une croix directionnelle

– Des boutons A, B, X, Y, + et− – Des boutons L, R, ZL et ZR `a l’arri`ere – Un moteur de vibration

Composition de la Wii Remote : – Acc´el´erom`etre sur trois axes

– Gyroscope sur trois axes (dans le cas d’une Wii Remote Plus unique- ment)

– Pointeur infra-rouge – Une croix directionnelle

– Un bouton A `a l’avant et un bouton B `a l’arri`ere – Un haut parleur

– Possibilit´e de connecter un accessoire, dont :

→ Le Nunchuk, poss´edant : – Acc´el´erom`etre sur trois axes – Un joystick analogique

– Deux boutons C et Z `a l’arri`ere

→ Le Classic Controller, poss´edant :

– Deux joysticks analogiques avec bouton cliquable, un `a droite et un `a gauche

– Une croix directionnelle

– Des boutons A, B, X, Y, + et− – Des boutons L, R, ZL et ZR `a l’arri`ere

Une Wii U peut avoir jusqu’`a six manettes connect´ees en mˆeme temps, comprenant au plus deux GamePad et quatre autres manettes parmi les Wii Remote et les Wii U Pro Controller.

1.3 D´eroulement du stage

Mon stage s’est d´ecoup´e en deux grandes parties. J’ai tout d’abord impl´ement´e les principales fonctionnalit´es du moteur de jeu permettant de faire fonctionner une application sur la console Wii U. J’ai ensuite port´e un jeu impl´ement´e par Shine Research pour les smartphones l’ann´ee pass´ee afin qu’il soit optimal sur cette console.

(16)

Figure 6 – Les autres manettes de la Wii U 1.3.1 Impl´ementation du moteur pour la console Wii U

Cette partie est la plus importante du stage, aussi bien en terme de dur´ee que de difficult´e. Il s’agit de relier toutes les fonctions pr´esentes dans le moteur de jeu Shine Engine aux fonctions du SDK de la Wii U, kit de d´eveloppement de la Nintendo Wii U. L’objectif est de pouvoir cr´eer une application compl`ete pour la Wii U en utilisant le SDK du Shine Engine. Il faut donc impl´ementer chacune des parties de ce SDK, incluant la gestion du syst`eme de fichiers, des saisies, du rendu graphique, du son ou encore des sauvegardes.

Il est parfois n´ecessaire d’adapter le SDK du Shine Engine afin de per- mettre aux utilisateurs d’acc´eder `a des fonctionnalit´es qui ne sont pr´esentes que sur la Wii U, ou qui ne sont pas uniformisables entre toutes les plate- formes.

Le d´eveloppement pour une console impose ´egalement de suivre quelques r`egles propres `a la plateforme impos´ees par le constructeur. Il faut donc lire les recommandations dict´ees par Nintendo et veiller `a toutes les respecter, sinon les applications produites avec le Shine Engine ne seront pas accept´ees pour la commercialisation.

1.3.2 Cas concret : le jeu de flipper Quantic Pinball sur la Wii U Une fois que le moteur de jeu est fonctionnel sur la Wii U, nous avons travaill´e sur le jeu Quantic Pinball pour la Wii U. Ce jeu nous a permis de tester les fonctionnalit´es impl´ement´ees dans le moteur de jeu. Si le Shine En- gine permet de faire un code fonctionnel sur toutes les plateformes g´er´ees par celui-ci, il est judicieux dans notre cas de changer quelques fonctionnalit´es du jeu. En effet, ce jeu a ´et´e d´evelopp´e dans l’optique d’ˆetre commercialis´e sur smartphone et tablette. L’affichage du jeu se fait donc en mode portrait et les saisies sont g´er´ees par l’´ecoute des appuis sur un ´ecran tactile.

Pour que le jeu soit plus adapt´e `a une console, il faut changer l’affichage pour qu’il soit optimal sur un ´ecran de t´el´evision. Il faut ´egalement faire en sorte que les saisies soient g´er´ees par des manettes.

(17)

1.4 Environnement de d´eveloppement

Les d´eveloppements du moteur ainsi que du jeu se sont faits en C++ sous le syst`eme Windows 7 et avec l’environnement de d´eveloppement Microsoft Visual Studio 2010.

Pour la gestion des versions de d´eveloppement, nous avons utilis´ePerforce[7]

et l’interface utilisateurP4V[6]. L’avancement des tˆaches du projet a ´et´e ef- fectu´e avec Trello[5], qui est un outil de gestion de projet en ligne.

Divers logiciels sp´ecifiques au d´eveloppement avec une Wii U ont ´et´e n´ecessaires, ils seront d´etaill´es dans la partie suivante.

(18)

2 D´ eveloppement du moteur de jeu pour Wii U

Nous allons maintenant voir comment le pilote pour la Wii U a ´et´e mis en place dans le Shine Engine. Il y a tout d’abord eu plusieurs configurations

`

a faire avant de pouvoir commencer `a travailler sur la Wii U, puis nous avons pu commencer `a int´egrer partie par partie le pilote. Un compilateur pour g´en´erer les fichiers dans un format compatible avec la console a ´egalement

´et´e d´evelopp´e.

2.1 Premiers pas du d´eveloppement sur la Wii U avec le Shine Engine

Pour d´evelopper des applications pour la console Wii U, nous avons be- soin de mat´eriel et de logiciels particuliers. Cˆot´e mat´eriel, il est n´ecessaire de poss´eder un kit de d´eveloppement, commun´ement appel´e devkit. Il n’est pas tout `a fait identique `a une console Wii U disponible `a la vente. Son ap- parence est beaucoup plus simple et il poss`ede plusieurs LED pour indiquer les ´etats du kit. La principale diff´erence est qu’il ne poss`ede pas de lecteur de disques int´egr´e. Il est reli´e `a un ordinateur hˆote grˆace `a un switch et des liaisons Ethernet. L’ordinateur et le kit de d´eveloppement pourront ainsi communiquer dans les deux sens en permanence, l’ordinateur servant alors de syst`eme de fichiers pour la console. Il permet d’avoir des informations de debug affich´es dans une console lors de l’ex´ecution d’une application. Le kit est ´egalement reli´e `a un ´ecran de t´el´evision en HDMI sur lequel il y a l’af- fichage et le son des applications. Toutes les manettes de la Wii U peuvent ˆetre utilis´ees sur le kit de d´eveloppement. Une illustration des composants mat´eriels est faite en figure 7.

Figure 7 – Les composants mat´eriel n´ecessaires au d´eveloppement En plus du mat´eriel, plusieurs logiciels sont n´ecessaires. Il est tout d’abord n´ecessaire de t´el´echarger le System Development Kit (SDK) de la Wii U.

(19)

Celui-ci contient les biblioth`eques, les pilotes et toute la documentation n´ecessaire `a la prise en main du SDK. Il y a ´egalement plusieurs sources de d´emonstrations d’application pour la Wii U, montrant l’utilisation des diff´erentes biblioth`eques.

Il est ´egalement n´ecessaire d’installer Cygwin, un environnement de ligne de commandes pour Windows, qui permet d’utiliser de nombreuses com- mandes propres au d´eveloppement pour la Wii U.

Pour configurer le kit de d´eveloppement et le connecter `a l’ordinateur hˆote, nous avons besoin d’un logiciel faisant le pont entre l’ordinateur hˆote et ledevkit. `A l’installation de ce dernier, nous sp´ecifions l’adresse MAC de la console, qui est une adresse unique sp´ecifique `a chaque kit, pour qu’il puisse trouver et sauvegarder l’adresse IP de la console. Il est important de faire attention `a ce que l’adresse du kit reste inchang´ee et ne soit pas r´eattribu´ee plus tard, sans quoi il serait n´ecessaire de reconfigurer la connexion `a chaque changement d’adresse.

Une fois que tout l’environnement a ´et´e mis en place pour pouvoir com- muniquer avec ledevkitet d´evelopper avec le SDK de la Wii U, nous avons pu nous concentrer sur l’int´egration de la Wii U dans le moteur de jeu Shine Engine.

Dans un premier temps, nous avons d´ecid´e de travailler sur une ap- plication tr`es simple qui ne fait qu’afficher deux ronds blancs sur l’´ecran.

Elle permettait de se concentrer sur la plupart des fonctionnalit´es de base n´ecessaires, comme la gestion du syst`eme de fichier et les affichages en 2D.

L’application a ´et´e configur´ee dans Visual Studio pour sp´ecifier qu’elle devait faire appel aux fonctions de la Wii U.

Tous les jeux sont architectur´es de la mˆeme mani`ere. Il y a tout d’abord toute une s´erie d’appels `a des fonctions d’initialisation de structures et bi- blioth`eques, puis la boucle principale de jeu et finalement la lib´eration de tout ce qui a ´et´e allou´e en m´emoire. La boucle de jeu est l’´el´ement central.

En effet, dans des applications telles que les jeux vid´eos, on ne peut pas se contenter d’attendre un ´ev´enement ou une action de l’utilisateur. L’appli- cation va ˆetre constamment en activit´e, animant des images ou g´erant des sons par exemple. Cette boucle de jeu est donc une boucle infinie compos´ee de trois grandes fonctions dans le Shine Engine : Update,Render et Flip.

DansUpdate, toutes les structures sont mises `a jour, elle est responsable de la gestion du code du jeu. La m´ethodeRenderquant `a elle correspond `a la mise `a jour de l’affichage du nouvel ´etat de l’application. Et finalement, la fonctionFlip envoie ces mises `a jour `a la console.

Le premier objectif a ´et´e de r´eussir `a rentrer dans la boucle principale de jeu. Pour cela, nous avons choisi de commenter dans un premier temps toutes les fonctions qui bloquaient l’application car elles n’´etaient pas en- core impl´ement´ees. Finalement, nous sommes arriv´es `a une application qui rentrait dans une boucle infinie en ne faisant rien.

(20)

2.2 Le syst`eme de fichiers

La premier travail effectu´e a ´et´e l’impl´ementation de la gestion du syst`eme de fichiers. La Wii U poss`ede en fait deux biblioth`eques pour g´erer les fi- chiers, une interface g´en´erale et une interface sp´ecifique `a la sauvegarde de donn´ees. Dans un premier temps, nous ne nous sommes occup´es que des acc`es aux fichiers ne concernant pas la sauvegarde.

La biblioth`eque permettant de g´erer le syst`eme de fichiers de la Wii U permet d’utiliser des fichiers textes ainsi que des fichiers binaires. Il est possible de faire les op´erations de base sur le syst`eme de fichiers de la Wii U :

– Ouvrir un fichier en lecture, ´ecriture ou ajout – Lire un fichier

– ´Ecrire dans un fichier – Ajouter dans un fichier – Se positionner dans un fichier

– Obtenir les informations d’un fichier (permissions, taille, possesseur...) – Supprimer un fichier (seulement s’il n’est pas ouvert)

– Fermer un fichier – Ouvrir un dossier

– Lire un dossier (obtenir la prochaine entr´ee dans ce dossier)

– Supprimer un dossier (seulement s’il n’est pas ouvert et si son contenu est vide)

– Fermer un dossier

Lors du d´eveloppement d’une application avec le kit de d´eveloppement de la Wii U, le syst`eme de fichiers peut se trouver `a deux localisations diff´erentes, sur la console ou sur l’ordinateur hˆote. Il est possible de passer de l’un `a l’autre, chacun pr´esentant des avantages comme des inconv´enients.

Dans le cas o`u le syst`eme de fichiers pris en compte est celui de la console, le chargement des fichiers est rapide. Mais pour tester les applications que l’on d´eveloppe, il est n´ecessaire de copier tous les fichiers utilis´es sur ledev- kit, les images, les fichiers son ou encore les fichiers de configuration lus par l’application, mais aussi l’application compil´ee. Dans un processus de d´eveloppement, cette pratique peut vite devenir contraignante. Au moindre changement dans un fichier, il faut recompiler toute l’application et la rem- placer sur le kit de d´eveloppement. Ce transfert peut parfois ˆetre un peu long.

Si le kit utilise le syst`eme de fichiers de l’ordinateur pour ´emuler le syst`eme de fichiers de la console. Il devient alors plus facile de faire des modi- fications dans les fichiers n´ecessaires `a l’application. La capacit´e de stockage des fichiers est ´egalement consid´erablement augment´ee, puisqu’elle devient

´egale `a celle de l’ordinateur. En revanche, lorsque la console doit charger un fichier, par exemple pour afficher une image, elle doit aller le chercher sur l’ordinateur et le t´el´echarger. Les temps de chargement deviennent donc beaucoup plus longs.

(21)

Lorsque le devkit est d´emarr´e ind´ependamment de l’ordinateur, il peut ˆetre configur´e pour utiliser l’un ou l’autre des syst`emes de fichiers. En re- vanche, lorsqu’il est d´emarr´e via l’ordinateur, en ex´ecutant l’application dans Visual Studio par exemple, c’est toujours le syst`eme de fichiers de l’ordina- teur qui est utilis´e pour simuler celui de la console. Durant la plus grande partie du d´eveloppement, le syst`eme de fichiers utilis´e est donc celui de l’ordinateur car cela reste le plus simple et le plus rapide.

Toutes les m´ethodes ayant un acc`es au syst`eme de fichiers ont trois ar- guments en commun : un pointeur sur un client, un pointeur sur un bloc de commande et une variable qui est un indicateur permettant de r´ecup´erer les ´eventuelles erreurs. Un client est une entit´e qui va avoir acc`es aux fi- chiers, il est n´ecessaire de cr´eer au moins un client. Il y a une limite maxi- male au nombre de clients simultan´es enregistr´es, qui est de 64 clients. Un bloc de commande est une commande comme par exemple ”ouvrir le fichier text.txt en lecture”. Chaque client poss`ede ensuite une file de commandes repr´esentant les acc`es qu’il souhaite faire. Et le syst`eme va ex´ecuter ces commandes une `a une. La figure 8 illustre ce proc´ed´e. Et chaque m´ethode interagissant avec le syst`eme de fichiers va ´ecrire dans un indicateur d’erreur.

Cet indicateur peut prendre plusieurs valeurs : – Pas d’erreur

– Fichier d´ej`a ouvert – Fichier d´ej`a existant – Fichier non trouv´e

– Le chemin ne correspond pas `a un fichier – Le chemin ne correspond pas `a un dossier – Erreur d’acc`es

– Erreur de permission – Fichier trop gros – M´emoire pleine

– Erreur de commande (op´eration non support´ee par le syst`eme) 2.3 Les saisies

La console Wii U supporte de nombreuses manettes diff´erentes et avec des fonctionnalit´es bien particuli`eres par rapport aux autres consoles. Diff´eren- tes biblioth`eques sont n´ecessaires `a leur gestion. Pour notre int´egration dans le moteur de jeu, nous avons utilis´e deux biblioth`eques diff´erentes pour la gestion des manettes. L’une d’entre elle est propre au Wii U GamePad, l’autre est commune aux autres manettes.

En ce qui concerne le GamePad, il est ´egalement possible de g´erer la cam´era et le microphone. Mais nous ne nous sommes pas attard´es sur ces fonctionnalit´es durant le d´eveloppement du moteur, elles pourront ˆetre int´egr´ees par la suite. Nous nous sommes en revanche int´eress´es `a la lecture de l’´etat des boutons (press´es ou relˆach´es) ainsi que les contacts sur l’´ecran tactile. Il

(22)

Figure 8 – Listes de demandes provenant de plusieurs clients au syst`eme de fichiers

est ´egalement possible de connaˆıtre l’´etat du gyroscope et de l’acc´el´erom`etre, et de g´erer les vibrations de la manette.

La Wii Remote, ses accessoires et le Wii U Pro Controller sont toutes g´er´ees par les mˆemes biblioth`eques. Celles-ci permettent, de mani`ere simi- laire `a la biblioth`eque pour le GamePad, de connaˆıtre l’´etat des boutons, des gyroscopes et acc´el´erom`etres d’une manette `a un moment donn´e. Pour ces manettes, il existe deux biblioth`eques, une biblioth`eque de bas niveau qui permet de g´erer la connexion des manettes et d’aller sonder l’´etat, et une biblioth`eque de plus haut niveau qui est bas´ee sur la premi`ere et qui l’encap- sule pour la rendre plus simple d’utilisation et ajouter des fonctionnalit´es suppl´ementaires.

Au lancement d’une application, il faut initialiser les biblioth`eques de gestion des saisies afin de r´ecup´erer l’´etat des manettes. Le GamePad est automatiquement allum´e et synchronis´e avec la Wii U au d´emarrage de la console sans qu’il soit n´ecessaire de faire quoi que ce soit de particulier.

En revanche, pour les autres manettes, il est n´ecessaire de faire appel `a une fonction de synchronisation pour que la console cherche si des manettes sont actuellement allum´ees et en attente de synchronisation. Nous faisons appel

`

a cette fonction `a chaque d´emarrage d’une application.

A chaque tour de la boucle de jeu, l’application va mettre `` a jour l’´etat des manettes. Les m´ethodes de sondage renvoient une structure compl`ete repr´esentant l’´etat de tous les boutons et autres capteurs des manettes.

Nous r´ecup´erons par la suite les informations contenues dans cette structure pour mettre `a jour les donn´ees stock´ees dans le moteur.

2.4 L’affichage en 2D

Apr`es l’impl´ementation des saisies pour les diff´erentes manettes, nous nous sommes int´eress´es `a l’affichage et donc au d´eveloppement des fonctions

(23)

de ShDisplayDriver pour la Wii U. Le GPU de la Wii U est bas´e sur les processeurs graphiques de la s´erie Radeon utilisant Direct3D en version 10.1 et OpenGL 3.3. Nintendo dispose d’une biblioth`eque propre `a ses consoles pour les processeurs graphiques.

La premi`ere ´etape est l’initialisation de toutes les structures et donn´ees qui vont ˆetre n´ecessaires `a l’affichage. Pour l’affichage, nous avons besoin d’uncolor buffer dans lequel la couleur des pixels de l’´ecran va ˆetre stock´ee et d’un depth buffer dans lequel la profondeur des pixels affich´es va ˆetre stock´ee. Il faut bien sˆur allouer en m´emoire toutes les structures, mais il faut

´egalement faire des initialisations qui sont plus sp´ecifiques au d´eveloppement pour une console. Nous r´ecup´erons par exemple le mode de rendu de la t´el´evision `a laquelle est branch´e le kit de d´eveloppement. Cela nous permet de savoir la qualit´e graphique maximale que nous pourrons obtenir, c’est-`a- dire le nombre de pixels que nous pouvons afficher `a l’´ecran au maximum.

Dans le cas de la Wii U, il est ´egalement n´ecessaire de r´ecup´erer le mode de rendu de l’´ecran du GamePad, mˆeme si celui-ci est toujours le mˆeme pour toutes les Wii U. Il est possible de choisir d’afficher des images `a une qualit´e inf´erieure `a la qualit´e optimale de l’´ecran, mais il est ´evidemment impossible d’en afficher `a une qualit´e sup´erieure.

Dans le cas de la Wii U, nous avons donc deux contextes d’affichage, deux

´ecrans, celui de la t´el´evision et celui du GamePad. Il est possible d’afficher des images diff´erentes sur ces deux ´ecrans, ils ont donc chacun leurs donn´ees qui sont ind´ependantes l’une de l’autre. Lors de l’affichage, l’application se place dans un contexte (t´el´evision ou GamePad) avant de faire appel `a une fonction du GPU afin de faire le rendu sur l’´ecran souhait´e.

Nous avons tout d’abord travaill´e sur une application se contentant de dessiner un simple triangle sur un fond de couleur. Cela nous a permis d’impl´ementer la plupart des m´ethodes n´ecessaires `a l’affichage d’objets avant de travailler sur une plus grosse application telle qu’un jeu complet.

Avant d’afficher les objets, nous d´efinissons la couleur du fond de l’´ecran. Il faut ensuite d´efinir le contexte dans lequel nous nous pla¸cons pour dessiner puis remplir les diff´erents buffers n´ecessaires `a l’affichage de notre image.

Le GPU va dessiner deux triangles accol´es pour former un rectangle, puis placer une texture par dessus et finalement le shader pourra apporter les modifications de rendu le cas ´ech´eant. La figure 9 illustre de quelle mani`ere une image est dessin´ee sur cette base de deux triangles dans le menu du jeu Quantic Pinball.

Il a donc fallu se pencher sur l’´ecriture de shaders pour la Wii U. Norma- lement, plusieurs shaders diff´erents sont utilis´es pour une seule application.

Mais ´etant donn´e que nous avons d´ecid´e de nous concentrer uniquement sur une application en deux dimensions, un seul shader sera suffisant. Notre sha- der est compos´e d’un vertex shader et d’un pixel shader. Le vertex shader permet de transformer la position d’un vertex dans un rep`ere qui repr´esente

(24)

Figure 9 – Dessin d’une image sur une base de deux triangles reli´es en triangle strip

le monde au sein de notre jeu tel qu’il apparaˆıt `a l’´ecran. Lesvertex shaders permettent de manipuler des propri´et´es telles que la position, la couleur et les coordonn´ees d’une texture mais ne permettent pas de cr´eer de nouveau vertex. Unpixel shader, parfois appel´efragment shader, calcule la couleur et les autres attributs de tous les pixels. Le plus simple despixel shaders affiche juste une couleur comme pixel `a l’´ecran, mais il peut ´egalement modifier la transparence, l’ombrage ou accentuer une lumi`ere.

Les shaders sont programm´es dans un langage qui leur est propre et qui est d´ependant de l’environnement sur lequel ils doivent s’ex´ecuter. Il existe deux grands langages, les plus r´epandus.OpenGL Shading Langage, appel´e GLSL, est le langage officiel d’OpenGL et OpenGL ES. Il y a ´egalement le langage officiel de Direct3D, qui estHigh Level Shader Language, ´egalement connu sous le nom HLSL. Dans notre cas, nous avons d´evelopp´e le shader en GLSL.

Il est important de noter que Nintendo fourni un logiciel permettant d’analyser toutes les m´ethodes ex´ecut´ees par le GPU. C’est un outil d’ana- lyse de donn´ees, souvent appel´e profiling, qui s’av`ere tr`es vite indispensable lors du d´eveloppement d’un jeu. Il permet de voir si on ne fait pas appel `a des m´ethodes superflues et offre ´egalement la possibilit´e de savoir combien de millisecondes sont n´ecessaires `a chaque m´ethode pour trouver les plus coˆuteuses. Grˆace `a ce logiciel, nous pouvons aussi v´erifier le contenu des divers buffers `a chaque ´etape de l’affichage d’un ´ecran de jeu.

2.5 Le driver son

Pour la gestion du son, le travail s’est fait sur deux classes. La premi`ere classe d´efinit une voix. Une voix est une musique ou de mani`ere plus g´en´erale un son. Il peut ˆetre jou´e en boucle ou non et on peut sp´ecifier le volume de chaque voix ind´ependamment. Chaque voix est sur son propre canal, de telle

(25)

mani`ere qu’on peut jouer plusieurs sons en mˆeme temps. La seconde classe sert `a la gestion de toutes les voix et permet d’initialiser la biblioth`eque de son.

La Wii U dispose de plusieurs biblioth`eques pour le syst`eme de sons.

Une seule biblioth`eque nous est n´ecessaire, les autres ajoutant uniquement des fonctionnalit´es `a celle-ci. Nous avons choisi de ne rendre les sons que sur la t´el´evision et le GamePad, bien qu’il soit ´egalement possible de rendre des sons sur les Wii Remotes ´egalement. Ce choix a ´et´e bas´e en fonction du jeu Quantic Pinball qui ´etait notre objectif `a la fin du stage.

Pour jouer un son, il faut d’abord charger le fichier dans la m´emoire de la console. Ensuite, la biblioth`eque va acqu´erir une voix `a partir de ce fichier. On commence par d´efinir l’adresse m´emoire d’une voix. On peut ensuite choisir le volume de cette voix ainsi que sa tonalit´e et sp´ecifier si l’on souhaite qu’elle s’arrˆete `a la fin de la lecture ou qu’elle red´emarre. La figure 10 illustre les diff´erentes ´etapes du rendu d’un son.

Figure 10 – ´Etapes pour le rendu du son 2.6 Mise en place d’un syst`eme de sauvegarde

Difficile d’envisager un jeu sans syst`eme de sauvegarde pour stocker les progressions du joueur. Il ´etait donc indispensable d’impl´ementer cela dans le moteur de jeu. Il existait d´ej`a deux classes tr`es simples avec une m´ethode de sauvegarde et une m´ethode de chargement utilis´ees pour les syst`emes Android et iOS, mais elles ´etaient trop simplistes pour la Wii U. Nous avons donc cr´e´e toute une structure pour g´erer les sauvegardes dans l’optique qu’elle soit r´eutilisable par toutes les plateformes par la suite. Elle est com- pos´ee d’une interface commune avec les fonctions usuelles d’initialisation et lib´eration ainsi que les m´ethodes de chargement et sauvegarde. Ces m´ethodes sont ensuite impl´ement´ees de mani`ere sp´ecifique pour chaque plateforme.

(26)

Pour sauvegarder sur la Wii U, il faut prendre en compte la notion d’uti- lisateur. Il est possible de cr´eer plusieurs comptes d’utilisateurs sur Wii U, chacun avec son propre identifiant Nintendo Network. Ainsi, chaque utilisa- teur peut disposer de son propre identifiant et l’utiliser sur Wii U. Chaque jeu doit ´egalement ˆetre sauvegard´e dans un r´epertoire qui lui est r´eserv´e.

Nous disposons de deux biblioth`eques pour la gestion des sauvegardes, la premi`ere permet de r´ecup´erer les informations concernant les comptes utili- sateurs et la seconde concerne la gestion des donn´ees sauvegard´ees.

Au d´ebut d’une partie, on commence par r´ecup´erer l’identifiant unique du compte du joueur. Ensuite, on se place dans le r´epertoire correspondant au jeu et `a l’utilisateur courant ou bien on le cr´ee si c’est la premi`ere fois que l’on doit sauvegarder `a cet endroit. La lecture et l’´ecriture d’un fichier de sauvegarde se base sur des appels `a des fonctions d’acc`es au syst`eme de fichiers que nous avons d´ecrites pr´ec´edemment dans la partie 2.2. Pour sauvegarder, nous copions le contenu de la pr´ec´edente sauvegarde, le cas

´ech´eant, dans un fichier temporaire puis nous cr´eons un nouveau dossier dans lequel nous ´ecrivons toutes les donn´ees n´ecessaires. Il est effectivement conseill´e de supprimer tous les anciens fichiers et de les recr´eer plutˆot que d’´ecraser l’ancien contenu avec du nouveau. De mˆeme, il est recommand´e de pr´ef´erer la cr´eation de peu de fichiers de sauvegarde volumineux plutˆot que de plus petits fichiers en grand nombre.

A la fin d’une partie, il faut bien faire attention `` a fermer les fichiers qui ont ´et´e ouverts pour la sauvegarde afin de ne pas perdre de donn´ees.

2.7 Le Home Button Menu

Lorsqu’on est en train de jouer `a la Wii U, il est possible d’afficher un menu en appuyant sur le bouton HOME pr´esent sur toutes les manettes. Ce menu s’appelle le Home Button Menu, ou plus simplement le Home Menu, il est illustr´e en figure 11. L’impl´ementation de la gestion de ce menu est un

´el´ement incontournable pour le d´eveloppement sur la Wii U.

Lorsqu’on lance une application sur la console, celle-ci s’affiche en pre- mier plan, appel´eforeground, pendant que diff´erents outils syst`emes continus de s’ex´ecuter en arri`ere plan (background). La Wii U poss`ede un processeur tri-cœur et chacun de ces cœurs peut ex´ecuter une tˆache diff´erente, en arri`ere plan ou au premier plan. Lorsque le bouton HOME est press´e, il faut envoyer le jeu en cours d’ex´ecution `a l’arri`ere plan afin que le menu puisse prendre la place au premier plan et s’afficher sur les ´ecrans de la t´el´evision et du GamePad.

Lors d’un appui sur le bouton HOME, le syst`eme envoie un message particulier `a l’application en cours d’ex´ecution. Il est n´ecessaire d’´ecouter en permanence les messages qui sont envoy´es par le syst`eme de la console.

D`es que l’on re¸coit un message, il faut en identifier le type et le traiter en cons´equence. Dans le cas d’un appui sur le bouton HOME, il faut rendre

(27)

Figure 11 – Le Home Button Menu

le premier plan sur au moins deux des trois cœurs du processeur. Le menu aura alors la possibilit´e de s’afficher.

D’autres types de messages peuvent ˆetre envoy´es par le syst`eme, tels qu’une demande de mise en veille de la console. Ces messages sont ´egalement r´eceptionn´es par l’application qui r´eagit selon la demande.

2.8 Impl´ementation du compilateur pour les fichiers de la Wii U

Tout au long du d´eveloppement de l’int´egration de la Wii U au sein du Shine Engine, il a ´et´e n´ecessaire de compiler des fichiers dans un format propre `a la Wii U. C’est dans ce but que le ShAssetCompiler a ´et´e cr´e´e.

Cette application permet de compiler des fichiers d’images, de shaders ou encore de sons dans le format sp´ecifique `a la plateforme cible.

Nintendo propose des applications ex´ecutables en ligne de commandes afin de convertir des fichiers dans le format lisible pour la console. Il a donc

´et´e ajout´e au ShAssetCompilerla possibilit´e de compiler des fichiers pour la Wii U afin d’automatiser ce proc´ed´e. Le compilateur se place dans un dossier g´en´erique contenant tous les fichiers d’un jeu aux formats utilis´es habituellement pour les ordinateurs (wavpour le son ettgapour les images par exemple), puis dans le sous dossier correspondant au type de fichiers qu’il s’apprˆete `a compiler. Il existe par exemple un sous dossier Audiodans lequel se trouvent tous les sons. L’application va alors parcourir tout ce dossier et r´ecup´erer les fichiers s’y trouvant pour ex´ecuter la commande de compilation propre `a la plateforme sur chacun d’eux.

La compilation des fichiers son ainsi que celle des fichier images ont ´et´e int´egr´ees.

(28)

3 Quantic Pinball

Une fois que le moteur de jeu a permis d’avoir une application fonction- nelle sur la Wii U, nous avons test´e notre travail avec le jeu Quantic Pinball en effectuant un portage pour la console. Il a fallu faire quelques modifi- cations que nous d´ecrivont ici afin que le jeu soit facilement jouable sur la console. Nous pr´esentons finalement le processus de soumission d’un jeu que nous avons suivi une fois que les modifications souhait´ees ont ´et´e effectu´ees.

Mais commen¸cons tout d’abord par une pr´esentation de Quantic Pinball.

3.1 Le jeu

Quantic Pinball est un jeu de flipper futuriste. La particularit´e de ce flipper est son style r´etro avec la pr´esence de Space Invaders qui envahissent l’´ecran dans plusieurs modes de jeu. Il propose dix modes de jeu diff´erents, sept tables jouables ainsi qu’un niveau sp´ecial sans fin. Chaque mode de jeu dure trente secondes et poss`ede un but et une jouabilit´e diff´erente :

Blackout L’´eclairage s’´eteint sur la table de jeu. Seul un halo de lumi`ere autour des billes subsiste.

Mystery Un seul ´el´ement dans la table est actif. Cela peut ˆetre un bumper ou un couloir. Il faut activer cet ´el´ement pour valider le mode.

Sniper Les couleurs sont allum´es tour `a tour. Il faut viser les couloirs dans l’ordre indiqu´e.

Warp sector Des portails de t´el´eportation apparaissent dans la table. Si une bille passe dans un portail, elle est t´el´eport´ee `a un autre endroit dans la table.

Magnetic Des tourbillons magn´etiques modifient fortement la trajectoire de la bille lorsqu’elle s’en approche.

Multi ball Plusieurs billes sont jouables en mˆeme temps.

Iron storm Un grand nombre de billes apparaissent et sont jouables en mˆeme temps.

Smash Up Plusieurs bumpers suppl´ementaires sont cr´e´es au milieu de la table.

Spiders Des araign´ees dans le style r´etro font leur apparition et il faut les exploser en les touchant avec la bille.

Kill ’em all Les deux flips se transforment en un canon tirant en rafale alors que des envahisseurs de l’espace descendent le long des rampes.

Il faut tous les exterminer avant qu’ils n’atteignent le bas de la table.

Actuellement, Quantic Pinball est disponible `a la vente pour les appareils Android[1] et iOS[2].

(29)

3.2 Les modifications apport´ees

Le jeu ayant ´et´e d´evelopp´e dans l’optique d’ˆetre distribu´e sur des ter- minaux mobiles, il n’´etait graphiquement et fonctionnellement pas optimal pour ˆetre jou´e avec une manette en ´etant affich´e sur une t´el´evision.

Du cˆot´e de l’affichage, la principale modification `a faire vient du fait que les ´ecrans de smartphones et les ´ecrans de t´el´evision n’ont pas la mˆeme orientation, les premiers ´etant en portrait et les seconds en paysage. Ainsi, au d´epart le jeu s’affichait au centre de l’´ecran avec deux grandes bandes noires de chaque cˆot´e. Nous avons donc mis en place un nouveau fond d’´ecran dans le menu pour qu’il prenne toute la largeur de l’´ecran. Ce fond d’´ecran apparait dans le menu principal, illustr´e dans la figure 12 ainsi que dans tous les sous menus. Il est anim´e et consiste en cent images d’une ville qui d´efile

`

a l’arri`ere plan. Nous avons ´egalement d´ecid´e d’ajouter des petites images repr´esentant les boutons A et B des manettes sur les diff´erentes pages ainsi qu’un halo lumineux autour du menu s´electionn´e pour faciliter la prise en main.

L’´ecran permettant la saisie d’un pseudonyme de jeu a ´egalement ´et´e mo- difi´e. En effet, il reposait sur la fonctionnalit´e tactile des ´ecrans de smart- phones pour s´electionner les lettres. Le joueur utilisant une manette sur console, nous avons rajout´e un fond blanc pour marquer la lettre s´electionn´ee pour que le joueur se rep`ere.

Figure12 – Menu principal de Quantic Pinball Wii U

Pour cette version, nous avons ´egalement d´ecid´e d’int´egrer deux nou- veaux ´ecrans apr`es avoir s´electionn´e le niveau que l’on souhaite jouer. Tout d’abord, nous affichons un ´ecran repr´esentant la manette actuellement uti-

(30)

Figure13 – ´Ecran d’affichage des commandes de jeu pour le GamePad lis´e ainsi que les actions associ´ees aux touches de cette manette. Cet ´ecran avec comme manette courante le GamePad est illustr´e en figure 13. Il est diff´erent selon la manette connect´ee, il en existe quatre variantes : une avec le GamePad, une avec la Wiimote seule, une avec la Wiimote et un Nunchuk et une avec la manette Wii U Pro Controller.

Le second ´ecran est un ´ecran de tutoriel. Il sert `a expliquer le fonctionne- ment du jeu et `a quoi chacune des zones correspond. Cet ´ecran n’est affich´e que les trois premi`eres fois qu’un mˆeme utilisateur joue `a un niveau, il n’ap- paraˆıt plus par la suite. Le nombre de parties jou´ees par un utilisateur est stock´e dans son fichier de sauvegarde.

Les deux nouveaux ´ecrans ont ´et´e cr´e´es `a l’aide du Shine Editor, qui nous permet de positionner les ´el´ements tr`es facilement et rapidement. La figure 14 montre la cr´eation du niveau affichant le tutoriel dans l’´editeur.

Les textes affich´es sont dans des text zone. Ceci nous permet de pouvoir g´erer l’internationalisation du jeu. En effet, unetext zone est d´efinie par un mot clef qui permet ensuite d’aller chercher le texte `a afficher dans un fichier XML. Nous cr´eons alors plusieurs fichiers XML, un par langue traduite, et le fichier charg´e est celui qui correspond au langage par d´efaut de la console.

L’´ecran de jeu a ´egalement ´et´e modifi´e l´eg`erement pour qu’il prenne tout l’espace de l’´ecran. Deux bandes anim´ees ont ´et´e plac´ees de chaque cˆot´e de la table de jeu, reprenant le fond d’´ecran anim´e du menu. Sur la droite, un logo de Quantic Pinball a ´et´e ajout´e ainsi que le nombre de billes restantes qui apparaissait auparavant en petit en bas de la table. Le score, qui ´etait

´egalement en petit au bas de la table, est affich´e sur la gauche. La figure 15 montre l’´ecran de jeu type de Quantic Pinball sur Wii U avec le mode jeu

(31)

Figure 14 – Cr´eation de l’affichage du tutoriel avec le Shine Editor

Figure15 – ´Ecran de jeu avec le mode Warp Sector d´eclanch´e

(32)

Warp Sector d´eclench´e. Le chiffre en bas `a droite de la table de jeu repr´esente le d´ecompte des secondes restantes avant la fin du mode.

D’autres captures d’´ecran du jeu Quantic Pinball sont disponibles en annexe A. Elles pr´esentent l’´ecran de choix du pseudonyme tel qu’il a ´et´e adapt´e pour la console, d’autres ´ecrans d’affichage des contrˆoles pour les manettes ainsi que quelques modes de jeu pour illustrer le fonctionnement de Quantic Pinball.

3.3 Cr´eation de la version master

Une fois le jeu fonctionnel, il faut cr´eer une version master de l’applica- tion afin de pouvoir l’installer sur une console. Pour cela, il y a une certaine chaˆıne `a suivre, plusieurs applications qui permettent de v´erifier la confor- mit´e du jeu avec le syst`eme et les exigences de la plateforme.

Pour les d´eveloppements sur la Wii U, Nintendo fournit une liste de re- commandations que le jeu doit respecter. Si l’une de ces recommandations n’est pas respect´ee, le jeu ne sera pas accept´e `a la vente. Ces recommanda- tions sont vari´ees, pouvant aller des r`egles d’affichage `a des comportements bien sp´ecifiques que la console doit avoir avec toutes les applications. Des exemples de comportements qu’il faut impl´ementer sont par exemple le fait que le Home Menu doit s’afficher quand on appuie sur le bouton HOME ou encore que la console doit s’´eteindre lorsqu’on s´electionne ce choix dans le menu. Il y a ´egalement des r`egles sur l’utilisation des manettes au sein du jeu pour empˆecher toute manœuvre dangereuse pour l’utilisateur ou qui risquerait d’endommager le mat´eriel.

Une fois que l’on est sˆur de bien respecter toutes les recommandations, nous pouvons cr´eer le fichier final de l’application. Pour cela nous avons

`

a disposition un logiciel dans lequel nous mettons diff´erentes informations telles que le logo du jeu `a afficher dans le menu, l’image de chargement, le titre du jeu dans plusieurs langues, les informations sur l’entreprise ou encore la date officielle de sortie. Il faut ´egalement d´efinir la classification du jeu, pour savoir s’il est tout public ou s’il doit avoir une limite d’ˆage. Les syst`emes d’´evaluation des jeux vid´eo varient selon les continents et parfois au sein d’un mˆeme continent. Le jeu ´etant `a destination de l’Europe, il est concern´e par la classification PEGI, pour Pan European Game Information.

Il faut ´egalement r´ediger un manuel d’utilisation qui sera visible depuis le magasin en ligne ainsi que depuis le menu en jeu. Ce manuel d´ecrit le jeu et ses r`egles ainsi que les contrˆoles de manettes.

Une fois ce proc´ed´e termin´e, nous pouvons envoyer notre jeu en v´erification aupr`es de Nintendo qui v´erifie `a son tour sa conformit´e.

(33)

4 Bilan

Apr`es 17 semaines de stage, nous pouvons faire le point sur ce qui a ´et´e fait par rapport aux objectifs initiaux et sur le d´eroulement du stage. Le d´eveloppement s’est fait de mani`ere incr´ementale. L’objectif a ´et´e d’obtenir rapidement une application fonctionnelle, entrant dans la boucle de jeu, mˆeme si elle ne faisait rien. Les modules ont ensuite ´et´e impl´ement´es et int´egr´es un `a un pour ajouter des fonctionnalit´es.

4.1 Etats du Shine Engine et de Quantic Pinball´

L’int´egration de la Wii U au Shine Engine a ´et´e r´ealis´ee. Le moteur de jeu peut `a pr´esent prendre en charge les jeux en deux dimensions sur cette plateforme.

Le syst`eme de fichiers ainsi que le syst`eme de sauvegarde pour la pla- teforme sont compl`etement impl´ement´es et fonctionnels. Il en est de mˆeme pour la gestion du son.

Parmi toutes les manettes de la Wii et de la Wii U, une seule n’a pas ´et´e test´ee, il s’agit du Wii U Pro Controller. En effet, elle n’est pas incluse dans le kit de d´eveloppement et nous n’en avons pas encore `a notre disposition.

L’int´egration de cette manette devrait cependant ˆetre tr`es rapide compte tenu de la g´en´ericit´e de l’impl´ementation de la gestion des manettes.

L’affichage des images en deux dimensions est g´er´e, il reste cependant encore du travail sur l’affichage des textes. Ils ne sont en effet pas trait´es de la mˆeme mani`ere au sein du moteur et posent un peu plus de difficult´es par rapport `a la biblioth`eque graphique de la console.

L’impl´ementation de la gestion du Home Button Menu s’av`ere assez compliqu´ee `a effectuer. Elle a ´et´e r´ealis´ee, le menu s’affichant effectivement lorsque le bouton est appuy´e. Mais l’application rencontre une erreur lors- qu’on la quitte via ce menu. Quelques corrections sont donc encore `a faire sur cette partie.

En ce qui concerne Quantic Pinball, le portage est termin´e et fonctionnel.

Les nouvelles images ont toutes ´et´e int´egr´ees au jeu ainsi que les nouveaux

´ecrans affichant les contrˆoles de jeu et le tutoriel. Il reste `a faire traduire les diff´erents textes dans les langues souhait´ees ainsi qu’`a obtenir la classifica- tion d’ˆage de jeu officielle.

4.2 Probl`emes rencontr´es

Il n’a pas ´et´e facile au d´ebut du stage de prendre ses rep`eres dans le code de Shine Engine. C’est en effet une application qui est d´ej`a tr`es vaste et assez complexe. Int´egrer les appels aux biblioth`eques de la Wii U n’a pas toujours

´et´e chose ais´ee car les interfaces des fonctions du moteur ne correspondaient par toujours avec celles des biblioth`eques.

(34)

Il n’a pas ´et´e ´evident de prendre en main toutes les notions graphiques n´ecessaires `a l’impl´ementation dans le moteur de jeu. Bien que j’ai eu des cours sur les bases de l’informatique graphique au d´ebut du Master, le travail n´ecessaire dans ce domaine ´etait bien plus pouss´e et complexe que tout ce que j’avais pu avoir l’occasion de rencontrer. Il m’a donc fallu prendre un peu de temps pour assimiler toutes ces notions afin de pouvoir bien en comprendre le fonctionnement.

L’int´egration des outils de Nintendo n’a pas toujours ´et´e ´evidente, nous avons parfois rencontr´e des probl`emes pour lesquels nous ne trouvions pas de solution dans la documentation. Mais cette difficult´e est `a relativiser compte tenu de la rapidit´e et de l’efficacit´e avec laquelle les ´equipes de Nintendo nous ont toujours r´epondu pour nous aider.

4.3 Bilan p´edagogique

Lors de ce stage j’ai eu la chance d’apprendre ´enorm´ement. Tout d’abord, c’´etait la premi`ere fois que mon travail s’int´egrait directement dans une application d’aussi grande envergure. Devoir s’adapter `a l’existant n’est pas forc´ement facile et tout le travail a dˆu ˆetre fait en gardant en tˆete que d’autres plateformes vont ˆetre int´egr´ees au moteur plus tard. J’ai ´egalement tr`es peu eu l’occasion de programmer en C++ en dehors des projets personnels que j’ai fait. Cela a donc ´et´e pour moi une bonne opportunit´e d’approfondir mes connaissances dans ce langage.

J’ai surtout pu d´ecouvrir le d´eveloppement sur des consoles de jeu, ce qui a ´et´e quelque chose de compl`etement nouveau pour moi. Ces plateformes ont de nombreuses contraintes mat´erielles mais ´egalement venant des construc- teurs. Celles-ci permettent d’avoir des jeux qui r´eagissent tous de mani`ere similaire sur une mˆeme console. Il y a ´egalement des contraintes de per- formance tr`es importantes dans ce domaine, le nombre d’images affich´ees par seconde ´etant primordial `a la fluidit´e d’un jeu. C’est un domaine de d´eveloppement riche, en constante ´evolution et vraiment passionnant, d’au- tant plus que je suis f´erue de jeux vid´eo.

Ce que j’ai appris durant ce stage ainsi que l’exp´erience que mon en- cadrant a partag´e avec moi, aussi bien du monde des jeux vid´eo que du monde de l’entreprise, m’apporteront sans aucun doute beaucoup dans ma vie professionnelle.

(35)

Conclusion

Au cours de ce stage, l’int´egration de la console Wii U au Shine Engine a

´et´e faite pour les jeux en deux dimensions. Grˆace `a cette int´egration, Shine Research va pouvoir porter facilement sur cette console d’autres jeux qui ont ´et´e d´evelopp´es pr´ec´edemment.

Ce stage conclut mes cinq ann´ees d’´etudes `a l’Universit´e de Franche- Comt´e et mon diplˆome de Master en informatique. C’est une exp´erience tr`es enrichissante. L’entreprise ´etant encore petite, il m’a ´et´e possible d’en voir le fonctionnement de mani`ere plus globale.

Enfin, ce stage m’a permis d’approfondir mes connaissances et d’explo- rer de nouveaux domaines de programmation et de nouvelles techniques de d´eveloppement. Du travail reste `a ˆetre effectu´e pour que tout soit int´egr´e concernant la Wii U, mais la prolongation du stage de quelques semaines va permettre de finaliser mon travail.

(36)

Webographie

[1] Shine Research. Quantic pinball, google play store link. play.google.com/

store/apps/details?id=com.shine research.quantic pinball.

[2] Shine Research. Quantic pinball, itunes link. itunes.apple.com/fr/app/

quantic-pinball/id675523488.

[3] Shine Research. Shine engine, official website. www.shine-engine.com.

[4] Shine Research. Shine research, official website.www.shine-research.com.

[5] Fog Creek Software. Trello, outil de gestion de projet en ligne.trello.com.

[6] Perforce Software. P4v, perforce visual client. provides quick and easy access to versioned files through a graphical interface. www.perforce.

com/product/components/perforce-visual-client.

[7] Perforce Software. Perforce, platform for versioning code. www.perforce.

com.

(37)

Table des figures

1 Shine Editor, l’interface de cr´eation de niveaux de jeux . . . . 6

2 Les diff´erentes biblioth`eques du Shine Engine . . . 10

3 L’association du vertex buffer et de l’index buffer . . . 10

4 La Wii U et son GamePad . . . 13

5 Le GamePad . . . 13

6 Les autres manettes de la Wii U . . . 15

7 Les composants mat´eriel n´ecessaires au d´eveloppement . . . . 17

8 Listes de demandes provenant de plusieurs clients au syst`eme de fichiers . . . 21

9 Dessin d’une image sur une base de deux triangles reli´es en triangle strip . . . 23

10 Etapes pour le rendu du son . . . .´ 24

11 Le Home Button Menu . . . 26

12 Menu principal de Quantic Pinball Wii U . . . 28

13 Ecran d’affichage des commandes de jeu pour le GamePad . .´ 29

14 Cr´eation de l’affichage du tutoriel avec le Shine Editor . . . . 30

15 Ecran de jeu avec le mode Warp Sector d´´ eclanch´e . . . 30

16 Ecran de saisie d’un nouveau pseudonyme de jeu . . . .´ 37

17 Ecran de tutoriel . . . .´ 38

18 Mode de jeu : Blackout . . . 38

19 Mode de jeu : Magnetic . . . 39

20 Mode de jeu : Spiders . . . 39

Liste des algorithmes

1 Cr´eation et ´ecoute sur un bouton juste press´e . . . 11

2 Cycle de vie d’une application . . . 12

(38)

Annexes

A Captures d’´ ecran du jeu Quantic Pinball

Figure 16 – ´Ecran de saisie d’un nouveau pseudonyme de jeu

(39)

Figure 17 – ´Ecran de tutoriel

Figure18 – Mode de jeu : Blackout

(40)

Figure 19 – Mode de jeu : Magnetic

Figure 20 – Mode de jeu : Spiders

Références

Documents relatifs

Le jeu comme procédé de développement moteur dans les séances de l'Education Physique et Sportive à l'Ecole est le meilleur moyen d'influencer le changement

À l’exception du chapitre sur le Canada de Dominic Arsenault et Louis- Martin Guay dans l’ouvrage Video Games Around the World (Wolf, 2015) et de quelques articles

Les jeux vidéo de football, pratique d’un spectacle et spectacle d’une pratique. Les

Les contributions attendues pourront ainsi porter par exemple sur la place de l’argent dans les jeux vidéo, sur la conception et sur l’usage de systèmes monétaire en jeu, sur

Pourtant, les interactions entre ces deux médias sont loin d’être des exceptions et les disciplines qui les étudient (les game studies et l’histoire du livre) sont

« On peut cacher différents objets dans la salle de cours (affichettes, objets de la vie quotidienne, petits bouts de papier avec des mots inscrits dessus) ; les enfants doivent

Un atelier Paper Toy peut accompagner une autre animation jeu vidéo, pour occuper les joueurs qui attendent leur tour ou pour décorer les

Cette dialectique de l’action nous amène à considérer la notion de double milieu au sens de Sensevy & Mercier (2007). Le milieu est ainsi vu à la fois comme le milieu de