A downloadable game for Windows, macOS, and Linux

Lors de la découverte du thème de cette jam #19, j'ai tout de suite eu envie de faire un jeu multijoueurs en ligne. Comme c'est quelque chose de très nouveau pour moi, je n'ai pas cherché l'originalité au niveau du gameplay ou des graphismes pour me concentrer sur la seule réalisation : je suis donc parti sur l'implémentation d'un Advance Wars.

Côté client, j'ai choisi le couple Lua/LÖVE parce que c'est la seule technologie de jeu que je maîtrise à ce jour. Côté serveur, j'ai choisi Elixir parce que c'est un langage que j'aime et adapté à ce genre de serveur de jeu . Je reviens sur les aspects techniques plus bas. Comme d'habitude, tout le code est disponible sur GitHub : le client comme le serveur.

Je n'avais jamais travaillé avec les sockets (en l'occurrence TCP) et ça n'a donc pas été facile de mettre le pied à l'étrier. Le processus de développement était assez laborieux puisque je testais avec deux ordinateurs. Je n'ai pu travailler que la dernière semaine de la jam : il y a donc 7 jours de travail acharnés derrière tout ça, à environ 10 heures par jour. Vive les vacances scolaires pour les enseignants !

La mise en production du serveur (sur une serveur dédié Debian que je loue) a été triviale grâce à Distillery. Cet outil crée des exécutables à partir des sources Elixir et qui permettent de lancer le jeu en background, en foreground ou bien en foreground avec une console interactive (pour pouvoir surveiller ce qui se passe, intervenir, se rajouter de l'argent).

Le jeu fonctionne sans base de données : tout est stocké en mémoire le temps de la partie, et la liste des joueurs connectés et des lobbies ouverts est stockée en mémoire pour toute la durée d'exécution du serveur. Elixir permet de lancer des "processus" qui tournent simultanément et attendent des messages. En l'occurrence ici j'en ai 3 : un qui gère les joueurs connectés (il maintient une liste au gré des connexions/déconnexions), un qui gère les lobbies (pareil, il maintient une liste des lobbies ouverts, les ferme quand un joueur quitte ou que la partie pour ce lobby démarre) et enfin un process pour chaque partie lancée, qui reste ouvert jusqu'à la fin de cette partie.

Côté Lua, j'aime toujours la simplicité du langage mais je m'exaspère de la pauvreté de sa librairie standard et de son écosystème. Je pense changer bientôt de techno, sans doute au profit du langage Haxe et de l'un de ses nombreux moteurs.

Le jeu fonctionne essentiellement avec des machine à état : l'app est une machine à états avec un état par écran : l'écran principal avec les joueurs connectés et les parties, l'écran qui affiche la partie en cours et l'écran de cinématique de combat. Chacun de ces écrans est également une machine à états. Et enfin dans la cinématique de combat, le background et chaque unité affichée est une machine à états également ! Cela m'a permis d'organiser assez facilement le déroulement d'un combat (et donc son animation).

Les graphismes sont ceux d'Advance Wars, piochés sur spriters-resource.com. Les quelques effets sonores proviennent de soundbible.com et de Kaamelott pour le cor.

Je vous attends sur le jeu !

Download

Download
not_so_advance_wars-1-4.love 726 kB
Download
not_so_advance_wars-1-4.zip 5 MB
Download
not_so_advance_wars-1-4.app.zip 10 MB

Install instructions

Téléchargez le fichier not_so_advance_wars.zip et extrayez le dossier de l'archive (sur votre bureau par exemple) : vous trouverez à l'intérieur un fichier not_so_advance_wars.exe qu'il faut exécuter.

Leave a comment

Log in with itch.io to leave a comment.