Présentation :
Boat craft, est un jeu multijoueur en vue de dessus sur Mobile, qui s’inspire de la vague des jeux .io.
Vous prenez le contrôle d’un bateau armé d’un canon que vous pourrez faire évoluer au long de la partie.
Objectif / Motivation :
Faire un jeu massivement multijoueur était une idée qui me tenais à cœurs depuis longtemps. C’est donc un projet prototype pour approfondir mes compétences dans ce domaine et c’est également l’occasion de découvrir de nouvelles librairies/technos. Mon objectif premier était de réaliser un jeu multijoueur stable, apprendre les concepts de la prédiction, réconciliation, load balancing. Mais également faire face au problème de lag, throttle, packet drop élevé…
Et ensuite, éventuellement essayer de faire quelque chose de sympa à jouer Mais je dois avouer que cette partie (améliorer le Gameplay) est assez compliquée et demandera de nombreuses itérations avant d’avoir d’obtenir un jeu marrant et équilibré !
C’est un projet que j’estimais faire en 2 semaines, et au final j’en ai consacré plus du double pour en arriver à cette premiere version de production.
Aspect technique :
J’utilise la librairie bas niveau Enet, dont l’un des points majeurs est de pouvoir bénéficier des avantages du protocole udp (rapidité), tout en garantissant la reception des donnés(reliability), en respectant l’ordre d’envoie/reception, le séquencement/rassemblement des packets, et ainsi que de nombreux autres avantages… Je compresse/décompresse les packets avec Zlib (ce qui me donne ~30% de réduction de bande passantes). Le client mobile iOS/Android utilise C++/Opengl ES 2.0 ainsi Firebase pour le coté analytique (mesurer l’acquisition, les cohortes démographiques, le temps d’utilisation du jeu, les crashs…). Et pour ce qui est du back end, j’ai un masterServer et N gameServer, développés en C++ avec Enet et Sqlite3 (pour stocker les données persistantes comme les scores, noms…). Pour la GUI j’utilise une "immediate mode gui" : Nuklear (dans le même genre que Imgui ). L’ "immediate mode gui" donne l’avantage de pouvoir réaliser des interfaces graphiques très rapidement, au coup de performances en comparaisons des "Retained mode"
Pour ce qui est de la location ma configuration est la suivante :
- Le masterServer : 1 Vps chez OVH
- Les gameServers : 2 serveurs dédiés chez Kimsufi localisés 1 en Canada et l’autre en France. Et 1 instance chez Amazon EC2
Le gameServer n’est pas coûteux en performances (en partie car il est actuellement configuré à 10 tick, soit 10 rafraîchissement par seconde, ce qui semble être suffisant pour un jeu mobile) Je peux aisément héberger 10 gameServers (de 50 place chacun) par serveur dédié.
Disponibilité :
Prochaine mise à jour :
- Ajouter un tchat
- Régler un problème d’interpolation coté client (jitter)
- Ajouter plus de Canons/skins
- Équilibrer les armes et autres stats
- Prendre en compte le ping de l’utilisateur pour le Load balancing
Tous retours/questions/avis sur le jeu sont les bienvenus !