Portraits : Camille Chafer d'Ankama
<Francis> Salut Camille, Ankama c'est quoi ? <Kam> Ankama, à
la base, ce sont 3 potes qui bossaient dans le Web et qui en avaient marre de ne faire que ça.
<Francis> Bonne complémentarité dés le départ ! <Kam> Ouaip. On bossait ensemble dans la boîte précédente, on s'entendait bien, donc on s'est lancé en mai 2001 près de Lille (tout la haut, avec les pingouins). <Francis> Aujourd'hui vous êtes combien ? <Kam> Aujourd'hui, Ankama et Ankama-Studio font vivre 10 personnes (plus quelques stagiaires). <Francis> Dix personnes à plein temps, ou est-ce que vous travaillez avec des freelances ? <Kam> Non non,
vraiment 10 CDI. Dans les 10, on retrouve : <Francis> Aujourd'hui quels sont vos revenus, de quoi vivez vous, est-ce que Ankama rapporte de l'argent et quels sont les pôles qui rapportent ? <Kam> En fait, Ankama et Ankama-Studio sont la même société. La partie Ankama réalise des sites institutionnels ou de commerce électronique, et finance par la même occasion la partie Ankama-Studio qui développe Dofus avec à terme l'envie de rentabiliser Dofus, mais pour l'instant c'est surtout un beau pari et une grosse satisfaction :) Donc pour répondre plus précisément a ta question, les pôles qui rapportent sont la création de sites (pour des clients tels que le conseil régional du nord pas de calais, ou la sous traitance (pour des sociétés comme EDF ou Atos Origin) <Francis> Est-ce que l'on peut donc dire que pour l'instant Ankama-Studio est totalement financé par Ankama ? <Kam> Ankama-Studio est financé à 90% par Ankama, le reste de la production Ankama-Studio étant des événementiels sous formes de jeux ou d'animations flash. <Francis> Des investisseurs sinon pour l'une des deux boites ? <Kam> Ouaip,
mais si je t'en parle, ils devront te tuer, par la suite. <Francis> Est-ce que Dofus se doit d'être rentable (investissements à amortir) à l'avenir ou est-ce une pure vitrine technologique ? <Kam> Un peu les deux. C'est avant tout une vitrine technologique, mais il est évident qu'Ankama n'est pas une oeuvre de charité. En plus de la vitrine et de l'envie de bosser sur des jeux, c'est évident qu'à terme le but c'est de rentabiliser les investissements ou plutôt, le but premier est de ne pas perdre d'argent avec Dofus. Pour ce qui est d'en gagner, on verra après :)
<Francis> Avez-vous defini une stratégie particulière pour récupérer votre mise ? <Kam> Ouaip. Avec business plan, prévisions et tout et tout. Comme les pros, quoi :) En gros, Dofus sera payant à terme. Par contre, on va se démarquer des MMORPG classiques style DAoC. <Francis> Sous quelle forme si ce n'est pas indiscret ? <Kam> Ici, le but n'est pas de faire payer 15€ par mois plus un CD-ROM à 60euros. Déjà, il n'y aura pas de CD initial à acheter, et ensuite l'abonnement sera à un prix ridicule : quelques euros par mois. <Francis> Est-ce que le pari n'est pas trop osé, on entend souvent : "Payer pour un jeu flash ? ... pfff" :) <Kam> "payer pour un jeu flash pfff" -> Voila quelqu'un qui n'a pas encore joué à Dofus :)) De notre côté, nous préférons ne pas trop insister sur le fait qu'il s'agisse de flash ou alors uniquement pour en montrer les bons côtés. Du bon côté des choses, Flash signifie : portabilité, facilité d'installation, légèreté. Du mauvais côté des choses, Flash signifie généralement graphismes affreux ou minimalistes et problèmes de lenteur. Avec Dofus, ce n'est pas le cas. En tout cas, pour l'instant :) Celui qui joue a Dofus doit oublier. L'idée générale que l'on se fait des jeux flash : une tapette géante et l'on doit cliquer vite sur la tête à Bilou. Ici, ce n'est pas un Hack & Slash, ou un 'petit jeu', mais un véritable jeu de rôle multijoueur en ligne. Et pour ceux qui sont sceptiques, il y aura toujours une version gratuite de Dofus pour les convaincre ! <Francis> Flash manque-t-il de crédibilité au niveau ludique ou est-ce que les choses vont en s'arrangeant ? <Kam> Non, flash
manque ENORMEMENT de crédibilité. Mais la faute ne revient
pas aux internautes. <Francis> Pourquoi Flash ? Avez vous hésité pour l'utilisation d'une autre technnologie ou le choix s'est-il imposé de lui-même ? <Kam> Non, on
a pas hésité. Il n'y a que des raisons pour Flash
<Francis> Certes ! Dofus est-il l'unique projet d'Ankama-Studio à ce jour et quel sera l'après Dofus ? <Kam> Hum...
Dofus est le principal projet à ce jour. Des idées, on n'en
manque pas. On pourrait citer par Exemple Moon, un jeu de plateforme sur
GBA. Mais tout ceci n'est qu'à l'état de vague projet. Pour
l'instant, on a assez de travail avec Dofus et nos clients. Surtout que
si vous êtes suffisamment nombreux à nous suivre sur Dofus,
il y aura continuellement du travail pour ajoute des cartes, des quêtes,
des monstres, des concours, ... <Francis> Donc Moon n'est qu'un vague projet, aucun éditeur en vue ? <Kam> Non, pas d'éditeur en vue. C'est un projet qui nous tient à coeur, qui verra le jour d'une manière ou d'une autre (au pire, en flash), mais pour l'instant, on n'en est pas encore à chercher un éditeur. Pour l'instant, c'est Dofus, Dofus et Dofus. <Francis> Pourrais-tu comptabiliser approximativement combien d'heures par mois vous travaillez sur Dofus ? <Kam> Difficile à dire. On y travaille entre deux clients, lorsque l'on a le temps. Pour faire une approximation à la louche, je peux dire qu'on travaille dessus depuis 2 ans, à 5 en moyenne mais uniquement quand on a le temps :) Le problème des projets qui se font au coup par coup, c'est qu'on les reprend sans cesse. Depuis 2 ans, il y a eu 3 versions du serveur, et environ 2 millions de versions différentes des graphs. <Francis> Dans ces cinq personnes, qui fait quoi ? <Kam> Dans les 5 personnes : Tot (graphisme), Krys (animateur), Bo (dev), Fred, aka Greu (dev), Arno et Xav (graph), et moi (dev). Ca fait plus de 5, mais comme je le disais, c'est une moyenne. <Francis> je vais m'intéresser un peu plus aux développeurs si tu n'y vois aucun inconvénient. Quels sont les cursus et compétences de chacun ? <Kam> Diablo
II, Baldur, Final Fantasy Tactics et Secret of Mana. Plus sérieusement,
côté développement, on vient tous de la même
école : l'ENIC. En gros, une école en télécommunications.
<Francis> Quelles sont les spécificités de chacun ? <Kam> Alors
on a Boris (Bo pour les intimes) qui s'occupe de toute la partie cliente
en Flash. <Francis> Est-ce que les rôles sont ouverts, ou chacun se cantonne vraiment à sa partie ? En résumé, êtes vous polyvalents ? <Kam> Lol Dans
une petite structure comme la notre, les rôles sont extrêmement
ouverts. On a tous un peu travaillé sur l'interface, tous un peu
travaillé sur l'éditeur de sort, tous un peu travaillé
sur la base de données ... <Francis> Parlons du serveur, c'est quoi ? Serveur Java xml socket j'imagine ? :) <Kam> Perdu. C'est bien du java, ce sont bien des socket, mais ce n'est pas du XML qui passe dessus. <Francis> Un protocole fait maison ? <Kam> En fait, nous avons développé notre propre protocole pour dialoguer entre le serveur et le client. Bon, protocole, c'est un bien grand mot, mais en tout cas ca nous permet de gagner énormément en bande passante utilisée, comparativement à un serveur XML classique.
<Francis> Pourquoi avoir privilégié le développement d'un serveur de A à Z plutôt que l'utilisation d'un moteur déjà existant ? <Kam> Pour plusieurs raisons. Certains d'entre eux (style celui de macromedia), étaient trop coûteux. D'autres (style Unity2, découvert récemment) étaient très puissants, mais pas adaptés. <Francis> C'est vrai que flashcom, c'est une grosse baffe pour le porte monnaie ^^ <Kam> Dans notre
cas, nous avons désormais un serveur qui est parfaitement adapté
à Dofus. Nous avons pu coder par exemple des accès aux bases
de données en dur, ce qui accélère énormément
par rapport à un moteur existant qui utilise des tonnes de scripts
interprétés. <Francis> Est-ce que votre serveur est générique, ou est-il spécialisé pour dialoguer uniquement avec flash, ou carrément spécialisé pour le gameplay de Dofus ? <Kam> Yep. A la base, une bonne partie des classes java sont prévues pour être réutilisables pour un autre jeu, mais la dessus viennent se greffer tout plein de bouts de codes propriétaires signés Dofus. <Francis> Pas d'objectifs en vue, genre écrire une api et dealer le serveur à des boites tiers ... ? <Kam> Le dealer, oui et non. Ou alors, faudra raquer !!! Non, plus sérieusement, il ne serait pas présentable en l'état. Il faudrait un gros travail de commentaires et réécriture pour en faire quelque chose d'exploitable facilement pour un jeu différent. <Francis> Dans quelle proportion faites-vous du code propre et réutilisable, et dans quelle autre spécialisez-vous le code pour un gain de rapidité ou de performances ? <Kam> Le choix
n'est pas vraiment code propre / performances. <Francis> Utilisez-vous des outils particuliers pour bosser en équipe ? Tests unitaires, CVS, Project ? <Kam> Pour ce
qui est des tests unitaires, non. C'est pas que c'est pas bien, mais il
y a plusieurs raisons : J'ai découvert l'XP trop tard, j'ai du
mal à combiner Unit Tests et classes ne fonctionnant que grâce
à un protocole réseau. Ceci dit, je suis bien conscient
que ce n'est pas une excuse. Pour la prochaine version du serveur, pou
pour la V2 de Dofus, ça sera fait :)
<Francis> J'imagine aisément :) <Kam> En fait,
pour ce qui est des tests, on est plutôt en train de réfléchir
à la possibilité de se développer un petit outil
de test de protocole. Mais bon, ça aussi, ça fait partie
des projets. <Francis> Au sujet du serveur, quelles sont ses caractéristiques (à part son protocole propriétaire) ? Sérialisation d'objets flash, prise en charge de la DB ...? <Kam> En fait, il gère en natif tout le côté RolePlay du jeu. Par l'intermédiaire de la DB, il gère aussi bien le pathFinding que l'IA ou encore les drops aléatoires d'items. <Francis> Tu veux dire que les clients flash ne sont que des view/controller du moteur du jeu ? <Kam> Exactement.
Le flash est un simple terminal qui ne fait que recevoir des informations
de la part du serveur. La raison est assez simple : Il est extrêmement
facile de décompiler un fichier Flash. Il nous était donc
interdit de mettre du code 'sensible' dans le client. Par conséquent,
Flash se contente à 95% de faire de l'affichage. <Francis> Donc full sync garantie pour le pathfinding, collisions, combats ... ? <Kam> Côté synchro, oui et non. La synchronisation est garantie tant qu'il y a risque de bug ou de triche. Par contre, qui dit synchro dit temps de latence un peu plus long avant l'exécutiond'une action. Dans le village, par exemple, ou les collisions ne sont pas 'très' gênantes, il est possible que quelques unes surviennent de temps en temps. <Francis> Comment gérez-vous les déplacements des joueurs à l'intérieur du village par exemple ? <Kam> En
fait, le pathfinding est calculé au moment ou l'on clique et les
vérifications de collisions se font lorsque le joueur arrive sur
une case (le jeu est en 3D iso, donc basé sur un quadrillage).
Il est donc possible qu'une collision survienne si deux personnes rentrent
ou sortent d'une même case exactement au même moment. Ceci
vient d'une limitation de Flash : <Francis> Pour le pathfinding, l’algorithme est fait maison ? Et qu'avez-vous privilégié, performances ou qualité ? <Kam> L'algorithme
est à moitié fait maison. Il s'agit en fait du A*, l'un
des algorithmes les plus utilisés dans les jeux basés sur
des quadrillages. Je disais à moitié fait maison car on
a du l'adapter un peu à notre sauce pour qu'il soit rapide sous
Flash. Il a la particularité de ne pas toujours fournir le meilleur
chemin, mais d'avoir un excellent rapport pertinence/temps. Au final,
sur une carte qui fait plus de 500 cellules, le calcul du chemin n'est
pas perceptible (à moins d'avoir une brouette comme PC). <Francis> Est-ce que vous gérez les obstacles en cours de route ? <Kam> Ouaip. Pas de manière optimale, mais c'est géré. En fait, lorsqu'un joueur rencontre un obstacle lors d'un déplacement, alors que le chemin aurait du être libre, il recalcule tout simplement un chemin possible depuis sa position. C'est un peu bourrin, mais ça fonctionne :) <Francis> Comment gérez-vous la fluidité des déplacements, c'est du case à case avec le serveur ou vous faites des queues ? <Kam> Le
client envoie un ordre de déplacement au serveur, et ACKise (ça
se dit, ça ?) de temps à autre sa position. A la question
'Pourquoi ne pas ACKiser chaque position ?' Parce que ça serait
trop long en terme de temps de latence et parce que ça surchargerait
le réseau. En gros, le client valide chaque changement de direction
lors d'un déplacement. Ensuite, les déplacements des autres
joueurs sont estimés en fonction de la vitesse du PC et de la position
de départ et d'arrivée. Et c'est la raison pour laquelle
des collisions peuvent survenir : dans un monde parfait, tous les clients
auraient la même fluidité, mais dans la réalité,
c’est loin d’être le cas. Il suffit qu'il prenne l'envie
à ton Outlook Express d'aller lire ses mails pendant que tu joues,
tu perds 1 frame/seconde sur ton application flash, et toutes les animations
sont décalées. <Francis> Clair, d'ailleurs je suis étonné que vous vous soyez donnés autant de mal du côté du village, est-ce qu'un truc avec moins de synchro n'aurait pas été suffisant ? ^^ <Kam> Ben pour
être honnête, ce n'était pas prévu, au début,
puis un jour, Tot, le grand manitou, nous a dit : 'Ben alors, pourquoi
on peut pas bouger à 30 en même temps, dans le village ?'
Alors, forcément, il a fallu qu'on trouve un truc pour pouvoir
le faire :) <Francis> Donc pas de grand plan papier, fini, établi et scellé ? ^^ <Kam>
Si si, mais on s'y tient pas. On en tout cas, pas toujours LOL. Disons
que le plan papier contient ce que l'on fera au minimum. <Francis> Pour le moteur graphique, si j'ai bien compris, il s'agit d'un tilegame isométrique ? <Kam> Yep, à 100%. Nos graphistes nous ont fait plusieurs centaines de tiles différentes et nous avons développé à côté un éditeur qui nous permet de créer dynamiquement des cartes en deux temps trois mouvements. Seul gros bitmap qui n'est donc pas une tile : un graph qui représente de l'herbe, de l'herbe et encore de l'herbe.
<Kam>
En galérant. En fait, le problème est qu'il est quasiment
impossible de faire de la 3d iso et de ne pas avoir de problème
de profondeur. Surtout quand un perso se déplace, puisque par moment
il est au dessus des arbres, et l'instant d'après il passe en dessous.
En fait, la solution nous est venue en regardant comment avaient fait
d’autres studios pour des jeux références. En regardant
Starcraft, par exemple, on s'est vite rendu compte qu'il était
impossible de passer juste derrière un dénivelé.
Et c'est là la solution pour ceux qui veulent faire un moteur 3D
iso et ne pas se prendre la tête avec les profondeurs et les élévations
de terrain : se débrouiller pour que chaque case sur laquelle votre
personnage peut se déplacer soit entièrement visible. Une
fois ça trouvé, il suffisait de jouer avec les commandes
de profondeur inclues de base dans Flash et le tour était joué. <Kam> Déjà,
c'est un éditeur entièrement fait en Flash, qui génère
un format propriétaire. En gros, pour chaque case il sauve une
description codée au niveau du bit. Quand je dis description, ça
comporte : la tile de sol, la tile de décors, la tile de décors
supérieur, l'objet, les flips éventuels horizontaux ou verticaux,
les rotations éventuelles, l'élévation, ... Tout
ça est sauvé dans une base de données au format texte
et décrit la carte de manière graphique uniquement. Pour
donner une idée, une carte du jeu prend environ 4ko. <Francis> Les actions sont-elles géographiques ou purement associées aux objets ? <Kam> Les deux mon colonel. Par exemple, si l'on veut qu'un coffre s'ouvre quand on clique dessus, l'action sera mise sur l'objet coffre. De cette façon, il sera mis en surbrillance quand on passera la souris dessus. Par contre, si on pose un piège (par essence invisible), ça sera la cellule qui déclenchera l'action. En fait, pour chaque action on sauve l'effet à exécuter, et un id qui peut être soit une position de cellule, soit un ID d'objet. <Francis> Si j'ai bien compris l'agencement graphique de la map est sauvé séparément dans un champ de la table au format texte et les actions dans un autre champ de la table, mais à quel format ? <Kam> Toujours au format texte, mais encodé de manière bizarre, plus ou moins au format Base64. <Francis> Base64 pour gagner du poids j'imagine ? <Kam> Heu non, pas vraiment. C'est surtout parce que l'objet XMLSocket de flash ne permet pas d'envoyer tout ce que l’on veut comme caractère. A la base, il est prévu pour envoyer du texte, et non des caractères comme par exemple les codes ascii de 0 à 32. Conclusion, sur les 255 caractères que contient la table ASCII, seuls 64 sont réellement utilisables sur tous les systèmes. Il faut donc encoder toutes les valeurs sur 6 bits (2^6=64), ce qui permet effectivement de gagner un peu de place, mais beaucoup moins que si l’on mettait directement des données binaires. <Francis> Et c'est pas trop galère de parser tout cela à Flash, vous avez optimisé l'envoi par blocs ? <Kam> Yep. On essaie d'envoyer au maximum des informations de taille fixe et supérieure à quelques dizaines d'octets. Cela évite déjà de perdre une bande passante énorme en overhead, et surtout ça simplifie le décodage et augmente les performances côté flash. <Francis> Comment gérez vous les éléments graphiques ? <Kam> Nous
avons utilisé 2 stratégies :) La première pour les
tiles : Toutes dans un seul et unique fichier. Ensuite, grâce à
une savante utilisation des allowDomain, on fait des attachMovie quand
même sur la librairie chargée. En fait, le truc c'est d'appeler
une méthode dans le swf chargé qui elle fait l'attachMovie.
Et là, ça fonctionne.
<Francis> Vous en êtes à combien au niveau du poids pour le client ? <Kam> Pour le client uniquement ? 100 et quelques kilos, je pense, mais il y a des images dedans. En code pur, quelques dizaines de ko. Pour tout le jeu, avec les musiques et tous les graphs : Euh...environ 4Mo. Mais c'est vraiment du à peu près : Pour savoir, faudrait que j'enlève tous les FLA du répertoire sources :) <Francis> Le code Flash est structuré comment ? Tout dans un fla ? En fichiers .as séparés ? Librairies de classes ? AS1 j'imagine ? <Kam> Ben en fait, le code a été commencé il y a 2 ans. Donc en flash 5. Puis entre temps, il y a eu Flash 6... Donc prototypes et tout et tout. Et maintenant, Flash 7. Conclusion, tout est en AS1. Par contre, on a séparé le code dans plein d'.as différents, et désormais on code en Flash 7 (mais on compile en AS1). <Francis> Ca donne quoi au résultat ? Orienté objet ? :) <Kam> Oui oui, tout est OO. Ca fait longtemps qu'on a enlevé tout ce qui n'était pas objet. Seulement, avec Flash7, on a un peu plus de rigueur au niveau des déclarations et surtout, on a dû arrêter toutes nos bidouilles avec les prototypes. Bidouilles bien pratiques, mais bon, si on peut plus, on peut plus :) <Francis> Est-ce que le moteur graphique de Dofus est assez bien encapsulé pour donner naissance à d'autres jeux ou est-il trop spécifique comme le serveur ? <Kam> En
théorie, il pourrait servir à un autre jeu assez facilement,
MAIS.... <Francis> Donc il ne s'agit en aucun cas d'un moteur 3d iso générique ? <Kam> Non non. Certains objets de base pourraient être réutilisées (A-Star, Séquenceur d'actions, Object Map qui calcule les positions sur la carte en 3D iso, ...), mais dans l'ensemble, non, ce n'est pas un moteur générique. <Francis> Sinon FlashMx2004, t'en penses quoi ? <Kam> Ah, en fait, FlashMx2004, c'est ce que j'appelle Flash 7 et c'est plutôt bien :) C'est légèrement plus rapide (enfin, pas l'AS2, mais le plugin), c'est plus propre, ça permet d'avoir des fichiers externes, et ça, ça déchire sa mère :) <Francis> AS2, tes premières impressions ? <Kam> Alors
le côté lèche-cul pour Macromedia : Ultime. Plus propre,
plus rigoureux. <Francis> Dofus porté en AS2 bientôt ? <Kam> En fait, tous les nouveaux développements se font en AS2. Mais pour l'utilisateur, ça ne changera rien. Il ne faut pas s'attendre à des miracles grâce au passage en AS2 :) <Francis> Sinon pour le gameplay, peux-tu me résumer vite fait ce que vous prévoyez dans l'année qui vient, un scoop ? ^^ <Kam> Héhé,
moi je veux bien, mais ça ne va pas vraiment être un scoop.
Il est prévu (et a été annoncé) de sortir
tout ce qui est quêtes, monstres et IA en mars-avril 2004. Ensuite,
tout au long de l'année, on rajoutera des actions réalisables
dans le village (aller acheter sa baguette, espionner la voisine qui se
lave, ....)
<Francis> Pour conclure, on gagne bien sa vie en tant que développeur Flash chez Ankama (enfin si c'est pas indiscret) ? <Kam> En tant que créateur, je pourrais gagner plus ailleurs. Alors si on compte que le côté financier, il y a mieux, mais il y a bien pire. Par contre, si on regarde le boulot que l'on a à faire, alors oui, on gagne bien sa vie (oh là putain, c'est beau ce que j'écris !!!!) <Francis> Merci Kam, c'était vraiment super sympa :) <Kam> Ben
y a pas de quoi :)
|