Dust of Adventure: jeu multijoueurs en ligne (BGE)

Une ver­sion US de l’article a été rédigée pour Blender­Na­tion, suite à leur demande.

Dust of Adven­ture (anci­en­nement “Project Glob­al”) est le dernier pro­jet d’Extend Stu­dios, une petit stu­dio “virtuel” créé par 4 ado­les­cents alle­mands, mais qui tra­vail­lent sur un jeu bien réel !

Présentation du jeu

Dust of Adven­ture est un jeu mul­ti­joueurs basé sur Blender Game Engine et qui est aujourd’hui en phase alpha. Un groupe de qua­tre pas­sion­nés tra­vail­lent sur le pro­jet: Jan Thieß Brock­mann (Music, Ani­ma­tion, Pro­gram­ing), Niklas Ravns­borg-Gjert­sen (Design, Mar­ket­ing), Moritz Brück­n­er (Music, Mod­el­ling) et Richard Keil (Pro­gram­ing, Tex­tur­ing, Ani­ma­tion).

Le but du jeu est de sur­vivre dans un désert — seule­ment avec une arme à feu. Regardez cette vidéo, après on par­le tech­nique.

Au cœur de la technique

Toute la mod­éli­sa­tion a été réal­isée avec Blender, et le moteur du jeu est le Game Engine de Blender. GIMP (GNU Image Manip­u­la­tion Pro­gram) a été util­isé pour les tex­tures et la musique a été com­posée sous Sam­pli­tude Music Stu­dio.

Ce qui dis­tingue ce pro­jet d’un autre c’est la volon­té de faire du mul­ti­joueurs.

Jouer en mul­ti­joueur sur le réseau avec le Blender Game Engine est en pra­tique pos­si­ble. J’ai d’ailleurs don­né les clés et les prin­ci­paux scripts dans mon livre sur ce moteur.

Toute­fois, le vol­ume de don­nées à échang­er doit rester faible, ce qui implique que le nom­bre de joueurs ne soit pas non plus trop élevé. Lorsqu’il s’agit de met­tre en place un sys­tème de «chat», le vol­ume des don­nées n’est pas con­séquent et on peut syn­chro­nis­er plusieurs cen­taines d’utilisateurs. L’aspect «temps-réel» n’est d’ailleurs pas très impor­tant.

Mais lorsqu’il s’agit d’un monde 3D avec un nom­bre d’objets en mou­ve­ment impor­tant et des règles de physique com­plex­es, on assiste à une explo­sion du vol­ume d’échange de don­nées !

Les MMO font par­ticiper un très grand nom­bre de joueurs simul­tané­ment. Dans le terme «MMO», il y a la notion de «Mas­sive», qui sig­ni­fie que le nom­bre d’utilisateurs est très impor­tant. Des jeux comme «World of War­craft» pos­sè­dent des serveurs où plusieurs mil­liers d’utilisateurs sont con­nec­tés. Inutile de vous dire que vous n’atteindrez pas ce résul­tat en python sous Blender. Il sem­ble aujourd’hui hors de portée de réalis­er un MMORPG de type «War­craft» sous Blender.

10478415_735118589881657_3849018536854944505_oLorsqu’on souhaite jouer en réseau, il est néces­saire de pou­voir créer un «univers» com­mun dans lequel les actions des uns et des autres sont pris­es en compte. Le mod­èle le plus sim­ple est celui du  «Maître» (serveur) qui gère toute la physique du monde, la logique de jeu et dis­patche les infor­ma­tions aux dif­férents «Esclaves» (clients). Notons qu’une par­tie à deux joueurs peut égale­ment se faire avec un poste «Maître» et un poste «Esclave».

Blender n’est pas conçu pour fonc­tion­ner en mode «mul­ti­joueur» par le réseau. Il existe toute­fois des ten­ta­tives plus ou moins timides pour syn­chro­nis­er des objets au tra­vers du réseau. La plus avancée est prob­a­ble­ment celle d’Angus Hol­lands (Agoose77 sur Blender­Artists). Un pre­mier fil de dis­cus­sion con­sacré peut être trou­vé à l’adresse suiv­ante. Il s’agit d’un addon et d’une librairie min­i­mal­iste, mais qui per­met de créer quelques jeux sim­ples.

Un peu plus dans la technique ?

Un sock­et est un canal de com­mu­ni­ca­tion qu’on ouvre entre 2 machines pour faire tran­siter des infor­ma­tions. Ce canal est iden­ti­fié par un numéro qui est le port. La machine est iden­ti­fiée par une adresse (l’adresse IP). Un client se con­necte à un serveur en util­isant un canal, et un serveur com­mu­nique avec ses x clients par x canaux. La façon dont la com­mu­ni­ca­tion se réalise est appelée un pro­to­cole: c’est une «con­ven­tion de lan­gage» pour que la dis­cus­sion soit bien com­prise des deux cotés. Dans le cadre d’un jeu réseau, on dis­tingue deux types de sock­ets: UDP et TCP. TCP encap­sule UDP en lui ajoutant un con­trôle de bonne récep­tion. UDP est donc plus rapi­de, mais ce qui est envoyé n’est peut-être pas reçu ou pas cor­recte­ment. Quand la vitesse prime sur la qual­ité des don­nées, on s’oriente donc vers UDP.

Le Mul­ti­cast per­met de dif­fuser et col­lecter des don­nées entre tous les con­nec­tés. Il per­met à des clients et des serveurs de se con­necter en util­isant une même adresse ip et un même port: la plu­part des rou­teurs sup­por­t­ent ce sys­tème. En IPV4, les adress­es entre 224.0.0.9 et 224.0.0.255 sont réservées au Mul­ti­cast. Toute­fois, ce n’est util­is­able que sur un réseau local.

Le script d’échange de don­nées sous python n’est pas dif­fi­cile à com­pren­dre, mais dès que l’on souhaite obtenir quelque chose de plus opti­misé, le code aug­mente très rapi­de­ment.

Je n’ai pas mise le nez dans le code de ce jeu, mais je sup­pose qu’ils ont des soucis avec la par­tie réseau. Déplac­er quelques per­son­nages dans un envi­ron­nement en syn­chro­nisant leur posi­tion, c’est fais­able, je l’ai fait sans trop dif­fi­cultés. Pareil s’il s’agit de tir­er sur enne­mi: mis seule­ment si si c’est celui qui tire qui dit à l’autre qu’il l’a touché ! Si on doit syn­chro­nis­er la physique, là, on ne pour­ra pas se con­tenter d’un sim­ple échange de don­nées avec python sur le réseau, il fau­dra une véri­ta­ble archi­tec­ture de syn­chro­ni­sa­tion via le réseau.

D’ailleurs ils nous con­fient: “Dans la ver­sion 2.0, nous allons faire de grands change­ments. La tâche la plus impor­tante con­siste à réécrire la par­tie réseau. Oui,  cela fonc­tionne mais ce ne est pas vrai­ment exten­si­ble. Nous devons égale­ment amélior­er les per­for­mances du jeu, retra­vailler la musique et les graphismes. En out­re, nous allons inté­gr­er un nou­veau sys­tème d’arme.”

Edit au 30/09/2016: il sem­ble que le pro­jet ait été aban­don­né… les adress­es ne fonc­tion­nent plus.  La dernière ver­sion de leur jeu, ain­si que le code source, pou­vait être téléchargée mais plus main­tenant. Comme je l’ai téléchargée à l’époque (ver­sion 1.0.2), je vous l’upload ici si cela ne dérange per­son­ne. Voilà, c’est dom­mage sinon car le pro­jet dis­parait si per­son­ne ne fait rien. Donc, si quelqu’un veut con­tin­uer le pro­jet, le code source est inclus et vous pou­vez tou­jours con­tac­ter l’équipe.

Il n’y a pas d’âge pour faire des jeux. Blender est une suite d’outils gra­tu­its qui intè­grent un Game Engine facile à pren­dre en main. C’est pourquoi de nom­breux ado­les­cents se tour­nent vers ce moteur.Et puis c’est le seul qui pos­sède un mod­eleur inté­gré aus­si dévelop­pé (Blender). Voici d’ailleurs un excel­lent livre qui vous donne toutes les recettes pour créer un jeu avec ce moteur.

 

 

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.