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
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