Dust of Adventure: jeu multijoueurs en ligne (BGE)

Une version US de l’article a été rédigée pour BlenderNation, suite à leur demande.

Dust of Adventure (anciennement “Project Global”) est le dernier projet d’Extend Studios, une petit studio “virtuel” créé par 4 adolescents allemands, mais qui travaillent sur un jeu bien réel !

Présentation du jeu

Dust of Adventure est un jeu multijoueurs basé sur Blender Game Engine et qui est aujourd’hui en phase alpha. Un groupe de quatre passionnés travaillent sur le projet: Jan Thieß Brockmann (Music, Animation, Programing), Niklas Ravnsborg-Gjertsen (Design, Marketing), Moritz Brückner (Music, Modelling) et Richard Keil (Programing, Texturing, Animation).

Le but du jeu est de survivre dans un désert – seulement avec une arme à feu. Regardez cette vidéo, après on parle technique.

Au cœur de la technique

Toute la modélisation a été réalisée avec Blender, et le moteur du jeu est le Game Engine de Blender. GIMP (GNU Image Manipulation Program) a été utilisé pour les textures et la musique a été composée sous Samplitude Music Studio.

Ce qui distingue ce projet d’un autre c’est la volonté de faire du multijoueurs.

Jouer en multijoueur sur le réseau avec le Blender Game Engine est en pratique possible. J’ai d’ailleurs donné les clés et les principaux scripts dans mon livre sur ce moteur.

Toutefois, le volume de données à échanger doit rester faible, ce qui implique que le nombre de joueurs ne soit pas non plus trop élevé. Lorsqu’il s’agit de mettre en place un système de «chat», le volume des données n’est pas conséquent et on peut synchroniser plusieurs centaines d’utilisateurs. L’aspect «temps-réel» n’est d’ailleurs pas très important.

Mais lorsqu’il s’agit d’un monde 3D avec un nombre d’objets en mouvement important et des règles de physique complexes, on assiste à une explosion du volume d’échange de données !

Les MMO font participer un très grand nombre de joueurs simultanément. Dans le terme «MMO», il y a la notion de «Massive», qui signifie que le nombre d’utilisateurs est très important. Des jeux comme «World of Warcraft» possèdent des serveurs où plusieurs milliers d’utilisateurs sont connectés. Inutile de vous dire que vous n’atteindrez pas ce résultat en python sous Blender. Il semble aujourd’hui hors de portée de réaliser un MMORPG de type «Warcraft» sous Blender.

10478415_735118589881657_3849018536854944505_oLorsqu’on souhaite jouer en réseau, il est nécessaire de pouvoir créer un «univers» commun dans lequel les actions des uns et des autres sont prises en compte. Le modèle le plus simple est celui du  «Maître» (serveur) qui gère toute la physique du monde, la logique de jeu et dispatche les informations aux différents «Esclaves» (clients). Notons qu’une partie à deux joueurs peut également se faire avec un poste «Maître» et un poste «Esclave».

Blender n’est pas conçu pour fonctionner en mode «multijoueur» par le réseau. Il existe toutefois des tentatives plus ou moins timides pour synchroniser des objets au travers du réseau. La plus avancée est probablement celle d’Angus Hollands (Agoose77 sur BlenderArtists). Un premier fil de discussion consacré peut être trouvé à l’adresse suivante. Il s’agit d’un addon et d’une librairie minimaliste, mais qui permet de créer quelques jeux simples.

Un peu plus dans la technique ?

Un socket est un canal de communication qu’on ouvre entre 2 machines pour faire transiter des informations. Ce canal est identifié par un numéro qui est le port. La machine est identifiée par une adresse (l’adresse IP). Un client se connecte à un serveur en utilisant un canal, et un serveur communique avec ses x clients par x canaux. La façon dont la communication se réalise est appelée un protocole: c’est une «convention de langage» pour que la discussion soit bien comprise des deux cotés. Dans le cadre d’un jeu réseau, on distingue deux types de sockets: UDP et TCP. TCP encapsule UDP en lui ajoutant un contrôle de bonne réception. UDP est donc plus rapide, mais ce qui est envoyé n’est peut-être pas reçu ou pas correctement. Quand la vitesse prime sur la qualité des données, on s’oriente donc vers UDP.

Le Multicast permet de diffuser et collecter des données entre tous les connectés. Il permet à des clients et des serveurs de se connecter en utilisant une même adresse ip et un même port: la plupart des routeurs supportent ce système. En IPV4, les adresses entre 224.0.0.9 et 224.0.0.255 sont réservées au Multicast. Toutefois, ce n’est utilisable que sur un réseau local.

Le script d’échange de données sous python n’est pas difficile à comprendre, mais dès que l’on souhaite obtenir quelque chose de plus optimisé, le code augmente très rapidement.

Je n’ai pas mise le nez dans le code de ce jeu, mais je suppose qu’ils ont des soucis avec la partie réseau. Déplacer quelques personnages dans un environnement en synchronisant leur position, c’est faisable, je l’ai fait sans trop difficultés. Pareil s’il s’agit de tirer sur ennemi: mis seulement si si c’est celui qui tire qui dit à l’autre qu’il l’a touché ! Si on doit synchroniser la physique, là, on ne pourra pas se contenter d’un simple échange de données avec python sur le réseau, il faudra une véritable architecture de synchronisation via le réseau.

D’ailleurs ils nous confient: “Dans la version 2.0, nous allons faire de grands changements. La tâche la plus importante consiste à réécrire la partie réseau. Oui,  cela fonctionne mais ce ne est pas vraiment extensible. Nous devons également améliorer les performances du jeu, retravailler la musique et les graphismes. En outre, nous allons intégrer un nouveau système d’arme.”

Edit au 30/09/2016: il semble que le projet ait été abandonné… les adresses ne fonctionnent plus.  La dernière version de leur jeu, ainsi que le code source, pouvait être téléchargée mais plus maintenant. Comme je l’ai téléchargée à l’époque (version 1.0.2), je vous l’upload ici si cela ne dérange personne. Voilà, c’est dommage sinon car le projet disparait si personne ne fait rien. Donc, si quelqu’un veut continuer le projet, le code source est inclus et vous pouvez toujours contacter l’équipe.

Il n’y a pas d’âge pour faire des jeux. Blender est une suite d’outils gratuits qui intègrent un Game Engine facile à prendre en main. C’est pourquoi de nombreux adolescents se tournent vers ce moteur.Et puis c’est le seul qui possède un modeleur intégré aussi développé (Blender). Voici d’ailleurs un excellent livre qui vous donne toutes les recettes pour créer un jeu avec ce moteur.

 
 

Ces articles pourraient aussi vous intéresser …