SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Soutenance Num´ro 3
              e




 PREVOST Jean-Romain
  LHUILLIER Ga¨tan
               e
  LEMOINE Gauthier




       Mai 2008
Fry Them All




               2
Introduction



   La seconde soutenance avait vu la mise en place du chargement des cartes et le r´seau avait
                                                                                      e
commenc´ ` sortir de sa coquille. Ce nouvel ´pisode de la cr´ation de Fry Them All s’av`re encore
          ea                                e               e                           e
plus all´chant avec le d´veloppement du reseau mais ´galement l’arriv´e de mod`les !
        e               e                             e                 e        e
Apr`s bien des heures de travail les Freedom Fries sont fiers de vous presenter leurs oeuvres !
    e




                                               1
Table des mati`res
                                              e




1 R´seau
    e                                                                                                                                    4
  1.1 L’importance de passer a L’UDP . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
  1.2 Que choisir ? . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
               e
      1.2.1 M´saventures avec Internet Composant             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
      1.2.2 Le mauvais choix Indy . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
      1.2.3 Winsock, LA solution ? . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
      1.2.4 ICS un compromis qui nous conviens. .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
  1.3 Ce que l’udp nous permet de faire de nouveau .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
                         e
  1.4 Un serveur remodel´ . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
                     e
  1.5 Un Client soign´ . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7

2 Gestion des collisions                                                                                                                 8
  2.1 Gestion des tirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                         8
  2.2 Travail ` r´aliser pour la prochaine soutenance . . . . . . . . . . . . . . . . . . .
              a e                                                                                                                        9

3 Moteur graphique                                                                                                                       10
                       e
  3.1 Gestion des entr´es . . . . . . . . . . .    . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   10
      3.1.1 Le clavier . . . . . . . . . . . .     . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   10
      3.1.2 La souris . . . . . . . . . . . .      . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   11
      3.1.3 La console . . . . . . . . . . . .     . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   11
  3.2 Mini-carte . . . . . . . . . . . . . . . .   . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   12
      3.2.1 Affichage de la carte . . . . . .        . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   12
                e
      3.2.2 Cr´ation d’une miniature . . .         . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   13
  3.3 Enrichissement des cartes . . . . . . .      . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   13
      3.3.1 Personnalisation des textures .        . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   13
      3.3.2 Points de depart . . . . . . . .       . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   14
      3.3.3 Les portes . . . . . . . . . . . .     . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   14
              e
  3.4 Les mod`les . . . . . . . . . . . . . . .    . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   14
      3.4.1 Choix technologiques . . . . . .       . . . . . . .     . . . . . . .               .   .   .   .   .   .   .   .   .   .   14
      3.4.2 Implementation et modification          du chargeur       de mod`les
                                                                             e                   .   .   .   .   .   .   .   .   .   .   15


                                                  2
Fry Them All


         3.4.3   Choix du mod`le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                             e                                                                                                                                      16

4 Site   Web                                                                                                                                                        18
  4.1    Galerie de capture du jeu      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
  4.2    FryTV . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
  4.3    Anglais . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
  4.4    Contact . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
  4.5    Epipub . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19




                                                                3
CHAPITRE 1




                             R´seau
                              e
                                par JR.Prevost




1.1     L’importance de passer a L’UDP
   Peu avant la soutenance 2 lorsque nous avons test´ le r´seau dans des conditions de jeu, nous
                                                      e   e
nous sommes rendus compte que nous avions fait une grosse erreur en choisissant le protocole
TCP pour l’envoi de nos donn´es. En effet, ce dernier n’est pas adapt´ pour envoyer plusieurs
                                e                                       e
dizaines de fois par seconde des donn´es et en recevoir d’autant plus. En faisant des recherches
                                        e
sur internet la plupart des articles traitant des diff´rences entre UDP et TCP s’accordaient
                                                      e
pour dire que lorsqu’il s’agit de jeux en r´seaux l’UDP est le plus souvent le plus adapt´. Tout
                                           e                                             e
particuli`rement pour les FPS qui n´cessitent une utilisation intense du r´seau.
         e                            e                                   e


1.2     Que choisir ?
   D`s lors que l’on savait que l’on devait utiliser le protocole UDP il nous fallait trouver un
    e
nouveau composant delphi car celui que l’on utilisait jusque l` ne le permet pas.
                                                              a

1.2.1    M´saventures avec Internet Composant
          e
     La premi`re id´e a ´t´ de vouloir utiliser le composant UDP de la ”suite” internet dont est
             e     e    ee
issue les composants que l’on utilise pour nos connections en TCP. Ce fut une bien mauvaise
id´e. Bien que ces composants soient simples d’utilisation ils datent et il existe tr`s peu de
  e                                                                                    e
documentation sur ceux-ci sur internet. De plus ils sont devenus d´suets. Mais la vrai raison
                                                                        e
qui m’a fait regretter d’essayer de les utiliser c’est que j’ai perdu beaucoup de temps ` essayer
                                                                                         a
d’envoyer des donn´e en UDP tout cela pour me rendre compte que cela ne semble ˆtre possible
                    e                                                                e
qu’entre 2 interlocuteurs ce qui rend le composant compl`tement sans int´rˆt pour nos besoins.
                                                             e              ee
Mˆme si cela ne pose aucun probl`me pour ce qui est de l’envoi de donn´es depuis le client
   e                                 e                                        e


                                                 4
Fry Them All                                                                                  R´seau
                                                                                               e


vers le serveur, lorsqu’il s’agira d’envoyer depuis le server vers les x clients cela posera un s´v`re
                                                                                                 e e
probl`me.
      e

1.2.2     Le mauvais choix Indy
    J’ai alors pens´ ` utiliser Indy ´tant donn´ que ce composant est int´gr´ a Delphi et semblait
                   ea                e           e                           e e
bien document´. Ce pendant je me suis vite rendu compte que tous les exemples de code que
                e
l’on trouve sur internet sont d´pass´s et ne compilent pas sur delphi 2007 avec Indy 10. Apr`s
                                  e     e                                                          e
plusieurs recherches j’ai r´ussi ` utiliser Indy mais j’ai ´t´ confront´ ` des probl`mes sans pouvoir
                           e      a                        ee          ea           e
en trouver la cause. L` encore, cela ´t´ une sacr´e perte de temps.
                        a               ee         e

1.2.3     Winsock, LA solution ?
    On m’a fortement conseill´ d’utiliser Winsock directement au lieu d’en utiliser des sur-couche.
                              e
J’ai alors entrepris de l’utiliser directement, les recherches sur comment l’utiliser m’ont fait
comprendre beaucoup de notions que j’avais jusque l` survol´. Cependant j’ai pr´f´r´ ne pas
                                                          a      e                    eee
l’utiliser directement, au profit d’ICS. En effet tout ce que j’aurai r´ussi ` faire directement
                                                                        e      a
en utilisant Winsock n’aurais pas ´t´ aussi bien optimis´ que ce que propose des biblioth`ques
                                    ee                      e                                 e
comme ICS qui sont faites par des gens qui maˆ   ıtrise bien mieux que moi le r´seau.
                                                                               e

1.2.4     ICS un compromis qui nous conviens.
    Bien qu’ICS ne dispose d’aucune documentation, il est fourni avec un grand nombre d’exemples,
ce qui rend assez facile son utilisation. Nous avons donc choisi de l’utiliser pour l’envoi de donn´es
                                                                                                   e
en UDP, tout en gardant notre ancien composant pour ceux en TCP.


1.3     Ce que l’udp nous permet de faire de nouveau




    Grˆce ` l’UDP il nous est possible d’envoyer des paquets ` la vol´. Ainsi nous avons pu tester
       a a                                                   a       e
l’envoi de plus de 70 paquets par seconde sans aucun probl`me. En TCP il nous ´tait pas possible
                                                          e                      e
d’en envoyer tant ` cause du protocole en lui mˆme. En effet en TCP lorsque les donn´es sont
                    a                            e                                        e


                                                  5
Fry Them All                                                                                   R´seau
                                                                                                e


envoy´es ` un client on attend la confirmation que celui-ci les ai bien re¸u, alors qu’en UDP elles
      e a                                                                c
sont envoy´es ` une adresse et on ne se souci pas de savoir si elles arrivent ` destination.
          e a                                                                 a


1.4      Un serveur remodel´
                           e




    Le principe du serveur n’a gu`re chang´, les clients envoient les donn´es au serveur qui se
                                     e         e                                 e
charge de les renvoyer ` tous les clients. La diff´rence majeur est la possibilit´ d’envoyer et
                           a                          e                                 e
de recevoir des donn´es aussi bien en TCP qu’en UDP. En effet, pour le chat et la connexion
                        e
au serveur (ce qui comprend l’envoi du pseudo et bientˆt la gestion de la carte) on utilise le
                                                              o
protocole TCP plus adapt´ pour ce genre d’envois. Par contre pour l’envoi des coordonn´es de
                             e                                                                   e
joueurs l’UDP est obligatoire.
Auparavant nous utilisions 3 envois pour les coordonn´es des joueurs, celles en X puis Y et
                                                             e
enfin l’angle de la cam´ra, ce qui n’´tait pas tr`s malin car cela triplait le nombre d’envoi. A
                          e             e           e                                                 `
l’origine nous pensions envoyer les coordonn´es que quand celles-ci changent, ce qui expliquait
                                                 e
l’envoi s´par´. Mais comme elles sont maintenant envoy´es ` chaque tour de boucle de jeu (plus
         e e                                                e a
exactement 30 fois par secondes pour ne pas surcharger inutilement) un envoi group´ a beaucoup
                                                                                          e
plus de sens.
Si le principe du serveur n’a pas chang´ et que seul des changements on ´t´ apport´s, l’interface
                                          e                                   ee          e
                                            `
de ce dernier a connu des modifications. A la place d’un TStringGrid pour l’aper¸u de la carte en
                                                                                      c
cours de jeu, on utilise maintenant un TPanel qui nous permet d’utiliser OpenGl pour afficher la
carte. La MiniMap de Gauthier que l’on utilise dans le jeu a ´t´ incorpor´ et contient en temps
                                                                  ee           e
r´el la position et l’orientation des joueurs sur la carte. Ce qui est tr`s agr´able et tr`s utile pour
 e                                                                       e     e           e
v´rifier le bon envoi des donn´es.
  e                              e




                                                  6
Fry Them All                                                                            R´seau
                                                                                         e


1.5     Un Client soign´
                       e




    Le client ´tait on ne peut plus sommaire et pas tr`s esth´tique, j’ai donc corrig´ cela en
              e                                           e     e                      e
lui apportant un look Freedom Fries ansi que quelques am´lioration. Bien sur il est muni des
                                                             e
composants ICS UDP mais les modifications ne se sont pas arrˆt´es l`. Dans le coin haut gauche
                                                               ee a
une partie ”Hacking” permet d’envoyer des donn´es au choix en UDP/TCP vers n’importe quelle
                                                  e
IP, on peut ansi tuer un adversaires ou mˆme expulser un perturbateur. Et comme nous somme
                                            e
tr`s fain´ant et qu’il n’est pas si ´vident pour tout le monde de r´cup´rer son adresse IP nous
  e      e                          e                               e  e
avons mis en place un syst`me utilisant un Broadcast pour r´cup´rer automatiquement l’adresse
                            e                                e    e
IP des serveurs disponibles sur le r´seau local.
                                      e




                                              7
CHAPITRE 2




                             Gestion des collisions
                                 par G.Lhuillier




2.1     Gestion des tirs
    Pour cette soutenance, j’ai essay´ de mettre en application les id´es que j’ai pr´sent´ lors
                                        e                                e                e    e
de la deuxi`me soutenance, toutefois j’ai encore quelques probl`mes quant ` l’utilisation de mes
            e                                                     e            a
fonctions li´es ` l’appel de certaines variables (comme les informations li´es ` la carte emplace-
            e a                                                              e a
ment des murs et des caisses).
Je pr´senterai donc une gestion du tir partielle qui ne g`rera pas les collision avec les murs (hor-
     e                                                     e
mis les bords de la salle, le sol et le plafond ). Dans cette version du tir, si un adversaire est
touch´, il peut ˆtre touch´ sur diff´rentes parties de son corps, une balle dans la tˆte (ou head-
      e          e          e         e                                                e
shot) entraˆıne... la mort, bien-sˆr, une balle dans la poitrine provoque des d´gˆts importants et
                                  u                                              e a
une balle dans le reste du corps provoque des d´gats faibles.
                                                   e
Pour tester les diff´rentes parties du corps et voir o` un personnage est atteint, j’utilise d’abord
                     e                                 u
une fonction qui cr´e une grosse boite tout autour du personnage, puis si une balle rentre dans
                      e
cette boite (et donc que le personnage est touch´), je cr´e deux autres boites, une petite au niveau
                                                  e      e
de la tˆte et une plus importante en dessous au niveau du torse et on applique les changements
       e
en fonction des boites touch´es : la petite entraˆ la mort, la moyenne de gros d´gˆts, et la
                               e                     ıne                                 e a
grande les d´gˆts les plus faibles.
              e a
Le syst`me des points de vie n’´tant pas encore au point pour l’instant, tout personnage se pre-
        e                         e
nant une balle mourra sur le coup mˆme s’il ne la prend pas dans la tˆte.
                                        e                                e
Toutefois, les diff´rentes zones seront marqu´es par des messages indiquant l’endroit qui a ´t´
                    e                           e                                                 ee
touch´ : headshot et nice shot correspondant ` un tir ` la tˆte et ` la poitrine
      e                                          a       a     e     a




                                                   8
Fry Them All                                                                Gestion des collisions




2.2     Travail ` r´aliser pour la prochaine soutenance
                a e
   Am´liorer la gestion du tir, c’est ` dire fournir une gestion des tirs compl`te avec collisions
        e                             a                                          e
avec le d´cor et zones de touche multiples. G´rer le syst`me de points de vies pour les personnages
          e                                  e           e
ainsi que quelques autres am´liorations
                              e




                                                9
CHAPITRE 3




                             Moteur Graphique
                                 par G.Lemoine




3.1     Gestion des entr´es
                        e
3.1.1    Le clavier
    La gestion du clavier a ´t´ am´lior´e entre les deux soutenances. En effet j’utilisais avant la
                                ee   e e
fonction glfwGetKey(key) qui retourne 1 si la touche est appuy´e, 0 sinon, en g´rant via une
                                                                   e                 e
boucle le parcours de tout le clavier et via une variable le fait de ne pas ajouter une lettre par
frame, mais de ne l’ajouter que les X secondes.
Cependant il y avait bien mieux en utilisant notre gestionnaire de fenˆtres. GLFW propose un
                                                                          e
syst`me de ”callback” : ` chaque appuis (ou relˆche) d’une touche, une procedure que nous
     e                       a                      a
avons cr´´e est appel´e, avec en param`tre l’entier correspondant au code ascii de la touche,
          ee             e                e
ansi qu’un entier valant 1 ou 0 qui informe si l’utilisateur a appuy´ ou relˆch´ la touche. Cette
                                                                      e      a e
procedure est reli´e ` GLFW via les routines glfwSet[Char/Key]Callback (key g`re tout le clavier,
                   e a                                                           e
char uniquement les caract`res alphab´tiques, nous utilisons donc char) en passant en param`tre
                               e       e                                                       e
un pointeur vers la procedure. L’activation de la r´p´tition des touches fait que la procedure
                                                      e e
est appel´es si la touche est deja appuy´e depuis un certains temps, exactement comme dans
            e                              e
Windows.
La proc´dure appel´e se contente d’ajouter dans un buffer les touches appuy´es. Lorsqu’une
          e            e                                                           e
partie de notre programme n´cessite la gestion du clavier (par exemple le chat) alors il va lire ce
                                 e
buffer et le remettre ` vide, sachant que lorsque l’on appuie sur ”entr´e” pour afficher la zone de
                        a                                               e
saisie, le buffer est vid´e afin de ne pas ajouter au chat les ´ventuelles touches appuy´es pendant
                          e                                  e                         e
le jeu.
Le principal probl`me rencontr´ ´tais que le programme compilais, mais que les param`tres
                     e             e e                                                        e
´taient toujours les mˆmes aux lieux du caract`re et de l’´tat de la touche. Apr`s quelques
e                          e                       e           e                       e
difficult´s (glfwSetCharCallback + delphi donnant 3 r´sultats sur Google) j’ai pu finalement
         e                                                e



                                                10
Fry Them All                                                                   Moteur Graphique


identifier le probl`me, il fallait pr´ciser l’utilisation de la convention d’appel stdcall dans la
                  e                 e
d´claration de la procedure.
  e

3.1.2    La souris
     Si la souris est g´r´e depuis longtemps pour se d´placer et regarder autour de soi, nous
                       ee                                e
n’avions pas encore g´r´ la roulette sur le haut de la plupart des souris. La encore glfw s’av`re
                       ee                                                                      e
tr`s efficace, puisque comme le clavier il propose un syst`me de callback, qui appelle une fonction
   e                                                     e
a
` chaque modification de la position de la roulette, et une autre qui donne un acc`s direct ` un
                                                                                   e         a
entier correspondant ` la position de celle-ci.
                       a
Nous l’utilisons grˆce ` l’acc`s direct ` un entier, ansi en effectuant un modulo nous pouvons
                    a a        e        a
d´finir quelle arme utilise le joueur et l’afficher ` l’´cran !
  e                                              a e

3.1.3    La console
    Notre bonne gestion du clavier nous a permis de r´aliser une console dans notre jeu.
                                                          e
Elle est accessible via la touche ”2 ” et permet de r´aliser nombre de commandes, grˆce au parser
                                                      e                                 a
appel´ lorsque l’on appuie sur la touche ”entr´e”. Elle permet ´galement un acc`s au chat, deja
      e                                          e                e                 e
disponible ` la soutenance pr´c´dente. Lorsque l’on demande l’affichage de la console celle-ci
             a                  e e
descend progressivement, et la mini-carte s’efface pour ne pas cacher la console.
`
A chaque ajout d’une commande celle-ci est trait´e par un parser qui d´fini s’il faut ´ventuellement
                                                   e                    e             e
effectuer une action. Ensuite on ajoute cette commande dans l’historique de la console via un
simple ajout en tˆte d’une liste chaˆ ee. L’affichage des commandes consiste simplement ` la par-
                  e                   ın´                                                   a
courir tant qu’il y a des elements non affich´ et qu’il reste de la place ` l’´cran (que la commande
                                              e                         a e
n’est pas affich´e ”au dessus” de l’´cran).
                e                     e
Les commandes mise en place permettent notamment de debugger / tester la gestion des joueurs
(ajout de joueurs, modification de leurs coordonn´es) mais surtout de changer le th`me visuel du
                                                     e                                  e
jeu, via la commande ’reload’ qui prend en param`tre le nom d’un th`me, et remplace certaines
                                                       e                 e
textures.




                           Changement de th`me visuel par la console
                                           e




                                                11
Fry Them All                                                                     Moteur Graphique


3.2     Mini-carte
    Afin d’aider l’utilisateur ` se rep´rer dans la carte, nous avons mis ` sa disposition une pe-
                              a       e                                   a
tite carte o` l’on peut voir sa position ansi que celle de son ´quipe, pour une meilleur strat´gie
            u                                                  e                              e
d’´quipe.
  e


3.2.1    Affichage de la carte
    La mini-carte est disponible de deux fa¸ons. Par d´faut, elle est affich´e en haut ` gauche
                                              c          e                    e           a
de l’´cran en petit, ce qui suffit cependant ` avoir un bon aper¸u de la zone. Si l’utilisateur
     e                                          a                    c
souhaite mieux la voir, il peut utiliser la touche ”espace” : il verra alors un effet de translation
et de redimensionnement qui centrera et agrandira progressivement la carte. L’effet inverse est
produit, plus rapidement, pour repasser en petit.

Affichage de la carte en elle-mˆme
                             e
   Techniquement il s’agit en r´alit´ de deux affichages distincts.
                               e e

    • Lorsqu’elle est en petit en haut ` gauche de l’´cran, c’est un rectangle qui est textur´
                                          a               e                                         e
       d’une image representant l’int´gralit´ de la carte. Dans ce cas le joueur est en pleine partie
                                      e      e
       et c’est ici que nous avons besoin d’avoir un jeu performant pour ˆtre jouable dans de
                                                                                e
       bonnes conditions sur la plupart des ordinateurs, aussi modestes soient-ils, et une simple
       application de texture est ce qu’il y a de plus l´ger.
                                                        e
    • En revanche, lorsqu’elle est affich´e en gros plan nous pouvons nous permettre d’ˆtre un
                                          e                                                  e
       peu plus lourd. Ansi si nous affichions via une simple texture pour ne pas avoir d’effet de
       pixelisation nous serions contraint d’avoir un image de taille tr`s importante, ce qui baisse-
                                                                        e
       rais le FPS dans notre premier cas. Nous utilisons donc l’affichage d’autant de quadrilat`res
                                                                                                 e
       qu’il y a de case textur´s par une petite image, grˆce ` un tableau de sommet initialis´ au
                               e                            a a                                 e
       lancement du jeu.
Il est ` noter que nous comparons les dimensions de la carte pour qu’` l’affichage celle-ci conserve
       a                                                                a
ses proportions : si elle est tr`s large, elle le sera ` l’´cran. Il s’agit l` encore d’un calcul de
                                 e                     a e                   a
proportionnalit´ entre les deux axes.
                 e

Affichage des joueurs
    Il n’est pas difficile ` partir de la position des joueurs de les repr´senter par un petit curseur.
                          a                                             e
Leur position ` l’´cran est calcul´e par proportionnalit´ entre la position du joueur, la taille de
                a e                  e                      e
la carte et la taille de la carte ` l’´cran. La rotation est effectu´e par un glRotatef de l’angle du
                                  a e                              e
joueur.
Trois couleurs de curseur sont utilis´es : la verte pour le joueur actuel, et la rouge et la bleue
                                         e
pour les autres selon leur ´quipe.
                             e
Le curseur est un carr´ textur´ d’une image representant un personnage avec son arme. Pour le
                         e       e
placer avec pr´cision c’est son centre (intersection des deux diagonales) qui est plac´ au point
                e                                                                         e
(0,0) puisqu’il subit la translation jusqu’` sa position, puis la rotation.
                                             a




                                                 12
Fry Them All                                                                   Moteur Graphique


3.2.2    Cr´ation d’une miniature
           e
    Nos miniatures sont g´n´r´es directement dans le jeu. Delphi propose des outils pour la ma-
                           e ee
nipulation d’images, avec les classes TJpegImage et TBitmap. Il est facile de convertir une image
bitmap en jpeg et vice versa grˆce ` la m´thode Assign(ImageSource). On peut acceder ` la
                                  a a        e                                                a
taille d’une image bitmap via ses propri´t´s ”width” et ”height” et ` chaque pixel par Img-
                                           ee                            a
Src.canvas.pixel[i][j].
Pour g´n´rer notre miniature, nous parcourons le tableau contenant la carte (tableau ` deux
        e e                                                                                 a
dimensions contenant un caract`re par case) puis pour chaque element on remplis les pixels cor-
                                 e
respondant ` cet emplacement sur l’image de la carte. Chaque element est constitu´ de x pixels
             a                                                                        e
par ´l´ment (constante modifiable) et donc l’image a une taille plus grande plus il y a d’elements.
     ee
a
` chaque ´l´ment on ajoute les pixels a la carte en acc´dant aux pixels des fichiers de texture des
          ee                           `               e
sols, murs et caisses.
Une fois la miniature g´n´r´e elle est enregistr´e dans le dossier cartes sous le format ”NomDe-
                        e ee                    e
LaCarte.jpg”. ` chaque lancement du jeu l’image n’est g´n´r´e que si elle n’est pas pr´sente dans
                a                                        e ee                           e
le r´pertoire, sinon on se contente de la charger.
    e




                                Affichage en gros plan de la carte



3.3     Enrichissement des cartes
3.3.1    Personnalisation des textures
    Beaucoup nous on reproch´ le fait que les textures ont depuis le debut du projet toujours ´t´
                                 e                                                              ee
les mˆmes, et qui plus est, n’´taient pas forcement les plus belles que l’on puisse trouver. Devant
      e                        e
le rˆle capital de celle-ci dans la vision que le joueur a du jeu, les am´liorer en augmentant leur
    o                                                                    e
diversit´ s’est donc av´r´ un point important ` travailler.
        e               ee                        a
Nous avons pu trouver sur internet des textures qui nous plaisent, et permettent de repr´senter
                                                                                             e
different types d’environnements : Afrique du Nord, zone industrielle, . . .


                                                13
Fry Them All                                                                       Moteur Graphique


Afin de choisir un th`me visuel facilement j’ai r´alis´ un petit module permettant en une variable
                      e                          e e
de changer totalement l’apparence du jeu. Le dossier Textures du jeu contient un dossier par
style visuel. Il contient les textures des murs et du sol (au format tga, png, jpg . . .) ansi qu’un
fichier texte de configuration. Ce dernier contient principalement l’adresse des images, et des
configurations plus avanc´es tel que le nombre de repetition vertical de la texture. La gestion au
                            e
sein du jeu n’est pas compliqu´e puisqu’il faut lire ce fichier (en v´rifiant qu’il existe vraiment
                                  e                                   e
. . .) pour remplir un enregistrement qui sera utilis´ au chargement des textures et ` la generation
                                                     e                               a
des tableaux de sommets, qui contiennent les coordonn´es des textures.
                                                           e
Grˆce ` la console nous pouvons en une ligne de commande changer instantan´ment de th`me,
     a a                                                                          e             e
grˆce ` des commandes de la forme ”reload nomDuTheme”, le parser v´rifiant que le th`me existe
    a a                                                                 e                 e
bien.

3.3.2     Points de depart
    Nous avons rajout´ aux cartes des points de depart, repr´sent´s par la lettre ’k’. Au chargement
                       e                                     e    e
de la carte un tableau contenant les coordonn´es de chaque point de d´part est cr´e, et chaque
                                                e                         e             e
fois que l’on doit faire apparaˆ un joueur, un de ces departs est s´lectionn´ au hasard.
                                ıtre                                  e         e
De plus, une fois la case s´lectionn´e un autre tirage au sort d´finie l’angle de d´part dans le jeu.
                           e         e                          e                  e

3.3.3     Les portes
    Nous souhaitions enrichir notre jeu par la mise en place de portes. En plus d’apporter de la
diversit´ aux environnements, elles repr´sentent dans la plupart des First Person Shooter un rˆle
         e                                e                                                          o
important, o` le combat se transforme souvent en boucherie.
               u
Dans notre jeu la porte est constitu´e de quatre quadrilat`res : face avant, arri`re, et deux faces
                                      e                        e                        e
lat´rales ; les faces du haut et du bas ´tant invisibles ` voir, il ´tait inutile de les afficher. Pour de
   e                                    e                a          e
meilleurs performances nous utilisons l` encore les Vertex Arrays. Chaque porte est une classe
                                          a
contenant toutes les informations n´cessaires ` l’affichage : position, angle, information si la porte
                                     e          a
est ouverte ou non, . . .
Toutes les portes de la carte sont contenue dans le tableau d’une autre classe. Pour les afficher il
suffit d’afficher tout le tableau de portes. Pour la gestion des collision comme dans la gestion de
l’activation des portes, une recherche s´quentielle est effectu´e pour trouver la porte concern´e.
                                          e                        e                                 e
Dans le cas de l’activation, en cas d’appuie sur shift gauche ` proximit´ d’une porte son ´tat est
                                                                  a           e                  e
invers´, et une animation illustre l’ouverture / fermeture de la porte. Pour les collisions, il faut
       e
examiner si la porte est ouverte ou non pour d´finir si l’on peut passer.
                                                   e


3.4      Les mod`les
                e
  Le chargement des mod`les repr´sentant les ennemis est le point le plus important au niveau
                        e        e
OpenGL pour cette 3e soutenance.


3.4.1     Choix technologiques
   Concernant les solutions envisageables, il y avais deux points ` diff´rencier :
                                                                  a    e
   • La cr´ation des mod`les
           e             e
   • Leur chargement dans le programme.
Notre jeu ´tant un FPS, du genre Quake / Unreal, nous souhaitions avoir des mod`le humains.
          e                                                                       e
Personne dans le groupe n’ayant la moindre connaissance d’un logiciel tel que 3DS, Blender


                                                  14
Fry Them All                                                                   Moteur Graphique




                            Une porte dans l’environnement ”Egypt”


ou autre MilkShape, il nous a paru bien difficile de r´aliser des mod`les de qualit´ disposant
                                                          e               e              e
d’animations.
Une fois avoir choisis d’utiliser des mod`les existants, s’est pos´e la question du chargement des
                                         e                        e
mod`les dans notre jeu.
     e
Contrairement a DirectX, cela n’est pas g´r´ et nous avons du choisir entre coder notre propre
                                            ee
chargeur, ou bien utiliser un deja existant.
Apr`s de nombreuses recherches, le coder est difficile, et la quasi-totalit´ des groupes l’ayant fait
    e                                                                     e
on en r´alit´ consid´rablement copi´s ceux deja existants. Enfin, au vu de notre groupe a l’effectif
       e e          e                e
r´duis, nous avons donc decider d’utiliser un chargeur de mod`les deja existant. Apr`s recherche,
 e                                                              e                      e
le couple chargeur de mod`les Quake 3 de Sulaco s’est aver´ ˆtre la seul solution viable pour
                             e                                  e e
notre projet.

3.4.2    Implementation et modification du chargeur de mod`les
                                                         e
    Le chargeur de mod`les de Sulaco est d´compos´ en deux parties : d’une part les personnages
                         e                  e       e
anim´s Quake 3, et d’autre part les autres mod`les en *.md3, tels que les armes.
     e                                           e
Le chargement des personnages fonctionne bien, et la mise en place dans notre jeu a ´t´ facile. Il
                                                                                      ee
est possible d’utiliser un personnage plutˆt qu’un autre en changeant simplement un param`tre
                                          o                                                  e
de fonction, de mˆme pour les diff´rentes couleur de chaque mod`le.
                   e               e                               e
Le chargement des armes est quant ` lui nettement moins bien fait, et on ne peut pas si simple-
                                     a
ment changer d’arme. Le chargement d’une arme est une succession de chargement de meshes,
contenant leur vertices et les textures. Ansi pour chaque arme les meshs sont diff´rents (diffe-
                                                                                    e
rences de noms, nombre etc ...) si bien qu’il faut modifier le code pour chaque armes. J’ai donc
modifi´ le chargeur d’armes, qui ` partir du nom de l’arme lit dans un tableau les informations
       e                          a
a
` charger.
Une fois que tout cela fonctionnais bien, nous avons regrett´s la qualit´ moyenne des mod`les,
                                                              e          e                   e
qui ont tout de mˆmes plus de 8 ans. Nous avons alors vu que ceux du mod Urban Terror ´taient
                   e                                                                       e
bien meilleurs (ils poss`dent nettement plus de vertices et les textures sont de meilleur qualit´)
                         e                                                                      e
et leur structure est quasiment identique. Nous avons donc assez ais´ment charg´s les mod`les,
                                                                      e           e          e
mais cependant les animations n’ont pas fonctionn´es. Dans le mod Quake 3, les fichiers textes
                                                    e
”animations.cfg” sont diff´rents, et nous avons du d’abord modifier le fichier pour qu’il soit bien
                           e


                                                15
Fry Them All                                                                  Moteur Graphique


pars´ par notre jeu. Ensuite il a fallu faire quelques modifications dans le chargeur de mod`les
    e                                                                                      e
au niveau de la gestion des animations pour que celles-si fonctionnent. Au final nous sommes
en mesure de charger tous les personnages de Quake III, Urban Terror et Tremulous (un autre
mod).




                     Le personnage f´minin rouge, avec son fusil de sniper
                                    e


3.4.3    Choix du mod`le
                     e
   Afin de permettre au joueur de choisir son ´quipe et le sexe de son personnage lorsque celui-ci
                                                e
commence ` jouer, un menu est affich´. On y voit les quatre mod`les en action et l’utilisateur
            a                           e                           e
doit utiliser la souris pour s´lectionner le personnage de son choix, le fond de la case survol´e
                              e                                                                e
´tant l´g`rement plus clair.
e      e e
Une fois ce choix effectu´ on rejoint la partie et l’ensemble des joueurs est inform´ de ses choix
                          e                                                        e
pour afficher le mod`le correspondant.
                      e




                                               16
Fry Them All                                      Moteur Graphique




               Quel personnage choisirez vous ?




                             17
CHAPITRE 4




                              Site Web
                                 par JR.Prevost




4.1     Galerie de capture du jeu
    J’ai am´lior´ la galerie en ajoutant une page listant toutes les images, ainsi au lieu d’ arriver
           e e
directement sur la vue en diaporama il est possible de choisir quelle image avoir en diaporama.
Pour avoir un rendu plus agr´able des miniatures sont g´n´r´es par PHP. Un cache est utilis´
                                e                           e ee                                    e
pour rendre la galerie plus fluide.


4.2     FryTV
    La section vid´o de notre site a ´t´ compl`tement repens´e. Avant seules des miniatures des
                  e                   ee         e            e
vid´os avec un lien rtsp :// ´taient disponibles. Le probl`me ´tait que sur certaines plate-formes
    e                        e                             e  e
aucune application n’ est associ´e au protocole rtsp ce qui ne rend pas simple le visionnage de
                                  e
flux vid´o via rtsp. C’est pour rem´dier ` cela j’ai opt´ pour l’utilisation du plugin QuickTime,
          e                          e     a             e
car mˆme s’il est moins populaire que flash il est de bien meilleur qualit´ pour la vid´o. Comme
        e                                                                 e            e
le plugin est ins´r´ directement sur le site des dimensions HD ne sont pas envisageables j’ai
                 ee
donc privil´gi´ une taille maximum de 600px*450px pour les vid´os ce qui nous permet tout
             e e                                                     e
de mˆme d’obtenir une qualit´ bien sup´rieur ` YouTube par exemple. Comme il s’agit l` de
      e                         e          e         a                                         a
vrais streaming il nous est possible de partager de longues vid´os et il sera possible au visiteur
                                                                e
d’avancer comme bon lui semble dans la vid´o. Pour rendre le visionnage encore plus agr´able
                                                e                                             e
j’ai ins´r´ une bande d´filante contenant des miniatures des vid´os disponible, un simple clique
          ee            e                                         e
sur une miniature permet de lancer une vid´o. Pour se d´placer sur une bande de vid´os il suffit
                                              e            e                           e
de survoler les bords de celle-ci pour la faire d´filer. Comme on est geek et que l’on ne se refait
                                                   e
pas des vid´os suppl´mentaires sont disponibles avec un Cheat code ( ’&pron=42’ en plus dans
             e       e
l’url).



                                                 18
Fry Them All                                                                                Site Web




                                        Videos en streaming


4.3     Anglais
   Le site est maintenance Shakespeare friendly c’est ` dire que l’interface du site est disponible
                                                       a
en anglais. Des nouvelles sur l’avanc´e du projet sont disponibles en anglais. Toutes les pages ne
                                      e
sont pas traduites mais l’essentiel y est !


4.4     Contact
    La page de contact avait disparue (il faut avouer qu’elle ´tait d’une utilit´ bien discutable), la
                                                              e                 e
voil` revenue mais cette fois elle permet vraiment de prendre contact avec les Freedom Fries. Elle
    a
permet d’envoyer un message qui est stock´ dans un fichier xml. Les messages ainsi ”envoy´s”
                                             e                                                    e
sont lisibles depuis la page ”Fritures” (zone d’administration).


4.5     Epipub
   Epipub continu de s’agrandir, bien que peu de 2012 semble y porter un quelconque int´rˆt.
                                                                                       ee
Le script JS sera bientˆt mis ` jour afin de fournir un service de meilleure qualit´.
                       o      a                                                   e




                                                 19
Conclusion



   Les principales nouveaut´s ont ´t´ le chargement de mod`les et la mise en place du reseau en
                               e   ee                        e
UDP. Si ces domaines sont encores perfectibles, on regrettera la gestion plus que partielle du tir
qui fait que notre jeu n’est malheureusement pas encore jouable.
La prochaine soutenance ´tant deja la derni`re, nous devrons poursuivre nos efforts afin d’avoir
                           e                 e
un jeu de bonne qualit´ parfaitement jouable, ce qui n´cessiteras un travail et une collaboration
                       e                                e
exemplaire de chacun des membres.
   Entre la premi`re et la seconde soutenance les principales nouveaut´s ont ´t´ le debut de la
                   e                                                    e       ee
mise en place du reseau, le chargement des cartes dans le jeu et la cr´ation d’un nouvel ´diteur
                                                                      e                   e
de cartes.
Comme vous l’avez constat´ le projet avance bien, et la prochaine soutenance devrais ˆtre marqu´
                             e                                                       e           e
par le debut de la jouabilit´ de notre jeu (se d´placer ca va bien deux minutes . . .) : mise en
                               e                  e       ¸
place d’un reseau plus evolu´, gestion des tirs, affichage de mod`les.
                               e                                 e
`
A la prochaine soutenance !




                                               20

Contenu connexe

Tendances

Object detection and recognition in digital images
Object detection and recognition in digital imagesObject detection and recognition in digital images
Object detection and recognition in digital imagesSakher BELOUADAH
 
Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...Haytam EL YOUSSFI
 
Manuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEMManuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEMGrégoire Dupont
 
Media file 8531
Media file 8531Media file 8531
Media file 8531alia daoud
 
The Ring programming language version 1.8 book - Part 1 of 202
The Ring programming language version 1.8 book - Part 1 of 202The Ring programming language version 1.8 book - Part 1 of 202
The Ring programming language version 1.8 book - Part 1 of 202Mahmoud Samir Fayed
 
Cours mecasol 0_2
Cours mecasol 0_2Cours mecasol 0_2
Cours mecasol 0_2kahinarouam
 
Conception et implémentation d'un nouveau langage de programmation
Conception et implémentation d'un nouveau langage de programmationConception et implémentation d'un nouveau langage de programmation
Conception et implémentation d'un nouveau langage de programmationAymen Bouein
 
The Ring programming language version 1.10 book - Part 1 of 212
The Ring programming language version 1.10 book - Part 1 of 212The Ring programming language version 1.10 book - Part 1 of 212
The Ring programming language version 1.10 book - Part 1 of 212Mahmoud Samir Fayed
 
The Ring programming language version 1.6 book - Part 1 of 189
The Ring programming language version 1.6 book - Part 1 of 189The Ring programming language version 1.6 book - Part 1 of 189
The Ring programming language version 1.6 book - Part 1 of 189Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 1 of 210
The Ring programming language version 1.9 book - Part 1 of 210The Ring programming language version 1.9 book - Part 1 of 210
The Ring programming language version 1.9 book - Part 1 of 210Mahmoud Samir Fayed
 
Apprenez à monter votre ordinateur
Apprenez à monter votre ordinateurApprenez à monter votre ordinateur
Apprenez à monter votre ordinateurFouad Root
 
Annexes Logiciel Pl7
Annexes Logiciel Pl7Annexes Logiciel Pl7
Annexes Logiciel Pl7youri59490
 
initiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corrigesinitiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corrigesjojo sekkat
 

Tendances (19)

Object detection and recognition in digital images
Object detection and recognition in digital imagesObject detection and recognition in digital images
Object detection and recognition in digital images
 
Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...
 
Windows 8
Windows 8Windows 8
Windows 8
 
Manuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEMManuel du module additionnel RF-LAMINATE pour RFEM
Manuel du module additionnel RF-LAMINATE pour RFEM
 
Media file 8531
Media file 8531Media file 8531
Media file 8531
 
Analyse numérique
Analyse numériqueAnalyse numérique
Analyse numérique
 
The Ring programming language version 1.8 book - Part 1 of 202
The Ring programming language version 1.8 book - Part 1 of 202The Ring programming language version 1.8 book - Part 1 of 202
The Ring programming language version 1.8 book - Part 1 of 202
 
Cours mecasol 0_2
Cours mecasol 0_2Cours mecasol 0_2
Cours mecasol 0_2
 
Conception et implémentation d'un nouveau langage de programmation
Conception et implémentation d'un nouveau langage de programmationConception et implémentation d'un nouveau langage de programmation
Conception et implémentation d'un nouveau langage de programmation
 
PMP Report
PMP ReportPMP Report
PMP Report
 
The Ring programming language version 1.10 book - Part 1 of 212
The Ring programming language version 1.10 book - Part 1 of 212The Ring programming language version 1.10 book - Part 1 of 212
The Ring programming language version 1.10 book - Part 1 of 212
 
Guide latex.
Guide latex.Guide latex.
Guide latex.
 
Memoire_final
Memoire_finalMemoire_final
Memoire_final
 
The Ring programming language version 1.6 book - Part 1 of 189
The Ring programming language version 1.6 book - Part 1 of 189The Ring programming language version 1.6 book - Part 1 of 189
The Ring programming language version 1.6 book - Part 1 of 189
 
The Ring programming language version 1.9 book - Part 1 of 210
The Ring programming language version 1.9 book - Part 1 of 210The Ring programming language version 1.9 book - Part 1 of 210
The Ring programming language version 1.9 book - Part 1 of 210
 
Apprenez à monter votre ordinateur
Apprenez à monter votre ordinateurApprenez à monter votre ordinateur
Apprenez à monter votre ordinateur
 
Annexes Logiciel Pl7
Annexes Logiciel Pl7Annexes Logiciel Pl7
Annexes Logiciel Pl7
 
Cours10
Cours10Cours10
Cours10
 
initiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corrigesinitiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corriges
 

En vedette

Etat, politique et mondialisation
Etat, politique et mondialisationEtat, politique et mondialisation
Etat, politique et mondialisationOmar EL Fakir
 
03 7n2is taller-interfaz usuario
03 7n2is taller-interfaz usuario03 7n2is taller-interfaz usuario
03 7n2is taller-interfaz usuarioManuel Mujica
 
Despertar interior y el perdon
Despertar interior y el perdonDespertar interior y el perdon
Despertar interior y el perdonEuler
 
Statistiques web de septembre 2009
Statistiques web de septembre 2009Statistiques web de septembre 2009
Statistiques web de septembre 2009cdtsomme
 
pro.bel.fly pbf brochure fr lr
pro.bel.fly pbf brochure fr lrpro.bel.fly pbf brochure fr lr
pro.bel.fly pbf brochure fr lrFabrice Carlier
 
Branche- bibliographic report 1
Branche- bibliographic report 1Branche- bibliographic report 1
Branche- bibliographic report 1Emilie Branche
 
Moyse de la sonorité - art et technique
Moyse   de la sonorité - art et techniqueMoyse   de la sonorité - art et technique
Moyse de la sonorité - art et techniquealonso guerrero lopez
 
Photos montages
Photos montagesPhotos montages
Photos montageslyago
 
Don giovanni
Don giovanniDon giovanni
Don giovanniM@rsouin
 
Nomenclature vandemeulebroecke carlos
Nomenclature vandemeulebroecke carlosNomenclature vandemeulebroecke carlos
Nomenclature vandemeulebroecke carlosFabrice Carlier
 
Rapport du Président à l'Assemblée de Polynésie Française - année 2013
Rapport du Président à l'Assemblée de Polynésie Française - année 2013Rapport du Président à l'Assemblée de Polynésie Française - année 2013
Rapport du Président à l'Assemblée de Polynésie Française - année 2013Jean-Olivier Begouin
 
Les choses de la vie
Les choses de la vieLes choses de la vie
Les choses de la vielyago
 
Estandares Abiertos Ahorre de costos y OpenGovernment
Estandares Abiertos Ahorre de costos y OpenGovernmentEstandares Abiertos Ahorre de costos y OpenGovernment
Estandares Abiertos Ahorre de costos y OpenGovernmentAlexandro Colorado
 
Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...
Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...
Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...M@rsouin
 

En vedette (20)

Etat, politique et mondialisation
Etat, politique et mondialisationEtat, politique et mondialisation
Etat, politique et mondialisation
 
03 7n2is taller-interfaz usuario
03 7n2is taller-interfaz usuario03 7n2is taller-interfaz usuario
03 7n2is taller-interfaz usuario
 
Zen de la libertad
Zen de la libertadZen de la libertad
Zen de la libertad
 
Despertar interior y el perdon
Despertar interior y el perdonDespertar interior y el perdon
Despertar interior y el perdon
 
Statistiques web de septembre 2009
Statistiques web de septembre 2009Statistiques web de septembre 2009
Statistiques web de septembre 2009
 
pro.bel.fly pbf brochure fr lr
pro.bel.fly pbf brochure fr lrpro.bel.fly pbf brochure fr lr
pro.bel.fly pbf brochure fr lr
 
Branche- bibliographic report 1
Branche- bibliographic report 1Branche- bibliographic report 1
Branche- bibliographic report 1
 
Quicklabel
QuicklabelQuicklabel
Quicklabel
 
Moyse de la sonorité - art et technique
Moyse   de la sonorité - art et techniqueMoyse   de la sonorité - art et technique
Moyse de la sonorité - art et technique
 
Menus 2014
Menus 2014Menus 2014
Menus 2014
 
Photos montages
Photos montagesPhotos montages
Photos montages
 
Don giovanni
Don giovanniDon giovanni
Don giovanni
 
Prg c
Prg cPrg c
Prg c
 
Nomenclature vandemeulebroecke carlos
Nomenclature vandemeulebroecke carlosNomenclature vandemeulebroecke carlos
Nomenclature vandemeulebroecke carlos
 
Rapport du Président à l'Assemblée de Polynésie Française - année 2013
Rapport du Président à l'Assemblée de Polynésie Française - année 2013Rapport du Président à l'Assemblée de Polynésie Française - année 2013
Rapport du Président à l'Assemblée de Polynésie Française - année 2013
 
Les choses de la vie
Les choses de la vieLes choses de la vie
Les choses de la vie
 
Quinta semana
Quinta semanaQuinta semana
Quinta semana
 
Estandares Abiertos Ahorre de costos y OpenGovernment
Estandares Abiertos Ahorre de costos y OpenGovernmentEstandares Abiertos Ahorre de costos y OpenGovernment
Estandares Abiertos Ahorre de costos y OpenGovernment
 
Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...
Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...
Quels rôles et quelles pratiques sur une nouvelle plateforme de réception des...
 
termodinamica
termodinamicatermodinamica
termodinamica
 

Similaire à Sout3

Similaire à Sout3 (20)

Report MyProof
Report MyProofReport MyProof
Report MyProof
 
Langage c
Langage cLangage c
Langage c
 
Cours stochastic processes
Cours stochastic processesCours stochastic processes
Cours stochastic processes
 
Nagios
NagiosNagios
Nagios
 
courspython3.pdf
courspython3.pdfcourspython3.pdf
courspython3.pdf
 
pfe_rapport_poste_licence_LFIG.pdf
pfe_rapport_poste_licence_LFIG.pdfpfe_rapport_poste_licence_LFIG.pdf
pfe_rapport_poste_licence_LFIG.pdf
 
Oracle
OracleOracle
Oracle
 
oecoil condens-2-notice-utilisation
oecoil condens-2-notice-utilisationoecoil condens-2-notice-utilisation
oecoil condens-2-notice-utilisation
 
Performances d’un système virtualisé avec v mware esxi
Performances d’un système virtualisé avec v mware esxiPerformances d’un système virtualisé avec v mware esxi
Performances d’un système virtualisé avec v mware esxi
 
rapport de stage.
rapport de stage.rapport de stage.
rapport de stage.
 
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
 
Poly
PolyPoly
Poly
 
Analyse2 00
Analyse2 00Analyse2 00
Analyse2 00
 
C66
C66C66
C66
 
Protection-dun-réseau-dentreprise-via-un-firewall.pdf
Protection-dun-réseau-dentreprise-via-un-firewall.pdfProtection-dun-réseau-dentreprise-via-un-firewall.pdf
Protection-dun-réseau-dentreprise-via-un-firewall.pdf
 
Dimensionnement d'un Tour (IGH) R+17 sous Eurocodes
Dimensionnement d'un Tour (IGH)  R+17 sous Eurocodes Dimensionnement d'un Tour (IGH)  R+17 sous Eurocodes
Dimensionnement d'un Tour (IGH) R+17 sous Eurocodes
 
cours de Matlab
 cours de Matlab cours de Matlab
cours de Matlab
 
notes-de-cours-de-fouille-de-donnees.pdf
notes-de-cours-de-fouille-de-donnees.pdfnotes-de-cours-de-fouille-de-donnees.pdf
notes-de-cours-de-fouille-de-donnees.pdf
 
Belwafi bilel
Belwafi bilelBelwafi bilel
Belwafi bilel
 
Belwafi bilel
Belwafi bilelBelwafi bilel
Belwafi bilel
 

Sout3

  • 1. Soutenance Num´ro 3 e PREVOST Jean-Romain LHUILLIER Ga¨tan e LEMOINE Gauthier Mai 2008
  • 3. Introduction La seconde soutenance avait vu la mise en place du chargement des cartes et le r´seau avait e commenc´ ` sortir de sa coquille. Ce nouvel ´pisode de la cr´ation de Fry Them All s’av`re encore ea e e e plus all´chant avec le d´veloppement du reseau mais ´galement l’arriv´e de mod`les ! e e e e e Apr`s bien des heures de travail les Freedom Fries sont fiers de vous presenter leurs oeuvres ! e 1
  • 4. Table des mati`res e 1 R´seau e 4 1.1 L’importance de passer a L’UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Que choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 e 1.2.1 M´saventures avec Internet Composant . . . . . . . . . . . . . . . . . . . 4 1.2.2 Le mauvais choix Indy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.3 Winsock, LA solution ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.4 ICS un compromis qui nous conviens. . . . . . . . . . . . . . . . . . . . . 5 1.3 Ce que l’udp nous permet de faire de nouveau . . . . . . . . . . . . . . . . . . . . 5 e 1.4 Un serveur remodel´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 e 1.5 Un Client soign´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2 Gestion des collisions 8 2.1 Gestion des tirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2 Travail ` r´aliser pour la prochaine soutenance . . . . . . . . . . . . . . . . . . . a e 9 3 Moteur graphique 10 e 3.1 Gestion des entr´es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1.1 Le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1.2 La souris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.3 La console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Mini-carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.1 Affichage de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 e 3.2.2 Cr´ation d’une miniature . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3 Enrichissement des cartes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3.1 Personnalisation des textures . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3.2 Points de depart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3.3 Les portes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 e 3.4 Les mod`les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4.1 Choix technologiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4.2 Implementation et modification du chargeur de mod`les e . . . . . . . . . . 15 2
  • 5. Fry Them All 3.4.3 Choix du mod`le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 16 4 Site Web 18 4.1 Galerie de capture du jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.2 FryTV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.3 Anglais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.4 Contact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.5 Epipub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3
  • 6. CHAPITRE 1 R´seau e par JR.Prevost 1.1 L’importance de passer a L’UDP Peu avant la soutenance 2 lorsque nous avons test´ le r´seau dans des conditions de jeu, nous e e nous sommes rendus compte que nous avions fait une grosse erreur en choisissant le protocole TCP pour l’envoi de nos donn´es. En effet, ce dernier n’est pas adapt´ pour envoyer plusieurs e e dizaines de fois par seconde des donn´es et en recevoir d’autant plus. En faisant des recherches e sur internet la plupart des articles traitant des diff´rences entre UDP et TCP s’accordaient e pour dire que lorsqu’il s’agit de jeux en r´seaux l’UDP est le plus souvent le plus adapt´. Tout e e particuli`rement pour les FPS qui n´cessitent une utilisation intense du r´seau. e e e 1.2 Que choisir ? D`s lors que l’on savait que l’on devait utiliser le protocole UDP il nous fallait trouver un e nouveau composant delphi car celui que l’on utilisait jusque l` ne le permet pas. a 1.2.1 M´saventures avec Internet Composant e La premi`re id´e a ´t´ de vouloir utiliser le composant UDP de la ”suite” internet dont est e e ee issue les composants que l’on utilise pour nos connections en TCP. Ce fut une bien mauvaise id´e. Bien que ces composants soient simples d’utilisation ils datent et il existe tr`s peu de e e documentation sur ceux-ci sur internet. De plus ils sont devenus d´suets. Mais la vrai raison e qui m’a fait regretter d’essayer de les utiliser c’est que j’ai perdu beaucoup de temps ` essayer a d’envoyer des donn´e en UDP tout cela pour me rendre compte que cela ne semble ˆtre possible e e qu’entre 2 interlocuteurs ce qui rend le composant compl`tement sans int´rˆt pour nos besoins. e ee Mˆme si cela ne pose aucun probl`me pour ce qui est de l’envoi de donn´es depuis le client e e e 4
  • 7. Fry Them All R´seau e vers le serveur, lorsqu’il s’agira d’envoyer depuis le server vers les x clients cela posera un s´v`re e e probl`me. e 1.2.2 Le mauvais choix Indy J’ai alors pens´ ` utiliser Indy ´tant donn´ que ce composant est int´gr´ a Delphi et semblait ea e e e e bien document´. Ce pendant je me suis vite rendu compte que tous les exemples de code que e l’on trouve sur internet sont d´pass´s et ne compilent pas sur delphi 2007 avec Indy 10. Apr`s e e e plusieurs recherches j’ai r´ussi ` utiliser Indy mais j’ai ´t´ confront´ ` des probl`mes sans pouvoir e a ee ea e en trouver la cause. L` encore, cela ´t´ une sacr´e perte de temps. a ee e 1.2.3 Winsock, LA solution ? On m’a fortement conseill´ d’utiliser Winsock directement au lieu d’en utiliser des sur-couche. e J’ai alors entrepris de l’utiliser directement, les recherches sur comment l’utiliser m’ont fait comprendre beaucoup de notions que j’avais jusque l` survol´. Cependant j’ai pr´f´r´ ne pas a e eee l’utiliser directement, au profit d’ICS. En effet tout ce que j’aurai r´ussi ` faire directement e a en utilisant Winsock n’aurais pas ´t´ aussi bien optimis´ que ce que propose des biblioth`ques ee e e comme ICS qui sont faites par des gens qui maˆ ıtrise bien mieux que moi le r´seau. e 1.2.4 ICS un compromis qui nous conviens. Bien qu’ICS ne dispose d’aucune documentation, il est fourni avec un grand nombre d’exemples, ce qui rend assez facile son utilisation. Nous avons donc choisi de l’utiliser pour l’envoi de donn´es e en UDP, tout en gardant notre ancien composant pour ceux en TCP. 1.3 Ce que l’udp nous permet de faire de nouveau Grˆce ` l’UDP il nous est possible d’envoyer des paquets ` la vol´. Ainsi nous avons pu tester a a a e l’envoi de plus de 70 paquets par seconde sans aucun probl`me. En TCP il nous ´tait pas possible e e d’en envoyer tant ` cause du protocole en lui mˆme. En effet en TCP lorsque les donn´es sont a e e 5
  • 8. Fry Them All R´seau e envoy´es ` un client on attend la confirmation que celui-ci les ai bien re¸u, alors qu’en UDP elles e a c sont envoy´es ` une adresse et on ne se souci pas de savoir si elles arrivent ` destination. e a a 1.4 Un serveur remodel´ e Le principe du serveur n’a gu`re chang´, les clients envoient les donn´es au serveur qui se e e e charge de les renvoyer ` tous les clients. La diff´rence majeur est la possibilit´ d’envoyer et a e e de recevoir des donn´es aussi bien en TCP qu’en UDP. En effet, pour le chat et la connexion e au serveur (ce qui comprend l’envoi du pseudo et bientˆt la gestion de la carte) on utilise le o protocole TCP plus adapt´ pour ce genre d’envois. Par contre pour l’envoi des coordonn´es de e e joueurs l’UDP est obligatoire. Auparavant nous utilisions 3 envois pour les coordonn´es des joueurs, celles en X puis Y et e enfin l’angle de la cam´ra, ce qui n’´tait pas tr`s malin car cela triplait le nombre d’envoi. A e e e ` l’origine nous pensions envoyer les coordonn´es que quand celles-ci changent, ce qui expliquait e l’envoi s´par´. Mais comme elles sont maintenant envoy´es ` chaque tour de boucle de jeu (plus e e e a exactement 30 fois par secondes pour ne pas surcharger inutilement) un envoi group´ a beaucoup e plus de sens. Si le principe du serveur n’a pas chang´ et que seul des changements on ´t´ apport´s, l’interface e ee e ` de ce dernier a connu des modifications. A la place d’un TStringGrid pour l’aper¸u de la carte en c cours de jeu, on utilise maintenant un TPanel qui nous permet d’utiliser OpenGl pour afficher la carte. La MiniMap de Gauthier que l’on utilise dans le jeu a ´t´ incorpor´ et contient en temps ee e r´el la position et l’orientation des joueurs sur la carte. Ce qui est tr`s agr´able et tr`s utile pour e e e e v´rifier le bon envoi des donn´es. e e 6
  • 9. Fry Them All R´seau e 1.5 Un Client soign´ e Le client ´tait on ne peut plus sommaire et pas tr`s esth´tique, j’ai donc corrig´ cela en e e e e lui apportant un look Freedom Fries ansi que quelques am´lioration. Bien sur il est muni des e composants ICS UDP mais les modifications ne se sont pas arrˆt´es l`. Dans le coin haut gauche ee a une partie ”Hacking” permet d’envoyer des donn´es au choix en UDP/TCP vers n’importe quelle e IP, on peut ansi tuer un adversaires ou mˆme expulser un perturbateur. Et comme nous somme e tr`s fain´ant et qu’il n’est pas si ´vident pour tout le monde de r´cup´rer son adresse IP nous e e e e e avons mis en place un syst`me utilisant un Broadcast pour r´cup´rer automatiquement l’adresse e e e IP des serveurs disponibles sur le r´seau local. e 7
  • 10. CHAPITRE 2 Gestion des collisions par G.Lhuillier 2.1 Gestion des tirs Pour cette soutenance, j’ai essay´ de mettre en application les id´es que j’ai pr´sent´ lors e e e e de la deuxi`me soutenance, toutefois j’ai encore quelques probl`mes quant ` l’utilisation de mes e e a fonctions li´es ` l’appel de certaines variables (comme les informations li´es ` la carte emplace- e a e a ment des murs et des caisses). Je pr´senterai donc une gestion du tir partielle qui ne g`rera pas les collision avec les murs (hor- e e mis les bords de la salle, le sol et le plafond ). Dans cette version du tir, si un adversaire est touch´, il peut ˆtre touch´ sur diff´rentes parties de son corps, une balle dans la tˆte (ou head- e e e e e shot) entraˆıne... la mort, bien-sˆr, une balle dans la poitrine provoque des d´gˆts importants et u e a une balle dans le reste du corps provoque des d´gats faibles. e Pour tester les diff´rentes parties du corps et voir o` un personnage est atteint, j’utilise d’abord e u une fonction qui cr´e une grosse boite tout autour du personnage, puis si une balle rentre dans e cette boite (et donc que le personnage est touch´), je cr´e deux autres boites, une petite au niveau e e de la tˆte et une plus importante en dessous au niveau du torse et on applique les changements e en fonction des boites touch´es : la petite entraˆ la mort, la moyenne de gros d´gˆts, et la e ıne e a grande les d´gˆts les plus faibles. e a Le syst`me des points de vie n’´tant pas encore au point pour l’instant, tout personnage se pre- e e nant une balle mourra sur le coup mˆme s’il ne la prend pas dans la tˆte. e e Toutefois, les diff´rentes zones seront marqu´es par des messages indiquant l’endroit qui a ´t´ e e ee touch´ : headshot et nice shot correspondant ` un tir ` la tˆte et ` la poitrine e a a e a 8
  • 11. Fry Them All Gestion des collisions 2.2 Travail ` r´aliser pour la prochaine soutenance a e Am´liorer la gestion du tir, c’est ` dire fournir une gestion des tirs compl`te avec collisions e a e avec le d´cor et zones de touche multiples. G´rer le syst`me de points de vies pour les personnages e e e ainsi que quelques autres am´liorations e 9
  • 12. CHAPITRE 3 Moteur Graphique par G.Lemoine 3.1 Gestion des entr´es e 3.1.1 Le clavier La gestion du clavier a ´t´ am´lior´e entre les deux soutenances. En effet j’utilisais avant la ee e e fonction glfwGetKey(key) qui retourne 1 si la touche est appuy´e, 0 sinon, en g´rant via une e e boucle le parcours de tout le clavier et via une variable le fait de ne pas ajouter une lettre par frame, mais de ne l’ajouter que les X secondes. Cependant il y avait bien mieux en utilisant notre gestionnaire de fenˆtres. GLFW propose un e syst`me de ”callback” : ` chaque appuis (ou relˆche) d’une touche, une procedure que nous e a a avons cr´´e est appel´e, avec en param`tre l’entier correspondant au code ascii de la touche, ee e e ansi qu’un entier valant 1 ou 0 qui informe si l’utilisateur a appuy´ ou relˆch´ la touche. Cette e a e procedure est reli´e ` GLFW via les routines glfwSet[Char/Key]Callback (key g`re tout le clavier, e a e char uniquement les caract`res alphab´tiques, nous utilisons donc char) en passant en param`tre e e e un pointeur vers la procedure. L’activation de la r´p´tition des touches fait que la procedure e e est appel´es si la touche est deja appuy´e depuis un certains temps, exactement comme dans e e Windows. La proc´dure appel´e se contente d’ajouter dans un buffer les touches appuy´es. Lorsqu’une e e e partie de notre programme n´cessite la gestion du clavier (par exemple le chat) alors il va lire ce e buffer et le remettre ` vide, sachant que lorsque l’on appuie sur ”entr´e” pour afficher la zone de a e saisie, le buffer est vid´e afin de ne pas ajouter au chat les ´ventuelles touches appuy´es pendant e e e le jeu. Le principal probl`me rencontr´ ´tais que le programme compilais, mais que les param`tres e e e e ´taient toujours les mˆmes aux lieux du caract`re et de l’´tat de la touche. Apr`s quelques e e e e e difficult´s (glfwSetCharCallback + delphi donnant 3 r´sultats sur Google) j’ai pu finalement e e 10
  • 13. Fry Them All Moteur Graphique identifier le probl`me, il fallait pr´ciser l’utilisation de la convention d’appel stdcall dans la e e d´claration de la procedure. e 3.1.2 La souris Si la souris est g´r´e depuis longtemps pour se d´placer et regarder autour de soi, nous ee e n’avions pas encore g´r´ la roulette sur le haut de la plupart des souris. La encore glfw s’av`re ee e tr`s efficace, puisque comme le clavier il propose un syst`me de callback, qui appelle une fonction e e a ` chaque modification de la position de la roulette, et une autre qui donne un acc`s direct ` un e a entier correspondant ` la position de celle-ci. a Nous l’utilisons grˆce ` l’acc`s direct ` un entier, ansi en effectuant un modulo nous pouvons a a e a d´finir quelle arme utilise le joueur et l’afficher ` l’´cran ! e a e 3.1.3 La console Notre bonne gestion du clavier nous a permis de r´aliser une console dans notre jeu. e Elle est accessible via la touche ”2 ” et permet de r´aliser nombre de commandes, grˆce au parser e a appel´ lorsque l’on appuie sur la touche ”entr´e”. Elle permet ´galement un acc`s au chat, deja e e e e disponible ` la soutenance pr´c´dente. Lorsque l’on demande l’affichage de la console celle-ci a e e descend progressivement, et la mini-carte s’efface pour ne pas cacher la console. ` A chaque ajout d’une commande celle-ci est trait´e par un parser qui d´fini s’il faut ´ventuellement e e e effectuer une action. Ensuite on ajoute cette commande dans l’historique de la console via un simple ajout en tˆte d’une liste chaˆ ee. L’affichage des commandes consiste simplement ` la par- e ın´ a courir tant qu’il y a des elements non affich´ et qu’il reste de la place ` l’´cran (que la commande e a e n’est pas affich´e ”au dessus” de l’´cran). e e Les commandes mise en place permettent notamment de debugger / tester la gestion des joueurs (ajout de joueurs, modification de leurs coordonn´es) mais surtout de changer le th`me visuel du e e jeu, via la commande ’reload’ qui prend en param`tre le nom d’un th`me, et remplace certaines e e textures. Changement de th`me visuel par la console e 11
  • 14. Fry Them All Moteur Graphique 3.2 Mini-carte Afin d’aider l’utilisateur ` se rep´rer dans la carte, nous avons mis ` sa disposition une pe- a e a tite carte o` l’on peut voir sa position ansi que celle de son ´quipe, pour une meilleur strat´gie u e e d’´quipe. e 3.2.1 Affichage de la carte La mini-carte est disponible de deux fa¸ons. Par d´faut, elle est affich´e en haut ` gauche c e e a de l’´cran en petit, ce qui suffit cependant ` avoir un bon aper¸u de la zone. Si l’utilisateur e a c souhaite mieux la voir, il peut utiliser la touche ”espace” : il verra alors un effet de translation et de redimensionnement qui centrera et agrandira progressivement la carte. L’effet inverse est produit, plus rapidement, pour repasser en petit. Affichage de la carte en elle-mˆme e Techniquement il s’agit en r´alit´ de deux affichages distincts. e e • Lorsqu’elle est en petit en haut ` gauche de l’´cran, c’est un rectangle qui est textur´ a e e d’une image representant l’int´gralit´ de la carte. Dans ce cas le joueur est en pleine partie e e et c’est ici que nous avons besoin d’avoir un jeu performant pour ˆtre jouable dans de e bonnes conditions sur la plupart des ordinateurs, aussi modestes soient-ils, et une simple application de texture est ce qu’il y a de plus l´ger. e • En revanche, lorsqu’elle est affich´e en gros plan nous pouvons nous permettre d’ˆtre un e e peu plus lourd. Ansi si nous affichions via une simple texture pour ne pas avoir d’effet de pixelisation nous serions contraint d’avoir un image de taille tr`s importante, ce qui baisse- e rais le FPS dans notre premier cas. Nous utilisons donc l’affichage d’autant de quadrilat`res e qu’il y a de case textur´s par une petite image, grˆce ` un tableau de sommet initialis´ au e a a e lancement du jeu. Il est ` noter que nous comparons les dimensions de la carte pour qu’` l’affichage celle-ci conserve a a ses proportions : si elle est tr`s large, elle le sera ` l’´cran. Il s’agit l` encore d’un calcul de e a e a proportionnalit´ entre les deux axes. e Affichage des joueurs Il n’est pas difficile ` partir de la position des joueurs de les repr´senter par un petit curseur. a e Leur position ` l’´cran est calcul´e par proportionnalit´ entre la position du joueur, la taille de a e e e la carte et la taille de la carte ` l’´cran. La rotation est effectu´e par un glRotatef de l’angle du a e e joueur. Trois couleurs de curseur sont utilis´es : la verte pour le joueur actuel, et la rouge et la bleue e pour les autres selon leur ´quipe. e Le curseur est un carr´ textur´ d’une image representant un personnage avec son arme. Pour le e e placer avec pr´cision c’est son centre (intersection des deux diagonales) qui est plac´ au point e e (0,0) puisqu’il subit la translation jusqu’` sa position, puis la rotation. a 12
  • 15. Fry Them All Moteur Graphique 3.2.2 Cr´ation d’une miniature e Nos miniatures sont g´n´r´es directement dans le jeu. Delphi propose des outils pour la ma- e ee nipulation d’images, avec les classes TJpegImage et TBitmap. Il est facile de convertir une image bitmap en jpeg et vice versa grˆce ` la m´thode Assign(ImageSource). On peut acceder ` la a a e a taille d’une image bitmap via ses propri´t´s ”width” et ”height” et ` chaque pixel par Img- ee a Src.canvas.pixel[i][j]. Pour g´n´rer notre miniature, nous parcourons le tableau contenant la carte (tableau ` deux e e a dimensions contenant un caract`re par case) puis pour chaque element on remplis les pixels cor- e respondant ` cet emplacement sur l’image de la carte. Chaque element est constitu´ de x pixels a e par ´l´ment (constante modifiable) et donc l’image a une taille plus grande plus il y a d’elements. ee a ` chaque ´l´ment on ajoute les pixels a la carte en acc´dant aux pixels des fichiers de texture des ee ` e sols, murs et caisses. Une fois la miniature g´n´r´e elle est enregistr´e dans le dossier cartes sous le format ”NomDe- e ee e LaCarte.jpg”. ` chaque lancement du jeu l’image n’est g´n´r´e que si elle n’est pas pr´sente dans a e ee e le r´pertoire, sinon on se contente de la charger. e Affichage en gros plan de la carte 3.3 Enrichissement des cartes 3.3.1 Personnalisation des textures Beaucoup nous on reproch´ le fait que les textures ont depuis le debut du projet toujours ´t´ e ee les mˆmes, et qui plus est, n’´taient pas forcement les plus belles que l’on puisse trouver. Devant e e le rˆle capital de celle-ci dans la vision que le joueur a du jeu, les am´liorer en augmentant leur o e diversit´ s’est donc av´r´ un point important ` travailler. e ee a Nous avons pu trouver sur internet des textures qui nous plaisent, et permettent de repr´senter e different types d’environnements : Afrique du Nord, zone industrielle, . . . 13
  • 16. Fry Them All Moteur Graphique Afin de choisir un th`me visuel facilement j’ai r´alis´ un petit module permettant en une variable e e e de changer totalement l’apparence du jeu. Le dossier Textures du jeu contient un dossier par style visuel. Il contient les textures des murs et du sol (au format tga, png, jpg . . .) ansi qu’un fichier texte de configuration. Ce dernier contient principalement l’adresse des images, et des configurations plus avanc´es tel que le nombre de repetition vertical de la texture. La gestion au e sein du jeu n’est pas compliqu´e puisqu’il faut lire ce fichier (en v´rifiant qu’il existe vraiment e e . . .) pour remplir un enregistrement qui sera utilis´ au chargement des textures et ` la generation e a des tableaux de sommets, qui contiennent les coordonn´es des textures. e Grˆce ` la console nous pouvons en une ligne de commande changer instantan´ment de th`me, a a e e grˆce ` des commandes de la forme ”reload nomDuTheme”, le parser v´rifiant que le th`me existe a a e e bien. 3.3.2 Points de depart Nous avons rajout´ aux cartes des points de depart, repr´sent´s par la lettre ’k’. Au chargement e e e de la carte un tableau contenant les coordonn´es de chaque point de d´part est cr´e, et chaque e e e fois que l’on doit faire apparaˆ un joueur, un de ces departs est s´lectionn´ au hasard. ıtre e e De plus, une fois la case s´lectionn´e un autre tirage au sort d´finie l’angle de d´part dans le jeu. e e e e 3.3.3 Les portes Nous souhaitions enrichir notre jeu par la mise en place de portes. En plus d’apporter de la diversit´ aux environnements, elles repr´sentent dans la plupart des First Person Shooter un rˆle e e o important, o` le combat se transforme souvent en boucherie. u Dans notre jeu la porte est constitu´e de quatre quadrilat`res : face avant, arri`re, et deux faces e e e lat´rales ; les faces du haut et du bas ´tant invisibles ` voir, il ´tait inutile de les afficher. Pour de e e a e meilleurs performances nous utilisons l` encore les Vertex Arrays. Chaque porte est une classe a contenant toutes les informations n´cessaires ` l’affichage : position, angle, information si la porte e a est ouverte ou non, . . . Toutes les portes de la carte sont contenue dans le tableau d’une autre classe. Pour les afficher il suffit d’afficher tout le tableau de portes. Pour la gestion des collision comme dans la gestion de l’activation des portes, une recherche s´quentielle est effectu´e pour trouver la porte concern´e. e e e Dans le cas de l’activation, en cas d’appuie sur shift gauche ` proximit´ d’une porte son ´tat est a e e invers´, et une animation illustre l’ouverture / fermeture de la porte. Pour les collisions, il faut e examiner si la porte est ouverte ou non pour d´finir si l’on peut passer. e 3.4 Les mod`les e Le chargement des mod`les repr´sentant les ennemis est le point le plus important au niveau e e OpenGL pour cette 3e soutenance. 3.4.1 Choix technologiques Concernant les solutions envisageables, il y avais deux points ` diff´rencier : a e • La cr´ation des mod`les e e • Leur chargement dans le programme. Notre jeu ´tant un FPS, du genre Quake / Unreal, nous souhaitions avoir des mod`le humains. e e Personne dans le groupe n’ayant la moindre connaissance d’un logiciel tel que 3DS, Blender 14
  • 17. Fry Them All Moteur Graphique Une porte dans l’environnement ”Egypt” ou autre MilkShape, il nous a paru bien difficile de r´aliser des mod`les de qualit´ disposant e e e d’animations. Une fois avoir choisis d’utiliser des mod`les existants, s’est pos´e la question du chargement des e e mod`les dans notre jeu. e Contrairement a DirectX, cela n’est pas g´r´ et nous avons du choisir entre coder notre propre ee chargeur, ou bien utiliser un deja existant. Apr`s de nombreuses recherches, le coder est difficile, et la quasi-totalit´ des groupes l’ayant fait e e on en r´alit´ consid´rablement copi´s ceux deja existants. Enfin, au vu de notre groupe a l’effectif e e e e r´duis, nous avons donc decider d’utiliser un chargeur de mod`les deja existant. Apr`s recherche, e e e le couple chargeur de mod`les Quake 3 de Sulaco s’est aver´ ˆtre la seul solution viable pour e e e notre projet. 3.4.2 Implementation et modification du chargeur de mod`les e Le chargeur de mod`les de Sulaco est d´compos´ en deux parties : d’une part les personnages e e e anim´s Quake 3, et d’autre part les autres mod`les en *.md3, tels que les armes. e e Le chargement des personnages fonctionne bien, et la mise en place dans notre jeu a ´t´ facile. Il ee est possible d’utiliser un personnage plutˆt qu’un autre en changeant simplement un param`tre o e de fonction, de mˆme pour les diff´rentes couleur de chaque mod`le. e e e Le chargement des armes est quant ` lui nettement moins bien fait, et on ne peut pas si simple- a ment changer d’arme. Le chargement d’une arme est une succession de chargement de meshes, contenant leur vertices et les textures. Ansi pour chaque arme les meshs sont diff´rents (diffe- e rences de noms, nombre etc ...) si bien qu’il faut modifier le code pour chaque armes. J’ai donc modifi´ le chargeur d’armes, qui ` partir du nom de l’arme lit dans un tableau les informations e a a ` charger. Une fois que tout cela fonctionnais bien, nous avons regrett´s la qualit´ moyenne des mod`les, e e e qui ont tout de mˆmes plus de 8 ans. Nous avons alors vu que ceux du mod Urban Terror ´taient e e bien meilleurs (ils poss`dent nettement plus de vertices et les textures sont de meilleur qualit´) e e et leur structure est quasiment identique. Nous avons donc assez ais´ment charg´s les mod`les, e e e mais cependant les animations n’ont pas fonctionn´es. Dans le mod Quake 3, les fichiers textes e ”animations.cfg” sont diff´rents, et nous avons du d’abord modifier le fichier pour qu’il soit bien e 15
  • 18. Fry Them All Moteur Graphique pars´ par notre jeu. Ensuite il a fallu faire quelques modifications dans le chargeur de mod`les e e au niveau de la gestion des animations pour que celles-si fonctionnent. Au final nous sommes en mesure de charger tous les personnages de Quake III, Urban Terror et Tremulous (un autre mod). Le personnage f´minin rouge, avec son fusil de sniper e 3.4.3 Choix du mod`le e Afin de permettre au joueur de choisir son ´quipe et le sexe de son personnage lorsque celui-ci e commence ` jouer, un menu est affich´. On y voit les quatre mod`les en action et l’utilisateur a e e doit utiliser la souris pour s´lectionner le personnage de son choix, le fond de la case survol´e e e ´tant l´g`rement plus clair. e e e Une fois ce choix effectu´ on rejoint la partie et l’ensemble des joueurs est inform´ de ses choix e e pour afficher le mod`le correspondant. e 16
  • 19. Fry Them All Moteur Graphique Quel personnage choisirez vous ? 17
  • 20. CHAPITRE 4 Site Web par JR.Prevost 4.1 Galerie de capture du jeu J’ai am´lior´ la galerie en ajoutant une page listant toutes les images, ainsi au lieu d’ arriver e e directement sur la vue en diaporama il est possible de choisir quelle image avoir en diaporama. Pour avoir un rendu plus agr´able des miniatures sont g´n´r´es par PHP. Un cache est utilis´ e e ee e pour rendre la galerie plus fluide. 4.2 FryTV La section vid´o de notre site a ´t´ compl`tement repens´e. Avant seules des miniatures des e ee e e vid´os avec un lien rtsp :// ´taient disponibles. Le probl`me ´tait que sur certaines plate-formes e e e e aucune application n’ est associ´e au protocole rtsp ce qui ne rend pas simple le visionnage de e flux vid´o via rtsp. C’est pour rem´dier ` cela j’ai opt´ pour l’utilisation du plugin QuickTime, e e a e car mˆme s’il est moins populaire que flash il est de bien meilleur qualit´ pour la vid´o. Comme e e e le plugin est ins´r´ directement sur le site des dimensions HD ne sont pas envisageables j’ai ee donc privil´gi´ une taille maximum de 600px*450px pour les vid´os ce qui nous permet tout e e e de mˆme d’obtenir une qualit´ bien sup´rieur ` YouTube par exemple. Comme il s’agit l` de e e e a a vrais streaming il nous est possible de partager de longues vid´os et il sera possible au visiteur e d’avancer comme bon lui semble dans la vid´o. Pour rendre le visionnage encore plus agr´able e e j’ai ins´r´ une bande d´filante contenant des miniatures des vid´os disponible, un simple clique ee e e sur une miniature permet de lancer une vid´o. Pour se d´placer sur une bande de vid´os il suffit e e e de survoler les bords de celle-ci pour la faire d´filer. Comme on est geek et que l’on ne se refait e pas des vid´os suppl´mentaires sont disponibles avec un Cheat code ( ’&pron=42’ en plus dans e e l’url). 18
  • 21. Fry Them All Site Web Videos en streaming 4.3 Anglais Le site est maintenance Shakespeare friendly c’est ` dire que l’interface du site est disponible a en anglais. Des nouvelles sur l’avanc´e du projet sont disponibles en anglais. Toutes les pages ne e sont pas traduites mais l’essentiel y est ! 4.4 Contact La page de contact avait disparue (il faut avouer qu’elle ´tait d’une utilit´ bien discutable), la e e voil` revenue mais cette fois elle permet vraiment de prendre contact avec les Freedom Fries. Elle a permet d’envoyer un message qui est stock´ dans un fichier xml. Les messages ainsi ”envoy´s” e e sont lisibles depuis la page ”Fritures” (zone d’administration). 4.5 Epipub Epipub continu de s’agrandir, bien que peu de 2012 semble y porter un quelconque int´rˆt. ee Le script JS sera bientˆt mis ` jour afin de fournir un service de meilleure qualit´. o a e 19
  • 22. Conclusion Les principales nouveaut´s ont ´t´ le chargement de mod`les et la mise en place du reseau en e ee e UDP. Si ces domaines sont encores perfectibles, on regrettera la gestion plus que partielle du tir qui fait que notre jeu n’est malheureusement pas encore jouable. La prochaine soutenance ´tant deja la derni`re, nous devrons poursuivre nos efforts afin d’avoir e e un jeu de bonne qualit´ parfaitement jouable, ce qui n´cessiteras un travail et une collaboration e e exemplaire de chacun des membres. Entre la premi`re et la seconde soutenance les principales nouveaut´s ont ´t´ le debut de la e e ee mise en place du reseau, le chargement des cartes dans le jeu et la cr´ation d’un nouvel ´diteur e e de cartes. Comme vous l’avez constat´ le projet avance bien, et la prochaine soutenance devrais ˆtre marqu´ e e e par le debut de la jouabilit´ de notre jeu (se d´placer ca va bien deux minutes . . .) : mise en e e ¸ place d’un reseau plus evolu´, gestion des tirs, affichage de mod`les. e e ` A la prochaine soutenance ! 20