Un RPG tactique au tour par tour à la manière de Dofus, écrit de zéro : client Godot 4 en C# pour Windows, macOS et Linux, règles partagées avec un serveur ASP.NET Core de comptes et de personnages, launcher en Rust.
En coursSprint S45-S60+S64-S219 · 728 points
En bref, sans jargonpour les non-informaticiensLire le résuméRefermer
Ce que c'est
Un jeu vidéo de combat au tour par tour sur un plateau vu de biais, comme Dofus : on crée son personnage, on se promène dans une ville et on parle à ses habitants.
À quoi ça sert
Un vrai jeu à télécharger, avec son programme d'installation, des comptes de joueurs et un serveur, conçu pour grandir : monstres, paysages, puis jeu à plusieurs.
Ce que ça montre
La conduite d'un gros projet de jeu vidéo, de ses règles jusqu'à sa distribution, en C# et en Rust.
Le launcher (Rust, Tauri) connecte le joueur, compare le jeu installé au manifeste du serveur (taille et empreinte SHA-256 de chaque fichier), ne télécharge que ce qui a changé, reprend un téléchargement coupé, vérifie chaque fichier, puis lance le jeu en lui passant le jeton.
Le jeu de bureau (Godot 4, C#) ne fait que dessiner : écran de connexion, village, combat. Tout ce qu'un clic peut faire est dans Rpg.Client, une bibliothèque sans moteur testée par xUnit, que le jeu rejoue lui-même dans la CI (auto-tests).
Rpg.Core porte les règles et les données (sorts, classes, monstres, cartes, village, dialogues) : la même bibliothèque sert au jeu, au serveur et au simulateur, si bien qu'un combat enregistré se rejoue à l'identique partout, sur les trois systèmes.
Le serveur (ASP.NET Core) gère comptes et personnages (JWT, mots de passe hachés, limite d'essais, EF Core et PostgreSQL), valide chaque demande avec les règles de Rpg.Core, et sert les fichiers du jeu au launcher.
Rpg.Sim, le simulateur en ligne de commande, fait jouer l'IA des milliers de fois : c'est lui qui a réglé l'équilibre des classes et des monstres.
Aperçu du combat
Le client de bureau, en Godot 4 et C# : un plateau en losanges vu de biais, des personnages animés (modèles 3D libres de Kenney), et les règles du sprint 45, sans une ligne de règle en plus dans le client.
Vidéo de 36 secondes, sans son, enregistrée par le jeu lui-même : un combat d'entraînement où l'IA joue aussi l'héroïne. Elle avance vers l'orque et le braconnier et les frappe au corps à corps ; les points de vie baissent au-dessus des têtes, le journal à gauche raconte chaque coup, et elle gagne de justesse au sixième tour, à 6 PV sur 60.Le launcher (Rust, Tauri) : il met le jeu à jour tout seul à l'ouverture, fichier par fichier ; « Se connecter » lance le jeu ; le nom et le mot de passe peuvent être mémorisés (le mot de passe dans le gestionnaire d'identifiants du système). Paquets Windows, macOS et Linux produits par la CI, non signés.Après le launcher, comme dans les jeux du genre : le choix du serveur (direct tant qu'il n'y en a qu'un, Osméria), puis les personnages en cartes (portrait, classe, niveau), jusqu'à cinq par compte. Comptes et personnages vivent sur le serveur (ASP.NET Core, PostgreSQL).Créer son personnage : classe (avec ses vingt sorts, par niveau), femme ou homme puis l'une des six apparences, couleurs de tenue, de cheveux et de peau, taille et carrure, sur les modèles libres de Kenney ; chaque pastille montre la couleur qu'elle donnera à ce modèle. Le serveur vérifie chaque valeur.La ville d'accueil : on s'y promène au clic, on parle à trois habitants (dialogues à choix, décrits en données), la porte est mène à un combat d'entraînement, la route de l'ouest au Bois de Clairval ; le serveur garde la position du personnage.Une zone de niveau 3, deux fois plus grande que le village : la caméra suit le joueur, zoome à la molette et tourne d'un quart avec Q et E ; l'anneau vert mène à la zone suivante, et le serveur garde la zone et la case où l'on se tient.La carte du monde (touche M) : chaque zone à sa place, avec son niveau, reliée à ses voisines ; les zones et leurs liens sont décrits en données et vérifiés par les tests.La fiche de caractéristiques : Vitalité, Terre, Eau, Feu, Air, chacune à sa couleur ; les points investis et ceux de l'équipement, ce que chaque total donne (10 points = +2 dégâts dans l'élément, et rien d'autre) ; une valeur à taper, MIN, MAX, et tout reprendre à tout moment.Les sorts : les vingt-quatre de la classe, quatre par élément et huit neutres, chacun avec son icône sur la couleur de son élément, verrouillés jusqu'à leur niveau ; la fiche donne les dégâts normaux et critiques avec les caractéristiques et l'équipement du personnage, et ce que donne le rang suivant.S'équiper : le personnage entouré de ses quatorze emplacements, l'inventaire en onglets et en grille, une recherche ; les icônes sont dessinées par le jeu (la forme dit l'emplacement, la couleur la caractéristique). Inventaire d'exemple d'une Garde de niveau 10 ; en jeu, le serveur garde ce que chaque combat laisse.Se déplacer : les cases atteignables, le chemin, et le deck de douze sorts en deux rangées (touches 1 à 6 et Ctrl+1 à 6).Viser : la portée du sort, la ligne de vue, la cible et les dégâts prévus, critiques compris ; en haut, la frise des prochains tours.
Captures faites par le jeu lui-même (option --screenshot), dans un écran virtuel, avec le rendu OpenGL logiciel de Mesa.
Icônes des sorts : game-icons.net, sous licence CC BY 3.0, par Lorc, Delapouite et Sbed (le fond retiré, posées sur la couleur de l'élément).
Pour le lancer chez vous (SDK .NET 10 et Godot 4.7 .NET) :
cd projects/rpg
dotnet run --project src/Rpg.Sim -- --simulate 100 --lang fr # des combats de l'IA, dans le terminal
docker compose up --build rpg-api # le serveur des comptes et des personnages, sur le port 8002
dotnet build godot/Rpg.Godot.csproj
godot --path godot -- --lang fr # le jeu (« Jouer hors ligne » sans serveur)
Exécutables prêts à lancer (Windows, macOS, Linux, non signés), produits par la CI, qui y joue un combat entier, gardés 14 jours : artefacts du workflow rpg
Technologies
Godot 4
C#
.NET
ASP.NET Core
EF Core
PostgreSQL
JWT
Rust
Tauri
xUnit
Docker
Qui fait quoi
Godot 4
Le client de bureau : cartes isométriques, combat, création de personnage, ville et PNJ, exporté pour Windows, Linux et macOS par la CI.
C#
Les règles du jeu (grille, points d'action et de mouvement, ligne de vue, sorts, IA) dans une bibliothèque déterministe, partagée par le client et le serveur.
.NET
La plateforme commune du client, des règles et du serveur.
ASP.NET Core
Le serveur des comptes et des personnages, qui valide chaque personnage créé.
EF Core
L'accès à la base et ses migrations.
PostgreSQL
Les comptes, les personnages et leur progression.
JWT
Les jetons de connexion, partagés par le launcher et le jeu.
Rust
Le launcher : connexion, vérification et téléchargement des seuls fichiers modifiés.
Tauri
L'interface du launcher et ses paquets pour les trois systèmes.
xUnit
Les tests des règles (chemins, ligne de vue, combats rejoués) et du serveur, sur une vraie base PostgreSQL.